{"version":3,"file":"sitna.js","mappings":"uDAAA,IAAIA,EAAM,CACT,gBAAiB,KACjB,mBAAoB,KACpB,oBAAqB,KACrB,uBAAwB,KACxB,iBAAkB,KAClB,oBAAqB,KACrB,UAAW,KACX,aAAc,KACd,cAAe,KACf,iBAAkB,KAClB,qBAAsB,KACtB,wBAAyB,KACzB,gBAAiB,KACjB,mBAAoB,KACpB,eAAgB,KAChB,kBAAmB,KACnB,aAAc,IACd,gBAAiB,IACjB,SAAU,KACV,YAAa,KACb,sBAAuB,KACvB,yBAA0B,KAC1B,SAAU,KACV,YAAa,KACb,cAAe,KACf,iBAAkB,KAClB,gBAAiB,KACjB,mBAAoB,KACpB,0BAA2B,KAC3B,6BAA8B,KAC9B,gBAAiB,KACjB,mBAAoB,KACpB,uBAAwB,KACxB,0BAA2B,KAC3B,kBAAmB,KACnB,qBAAsB,KACtB,iBAAkB,KAClB,oBAAqB,KACrB,aAAc,KACd,gBAAiB,KACjB,eAAgB,KAChB,kBAAmB,KACnB,eAAgB,IAChB,kBAAmB,IACnB,gBAAiB,KACjB,mBAAoB,KACpB,wBAAyB,KACzB,2BAA4B,KAC5B,qBAAsB,KACtB,wBAAyB,KACzB,iBAAkB,KAClB,oBAAqB,KACrB,WAAY,KACZ,cAAe,KACf,oBAAqB,KACrB,uBAAwB,KACxB,YAAa,KACb,eAAgB,KAChB,qBAAsB,KACtB,wBAAyB,KACzB,gBAAiB,KACjB,mBAAoB,KACpB,YAAa,KACb,eAAgB,KAChB,YAAa,KACb,eAAgB,KAChB,gBAAiB,IACjB,mBAAoB,IACpB,WAAY,KACZ,cAAe,KACf,qBAAsB,KACtB,wBAAyB,KACzB,WAAY,KACZ,cAAe,KACf,eAAgB,KAChB,kBAAmB,KACnB,oBAAqB,KACrB,uBAAwB,KACxB,gBAAiB,KACjB,mBAAoB,KACpB,uBAAwB,KACxB,0BAA2B,KAC3B,UAAW,KACX,aAAc,KACd,UAAW,IACX,aAAc,IACd,aAAc,KACd,gBAAiB,KACjB,uBAAwB,KACxB,0BAA2B,KAC3B,iBAAkB,KAClB,oBAAqB,KACrB,kBAAmB,KACnB,qBAAsB,KACtB,UAAW,KACX,aAAc,KACd,aAAc,KACd,gBAAiB,KACjB,kBAAmB,KACnB,qBAAsB,KACtB,WAAY,KACZ,cAAe,KACf,oBAAqB,IACrB,uBAAwB,IACxB,UAAW,KACX,aAAc,KACd,eAAgB,KAChB,kBAAmB,KACnB,QAAS,KACT,WAAY,KACZ,iBAAkB,KAClB,oBAAqB,KACrB,WAAY,KACZ,cAAe,KACf,YAAa,KACb,eAAgB,KAChB,aAAc,KACd,gBAAiB,KACjB,wBAAyB,KACzB,2BAA4B,KAC5B,qBAAsB,IACtB,wBAAyB,IACzB,cAAe,KACf,iBAAkB,KAClB,sBAAuB,KACvB,yBAA0B,KAC1B,eAAgB,KAChB,kBAAmB,MAIpB,SAASC,EAAoBC,GAC5B,OAAOC,EAA2BD,GAAKE,KAAKC,GAE7C,SAASF,EAA2BD,GAGnC,OAAOI,QAAQC,UAAUH,MAAK,KAC7B,IAAIC,EAAoBG,EAAER,EAAKE,GAAM,CACpC,IAAIO,EAAI,IAAIC,MAAM,uBAAyBR,EAAM,KAEjD,MADAO,EAAEE,KAAO,mBACHF,EAEP,OAAOT,EAAIE,MAGbD,EAAoBW,KAAO,IAAOC,OAAOD,KAAKZ,GAC9CC,EAAoBM,QAAUJ,EAC9BF,EAAoBa,GAAK,IACzBC,EAAOC,QAAUf,G,eCtJjB,IAAID,EAAM,CACT,gBAAiB,KACjB,mBAAoB,KACpB,oBAAqB,KACrB,uBAAwB,KACxB,iBAAkB,KAClB,oBAAqB,KACrB,UAAW,KACX,aAAc,KACd,cAAe,KACf,iBAAkB,KAClB,qBAAsB,KACtB,wBAAyB,KACzB,gBAAiB,KACjB,mBAAoB,KACpB,eAAgB,KAChB,kBAAmB,KACnB,aAAc,IACd,gBAAiB,IACjB,SAAU,KACV,YAAa,KACb,sBAAuB,KACvB,yBAA0B,KAC1B,SAAU,KACV,YAAa,KACb,cAAe,KACf,iBAAkB,KAClB,gBAAiB,KACjB,mBAAoB,KACpB,0BAA2B,KAC3B,6BAA8B,KAC9B,gBAAiB,KACjB,mBAAoB,KACpB,uBAAwB,KACxB,0BAA2B,KAC3B,kBAAmB,KACnB,qBAAsB,KACtB,iBAAkB,KAClB,oBAAqB,KACrB,aAAc,KACd,gBAAiB,KACjB,eAAgB,KAChB,kBAAmB,KACnB,eAAgB,IAChB,kBAAmB,IACnB,gBAAiB,KACjB,mBAAoB,KACpB,wBAAyB,KACzB,2BAA4B,KAC5B,qBAAsB,KACtB,wBAAyB,KACzB,iBAAkB,KAClB,oBAAqB,KACrB,WAAY,KACZ,cAAe,KACf,oBAAqB,KACrB,uBAAwB,KACxB,YAAa,KACb,eAAgB,KAChB,qBAAsB,KACtB,wBAAyB,KACzB,gBAAiB,KACjB,mBAAoB,KACpB,YAAa,KACb,eAAgB,KAChB,YAAa,KACb,eAAgB,KAChB,gBAAiB,IACjB,mBAAoB,IACpB,WAAY,KACZ,cAAe,KACf,qBAAsB,KACtB,wBAAyB,KACzB,WAAY,KACZ,cAAe,KACf,eAAgB,KAChB,kBAAmB,KACnB,oBAAqB,KACrB,uBAAwB,KACxB,gBAAiB,KACjB,mBAAoB,KACpB,uBAAwB,KACxB,0BAA2B,KAC3B,UAAW,KACX,aAAc,KACd,UAAW,IACX,aAAc,IACd,aAAc,KACd,gBAAiB,KACjB,uBAAwB,KACxB,0BAA2B,KAC3B,iBAAkB,KAClB,oBAAqB,KACrB,kBAAmB,KACnB,qBAAsB,KACtB,UAAW,KACX,aAAc,KACd,aAAc,KACd,gBAAiB,KACjB,kBAAmB,KACnB,qBAAsB,KACtB,WAAY,KACZ,cAAe,KACf,oBAAqB,IACrB,uBAAwB,IACxB,UAAW,KACX,aAAc,KACd,eAAgB,KAChB,kBAAmB,KACnB,QAAS,KACT,WAAY,KACZ,iBAAkB,KAClB,oBAAqB,KACrB,WAAY,KACZ,cAAe,KACf,YAAa,KACb,eAAgB,KAChB,aAAc,KACd,gBAAiB,KACjB,wBAAyB,KACzB,2BAA4B,KAC5B,qBAAsB,IACtB,wBAAyB,IACzB,cAAe,KACf,iBAAkB,KAClB,sBAAuB,KACvB,yBAA0B,KAC1B,eAAgB,KAChB,kBAAmB,MAGpB,SAASC,EAAoBC,GAC5B,OAAOI,QAAQC,UAAUH,MAAK,KAC7B,IAAIC,EAAoBG,EAAER,EAAKE,GAAM,CACpC,IAAIO,EAAI,IAAIC,MAAM,uBAAyBR,EAAM,KAEjD,MADAO,EAAEE,KAAO,mBACHF,EAIP,OAAOJ,EADEL,EAAIE,OAIfD,EAAoBW,KAAO,IAAOC,OAAOD,KAAKZ,GAC9CC,EAAoBa,GAAK,KACzBC,EAAOC,QAAUf,G,shBCnBjB,MAAMgB,UAAeC,EAAAA,EAGjBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHfC,EAAAA,EAAAA,KAAAA,SAIR,MAAMC,EAAOC,KAERD,EAAKE,KAAKC,SAASR,IACpBK,EAAKE,KAAKE,aAAaZ,EAAOa,cAAcV,GAASC,GAI7DU,qBAAqBC,GAGjB,IAAIC,EAAOD,EACPnB,OAAOqB,UAAUC,eAAeC,KAAKJ,EAAU,WAC/CnB,OAAOqB,UAAUC,eAAeC,KAAKJ,EAAU,YAC/CC,EAAO,CAACD,EAASK,OAAQ,CAACL,EAASK,OAAO,GAAKL,EAASM,OAAQN,EAASK,OAAO,MAEpF,MAAMA,EAASJ,EAAK,GACdM,EAAqBN,EAAK,GAChC,GAAIO,MAAMC,QAAQR,IACdO,MAAMC,QAAQJ,KACbK,MAAML,EAAO,MAAQK,MAAML,EAAO,KACnCG,MAAMC,QAAQF,KACbG,MAAMH,EAAmB,MAAQG,MAAMH,EAAmB,IAC3D,OAAON,EAEX,MAAM,IAAIvB,MAAM,oCAwBpBiC,eAAevB,GAKX,OAHIA,IACAA,EAASH,EAAOa,cAAcV,IAE3BE,MAAMqB,eAAeP,KAJfV,KAI0BN,GAU3CwB,YACI,OAAOlB,KAAKC,KAAKkB,cAAc,GAWnCC,UAAUzB,GACN,MACOgB,EAAQU,GADFrB,KAC6BsB,eAAe3B,GACzD,OAAO4B,KAAKC,MAAMH,EAAmB,GAAKV,EAAO,GAAIU,EAAmB,GAAKV,EAAO,IAGxFc,YACI,OAAOzB,KAAKsB,iBAGhBI,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,iBAGhBM,UAAUC,EAAY,IAClB,MAAM9B,EAAOC,KACPY,EAASb,EAAKqB,YACdT,EAASZ,EAAKmB,YACdY,EAAS,IAAIhB,MAAMe,GACnBE,EAAS,EAAIR,KAAKS,GAAKH,EAC7B,IAAII,EAAQ,EACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAWK,IAC3BJ,EAAOI,GAAK,CAACvB,EAAO,GAAKC,EAASW,KAAKY,IAAIF,GAAQtB,EAAO,GAAKC,EAASW,KAAKa,IAAIH,IACjFA,GAASF,EAEb,OAAO,IAAIM,EAAAA,EAAQ,CAACP,GAAS3C,OAAOmD,OAAO,GAAIvC,EAAKJ,WAI5D,W,slCCjOA,IAAA4C,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAywBA,QAvrBA,MAMI/C,YAAYC,EAAQC,GAASE,EAAA,iBALjBC,EAAAA,EAAAA,KAAAA,SAAmB6C,EAAA,KAAAJ,EAAA,CAAAK,UAAA,EAAAC,OACX,IAAKF,EAAA,KAAAF,EAAA,CAAAG,UAAA,EAAAC,OACb,IAAKF,EAAA,KAAAD,EAAA,CAAAE,UAAA,EAAAC,MACE/C,EAAAA,EAAAA,WAAAA,UAAyBD,EAAA,4BAkItB,SAAUiD,GAC5B,MAAM/C,EAAOC,KAKb,OAJI+C,EAAAhD,EAAIwC,KAAuBO,IAC3BE,EAAAjD,EAAIwC,EAAqBO,GACzB/C,EAAKE,KAAKgD,oBAAoBH,IAE3B/C,KACVF,EAAA,kBAEW,WACR,MAAME,EAAOC,KAIb,OAHKD,EAAKmD,UACNnD,EAAKmD,QAAUnD,EAAKE,KAAKkD,aAEtBpD,EAAKmD,WACfrD,EAAA,0BAqFmB,WAChB,MAEMuD,EAFOpD,KACY2B,iBACM,GAC/B,OAAIyB,EACOA,EAAWC,OAEf,KA1OP,MAAMtD,EAAOC,KAEb,IAAIsD,EACJvD,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAChBxD,EAAKE,KAAKuD,OAASzD,EACfA,EAAKE,KAAKC,SAASR,KACnBK,EAAKE,KAAKwD,QAAU/D,EACpBA,EAAOgE,MAAQ3D,EAAKE,KACpBqD,EAAcvD,EAAKE,KAAK0D,QACxB5D,EAAKO,SAAWP,EAAKE,KAAKkB,cACtBzB,EAAOkE,WACP7D,EAAK8D,QAAUnE,EAAOkE,UAE1B7D,EAAK+D,QAAQ/D,EAAKE,KAAK8D,YAG3B,IAAIC,EAAOjE,EAAKJ,QAAUsE,EAAAA,EAAAA,QAAY,EAAM,GAAItE,GAEhDI,EAAKX,GAAKkE,GAAeU,EAAK5E,IAAMmE,EAAAA,EAAAA,SAChCxD,EAAKE,KAAKwD,UAAYH,GACtBvD,EAAKE,KAAKwD,QAAQS,MAAMnE,EAAKX,IAEjCW,EAAKoE,KAAOH,EAAKG,MAAQpE,EAAKoE,MAAQ,UACdC,IAApBJ,EAAKK,WACLtE,EAAKsE,YAAa,EAGlBtE,EAAKsE,WAAaL,EAAKK,WAEvBL,EAAKM,YACLvE,EAAKwE,WAAY,GAErBxE,EAAKyE,MAAQR,EAAKQ,OAAS,KAEvBR,EAAKS,UACL1E,EAAK2E,SAIbC,UACI,MAAM5E,EAAOC,KACb,IAAI4E,EAAS,GAQb,OANI7E,EAAK8D,QACLe,EAAS7E,EAAK8D,QAET9D,EAAKJ,QAAQkF,QAClBD,EAAS,CAAC7E,EAAKJ,QAAQkF,QAEpBD,EAGXE,cAAcC,GACV,MAAMhF,EAAOC,KAGb,IAAK+E,GAAWhF,EAAKsE,YAActE,EAAKyE,MAAO,CAC3C,IAAIQ,EAAQjF,EAAKyE,MAAMlG,IAAI2G,mBAAmB,oBAAoBC,QAAO,SAAUF,GAC/E,OAAOA,EAAMG,iBAAmBpF,KAGpC,GAAIiF,EAAM3B,OAAS,EAAG,CAClB,MAAM+B,EAAIJ,EAAM,GACZI,EAAEC,aACFD,EAAEE,QAWd,OANIP,GAAWhC,EAAAhD,EAAI2C,KAAsB5C,EAAAA,EAAAA,WAAAA,cACpCiF,GAAWhC,EAAAhD,EAAI2C,KAAsB5C,EAAAA,EAAAA,WAAAA,WACtCkD,EAAAjD,EAAI2C,EAAoBqC,EAAUjF,EAAAA,EAAAA,WAAAA,QAA4BA,EAAAA,EAAAA,WAAAA,aAC9DC,EAAKyE,MAAMvE,KAAKsF,qBAAqBxF,EAAMgF,IAGxChF,EAGXyF,qBACI,OAAAzC,EAAO/C,KAAI0C,GAUfiB,QACI,OAAO3D,KAAKC,KAAK0D,QAGrBO,MAAM9E,GACF,MAAMW,EAAOC,KAGb,OAFAD,EAAKX,GAAKA,EACVW,EAAKE,KAAKiE,MAAM9E,GACTW,EAGX0F,YACI,OAAOzF,KAAKC,KAAKwF,YAGrBC,SAASC,GACL,MAAM5F,EAAOC,KACb,IAAI4F,EACJ,GAAc,OAAVD,EACAC,EAAW,SAEV,KAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACD,MAAMC,EAAe,CAACnG,EAAKoG,WAAYR,GACzB,QAAdE,EAAI9F,EAAKyE,aAAK,IAAAqB,GAAQ,QAARC,EAAVD,EAAYO,cAAM,IAAAN,GAAlBA,EAAqB/F,EAAKsG,YAC1BH,EAAaI,QAAQvG,EAAKyE,MAAM4B,OAAOrG,EAAKsG,YAElC,QAAdN,EAAIhG,EAAKyE,aAAK,IAAAuB,GAAoB,QAApBC,EAAVD,EAAYzH,IAAIqB,QAAQyG,cAAM,IAAAJ,GAA9BA,EAAiCjG,EAAKsG,YACtCH,EAAaI,QAAQvG,EAAKyE,MAAMlG,IAAIqB,QAAQyG,OAAOrG,EAAKsG,YAErD,OAAHE,EAAAA,QAAG,IAAHA,EAAAA,GAAW,QAARN,EAAHM,EAAAA,EAAAA,cAAW,IAAAN,GAAXA,EAAclG,EAAKsG,YACnBH,EAAaI,QAAQC,EAAAA,EAAAA,OAAWxG,EAAKsG,YAEzCT,EAAW3B,EAAAA,EAAAA,eAAoBiC,GAGnC,OADAnG,EAAKE,KAAKyF,SAASE,GACZ7F,EA2BXuB,eAAe3B,GAAS,IAAA6G,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACpB,MAAM9G,EAAOC,KACP8G,GAAYnH,MAAAA,OAAO,EAAPA,EAASoH,eAA0B,QAAVP,EAAAzG,EAAKyE,aAAK,IAAAgC,GAAK,QAALC,EAAVD,EAAYlI,WAAG,IAAAmI,GAAfA,EAAiBO,SAAWjH,EAAKyE,MAAMlG,IAAI2I,OAAOC,IAAc,QAAXR,EAAC3G,EAAKyE,aAAK,IAAAkC,GAAK,QAALC,EAAVD,EAAYpI,WAAG,IAAAqI,OAAL,EAAVA,EAAiBO,KAC5GC,GAAUxH,MAAAA,OAAO,EAAPA,EAASuH,OAAiB,QAAdN,EAAI7G,EAAKyE,aAAK,IAAAoC,GAAK,QAALC,EAAVD,EAAYtI,WAAG,IAAAuI,OAAL,EAAVA,EAAiBO,WAAYb,EAAAA,EAAAA,OAE7D,OADAxG,EAAKO,SAAWP,EAAKE,KAAKkB,cACtB2F,GAAaK,EACN5D,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKO,SAAUwG,EAAWK,GAEhDpH,EAAKO,SAWhBW,eAAevB,GACX,MAAMK,EAAOC,KAEPqH,EAAiB,SAAUC,GAC7BA,EAAIC,SAAQ,SAAUC,EAAKC,GACnB3G,MAAMC,QAAQyG,GACdH,EAAeG,GAGH,OAARA,EACAF,EAAIG,GAAO,EAES,iBAARD,IACZE,QAAQC,IAAI,iDACZL,EAAIG,GAAOG,WAAWJ,QAYtC,OANI1G,MAAMC,QAAQrB,IACd2H,EAAe3H,GAGnBK,EAAKO,SAAWZ,EAChBK,EAAKE,KAAK4H,YAAYnI,GACfK,EAGX0B,YACI,OAAOzB,KAAKsB,iBAGhBI,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,MACMmG,EAAU,SAAUN,GACtB,OAAO1G,MAAMC,QAAQyG,IAAQA,EAAInE,QAAU,GAAuB,iBAAXmE,EAAI,IAAqC,iBAAXA,EAAI,IAEvFO,EAAY,SAAUC,GACxB,OAAOF,EAAQE,GAAO,CAACA,GAAOA,EAAIC,OAAOC,EAAU,KAEjDA,EAAW,SAAUC,EAAKX,GAO5B,OANIM,EAAQN,GACRW,EAAIC,KAAKZ,GAGTW,EAAMA,EAAIE,OAAON,EAAUP,IAExBW,GAEX,OAAOJ,EAhBM/H,KAgBSsB,kBAa1BgH,UAAU,IAAAC,EACN,MAAMxI,EAAOC,KACPN,EAASK,EAAK4B,iBAKpB,OAJa,QAAT4G,EAAA7I,EAAO,UAAE,IAAA6I,OAAA,EAATA,EAAWlF,QAAS,IACpB3D,EAAO6H,SAAQiB,GAAKA,EAAEnF,OAAS,IAC/BtD,EAAKkB,eAAelB,EAAKO,WAEtBP,EAUXgE,UACI,MAAMhE,EAAOC,KACb,IAAI4E,EAAS,KAOb,OALIA,EADA7E,EAAKoE,KACIpE,EAAKoE,KAGLpE,EAAKE,KAAK8D,UAEhBa,EAWXd,QAAQK,GACJ,MAAMpE,EAAOC,KACb,GAAoB,iBAATmE,EACPpE,EAAKoE,KAAOA,MAEX,CAGD,IAAK,IAAIsE,KAFT1I,EAAKoE,KAAOF,EAAAA,EAAAA,OAAYlE,EAAKoE,KAAMA,GACnCpE,EAAK2I,WAAa3I,EAAK2I,YAAc,GACrBvE,EAAM,CAClB,IAAIwE,EAAO5I,EAAK2I,WAAWE,MAAKD,GAAQA,EAAKE,OAASJ,IAClDE,EACAA,EAAK9F,MAAQsB,EAAKsE,GAGlB1I,EAAK2I,WAAWN,KAAK,CAAES,KAAMJ,EAAK5F,MAAOsB,EAAKsE,KAGtD1I,EAAKE,KAAK6D,QAAQK,GAEtB,OAAOpE,EAGX+I,UAAUL,GACN,MAAM1I,EAAOC,YACND,EAAKoE,KAAKsE,GACjB,MAAME,GAAQ5I,EAAK2I,YAAc,IAAIE,MAAKD,GAAQA,EAAKE,OAASJ,IAKhE,OAJIE,GACA5I,EAAK2I,WAAWK,OAAOhJ,EAAK2I,WAAWM,QAAQL,GAAO,GAE1D5I,EAAKE,KAAK6I,UAAUL,GACb1I,EAGXkJ,YACI,MAAMlJ,EAAOC,KAIb,OAHAD,EAAKoE,KAAO,GACZpE,EAAK2I,WAAa,GAClB3I,EAAKE,KAAKgJ,YACHlJ,EAGXmJ,QAAQvJ,GAAS,IAAAwJ,EACb,MAAMpJ,EAAOC,KACb,IAAI4E,EAAS,KACb,MAAMwE,GAASzJ,MAAAA,OAAO,EAAPA,EAASyJ,UAAoB,QAAVD,EAAApJ,EAAKyE,aAAK,IAAA2E,OAAA,EAAVA,EAAY7K,MAAO2F,EAAAA,EAAAA,aAAkBlE,EAAKyE,MAAMlG,KAC5E6F,EAAOpE,EAAKgE,UAClB,GAAoB,iBAATI,EAAmB,CAC1B,IAAIkF,EAAWtJ,EAAKE,KAAKqJ,cACzB,GAAID,EAGAzE,EAASyE,EAASE,QAAQ,8BAA8B,SAAUC,EAAOC,GAQrE,OAAItF,EAAKsF,aAAetK,QAAUA,OAAOqB,UAAUC,eAAeC,KAAKyD,EAAKsF,GAAK,SACtEtF,EAAKsF,GAAW,MAEpBtF,EAAKsF,UAGf,CACD,IAAIC,EAAO,GACX,MAAMC,EAAS,GACTC,EAAW3F,EAAAA,EAAAA,gBAAqBmF,EAAQ,QACxCS,EAAY5F,EAAAA,EAAAA,gBAAqBmF,EAAQ,mBACzCU,EAAc,SAAUjH,GAC1B,IAAI+B,EAUJ,OAPIA,EAFQX,EAAAA,EAAAA,MAAWpB,GAET,YAAWA,6BAAiCgH,MAAcD,aAGjDxF,IAAVvB,EACY,iBAAVA,EAAqBU,EAAAA,EAAAA,KAAAA,aAAqBV,EAAOuG,GAAUvG,EAChE,UAEH+B,GAELmF,EAAc,SAAU5F,GAC1B,IAAIuF,EAAO,GACX,GAAIvF,aAAgBrD,MAAO,CACvB,MAAM1B,EAAK,eAAiBmE,EAAAA,EAAAA,SAC5BmG,EAAKtB,KAAM,2DAA0DhJ,yBAA0BA,wCAC/FsK,EAAKtB,KAAM,eAAchJ,gCAAiC+E,EAAKd,UAAUY,EAAAA,EAAAA,gBAAqBmF,EAAQ,iDACtGM,EAAKtB,KAAK,0CACVjE,EAAKoD,SAAQyC,IACTN,EAAKtB,KAAK,aACVsB,EAAOA,EAAKrB,OAAO0B,EAAYC,KAC1B5B,KAAK,iBAEdsB,EAAKtB,KAAK,qCACP,GAAIjE,aAAgBhF,OACvB,GAAIgF,EAAK8F,QAAS,CACd,MAAMC,EAAO,CACTC,KAAMhG,EAAK8F,UACXG,YAAajG,EAAK7C,kBAEtBoI,EAAOA,EAAKrB,OAAO0B,EAAYG,QAE9B,CAED,IAAK,IAAIhI,KADTwH,EAAKtB,KAAK,0CACIjE,EAAM,CAEhB,GADAuF,EAAKtB,KAAK,QACNjE,EAAKjC,IAAMiC,EAAKjC,aAAcpB,MAAO,CACrC,MAAM1B,EAAK,eAAiBmE,EAAAA,EAAAA,SAC5BmG,EAAKtB,KAAM,4BAA2BlG,sEACb9C,uBAAwB8C,mBACjDwH,EAAOA,EAAKrB,OAAO0B,EAAY5F,EAAKjC,MAC/BkG,KAAK,oBAET,GAAIjE,EAAKjC,IAAMiC,EAAKjC,aAAc/C,OAAQ,CAC3C,MAAMC,EAAK,eAAiBmE,EAAAA,EAAAA,SAE5BmG,EAAKtB,KAAM,4BAA2BlG,qFACE9C,yBAA0BA,wCAClEsK,EAAKtB,KAAM,eAAchJ,gCAAiC8C,mBAC1DwH,EAAOA,EAAKrB,OAAO0B,EAAY5F,EAAKjC,MAC/BkG,KAAK,oBAGVsB,EAAKtB,KAAM,mBAAkBlG,0EAE7BwH,EAAOA,EAAKrB,OAAO0B,EAAY5F,EAAKjC,MAC/BkG,KAAK,SAEdsB,EAAKtB,KAAK,SAEdsB,EAAKtB,KAAK,yBAGdsB,EAAKtB,KAAK0B,EAAY3F,IAE1B,OAAOuF,GAEX,IAAK,IAAIjB,KAAOtE,EAAM,CAClB,MAAMtB,EAAQsB,EAAKsE,GACbe,EAAQf,EAAIe,MAAM,YACpBA,EACAG,EAAOH,EAAM,IAAM3G,EAGE,iBAAVA,GAAuC,iBAAVA,QAAuC,IAAVA,EACjE6G,EAAKtB,KAAM,WAAUK,aAAeqB,EAAYjH,iBAGhD6G,EAAKtB,KAAM,WAAUK,eACrBiB,EAAOA,EAAKrB,OAAO0B,EAAYlH,KAC1BuF,KAAK,eAKtB,MAAMiC,EAAUV,EACXrL,KAAI,SAAU0J,EAAKP,GAChB,GAAIO,EACA,MAAQ,KAAIP,KAAOO,OAASP,QAGnCvC,QAAO,SAAU8C,GACd,OAAOA,KAEXqC,EAAQhH,SACRqG,EAAOW,EAAQhC,OAAOqB,IAEtBA,EAAKrG,OAAS,IACdqG,EAAKpD,QAAQ,2BACboD,EAAKtB,KAAK,YACVxD,EAAS8E,EAAKY,KAAK,UAIN,iBAATnG,IACZS,EAAST,GAWb,OATKS,IACDA,EAAS7E,EAAKwK,MACVxK,EAAK8E,QACLD,GAAU,IAAM7E,EAAK8E,QAGxBD,IACDA,EAASX,EAAAA,EAAAA,gBAAqBmF,EAAQ,WAEnCxE,EAGX0E,cAEI,IAAI1E,EADS5E,KACKC,KAAKqJ,cACvB,OAAI1E,GAGG,KAGX4F,QACI,MAAMzK,EAAOC,KACPyK,EAAc1K,EAAKE,KAAKyK,eAC9BD,EAAY/G,MAAQ3D,EAAKE,KACzB,MAAM2E,EAAS,IAAI7E,EAAKN,YAAYgL,EAAa1K,EAAKJ,SAItD,OAHII,EAAK8D,UACLe,EAAOf,QAAU9D,EAAK8D,QAAQ8G,SAE3B/F,EAGXuB,WACI,OAAOnG,KAAKC,KAAKkG,WAGrByE,gBAAgBjL,GAAS,IAAAkL,EACrB,MAAM9K,EAAOC,KAEP8K,GADNnL,EAAUA,GAAW,cACcoL,EAAAA,EAAUpL,EAAUA,EAAQmL,QACzDxM,GAAgB,QAAVuM,EAAA9K,EAAKyE,aAAK,IAAAqG,OAAA,EAAVA,EAAYvM,OAAOwM,MAAAA,OAAO,EAAPA,EAASxM,KACxC,GAAIA,EAAK,CACL,IAAI0G,EAAQ8F,GAAW/K,EAAKiF,MAC5B,IAAKA,EAGD,IADA,IAAIgG,EAAS1M,EAAI2G,mBAAmB,oBAC3B/C,EAAI,EAAG+I,EAAMD,EAAO3H,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,IAAIkD,EAAI4F,EAAO9I,GACf,IAAKkD,EAAE8F,OAAQ,CACXlG,EAAQI,EACR,OAiBZ,OAbKJ,IACDA,QAAc1G,EAAI6M,WAAW,UAEjCnG,EAAMG,eAAiBpF,EACvBzB,EAAI2G,mBAAmB,oBAClBC,QAAOE,GAAKA,IAAMJ,GAASI,EAAEC,cAC7BkC,SAAQnC,GAAKA,EAAEE,SACfN,EAAMoG,6BAA6BpG,EAAMqG,gBAC9CrG,EAAMsG,YAAW,GACjBvL,EAAKE,KAAKqE,UAAUnF,OAAOmD,OAAO,GAAI3C,EAAS,CAAEmL,QAAS9F,KAC1D1G,EAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,MAAoB,CAAEgL,QAAS9F,IAC3CA,EAAMwG,WAAU,GAChBxG,EAAMyG,WAAWC,iBAAiB,OAAOnE,SAAQoE,GAAOA,EAAIC,iBAAiB,QAAQ,IAAM5G,EAAMwG,gBAC1FxG,EAEX,OAAO,KAGX4F,uBAAuBjL,GAAS,IAAAkM,EAC5B,MAAM9L,EAAOC,KAEP8K,GADNnL,EAAUA,GAAW,cACcoL,EAAAA,EAAUpL,EAAUA,EAAQmL,QACzDxM,GAAgB,QAAVuN,EAAA9L,EAAKyE,aAAK,IAAAqH,OAAA,EAAVA,EAAYvN,OAAOwM,MAAAA,OAAO,EAAPA,EAASxM,KACxC,GAAIA,EAAK,CACL,IAAIwN,EAEJ,IAAIC,EAAsB,CACtBC,QAAS,QACTC,OAAQ,CACJC,KAAM3I,EAAAA,EAAAA,KAAAA,gBAAwBjF,EAAIqB,QAAQyJ,OAAQ,aAClD+C,IAAK5I,EAAAA,EAAAA,KAAAA,gBAAwBjF,EAAIqB,QAAQyJ,OAAQ,eAGrDgD,EAAmB9N,EAAI2G,mBAAmBoH,EAAAA,SAAkB,GAC5DD,GACAL,EAAoBO,SAAWF,EAAiBG,SAASC,MAEzDV,EAAQxN,EAAI2G,mBAAmB,2BAA2B2D,MAAK6D,GAAeA,EAAYtH,iBAAmBpF,IACxG+L,IAAOA,QAAcM,EAAiBjB,WAAW,eAAgBY,MAEtEA,EAAoBW,IAAMC,SAASC,cAAc,OACjDtO,EAAIoO,IAAIG,YAAYd,EAAoBW,KAExCZ,EAAQxN,EAAI2G,mBAAmB,2BAA2B2D,MAAKkE,GAAgBA,EAAa3H,iBAAmBpF,IAC1G+L,IAAOA,QAAcxN,EAAI6M,WAAW,eAAgBY,KAG7DD,EAAM3G,eAAiBpF,EAGiC,IAApDzB,EAAI2G,mBAAmBoH,EAAAA,SAAkBhJ,QACzC/E,EAAI2G,mBAAmB,2BAA2BC,QAAO6H,GAAiC,UAAzBA,EAAKpN,QAAQqM,UAAqBzE,SAAQ,SAAUnC,GACjHA,EAAE4H,WAKK1O,EAAI2G,mBAAmB,2BAC/BC,QAAO6H,GAAQjB,IAAUiB,IAAMxF,SAAQ,SAAUnC,GAChDA,EAAED,iBAAmBC,EAAE6H,OACvB7H,EAAE4H,WAIVlB,EAAMoB,QAAQC,UAAY,GAC1BrB,EAAMsB,KAAKzN,EAAQ+J,MAAQ3J,EAAKmJ,QAAQ,CAAEE,OAAQ9K,EAAIqB,QAAQyJ,SAAW0C,EAAMuB,oBAExD,IAAIC,gBAAeC,IACtC,IAAK,IAAIC,KAASD,EACdC,EAAMC,OAAO/B,iBAAiB,UAAUnE,SAAQ,SAAUmG,GACtDA,EAAG9B,iBAAiB,cAAc,SAAU+B,GACpC3N,KAAK4N,YAAc5N,KAAK6N,YACxB7N,KAAKuK,MAAQvK,KAAK8N,WAAW9D,KAAK,GAAG+D,YAGrC/N,KAAKuK,MAAQ,KAElB,CAAEyD,SAAS,UAIXC,QAAQnC,EAAMoC,SAE7B,IAAIC,EAAe,SAAUR,GACzBrP,EAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,WAAyBqO,GAEjCrC,EAAMkB,SAGV,OADA1O,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyBqO,GACzBrC,EAEX,OAAO,KAGXlB,eAAejL,GACX,MAAMI,EAAOC,KAGb,GAFAL,EAAUA,GAAW,IAEhB4D,EAAAA,EAAAA,UAAeA,EAAAA,EAAAA,QAAAA,mBAA+B,CAC/C,MAAMlE,QAAe,uCACrBkE,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,mBAAgClE,EAAOiP,QAG3C,IAAI5E,EAEAA,EADA3J,EAAKuJ,cACEvJ,EAAKmJ,UAGa,iBAAdnJ,EAAKoE,KACLpE,EAAKoE,WAGCZ,EAAAA,EAAAA,QAAAA,mBAAAA,4BAA0D,CAAEmF,WAAY3I,EAAK2I,WAAY6F,eAAe,IAG7H,MAAMvK,EAAOC,EAAAA,EAAAA,OAAY,GAAItE,EAAS,CAAE+J,KAAMA,IAC9C,IAAIoB,EACJ,GAAInL,EAAQmL,SAAWvH,EAAAA,EAAAA,QAAY,CAC/B,MAAMiL,EAAiB7O,EAAQmL,QACzB2D,SAAe,wCAAkCH,QACjDI,SAAsB,wCAAyCJ,QACjEE,aAA0BC,EAC1B3D,QAAgB/K,EAAKuE,UAAUN,GAE1BwK,aAA0BE,IAC/B5D,QAAgB/K,EAAK4O,iBAAiB3K,SAKtC8G,EADA/K,EAAKyE,MAAMlG,IAAI0I,UAAYjH,EAAKyE,MAAMlG,IAAIsQ,uBAAyB9O,EAAAA,EAAAA,cAAAA,oBACnDC,EAAK4O,iBAAiB3K,SAGtBjE,EAAKuE,UAAUN,GAGvCjE,EAAK8O,YAAc/D,EACnB/K,EAAKyE,MAAMsK,SAAS5J,QAAQ6J,GAAMA,IAAMhP,IAAMwH,SAASwH,GAAMA,EAAE9L,qBAAoB,KACnFlD,EAAKkD,qBAAoB,GACzBM,EAAAA,EAAAA,QAAAA,mBAAAA,kCAAgEuH,EAAQM,uBAG5E1G,SACI,MAAM3E,EAAOC,KACbgD,EAAAjD,EAAI0C,GAAa,GACb1C,EAAKyE,OACLzE,EAAKyE,MAAMwK,iBAAiB5G,KAAKrI,GAErC,IAAIkP,EAAmBlP,EAAKJ,QAAQuP,WAAa,GAIjD,OAHAnP,EAAK2F,SAASzB,EAAAA,EAAAA,OAAY,GAAIsC,EAAAA,EAAAA,OAAAA,UAAqBxG,EAAKsG,WAAY4I,EAAiBlP,EAAKsG,aAGnFtG,EAGXoP,WACI,MAAMpP,EAAOC,KAMb,GALAgD,EAAAjD,EAAI0C,GAAa,GAEjB1C,EAAK2F,SAAS3F,EAAKJ,SAGfI,EAAKyE,MAAO,CACZ,MAAMiD,EAAM1H,EAAKyE,MAAMwK,iBAAiBhG,QAAQjJ,GAC5C0H,GAAO,GACP1H,EAAKyE,MAAMwK,iBAAiBjG,OAAOtB,EAAK,GAGhD,OAAO1H,EAGXqP,aACI,OAAArM,EAAO/C,KAAIyC,GAGf4M,MAAMC,EAASC,GACX,OAAOvP,KAAKC,KAAKoP,MAAMC,EAASC,M,yiBC7wBxChM,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAWiM,EAAAA,EAkFrB,MAAMC,UAAeC,EAAAA,EAGjBjQ,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHf,UAIR,MAAME,EAAOC,KAEb,IAAKD,EAAKE,KAAKC,SAASR,GAAS,CAC7B,MAAM0J,EAASrJ,EAAKyE,OAASzE,EAAKyE,MAAMlG,IAAMyB,EAAKyE,MAAMlG,IAAIqB,QAAQyJ,OAAS7C,EAAAA,EAAAA,OAC9ExG,EAAKwK,MAAQxK,EAAKJ,QAAQ4K,OAAShH,EAAAA,EAAAA,KAAQ6F,GAAQtJ,EAAAA,EAAAA,QACnDC,EAAKE,KAAK0P,aAAajQ,EAAQC,KAK3C,W,mgBC9BA,MAAMiQ,UAAoBC,EAAAA,EAGtBpQ,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHf,UAIR,MAAME,EAAOC,KAERD,EAAKE,KAAKC,SAASR,KACpBK,EAAKE,KAAKwD,QAAU/D,EACpBK,EAAKE,KAAK6P,kBAAkBpQ,EAAQC,IAI5C2B,eAAe3B,GACX,OAAOC,MAAM0B,eAAeZ,KAAKV,KAAML,GAW3CsB,eAAevB,GAEX,GAAIA,EAAQ,CACR,IAAIoB,MAAMC,QAAQrB,GAMd,MAAM,IAAIqQ,UAAU,yCALfjP,MAAMC,QAAQrB,EAAO,MACtBA,EAAS,CAACA,IAOtB,OAAOE,MAAMqB,eAAeP,KAXfV,KAW0BN,GAG3C+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/B+B,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,IAInC,W,4gBC9DA,MAAMmQ,UAAmBrQ,EAAAA,EAGrBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHfC,EAAAA,EAAAA,KAAAA,OAIR,MAAMC,EAAOC,KAERD,EAAKE,KAAKC,SAASR,KACpBK,EAAKE,KAAKwD,QAAU/D,EACpBK,EAAKE,KAAK+P,iBAAiBtQ,EAAQC,IAW3C2B,eAAe3B,GACX,OAAOC,MAAM0B,eAAeZ,KAAKV,KAAML,GAW3CsB,eAAevB,GAEX,GAAIA,EAAQ,CACR,IAAIoB,MAAMC,QAAQrB,GAMd,MAAM,IAAIqQ,UAAU,wCALfjP,MAAMC,QAAQrB,EAAO,MACtBA,EAAS,CAACA,IAOtB,OAAOE,MAAMqB,eAAeP,KAXfV,KAW0BN,GAG3C+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/B+B,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,kBAIpB,W,4gBC8CA,MAAM2O,UAAqBzQ,EAAAA,EAGvBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHfC,EAAAA,EAAAA,KAAAA,SAIR,MAAMC,EAAOC,KAERD,EAAKE,KAAKC,SAASR,IACpBK,EAAKE,KAAKiQ,mBAAmBxQ,EAAQC,GAW7C2B,eAAe3B,GACX,MAAMD,EAASE,MAAM0B,eAAeZ,KAAKV,KAAML,GAC/C,OAAIA,MAAAA,GAAAA,EAASwQ,WACF,GAAG9H,OAAO+H,MAAM,GAAI,GAAG/H,OAAO+H,MAAM,GAAI1Q,IAE5CA,EAWXuB,eAAevB,GAEX,GAAIA,EAAQ,CACR,IAAIoB,MAAMC,QAAQrB,KAAWoB,MAAMC,QAAQrB,EAAO,IAS9C,MAAM,IAAIqQ,UAAU,0CARfjP,MAAMC,QAAQrB,EAAO,GAAG,IAGnBoB,MAAMC,QAAQrB,EAAO,GAAG,GAAG,MACjCA,EAAS,CAACA,IAHVA,EAAS,CAAC,CAACA,IASnBA,EAAO6H,SAAQ,SAAU8I,GACrBA,EAAQ9I,SAAQ,SAAU+I,GACtB,MAAMC,EAAaD,EAAK,GAClBE,EAAWF,EAAKA,EAAKjN,OAAS,GAChCkN,EAAW,KAAOC,EAAS,IAAMD,EAAW,KAAOC,EAAS,KAC5DF,EAAKA,EAAKjN,QAAUkN,SAKpC,OAAO3Q,MAAMqB,eAAeP,KAvBfV,KAuB0BN,GAG3C+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/B+B,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,iBAAiBmP,KAAK,GAWtCC,UAAU/Q,GAEN,OADaK,KACDC,KAAKyQ,UAAU,CAAEtG,YADhBpK,KACkCsB,eAAe3B,KAYlEgR,QAAQhR,GAEJ,OADaK,KACDC,KAAK0Q,QAAQ,CAAEvG,YADdpK,KACgCsB,eAAe3B,MAIpE,W,6gBC9IA,MAAMiR,UAAsBpR,EAAAA,EAGxBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHf,QA+DZA,EAAA,kBAQY,SAAUF,GAElB,OADaK,KACDC,KAAKyQ,UAAU,CAAEtG,YADhBpK,KACkCsB,eAAe3B,QArE9D,MAAMI,EAAOC,KAERD,EAAKE,KAAKC,SAASR,IACpBK,EAAKE,KAAK4Q,oBAAoBnR,EAAQC,GAW9C2B,eAAe3B,GACX,OAAIA,MAAAA,GAAAA,EAASwQ,WACFnQ,KAAK2B,iBAET/B,MAAM0B,eAAeZ,KAAKV,KAAML,GAW3CsB,eAAevB,GAKX,OAHIoB,MAAMC,QAAQrB,IAAWoB,MAAMC,QAAQrB,EAAO,MAAQoB,MAAMC,QAAQrB,EAAO,GAAG,MAC9EA,EAAS,CAACA,IAEPE,MAAMqB,eAAeP,KAJfV,KAI0BN,GAG3C+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/B+B,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,iBAAiBmP,OAGjCK,eAAeC,GACX,MAAMhR,EAAOC,KACb,GAAI+Q,aAAoBC,EAAAA,EAAU,CAC9B,MAAMtR,EAASK,EAAKuB,iBACpB5B,EAAO0I,KAAK2I,EAASzP,kBACrBvB,EAAKkB,eAAevB,GAExB,OAAOK,GAiBf,W,+hBCvGA,MAAM2P,UAAclQ,EAAAA,EAGhBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHfC,EAAAA,EAAAA,KAAAA,OAIR,MAAMC,EAAOC,KAERD,EAAKE,KAAKC,SAASR,KACpBK,EAAKE,KAAKwD,QAAU/D,EACpBK,EAAKE,KAAKgR,YAAYvR,EAAQC,IAoBtC2B,eAAe3B,GACX,MAAMD,EAASE,MAAM0B,eAAeZ,KAAKV,KAAML,GAC/C,OAAIA,MAAAA,GAAAA,EAASwQ,WACF,CAACzQ,GAELA,EAGX+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/BgC,iBACI,MAAO,CAAC3B,KAAKsB,kBAGjBoE,SAASC,GACL,MAAM5F,EAAOC,KAEb,GADkBc,MAAMC,QAAQhB,EAAK+O,WAAa/O,EAAK+O,SAASzL,OAAS,EAC1D,KAAAwC,EAAAC,EAAAC,EAAAC,EAAAC,EACX,MAAMC,EAAe,GACP,QAAdL,EAAI9F,EAAKyE,aAAK,IAAAqB,GAAQ,QAARC,EAAVD,EAAYO,cAAM,IAAAN,GAAlBA,EAAoBoL,SACpBhL,EAAaI,QAAQvG,EAAKyE,MAAM4B,OAAO8K,SAE7B,QAAdnL,EAAIhG,EAAKyE,aAAK,IAAAuB,GAAoB,QAApBC,EAAVD,EAAYzH,IAAIqB,QAAQyG,cAAM,IAAAJ,GAA9BA,EAAgCkL,SAChChL,EAAaI,QAAQvG,EAAKyE,MAAMlG,IAAIqB,QAAQyG,OAAO8K,SAEhD,OAAH3K,EAAAA,QAAG,IAAHA,EAAAA,GAAW,QAARN,EAAHM,EAAAA,EAAAA,cAAW,IAAAN,GAAXA,EAAaiL,SACbhL,EAAaI,QAAQC,EAAAA,EAAAA,OAAAA,SAEzB,MAAMX,EAAW3B,EAAAA,EAAAA,eAAoBiC,GACrC,OAAOnG,EAAKE,KAAKyF,SAASE,GAE9B,OAAOhG,MAAM8F,SAAShF,KAAKX,EAAM4F,IAIzC,W,4gBCUA,MAAMtD,UAAgB7C,EAAAA,EAGlBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHfC,EAAAA,EAAAA,KAAAA,SAIR,MAAMC,EAAOC,KAERD,EAAKE,KAAKC,SAASR,IACpBK,EAAKE,KAAKkR,cAAczR,EAAQC,GAWxC2B,eAAe3B,GACX,MAAMD,EAASE,MAAM0B,eAAeZ,KAAKV,KAAML,GAC/C,OAAIA,MAAAA,GAAAA,EAASwQ,WACF,GAAG9H,OAAO+H,MAAM,GAAI1Q,GAExBA,EAWXuB,eAAevB,GAEX,GAAIA,EAAQ,CACR,IAAIoB,MAAMC,QAAQrB,KAAWoB,MAAMC,QAAQrB,EAAO,IAM9C,MAAM,IAAIqQ,UAAU,qCALfjP,MAAMC,QAAQrB,EAAO,GAAG,MACzBA,EAAS,CAACA,IAMlBA,EAAO6H,SAAQ,SAAU+I,GACrB,MAAMC,EAAaD,EAAK,GAClBE,EAAWF,EAAKA,EAAKjN,OAAS,GAChCkN,EAAW,KAAOC,EAAS,IAAMD,EAAW,KAAOC,EAAS,KAC5DF,EAAKA,EAAKjN,QAAUkN,MAIhC,OAAO3Q,MAAMqB,eAAeP,KAlBfV,KAkB0BN,GAG3C+B,UAAU9B,GACN,OAAOK,KAAKsB,eAAe3B,GAG/B+B,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,iBAAiBmP,OAWjCC,UAAU/Q,GAEN,OADaK,KACDC,KAAKyQ,UAAU,CAAEtG,YADhBpK,KACkCsB,eAAe3B,KAWlEgR,QAAQhR,GAEJ,OADaK,KACDC,KAAK0Q,QAAQ,CAAEvG,YADdpK,KACgCsB,eAAe3B,MAIpE,W,mgBCxJA,MAAMqR,UAAiBxR,EAAAA,EAGnBC,YAAYC,EAAQC,GAChBC,MAAMF,EAAQC,GAASE,EAAA,iBAHf,QAIR,MAAME,EAAOC,KAERD,EAAKE,KAAKC,SAASR,IACpBK,EAAKE,KAAKmR,eAAe1R,EAAQC,GAoBzCsB,eAAevB,GAKX,OAHIoB,MAAMC,QAAQrB,KAAYoB,MAAMC,QAAQrB,EAAO,MAC/CA,EAAS,CAACA,IAEPE,MAAMqB,eAAeP,KAJfV,KAI0BN,GAG3CgC,UAAUhC,GACN,OAAOM,KAAKiB,eAAevB,GAG/BiC,iBACI,OAAO3B,KAAKsB,iBAWhBoP,UAAU/Q,GAEN,OADaK,KACDC,KAAKyQ,UAAU,CAAEtG,YADhBpK,KACkCsB,eAAe3B,MAItE,W,uGCnLA,YAAmB0R,KAAK,CAACC,OAAOC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAg3B/B,CAAEpH,KAAM,mC,4nCCz2BZ,MAAMqH,EAAqBrS,OAAOqB,UAAUC,eAAeC,KAAK+Q,OAAQ,UAElEC,EAAW,SAAUC,GACvB,MAAMC,EAASjF,SAASC,cAAc,KAGtC,GAFAgF,EAAOC,KAAOF,GAETC,EAAOE,OAAQ,CAEhB,IAAMF,EAAOG,WAAYH,EAAOI,SAAW,CACvC,IAAIC,EAAW,gEAAgEC,KAAKN,EAAOC,MAI3F,GAFAD,EAAOG,SAAWE,EAAS,GAEvBA,EAAS,GAAGjJ,QAAQ,MAAQ,EAAG,CAC/B,IAAIgJ,EAAWC,EAAS,GAAGE,MAAM,KACjCP,EAAOI,SAAWA,EAAS,GAC3BJ,EAAOQ,KAAOJ,EAAS,QAEvBJ,EAAOI,SAAWC,EAAS,GAInCL,EAAOE,OAAoC,IAA3BF,EAAOG,SAAS1O,OAAeoO,OAAOY,SAASN,SAAWH,EAAOG,SAC7E,KAAOH,EAAOI,UAAYJ,EAAOQ,MAAQT,EAAI3I,QAAQ4I,EAAOQ,OAAS,EAAI,IAAMR,EAAOQ,KAAO,IAGrG,OAAOR,GAmBX,IAAAU,EAAA,IAAA9P,QAAA+P,EAAA,IAAA/P,QAAAgQ,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAQA,MAAMG,EAuDFnT,YAAYE,GAASkT,EAAA,KAAAF,GAAAE,EAAA,KAAAH,GAAAG,EAAA,KAAAL,GAAA3S,EAAA,kBAAAA,EAAA,mBAAAA,EAAA,oBAAAA,EAAA,mBAAAA,EAAA,oBAZN,MAAIA,EAAA,YAEZ,MAAIA,EAAA,YACJ,MAAI8C,EAAA,KAAA2P,EAAA,CAAA1P,UAAA,EAAAC,MACsB,qBAAkBF,EAAA,KAAA4P,EAAA,CAAA3P,UAAA,EAAAC,WAAA,IAS/C,MAAM9C,EAAOC,KACbA,KAAKL,QAAUA,GAAW,GAC1BsE,EAAAA,EAAAA,OAAYlE,EAAMA,EAAKJ,SACvBI,EAAKX,GAAKW,EAAKJ,QAAQP,IAAMmE,EAAAA,EAAAA,SAC7BxD,EAAKoK,KAAOpK,EAAKJ,QAAQwK,MAAQrK,EAAAA,EAAAA,UAAAA,IACjC,MAAMgT,EAAgB/S,EAAKJ,QAAQoT,OAASjT,EAAAA,EAAAA,SAAAA,KAAuBA,EAAAA,EAAAA,SAAAA,IACnEC,EAAKiT,OAASjT,EAAKJ,QAAQqT,QAAUF,EAChC3T,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,cACpDI,EAAKkT,UAAW,GAEf9T,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,eACpDI,EAAKmT,WAAY,GAGrBnT,EAAKoT,kBAAoB,IAAIC,EAAAA,QAAc7P,EAAAA,EAAAA,SAU/CuB,cAAcC,GAGV,OAFa/E,KACRC,KAAK6E,cAAcC,GADX/E,KAYjBqT,gBACI,MAAMtT,EAAOC,KACb,SAAID,EAAKzB,KACAyB,EAAKgT,QAAUhT,EAAKzB,IAAIgV,iBAAmBvT,IACrCA,EAAKE,KAAKoT,gBAa7BE,aACI,MAAMxT,EAAOC,KACb,OAAID,EAAKzB,KACAyB,EAAKgT,QAAUhT,EAAKzB,IAAIgV,iBAAmBvT,EAI7C,EAHQA,EAAKE,KAAKuE,MAAM+O,aAcnC3I,iBAAiB4I,EAASC,GACtB,MAAM1T,EAAOC,WACPD,EAAKE,KAAKyT,WAAWF,GAC3BzT,EAAKyT,QAAUA,EACXzT,EAAKzB,MAAQmV,GACb1T,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAA2B,CAAE0E,MAAOzE,EAAMyT,QAASA,IAW5EG,aAAaC,GACT,OAAO,EASXC,mBACI,OAAO,EASXC,WAEI,OADa9T,KACAmK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,OACL,KAAKA,EAAAA,EAAAA,UAAAA,IACL,KAAKA,EAAAA,EAAAA,UAAAA,IACL,KAAKA,EAAAA,EAAAA,UAAAA,MACD,OAAO,EACX,QACI,OAAO,GAUnBiU,mBACI,OAAO,EAQXC,gBAAgBC,GACZ,OAAO,EAYXC,UAEI,MAAO,CAAErL,KADI7I,KACO6I,KAAM0B,MADbvK,KACyBuK,OAU1C4J,SAAS/U,EAAIoE,GACT,MAAMzD,EAAOC,KACb,IAAI4E,EAAS,KACb,GAAIpB,EAAO4Q,KAAOhV,EACdwF,EAASpB,OAGT,IAAK,IAAItB,EAAI,EAAGA,EAAIsB,EAAO6Q,SAAShR,OAAQnB,IAAK,CAC7C,MAAMoS,EAAIvU,EAAKoU,SAAS/U,EAAIoE,EAAO6Q,SAASnS,IAC5C,GAAIoS,EAAG,CACH1P,EAAS0P,EACT,OAIZ,OAAO1P,EAUX2P,kBAAkBnV,EAAI2F,GAClB,MAAMhF,EAAOC,KACPwU,EAAOzU,EAAKmU,SAAQ,GAEpBO,EAAO1U,EAAKoU,SAAS/U,EAAIoV,GAC/B,IAAKzU,EAAK2U,OAAOD,GAAO,CACpB,MAAME,EAAW,SAAUC,EAAGC,GAC1BD,EAAEE,gBAAkBD,EACpBD,EAAEP,UAAYO,EAAEP,SAAS9M,SAAQiB,GAAKmM,EAASnM,EAAGqM,MAEtD,GAAI9P,EAAS,CACT4P,EAASF,EAAM3U,EAAAA,EAAAA,WAAAA,SAEf,IAAI8U,EAAIH,EAAKjR,OACb,GACQoR,EAAEE,kBAAoBhV,EAAAA,EAAAA,WAAAA,UACtB8U,EAAEE,gBAAkBhV,EAAAA,EAAAA,WAAAA,aAExB8U,EAAIA,EAAEpR,aAEHoR,OAEN,CACDD,EAASF,EAAM3U,EAAAA,EAAAA,WAAAA,aAEf,IAAI8U,EAAIH,EAAKjR,OACb,GACQoR,EAAEE,kBAAoBhV,EAAAA,EAAAA,WAAAA,aACtB8U,EAAEP,SAASU,OAAMvM,GAAKA,EAAEsM,kBAAoBhV,EAAAA,EAAAA,WAAAA,gBAC5C8U,EAAEE,gBAAkBhV,EAAAA,EAAAA,WAAAA,aAExB8U,EAAIA,EAAEpR,aAEHoR,IAGf,OAAOH,EAGXC,OAAOD,GACH,MACMD,EADOxU,KACKwU,MADLxU,KACkBkU,SAAQ,GACvC,OAAOO,EAAKL,MAAQI,EAAKJ,IAU7BY,kBAAkB5V,EAAI6V,GAClB,MAAMlV,EAAOC,KACb,IAAIwU,EAAOS,GAAYlV,EAAKyU,KACvBA,IACDA,EAAOzU,EAAKmU,SAAQ,IAExB,MAAMO,EAAO1U,EAAKoU,SAAS/U,EAAIoV,GAC/B,OAAIC,EACOA,EAAKK,gBAETL,EAGXS,iBACI,OAAIlV,KAAKC,KAAKiV,eACHlV,KAAKC,KAAKiV,iBAGV,GAIfC,iBAGA3K,QACI,MAAMzK,EAAOC,KACPL,EAAUsE,EAAAA,EAAAA,QAAY,EAAM,GAAIlE,EAAKJ,QAAS,CAAEP,GAAIW,EAAKX,GAAK,WACpE,OAAO,IAAIW,EAAKN,YAAYE,GAGhCyV,UAAUC,GACN,OAAOA,EAAI9L,QAAQ,mBAAoB,YAG3C+L,KAAKhV,GACDN,KAAKC,KAAKqV,KAAKhV,GAGnBiV,OAAOjV,EAAUX,GACbK,KAAKC,KAAKsV,OAAOjV,EAAUX,GA6G/B6V,wBACI,MAAMzV,EAAOC,KAuBb,OAtBYgD,EAAGjD,EAAIwS,EAA8BxP,EAAAhD,EAAIwS,IAA+B,IAAI3T,SAAQ,SAAUC,EAAS4W,GAC/G,MAAMJ,EAAMtV,EAAK2V,wBAEjB3V,EAAKoT,kBAAkBwC,MAAMN,EAAK,CAAEO,cAAe,IAAKlX,MAAK,SAAUyF,GACnE0R,EAAA9V,EAAIyS,EAAAsD,GAAApV,KAAJX,EAAwBoE,EAAK4R,cACxBrX,MAAK,SAAUsX,GACRA,EAAaC,MACbR,EAAOzW,MAAK6W,EAAC9V,EAAI2S,EAAAwD,GAAAxV,KAAJX,EAAwBiW,EAAaC,SAGtDpX,EAAQmX,MAEXG,OAAM,SAAUF,UACNlW,EAAKqW,0BACZX,EAAOzW,MAAMiX,UAEtBE,OAAM,SAAUE,UACRtW,EAAKqW,0BACZX,EAAOzW,MAAK6W,EAAC9V,EAAI2S,EAAAwD,GAAAxV,KAAJX,EAAwBsW,YAOjDzL,mCACI,MAAM7K,EAAOC,KAEPqV,EAAM3D,EAAS3R,EAAKsV,KACpBxS,QAAcyT,IAAAA,QAAoBvT,EAAAhD,EAAIuS,GAAkCvS,EAAKoK,KAAO,IAAMkL,EAAIxD,MACpG,GAAIhP,EACA,OAAOA,EAGP,MAAM7D,MAAM,gCAAkCqW,EAAIxD,MA8B1D0E,eACI,OAthBY,SAAUlB,GAC1B,IAAIzQ,EAASyQ,EACb,GAAIA,EAAK,CACL,IAAI7L,EAAQ6L,EAAI7L,MAAM,oBAClBA,IACA5E,EAASA,EAAO2E,QAAQC,EAAM,GAAI,KAG1C,OAAO5E,EA8gBI4R,CAAYxW,KAAKC,KAAKsW,iBAEpC,SAAAT,EA/KsB3R,GACf,MAAMpE,EAAOC,KACb,IAAIgW,EAEJ,GAAI7R,EAAKsS,gBAAiB,CAEtB,MAAMC,EAAmBvS,EAAKwS,qBAAqB,oBAAoB,GACvE,GAAID,EACAV,EAAe,CAAEC,MAAOS,EAAiB3I,iBAExC,CACD,IAAIiF,EAASjT,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB,IAAIC,EAAKE,KAAK2W,WAAe,IAAI7W,EAAKE,KAAK4W,UAI9F,GAHAb,EAAehD,EAAO8D,KAAK3S,GAGvBpE,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,MACVkW,EAAae,UAAYf,EAAae,SAASnE,MAAO,CACtD,MAAMoE,EAAkB7S,EAAKwS,qBAAqB,SAClD,IAAK,IAAIzU,EAAI,EAAG+I,EAAM+L,EAAgB3T,OAAQnB,EAAI+I,EAAK/I,IAAK,CACxD,MAAM+U,EAAWD,EAAgB9U,GACjC,IACI9C,EADKmE,EAAAA,EAAAA,KAAAA,qBAA6B0T,EAAU,kBAAkB,GACtDC,WAAW/S,KAEnBgT,EAAQnB,EAAae,SAASnE,MAAM1N,QAAO,SAAUkS,GACrD,OAAOA,EAAGC,YAAcjY,KAG5B,GAAI+X,EAAM9T,OAAQ,CACd8T,EAAQA,EAAM,GACd,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAMI,kBAAkBlU,OAAQiU,IAAK,CACrD,IAAIE,EAAUL,EAAMI,kBAAkBD,GACtC,IAAIG,EAAWD,EAAQE,cAEvB,IAAIC,EACJ,MAAMC,EAAWX,EAASN,qBAAqB,qBAC/C,IAAK,IAAIkB,EAAI,EAAGC,EAAKF,EAASvU,OAAQwU,EAAIC,EAAID,IAAK,CAC/C,MAAME,EAAUH,EAASC,GACzB,GAAIE,EAAQC,cAAc,uBAAuBjK,aAAe0J,EAAU,CACtEE,EAAUI,EACV,OAIR,GAAIJ,EAAS,CACTH,EAAQS,oBAAsB,GACRnX,MAAMoX,KAAKP,EAAQhB,qBAAqB,qBAChDpP,SAAQ4Q,IAClBX,EAAQS,oBAAoB7P,KAAK,CAC7BgQ,WAAYD,EAAMxB,qBAAqB,cAAc,GAAG5I,YACxDsK,WAAYC,SAASH,EAAMxB,qBAAqB,cAAc,GAAG5I,aACjEwK,WAAYD,SAASH,EAAMxB,qBAAqB,cAAc,GAAG5I,aACjEyK,WAAYF,SAASH,EAAMxB,qBAAqB,cAAc,GAAG5I,aACjE0K,WAAYH,SAASH,EAAMxB,qBAAqB,cAAc,GAAG5I,uBAYrG,OADA8H,EAAA9V,EAAI4S,EAAA+F,GAAAhY,KAAJX,EAAwBiW,GACjBpX,QAAQC,QAAQmX,GAGvB,OAAO,IAAIpX,SAAQ,SAAUC,EAAS4W,GAClC,GAAIjE,GAAsC,iBAATrN,EAAmB,CAChD,MAAMwU,EAAYC,IAAIC,gBAAgBC,GACtC,IAAIC,EAAS,IAAIC,OAAOL,GACxBI,EAAOE,UAAY,SAAUla,GACJ,YAAjBA,EAAEoF,KAAK0Q,OACPmB,EAAejX,EAAEoF,KAAK6R,aAGtBH,EAAA9V,EAAI4S,EAAA+F,GAAAhY,KAAJX,EAAwBiW,KAGxBA,EAAe,CACXC,MAAO,qBAAuBlW,EAAKsV,KAEvCI,EAAOO,EAAaC,QAGxBpX,EAAQmX,GACR+C,EAAOG,aAEXH,EAAOI,YAAY,CACfhP,KAAMpK,EAAKoK,KACXiP,KAAMjV,EACNkR,IAAK9R,EAAAA,EAAAA,YAAAA,QAAuB,SAAW,EAAIA,EAAAA,EAAAA,YAAiBoJ,SAAS0F,SAASN,SAAWxO,EAAAA,EAAAA,mBAI7FyS,EAAe7R,EACftF,EAAQmX,MAIvB,SAAAE,EAEkBmD,GACf,MAAO,+DAAiErZ,KAAKqV,IAAM,MAAQgE,EAAS,IACvG,SAAAX,EA0CkB1C,GACf,MAAMjW,EAAOC,KAIPqV,EAAM3D,EAAS3R,EAAKJ,QAAQ0V,KAClC,IAAIiE,EAASvW,EAAAhD,EAAIuS,GAAkCvS,EAAKoK,KAAO,IAAMkL,EAAIxD,KACrE0H,EAAU,WAENpa,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAc,UAInDjW,EAAKyZ,yBAAyB9a,MAAK,WAC/B4X,IAAAA,QAAoBgD,EAAQtD,GAAcG,OAAMsD,GAAO/R,QAAQgS,KAAKD,SAI5E1Z,EAAKzB,IACLyB,EAAKzB,IAAIqb,OAAOJ,GAGhBA,IAEP1Z,EA3fC+S,EAAK,QAkDQ,CACXgH,KAAM,OACNC,QAAS,YA8cjB,W,quCCxjBAtW,EAAAA,EAAAA,MAAWA,EAAAA,EAAAA,OAAY,GAEvBzD,EAAAA,EAAAA,YAAqB,iFAErB,MAAMga,EAAiB,GACjBC,EAAwB,GACxBC,EAAuB,IAAIC,IAC3BC,EAAqB,GAErBC,EAAwB,SAASA,EAAsBC,EAAUvR,EAAMwR,GACzE,IAAIzV,GAAS,EAEb,GADAyV,EAAQC,MAAQD,EAAQC,MAAQ,EAC5BF,EAASvR,OAASA,EAClBjE,GAAS,OAIT,IAAK,IAAI1C,EAAIkY,EAAS/F,SAAShR,OAAS,EAAGnB,GAAK,EAAGA,IAC/C,GAAIiY,EAAsBC,EAAS/F,SAASnS,GAAI2G,EAAMwR,GAAU,CAC5DzV,GAAS,EACT,MAIZ,OAAOA,GAGX,IAAI2V,EAA0B,SAAU5a,GACpC,OAAOsE,EAAAA,EAAAA,OAAY,CAAEuW,WAAW,EAAMC,MAAM,GAAS9a,IAGrD+a,EAAgB,SAAUC,EAAQC,EAAKC,GACvC,IACOC,EAAGxG,EADN1P,EAAS,GAGbkW,EAAIF,GAAY,GAChBtG,EAAIuG,GAAY,GAEhB,IADA,IAAIE,GAHAJ,GAAkB,IAGXtS,OAAOyS,GACT5Y,EAAI,EAAGA,EAAI6Y,EAAG1X,OAAQnB,IACvB6Y,EAAG/R,QAAQ+R,EAAG7Y,MAAQA,IAA2B,IAAtBoS,EAAEtL,QAAQ+R,EAAG7Y,KACxC0C,EAAOwD,KAAK2S,EAAG7Y,IAGvB,OAAO0C,GAGPoW,EAAiB,SAAUxW,EAAOqE,EAAMoS,EAAOC,GAC/C,OAAOD,EAAME,MAAK,SAAU3T,GACxB,OAAOhD,EAAM4W,aAAavS,EAAMrB,EAAK0T,OAI7C,MAAMG,EAAkB,SAAUC,EAAQxU,EAAWyU,GACjD,MAAMC,EAAUvX,EAAAA,EAAAA,UAAe,CAACqX,EAAO,GAAIA,EAAO,IAAKxU,EAAWyU,GAC5DE,EAAaxX,EAAAA,EAAAA,UAAe,CAACqX,EAAO,GAAIA,EAAO,IAAKxU,EAAWyU,GAC/DG,EAAWzX,EAAAA,EAAAA,UAAe,CAACqX,EAAO,GAAIA,EAAO,IAAKxU,EAAWyU,GAC7DI,EAAc1X,EAAAA,EAAAA,UAAe,CAACqX,EAAO,GAAIA,EAAO,IAAKxU,EAAWyU,GAChE3W,EAAS,IAAI9D,MAAM,GAKzB,OAJA8D,EAAO,GAAKrD,KAAKqa,IAAIJ,EAAQ,GAAIC,EAAW,IAC5C7W,EAAO,GAAKrD,KAAKqa,IAAIH,EAAW,GAAIE,EAAY,IAChD/W,EAAO,GAAKrD,KAAK4K,IAAIuP,EAAS,GAAIC,EAAY,IAC9C/W,EAAO,GAAKrD,KAAK4K,IAAIqP,EAAQ,GAAIE,EAAS,IACnC9W,GAGX,IAAAiX,EAAA,IAAArZ,QAAAsZ,EAAA,IAAAtZ,QAAAuZ,EAAA,IAAAvZ,QAAAwZ,EAAA,IAAAxZ,QAAAyZ,EAAA,IAAAzZ,QAAA0Z,EAAA,IAAAzJ,QAAA0J,EAAA,IAAA1J,QAAA2J,EAAA,IAAA3J,QAAA4J,EAAA,IAAA5J,QAAA6J,EAAA,IAAA7J,QAAA8J,EAAA,IAAA9J,QAAA+J,EAAA,IAAA/J,QAAAgK,EAAA,IAAAhK,QAAAiK,EAAA,IAAAjK,QAAAkK,EAAA,IAAAlK,QAAAmK,EAAA,IAAAnK,QAAAoK,EAAA,IAAApK,QAAAqK,EAAA,IAAArK,QAQA,MAAMsK,UAAenK,EAAAA,EA0CjBnT,cACIG,SAASod,WAAWnK,EAAA,KAAAiK,GAAAjK,EAAA,KAAAgK,GAAAhK,EAAA,KAAA+J,GAAA/J,EAAA,KAAA8J,GAAA9J,EAAA,KAAA6J,GAAA7J,EAAA,KAAA4J,GAAA5J,EAAA,KAAA2J,GAAA3J,EAAA,KAAA0J,GAwSxB1J,EAAA,KAAAyJ,GA5CAzJ,EAAA,KAAAwJ,GAfAxJ,EAAA,KAAAuJ,GAAAvJ,EAAA,KAAAsJ,GAAAtJ,EAAA,KAAAqJ,GAAArc,EAAA,2BAAAA,EAAA,qBAAAA,EAAA,8BAAA8C,EAAA,KAAAkZ,EAAA,CAAAjZ,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAmZ,EAAA,CAAAlZ,UAAA,EAAAC,MAnPY,OAAIF,EAAA,KAAAoZ,EAAA,CAAAnZ,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAqZ,EAAA,CAAApZ,UAAA,EAAAC,MAEK,IAAIoX,MAAKtX,EAAA,KAAAsZ,EAAA,CAAArZ,UAAA,EAAAC,WAAA,IAK1B,MAAM9C,EAAOC,KAgBb,GAXAgD,EAAAjD,EAAI8b,EAAwB,MAE5B9b,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,MAAAA,OAAqBxD,GAErCA,EAAKkd,aAA2C,IAA7Bld,EAAKJ,QAAQsd,YAEhCld,EAAKsV,IAAMtV,EAAKJ,QAAQ0V,IACxBtV,EAAKiW,aAAezS,EAAAA,EAAAA,aAAgBxD,EAAKsV,KAEzCtV,EAAKmd,OAASnd,EAAKJ,QAAQud,OAEY,iBAA5Bnd,EAAKJ,QAAQwd,WACpBpd,EAAKkb,MAAQlb,EAAKqd,eAAiBrd,EAAKJ,QAAQwd,WAAWhL,MAAM,UAKjE,GAFApS,EAAKkb,MAAQ,GACblb,EAAKqd,eAAiB,GAClBtc,MAAMC,QAAQhB,EAAKJ,QAAQwd,YAC3B,IAAK,IAAIjb,EAAI,EAAGA,EAAInC,EAAKJ,QAAQwd,WAAW9Z,OAAQnB,IAAK,CACrD,MAAM2G,EAAO9I,EAAKJ,QAAQwd,WAAWjb,GACjB,iBAAT2G,GACP9I,EAAKkb,MAAM7S,KAAKS,GAChB9I,EAAKqd,eAAehV,KAAKS,IAGpB1J,OAAOqB,UAAUC,eAAeC,KAAKmI,EAAM,UAChD9I,EAAKqd,eAAehV,KAAKS,EAAKA,YACPzE,IAAnByE,EAAKxD,WAA2BwD,EAAKxD,YACrCtF,EAAKkb,MAAM7S,KAAKS,EAAKA,WAI9B,CAGH,IAAIwU,EAAUtd,EAAKJ,QAAQud,OAASnd,EAAKJ,QAAQud,OAAOI,SAAW,KAEnE,GAAID,EAAS,CACT,MAAME,EAAS,IAAIC,UACnB,IAAIC,EACJ,IACIA,EAAeF,EAAOG,gBAAgBL,EAAS,YAEnD,MAAOte,GACHwE,EAAAA,EAAAA,MAASxE,EAAE4e,SACXF,EAAe,KAEnB,GAAIA,EAAc,CACd,IAAIG,EAAgB3Z,EAAAA,EAAAA,qBAA0BwZ,EAAc,kBAC5D,GAAIG,GAAiBA,EAAcva,OAAS,EAAG,CAC3C,IAAI4X,EAAQhX,EAAAA,EAAAA,qBAA0B2Z,EAAc,GAAI,YAExD,GAAI3C,GAASA,EAAM5X,OAAS,EAAG,CAC3B,MAAMwF,EAAOoS,EAAM,GAAGlN,YACtBhO,EAAKkb,MAAM7S,KAAKS,GAChB9I,EAAKqd,eAAehV,KAAKS,OAQjD9I,EAAK8d,oBAAiDzZ,IAAhCrE,EAAKJ,QAAQke,gBAAsC9d,EAAKJ,QAAQke,eAEtF9d,EAAKE,KAAK6d,SAAW,IAAIlf,SAAQ,SAAUC,EAAS4W,GAChD,MAAMsI,EAAmB,SAAUC,GAC/Bje,EAAKE,KAAKge,SAASD,GACfA,EACAnf,EAAQmf,GAGRvI,EAAOzW,MAAM,sCAAwCe,EAAKX,GAAK,OAyCjE8e,EAAwB,SAAUlI,GAGpCjW,EAAKiW,aAAejW,EAAKiW,cAAgBA,EAEzC,IAAImI,EAAYpe,EAAKwW,eACrBhT,EAAAA,EAAAA,aAAgBxD,EAAKJ,QAAQ0V,KAAO9R,EAAAA,EAAAA,aAAgBxD,EAAKJ,QAAQ0V,MAAQW,EACzEzS,EAAAA,EAAAA,aAAgB4a,GAAa5a,EAAAA,EAAAA,aAAgB4a,IAAcnI,EA1CxC,WACnB,IAAIgI,EACJ,IAAKje,EAAKE,KAAKuE,MACX,OAAQzE,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,MACDie,EAAiBC,GACjB,MACJ,KAAKle,EAAAA,EAAAA,UAAAA,KACD,IACIke,EAAKnI,EAAG9V,EAAIoc,EAAAiC,GAAA1d,KAAJX,GACRge,EAAiBC,GAErB,MAAOrQ,GAGH5N,EAAKyV,wBAAwB9W,MAAK,SAAU2f,GACxCte,EAAKiW,aAAeqI,EACpB,IACIL,EAAKnI,EAAG9V,EAAIoc,EAAAiC,GAAA1d,KAAJX,GACRge,EAAiBC,GAErB,MAAOjf,GACH0W,EAAO1W,OAInB,MACJ,QACIif,EAAKnI,EAAG9V,EAAImc,EAAAoC,GAAA5d,KAAJX,GACRge,EAAiBC,IAe7BO,IAGJ,GAAIxe,EAAKiW,aAGL,OAFAkI,EAAsBne,EAAKiW,mBAC3BhT,EAAAjD,EAAI8b,EAAwBjd,QAAQC,QAAQkB,EAAKiW,eAIrDhT,EAAAjD,EAAI8b,EAAwB7B,EAAqBwE,IAAIze,EAAKsV,MAAQ,IAAIzW,SAAQ,SAAU6f,EAAKC,GACzF,MAAMC,EAAgB5e,EAAKyV,wBACrBoJ,EAAiB7e,EAAK8e,6BAE5BF,EACKjgB,MAAK,SAAUsX,GACZyI,EAAIzI,MAEPG,OAAM,SAAUF,GACb2I,EAAezI,OAAM,WACjBuI,EAAIzI,SAIhB2I,EACKlgB,MAAK,SAAUsX,GACZyI,EAAIzI,MAEPG,OAAM,WACHwI,EAAcxI,OAAM,SAAUF,GAC1ByI,EAAIzI,aAIpB+D,EAAqB8E,IAAI/e,EAAKsV,IAAGtS,EAAEhD,EAAI8b,IAEvC9b,EAAKyZ,yBACA9a,MAAK,SAAUsX,GACZkI,EAAsBlI,MAEzBG,OAAM,SAAUF,GACTlW,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAMsZ,OAAQ,4BAErE5D,EAAOQ,SAInBjT,EAAAjD,EAAIgc,EAA0B,MAE1Bjc,EAAAA,EAAAA,UAAAA,OAA0BC,EAAKoK,MAC/BpK,EAAKE,KAAK8e,aAqDlBja,cAAcC,GACG/E,KACRwU,KAAO,KACZ5U,MAAMkF,cAAcpE,KAFPV,KAEkB+E,GAwGnCia,sBACI,MAAMjf,EAAOC,KACPif,EAAUlf,EAAKod,WACf+B,EAAcnf,EAAKof,UACzB,IAAInJ,EAAejW,EAAKiW,aAExB,MAAMoJ,EAAgBpJ,EAAae,SAASW,cAAc9O,MAAKpB,GAAOA,EAAI6P,aAAe6H,IAEzF,GAAIE,EAAe,CACf,MAAMC,EAAYrJ,EAAae,SAASnE,MAAMhK,MAAKpB,GAAOA,EAAI6P,aAAe4H,IAC7E,GAAII,EAAU9H,kBAAmB,CAC7B,MAAM+H,EAAoBD,EAAU9H,kBAAkB3O,MAAKpB,GAAOA,EAAIkQ,gBAAkBwH,IACxF,GAAII,GAAqBA,EAAkBrH,qBAAuBqH,EAAkBrH,oBAAoB5U,OAAQ,CAC5G,MAAMkc,EAAM,GAOZ,OANAD,EAAkBrH,oBAAoB1Q,SAAQ,SAAUiY,GACpD,MAAMC,EAASL,EAAchH,WAAWxP,MAAKpB,GAAOA,EAAI6P,aAAemI,EAAmBpH,aACtFqH,GACAF,EAAInX,KAAKnE,EAAAA,EAAAA,OAAY,CAAEyb,YAAaN,EAAchH,WAAWpP,QAAQyW,IAAWA,EAAQD,OAGzFD,EAGP,OAAOH,EAAchH,WAIzB,OAAOgH,EAAchH,WAG7B,OAAO,KAeXxN,oBAAoBuS,EAAYxd,GAC5B,MAAMI,EAAOC,WACPD,EAAKE,KAAK0f,WAChB,IAAIC,EAAK9e,MAAMC,QAAQoc,GAAcA,EAAaA,EAAWhL,MAAM,KACnEpS,EAAKkb,MAAQ2E,EACb,IAAI5b,EAAOuW,EAAwB5a,GAC/BqE,EAAKwW,YACLoF,EAAE/J,EAAG9V,EAAIqc,EAAAyD,GAAAnf,KAAJX,EAA0B6f,IAEnC5c,EAAAjD,EAAIgc,EAA0B,MAC9B,IAAI+D,EAAY,CACZC,OAAQH,EAAGtV,KAAK,KAAM0V,aAAa,GAEvC,GAAIhc,EAAKyW,KAAM,CACX,IAAIyC,EAASna,EAAAhD,EAAIkc,IAAelc,EAAKE,KAAKggB,YAC1Cjd,EAAAjD,EAAIkc,EAAchY,EAAAA,EAAAA,OAAYiZ,EAAQ4C,SAGlC/f,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAAiC,CAAE0E,MAAOzE,IAE/DA,EAAKyU,KAAO,KACZzU,EAAKE,KAAKigB,UAAUJ,IAChB9b,EAAKmc,OAAUpgB,EAAKzB,MAEpByB,EAAKqd,eAAiBrd,EAAKkb,OAE3Blb,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAA2B,CAAE0E,MAAOzE,IAG7D,OAAOA,EAAKkb,MAYhBrQ,gBAAgB1F,GACZ,MAAMnF,EAAOC,WACPD,EAAKE,KAAK0f,WAChB,IAAIS,EAAYrgB,EAAKE,KAAKggB,YA0B1B,cAzBOG,EAAUlb,cACVkb,EAAUC,WAObnb,aAAkB3B,EAAAA,EAAAA,OAAAA,OAClBxD,EAAKmF,OAASkb,EAAUlb,OAASA,EAAOob,WAGlC,IAAI9C,WAAYE,gBAAgBxY,EAAQ,YAAY8S,cAAc,eAKxEjY,EAAKmF,OAASkb,EAAUC,WAAanb,EAJrCnF,EAAKmF,OAASkb,EAAUlb,OAASA,EAMrCnF,EAAKE,KAAKigB,UAAUE,GAMblb,EAqCX0F,oBAAoBuS,EAAYxd,GAC5B,MAAMI,EAAOC,WACPD,EAAKE,KAAK0f,WAChB,MAAM3b,EAAOuW,EAAwB5a,GACrC,IAAI4gB,EAAOzf,MAAMC,QAAQoc,GAAcA,EAAaA,EAAWhL,MAAM,KACjEyN,EAAK7f,EAAKE,KAAKggB,YAAYF,OAAShgB,EAAKE,KAAKggB,YAAYF,OAAO5N,MAAM,KAAO,GAC9EnO,EAAKwW,YACL+F,EAAI1K,EAAG9V,EAAIuc,EAAAkE,GAAA9f,KAAJX,EAA2BwgB,GAClCX,EAAK7f,EAAK0gB,4BAGd,aADoB1gB,EAAK2gB,cAAa7K,EAAC9V,EAAIyc,EAAAmE,GAAAjgB,KAAJX,EAAqB2a,EAAckF,EAAIW,EAAM,OAAQ5gB,GAgBhGiL,uBAAuBuS,EAAYxd,GAC/B,MAAMI,EAAOC,WACPD,EAAKE,KAAK0f,WAChB,MAAM3b,EAAOuW,EAAwB5a,GACrC,IAAIihB,EAAO9f,MAAMC,QAAQoc,GAAcA,EAAaA,EAAWhL,MAAM,KACjEyN,EAAK7f,EAAKE,KAAKggB,YAAYF,OAC3B/b,EAAKwW,YACLoG,EAAI/K,EAAG9V,EAAIuc,EAAAkE,GAAA9f,KAAJX,EAA2B6gB,GAClChB,EAAK7f,EAAK0gB,4BAGd,aADoB1gB,EAAK2gB,cAAa7K,EAAC9V,EAAIyc,EAAAmE,GAAAjgB,KAAJX,EAAqB2a,EAAckF,EAAI,KAAMgB,IAAQjhB,GAgBhGiL,uBAAuBuS,EAAYxd,GAC/B,MAAMI,EAAOC,WACPD,EAAKE,KAAK0f,WAChB,MAAM3b,EAAOuW,EAAwB5a,GACrC,IAAIkhB,EAAO/f,MAAMC,QAAQoc,GAAcA,EAAaA,EAAWhL,MAAM,KACjE2O,EAAoB/gB,EAAKE,KAAKggB,YAAYF,OAC1C/b,EAAKwW,YACLqG,EAAIhL,EAAG9V,EAAIuc,EAAAkE,GAAA9f,KAAJX,EAA2B8gB,GAClCC,EAAoB/gB,EAAK0gB,4BAE7B,MAAMF,EAAO,GACPK,EAAO,GACb,IAAK,IAAI1e,EAAI,EAAGA,EAAI2e,EAAKxd,OAAQnB,IAAK,CAClC,IAAI6e,EAAIF,EAAK3e,GACT4e,EAAkB9X,QAAQ+X,GAAK,EAC/BR,EAAKnY,KAAK2Y,GAGVH,EAAKxY,KAAK2Y,GAGlB,IAAIC,EAAW,GACXT,EAAKld,OAAS,GACd2d,EAAS5Y,KAAKrI,EAAKkhB,cAAcV,EAAMvc,IAEvC4c,EAAKvd,OAAS,GACd2d,EAAS5Y,KAAKrI,EAAKmhB,iBAAiBN,EAAM5c,IAE9C,MAAMmd,QAAeviB,QAAQwiB,IAAIJ,GAC3BK,EAAKF,EAAO,GACZG,EAAKH,EAAO,GAClB,OAAIE,EACIC,EACOD,EAAGhZ,OAAOiZ,GAGVD,EAIJ,GAYfZ,2BACI,MAAM1gB,EAAOC,KACPuhB,EAAUxhB,EAAKE,KAAKuE,MAC1B,GAAIzE,EAAKE,KAAKC,SAASqhB,IAAYxhB,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KAC7C,IAAIiD,EAAChD,EAAIgc,GAAyB,CAC9B,IAAIoB,EAAapd,EAAKE,KAAKggB,YAAYF,OACvC5C,EAAarc,MAAMC,QAAQoc,GAAcA,EAAaA,EAAWhL,MAAM,KACvEnP,EAAAjD,EAAIgc,EAAAlG,EAA0B9V,EAAIuc,EAAAkE,GAAA9f,KAAJX,EAA2Bod,UAI7Dna,EAAAjD,EAAIgc,EAA0Bhc,EAAKkb,OAEvC,OAAOlY,EAAAhD,EAAIgc,GAAwBpR,QAGvCkJ,mBACI,MAAM9T,EAAOC,KACb,IAAK,IAAIkC,EAAI,EAAG+I,EAAMlL,EAAKkb,MAAM5X,OAAQnB,EAAI+I,EAAK/I,IAC9C,IAAKnC,EAAKyhB,mBAAmBzhB,EAAKkb,MAAM/Y,IACpC,OAAO,EAGf,OAAO,EAGXyR,aAAazM,GACT,MAAMnH,EAAOC,KACb,OAAQD,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD,OAAOC,EAAKE,KAAK0T,aAAazM,IAAQnH,EAAKE,KAAKwhB,wBAAwBva,GAAK7D,OAAS,EAC1F,KAAKvD,EAAAA,EAAAA,UAAAA,IACD,OAAOC,EAAKE,KAAK0T,aAAazM,GAItC,OAAO,EAGXwa,iBAAiB/hB,GACb,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAIiF,EAAS7E,EAAKE,KAAKyhB,mBACvB,GAAI/hB,EAAQgiB,iBAAmB5hB,EAAK6hB,cAAe,CAC/C,MAAMC,EAAU9hB,EAAK+hB,mBACjBD,aAAmBjP,EAAAA,IACnBhO,EAASA,EAAOyD,OAAOwZ,EAAQ5hB,KAAKyhB,qBAqB5C,OAlBI/hB,EAAQoiB,aACRnd,EAASA,EACJtG,KAAI,SAAU4I,GACX,OAAOjD,EAAAA,EAAAA,WAAgBiD,MAE1BhC,QAAO,SAAUjG,GACd,OAAgB,OAATA,KAEVgJ,QAAO,SAAU+Z,EAAMC,GAIpB,OAHID,EAAKhZ,QAAQiZ,GAAO,GACpBD,EAAK5Z,KAAK6Z,GAEPD,IACR,IACF1jB,KAAI,SAAUW,GACX,MAAO,QAAUA,MAGtB2F,EAGXsd,gBACI,MAAMniB,EAAOC,KAEb,OAAQD,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD,OAAOC,EAAKE,KAAKuE,MAAM2d,YAAYD,gBAAgBE,UACvD,KAAKtiB,EAAAA,EAAAA,UAAAA,IACD,OAAOC,EAAKzB,IAAI4I,KAI5BiO,cAAcxV,GACV,MAAMI,EAAOC,KAEb,IADAL,EAAUA,GAAW,IACTuH,IACR,OAAQnH,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD,IAAIqf,EAAYpf,EAAKE,KAAKwhB,wBAAwB9hB,EAAQuH,KAAK,GAC3DiY,GACApf,EAAKof,UAAYA,EACjBpf,EAAKE,KAAKoiB,aAAalD,IAGvBpf,EAAKE,KAAKkV,cAAcxV,GAE5BI,EAAKuiB,eAAiBnD,EACtB,MACJ,KAAKrf,EAAAA,EAAAA,UAAAA,IACDC,EAAKE,KAAKkV,cAAcxV,GACxBI,EAAKuiB,eAAiBviB,EAAK4T,aAAahU,EAAQuH,MAYhE6M,iBAAiBwO,EAAWrH,GACxB,MAAMnb,EAAOC,KACb,IAAI4E,EACJ,MAAM4d,EAAc,WAChB,OAAOziB,EAAKzB,IAAI2B,KAAKwiB,gBAAkB1iB,EAAKzB,IAAIokB,mBAAqB,OAEzE,IAAIC,EACAzgB,EACJ,OAAQnC,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD8E,GAAS,EACT,IAAIge,EAAa7iB,EAAKE,KAAK4iB,cAAc9iB,EAAKJ,QAAQwf,WACtD,GAAIyD,EAEA,IADAD,EAAeH,IACVtgB,EAAI,EAAGA,EAAI0gB,EAAWvf,OAAQnB,IAAK,CAEpC,GAD0BnC,EAAKE,KAAK6iB,qBAAqBF,EAAW1gB,IAC9C,KAAOygB,EAAc,CACvC/d,GAAS,EACT,OAIZ,MACJ,KAAK9E,EAAAA,EAAAA,UAAAA,IACD8E,GAAS,EACT,IAAIme,EAAShjB,EAAKE,KAAK+iB,mBACvB,GAAID,EAAO1f,OAAS,EAAG,CAEnB,IAAIoR,EADJkO,EAAeH,IAEXlK,SAASiK,GAAWU,aAAeV,IACnC9N,EAAO1R,EAAAhD,EAAIic,GAAoBwC,IAAI+D,IAElC9N,IACDA,EAAOsO,EAAOna,MAAKpE,GAASzE,EAAKqb,aAAarb,EAAKE,KAAKijB,QAAQ1e,GAAQ+d,EAAWrH,MAEvF,MAAMiI,EAAuB,SAAU1O,GACnC,MAAM2O,EAAoBrjB,EAAKE,KAAK6iB,qBAAqBrO,GACzD,QAAS7M,WAAWwb,EAAkB,IAAMT,GAAgB/a,WAAWwb,EAAkB,IAAMT,IAEnG,GAAIlO,IACA7P,EAASue,EAAqB1O,IAGzB7P,GACG6P,EAAK7B,OAAS6B,EAAK7B,MAAMvP,OAAS,GAClC,OAAOoR,EAAK7B,MAAMuI,KAAKgI,GAKvC,MACJ,QACIve,GAAS,EAGjB,OAAOA,EAOXoP,gBAAgBnL,EAAMqS,GAClB,MAAMnb,EAAOC,KACb,IAAI4E,GAAS,EACb,OAAQ7E,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD,GAAIC,EAAKE,KAAKojB,eAAgB,CAC1Bze,GAAS,EACT,MAEJ,MACJ,KAAK9E,EAAAA,EAAAA,UAAAA,IAAsB,CACvB,MAAMwjB,EAAoB,SAA2Bza,GACjD,OAAO0a,EAAyB1a,EAAM9I,EAAKE,KAAKujB,qBAG9CD,EAA2B,SAASA,EAAyB1a,EAAM4a,GACrE,IAAI7e,EAAS,GACb,MAAMgQ,EAAI7U,EAAKE,KAAKijB,QAAQO,GAC5B,GAAI1jB,EAAKqb,aAAaxG,EAAG/L,EAAMqS,GAC3BtW,EAAOwD,KAAKwM,OAEX,CACD,MAAM8O,EAAa3jB,EAAKE,KAAK0jB,cAAcF,GAC3C,IAAIG,GAAe,EACnBF,EAAWnc,SAAQyC,IACf,MAAMsK,EAAIiP,EAAyB1a,EAAMmB,GACrCsK,EAAEjR,SACFugB,GAAe,EACfhf,EAASA,EAAOyD,OAAOiM,OAG3BsP,GACAhf,EAAOwD,KAAKwM,GAGpB,OAAOhQ,GAGXA,EAAS0e,EAAkBza,GAAMsS,MAAKvG,GAAKoG,EAAejb,EAAM6U,EAAG7U,EAAKkb,SACxE,MAEJ,QACIrW,GAAS,EAGjB,OAAOA,EAGXif,gBAAgBpP,GACZ,MAAM1U,EAAOC,KACb,IAAI4E,GAAS,EACb,OAAQ7E,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD,GAAIC,EAAKE,KAAKojB,eAAgB,CAC1Bze,GAAS,EACT,MAEJ,MACJ,KAAK9E,EAAAA,EAAAA,UAAAA,IAAsB,CACvB,MAAMgkB,EAAkB,SAAUC,EAAiBC,GAC/C,OAAID,IAAoBC,GAGjBD,EAAgBnR,OAASmR,EAAgBnR,MAAMuI,MAAK8I,GAASH,EAAgBG,EAAOD,MAE/F,IAAK,IAAI9hB,EAAI,EAAGgiB,EAAKnkB,EAAKkb,MAAM5X,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAEjD,GADcnC,EAAKokB,oBAAoBpkB,EAAKkb,MAAM/Y,IACxCiZ,MAAKvG,GAAKkP,EAAgBlP,EAAGH,KAAQ,CAC3C7P,GAAS,EACT,OAGR,MAEJ,QACIA,GAAS,EAGjB,OAAOA,EAmCXwf,gBAEI,OADapkB,KACDkU,SAAQ,GAAO,GAI/BmQ,cAEI,OADarkB,KACDkU,SAAQ,GAKxBA,QAAQoQ,EAAUC,GAAS,GACvB,MAAMxkB,EAAOC,UACIoE,IAAbkgB,IACAA,GAAYvkB,EAAKkT,UAErB,IAAIrO,GAAS0f,IAAYC,GAAiBxkB,EAAKyU,KAa/C,IAAK5P,EAAQ,CACT,IAAI4f,EACJ,MAAMC,EAAc,SAASA,EAAYhB,EAAkBiB,EAAeC,EAAYJ,GAClF,IAAInQ,EACJ,IAAK,IAAI3L,KAAO1F,EAAAhD,EAAIic,GAAoB9c,OACpC,GAAI6D,EAAAhD,EAAIic,GAAoBwC,IAAI/V,KAASgb,EAAkB,CACvDrP,EAAM3L,EACN,MAGH2L,IACDA,EAAM7Q,EAAAA,EAAAA,SACNR,EAAAhD,EAAIic,GAAoB8C,IAAI1K,EAAKqP,IAErC,IAAImB,EAAO,CACP/b,KAAM9I,EAAKE,KAAKijB,QAAQO,GACxBlZ,MAAOkZ,EAAiBlZ,OAASkZ,EAAiBoB,MAClDzQ,IAAKA,EACLC,SAAU,GACVyQ,WAAYrB,EAAiBsB,SAC7BC,WAAYvB,EAAiBwB,aAQjC,GANIN,IACAH,EAAWI,GAGX5J,EAAejb,EAAM6kB,EAAK/b,KAAM9I,EAAKqd,kBACrCsH,GAAgB,GAChBH,EAAQ,CACR,IAAII,IAAU9O,EAAK9V,EAAI4c,EAAAuI,IAAAxkB,KAAJX,EAAmB6kB,EAAK/b,MAAQ+b,EAAKra,OAIpD,OAAO,KAHPma,GAAgB,EAOxB,GAAK3kB,EAAKJ,QAAQoT,OA2Bd6R,EAAK/b,KAAO9I,EAAKkb,MAAM3Q,KAAK,KAC5Bsa,EAAKra,MAAQxK,EAAKwK,OAASqa,EAAKra,MAChCqa,EAAK7R,OAAShT,EAAKolB,UACfplB,EAAKJ,QAAQylB,YACbR,EAAKS,OAAS,CAAC,CACX1T,IAAK5R,EAAKJ,QAAQylB,iBAhCJ,CAQtB,IAAIljB,EANA0iB,EAAKvf,UADLuf,IAASJ,EACQzkB,EAAKsT,gBAGLtT,EAAKiU,gBAAgB4Q,EAAK/b,MAI/C,IAAI6a,EAAa3jB,EAAKE,KAAK0jB,cAAcF,GACzC,IAAKvhB,EAAI,EAAGA,EAAIwhB,EAAWrgB,OAAQnB,IAAK,CACpC,MAAMkY,EAAWqK,EAAYf,EAAWxhB,GAAIwiB,OAAetgB,EAAWmgB,GAClEnK,IA5DK3F,EA6DImQ,GA7DEX,EA6DI7J,GA5DzB5W,OAASiR,EACX1U,EAAKJ,QAAQ2lB,YAEbrhB,EAAAA,EAAAA,YAAiBwQ,EAAKJ,SAAU4P,GAGhCxP,EAAKJ,SAASjM,KAAK6b,IA0DfW,EAAKS,OAAStlB,EAAKE,KAAKkD,UAAUsgB,GAG7BiB,GAAkBC,IAEnBH,EAASnQ,SAAWmQ,EAASnQ,SAAShM,OAAOuc,EAAKvQ,UAClDuQ,EAAO,MAvER,IAAUnQ,EAAMwP,EAoFvB,OAAOW,GAGX,OAAQ7kB,EAAKoK,MACT,KAAKrK,EAAAA,EAAAA,UAAAA,KACD8E,EAAS6f,EAAY1kB,EAAKE,KAAKojB,gBAAiBtjB,EAAKkT,UAAU,GAC/D,MACJ,KAAKnT,EAAAA,EAAAA,UAAAA,IACD,GAAIC,EAAKiW,aAAc,EAIC,SAASuP,EAAc9Q,GACvC,IAAImQ,EAAO9kB,EAAAA,EAAAA,WAAAA,YACX,GAAI2U,EAAM,CACN,GAAIA,EAAKJ,SACL,IAAK,IAAInS,EAAI,EAAG+I,EAAMwJ,EAAKJ,SAAShR,OAAQnB,EAAI+I,EAAK/I,IAAK,CACtD,IAAIsjB,EAASD,EAAc9Q,EAAKJ,SAASnS,IACzC,GAAIsjB,IAAW1lB,EAAAA,EAAAA,WAAAA,SACX0lB,IAAW1lB,EAAAA,EAAAA,WAAAA,YAA+B,CAC1C8kB,EAAO9kB,EAAAA,EAAAA,WAAAA,YACP,OAIR2U,EAAKpP,YACHoP,IAAS+P,GAAYzkB,EAAKod,YAAcpd,EAAKod,WAAW9Z,QAAUoR,EAAKpP,WAErEoP,IAAS+P,KACbI,EAAO9kB,EAAAA,EAAAA,WAAAA,SAEX2U,EAAKK,gBAAkB8P,EAE3B,OAAOA,EAEXW,CA1BA3gB,EAAS6f,EAAY1kB,EAAKE,KAAKujB,mBAC1Bc,IAAYvkB,EAAKkT,UAAqB,EAAMsR,IA2B7CxkB,EAAKkT,UACL4C,EAAA9V,EAAI2c,EAAA+I,GAAA/kB,KAAJX,EAAe6E,IAO1BA,IACDA,EAAS,CACLiE,KAAM9I,EAAK8I,KAAM0B,MAAOxK,EAAKwK,QAGrC3F,EAAO2F,MAAQxK,EAAKwK,OAAS3F,EAAO2F,MACpC3F,EAAO8gB,aAAe3lB,EAAK2lB,cAAgB9gB,EAAO8gB,aAC7CpB,IACDvkB,EAAKyU,KAAO5P,GAGpB,OAAOA,EAGX2P,kBAAkBnV,EAAI2F,GAClB,MAAMhF,EAAOC,KACP2lB,EAAW/lB,MAAM2U,kBACjBqR,EAAQ,IACdxmB,EAAK0B,MAAMC,QAAQ3B,GAAMA,EAAK,CAACA,IAC5BmI,SAAQ,SAAUnI,GACjBwmB,EAAMxd,KAAKud,EAASjlB,KAAKX,EAAMX,EAAI2F,OAGvC,IAAI8gB,EAAY,SAASA,EAAUpR,GAC/B,IAAI7P,EAAS,GACb,GAAI6P,EAAK5L,KACLjE,EAAO,GAAK6P,EAAK5L,UAGjB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuS,EAAKJ,SAAShR,OAAQnB,IACtC0C,EAASA,EAAOyD,OAAOwd,EAAUpR,EAAKJ,SAASnS,KAGvD,OAAO0C,GAGX,GAAIghB,EAAMzK,MAAM1G,GAAS1U,EAAK2U,OAAOD,KAC7B1P,GAAiC,IAAtBhF,EAAKkb,MAAM5X,OAEtBtD,EAAKkhB,cAAclhB,EAAKqd,gBAAgB1e,MAAK,WACzCqB,EAAK+E,eAAc,MAIvB/E,EAAK+E,cAAcC,OAGtB,CACD,IAAIkW,EAAQ2K,EAAMtnB,KAAImW,GAAiBoR,EAAUpR,KAASnK,KAAK,KAC3DvF,EACAhF,EAAKkhB,cAAchG,GAGnBlb,EAAKmhB,iBAAiBjG,GAG9B,OAAO2K,EAAMviB,OAAS,EAAIuiB,EAAQA,EAAM,GAG5CE,YAAYC,EAAWC,GACnB,MAAMjmB,EAAOC,KACb,IAAI4E,EAAS,GACb,GAAI7E,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBC,EAAKiW,aAAc,CACzD+P,EAAYA,GAAahmB,EAAKkb,MAAM,GAqBpCrW,EAnBe,SAASqhB,EAASxR,GAC7B,IAAIgK,EAAM,GACNyH,EAAWnmB,EAAKE,KAAKijB,QAAQzO,GACjC,GAAI1U,EAAKqb,aAAa8K,EAAUH,EAAWC,GACvCvH,EAAIrW,KAAKqM,QAIT,IADA,IAAIJ,EAAWtU,EAAKE,KAAK0jB,cAAclP,GAC9BvS,EAAI,EAAGA,EAAImS,EAAShR,OAAQnB,IAAK,CACtC,IAAIoS,EAAI2R,EAAS5R,EAASnS,IAC1B,GAAIoS,EAAEjR,OAAQ,CACVob,EAAMnK,EACNrQ,EAAAA,EAAAA,YAAiBwa,EAAKhK,GACtB,OAIZ,OAAOgK,EAEFwH,CAASlmB,EAAKE,KAAKujB,oBAEhC,OAAO5e,EAGXD,QAAQohB,EAAWC,GACf,OAAOhmB,KAAK8lB,YAAYC,EAAWC,GAAc1nB,KAAI,SAAUmW,GAC3D,OAAOA,EAAKlK,OAASkK,EAAKoQ,SAIlCV,oBAAoBtb,GAChB,MAAMjE,EAAS,GACT7E,EAAOC,KACPkjB,EAAUnjB,EAAKE,KAAKkmB,mBAAqBrmB,EAAAA,EAAAA,UAAAA,KAAwBC,EAAKE,KAAKmmB,cAAgBrmB,EAAKE,KAAKijB,QACrG0C,EAAQ7lB,EAAKE,KAAK+iB,mBACxB,IAAK,IAAI9gB,EAAI,EAAG+I,EAAM2a,EAAMviB,OAAQnB,EAAI+I,EAAK/I,IACrCnC,EAAKqb,aAAa8H,EAAQ0C,EAAM1jB,IAAK2G,IACrCjE,EAAOwD,KAAKwd,EAAM1jB,IAG1B,OAAO0C,EAGX4c,mBAAmB3Y,GACf,MACM+c,EADO5lB,KACMmkB,oBAAoBtb,GACvC,OAAI+c,EAAMviB,OACCuiB,EAAM,GAEV,KAGXS,kBAAkB7hB,GACd,MAAMI,EAAS,GACTmF,EAAc,SAAUuc,EAAKhf,GAC/B,GAAIgf,GAAOA,EAAI1T,OAAS0T,EAAI1T,MAAMvP,OAC9B,IAAK,IAAInB,EAAI,EAAGA,EAAIokB,EAAI1T,MAAMvP,OAAQnB,IAClCoF,EAAIc,KAAKke,EAAI1T,MAAM1Q,IACnB6H,EAAYuc,EAAI1T,MAAM1Q,GAAIoF,IAKtC,OADAyC,EAAYvF,EAAOI,GACZA,EAGXwW,aAAamL,EAAIC,EAAItL,GAEjB,IAAItW,EAAS2hB,IAAOC,EACpB,MAAMC,OAAyBriB,IAApB8W,EAAgCA,EAF9Blb,KAEqD6d,eAClE,IAAKjZ,GAAU6hB,GAAMF,GAAMC,EAAI,CAE3B,IAAIE,EAAOH,EAAGvd,QAAQ,KAClB2d,EAAOH,EAAGxd,QAAQ,KAClB0d,GAAQ,GAAKC,EAAO,EACpB/hB,EAAS2hB,EAAGK,OAAOF,EAAO,KAAOF,EAE5BG,GAAQ,GAAKD,EAAO,IACzB9hB,EAAS2hB,IAAOC,EAAGI,OAAOD,EAAO,IAGzC,OAAO/hB,EAGX4U,yBACI,OAAAzW,EAAO/C,KAAI6b,GAGf3G,iBACI,OAAOlV,KAAKC,KAAKiV,iBAGrB2R,eAAeC,GACX9mB,KAAKC,KAAK4mB,eAAeC,GAG7BC,UAAUpnB,GACN,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAI2b,EAAS,KAEb,GAAIvb,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CACpC,MAAMknB,EAASrnB,EAAQuH,KAAOnH,EAAKzB,KAAOyB,EAAKzB,IAAI8I,UAAY,YACzD6f,EAAahjB,EAAAA,EAAAA,WAAgB+iB,GAE7BE,EAAuB,SAAUzS,GACnC,IAAI0S,EAAS,KACTC,GAAa,EACjB,GAAI3S,EAAK4S,YAAa,CAClBF,EAASrmB,MAAMC,QAAQ0T,EAAK4S,aAAe5S,EAAK4S,YAAc,CAAC5S,EAAK4S,aACpE,MAAMC,EAAYH,EAAOjiB,QAAOqiB,GAAQtjB,EAAAA,EAAAA,WAAgBsjB,EAAKrgB,OAAS+f,IAClEK,EAAUjkB,SACV+jB,GAAa,EACbD,EAASG,GAgCjB,OA7BKH,GAAW1S,EAAK+S,2BAA4B/S,EAAKjR,SAClD2jB,EAASD,EAAqBzS,EAAKjR,SAEL,UAA9BzD,EAAKiW,aAAa1G,SAAuB6X,IAGzCA,EAASA,EAAO7oB,KAAI,SAAUipB,GAC1B,GAAiB,cAAbA,EAAKrgB,IAAqB,CAC1B,MAAMugB,EAAaF,EAAKjM,OACxB,MAAO,CACHpU,IAAKqgB,EAAKrgB,IACVoU,OAAQ,CAACmM,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,KAGpE,MAAiB,WAAbF,EAAKrgB,IACH,CACHA,IAAK,YACLoU,OAAQiM,EAAKjM,QAGdiM,MAENH,GAAc3S,EAAK+S,0BACpBL,EAAO7gB,QAAQ,CACXY,IAAK,YACLoU,OAAQ7G,EAAK+S,4BAIlBL,GAGLO,EAAgB,IAAI5mB,MAAMf,EAAKkb,MAAM5X,QAC3C,IAAK,IAAInB,EAAI,EAAGgiB,EAAKwD,EAAcrkB,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACpD,MAAMuS,EAAO1U,EAAKyhB,mBAAmBzhB,EAAKkb,MAAM/Y,IAChD,IAAKuS,EAAM,OAAO,KAClB,MAAM0S,EAASD,EAAqBzS,GACpC,IAAK0S,EACD,OAAO,KAEXO,EAAcxlB,GAAKilB,EAGvB7L,EAAS,CAACqM,OAAOC,kBAAmBD,OAAOC,kBAAmBD,OAAOE,kBAAmBF,OAAOE,mBAC/FH,EACKppB,KAAI,SAAqB6oB,GACtB,MAAMviB,EAAS,GACf,IAAIkjB,EAAWC,EAiBf,OAhBAZ,EAAO5f,SAAQ,SAAUggB,EAAM9f,GACf,IAARA,IACAqgB,EAAYP,GAEZtjB,EAAAA,EAAAA,WAAgBsjB,EAAKrgB,OAAS+f,IAC9Bc,EAAUR,MAGdQ,GACAnjB,EAAOsC,IAAM8f,EACbpiB,EAAO0W,OAASyM,EAAQzM,SAGxB1W,EAAOsC,IAAM4gB,EAAU5gB,IACvBtC,EAAO0W,OAASwM,EAAUxM,QAEvB1W,KAEVqD,QAAO,SAAmCE,EAAK6f,GAC5C,IAAIC,EAAY9f,EAAIqW,IAAIwJ,EAAQ9gB,KAChC,MAAMghB,EAAYF,EAAQ1M,OAW1B,OAVI2M,GACAA,EAAU,GAAK1mB,KAAKqa,IAAIqM,EAAU,GAAIC,EAAU,IAChDD,EAAU,GAAK1mB,KAAKqa,IAAIqM,EAAU,GAAIC,EAAU,IAChDD,EAAU,GAAK1mB,KAAK4K,IAAI8b,EAAU,GAAIC,EAAU,IAChDD,EAAU,GAAK1mB,KAAK4K,IAAI8b,EAAU,GAAIC,EAAU,KAGhDD,EAAYC,EAEhB/f,EAAI2W,IAAIkJ,EAAQ9gB,IAAK+gB,GACd9f,IACR,IAAI8R,KACN1S,SAAQ,SAAuB4gB,EAAKjhB,GACjC,GAAIjD,EAAAA,EAAAA,WAAgBiD,KAAS+f,EACzB3L,EAAO,GAAK/Z,KAAKqa,IAAIuM,EAAI,GAAI7M,EAAO,IACpCA,EAAO,GAAK/Z,KAAKqa,IAAIuM,EAAI,GAAI7M,EAAO,IACpCA,EAAO,GAAK/Z,KAAK4K,IAAIgc,EAAI,GAAI7M,EAAO,IACpCA,EAAO,GAAK/Z,KAAK4K,IAAIgc,EAAI,GAAI7M,EAAO,QAEnC,CACD,MAAM8M,EAAe/M,EAAgB8M,EAAKjhB,EAAK8f,GAC/C1L,EAAO,GAAK/Z,KAAKqa,IAAIwM,EAAa,GAAI9M,EAAO,IAC7CA,EAAO,GAAK/Z,KAAKqa,IAAIwM,EAAa,GAAI9M,EAAO,IAC7CA,EAAO,GAAK/Z,KAAK4K,IAAIic,EAAa,GAAI9M,EAAO,IAC7CA,EAAO,GAAK/Z,KAAK4K,IAAIic,EAAa,GAAI9M,EAAO,aAIxD,GAAIvb,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KAAuB,CAC1C,MAAMimB,EAAYhmB,EAAKkb,MAAM,GACvBoE,EAAYtf,EACbiW,aACAe,SACAnE,MACAhK,MAAKmY,GAAKA,EAAE1J,aAAe0O,IAChC,GAAI1G,EAAW,CACX,MAAMgJ,EAAgBtoB,EACjBiW,aACAe,SACAW,cACA9O,MAAK0f,GAAOA,EAAIjR,aAAetX,EAAKof,YACzC,GAAIkJ,IACIhJ,EAAUgI,aAAehI,EAAUkJ,kBAAkB,CACrD,IAAIC,EAOJ,GALIA,EADA1nB,MAAMC,QAAQse,EAAUgI,aACVhI,EAAUgI,YAAYze,MAAK2e,GAAQtjB,EAAAA,EAAAA,cAAmBsjB,EAAKrgB,IAAKmhB,EAAcI,gBAG9EpJ,EAAUgI,YAExBmB,EAAa,CACb,MAAME,EAAsBC,GACjBA,EAAIxW,MAAM,KAAK7T,KAAIsqB,GAAKhhB,WAAWghB,KAExCnN,EAAaiN,EAAoBF,EAAYK,aAC7CnN,EAAWgN,EAAoBF,EAAYM,aACjDxN,EAAS,CAACG,EAAW,GAAIA,EAAW,GAAIC,EAAS,GAAIA,EAAS,KAE7DJ,GAAU+D,EAAUkJ,mBACrBjN,EAASD,EAAgBgE,EAAUkJ,iBAAkB,YAAaF,EAAcI,iBAMpG,OAAOnN,EAGXpS,QAAQL,GACJ,MAAM9I,EAAOC,KACP+oB,EAAOhpB,EAAKE,KAAKiJ,QAAQL,GAc/B,OAbIkgB,EAAK/D,UACL+D,EAAK/D,SAASzd,SAAQ,SAAUyhB,GACxBjpB,EAAKzB,IACL0qB,EAAGC,kBAAoB/O,EAAmB8O,EAAGhW,QACzCkH,EAAmB8O,EAAGhW,SACtB/O,EAAAA,EAAAA,gBAAqBlE,EAAKzB,IAAIqB,QAAQyJ,OAAQnF,EAAAA,EAAAA,kBAAuB+kB,EAAGhW,UACxE/O,EAAAA,EAAAA,gBAAqBlE,EAAKzB,IAAIqB,QAAQyJ,OAAQ,gBAGlD4f,EAAGC,kBAAoB/O,EAAmB8O,EAAGhW,WAIlD+V,EAKXG,gBAAgB9P,GACZ,GAAIA,GAAQA,EAAK/V,QAAU+V,EAAK/V,QAAU,EAAG,CACzC,IAAItD,EAAOC,KACP+iB,EAAS,KAGb,GAAI/iB,KAAKmpB,aAAe/P,EAAKpQ,QAAQhJ,KAAKmpB,cAAgB,EACtDpG,EAAS/iB,KAAKopB,iBAKd,GAAIrpB,EAAKqd,gBAAkBrd,EAAKqd,eAAe/Z,OAAS,EAAG,CACvD0f,EAAS,GACT,IAAK,IAAI7gB,EAAI,EAAGA,EAAInC,EAAKqd,eAAe/Z,OAAQnB,IAAK,CACjD,IAAIsC,EAAQzE,EAAKyhB,mBAAmBzhB,EAAKqd,eAAelb,IACpDsC,IACAue,EAAO3a,KAAK5D,GACZue,EAASA,EAAO1a,OAAOtI,EAAKsmB,kBAAkB7hB,WAKtDue,EAAShjB,EAAKE,KAAK+iB,mBAI3B,IAAI9d,EAAS3B,EAAAA,EAAAA,KAAAA,UAAkB6V,GAC3BiQ,EAAK,IAAIC,OAAOpkB,EAAQ,KAExBqkB,EAAUxG,EAAOzkB,KAAI,SAAU8Y,EAAIoS,UAC5BpS,EAAGqS,QAEVrS,EAAGsS,WAAaF,EAEhBzpB,EAAKE,KAAK0pB,mBAAmBvS,GAE7B,IAAI7M,EAAQ6M,EAAGyN,MAAM+E,OACjBnL,EAAM4K,EAAGnX,KAAK3H,GACdsf,EAAUpL,EAAMA,EAAIqL,OAAS,EAC7BC,GAAc,EAClB,GAAI3S,EAAG2N,SAAU,CACb,IAAIiF,EAAM5S,EAAG2N,SAAS6E,OAClBK,EAAOZ,EAAGnX,KAAK8X,GACnBD,EAAaE,EAAOA,EAAKH,OAAS,EActC,OAXIrL,GAAOlU,GAASkU,EAAI,GACpBrH,EAAGqS,QAAU,GACG,GAAXI,EACLzS,EAAGqS,QAAU,GACRI,GAAW,EAChBzS,EAAGqS,QAAU,GACM,GAAdM,EACL3S,EAAGqS,QAAU,EACRM,GAAc,IACnB3S,EAAGqS,QAAU,GAEbrS,EAAGqS,QACIrS,EAEA,QAEVlS,QAAO,SAAUglB,GACd,OAAe,MAARA,KAEVC,MAAK,SAAUrP,EAAGsP,GACf,GAAIA,EAAEX,UAAY3O,EAAE2O,QAAS,CAEzB,IAAIY,EAASpmB,EAAAA,EAAAA,yBAA8B6W,EAAE+J,OACzCyF,EAASrmB,EAAAA,EAAAA,yBAA8BmmB,EAAEvF,OAC7C,OAAIwF,EAASC,GAAgB,EACzBD,EAASC,EAAe,EACrB,EAGP,OAAOF,EAAEX,QAAU3O,EAAE2O,WAMjC,OAHAzpB,KAAKmpB,YAAc/P,EACnBpZ,KAAKopB,YAAcG,EAEZA,EAGP,MAAO,GAIf7T,wBACI,MAAM3V,EAAOC,KACb,IAAIqV,EACJ,MAAMkV,EAAaxqB,EAAKsV,IAClB6H,EAAS,GACf,GAAInd,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KACd,GAAIC,EAAKJ,QAAQ6qB,WAAa1qB,EAAAA,EAAAA,aAAAA,QAA6B,CACvD,IAAI2qB,EAAS,8BACb,MAAMC,EAAYH,EAAWvhB,QAAQyhB,GACjCC,EAAY,GAAKA,EAAYH,EAAWlnB,OAASonB,EAAOpnB,QACd,MAAtCknB,EAAWA,EAAWlnB,OAAS,KAC/BonB,EAASA,EAAO7D,OAAO,IAE3BvR,EAAMkV,EAAaE,GAGnBpV,EAAMkV,OAIVlV,EAAMkV,EACNrN,EAAOyN,QAAU,OACjBzN,EAAO0N,QAAU,QACjB1N,EAAO2N,QAAU,uBAIrBxV,EAAMkV,EACNrN,EAAOyN,QAAU,MACjBzN,EAAO0N,QAAU,QACjB1N,EAAO2N,QAAU,kBAGrB,OADAxV,EAAMA,EAAM,IAAMpR,EAAAA,EAAAA,eAAoBA,EAAAA,EAAAA,OAAYiZ,EAAQnd,EAAK+qB,cAInEC,yBAEI,IAAInmB,EAAS,KAEb,MAAMomB,EAHQhrB,KAGYC,KAAKgrB,iBAC/B,GAAID,EACA,IAAK,IAAI9oB,EAAI,EAAGA,EAAIqB,EAAAA,EAAAA,KAAAA,MAAAA,OAAAA,qBAAAA,OAAkDrB,IAAK,CACvE,IAAI8Q,EAASzP,EAAAA,EAAAA,KAAAA,MAAAA,OAAAA,qBAA0CrB,GACvD,GAAI8oB,EAAYhiB,QAAQgK,IAAW,EAAG,CAClCpO,EAASoO,EACT,OAIZ,OAAOpO,EAMXsmB,wBACI,MAAMnrB,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAElC,GAAI1V,EAAKJ,QAAQud,OAAOiO,gBACpB,OAAOtsB,EAAQkB,EAAKJ,QAAQud,OAAOiO,iBAGvC,GAA2B,mBAAhB1Z,OAAO2Z,KAAqB,CAQnC,IAPA,IAAIviB,EAAO9I,EAAKkb,MAAM,GAClB8N,EAAOhpB,EAAKE,KAAKiJ,QAAQL,GACzBwiB,EAAM,IAAIC,eACVjW,EAAM0T,EAAK1D,OAAO,GAAG1T,IAAIQ,MAAM,KAC/BoZ,EAAclW,EAAI,GAAGlD,MAAM,KAC3B+K,EAASnd,EAAKJ,QAAQud,OAAOI,SAAW,YAAcvd,EAAKJ,QAAQud,OAAOI,SAAW,GAEhFpb,EAAI,EAAGA,EAAIqpB,EAAYloB,OAAQnB,IAAK,CACzC,IAAIspB,EAASD,EAAYrpB,GAAGiQ,MAAM,KAE9BqZ,GAAUA,EAAOnoB,OAAS,GAAKmoB,EAAO,KACtCtO,GAAU,IAAMqO,EAAYrpB,IAGhCnC,EAAKJ,QAAQud,OAAOuO,MACpBvO,GAAU,IAAMnd,EAAKJ,QAAQud,OAAOuO,KAGxCJ,EAAIje,KAAK,OAAQiI,EAAI,IAAI,GACzBgW,EAAIK,iBAAiB,eAAgB,qCAErCL,EAAIM,aAAe,cACnBN,EAAIO,OAAS,SAAUje,GACnB,GAAoB,MAAhB3N,KAAK6rB,OAAgB,CAIrB,IAHA,IAAIC,EAAa,IAAIC,WAAW/rB,KAAKgsB,UACjC9pB,EAAI4pB,EAAWzoB,OACf4oB,EAAe,IAAInrB,MAAMoB,GACtBA,KACH+pB,EAAa/pB,GAAKoP,OAAO4a,aAAaJ,EAAW5pB,IAErD,IAGQiqB,EAHJhoB,EAAO8nB,EAAa3hB,KAAK,IACzBH,EAAOkhB,EAAIe,kBAAkB,gBACjC,GAA8B,IAA1BjiB,EAAKnB,QAAQ,SAEbmjB,EAAW,QAAUhiB,EAAO,WAAasH,OAAO2Z,KAAKjnB,GACrDpE,EAAKJ,QAAQud,OAAOiO,gBAAkBgB,EACtCttB,EAAQstB,KAIpBd,EAAIgB,KAAKnP,QAETzH,EAAOzW,MAAM,yDAUzB4L,kBAAkB+G,GACd,MAAM5R,EAAOC,KAEPssB,GAAaroB,EAAAA,EAAAA,YAAiB0N,IAAQ1N,EAAAA,EAAAA,YAAiBA,EAAAA,EAAAA,eAAoBlE,EAAKsV,MAAQtV,EAAKqV,UAAUzD,GAAOA,EAEpH,GAAI5R,EAAKwsB,oBACL,OAAOD,EACJ,CACH,MAAM3sB,EAAU,CACZ6sB,YAAY,EACZD,oBAAqBxsB,EAAKwsB,qBAGxB5gB,QAAY5L,EAAKoT,kBAAkBsZ,WAAWH,EAAW3sB,GAC/D,IAAI+sB,EAAS3sB,EAAKoT,kBAAkBwZ,UAAUC,UAAUN,EAAW3sB,GAC/DktB,EAAOlhB,EACX,IAAI+gB,EAMA,MAAM1tB,MAAM,gBAAkBstB,GANtB,CACR,MAAMQ,QAAcJ,EACpB,GAAII,GAASA,EAAMJ,OACf,MAAO,CAAErX,IAAKyX,EAAMJ,OAAOhsB,KAAKX,EAAKoT,kBAAmBmZ,GAAYS,MAAOF,KAyB3FG,aAAaD,EAAOpb,GAChB,MAAM5R,EAAOC,KAEPitB,EAAS,SAAU9oB,GACrB,MAAMwH,EAAMohB,EAAMG,WAEbjpB,EAAAA,EAAAA,aAAkBE,EAAKwN,MACnB5R,EAAKzB,MAAOyB,EAAKzB,IAAI6uB,cACtBxhB,EAAIwhB,YAAmC,OAArBhpB,EAAKgpB,YACnBhpB,EAAKgpB,YACLptB,EAAKzB,IAAMyB,EAAKzB,IAAI6uB,YAAc,aAK9CxhB,EAAIyhB,aAAa,MAAOjpB,EAAKwN,KAC7BhG,EAAIigB,OAAS,WACT/V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,SAAuB,CAAEwtB,KAAMP,KAE9DphB,EAAI4hB,QAAU,SAAUtX,GACpBtK,EAAIyhB,aAAa,MAAOttB,EAAAA,EAAAA,aACxB+V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAEwtB,KAAMP,EAAO9W,MAAO,CAAEhX,KAAMgX,EAAM4V,OAAQzS,KAAMnD,EAAMuX,gBAKvH,GAAIztB,EAAKkb,OAASlb,EAAKkb,MAAM5X,OAAS,EAAG,CAErC,MAAMoqB,EAAU,SAAUxX,GACtBJ,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAEwtB,KAAMP,EAAO9W,MAAO,CAAEhX,KAAMgX,EAAM4V,OAAQzS,KAAMnD,EAAMuX,cAC/GP,EAAO,CAAEtb,IAAK7R,EAAAA,EAAAA,eAIlB,GAAIC,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,KAAuB,CACrC,IAAI4tB,EAAGC,EAAGC,EACV,GAAsB,QAAlB7tB,EAAKyqB,SAAoB,CACzB,IAAIqD,EAAOlc,EAAIpI,QAAQ,IAAMxJ,EAAKiT,OAAOb,MAAM,KAAK,GAAI,IACxD,MAAM2b,EAAQD,EAAK1b,MAAM,KAAKxH,MAAMkjB,EAAK1b,MAAM,KAAK9O,OAAS,GAAG/E,KAAI,SAAUkJ,GAAO,OAAO8Q,SAAS9Q,MACrGkmB,EAAII,EAAM,GACVH,EAAIG,EAAM,GACVF,EAAIE,EAAM,OACP,CACH,IAAIA,EAAQ,kDAAkD5b,KAAKP,GAC/Dmc,GAA0B,IAAjBA,EAAMzqB,SACfyqB,EAAQA,EAAMnjB,MAAM,GAAGrM,KAAI,SAAUkJ,GAAO,OAAO8Q,SAAS9Q,MAC5DkmB,EAAII,EAAM,GACVH,EAAIG,EAAM,GACVF,EAAIE,EAAM,IAIlB,GAAIJ,GAAKC,GAAKC,EAAG,CACb,IAAIG,EAAchuB,EAAKE,KAAKojB,eAC5B,GAAI0K,EAAa,CACb,MAAM5O,EAAY4O,EAAYxW,kBAAkB3O,MAAKpB,GAAOA,EAAIkQ,gBAAkB3X,EAAKof,YACvF,GAAIA,GAEIA,EAAUlH,qBAAuBkH,EAAUlH,oBAAoB5U,OAAS,EAAG,CAC3E,IAQI2qB,EARkB7O,EAAUlH,oBAAoBkS,MAAK,SAAUrP,EAAGsP,GAClE,OAAI9R,SAASwC,EAAE1C,YAAcE,SAAS8R,EAAEhS,YAC7B,EACFE,SAASwC,EAAE1C,YAAcE,SAAS8R,EAAEhS,aACjC,EACA,KAGYsV,GAC5B,GAAIM,GAASjuB,EAAKzB,KAAOyB,EAAKzB,IAAI0I,YACxBgnB,EAAM3V,YAAcsV,GAAKK,EAAMxV,YAAcmV,GAAKK,EAAMzV,YAAcqV,GAAKI,EAAMvV,YAAcmV,GAGjG,OAFAlmB,QAAQC,IAAI,2EACZslB,EAAO,CAAEtb,IAAK7R,EAAAA,EAAAA,iBAU1C+V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAA6B,CAAEwtB,KAAMP,IAEhE,IAAI7P,EAAS,GAEb,GADqC,SAAxBnd,EAAKJ,QAAQsuB,OACd,CACR,IAAI5Y,EAAM1D,EAAIQ,MAAM,KACpB+K,EAAS7H,EAAI,GAAGlD,MAAM,KAAKjN,QAAO,SAAUgpB,GACxC,MAAMC,EAASD,EAAM/b,MAAM,KAE3B,OAAOgc,EAAO9qB,OAAS,GAAK8qB,EAAO,GAAGvE,OAAOvmB,OAAS,GAAwC,WAAnC8qB,EAAO,GAAGvE,OAAOwE,iBAC7E9jB,KAAK,KAERvK,EAAKoT,kBAAkBkb,iBAAiBhZ,EAAI,GAAI,CAC5ClL,KAAM,OACNhG,KAAM+Y,EACNoR,YAAa,sCACd5vB,MAAK,SAAU6vB,GACd,MAAMC,EAAW5V,IAAIC,gBAAgB0V,GACzBxB,EAAMG,WACdtB,OAAS,SAAUje,GACnBiL,IAAI6V,gBAAgBD,IAExBvB,EAAO,CAAEtb,IAAK6c,OACfrY,MAAMsX,QAGT,GAAK1tB,EAAKwsB,oBAIH,CACHU,EAAO,CAAEtb,IAAKA,IACd,IAAIhG,EAAMohB,EAAMG,WAEXjpB,EAAAA,EAAAA,aAAkB0N,IACd5R,EAAKzB,MAAOyB,EAAKzB,IAAI6uB,cACtBxhB,EAAIwhB,YAAcptB,EAAKzB,IAAMyB,EAAKzB,IAAI6uB,YAAc,aAI5DxhB,EAAIigB,OAAS,WACT/V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,SAAuB,CAAEwtB,KAAMP,KAE9DphB,EAAI4hB,QAAU,SAAUtX,GACpBtK,EAAIgG,IAAM7R,EAAAA,EAAAA,YACV+V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAEwtB,KAAMP,EAAO9W,MAAO,CAAEhX,KAAMgX,EAAM4V,OAAQzS,KAAMnD,EAAMuX,eAGnH7hB,EAAIgG,IAAM5R,EAAKkb,MAAM5X,OAASsO,EAAM7R,EAAAA,EAAAA,iBArBpCC,EAAKoT,kBAAkBsZ,WAAW9a,EAAK,CAAE6a,YAAazsB,EAAKzB,KAAOyB,EAAKzB,IAAI6uB,cAAezuB,MAAK,SAAUiN,GACrGshB,EAAOthB,MACRwK,MAAMsX,QAuBjBR,EAAO,CAAEtb,IAAK7R,EAAAA,EAAAA,cAEd+V,EAAA9V,EAAI6c,EAAAyQ,IAAA3sB,KAAJX,GAAmBwL,QAAQzL,EAAAA,EAAAA,MAAAA,SAAuB,CAAEwtB,KAAMP,IAiClEniB,kBACI,MAAM7K,EAAOC,KACb,GAAI8Z,EAAe/Z,EAAKJ,QAAQ0V,KAAM,aAAayE,EAAe/Z,EAAKJ,QAAQ0V,KAC/E,MAAMqZ,QAAmB7Y,EAAM9V,EAAI8c,EAAA8R,IAAAjuB,KAAJX,GAC/B,GAAiC,QAA7B2uB,EAAiBE,QACjB,OAAO7uB,EAAKJ,QAAQ0V,IAAI9L,QAAQ,QAAS,OAE7C,MAAM8L,EAAMqZ,EAAiBG,OAAOjI,OAAO,EAAG8H,EAAiBG,OAAOxrB,QAAUqrB,EAAiBG,OAAOC,SAAS,MAAQ,EAAI,IAC7H,UACU/uB,EAAKoT,kBAAkBwC,MAAMN,EAAK,CAAE4Y,OAAQ,SAEtD,MAAOtgB,GACH,OAAO5N,EAAKJ,QAAQ0V,IAAI9L,QAAQ,QAAS,OAE7C,OAAO8L,EAGXzK,0BACI,MAAM7K,EAAOC,KACb,GAAI8Z,EAAe/Z,EAAKJ,QAAQ0V,KAAM,aAAayE,EAAe/Z,EAAKJ,QAAQ0V,KAC/E,MAAMqZ,QAAmB7Y,EAAM9V,EAAI8c,EAAA8R,IAAAjuB,KAAJX,GAC/B,MAAiC,QAA7B2uB,EAAiBE,QACV,GAEJF,EAAiBK,SAG5BnkB,2BACI,MAAM7K,EAAOC,KACPwE,QAAQqR,EAAM9V,EAAI+c,EAAAkS,IAAAtuB,KAAJX,QAAwBA,EAAKkvB,aACjD,aAAazqB,EAAMgV,yBAgBvB5O,kCACI,MAAM7K,EAAOC,KAEb,aADiB6V,EAAM9V,EAAI+c,EAAAkS,IAAAtuB,KAAJX,QAAwBA,EAAKkvB,cACpCC,4BAGpBpN,mBACI,MAAM/hB,EAAOC,KACb,GAAID,EAAK6hB,yBAAyBhP,EAAAA,EAC9B,OAAO7S,EAAK6hB,cAEhB,GAAI7hB,EAAKJ,QAAQiiB,cAAe,CAC5B,IAAIC,EAAU9hB,EAAKJ,QAAQiiB,cAC3B,GAAuB,iBAAZC,EAAsB,EACP9hB,EAAKzB,IAAMyB,EAAKzB,IAAIqB,QAAQwvB,oBAAsB5oB,EAAAA,EAAAA,qBAC1DgB,SAAQ,SAAU6nB,GACxBrvB,EAAKJ,QAAQiiB,gBAAkBwN,EAAUhwB,KACzCW,EAAK6hB,cAAgB,IAAI7E,EAAO9Y,EAAAA,EAAAA,OAAY,GAAImrB,EAAW,CAAErc,QAAQ,EAAMsc,SAAS,EAAM/wB,IAAKyB,EAAKzB,OACpGyB,EAAK6hB,cAAc0N,YAAcvvB,WAIpC8hB,aAAmBjP,EAAAA,GACxB7S,EAAK6hB,cAAgBC,EACrB9hB,EAAK6hB,cAAc0N,YAAcvvB,IAGjCA,EAAK6hB,cAAgB,IAAI7E,EAAO9Y,EAAAA,EAAAA,OAAY,GAAI4d,EAAS,CACrDziB,GAAImE,EAAAA,EAAAA,SACJwP,QAAQ,EACRsc,SAAS,EACT9kB,MAAOxK,EAAKwK,MACZjM,IAAKyB,EAAKzB,OAEdyB,EAAK6hB,cAAc0N,YAAcvvB,GAErC,OAAOA,EAAK6hB,cAEhB,OAAO,KAGXhX,0BAA0Bmb,GACtB,MAAMhmB,EAAOC,KAEb,aADc6V,EAAM9V,EAAI+c,EAAAkS,IAAAtuB,KAAJX,QAAwBA,EAAKkvB,cACpCM,oBAAoBxJ,GAAahmB,EAAKod,WAAW,IAGlEqS,UACI,OAAOxvB,KAAKC,KAAKwvB,gBA6BzB,SAAAnR,IAhsDQ,MAAMve,EAAOC,KACPmd,EAAarc,MAAMC,QAAQhB,EAAKkb,OAASlb,EAAKkb,MAAM3Q,KAAK,KAAOvK,EAAKkb,MACrEjI,EAASjT,EAAKiT,OACdrT,EAAUI,EAAKJ,QAErB,IAAIud,EAAS,CACT6C,OAAQ5C,EACRuS,OAAQ1c,EACRgN,YAAajgB,EAAKkd,YAClB2N,QAAS7qB,EAAKiW,aAAa1G,SAAW,SAGtCvP,EAAKmd,QACLjZ,EAAAA,EAAAA,OAAYiZ,EAAQnd,EAAKmd,QAGzBnd,EAAK+qB,aACL7mB,EAAAA,EAAAA,OAAYiZ,EAAQnd,EAAK+qB,aAG7B,IAAI6E,EAAa5vB,EAAKgrB,yBAoBtB,OAnBmB,OAAf4E,IACAzS,EAAO0S,YAAcD,GAGrBhwB,EAAQuF,SAEJvF,EAAQuF,kBAAkB3B,EAAAA,EAAAA,OAAAA,OAC1B2Z,EAAOhY,OAASvF,EAAQuF,OAAOob,WAGzB,IAAI9C,WAAYE,gBAAgB/d,EAAQuF,OAAQ,YAAY8S,cAAc,eAKhFkF,EAAOmD,WAAa1gB,EAAQuF,OAJ5BgY,EAAOhY,OAASvF,EAAQuF,QAQzBnF,EAAKE,KAAK4vB,eAAe9vB,EAAKwW,eAAgB2G,EAAQvd,GAChE,SAAAye,IAIG,OADape,KACDC,KAAK6vB,gBADJ9vB,KACyBL,SACzC,SAAAkgB,EAWoB1C,GACjB,MAAMpd,EAAOC,KACb,GAAID,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,IACd,OAAOqd,EAGP,IAAIyC,EAAKzC,EAAWxS,QAEpB,OADAkL,EAAA9V,EAAIsc,EAAA0T,GAAArvB,KAAJX,EAA8B6f,EAAI7f,EAAKE,KAAKujB,oBACrC5D,EAEd,SAAAmQ,EAMwB9U,EAAOoE,GAC5B,MAAMtf,EAAOC,KACb,IAAI4E,GAAS,EACTyP,EAAWtU,EAAKE,KAAK0jB,cAActE,GACvC,GAAIhL,EAAShR,OAAQ,CACjBgR,EAAS9M,SAAQ0c,IACbpO,EAAI9V,EAAIsc,EAAA0T,GAAArvB,KAAJX,EAA8Bkb,EAAOgJ,KACrCrf,GAAS,MAIjB,IAGI6C,EAAKuoB,EAHLC,EAAY5b,EAAS/V,KAAI,SAAUkJ,GACnC,OAAOzH,EAAKE,KAAKijB,QAAQ1b,MAC1B0oB,UAECC,GAAO,EAGX,GADAH,EAAWvoB,EAAMwT,EAAMjS,QAAQinB,EAAU,IACrCxoB,EAAM,EACN0oB,GAAO,OAGP,IAAK,IAAIjuB,EAAI,EAAG+I,EAAMglB,EAAU5sB,OAAQnB,EAAI+I,EAAK/I,IAC7C,GAAI+tB,EAAU/tB,IAAM+Y,IAAQxT,GAAM,CAC9B0oB,GAAO,EACP,MAIZ,IAAKA,EAAM,CACP,IAAIjK,EAAWnmB,EAAKE,KAAKijB,QAAQ7D,GAC7B6G,GAAY+J,EAAU5sB,OAAS,IAC/B4X,EAAMlS,OAAOinB,EAAUC,EAAU5sB,OAAQ6iB,GACzCthB,GAAS,IAIrB,OAAOA,EACV,SAAA4b,EAMqBrD,GAClB,MAAMpd,EAAOC,KACb,IAAI4E,EAAS,GACb,MAAMgb,EAAKzC,EAAWxS,QAChB6Z,EAAWzkB,EAAKE,KAAKujB,mBAC3B,IAAK,IAAIthB,EAAI,EAAG+I,EAAM2U,EAAGvc,OAAQnB,EAAI+I,EAAK/I,IACtC0C,EAASA,EAAOyD,OAAMwN,EAAC9V,EAAIwc,EAAA6T,GAAA1vB,KAAJX,EAA0B6f,EAAG1d,GAAIsiB,IAE5D,OAAO5f,EACV,SAAAwrB,EAEoBvnB,EAAMwW,EAAWgR,GAClC,MAAMtwB,EAAOC,KACb,IAAI4E,EAAS,GACb,MAAMshB,EAAWnmB,EAAKE,KAAKijB,QAAQ7D,GAC7BiR,EAAcvwB,EAAKqb,aAAavS,EAAMqd,GAC5C,IAAIqK,GAAmB,EACvB,MAAMlc,EAAWtU,EAAKE,KAAK0jB,cAActE,GACzC,IAAK,IAAInd,EAAI,EAAGA,EAAImS,EAAShR,OAAQnB,IAAK,CACtC,IAAI+Y,EAAKpF,EAAG9V,EAAIwc,EAAA6T,GAAA1vB,KAAJX,EAA0B8I,EAAMwL,EAASnS,GAAImuB,GAAmBC,GACvErV,EAAM5X,OAIPuB,EAASA,EAAOyD,OAAO4S,GAHvBsV,GAAmB,EAW3B,OALKlc,EAAShR,SAAUktB,IAChBF,GAAmBC,KACnB1rB,EAAS,CAACshB,IAGXthB,EACV,SAAA+b,EA8HexD,GACZ,MAAMpd,EAAOC,KACb,IAAI4f,EAA2B,iBAAfzC,EAA0BA,EAAWhL,MAAM,KAAOgL,EAClE,GAAIpd,EAAKiW,aAAc,CACnBjW,EAAKyU,KAAO,KACZ,IAAIA,EAAOzU,EAAKmU,UAChB0L,EAAGuK,MAAK,SAAUrP,EAAGsP,GACjB,IAAIoG,EAAO,CACPlW,MAAO,GAEPmW,EAAO,CACPnW,MAAO,GAIX,OAFAH,EAAsB3F,EAAMsG,EAAG0V,GAC/BrW,EAAsB3F,EAAM4V,EAAGqG,GACxBA,EAAKnW,MAAQkW,EAAKlW,SAGjC,OAAOsF,EACV,SAAA8Q,EAoXkBtW,GACf,MAAMra,EAAOC,KACb,IAAI4E,EAAS7E,EAAKqd,eAAepU,QAAQoR,EAASvR,MAClD,IAAgB,IAAZjE,EACA,IAAK,IAAI1C,EAAI,EAAG+I,EAAMmP,EAAS/F,SAAShR,OAAQnB,EAAI+I,IAEhC,KADhBrG,EAAMiR,EAAG9V,EAAI0c,EAAAiU,GAAAhwB,KAAJX,EAAwBqa,EAAS/F,SAASnS,KADEA,KAO7D,OAAO0C,EACV,SAAA6gB,EAESrL,GACN,MAAMra,EAAOC,KAIboa,EAAS/F,SAAS8V,MAHE,SAAU5D,EAAIC,GAC9B,OAAO3Q,EAAA9V,EAAI0c,EAAAiU,GAAAhwB,KAAJX,EAAwBymB,GAAE3Q,EAAI9V,EAAI0c,EAAAiU,GAAAhwB,KAAJX,EAAwBwmB,MAGjE,IAAK,IAAIrkB,EAAI,EAAG+I,EAAMmP,EAAS/F,SAAShR,OAAQnB,EAAI+I,EAAK/I,IACrD2T,EAAA9V,EAAI2c,EAAA+I,GAAA/kB,KAAJX,EAAeqa,EAAS/F,SAASnS,IAExC,SAAAgjB,GAEazQ,GACd,MAAM1U,EAAOC,KAET,OAAOD,EAAK0gB,2BAA2BtF,MAAKtS,GAAQ9I,EAAK+lB,YAAYjd,GAAMsS,MAAKwV,GAAQA,EAAKC,OAASnc,IAAUkc,EAAKC,KAAOD,EAAK9L,QAAUpQ,MAC9I,SAAA4Y,KA8tBG,MAAMttB,EAAOC,KACb,OAAID,EAAKE,MAAQF,EAAKE,KAAK4wB,QAChB9wB,EAAKE,KAAK4wB,QAEd,KACV,eAAAlC,KA8IG,MAAM5uB,EAAOC,KACPqV,EAAM,IAAIuD,IAAI7Y,EAAKsV,IAAK1I,SAAS0F,SAASR,MAC1CsL,EAAapd,EAAKod,sBAAsBrc,MAAQf,EAAKod,WAAW,GAAKpd,EAAKod,WAChF9H,EAAIyb,OAAS,IAAIC,gBAAgB,CAAEC,QAAS,gBAAiBC,QAAS,MAAO3hB,QAAS,QAAS4hB,OAAQ/T,EAAYgU,aAAc,qBACjI,IAAIC,EAAcrX,EAAsBha,EAAKJ,QAAQ0V,KAChD+b,IACDA,EAAcrX,EAAsBha,EAAKJ,QAAQ0V,KAAO,IAAI4E,KAE3DmX,EAAYC,IAAIlU,IACjBiU,EAAYtS,IAAI3B,EAAYpd,EAAKoT,kBAAkBwC,MAAMN,EAAI4N,WAAY,CACrEgL,OAAQ,SAGhB,MAAMjC,QAAiBoF,EAAY5S,IAAIrB,GACvC,GAAI6O,EAASsC,YAAYgD,WAAW,oBAChC,OAAOC,KAAKC,MAAMxF,EAASjW,cAAc0b,kBAAkB,GAE1D,CACD,IAAIC,GAAS,IAAIlU,WAAYE,gBAAgBsO,EAASjW,aAAc,YAChEE,EAAQyb,EAAO1Z,cAAc,4BAA8B0Z,EAAO1Z,cAAc,oBACpF,GAAI/B,EACA,MAAMjX,MAAMiX,EAAMlI,aAElB,OAAO2jB,EAAO1Z,cAAc,qBAGvC,eAAAgX,GAmCkB3Z,GACf,MAAMtV,EAAOC,KASb,OARI+C,EAAChD,EAAI+b,IAAc/Y,EAAAhD,EAAI+b,GAAWnc,QAAQ0V,MAAQA,GAAOtS,EAAAhD,EAAI+b,GAAW6V,cAAgB5xB,EAAKod,WAAW,IACxGna,EAAAjD,EAAI+b,EAAa,IAAI8V,EAAAA,EAAO,CACxBznB,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKA,EACLsc,YAAa5xB,EAAKod,WAAW,GAC7BkS,SAAS,KAGjBtsB,EAAOhD,EAAI+b,GAkFnBvY,EAAAA,EAAAA,MAAAA,OAAkBwZ,EAClB,Y,kMCp/DA,YAAmB1L,KAAK,CAACC,OAAOC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6wB/B,CAAEpH,KAAM,mC,0/BC5vBZ5G,EAAAA,EAAAA,MAAWqP,EAAAA,EACXrP,EAAAA,EAAAA,KAAUU,EAAAA,EACVV,EAAAA,EAAAA,MAAWA,EAAAA,EAAAA,OAAY,GACvB,MAAMsuB,EAAmB,GACzBA,EAAiBniB,MAAQA,EAAAA,EACzBmiB,EAAiBpiB,OAASA,EAAAA,EAC1BoiB,EAAiB7gB,SAAWA,EAAAA,EAC5B6gB,EAAiBxvB,QAAUA,EAAAA,EAC3BwvB,EAAiBhiB,WAAaA,EAAAA,EAC9BgiB,EAAiBjiB,YAAcA,EAAAA,EAC/BiiB,EAAiBjhB,cAAgBA,EAAAA,EACjCihB,EAAiB5hB,aAAeA,EAAAA,EAChC4hB,EAAiBtyB,OAASA,EAAAA,EAE1B,MAAMya,EAAuB,GACvB8X,EAAkB,IAAI7X,IAGtB8X,EAAuB,SAAUC,GACnC,IAAIC,EAAS,EACb,MACMC,EAAOF,EACR1zB,KAAIqqB,GAAOA,EAAIpf,QAAQ,sBAAuB,MAC9CjL,KAAIqqB,GAAOwJ,mBAAmBxJ,KAC7ByJ,EAASF,EAAK5zB,KAAIqqB,GAAO/gB,WAAW+gB,EAAInf,MAAM,sBAAsB,MACpE6oB,EAAUH,EAAK5zB,KAAIqqB,GAAO/gB,WAAW+gB,EAAInf,MAAM,uBAAuB,MACtE8oB,EAAQF,EAAOnqB,QAAO,CAACE,EAAK8Z,IAAQ9Z,EAAM8Z,EANjC,GAM+C,GACxDsQ,EAAShxB,KAAK4K,IAAIiE,MAAM7O,KAAM8wB,GAC9BG,EAAaN,EACd5zB,KAAI,CAACqqB,EAAKlhB,KACP,MAAM7C,EAAS+jB,EAAIpf,QAAQ,0CAA4C,WAAU0oB,UAAeM,EAASF,EAAQ5qB,IAAQ,OAEzH,OADAwqB,GAAUG,EAAO3qB,GAXV,EAYA7C,KAEf,MAAO,sBAAwB6tB,mBAAoB,kDAAiDH,cAAkBC,MAAWC,EAAWloB,KAAK,cAI/IooB,EAAgB,SAAUC,EAAOC,EAASC,GAAW,GACvD,MAAMC,EAAY,SAAUC,EAAQC,EAAQC,GACxC,OAAOA,EAAOF,IAAWC,EAASD,IAAWC,GAEjD,IAAK,IAAIvqB,KAAOmqB,EAAS,CAErB,MAAMM,EAAeN,EAAQnqB,GAC7B,GAAI3H,MAAMC,QAAQmyB,GAAe,CAC7B,IAAIC,EAAUR,EAAMlqB,GAEhB0qB,EADAA,EACUryB,MAAMC,QAAQoyB,GAAWA,EAAU,CAACA,GAGpC,GAEVh0B,OAAOqB,UAAUC,eAAeC,KAAKiyB,EAAOlqB,IAAQqqB,EAAUI,EAAa5oB,OAAQ6oB,EAAQ7oB,OAAQuoB,WAC5FF,EAAMlqB,OAGY,iBAAjByqB,EACZP,EAAMlqB,GAAOiqB,EAAcC,EAAMlqB,GAAMyqB,GAGnC/zB,OAAOqB,UAAUC,eAAeC,KAAKiyB,EAAOlqB,IAAQqqB,EAAUI,EAAcP,EAAMlqB,GAAMoqB,WACjFF,EAAMlqB,GAIzB,OAAOkqB,GAGX,IAAA9W,EAAA,IAAArZ,QAAA4wB,EAAA,IAAA3gB,QAAA4gB,EAAA,IAAA5gB,QAQA,MAAMmf,UAAehf,EAAAA,EAkBjBnT,c,UACIG,SAASod,WAAWnK,EAAA,KAAAwgB,GAAAxgB,EAAA,KAAAugB,GAAAvzB,EAAA,gBAVb,IAAEA,EAAA,wBAEM,I,EAAE,CAAA+C,UAAA,EAAAC,MAKE,M,IALF,K,EAAAgZ,G,WAqTrBhc,EAAA,uBAWiB,SAAUyzB,EAAyB3zB,GAChD,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0BszB,EAAyB,aAAc,QAAS3zB,MACpFE,EAAA,eAseQ,SAAUF,GACfK,KAAKC,KAAKuzB,OAAO7zB,MAhyBjB,MAAMI,EAAOC,KAEbD,EAAKoK,KAAOpK,EAAKJ,QAAQwK,MAAQrK,EAAAA,EAAAA,UAAAA,OACjCC,EAAK4xB,YAAc5xB,EAAKJ,QAAQgyB,YAEhC,MA+BM8B,GA/B6Bpe,EA+BAtV,EAAKsV,MA7BhC5N,GADJ4N,EAAMA,GAAO,IACCrM,QAAQ,OACX,IAIPvB,EAAM4N,EAAIrM,QAAQ,OACP,KAJXqM,EAAMA,EAAIuR,OAAO,EAAGnf,IAQjB4N,EAAIuR,OAAOvR,EAAIqe,YAAY,MAAMtF,eAZnB,IAAU/Y,EAE3B5N,EA8BR,MAAMuL,EAjBwB,SAAU2gB,GACpC,OAAQA,GACJ,KAAK7zB,EAAAA,EAAAA,SAAAA,IACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,KAAKA,EAAAA,EAAAA,SAAAA,IACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,KAAKA,EAAAA,EAAAA,SAAAA,KACL,KAAKA,EAAAA,EAAAA,SAAAA,QACD,OAAOA,EAAAA,EAAAA,OAAAA,QACX,KAAKA,EAAAA,EAAAA,SAAAA,IACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,QACI,OAAO,MAKJ8zB,CAAsB7zB,EAAKiT,SAAWzP,EAAAA,EAAAA,KAAAA,2BAAmCkwB,GACxF,GAAIzgB,GAAUjT,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CAC1CkT,IAAWlT,EAAAA,EAAAA,OAAAA,MACXC,EAAKoK,KAAOrK,EAAAA,EAAAA,UAAAA,KAkBhBC,EAAKwK,MAAQxK,EAAKJ,QAAQ4K,OAfR,SAAU8K,GAIxB,IAFA,IAAIzQ,EADJyQ,EAAMA,GAAO,GAETwe,EAAS,IAAIvK,OAAO,oBAAsBmK,EAAY,IAAK,KACtDvxB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxBmT,EAAM8c,mBAAmB9c,GACzB,IAAI7L,EAAQqqB,EAAO3hB,KAAKmD,GACxB,GAAI7L,EAAMnG,OAAS,EAAG,CAClBuB,EAAS4E,EAAM,GACf,OAIR,OAAO5E,EAEwBkvB,CAAY/zB,EAAKsV,KAGxDtV,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,MAAAA,OAAqBxD,GAErCA,EAAKE,KAAK6d,SAAW,IAAIlf,SAAQ,CAACC,EAASk1B,KACvC,IAAI/V,EACJA,EAAQje,EAAKE,KAAK+zB,oBAClBj0B,EAAKE,KAAKge,SAASD,GACnBnf,EAAQmf,MAIhB9J,UACI,MAAMnU,EAAOC,KACb,GAAID,EAAKyU,KAAM,OAAOzU,EAAKyU,KAC3B,IAAI5P,EAAS,KACb,IAAK7E,EAAKJ,QAAQ0vB,QAAS,CACvBzqB,EAAS,CACLyP,SAAU,IAEd,MAAMuR,EAAQ,IAAIqO,IAoFlB,GAnFAl0B,EAAK+O,SAASvH,SAAQwH,IAClB,MAAMmlB,EAAOnlB,EAAEpK,UACf,GAAIuvB,EAAK7wB,OAAQ,CACb,MAAMoR,EAAOlR,EAAAA,EAAAA,KAAAA,eAAuB2wB,EAAMtvB,GACrCghB,EAAMyL,IAAI5c,KACXmR,EAAMhL,IAAInG,GACN1F,EAAEvJ,uBAAyB1F,EAAAA,EAAAA,WAAAA,YACtBX,OAAOqB,UAAUC,eAAeC,KAAK+T,EAAM,qBAC5CA,EAAKK,gBAAkBhV,EAAAA,EAAAA,WAAAA,aAI3B2U,EAAKK,gBAAkBhV,EAAAA,EAAAA,WAAAA,QAG3B2U,EAAK4Q,OAAS,IAElB,MAAM8O,EAAgBplB,EAAE5L,YACxB,IAAIixB,EAAa3f,EAAK4Q,OAAOzc,MAAKmG,GAAKA,EAAE4C,MAAQwiB,EAAcxiB,MAC1DyiB,IACDA,EAAaj1B,OAAOmD,OAAO,GAAI6xB,GAC/BC,EAAWtlB,SAAW,GACtB2F,EAAK4Q,OAAOjd,KAAKgsB,IAErBA,EAAWtlB,SAAS1G,KAAK2G,OAKjC6W,EAAMre,SAAQ,SAA2BkN,GACrC,GAAIA,EAAK4Q,OAAOhiB,OAAS,EAAG,CAExB,MAAMgxB,EAAgC,GAEtC5f,EAAK4Q,OAAO9d,SAAQ,SAAuCwZ,GACvD,MAAMuT,EAAmBvT,EAAEjS,SACtBxQ,KAAIyQ,GAAKA,EAAEhL,YACXkE,QAAO,SAAwCssB,EAAYpwB,GACxD,IAAK,IAAIsE,KAAO8rB,EAAY,CACxB,MAAMC,EAAWrwB,EAAKsE,GAClB+rB,GAAYr1B,OAAOqB,UAAUC,eAAeC,KAAK8zB,EAAU,SACvDA,EAAS3xB,QAAU0xB,EAAW9rB,GAAK5F,cAC5B0xB,EAAW9rB,GAIlB+rB,IAAaD,EAAW9rB,WACjB8rB,EAAW9rB,GAI9B,OAAO8rB,IACRp1B,OAAOmD,OAAO,GAAIye,EAAEjS,SAAS,GAAG/K,YAGjC0wB,EAAsB,GAC5B,IAAK,IAAIhsB,KAAO6rB,EAAkB,CAC9B,MAAMzxB,EAAQyxB,EAAiB7rB,GAC/BgsB,GAAoB5xB,MAAAA,OAAK,EAALA,EAAO6xB,cAAejsB,IAAO5F,MAAAA,OAAK,EAALA,EAAOA,QAASA,EAErEwxB,EAA8BjsB,KAAKqsB,MAGvC,MAAMv1B,EAAOC,OAAOD,KAAKm1B,EAA8B,IACjDM,EAAe,GACrBz1B,EAAKqI,SAAQ,SAA+BkB,GACxC,MAAM0lB,EAASkG,EAA8B/1B,KAAIs2B,GAASA,EAAMnsB,KAC1C,IAAIwrB,IAAI9F,GAAQ0G,KAAO1G,EAAO9qB,QAEhDsxB,EAAavsB,KAAKK,MAI1B,MAAMqsB,EAAcH,EAAa,GAC7BG,IACArgB,EAAKsgB,YAAcD,EACnBrgB,EAAK4Q,OAAO9d,SAAQ,SAAkBwZ,EAAGtZ,GACrCsZ,EAAEle,MAAQwxB,EAA8B5sB,GAAKqtB,WAMzD/0B,EAAKqG,QAAUrG,EAAKmR,QAAS,KAAA8jB,EAAAC,EAAAC,EAC7B,MAAMC,EAAe,GACH,IAAAC,EAAlB,GAAIr1B,EAAKmR,QACLikB,EAAa/sB,KAAK7E,EAAAA,EAAAA,KAAAA,wBACdA,EAAAA,EAAAA,KAAAA,OAAe,GAAuB,QAArB6xB,EAAEr1B,EAAKmR,QAAQ9K,cAAM,IAAAgvB,OAAA,EAAnBA,EAAqBC,MAAO,CAAEz0B,OAAQ2F,EAAAA,EAAAA,OAAAA,MAAAA,OAA0B,EAAG0rB,OAAQ,CAAC,EAAG,KAClG,CAAEqD,aAAcx1B,EAAAA,EAAAA,KAAAA,SAGT,QAAfk1B,EAAIj1B,EAAKqG,cAAM,IAAA4uB,GAAXA,EAAaK,OACbF,EAAa/sB,KAAK7E,EAAAA,EAAAA,KAAAA,wBAAgCxD,EAAKqG,OAAOivB,MAAO,CAAEC,aAAcx1B,EAAAA,EAAAA,KAAAA,SAE1E,QAAfm1B,EAAIl1B,EAAKqG,cAAM,IAAA6uB,GAAXA,EAAaM,MACbJ,EAAa/sB,KAAK7E,EAAAA,EAAAA,KAAAA,wBAAgCxD,EAAKqG,OAAOmvB,KAAM,CAAED,aAAcx1B,EAAAA,EAAAA,KAAAA,YAEzE,QAAfo1B,EAAIn1B,EAAKqG,cAAM,IAAA8uB,GAAXA,EAAa7kB,SACb8kB,EAAa/sB,KAAK7E,EAAAA,EAAAA,KAAAA,wBAAgCxD,EAAKqG,OAAOiK,QAAS,CAAEilB,aAAcx1B,EAAAA,EAAAA,KAAAA,WAE3F8E,EAAOygB,OAAS,CACZ1T,IAAKogB,EAAqBoD,IAGlCvwB,EAAOiE,KAAO9I,EAAK8I,MAAQjE,EAAOiE,KAClCjE,EAAO8gB,aAAe3lB,EAAKJ,QAAQ+lB,aACnC9gB,EAAO2F,MAAQxK,EAAKwK,OAAS3F,EAAO2F,MACpC3F,EAAOwP,IAAMrU,EAAKX,GAGtB,OADAW,EAAKyU,KAAO5P,EACLA,EA2EX4wB,SAASC,EAAe91B,GACpB,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAK21B,UAAWF,EAAe91B,GAcnEg2B,UAAUC,EAAoBj2B,GAC1B,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0B41B,EAAoB,QAAS91B,EAAAA,EAAAA,KAAAA,MAAmBH,GAerFk2B,cAAcC,EAAoBn2B,GAC9B,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAK+1B,eAAgBD,EAAoBn2B,GA8B7Eq2B,UAAUC,EAAOt2B,GACb,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAKk2B,WAAYD,EAAOt2B,GAc5Du2B,WAAWC,EAAqBx2B,GAC5B,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0Bm2B,EAAqB,SAAU,SAAUx2B,GAe9Ey2B,eAAeC,EAAqB12B,GAChC,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAKs2B,gBAAiBD,EAAqB12B,GAc/E22B,gBAAgBC,EAA0B52B,GACtC,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0Bu2B,EAA0B,cAAe,SAAU52B,GAexF62B,YAAYC,EAAkB92B,GAC1B,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAK02B,aAAcD,EAAkB92B,GAezE+2B,aAAaC,EAAuBh3B,GAEhC,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0B22B,EAAuB,WAAY,OAAQh3B,GAehFi3B,iBAAiBC,EAAuBl3B,GACpC,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAK82B,kBAAmBD,EAAuBl3B,GAenFm3B,kBAAkBC,EAA4Bp3B,GAE1C,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0B+2B,EAA4B,gBAAiB,OAAQp3B,GAe1Fq3B,WAAWC,EAAiBt3B,GACxB,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAKk3B,YAAaD,EAAiBt3B,GAcvEu3B,YAAYC,EAAsBx3B,GAE9B,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0Bm3B,EAAsB,UAAWr3B,EAAAA,EAAAA,KAAAA,QAAqBH,GAe3Fy3B,gBAAgBC,EAAsB13B,GAClC,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAKs3B,iBAAkBD,EAAsB13B,GAcjF23B,iBAAiBC,EAA2B53B,GAExC,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0Bu3B,EAA2B,eAAgBz3B,EAAAA,EAAAA,KAAAA,QAAqBH,GAerG63B,UAAUC,EAAkB93B,GACxB,OAAAkW,EAAO7V,KAAIozB,EAAAsC,GAAAh1B,KAAJV,KAAyBA,KAAK03B,WAAYD,EAAkB93B,GAevE+3B,WAAWC,EAAuBh4B,GAE9B,OAAAkW,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0B23B,EAAuB,SAAU73B,EAAAA,EAAAA,KAAAA,QAAqBH,GAY3Fi4B,WAAWn0B,GACP,MAAM1D,EAAOC,KAuBb,OArBIyD,aAAmBiM,EAAAA,EACV3P,EAAKy1B,SAAS/xB,GAElBA,aAAmBuN,EAAAA,EACfjR,EAAKy2B,YAAY/yB,GAErBA,aAAmBpB,EAAAA,EACftC,EAAKi3B,WAAWvzB,GAEpBA,aAAmBwM,EAAAA,EACflQ,EAAKq3B,gBAAgB3zB,GAEzBA,aAAmBmN,EAAAA,EACf7Q,EAAK62B,iBAAiBnzB,GAE1BA,aAAmBlE,EAAAA,EACfQ,EAAKy3B,UAAU/zB,GAGlBoS,EAAG9V,EAAIszB,EAAAE,GAAA7yB,KAAJX,EAA0B,CAAC0D,IAc5Co0B,YAAY/oB,GACR,OAAA+G,EAAO7V,KAAIqzB,EAAAE,GAAA7yB,KAAJV,KAA0B8O,GAUrCgpB,cAAcr0B,GACV,MAAM1D,EAAOC,KACTyD,EAAQe,OAASzE,EAAK+O,SAAS9F,QAAQvF,IAAY,IACnD1D,EAAKE,KAAK63B,cAAcr0B,GACxBA,EAAQe,MAAQ,MAaxBuzB,WAAWt0B,GACP,MAAM1D,EAAOC,KACb,OAAIyD,aAAmBjE,EAAAA,EACfO,EAAK+O,SAASkpB,SAASv0B,GAChBA,EAMR,KAFI1D,EAAKk4B,eAAex0B,GAKnCw0B,eAAe74B,GAEX,IAAIwF,EAAS,KACb,IAAIszB,EAFSl4B,KAEKC,KAAKg4B,eAAe74B,GAItC,OAHI84B,IACAtzB,EAASszB,EAAOx0B,MAAMF,QAEnBoB,EASXuzB,gBACI,MAAMp4B,EAAOC,KACb,GAAID,EAAK+O,UAAY/O,EAAKE,KAAM,CAC5B,GAAIF,EAAKzB,IAAK,CACKyB,EAAKzB,IAAI2G,mBAAmB,oBACpCsC,SAAQ,SAAU6wB,GACjBA,EAAG/yB,aAAetF,EAAK+O,SAAS9F,QAAQovB,EAAGjzB,iBAAmB,GAC9DizB,EAAG9yB,UAIfvF,EAAK+O,SAASzL,OAAS,EACvBtD,EAAKE,KAAKk4B,iBAIlBjJ,0BAA0B/R,GACtB,MAAMpd,EAAOC,KACPsP,EAAUvP,EAAKJ,QAAQ2P,SAAWvP,EAAKiW,aAAa1G,SAAW,QACrE,IAAIqiB,EAAcxU,GAAcpd,EAAK4xB,YAErC,OADAA,EAAc7wB,MAAMC,QAAQ4wB,GAAeA,EAAc,CAACA,GACnD5xB,EAAKsV,IAALtV,wBAA0CuP,EAAU,yCAA2CqiB,EAAYrnB,KAAK,KAAO,iBAAmBmoB,mBAAmB1yB,EAAKiW,aAAaqiB,WAAWC,oBAAoBnH,cAGzN5B,oBAAoBxJ,EAAWwS,EAAUtiB,GACrC,MAAMlW,EAAOC,KACR+lB,IACDA,EAAYhmB,EAAK4xB,aAErB,MASM/sB,EAAS,IAAIhG,SAAQ,SAAUC,EAAS4W,GAC1C1V,EAAKyZ,yBACA9a,MAAK,SAAUsX,GACZ,GAAKA,EAAaqiB,WAAWC,oBAI7B,GAAIn5B,OAAOqB,UAAUC,eAAeC,KAAK+Q,OAAQ,UAAW,CACxD,MAAM+mB,EAAS,WACX,IAAKz4B,EAAK04B,aAAc,CACpB,MAAM9f,EAAYC,IAAIC,gBAAgBC,GACtC/Y,EAAK04B,aAAe,IAAIzf,OAAOL,GAEnC5Y,EAAK04B,aAAaxf,UAAYrO,eAAgB7L,GAC1C,GAAMA,EAAEoF,gBAAgBhF,OAAxB,CAQA,GAAqB,YAAjBJ,EAAEoF,KAAK0Q,MAaP,KAAM,0DAbsB,CAC5B,IAAIpM,EAAMtJ,OAAOD,KAAKH,EAAEoF,KAAKu0B,eAAepuB,KAAK,KACjD,IAAI/G,EAAAA,EAAAA,oBAAuBkF,GAMvB,KAAM,4BAA8BA,EAAM,mBALC,mBAAhClF,EAAAA,EAAAA,oBAAuBkF,IAC9BlF,EAAAA,EAAAA,oBAAuBkF,GAAK/H,KAAK,KAAM3B,EAAEoF,KAAKu0B,eAMtDn1B,EAAAA,EAAAA,oBAAyBpE,OAAOmD,OAAOiB,EAAAA,EAAAA,oBAAwBxE,EAAEoF,KAAKu0B,oBAlB1E,CACI,IAAIv0B,QAAapE,EAAKoT,kBAAkBwlB,SAAS55B,EAAEoF,MACnDpE,EAAK04B,aAAatf,YAAY,CAC1B9D,IAAKtW,EAAEoF,KACP6nB,SAAU7nB,EAAKsS,gBAAgBmiB,eAsBzCC,EAAYjuB,eAAgBmY,EAAQwV,GACtC,IAAIp0B,QAAapE,EAAKoT,kBAAkBwlB,SAAS54B,EAAKmvB,0BAA0BnM,GAAUhjB,EAAK4xB,cAE/F,GAAIxtB,EAAK6T,cAAc,cAAgB7T,EAAK6T,cAAc,aACtD,MAAO7T,EAAK6T,cAAc,cAAgB7T,EAAK6T,cAAc,cAAcjK,YAAY6b,OAE3F7pB,EAAK04B,aAAatf,YAAY,CAC1B4M,UAAWhD,EACX+V,IAAK30B,EAAKsS,gBAAgBmiB,UAC1BvjB,IAAK9R,EAAAA,EAAAA,YAAAA,QAAuB,SAAW,EAAIA,EAAAA,EAAAA,YAAiBoJ,SAAS0F,SAASN,SAAWxO,EAAAA,EAAAA,cAE7FA,EAAAA,EAAAA,oBAAuBwf,aAAkBjiB,MAAQiiB,EAAOzY,KAAK,KAAOyY,GAAUwV,GAElF,IACIC,IAEJ,MAAO/e,GACHhE,EAAOgE,GAGLsM,aAAqBjlB,QAAQilB,EAAYA,EAAU5T,MAAM,MAE/D,IAAI4mB,EAAc55B,OAAOoO,QAAQwY,EAAU9d,QAAO,SAAU+wB,EAAIC,GAC5D,IAAIC,EAAUD,EAAGE,UAAU,EAAGF,EAAGjwB,QAAQ,MACzC,GAAKgwB,EAAGE,GAMJ,OADAF,EAAGE,GAAS9wB,KAAK6wB,GACVD,EANO,CACd,IAAII,EAAO,GAEX,OADAA,EAAKF,GAAW,CAACD,GACV95B,OAAOmD,OAAO02B,EAAII,MAK9B,KAAK96B,KAAI,SAAU4e,GAClB,IAAI6F,EAAS7F,EAAO,GACpB,OAAO,IAAIte,SAAQgM,eAAgB/L,EAAS4W,GACxC,GAAIlS,EAAAA,EAAAA,oBAAuBwf,GACvBlkB,EArFG,SAAUknB,EAAWsT,GAGhD,OAFMtT,aAAqBjlB,QACvBilB,EAAYA,EAAU5T,MAAM,MACzB4T,EAAU9d,QAAO,SAAU+wB,EAAIC,GAClC,IAAIG,EAAO,GAEX,OADAA,EAAKH,GAAMI,EAAWJ,GACf95B,OAAOmD,OAAO02B,EAAII,KAC1B,IA8E6BE,CAAuBvW,EAAQxf,EAAAA,EAAAA,2BAG3C,UACUs1B,EAAU9V,GAAQ,SAAU5e,GAC9BtF,EAAQsF,MAGhB,MAAOsV,GACHhE,EAAOgE,UAInB7a,QAAQwiB,IAAI2X,GAAar6B,MAAK,SAAUstB,GACpC,IAAIuN,EAAcvN,EAAS/jB,QAAO,SAAU+wB,EAAIC,GAC5C,OAAO95B,OAAOmD,OAAO02B,EAAIC,KAC1B,IAGHp6B,EAA4C,IAApCM,OAAOD,KAAKq6B,GAAal2B,OAAek2B,EAAYp6B,OAAOD,KAAKq6B,GAAa,IAAMA,MAC5FpjB,MAAMV,QAGTA,EAAO,wCA/FPA,EAAO,uDAkGdU,OAAMsD,GAAOhE,EAAOgE,QAc7B,OAZA7U,EAAOlG,MACH,SAAUyF,GACFZ,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAASp0B,MAGjB,SAAUq1B,GACFj2B,EAAAA,EAAAA,KAAAA,WAAmB0S,IACnBA,EAAMujB,MAIX50B,EAOX2P,kBAAkBnV,EAAI2F,GAClB,MAAMhF,EAAOC,KAEP4lB,EAAQ,GA0Ed,OAzEAxmB,EAAK0B,MAAMC,QAAQ3B,GAAMA,EAAK,CAACA,GAG/BW,EAAK8U,MAAQjC,EAAAA,EAAAA,MAAAA,QACb7S,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cACjBC,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAE0E,MAAOzE,IAE1DX,EAAGmI,SAAQ,SAAUnI,GACjBwmB,EAAMxd,KAAKwK,EAAAA,EAAAA,UAAAA,kBAAAA,KAAuC7S,EAAMX,EAAI2F,OAE5D6gB,EAAMzK,MAAM1G,IAAUA,EAAKjR,SAC3BzD,EAAK+E,cAAcC,GAInB6gB,EAAMre,SAASkN,IAOX,GANAqd,EAAgBhT,IAAIrK,EAAKL,IAAKrP,EAAUjF,EAAAA,EAAAA,WAAAA,QAA4BA,EAAAA,EAAAA,WAAAA,aAGpE2U,EAAKJ,SAAS9M,SAAS8M,IACnBtU,EAAKwU,kBAAkBF,EAASD,IAAKrP,MAErC0P,EAAKjR,OAAQ,CACgBsuB,EAAgBtT,IAAI/J,EAAKjR,OAAO4Q,OAehCtU,EAAAA,EAAAA,WAAAA,aACzB2U,EAAKjR,OAAO6Q,SAAShR,OAAS,GAC9BoR,EAAKjR,OAAO6Q,SAASU,OAAMvM,GAAKspB,EAAgBtT,IAAIhW,EAAE4L,OAAStU,EAAAA,EAAAA,WAAAA,eAC/DC,EAAKwU,kBAAkBE,EAAKjR,OAAO4Q,KAAK,GAGhD,IACIlS,EACA6M,EAFA0qB,GAAQ,EAGZ,IAAKv3B,EAAI,EAAGA,EAAInC,EAAK+O,SAASzL,OAAQnB,IAElC,IADA6M,EAAIhP,EAAK+O,SAAS5M,IACZ9C,IAAMA,EAAI,CACZq6B,GAAQ,EACR1qB,EAAEjK,cAAcC,GAChB,MAGR,IAAK00B,EACD,IAAKv3B,EAAI,EAAGA,EAAInC,EAAK+O,SAASzL,OAAQnB,SAElBkC,KADhB2K,EAAIhP,EAAK+O,SAAS5M,IACZw3B,QACF3qB,EAAE2qB,MAAQ,IAAM3qB,EAAEpK,UAAU2F,KAAK,OAGjCyE,EAAE2qB,QAAUt6B,GAAM2P,EAAE2qB,MAAMpI,WAAWlyB,KACrC2P,EAAEjK,cAAcC,MAOpChF,EAAK8U,MAAQjC,EAAAA,EAAAA,MAAAA,KACb7S,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOzE,IACpDA,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,QACV8lB,EAAMviB,OAAS,EAAIuiB,EAAQA,EAAM,GAG5C5Q,kBAAkB5V,GACd,IAAIW,EAAOC,KACP4E,EAAShF,MAAMoV,kBAAkBtU,KAAKX,EAAMX,GAE5CqV,EAAO1U,EAAKoU,SAAS/U,EAAIW,EAAKmU,WAClC,GAAKO,EAAL,CACA,GAAIA,IAAS1U,EAAKmU,WACdtP,EAAS7E,EAAKsT,gBAAkBvT,EAAAA,EAAAA,WAAAA,QAA4BA,EAAAA,EAAAA,WAAAA,eAC7CA,EAAAA,EAAAA,WAAAA,SACXgB,MAAMoX,KAAK4Z,EAAgB3D,UAAUhT,MAAKyN,GAAKA,IAAM9oB,EAAAA,EAAAA,WAAAA,gBACrD8E,EAAS9E,EAAAA,EAAAA,WAAAA,iBAGZ,CACD,IAAIwU,EAAIwd,EAAgBtT,IAAIpf,GAC5B,QAAUgF,IAANkQ,EAAiB,CACjB1P,EAAS0P,EACiBxT,MAAMoX,KAAK4Z,EAAgBvkB,WAAW4N,MAAK7T,GAAOA,EAAI,KAAOlI,GAAMkI,EAAI,GAAGgqB,WAAWlyB,IAAOkI,EAAI,KAAO1C,MAE7HA,EAAS9E,EAAAA,EAAAA,WAAAA,iBAGZ,CACD,MAAM65B,EAAa74B,MAAMoX,KAAK4Z,EAAgBvkB,WAAW4N,MAAK7T,GAAOA,EAAI,KAAOlI,GAAMkI,EAAI,GAAGgqB,WAAWlyB,KAAQkI,EAAI,KAC9GsyB,EAAcnlB,EAAKJ,SAAShR,OAAS,GAAKoR,EAAKJ,SAASU,OAAMvM,GAAKspB,EAAgBtT,IAAIhW,EAAE4L,OAAStU,EAAAA,EAAAA,WAAAA,cAEpG8E,EADAg1B,EACS95B,EAAAA,EAAAA,WAAAA,YAEJ65B,EACI75B,EAAAA,EAAAA,WAAAA,YAGAA,EAAAA,EAAAA,WAAAA,SAIrB,OAAO8E,GAGXi1B,cAAcC,GACV95B,KAAKC,KAAK45B,cAAcC,GAG5BC,WAAWC,EAASC,EAASC,GACzB,OAAOl6B,KAAKC,KAAKk6B,gBAAgBH,EAASC,EAASC,GAGvD1K,UAGI,OAFaxvB,KACRm4B,gBADQn4B,KAEDC,KAAKwvB,eAGrB2K,2BAA2BC,GACvB,MACM/e,EADOtb,KACO1B,IAAIyoB,YACxB,OAFa/mB,KAEDs6B,oBAAoBhf,EAAQ+e,GAS5CC,oBAAoBhf,EAAQ+e,GACxB,OAAOr6B,KAAKC,KAAKq6B,oBAAoBhf,EAAQ+e,GAGjDllB,cAAcxV,GACV,MAAMI,EAAOC,KACbD,EAAKE,KAAKkV,cAAcxV,GACpBA,EAAQuH,KAAOvH,EAAQ46B,SACvBx6B,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAE0E,MAAOzE,IAC1DA,EAAK+O,SAASvH,SAAQ,SAAUizB,GAC5BA,EAAKv5B,eAAeu5B,EAAKl5B,eAAe,CACpCyF,YAAapH,EAAQ46B,OACrBrzB,IAAKvH,EAAQuH,UAGrBnH,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOzE,KAI5D06B,UAAU96B,GACOK,KACRoG,OAASnC,EAAAA,EAAAA,OAAY,GAAItE,GADjBK,KAERC,KAAKw6B,UAAU96B,GAGxB+6B,YAAY/6B,GACR,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,MAAMg7B,EAAO,CACTv7B,GAAIW,EAAKX,IAETW,EAAKzB,KAAOyB,EAAKzB,IAAI4I,MAAQnH,EAAKzB,IAAIqB,QAAQuH,MAC9CyzB,EAAKzzB,IAAMnH,EAAKzB,IAAI4I,KAIxB,IAAI0zB,EAAYr5B,KAAKs5B,IAAI,IAAK96B,EAAKzB,IAAI2B,KAAK66B,QAAUh7B,EAAAA,EAAAA,iBAA0BA,EAAAA,EAAAA,iBAA0B,GAC1G,IAAIi7B,EAAe,KACnB,MAAMjsB,EAAWnP,EAAQmP,UAAY/O,EAAK+O,SAmE1C,OAlEA6rB,EAAK7rB,SAAWA,EACXxQ,KAAI,SAAUyQ,GAAG,IAAAisB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACd,IAAIC,EAAO,GACX,IAAIC,EACJ,QAAQ,GACJ,KAAKzsB,aAAaU,EAAAA,EACd8rB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,MACZ07B,EAAwB,QAAdR,EAAGj7B,EAAKqG,cAAM,IAAA40B,OAAA,EAAXA,EAAaS,OAC1B,MACJ,KAAK1sB,aAAaW,EAAAA,EACd6rB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,MACZ07B,EAAwB,QAAdP,EAAGl7B,EAAKqG,cAAM,IAAA60B,OAAA,EAAXA,EAAa5F,MAC1B,MACJ,KAAKtmB,aAAac,EAAAA,EACd0rB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,WACZ,MACJ,KAAKiP,aAAaiC,EAAAA,EACduqB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,SACZ07B,EAAwB,QAAdN,EAAGn7B,EAAKqG,cAAM,IAAA80B,OAAA,EAAXA,EAAa3F,KAC1B,MACJ,KAAKxmB,aAAa6B,EAAAA,EACd2qB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,cACZ07B,EAAwB,QAAdL,EAAGp7B,EAAKqG,cAAM,IAAA+0B,OAAA,EAAXA,EAAa5F,KAC1B,MACJ,KAAKxmB,aAAa1M,EAAAA,EACdk5B,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,QACZ07B,EAAwB,QAAdJ,EAAGr7B,EAAKqG,cAAM,IAAAg1B,OAAA,EAAXA,EAAa/qB,QAC1B,MACJ,KAAKtB,aAAakB,EAAAA,EACdsrB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,aACZ07B,EAAwB,QAAdH,EAAGt7B,EAAKqG,cAAM,IAAAi1B,OAAA,EAAXA,EAAahrB,QAC1B,MACJ,KAAKtB,aAAaxP,EAAAA,EACdg8B,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,OACZ07B,EAAwB,QAAdF,EAAGv7B,EAAKqG,cAAM,IAAAk1B,OAAA,EAAXA,EAAajrB,QAUlC,GALAkrB,EAAKn8B,GAAK2P,EAAE3P,GACZm8B,EAAKh7B,KAAOgD,EAAAA,EAAAA,KAAAA,gBAAwBwL,EAAEzO,SAAUs6B,GAChDW,EAAKp3B,KAAO4K,EAAEhL,UACdw3B,EAAKh3B,UAAYwK,EAAExK,UACnBg3B,EAAKl3B,WAAa0K,EAAE1K,gBACSD,IAAzBzE,EAAQ+7B,cAA8B/7B,EAAQ+7B,aAAc,CAE5D,IAAK,IAAIjzB,KADT+yB,EAAaj4B,EAAAA,EAAAA,KAAAA,OAAe,GAAIi4B,GACJ,CACxB,IAAIxzB,EAAMwzB,EAAW/yB,GACjBlF,EAAAA,EAAAA,KAAAA,WAAmByE,KACnBwzB,EAAW/yB,GAAOT,EAAI+G,IAG9BwsB,EAAK51B,MAAQpC,EAAAA,EAAAA,KAAAA,OAAei4B,EAAYzsB,EAAE5I,YAGtC40B,EAFCA,EAEcrI,EAAcqI,EAAcQ,EAAK51B,OAFlBxG,OAAOmD,OAAO,GAAIi5B,EAAK51B,OAI7D,OAAO41B,MAEV57B,EAAQmP,UAAYisB,GAAgB57B,OAAOD,KAAK67B,GAAc13B,SAE/Ds3B,EAAK7rB,SAASvH,SAAQ,SAAU9D,GAC5BA,EAAQkC,MAAQ+sB,EAAcjvB,EAAQkC,MAAOo1B,GAAc,MAE/DJ,EAAKh1B,MAAQo1B,GAEVJ,EAGX/vB,kBAAkB+wB,GACd,MAAM57B,EAAOC,KACPghB,EAAW,IAAIlgB,MAAM66B,EAAI7sB,SAASzL,QACxCs4B,EAAI7sB,SAASvH,SAAQ,SAAUwH,EAAGtH,GAC9B,IAAI9B,EAAQpC,EAAAA,EAAAA,KAAAA,OAAe,GAAIo4B,EAAIh2B,OAAS,GAAIoJ,EAAEpJ,OAClD,MAAMi2B,EAAiBr4B,EAAAA,EAAAA,KAAAA,OAAe,GAAIoC,EAAO,CAC7CxB,KAAM4K,EAAE5K,KACR/E,GAAI2P,EAAE3P,GACNiF,WAAY0K,EAAE1K,WACdC,UAAWyK,EAAExK,YAEjB,IAAIs3B,EACJ,OAAQ9sB,EAAE5E,MACN,KAAKrK,EAAAA,EAAAA,KAAAA,QACD+7B,EAAQ97B,EAAKi3B,WACb,MACJ,KAAKl3B,EAAAA,EAAAA,KAAAA,aACD+7B,EAAQ97B,EAAKq3B,gBACb,MACJ,KAAKt3B,EAAAA,EAAAA,KAAAA,SACD+7B,EAAQ97B,EAAKy2B,YACb,MACJ,KAAK12B,EAAAA,EAAAA,KAAAA,cACD+7B,EAAQ97B,EAAK62B,iBACb,MACJ,KAAK92B,EAAAA,EAAAA,KAAAA,OACD+7B,EAAQ97B,EAAKy3B,UACb,MACJ,KAAK13B,EAAAA,EAAAA,KAAAA,WAEG+7B,EADA9sB,EAAEpJ,QAAUoJ,EAAEpJ,MAAM0P,KAAOtG,EAAEpJ,MAAMm2B,WAC3B/7B,EAAKq2B,eAGLr2B,EAAK81B,cAEjB,MACJ,KAAK/1B,EAAAA,EAAAA,KAAAA,MAEG+7B,EADAl2B,IAAUA,EAAM0P,KAAO1P,EAAMm2B,WACrB/7B,EAAKi2B,UAGLj2B,EAAKy1B,SAMzB,GAAIqG,EAAO,CACP,IAAIt7B,EAAOgD,EAAAA,EAAAA,KAAAA,gBAAwBwL,EAAExO,MACjCo7B,EAAIz0B,KAAOnH,EAAKzB,IAAI4I,MAAQy0B,EAAIz0B,IAChC8Z,EAASvZ,GAAO,IAAI7I,SAAQ,SAAU6f,EAAKC,GACvC3e,EAAKzB,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GAClDkuB,EAAMn7B,KAAKX,EAAMQ,EAAMq7B,GAAgBl9B,MACnC,WACI+f,OAEJ,WACIC,EAAI1f,MAAM,0BAO1BgiB,EAASvZ,GAAOo0B,EAAMn7B,KAAKX,EAAMQ,EAAMq7B,aAI7Ch9B,QAAQwiB,IAAIJ,GAGtBxW,QACI,MACMA,EAAQ5K,MAAM4K,MAAM9J,KADbV,MAGb,OAHaA,KAER8O,SAASvH,SAAQwH,GAAKvE,EAAMotB,WAAW7oB,EAAEvE,WACvCA,EAGXkL,wBACI,MAAM3V,EAAOC,KACb,GAAID,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CACpC,MAAMk8B,EAASA,IAAMj8B,EAAKJ,QAAQ0V,KAAOtV,EAAKsV,IAG9C,IAAI6H,EAAS,CACbA,QAAiB,MACjBA,QAAiB,QACjBA,QAAiB,mBAEjB,QAPc3Z,EAAAA,EAAAA,KAAAA,YAAoBy4B,MAAaz4B,EAAAA,EAAAA,KAAAA,YAAoBA,EAAAA,EAAAA,KAAAA,eAAuBy4B,MAAaj8B,EAAKqV,UAAU4mB,KAAYA,KAOpH,IAAMz4B,EAAAA,EAAAA,KAAAA,eAAuB2Z,GAE/C,OAAO,KAGX1D,yBACI,MAAMzZ,EAAOC,KACb,OAAID,EAAKoK,OAASrK,EAAAA,EAAAA,UAAAA,IACP,IAAIlB,SAAQ,CAACC,EAAS4W,KAUzB,IAAI0I,GAAape,EAAKJ,QAAQ0V,KAAOtV,EAAKsV,KAAK9L,QAAQ,aAAc,IAEjExJ,EAAKiW,eACLnX,EAAQkB,EAAKiW,cACbhT,EAAAjD,EAAI8b,EAAwBjd,QAAQC,QAAQkB,EAAKiW,gBAEjDzS,EAAAA,EAAAA,gBAAmB4a,KACnBtf,EAAQ0E,EAAAA,EAAAA,gBAAmB4a,IAC3Bnb,EAAAjD,EAAI8b,EAAwBjd,QAAQC,QAAQ0E,EAAAA,EAAAA,gBAAmB4a,MAInE,MAAM8d,EAAejiB,EAAqBmE,GAC1CnE,EAAqBmE,GAAUnb,EAAGjD,EAAI8b,EAAwBogB,GAAgB,IAAIr9B,SAAQ,SAAU6f,EAAKC,GACrG,MAAMC,EAAgB5e,EAAKyV,wBACrBoJ,EAAiB7e,EAAK8e,6BAE5BF,EACKjgB,MAAK,SAAUsX,GACZyI,EAAIzI,MAEPG,OAAM,SAAUF,GACb2I,EAAezI,OAAM,WACjBuI,EAAIzI,SAGhB2I,EACKlgB,MAAK,SAAUsX,GACZyI,EAAIzI,MAEPG,OAAM,WACHwI,EAAcxI,OAAM,SAAUF,GAC1ByI,EAAIzI,aAKpB+D,EAAqBmE,GAAWzf,MAAK,SAAUsX,IA9CjB,SAAUA,GAGpCjW,EAAKiW,aAAejW,EAAKiW,cAAgBA,EACzCzS,EAAAA,EAAAA,gBAAmBxD,EAAKJ,QAAQ0V,KAAOtV,EAAKsV,KAAO9R,EAAAA,EAAAA,gBAAmBxD,EAAKJ,QAAQ0V,KAAOtV,EAAKsV,MAAQW,EACvGzS,EAAAA,EAAAA,gBAAmB4a,GAAa5a,EAAAA,EAAAA,gBAAmB4a,IAAcnI,EACjEnX,EAAQmX,GAyCRkI,CAAsBlI,MAErBG,OAAM,SAAUF,GACTlW,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAMsZ,OAAQ,4BAErE5D,EAAOQ,SAKZrX,QAAQ6W,OAAO,IAAIzW,MAAO,UAASe,EAAKX,6CAG1D,eAAAs2B,EA9/B6BwG,EAAyBjG,EAAOt2B,GACtD,MAAMI,EAAOC,KACP8O,QAAiBotB,EAAwBx7B,KAAKX,EAAM,CAACk2B,GAAQt2B,GAInE,OAHII,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAM0D,QAASqL,EAAS,KAExEA,EAAS,GACnB,eAAAykB,EAE0B4I,EAAaC,EAAiBC,EAAW18B,GAChE,MAAMI,EAAOC,KACb,IAAIs8B,EAEAA,EADAF,EACqBvK,EAAiBuK,GAGjB58B,EAAAA,EAIzB,IAFA,IAAIsP,EAAW,IAAIhO,MAAMq7B,EAAY94B,QACjCk5B,EAAiB,GACZr6B,EAAI,EAAG+I,EAAMkxB,EAAY94B,OAAQnB,EAAI+I,EAAK/I,IAAK,CACpD,MAAM8B,EAAOT,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAI5D,GACtC,IACI8D,EADA/D,EAASy8B,EAAYj6B,GAEzB,MAAMhC,EAAWqD,EAAAA,EAAAA,KAAAA,QAAAA,UAAAA,SAAmC7D,GACpD,GAAIA,aAAkB48B,EAClB74B,EAAU/D,OAMV,GAHIQ,IACAuD,EAAU/D,EAAOgE,OAAShE,EAAOgE,MAAMF,SAEtCC,EAAS,CACVO,EAAKQ,MAAQzE,EACb,MAAMy7B,EAAaz7B,EAAKqG,QAAUrG,EAAKqG,OAAOi2B,GAC9C,GAAIp4B,EAAAA,EAAAA,gBAAqBD,KAAUw3B,EAAY,CAE3C,MAAMgB,EAAiBr9B,OAAOmD,OAAO,GAAIiE,EAAAA,EAAAA,OAAYxG,EAAKzB,IAAMyB,EAAKzB,IAAIqB,QAAQyG,OAAS,MAC1FjH,OAAOmD,OAAO0B,EAAMw4B,EAAeH,GAAYb,EAAY77B,GAE/D8D,EAAU,IAAI64B,EAAmB58B,EAAQsE,GAGjDP,EAAQe,MAAQzE,EAChB+O,EAAS5M,GAAKuB,EACd1D,EAAK+O,SAAS1G,KAAK3E,GACdvD,GACDq8B,EAAen0B,KAAK3E,EAAQxD,KAAKwD,SAEjCA,EAAQ9D,QAAQ2E,WAChBb,EAAQg5B,WAQhB,OAHIF,EAAel5B,QACftD,EAAKE,KAAK43B,YAAY0E,GAEnBztB,EAs8BfvL,EAAAA,EAAAA,MAAAA,OAAkBquB,EAClB,W,upCClzCA,MAAM8K,EAAc,eAAe,IAAAC,EAAA,IAAAn6B,QAAAo6B,EAAA,IAAAp6B,QAAAq6B,EAAA,IAAApqB,QAEnC,MAAMqqB,UAAeC,EAAAA,EAsBjBt9B,c,QACIG,Q,IAAQ,K,EAAAi9B,G,SAAAl6B,EAAA,KAAAg6B,EAAA,CAAA/5B,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAi6B,EAAA,CAAAh6B,UAAA,EAAAC,OApBF,IAqBN,MAAM9C,EAAOC,KACbgD,EAAAjD,EAAI48B,EAAWhwB,SAASC,cAAc,WACtC7J,EAAAhD,EAAI48B,GAASvP,aAAa,OAAQ,UAClCrtB,EAAKi9B,WAAWnwB,YAAW9J,EAAChD,EAAI48B,IAGpCM,oBACI,MAAMl9B,EAAOC,KACbD,EAAKqZ,KAAOrZ,EAAKqZ,KACjBrZ,EAAKm9B,QAAUn9B,EAAKm9B,QACpBn9B,EAAKo9B,OAASp9B,EAAKo9B,OACnBp9B,EAAKq9B,SAAWr9B,EAAKq9B,SACrBr9B,EAAKs9B,KAAOt9B,EAAKs9B,KACjBt9B,EAAKu9B,SAAWv9B,EAAKu9B,SAGdC,gCACP,MAAO,CAAC,OAAQ,OAAQ,UAAW,WAAY,SAAU,YAAa,SAG1EC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KAOb,GANa,aAAT6I,EACA9I,EAAKq9B,SAAWr9B,EAAK49B,aAAa90B,GAEpB,WAATA,IACL9I,EAAKo9B,OAASp9B,EAAK49B,aAAa90B,IAEhC40B,IAAaC,EACb,OAAQ70B,GACJ,IAAK,OACD9I,EAAKqZ,KAAOskB,EACZ,MACJ,IAAK,OACD39B,EAAKs9B,KAAOK,EACZ,MACJ,IAAK,UACD39B,EAAKm9B,QAAUQ,EACf,MACJ,IAAK,YACD39B,EAAKu9B,SAAWI,EAChB,MACJ,IAAK,QACG39B,EAAK49B,aAAa90B,GACd9F,EAAAhD,EAAI48B,GAASgB,aAAa,UAC1B56B,EAAAhD,EAAI48B,GAASvP,aAAa,QAASsQ,GAInC36B,EAAAhD,EAAI48B,GAASgB,aAAa,WAC1B59B,EAAKqZ,KAAOrZ,EAAKqZ,OAUrCsjB,kBACA,OAAOA,EAGPQ,cACA,OAAOl9B,KAAK49B,aAAa,YAAcd,EAAOI,QAAQW,QAGtDX,YAAQr6B,GACR,MAAM9C,EAAOC,KACb6C,EAAQA,GAASi6B,EAAOgB,OAAOD,QAE/B96B,EAAAhD,EAAI48B,GAASoB,UAAUC,OAAOj+B,EAAKm9B,SAC/Br6B,IAAUi6B,EAAOI,QAAQW,SACzB96B,EAAAhD,EAAI48B,GAASoB,UAAUnjB,IAAI/X,GAC3B9C,EAAKqtB,aAAa,UAAWvqB,IAG7B9C,EAAKk+B,gBAAgB,WAEzB,MAAM7kB,EAAOrZ,EAAKqZ,MACdA,GAASvW,IAAUi6B,EAAOI,QAAQgB,MAAQr7B,IAAUi6B,EAAOI,QAAQiB,SAAWt7B,IAAUi6B,EAAOI,QAAQkB,KAIvGr7B,EAAAhD,EAAI48B,GAASsB,gBAAgB,SAH7Bl7B,EAAAhD,EAAI48B,GAASvP,aAAa,QAAShU,GAOvCA,WACA,OAAOpZ,KAAK49B,aAAa,QAGzBxkB,SAAKvW,GACL,MAAM9C,EAAOC,KACb+C,EAAAhD,EAAI48B,GAASxvB,UAAYtK,MAAAA,EAAAA,EAAS,GAC9BA,EACA9C,EAAKqtB,aAAa,OAAQvqB,GAG1B9C,EAAKk+B,gBAAgB,QAEzB,MAAMf,EAAUn9B,EAAKm9B,QACjBA,IAAYJ,EAAOI,QAAQgB,MAAQhB,IAAYJ,EAAOI,QAAQiB,SAAWjB,IAAYJ,EAAOI,QAAQkB,OAChGv7B,EACAE,EAAAhD,EAAI48B,GAASvP,aAAa,QAASvqB,GAGnCE,EAAAhD,EAAI48B,GAASsB,gBAAgB,UAKrCX,eACA,OAAOt9B,KAAK49B,aAAa,aAezBN,aAASz6B,GAETgT,EADa7V,KACT68B,EAAAwB,GAAA39B,KADSV,KACM,YAAa6C,GAGhCw6B,WACA,OAAOr9B,KAAK49B,aAAa,QAGzBP,SAAKx6B,GAELgT,EADa7V,KACT68B,EAAAwB,GAAA39B,KADSV,KACM,OAAQ6C,GAG3Bu6B,eACA,OAAOp9B,KAAK29B,aAAa,YAGzBP,aAASv6B,GACT,MACMy7B,IAAcz7B,EADP7C,KAERu+B,gBAAgB,WAAYD,GACjCv7B,EAHa/C,KAGT28B,GAASS,SAAWkB,EAGxBnB,aACA,OAAOn9B,KAAK29B,aAAa,UAGzBR,WAAOt6B,GACP,MACMy7B,IAAcz7B,EADP7C,KAERu+B,gBAAgB,SAAUD,GAC/Bv7B,EAHa/C,KAGT28B,GAASoB,UAAUS,OAAO,SAAUF,IAE/C,SAAAD,EA/CiBx1B,EAAMhG,GAChB,MAAM9C,EAAOC,KACT6C,GACAE,EAAAhD,EAAI48B,GAASvP,aAAa,QAAUvkB,EAAMhG,GAC1C9C,EAAKqtB,aAAavkB,EAAMhG,KAGjBE,EAAAhD,EAAI48B,GAASsB,gBAAgB,QAAUp1B,GAC9C9I,EAAKk+B,gBAAgBp1B,IAE5BhJ,EA1JCi9B,EAAM,UAKS,CACbe,QAAS,UACTK,KAAM,OACNO,SAAU,WACVL,KAAM,OACND,QAAS,YACZt+B,EAXCi9B,EAAM,SAaQ,CACZ4B,MAAO,QACPC,OAAQ,SACRC,SAAU,WACVC,aAAc,eACdC,KAAM,OACNC,MAAO,UA8KVC,eAAexgB,IAAIke,KACpBK,EAAAA,EAAAA,aAAuBL,GACvBsC,eAAeC,OAAOvC,EAAaI,IAEvC,W,mLCrMA,MAAMC,UAAkBmC,YAEpBz/B,cACIG,QACA,MAAMG,EAAOC,KACbD,EAAKo/B,aAAa,CAAElM,KAAM,SAC1B,MAAMmM,EAAOzyB,SAASC,cAAc,QACpCwyB,EAAKhS,aAAa,MAAO,cACzBgS,EAAKvtB,KAAQ,GAAAwtB,EAAEtC,EARjBA,EAASuC,GAAA5+B,KAQQq8B,KAA4Bh9B,EAAK28B,kBAChD38B,EAAKi9B,WAAWnwB,YAAYuyB,GAG5B1C,kBACA,MAfY,kBAsBhBr8B,oBAAoBk/B,GAChB,GAAIC,WAAW7yB,SAAU,CACrB,MAAMyyB,EAAOzyB,SAASC,cAAc,QACpCwyB,EAAKhS,aAAa,MAAO,WACzBgS,EAAKhS,aAAa,KAAM,SACxBgS,EAAKvtB,KAAQ,GAAAwtB,EAAEtC,EAzBrBA,EAASuC,GAAA5+B,KAyBYq8B,KAA4BwC,QAC3C5yB,SAAS8yB,KAAK5yB,YAAYuyB,KAGrC,SAAAE,IAZO,MAAQ,GAAE/7B,EAAAA,EAAAA,qBAclB,W,2qBCjCA,MAAMm5B,EAAc,eAAe,IAAAgD,EAAA,IAAAl9B,QAAAq6B,EAAA,IAAApqB,QAEnC,MAAMktB,UAAe5C,EAAAA,EAIjBt9B,c,QACIG,Q,IAAQ,K,EAAAi9B,G,2CAAAl6B,CAAA,KAAA+8B,EAAA,CAAA98B,UAAA,EAAAC,WAAA,IACR,MAAM9C,EAAOC,KACbgD,EAAAjD,EAAI2/B,EAAa/yB,SAASC,cAAc,UACxC7J,EAAAhD,EAAI2/B,GAAWtS,aAAa,OAAQ,YACpCrqB,EAAAhD,EAAI2/B,GAAW9zB,iBAAiB,UAAU,SAAU+B,GAChD5N,EAAK6/B,QAAU78B,EAAAhD,EAAI2/B,GAAWE,QAC9B,MAAMC,EAAQ,IAAIC,MAAM,SAAU,CAAEC,SAAS,IAC7ChgC,EAAKigC,cAAcH,MAEvB9/B,EAAKi9B,WAAWnwB,YAAW9J,EAAChD,EAAI2/B,IAGpCzC,oBACI,MAAMl9B,EAAOC,KACbD,EAAKqZ,KAAOrZ,EAAKqZ,KACjBrZ,EAAK6/B,QAAU7/B,EAAK6/B,QACpB7/B,EAAKkgC,gBAAkBlgC,EAAKkgC,gBAC5BlgC,EAAKmgC,kBAAoBngC,EAAKmgC,kBAC9BngC,EAAKq9B,SAAWr9B,EAAKq9B,SAGdG,gCACP,MAAO,CAAC,OAAQ,WAAY,UAAW,oBAAqB,uBAGhEC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,aAAT6I,EACA9I,EAAKq9B,SAAWr9B,EAAKq9B,SAEP,YAATv0B,IACL9I,EAAK6/B,QAAU7/B,EAAK6/B,SAEpBnC,IAAaC,IACA,SAAT70B,IACA9I,EAAKqZ,KAAOskB,GAEH,sBAAT70B,IACA9I,EAAKkgC,gBAAkBvC,GAEd,wBAAT70B,IACA9I,EAAKmgC,kBAAoBxC,IAKjChB,kBACA,OAAOA,EAGPtjB,WACA,OAAOpZ,KAAK49B,aAAa,QAGzBxkB,SAAKvW,GAELE,EADa/C,KACT0/B,GAAWtS,aAAa,QAASvqB,GADxB7C,KAERotB,aAAa,OAAQvqB,GAG1Bo9B,sBACA,OAAOjgC,KAAK49B,aAAa,qBAGzBsC,wBACA,OAAOlgC,KAAK49B,aAAa,uBAezBqC,oBAAgBp9B,GAEhBgT,EADa7V,KACT68B,EAAAwB,GAAA39B,KADSV,KACM,oBAAqB6C,GAGxCq9B,sBAAkBr9B,GAElBgT,EADa7V,KACT68B,EAAAwB,GAAA39B,KADSV,KACM,sBAAuB6C,GAG1C+8B,cACA,OAAO5/B,KAAK29B,aAAa,WAGzBiC,YAAQ/8B,GACR,MACMy7B,IAAcz7B,EADP7C,KAERu+B,gBAAgB,UAAWD,GAChCv7B,EAHa/C,KAGT0/B,GAAWE,QAAUtB,EAGzBlB,eACA,OAAOp9B,KAAK29B,aAAa,YAGzBP,aAASv6B,GACT,MACMy7B,IAAcz7B,EADP7C,KAERu+B,gBAAgB,WAAYD,GACjCv7B,EAHa/C,KAGT0/B,GAAWtC,SAAWkB,GAEjC,SAAAD,EA3CiBx1B,EAAMhG,GAChB,MAAM9C,EAAOC,KACT6C,GACAE,EAAAhD,EAAI2/B,GAAWtS,aAAa,QAAUvkB,EAAMhG,GAC5C9C,EAAKqtB,aAAavkB,EAAMhG,KAGjBE,EAAAhD,EAAI2/B,GAAWzB,gBAAgB,QAAUp1B,GAChD9I,EAAKk+B,gBAAgBp1B,IAqC5Bm2B,eAAexgB,IAAIke,KACpBK,EAAAA,EAAAA,aAAuBL,GACvBsC,eAAeC,OAAOvC,EAAaiD,IAEvC,W,sFC7HIp8B,EAAKA,GAAM,IAEf,WACI,IAAKA,EAAG48B,YACJ,GAA8B,oBAAnBC,eAEP78B,EAAG48B,YAAcC,eACZ78B,EAAG48B,YAAYrR,SAAS,OACzBvrB,EAAG48B,YAAc58B,EAAG48B,YAAc,SAGrC,CAED,MACMxuB,EADShF,SAAS0zB,cACLzC,aAAa,OAChCr6B,EAAG48B,YAAcxuB,EAAIiV,OAAO,EAAGjV,EAAI+hB,YAAY,KAAO,GACtD8L,WAAWY,eAAiB78B,EAAG48B,aAd3C,GAmBA58B,EAAGuH,QAAU,GACbvH,EAAGyS,aAAe,GAClBzS,EAAG+8B,gBAAkB,GACrB/8B,EAAGgsB,oBAAsB,GACzBhsB,EAAGg9B,KAAO,GAEVh9B,EAAGupB,MAAQ,GAEe,kBAAfvpB,EAAGi9B,UACVj9B,EAAGi9B,SAAU,GAGjBj9B,EAAGk9B,MAAQ,SAAUrnB,GACjBqnB,MAAMrnB,IAGV7V,EAAGm9B,OAAS,SAAUtnB,EAAMvW,EAAO01B,GAC/B,IAAImF,EAAWgD,OAAOtnB,EAAMvW,GACxBU,EAAGU,KAAK08B,WAAWpI,IACnBA,EAASmF,IAIjBn6B,EAAGq9B,QAAU,SAAUxnB,EAAMynB,EAAQC,GAC7BF,QAAQxnB,GACJ7V,EAAGU,KAAK08B,WAAWE,IACnBA,IAIAt9B,EAAGU,KAAK08B,WAAWG,IACnBA,KAKZv9B,EAAG0S,MAAQ,SAAUmD,GACb3H,OAAO/J,SACPA,QAAQuO,MAAMmD,IAOtB7V,EAAGw9B,QAAU,SAAU1rB,GAEnB,IAAIzQ,EADJyQ,EAAMA,EAAIuU,OAEV,MAAMoX,EAAWvvB,OAAOlO,GAAGgD,IAAI06B,MAC/B,GAAID,EAAU,CACV,IAAIE,GAAU,EACd,MAAMC,EAAqB1vB,OAAOlO,GAAGgD,IAAI66B,gBACzC,GAAID,EACA,IAAK,IAAIj/B,EAAI,EAAGA,EAAIi/B,EAAmB99B,OAAQnB,IAC3C,GAAImT,EAAIrM,QAAQm4B,EAAmBj/B,KAAO,EAAG,CACzCg/B,GAAU,EACV,MAKPA,GAAY39B,EAAGU,KAAKo9B,aAAahsB,KACV,mBAAb2rB,EACPp8B,EAASo8B,EAAS3rB,IAElBzQ,EAASo8B,EACgB,SAArB3rB,EAAIuR,OAAO,EAAG,KAAehiB,GAAU6M,OAAOY,SAASN,UAC3DnN,GAAU6tB,mBAAmBpd,KAIzC,OAAOzQ,GAiBX,IAAI08B,EAAuB,SAAUjsB,GACjC,IAAIksB,EAAQ,GACZ,IACI,MAAM,IAAIviC,MACZ,MAAOiX,GACLsrB,EAAQtrB,GAASA,EAAMsrB,MAAQtrB,EAAMsrB,MAAQtrB,EAAMgN,WAGvD,MAAMue,EAASj+B,EAAG0W,IAAIuE,IAAI7R,SAASqL,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,MACjD2hC,EAAU,mBAAqBpsB,EAC/BqsB,EAAOn+B,EAAGU,KAAK09B,gBAAgBH,EAASA,EAAO7hC,QAAQyJ,OAAS,QAAS,kBAAmB,CAAEiM,IAAKA,IAGzG9R,EAAG0S,MACCyrB,EACA,CAAC5hC,EAAAA,EAAAA,aAAAA,OACD2hC,GAEJl+B,EAAG0S,MACE,GAAEyrB,uCACTH,GAASA,EAAMl+B,OAAS,EAAIk+B,EAAQ,KAC9B,CAACzhC,EAAAA,EAAAA,aAAAA,OACD2hC,IAGRl+B,EAAGq+B,WAAa,SAAUvsB,GACtB,IAAIwsB,EAAe,SAAUxsB,EAAKysB,GAC9B,IAEIl9B,EAFApG,EAAM,IAAI8sB,eACd9sB,EAAI4O,KAAK,MAAOiI,GAAK,GAGrB7W,EAAIujC,mBAAqB,SAAUp0B,GACR,IAAnBnP,EAAIwjC,aACe,MAAfxjC,EAAIqtB,QACJjnB,GAAS,EACTk9B,GAAgB,IACM,MAAftjC,EAAIqtB,QACXiW,IACAl9B,GAAS,GAETA,EAASpG,EAAIuX,eAMzB,IACIvX,EAAI6tB,KAAK,MACX,MAAOpW,GACLrR,GAAS,EACTk9B,IAGJ,OAAOl9B,GAGN,cAAcq9B,KAAK5sB,KACpBA,GAAa9R,EAAGi9B,QAAU,MAAQ,WAGtC,IAzEI57B,EACAs9B,EACAC,EAuEAC,EAAYP,EAAaxsB,GAAK,SAAUgtB,GACxC,OAAIA,GACAf,EAAqBjsB,IACd,GAEAwsB,EAAaxsB,GAAK,WACrBisB,EAAqBjsB,SAKjC,GAAI+sB,EAAW,CACX,IAAIE,EAAS31B,SAASC,cAAc,UACpC01B,EAAOn4B,KAAO,kBACdm4B,EAAOlpB,KAAOgpB,GAtFdF,EAAIv1B,SACJw1B,EAAKD,EAAEvrB,qBAAqB,QACd,IAAdwrB,EAAG9+B,QACHuB,EAASs9B,EAAEt1B,cAAc,QACzBs1B,EAAEzrB,gBAAgB8rB,aAAa39B,EAAQ+H,SAAS+0B,OAGhD98B,EAASu9B,EAAG,GAETv9B,GA8EOiI,YAAYy1B,KAI9B/+B,EAAGi/B,cAAgB,SAAU1/B,EAAWuS,EAAKkjB,GACzC,OAAOh1B,EAAGk/B,OAAO3/B,EAAWuS,EAAKkjB,GAAU,IAG/C,MAAMmK,EAAqB,SAAUxO,EAAMyO,GAClCp/B,EAAGU,KAAKo9B,aAAanN,KACtByO,EAASxV,YAAc,cAI/B5pB,EAAGk/B,OAAS,SAAU3/B,EAAWuS,EAAKkjB,EAAUqK,GAAQ,EAAOC,GAC3D,OAAO,IAAIjkC,SAAQ,SAAUC,EAASk1B,GAClC,MAAM+O,EAAQ,WACNv/B,EAAGU,KAAK08B,WAAWpI,IACnBA,IAEJ15B,KAGJ,IAAIkkC,EAAOjiC,MAAMC,QAAQsU,GAAOA,EAAM,CAACA,GAQvC,GAPA0tB,EAAOA,EAAKzkC,KAAI,SAAUkJ,GACtB,MAAK,SAASy6B,KAAKz6B,IAAwC,IAAhCA,EAAIwB,QAAQzF,EAAG48B,aAGnC34B,EAFIA,GAAOjE,EAAGi9B,QAAU,MAAQ,cAKvC19B,EAAW,CAGX,IAAI+F,EAAO,GACX,MAAMqa,EAAU,SAAUgR,GACtB,OAAOA,EAAK/hB,MAAM,KAAK+d,UAAUvlB,MAAM,EAAG,GAAGulB,UAAU5lB,KAAK,KAAK8jB,eAErE,IANA2U,EAAOA,aAAgBjiC,MAAQiiC,EAAO,CAACA,IAM9B1/B,OAAS,EAAG,CACjB,IAAI2/B,EAAWD,EAAKp4B,MAAM,GAAGzF,QAAO,SAAUgvB,EAAMpK,GAChD,OAAImZ,IAAAA,UAAiB/f,EAAQgR,MACzB6O,EAAKh6B,OAAO+gB,EAAO,GACnBmZ,IAAAA,MAAa/f,EAAQgR,GAAO4O,IACrB,MAKS,IAApBE,EAAS3/B,OACTwF,EAAOqa,EAAQ8f,EAAS,IACjBA,EAAS3/B,OAAS,IACzBwF,EAAOm6B,EAAS/6B,QAAO,SAAU+Z,EAAMkhB,GACnC,OAAOhgB,EAAQlB,GAAQ,IAAMkB,EAAQggB,YAI7Cr6B,EAAOqa,EAAQ6f,EAAK,IAGxB,GAAIl6B,EAAKxF,OAAS,EACd,GAAK4/B,IAAAA,UAAiBp6B,GA4BlBo6B,IAAAA,MAAap6B,EAAMi6B,OA5BM,CACzB,IAAInjC,EAAU,CACViL,OAAQg4B,EACRO,WAAY,GAGXN,GAAmBt/B,EAAGU,KAAKm/B,aAC5BzjC,EAAQ0jC,OAASX,GAGrBO,GAAAA,CAAOF,EAAMl6B,EAAMlJ,GACnBsjC,IAAAA,MAAap6B,EAAM,CACfy6B,QAAS,WACLR,KAEJ7sB,MAAO,SAAUstB,GACbjC,EAAqBiC,YAiBrCT,QAKZv/B,EAAGigC,QAAU,SAAUnuB,GACnB,MAIMxM,EAAewM,EAHLlD,MAAM,KAAK+d,UAAUvlB,MAAM,EAAG,GAAGulB,UAAU5lB,KAAK,KAAK8jB,cAIhE6U,IAAAA,UAAiBp6B,GAQlBo6B,IAAAA,MAAap6B,EAAM,IAPnBo6B,GAAAA,CAAO5tB,EAAKxM,EAAM,CACdoN,MAAO,SAAUstB,GACbjC,EAAqBiC,IAEzBJ,WAAY,KAQxB5/B,EAAGkgC,KAAO,SAAU9jC,GAChB,OAAO,IAAIf,SAAQ,SAAUC,EAAS4W,GAElC,MAAMwY,GADNtuB,EAAUA,GAAW,IACEsuB,QAAU,MAC3ByV,EAAmB,QAAXzV,EACd,IAAI9pB,EACJ,GAAIxE,EAAQwE,KACR,GAA4B,iBAAjBxE,EAAQwE,KACfA,EAAOxE,EAAQwE,UAEd,GAA4B,iBAAjBxE,EAAQwE,KACpB,GAAIu/B,IAAU/jC,EAAQ2uB,aAA8C,kBAAxB3uB,EAAQ2uB,aAChDnqB,EAAOZ,EAAGU,KAAK0/B,eAAehkC,EAAQwE,UACnC,CACH,MAAMy/B,EAAa,GACnB,IAAK,IAAIn7B,KAAO9I,EAAQwE,KACpBy/B,EAAWx7B,KAAKK,EAAM,IAAM9I,EAAQwE,KAAKsE,GAAKwa,YAElD9e,EAAOy/B,EAAWt5B,KAAK,KAInC,IAAI+K,EAAM1V,EAAQ0V,IACdquB,GAASv/B,IACTkR,EAAMA,EAAM,IAAMlR,IAEA,IAAlBxE,EAAQmtB,QACRzX,IAAQA,EAAIrM,QAAQ,KAAO,EAAI,IAAM,KAAO,MAAQ66B,KAAKC,OAG7D,MAAMC,EAAe,CACjB9V,OAAQA,EACR5jB,QAAS,IAAI25B,SAEbrkC,EAAQ2uB,aAA8C,kBAAxB3uB,EAAQ2uB,YAClC3uB,EAAQ2uB,aACRyV,EAAa15B,QAAQ45B,OAAO,eAAgBtkC,EAAQ2uB,YAAc,mBAItEyV,EAAa15B,QAAQ45B,OAAO,eAAgB,oDAEjC,SAAXhW,IACA8V,EAAarC,KAAOv9B,GAGxBwR,MAAMN,EAAK0uB,GACNrlC,MAAKkM,MAAAA,IACF,GAAIohB,EAASkY,GACT,IACI,IAAIC,EACJ,OAAQxkC,EAAQgsB,cACZ,KAAK7rB,EAAAA,EAAAA,SAAAA,KAEDqkC,QAAqBnY,EAASoY,OAC9B,MACJ,KAAKtkC,EAAAA,EAAAA,SAAAA,IACDqkC,QAAqBnY,EAAS5S,OAC9B+qB,GAAe,IAAI3mB,WAAYE,gBAAgBymB,EAAc,mBAC7D,MACJ,QACIA,QAAqBnY,EAAS5S,OAGtCva,EAAQ,CAAEsF,KAAMggC,EAAc7V,YAAatC,EAAS3hB,QAAQmU,IAAI,kBAEpE,MAAOvI,GACHR,EAAOQ,QAIXR,EAAO,CACHoW,OAAQG,EAASH,OACjBwY,IAAKrY,EAASwB,WACdnY,IAAKA,OAIhBc,OAAMsD,GAAOhE,EAAOgE,SAIjC,IAAI6qB,EAAsB,GAE1B/gC,EAAGghC,kBAAoB35B,eAAgBjL,GAEnC,MACM6J,IAFN7J,EAAUA,GAAW,IACDuH,KAAO,IACTsC,MAAM,aACxB,IAAIvK,EAAOuK,EAAQA,EAAM,GAAK,GAC9B,MAAM6L,EAAMvV,EAAAA,EAAAA,IAAAA,KAAkB,kBAAoBb,EAClD,IAAIulC,EAAWF,EAAoBrlC,GACnC,GAAIulC,EACA,OAAI7kC,EAAQ8kC,KACDD,EAEJ5lC,QAAQC,QAAQ2lC,GAE3B,GAAI7kC,EAAQ8kC,KAAM,CACd,IAAI7/B,EACJ,MAAMymB,EAAM,IAAIC,eAChBD,EAAI0W,mBAAqB,SAAUp0B,GACT,GAAlB0d,EAAI2W,aAEAp9B,EADc,KAAdymB,EAAIQ,SAEiB,KAAdR,EAAIQ,QAGFR,EAAItV,gBAIzBsV,EAAIje,KAAK,MAAOiI,GAAK,GAErB,IACIgW,EAAIgB,KAAK,MACX,MAAOpW,GACLrR,GAAS,EAKb,OAHIA,IACAA,EAAS2sB,KAAKC,MAAM5sB,IAEjBA,EAGNrB,EAAGg9B,KAAKntB,gBACT7P,EAAGg9B,KAAKntB,qBAAuB,wCAAmC9E,SAGtE,MAAM6E,EAAoB,IAAI5P,EAAGg9B,KAAKntB,cAAc7P,EAAGw9B,SACjD58B,QAAagP,EAAkBuxB,UAAUrvB,EAAK1V,GAEpD,OADA2kC,EAAoBrlC,GAAQkF,EACrBA,GAGXZ,EAAGohC,YAAc,SAAUhlC,GAEvB,MAAMuH,GADNvH,EAAUA,GAAW,IACDuH,IAEd09B,EAAY,yBAEZC,EAAmB,2CAYzB,IAAIC,EACJA,EAAS,SAAUj8B,GAEf,OADAA,EAXqB,SAAUA,GAC/B,IAAIW,EAAQ,4DAA4D0I,KAAKrJ,GAC7E,OAAIW,GAA0B,IAAjBA,EAAMnG,OACRuhC,EAAYp7B,EAAM,GAGtBX,EAKAk8B,CAAiBl8B,GACjBm8B,EAAAA,EAAAA,KAAWn8B,IAEtB,MAAM83B,EAAa,SAAUhF,GACzB,MAAsB,mBAARA,GAEZsJ,EAAU,SAAUhmC,EAAMimC,EAAKr8B,GAEjC,MAAMs8B,EAzBS,QAyBelmC,EACxBmmC,EAAUR,EAAY3lC,EACtBomC,EAzBS,0BAyBepmC,EACxBqmC,EAAiBT,EAAmB5lC,EACpCsmC,EAzBe,yCAyBqBtmC,EAC1C,IAAIumC,EACe,iBAARN,GACPM,EAAiBjiC,EAAGU,KAAKwhC,OAAO,GAAIP,GACpCA,EAAM3hC,EAAGU,KAAKwhC,OAAO,GAAIP,GACrBM,EAAeE,aACRF,EAAeE,MAGN,iBAARR,IACZM,EAAiBN,EAAI37B,QAAQ,YAAa,KAE9Cy7B,EAAAA,EAAAA,KAAWG,EAAUD,GACrBF,EAAAA,EAAAA,KAAWI,EAASF,GACpBF,EAAAA,EAAAA,KAAWK,EAAUH,GAErBF,EAAAA,EAAAA,KAAWM,EAAgBE,GAC3BR,EAAAA,EAAAA,KAAWO,EAAgBL,GACW,IAAlCh+B,EAAI8B,QAAQ67B,KAEZG,EAAAA,EAAAA,KAAW99B,EAAKs+B,GAChBV,EAAO59B,GAAK2B,KAAOA,GAEnB4I,OAAOk0B,IAAMA,GAAGC,OAASjmC,EAAQ8T,QAEjCkyB,GAAGC,KAAKZ,MAAMa,SAASb,EAAAA,GAE3BF,EAAOK,GAAUt8B,KAAOA,EACxBi8B,EAAOQ,GAAgBz8B,KAAOA,EAC9Bi8B,EAAOS,GAAgB18B,KAAOA,GAWlC,IAAIpB,EAAMP,EAAIwsB,YAAY,KACtBjsB,EAAM,IACNA,EAAMP,EAAIwsB,YAAY,MAEtBjsB,EAAM,IACNA,EAAMP,EAAIwsB,YAAY,MAE1B,IAAIz0B,EAAOiI,EAAI0f,OAAOnf,EAAM,GACxBy9B,EAAMJ,EAAO59B,GACjB,GAAIg+B,EACAD,EAAQhmC,EAAMimC,EAAKvlC,EAAQkJ,MACvB83B,EAAWhhC,EAAQ44B,WACnB54B,EAAQ44B,gBAIZ,GAAI54B,EAAQulC,IACRD,EAAQhmC,EAAMU,EAAQulC,IAAKvlC,EAAQkJ,MAC/B83B,EAAWhhC,EAAQ44B,WACnB54B,EAAQ44B,eAGX,CACD,MAAMuN,EAA0B,SAAU3hC,IAhC1B,SAAUA,GAC9B,MAAMS,EAAST,GAAwB,OAAhBA,EAAK0nB,QAA0C,IAAvB1nB,EAAK4hC,cACpD,GAAInhC,EAAQ,CACR,IAAIsgC,EAAM/gC,EAAK6hC,QAAQ,GACvBf,EAAQC,EAAIjmC,KAAMimC,EAAIF,MAAOE,EAAIr8B,MAErC,OAAOjE,GA2BKqhC,CAAgB9hC,IAASw8B,EAAWhhC,EAAQ44B,WAC5C54B,EAAQ44B,YAGhB,GAAI54B,EAAQ8kC,KAAM,CAEdqB,EADaviC,EAAGghC,kBAAkB5kC,SAIlC4D,EAAGghC,kBAAkB5kC,GAASjB,KAAKonC,GAAyB3vB,OAAMpX,GAAK2I,QAAQuO,MAAMlX,OAMrGwE,EAAG2iC,QAAU,SAAUC,EAAWC,GAC9BD,EAAU3lC,UAAYrB,OAAOknC,OAAOD,EAAW5lC,WAC/C2lC,EAAU3lC,UAAUf,YAAc0mC,EAClCA,EAAUG,OAASF,EAAW5lC,WAGlC+C,EAAGgjC,IAAM,SAAUC,KAAeC,GAC9BtnC,OAAOmD,OAAOkkC,EAAWhmC,aAAcimC,IAG3C,MAAMC,EAAO,IAAIzsB,IACjB1W,EAAGojC,OAAS,SAAUhnC,GAClB,MAAMqE,EAAOrE,GAAW,GAClBinC,EAAS5iC,EAAK4iC,QAAU,GAC9B,IAAI/jC,EAAQ6jC,EAAKloB,IAAIooB,GAChB/jC,IACDA,EAAQ,GAEZ,IAAI+B,EAASgiC,EAAS/jC,EAEtB,OADA6jC,EAAK5nB,IAAI8nB,EAAQ/jC,EAAQ,GACrBmB,EAAK6iC,SAAW7iC,EAAK6iC,QAAQ7O,SAASpzB,GAC/BrB,EAAGojC,OAAOhnC,GAEdiF,GAGXrB,EAAGujC,YAAc,SAAUxsB,EAAO3a,GAC9B,MACMinC,GADOjnC,GAAW,IACJinC,QAAU,GAC9B,IAAIG,EAAeL,EAAKloB,IAAIooB,GAI5B,OAHKG,IACDA,EAAe,GAEfzsB,EAAQysB,GACRL,EAAK5nB,IAAI8nB,EAAQtsB,GACVA,GAEJysB,GAGX,MAAMC,EAAW,CAAC,GAAI,WAAY,QAAS,MAAO,QAE5CC,EAAY,2BAClB,IAAIC,EACAC,EACAC,EACJ,MAAMC,EAAkB,CACpBH,MAAO,WACH,QAAc9iC,IAAV8iC,EAAqB,CACrB,GAAK,iBAAkBz1B,QAAWA,OAAO61B,eAAiB36B,oBAAoB8E,OAAO61B,cAEjF,OADAJ,GAAQ,GACD,EAEX,MAAMK,EAAQP,EACT1oC,KAAI,SAAUsoC,GAAU,MAAO,IAAMA,EAAS,oBAC9Ct8B,OACL48B,EAAQM,WAAWD,GAAOhe,QAE9B,OAAO2d,GAEXC,eAAgB,WACZ,QAAuB/iC,IAAnB+iC,EAA8B,CAC9B,MAAM3/B,EAAMmF,SAASC,cAAc,SACnCpF,EAAI4lB,aAAa,OAAQ,UACzB+Z,EAA8B,SAAb3/B,EAAI2C,MAAmB,UAAW3C,KAE/CA,EAAI3E,MAzBD,MA0BHskC,EA1BG,QA0Bc3/B,EAAI3E,OAG7B,OAAOskC,GAEXC,UAAW,WACP,QAAkBhjC,IAAdgjC,EACA,IAEI,MAAM/xB,EAAM,IAAIuD,IAAIquB,GACpBG,EAAY/xB,EAAIxD,OAASo1B,EAC3B,MAAOloC,GACLqoC,GAAY,EAGpB,OAAOA,IAGf7jC,EAAG8jC,gBAAkBA,EAErB,MAAMI,EAAS,MACf,SAASl2B,EAAIm2B,GACT,OAAOA,EAEX,SAASC,EAAQD,GACb,OAAOvV,mBAAmBuV,EAAEn+B,QAAQk+B,EAAQ,MAGhDlkC,EAAGqkC,OAAS,SAAUn/B,EAAK5F,EAAOlD,GAG9B,GAAIqd,UAAU3Z,OAAS,KAAO,SAAS4+B,KAAK9iC,OAAOqB,UAAUyiB,SAASviB,KAAKmC,KAAqB,OAAVA,GAAiB,CAOnG,GANAlD,EAAU4D,EAAGU,KAAKwhC,OAAO,GAAI9lC,GAEf,OAAVkD,IACAlD,EAAQkoC,SAAW,GAGQ,iBAApBloC,EAAQkoC,QAAsB,CACrC,IAAIC,EAAOnoC,EAAQkoC,QAASE,EAAIpoC,EAAQkoC,QAAU,IAAIhE,KACtDkE,EAAEC,QAAQD,EAAEE,UAAYH,GAK5B,OAFAjlC,EAAQyO,OAAOzO,GAEP8J,SAASi7B,OAAS,CACtBnV,mBAAmBhqB,GAAM,IAAK9I,EAAQ4R,IAAM1O,EAAQ4vB,mBAAmB5vB,GACvElD,EAAQkoC,QAAU,YAAcloC,EAAQkoC,QAAQK,cAAgB,GAChEvoC,EAAQu0B,KAAO,SAAWv0B,EAAQu0B,KAAO,GACzCv0B,EAAQwoC,OAAS,WAAaxoC,EAAQwoC,OAAS,GAC/CxoC,EAAQyoC,OAAS,UAAY,IAC/B99B,KAAK,IAOX,IAFA,IAEgBwjB,EAFZua,GADJ1oC,EAAUkD,GAAS,IACE0O,IAAMA,EAAMo2B,EAC7BW,EAAU37B,SAASi7B,OAAOz1B,MAAM,MAC3BjQ,EAAI,EAAW4rB,EAAQwa,EAAQpmC,IAAMomC,EAAQpmC,GAAGiQ,MAAM,KAAOjQ,IAClE,GAAImmC,EAAOva,EAAMya,WAAa9/B,EAC1B,OAAO4/B,EAAOva,EAAMxjB,KAAK,MAGjC,OAAO,MAGX,W,oFCvqBA/G,EAAAA,EAAAA,KAAUU,EAAAA,EA0DV,MAAMukC,GAEEC,EAAe,GAWZ,CACHC,WAAY,KACZzH,MAAO,GACP0H,wBAAyB,GAEzBzhC,IAAK,aACL0hC,OAAQ,aACRC,OAAQ,YACRC,cAAe,CAAC,WAAY,YAAa,YAAa,aACtDC,WAAW,EACXC,gBAAiB,CAAC,OAAQ,QAAS,OAAQ,SAC3CliB,YAAa,CAAC,KAAM,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,KAC/DmiB,kBAAmB,GACnBC,aAAc,GACdC,gBAAgB,EAChBC,YAAa,+DACbC,iBAAiB,EACjBC,yBAAyB,EACzBC,sBAAsB,EACtBC,cAAe,GAEfpgC,OAAQ,QAERqgC,KAAM3pC,EAAAA,EAAAA,KAAAA,QAEN4pC,WAAY,GACZC,eAAgB,GAChBC,mBAAoB,IAEpBC,cAAe,IAEfC,gBAAiB,KAEjB3a,oBAAqB,CACjB,CACI/vB,GAAIU,EAAAA,EAAAA,MAAAA,cACJyK,MAAO,YACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,oBACXhC,WAAY,WACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,4BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,iBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,mBACJyK,MAAO,iBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,oBACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,sBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,iBACJyK,MAAO,6BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,6BACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,+BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,oBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,mBACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,YACXhC,WAAY,eACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,8BACJyK,MAAO,oCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,gBACXhC,WAAY,uBACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,uCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,iCACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,YACJyK,MAAO,0BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,oBACXhC,WAAY,kBACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,wBAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,eACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,mCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACL8J,UAAW,gBACXhC,WAAY,0BACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,kCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,wBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,eACJyK,MAAO,WACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,+BACZnK,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,6BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,gBACJyK,MAAO,UACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,wBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,yBACJyK,MAAO,qBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,gBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,+BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,iBACJyK,MAAO,YACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,+BACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,4BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,sBACJyK,MAAO,iBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,mCACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,oBACJyK,MAAO,6BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,6BACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,+BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,qBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,iCACJyK,MAAO,oCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,6BACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,uCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,eACJyK,MAAO,+BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,YACZnK,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,wBAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,wBACJyK,MAAO,mCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,6BACL8H,WAAY,iBACZnK,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,kCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,kBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,aACJqK,KAAMrK,EAAAA,EAAAA,UAAAA,KACNyK,MAAO,mCACP8K,IAAK,gCACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,MACZgC,UAAW,aACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,gBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,eACJyK,MAAO,0BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,6BACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,cACZgC,UAAW,aACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,kBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,oBACJyK,MAAO,+BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,6BACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,eACZgC,UAAW,uBACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,qCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,uBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,cACJyK,MAAO,wBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,+BACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,UACZgC,UAAW,aACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,+BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,kBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,4BACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,wBACZgC,UAAW,aACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,oCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,qBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,aACJyK,MAAO,gCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,kCACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,qBACZgC,UAAW,uBACXnM,OAAQ,YACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,gBACfiqC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,kBACJyK,MAAO,0BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,oCACL8H,WAAY,cACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,uBACJyK,MAAO,+BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,oCACL8H,WAAY,mBACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,qCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,mCACL8H,WAAY,wBACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,oCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,gBACJyK,MAAO,mCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,uCACL8H,WAAY,kBACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,gBACJyK,MAAO,gCACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,iCACL8H,WAAY,kBACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,8BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAgBtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,eACJyK,MAAO,0BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,0CACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,oCACZgC,UAAW,KACXnM,OAAQ,YACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,kBACfysB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,cACJyK,MAAO,wBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,0CACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,yCACZgC,UAAW,KACXnM,OAAQ,YACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,iBACfysB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,kBACJyK,MAAO,yBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK,0CACLmV,SAAU1qB,EAAAA,EAAAA,aAAAA,IACVqd,WAAY,2BACZgC,UAAW,KACXnM,OAAQ,aACRoS,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5Bqe,cAAe9hB,EAAAA,EAAAA,MAAAA,qBACfysB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAYtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,kBACJyK,MAAO,0BACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,2CACL8H,WAAY,kCACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5BgpB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,iBACJyK,MAAO,wBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,2CACL8H,WAAY,yCACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5BgpB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,qBACJyK,MAAO,yBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAK,2CACL8H,WAAY,2BACZiI,UAAW7hB,EAAAA,EAAAA,YAAiB,iCAC5BgpB,qBAAqB,EACrBwd,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,IACJyK,MAAO,MACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,YACtB4b,UAAW,uBACXhC,WAAY,MACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,wBAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,KAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,YACJyK,MAAO,cACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,oBACtB4b,UAAW,uBACXhC,WAAY,cACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,KAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,cACJyK,MAAO,gBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,cACtB4b,UAAW,uBACXhC,WAAY,UACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,kCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,YACJyK,MAAO,cACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,cACtB4b,UAAW,uBACXhC,WAAY,YACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,gCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,WACJyK,MAAO,aACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,cACtB4b,UAAW,uBACXhC,WAAY,WACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,+BAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,eAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,eACJyK,MAAO,iBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,eACtB4b,UAAW,uBACXhC,WAAY,UACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,YACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,mCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,iBACJyK,MAAO,mBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,KACNuV,IAAK9R,EAAAA,EAAAA,YAAiB,eACtB4b,UAAW,uBACXhC,WAAY,YACZqN,SAAU1qB,EAAAA,EAAAA,aAAAA,QACVkT,OAAQ,aACRmS,WAAW,EACXlS,UAAU,EACVmS,UAAW7hB,EAAAA,EAAAA,YAAiB,qCAC5BwmC,iBAAkBjqC,EAAAA,EAAAA,MAAAA,gBAEtB,CACIV,GAAIU,EAAAA,EAAAA,MAAAA,MACJyK,MAAO,iBACPJ,KAAMrK,EAAAA,EAAAA,UAAAA,SAIdkqC,WAAY,CACRlqC,EAAAA,EAAAA,MAAAA,cACAA,EAAAA,EAAAA,MAAAA,iBACAA,EAAAA,EAAAA,MAAAA,eACAA,EAAAA,EAAAA,MAAAA,aAGJmqC,iBAAkBnqC,EAAAA,EAAAA,MAAAA,cAElBoqC,WAAY,GAoMZC,SAAU,CACNC,kBAAkB,EAClBC,QAAQ,EACRC,UAAU,EACVC,OAAO,EACPC,eAAe,EACfC,aAAa,EACbC,iBAAiB,EACjBtB,aAAa,EACbuB,KAAK,EACLC,kBAAkB,EAClBC,cAAc,EACdzgC,aAAa,EACbib,QAAQ,EACRrgB,OAAO,EACP8rB,OAAQ,CACJzb,IAAK,mCACLy1B,mBAAoB,CAChB1gC,YAAa,GACb2gC,aAAc,GACdC,MAAO,GACPC,OAAQ,GACRC,OAAQ,GACRC,UAAW,KAGnBC,SAAS,EACTC,YAAY,EACZC,OAAO,EACPC,UAAU,EACVC,YAAa,CACTrO,QAAQ,EACRsO,sBAAsB,GAE1BC,cAAc,GAGlBC,OAAQ,KA0DRvlC,OAAQ,CACJivB,MAAO,CACHuW,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,EACfprC,OAAQ,EACRqrC,kBAAmB,EACnBC,kBAAmB,UACnBC,YAAa,CAAC,GAAI,IAClBC,UAAW,UACXC,SAAU,IAEd5Q,OAAQ,CACJ6Q,QAAS,CACLxsC,EAAAA,EAAAA,QAAAA,OAAwB,EACxBA,EAAAA,EAAAA,QAAAA,OAAwB,EACxBA,EAAAA,EAAAA,QAAAA,OAAwB,EACxBA,EAAAA,EAAAA,QAAAA,OAAwB,EACxBA,EAAAA,EAAAA,QAAAA,OAAwB,GAE5B8R,OAAQ,CAAC,GAAI,GACb0gB,MAAO,GACPC,OAAQ,GACR0Z,kBAAmB,EACnBC,kBAAmB,UACnBC,YAAa,CAAC,GAAI,IAClBC,UAAW,UACXC,SAAU,IAEd9W,KAAM,CACFuW,YAAa,UACbC,YAAa,EACbC,cAAe,EACfC,kBAAmB,EACnBC,kBAAmB,UACnBE,UAAW,UACXC,SAAU,IAEdh8B,QAAS,CACLy7B,YAAa,UACbC,YAAa,EACbC,cAAe,EACfJ,UAAW,UACXC,YAAa,GACbI,kBAAmB,EACnBC,kBAAmB,UACnBE,UAAW,UACXC,SAAU,IAEdE,MAAO,CACHT,YAAa,UACbC,YAAa,EACbH,UAAW,WAEf16B,QAAS,CACLmkB,MAAO,CACHuW,UAAW,UACXC,YAAa,GACbjrC,OArnCO,SAAU6C,GAC7B,IAAI6W,EAAQ7W,EAAQqL,SAASzL,OACzBuB,EAAS6jC,EAAanuB,GAK1B,OAJK1V,IACDA,EAAS,EAAIrD,KAAKirC,MAAyB,EAAnBjrC,KAAKkrC,KAAKnyB,IAClCmuB,EAAanuB,GAAS1V,GAEnBA,GA+mCK2nC,MAAO,qBACPH,UAAW,UACXC,SAAU,IAGlBn9B,UAAW,CACPmmB,MAAO,CACHuW,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbnrC,OAAQ,EACRqrC,kBAAmB,EACnBC,kBAAmB,UACnBC,YAAa,CAAC,GAAI,IAClBC,UAAW,UACXC,SAAU,GACVK,OAAO,GAEXnX,KAAM,CACFuW,YAAa,UACbC,YAAa,EACbE,kBAAmB,EACnBC,kBAAmB,UACnBE,UAAW,UACXC,SAAU,GACVK,OAAQ,GAEZr8B,QAAS,CACLy7B,YAAa,UACbC,YAAa,EACbH,UAAW,UACXC,YAAa,GACbI,kBAAmB,EACnBC,kBAAmB,UACnBE,UAAW,UACXC,SAAU,GACVK,OAAQ,IAGhBC,SAAU,CACNtX,MAAO,CACHuW,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbnrC,OAAQ,EACRqrC,kBAAmB,EACnBC,kBAAmB,UACnBC,YAAa,CAAC,GAAI,IAClBC,UAAW,UACXC,SAAU,GACVK,OAAQ,OA7qCV,IAEVjE,EAqvCR,MAEA,EAFYllC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIilC,I,4CChsCrC,MAAM1oC,EAAS,CAEfA,KAAc,KACdA,WAAoB,QACpBA,WAAoB,aACpBA,IAAa,MACbA,kBAA2B,qBAC3BA,2BAAoC,IACpCA,wBAAiC,IACjCA,eAAwB,KACxBA,gBAAyB,EACzBA,iBAA0B,EAC1BA,iBAA0B,MAC1BA,wBAAiC,6BAEjCA,IAAa,CACT8sC,YAAa,uDACbC,KAAM,qBAEV,GAA8B,oBAAnBzM,eACPtgC,EAAOuV,IAAIy3B,aAAe1M,eAAiB,yBAE1C,CAED,MACMzuB,EADShF,SAAS0zB,cACLzC,aAAa,OAC1BuC,EAAcxuB,EAAIiV,OAAO,EAAGjV,EAAI+hB,YAAY,KAAO,GACzD5zB,EAAOuV,IAAIy3B,aAAe3M,EAAc,qBAE5CrgC,EAAOwsC,QAAU,CACbS,IAAK,SACLC,MAAO,WACPC,OAAQ,YACRC,QAAS,aACTC,OAAQ,YACRC,UAAW,eACXC,eAAgB,oBAChBC,gBAAiB,qBACjBC,QAAS,aACTC,SAAU,cACVC,OAAQ,YACRC,YAAa,iBACb7P,QAAS,aACT8P,UAAW,eACX3tB,YAAa,iBACb4tB,KAAM,UACN/zB,QAAS,aACTg0B,cAAe,mBACfC,KAAM,cACNC,QAAS,iBACTC,MAAO,eACPC,OAAQ,QACRC,MAAO,WACPC,gBAAiB,qBACjBC,WAAY,gBACZC,YAAa,iBACbC,YAAa,iBACbC,YAAa,iBACbC,aAAc,kBACdC,mBAAoB,iBACpBC,cAAe,mBACfC,UAAW,eACXC,YAAa,iBAEjB9uC,EAAO+uC,QAAU,CACbf,KAAM,OACNC,QAAS,UACTC,MAAO,SAEXluC,EAAOgvC,aAAe,CAClBZ,MAAO,QACPa,QAAS,UACTC,MAAO,SAEXlvC,EAAO+/B,MAAQ,CAKXoP,QAAS,aACTC,SAAU,cACVC,UAAW,eACXC,eAAgB,oBAChBC,SAAU,cACVC,YAAa,iBACbC,WAAY,gBACZC,kBAAmB,uBACnBC,YAAa,iBACbC,WAAY,gBACZC,sBAAuB,2BACvBC,gBAAiB,qBACjBC,aAAc,kBACdC,OAAQ,YACRC,WAAY,gBACZC,KAAM,UACNC,mBAAoB,wBACpBC,aAAc,kBACdC,aAAc,kBACdC,WAAY,gBACZC,kBAAmB,uBACnBC,YAAa,iBACbC,oBAAqB,yBACrBC,cAAe,mBACfC,cAAe,mBACfC,eAAgB,oBAChBC,oBAAqB,yBACrBC,sBAAuB,2BACvBC,mBAAoB,wBACpBC,SAAU,cACVC,eAAgB,oBAChBC,SAAU,cACVC,cAAe,mBACfC,WAAY,gBACZC,gBAAiB,qBACjBC,kBAAmB,uBACnBC,oBAAqB,yBACrBC,cAAe,mBACfC,iBAAkB,sBAClBC,mBAAoB,wBACpBC,iBAAkB,sBAClBC,WAAY,gBACZC,gBAAiB,qBACjBC,aAAc,kBACdC,aAAc,kBACdC,eAAgB,oBAChBC,YAAa,iBACbC,WAAY,gBACZC,kBAAmB,uBACnBC,YAAa,iBACbC,cAAe,mBACfC,iBAAkB,sBAClBC,MAAO,QACPC,QAAS,UACTC,UAAW,YACXC,WAAY,aACZC,aAAc,kBACdC,YAAa,iBACbC,qBAAsB,0BACtBC,OAAQ,YACRC,iBAAkB,sBAClBC,WAAY,gBACZC,aAAc,kBACdC,mBAAoB,wBACpBC,sBAAuB,2BACvBC,wBAAyB,6BACzBC,MAAO,WACPC,iBAAkB,sBAClBC,cAAe,oBAGnBvzC,EAAO0E,MAAQ,CACX8uC,iBAAkB,WAClBC,cAAe,WACfC,mBAAoB,gBACpBC,eAAgB,WAChBC,YAAa,cACbC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,qBAAsB,eACtBC,8BAA+B,wBAC/BC,qBAAsB,uBACtBC,iBAAkB,oBAClBC,sBAAuB,yBACvBC,oBAAqB,oBACrBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,wBAAyB,wBACzBC,iCAAkC,iCAClCC,wBAAyB,gCACzBC,eAAgB,uBAChBC,gBAAiB,aACjBC,yBAA0B,YAE1BC,aAAc,aACdC,eAAgB,WAChBC,oBAAqB,gBACrBC,cAAe,UACfC,kBAAmB,WACnBC,aAAc,YACdC,gBAAiB,iBACjBC,kBAAmB,eACnBC,uBAAwB,oBACxBC,qBAAsB,eACtBC,gBAAiB,gBASjBC,eAAgB,cAChBC,cAAe,mBACfC,kBAAmB,cAQnBC,kBAAmB,kBACnBC,iBAAkB,uBAClBC,qBAAsB,kBAEtBC,IAAK,MACLC,YAAa,cAEbC,cAAe,gBACfC,YAAa,cACbC,WAAY,aAEZC,eAAgB,iBAChBC,iBAAkB,mBAElBC,MAAO,WAEX/2C,EAAOsZ,KAAO,CACV09B,UAAW,kBACXC,UAAW,uBAGfj3C,EAAOk3C,UAAY,CACfC,IAAK,MACLC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,QAAS,UACTC,MAAO,SAGX33C,EAAOS,KAAO,CACVysC,MAAO,QACP0K,WAAY,aACZC,SAAU,WACVC,QAAS,UACTC,cAAe,gBACfC,aAAc,eACdC,OAAQ,SACRC,UAAW,aAGfl4C,EAAOm4C,WAAa,CAChBC,UAAW,YACXC,YAAa,cACbC,aAAc,eACdC,QAAS,UACTC,SAAU,WACVC,OAAQ,SACRC,OAAQ,SACRC,MAAO,QACPC,aAAc,eACdC,KAAM,OACNC,cAAe,gBACfC,UAAW,YACXC,sBAAuB,yBAE3Bh5C,EAAOi5C,cAAgB,CACnBX,aAAct4C,EAAOm4C,WAAWG,aAChCC,QAASv4C,EAAOm4C,WAAWI,QAC3BI,MAAO34C,EAAOm4C,WAAWQ,MACzBC,aAAc54C,EAAOm4C,WAAWS,aAChCM,QAAS,WAEbl5C,EAAOm5C,WAAa,CAChBC,SAAU,KACVC,aAAc,KACdC,UAAW,IACXC,aAAc,IACdC,mBAAoB,KACpBC,sBAAuB,KACvBC,KAAM,MAEV15C,EAAO25C,gBAAkB,CACrBC,IAAK,MACLC,GAAI,MAER75C,EAAO85C,aAAe,CAClBC,IAAK,MACLC,QAAS,WAGbh6C,EAAO6zB,SAAW,CACdomB,IAAK,YACLC,KAAM,aACNzoB,KAAM,mBACNimB,QAAS,2BACTH,IAAK,uCACL4C,IAAK,mCACL1C,IAAK,sBACLD,IAAK,sBACL4C,IAAK,kBACLC,WAAY,iCACZC,UAAW,oBACXC,IAAK,qBAGTv6C,EAAOkT,OAAS,CACZue,KAAM,OACN8lB,IAAK,MACL4C,IAAK,MACL1C,IAAK,MACL+C,KAAM,OACNC,KAAM,OACNC,MAAO,QACPhD,QAAS,UACTiD,SAAU,WACVnD,IAAK,MACLoD,IAAK,MACLC,IAAK,MACLP,UAAW,MACXC,IAAK,MACLF,WAAY,QAIhBr6C,EAAO86C,UAAY,CACfC,yBAA0B,yBAC1BC,qBAAsB,qBACtBC,UAAW,WACXC,gBAAiB,gBACjBC,oBAAqB,oBAErBC,iBAAkB,iBAClBC,gBAAiB,kBACjBC,cAAe,gBACfC,YAAa,cAGjBv7C,EAAOw7C,WAAa,CAChBC,YAAa,EACbC,0BAA2B,EAC3BC,YAAa,EACbvO,QAAS,GAGbptC,EAAO2pC,KAAO,CACV5L,QAAS,EACToQ,OAAQ,EACRyN,SAAU,GAGd57C,EAAO67C,MAAQ,CACXC,QAAS,UACTC,OAAQ,KAGZ/7C,EAAOmtC,OAAS,SAEhBntC,EAAOg8C,cAAgB,CACnB3I,MAAO,QACP4I,cAAe,gBAGnBj8C,EAAOk8C,cAAgB,CACnBC,sBAAuB,wBAG3B,W,2GCneA14C,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAWiM,EAAAA,EACrBjM,EAAAA,EAAAA,KAAU24C,EAAAA,EAWV34C,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BA,EAAAA,EAAAA,QAAa,WACT,MAAMxD,EAAOC,KACbm8C,EAAAA,EAAAA,KAAiBp8C,GAEjBA,EAAKzB,IAAM,KACXyB,EAAKq8C,UAAW,EAChBr8C,EAAKs8C,YAAa,EAClBt8C,EAAKu8C,MAAQv8C,EAAKw8C,eAElB,IAAItxC,EAAM+R,UAAU3Z,OAEpBtD,EAAKJ,QAAU4D,EAAAA,EAAAA,KAAAA,OAAe,GAAI0H,EAAM,EAAI+R,UAAU,GAAKA,UAAU,IACrEjd,EAAKX,GAAKW,EAAKJ,QAAQP,IAAMmE,EAAAA,EAAAA,OAAU,CACnCqjC,OAAQ7mC,EAAKu8C,MAAM11B,OAAOrjB,EAAAA,EAAAA,QAAAA,UAAAA,MAAAA,OAAoC,GAAK,MAEvExD,EAAK2M,IAAMnJ,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ+M,IAAM3M,EAAKJ,QAAQ+M,IAAMsQ,UAAU,IAC1Ejd,EAAK2M,IAAIqxB,UAAUnjB,IAAIrX,EAAAA,EAAAA,QAAAA,UAAAA,MAA4BxD,EAAKu8C,OAExDv8C,EAAKsJ,SAAWtJ,EAAKJ,QAAQ0J,UAAYtJ,EAAKsJ,SAC9CtJ,EAAKy8C,cAAe,GAGxBj5C,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,QAAY44C,EAAAA,GAEvB,WACI,MAAMM,EAAWl5C,EAAAA,EAAAA,QAAAA,UAEjBk5C,EAASH,MAAQ,SAEjBG,EAASpzC,cAAW,EAEpBozC,EAASC,KAAO,WACZ18C,KAAK0M,IAAI/G,MAAMg3C,QAAU,IAG7BF,EAASn3C,KAAO,WACCtF,KACR0M,IAAI/G,MAAMg3C,QAAU,OADZ38C,KAER48C,eAGTH,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,MAAM,WACnDh9C,EAAKi9C,sBACmB,mBAAbzkB,GACPA,SAKZkkB,EAASQ,cAAgBryC,mBAIzB6xC,EAASF,aAAe,WACpB,OAAOv8C,KAAKs8C,OAGhBG,EAASK,qBAAuB,SAAUI,GACtC,MAAMn9C,EAAOC,KAIb,OAHKD,EAAKo9C,eACNp9C,EAAKo9C,aAAeD,GAEjBA,GAGXT,EAASM,WAAanyC,eAAgBzG,EAAMo0B,GACxC,MAAMx4B,EAAOC,KAMb,IAAIqJ,EALAtJ,EAAKzB,KACLyB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,oBAAkC,CAAEs9C,WAAYj5C,IAEjEpE,EAAK2M,IAAIqxB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBC,EAAKs8C,YAGnDt8C,EAAKsJ,gBACAtJ,EAAKk9C,gBAEc,iBAAlBl9C,EAAKsJ,UAA0BtJ,EAAKsJ,SAASg0C,UAIpDh0C,EAAWtJ,EAAKsJ,SAChBtJ,EAAKsJ,SAAW,GAChBtJ,EAAKsJ,SAAStJ,EAAKu8C,OAASjzC,GAL5BA,EAAWtJ,EAAKsJ,SAAStJ,EAAKu8C,OAQlC,MAAM5yC,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAOn4C,GACpDpE,EAAK2M,IAAIS,UAAYzD,EACjB3J,EAAKzB,KACLyB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAEbyD,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,KA4CRkkB,EAASa,gBAAkB1yC,eAAgB2yC,EAAYp5C,EAAMo0B,GACzD,MAAMx4B,EAAOC,KAEP8iC,EAAQ,SAAUz5B,GACpB,QAAwB,IAAbA,EACP,MAAO,GAEX,MAAMK,EAAOL,EAASlF,GAItB,OAHIZ,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAAS7uB,GAENA,GAGN3J,EAAKsJ,gBACAtJ,EAAKk9C,gBAEf,MAAM5zC,EAAWtJ,EAAKsJ,SAASk0C,GAC/B,MAAwB,mBAAbl0C,SA1DUuB,eAAgB4yC,EAAW79C,GAChDA,EAAUA,GAAW,GAErB,MAAM89C,EAAmB,GACzB,IAAK,IAAIh1C,KAAO+0C,EAAW,CACvB,MAAME,EAAej1C,EACrB,IAAIY,EAAWm0C,EAAUE,GACD,iBAAbr0C,EACPo0C,EAAiBr1C,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKC,GAC7Cnb,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKhM,EACL4kB,OAAQ,MACRtC,aAAc,SAEbjtB,MAAK,SAAUstB,GACZwxB,EAAUE,GAAgBr0C,EAAW6yC,EAAAA,EAAAA,QAAmBlwB,EAAS7nB,MACjEsa,EAAIpV,MAEP8M,OAAM,SAAUsD,GACb/R,QAAQC,IAAI,4BAA8B8R,GAC1CiF,EAAIjF,UAKQ,iBAAbpQ,IACPm0C,EAAU/0C,GAAOY,EAAW6yC,EAAAA,EAAAA,SAAoB7yC,IAM5D,IAAK,IAAIs0C,WADH/+C,QAAQwiB,IAAIq8B,GACDD,EACHA,EAAUG,IACXA,IAASh+C,EAAQm8B,WACtBogB,EAAAA,EAAAA,gBAA2ByB,EAAMH,EAAUG,IAwBzCC,CAAiB79C,EAAKsJ,SAAU,CAAED,OAAQrJ,EAAKzB,KAAOyB,EAAKzB,IAAIqB,QAAQyJ,OAAQ0yB,UAAW/7B,EAAKu8C,QAC9FxZ,EAAM/iC,EAAKsJ,SAASk0C,KAGpBza,EAAMz5B,IAIrBozC,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAMb,OALAD,EAAKzB,IAAMA,QACLyB,EAAK88C,SACP98C,EAAKJ,QAAQw9B,QACbp9B,EAAK89C,WAEF99C,GAGX08C,EAASoB,SAAW,WAChB,MAAM99C,EAAOC,KACTD,EAAKzB,KAAOyB,EAAKzB,IAAIw/C,eAAiB/9C,EAAKzB,IAAIw/C,gBAAkB/9C,IACjEA,EAAKzB,IAAIy/C,sBAAwBh+C,EAAKzB,IAAIw/C,cAC1C/9C,EAAKzB,IAAIw/C,cAAcE,cAE3Bj+C,EAAKq8C,UAAW,EACZr8C,EAAKzB,MACLyB,EAAKzB,IAAIw/C,cAAgB/9C,EACzBA,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,IAC1DA,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,MAI9D08C,EAASuB,WAAa,SAAUC,GACH,IAArBjhC,UAAU3Z,SACV46C,GAAY,GAGhB,MAAMl+C,EAAOC,KAEb,GADAD,EAAKq8C,UAAW,EACZr8C,EAAKzB,IAAK,CAGV,GAFAyB,EAAKzB,IAAIw/C,cAAgB,MAEpBG,EAAW,CAGZ,IAAIC,EAAcn+C,EAAKzB,IAAI6/C,oBACvBD,IAAgBn+C,GACXA,EAAKzB,IAAIy/C,wBAA0Bh+C,EADlBm+C,EAAc,KAG9BA,IACNA,EAAcn+C,EAAKzB,IAAIy/C,uBAGvBG,GACAA,EAAYL,WAEpB99C,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAEgL,QAAS/K,IAC5DA,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAEgL,QAAS/K,MAIhE08C,EAAS2B,OAAS,WACd,MAAMr+C,EAAOC,KACbD,EAAKs8C,YAAa,EACdt8C,EAAK2M,MACL3M,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,iBACnBC,EAAK2M,IAAI2xC,QAAQC,WAExBv+C,EAAKw+C,kBAAoBx+C,EAAKw+C,iBAAiBC,iBAC/Cz+C,EAAKw+C,iBAAiBC,gBAAgBz+C,IAI9C08C,EAASgC,QAAU,SAAU9+C,GACzB,MAAMI,EAAOC,KAGb,GAFAL,EAAUA,GAAW,GACrBI,EAAKs8C,YAAa,EACdt8C,EAAK2M,IAAK,CACV3M,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACvB,IAAI6d,EAAU5d,EAAK4hC,gBAAgB,mBAC/BhiC,EAAQ0Z,SACRsE,EAAW,GAAEA,OAAahe,EAAQ0Z,UAEtCtZ,EAAK2M,IAAI2xC,QAAQC,UAAY3gC,EAE7B5d,EAAKw+C,kBAAoBx+C,EAAKw+C,iBAAiBG,kBAC/C3+C,EAAKw+C,iBAAiBG,iBAAiB3+C,IAI/C08C,EAASkC,UAAY,WACjB,MAAM5+C,EAAOC,KACTD,EAAK2M,KACL3M,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aAEvBC,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CAAEgL,QAAS/K,KAInE08C,EAASG,YAAc,WACnB,MAAM78C,EAAOC,KACTD,EAAK2M,KACL3M,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,aAE1BC,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAAiC,CAAEgL,QAAS/K,KAIrE08C,EAASmC,cAAgB,WACrB,MAAM7+C,EAAOC,KACb,QAAID,EAAK2M,KACE3M,EAAK2M,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,cAyB3C28C,EAASpxC,cAAgB,WACrB,MAAMtL,EAAOC,KACb,OAAOD,EAAKo9C,cAAgB,IAAIv+C,SAAQ,SAAUC,EAASk1B,GACvDh0B,EAAKg8B,IAAIj8B,EAAAA,EAAAA,MAAAA,eAA4B,WACjCjB,EAAQkB,UAKpB08C,EAASqC,mBAAqB,SAAUC,EAAUlf,EAAOmf,IAEpCD,EADJ/+C,KACoB0M,IAAIhB,iBAAiBqzC,GAAY,CADrD/+C,KAC2D0M,MAC/DnF,SAAQ,SAAUC,GACvBA,EAAIoE,iBAAiBi0B,EAAOmf,OAIpCvC,EAASO,oBAAsB,aAG/BP,EAASwC,YAAc,WACnB,OAAO,GAGXxC,EAAS9a,gBAAkB,SAAUl5B,EAAKy2C,GACtC,IACI91C,EADOpJ,KACO1B,IADP0B,KACkB1B,IAAIqB,QAAQyJ,OAAS7C,EAAAA,EAAAA,OAClD,OAAOhD,EAAAA,EAAAA,KAAAA,gBAAwB6F,EAAQX,EAAKy2C,IAGhDzC,EAAS9V,OAAS,WAEd,OAAOpjC,EAAAA,EAAAA,OAAU,CACbqjC,OAFS5mC,KAEIZ,GAAK,OAI1Bq9C,EAAS/hB,YAAc,WAEnB,OADa16B,KACJw8C,aACE,GAEJ,MAGXC,EAAS0C,YAAc,SAAUC,KAGjC3C,EAAS4C,kBAAoBz0C,iBACzB,MAAM7K,EAAOC,KAMb,OALAD,EAAKu/C,gBAAkBv/C,EAAKu/C,iBAAmBv/C,EAAKzB,IAAI2G,mBAAmB,oCAAoC,GAC1GlF,EAAKu/C,kBACNv/C,EAAKu/C,sBAAwBv/C,EAAKzB,IAAI6M,WAAW,0BAErDpL,EAAKu/C,gBAAgBp0C,OAASnL,EACvBA,EAAKu/C,iBAGhB7C,EAAS8C,iBAAmB30C,iBACxB,MAAM7K,EAAOC,KACb,IAAKD,EAAKy/C,mBAAqBz/C,EAAKJ,QAAQ6/C,iBACxC,OAAO,KAEX,GAAIz/C,EAAK0/C,UACL,OAAO1/C,EAAK0/C,UAKhB,GAHKl8C,EAAAA,EAAAA,KAAAA,iBACK,+BAEmC,kBAAlCxD,EAAKJ,QAAQ6/C,iBACpB,GAAIz/C,EAAKzB,IAAK,CACV,MAAMohD,QAAqB3/C,EAAKzB,IAAIihD,mBAEhCx/C,EAAK0/C,UADLC,GAIiB,IAAIn8C,EAAAA,EAAAA,KAAAA,eAIzBxD,EAAK0/C,UAAY,IAAIl8C,EAAAA,EAAAA,KAAAA,eAIzB,GAAIxD,EAAKzB,IAAK,CACV,MAAMohD,QAAqB3/C,EAAKzB,IAAIihD,mBAEhCx/C,EAAK0/C,UADLC,EACiB,IAAIn8C,EAAAA,EAAAA,KAAAA,UAAkBA,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIm8C,EAAa//C,QAASI,EAAKJ,QAAQ6/C,mBAGlF,IAAIj8C,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKJ,QAAQ6/C,uBAIxDz/C,EAAK0/C,UAAY,IAAIl8C,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKJ,QAAQ6/C,kBAG5D,OAAOz/C,EAAK0/C,WA/WpB,GAoXAl8C,EAAAA,EAAAA,QAAAA,OAAoBqH,eAAgBT,EAAMxK,GACtC,MAAMggD,EAAWx1C,EAAKyc,OAAO,EAAG,GAAGg5B,cAAgBz1C,EAAKyc,OAAO,GAC/D,IAAKrjB,EAAAA,EAAAA,QAAWo8C,GAAW,CACvB,MAAMtgD,QAAe,QAAO,KAAesgD,GAC3Cp8C,EAAAA,EAAAA,QAAWo8C,GAAYtgD,EAAOiP,QAElC,OAAO,IAAI/K,EAAAA,EAAAA,QAAWo8C,GAAU,KAAMhgD,IAI1C,QADc4D,EAAAA,EAAAA,S,6CCzad,MAAMs8C,EAAoB,SAAUC,EAAKvnB,GACrC,MAAM3zB,EAAS,SAAUk7C,GACrB,MAAMC,EAAc,CAChB51C,KAAM21C,EAAI31C,KACVsD,OAAQzN,KACRggD,cAAehgD,MASnB,OAPI8/C,EAAIG,QACJ9gD,OAAOD,KAAK4gD,EAAIG,QAAQ14C,SAAQ,SAAUkB,GAChCA,KAAOs3C,IACTA,EAAYt3C,GAAOq3C,EAAIG,OAAOx3C,OAInC8vB,EAAS73B,KAAKV,KAAM+/C,IAC7BG,KAAKlgD,MAGP,OAFcA,KAAKmgD,WAAWL,GAAO9/C,KAAKmgD,WAAWL,IAAQ,IAAI7lC,KAC3D6E,IAAIyZ,EAAU3zB,GACbA,GAGLw7C,EAAa,SAAUC,EAAQ9nB,EAAU54B,GAC3C,MAAMI,EAAOC,KAIb,OAHAqgD,EAAOluC,MAAM,KAAK5K,SAAQ,SAAUu4C,GAChC//C,EAAK8wB,QAAQjlB,iBAAiBk0C,EAAKD,EAAkBn/C,KAAKX,EAAM+/C,EAAKvnB,GAAW54B,MAE7EI,GAGLo8C,EAAc,WAChB,MAAMp8C,EAAOC,KACbD,EAAKogD,WAAa,GAClBpgD,EAAK8wB,QAAUlkB,SAAS2zC,yBAExB,MAGMC,EAAU,CACZ,mBACA,gBACA,uBAEJA,EAAQh5C,SARS,SAAU0mB,GACvBjuB,KAAKiuB,GAAUluB,EAAK8wB,QAAQ5C,GAAQiyB,KAAKngD,EAAK8wB,WAOxB9wB,GAK1BwgD,EAAQn4C,KAAK,MACbm4C,EAAQn4C,KAAK,OACbm4C,EAAQn4C,KAAK,OACbm4C,EAAQn4C,KAAK,WACbm4C,EAAQh5C,SAPY,SAAU0mB,GAC1BluB,EAAK8wB,QAAQ5C,GAAUluB,EAAKkuB,GAAQiyB,KAAKngD,KAMhBA,IAG3BygD,EAAUrE,EAAY37C,UAE5BggD,EAAQnyC,GAAK,SAAUgyC,EAAQ9nB,GAC3B,OAAO6nB,EAAW1/C,KAAKV,KAAMqgD,EAAQ9nB,IAGzCioB,EAAQzkB,IAAM,SAAUskB,EAAQ9nB,GAC5B,OAAO6nB,EAAW1/C,KAAKV,KAAMqgD,EAAQ9nB,EAAU,CAAEkoB,MAAM,KAG3DD,EAAQpyC,IAAM,SAAUiyC,EAAQ9nB,GAC5B,MAAMx4B,EAAOC,KACP0gD,EAAYL,EAAOluC,MAAM,KAoB/B,OAnBIomB,EACAmoB,EAAUn5C,SAAQ,SAAUu4C,GACxB,MAAMve,EAAQxhC,EAAKogD,WAAWL,GAC1Bve,GAASA,EAAMlQ,IAAIkH,IACnBx4B,EAAK8wB,QAAQ8vB,oBAAoBb,EAAKve,EAAM/iB,IAAI+Z,OAKxDmoB,EAAUn5C,SAAQ,SAAUu4C,GACxB,MAAMve,EAAQxhC,EAAKogD,WAAWL,GAC1Bve,IACAA,EAAMh6B,SAAQ,SAAUq5C,GACpB7gD,EAAK8wB,QAAQ8vB,oBAAoBb,EAAKc,MAE1Crf,EAAMsf,YAIX9gD,GAGXygD,EAAQj1C,QAAU,SAAUpB,EAAMxK,GAY9B,IAAImhD,EATArvC,OAAOsvC,GAAKA,EAAEjhB,OAAS31B,aAAgB42C,EAAEjhB,QACzCngC,EAAU,GACVR,OAAOD,KAAKiL,GAAM5C,SAAQ,SAAUkB,GACpB,SAARA,IACA9I,EAAQ8I,GAAO0B,EAAK1B,OAG5B0B,EAAOA,EAAKA,MAGZxK,IACAmhD,EAAY,CACRb,OAAQtgD,IAGhB,MAAMkgC,EAAQ,IAAImhB,YAAY72C,EAAM22C,GAjBvB9gD,KAkBRggC,cAAcH,IAGvBsc,EAAY8E,iBAAmB,IAAIz+C,QAEnC25C,EAAY+E,mBAAqB,SAAUnC,EAAUxmB,GAOjD,OAAO,SAAUx5B,GACb,MAAMoiD,EAAUnhD,KACVohD,EAAYriD,EAAEoL,KACpB,IAAIk3C,EAAalF,EAAY8E,iBAAiBziC,IAAI2iC,GAC7CE,IACDA,EAAa,GACblF,EAAY8E,iBAAiBniC,IAAIqiC,EAASE,IAE9C,IAAIC,EAAYD,EAAWD,GAS3B,GARKE,IACDD,EAAWD,GAAaE,EAAY,IAEnCA,EAAUvC,KACXuC,EAAUvC,GAAYxmB,IAIrBx5B,EAAEwiD,0BAIH,IAHA,IAEI38C,EAFA2kB,GAAU,EACV/hB,EAAMzI,EAAE0O,OAELjG,GAAOA,IAAQ25C,GAAS,CAC3B,IAAKpC,KAAYuC,EACT95C,EAAI+hB,SAAW/hB,EAAI+hB,QAAQw1B,KAC3Bx1B,GAAU,EACV3kB,EAAS08C,EAAUvC,GAAUr+C,KAAKygD,EAASpiD,GAC3CA,EAAEwiD,2BAA4B,GAGtC,GAAIh4B,EACA,OAAO3kB,EAEX4C,EAAMA,EAAIg6C,cAM1B,W,0DC3JI,MAAMC,EAAe,SAAU3mC,EAAGsP,EAAGs3B,EAAMn6B,GACvC,OAAc,EAAPm6B,EAAW,CAAC5mC,EAAE,IAAMsP,EAAE,GAAKtP,EAAE,KAAOyM,EAAK,GAAKzM,EAAE,KAAOsP,EAAE,GAAKtP,EAAE,IAAKyM,EAAK,IACtE,EAAPm6B,EAAW,CAAC5mC,EAAE,IAAMsP,EAAE,GAAKtP,EAAE,KAAOyM,EAAK,GAAKzM,EAAE,KAAOsP,EAAE,GAAKtP,EAAE,IAAKyM,EAAK,IAC/D,EAAPm6B,EAAW,CAACn6B,EAAK,GAAIzM,EAAE,IAAMsP,EAAE,GAAKtP,EAAE,KAAOyM,EAAK,GAAKzM,EAAE,KAAOsP,EAAE,GAAKtP,EAAE,KAC9D,EAAP4mC,EAAW,CAACn6B,EAAK,GAAIzM,EAAE,IAAMsP,EAAE,GAAKtP,EAAE,KAAOyM,EAAK,GAAKzM,EAAE,KAAOsP,EAAE,GAAKtP,EAAE,KACrE,MASd6mC,EAAU,SAAUv8C,EAAGmiB,GACzB,IAAItoB,EAAO,EAQX,OANImG,EAAE,GAAKmiB,EAAK,GAAItoB,GAAQ,EACnBmG,EAAE,GAAKmiB,EAAK,KAAItoB,GAAQ,GAE7BmG,EAAE,GAAKmiB,EAAK,GAAItoB,GAAQ,EACnBmG,EAAE,GAAKmiB,EAAK,KAAItoB,GAAQ,GAE1BA,GAGL2iD,EAAW,CACb95C,QAAS,SAAUxH,GACf,OAAOQ,MAAMC,QAAQT,IAAaA,EAAS+C,QAAU,GAA4B,iBAAhB/C,EAAS,IAA0C,iBAAhBA,EAAS,IAEjHuhD,OAAQ,SAAUvhD,GACd,OAAOQ,MAAMC,QAAQT,KAAkC,IAApBA,EAAS+C,QAAgBu+C,EAAS95C,QAAQxH,EAAS,MAE1FwhD,iBAAkB,SAAUxhD,GACxB,OAAOQ,MAAMC,QAAQT,KAAkC,IAApBA,EAAS+C,QAAgBu+C,EAASC,OAAOvhD,EAAS,MAEzFyhD,sBAAuB,SAAUzhD,GAC7B,OAAOQ,MAAMC,QAAQT,KAAkC,IAApBA,EAAS+C,QAAgBu+C,EAASE,iBAAiBxhD,EAAS,MAEnG0hD,WAAY,SAAoB3sB,EAAO4sB,GACnC,OAAO1+C,EAAAA,EAAAA,KAAAA,SAAAA,WAA4B8xB,EAAO4sB,IAE9CC,SAAU,SAASA,EAAS7sB,EAAO/kB,GAC/B,IAAI1L,GAAS,EACb,GAAIg9C,EAAS95C,QAAQutB,GACjB,GAAIusB,EAAS95C,QAAQwI,GACjB1L,EAASywB,EAAM,KAAO/kB,EAAK,IAAM+kB,EAAM,KAAO/kB,EAAK,QAElD,GAAIsxC,EAASC,OAAOvxC,GACrB,IAAK,IAAIpO,EAAI,EAAGoV,EAAIhH,EAAKjN,OAAS,EAAGnB,EAAIoO,EAAKjN,OAAQiU,EAAIpV,IAAK,CAC3D,IAAIigD,EAAK7xC,EAAKpO,GAAG,GAAIkgD,EAAK9xC,EAAKpO,GAAG,GAC9BmgD,EAAK/xC,EAAKgH,GAAG,GAAIgrC,EAAKhyC,EAAKgH,GAAG,GAElB8qC,EAAK/sB,EAAM,IAAOitB,EAAKjtB,EAAM,IACzCA,EAAM,IAAMgtB,EAAKF,IAAO9sB,EAAM,GAAK+sB,IAAOE,EAAKF,GAAMD,IAC1Cv9C,GAAUA,QAG5B,GAAIg9C,EAASE,iBAAiBxxC,IAASA,EAAKjN,OAAS,GAGtD,GAAI6+C,EAAS7sB,EAAO/kB,EAAK,IAAK,CAC1B,IAAIiyC,GAAa,EAEjB,IAAKrgD,EAAI,EAAGA,EAAIoO,EAAKjN,OAAQnB,IACzB,GAAIggD,EAAS7sB,EAAO/kB,EAAKpO,IAAK,CAC1BqgD,GAAa,EACb,MAGHA,IACD39C,GAAS,SAIhB,GAAIg9C,EAASG,sBAAsBzxC,IAASA,EAAKjN,OAAS,EAG3D,IAAKnB,EAAI,EAAGA,EAAIoO,EAAKjN,OAAQnB,IACzB,GAAIggD,EAAS7sB,EAAO/kB,EAAKpO,IAAK,CAC1B0C,GAAS,EACT,MAKhB,OAAOA,GAEX49C,OAAQ,SAASC,EAAIC,GACjB,OAAI5hD,MAAMC,QAAQ0hD,IAAO3hD,MAAMC,QAAQ2hD,GAC5BD,EAAGp/C,SAAWq/C,EAAGr/C,QAAUo/C,EAAG1tC,OAAM,CAACvN,EAAKC,IAAQm6C,EAASY,OAAOh7C,EAAKk7C,EAAGj7C,OAEjF3G,MAAMC,QAAQ0hD,KAAO3hD,MAAMC,QAAQ2hD,IAGhCD,IAAOC,GAElBC,mBAAoB,SAAUl5C,EAAIm5C,GAC9B,MAAMC,EAAKD,EAAG,GAAKn5C,EAAG,GAChBq5C,EAAKF,EAAG,GAAKn5C,EAAG,GACtB,OAAOo5C,EAAKA,EAAKC,EAAKA,GAE1BC,YAAa,SAAUt5C,EAAIm5C,GACvB,OAAOrhD,KAAKC,MAAMohD,EAAG,GAAKn5C,EAAG,GAAIm5C,EAAG,GAAKn5C,EAAG,KAEhDu5C,mBAAoB,SAAUziD,GAC1B,MAAM0iD,EAAc,SAAUjhC,EAAMC,GAChC,OAAOD,EAAK3Z,OAAO4Z,IAEvB,QAAQ,GACJ,KAAK2/B,EAAS95C,QAAQvH,GAClB,MAAO,CAACA,GACZ,KAAKqhD,EAASC,OAAOthD,GACjB,OAAOA,EACX,KAAKqhD,EAASE,iBAAiBvhD,GAC3B,OAAOA,EAAK0H,OAAOg7C,GACvB,KAAKrB,EAASG,sBAAsBxhD,GAChC,OAAOA,EAAK0H,OAAOg7C,GAAah7C,OAAOg7C,GAC3C,QACI,MAAO,KAInBC,mBAAoB,SAAUC,EAAc7iD,GACxC,GAAIQ,MAAMC,QAAQT,GACd,GAAIshD,EAAS95C,QAAQxH,SACXA,OAGN,IAAK,IAAI4B,EAAI,EAAGgiB,EAAK5jB,EAAS+C,OAAQnB,EAAIgiB,EAAIhiB,UACnCihD,EAAc7iD,EAAS4B,KAK9CkhD,WAAY,SAAUC,EAAOC,GACzB,MAAMC,EAAiB,SAAU7jD,EAAQa,GACrC,IAAK,IAAI2B,EAAI,EAAGgiB,EAAKxkB,EAAO2D,OAAQnB,EAAIgiB,EAAIhiB,IACxC,GAAI0/C,EAASM,SAASxiD,EAAOwC,GAAI3B,GAC7B,OAAO,EAGf,OAAO,GAEX,SAAIgjD,EAAe3B,EAASoB,mBAAmBK,GAAQC,KAAUC,EAAe3B,EAASoB,mBAAmBM,GAAQD,KAKxHG,YAAa,SAAU9jD,EAAQ6nB,GAC3B,OAAO7nB,EACFpB,KAAIgS,GAAQsxC,EAAS6B,SAASnzC,EAAMiX,KACpCriB,QAAOoL,GAAQA,EAAKjN,UAE7BogD,SAAU,SAAU/jD,EAAQ6nB,GAExB,IAAI3iB,EAAQ88C,EAAM1/B,EAAM0hC,EAAYC,EAGpC,IAAKjC,EAAO,EAAGA,GAAQ,IACnB98C,EAAS,GACTod,EAAOtiB,EAAOA,EAAO2D,OAAS,GAC9BqgD,IAAe/B,EAAQ3/B,EAAMuF,GAAQm6B,GAErChiD,EAAO6H,SAAQ8tB,IACXsuB,IAAWhC,EAAQtsB,EAAO9N,GAAQm6B,GAG9BiC,IAAWD,GAAY9+C,EAAOwD,KAAKq5C,EAAaz/B,EAAMqT,EAAOqsB,EAAMn6B,IAEnEo8B,GAAQ/+C,EAAOwD,KAAKitB,GAExBrT,EAAOqT,EACPquB,EAAaC,MAGjBjkD,EAASkF,GAEGvB,QAnBUq+C,GAAQ,GAsBlC,OAAO98C,GAEXg/C,aAAc,SAAUlkD,EAAQ6nB,GAE5B,IAGIrlB,EAAG4Y,EAAGsP,EAAGy5B,EAAOC,EAHhB74C,EAAMvL,EAAO2D,OACb0gD,EAAQpC,EAAQjiD,EAAO,GAAI6nB,GAC3By8B,EAAO,GAGPp/C,EAAS,GAEb,IAAK1C,EAAI,EAAGA,EAAI+I,EAAK/I,IAAK,CAKtB,IAJA4Y,EAAIpb,EAAOwC,EAAI,GACfkoB,EAAI1qB,EAAOwC,GACX2hD,EAAQC,EAAWnC,EAAQv3B,EAAG7C,KAEjB,CAET,KAAMw8B,EAAQF,GAAQ,CAClBG,EAAK57C,KAAK0S,GAEN+oC,IAAUC,GACVE,EAAK57C,KAAKgiB,GAENloB,EAAI+I,EAAM,IACVrG,EAASA,EAAOyD,OAAO27C,GACvBA,EAAO,KAEJ9hD,IAAM+I,EAAM,GACnB+4C,EAAK57C,KAAKgiB,GAEd,MAEG,GAAI25B,EAAQF,EACf,MAEOE,GACPjpC,EAAI2mC,EAAa3mC,EAAGsP,EAAG25B,EAAOx8B,GAC9Bw8B,EAAQpC,EAAQ7mC,EAAGyM,KAGnB6C,EAAIq3B,EAAa3mC,EAAGsP,EAAGy5B,EAAOt8B,GAC9Bs8B,EAAQlC,EAAQv3B,EAAG7C,IAI3Bw8B,EAAQD,EAOZ,OAJIE,EAAK3gD,SACLuB,EAASA,EAAOyD,OAAO27C,IAGpBp/C,GAEXq/C,YAAa,SAAUvkD,EAAQC,GAC3B,IAAIukD,EAAiBxkD,EAGrB,KAFgD,IAA1BwkD,EAAe7gD,QAGjC,GAAI1D,EAAQwkD,WAAY,CACpB,MAAMC,EAAoB,GAC1BF,EAAe38C,SAAQ,SAAU8tB,EAAO5tB,EAAKH,GACzC,GAAIG,EAAK,CACL,MAAMua,EAAO1a,EAAIG,EAAM,GACjB48C,EAAWzC,EAASmB,YAAY/gC,EAAMqT,GAC5C,GAAIgvB,EAAW1kD,EAAQwkD,WAAY,CAE/B,IAAIG,EAAMD,EAAW1kD,EAAQwkD,WAAa,EAEtCvvC,EAAIrT,KAAKgjD,KAAKF,EAAW1kD,EAAQwkD,YACzB,IAARG,IACA1vC,GAAQ,EACR0vC,EAAM3kD,EAAQwkD,YAElB,MAAMx2B,EAAI0H,EAAM,GAAKrT,EAAK,GAEpB5f,GADIizB,EAAM,GAAKrT,EAAK,IACVqiC,EACVliD,EAAMwrB,EAAI02B,EAChB,IAAIG,EAAOxiC,EAAK,GAAKsiC,EAAMniD,EACvBsiD,EAAOziC,EAAK,GAAKsiC,EAAMliD,EACvBygD,EAAKljD,EAAQwkD,WAAahiD,EAC1B2gD,EAAKnjD,EAAQwkD,WAAa/hD,EAC9B,IAAK,IAAIF,EAAI,EAAGA,EAAI0S,EAAG1S,IACnBkiD,EAAkBh8C,KAAK,CAACo8C,EAAMC,IAC9BD,GAAQ3B,EACR4B,GAAQ3B,GAIpBsB,EAAkBh8C,KAAKitB,MAE3B6uB,EAAiBE,OAEhB,GAAIzkD,EAAQ+kD,aAAc,CAC3B,MAAM7iD,EAAYqiD,EAAe7gD,OACjC,GAAIxB,EAAYlC,EAAQ+kD,aAAc,CAGlC,MAAMC,EAAa,GACnB,IAAIC,EAAsB,EAC1BV,EAAe38C,SAAQ,SAAU8tB,EAAO5tB,EAAKH,GACrCG,IACAm9C,GAAuBrhD,EAAAA,EAAAA,SAAAA,YAAwB+D,EAAIG,EAAM,GAAI4tB,IAEjEsvB,EAAWv8C,KAAK,CACZ0hB,MAAOriB,EACP48C,SAAUO,OAGlB,MAAMC,EAAiBD,EAAsBjlD,EAAQ+kD,aACrD,IAAII,EAAwB,EAC5BH,EAAWp9C,SAAQ,SAAUw9C,EAAWt9C,EAAKH,GACzC,MAAM09C,EAAKD,EAAUV,SAAWS,EAChC,GAAW,IAAPE,EACAD,EAAUE,UAAW,OAEpB,GAAID,EAAK,EAAG,CACb,GAAID,EAAUj7B,MAAO,CACjB,MAAMo7B,EAAgB59C,EAAIG,EAAM,GAC5Bq9C,EAAwBI,EAAcb,SAAWW,EACjDE,EAAcD,UAAW,EAGzBF,EAAUE,UAAW,EAG7B,KAAOF,EAAUV,SAAWS,GACxBA,GAAyBD,MAIrCF,EAAWz/C,QAAOigD,IAAMA,EAAEF,WAAU19C,SAAQ,SAAU49C,GAClDjB,EAAeiB,EAAEr7B,OAAS,QAE9Bo6B,EAAiBA,EAAeh/C,QAAOE,GAAW,OAANA,SAE3C,GAAIvD,EAAYlC,EAAQ+kD,aAAc,CAEvC,MAAMniB,EAAe,SAAUj7B,EAAKG,EAAK6S,GACrC,MAAM7Q,EAAKnC,EAAIG,EAAM,GACfm7C,EAAKt7C,EAAIG,GACTmN,EAAI0F,EAAQ,EAClB,IAAIqT,EAAIlkB,EAAG,GACPmkB,EAAInkB,EAAG,GACX,MAAMo5C,GAAMD,EAAG,GAAKj1B,GAAK/Y,EACnBkuC,GAAMF,EAAG,GAAKh1B,GAAKhZ,EACnBwwC,EAAe,IAAItkD,MAAMwZ,EAAQ,GACvC8qC,EAAa,GAAK39C,EAClB29C,EAAa,GAAK,EAClB,IAAK,IAAIljD,EAAI,EAAGgiB,EAAKkhC,EAAa/hD,OAAQnB,EAAIgiB,EAAIhiB,IAC9CyrB,GAAKk1B,EACLj1B,GAAKk1B,EACLsC,EAAaljD,GAAK,CAACyrB,EAAGC,GAE1BtmB,EAAIyB,OAAOqH,MAAM9I,EAAK89C,IAE1B,IAAIC,EAAgB,EACpB,MAAMC,EAAYpB,EAAe5lD,KAAI,SAAU+2B,EAAO5tB,EAAKH,GACvD,IAAI+8C,EAAW,EAKf,OAJI58C,IACA48C,EAAW9gD,EAAAA,EAAAA,SAAAA,YAAwB+D,EAAIG,EAAM,GAAI4tB,GACjDgwB,GAAiBhB,GAEd,CACHv6B,MAAOriB,EACP48C,SAAUA,MAIlBH,EAAiBA,EAAev5C,QAChC,MAAM46C,EAAe5lD,EAAQ+kD,aAAe7iD,EAC5C,IAAI2jD,EAAYD,EACZE,EAAiB,EACrB,IAAK,IAAIvjD,EAAI,EAAGgiB,EAAKohC,EAAUjiD,OAAQmiD,GAAatjD,EAAIgiB,EAAIhiB,IAAK,CAC7D,MAAMy5B,EAAM2pB,EAAUpjD,GACtB,GAAqB,IAAjBy5B,EAAI0oB,SAAgB,CACpB,MAAMqB,EAAwBnkD,KAAKqa,IAAIra,KAAKirC,MAAM+Y,EAAe5pB,EAAI0oB,SAAWgB,GAAgBG,IAAc,EAC9GA,GAAaE,EACbnjB,EAAa2hB,EAAgBvoB,EAAI7R,MAAQ27B,EAAgBC,GACzDD,GAAkBC,KAMtC,OAAOxB,IAInB,K,ytBCtXA,YAAmB7yC,KAAK,CAACC,OAAOC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;GAyB/B,CAAEpH,KAAM,mCC0DZ5G,EAAAA,EAAAA,YAAiB44C,EAAAA,EACjB54C,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAWiM,EAAAA,EACrBjM,EAAAA,EAAAA,KAAUtD,EAAAA,EACVsD,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BA,EAAAA,EAAAA,QAAa,SAAU4iC,EAAWC,GAC9BD,EAAU3lC,UAAYrB,OAAOknC,OAAOD,EAAW5lC,WAC/C2lC,EAAU3lC,UAAUf,YAAc0mC,EAClCA,EAAUG,OAASF,EAAW5lC,WAGlC+C,EAAAA,EAAAA,IAAS,SAAUijC,KAAeC,GAC9BtnC,OAAOmD,OAAOkkC,EAAWhmC,aAAcimC,IAG3C,YAIezmC,MAAmC,IACzCghD,YAAqC,mBAAhBA,YACtBA,YACC,SAAU2E,GAEP,OADA3E,EAAY2E,GAAS,IAAI3E,EAAY,IAAIvhD,YAAYkmD,GAC9C3E,EACP,SAASA,EAAY72C,EAAMy7C,GAClBA,IAAMA,EAAO,IAClB,IAAI7mD,EAAI4N,SAASk5C,YAAY,eAE7B,OADA9mD,EAAE+mD,gBAAgB37C,IAAQy7C,EAAK7lB,UAAW6lB,EAAKG,WAAYH,EAAK3F,QACzDlhD,GAPd,CASC,aAEDinD,QAAQxlD,UAAU+oB,UACnBy8B,QAAQxlD,UAAU+oB,QACdy8B,QAAQxlD,UAAUylD,iBAClBD,QAAQxlD,UAAU0lD,oBAClBF,QAAQxlD,UAAU2lD,mBAClBH,QAAQxlD,UAAU4lD,kBAClBJ,QAAQxlD,UAAU6lD,uBAwE1B,IAAIC,EAAe,KACfC,EAAgB,KACpB,IAAIC,EAAa,EACbC,EAAiB,EACrB,MAAMC,EAAqB,WACvB,MAAM3mD,EAAOC,KAEb,IAGIqgD,EAAS,CACTvgD,EAAAA,EAAAA,MAAAA,SACAA,EAAAA,EAAAA,MAAAA,WACAA,EAAAA,EAAAA,MAAAA,YAEAA,EAAAA,EAAAA,MAAAA,gBACAA,EAAAA,EAAAA,MAAAA,KACAA,EAAAA,EAAAA,MAAAA,gBACAA,EAAAA,EAAAA,MAAAA,cACFwK,KAAK,KAIP,IAAIq8C,EAAoB,CACpB7mD,EAAAA,EAAAA,MAAAA,YACAA,EAAAA,EAAAA,MAAAA,WACAA,EAAAA,EAAAA,MAAAA,cACAA,EAAAA,EAAAA,MAAAA,cACAA,EAAAA,EAAAA,MAAAA,YACAA,EAAAA,EAAAA,MAAAA,cACAA,EAAAA,EAAAA,MAAAA,cACFwK,KAAK,KAEPvK,EAAKsO,GAAGs4C,GAAmB,IAAM5mD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,aAG9CC,EAAK6mD,gBAAiB,EACtBC,EAAcnmD,KAAKX,GAEnB,MAAM+mD,EAAkBD,EAAc3G,KAAKngD,GAM3C,IAAIgnD,EAHJhnD,EAAKsO,GAAGgyC,EAAQyG,GAIhB/mD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACzCioD,aAAaD,GACbA,EAA6BE,YAAW,WACpCJ,EAAcnmD,KAAKX,EAAMhB,KAC1B,QAIP0S,OAAO7F,iBAAiB,YAAY,SAAU7M,GAC1C,IAAImoD,EACJA,EAAOnnD,EAAKonD,aAAepnD,EAAKonD,YAAYC,UAC5CH,YAAWr8C,iBACP,GAAI7L,EAAG,CAEHgB,EAAKqO,IAAIiyC,EAAQyG,GAEjB,IAAIjyC,EAAQ9V,EAAE8V,MACgC,oBAA1C1V,OAAOqB,UAAUyiB,SAASviB,KAAKmU,KAC/BA,QAAc9U,EAAKsnD,iBAIvBC,EAAa5mD,KAAKX,EAAM8U,GAAOnW,MAAK,WAChCuoD,YAAW,WACPlnD,EAAKsO,GAAGgyC,EAAQyG,KACjB,KACH/mD,EAAKonD,aAAepnD,EAAKonD,YAAYI,WAAWL,SAjExC,OAwEtBM,EAA0B,GAoB1BC,EAAkB,SAAU/6B,EAAQ0X,GACtC,OAAO,IAAIxlC,SAAQ,SAAUC,EAAS4W,GAClC,MAAMsD,EArBY,WACtB,MAAM2uC,EAAoB9uC,IAAIC,gBAAgBC,GACxC6uC,EAAiB,IAAI3uC,OAAO0uC,GAclC,OAbAC,EAAe1uC,UAAY,SAAUla,GACjC,MAAM6oD,EAAkBJ,EAAwBzoD,EAAEoF,KAAK/E,IACnDwoD,IACI7oD,EAAEoF,KAAK8R,MACP2xC,EAAgBnyC,OAAO1W,EAAEoF,KAAK8R,OAG9B2xC,EAAgB/oD,QAAQE,EAAEoF,KAAKS,QAEnC+iD,EAAezuC,mBACRsuC,EAAwBzoD,EAAEoF,KAAK/E,MAGvCuoD,EAKYE,GACTC,EAASvkD,EAAAA,EAAAA,SACfikD,EAAwBM,GAAU,CAAEjpD,QAASA,EAAS4W,OAAQA,GAC9DsD,EAAOI,YAAY,CACf/Z,GAAI0oD,EACJp7B,OAAQA,EACRq7B,OAAQ3jB,QAKd4jB,EAA2BzkD,EAAAA,EAAAA,KAAAA,WAAmB0kD,iBAAiBznD,UAAU0nD,uBACzEC,EAAkB,SAAU3jD,GAC9B,OAAOA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAClBkoD,GAA4BxjD,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM7E,QAAQyoD,MAGtFvB,EAAgBj8C,eAAgB7L,GAClC,MAAMgB,EAAOC,KAEb,IAAI,MAAE6U,EAAK,MAAEiV,SAAgBu+B,EAAa3nD,KAAKX,GAC/C,GAAIA,EAAK6mD,eAGL,OAFAn1C,OAAO62C,QAAQC,aAAa1zC,EAAO,KAAM,kBAClC9U,EAAK6mD,eASZ,IAAI4B,EAAY,WACZjC,EAAgBD,GAChBA,EAAe/iD,EAAAA,EAAAA,KAAAA,aAAqBsR,MAEf0xC,GAAiBz8B,EAAQ28B,IAC1CA,EAAiB38B,EACjBrY,OAAO62C,QAAQG,UAAU5zC,EAAO,KAAMpD,OAAOY,SAASR,KAAKM,MAAM,KAAKo2B,QAAU,IAAM+d,KAI9F,GAAIvnD,EAAG,CAGH,OAFAgB,EAAK2oD,cAAgB3pD,EAAEoL,MAEf,GACJ,KAAKpL,EAAEoL,OAASrK,EAAAA,EAAAA,MAAAA,gBAChB,KAAKf,EAAEoL,OAASrK,EAAAA,EAAAA,MAAAA,WAChB,KAAKf,EAAEoL,OAASrK,EAAAA,EAAAA,MAAAA,KACZ0oD,IACA,MACJ,KAAKzpD,EAAEoL,OAASrK,EAAAA,EAAAA,MAAAA,aAERf,EAAEyF,MAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KACjB0oD,IAEJ,MACJ,KAAKzpD,EAAEoL,KAAKikB,cAAcplB,QAAQ,QAAQolB,gBAAkB,EAEpD+5B,EAAgBppD,EAAEyF,QAClBgkD,IAKZzoD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,aAKnBuoD,EAAez9C,eAAgBjL,GACjC,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAIkV,EAAQ,GACZ,IAAIiV,EAAQ08B,IAERzmD,EAAKmH,MAAQnH,EAAKJ,QAAQuH,MAC1B2N,EAAM3N,IAAMnH,EAAKmH,KAIrB,IADA,IAAIihB,EAAMpoB,EAAKgnB,YACN7kB,EAAI,EAAGA,EAAIimB,EAAI9kB,OAAQnB,IACxBX,KAAKyoB,IAAI7B,EAAIjmB,IAAM,MACnBimB,EAAIjmB,GAAKX,KAAKonD,MAAe,IAATxgC,EAAIjmB,IAAa,KAE7C2S,EAAMsT,IAAMA,EAGZ,IAAIygC,EAAgB,GA2EpB,GAxEI7oD,EAAKiqC,aACL4e,EAAgB7oD,EAAKiqC,WAAW9kC,QAAO,SAAUkqB,GAC7C,OAAOA,EAAUtb,YAAcsb,EAAUxN,iBAC1CtjB,KAAI,SAAU8wB,GACb,MAAO,CACHA,UAAWA,EAAWy5B,gBAAiBz5B,EAAUxN,cAAcxiB,OAEpE8F,QAAO,SAAU0jD,GAChB,OAAOA,EAAcC,mBAAqB9oD,EAAKqvB,UAAYrvB,EAAKqvB,UAAUhwB,GAAKW,EAAKiqC,WAAW,GAAG5qC,QAItGwpD,EAAcvlD,OAAS,EACvBwR,EAAMi0C,KAAOF,EAAc,GAAGx5B,UAAUhwB,IACjCW,EAAKqvB,WAAarvB,EAAKiqC,YAAcjqC,EAAKiqC,WAAW,MAC5Dn1B,EAAMi0C,MAAQ/oD,EAAKqvB,WAAarvB,EAAKiqC,WAAW,IAAI5qC,IAIxDyV,EAAMkO,OAAS,GAEfhjB,EAAKmqC,WAAW3iC,SAAQ,SAAuB/C,GAC3C,GAAIA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAyB0E,EAAM7E,QAAQopD,WAwBrD,GAAIf,GAA4BxjD,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM7E,QAAQyoD,KAAM,CAC/F,MAAM56C,EAAQ,CACV1O,EAAG0F,EAAM+O,aACTqV,EAAGpkB,EAAM6O,gBACT21C,EAAGxkD,EAAM7E,QAAQuT,UACjB+1C,GAAIzkD,EAAM0kD,YACVC,GAAI3kD,EAAM7E,QAAQyoD,KAClBrgB,EAAGvjC,EAAM+F,MACTrI,EAAGsC,EAAMpF,IAEbyV,EAAMkO,OAAO3a,KAAKoF,SAhClB,GADAhJ,EAAM2Y,WAAa3Y,EAAMyW,OAASzW,EAAM2Y,WACpC3Y,EAAM2Y,YAAc3Y,EAAM2Y,WAAW9Z,SAA6B,IAAnBmB,EAAMyO,SAAoB,CACzE,MAAMzF,EAAQ,CACV47C,EAAG7lD,EAAAA,EAAAA,KAAAA,iBAAyBiB,EAAM6Q,KAClCT,EAAG9T,MAAMC,QAAQyD,EAAMyW,OAASzW,EAAMyW,MAAM3Q,KAAK,KAAO9F,EAAMyW,MAC9Dnc,EAAG0F,EAAM+O,aACTqV,EAAGpkB,EAAM6O,gBACT21C,EAAGxkD,EAAM7E,QAAQuT,UACjB+1C,GAAIzkD,EAAM0kD,YACVn6C,EAAGvK,EAAMU,SAAWV,EAAMU,kBAAkB3B,EAAAA,EAAAA,OAAAA,OAAmBiB,EAAMU,OAAOob,UAAY9b,EAAMU,QAC9F6iC,EAAGvjC,EAAM+F,MACTrI,EAAGsC,EAAMpF,KAGU,IAAnBoF,EAAMyO,WACNzF,EAAMmgB,EAAI,GAEd,MAAMvQ,EAAiBtc,MAAMC,QAAQyD,EAAM4Y,gBAAkB5Y,EAAM4Y,eAAe9S,KAAK,KAAO9F,EAAM4Y,eAChG5P,EAAMoH,IAAMwI,IACZ5P,EAAMsN,EAAIsC,GACdvI,EAAMkO,OAAO3a,KAAKoF,OAiB1BzN,EAAKiH,UAAYjH,EAAKkH,OAAOoiD,iBAC7Bx0C,EAAMy0C,IAAMvpD,EAAKkH,OAAOoiD,eAAeE,kBAGvC5pD,EAAQ6pD,aACRjmD,EAAAA,EAAAA,KAAAA,OAAesR,EAAOlV,EAAQ6pD,cAG7B7pD,EAAQ8pD,aAAe1pD,EAAK2pD,4BACtB3pD,EAAK2pD,oBAGZ3pD,EAAK2pD,oBACL,MAAO,CAAE70C,MAAO9U,EAAK2pD,oBAAqB5/B,MAAOA,GAGrD,MAAM6/B,QAAelC,EAAgB,OAAQ5yC,GAI7C,OAHIlV,EAAQ8pD,cACR1pD,EAAK2pD,oBAAsBC,GAExB,CAAE90C,MAAO80C,EAAQ7/B,MAAOA,IAG7Bw9B,EAAe,SAAUsC,GAC3B,MAAM7pD,EAAOC,KACPghB,EAAW,GAEjB,OAAK4oC,GAIA7pD,EAAK8pD,cACN9pD,EAAKonD,YAAcpnD,EAAKkF,mBAAmB,+BAA+B,IAGzElF,EAAK+pD,UACN/pD,EAAK+pD,QAAU/pD,EAAKonD,aAAepnD,EAAKonD,YAAYC,WAIjD,IAAIxoD,SAAQ,SAAUC,EAASk1B,GAClC,IAAIg2B,EAAW,WACXhqD,EAAKonD,aAAepnD,EAAKonD,YAAYI,WAAWxnD,EAAK+pD,gBAC9C/pD,EAAK+pD,QACZjrD,KAGJ,IAAImrD,EAEAA,EADwB,iBAAjBJ,EACM,IAAIhrD,SAAQ,SAAU6f,EAAKC,GACpC+oC,EAAgB,SAAUmC,GACrBlrD,MAAKi9B,GAAOld,EAAIkd,KAChBxlB,OAAM8zC,GAAQxrC,EAAI8S,KAAKC,MAAMo4B,MAC7BzzC,OAAMsD,IACHlW,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,qBACtDsV,EAAIjF,SAIH7a,QAAQC,QAAQ+qD,GAGjCI,EAAWtrD,MAAK,SAAUi9B,GAEtB,GAAIA,EAAIz0B,KAAOy0B,EAAIz0B,MAAQnH,EAAKmH,UACT,IAAZy0B,EAAIz0B,KAAuBnH,EAAKmH,MAAQnH,EAAKJ,QAAQuH,IAC5D8Z,EAAS5Y,KAAKrI,EAAKoV,cAAc,CAC7BjO,IAAKy0B,EAAIz0B,KAAOnH,EAAKJ,QAAQuH,IAC7BqzB,OAAQx6B,EAAKmH,IACboU,OAAQqgB,EAAIxT,IACZiH,UAAWrvB,EAAK4f,SAASgc,EAAImtB,aAGhC,CAED,GAAIntB,EAAImtB,MAAQ/oD,EAAKuT,eAAelU,GAAI,CAChCW,EAAK4f,SAASgc,EAAImtB,OAClB/oD,EAAKmqD,aAAavuB,EAAImtB,MAE1B,MAAMx5B,EAAcvvB,EAAKiqC,WAAW9kC,QAAO,SAAUkqB,GACjD,OAAOA,EAAUzvB,QAAQiiB,gBAAkB+Z,EAAImtB,QAChD,GACH,GAAIx5B,EAAa,CACb,MAAM66B,EAAYpqD,EAAKqqD,SAAS96B,EAAYxN,oBAC5Cd,EAAS5Y,KAAK+hD,GACdA,EAAUzrD,MAAK,SAAU2rD,GACrBtqD,EAAKmqD,aAAaG,OAM1B1uB,EAAIxT,KACJnH,EAAS5Y,KAAKrI,EAAKuqD,UAAU3uB,EAAIxT,IAAK,CAAEoiC,SAAS,KAMzD,GAFA5uB,EAAI5Y,OAAS4Y,EAAI5Y,QAAU4Y,EAAI6uB,OAAS,GAEpC7uB,EAAI5Y,OAAO1f,OAAS,EAEpB,IAAK,IAAInB,EAAI,EAAGA,EAAIy5B,EAAI5Y,OAAO1f,OAAQnB,IAAK,CACxC,IAAIuoD,EAAa9uB,EAAI5Y,OAAO7gB,GAExBwoD,GAAgB,EACpB,IAAIC,EACJ,IAAK,IAAIrzC,EAAI,EAAGA,EAAIvX,EAAKJ,QAAQuqC,WAAW7mC,OAAQiU,IAEhDqzC,EAASpnD,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKJ,QAAQuqC,WAAW5yB,GAAI,CAAEhZ,IAAKyB,IAE3D0qD,EAAWrB,IAAMuB,EAAOt1C,KACxBo1C,EAAWvoD,IAAMyoD,EAAOvrD,KACxBsrD,GAAgB,EAChBC,EAAOC,cAAgB,CAAE,QAAWH,EAAW3rD,EAAG,MAAS2rD,EAAW7hC,GACtE+hC,EAAOzB,YAAcuB,EAAWxB,GAChC0B,EAAOpgD,MAAQkgD,EAAW1iB,EAC1B4iB,EAAO13C,UAAW9T,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,QAASA,EAAW98B,EACnF88B,EAAW71C,IACX+1C,EAAOxtC,WAAastC,EAAW71C,GAC/B61C,EAAW3vC,IACX6vC,EAAOvtC,eAAiBqtC,EAAW3vC,GACvCkG,EAAS5Y,KAAKrI,EAAK8qD,iBAAiBF,GAAQjsD,KAAK,SAAU8F,GACvDA,EAAMM,cAAc9E,KAAK4oB,GACzBpkB,EAAMkP,WAAW1T,KAAKlB,GAAG,IAC3BohD,KAAKuK,MAIf,IAAKC,EAAe,CAChB,MAAMC,EAAS,CACXvrD,GAAIqrD,EAAWvoD,GAAKqB,EAAAA,EAAAA,SACpB2P,UAAWu3C,EAAWzB,EACtBE,YAAauB,EAAWxB,GACxB1+C,MAAOkgD,EAAW1iB,EAClB90B,UAAU9T,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,QAASA,EAAW98B,EAC/Ei9B,cAAe,CACXp3C,QAASi3C,EAAW3rD,EACpBwG,MAAOmlD,EAAW7hC,IAGtB6hC,EAAWtB,IAEXwB,EAAOxgD,KAAOrK,EAAAA,EAAAA,UAAAA,OACd6qD,EAAOvC,KAAOqC,EAAWtB,KAGzBwB,EAAOt1C,IAAM9R,EAAAA,EAAAA,KAAAA,iBAAyBknD,EAAWrB,EAAGqB,EAAWrB,EAAEpgD,QAAQyI,OAAOY,SAASN,UAAY,IAAM04C,EAAWrB,EACtHuB,EAAOxtC,WAAastC,EAAW71C,EAAI61C,EAAW71C,EAAEzC,MAAM,KAAO,IAEjE6O,EAAS5Y,KAAKrI,EAAK8qD,iBAAiBF,GAAQjsD,KAAK,SAAU8F,GACvD,IAAIggB,EAAWhgB,EAAMvE,KAAKujB,mBAC1Bhf,EAAM+F,MAAQia,EAASK,OAASL,EAASja,MAIzC/F,EAAMkP,WAAW1T,KAAKlB,GAAG,GACzB0F,EAAMM,cAAc9E,KAAK4oB,IAC3Bs3B,KAAKuK,MAMnB1qD,EAAKmqC,WACAhlC,QAAOV,GAAS2jD,EAAgB3jD,KAAWm3B,EAAI5Y,OAAO5H,MAAK4F,GAAKA,EAAE7e,IAAMsC,EAAMpF,OAC9EmI,SAAQ/C,GAASzE,EAAK+qD,YAAYtmD,KAEvC5F,QAAQwiB,IAAIJ,GACPtiB,MAAK,WACFqrD,OAEH5zC,OAAM,WACH4zC,UAIP5zC,OAAM,WACH4zC,WArJDnrD,QAAQC,WA0JjBksD,EAA2B,SAAUC,EAAMnoD,GAC7C,OAAO,SAAUmf,EAAMC,EAAKxa,GACxB,OAAOwa,EAAI+oC,KAAUnoD,EAAQ4E,EAAMua,IAUrCipC,EAAwB,SAAU7rD,GAEpC,OADsBY,gBAAgBuD,EAAAA,EAAAA,IAASvD,KAAKL,QAAQwvB,oBAAsB5rB,EAAAA,EAAAA,IAAAA,qBAC7D2B,QAAO,SAAUgmD,GAClC,OAAOA,EAAI9rD,KAAOA,KACnB,IAGPmE,EAAAA,EAAAA,IAASA,EAAAA,EAAAA,KAAU,SAAUmJ,EAAK/M,GAY9B,MAAMI,EAAOC,KACbuD,EAAAA,EAAAA,YAAAA,KAAoBxD,GACpBwD,EAAAA,EAAAA,IAAAA,WAAAA,KAAuBxD,GAUvBA,EAAKorD,SAAU,EAQfprD,EAAKqrD,UAAW,EAQhBrrD,EAAKoqC,SAAW,GAQhBpqC,EAAK+9C,cAAgB,KAQrB/9C,EAAKgjB,OAAS,GAQdhjB,EAAKiqC,WAAa,GAQlBjqC,EAAKmqC,WAAa,GAOlBnqC,EAAKqvB,UAAY,KAQjBrvB,EAAKsrD,QAAU,KAEf,IAAIC,EAAoB,EAyPxB,GAnPAvrD,EAAK2M,IAAMnJ,EAAAA,EAAAA,KAAAA,OAAemJ,GAwD1B3M,EAAKwrD,8BAAgC,uBACrCxrD,EAAKyrD,YAAc,GACnBzrD,EAAK0rD,gBAAkB,EAEvB1rD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAAwBA,EAAAA,EAAAA,QAAAA,KAG/CC,EAAK2rD,gBAAkB,GAEvB3rD,EAAK4rD,aAAe,CAChB5oC,OAAQ,GACR87B,SAAU,SAAUz/C,GAChB,OAAOY,KAAK+iB,OAAO5H,MAAK,SAAU4F,GAC9B,OAAOA,EAAE3hB,KAAOA,MAGxBwsD,SAAU,SAAUxsD,GAChB,OAAOY,KAAK+iB,OAAO9a,OAAO8iD,EAAyB,KAAM3rD,IAAM,IAEnEwb,IAAK,SAAUxb,EAAIstC,EAAQ35B,GACvB,MAAM4oB,EAAM,CACRv8B,GAAIA,EACJysD,SAAS,EACTnf,OAAQA,EACR35B,OAAQA,GAEZ/S,KAAK+iB,OAAOha,OAAO/I,KAAK8rD,kBAAkBpf,GAAS,EAAG/Q,IAE1DqC,OAAQ,SAAU5+B,GACdY,KAAK+iB,OAAOha,OAAO/I,KAAK4rD,SAASxsD,GAAK,IAE1C2sD,aAAc,WACV,OAAO/rD,KAAK+iB,OACP7d,QAAO6b,IAAmB,IAAdA,EAAE8qC,UACd3mD,QAAO6b,IAAMA,EAAEirC,WACf1tD,KAAIyiB,GAAKA,EAAEkrC,YAEpBptD,QAAS,SAAUP,EAAKkG,EAAOuO,GAC3B,MAAMm5C,EAAWlsD,KAAK+iB,OAAO/iB,KAAK4rD,SAASpnD,EAAMpF,KAIjD,GAHA8sD,EAASD,SAAWznD,EACpB0nD,EAASL,SAAU,EACnBvtD,EAAIykB,OAAS/iB,KAAK+rD,eACdh5C,EAAQ,CACsB,IAA1BzU,EAAI0rC,WAAW3mC,SACf/E,EAAI0rC,WAAa,IAAIlpC,MAAMxC,EAAIqB,QAAQqqC,WAAW3mC,SAGtD,IAAIymB,EAAQxrB,EAAIqB,QAAQqqC,WAAW1rC,KAAIyiB,GAAKA,EAAE3hB,KAAI4J,QAAQxE,EAAMpF,IAC5D0qB,EAAQ,GACRA,EAAQxrB,EAAI0rC,WAAW1rC,KAAIyiB,GAAKA,EAAE5W,OAAMnB,QAAQlJ,EAAAA,EAAAA,UAAAA,SACpC,EACRxB,EAAI0rC,WAAW5hC,KAAK5D,GAEpBlG,EAAI0rC,WAAWjhC,OAAO+gB,EAAO,EAAGtlB,GAGpClG,EAAI0rC,WAAWjhC,OAAO+gB,EAAO,EAAGtlB,QAIpClG,EAAI4rC,WAAa5rC,EAAIykB,OAAO7d,QAAO,SAAU6b,GACzC,OAAQA,EAAEhO,WAItB0C,OAAQ,SAAUnX,EAAK2X,GACnB,MAAMi2C,EAAWlsD,KAAK+iB,OAAO/iB,KAAK4rD,SAAS31C,EAAMgJ,UACjDitC,EAASD,SAAW,KACpBC,EAASL,SAAU,EACnBK,EAASF,UAAW,EACpB,IAAIliC,EAAQxrB,EAAIqB,QAAQqqC,WAAW1rC,KAAIyiB,GAAKA,EAAE3hB,KAAI4J,QAAQiN,EAAMgJ,SAC5D6K,GAAS,GACTxrB,EAAI0rC,WAAWjhC,OAAO+gB,EAAO,IAGrCqiC,0BAA2B,SAAUC,EAAMhtD,GACvC,OAAOY,KAAK+iB,OAAO7d,QAAO,SAAU6b,GAChC,OAAOA,EAAE3hB,KAAOA,IAAO2hB,EAAEhO,SAAwB,IAAdgO,EAAE8qC,WACtC5jD,OAAO8iD,EAAyB,KAAM3rD,IAAM,IAEnDitD,6BAA8B,SAAU/tD,EAAKc,GACzC,IAAI0qB,EAAQ9pB,KAAKmsD,0BAA0B7tD,EAAKc,GAIhD,OAHId,EAAI8wB,YACJtF,GAAgB,GAEbA,GAEXgiC,kBAAmB,SAAUpf,GACzB,OAAO1sC,KAAK+iB,OAAO9a,OA5PG,SAAUykC,GACxC,OAAO,SAAU1qB,EAAMC,EAAKxa,GACxB,OAAOwa,EAAIyqB,QAAUA,EAASjlC,EAAMua,GA0PNsqC,CAA0B5f,IAAU,GAAK,GAEvE6f,aAAc,SAAUjuD,GACpB,MAAMyB,EAAOC,KACb,GAAI1B,EAAIqB,QAAQqqC,WACX3hC,OAAO/J,EAAIqB,QAAQuqC,YACnBn1B,OAAM,SAAUgM,GACb,OAAOhhB,EAAK8+C,SAAS99B,EAAE3hB,IAAM2hB,QAEhC/gB,KAAK+iB,OAAO5H,MAAK,SAAU3W,GACxB,OAAyB,IAAlBA,EAAMqnD,WACb,CACJ,MAAMW,EAAe5hD,iBACjB,IAAKtM,EAAI8sD,SAAU,CACf,MAAMqB,EAAY,WAKVnuD,EAAIqB,QAAQ+sD,UACZhG,EAAmBhmD,KAAKpC,GAG5BA,EAAI8sD,UAAW,EAGf9sD,EAAIquD,OAAM,IAAMruD,EAAIoO,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WACzCxB,EAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,UAGhB,GAAIxB,EAAIuW,OAASvW,EAAIuW,MAAMy0C,KACvB,IAAKhrD,EAAIoO,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAAwB,CAGpD,GAFAxB,EAAIoO,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAEjByD,EAAAA,EAAAA,OAAYA,EAAAA,EAAAA,KAAAA,OAAgB,CAC7B,MAAMlE,QAAe,uCACrBkE,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAW,GACrBA,EAAAA,EAAAA,KAAAA,OAAiBlE,EAAOiP,QAE5B/K,EAAAA,EAAAA,KAAAA,OAAAA,MAAqB,CACjBjF,IAAKA,EAAKuW,MAAOvW,EAAIuW,MAAMy0C,IAAK/wB,SAAU,WACtCk0B,IAEAnuD,EAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,QAAmB,GAAGqpD,OAAO3uB,gBAAgB,qBAKhFwuB,MAKZ,GAAInuD,EAAI8wB,UACJo9B,QAEC,CAED,IAAIK,EAAe,GAKnB,GAJIvuD,EAAIuW,OAASvW,EAAIuW,MAAMi0C,OACvB+D,EAAetpD,EAAAA,EAAAA,IAAAA,oBAAAA,QAAkCwd,GAAKA,EAAE3hB,KAAOd,EAAIuW,MAAMi0C,QAGzE+D,EAAaxpD,OAAS,EACtBwpD,EAAa,GAAG95C,QAAS,EACzBzU,EAAI8rD,SAASyC,EAAa,IAAInuD,MAAK,SAAUouD,GACzCN,WAGH,CAED,MAAMO,EAAsBzuD,EAAI0rC,WAAW9kC,QAAO,SAAUV,GACxD,OAAQA,EAAM8d,iBACfpd,QAAO,SAAU6b,GAChB,OAAOA,EAAE9gB,MAAQ8gB,EAAE9gB,KAAKuE,SAGxBuoD,EAAoB1pD,OAAS,IAC7B/E,EAAI2B,KAAKiqD,aAAa6C,EAAoB,GAAG9sD,KAAKuE,OAClDlG,EAAI8wB,UAAY29B,EAAoB,IAGxCP,SAOpBzsD,EAAK4rD,aAAa5oC,OAAS,GAE3BhjB,EAAKitD,aAAe,IAAIxqD,QAEnBe,EAAAA,EAAAA,QACDA,EAAAA,EAAAA,IAASA,EAAAA,EAAAA,KAAAA,OAAe,GAAIA,EAAAA,EAAAA,SAAagD,EAAAA,GACzChD,EAAAA,EAAAA,OAAW,GAIX5D,GAAWA,EAAQwqC,UAAYxqC,EAAQwqC,SAASrZ,QAAUnxB,EAAQwqC,SAASrZ,OAAOga,mBAClF,IAAK,IAAImiB,KAAW1pD,EAAAA,EAAAA,IAAAA,SAAAA,OAAAA,mBACXpE,OAAOqB,UAAUC,eAAeC,KAAKf,EAAQwqC,SAASrZ,OAAOga,mBAAoBmiB,KAClFttD,EAAQwqC,SAASrZ,OAAOga,mBAAmBmiB,IAAW,GAYlEttD,EAAUA,GAAW,GACrButD,EAAaxsD,KAAKX,EAAMJ,GAExBI,EAAKX,GAAKO,EAAQP,IAAMmE,EAAAA,EAAAA,OAAU,CAAEqjC,OAAQ,SAE5C7mC,EAAKotB,YAAcptB,EAAKJ,QAAQwtB,YAEhC,IAAIy4B,EAAOh7C,iBAeP,GAbA7K,EAAK8U,YAAc9U,EAAKsnD,gBAEpBtnD,EAAKJ,QAAQgsC,QACb5rC,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAExB,IAAKyB,IAG7CJ,QAAkCyE,IAAvBzE,EAAQuqC,aACnBnqC,EAAKJ,QAAQuqC,WAAavqC,EAAQuqC,YAElCvqC,QAAkCyE,IAAvBzE,EAAQqqC,aACnBjqC,EAAKJ,QAAQqqC,WAAarqC,EAAQqqC,YAGlCjqC,EAAKJ,QAAQwtD,eAAgB,CAU7BptD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,aARgB,SAASstD,EAAkBruD,GAC/CioD,aAAajnD,EAAKstD,wBAElBttD,EAAKstD,uBAAyBpG,YAAW,WACrClnD,EAAKotD,eAAepuD,EAAEyF,MAAMsK,SAAU,CAAEy7C,SAAS,IACjDxqD,EAAKqO,IAAItO,EAAAA,EAAAA,MAAAA,YAA0BstD,KACpC,QAwBXrtD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,UApBc,SAASwtD,EAAgBvuD,GACvCA,EAAEyF,MAAMuO,SACPhU,EAAEyF,QAAUzE,EAAKqvB,WACdrvB,EAAKqvB,WAAarwB,EAAEyF,MAAMod,eAAiB7iB,EAAEyF,MAAMod,cAAcxiB,KAAOW,EAAKqvB,UAAUhwB,WACjE,IAAfW,EAAK8U,QACR9U,EAAK8U,MAAM3N,IACXnH,EAAK4Z,QAAO,WACR5Z,EAAKoV,cAAc,CACfjO,IAAKnH,EAAK8U,MAAM3N,IAChBoU,OAAQvb,EAAK8U,MAAMsT,SAK3BpoB,EAAKuqD,UAAUvqD,EAAK8U,MAAMsT,IAAK,CAAEoiC,SAAS,KAGlDxqD,EAAKqO,IAAItO,EAAAA,EAAAA,MAAAA,SAAuBwtD,OAUxCvtD,EAAKmH,IAAMnH,EAAKJ,QAAQuH,IACxBnH,EAAK+oC,cAAgB/oC,EAAKJ,QAAQmpC,cAClC/oC,EAAKgpC,UAAYhpC,EAAKJ,QAAQopC,UAE9BhpC,EAAK6O,qBAAuB7O,EAAK6O,sBAAwB7O,EAAKJ,QAAQiP,sBAEjE7O,EAAK6O,sBAAwB6C,OAAO+1B,WAAW,+DAA+Dje,UAC/GxpB,EAAK6O,qBAAuB9O,EAAAA,EAAAA,cAAAA,eAIhCC,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,IAAYxD,GAE5BwD,EAAAA,EAAAA,YAAe,CACX2D,IAAKnH,EAAKJ,QAAQuH,IAClBqxB,SAAU,WACNx4B,EAAKE,KAAKstD,SACV,MAAMC,EAAc,GAEpB,IAAK,IAAI3kD,KAAQ9I,EAAKJ,QAAQwqC,SAAU,CACpC,IAAIsjB,EAAa1tD,EAAKJ,QAAQwqC,SAASthC,GACnC4kD,IAE8B,iBAD9BA,EAAmC,kBAAfA,EAA2B,GAAKlqD,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIkqD,IACvD/gD,MAClB+gD,EAAW/gD,IAAM3M,EAAK2M,IAAIsL,cAAc,IAAMy1C,EAAW/gD,MAAQ+gD,EAAW/gD,KAEhF8gD,EAAYplD,KAAKrI,EAAKoL,WAAWtC,EAAM4kD,KAQ/C,IAAIvrD,EACAyoD,EACJ,IANA5qD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,kBAAgC4tD,GACxC3tD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0B6tD,GAClC5tD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyB6tD,GAI5BzrD,EAAI,EAAGA,EAAInC,EAAKJ,QAAQqqC,WAAW3mC,OAAQnB,IAEtB,iBADtByoD,EAAS5qD,EAAKJ,QAAQqqC,WAAW9nC,MAE7ByoD,EAASM,EAAsBvqD,KAAKX,EAAM4qD,IAE9C5qD,EAAKqqD,SAAS7mD,EAAAA,EAAAA,KAAAA,OAAe,GAAIonD,EAAQ,CAAE53C,QAAQ,EAAMzU,IAAKyB,MAIhEA,EAAK8U,OAAU9U,EAAK8U,MAAMkO,OAAchjB,EAAK8U,MAAMkO,OAAOzkB,KAAI,SAAUmsD,GACtE,MAAME,EAAS,CACXvrD,GAAIqrD,EAAWvoD,GAAKqB,EAAAA,EAAAA,SACpB2P,UAAWu3C,EAAWzB,EACtBE,YAAauB,EAAWxB,GACxB1+C,MAAOkgD,EAAW1iB,EAClB7iC,OAAQulD,EAAW17C,EACnBkE,SAA2B,IAAjBw3C,EAAW98B,EACrBi9B,cAAe,CACXp3C,QAASi3C,EAAW3rD,EACpBwG,MAAOmlD,EAAW7hC,IAW1B,OARI6hC,EAAWrB,GACXuB,EAAOt1C,IAAM9R,EAAAA,EAAAA,KAAAA,iBAAyBknD,EAAWrB,EAAGqB,EAAWrB,EAAEpgD,QAAQyI,OAAOY,SAASN,UAAY,IAAM04C,EAAWrB,EACtHuB,EAAOxtC,WAAcstC,EAAW3vC,GAAK2vC,EAAW71C,GAAM61C,EAAW3vC,GAAK2vC,EAAW71C,GAAGzC,MAAM,UAAO/N,IAGjGumD,EAAOxgD,KAAOrK,EAAAA,EAAAA,UAAAA,OACd6qD,EAAOvC,KAAOqC,EAAWtB,IAEtBwB,KArB0B,IAsBjCtiD,OAEAtI,EAAKJ,QAAQuqC,WAAWhlC,QAAO,SAAU0oD,GACrC,OAAQ7tD,EAAK8U,QAAU9U,EAAK8U,MAAMkO,SAAWhjB,EAAK8U,MAAMkO,OAAO5H,MAAMsvC,GAAemD,EAAUv4C,MAAQo1C,EAAWrB,GAAKwE,EAAUxuD,KAAOqrD,EAAWvoD,OAEjJ5D,KAAI,SAAUsvD,GACX,OAAOrqD,EAAAA,EAAAA,KAAAA,OAAe,GAAIqqD,EAAW,CAAEtvD,IAAKyB,QAGnDwH,SAASojD,IACN5qD,EAAKqqD,SAASO,GAAQjsD,KAAK,SAAU8F,GACjC,GAAIA,EAAMvE,KAAKujB,iBACX,IAAIgB,EAAWhgB,EAAMvE,KAAKujB,mBAE9Bhf,EAAM+F,MAAQogD,EAAOpgD,OAASia,IAAaA,EAASK,OAASL,EAASja,OAClEogD,EAAOC,eAAiBD,EAAOC,cAAcp3C,QAAU,GACvDhP,EAAMkP,WAAWi3C,EAAOC,cAAcp3C,SAEtCm3C,EAAOC,eAAiBD,EAAOC,cAActlD,MAC7Cd,EAAMM,eAAe6lD,EAAOC,cAActlD,MAE9C,MAAMmlD,GAAe1qD,EAAK8U,OAAS9U,EAAK8U,MAAMkO,QAAW,IAAIna,MAAM6hD,GAAeA,EAAWrB,IAAMuB,EAAOt1C,KAAOo1C,EAAWvoD,IAAMyoD,EAAOvrD,KACrIqrD,GAAcA,EAAW71C,GAAK61C,EAAW3vC,GAAK2vC,EAAW71C,IAAM61C,EAAW3vC,GAC1EtW,EAAMkc,cAAc+pC,EAAW71C,IACrCsrC,QACG/pC,OAAM,SAAUF,GAIblW,EAAK8tD,MAAM53C,EAAM0H,QAAS,CAAExT,KAAMrK,EAAAA,EAAAA,QAAAA,cAIlDlB,QAAQwiB,IAAIosC,GAAaM,SAAQ,WAEzB/tD,EAAK8U,OAAS9U,EAAK8U,MAAMk5C,KACzBhuD,EAAKiuD,oBAAoBjuD,EAAK8U,MAAMk5C,KAGxChuD,EAAKorD,SAAU,EACfprD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,aAEjBmuD,EAAaluD,EAAK2M,QAI1B3M,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACpCgB,EAAK+9C,eAAkB/9C,EAAK+9C,cAAcmB,eAC3ClgD,EAAE0E,QAAQg5B,cAIlB18B,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA6B,SAAUf,GAC3CA,EAAEyF,MAAM0pD,mBAAoB,EAE5B,IADA,IAAIC,GAAmB,EACdjsD,EAAI,EAAG+I,EAAMlL,EAAKmqC,WAAW7mC,OAAQnB,EAAI+I,EAAK/I,IACnD,IAAKnC,EAAKmqC,WAAWhoC,GAAGgsD,kBAAmB,CACvCC,GAAmB,EACnB,MAGJA,IACApuD,EAAKmqC,WAAW3iC,SAAQ,SAAU6mD,UACvBA,EAAGF,qBAEdnuD,EAAKkF,mBAAmB1B,EAAAA,EAAAA,QAAAA,OAAkBgE,SAAQ,SAAUnC,GACpDA,EAAEC,aACFD,EAAEE,eAOtB+oD,EAASC,YAAc1jD,eAAgBjL,GAGnC,IAAI4uD,QAAiBlG,EAAa3nD,KAFrBV,KAEgCL,GAC7C,OAAO4D,EAAAA,EAAAA,KAAAA,aAAqBgrD,EAAS15C,QAGzCw5C,EAASG,oBAAsB,WAC3B,OAAOjI,GAGX8H,EAAShH,cAAgBz8C,iBACrB,MAAM7K,EAAOC,KACb,IAAIyuD,EAAOh9C,OAAOY,SAASo8C,KAE3B,GAAIA,GAAQA,EAAKprD,OAAS,EAAG,CAGzB,IAAIs4B,EAFJ8yB,EAAOA,EAAK7nC,OAAO,GAGnB,IACI+U,QAAY8rB,EAAgB,SAAUlkD,EAAAA,EAAAA,KAAAA,aAAqBkrD,IAE/D,MAAOx4C,GACH,IACI0lB,EAAMpK,KAAKC,MAAMjuB,EAAAA,EAAAA,KAAAA,aAAqBkrD,IAE1C,MAAOh1C,GAEH,YADAlW,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,oBAAqBtJ,EAAAA,EAAAA,aAAAA,QASnF,GAJIyD,EAAAA,EAAAA,KAAAA,YAAsD,OAAhCkO,OAAOY,SAASR,KAAKxO,QAC3CE,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,2BAA4BtJ,EAAAA,EAAAA,aAAAA,OAGlF67B,EAAK,CACL,IAAI+yB,GAAe,EAUnB,GARKvvD,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,SAC3C+yB,GAAe,EACf/yB,EAAIxT,IAAMpoB,EAAKJ,QAAQmpC,eAEtB3pC,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,UAC3C+yB,GAAe,EACf/yB,EAAImtB,KAAO/oD,EAAKJ,QAAQsqC,kBAEvB9qC,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,UAK3C,IAAK,IAAIz5B,EAAIy5B,EAAI5Y,OAAO1f,OAAS,EAAGnB,GAAK,EAAGA,IAAK,CAC7C,MAAMuoD,EAAa9uB,EAAI5Y,OAAO7gB,GACzBuoD,IACCtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,MAAQtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,MACxGtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,OAK/CtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,MACtDtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,MACjDtrD,OAAOqB,UAAUC,eAAeC,KAAK+pD,EAAY,OAClDiE,GAAe,EACfnrD,EAAAA,EAAAA,KAAAA,OAAeknD,EAAY,CACvB3rD,EAAG2rD,EAAW3rD,GAAK,EACnB8pB,EAAG6hC,EAAW7hC,IAAK,EACnBogC,EAAGyB,EAAWzB,IAAK,MAXvB0F,GAAe,EACf/yB,EAAI5Y,OAAO1f,OAASs4B,EAAI5Y,OAAO1f,OAAS,QAVhDqrD,GAAe,EACf/yB,EAAI5Y,OAAS,GAsCjB,OAbI5jB,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,SAErCA,EAAI2tB,KAEG3tB,EAAI2tB,IAAIqF,IAA4B,IAAtBhzB,EAAI2tB,IAAIqF,GAAGtrD,QAChCs4B,EAAI2tB,IAAIsF,MAAgC,IAAxBjzB,EAAI2tB,IAAIsF,KAAKvrD,QAC7Bs4B,EAAI2tB,IAAIuF,OAHTH,GAAe,IAQnBA,GACAnrD,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,oBAAqBtJ,EAAAA,EAAAA,aAAAA,OACxE67B,EAEXp4B,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,oBAAqBtJ,EAAAA,EAAAA,aAAAA,SASnF,IAAI4tD,EAAkC,SAAU//C,GACxC29C,GAAqB,IACrBA,EAAoB,EACpBvrD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAEjBwrD,GAAwC,GAGxCqC,EAA4B,SAAUhgD,IACtC29C,GAAwC,IACf,IACrBA,EAAoB,EACpBvrD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,UAIrB,MAAMsJ,EAASrJ,EAAKJ,QAAQyJ,OAE5B7F,EAAAA,EAAAA,KAAAA,eAAuBA,EAAAA,EAAAA,KAAQ6F,GAAS7F,EAAAA,EAAAA,YAAiB,aAAc6F,GAAQ0kD,SAAQ,WAUnF,GANuB,IADP/tD,EAAK2M,IAAIoiD,wBACbv8B,SACR5lB,SAASjB,iBAAiB,aAAanE,SAAQC,GAAOA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,eACxEC,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,cAIvBC,EAAKJ,QAAQgsC,OAAQ,CACrB,IAAIA,EAAS5rC,EAAKJ,QAAQgsC,OAE1B5rC,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CAAExB,IAAKyB,IAEnD,IAAIgvD,EAAa,GACbC,GAAc,EAClB,GAAsB,iBAAXrjB,EAAqB,CAC5B,IAAI95B,EAAO85B,EAAO/hB,OAClB/X,GAAQA,EAAKrI,MAAM,OAAS,GAAK,IAEjCulD,EAAWE,OAASp9C,EAAO,cAC3Bk9C,EAAWG,OAASr9C,EAAO,cAC3Bk9C,EAAWppD,MAAQkM,EAAO,YAC1Bk9C,EAAWzsB,OAASzwB,EAAO,YAC3Bk9C,EAAWv/C,KAAOqC,EAAO,YAKzBm9C,GAAc,OAGd7vD,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,WAC7CxsC,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,WAC7CxsC,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,UAC7CxsC,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,WAC7CxsC,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,SAC7CxsC,OAAOqB,UAAUC,eAAeC,KAAKirC,EAAQ,WAE7CojB,EAAaxrD,EAAAA,EAAAA,KAAAA,OAAe,GAAIooC,IAGhCojB,EAAWv/C,OACXu/C,EAAWv/C,MAAQu/C,EAAWv/C,KAAKhG,MAAM,OAAS,GAAK,KAG3DzJ,EAAK4rC,OAASojB,EAEd,MAAMI,EAAiB,GACjBC,EAAgB,SAAUvjC,EAAQxW,GACpCrV,KAAK6rB,OAASA,EACd7rB,KAAKqV,IAAMA,GAETg6C,EAAU,SAAUp5C,GACtB,IAAK+4C,GAA+B,KAAhB/4C,EAAM4V,OAAe,CACrC,MAAM2V,EAASj+B,EAAAA,EAAAA,IAAAA,IAAWoJ,SAASqL,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,MACvDyD,EAAAA,EAAAA,MACIA,EAAAA,EAAAA,KAAAA,gBAAwBi+B,EAAO7hC,QAAQyJ,OAAQ,kBAC3C,CAAEiM,IAAKY,EAAMZ,MACjB,CAACvV,EAAAA,EAAAA,aAAAA,MAA2BA,EAAAA,EAAAA,aAAAA,OAC5B,mBAAqBmW,EAAMZ,OAIjCi6C,EAAoB,IAAI1wD,SAAQ,SAAUC,EAASk1B,GACjDg7B,EAAWE,OAEXE,EAAe/mD,KAAKuN,MAAMo5C,EAAWE,QAChCvwD,MAAK,SAAUstB,GACZ,IAAKA,EAASkY,GACV,MAAM,IAAIkrB,EAAcpjC,EAASH,OAAQkjC,EAAWE,QAExD,OAAOjjC,EAASoY,UACjB1lC,MAAK,SAAUyF,GACdtF,EAAQsF,EAAKqL,MACb09C,EAAaxsD,KAAKX,EAAMoE,EAAMxE,MAC/BwW,OAAM,SAAUF,GACXA,EAAM4V,QACNwjC,EAAQp5C,GAGZpX,GAAQ,OAIhBA,GAAQ,MAGhBswD,EAAe/mD,KAAKknD,GAEhBP,EAAWppD,OACXwpD,EAAe/mD,KAAK,IAAIxJ,SAAQ,SAAUC,EAASk1B,GAE/Ch0B,EAAK2M,IAAIqxB,UAAUnjB,IAAI,SAMvBjF,MAAMo5C,EAAWppD,MAAO,CAAEsoB,OAAQ,QAC7BvvB,MAAK,SAAUstB,GACZ,IAAKA,EAASkY,GACV,MAAM,IAAIkrB,EAAcpjC,EAASH,OAAQkjC,EAAWppD,OAExD,OAAOqmB,KAEVttB,MAAK,WACF,IAAI6wD,EAAc5iD,SAASC,cAAc,QACzC2iD,EAAYC,IAAM,aAClBD,EAAY19C,KAAOk9C,EAAWppD,MAE9BgH,SAAS8yB,KAAK5yB,YAAY0iD,GAC1B1wD,OAEHsX,OAAM,SAAUF,GACTA,EAAM4V,QACNwjC,EAAQp5C,GAGZpX,WAKZkwD,EAAWG,QACXC,EAAe/mD,KAAK,IAAIxJ,SAAQ,SAAUC,EAASk1B,GAE/Cpe,MAAMo5C,EAAWG,QACZxwD,MAAK,SAAUstB,GACZ,IAAKA,EAASkY,GACV,MAAM,IAAIkrB,EAAcpjC,EAASH,OAAQkjC,EAAWG,QAExD,OAAOljC,EAAS5S,UACjB1a,MAAK,SAAUyF,GAEdmrD,EAAkB5wD,MAAK,SAAU8Q,GACzBA,GAAQpG,GAAU2lD,EAAWv/C,KAC7BjM,EAAAA,EAAAA,KAAAA,eAAsB,EAAMwrD,EAAWv/C,KAAMpG,GAAQ0kD,SAAQ,WAOzD3pD,EAAOA,EAAKoF,QAAQ,gFAND,SAAUkmD,EAAQC,EAAMC,EAAMC,GAC7C,OAAOrsD,EAAAA,EAAAA,KAAAA,gBAAwB6F,EAAQsmD,GAAQC,GAAQC,MAM3D7vD,EAAK2M,IAAImjD,mBAAmB,YAAa1rD,GACzCtF,QAIJkB,EAAK2M,IAAImjD,mBAAmB,YAAa1rD,GACzCtF,WAGTsX,OAAM,SAAUF,GACXA,EAAM4V,QACNwjC,EAAQp5C,GAGZpX,WAKhBD,QAAQwiB,IAAI+tC,GAAgBrB,SAAQ,WAE5BiB,EAAWzsB,OACX3sB,MAAMo5C,EAAWzsB,QACZ5jC,MAAK,SAAUstB,GACZ,IAAKA,EAASkY,GACV,MAAM,IAAIkrB,EAAcpjC,EAASH,OAAQkjC,EAAWzsB,QAExD,OAAOtW,EAASuC,UACjB7vB,MAAK,SAAUoxD,GACd,IAAIC,EAAUn3C,IAAIC,gBAAgBi3C,GAE9BE,EAAgBrjD,SAASC,cAAc,UAC3CojD,EAAcr+C,IAAMo+C,EAEpBC,EAAcpkC,OAAS,WACnBqiC,EAAaluD,EAAK2M,KAClBk5C,KAGJj5C,SAAS8yB,KAAK5yB,YAAYmjD,MAE3B75C,OAAM,SAAUF,GACXA,EAAM4V,QACNwjC,EAAQp5C,GAEZ2vC,OAGRA,YAMRA,OAKR7lD,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACzCkxD,EAAgBlxD,EAAEyF,UAEtBzE,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,MAAmB,WACvB,IAAK,IAAIoC,EAAI,EAAGA,EAAInC,EAAKmqC,WAAW7mC,OAAQnB,IACxC+tD,EAAgBlwD,EAAKmqC,WAAWhoC,OAUxC,IAAIguD,EAAW3sD,EAAAA,EAAAA,MACfA,EAAAA,EAAAA,MAAW,SAAU6V,EAAMzZ,EAAS8hC,GAIhC,GAHIl+B,EAAAA,EAAAA,SAAcmE,QAAQyoD,OACtBzoD,QAAQyoD,QAEPxwD,EAIA,CACD,IAAIywD,EAAM,SAAUh3C,EAAM6Z,EAAMwO,GAC5B,OAAQxO,GACJ,KAAKnzB,EAAAA,EAAAA,aAAAA,MACD,IAAKC,EAAK8tD,MAAoD,YAA3CnmD,QAAQgS,KAAK,6BAChC3Z,EAAK8tD,MAAMz0C,EAAM,CAAEjP,KAAMrK,EAAAA,EAAAA,QAAAA,MAAsBuwD,SAAiC,EAAvB9sD,EAAAA,EAAAA,IAAAA,gBACzD,MACJ,KAAKzD,EAAAA,EAAAA,aAAAA,MACGyD,EAAAA,EAAAA,IAAAA,uBACA+sD,EAAAA,EAAAA,IAAG,iBAAiBC,eAAgB9uB,EAAiB,CACjD,IAAOA,EACP,SAAYroB,GAF8BA,EAG3C,MAEP,MACJ,KAAKtZ,EAAAA,EAAAA,aAAAA,QACL,QACI4H,QAAQuO,MAAMmD,KAI1B,GAAKtY,MAAMC,QAAQpB,GAIf,IAAK,IAAIuC,EAAI,EAAGA,EAAIvC,EAAQ0D,OAAQnB,IAChCkuD,EAAIh3C,EAAMzZ,EAAQuC,GAAIu/B,QAJ1B2uB,EAAIh3C,EAAMzZ,EAAS8hC,QAzBvByuB,EAAS92C,GACTrZ,EAAK8tD,MAAMz0C,EAAM,CAAEjP,KAAMrK,EAAAA,EAAAA,QAAAA,MAAsBuwD,SAAiC,EAAvB9sD,EAAAA,EAAAA,IAAAA,kBAoCrEA,EAAAA,EAAAA,IAAAA,WAAoB,GAEpBA,EAAAA,EAAAA,IAAAA,IAAa,SAAUiE,GACnB,IAAK,IAAItF,EAAI,EAAG+I,EAAM1H,EAAAA,EAAAA,IAAAA,WAAAA,OAA0BrB,EAAI+I,EAAK/I,IAAK,CAC1D,MAAMsuD,EAAWjtD,EAAAA,EAAAA,IAAAA,WAAkBrB,GACnC,GAAIsuD,EAAS9jD,MAAQlF,EACjB,OAAOgpD,IAKnBjtD,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,IAAQA,EAAAA,EAAAA,aAEnB,IAAI0sD,EAAkB,SAAUzrD,GACxBA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MACf0E,EAAMgQ,KAAO,OAQjBi8C,EAAoB,SAAUC,EAAcC,GAC5C,MAAM5wD,EAAOC,KAEb,IAAI4wD,EAAe9vD,MAAMN,UAAUmK,MAAMjK,KAAKgwD,GAAcpyD,KAAI,SAAUkJ,GACtE,IAAI5C,EAAS,GAIb,OAHI4C,IACA5C,EAAO+rD,GAAgBnpD,EAAImpD,IAExB/rD,KAEU,wBAAjB+rD,GAAwCjpD,QAAQC,IAAI,eAAgBipD,GAExE,IAAIC,EAAc,GAKlB,GAJAA,EAAYF,GAAgBptD,EAAAA,EAAAA,IAAOotD,GACnCC,EAAatqD,QAAQuqD,GAGA,eAAjBF,GAAiCC,EAAa,GAAe,WAAG,CAChEC,EAAcD,EAAa,GAE3B,IAAK,IAAI1uD,EAAI,EAAGA,EAAI2uD,EAAY7mB,WAAW3mC,OAAQnB,IACN,iBAA9B2uD,EAAY7mB,WAAW9nC,IAC9BqB,EAAAA,EAAAA,KAAAA,OAAestD,EAAY7mB,WAAW9nC,GAAI+oD,EAAsBvqD,KAAKX,EAAM8wD,EAAY7mB,WAAW9nC,GAAG9C,UAI7GwxD,EAAatqD,SAAQ,GACrBuqD,EAActtD,EAAAA,EAAAA,KAAAA,OAAAA,MAAqBvD,KAAM4wD,GACpB,wBAAjBD,GAAwCjpD,QAAQC,IAAI,cAAekpD,GAG3E,OAAOA,EAAYF,IAGvB,MAAMG,EAAsB,SAAUC,GAkClC,OAhCIA,EAAe3kD,mBAEXtL,MAAMC,QAAQgwD,EAAe3kD,iBAAiB+9B,UAE9C4mB,EAAe3kD,iBAAiB+9B,SAAS5iC,SAASwmD,IAC9C5uD,OAAOD,KAAK6uD,GAAK7oD,QAAQuD,GAAgB,aAARA,IAAoBlB,SAASsB,SAC7BzE,IAAzB2sD,EAAeloD,KACU,kBAAdklD,EAAIllD,KACXklD,EAAIllD,GAAQ,IAEhBtF,EAAAA,EAAAA,KAAAA,OAAewqD,EAAIllD,GAAOkoD,EAAeloD,WAClCkoD,EAAeloD,UAQlC1J,OAAOD,KAAK6xD,GAAgB7rD,QAAO,SAAUuD,GACzC,OAAOtJ,OAAOD,KAAK6xD,EAAe3kD,iBAAiB+9B,UAAUnhC,QAAQP,IAAQ,KAC9ElB,SAAQ,SAAUkB,GACjB,MAAM81C,EAAmBwS,EAAe3kD,iBAAiB+9B,SAAS1hC,GAC1B,kBAA7B81C,EAAiB5+C,UACxB4+C,EAAiB5+C,QAAU,IAE/B4D,EAAAA,EAAAA,KAAAA,OAAeg7C,EAAiB5+C,QAASoxD,EAAetoD,WACjDsoD,EAAetoD,OAK3BsoD,GAGL7D,EAAe,WACjB,MAAM8D,EAAW,EAAC,EAAM,GAAIztD,EAAAA,EAAAA,KAAQ8E,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YAChEpY,EAAS5E,KAAKL,QAAU4D,EAAAA,EAAAA,KAAAA,OAAAA,MAAqBvD,KAAMgxD,GAEzDpsD,EAAOuqB,oBAAsB5rB,EAAAA,EAAAA,IAAAA,oBAAAA,OAAAA,MAAwCA,EAAAA,EAAAA,IAAAA,oBAA4BzC,MAAMN,UAAUlC,IAAIoC,KAAKsc,WAAW,SAAUi0C,GAC3I,OAAOA,EAAI9hC,qBAAuB,OAEtCvqB,EAAOolC,WAAaymB,EAAkB/vD,KAAKV,KAAMgd,UAAW,cAC5DpY,EAAOslC,WAAaumB,EAAkB/vD,KAAKV,KAAMgd,UAAW,cAE5D,MAAMmtB,EAAWrpC,MAAMN,UAAUmK,MAAMjK,KAAKsc,WACvC9X,QAAOgsD,GAAQA,EAAK/mB,WACpB7rC,KAAI4yD,GAAQA,EAAK/mB,WAItB,OAHIA,EAAS9mC,OAAS,IAClBuB,EAAOulC,SAAW5mC,EAAAA,EAAAA,KAAAA,QAAe,EAAMqB,EAAOulC,SAAU2mB,EAAoBvtD,EAAAA,EAAAA,KAAAA,QAAe,EAAM4mC,EAAS,GAAIA,EAAS,OAEpHvlC,GAGX,IAAIypD,EAAW9qD,EAAAA,EAAAA,IAAAA,UAEX4tD,EAAgB,SAAU7yD,EAAKkG,GAC/B,IACI6U,EADA+3C,EAAe,UAAY5sD,EAAM+F,MAAQ,OAAS/F,EAAMyW,MAAQ,OAGhE5B,EADA7U,EAAMqP,mBACG,wBAEA,oBAEbu9C,GAAgB7tD,EAAAA,EAAAA,KAAAA,gBAAwBjF,EAAIqB,QAAQyJ,OAAQiQ,GAC5D9V,EAAAA,EAAAA,MAAS6tD,GACT9yD,EAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOA,EAAO6U,OAAQA,IAE7D,MAAMpD,EAAQjX,MAAMoyD,GAEpB,OADAn7C,EAAMgJ,QAAUza,EAAMpF,GACf6W,GAGXo4C,EAASgD,OAAShD,EAASjnD,OAAS,WAChC,MAAMrH,EAAOC,KAEb,OAAKD,EAAKiH,SAGCjH,EAAKkH,OAAOC,IAFZnH,EAAKmH,KAMpBmnD,EAASiD,OAAS1mD,eAAgB1D,EAAKqxB,GAMnC,aALav4B,KACFmV,cAAc,CAAEjO,IAAKA,IAC5B3D,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAASrxB,GAENA,GAkCXmnD,EAASjE,SAAW,SAAU5lD,EAAO+zB,GACjC,MAAMx4B,EAAOC,KAEP4E,EAAS,IAAIhG,SAAQ,SAAUC,EAAS4W,GAE1C,GAAqB,iBAAVjR,EACP,GAAKA,EAAMpF,GAEN,CAED,MAAMmyD,EAAS,4DAA4Dr/C,KAAK1N,EAAMpF,IAAImyD,OACtFA,EAAY,KAAKA,EAAY,KAC7BhuD,EAAAA,EAAAA,YAAe+U,SAASi5C,EAAY,KAAK,EAAG,CAAE3qB,OAAQ2qB,EAAY,WALtE/sD,EAAMpF,GAAKmE,EAAAA,EAAAA,SAUnB,IAAImpC,EAASloC,EAAM7E,QAAU6E,EAAM7E,QAAQ+sC,OAASloC,EAAMkoC,OAO1D,GANsB,iBAAXA,IACPA,EAASloC,EAAM6qB,QAAU,EAAI,GAGjCtvB,EAAK4rD,aAAa/wC,IAAIpW,EAAMpF,IAAMoF,EAAOkoC,EAAQloC,EAAMuO,QAEnDhT,EAAK4f,SAASnb,EAAMpF,IAAK,CAEzB,MAAM6W,EAAQjX,MAAO,UAASwF,EAAMpF,sBAGpC,OAFA6W,EAAMgJ,QAAUza,EAAMpF,QACtBqW,EAAOQ,GAIX,IAAIqQ,EACiB,iBAAV9hB,EACP8hB,EAAM,IAAIvJ,EAAAA,EAAOxZ,EAAAA,EAAAA,KAAAA,OAAe,GAAI0nD,EAAsBvqD,KAAKX,EAAMyE,GAAQ,CAAElG,IAAKyB,KAGhFyE,aAAiBoO,EAAAA,GACjB0T,EAAM9hB,GACFlG,IAAMyB,GAGVyE,EAAMlG,IAAMyB,EAERumB,EADA9hB,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAC1F,IAAI8xB,EAAAA,EAAOptB,GAGX,IAAIuY,EAAAA,EAAOvY,IAK7B5F,QAAQwiB,IAAI,CAACrhB,EAAKE,KAAKuxD,SAAUlrC,EAAIrmB,KAAK0f,aAAajhB,MAAK,WAKxD,IAAI+I,EAHJ1H,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAA6B,CAAE0E,MAAO8hB,IAI/CxS,EAASwS,MAzFE,SAAU9hB,GACjCA,EAAMvE,KAAK4wB,QAAQxiB,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAU+/B,GACxD,GAAKA,EAAM5pB,MAAMhX,MAAuC,OAA/B4gC,EAAM5pB,MAAMhX,KAAKgkB,YAA6C,WAApB4c,EAAM5pB,MAAMmD,KAAoB,CAC/F,MAAMnZ,EAAOD,KACb,IAAKC,EAAKwxD,eAAgB,CACtB,MAAMv9B,EAAO1vB,EAAMG,UACb4F,EAAQ2pB,EAAK7wB,OAAS6wB,EAAKA,EAAK7wB,OAAS,GAAKmB,EAAM+F,MAC1D/F,EAAMlG,IAAIuvD,MAAMtqD,EAAAA,EAAAA,KAAAA,gBAAwBiB,EAAMlG,IAAIqB,QAAQyJ,OAAQ,iBAC9D,CAAEP,KAAM0B,EAAO0L,MAAO4pB,EAAM5pB,MAAMmD,OAClC,CAAEjP,KAAMrK,EAAAA,EAAAA,QAAAA,QACZG,EAAKwxD,gBAAiB,EACtB,MAAMC,EAAa,SAAU3yD,GACrBA,EAAEuuB,KAAK3b,KAAO5S,EAAEuuB,KAAK3b,MAAQ7R,EAAAA,EAAAA,qBACtBG,EAAKwxD,eACZxxD,EAAK4wB,QAAQziB,IAAItO,EAAAA,EAAAA,MAAAA,SAAuB4xD,KAGhDzxD,EAAK4wB,QAAQxiB,GAAGvO,EAAAA,EAAAA,MAAAA,SAAuB4xD,QAyEvCC,CAAmBrrC,GACnB7e,EAAM1H,EAAKE,KAAK2xD,uBAEP,IAATnqD,IACAA,EAAM1H,EAAKE,KAAK4xD,iBAGpB,MAAMC,EAAa/xD,EAAK8U,OAAS9U,EAAK8U,MAAM3N,IAAMnH,EAAK8U,MAAM3N,IAAMnH,EAAKqH,SACxE7D,EAAAA,EAAAA,YAAe,CACX2D,IAAK4qD,EACLv5B,SAAU,WACN,MAAM5kB,EAAe2S,EAAI3S,aAAam+C,GACtC,GAAIxrC,EAAIvT,OAAQ,CACZ,MAAMg/C,EAAiB,WAYf,IAAIC,GAXJjyD,EAAK8U,MACLyR,EAAInB,UAAYplB,EAAK8U,MAAMi0C,OAASxiC,EAAIlnB,IACpCW,EAAK8U,MAAMi0C,OAASxiC,EAAI3mB,QAAQiiB,cAEU,iBAAlC7hB,EAAKJ,QAAQsqC,iBACzB3jB,EAAInB,UAAYplB,EAAKJ,QAAQsqC,mBAAqB3jB,EAAIlnB,GAER,iBAAlCW,EAAKJ,QAAQsqC,mBACzB3jB,EAAInB,UAAYplB,EAAKJ,QAAQsqC,mBAAqBlqC,EAAKiqC,WAAW3mC,QAElEijB,EAAInB,YAEAmB,EAAIhE,eACHgE,EAAInc,OAASrK,EAAAA,EAAAA,UAAAA,MAA0BwmB,EAAIrmB,KAAKwhB,wBAAwBqwC,GAAY,IAgBrFE,EAAyB,OAAnBjyD,EAAKqvB,UAEX9I,EAAIrmB,KAAK0f,WAAWjhB,MAAK,SAAUsf,GAC/Bje,EAAKE,KAAKiqD,aAAalsC,GACvBje,EAAKqvB,UAAY9I,EAGjB2rC,EAAmBD,GAEnBnzD,EAAQynB,OAxBRA,EAAI3mB,QAAQiiB,eAAiB0E,EAAIxE,iBAEjC/hB,EAAKqqD,SAAS9jC,EAAIxE,oBAAoBpjB,MAAK,SAAUqiB,GACjDhhB,EAAKE,KAAKiqD,aAAanpC,EAAE9gB,KAAKuE,OAC9BzE,EAAKqvB,UAAYrO,EAAE9gB,KAAKuD,OAExByuD,EAAmBD,GAEnBnzD,EAAQynB,MAGZ7Q,EAAO07C,EAAcpxD,EAAMumB,IAmBnCznB,EAAQynB,IAGZ3S,EACAo+C,IAKAzrC,EAAI9Q,wBAAwB9W,MAAK,SAAU2f,GAEvC,GADAiI,EAAItQ,aAAeqI,GACdiI,EAAI3S,aAAam+C,GAClB,GAAIxrC,EAAInc,OAASrK,EAAAA,EAAAA,UAAAA,KACbwmB,EAAIhE,eAAgB,MAEnB,CACD,MAAM4vC,EAAsB5rC,EAAIrmB,KAAKwhB,wBAAwBqwC,GAAY,GACrEI,EACA5rC,EAAIrmB,KAAKoiB,aAAa6vC,GAGtB5rC,EAAIhE,eAAgB,EAIhCyvC,YAKJp+C,EACA2S,EAAIrmB,KAAK0f,WAAWjhB,MAAK,SAAUyzD,GAC/BtzD,EAAQynB,MAMZA,EAAI9Q,wBAAwB9W,MAAK,SAAU2f,GACvCiI,EAAItQ,aAAeqI,EACfiI,EAAI3S,aAAam+C,GACjBxrC,EAAIrmB,KAAK0f,WAAWjhB,MAAK,SAAUyzD,GAC/BtzD,EAAQynB,MAIZ7Q,EAAO07C,EAAcpxD,EAAMumB,aAOpD,SAAUrQ,GACT,IAAIwD,EAAM,IAAIza,MAAMiX,GACpBwD,EAAIwF,QAAUza,EAAMpF,GACpBqW,EAAOgE,SAIf7U,EACKlG,MAAK,SAAUqiB,GACZhhB,EAAK4rD,aAAa9sD,QAAQkB,EAAMghB,EAAGA,EAAEhO,QAChCgO,EAAEhO,QACHhT,EAAKE,KAAKmyD,YAAYrxC,EAAE9gB,KAAKuE,MAAOzE,EAAK4rD,aAAaU,6BAA6BtsD,EAAMghB,EAAE3hB,KAE/FW,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,SAAuB,CAAE0E,MAAOuc,IAC7ChhB,EAAK4rD,aAAaY,aAAaxsD,GAC3BwD,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAASxX,MAEd,SAAUtH,GACT1Z,EAAK4rD,aAAal2C,OAAO1V,EAAM0Z,GAC/B1Z,EAAK4rD,aAAaY,aAAaxsD,MAGvC,MAAMkyD,EAAqB,SAAUD,GAC7BA,GACAjyD,EAAKuqD,UAAUvqD,EAAK+oC,cAAe,CAAEyhB,SAAS,EAAO8H,SAAS,KAGtE,OAAOztD,GAWXypD,EAASxD,iBAAmBjgD,eAAgBpG,EAAO+zB,GAC/C,MACM+5B,EADOtyD,KACa2f,SAASnb,EAAMpF,IACzC,GAAIkzD,EAAc,CAEd,MAAMC,EAAoBzxD,MAAMC,QAAQyD,EAAM2Y,YAAc3Y,EAAM2Y,WAC9D3Y,EAAM2Y,WAAa3Y,EAAM2Y,WAAWhL,MAAM,KAAO,GACrD,OAAQmgD,EAAanoD,MACjB,KAAKrK,EAAAA,EAAAA,UAAAA,IACD,MACJ,KAAKA,EAAAA,EAAAA,UAAAA,IACGwyD,EAAan1C,aAAeo1C,SACtBD,EAAa5xC,cAAc6xC,GAiB7C,OAXwBnuD,MAApBI,EAAM82C,YAA2BgX,EAAahX,aAAe92C,EAAM82C,aACnEgX,EAAaxtD,cAAcN,EAAM82C,YACjCgX,EAAa1H,cAAgBzrD,OAAOmD,OAAOkC,EAAMomD,cAAe,CAAEtlD,KAAMd,EAAM82C,mBAE5Dl3C,IAAlBI,EAAMgP,SAAyB8+C,EAAa9+C,UAAYhP,EAAMgP,UAC9D8+C,EAAa5+C,WAAWlP,EAAMgP,SAAS,GACvC8+C,EAAa1H,cAAgBzrD,OAAOmD,OAAOkC,EAAMomD,cAAe,CAAEp3C,QAAShP,EAAMgP,WAErF8+C,EAAapJ,YAAc1kD,EAAM0kD,YACjCoJ,EAAa/nD,MAAQ/F,EAAM+F,MAC3B+nD,EAAar/C,SAAWzO,EAAMyO,SACvBq/C,EAEX,aA9BatyD,KA8BKoqD,SAAS5lD,EAAO+zB,IAGtC81B,EAASvD,YAAclgD,eAAgBpG,GACnC,MAAMzE,EAAOC,KAEb,GAAIwE,EAAM0kD,YACN,MAAMlqD,MAAM,eAGhB,IAAIy6B,GAAQ,EACZ,IAAK,IAAIv3B,EAAI,EAAGA,EAAInC,EAAKgjB,OAAO1f,OAAQnB,IACpC,GAAInC,EAAKgjB,OAAO7gB,KAAOsC,EAAO,CAC1BzE,EAAKgjB,OAAOha,OAAO7G,EAAG,GACtBu3B,GAAQ,EACR,MAGR,IAAKA,EACD,MAAMz6B,MAAO,SAAQwF,EAAMpF,uBAE/B,GAAIoF,EAAMuO,QACN,IAAK7Q,EAAI,EAAGA,EAAInC,EAAKiqC,WAAW3mC,OAAQnB,IACpC,GAAInC,EAAKiqC,WAAW9nC,KAAOsC,EAAO,CAC9BzE,EAAKiqC,WAAWjhC,OAAO7G,EAAG,GACtBnC,EAAKqvB,YAAc5qB,GACnBzE,EAAKmqD,aAAanqD,EAAKiqC,WAAW,IAEtC,WAIP,CACD,IAAK9nC,EAAI,EAAGA,EAAInC,EAAKmqC,WAAW7mC,OAAQnB,IACpC,GAAInC,EAAKmqC,WAAWhoC,KAAOsC,EAAO,CAC9BzE,EAAKmqC,WAAWnhC,OAAO7G,EAAG,GAC1B,MAGJsC,IAAUzE,EAAKsrD,UACftrD,EAAKsrD,QAAU,MAIvB,MAAM9pC,QAAgB/c,EAAMvE,KAAK0f,WAKjC,OAJA5f,EAAKE,KAAK6qD,YAAYvpC,GACtBxhB,EAAK4rD,aAAa3tB,OAAOx5B,EAAMpF,IAC/BW,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOA,IAChDzE,EAAK4rD,aAAaY,aAAaxsD,GACxByE,GAGX6pD,EAAS+D,YAAcxnD,eAAgBpG,EAAOiD,EAAK8wB,GAC/C,MAAMx4B,EAAOC,KAEb,IADA,IAAIwyD,GAAa,EACRtwD,EAAI,EAAGA,EAAInC,EAAKgjB,OAAO1f,OAAQnB,IACpC,GAAIsC,IAAUzE,EAAKgjB,OAAO7gB,GAAI,CAC1BswD,EAAYtwD,EACZ,MAIR,MAAMuwD,EAAiBjuD,EAAMvE,KAAK0f,WAC5B+yC,EAAc3yD,EAAKgjB,OAAOtb,GAChC,IAAIkrD,EACAD,IACAC,QAAsBD,EAAYzyD,KAAK0f,YAE3C,MAAM4B,QAAgBkxC,EACtB,IAAIG,GAAS,EAsBb,OApBIA,EADAD,EACQ5yD,EAAKE,KAAK4yD,cAAcF,GAGxB5yD,EAAKE,KAAK4xD,kBAET,IACTrtD,EAAMlG,IAAMyB,EACZA,EAAKE,KAAKmyD,YAAY7wC,EAASqxC,GAC3BJ,GAAa,GACbzyD,EAAKgjB,OAAOha,OAAOypD,EAAW,GAElCzyD,EAAKgjB,OAAOha,OAAOtB,EAAK,EAAGjD,GAC3BzE,EAAKmqC,WAAanqC,EAAKgjB,OAAO7d,QAAO,SAAUsC,GAC3C,OAAQA,EAAIuL,UAEhBhT,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOA,EAAOsuD,SAAUN,EAAWO,SAAUtrD,KAErFlE,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,IAEG/zB,GAGX6pD,EAAS2E,cAAgB,SAAUxuD,EAAOiD,GACtC,MACMmrD,EAAQnrD,EADDzH,KACYgqC,WAAW3mC,OAAS,EADhCrD,KAERC,KAAK+yD,cAAcxuD,EAAMvE,KAAKuE,MAAOouD,IAG9CvE,EAAS4E,cAAgB,SAAUzuD,GAC/B,IACIoQ,EADO5U,KACEC,KAAK4xD,gBADP7xD,KAENC,KAAK+yD,cAAcxuD,EAAMvE,KAAKuE,MAAOoQ,EAAI,IAQlDy5C,EAASnE,aAAet/C,eAAgBpG,EAAO+zB,GAC3C,IAAIx4B,EAAOC,KACP4E,EAAS,KACT60B,GAAQ,EAEZ,GAAqB,iBAAVj1B,EAAoB,CAC3B,IAAItC,EACJ,IAAKA,EAAI,EAAGA,EAAInC,EAAKgjB,OAAO1f,OAAQnB,IAChC,GAAInC,EAAKgjB,OAAO7gB,GAAG9C,KAAOoF,EAAO,CAC7BA,EAAQzE,EAAKgjB,OAAO7gB,GACpBu3B,GAAQ,EACR,MAGHA,IACDj1B,EAAQymD,EAAsBvqD,KAAKX,EAAMyE,MAErCA,QAAczE,EAAKqqD,SAAS7mD,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIiB,EAAO,CAAE2gB,WAAW,EAAMpS,QAAQ,EAAMzU,IAAKyB,KAClG05B,GAAQ,QAKZ15B,EAAKgjB,OAAO/Z,QAAQxE,GAAS,IAC7BA,EAAM2gB,WAAY,EAClB3gB,EAAMuO,QAAS,EACfvO,EAAMlG,IAAMyB,EACZA,EAAKqqD,SAAS5lD,IAYlBi1B,GAAQ,EAEZ,GAAKA,EAID,GAAKj1B,EAAMmP,aAAa5T,EAAKqH,WAAe5C,EAAMod,iBAAiBpd,EAAMod,eAAkBpd,EAAMod,cAAcjO,aAAa5T,EAAKqH,WAG5H,CACDrH,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,sBAAoC,CAAEozD,SAAUnzD,EAAKuT,eAAgB+2C,SAAU7lD,IAE5FI,EAASJ,QACHzE,EAAKE,KAAKuxD,SAChB,MAAMjwC,QAAgB/c,EAAMvE,KAAK0f,iBAC3B5f,EAAKE,KAAKiqD,aAAa3oC,GAC7BxhB,EAAKqvB,UAAY5qB,EACjBzE,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAE0E,MAAOA,IAChDjB,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,SAZJh1B,EAAAA,EAAAA,MAAS,uCAJbA,EAAAA,EAAAA,MAAS,+BAoBb,OAAOqB,GAGXypD,EAAS8E,QAAU,SAAU1pB,GACZzpC,KAERypC,KAAOA,EAFCzpC,KAGRuL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2pC,KAAMA,KASlD4kB,EAAS1B,MAAQ,SAAUp0B,GAEnBh1B,EAAAA,EAAAA,KAAAA,WAAmBg1B,KADZv4B,KAEEmrD,QACL5yB,IAHGv4B,KAME+7B,IAAIj8B,EAAAA,EAAAA,MAAAA,SAAuBy4B,KAW5C81B,EAAS10C,OAAS,SAAU4e,GACxB,MAAMx4B,EAAOC,KASb,OARIuD,EAAAA,EAAAA,KAAAA,WAAmBg1B,KACfx4B,EAAKqrD,SACL7yB,IAGAx4B,EAAKg8B,IAAIj8B,EAAAA,EAAAA,MAAAA,QAAsBy4B,IAGhC,IAAI35B,SAAQC,IACXkB,EAAKqrD,SACLvsD,IAGAkB,EAAKg8B,IAAIj8B,EAAAA,EAAAA,MAAAA,QAAsBjB,OAY3CwvD,EAAS+E,aAAe,WACpB,MAAMrzD,EAAOC,KACP4E,EAAS,CAAEolC,WAAY,GAAIE,WAAY,IACzCnqC,EAAKqvB,YACLxqB,EAAOolC,WAAW,GAAKjqC,EAAKqvB,UAAUlb,WAE1C,IAAK,IAAIhS,EAAI,EAAGA,EAAInC,EAAKmqC,WAAW7mC,OAAQnB,IAAK,CAC7C,MAAMsS,EAAOzU,EAAKmqC,WAAWhoC,GAAGgS,UAE5BM,GACA5P,EAAOslC,WAAW5jC,QAAQkO,GAGlC,OAAO5P,GAWXypD,EAASljD,WAAa,SAAUL,EAASnL,GACrC,MAAMI,EAAOC,KAEb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC,MAAM49C,EAAU,SAAUtF,GAGtB,OAFAhuD,EAAKoqC,SAAS/hC,KAAK2lD,GAEZnvD,QAAQC,QAAQkvD,EAAIloB,SAAS9lC,IAC/BrB,MAAK,SAAU8J,GAOZ,OANIulD,EAAIrhD,MACCqhD,EAAIrhD,IAAI80C,YACTzhD,EAAK2M,IAAIG,YAAYkhD,EAAIrhD,MAGjC3M,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAEgL,QAASijD,IAC1CvlD,KAEV2N,OAAM,SAAUsD,GACbhE,EAAOgE,aAAeza,MAAQya,EAAMza,MAAMya,QAGtD,GAAuB,iBAAZ3O,EAAsB,CAC7B,MAAM60C,EAAW70C,EAAQ8b,OAAO,EAAG,GAAGg5B,cAAgB90C,EAAQ8b,OAAO,GAC/D0sC,EAAmBA,IAAMD,EAAQ,IAAI9vD,EAAAA,EAAAA,QAAWo8C,GAAU,KAAMhgD,IAAUjB,KAAKG,GAChF0E,EAAAA,EAAAA,SAAeA,EAAAA,EAAAA,QAAWo8C,GAO3B2T,IANA,OAAkC,KAAe3T,GAAUjhD,MAAK,SAAUW,GACtEkE,EAAAA,EAAAA,QAAWo8C,GAAYtgD,EAAOiP,QAC9BglD,YAQRD,EAAQvoD,GAASpM,MAAK,SAAUqvD,GAC5BlvD,EAAQkvD,UAYxBM,EAASppD,mBAAqB,SAAUsuD,GACpC,MAAMxzD,EAAOC,KACb,IAAI4E,EAAS,GACT+2B,EAAM43B,EACV,GAAwB,iBAAbA,EAAuB,CAC9B,IAAIC,EAAWD,EACXC,EAASxqD,QAAQ,KAAO,IACxBwqD,EAAW,cAAgBA,GAE/B73B,EAAMlqB,OACN,MAAMgiD,EAAaD,EAASrhD,MAAM,KAClC,IAAK,IAAIjQ,EAAI,EAAGA,EAAIuxD,EAAWpwD,SAC3Bs4B,EAAMA,EAAI83B,EAAWvxD,IAChBy5B,GAF8Bz5B,MAe3C,OARIqB,EAAAA,EAAAA,KAAAA,WAAmBo4B,IACnB57B,EAAKoqC,SAAS5iC,SAAQwmD,IACdA,aAAepyB,GACf/2B,EAAOwD,KAAK2lD,MAKjBnpD,GAGXypD,EAASqF,eAAiB,SAAUt0D,GAChC,MAAMW,EAAOC,KACb,IAAK,IAAIkC,EAAI,EAAG+I,EAAMlL,EAAKoqC,SAAS9mC,OAAQnB,EAAI+I,EAAK/I,IAAK,CACtD,MAAM6rD,EAAMhuD,EAAKoqC,SAASjoC,GAC1B,GAAI6rD,EAAI3uD,KAAOA,EACX,OAAO2uD,EAGf,OAAO,MAGXM,EAASlQ,kBAAoB,WACzB,MAAMp+C,EAAOC,KACb,IAAI2zD,EAaJ,OAZI5zD,EAAKJ,QAAQi0D,uBACbD,EAAY5zD,EAAKkF,mBAAmB,cAAgBlF,EAAKJ,QAAQi0D,qBAAqBhtC,OAAO,EAAG,GAAGg5B,cAAgB7/C,EAAKJ,QAAQi0D,qBAAqBhtC,OAAO,IAAI,IAE/J+sC,IAGGA,GAFJA,EAAY5zD,EAAKkF,mBAAmB,+BAA+B,IAEnD0uD,EAAUE,eAGV9zD,EAAKkF,mBAAmB,0BAA0B,IAG/D0uD,GAQXtF,EAASyF,oBAAsB,WAC3B,IAAIlvD,EAAS,KACTmvD,EAAO/zD,KAAKiF,mBAAmB,+BAInC,OAHI8uD,EAAK1wD,SACLuB,EAASmvD,EAAK,IAEXnvD,GAGXypD,EAAS2F,gBAAkB,SAAUr0D,GACjC,MAAMI,EAAOC,KACPgE,EAAO7E,OAAOmD,OAAO,GAAI3C,GACzBs0D,EAAYl0D,EAAKkF,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAA6B,GACvE,OAAI0wD,GACAjwD,EAAKsI,SAAW2nD,EAAU1nD,SAASC,MAC5BynD,EAAU9oD,WAAW,eAAgBnH,IAGrCjE,EAAKoL,WAAW,eAAgBnH,IAY/CqqD,EAAS/D,UAAY,SAAUhvC,EAAQ3b,EAAS44B,GAC5C,OAAOv4B,KAAKC,KAAKqqD,UAAUhvC,EAAQ3b,EAAS44B,IAShD81B,EAAStnC,UAAY,WACjB,OAAO/mB,KAAKC,KAAK8mB,aAGrBsnC,EAAS6F,aAAe,WACpB,OAAOl0D,KAAK+oC,WAAa,MAU7BslB,EAAS8F,UAAY,SAAUl+B,EAAOt2B,GAClC,OAAOK,KAAKC,KAAKk0D,UAAUl+B,EAAOt2B,IAGtC0uD,EAASntD,UAAY,WACjB,OAAOlB,KAAKC,KAAKiB,aAGrBmtD,EAAS+F,YAAc,SAAUC,GAC7Br0D,KAAKC,KAAKm0D,YAAYC,IAG1BhG,EAASiG,YAAc,WACnB,OAAOt0D,KAAKC,KAAKq0D,eAGrBjG,EAASkG,YAAc,WACnB,OAAOv0D,KAAKC,KAAKu0D,eAIrBnG,EAAS3sC,iBAAmB,SAAU/hB,GAClC,MAGM80D,IAFN90D,EAAUA,GAAW,IACEojB,QAFV/iB,KAEyBkqC,WAAW7hC,OAFpCrI,KAEgDovB,YAExDlqB,QAAO,SAAUV,GACd,OAAOA,EAAMsP,cAEhBxV,KAAI,SAAUkG,GACX,OAAOA,EAAMkd,iBAAiB,CAAEK,YAAY,EAAMJ,gBAAiBhiB,EAAQ+0D,sBAE7EC,EAAgBF,EAAS9pD,MAAM,GACrC,OAAO8pD,EAAS,GAAGvvD,QAAO,SAAUsC,GAChC,OAAOmtD,EAAc5/C,OAAM,SAAU6/C,GACjC,OAAOA,EAAQ5rD,QAAQxB,IAAQ,SAK3C6mD,EAASwG,gBAAkBjqD,eAAgBjL,GAEvC,MAAMi1D,GADNj1D,EAAUA,GAAW,IACGi1D,SAAW,GAOnC,IAAIE,SANoBl2D,QAAQwiB,IAAIwzC,EAC/Bt2D,KAAI,SAAU4I,GACX,OAAO3D,EAAAA,EAAAA,kBAAqB,CACxB2D,IAAK3D,EAAAA,EAAAA,KAAAA,WAAmB2D,UAI/BhC,QAAO,SAAU8mB,GACd,MAA2B,OAApBA,EAASH,QAAmBG,EAAS+Z,cAAgB,KAE/DznC,KAAI,SAAU0tB,EAAUlC,EAAOirC,GAC5B,MAAMvwB,EAAWxY,EAASga,QAAQ,GAC5B/mC,EAAO,QAAUulC,EAASvlC,KAOhC,OANAsE,EAAAA,EAAAA,YAAe,CACX2D,IAAKjI,EACLimC,IAAKV,EAASU,IACdr8B,KAAM27B,EAAS37B,KACf4K,OAAQqW,EAAQirC,EAAM1xD,OAAS,IAE5B,CACHpE,KAAMA,EACN4J,KAAM27B,EAAS37B,KACfm8B,MAAOR,EAASQ,MAChBgwB,KAAMxwB,EAASwwB,SAM3B,OAHIr1D,EAAQs1D,UACRH,EAAWA,EAAS3qC,KAAK5mB,EAAAA,EAAAA,KAAAA,oBAA4B5D,EAAQs1D,WAE1DH,GAGXzG,EAASl5C,cAAgB,SAAUxV,GAC/B,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,MAAM46B,EAASx6B,EAAKmH,IACpB,OAAO,IAAItI,SAAQ,SAAUC,EAAS4W,GAClC,IAAI2Z,EACJ,GAAIzvB,EAAQuH,IAAK,CACbnH,EAAKm1D,gBAAiB,EAClBv1D,EAAQyvB,UACRA,EAAYzvB,EAAQyvB,UAEfzvB,EAAQw1D,qBAERp1D,EAAKqvB,UAAUzb,aAAahU,EAAQuH,MAC+B,IAApEnH,EAAKqvB,UAAUnvB,KAAKwhB,wBAAwB9hB,EAAQuH,KAAK7D,OAKpDtD,EAAKqvB,UAAUE,cAAgBvvB,EAAKqvB,UAAUE,YAAY3b,aAAahU,EAAQuH,MACpFnH,EAAKqvB,UAAUE,YAAYrvB,KAAKwhB,wBAAwB9hB,EAAQuH,KAAK7D,OAAS,KAC9E+rB,EAAYrvB,EAAKqvB,UAAUE,aANvBvvB,EAAKqvB,UAAUzvB,QAAQiiB,gBACvBwN,EAAYrvB,EAAKqvB,UAAUtN,qBAQlCsN,IACDA,EAAYrvB,EAAKqvB,WAGrB,MAAMgmC,EAAeA,IAAMr1D,EAAKm1D,gBAAiB,EAE3CG,EAAoBzqD,iBAClBjL,EAAQ2b,cACFvb,EAAKuqD,UAAU3qD,EAAQ2b,SAI/Bg6C,EAAgB1qD,iBAClBwqD,IACAr1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CAAEy6B,OAAQA,EAAQg7B,OAAQ51D,EAAQuH,YACxEmuD,IACNx2D,KAIE22D,EAAW,WACbjyD,EAAAA,EAAAA,YAAe,CACX2D,IAAKvH,EAAQuH,IACbqxB,SAAU,WACN,MAAMpjB,EAAgB,SAAUia,GAE5B,MAAMqmC,EAAiB,WACnB,MAAMC,EAAyBnyD,EAAAA,EAAAA,KAAAA,OAAe,GAAI5D,EAAS,CAAE46B,OAAQx6B,EAAKmH,MACpEyuD,EAAqB,SAAUnxD,GACjCA,EAAM2Q,cAAcugD,IAEpBtmC,EAAUzb,aAAahU,EAAQuH,MAAQkoB,EAAUnvB,KAAKwhB,wBAAwB9hB,EAAQuH,KAAK7D,OAAS,GACpG+rB,EAAUja,cAAcugD,GACxB31D,EAAKE,KAAKkV,cAAc5R,EAAAA,EAAAA,KAAAA,OAAe,GAAI5D,EAAS,CAAEyvB,UAAWA,KACjErvB,EAAKmH,IAAMvH,EAAQuH,IAEnBnH,EAAKiqC,WACA9kC,QAAO,SAAUV,GACd,OAAOA,IAAU4qB,KAEpB7nB,QAAQouD,GAEb51D,EAAKmqC,WAAW3iC,QAAQouD,GACpBvmC,GAAaA,IAAcrvB,EAAKqvB,UAChCrvB,EAAKmqD,aAAa96B,EAAWkmC,GAG7BA,KAGClmC,EAAUxN,cACfzM,EAAcia,EAAUxN,gBAExBwzC,IACA3/C,EAAOzW,MAAM,4BAIjBowB,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBsvB,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAC9DsvB,EAAU5V,yBAAyB9a,KAAK+2D,GAAgBt/C,MAAMi/C,GAE9DK,KAIRtgD,EAAcia,OAKtBrvB,EAAKiqC,WAAWhhC,QAAQomB,GAAa,EACrCrvB,EAAKqqD,SAASh7B,GAAW1wB,KAAK82D,GAAUr/C,MAAMi/C,GAE9CI,SAMhBnH,EAAS3rC,iBAAmB,WACxB,OAAO1iB,KAAKC,KAAKyiB,oBASrB2rC,EAASuH,uBAAyB,SAAUC,GACxC,OAAO71D,KAAKC,KAAK21D,uBAAuBC,IAS5CxH,EAASyH,uBAAyB,SAAU7/B,GACxC,OAAOj2B,KAAKC,KAAK61D,uBAAuB7/B,IAa5Co4B,EAASlB,eAAiB,SAAUr+C,EAAUnP,GAC1C,MAAMI,EAAOC,KACb,GAAI8O,EAASzL,OAAS,EAAG,CACrB,IAAI0yD,EACJ,MAAMzL,EAAYA,KACdyL,EAAS,CAACC,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GAC1C,IAAIhyD,EAAOrE,GAAW,GACtBqE,EAAKquD,SAAU,EACf,IAAIzxD,EAASoD,EAAKilC,mBAAqBlpC,EAAKJ,QAAQspC,kBACpDroC,GAAkBb,EAAK2iB,mBACvB,IAAIwmB,EAAellC,EAAKklC,aACI,iBAAjBA,IACPA,EAAenpC,EAAKJ,QAAQupC,cAEhC,IAAK,IAAIhnC,EAAI,EAAGA,EAAI4M,EAASzL,OAAQnB,IAAK,CACtC,IAAIkoB,EAAItb,EAAS5M,GAAGuD,YAChB2kB,IACA2rC,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAI3rC,EAAE,KAW1C,GARI2rC,EAAO,GAAKA,EAAO,IAAO,IAC1BA,EAAO,GAAKA,EAAO,GAAKn1D,EACxBm1D,EAAO,GAAKA,EAAO,GAAKn1D,GAExBm1D,EAAO,GAAKA,EAAO,IAAO,IAC1BA,EAAO,GAAKA,EAAO,GAAKn1D,EACxBm1D,EAAO,GAAKA,EAAO,GAAKn1D,GAExBsoC,EAAc,CACd,IAAI2Z,GAAMkT,EAAO,GAAKA,EAAO,IAAM7sB,EAAe,EAC9C4Z,GAAMiT,EAAO,GAAKA,EAAO,IAAM7sB,EAAe,EAClD6sB,EAAO,GAAKA,EAAO,GAAKlT,EACxBkT,EAAO,GAAKA,EAAO,GAAKjT,EACxBiT,EAAO,GAAKA,EAAO,GAAKlT,EACxBkT,EAAO,GAAKA,EAAO,GAAKjT,EAExB/iD,EAAKgpC,YACLgtB,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAIh2D,EAAKgpC,UAAU,IAC/CgtB,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAIh2D,EAAKgpC,UAAU,IAC/CgtB,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAIh2D,EAAKgpC,UAAU,IAC/CgtB,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAIh2D,EAAKgpC,UAAU,KAEnDhpC,EAAKuqD,UAAUyL,EAAQ/xD,IAEvBjE,EAAKm1D,eACLn1D,EAAKg8B,IAAIj8B,EAAAA,EAAAA,MAAAA,iBAA+BwqD,GAGxCA,IAGAvqD,EAAKiH,UACLjH,EAAKk2D,YAAY,CAAE36C,OAAQy6C,MAKvC1H,EAAS4H,YAAc,SAAUt2D,GAC7B,MAAMI,EAAOC,KAIb,GAFAL,EAAUA,GAAW,GAEjBI,EAAKiH,UAAYrH,EAAQ2b,QAAoC,IAA1B3b,EAAQ2b,OAAOjY,OAElD,GAAI1D,EAAQu2D,YACRn2D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,OAAqBH,OAC/B,CACH,IAAI2b,EAAS3b,EAAQ2b,OACjB66C,EAAWp2D,EAAKkH,OAAOmvD,YAAcr2D,EAAKkH,OAAOC,IACjD3D,EAAAA,EAAAA,KAAAA,UAAkB+X,EAAO3Q,MAAM,EAAG,GAAI5K,EAAKkH,OAAOmvD,UAAWr2D,EAAKkH,OAAOC,KACzEoU,EAAO3Q,MAAM,EAAG,GAEhB0rD,EAAYt2D,EAAKkH,OAAOmvD,YAAcr2D,EAAKkH,OAAOC,IAClD3D,EAAAA,EAAAA,KAAAA,UAAkB+X,EAAO3Q,MAAM,GAAI5K,EAAKkH,OAAOmvD,UAAWr2D,EAAKkH,OAAOC,KACtEoU,EAAO3Q,MAAM,GAEjBhL,EAAQ2b,OAAS66C,EAAS9tD,OAAOguD,GAEjCt2D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,OAAqBH,KAU9C0uD,EAASiI,cAAgB,SAAU32D,GAC/B,IAAII,EAAOC,KACXpB,QAAQwiB,IAAIrhB,EAAK2rD,iBAAiBhtD,MAAK,WAEnC,IADA,IAAI63D,EAAU,GACLr0D,EAAI,EAAGA,EAAInC,EAAKmqC,WAAW7mC,OAAQnB,IAAK,CAC7C,IAAIsC,EAAQzE,EAAKmqC,WAAWhoC,GAC5B,GAAIsC,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,OACf,IAAK,IAAIwX,EAAI,EAAGA,EAAI9S,EAAMsK,SAASzL,OAAQiU,IAAK,CAC5C,IAAI7T,EAAUe,EAAMsK,SAASwI,GACzB7T,aAAmBgM,EAAAA,GACnB8mD,EAAQnuD,KAAK3E,IAM7B1D,EAAKotD,eAAeoJ,EAAS52D,GAC7BI,EAAK2rD,gBAAkB,OAI/B2C,EAASmI,YAAc,SAAUhyD,EAAO7E,GACpC,MAAMI,EAAOC,KAEb,IADAwE,EAAQzE,EAAK4f,SAASnb,IACZsP,WAAY,CAClB,MAAMwH,EAAS9W,EAAMuiB,YACjBzL,KACA3b,EAAUA,GAAW,IACb0yD,SAAU,EACkB,iBAAzB1yD,EAAQupC,eACfvpC,EAAQupC,aAAenpC,EAAKJ,QAAQupC,cAExCnpC,EAAKuqD,UAAUhvC,EAAQ3b,GAEnBI,EAAKiH,UACLjH,EAAKk2D,YAAY,CAAE36C,OAAQA,EAAQ46C,aAAa,UASpD1xD,EAAMsK,UAAYtK,EAAMsK,SAASzL,QACjCtD,EAAKotD,eAAe3oD,EAAMsK,SAAUnP,IAWhD0uD,EAAS1uC,SAAW,SAAUnb,GAC1B,MAAMzE,EAAOC,KACb,MAAqB,iBAAVwE,EACAzE,EAAKgjB,OAAOna,MAAKmY,GAAKA,EAAE3hB,KAAOoF,KAAU,KAEhDA,aAAiBoO,EAAAA,GAASpO,EAAMlG,MAAQyB,EACjCyE,EAEJ,MAGX,IAAIiyD,EAAc,SAAUn4D,GACxB,IAAIsG,EAaJ,OAZKtG,EAAI+sD,QAULzmD,EAAShG,QAAQC,QAAQP,EAAI+sD,UAT7BzmD,EAAStG,EAAI8rD,SAAS,CAClBhrD,GAAImE,EAAAA,EAAAA,SAAagH,MAAOhH,EAAAA,EAAAA,KAAQjF,EAAIqB,QAAQyJ,QAAQstD,YAAavsD,KAAMrK,EAAAA,EAAAA,UAAAA,SAE3ExB,EAAI+sD,QAAUzmD,EACdA,EAAOlG,MAAK,SAAU2sD,GAClB/sD,EAAI+sD,QAAUA,MAMfzmD,GAWXypD,EAAS74B,SAAW,SAAUS,EAAOt2B,GAEjC,GAAIA,GAAWA,EAAQ6E,MAAO,CAC1B,IAAIA,EAFGxE,KAEU2f,SAAShgB,EAAQ6E,OAClC,IAAIA,EAIA,MAAM,IAAIxF,MAAM,UAAYW,EAAQ6E,MAAQ,eAH5CA,EAAMgxB,SAASS,EAAO1yB,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAI5D,EAAS,CAAE6E,MAAOA,UAOrEiyD,EAXOz2D,MAWWtB,MAAK,SAAU2sD,GAC7BA,EAAQ71B,SAASS,EAAOt2B,OAapC0uD,EAASr4B,UAAYprB,eAAgBqrB,EAAOt2B,EAAS44B,GACjD,MAAMx4B,EAAOC,KAQb,IAAI22D,EACJ,GARIpzD,EAAAA,EAAAA,KAAAA,WAAmB5D,IACnB44B,EAAW54B,EACXA,EAAU,IAGVA,EAAUA,GAAW,GAGrBA,GAAWA,EAAQ6E,MAAO,CAC1B,IAAIA,EAAQzE,EAAK4f,SAAShgB,EAAQ6E,OAClC,IAAIA,EAIA,MAAM,IAAIxF,MAAM,UAAYW,EAAQ6E,MAAQ,eAH5CmyD,EAAgBnyD,EAAMwxB,UAAUC,EAAO1yB,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAI5D,EAAS,CAAE6E,MAAOA,SAMrF,CAED,MAAMoyD,EAAiBH,EAAY12D,GACnCA,EAAK2rD,gBAAgBtjD,KAAKwuD,GAE1BD,SADsBC,GACE5gC,UAAUC,EAAOt2B,GAE7CI,EAAK2rD,gBAAgBtjD,KAAKuuD,GAC1B,MAAMl7B,QAAek7B,EAIrB,OAHIpzD,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAASkD,GAENA,GAWX4yB,EAAS73B,YAAc,SAAU92B,EAAQC,GAErC,GAAIA,GAAWA,EAAQ6E,MAAO,CAC1B,IAAIA,EAFGxE,KAEU2f,SAAShgB,EAAQ6E,OAClC,IAAIA,EAIA,MAAM,IAAIxF,MAAM,UAAYW,EAAQ6E,MAAQ,eAH5CA,EAAMgyB,YAAY92B,EAAQ6D,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAI5D,EAAS,CAAE6E,MAAOA,UAOzEiyD,EAXOz2D,MAWWtB,MAAK,SAAU2sD,GAC7BA,EAAQ70B,YAAY92B,EAAQC,OAcxC0uD,EAASr3B,WAAa,SAAUt3B,EAAQC,GAEpC,GAAIA,GAAWA,EAAQ6E,MAAO,CAC1B,IAAIA,EAFGxE,KAEU2f,SAAShgB,EAAQ6E,OAClC,IAAIA,EAIA,MAAM,IAAIxF,MAAM,UAAYW,EAAQ6E,MAAQ,eAH5CA,EAAMwyB,WAAWt3B,EAAQ6D,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAI5D,EAAS,CAAE6E,MAAOA,UAOxEiyD,EAXOz2D,MAWWtB,MAAK,SAAU2sD,GAC7BA,EAAQr0B,WAAWt3B,EAAQC,OAKvC0uD,EAASwI,eAAiB,SAAU/nD,GACnB9O,KAERkqC,WACAhlC,QAAOkpD,GAAMA,aAAcx8B,EAAAA,IAC3BtzB,KAAI,SAAUkG,GACX,MAAO,CACHA,MAAOA,EACPsK,SAAUtK,EAAMsK,SAAS5J,QAAO6J,GAAKD,EAASkpB,SAASjpB,SAG9DxH,SAAQuvD,GAAMA,EAAGhoD,SAASvH,SAAQwH,GAAK+nD,EAAGtyD,MAAMszB,cAAc/oB,QAIvEs/C,EAAS/6C,aAAe,WACpB,OAAOtT,KAAKovB,WAAapvB,KAAKgqC,WAAW,IAG7CqkB,EAASn5C,eAAiB,WACtB,OAAOlV,KAAKC,KAAKiV,kBAGrBm5C,EAAS5rC,cAAgB,WACrB,OAAOziB,KAAKC,KAAKwiB,iBAGrB4rC,EAAS0I,cAAgB,SAAU5S,GAC/B,OAAOnkD,KAAKC,KAAK82D,cAAc5S,IAGnCkK,EAAS2I,eAAiBpsD,eAAgBkE,EAAUnP,GAChD,IAAII,EAAOC,KACXL,EAAUA,GAAW,GACrB,MAAMs3D,EAAmBnoD,EAAS5J,QAAO6J,IAAMA,EAAEpP,QAAQu3D,WACzD,IAAIC,EAAap3D,EAAK+zD,sBAClBsD,EAASD,GAAcA,EAAW/P,UAGtC,MAAMiQ,EAAY13D,EAAQqT,SAAWlT,EAAAA,EAAAA,OAAAA,IAAoB6nB,OAAO2vC,IAAM,EACtEL,EAAiB1vD,SAAQ,SAAU9D,EAASgE,GAExC,MAAMtD,EAAOV,EAAQM,UACrB,IAAK,IAAI0E,KAAOtE,EACZ,GAAI,oBAAoB89B,KAAKx5B,GAAM,CAC/B,MAAM5F,EAAQsB,EAAKsE,GACb8uD,EAAU,GACV/vD,EAAMmF,SAASC,cAAc,OACnCpF,EAAI2F,UAAY1E,EAChB8uD,EAAQ/vD,EAAIgwD,WAAa30D,EACzBY,EAAQqF,UAAUL,GAClBhF,EAAQK,QAAQyzD,GAIxB,IAAIE,EAAah0D,EAAQhC,UAAU,CAAE0O,YAAY,IACjD,GAAIsnD,EAAWt8C,MAAK,SAAUka,GAC1B,OAAoB,OAAbA,EAAM,MACb,CACA,MAAMqiC,EAAaj0D,EAAQ+G,QAC3BktD,EAAWxzD,MAAMT,EAAQrE,IACzB63D,EAAiBxvD,GAAOhE,EAAUi0D,GAClCD,EAAah0D,EAAQhC,UAAU,CAAE0O,YAAY,KAClC5I,SAAQ,SAAU8tB,GACR,OAAbA,EAAM,KACNA,EAAM,GAAKgiC,UAK3B,MAAMrkD,EAASrT,EAAQqT,QAAU,GAC3B2kD,EAAe,SAAUC,EAAUn0D,GACrC,MAAMo0D,EAAOp0D,EAAQhE,YACrB,IAAIq4D,EAAcF,EAASp5C,IAAIq5C,GAM/B,OALKC,IACDA,EAAc,GACdF,EAAS94C,IAAI+4C,EAAMC,IAEvBA,EAAY1vD,KAAK3E,GACVm0D,GAEX,GAAI5kD,IAAWlT,EAAAA,EAAAA,OAAAA,UAAyB,CACpC,MAAMi4D,EAAkB,aAIlBh1C,EAASk0C,EAAiBhvD,QAAO,SAAU+vD,EAAIv0D,GACjD,IAAIrE,EAAKqE,EAAQrE,GAAGwnB,OAAO,EAAGnjB,EAAQrE,GAAGs0B,YAAY,MAQrD,OANKt0B,GAAMqE,EAAQI,SAAWJ,EAAQI,QAAQR,SAC1CjE,EAAKqE,EAAQI,QAAQJ,EAAQI,QAAQR,OAAS,KAC7CjE,GAAMqE,EAAQe,OAASf,EAAQe,MAAM+F,QACtCnL,EAAKqE,EAAQe,MAAM+F,MAAMqc,OAAO,EAAGnjB,EAAQe,MAAM+F,MAAMmpB,YAAY,QAEtEskC,EAAG54D,GAAM44D,EAAG54D,IAAO,IAAIgJ,KAAK3E,GACtBu0D,IACR,IAEGC,EAAe,SAAUx4D,GAE3B,QAAQ,GACJ,KAAKA,IAAgBiQ,EAAAA,EACrB,KAAKjQ,IAAgBgQ,EAAAA,EACjB,MAAO,QACX,KAAKhQ,IAAgB4C,EAAAA,EACrB,KAAK5C,IAAgBwQ,EAAAA,EACjB,MAAO,UACX,KAAKxQ,IAAgBuR,EAAAA,EACrB,KAAKvR,IAAgBmR,EAAAA,EACjB,MAAO,WAEf,MAAO,QAELg1B,QAAariC,EAAAA,EAAAA,kBAAqB,CAAE2D,IAAKnH,EAAKmH,MAE9C6xB,EAAc,GACdm/B,SAAkB,6DAAyC5pD,QACjE,IAAI2Q,EACJ,IAAKA,KAAW8D,EAAQ,CAELA,EAAO9D,GAAShX,OAAO0vD,EAAc,IAAI19C,KACjD1S,SAAQ,SAAuBuwD,EAAar4D,EAAa04D,GAC5Dp/B,EAAY3wB,KAAK,IAAIxJ,SAAQ,SAAUC,GACnC,MAAMsF,EAAO2zD,EAAY7vD,QAAO,SAAU+Z,EAAMkhB,GAC5C,MAAM/+B,EAAO,GACb,IAAK,IAAIsE,KAAOy6B,EAAK/+B,KAAM,CACvB,MAAM6D,EAAMk7B,EAAK/+B,KAAKsE,GACtBtE,EAAKsE,GAAsB,iBAART,EACfA,EAAIuB,QAAQ,KAAM,UAAUA,QAAQ,KAAM,YAC1CvB,EAIR,OAFIk7B,EAAK/8B,WAAWomC,QAAUrJ,EAAK/+B,KAAK0E,OACpC1E,EAAK0E,KAAOq6B,EAAK/8B,WAAWomC,OACzBvqB,EAAK3Z,OAAO,CAAClE,MACrB,IACGi0D,EAAaN,EAAY7vD,QAAO,SAAU+Z,EAAMkhB,GAMlD,OAJIA,aAAgBlyB,EAAAA,IAChBkyB,EAAO,IAAItyB,EAAAA,EAAcsyB,EAAKzhC,YAAayhC,EAAKvjC,UAG7CqiB,EAAK3Z,OAAO,CAAC66B,EAAK5iC,aAC1B,IAEH43D,EAASG,MAAMl0D,EACT8zD,EAAax4D,GACb24D,GACA,SAAUE,EAAQtsD,GAChB,MAAMusD,EAAWt5C,GAAWk5C,EAAQtjC,KAAO,EAAI,IAAMojC,EAAax4D,GAAe,IACjFZ,EAAQ,CAAE,SAAY05D,EAAU,QAAWvsD,cAM/D,MAAMwsD,EAAW,GACjB,IAAK,IAAIt2D,EAAI,EAAGA,EAAI62B,EAAY11B,OAAQnB,IACpCs2D,EAASt2D,SAAW62B,EAAY72B,GAIpC,MACMu2D,EAAM,IAAIC,SADK,6CAAiBpqD,SAEtCkqD,EAASjxD,SAAQ1I,IACb45D,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQ15D,EAAQmN,QAAQ2sD,IAAIC,QACxDH,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQ15D,EAAQmN,QAAQ6sD,IAAID,QACxDH,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQ15D,EAAQmN,QAAQ8sD,IAAIF,QACxDH,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQ3yB,EAAKI,QAAQ,GAAG+yB,KACpDN,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQR,GACpCU,EAAIrQ,KAAKvpD,EAAQ05D,SAAW,OAAQR,MAExC,IACI,MAAMxpC,QAAakqC,EAAIO,cAAc,CAAE7uD,KAAM,SAE7C,OADAgtD,GAAcA,EAAW5P,WAAW6P,GAC7B7oC,EAEX,MAAO9U,GAEH,MADA09C,GAAcA,EAAW5P,WAAW6P,GAC9B39C,GAGd,GAAIzG,IAAWlT,EAAAA,EAAAA,OAAAA,WAA0B,CACrC,MAAMm5D,EAAgB,SAAUC,EAAYr2D,GACxC,IAAIgG,EAAO,GACX,cAAehG,GACX,IAAK,SAYL,QACIgG,EAAOqwD,EAAWC,UAAUC,WAVhC,IAAK,SAEGvwD,EADAhG,EAAQ,GAAM,EACPq2D,EAAWC,UAAUE,IAErBH,EAAWC,UAAUG,MAChC,MACJ,IAAK,UACDzwD,EAAOqwD,EAAWC,UAAUI,QAMpC,OAAO1wD,GAELipD,EAAa/xD,EAAKmH,UAClB3D,EAAAA,EAAAA,QAAWkO,OAAOynD,WAAY31D,EAAAA,EAAAA,YAAiB,+CACrD,MAAM21D,EAAaznD,OAAOynD,WACpBM,SAAa,4DAAelrD,QAE5BmrD,EAAgBP,EAAWQ,cAC3BC,EAAgBT,EAAWS,cAC3BC,EAAkBV,EAAWU,gBAC7BC,QAAkBJ,EAAcpzB,SAEtC,IAAIyzB,EAAShI,EAAWlrC,OAAOkrC,EAAW9oD,QAAQ,KAAO,GACzD,IAAK6wD,EAAUE,0BAA0BC,WAAWF,GAAS,CACzD,IAAIG,EAASJ,EAAUE,0BAA0BG,eAC7C11B,QAAiBjhC,EAAAA,EAAAA,kBAAqB,CAAE2D,IAAK4qD,IACjDmI,EAAOE,SAAWrI,EAClBmI,EAAOH,OAASt1B,EAASwB,QAAQ,GAAG/mC,KACpCg7D,EAAOG,aAAetI,EAAWlrC,OAAO,EAAGkrC,EAAW9oD,QAAQ,MAC9DixD,EAAOI,yBAA2B71B,EAASwB,QAAQ,GAAG/mC,KACtDg7D,EAAOK,WAAa91B,EAASwB,QAAQ,GAAGhB,MAAMpb,OAC9CqwC,EAAOM,kBAAoB/1B,EAASwB,QAAQ,GAAG+yB,IAAInvC,OACnDqwC,EAAOO,YAAch2B,EAASwB,QAAQ,GAAGn9B,KACzCgxD,EAAUE,0BAA0B1zB,OAAO4zB,GAI/C,MAAMl3C,EAASk0C,EAAiBhvD,QAAO,SAAU+vD,EAAIv0D,GACjD,IAAIrE,EAA2B,iBAAfqE,EAAQrE,GAAkBqE,EAAQrE,GAAGwnB,OAAO,EAAGnjB,EAAQrE,GAAGs0B,YAAY,MAAQ/zB,EAAQ44D,SAGtG,OADCP,EAAG54D,GAAM44D,EAAG54D,IAAO,IAAIgJ,KAAK3E,GACtBu0D,IACR,IACH,IAAI/4C,EAkHA9a,EAjHJ,IAAK8a,KAAW8D,EAAQ,CAEpB,MAAMwuC,EAASxuC,EAAO9D,GAAShX,OAAO0vD,EAAc,IAAI19C,KACxD,IAAK,IAAI69C,KAAevG,EAAOpjC,SAAU,CAGrC,IAEImH,EAFApzB,EAAI,EAGR,MAAMu4D,EAAe3C,EAAY,GACjC,QAAQ,GACJ,KAAK2C,aAAwBzpD,EAAAA,EACzBskB,EAAe,aACf,MACJ,KAAKmlC,aAAwB7pD,EAAAA,EACzB0kB,EAAe,kBACf,MACJ,KAAKmlC,aAAwBhrD,EAAAA,EAC7B,KAAKgrD,aAAwB/qD,EAAAA,EACzB4lB,EAAe,QACf,MACJ,KAAKmlC,aAAwB7qD,EAAAA,EAC7B,KAAK6qD,aAAwB5qD,EAAAA,EACzBylB,EAAe,aACf,MACJ,KAAKmlC,aAAwBp4D,EAAAA,EACzBizB,EAAe,UACf,MACJ,KAAKmlC,aAAwBxqD,EAAAA,EACzBqlB,EAAe,eAGvB,MAAMolC,EAAYz7C,GAAWsyC,EAAO18B,KAAO,EAAI,IAAMS,EAAe,IACpE,IAAIqlC,EAAU,GAEVC,EAAe,MAEfz7D,OAAOqB,UAAUC,eAAeC,KAAKu2D,EAAiB,GAAI,OAC1D93D,OAAOqB,UAAUC,eAAeC,KAAKu2D,EAAiB,GAAI,QAC1D0D,EAAQvyD,KAAKuxD,EAAckB,uCAAuC34D,IAAK04D,IAE3ED,EAAQvyD,KAAKuxD,EAAcmB,qBAAqB54D,IAAK,WAAYozB,EAAasqB,eAAe,EAAM,OAGnG,IADA,IAAImW,EAAS,CAACC,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GACrC1+C,EAAI,EAAGA,EAAIwgD,EAAYz0D,OAAQiU,IAAK,CACzC,IAAI8S,EAAI0tC,EAAYxgD,GAAG7R,YACnB2kB,IACA2rC,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAKqa,IAAIm6C,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAI3rC,EAAE,IAClC2rC,EAAO,GAAKx0D,KAAK4K,IAAI4pD,EAAO,GAAI3rC,EAAE,KAI1C,IAAK,IAAIuD,KAAK8sC,EAAat2D,MAAQs2D,EAAa/xD,WAAY,CACxD,IAAIqyD,EAAYN,EAAa/xD,YAAc+xD,EAAa/xD,WAAWilB,GAAK8sC,EAAa/xD,WAAWilB,GAAG9kB,KAAO8kB,EAC1G,GAAgC,OAA5BotC,EAAU3sC,cAAwB,SACtC,IAAI4sC,EAAaP,EAAat2D,KAAK42D,GACnC,MAAMvyD,EAAImxD,EAAcsB,aAAa/4D,IAAK64D,EAAW9B,EAAcC,EAAY8B,IAC/EL,EAAQvyD,KAAKI,GAIjB,GAAIsvD,EAAY38C,MAAKpM,GAAKA,EAAE5I,WAAWomC,QAAUx9B,EAAE5K,KAAK0E,OAAO,CAC3D,MAAML,EAAImxD,EAAcsB,aAAa/4D,IAAK,OAAQg3D,EAAWC,UAAUC,MACvEuB,EAAQvyD,KAAKI,GAIjB,IAAI0yD,EAAkB,IAAItB,EAC1BsB,EAAgBC,WAAaT,EAC7BQ,EAAgBE,YAAc,WAC9BF,EAAgBG,mBAAqB/lC,EAAasqB,cAClDsb,EAAgBxtC,EAAI+sC,EAAaa,oBACjCJ,EAAgB/V,EAAI,EACpB+V,EAAgBpB,OAASA,EACzB53D,EAAI,EACJ,MAAMsmB,EAAc,IAAI0wC,EAAW7xC,YAAY0uC,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,UACjF8D,EAAU0B,mBAAmBb,EAAWQ,EAAiBP,EAASnyC,EAAasxC,GAErF,MAAM0B,EAAa3B,EAAU4B,cAAcf,GAC3C,IAAK,IAAIx4D,EAAI,EAAGA,EAAI41D,EAAYz0D,OAAQnB,IAAK,CACzC,MAAMuB,EAAUq0D,EAAY51D,GACtBw5D,EAAaF,EAAWG,SACxBC,EAAe,IAAI1C,EAAW2C,aACpCD,EAAaE,SAAShC,GACtB,MAAMx5D,EAAWk5D,EAAI5X,SAASpwB,MAAM,QAAUsoC,EAAS,KAAM,IAAIn0B,GAAG3yB,OAAO0nC,KAAMqhB,aAAat4D,EAAQxD,KAAKwD,UAU3G,IAAK,IAAImqB,KARTguC,EAAa/zD,YAAYvH,GACzBo7D,EAAWM,uBAAuBN,EAAWO,eAAepzD,KAAM+yD,IAC9Dz8D,OAAOqB,UAAUC,eAAeC,KAAK+C,EAAS,OAC9CtE,OAAOqB,UAAUC,eAAeC,KAAK+C,EAAS,OAEzCtE,OAAOqB,UAAUC,eAAeC,KAAK+C,EAAQU,KAAM,OACxDhF,OAAOqB,UAAUC,eAAeC,KAAK+C,EAAQU,KAAM,QAFnDu3D,EAAWM,uBAAuBpB,EAAoC,iBAAfn3D,EAAQrE,GAAkBqE,EAAQrE,GAAG+5B,UAAU11B,EAAQrE,GAAGs0B,YAAY,KAAO,GAAKjwB,EAAQrE,IAIvIqE,EAAQU,MAAQV,EAAQiF,WAAY,CAC9C,MAAMqyD,EAAYN,EAAa/xD,YAAc+xD,EAAa/xD,WAAWklB,GAAK6sC,EAAa/xD,WAAWilB,GAAG9kB,KAAO+kB,EAC5G,GAAgC,OAA5BmtC,EAAU3sC,cACV,SAEJ,MAAM4sC,EAAav3D,EAAQU,KAAK42D,GAChCW,EAAWM,uBAAuBjB,EAAWC,GAE7CQ,EAAWb,QAAQ3xD,QAAQ,SAAW,IAAMvF,EAAQU,KAAK0E,MACzD6yD,EAAWM,uBAAuB,OAAQv4D,EAAQ0C,WAAWomC,OAGjEivB,EAAWn1B,OAAOq1B,KAO9B,IAGI,OAFAv3D,QAAa01D,EAAUqC,SACvB/E,GAAcA,EAAW5P,WAAW6P,GAC7BjzD,EAEX,MAAO8R,GACHvO,QAAQC,IAAIsO,GACZkhD,GAAcA,EAAW5P,WAAW6P,GAExC,OAEJ,MAAMjzD,EAAOpE,EAAKE,KAAK+2D,eAAeC,EAAkBt3D,GAClDg0B,EAAW7zB,EAAAA,EAAAA,SAAgBH,EAAQqT,QACzC,GAAIA,IAAWlT,EAAAA,EAAAA,OAAAA,IAAmB,CAC9B,MACM24D,EAAM,IAAIC,SADK,6CAAiBpqD,SAEtCmqD,EAAIrQ,MAAMzoD,EAAQ44D,UAAY,OAAS,OAAQp0D,GAC/C,MAAMoqB,QAAakqC,EAAIO,cAAc,CAAE7uD,KAAM,OAAQwpB,SAAUA,EAAUwoC,YAAa,YAEtF,OADAhF,GAAcA,EAAW5P,WAAW6P,GAC7B7oC,EAIP,OADA4oC,GAAcA,EAAW5P,WAAW6P,GAC7BjzD,GAIfkqD,EAAS+N,oBAAsB,WAG3B,OAFap8D,KAEDmqC,SACP7rC,KAAI,SAAUyvD,GACX,OAAOA,EAAIrzB,iBAEdx1B,QAAO,SAAU2P,GAEd,GAAIA,EACA,IAAK,IAAIpM,KAAOoM,EACZ,GAAI1V,OAAOqB,UAAUC,eAAeC,KAAKmU,EAAOpM,GAC5C,OAAO,EAInB,OAAO,MAInB4lD,EAASL,oBAAsB,SAAUqO,GACrC,MAAMt8D,EAAOC,KAEbq8D,EAAc90D,SAAQ,SAAUsN,GAC5B,MAAMk5C,EAAMhuD,EAAK2zD,eAAe7+C,EAAMzV,IAClC2uD,GACAhuD,EAAK4Z,QAAO,WACRo0C,EAAI5O,YAAYtqC,UAMhC,IAAIynD,EAAS,GACTC,EAAY,WACZ,MAAM1O,EAAQ7tD,KACd,IAAIi0D,EAAYpG,EAChB,GACIoG,EAAYA,EAAUuI,oBAEnBvI,IAAcA,EAAU1qC,QAAQ,IAAMzpB,EAAAA,EAAAA,QAAAA,kBAC7C,MAAMsZ,EAAOy0C,EAAM1gD,UACnB0gD,EAAM9vB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aACCsE,IAAjBk4D,EAAOljD,KACPkjD,EAAOljD,QAAQhV,GAEnB6iD,YAAW,WACH4G,EAAM2O,eACN3O,EAAM2O,cAAcC,YAAY5O,GAEhCoG,IAAcA,EAAUj8C,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,QAAyBm0D,EAAUuI,eAC/EvI,EAAUuI,cAAcC,YAAYxI,KAEzC,MAGP5F,EAASkO,UAAY,SAAUnjD,GAC3B,IAAIsjD,EAAYJ,EAAOljD,GACnBsjD,IACA1V,aAAa0V,EAAUC,SACnBD,EAAU7O,OAAS6O,EAAU7O,MAAM2O,eACnCE,EAAU7O,MAAM2O,cAAcC,YAAYC,EAAU7O,OAExD6O,EAAU7O,MAAQ,OAI1BQ,EAASR,MAAQ,SAAUz0C,EAAMzZ,GAC7B,MAAMI,EAAOC,KACb,IAAIgE,EAAOrE,GAAW,GAElB0wD,EAAWrsD,EAAKqsD,UAAY9sD,EAAAA,EAAAA,IAAAA,cAC5Bm5D,EAAYJ,EAAOljD,GACnBsjD,IACA1V,aAAa0V,EAAUC,SACnBD,EAAU7O,OAAS6O,EAAU7O,MAAM2O,eACnCE,EAAU7O,MAAM2O,cAAcC,YAAYC,EAAU7O,OAExD6O,EAAU7O,MAAQ,MAEtB,IAAIoG,EAAYl0D,EAAK2M,IAAIsL,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,iBACxCm0D,KACDA,EAAYtnD,SAASC,cAAc,QACzBmxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,kBACvBkE,EAAKiwD,UAAYjwD,EAAKiwD,UAAYl0D,EAAK2M,KAAKG,YAAYonD,IAE7D,MAAMpG,EAAQlhD,SAASC,cAAc,OAC/BgwD,EAAOjwD,SAASC,cAAc,QACpCihD,EAAM9vB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,OACpB+tD,EAAMhhD,YAAY+vD,GAClB,MAAMx3D,EAAIuH,SAASC,cAAc,KACjCxH,EAAE+H,UAAYiM,EACdy0C,EAAMhhD,YAAYzH,GAClByoD,EAAMjiD,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBy8D,EAAW,CAAEvuD,SAAS,IACjEimD,EAAUpnD,YAAYghD,GACtB6O,EAAYJ,EAAOljD,GAAQ,CACvBy0C,MAAOA,GAGX,IAAI/xB,EAAY,GAChB,OAAQ93B,EAAKmG,MACT,KAAKrK,EAAAA,EAAAA,QAAAA,KACDg8B,EAAYh8B,EAAAA,EAAAA,QAAAA,KACZ,MACJ,KAAKA,EAAAA,EAAAA,QAAAA,QACDg8B,EAAYh8B,EAAAA,EAAAA,QAAAA,QACZ,MACJ,KAAKA,EAAAA,EAAAA,QAAAA,MACDg8B,EAAYh8B,EAAAA,EAAAA,QAAAA,MAGhBg8B,EAAUz4B,QACVq5D,EAAU7O,MAAM9vB,UAAUnjB,IAAIkhB,GAGlC4gC,EAAUC,QAAU1V,YAAW,WAC3BsV,EAAU77D,KAAKg8D,EAAU7O,SAC1BwC,IAIP,IAAIwM,GAAoB,EACpB5O,EAAe,SAAUvhD,GACzB,GAAI,QAAQu1B,KAAK66B,UAAUC,WAAY,CACnC,IAAIC,EAAKvrD,OAAOwrD,YACPvwD,EAAIoiD,sBAAsBv8B,SAExByqC,GADFx1B,WAAW,6CAA6Cje,QAAU,GAAK,KAE5EszC,GAAoB,GAG5B,IAAIK,EAAM,WACNxwD,EAAIqxB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,cAA8B0nC,WAAW,6CAA6Cje,UAE3GszC,GACAK,IACAzrD,OAAO7F,iBAAiB,SAAUsxD,IAGlCzrD,OAAOkvC,oBAAoB,SAAUuc,IAIzCppD,EAAW,SAAUtP,GACrB,MAAwB,iBAAVA,GACVA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAGxGuuD,EAAS8O,YAAc,WACnB,IACIv4D,EAAS,KACTw4D,EAAW,iEACXC,EAHOr9D,KAGOC,KAAKu0D,YAAY,CAAE8I,aAAa,IAAQ3mD,qBAAqB,UAAU,GACzF,GAAI0mD,GAJOr9D,KAIQmtB,YACf,IACIvoB,EAASy4D,EAAOE,YAEpB,MAAOx+D,GACHwE,EAAAA,EAAAA,MAAS65D,EAAW,KAAOr+D,EAAE4e,cAIjCpa,EAAAA,EAAAA,MAAS65D,GAEb,OAAOx4D,GAGXypD,EAASmP,UAAY,SAAUC,EAAO99D,GACrBK,KACRC,KAAKu9D,UAAUC,EAAO99D,IAG/B0uD,EAAS9O,iBAAmB30C,iBACxB,MAAM7K,EAAOC,KACb,IAAKD,EAAK0/C,YAAc1/C,EAAKJ,QAAQ8/C,UACjC,OAAO,KAEX,GAAI1/C,EAAK0/C,UACL,OAAO1/C,EAAK0/C,UAIhB,SADM,+BACD1/C,EAAKJ,QAAQ8/C,UAGb,CACD,MAAMie,EAAqD,kBAA3B39D,EAAKJ,QAAQ8/C,UAA0B,GAAK1/C,EAAKJ,QAAQ8/C,UACrFie,EAAiBC,UAAY59D,EAAKJ,QAAQi+D,gBAC1CF,EAAiBC,SAAWD,EAAiBC,SAASr/D,KAAI,SAAU2yB,GAChE,MAAM4sC,EAA8B,iBAAZ5sC,EAClB6sC,EAAcD,EAAW5sC,EAAUA,EAAQpoB,KACjD,MAAoB,2BAAhBi1D,EACOv6D,EAAAA,EAAAA,KAAAA,OAAe,CAClBsF,KAAMi1D,EACNF,cAAe79D,EAAKJ,QAAQi+D,eAC7BC,EAAW,GAAK5sC,GAEhBA,MAGflxB,EAAK0/C,UAAY,IAAIl8C,EAAAA,EAAAA,KAAAA,UAAkBm6D,QAjBvC39D,EAAK0/C,UAAY,KAmBrB,OAAO1/C,EAAK0/C,WAIhB,MA6IMse,EAAgBnzD,eAAgBpG,EAAOw5D,EAAiB94D,GAE1D,IAAI8mB,QAAiBxnB,EAAM+qB,oBAAoByuC,GAC/C,IAAIC,EAAe,GACnB,GAA+B,IAA3BD,EAAgB36D,OAAc,CAC9B,IAAIs4B,EAAM,GACVA,EAAIqiC,EAAgB,IAAMhyC,EAC1BA,EAAW2P,EAGf,IAAK,IAAI5V,KAAaiG,EAAU,CAC5B,IAAIkyC,EACJ,IAAIC,EAAiB,GACrB,IAAK,IAAItmD,KAAKmU,EAASjG,IACfxiB,EAAAA,EAAAA,KAAAA,WAAmByoB,EAASjG,GAAWlO,GAAG1N,OAAU6hB,EAASjG,GAAWlO,GAAGumD,UAAapyC,EAASjG,GAAWlO,GAAGwmD,WAE/GF,EAAe/1D,KAAKyP,GAK5B,GAAIsmD,EAAe96D,QAAU,EAAG,CAC5B,MAAMi7D,EAAYA,CAACp5D,EAAQq5D,KACvB,GAAIr5D,aAAkB3B,EAAAA,EAAAA,OAAAA,YAClB2B,EAAOs5D,WAAWj3D,SAASzE,GAAcw7D,EAAUx7D,EAAWy7D,UAE7D,GAAIr5D,aAAkB3B,EAAAA,EAAAA,OAAAA,QAEvB,OADA2B,EAAOu5D,aAAeF,EACfr5D,GAGfg5D,EAAU/+D,OAAOmD,OAAO,IAAI4C,EAAOzF,YAAe6+D,EAAUp5D,EAAkC,IAA1Bi5D,EAAe96D,OAAe,KAAO86D,EAAe,UAIvH,GAAIA,EAAe96D,OAAS,EAAG,CAChC,MAAMi7D,EAAYA,CAACp5D,EAAQw5D,KACvB,GAAIx5D,aAAkB3B,EAAAA,EAAAA,OAAAA,YAClB2B,EAAOs5D,WAAWj3D,SAASzE,GAAcw7D,EAAUx7D,EAAW47D,UAE7D,GAAIx5D,aAAkB3B,EAAAA,EAAAA,OAAAA,QACvB,OAAOA,EAAAA,EAAAA,OAAAA,GAAAA,MAAmB,KAAMm7D,EAAUz2D,QAAO,CAACE,EAAK+6B,KACnD/6B,EAAIC,KAAK,IAAI7E,EAAAA,EAAAA,OAAU2B,EAAOy5D,eAAcz7B,EAAMh+B,EAAO5E,SAAU4E,EAAOqK,UACnEpH,IACR,MAGX+1D,EAAU/+D,OAAOmD,OAAO,IAAI4C,EAAOzF,YAAe6+D,EAAUp5D,EAAQi5D,IAGxEF,EAAal4C,GAAam4C,EAE9B,OAAOD,GAGX5P,EAASuQ,gBAAkB,SAAUj/D,GACjC,MAAMI,EAAOC,KACP+4B,EAAc,GAEd7zB,GADNvF,EAAUA,GAAW,IACEuF,OACjBisB,EAAexxB,EAAQwxB,aACvB0tC,EAAWl/D,EAAQk/D,SACnBC,EAAkBn/D,EAAQojB,QAAUhjB,EAAKgjB,OAEzC46C,EAAW,GAEXoB,EAAmB,SAAU9tC,GAC/B,MAAMg7B,EAAWh7B,EAAQ+tC,UAAU,GACnC,OAAO/tC,EAAQ1mB,OAAS0mB,EAAQ+tC,UAAU/2D,QAAO,SAAU+Z,EAAMC,GAC7D,OAAOD,GAAQC,EAAI1X,QACpB,KAAO0hD,EAASz3C,MAAQy3C,EAASz3C,KAAKjK,OAAS0hD,EAASj2C,aAAaipD,QAAQp6C,OAI9Ezd,EAAS,WACX,OAAIy3D,GAAa1tC,IAAiBrxB,EAAAA,EAAAA,SAAAA,MAAwBqxB,IAAiBrxB,EAAAA,EAAAA,SAAAA,IAEpEyD,EAAAA,EAAAA,KAAAA,SAAiBxD,EAAKqH,UADlBtH,EAAAA,EAAAA,yBAGTo/D,EAAkB,SAAUC,EAAUh7D,GACxC,OAAO,IAAIvF,SAAQ,SAAUC,GACpBggE,EAcDM,EAASlT,SAAS94C,kBAAkBwZ,UAAUC,UAAUuyC,EAAS9pD,KAAK3W,MAAK,SAAU0gE,GACjFvgE,EAAQ,CACJwW,IAAK+pD,EAAY1yC,OAAOyyC,EAAS9pD,KACjClR,KAAMA,OApIR,SAAUk7D,EAAUl7D,GACtC,OAAO,IAAIvF,SAAQ,SAAUC,GACzBwgE,EAASpT,SAAS94C,kBAAkBwC,MAAM0pD,EAAShqD,IAAK,CACpDlR,KAAMA,EACNmqB,YAAa,kBACbnkB,KAAM,SACPzL,MAAK,SAAUstB,GACd,GAAIA,aAAoBszC,YAAa,CACjC,MAAMC,EAAYvzC,EAAShU,cAAc,6BACzC,GAAIunD,EASA,YARA1gE,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,cACLod,OAAQ,CACJzD,IAAK8lD,EAAU3hC,aAAa,iBAAkB6hC,YAAaF,EAAUvnD,cAAc,iBAAiBjK,iBAOxHlP,EAAQ,CAAEmtB,SAAUA,OACrB7V,OAAM,SAAUpX,GACfF,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,cACLod,OAAQ,CAAEzD,IAAK1a,EAAE8J,KAAM42D,YAAa1gE,EAAE4e,mBA0F1C+hD,CAAcP,EAAUh7D,GAAMzF,MAAK,SAAUstB,GACrCA,EAASwzC,QAAUxzC,EAASwzC,OAAOn8D,OAAS,GAC5C2oB,EAASwzC,OAAO,GAAGtiD,OAAOyiD,aAAeR,EAASluC,QAAQ+tC,UAAU/2D,QAAO,SAAU+Z,EAAMC,GACvF,OAAOD,GAAQC,EAAI1X,QACpB,KAAOw0D,EAAiBI,EAASluC,SACpCpyB,EAAQmtB,IAGRntB,EAAQmtB,UA4J5B,OA9IA8yC,EAAgBv3D,SAAQ,SAAU/C,GAC9B,IAAKA,EAAM6O,iBAAmBtT,EAAKmqC,WAAWlhC,QAAQxE,GAAS,GAAKA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAC/E,OAEJ,IAAIk+D,EAAkBx5D,EAAMic,4BAA8Bjc,EAAM4Y,eAChE,MAAM/H,EAAM7Q,EAAM6Q,IAAI+Y,cACtB,IAAIwxC,EAAajC,EAAStoD,GACrBuqD,IACDA,EAAajC,EAAStoD,GAAO,CACzBA,IAAKA,EACL0N,OAAQ,GACRi8C,UAAW,CAACx6D,GACZ2Y,WAAY,KAGpB,IAAK,IAAIjb,EAAI,EAAGA,EAAI87D,EAAgB36D,OAAQnB,IAAK,CAC7C,IAAI2G,EAAOm1D,EAAgB97D,GAI3B,GAAKsC,EAAMvE,KAAKiJ,QAAQL,GAAMg3D,UAA9B,CAEAD,EAAWziD,WAAW/U,KAAKS,GAC3B,IAAIqrB,EAAO1vB,EAAMG,QAAQkE,GACzB+2D,EAAW78C,OAAO3a,KAAK,CACnBS,KAAMA,EACN0B,MAAO2pB,EAAKA,EAAK7wB,OAAS,GAC1B6wB,KAAMA,EAAKvpB,MAAM,GACjBmE,SAAU,MAGmB,IAAjC8wD,EAAWziD,WAAW9Z,aAGQ,IAAvBu8D,EAAW5uC,UAGtB4uC,EAAW5uC,QAAU4uC,EAAW5uC,SAAWxsB,EAAMs7D,qBACjD/mC,EAAY3wB,KAAK,IAAIxJ,SAAQ,SAAUC,EAASk1B,GAC5C6rC,EAAW5uC,QAAQtyB,MAAK,SAAUsX,GAC9B,IAAIib,EAAU,KACVuuC,EAAS,GACb,IAAK,IAAInqD,KAAOsoD,EACRA,EAAStoD,GAAK2b,SAAW2sC,EAAStoD,GAAK2b,UAAY4uC,EAAW5uC,UAC9DC,EAAU0sC,EAAStoD,IAG3B,IAAI0qD,EAAkB,KAClBC,EAAY/uC,EAAQ9T,WACxB,KAAM6iD,aAAqBl/D,OAAWk/D,EAAU38D,QAAQ,OAExD,QAAkD,IAAvC2S,EAAaqiB,WAAW4nC,WAG/B,OAFAT,EAAOp3D,KAAK,CAAEK,IAAK3I,EAAAA,EAAAA,UAAAA,yBAA2Cod,OAAQ,CAAEyiD,aAAcZ,EAAiB9tC,WACvGpyB,EAAQ,CAAE,OAAU2gE,IAIxB,IADA,IAAIxB,EAAkB,GACb97D,EAAI,EAAGA,EAAI89D,EAAU38D,OAAQnB,IAAK,CAIvC,IAFA,IAAIsC,EAAQw7D,EAAU99D,GAEa,MAA5BsC,EAAMA,EAAMnB,OAAS,IACxBmB,EAAQA,EAAM20B,UAAU,EAAG30B,EAAMkvB,YAAY,MAEjD,GAAKv0B,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAakqD,aAAc17D,EAAM20B,UAAU6mC,EAAU99D,GAAG8G,QAAQ,KAAO,IAK7Gg1D,EAAgBh1D,QAAQxE,GAAS,GACjCw5D,EAAgB51D,KAAK5D,OANzB,CACI,IAAIyH,EAASglB,EAAQ+tC,UAAU,GAAGr6D,QAAQH,EAAM20B,UAAU6mC,EAAU99D,GAAG8G,QAAQ,KAAO,IACtFw2D,EAAOp3D,KAAK,CAAEK,IAAK3I,EAAAA,EAAAA,UAAAA,qBAAuCod,OAAQ,CAAEyiD,aAAcZ,EAAiB9tC,GAAU,UAAahlB,EAAOA,EAAO5I,OAAS,OAMzJ,GAA+B,IAA3B26D,EAAgB36D,OAGhB,OAFAm8D,EAAOp3D,KAAK,CAAEK,IAAK3I,EAAAA,EAAAA,UAAAA,gBAAkCod,OAAQ,CAAEyiD,aAAcZ,EAAiB9tC,WAC9FpyB,EAAQ,CAAE,OAAU2gE,IAMxB,GAHIxpD,EAAaqiB,WAAW4nC,WAAWE,eACnCJ,EAAkB/pD,EAAaqiB,WAAW4nC,WAAWE,aAAaC,cAGzC,UAAzBpqD,EAAa1G,UAAwBnQ,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAaqiB,WAAW4nC,WAAW5nC,WAAY,WAE/F,UAAzBriB,EAAa1G,SAAgD,UAAzB0G,EAAa1G,UAAwB0G,EAAaqiB,WAAWgoC,iBAAiBr3D,QAAQ,aAAe,EAI1I,OAFAw2D,EAAOp3D,KAAK,CAAEK,IAAK3I,EAAAA,EAAAA,UAAAA,oBAAsCod,OAAQ,CAAEyiD,aAAcZ,EAAiB9tC,WAClGpyB,EAAQ,CAAE,OAAU2gE,IAGxB,MAAMc,EAAetqD,EAAaqiB,WAAW4nC,WAAWM,QAAUvqD,EAAaqiB,WAAW4nC,WAAWM,QAAQ,GAAGC,KAAKC,KAAKC,eAAiB1qD,EAAaqiB,WAAW4nC,WAAWU,IAAIH,KAAKC,KAAK5uD,KAE5LjT,QAAQwiB,IAAI,CACR28C,EAAc9sC,EAAQ+tC,UAAU,GAAIhB,EAAiB94D,KACtDxG,MAAK,SAAUstB,GACd,IAnVgB40C,EAAgBC,EAAS18D,EAmVrCe,EAAS8mB,EAAS,GAClB+zC,GApVYa,EAqVMb,EArVUc,EAqVO,CAAExrD,IAAKirD,EAAcrU,SAAUh7B,EAAQ+tC,UAAU,IArV/C76D,EAqVqDZ,EAAAA,EAAAA,KAAAA,gBAAwB2B,EAAQ,KAAM8Q,EAAcmb,GAAc,EAAM/pB,KApV/K,IAAIxI,SAAQ,SAAUC,GACzBgiE,EAAQ5U,SAAS94C,kBAAkBwlB,SAASkoC,EAAQxrD,IAAK,CACrDlR,KAAMA,EACNmqB,YAAa,kBACbnkB,KAAM,SACPzL,MAAK,SAAUstB,GACd,GAAIA,aAAoBszC,YAAa,CACjC,MAAMC,EAAYvzC,EAAShU,cAAc,6BACzC,GAAIunD,EASA,YARA1gE,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,cACLod,OAAQ,CACJzD,IAAK8lD,EAAU3hC,aAAa,iBAAkB6hC,YAAaF,EAAUvnD,cAAc,iBAAiBjK,iBAOxH,IAAI+yD,EAAaxoD,SAAS0T,EAAShU,cAAc,qBAAqB4lB,aAAa,kBAAoB5R,EAAShU,cAAc,qBAAqB4lB,aAAa,oBAAqB,IACjL58B,MAAM8/D,IAAeA,EAAaxoD,SAASsoD,EAAgB,IAC3D/hE,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,qBAcbjB,EAToB,IAAfiiE,EASGA,EARA,CACJtB,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,mBAQlBqW,OAAM,SAAUpX,GAGfF,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,cACLod,OAAQ,CAAEzD,IAAK1a,EAAE8J,KAAM42D,YAAa1gE,EAAE4e,oBAsS2Ijf,MAAK,SAAUstB,GACxL,GAAIA,EAASwzC,QAAUxzC,EAASwzC,OAAOn8D,OAAS,EAAG,CAC/C,OAAQ2oB,EAASwzC,OAAO,GAAG/2D,KACvB,KAAK3I,EAAAA,EAAAA,UAAAA,cACDksB,EAASwzC,OAAO,GAAGtiD,OAAOyiD,aAAe1uC,EAAQ+tC,UAAU/2D,QAAO,CAAC+Z,EAAMC,IAAQD,GAAQC,EAAI1X,OAAO,KAAOw0D,EAAiB9tC,GAC5H,MACJ,KAAKnxB,EAAAA,EAAAA,UAAAA,iBACDksB,EAASwzC,OAAO,GAAGtiD,OAAS,CAAE/E,MAAO4nD,EAAiBJ,aAAcZ,EAAiB9tC,IACrF,MACJ,KAAKnxB,EAAAA,EAAAA,UAAAA,YACDksB,EAASwzC,OAAO,GAAGtiD,OAAS,CAAEyiD,aAAcZ,EAAiB9tC,IAGrEpyB,EAAQmtB,QAGRkzC,EAAgB,CAAE7pD,IAAKirD,EAAcrU,SAAUh7B,EAAQ+tC,UAAU,GAAI/tC,QAASA,GAAW1tB,EAAAA,EAAAA,KAAAA,gBAAwB2B,EAAQ,KAAM8Q,EAAc6oD,EAAW1tC,EAAerxB,EAAAA,EAAAA,SAAAA,MAAsB,EAAOsH,MAAW1I,MAAK,SAAUstB,GAC1NntB,EAAQM,OAAOmD,OAAO,CAAE2uB,QAASA,EAASuuC,OAAQA,GAAUxzC,UAMxEkzC,EAAgB,CAAE7pD,IAAKirD,EAAcrU,SAAUh7B,EAAQ+tC,UAAU,GAAI/tC,QAASA,GAAW1tB,EAAAA,EAAAA,KAAAA,gBAAwB2B,EAAQ,KAAM8Q,EAAc6oD,EAAW1tC,EAAerxB,EAAAA,EAAAA,SAAAA,MAAsB,EAAOsH,MAAW1I,MAAK,SAAUstB,GAC1NntB,EAAQM,OAAOmD,OAAO,CAAE2uB,QAASA,EAASuuC,OAAQA,GAAUxzC,UAIrE7V,OAAM,SAAUpX,GACfF,EAAQ,CACJ2gE,OAAQ,CAAC,CACL/2D,IAAK3I,EAAAA,EAAAA,UAAAA,cACLod,OAAQ,CAAEzD,IAAK1a,EAAE8J,KAAM42D,YAAa1gE,EAAE4e,QAASgiD,aAAcZ,EAAiB9tC,cAI3F,SAAUlyB,GACT,IAAIkyB,EAAU,KACd,IAAK,IAAI1mB,KAASozD,EACVA,EAASpzD,GAAOymB,SAAW2sC,EAASpzD,GAAOymB,UAAY4uC,EAAW5uC,UAClEC,EAAU0sC,EAASpzD,IAE3B1L,EAAQ,CAAE2gE,OAAQ,CAAC,CAAE/2D,IAAK3I,EAAAA,EAAAA,UAAAA,gBAAkCod,OAAQ,CAAEzD,IAAK1a,EAAE8J,KAAM82D,aAAcZ,EAAiB9tC,mBAIvH8H,GAGXs1B,EAAS0S,WAAa,WAClB/gE,KAAKC,KAAK8gE,cAGd1S,EAAS2S,OAAS,SAAU1iE,GACxB0B,KAAKC,KAAK+gE,OAAO1iE,IAIrB+vD,EAAS4S,gBAAkBr2D,iBACvB,MAAM7K,EAAOC,KACPkhE,EAAqB,GAC3B,IAAK,IAAIh/D,EAAI,EAAGA,EAAInC,EAAK0rD,gBAAiBvpD,IACtCg/D,EAAmB94D,KAAKkO,IAAAA,QACXvW,EAAKwrD,8BAAgCrpD,GAC7CiU,OAAMsD,GAAO/R,QAAQgS,KAAKD,MAEnC,MAAMusB,EAAU,GAChB,UAAW,MAAMx4B,KAAS0zD,EAClB1zD,GACAw4B,EAAQ59B,KAAKoF,GAIrB,OADAzN,EAAKyrD,YAAcxlB,EACZA,GAGXqoB,EAAS8S,iBAAmBv2D,eAAgB2C,GACxC,MAAMxN,EAAOC,KACbuN,EAAUA,GAAWxN,EAAKyrD,YAC1B,IAAK,IAAItpD,EAAI,EAAGA,EAAInC,EAAK0rD,gBAAiBvpD,IACtC,GAAIA,EAAIqL,EAAQlK,OAAQ,CACpB,MAAMmK,EAAQD,EAAQrL,SAChBoU,IAAAA,QACOvW,EAAKwrD,8BAAgCrpD,EAAGsL,GAChD2I,OAAMsD,GAAO/R,QAAQgS,KAAKD,gBAGzBnD,IAAAA,WACUvW,EAAKwrD,8BAAgCrpD,GAChDiU,OAAMsD,GAAO/R,QAAQgS,KAAKD,KAGvC1Z,EAAKyrD,YAAcj+C,GAGvB,MAAM6zD,EAA2Bn9D,EAAAA,EAAAA,kBAEjCoqD,EAASgT,mBAAqBz2D,eAAgB02D,SAGpCF,EAAyBG,UAC/B,MAAMxhE,EAAOC,KACb,IAAIwhE,GAAa,EACjB,UAAW,MAAMC,KAAU1hE,EAAKyrD,YAAYltD,KAAIkP,IAE7BA,EAAMk0D,YAAcl0D,GACrBm0D,YAAYL,EAASI,cAEnC,GAAID,EAAQ,CACRD,GAAa,EACb,MAGR,GAAIA,EAAY,CAEZ,MAAMI,EAAY7hE,EAAKyrD,YAAYqW,WAAU9yD,IAAC,IAAA+yD,EAAA,QAC7B,QAAZA,EAAA/yD,EAAE2yD,kBAAU,IAAAI,OAAA,EAAZA,EAAcj5D,OAAQkG,EAAElG,QAAUy4D,EAASI,WAAW74D,QAC3D9I,EAAKyrD,YAAYziD,OAAO64D,EAAW,QAI/B7hE,EAAKyrD,YAAYnoD,QAAUtD,EAAK0rD,iBAChC1rD,EAAKyrD,YAAYuW,MAGzBhiE,EAAKyrD,YAAYllD,QAAQg7D,SACnBvhE,EAAKohE,iBAAiBphE,EAAKyrD,aACjCzrD,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAEsoD,KAAMkZ,IACjDF,EAAyBY,WAG7B3T,EAAS4T,sBAAwBr3D,eAAgBkf,GAC7C,MAAM/pB,EAAOC,KACbD,EAAKyrD,YAAYziD,OAAO+gB,EAAO,SACzB/pB,EAAKohE,iBAAiBphE,EAAKyrD,cAGrC6C,EAAS6T,oBAAsBt3D,eAAgBkf,GAC3C,MAAM/pB,EAAOC,KACPwN,EAAQzN,EAAKyrD,YAAY1hC,GAC/B,GAAItc,EAAO,CACP,UAAW,MAAMi0D,KAAU1hE,EAAKmqC,WAC3BhlC,QAAO6b,GAAKA,EAAEohD,cACd7jE,KAAIyiB,IAED,MAAMqhD,EAAS50D,EAAMk0D,YAAcl0D,EACnC,OAAOuT,EAAEohD,YAAYR,YAAYS,MAEjCX,GACA1hE,EAAK8tD,MAAMtqD,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKJ,QAAQyJ,OAAQ,0BAA2B,CAAEe,KAAMrK,EAAAA,EAAAA,QAAAA,UAGnG,IAAIuiE,EAAU,CAAC70D,EAAMk0D,YAAcl0D,GAC/BA,EAAM80D,oBACND,EAAUA,EAAQh6D,OAAOmF,EAAM80D,oBAEnC,MAAMC,EAAc,GACpB,UAAW,IAAIC,KAAcH,EAAQ/jE,KAAI0qD,GAAKA,EAAEyZ,oBAC5CF,EAAYn6D,KAAKo6D,GAErB,IAAK,IAAItgE,EAAI,EAAGA,EAAIqgE,EAAYl/D,OAAQnB,IAAK,CAEtB,WADFqgE,EAAYrgE,KAEzBqgE,EAAYrgE,SAAWmgE,EAAQngE,GAAGwgE,qBAG1C,GAAIH,EAAYxtD,OAAM3P,GAAW,YAANA,IAEvB,OADArF,EAAKy9D,UAAU6E,GACR70D,EAGf,OAAO,MA51Hf,GAk3HA,MACA,EADiBjK,EAAAA,EAAAA,K,mHC78HjBA,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAWiM,EAAAA,EAErB8B,OAAO9Q,UAAUmiE,QAAU,WACvB,IAAI7nD,EAAI9a,KAAKouB,cAAcjc,MAAM,IAC7BpD,EAAI+L,EAAEytB,QAENq6B,EAAQ,CACJ9nD,EAAG,GAAI/b,EAAG,GAAImD,EAAG,GAAIpD,EAAG,GAAIsqD,EAAG,GAC/Bh/B,EAAG,EAAGrb,EAAG,EAAG3J,EAAG,EAAGwjB,EAAG,EACrBpgB,EAAG,EAAGq6D,EAAG,EAAGvrD,EAAG,EAAGO,EAAG,EAAGirD,EAAG,EAAGp7B,EAAG,EAAG/Z,EAAG,EAAGD,EAAG,EAC7CwU,EAAG,EAAG6F,EAAG,EACThnB,EAAG,EACHokC,EAAG,EAAGvwC,EAAG,EACTN,EAAG,GASX,OANIvF,EACA+L,EACKxc,KAAI,SAAUsqB,EAAGm6C,EAAIC,GAAM,OAAOJ,EAAMh6C,MACxC1jB,QAAO,SAAU0jB,EAAG1mB,EAAG4Y,GAAK,OAAa,IAAN5Y,EAAU0mB,IAAMg6C,EAAM7zD,GAAK6Z,IAAM9N,EAAE5Y,EAAI,MAC1EoI,KAAK,IAEF,OAAOK,MAAM,EAAG,GAAGi1C,eAInC,IAAIqjB,EAAiBt7C,OAAOnnB,UAAUyiE,eACtCt7C,OAAOnnB,UAAUyiE,eAAiB,SAAU75D,EAAQ85D,GAChD,GAAe,UAAX95D,GAAuB7F,EAAAA,EAAAA,KAAAA,WASvB,OAAO0/D,EAAe7yD,MAAMpQ,KAAMgd,WARlC,IAAImmD,EAAOF,EAAe7yD,MAAMpQ,KAAMgd,WAKtC,OAJAmmD,EAAOA,EAAK55D,QAAQ,KAAM,KACpBhI,KAAKonD,MAAM3oD,QAAUA,MAAQ2nB,OAAOy7C,UAAU7hE,KAAKonD,MAAM3oD,SAC3DmjE,EAAOA,EAAK55D,QAAQ,YAAa,QAE9B45D,GAMf,IAAIE,EAAe,GACfC,EAAwB,GAExBC,EAAQ,CAAC,aAAc,UAAW,SAAU,UAAW,IAAK,OAAQ,MAAO,kBAC3EC,EAAQ,CAAC,qBAAsB,UAAW,MAAO,OAAQ,MAAO,IAAK,QACrEC,EAAY,SAAU9nC,EAAKv2B,EAAGlD,GAC9B,OAAIA,EAAIkD,EAAE/B,OAAS,EACXlE,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAKv2B,EAAElD,IACrCuhE,EAAU9nC,EAAIv2B,EAAElD,IAAKkD,IAAKlD,GAG1B,KAGJy5B,EAAIv2B,EAAElD,KAIrB,MAAMwhE,EAAgB,IAAIlhE,QACpBmhE,EAAqB,IAAInhE,QACzBohE,EAAS,GAAGnjE,eACZojE,EAAgB,IAAI5pD,IAEpB6pD,EAAiBjhE,GACftB,KAAKonD,MAAM9lD,KAAWA,GACfA,EAAMogB,WAAW9Q,MAAM,KAAK,GAAG9O,QACnC,EAGL0gE,EAAqB,IAAI9vC,IAAI,CAC/B,cACA,cACA,YACA,gBACA,cACA,MACA,SACA,SACA,QACA,SACA,QACA,WACA,oBACA,oBACA,cACA,YACA,aAIJ,IAAIhwB,EAAO,CAEP+/D,iBAAkB,SAAUrkE,GAExB,MAAMD,GADNC,EAAUA,GAAW,IACED,OACvB,GAAIA,GAAUA,EAAO2D,OAAS,GAAK3D,EAAO,GAAG2D,OAAS,EAAG,CACrD,IAAI4gE,EAAS,EACTC,EAAW,EACf,MAAMC,EAAqBxkE,EAAQwkE,oBAAsB,EAOzD,IALA,IAAIC,EACAC,EACAC,EACAC,GAAiB,EAEZ/7D,EAAI,EAAGA,EAAI9I,EAAO2D,OAAQmF,IAAK,CACpC,IACI+pB,EADQ7yB,EAAO8I,GACA,GACnB,GAAe,OAAX+pB,EAAiB,MACMnuB,IAAnBggE,IAEAA,EAAiB7xC,EACjB8xC,EAAkB9xC,EAClB+xC,EAAkB/xC,GAGtB8xC,EAAkB9iE,KAAKqa,IAAIyoD,EAAiB9xC,GAC5C+xC,EAAkB/iE,KAAK4K,IAAIm4D,EAAiB/xC,GAE5C,IAAIiyC,EAAQjyC,EAAS6xC,EAEjBI,EAAQL,GAAsBK,EAAQ,GAAKh8D,IAAM9I,EAAO2D,OAAS,GAE7DkhE,EAEAN,GAAUO,GAIVN,GAAYG,EAAkBD,EAC9BH,GAAU1xC,EAAS8xC,EACnBE,GAAiB,GAErBH,EAAiB7xC,EACjB8xC,EAAkB9xC,EAClB+xC,EAAkB/xC,IAEbiyC,GAASL,GAAsBK,EAAQ,GAAKh8D,IAAM9I,EAAO2D,OAAS,KAElEkhE,GAMDN,GAAUK,EAAkBF,EAC5BF,GAAY3xC,EAAS+xC,EACrBC,GAAiB,GANjBL,GAAYM,EAQhBJ,EAAiB7xC,EACjB8xC,EAAkB9xC,EAClB+xC,EAAkB/xC,IAK9B,MAAO,CACHkyC,OAAQljE,KAAKirC,MAAMy3B,GACnBS,SAAUnjE,KAAKirC,MAAM03B,IAGpB,OAAO,MAGpBS,cAAe,SAAUhpC,GAKrB,MAAmB,iBAARA,IAAoBA,EAAIipC,UAAYjpC,EAAIlqB,SAAWkqB,KAI1DA,EAAIl8B,cACHmkE,EAAOljE,KAAKi7B,EAAIl8B,YAAYe,UAAW,mBAShDqkE,cAAe,SAAUlpC,GACrB,IAAI9yB,EACJ,IAAKA,KAAQ8yB,EACT,OAAO,EAEX,OAAO,GAGXgF,WAAY,SAAUhF,GAClB,MAAsB,mBAARA,GAGlB8J,OAAQ,WACJ,IAAIj7B,EACAiD,EAASuP,UAAU,IAAM,GACzB9a,EAAI,EACJ4iE,GAAO,EAGW,kBAAXr3D,IACPq3D,EAAOr3D,EAEPA,EAASuP,UAAU9a,IAAM,GACzBA,KAIkB,iBAAXuL,GAAwBxJ,EAAK08B,WAAWlzB,KAC/CA,EAAS,IAGb,IAAK,IAAIxC,EAAM+R,UAAU3Z,OAAQnB,EAAI+I,EAAK/I,IAAK,CAE3C,MAAMvC,EAAUqd,UAAU9a,GAC1B,GAAe,MAAXvC,EAEA,IAAK,IAAIkJ,KAAQlJ,EAAS,CACtB,MAAMgS,EAAMlE,EAAO5E,GACbk8D,EAAOplE,EAAQkJ,GAGrB,GAAI4E,IAAWs3D,EACX,SAIJ,MAAMC,EAAclkE,MAAMC,QAAQgkE,GAC9BD,GAAQC,IAAS9gE,EAAK0gE,cAAcI,IAASC,IAEzCx6D,EADAw6D,EACQrzD,GAAO7Q,MAAMC,QAAQ4Q,GAAOA,EAAM,GAGlCA,GAAO1N,EAAK0gE,cAAchzD,GAAOA,EAAM,GAInDlE,EAAO5E,GAAQ5E,EAAKwhC,OAAOq/B,EAAMt6D,EAAOu6D,SAGxB3gE,IAAT2gE,IACPt3D,EAAO5E,GAAQk8D,IAO/B,OAAOt3D,GAGXw3D,aAAc,SAAU3mE,GACpB,OAAOA,EAAIqB,SAAWrB,EAAIqB,QAAQyJ,QAAU9K,EAAIqB,QAAQyJ,OAAOG,QAAQ,IAAK,MAAQ,SAGxF27D,MAAO,CACHC,SAAU,eAGdC,iBAAkB,SAAU/vD,GACxB,IAAIgwD,EAAmC,GAApBroD,UAAU3Z,QAAc2Z,UAAU,GACjDsoD,EAAWD,EAAsDhwD,EAAvCA,EAAI9L,QAAQtF,EAAKihE,MAAMC,SAAU,IAE/D,IAAI38D,EACJ,GAAI68D,GACA,GAAI9hE,EAAAA,EAAAA,aAAgB+hE,GAChB,OAAOjwD,OAGX,IAAK7M,KAAKjF,EAAAA,EAAAA,aACN,GAAIiF,EAAEe,QAAQtF,EAAKihE,MAAMC,SAAU,KAAOG,EACtC,OAAO98D,EAKnB,IAAKA,KAAKjF,EAAAA,EAAAA,aAAiB,CACvB,IAAI6lD,EAAIqa,EAAUlgE,EAAAA,EAAAA,aAAgBiF,GAAI+6D,EAAO,IAAME,EAAUlgE,EAAAA,EAAAA,aAAgBiF,GAAIg7D,EAAO,GAExF,GAAIpa,GAAKic,GAAgBhwD,GAAO+zC,EAC5B,OAAOA,EAEN,GAAIA,GAAK/zC,EAAI9L,QAAQtF,EAAKihE,MAAMC,SAAU,KAAO/b,EAAE7/C,QAAQtF,EAAKihE,MAAMC,SAAU,IACjF,OAAO/b,EAIf,OAAO/zC,GAGXkwD,wBAAyB,SAAUlwD,GAC/B,IAAIgwD,EAAoC,IAArBroD,UAAU3Z,QAAe2Z,UAAU,GAElDwoD,EAAO,SAAUC,GACjB,IAAIrc,EAAIqa,EAAUgC,EAAMlC,EAAO,IAAME,EAAUgC,EAAMjC,EAAO,GAC5D,OAAIpa,EACQic,EAAkEjc,EAAEj3C,MAAM,KAAK,GAAhEi3C,EAAEj3C,MAAM,KAAK,GAAG5I,QAAQtF,EAAKihE,MAAMC,SAAU,IAEjE,MAEX,OAAI5hE,EAAAA,EAAAA,aAAgB8R,GACTmwD,EAAKjiE,EAAAA,EAAAA,aAAgB8R,IAGzB,MAGXqwD,gBAAiB,SAAUC,GAGvB,IAFA,IAAIC,EAAQn0D,OACRo0D,EAAaF,EAAOxzD,MAAM,KACrBjQ,EAAI,EAAGA,EAAI2jE,EAAWxiE,OAAS,EAAGnB,IAGvC,GAAakC,OAFbwhE,EAAQA,EAAMC,EAAW3jE,KAED,OAG5B,OAAO0jE,EAAMC,EAAWA,EAAWxiE,OAAS,KAGhDyiE,MAAO,SAAU1sD,GACb,MAAO,iCAAiC6oB,KAAK7oB,IAGjD2sD,YAAa,SAAU1wD,GAEnB,OAAK,oBAAoB4sB,KAAK5sB,IAGvB,mBAAmB4sB,KAAK5sB,IAGnCgsB,aAAc,SAAU2kC,GACpB,IAAIphE,EAAiC,IAAxBohE,EAAIh9D,QAAQ,SAAuC,IAAtBg9D,EAAIh9D,QAAQ,MAClDiJ,GAAYrN,GAAUohE,EAAIx8D,MAAM1J,EAAAA,EAAAA,IAAAA,aACpC,GAAImS,EAAU,CACV,IAAII,EAAWZ,OAAOY,SAClB4zD,EAAYh0D,EAAS,GACzBrN,GACKqhE,GAAa5zD,EAASN,UAAyB3N,MAAb6hE,IACnCh0D,EAAS,IAAMI,EAASL,SAC5B,IAAIk0D,EAAQj0D,EAAS,GAAIk0D,EAAQ9zD,EAASD,MAC7B,IAAT8zD,GAAyB,KAAVA,GAAyB,MAATC,GAA2B,KAAVA,KAChDvhE,EAASA,GAAUshE,GAASC,GAGpC,OAAOvhE,GAGXwhE,aAAc,SAAUvjE,EAAOuG,GAC3B,IAAI2+B,SAAWllC,EACf,GAAU,WAANklC,EACA,OAAOllC,EAAMogE,eAAe75D,EAAQ,CAAEi9D,sBAAuB9kE,KAAKqa,IAAI,EAAGkoD,EAAcjhE,MAEtF,GAAU,WAANklC,EAAgB,CACrB,MAAMnzB,EAAIhN,WAAW/E,GACrB,GAAI+R,IAAM,IAAI+S,OAAO9kB,GAAOyjE,UACxB,OAAO1xD,EAAEquD,eAAe75D,EAAQ,CAAEi9D,sBAAuB9kE,KAAKqa,IAAI,EAAGkoD,EAAclvD,MAG3F,OAAO/R,GAGX0jE,YAAa,SAAUP,GACnB,IAAIphE,EAASohE,EAIb,OAHIA,GAA6B,IAAtBA,EAAIh9D,QAAQ,QACnBpE,EAASyN,SAASN,SAAWi0D,GAE1BphE,GAOX4hE,OAAQ,SAAU95D,GAcd,MAZmB,iBAARA,EACEC,SAAS85D,eAAe/5D,GAE5BA,aAAewyB,YACXxyB,EAEJA,GAAO,MAAO+E,QAAU/E,aAAeq0C,GAAKr0C,EAAIrJ,OAC5CqJ,EAAI,GAGJC,SAASC,cAAc,QAKxC85D,kBAAmB,WACf,IAAI/0D,EACA2wB,EACJ,GAAI31B,SAAS0zB,cACTiC,EAAS31B,SAAS0zB,kBAEjB,CACD,IAAIsmC,EAAUh6D,SAASgK,qBAAqB,UAC5C2rB,EAASqkC,EAAQA,EAAQtjE,OAAS,GAGtC,OADAsO,EAAM2wB,EAAO1E,aAAa,QAEfjsB,EAAIiV,OAAO,EAAGjV,EAAI+hB,YAAY,KAAO,GAEzC,IAOXkzC,wBAAyB,SAAUC,GAC/B,IAAIjiE,EAAS,GAEb,GAAIiiE,EACA,QAA+BziE,IAA3Bi/D,EAAawD,GACbjiE,EAASy+D,EAAawD,OAErB,CACD,MAAMC,EAAUn6D,SAASC,cAAc,OACvCk6D,EAAQnhE,MAAMg3C,QAAU,OACxBmqB,EAAQ/oC,UAAUnjB,IAAIisD,GACtBl6D,SAAS+0B,KAAK70B,YAAYi6D,GAE1B,IAAIt9D,EAAQ,6BAA6B0I,KAAKT,OAAOs1D,iBAAiBD,EAAS,MAAME,iBACjFx9D,GAASA,EAAMnG,OAAS,IACxBuB,EAAS4E,EAAMA,EAAMnG,OAAS,IAElCyjE,EAAQtK,cAAcC,YAAYqK,GAClCzD,EAAawD,GAAYjiE,EAGjC,OAAOA,GAGXqiE,gBAAiB,SAASA,EAAgBtnE,GACtC,IAAIiF,EAAS,KACb,GAAIjF,EAAQ0V,IACRzQ,EAASjF,EAAQ0V,IACb,UAAU4sB,KAAK66B,UAAUC,YAAoC,WAAtB1qD,SAASN,UAAyBnN,EAAO0sB,WAAW,WAC3F1sB,EAASA,EAAO2E,QAAQ,QAAS,eAGpC,CACD,IAAIuyB,EACJ,GAAgC,iBAArBn8B,EAAQknE,SACf/qC,EAAYn8B,EAAQknE,aAEnB,CACD,IAAIv6B,EAAU3sC,EAAQ2sC,SAAW/oC,EAAAA,EAAAA,IAAAA,OAAAA,OAAAA,QAEjC,GADAu4B,EAAYwQ,EAAQ,GAChB3sC,EAAQkF,MAAO,CACf,IAAK1F,OAAOqB,UAAUC,eAAeC,KAAK4iE,EAAuB3jE,EAAQkF,OAAQ,CAC7E,IAAI3C,EAAI/C,OAAOD,KAAKokE,GAAuBjgE,OAC3CnB,GAAQoqC,EAAQjpC,OAChBigE,EAAsB3jE,EAAQkF,OAASynC,EAAQpqC,GAEnD45B,EAAYwnC,EAAsB3jE,EAAQkF,QAGlDD,EAASX,EAAK2iE,wBAAwB9qC,GAK1C,OAHKl3B,GAAUjF,IAAY4D,EAAAA,EAAAA,IAAAA,OAAAA,OAA4C,KAArB5D,EAAQknE,WACtDjiE,EAASqiE,EAAgB1jE,EAAAA,EAAAA,IAAAA,OAAAA,QAEtBqB,GAGXsiE,wBAAyB,SAAUvhE,EAAOhG,GACtC,IAAIiF,EAAS,KAEb,GADAjF,EAAUA,GAAW,GACjBgG,EAAM0P,IACNzQ,EAASe,EAAM0P,QAEd,CACD,IAAIid,EAAQ3yB,EAAQ2yB,OAAS,GACzBC,EAAS5yB,EAAQ4yB,QAAU,GAC/B,MAAMwZ,EAAcpmC,EAAMomC,aAAe,EACnCo7B,EAAkBp7B,EAAc,EAChCH,EAAYjmC,EAAMimC,WAAa,cAC/BC,EAAclmC,EAAMkmC,aAAe,EACnCu7B,EAAiC,GAArBzhE,EAAM/E,QAAU,GAASmrC,EACrCs7B,EAAe1hE,EAAM2hE,SAAY,qBAAoB3hE,EAAM2hE,SAASh9D,KAAK,SAAW,GAC1F,IAAIo3B,EAGJ,OAFApP,EAAQ/wB,KAAK4K,IAAImmB,EAAO80C,GACxB70C,EAAShxB,KAAK4K,IAAIomB,EAAQ60C,GAClBznE,EAAQ21B,cACZ,KAAKx1B,EAAAA,EAAAA,KAAAA,MACD4hC,EAAQ,eAAcpP,EAAQ,UAAUC,EAAS,SAAS5sB,EAAM/E,mBAAmB+E,EAAMmmC,8BAA8BC,YAAsBH,oBAA4BC,MAAgBw7B,MACzL,MACJ,KAAKvnE,EAAAA,EAAAA,KAAAA,SAKD4hC,EAAQ,qBAJOylC,KACA50C,EAAS40C,KACX70C,EAAQ60C,KACRA,oBACkExhE,EAAMmmC,4BAA4BC,MAAgBs7B,MACjI,MAEJ,KAAKvnE,EAAAA,EAAAA,KAAAA,QASD4hC,EAAQ,oBARGylC,KACA50C,EAAS40C,KACTA,KACAA,KACAA,EAA0B,GAAR70C,KAClB60C,KACA70C,EAAQ60C,KACR50C,EAAS40C,oBACsExhE,EAAMmmC,4BAA4BC,UAAoBH,kBAA0BC,MAAgBw7B,MAC1L,MAEJ,QACI3lC,EAAQ,YAAWylC,SAAuBA,aAA2B70C,EAAQyZ,cAAwBxZ,EAASwZ,oBAA8BpmC,EAAMmmC,4BAA4BC,UAAoBH,kBAA0BC,MAAgBw7B,MAGpPziE,EAAS,sBAAwB6tB,mBAAoB,kDAAiDH,cAAkBC,MAAWmP,WAEvI,OAAO98B,GAQX2iE,eAAgB,SAASA,EAAerzC,EAAM9Z,EAAU0P,GACpD,IAAIllB,EAAS,KACT60B,GAAQ,EAER5wB,EAAOqrB,EADXpK,EAAQA,GAAS,GAEjB,GAAIjhB,EAAM,CAEN,IADA,IAAI+L,EACK1S,EAAI,EAAG+I,EAAMmP,EAAS/F,SAAShR,OAAQnB,EAAI+I,EAAK/I,IAErD,IADA0S,EAAIwF,EAAS/F,SAASnS,IAChB2G,OAASA,EAAM,CAEjB,GADA4wB,GAAQ,EACJ3P,IAAUoK,EAAK7wB,OAAS,EACxBuB,EAASgQ,MAER,CACD,MAAMN,EAAIizD,EAAerzC,EAAMtf,EAAGkV,EAAQ,GACtCxV,IACA1P,EAAS0P,GAGjB,MAGR,IAAKmlB,EAAO,CACR7kB,EAAI,CAAE/L,KAAMA,EAAM0B,MAAO1B,EAAMuL,IAAK,IAAM8f,EAAKvpB,MAAM,EAAGmf,EAAQ,GAAGxf,KAAK,KAAM+J,SAAU,IACxF,MAAMC,EAAIizD,EAAerzC,EAAMtf,EAAGkV,EAAQ,GAEtCllB,EADA0P,GAISM,EAEbA,EAAEpR,OAAS4W,EACXA,EAAS/F,SAASjM,KAAKwM,IAG/B,OAAOhQ,GAGX4iE,YAAa,SAAUpuD,GACnB,IAAIxU,EAAS,KAET6iE,EAAiB,SAAUruD,GAC3B,IAAI2uB,EAAI3uB,EACJxU,EAAS,GACbA,EAAOuF,KAAOrK,EAAAA,EAAAA,WACd,IAAI2H,EAAMsgC,EAAE/+B,QAAQ,KAIpB,GAHApE,EAAO/B,MAAQ+E,WAAWmgC,EAAEnhB,OAAO,EAAGnf,KAEtCA,GADAsgC,EAAIA,EAAEnhB,OAAOnf,EAAM,IACXuB,QAAQ,OACL,EAAG,CACV,IAAI4f,EAAIhhB,WAAWmgC,EAAEnhB,OAAO,EAAGnf,IAAQ,GACnC7C,EAAO/B,OAAS,EAChB+B,EAAO/B,OAAS+lB,EAGhBhkB,EAAO/B,OAAS+lB,GAGpBnhB,GADAsgC,EAAIA,EAAEnhB,OAAOnf,EAAM,IACXuB,QAAQ,OACL,IACP4f,EAAIhhB,WAAWmgC,EAAEnhB,OAAO,EAAGnf,GAAK8B,QAAQ,IAAK,MAAQ,KACjD3E,EAAO/B,OAAS,EAChB+B,EAAO/B,OAAS+lB,EAGhBhkB,EAAO/B,OAAS+lB,GAI5B,OAAOhkB,GAGP8iE,EAAc,SAAUtuD,GACxB,IAAI2uB,EAAI3uB,EAAKwQ,OAEb,GAAIme,EAAEv+B,MAAM,qFAAsF,CAC9F,OAAQu+B,EAAEA,EAAE1kC,OAAS,IACjB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD0kC,EAAI,IAAMA,EAIlB,OADAA,EAAIA,EAAEnhB,OAAO,EAAGmhB,EAAE1kC,OAAS,GACpBokE,EAAe1/B,GAG1B,GAAIA,EAAEv+B,MAAM,2EACR,OAAOi+D,EAAe1/B,GAG1B,GAAIA,EAAEv+B,MAAM,mDAAoD,CAC5D,IAAI5E,EAAS,CAAEuF,KAAMrK,EAAAA,EAAAA,WAAmB+C,MAAO+E,WAAWmgC,EAAEnhB,OAAO,EAAGmhB,EAAE1kC,OAAS,GAAGkG,QAAQ,IAAK,OAIjG,OAHIw+B,EAAEv+B,MAAM,eACR5E,EAAO/B,OAAS+B,EAAO/B,OAEpB+B,EAGX,OAAImjC,EAAEv+B,MAAM,yCACD,CAAEW,KAAMrK,EAAAA,EAAAA,WAAmB+C,MAAO+E,WAAWmgC,EAAEx+B,QAAQ,IAAK,OAGnEw+B,EAAEv+B,MAAM,6BACD,CAAEW,KAAMrK,EAAAA,EAAAA,IAAY+C,MAAO+E,WAAWmgC,EAAEx+B,QAAQ,IAAK,OAEzD,MAIPssD,GADJz8C,EAAOA,EAAKwQ,OAAOg2B,eACLztC,MAAM,KAOpB,GANkB,IAAd0jD,EAAGxyD,OACHwyD,EAAK,CAACA,EAAGlrD,MAAM,EAAG,GAAGL,KAAK,KAAMurD,EAAGlrD,MAAM,EAAG,GAAGL,KAAK,MAEjC,IAAdurD,EAAGxyD,QAA8B,IAAdwyD,EAAGxyD,SAC3BwyD,EAAKz8C,EAAKjH,MAAM,MAEF,IAAd0jD,EAAGxyD,OAAc,CACjB,IAAIsqB,EAAI+5C,EAAY7R,EAAG,IACnBjoC,EAAI85C,EAAY7R,EAAG,IACb,OAANloC,GAAoB,OAANC,IACdhpB,EAAS,CAAC+oB,EAAGC,IAGrB,OAAOhpB,GAGX+iE,UAAW,SAAUjoE,EAAQoH,EAAWyU,GACpC,IAAI3W,EACAgjE,GAAa,EACbC,GAAY,EACZC,GAAY,EACZhnE,MAAMC,QAAQrB,EAAO,IACjBoB,MAAMC,QAAQrB,EAAO,GAAG,IACnBoB,MAAMC,QAAQrB,EAAO,GAAG,GAAG,MAC5BooE,GAAY,EACZpoE,EAAS,CAACA,KAIdmoE,GAAY,EACZnoE,EAAS,CAAC,CAACA,MAIfkoE,GAAa,EACbC,GAAY,EACZC,GAAY,EACZpoE,EAAS,CAAC,CAAC,CAACA,MAEhB,MAAM81D,EAAW,SAAUtuD,GACvB,IAAItC,EACJ,MAAMsgC,EAAMF,EAAAA,EAAAA,KAAW99B,GAQvB,OAPIg+B,IACAtgC,GAASogC,EAAAA,EAAAA,GAAME,IAEdtgC,IACDrB,EAAAA,EAAAA,YAAe,CAAE2D,IAAKA,EAAKu9B,MAAM,IACjC7/B,GAASogC,EAAAA,EAAAA,GAAMA,EAAAA,EAAAA,KAAW99B,KAEvBtC,GAEX,IAAImjE,EAAYvS,EAAS1uD,GACrBkhE,EAAYxS,EAASj6C,GA6BzB,OA5BA3W,EAAS,IAAI9D,MAAMpB,EAAO2D,QAC1B3D,EAAO6H,SAAQ,SAAU0gE,EAAMC,GAC3B,MAAMC,EAAKvjE,EAAOsjE,GAAQ,GAC1BD,EAAK1gE,SAAQ,SAAU+I,EAAM83D,GACzB,MAAMC,EAAKF,EAAGC,GAAQ,GACtB93D,EAAK/I,SAAQ,SAAU0uB,EAAOqyC,GAC1B,GAAIxnE,MAAMC,QAAQk1B,IAAUA,EAAM5yB,OAAS,EAAG,CAC1C,IAAIgyB,GAAQ2P,EAAAA,EAAAA,GAAM+iC,EAAWC,EAAW,CAAEr6C,EAAGsI,EAAM,GAAIrI,EAAGqI,EAAM,KAEhE,GADAoyC,EAAGC,GAAQ,CAACjzC,EAAM1H,EAAG0H,EAAMzH,GACvBqI,EAAM5yB,OAAS,EACf,IAAK,IAAInB,EAAI,EAAGA,EAAI+zB,EAAM5yB,OAAOnB,IAC7BmmE,EAAGC,GAAMpmE,GAAK+zB,EAAM/zB,QAG5BmmE,EAAGC,GAAQryC,WAKtB2xC,EAGKC,EAGAC,IACNljE,EAASA,EAAO,IAHhBA,EAASA,EAAO,GAAG,GAHnBA,EAASA,EAAO,GAAG,GAAG,GAQnBA,GAGX2jE,mBAAoB,SAAUjtD,GAC1B,IAAI1W,EACJ,MAAM4jE,EAAI,QACV,GAAI1nE,MAAMC,QAAQua,IAAWA,EAAOjY,QAAU,EAC1C,GAAIiY,EAAO,KAAOA,EAAO,GACrB1W,EAASrD,KAAKS,GAAKwmE,EAAIjnE,KAAKY,IAAInC,KAAKyoE,SAASntD,EAAO,KAAO,QAE3D,CACD,MAAMotD,EAAO1oE,KAAKyoE,SAASntD,EAAO,GAAKA,EAAO,IACxCqtD,EAAWpnE,KAAKa,IAAIsmE,EAAO,GAC3B5tD,EAAI6tD,EAAWA,EAErB/jE,EAAS4jE,GADC,EAAIjnE,KAAKqnE,MAAMrnE,KAAKkrC,KAAK3xB,GAAIvZ,KAAKkrC,KAAK,EAAI3xB,MACnCQ,EAAO,GAAKA,EAAO,IAG7C,OAAO1W,GAGXikE,SAAU,SAAUC,GAChB,OAAa,IAANA,EAAYvnE,KAAKS,IAE5BymE,SAAU,SAAUM,GAChB,OAAOA,EAAMxnE,KAAKS,GAAK,KAE3BgnE,IAAK,SAAUp0D,GACX,MAAMq0D,EAAQ,EAAI1nE,KAAKS,GACvB,OAAQ4S,EAAIq0D,EAAQA,GAASA,GAGjCC,WAAY,SAAUhiE,GAClB,IAAItC,EAAS,KAEb,GADAsC,EAAMA,EAAI0iB,OACN,kBAAkBqY,KAAK/6B,IACvB,oCAAoC+6B,KAAK/6B,IACzC,yDAAyD+6B,KAAK/6B,GAAM,CACpE,IAAIsC,EAAQtC,EAAI0iB,OAAOpgB,MAAM,qBACzBA,IACA5E,EAAS4E,EAAM,IAGvB,OAAO5E,GAEXukE,SAAU,SAAUjiE,GAChB,OAAOA,EAAIqC,QAAQ,oCAAqC,qCAG5D6/D,cAAe,SAAUC,EAAMC,GAC3B,GAAID,IAASC,EACT,OAAO,EAEX,IAAIC,EAAQvpE,KAAKkpE,WAAWG,GACxBG,EAAQxpE,KAAKkpE,WAAWI,GAC5B,OAAiB,OAAVC,GAA4B,OAAVC,GAAkBD,IAAUC,GAGzD7nC,gBAAiB,SAAUv4B,EAAQX,EAAKy2C,GACpC,IAAIt6C,EAAS6D,EACb,GAAIlF,EAAAA,EAAAA,MAAWA,EAAAA,EAAAA,KAAQ6F,GAAS,CAC5B,IAAIgQ,EAAO7V,EAAAA,EAAAA,KAAQ6F,GAAQX,GAC3B,GAAI2Q,IACAxU,EAASwU,EACL8lC,GACA,IAAK,IAAIrnC,KAAKqnC,EACVt6C,EAASA,EAAO2E,QAAQ,IAAMsO,EAAI,IAAKqnC,EAAMrnC,IAK7D,OAAOjT,GAGX04C,gBAAiB1yC,eAAgB6+D,EAActlE,EAAMo0B,GACjD,MAMMmxC,EAAgB9+D,eAAgB2yC,GAClC,IAAIl0C,EAAWw6D,EAAcrlD,IAAI++B,GACjC,GAAIl0C,EACA,OAAOA,EAEN,CAED,IAAI2iB,EADJ63C,EAAc/kD,IAAIy+B,GAAY,GAE9B,IACIvxB,QAAiBzoB,EAAAA,EAAAA,KAAQ,CACrB8R,IAAK9R,EAAAA,EAAAA,YAAkB,gBAAeg6C,QACtCtvB,OAAQ,MACRtC,aAAc,SAGtB,MAAOlS,GAEH,MADA/R,QAAQC,IAAI,4BAA8B8R,EAAIkE,SACxClE,EAEV,MAAM8P,EAAUyC,EAAS7nB,KAAKqF,MAAM,8CAIpC,OAHI+f,SACM3qB,QAAQwiB,IAAImI,EAAQ5e,MAAM,GAAGrM,KAAIqqB,GAAO+gD,EAAc/gD,EAAIiB,WA3BpD,SAAU2zB,EAAYosB,GAC1C,MAAMtgE,EAAW6yC,EAAAA,EAAAA,QAAmBytB,GAGpC,OAFAztB,EAAAA,EAAAA,gBAA2BqB,EAAYl0C,GACvCw6D,EAAc/kD,IAAIy+B,EAAYl0C,GACvBA,EAyBIugE,CAAgBrsB,EAAYvxB,EAAS7nB,QAG9C2+B,EAAQ,SAAUz5B,GACpB,MAAMK,EAAOL,EAASlF,GAItB,OAHIF,EAAK08B,WAAWpI,IAChBA,EAAS7uB,GAENA,GAEX,GAAIzF,EAAK08B,WAAW8oC,GAChB,OAAO3mC,EAAM2mC,GAIb,OAAO3mC,QADgB4mC,EAAcD,KAK7CI,kBAAmB,SAAUl2C,GACzB,IAAI/uB,EAAS,GACb,GAAI+uB,EAAU,CACV,IAAIm2C,EAAMn2C,EAAS3qB,QAAQ,KACvB8gE,EAAM,IACNn2C,EAAWA,EAASwF,UAAU,EAAG2wC,IAErCllE,EAAS+uB,EAEb,OAAO/uB,GAGXmlE,mBAAoB,SAAU10D,GAC1B,IAAI5N,EAAM4N,EAAIrM,QAAQ,KAUtB,OATIvB,GAAO,EACP4N,EAAMA,EAAIuR,OAAO,EAAGnf,IAGpBA,EAAM4N,EAAIrM,QAAQ,KACdvB,GAAO,IACP4N,EAAMA,EAAIuR,OAAO,EAAGnf,KAGpB4N,EAAIuR,OAAOvR,EAAIqe,YAAY,KAAO,GAAGtF,eACzC,IAAK,MACD,OAAOtuB,EAAAA,EAAAA,SAAAA,IACX,IAAK,MACD,OAAOA,EAAAA,EAAAA,SAAAA,IACX,IAAK,OACL,IAAK,UACD,OAAOA,EAAAA,EAAAA,SAAAA,QACX,IAAK,MACD,OAAOA,EAAAA,EAAAA,SAAAA,IACX,IAAK,MACD,OAAOA,EAAAA,EAAAA,SAAAA,IACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,SAAAA,WACX,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACD,OAAOA,EAAAA,EAAAA,SAAAA,UACX,IAAK,MACD,OAAOA,EAAAA,EAAAA,SAAAA,IACX,QACI,OAAO,OAInBkqE,qBAAsB,SAAU30D,GAC5B,IAAI40D,EACJ,GAAI50D,EAAK,CACL,IAAI60D,EAAW70D,EAAIrM,QAAQ,KAC3B,GAAIkhE,GAAY,EAAG,CAEf,IAAIC,GADJF,EAAc50D,EAAIuR,OAAOsjD,IACKlhE,QAAQ,KAClCmhE,GAAe,IACfF,EAAcA,EAAYrjD,OAAO,EAAGujD,SAIxCF,EAAc,SAIlBA,EAAc53D,SAASye,OAE3B,IAAIlsB,EAASqlE,EAAY1gE,QAAQ,QAAS,IAAI4I,MAAM,KAAK7T,IAAI,SAAUkJ,GACnE,OAA6BxH,MAAtBwH,EAAMA,EAAI2K,MAAM,MAAe,IAAM3K,EAAI,GAAIxH,MACtDkgD,KAAK,KAAK,GAEZ,cADOt7C,EAAO,IACPA,GAGX++B,eAAgB,SAAUhI,GACtB,MAAMr0B,EAAM,GACZ,IAAK,IAAImB,KAAOkzB,EACZr0B,EAAIc,KAAKqqB,mBAAmBhqB,GAAO,IAAMgqB,mBAAmBkJ,EAAIlzB,KAEpE,OAAOnB,EAAIgD,KAAK,KAAKf,QAAQ,OAAQ,MAGzC6gE,YAAa,SAAUtvD,EAAGtT,GAEtB,IADA,IAAIyD,EAAM6P,EAAEzX,OACL4H,GACH6P,EAAE7P,GAAO6P,EAAE7P,EAAM,GACjBA,IAEJ6P,EAAE,GAAKtT,GAGX6iE,QAAS,CACLC,UAAW,SAAU7hE,GACjB,OAAOlF,EAAAA,EAAAA,OAAUkF,IAErB8hE,UAAW,SAAU9hE,EAAK5F,EAAOlD,GAC7B,OAAO4D,EAAAA,EAAAA,OAAUkF,EAAK5F,EAAOlD,IAEjC6qE,cAAe,SAAU/hE,GAQrB,OANIgiE,cAAgBA,wBAAwBC,QAC/BD,aAAaE,QAAQliE,GAGrBxE,EAAKomE,QAAQC,UAAU7hE,IAIxCmiE,cAAe,SAAUniE,EAAK5F,GAC1B,GAAI4nE,cAAgBA,wBAAwBC,aAC1BtmE,IAAVvB,EACA4nE,aAAaI,WAAWpiE,GAGxBgiE,aAAalxD,QAAQ9Q,EAAK5F,QAK9B,QAAcuB,IAAVvB,EAAqB,CACrB,IAAIioE,EAAS,IAAIjnC,KACjBinC,EAAO9iC,QAAQ8iC,EAAO7iC,UAAY,GAClChkC,EAAKomE,QAAQE,UAAU9hE,EAAK,GAAI,CAAEo/B,QAASijC,SAG3C7mE,EAAKomE,QAAQE,UAAU9hE,EAAK5F,GAGpC,OAAO4F,GAEXsiE,qBAAsB,SAAUtiE,GAQ5B,OANIuiE,gBAAkBA,0BAA0BN,QACnCM,eAAeL,QAAQliE,GAGvBxE,EAAKomE,QAAQC,UAAU7hE,IAIxCwiE,qBAAsB,SAAUxiE,EAAK5F,GACjC,GAAImoE,gBAAkBA,0BAA0BN,aAC9BtmE,IAAVvB,EACAmoE,eAAeH,WAAWpiE,GAG1BuiE,eAAezxD,QAAQ9Q,EAAK5F,QAKhC,QAAcuB,IAAVvB,EAAqB,CACrB,IAAIioE,EAAS,IAAIjnC,KACjBinC,EAAO9iC,QAAQ8iC,EAAO7iC,UAAY,GAClChkC,EAAKomE,QAAQE,UAAU9hE,EAAK,GAAI,CAAEo/B,QAASijC,SAG3C7mE,EAAKomE,QAAQE,UAAU9hE,EAAK5F,GAGpC,OAAO4F,IAGfyiE,cAAe,WACX,QAAI,0BAA0BjpC,KAAK66B,UAAUC,YAClC,IAAIp1C,OAAO2B,OAAO6hD,KAIjC/nC,SAAU,WACN,IAAIgoC,EAAK35D,OAAOqrD,UAAUC,UAEtBsO,EAAOD,EAAGpiE,QAAQ,SACtB,GAAIqiE,EAAO,EAEP,OAAO/yD,SAAS8yD,EAAGjyC,UAAUkyC,EAAO,EAAGD,EAAGpiE,QAAQ,IAAKqiE,IAAQ,IAInE,GADcD,EAAGpiE,QAAQ,YACX,EAAG,CAEb,IAAIgvD,EAAKoT,EAAGpiE,QAAQ,OACpB,OAAOsP,SAAS8yD,EAAGjyC,UAAU6+B,EAAK,EAAGoT,EAAGpiE,QAAQ,IAAKgvD,IAAM,IAK/D,IAAItW,EAAO0pB,EAAGpiE,QAAQ,SACtB,OAAI04C,EAAO,GAEAppC,SAAS8yD,EAAGjyC,UAAUuoB,EAAO,EAAG0pB,EAAGpiE,QAAQ,IAAK04C,IAAQ,KAMvE4pB,aAAc,WACV,OAAO75D,OAAO85D,QAGlBC,aAAc,WACV,QAAS1O,UAAUC,UAAUvzD,MAAM,6BAEvCiiE,YAAa,WACT,MAAMC,EAAgBlkC,WAAW,oBAAoBje,QAC/CoiD,EAAcnkC,WAAW,kBAAkBje,QACjD,GAAImiD,GAAiBC,EACjB,OAAO,EAEX,GAAID,IAAkBC,EAAa,CAoB/B,OAjBQC,EAAK,iBACLC,GAAStoE,EAAAA,EAAAA,gBAAAA,SAGbuoE,EAAWr6D,OAAO+1B,WAAWokC,IAGhBG,QAAUH,IAGnBC,EAAQC,EAASviD,WAIdsiD,EAhBK,IAIRC,EAFAF,EACAC,EAoBZ,QAAKH,IAAiBC,KAGlBnkC,WAAW,kBAAkBje,WAG5BhmB,EAAAA,EAAAA,gBAAAA,cAAL,IAIJyoE,cAAe,WACX,OAAOlP,UAAUC,UAAUvzD,MAAM,aAErCyiE,iBAAkB,WACd,OAAOnP,UAAUC,UAAUvzD,MAAM,gBAErC0iE,UAAW,WACP,OAAOpP,UAAUC,UAAUvzD,MAAM,sBAErC2iE,oBAAqB,WACjB,OAAOrP,UAAUC,UAAUvzD,MAAM,cAErC4iE,aAAc,WACV,OAAOnoE,EAAK+nE,iBAAmB/nE,EAAKioE,aAAejoE,EAAKkoE,uBAAyBloE,EAAKgoE,oBAE1FI,WAAY,WACR,IACIC,GADS,IAAIC,MACIF,aACrB,MAAO,CAAExjE,KAAMyjE,EAAQzjE,KAAMyG,QAASg9D,EAAQE,QAElDC,qBAAsB,SAAUjrB,EAAYt7B,GAKxC,IAJA,IAAIwmD,EAAaxmD,EAASld,QAAQ,KAC9B2jE,EAAMzmD,EAASU,OAAO8lD,EAAa,GACnC9mD,EAAQ47B,EAAWorB,uBAAuB,IAAKD,GAE1CzqE,EAAI,EAAGA,EAAI0jB,EAAMviB,OAAQnB,IAC9B,GAAI0jB,EAAM1jB,GAAGgkB,UAAYA,EACrB,OAAON,GAKnBinD,iBAAkB,SAAUx3D,EAAKy3D,GAC7B,IAAKA,EACD,OAAOz3D,EAEX,IAAI03D,EACAC,GAAa,EACjB,IACID,EAAS,IAAIn0D,IAAIvD,GAErB,MAAOtW,GACCA,aAAagR,YACbi9D,GAAa,EACbD,EAAS,IAAIn0D,IAAIvD,EAAK5D,OAAOY,SAASR,OAG9C,IAAK,IAAIpJ,KAAOqkE,EAAY,CACxB,MAAMjqE,EAAQiqE,EAAWrkE,GACzBskE,EAAOE,aAAanuD,IAAIrW,EAAK5F,GAEjC,MAAMqqE,EAASH,EAAOl7D,KACtB,OAAIm7D,EACOE,EAAOtmD,OAAOsmD,EAAOlkE,QAAQ+jE,EAAOI,MAAQJ,EAAOI,KAAK9pE,QAE5D6pE,GAEXE,mBAAoB,SAAU/3D,EAAKg4D,GAC/B,IAAIC,EAAWj4D,EAAIlD,MAAM,KACzB,GAAIm7D,EAASjqE,QAAU,EAAG,CAMtB,IAJA,IAAIujC,EAASnU,mBAAmB46C,EAAUj/C,eAAiB,IACvDm/C,EAAOD,EAAS,GAAGl/C,cAAcjc,MAAM,SAGlCjQ,EAAIqrE,EAAKlqE,OAAQnB,KAAM,IAEY,IAApCqrE,EAAKrrE,GAAGwxB,YAAYkT,EAAQ,IAC5B2mC,EAAKxkE,OAAO7G,EAAG,GAKvB,OADAmT,EAAMi4D,EAAS,GAAK,IAAMC,EAAKjjE,KAAK,KAGpC,OAAO+K,GAIfm4D,UAAW,SAAUC,EAAa9tE,GAC9BA,EAAUA,GAAW,GAErB8tE,EAAYC,QAAS,EACrBD,EAAY1vC,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAC1B,MAAM6tE,EAAcF,EAAY/hE,iBAAiB,mBACjD,GAAIiiE,GAAeA,EAAYtqE,OAAS,EACpC,IAAK,IAAInB,EAAI,EAAGA,EAAIyrE,EAAYtqE,OAAQnB,IAAK,CACzC,IAAI0rE,EAAgBjK,EAAmBnlD,IAAImvD,EAAYzrE,IACnD0rE,EACAjK,EAAmBkK,OAAOF,EAAYzrE,KAGtC0rE,EAAgB,SAAU7uE,GAEtB,OADAA,EAAE+uE,kBACKvqE,EAAAA,EAAAA,KAAAA,WAAmB5D,EAAQiuE,cAAe7uE,EAAE0O,SAEvDk2D,EAAmB7kD,IAAI6uD,EAAYzrE,GAAI0rE,IAE3CjK,EAAmB7kD,IAAI6uD,EAAYzrE,GAAI0rE,GACvCD,EAAYzrE,GAAG0J,iBAAiB,QAASgiE,GAI7C3pE,EAAK08B,WAAWhhC,EAAQouE,eACxBpuE,EAAQouE,gBAIhBC,WAAY,SAAUz1C,EAAU9qB,GAE5B,MAAMnI,EAAO,SAAU2oE,GACnBA,EAAMlwC,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAG3B,IAAImuE,EACJ,GAAIxgE,EAAQ,CAER,IADAwgE,EAAQxgE,EACDwgE,IAAUA,EAAM1kD,QAAQ,cAC3B0kD,EAAQA,EAAMzR,cAGlBl3D,EAAK2oE,QAELntE,MAAMN,UAAU+G,QAAQ7G,KAAKiM,SAASjB,iBAAiB,cAAc,SAAUuiE,GAC3E3oE,EAAK2oE,MAIT11C,GACAA,KAIR21C,WAAY,SAAUC,GAClB,IAAI3mE,EAAM2mE,EACV,IACI3mE,EAAMA,EAAIg1D,eACFjzC,QAAQ,eACZ/hB,EAAI7B,MAAMg3C,QAAU,cAGrBn1C,IAGX4mE,MAAO,SAAU3gE,EAAQ9N,GACrB,MAAM0uE,EAAe,SAAUC,GAC3B7gE,EAAO7B,iBAAiB,YAAa0iE,EAASC,OAC9C9gE,EAAO7B,iBAAiB,aAAc0iE,EAASC,MAAO,CAAEvgE,SAAS,IACjEP,EAAO7B,iBAAiB,UAAW0iE,EAASxE,KAC5Cr8D,EAAO7B,iBAAiB,WAAY0iE,EAASxE,IAAK,CAAE97D,SAAS,KAGjE,GAAgB,YAAZrO,EAAuB,CACvB,MAAM2uE,EAAW5K,EAAcllD,IAAI/Q,GAOnC,YANI6gE,IACA7gE,EAAOkzC,oBAAoB,YAAa2tB,EAASC,OACjD9gE,EAAOkzC,oBAAoB,aAAc2tB,EAASC,OAClD9gE,EAAOkzC,oBAAoB,UAAW2tB,EAASxE,KAC/Cr8D,EAAOkzC,oBAAoB,WAAY2tB,EAASxE,OAInD,GAAgB,WAAZnqE,EAAsB,CAC3B,MAAM2uE,EAAW5K,EAAcllD,IAAI/Q,GAInC,YAHI6gE,GACAD,EAAaC,IAMrB,MAAME,GADN7uE,EAAUA,GAAW,IACO6uE,aAAe,GACrCC,EAAmB9uE,EAAQ8uE,kBAAoB,GAC/CC,EAAiB/uE,EAAQ+uE,gBAAkB,IACjD,IAAIC,EAAmB,CAAE,GAAM,EAAG,GAAM,GACpCC,EAAiB,CAAE,GAAM,EAAG,GAAM,GAClCC,EAAY,EAGhB,MAoDMP,EAAW,CACbC,MA1Be,SAAUxvE,IAbX,SAAUA,GACxB,GAAIY,EAAQmvE,QAER,IADA,IAAItnE,EAAMzI,EAAE0O,OACLjG,GAAOA,IAAQiG,GAAQ,CAC1B,GAAIjG,EAAI+hB,SAAW/hB,EAAI+hB,QAAQ5pB,EAAQmvE,SACnC,OAAO,EAEXtnE,EAAMA,EAAIg6C,WAGlB,OAAO,GAIHutB,CAAUhwE,KACVA,EAAI,mBAAoBA,EAAIA,EAAEiwE,eAAe,GAAKjwE,EAClD4vE,EAAiBhhD,EAAI5uB,EAAEkwE,MACvBN,EAAiB/gD,EAAI7uB,EAAEmwE,MACvBL,GAAY,IAAIhrC,MAAOsrC,YAsB3BrF,IAlBa,SAAU/qE,GACvB,GAAI8vE,EAAW,CAKX,GAJA9vE,EAAI,mBAAoBA,EAAIA,EAAEiwE,eAAe,GAAKjwE,EAClD6vE,EAAejhD,EAAI5uB,EAAEkwE,MACrBL,EAAehhD,EAAI7uB,EAAEmwE,OACP,IAAIrrC,MAAOsrC,UAAYN,GAClBH,EAAgB,CAC/B,MAAMn2C,EAAW54B,EA3CR,SAAUyvE,EAAaC,GACxC,MAAMxsB,EAAKwsB,EAAU1hD,EAAIyhD,EAAYzhD,EAC/Bm1B,EAAKusB,EAAUzhD,EAAIwhD,EAAYxhD,EAC/B0hD,EAAM/tE,KAAKyoB,IAAI64B,GACf0sB,EAAMhuE,KAAKyoB,IAAI84B,GACrB,OAAIwsB,EAAMC,GAAOD,EAAMd,GAAee,GAAOd,EAClC5rB,EAAK,EAAI,OAAS,QAEzB0sB,EAAMD,GAAOC,EAAMf,GAAec,GAAOb,EAClC3rB,EAAK,EAAI,KAAO,OAEpB,OAgC0B0sB,CAAab,EAAkBC,IACpDr2C,GACAA,EAAS73B,KAAK+M,GAGtBohE,EAAY,KAQpBnL,EAAc5kD,IAAIrR,EAAQ6gE,GAC1BD,EAAaC,IAGjBmB,mBAAoB,SAAU5mE,GAC1B,MACMqU,EAAS,IAAI6T,gBAAgB1e,SAASye,QAEtClsB,EADc9D,MAAMoX,KAAKgF,GACJtU,MAHZ1D,EAAEuD,EAAK5F,KAAW4F,EAAI2lB,gBAAkBvlB,EAAKulB,gBAI5D,OAAOxpB,EAASA,EAAO,GAAK,IAGhC8qE,oBAAqB,SAAU/vE,GAC3B,IAAIiF,EAAS,QAET+qE,GADJhwE,EAAUA,GAAW,IACIgwE,YAAc,iBACnCC,EAAYjwE,EAAQiwE,WAAa,OAEjCC,EAAkB/S,UAAUgT,WAAahT,UAAUgT,UAAUzsE,OAASy5D,UAAUgT,UAAU,GAAKhT,UAAUiT,UAAYjT,UAAUkT,aAC/HC,EAAO1sE,EAAAA,EAAAA,KAAAA,mBAA2BqsE,IAAcrsE,EAAAA,EAAAA,KAAAA,QAAAA,UAA0BosE,IAAeE,EACzFK,EAAYD,EAAKjnE,QAAQ,KACzBknE,GAAa,IACbD,EAAOA,EAAKrpD,OAAO,EAAGspD,IAE1B,IAAIC,EAAiB,IAAItsC,MAAK,IAAIA,MAAOsrC,UAAY,SAGrD,OAFA5rE,EAAAA,EAAAA,KAAAA,QAAAA,UAA0BosE,EAAYM,EAAM,CAAEpoC,QAASsoC,IAE/CF,GACJ,IAAK,KACDrrE,EAAS,QACT,MACJ,IAAK,KACDA,EAAS,QACT,MACJ,QACIA,EAAS,QAGjB,OAAOA,GAGXwrE,iBAAkB,SAAUC,GACxB,OAAQA,GAAY,IAAI9mE,QAAQ,iBAAkB,MAGtD+mE,2BAA4B,SAAU78C,GAClC,OAAQA,GACJ,IAAK,OACD,OAAO3zB,EAAAA,EAAAA,OAAAA,IACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,IAAK,QACL,IAAK,WACD,OAAOA,EAAAA,EAAAA,OAAAA,QACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,IACX,IAAK,YACD,OAAOA,EAAAA,EAAAA,OAAAA,SACX,IAAK,QACD,OAAOA,EAAAA,EAAAA,OAAAA,WACX,IAAK,OACD,OAAOA,EAAAA,EAAAA,OAAAA,UACX,QACI,OAAO,OAInBywE,aAAc,SAAUF,EAAU9hD,GAC9B,IAAI6Q,EAAOzyB,SAASC,cAAc,KAClC,QAAsBxI,IAAlBg7B,EAAKy/B,SAAwB,CAC7B,IAAIxpD,EAAMuD,IAAIC,gBAAgB0V,GAC9B6Q,EAAKhS,aAAa,OAAQ/X,GAC1B+pB,EAAKhS,aAAa,WAAY7pB,EAAAA,EAAAA,KAAAA,iBAAyB8sE,IACvDjxC,EAAKz5B,MAAM21C,WAAa,SACxB3uC,SAAS+0B,KAAK70B,YAAYuyB,GAC1BA,EAAKkM,QACL3+B,SAAS+0B,KAAK+6B,YAAYr9B,KAIlCoxC,aAAc,SAAUH,EAAUlmE,EAAMhG,GACpC,IAAIoqB,EAAO,IAAIld,KAAK,CAAClN,GAAO,CAAEgG,KAAMA,IACpCkmE,EAAW9sE,EAAAA,EAAAA,KAAAA,iBAAyB8sE,GAChCvT,UAAU2T,WACV3T,UAAU2T,WAAWliD,EAAM8hD,GAE3B9sE,EAAAA,EAAAA,KAAAA,aAAqB8sE,EAAU9hD,IAIvCmiD,gBAAiB,SAAUL,EAAUlmE,EAAMwmE,GAIvC,IAHA,IAAIC,EAASC,KAAKF,EAAQx+D,MAAM,KAAK,IAEjC4iD,EAAQ,GACH7yD,EAAI,EAAGA,EAAI0uE,EAAOvtE,OAAQnB,IAC/B6yD,EAAM3sD,KAAKwoE,EAAOE,WAAW5uE,IAEjC,IAAIqsB,EAAO,IAAIld,KAAK,CAAC,IAAI0a,WAAWgpC,IAAS,CAAE5qD,KAAMA,IAErDkmE,EAAW9sE,EAAAA,EAAAA,KAAAA,iBAAyB8sE,GAChCvT,UAAU2T,WACV3T,UAAU2T,WAAWliD,EAAM8hD,GAE3B9sE,EAAAA,EAAAA,KAAAA,aAAqB8sE,EAAU9hD,IAOvCwiD,WAAY,SAAU17D,GAClB,OAAO,IAAIzW,SAAQ,SAAUC,EAAS4W,GAClClS,EAAAA,EAAAA,KAAQ,CACJ8R,IAAK,uCACLlR,KAAM,CAAE6sE,aAAc,2CAA4CC,QAAS57D,KAE1E3W,MAAK,SAAUstB,GACZntB,EAAQmtB,EAAS7nB,SAEpBgS,OAAM,SAAUpX,GACb0W,EAAO1W,UAQvBmyE,aAAc,SAAUvoD,GACpB,OAAOlX,OAAO2Z,KAAK+lD,SAAS1+C,mBAAmB9J,MAMnDyoD,aAAc,SAAUzoD,GACpB,IAAI/jB,EACJ,IACIA,EAASutB,mBAAmBk/C,OAAO5/D,OAAOo/D,KAAKloD,KAEnD,MAAO1S,GACHrR,EAAS,KAEb,OAAOA,GAGX0sE,mBAAoB,SAAUC,GAS1B,OARIzwE,MAAMC,QAAQwwE,KACdA,EAAQA,EACH5mE,MAAM,EAAG,GACT1C,QAAO,SAAU+Z,EAAMC,GACpB,MAAM0G,EAAM1G,EAAIgB,SAAS,IACzB,OAAOjB,EAAO,KAAKmX,UAAU,EAAG,EAAIxQ,EAAItlB,QAAUslB,IACnD,MAEJ4oD,GAIXC,UAAW,SAAUC,EAAOC,EAAOC,EAAYC,GAG3C,IAFA,IAAIhtE,EAAS,GAEJ1C,EAAI,EAAGA,EAAIuvE,EAAMpuE,OAAQnB,IAAK,CAGnC,IAFA,IAAI2vE,EAAQJ,EAAMvvE,GACdu3B,GAAQ,EACHniB,EAAI,EAAGA,EAAIo6D,EAAMruE,OAAQiU,IAC9B,GAAIq6D,EAAWE,EAAOH,EAAMp6D,IAAK,CAC7BmiB,GAAQ,EACR,MAGJA,IAAUm4C,GACVhtE,EAAOwD,KAAKypE,GAGpB,OAAOjtE,GAIXktE,OAAQ,SAAUL,EAAOC,EAAOC,GAC5B,OAAO3xE,KAAKwxE,UAAUC,EAAOC,EAAOC,GAAY,IAGpDI,YAAa,SAAUN,EAAOC,EAAOC,GACjC,OAAO3xE,KAAKwxE,UAAUC,EAAOC,EAAOC,GAAY,IAGpDK,aAAc,SAAUP,EAAOC,EAAOC,GAClC,OAAO3xE,KAAK+xE,YAAYL,EAAOD,EAAOE,IAG1CM,UAAW,SAAU5U,EAAQ6U,GACzB,IAAIC,EAAiB,CAAEhoE,KAAM,YAAaioE,eAAgB,KAEtDC,EAAOr1D,UAAU3Z,OAAS,QAAsBe,IAAjB4Y,UAAU,GAAmBA,UAAU,GAAKm1D,EAC3EhoE,EAAOkoE,EAAKloE,KACZioE,EAAiBC,EAAKD,eAEtBE,EAAUjV,EAAOkV,WAAW,MAEhC,IAAKD,EACD,MAAO,GAGX,IAAIhgD,EAAQ+qC,EAAO/qC,MACfC,EAAS8qC,EAAO9qC,OAEhBpuB,EAAOmuE,EAAQE,aAAa,EAAG,EAAGlgD,EAAOC,GACzCkgD,EAAqBH,EAAQI,yBAE7BR,IAEAI,EAAQI,yBAA2B,mBACnCJ,EAAQK,UAAYT,EACpBI,EAAQM,SAAS,EAAG,EAAGtgD,EAAOC,IAGlC,IAAIsgD,EAAYxV,EAAOE,UAAUpzD,EAAMioE,GAQvC,OANIF,IACAI,EAAQQ,UAAU,EAAG,EAAGxgD,EAAOC,GAC/B+/C,EAAQS,aAAa5uE,EAAM,EAAG,GAC9BmuE,EAAQI,yBAA2BD,GAGhCI,GAGXG,aAAc,SAAUrhE,EAAKwf,GAEzB,IAAI8hD,EAAe,SAAUtnE,GACzB,IAAI0xD,EAAS1wD,SAASC,cAAc,UAChCsmE,EAAM7V,EAAOkV,WAAW,MAK5B,OAJAlV,EAAO9qC,OAAS5mB,EAAI4mB,OACpB8qC,EAAO/qC,MAAQ3mB,EAAI2mB,MACnB4gD,EAAIC,UAAUxnE,EAAK,EAAG,GAEf0xD,GAGX,OAAO,IAAIz+D,SAAQ,SAAUC,EAAS4W,GAClC,IAAK0b,EACD,OAAQxf,EAAIiV,OAAOjV,EAAI+hB,YAAY,KAAO,GAAGtF,eACzC,IAAK,MACD+C,EAAe,gBACf,MACJ,IAAK,MACDA,EAAe,YACf,MACJ,IAAK,MACDA,EAAe,YACf,MACJ,QACIA,EAAe,aAI3B,IAAIxlB,EAAM,IAAIynE,MACdznE,EAAIwhB,YAAc,YAClBxhB,EAAIigB,OAAS,WACT,IACIynD,EADAhW,EAAS4V,EAAatnE,GAG1B,IACI0nE,EAAU9vE,EAAAA,EAAAA,KAAAA,UAAkB85D,EAAQ,UAAW,CAC3ClzD,KAAMgnB,EACNihD,eAAgB,IAEpBvzE,EAAQ,CAAEy0E,QAASD,EAAShW,OAAQA,IACtC,MAAOpnD,GACLtK,EAAIgG,IAAMpO,EAAAA,EAAAA,QAAWoO,KAI7BhG,EAAI4hB,QAAU,SAAUgmD,GACpB,IAAIloD,EAAM,IAAIC,eACdD,EAAIje,KAAK,MAAO7J,EAAAA,EAAAA,QAAWoO,IAAM,GACjC0Z,EAAIK,iBAAiB,eAAgB,qCAErCL,EAAIM,aAAe,cACnBN,EAAIO,OAAS,SAAUje,GACnB,GAAoB,MAAhB3N,KAAK6rB,OAAgB,CAIrB,IAHA,IAAIC,EAAa,IAAIC,WAAW/rB,KAAKgsB,UACjC9pB,EAAI4pB,EAAWzoB,OACf4oB,EAAe,IAAInrB,MAAMoB,GACtBA,KACH+pB,EAAa/pB,GAAKoP,OAAO4a,aAAaJ,EAAW5pB,IAErD,IAAIiC,EAAO8nB,EAAa3hB,KAAK,IACzBH,EAAOkhB,EAAIe,kBAAkB,gBACH,IAA1BjiB,EAAKnB,QAAQ,WACb2C,EAAIgG,IAAM,QAAUxH,EAAO,WAAasH,OAAO2Z,KAAKjnB,GACpDwH,EAAIigB,OAAS,WACT,MAAMyxC,EAAS4V,EAAatnE,GACtB0nE,EAAU9vE,EAAAA,EAAAA,KAAAA,UAAkB85D,EAAQ,UAAW,CACjDlzD,KAAMgnB,GAAgB,aACtBihD,eAAgB,IAEpBvzE,EAAQ,CAAEy0E,QAASD,EAAShW,OAAQA,QAKpDhyC,EAAI0W,mBAAqB,WACE,IAAnB1W,EAAI2W,YACe,MAAf3W,EAAIQ,QACJpW,EAAOzW,MAAM,cAAgBqsB,EAAIQ,UAK7CR,EAAIgB,QAGR1gB,EAAIgG,IAAMA,GACNhG,EAAI6nE,eAA6BpvE,IAAjBuH,EAAI6nE,YACpB7nE,EAAIgG,IAAM,yEACVhG,EAAIgG,IAAMA,OAKtB8hE,gBAAiB,SAAU9nE,EAAKwlB,GAC5B,IAUIksC,EAVe,SAAU1xD,GACzB,IAAI0xD,EAAS1wD,SAASC,cAAc,UAChCsmE,EAAM7V,EAAOkV,WAAW,MAK5B,OAJAlV,EAAO9qC,OAAS5mB,EAAI4mB,OACpB8qC,EAAO/qC,MAAQ3mB,EAAI2mB,MACnB4gD,EAAIC,UAAUxnE,EAAK,EAAG,GAEf0xD,EAGE4V,CAAatnE,GAG1B,IAKI,MAAO,CAAE+nE,OAJCnwE,EAAAA,EAAAA,KAAAA,UAAkB85D,EAAQ,UAAW,CAC3ClzD,KAAMgnB,GAAgB,aACtBihD,eAAgB,IAEM/U,OAAQA,GACpC,MAAOpnD,GACL,OAAO,OAIf09D,YAAa,SAAUtW,EAAQ1xD,EAAKW,EAAUuoB,GAC1C,IAAI++C,EAAYrwE,EAAAA,EAAAA,KAAAA,YAAoB85D,GAChCiV,EAAUsB,EAAUrB,WAAW,MAEnC,OAAO,IAAI3zE,SAAQ,SAAUC,EAASk1B,GAClC,IAAI8/C,EAAW,IAAIT,MACnBS,EAAS1mD,YAAc,YACvB0mD,EAASliE,IAAMhG,EACfkoE,EAASjoD,OAAS,WACViJ,EACAy9C,EAAQa,UAAUU,EAAUvnE,EAASqhB,GAAK,EAAGrhB,EAASshB,GAAK,EAAGiH,EAAKvC,MAAOuC,EAAKtC,QAE/E+/C,EAAQa,UAAUU,EAAUvnE,EAASqhB,GAAK,EAAGrhB,EAASshB,GAAK,GAE/D/uB,EAAQ+0E,QAKpBE,YAAa,SAAUC,GAEnB,IAAIH,EAAYjnE,SAASC,cAAc,UACnC0lE,EAAUsB,EAAUrB,WAAW,MAUnC,OAPAqB,EAAUthD,MAAQyhD,EAAUzhD,MAC5BshD,EAAUrhD,OAASwhD,EAAUxhD,OAG7B+/C,EAAQa,UAAUY,EAAW,EAAG,GAGzBH,GAGXI,cAAe,SAAUC,GACrB,MAAMC,EAAQD,EAAS31E,KAAIkK,GAAKA,EAAEg0D,cAAgBh0D,EAAEsmD,wBAA0B,CAC1EqlB,IAAK,EACLC,KAAM,EACNC,OAAQ7rE,EAAE+pB,OACV+hD,MAAO9rE,EAAE8pB,SAEP/K,EAAO2sD,EAAMjsE,QAAO,SAAU+Z,EAAMuyD,GACtC,MAAO,CACHhzE,KAAKqa,IAAIoG,EAAK,GAAIuyD,EAAKH,MACvB7yE,KAAKqa,IAAIoG,EAAK,GAAIuyD,EAAKJ,KACvB5yE,KAAK4K,IAAI6V,EAAK,GAAIuyD,EAAKD,OACvB/yE,KAAK4K,IAAI6V,EAAK,GAAIuyD,EAAKF,WAE5B,CACK1sD,OAAOC,kBACPD,OAAOC,kBACPD,OAAOE,kBACPF,OAAOE,oBAETusD,EAAO7sD,EAAK,GACZ4sD,EAAM5sD,EAAK,GAGXqsD,EAAYjnE,SAASC,cAAc,UACnC0lE,EAAUsB,EAAUrB,WAAW,MAarC,OAVAqB,EAAUthD,MAAQ/K,EAAK,GAAK6sD,EAC5BR,EAAUrhD,OAAShL,EAAK,GAAK4sD,EAG7BF,EAAS1sE,SAAQ,SAAU81D,EAAQ51D,GAC/B,MAAM8sE,EAAOL,EAAMzsE,GACnB6qE,EAAQa,UAAU9V,EAAQkX,EAAKH,KAAOA,EAAMG,EAAKJ,IAAMA,EAAKI,EAAKD,MAAQC,EAAKH,KAAMG,EAAKF,OAASE,EAAKJ,QAIpGP,GAGXY,wBAAyB,SAAUC,EAAUC,EAAWC,EAAUC,GAC9D,IAAIC,EAAQtzE,KAAKqa,IAAI+4D,EAAWF,EAAUG,EAAYF,GAEtD,MAAO,CAAEpiD,MAAOmiD,EAAWI,EAAOtiD,OAAQmiD,EAAYG,IAG1DC,iBAAkB,SAAUC,EAAMC,GAC9B,SAASC,EAAIvtC,GAAK,OAAOA,EAAI,GAAK,IAAMA,EAAIA,EAE5C,IAAIxF,EAAI,IAAI2B,KAAKkxC,GACjB,MAAO,CAAC7yC,EAAEgzC,cAAeD,EAAI/yC,EAAEizC,WAAa,GAAIF,EAAI/yC,EAAE+F,YAAY5/B,OAAO2sE,EAAU,CAAC,IAAKC,EAAI/yC,EAAEkzC,YAAaH,EAAI/yC,EAAEmzC,cAAeJ,EAAI/yC,EAAEozC,eAAiB,IAAIhrE,KAAK,KAIrKirE,yBAA0B,SAAUxtC,GAChC,IAAIytC,EAAY,IAAIv7D,IAAI,CACpB,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAC9B,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAC9B,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KACtD,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KACtD,CAAC,IAAK,KAAM,CAAC,IAAK,OAEtB,OAAO8tB,EAAEx+B,QAAQ,yBAAyB,SAAUC,GAChD,OAAOgsE,EAAUh3D,IAAIhV,OAI7BisE,iBAAkB7qE,eAAgByK,EAAKlR,GACnC,IA2DI8lD,EA3DA4U,EAAWj0D,eAAgByK,EAAKlR,GAEhC,IAAI6nB,QAAiB,IAAIptB,SAAQ,SAAUC,EAAS4W,GAChD,MAAMub,EAAU,IAAI1F,eACpB0F,EAAQrF,aAAe,OACvBqF,EAAQ5jB,KAAK,OAAQiI,GACrB2b,EAAQtF,iBAAiB,eAAgB,kCAEzCsF,EAAQ+Q,mBAAqB,SAAUp0B,GACnC,GAA2B,IAAvBqjB,EAAQgR,WACR,GAAuB,MAAnBhR,EAAQnF,OACRpW,EAAO,CACHoW,OAAQmF,EAAQnF,OAChBwY,IAAKrT,EAAQxD,WACbnY,IAAKA,SAIT,IAGI,MAAMqgE,EAA2B1kD,EAAQ5E,kBAAkB,uBAC3D,IAAIikD,EAAW,GACXqF,IACArF,EAAWqF,EAAyBvjE,MAAM,MAAM,GAAGgnB,UAAU,GACb,eAA5Cu8C,EAAyBvjE,MAAM,MAAM,KACrCk+D,EAAWA,EAASl3C,UAAU,EAAGk3C,EAAS38C,YAAY,QAG9D,MAAMpF,EAAc0C,EAAQ5E,kBAAkB,gBAC9CvtB,EAAQ,CAAEsF,KAAM6sB,EAAQhF,SAAUsC,YAAaA,IAAyC,SAAzB0C,EAAQrF,aAA0B,kBAAoB,IAAK0kD,SAAUA,IAExI,MAAOp6D,GACHR,EAAOQ,KAMvB,IACI+a,EAAQ3E,KAAKloB,GACf,MAAO8R,GACLR,EAAOQ,OAGXjD,EAAS,GACb,GAAIgZ,EAAS7nB,KAAKgG,KAAKnB,QAAQ,QAAU,EACrCgK,EAAS,YACR,GAAIgZ,EAAS7nB,KAAKgG,KAAKnB,QAAQ,SAAW,EAC3CgK,EAAS,gBACR,GAAIgZ,EAAS7nB,KAAKgG,KAAKnB,QAAQ,QAAU,IAC1CgK,EAAS,OACL,wBAAwBd,KAAK/N,GAAM,GAAG6zB,SAAS,SAAW,wBAAwB9lB,KAAK/N,GAAM,GAAG6zB,SAAS,cACzG,KAAM,CAAEvvB,IAAK3I,EAAAA,EAAAA,cAAAA,sBAA4CuV,IAAKA,EAAKlR,KAAMA,EAAM6O,OAAQ,wBAAwBd,KAAK/N,GAAM,IAGlIZ,EAAAA,EAAAA,KAAAA,cAAsByoB,EAASqkD,SAAWrkD,EAASqkD,SAAW9sE,EAAAA,EAAAA,UAAeyP,EAAQgZ,EAASsC,YAAatC,EAAS7nB,OAIxH,GAAIrD,MAAMC,QAAQsU,GAAM,CAEpB,IADA,IAAIsgE,EAAetgE,EACVnT,EAAI,EAAGA,EAAIyzE,EAAatyE,OAAQnB,IACrC,UACU28D,EAAS8W,EAAazzE,GAAGmT,IAAKsgE,EAAazzE,GAAGiC,MAExD,MAAOsV,GACHwwC,EAAOxwC,EAGf,GAAIwwC,EACA,MAAMA,aAIJ4U,EAASxpD,EAAKlR,IAG5ByxE,gBAAiB,SAAU7yD,EAAQ7d,EAAQ8Q,EAAcmb,EAAc0kD,EAAUtmE,EAASumE,EAAaC,GACnG,MAAMC,EAAkB,WACpB,OAAIzmE,EACO,aAAeA,EAAU,IAGzB,IAET0mE,EAAY,WACd,IAAKF,EAAQ,MAAO,GACpB,IAAIG,EAAU,GACd,OAAQlgE,EAAa1G,SACjB,IAAK,QACD4mE,EAAU,mBACV,MACJ,IAAK,QACDA,EAAU,mBACV,MACJ,IAAK,QACDA,EAAU,mBAKlB,OAAQH,aAAkBj1E,MAAQi1E,EAAS,CAACA,IAAS9tE,QAAO,SAAU+wB,EAAIC,GACtE,OAAOD,EAAK,IAAMk9C,EAAU,IAAMj9C,EAAK,KAAOi9C,EAAU,MACzD,KAGFp1E,MAAMC,QAAQgiB,IAAaA,aAAkB5jB,SAC9C4jB,EAAS,CAACA,IAEd,IAKIozD,EALA5uC,EAAQ,mBAAqB6uC,EAAwBpgE,GAAchD,OAAO,CAC1EqjE,WAAYR,EAAW,oBAAsB,GAC7C7iE,OAAQ,iBAAmBme,EAAe,OACf,UAAzBnb,EAAa1G,SAAuBwmE,EAAc,iBAAmBA,EAAc,IAAM,IAAM,IACjGQ,EAAY,GAEhB,GAAIx1E,MAAMC,QAAQgiB,GACdozD,EAAY,uBAAkD,UAAzBngE,EAAa1G,QAAsB,IAAM,IAAM,gBAAkB0mE,IAAoB,gCAC1HjzD,EAAOxb,SAAQ,SAAU1E,GACrByzE,GAAaH,EAAUnjE,OAAO,CAC1B+b,SAAUlsB,EACVqC,OAAQA,GAAUA,aAAkB3B,EAAAA,EAAAA,OAAAA,OAAmB2B,EAAOob,QAAQtK,EAAa1G,SAAW,GAC9FymE,OAAQE,cAMhB,IAAK,IAAIzxE,KADT2xE,EAAY,GACMpzD,EAAQ,CACtBozD,EAAY,uBAAkD,UAAzBngE,EAAa1G,QAAsB,IAAM,IAAM,gBAAkB0mE,IAAoB,gCAC1H,IAAI9wE,EAAS6d,EAAOve,GACpB8xE,GAAaH,EAAUnjE,OAAO,CAC1B+b,SAAUvqB,EACVU,OAAQA,GAAUA,aAAkB3B,EAAAA,EAAAA,OAAAA,OAAmB2B,EAAOob,QAAQtK,EAAa1G,SAAW,GAC9FymE,OAAQE,MAMpB,OADA1uC,GAAS+uC,EAAY,oBACd/uC,GAGXgvC,mBAAoB,SAAU/xE,EAAOgyE,EAAgBtxE,EAAQ8Q,GAUzD,OAAOzS,EAAAA,EAAAA,KAAAA,gBAAwB,CAACiB,GAAQU,EAAQ8Q,EAAc,QAAQ,EAAO,KAAM,KAAMwgE,IAK7FC,iBAAkB,SAAUhzE,EAAS6L,EAASC,GAC1C,IAAIrK,EAAS,GACb,GAAIjB,EAAK0gE,cAAclhE,GACnByB,EAAS,mUACJ8N,OAAO,CACJ4zB,OAAoB,UAAZt3B,EAAsB,MAAQ,MACtConE,UAAWjzE,EAAQizE,UACnBjY,aAAch7D,EAAQg7D,aACtBkY,MAAOlzE,EAAQkzE,aAIvB,QAAQ,GACJ,KAAMlzE,EACF,MACJ,KAAK3C,MAAMC,QAAQ0C,GACf,IAAImzE,EAAc,gIAGK5jE,OAAO,CACtB6jE,YAAapzE,EAAQ,GAAK,IAAMA,EAAQ,GACxCqzE,YAAarzE,EAAQ,GAAK,IAAMA,EAAQ,KAEhD,QAAQ,GACJ,IAAiB,UAAZ6L,EACL,IAAiB,UAAZA,EACDpK,GAAU,yBAA2B0xE,EAAc,2BACnD,MACJ,IAAiB,UAAZtnE,EACDpK,GAAU,yBAA2B0xE,EAAc,2BAG3D,MACJ,KAAKnzE,aAAmBF,EAAAA,EAAAA,QACpB,QAAQ,GACJ,IAAiB,UAAZ+L,EACL,IAAiB,UAAZA,EACDpK,GAAU,oEAAsE3B,EAAAA,EAAAA,KAAAA,iBAAyBE,EAAS,CAAE6L,QAAS,MAAOC,QAASA,IAAa,iCAC1J,MACJ,IAAiB,UAAZD,EACDpK,GAAU,wEAA0E3B,EAAAA,EAAAA,KAAAA,iBAAyBE,EAAS,CAAE6L,QAAS,MAAOC,QAASA,IAAa,iCAItK,MACJ,QACIhM,EAAAA,EAAAA,MAAS,uBAKrB,OAAO2B,GAGX6xE,iBAAkB,SAAUtzE,EAAS9D,GAEjC,MAAMq3E,GADNr3E,EAAUA,GAAW,IACM2P,QACrB2nE,EAAa,WACf,OAAIt3E,EAAQ4P,QACD,aAAe5P,EAAQ4P,QAAU,IAGjC,IAEf,IAAI2nE,EAAoB,SAAUx3E,GAC9B,IAAIkF,EACJ,GAAgC,IAA5BoyE,EAAWhuE,QAAQ,KAEnB,IADApE,EAASlF,EAAOujB,WACTre,EAAOoE,QAAQ,MAAQ,GAC1BpE,EAASA,EAAO2E,QAAQ,IAAK,UAIjC3E,EAASlF,EAAOpB,KAAI,SAAU23B,GAC1B,OAAOA,EAAM3rB,KAAK,QACnBA,KAAK,KAEZ,OAAO1F,GAGX,OAAQoyE,GACJ,IAAK,QACD,MACJ,IAAK,MACD,OAAQ,KACCzzE,EAAAA,EAAAA,QAAAA,UAAuBE,aAAmBF,EAAAA,EAAAA,QAAAA,UACpC,mCAAuC0zE,IAAe,iBACzDC,EAAkBzzE,EAAQnD,UAC1B,kCAEG,gCAAoC22E,IAAe,+CACtDC,EAAkBzzE,EAAQnD,SAAS,IACnC,+DAIhB,QACI,OAAQ,KACCiD,EAAAA,EAAAA,QAAAA,UAAuBE,aAAmBF,EAAAA,EAAAA,QAAAA,UACpC,kBAAoB0zE,IAAe,qBACtCC,EAAkBzzE,EAAQnD,SAAS,IACnC,sCAEG,eAAiB22E,IAAe,0DACnCC,EAAkBzzE,EAAQnD,SAAS,IACnC,4EAMxB62E,gBAAiB,WACb,QAAIra,UAAUsa,kBACNta,UAAUsa,cAAcC,YAA2D,cAA7Cva,UAAUsa,cAAcC,WAAWxiE,QAUrFyiE,uBAAwB,SAAUtR,EAAK3zD,GACnC,IAAIzN,EAAiC,IAAxBohE,EAAIh9D,QAAQ,SAAuC,IAAtBg9D,EAAIh9D,QAAQ,MAClDiJ,GAAYrN,GAAUohE,EAAIx8D,MAAM1J,EAAAA,EAAAA,IAAAA,aACpC,GAAImS,EAAU,CACV,IAAIg0D,EAAYh0D,EAAS,GACzBrN,GAAUqhE,GAAa5zD,EAASN,UAAyB3N,MAAb6hE,IAA2Bh0D,EAAS,IAAMI,EAASL,SAC/F,IAAIk0D,EAAQj0D,EAAS,GAAIk0D,EAAQ9zD,EAASD,MAC7B,IAAT8zD,GAAyB,KAAVA,GAAyB,MAATC,GAA2B,KAAVA,KAChDvhE,EAASA,GAAUshE,GAASC,GAGpC,OAAOvhE,GAGX2yE,eAAgB,SAAUvR,EAAK3zD,GAC3B,GAAI2zD,EAAIx8D,MAAM,YACV,OAAO,EAEX,IAAIguE,EAAgB,kBAChBC,EAAczR,EAAIx8D,MAAMguE,GAC5B,GAAIC,GAAeA,EAAYp0E,OAAS,EAAG,CACvC,IAAIq0E,EAAmBrlE,EAAS7I,MAAMguE,GACtC,GAAIE,GAAoBA,EAAiBr0E,OAAS,EAC9C,OAAOo0E,EAAY,GAAG7tD,SAAW8tD,EAAiB,GAAG9tD,OAI7D,OAAO,GAGX+tD,gBAAiB,SAAUtzC,GACnB9gC,EAAAA,EAAAA,SACAmE,QAAQC,IAAI08B,IAIpBuzC,oBAAqB,SAAUC,GAC3B,OAAO,SAAU/8D,EAAGsP,GAChB,OAAItP,EAAE+8D,GAAYztD,EAAEytD,GACT,EAEP/8D,EAAE+8D,GAAYztD,EAAEytD,IACR,EAEL,IAIfC,qBAAsB,SAAUh9D,EAAGsP,GAG/B,IAFA,IAAI3L,EAAM,EAEDvc,EAAI,EAAGA,EAAI4Y,EAAEzX,OAAQnB,IACtB4Y,EAAEi9D,OAAO71E,KAAOkoB,EAAE2tD,OAAO71E,IACzBuc,IAIR,OAAOA,GAGXu5D,eAAgB,SAAUnmE,GACtB,IAAIutB,EAAOzyB,SAASC,cAAc,KAElC,OADAwyB,EAAKvtB,KAAOA,EACLutB,EAAKvtB,MAGhBomE,gBAAiB,SAAUt8C,GACvB,MAAM7pB,EAAS6pB,EAAI7pB,OACbomE,EAAoB,SAAU1wE,EAAKC,EAAKH,GACtCxG,MAAMC,QAAQyG,GACdA,EAAID,QAAQ2wE,IAGA,IAARzwE,IACAH,EAAI,GAAKE,EAAMsK,EAAO,IAEd,IAARrK,IACAH,EAAI,GAAKE,EAAMsK,EAAO,MAKlC,OADA6pB,EAAIp7B,KAAKgH,QAAQ2wE,GACVv8C,EAAIp7B,MAGf43E,qBAAsB,SAAU3wE,GAC5B,OAAI1G,MAAMC,QAAQyG,GACPA,EAAIlJ,IAAIiF,EAAAA,EAAAA,KAAAA,sBAEZiE,GAGX4wE,WAAY,SAAUjuE,GAClB,OAAQA,GACJ,IAAK,6BACL,IAAK,0BACL,IAAK,+BACL,IAAK,+BACL,IAAK,6BACL,IAAK,kCACL,IAAK,wBACL,IAAK,6BACL,IAAK,sBACL,IAAK,qCACL,IAAK,8BACL,IAAK,2BACL,IAAK,6BACL,IAAK,wBACD,OAAO,EACX,QACI,OAAO,IAInBkuE,gBAAiB,SAAU/3E,EAAUs6B,GACjC,MAAM9oB,EAAS,CAAC6V,OAAO2wD,UAAW3wD,OAAO2wD,WACnCC,EAAUj4E,EAAShC,IAAIiF,EAAAA,EAAAA,KAAAA,sBACvBi1E,EAAyB,SAAUhxE,EAAKC,GACtC3G,MAAMC,QAAQyG,GACdA,EAAID,QAAQixE,GAGA,IAAR/wE,GAAaD,EAAMsK,EAAO,GAC1BA,EAAO,GAAKtK,EAEC,IAARC,GAAaD,EAAMsK,EAAO,KAC/BA,EAAO,GAAKtK,IAIxB+wE,EAAQhxE,QAAQixE,GAEhB,MAAMhsC,EAAQ,SAAUxkC,GACpB,OAAOzG,KAAKirC,MAAMxkC,EAAM4yB,GAAaA,GAEzC9oB,EAAO,GAAK06B,EAAM16B,EAAO,IACzBA,EAAO,GAAK06B,EAAM16B,EAAO,IACzB,MAAM2mE,EAA0B,SAAUjxE,EAAKC,EAAKH,GAC5CxG,MAAMC,QAAQyG,GACdA,EAAID,QAAQkxE,IAGA,IAARhxE,IACAH,EAAI,GAAKklC,EAAMhlC,EAAMsK,EAAO,KAEpB,IAARrK,IACAH,EAAI,GAAKklC,EAAMhlC,EAAMsK,EAAO,OAKxC,OADAymE,EAAQhxE,QAAQkxE,GACT,CACH3mE,OAAQA,EACRvR,KAAMg4E,IAIdG,cAAe,SAAU7vE,GACrB,OAAOk7D,EAAmB1yC,IAAIxoB,IAGlC8vE,gBAAiB,SAAUh5E,GACvB,IAAK,IAAIkD,KAASkhE,EAAmB51C,SACjC,GAAIhvB,OAAOqB,UAAUC,eAAeC,KAAKf,EAASkD,GAC9C,OAAO,EAGf,OAAO,GAGX+1E,cACI,MAAMxyE,EAAStF,MAAMoX,KAAK8E,WAC1B,OAAI5W,EAAO+U,MAAKusB,GAAKzjC,EAAK08B,WAAW+G,KAC1B,SAAU34B,GACb,OAAO5P,OAAOmD,OAAO,MAAO8D,EAAO9H,KAAIopC,GAAKzjC,EAAK08B,WAAW+G,GAAKA,EAAE34B,GAAK24B,MAGzEvoC,OAAOmD,OAAO,MAAO8D,IAGhCyyE,YAAa,SAAUlrD,EAAGmrD,GACtB,OAAOnrD,EAAEs1C,eAAe1/D,EAAAA,EAAAA,KAAAA,sBAA+B,CAAE8iE,sBAAuByS,KAapFC,aAAc,SAAUpwD,KAAQwF,GAC5B,MAAM6qD,EAAO7qD,EAAO9qB,OAAS8qB,EAAS,CAAC,IACvC,OAAOxF,EAAIpf,QAAQ,YAAY,SAAUC,EAAO0hC,GAC5C,YAA+B,IAAjB8tC,EAAK9tC,GACf8tC,EAAK9tC,GACH1hC,MAKdyvE,2BAA4B,SAAU5jE,GAClC,OAAO,IAAIzW,SAAQ,SAAUC,EAAS4W,GAC9BtW,OAAOqB,UAAUC,eAAeC,KAAK+Q,OAAQ,UAEzClO,EAAAA,EAAAA,KAAAA,aAAqB8R,GACrBxW,EAAQwW,GAGR9R,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKA,EACL4Y,OAAQ,MACRtC,aAAc,SACfjtB,MACC,SAAUstB,GACN,MAAM7nB,EAAO6nB,EAAS7nB,KACtB,IAAIoqB,EAAO,IAAIld,KAAK,CAAClN,GAAO,CAAEgG,KAAM,oBAChCkL,EAAM5D,OAAOmH,IAAIC,gBAAgB0V,GACrC1vB,EAAQwW,MAEZ,SAAUtW,GACN0W,EAAOzW,MAAMD,OAMzB0W,EAAO,IAAIzW,MAAM,uCAK7Bk6E,gBAAiB,SAAUC,EAAqB,GAC5C,IAAI7+D,EAAQ,EACR8+D,EAAQ,GACZ,MAAO,CACH7X,QAAS,WACL,OAAIjnD,EAAQ6+D,GACR7+D,IACO1b,QAAQC,WAER,IAAID,SAAQ,CAACC,EAAS4W,KACzB2jE,EAAMhxE,KAAK,CAAEvJ,QAASA,EAAS4W,OAAQA,QAInDusD,QAAS,WAEL,GADA1nD,IACI8+D,EAAM/1E,OAAS,GAAKiX,EAAQ6+D,EAAoB,CAChD7+D,IACc8+D,EAAM7wC,QACZ1pC,YAGhBw6E,MAAO,WACH,IAAIC,EAAkBF,EAAM/1E,OAE5B,IAAK,IAAInB,EAAI,EAAGA,EAAIo3E,EAAiBp3E,IACjCk3E,EAAMl3E,GAAGuT,OAAO,yBAMpB,OAHA6E,EAAQ,EACR8+D,EAAQ,GAEDE,KAInBC,UAAY,SAAUxxC,GAQlB,OADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAIA,EAAEx+B,QAAQ,oBAAqB,SAC7BA,QAAQ,UAAW,UACnBA,QAAQ,UAAW,UACnBA,QAAQ,UAAW,UACnBA,QAAQ,UAAW,UACnBA,QAAQ,YAAa,YACrBA,QAAQ,MAAO,WAK7B+H,OAAO9Q,UAAUwS,OAAS,WACtB,IAAI2V,EAAM3oB,KAAKijB,WACf,IAAKjG,UAAU3Z,OACX,OAAOslB,EACX,IAAIqwD,SAAch8D,UAAU,GAE5B,IAAK,IAAIi0C,KADT+nB,EAAO,WAAaA,GAAQ,WAAaA,EAAOh8D,UAAYA,UAAU,GAElE2L,EAAMA,EAAIpf,QAAQ+f,OAAO,MAAQ2nC,EAAM,MAAO,MAAO+nB,EAAK/nB,IAE9D,OAAOtoC,GAEX,MAAMytD,EAA0B,SAAUpgE,GACtC,IAAIwjE,EAAc,qIAElB,OAAQxjE,EAAa1G,SACjB,IAAK,QACL,IAAK,QACDkqE,GAAe,iFACf,MACJ,IAAK,QACDA,GAAe,yFAGvB,IAAK,IAAIt3E,KAAK8T,EACqB,iBAApBA,EAAa9T,IAAmBA,EAAE8G,QAAQ,OAAS,GAAKgN,EAAa9T,GAAG8G,QAAQ,OAAS,IAChGwwE,GAAet3E,EAAI,KAAO8T,EAAa9T,GAAK,MAEpD,OAAOs3E,GAGX,IAAIC,EAAa,SAAUC,EAAOC,EAAOC,GACrC,OAAOA,EAAcF,EAAM5qB,wBAAyB6qB,EAAM7qB,0BAE1Dr9C,OAAOytB,cACPA,YAAY1+B,UAAUq5E,UAAY,SAAUC,GACxC,OAAOL,EAAWz5E,KAAM85E,GAAO,SAAUC,EAAOC,GAC5C,QACID,EAAM5F,IAAM6F,EAAM3F,QAClB0F,EAAMzF,MAAQ0F,EAAM5F,MACpB2F,EAAM1F,OAAS2F,EAAM7F,KACrB4F,EAAM3F,KAAO4F,EAAM1F,WAI/Bp1C,YAAY1+B,UAAUy5E,WAAa,SAAUH,GACzCL,EAAWz5E,KAAM85E,GAAO,SAAUC,EAAOC,GACrC,QACID,EAAM3F,MAAQ4F,EAAM5F,MACpB4F,EAAM5F,KAAO2F,EAAMznD,OACnBynD,EAAM5F,KAAO6F,EAAM7F,KACnB6F,EAAM7F,IAAM4F,EAAMxnD,YAI9B2M,YAAY1+B,UAAUmjD,OAAS,SAAUm2B,GACrC,OAAOL,EAAWz5E,KAAM85E,GAAO,SAAUC,EAAOC,GAC5C,OAAQA,EAAM7F,KAAO4F,EAAM5F,KAAO4F,EAAM5F,KAAO6F,EAAM3F,QAChD2F,EAAM7F,KAAO4F,EAAM1F,QAAU0F,EAAM1F,QAAU2F,EAAM3F,QACnD2F,EAAM5F,MAAQ2F,EAAM3F,MAAQ2F,EAAM3F,MAAQ4F,EAAM1F,OAChD0F,EAAM5F,MAAQ2F,EAAMzF,OAASyF,EAAMzF,OAAS0F,EAAM1F,WAKnE,W,kGC52EA/wE,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAawH,EAAAA,EAEb,MAAMmvE,UAAoBnvE,EAAAA,EACtBtL,cACIG,SAASod,WACT,MAAMjd,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKo6E,eAAiB,GACtBp6E,EAAKq6E,oBAAsB,KAC3Br6E,EAAKs6E,iBAAmB,GACpBt6E,EAAKJ,QAAQ06E,mBACbt6E,EAAKs6E,iBAAmBt6E,EAAKJ,QAAQ06E,4BAA4Bv5E,MAAQf,EAAKJ,QAAQ06E,iBAAmB,CAACt6E,EAAKJ,QAAQ06E,mBAI/H99B,eACI,MAAO,gBAGX1W,SAASvnC,GACL,MAAMyB,EAAOC,KACP4E,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAErDyB,EAAKo6E,eAAiBp6E,EAAKzB,IAAIqB,QAAQypC,aAAerpC,EAAKo6E,eAE3D,IAAIG,EAAU,SAAU3+C,GACpB,GAAIA,EAAK,CAEL,IAAIhzB,EAAOgzB,EAAI4+C,iBACf,GAAI5xE,EACA,GAAI,QAAQs5B,KAAKt5B,EAAKE,OAAS,uBAAuBo5B,KAAKt5B,EAAKE,MAC5D9I,EAAKq6E,oBAAsB,CACvBvxE,KAAM,QACN2xE,KAAM,iCAGT,CAED,IADA,IAAIC,GAAa,EACRv4E,EAAI,EAAGA,EAAInC,EAAKs6E,iBAAiBh3E,OAAQnB,IAC9C,GAAIyG,EAAKE,OAAS9I,EAAKs6E,iBAAiBn4E,GAAG2G,KAAM,CAC7C4xE,GAAa,EACb,MAGHA,GACD16E,EAAKs6E,iBAAiBjyE,KAAKO,MAO3C+xE,EAAa,SAAU/+C,GACvB,GAAIA,EAAK,CAoBL,KAAIA,aAAe/oB,EAAAA,IAlBG,WAClB,GAAI+oB,EAAIr9B,IAAI4rC,WAAW7mC,OAAS,EAAG,CAC/B,MAAMs3E,EAAQh/C,EAAIr9B,IAAI4rC,WACjBv/B,QACAulB,UACL,IAAK,IAAIhuB,EAAI,EAAGA,EAAIy4E,EAAMt3E,OAAQnB,IAAK,CACnC,MAAMksD,EAAKusB,EAAMz4E,GACjB,GAAIksD,EAAG/4C,KAAOsmB,EAAItmB,KAAO+4C,EAAG/6C,gBACxB,OAAO,EAIf,OAAO,EAGX,OAAO,EAGgBunE,GAA0B,CAEjD,IAAIjyE,EAAOgzB,EAAI4+C,iBAEf,GAAI5xE,EAAM,CACN,IAAImhB,EAAQ/pB,EAAKs6E,iBAAiBpyE,QAAO,SAAU+Z,EAAMC,EAAKxa,GAC1D,OAAIwa,EAAIpZ,OAASF,EAAKE,KACXpB,EAEJua,KACP,GAEJ,MAAM64D,EAAyB,SAAUC,GACrC,OAAQ,QAAQ74C,KAAKt5B,EAAKE,OAAS,uBAAuBo5B,KAAKt5B,EAAKE,SAC/D,QAAQo5B,KAAK64C,IAAgB,uBAAuB74C,KAAK64C,KAC1DnyE,EAAKE,OAASiyE,GAMtB,GAAI/6E,EAAKzB,IAAI8wB,WAAarvB,EAAKzB,IAAI8wB,UAAUnvB,KAAKs6E,kBAAoBM,EAAuB96E,EAAKzB,IAAI8wB,UAAUnvB,KAAKs6E,iBAAiB1xE,OAClI8yB,EAAIn4B,OAAOpE,KAAOW,EAAKzB,IAAI8wB,UAAUhwB,GACrC,OAGA,GAAIW,EAAKzB,IAAI4rC,WAAWhlC,QAAO,SAAUV,GACrC,OAAOA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAC9Dqb,MAAK,SAAU3W,GACd,IAAIu2E,EAAuBv2E,EAAMvE,KAAKs6E,iBACtC,OAAOQ,GAAwBF,EAAuBE,EAAqBlyE,SAE3E,OAIJihB,GAAS,EACT/pB,EAAKs6E,iBAAiBtxE,OAAO+gB,EAAO,IAC7B,QAAQmY,KAAKt5B,EAAKE,OAAS,uBAAuBo5B,KAAKt5B,EAAKE,SACnE9I,EAAKq6E,oBAAsB,UAmF/C,OA1EA97E,EAAIqb,QAAO,WACHrb,EAAI8wB,UAAUnvB,KAAKs6E,iBACnBD,EAAQh8E,EAAI8wB,UAAUnvB,MACtBF,EAAK88C,aAIbv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,OACXA,EAAMuO,QAAUvO,EAAMvE,KAAKs6E,gBAAkB/1E,EAAMvE,KAAKs6E,mBACzDD,EAAQ91E,EAAMvE,MACdF,EAAK88C,aAIbv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,sBAAqC,IAAMA,EAAAA,EAAAA,MAAAA,yBAAsC,SAAUf,GAC9F,MAAMoL,EAAOpL,EAAEoL,KACTkgD,EAAWtrD,EAAEsrD,SACb6I,EAAWn0D,EAAEm0D,SACfpzD,EAAAA,EAAAA,MAAAA,wBAAAA,QAA6CqK,IAAS,IACtDpK,EAAKi7E,YAAc3wB,GAGnB6I,GAAYA,EAASjzD,KAAKs6E,gBAC1BG,EAAWxnB,EAASjzD,MAGpBoqD,GAAYA,EAASpqD,KAAKs6E,gBAC1BD,EAAQjwB,EAASpqD,MAGrBF,EAAK88C,YAGTv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACvC,MAAMyF,EAAQzF,EAAEyF,MACZA,EAAMvE,KAAKs6E,iBACXG,EAAWl2E,EAAMvE,MACjBF,EAAK88C,aAIbv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,oBAAiC,SAAUf,GAC9C,MAAMk8E,EAAkBl8E,EAAEk8E,gBACtBA,EAAgBV,iBAChBD,EAAQW,GACRl7E,EAAK88C,aAIbv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,uBAAoC,SAAUf,GACjD,MAAMk8E,EAAkBl8E,EAAEk8E,gBACtBA,EAAgBV,iBAChBG,EAAWO,GACXl7E,EAAK88C,aAIbv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,SAAUf,GAC3C,MAAMyF,EAAQzF,EAAEyF,MACZzE,EAAKi7E,cAAgBx2E,GAIrBA,EAAMvE,KAAKs6E,iBACP/1E,EAAM6O,gBACNinE,EAAQ91E,EAAMvE,MAEdy6E,EAAWl2E,EAAMvE,MAErBF,EAAK88C,aAINj4C,EAGXgG,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GAAU,IAAA2iD,EACb,MAAMn7E,EAAOC,KAEb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,CAC7Co+B,IAAoC,mBAAxBp7E,EAAKo6E,eAAgCp6E,EAAKo6E,eAAe/pE,MAAMrQ,GAAQA,EAAK4hC,gBAAgB5hC,EAAKo6E,gBAC7GiB,SAAUr7E,EAAKq6E,oBACfiB,UAAWt7E,EAAKs6E,iBAChBiB,aAAav7E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAAYv8C,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUve,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WAC1ImwE,KAAc,QAAViL,EAAEn7E,EAAKzB,WAAG,IAAA48E,OAAA,EAARA,EAAUv7E,QAAQyJ,SACzB,WACC,MAAMmyE,EAAMx7E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QACtDi/B,GAAOA,EAAI3vE,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC5CC,EAAKy7E,4BACN,CAAExtE,SAAS,IAEU,mBAAbuqB,GACPA,QAKZijD,0BACiBx7E,KACM0M,IAAIsL,cAAc,IADxBhY,KACmCs8C,MAAQ,UAClDve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,YAI/ByD,EAAAA,EAAAA,QAAAA,YAAyB22E,EACzB,W,8GC1OA32E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMk4E,EAAkB,WACpB,IAAI17E,EAAOC,KAGX07E,EAAAA,QAAAA,MAAkB37E,EAAMid,WAExBjd,EAAK47E,WAAa,GAElB57E,EAAK67E,YAAc,CACfC,gBAAiB97E,EAAKu8C,MAAQ,gBAC9Bw/B,WAAY/7E,EAAKu8C,MAAQ,cACzBy/B,SAAUh8E,EAAKu8C,MAAQ,YACvB0/B,SAAUj8E,EAAKu8C,MAAQ,YACvB2/B,iBAAkBl8E,EAAKu8C,MAAQ,gBAC/B4/B,iBAAkBn8E,EAAKu8C,MAAQ,gBAC/B6/B,KAAMp8E,EAAKu8C,MAAQ,QACnB8/B,QAAS,aACTC,KAAM,WAGVt8E,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WAC1C9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzBv8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnCv8E,EAAKu8E,WAAW1wE,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,+BAA+B,SAAUxE,GAE5H,GAAIA,EAAE0O,OAAOswB,UAAU8gB,SAAS9+C,EAAK67E,YAAYC,iBAE7C,YADA97E,EAAK08E,0BAITl5E,EAAAA,EAAAA,KAAAA,aACA,MAAM4qE,EAAMpvE,EAAE0O,OACRvG,EAAMinE,EAAI9vB,QAAQq+B,QAGlBC,EAAS58E,EAAKu8E,WAAWtkE,cAAc,IAAMjY,EAAKu8C,MAAQ,eAChEqgC,EAAO5+C,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAErB,MAAM0E,EAAQzE,EAAK4f,SAASg9D,EAAOt+B,QAAQp/B,SAC3C,GAAIza,EACA,GAAI0C,EACA3D,EAAAA,EAAAA,YAAe,CACX2D,IAAKA,EACLqxB,SAAU,WACNx4B,EAAKzB,IAAI6W,cAAc,CACnBjO,IAAKA,EACLkoB,UAAW5qB,WAKtB,CACD,MAAMod,EAAgB7hB,EAAK+hB,iBAAiBqsD,EAAI9vB,QAAQu+B,iBACpDh7D,GACA7hB,EAAKzB,IAAI4rD,aAAatoC,OAIlC,CAAE5T,SAAS,KAGnBzK,EAAAA,EAAAA,QAAWk4E,EAAiBC,EAAAA,SAE5B,WAEI,IAAIj/B,EAAWg/B,EAAgBj7E,UAE/Bi8C,EAASH,MAAQ,aAEjB,MAAMugC,EAAmB,SAAUr1E,EAAKu3C,GACpC,KAAOv3C,IAAQA,EAAI+hB,QAAQw1B,IACvBv3C,EAAMA,EAAIg1D,cAEd,OAAOh1D,GAGLs1E,EAA0B,SAAU/9E,EAAGw5B,GACzC,MAAMx4B,EAAOC,KACb,IAAI+8E,GAAiB,EAEjBC,EAAQj+E,EAAE0O,OAEVjJ,EAAQzE,EAAK4f,SAASk9D,EAAiBG,EAAO,MAAM3+B,QAAQp/B,SAEhE,GAAIlf,EAAKJ,QAAQs9E,YAAcJ,EAAiBG,EAAO,IAAMj9E,EAAKu8C,MAAQ,gBAAiB,CACvF,MAAM4gC,EAASn9E,EAAK2M,IAAIhB,iBAAiB,qBACzC,IAAK,IAAIxJ,EAAI,EAAG+I,EAAMiyE,EAAO75E,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,MAAMi7E,EAAWp9E,EAAK4f,SAASk9D,EAAiBK,EAAOh7E,GAAI,MAAMm8C,QAAQp/B,SACzE,GAAIk+D,IACQ,IACCA,EAAS/9E,KAAOoF,EAAMpF,IACvBoF,EAAQ24E,GAO5B,GAAI34E,GAASzE,EAAKzB,IAAIgV,eAClB,GAAI9O,EAAM8d,cAEN,GAAIviB,EAAKzB,IAAI0I,SAAU,CACnB,IAAKxC,EAAMsd,mBAGP,OAFA/hB,EAAKq9E,kBAAkBx9C,SAAU,OACjC7gC,EAAE+uE,kBAEC,GAAItpE,EAAMsd,mBAAoB,CACjC,MAAMF,EAAgBpd,EAAMsd,mBACxBF,GACAA,EAAcpI,yBAAyB9a,MAAK,WACpCkjB,EAAcjO,aAAa5T,EAAKzB,IAAI8I,WACpCrH,EAAKzB,IAAI4rD,aAAa1lD,MAKlCu4E,GAAiB,OAElB,CAECh9E,EAAKq9E,oBACLr9E,EAAKq9E,kBAAkBx9C,SAAU,GAIrC,MAAMy9C,EAAgB,CAClB74E,MAAOA,GAELod,EAAgBpd,EAAMsd,mBACxBF,EACAA,EAAcpI,yBAAyB9a,MAAK,WACpCkjB,EAAcjO,aAAa5T,EAAKzB,IAAI8I,YACpCi2E,EAAcz7D,cAAgBA,GAElC7hB,EAAKu9E,2BAA2BD,MAIpCt9E,EAAKu9E,2BAA2BD,GAGpCN,GAAiB,OAMjBv4E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM0d,kBAAoBniB,EAAKzB,IAAI4I,MAClH1C,EAAM2Q,cAAc,CAAEjO,IAAKnH,EAAKzB,IAAI4I,MAGxCnH,EAAKzB,IAAI4rD,aAAa1lD,GAI1BxE,KAAKo9E,oBACLp9E,KAAKo9E,kBAAkBx9C,SAAU,GAIjCrH,GACAA,EAASwkD,IAIjBtgC,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAEP+tD,QAAY2tB,EAAAA,QAAAA,UAAAA,SAAAA,KAAoC37E,EAAMzB,GA4B5D,OA3BAyB,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAK67E,YAAYI,YAAYpwE,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACnGgB,EAAKw9E,aACLx+E,EAAE0O,OAAO+vE,SACV,CAAExvE,SAAS,IAEVjO,EAAKJ,QAAQs9E,YACb3+E,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,WAC5BC,EAAK09E,wBAIbn/E,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA+B,IAAMA,EAAAA,EAAAA,MAAAA,iBAAgC,IAAMA,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACjHgB,EAAK29E,OAAO39E,EAAK2M,IAAK3N,EAAEyF,UAI5BzE,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,qBAAqB,SAAUxE,GAE1E,eAAnBA,EAAE0O,OAAO5K,MACT9C,EAAK49E,uBAELb,EAAwBp8E,KAAKX,EAAMhB,GAGvCA,EAAE+uE,sBAGC/f,GAGXtR,EAASQ,cAAgBryC,iBACrB,MACMgzE,EAAsB,+BACtBC,EAAsB,6BACtBC,EAAwB,+BAExBz0E,EAAW,GACjBA,EAASozC,EAASH,cAAgBshC,GAAqBtvE,QACvDjF,EAASozC,EAASH,MAAQ,gBAAkBuhC,GAAqBvvE,QACjEjF,EAASozC,EAASH,MAAQ,kBAAoBwhC,GAAuBxvE,QARxDtO,KASRqJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACP4E,EAAS82E,EAAAA,QAAAA,UAAAA,OAAAA,KAAkC37E,EAAMw4B,EAAUh1B,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKJ,QAAS,CAAEo+E,UAAWh+E,EAAKX,MA0BpH,OAxBAW,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAAM,SAAU5yC,GAGzD,GAFA3J,EAAKu8E,WAAWnvE,UAAYzD,EAExB3J,EAAKJ,QAAQs9E,WAAY,CACzB,MAAMN,EAAS58E,EAAKu8E,WAAWtkE,cAAc,IAAMjY,EAAKu8C,MAAQ,gBAEhEqgC,EAAO3kE,cAAe,IAAGjY,EAAK67E,YAAYI,YAAYpwE,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACjGgB,EAAKi+E,6BACLj/E,EAAE0O,OAAO+vE,OACTz+E,EAAE+uE,oBACH,CAAE9/D,SAAS,IAEd2uE,EAAO/wE,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,qBAAqB,SAAUxE,GAC/F+9E,EAAwBp8E,KAAKX,EAAMhB,GAAG,SAAUiO,GACxCA,GACAzJ,EAAAA,EAAAA,KAAAA,gBAIRxE,EAAE+uE,0BAKPlpE,GAGX63C,EAASihC,OAAS9yE,eAAgB8B,EAAK0iB,GACnC,MAAMrvB,EAAOC,KAEb0M,EAAMA,GAAO3M,EAAK2M,UAEX3M,EAAKk+E,wBAA0Bl+E,EAAK09E,sBAC3C38E,MAAMoX,KAAKxL,EAAIhB,iBAAkB,MAAK3L,EAAKu8C,oBAAoB/0C,SAAQ,SAAU22E,EAAIC,EAAM72E,GACvF,MAAM9C,EAAQzE,EAAK4f,SAASu+D,EAAG7/B,QAAQp/B,SACvC,GAAIza,EAAO,CACP,MAAM45E,EAAehvD,GAAarvB,EAAKzB,IAAI8wB,UACrC4tD,EAAQkB,EAAGlmE,cAAc,qBACzB6J,EAAUrd,EAAMsd,kBAAoBtd,EAAMsd,mBAChD,IAAI8d,EAAUw+C,IAAiBA,IAAiB55E,GAAS45E,EAAah/E,KAAOoF,EAAMpF,IACnF,IAAKwgC,EAAS,CACV,MAAMy+C,EAAuBx8D,GAAWva,EACnCpC,QAAOsC,GAAOA,IAAQ02E,IACtB/iE,MAAK3T,GAAOA,EAAI62C,QAAQp/B,UAAY4C,EAAQziB,KACjDwgC,GAAWy+C,GAAwBD,IAAiBA,IAAiBv8D,GAAWA,GAAWu8D,EAAah/E,KAAOyiB,EAAQziB,IAGvHW,EAAKzB,IAAI0I,UAAYxC,EAAM8d,eAAiBT,EAC5CA,EAAQrI,yBAAyB9a,MAAK,WAClC,IAAI4jB,GAAiB9d,EAAMsd,mBAAmBnO,aAAa5T,EAAKzB,IAAI8I,UAEpE41E,EAAMp9C,QAAUA,EACZtd,GACA06D,EAAMj/C,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACpBo+E,EAAG9wD,aAAa,QAASrtB,EAAKzB,IAAI0I,SAAWjH,EAAK4hC,gBAAgB,oBAAsB5hC,EAAK4hC,gBAAgB,yBAG7Gq7C,EAAMj/C,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UACvBo+E,EAAGjgD,gBAAgB,cAI3B++C,EAAMp9C,QAAUA,EACZp7B,EAAM8d,eACN06D,EAAMj/C,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACpBo+E,EAAG9wD,aAAa,QAASrtB,EAAKzB,IAAI0I,SAAWjH,EAAK4hC,gBAAgB,oBAAsB5hC,EAAK4hC,gBAAgB,yBAG7Gq7C,EAAMj/C,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UACvBo+E,EAAGjgD,gBAAgB,WAIvB2B,IACA7/B,EAAKq9E,kBAAoBJ,OAKrCj9E,EAAKu+E,eAGT7hC,EAAS8hC,gBAAkB,SAAU/5E,GACjC,MAAMzE,EAAOC,KAEb,GAAIwE,EAAMuO,UAAYvO,EAAM7E,QAAQ0vB,SAAW7qB,EAAM8qB,cAAgB9qB,EAAM8qB,YAAY3vB,QAAQ0vB,SAAU,CACrGqsD,EAAAA,QAAAA,UAAAA,gBAAAA,KAA2C37E,EAAMyE,GAEjD,MAAMg6E,EAAeh6E,EAAM8qB,aAAe9qB,EAEtCg6E,IAAiBh6E,IACjBzE,EAAK0+E,WAAWD,EAAap/E,IAAMo/E,EAAatqE,WAGhDsqE,EAAat1E,UACbnJ,EAAK47E,WAAW6C,EAAap/E,IAAMo/E,EAAat1E,QAAQs1E,EAAavjE,MAAM,KAG/Elb,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,CAAE93C,MAAOzE,EAAK0+E,WAAWD,EAAap/E,IAAK2pB,KAAMhpB,EAAK47E,WAAW6C,EAAap/E,IAAK2+E,UAAWh+E,EAAKX,KAAMV,MAAK,SAAUggF,GAC/J,MACMC,GADS,IAAInhE,WACEE,gBAAgBghE,EAAK,aAAah9C,KAAKxqB,WAC5D,IAAI9C,EAAMuqE,EAAMtgC,QAAQugC,SACxB,MAAMC,EAAK9+E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAC/CwiC,EAAYD,EAAG7mE,cAAc,sBAAwB5D,EAAM,MACjE,GAAI0qE,EACAA,EAAU3xE,UAAYwxE,EAAMxxE,cAE3B,CACDwxE,EAAMtgC,QAAQp/B,QAAUu/D,EAAap/E,GAGrC,MAAM2/E,EAAch/E,EAAKzB,IAAI0rC,WACxB1rC,KAAI8wB,GAAaA,EAAUE,aAAeF,IAC1ClqB,QAAOkqB,GAAaA,IAAcA,EAAUC,UAC5C/wB,KAAI8wB,GAAaA,EAAUhwB,KAC1BqI,EAAMs3E,EAAY/1E,QAAQw1E,EAAap/E,IAC7C,IACI8C,EADA88E,GAAW,EAEf,IAAK98E,EAAIuF,EAAM,EAAGvF,GAAK,EAAGA,IAAK,CAC3B,MAAM+8E,EAAQJ,EAAG7mE,cAAe,qBAAoB+mE,EAAY78E,QAChE,GAAI+8E,EAAO,CACPA,EAAMC,sBAAsB,WAAYP,GACxCK,GAAW,EACX,OAGR,IAAKA,EAAU,CACX,IAAK98E,EAAIuF,EAAM,EAAGvF,EAAI68E,EAAY17E,OAAQnB,IAAK,CAC3C,MAAM+8E,EAAQJ,EAAG7mE,cAAe,qBAAoB+mE,EAAY78E,QAChE,GAAI+8E,EAAO,CACPA,EAAMC,sBAAsB,cAAeP,GAC3CK,GAAW,EACX,OAGR,IAAKA,EAAU,CACX,MAAMG,EAAYN,EAAG7mE,cAAe,IAAGjY,EAAKu8C,mBACxC6iC,EACAA,EAAU3iB,cAAc0iB,sBAAsB,cAAeP,GAG7DE,EAAGhyE,YAAY8xE,IAI3B5+E,EAAK29E,aAEVvnE,OAAM,SAAUsD,GACflW,EAAAA,EAAAA,MAASkW,QAKrBgjC,EAAS2iC,iBAAmB,SAAUtyB,EAAQuyB,EAASC,KAIvD7iC,EAASqO,YAAc,SAAUtmD,GAC7B,MAAMzE,EAAOC,KACb,GAAIwE,EAAMuO,OAAQ,CACd,MAAMwsE,EAAMx/E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAAW5wC,iBAAiB,MAClF,IAAK,IAAIxJ,EAAI,EAAG+I,EAAMs0E,EAAIl8E,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC5C,MAAMg8E,EAAKqB,EAAIr9E,GACf,GAAIg8E,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,GAAI,CACjC8+E,EAAG1hB,cAAcC,YAAYyhB,GAC7B,UAMhBzhC,EAAS+iC,aAAe,SAAUh7E,GAC9B,MAAMzE,EAAOC,KAETwE,EAAMuO,SAAWvO,EAAM7E,QAAQ0vB,SAC/BtvB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,wBAAyB,CAAE89C,QAASj7E,EAAM+F,QAAU,CAAEJ,KAAMrK,EAAAA,EAAAA,QAAAA,SAIxG28C,EAAS36B,iBAAmB,SAAU1iB,GAClC,MAAMW,EAAOC,KACP0/E,EAAW,SAAUl7E,GACvB,OAAOA,EAAMod,eAAiBpd,EAAMod,cAAcxiB,KAAOA,GAE7D,IAAIugF,EAAyB5/E,EAAKzB,IAAI0rC,WAAW9kC,OAAOw6E,GACpD96E,EAAS+6E,EAAuBt8E,OAASs8E,EAAuB,GAAG/9D,cAAgB,KAKvF,OAJKhd,GAAU7E,EAAK6/E,kBAChBD,EAAyB5/E,EAAK6/E,gBAAgB16E,OAAOw6E,GACrD96E,EAAS+6E,EAAuBt8E,OAASs8E,EAAuB,GAAG/9D,cAAgB,MAEhFhd,GAGX63C,EAASggC,wBAA0B,WAC/B,MAAM18E,EAAOC,KACDD,EAAKu8E,WACZtkE,cAAc,IAAMjY,EAAK67E,YAAYE,YACrCpwE,iBAAiB,MAAQ3L,EAAK67E,YAAYG,SAAW,OACtDx0E,SAAQ,SAAU22E,GAClBA,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAChBo+E,EAAGlmE,cAAc,UAAYjY,EAAK67E,YAAYC,kBAC9CqC,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YAK7B28C,EAAS6gC,2BAA6B,SAAU39E,GAC5C,MAAMI,EAAOC,KAEPwE,GADN7E,EAAUA,GAAW,IACC6E,MAChBm4E,EAAS58E,EAAKu8E,WAAWtkE,cAAc,IAAMjY,EAAKu8C,MAAQ,eAC1DujC,EAAYlD,EAAO3kE,cAAc,kBACvC6nE,EAAU9hD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACxB,MAAMggF,EAAYt7E,EAAMkd,mBAExBi7D,EAAO5+C,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAExB68E,EAAOt+B,QAAQp/B,QAAUza,EAAMpF,GAC/B,MAAMy/E,EAAKlC,EAAO3kE,cAAc,MAAQjY,EAAKu8C,MAAQ,aACrDuiC,EAAG1xE,UAAY,GACfpN,EAAKzB,IAAIu2D,gBAAgB,CACrBD,QAAS70D,EAAKzB,IAAIojB,iBAAiB,CAC/BqB,OAAQhjB,EAAKzB,IAAI4rC,WAAW7hC,OAAO7D,GACnCkwD,kBAAkB,IAEtBO,QAAS,SACVv2D,MAAK,SAAUo2D,GACd,IAAIirB,GAAiB,EACrB,MAAMC,EAAWrzE,SAAS2zC,yBA6B1B,GA5BAwU,EACKvtD,SAAQ,SAAU04E,GACf,MAAM/B,EAAKvxE,SAASC,cAAc,MAC5BggD,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAId,IAFV0yD,EAAU56E,QAAO,SAAUgC,GAC3B,OAAO3D,EAAAA,EAAAA,KAAAA,cAAsB2D,EAAK+4E,EAAQhhF,SAC3CoE,QAEC08E,GAAiB,EAEjBnzB,EAAOz/C,UAAY8yE,EAAQp3E,KAAO,KAAOo3E,EAAQhhF,KAAO,IACpDU,EAAQ6E,MAAMod,gBACdgrC,EAAOvO,QAAQu+B,gBAAkBj9E,EAAQ6E,MAAMod,cAAcxiB,IAEjEwtD,EAAOvO,QAAQq+B,QAAUuD,EAAQhhF,KACjC2tD,EAAO7uB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACrBo+E,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAEjB8sD,EAAOz/C,UAAYpN,EAAK4hC,gBAAgB,iBAAkB,CAAEz6B,IAAK+4E,EAAQp3E,KAAO,KAAOo3E,EAAQhhF,KAAO,MACtG2tD,EAAOvO,QAAQq+B,QAAUuD,EAAQhhF,MAGrCi/E,EAAGrxE,YAAY+/C,GACfozB,EAASnzE,YAAYqxE,MAGzBv+E,EAAQiiB,cAAe,CACvB,MAAMs8D,EAAKvxE,SAASC,cAAc,MAC5BggD,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAOz/C,UAAYpN,EAAK4hC,gBAAgB,qBACxCirB,EAAOvO,QAAQu+B,gBAAkBj9E,EAAQiiB,cAAcxiB,GACvD8+E,EAAGrxE,YAAY+/C,GACfozB,EAASnzE,YAAYqxE,GAGzB,GAAI6B,EAAgB,CAChB,MAAM7B,EAAKvxE,SAASC,cAAc,MAC5BggD,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAO7uB,UAAUnjB,IAAI7a,EAAK67E,YAAYC,iBACtCjvB,EAAOz/C,UAAYpN,EAAK4hC,gBAAgB,2BACxCu8C,EAAGrxE,YAAY+/C,GACfozB,EAASnzE,YAAYqxE,GAEzBW,EAAGhyE,YAAYmzE,GAEfH,EAAU9hD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,YAE/B68E,EAAO3kE,cAAc,IAAMjY,EAAKu8C,MAAQ,SAASnvC,UAAY3I,EAAM+F,OAAS/F,EAAMqE,KAClFtF,EAAAA,EAAAA,KAAAA,UAAkBo5E,IAGtBlgC,EAASkhC,qBAAuB,WAC5B,MAAM59E,EAAOC,KAEP28E,EAAS58E,EAAKu8E,WAAWtkE,cAAc,IAAMjY,EAAKu8C,MAAQ,gBAEhEqgC,EAAO5+C,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBC,EAAKzB,IAAI0I,UAE1D,MAAM64E,EAAYlD,EAAO3kE,cAAc,kBACvC6nE,EAAU1yE,UAAY,GACtB0yE,EAAU9hD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACxB68E,EAAO5+C,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAExByD,EAAAA,EAAAA,KAAAA,UAAkBo5E,EAAQ,CACtB/O,cAAe,WAEX5tE,KAAK09E,SAASh/E,MAAK,IAAMsB,KAAKo9E,kBAAkBx9C,SAAU,KAC5DsgB,KAAKngD,KAGX,MACMmgF,EADangF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAK67E,YAAYO,QACrCp+C,UAAU8gB,SAAS9+C,EAAK67E,YAAYS,MACxDzvB,EAAS+vB,EAAO3kE,cAAe,IAAGjY,EAAK67E,YAAYI,YACzDpvB,EAAO7uB,UAAUS,OAAOz+B,EAAK67E,YAAYQ,QAAS8D,GAClDtzB,EAAO7uB,UAAUS,OAAOz+B,EAAK67E,YAAYS,MAAO6D,GAChDtzB,EAAOx/B,aAAa,QAASrtB,EAAK4hC,gBAAgBu+C,EAAS,kBAAoB,iBAE/E,MAAMC,EAAeC,IACjB,GAAIA,EAAI,CACJ,MAAMr3D,EAAOq3D,EAAGl3E,QAAUk3E,EAAGl3E,QAAQk3E,EAAGnlE,MAAM,IAAM,KACpD,MAAO,CAAEzW,MAAO47E,EAAIr3D,KAAMA,EAAMg1D,UAAWh+E,EAAKX,IAEpD,MAAO,IAELihF,EAAa,WACf,MAAMH,EAASvD,EAAO3kE,cAAe,IAAGjY,EAAK67E,YAAYI,YAAYj+C,UAAU8gB,SAAS9+C,EAAK67E,YAAYQ,SACnGkE,EAAiBvgF,EAAK6/E,gBAAgBj1E,QAC5C,IAAK,IAAIzI,EAAI,EAAGgiB,EAAKo8D,EAAej9E,OAAQnB,EAAIgiB,EAAIhiB,IAC3Co+E,EAAep+E,KAChBo+E,EAAep+E,IAAK,GAG5BnC,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAO,CAC7BtS,WAAYs2C,EAAehiF,IAAI6hF,GAC/BpC,UAAWh+E,EAAKX,KACjB,SAAUsK,GACTm2E,EAAU1yE,UAAYzD,EACtB,MAAM8K,EAAOqrE,EAAU7nE,cAAe,IAAGjY,EAAK67E,YAAYO,QAC1D3nE,EAAKupB,UAAUS,OAAOz+B,EAAK67E,YAAYQ,SAAU8D,GACjD1rE,EAAKupB,UAAUS,OAAOz+B,EAAK67E,YAAYS,KAAM6D,GAC7CL,EAAU9hD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAE3BC,EAAK29E,OAAOmC,OAGpB9/E,EAAK09E,oBAAmB,SAAU8C,GAC9B,GAAIV,EAAU9hD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAC7BugF,QAEC,CACD,MAAMnC,EAAK2B,EAAU7nE,cAAe,MAAKjY,EAAKu8C,wBAAwBikC,EAAW,MAC3EH,EAAKrgF,EAAK6/E,gBAAgBW,GAC5BH,GACArgF,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS6jC,EAAaC,IAAK,SAAU12E,GACnEw0E,EAAGruB,mBAAmB,cAAenmD,GACrCw0E,EAAGlgD,SACHj+B,EAAK29E,OAAOmC,UAIzBnhF,MAAK,WACJ2hF,QAIR,MAAMG,EAAW,SAAUzyB,EAAKkG,GAC5B,MAAMz/C,EAAOy/C,EAAUj8C,cAAe,IAAG+1C,EAAI6tB,YAAYO,QACzD,GAAI3nE,EAAM,CACN,MAAM25D,EAAMla,EAAUj8C,cAAe,IAAG+1C,EAAI6tB,YAAYI,YAClDkE,EAAS/R,EAAIpwC,UAAUS,OAAOuvB,EAAI6tB,YAAYQ,SACpDjO,EAAI/gD,aAAa,QAAS2gC,EAAIpsB,gBAAgBwsC,EAAIpwC,UAAUS,OAAOuvB,EAAI6tB,YAAYS,MAAQ,eAAiB,oBAC5G7nE,EAAKupB,UAAUC,OAAO+vB,EAAI6tB,YAAYQ,QAASruB,EAAI6tB,YAAYS,MAC/Dp1B,YAAW,IAAMzyC,EAAKupB,UAAUnjB,IAAIslE,EAASnyB,EAAI6tB,YAAYS,KAAOtuB,EAAI6tB,YAAYQ,UAAU,MAItG3/B,EAAS8gC,WAAa,WAElBiD,EADaxgF,KAAAA,KACO0M,MAGxB+vC,EAASuhC,2BAA6B,WAClC,MAAMj+E,EAAOC,KACTD,EAAKu8E,YACLkE,EAASzgF,EAAMA,EAAKu8E,aAI5B7/B,EAAS98B,SAAW,SAAUvgB,GAC1B,MAAMW,EAAOC,KACb,OAAOD,EAAKzB,MAAQyB,EAAKzB,IAAIqhB,SAASvgB,IAAOW,EAAK6/E,iBAAmB7/E,EAAK6/E,gBAAgBh3E,MAAKpE,GAASA,EAAMpF,KAAOA,MAGzH,MAAMqhF,EAAc,SAAUrxD,GAC1B,OAAOxwB,QAAQwiB,IAAI,CACfgO,EAAU5V,yBACV4V,EAAUtN,mBAAqBsN,EAAUtN,mBAAmBtI,yBAA2B5a,QAAQC,aAIvG49C,EAASghC,mBAAqB,SAAUiD,GACpC,MAAM3gF,EAAOC,KAEb,GAAKD,EAAK6/E,iBAAoB7/E,EAAKk+E,wBAgF5B,GAAIl+E,EAAK6/E,gBAEZ,OAAO,IAAIhhF,SAAQ,SAAUC,EAASk1B,GAClCn1B,QAAQwiB,IAAIrhB,EAAK6/E,gBAAgB16E,QAAO,SAAUkqB,GAC9C,OAAOA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBsvB,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,QACtExB,KAAI,SAAU8wB,GACb,OAAOrvB,EAAKzB,IAAI0I,SAAWy5E,EAAYrxD,GAAaA,EAAU5V,6BAC9D9a,MAAK,WAELqB,EAAK6/E,gBAAkB7/E,EAAK6/E,gBAAgBthF,KAAI,SAAU8wB,GAEtD,GAAIA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAuB,CAC1C,IAAIqf,EAAYiQ,EAAUnvB,KAAKwhB,wBAAwB1hB,EAAKzB,IAAI8I,UAAU,GAC1EgoB,EAAU9M,eAAiBnD,OACpBiQ,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,MAC1BsvB,EAAU9M,eAAiB8M,EAAUzb,aAAa5T,EAAKzB,IAAI8I,WAE/D,OAAIrH,EAAKzB,IAAI0I,UAAYooB,EAAU9M,eAAiB8M,EAAUtN,kBAAoBsN,EAAUtN,oBACxFsN,EAAU9M,eAAiB8M,EAAUtN,mBAAmBnO,aAAa5T,EAAKzB,IAAI8I,UAEvEgoB,GAGJA,KAGXvwB,EAAQkB,EAAK6/E,4BAxGrB7/E,EAAKk+E,uBAAyB,IAAIr/E,SAAQ,SAAUC,EAASk1B,GAGzD,IAAI4sD,EAAQp9E,EAAAA,EAAAA,IAAAA,oBAAAA,QACA,SAAU+iB,GACd,OAG0B,IAHnB/iB,EAAAA,EAAAA,IAAAA,oBAAAA,QACKwd,GAAKA,EAAEa,gBACdtjB,KAAIyiB,GAAKA,EAAEa,gBACX5Y,QAAQsd,EAAIlnB,OAEpBd,KAAI,SAAU8wB,GACX,OAAIA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBsvB,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KACvD,IAAIid,EAAAA,EAAOqS,GACXA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,OACnB,IAAI8xB,EAAAA,EAAOxC,QADf,KAKfrvB,EAAK6/E,gBAAkB,IAAI9+E,MAAM6/E,EAAMt9E,QAEvC,MAOM+mD,EAAWx/C,eAAgB1I,GAC7B,MAAMktB,EAAYpvB,KAKlB,GAHAovB,EAAU9wB,IAAMyB,EAAKzB,IACrB8wB,EAAUrc,OAASqc,EAAUzvB,QAAQoT,QAAS,EAE1Cqc,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAuB,OACpCsvB,EAAU5V,yBAChB,IAAI2F,EAAYiQ,EAAUnvB,KAAKwhB,wBAAwB1hB,EAAKzB,IAAI8I,UAAU,GAC1EgoB,EAAU9M,eAAiBnD,OACpBiQ,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,YACpBsvB,EAAU5V,yBAChB4V,EAAU9M,eAAiB8M,EAAUzb,aAAa5T,EAAKzB,IAAI8I,WAG/D,GAAIrH,EAAKzB,IAAI0I,UAAYooB,EAAU9M,eAAiB8M,EAAUtN,iBAAkB,CAC5E,MAAMD,EAAUuN,EAAUtN,mBACtBD,UACMA,EAAQrI,yBACd4V,EAAU9M,eAAiBT,EAAQlO,aAAa5T,EAAKzB,IAAI8I,WAIjErH,EAAK6/E,gBAAgB72E,OAAO7G,EAAG,EAAGktB,GAC9B7rB,EAAAA,EAAAA,KAAAA,WAAmBm9E,IACnBA,EAAgBx+E,IAIxBtD,QAAQwiB,IAAIu/D,EAAMriF,KAAI,SAAU8wB,EAAWltB,GACvC,OAAO,IAAItD,SAAQ,SAAU6f,EAAKmiE,GAC1BxxD,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBsvB,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,MAChDC,EAAKzB,IAAI0I,SAAWy5E,EAAYrxD,GAAaA,EAAU5V,0BAC7D9a,MACJ,WACI0rD,EAAS1pD,KAAK0uB,EAAWltB,GAAGxD,KAAK+f,MAErC,SAAUoiE,GACN9gF,EAAK6/E,gBAAgB72E,OAAO7G,EAAG,EAAG,MAC9BqB,EAAAA,EAAAA,KAAAA,WAAmBm9E,IACnBA,EAAgBx+E,GAEpBuc,OAGR2rC,EAAS1pD,KAAK0uB,EAAWltB,GAAGxD,KAAK+f,UAGzCqvC,SAvDmB,WACnB/tD,EAAK6/E,gBAAkB7/E,EAAK6/E,gBAAgB16E,QAAO,SAAUkqB,GACzD,OAAqB,OAAdA,KAGXvwB,EAAQkB,EAAK6/E,uBAoFzB,OAAO7/E,EAAKk+E,wBAppBpB,GAwpBA16E,EAAAA,EAAAA,QAAAA,gBAA6Bk4E,EAC7B,W,iFCnuBAl4E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,aAA0Bu9E,EAAAA,QAC1B,MACA,EADqBv9E,EAAAA,EAAAA,QAAAA,c,2FC+BrBA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,KAAUtD,EAAAA,EAEV,MAAM8gF,EAAQ,WACV,IAAIhhF,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,WAEhBjd,EAAKJ,SAAWI,EAAKJ,QAAQ44B,WAC7Bx4B,EAAKw4B,SAAWx4B,EAAKJ,QAAQ44B,UAGjCx4B,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,MAAsBxD,IAK1C,IACQ08C,EAHRl5C,EAAAA,EAAAA,QAAWw9E,EAAOh2E,EAAAA,IAGV0xC,EAAWskC,EAAMvgF,WAEZ87C,MAAQ,eAEjBG,EAAS5W,SAAW,SAAUvnC,GAG1B,OAFW0B,KACNC,KAAK4lC,SAASvnC,GACZyM,EAAAA,EAAAA,UAAAA,SAAAA,KAFI/K,KAEkC1B,IAGjDm+C,EAASoB,SAAW,WAEhB9yC,EAAAA,EAAAA,UAAAA,SAAAA,KADW/K,MAAAA,KAENC,KAAK49C,YAGdpB,EAASuB,WAAa,WACPh+C,KACNC,KAAK+9C,aACVjzC,EAAAA,EAAAA,UAAAA,WAAAA,KAFW/K,OAKfy8C,EAASlkB,SAAW,SAAUtC,EAAOZ,GACjC3tB,QAAQC,IAAI,WAAasuB,EAAM,GAAK,KAAOA,EAAM,GAAK,KAAOZ,EAAM,GAAK,KAAOA,EAAM,GAAK,MAIlG9xB,EAAAA,EAAAA,QAAAA,MAAmBw9E,EACnB,W,iFC9EAx9E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMy9E,EAAY,WACd,IAAIjhF,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAKgxD,eAAiBhxD,EAAKJ,QAAQwqC,UAAY,GAE/CpqC,EAAKkhF,SAAWlhF,EAAKgxD,0BAA0BjwD,MAAQf,EAAKgxD,eAAe1tD,OAASlE,OAAOD,KAAKa,EAAKgxD,gBAAgB1tD,OACrHtD,EAAKmhF,iBAAmBnhF,EAAKJ,QAAQuhF,iBAErCnhF,EAAKohF,aAAe,IAAIrgF,MAAMf,EAAKkhF,WAKvC,IACQxkC,EAHRl5C,EAAAA,EAAAA,QAAWy9E,EAAWj2E,EAAAA,IAGd0xC,EAAWukC,EAAUxgF,WAEhBqlC,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KACPohF,EAAcr2E,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAS1D,OAPAyB,EAAK2mC,KAAO,IAAI5lC,MAAMf,EAAKkhF,UAC3BlhF,EAAK2mC,KAAKn/B,SAAQ,SAAU85E,EAAM55E,EAAKH,GACnCA,EAAIG,GAAO1H,EAAK4mC,kBAGd/nC,QAAQwiB,IAAI,CAACggE,EAAarhF,EAAKsL,wBACnBtL,EAAKuhF,YAI3B7kC,EAAS6kC,SAAW,WAChB,OAAO1iF,QAAQC,QAAQmB,OAG3By8C,EAASI,OAAS,SAAU0kC,KAE5B9kC,EAAS+kC,WAAa,SAAU/5E,GAC5B,IAAIy1C,EAAUl9C,KAAKmhF,aAAa15E,GAChC,OAAKy1C,GACMt+C,QAAQ6W,OAAOzW,MAAM,sBAMpCy9C,EAASglC,YAAc,WACnB,OAAO7iF,QAAQwiB,IAAIphB,KAAKmhF,eAG5B1kC,EAASiC,iBAAmB,SAAUgjC,KAGtCjlC,EAAS+B,gBAAkB,SAAUkjC,KAIzCn+E,EAAAA,EAAAA,QAAAA,UAAuBy9E,EACvB,W,iFC7DAz9E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM8I,EAAmB,WACrB,IAAItM,EAAOC,KAKX,GAHAghF,EAAAA,QAAAA,MAAgBjhF,EAAMid,YAGjBlc,MAAMC,QAAQhB,EAAKgxD,gBAAiB,CACrCrpD,QAAQC,IAAI,kDAEZ,IAAIopD,EAAiB,GAErB5xD,OAAOD,KAAKa,EAAKgxD,gBAAgBxpD,SAASkB,IACtC,MAAMslD,EAAMhuD,EAAKgxD,eAAetoD,GAChC,IAAIk5E,EAAS,CACTr1E,SAAUyhD,EAAI6zB,MAGlBD,EAAOl5E,GAAOslD,EAAIpuD,QAElBoxD,EAAe3oD,KAAKu5E,MAGxB5hF,EAAKgxD,eAAiBA,IAM9B,IACQtU,EAHRl5C,EAAAA,EAAAA,QAAW8I,EAAkB20E,EAAAA,UAGrBvkC,EAAWpwC,EAAiB7L,WAEvB87C,MAAQ,cACjBG,EAASlwC,SAAW,CAChBs1E,KAAM,OACNr1E,MAAO,SAIXiwC,EAASqlC,KAAOrlC,EAASlwC,SAEzBkwC,EAAS6kC,SAAW12E,iBAChB,MAAM7K,EAAOC,KAEbD,EAAKgxD,eAAexpD,SAAQ,SAAgBwmD,EAAK7rD,GAC7C,MAAM6/E,EAAU5iF,OAAOD,KAAK6uD,GAAKnlD,MAAKH,GAAO,CAAC,WAAY,SAASO,QAAQP,GAAO,IAClF1I,EAAKohF,aAAaj/E,GAAKnC,EAAKzB,IAAI6M,WAAW42E,EAASx+E,EAAAA,EAAAA,KAAAA,OAAe,CAC/DnE,GAAIW,EAAK2mC,KAAKxkC,GACdwK,IAAK3M,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QAAUp6C,GAAG8V,cAAc,QAC3E+1C,EAAIg0B,cAGLnjF,QAAQwiB,IAAIrhB,EAAKohF,cACvB,IAAK,IAAIj/E,EAAI,EAAG+I,EAAM+R,UAAU3Z,OAAQnB,EAAI+I,EAAK/I,IAAK,CAClD,IAAI6rD,EAAM/wC,UAAU9a,GACpB6rD,EAAIxP,iBAAmBx+C,EAE3B,OAAOA,GAGX08C,EAASQ,cAAgBryC,iBACrB,MACMgzE,EAAsB,+BACtBC,EAAsB,+BAEtBx0E,EAAW,GACjBA,EAASozC,EAASH,cAAgBshC,GAAqBtvE,QACvDjF,EAASozC,EAASH,MAAQ,gBAAkBuhC,GAAqBvvE,QANpDtO,KAORqJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,CAC7C5S,SAAUhrC,OAAOD,KAAKa,EAAKgxD,gBAAgBzyD,KAAI,SAAUmK,EAAKvG,GAC1D,OAAOqB,EAAAA,EAAAA,KAAAA,OAAexD,EAAKgxD,eAAetoD,GAAM,CAAEqhB,MAAO5nB,QAE9Dq2B,KAGPkkB,EAAStxC,WAAaP,eAAgBE,EAASnL,GAC3C,MAAMI,EAAOC,KACbL,EAAQ2M,SAAW3M,EAAQ2M,UAAY3M,EAAQiiF,MAAQ7hF,EAAKwM,SAASs1E,KAErE,MAAMp6E,IAAQ1H,EAAKkhF,eACblhF,EAAKsL,gBACX,MAAM3B,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,CAAExyB,MAAOriB,IACvE,IAAI4B,EAAWsD,SAASC,cAAc,YAQtC,OAPAvD,EAAS8D,UAAYzD,EAAKkgB,OAE1B7pB,EAAK2M,IAAIsL,cAAc,MAAQjY,EAAKu8C,MAAQ,IAAM38C,EAAQ2M,UAAUO,YAAYxD,EAAS2C,QAAU3C,EAAS2C,QAAQkL,WAAa7N,EAAS6N,kBACvHnX,EAAKzB,IAAI6M,WAAWL,EAASvH,EAAAA,EAAAA,KAAAA,OAAe,CAC3DnE,GAAIW,EAAK4mC,SACTj6B,IAAK3M,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QAAU70C,GAAKuQ,cAAc,QAC7ErY,KAIP88C,EAASulC,WAAa,SAAUriF,GAC5B,MAAMI,EAAOC,KAEbL,EAAQ2M,SAAW3M,EAAQ2M,UAAY3M,EAAQiiF,MAAQ7hF,EAAKwM,SAASs1E,KAErE,IAAI3D,EAAKvxE,SAASC,cAAc,MAChCsxE,EAAG9wD,aAAa,QAASrtB,EAAKu8C,MAAQ,QAAWv8C,EAAKu8C,MAAQ,QAAUv8C,EAAKkhF,WAAa,KAE1FlhF,EAAK2M,IAAIsL,cAAc,MAAQjY,EAAKu8C,MAAQ,IAAM38C,EAAQ2M,UAAUO,YAAYqxE,GAEhF,IAAI+D,EAAe/D,EAAGrxE,YAAYlN,EAAQuiF,aAE1C,OADAD,EAAa70D,aAAa,QAAS60D,EAAarkD,aAAa,SAAW,WACjEqkD,GAIf1+E,EAAAA,EAAAA,QAAAA,iBAA8B8I,EAC9B,W,ipBC/FA9I,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAAG,IAAAq4E,EAAA,IAAAp5E,QAE9B,MAAM2/E,UAAoBC,EAAAA,QAGtB3iF,cACIG,SAASod,WAAWra,EAAA,KAAAi5E,EAAA,CAAAh5E,UAAA,EAAAC,WAAA,IACpB,MAAM9C,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUC,OAAOp+B,MAAM08C,OAChCv8C,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKmH,IAAM,GACXnH,EAAK81D,GAAK,CAAC,EAAG,EAAG,GACjB91D,EAAKsiF,OAAS,CAAC,EAAG,EAAG,GACrBtiF,EAAK4tB,EAAI,EACT5tB,EAAK6tB,EAAI,EACT7tB,EAAKuiF,IAAM,EACXviF,EAAKwiF,IAAM,EACXxiF,EAAK47C,MAAQ77C,EAAAA,EAAAA,MAAAA,OACbC,EAAK+6B,OAAQ,EACb/6B,EAAKyiF,mBAAoBrjF,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,sBAAuBI,EAAKJ,QAAQ6iF,kBAEhHx/E,EAAAjD,EAAI67E,EAAe,CACf6G,IAAK1iF,EAAKu8C,MAAQ,OAClBomC,OAAQ3iF,EAAKu8C,MAAQ,UACrBqmC,KAAM5iF,EAAKu8C,MAAQ,QACnBsmC,UAAW7iF,EAAKu8C,MAAQ,OACxBumC,GAAI9iF,EAAKu8C,MAAQ,MACjBwmC,EAAG/iF,EAAKu8C,MAAQ,KAChBymC,EAAGhjF,EAAKu8C,MAAQ,KAChB0mC,OAAQjjF,EAAKu8C,MAAQ,UACrB2mC,IAAKljF,EAAKu8C,MAAQ,OAClB4mC,IAAKnjF,EAAKu8C,MAAQ,OAClB6mC,UAAWpjF,EAAKu8C,MAAQ,aACxB8mC,oBAAqBrjF,EAAKu8C,MAAQ,kBAClC+mC,aAActjF,EAAKu8C,MAAQ,YAG/Bv8C,EAAK8oC,OAAS9oC,EAAKJ,QAAQkpC,QAAUtiC,EAAAA,EAAAA,OACrCxG,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,YAA4BxD,GAGhDw8C,eACI,MAAO,gBAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,KAwGb,aAvGMJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAEhCyB,EAAKmH,IAAMnH,EAAKzB,IAAI4I,IAEpBnH,EAAK8gD,QAELviD,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACtC,MAAM0qC,EAAO1qC,EAAE0qC,KACf,GAAIA,IAAS3pC,EAAAA,EAAAA,KAAAA,SACT,OAGJ,MAAMwjF,EAAuB,SAAUvkF,GAC9BgB,EAAKwjF,cAAcxkF,IACpBgB,EAAK8gD,SAITpX,IAAS3pC,EAAAA,EAAAA,KAAAA,QACTC,EAAK+6B,OAAQ,EACb/6B,EAAK47C,MAAQ77C,EAAAA,EAAAA,MAAAA,QACbC,EAAKmH,IAAMnH,EAAKzB,IAAI2I,OAAOC,IAE3BnH,EAAKzB,IAAI2I,OAAOgtD,UAAUroD,iBAAiB,WAAY03E,GAGvDvjF,EAAKzB,IAAI2I,OAAOoH,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAUJ,GACjD,GAAIA,EAAQ,CASR,GARIuE,EAAAA,EAAAA,iBAEAlE,EAAK8gD,QAEL9gD,EAAKyjF,cAAc,CAAEC,WAAY,CAAC/jF,EAAO6iF,IAAK7iF,EAAO4iF,IAAK5iF,EAAOgkF,KAAM7c,SAAU9mE,EAAK67E,YAAYyH,gBAGtGtjF,EAAKsiF,OAAS,CAAC3iF,EAAO4iF,IAAK5iF,EAAO6iF,KAC9B7iF,EAAOgkF,IAAM,EAAG,CAChB,IAAIt6E,EAASnF,EAAAA,EAAAA,aAAkBlE,EAAKzB,KACpCyB,EAAKsiF,OAAOj6E,KAAK1I,EAAOgkF,IAAIzgB,eAAe75D,GAAU,KAGzDrJ,EAAK29E,cAEL39E,EAAK8gD,YAINpX,IAAS3pC,EAAAA,EAAAA,KAAAA,UAChBC,EAAK+6B,MAAQ/6B,EAAKzB,IAAI2B,KAAK66B,QAC3B/6B,EAAK47C,MAAQ77C,EAAAA,EAAAA,MAAAA,OACbC,EAAKmH,IAAMnH,EAAKzB,IAAI4I,IAEhBnH,EAAKzB,IAAI2I,QACTlH,EAAKzB,IAAI2I,OAAOgtD,UAAUtT,oBAAoB,WAAY2iC,IAI9DvjF,EAAKzB,IAAI2I,SACTlH,EAAK8oC,OAAS9oC,EAAKzB,IAAI2I,OAAOC,IAC9BnH,EAAK88C,aAIbv+C,EAAIqb,QAAO,WAEP5Z,EAAKE,KAAK4lC,SAASvnC,GAAKI,MAAK,WACzBqB,EAAK88C,QAAO,WAER98C,EAAK8gD,cAIT58C,EAAAA,EAAAA,gBACAlE,EAAKsL,gBAAgB3M,MAAK,WACtBqB,EAAK4f,WACL5f,EAAK4jF,oBAIbrlF,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACvCT,EAAI0I,WACLjH,EAAK+6B,MAAQx8B,EAAI2B,KAAK66B,QACtB/6B,EAAKmH,IAAMnI,EAAEw2D,OACbx1D,EAAK88C,aAIb98C,EAAKzB,IAAI2B,KAAKu0D,cAAc91D,MAAK,SAAUklF,GACvC7jF,EAAKsL,gBAAgB3M,MAAK,WACtBklF,EAASh4E,iBAAiB9L,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GACpDgB,EAAKzB,IAAI0I,UAIbjH,EAAK8jF,YAAY9kF,MAErB6kF,EAASh4E,iBAAiB9L,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACzDgB,EAAK+jF,aAAa/kF,eAM3BgB,EAGX6K,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,EAGpBuB,aAAa2tB,GACT,MAAMx4B,EAAOC,KAEPqL,EAAgBtL,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MACnEv8C,EAAK+8C,qBAAqBzxC,GAC1B,MAAM3B,QAAa2B,EACnBtL,EAAKu8E,WAAWnvE,UAAYzD,QACtBnG,EAAAA,EAAAA,QAAAA,UAAAA,WAAAA,KAAqCxD,EAAM,CAC7C4tB,EAAG5tB,EAAK4tB,EACRC,EAAG7tB,EAAK6tB,EACR00D,IAAKviF,EAAKuiF,IACVC,IAAKxiF,EAAKwiF,IACVmB,IAAK3jF,EAAK+6B,OAAS/6B,EAAKsiF,OAAOh/E,OAAS,EAAItD,EAAKsiF,OAAO,IAAMtiF,EAAK+6B,OAAS/6B,EAAK81D,GAAGxyD,OAAS,EAAItD,EAAK81D,GAAG,GAAK,KAC9G3uD,IAAKnH,EAAKmH,IACV2hC,OAAQ9oC,EAAK8oC,OACb/N,MAAO/6B,EAAK+6B,MACZipD,SAAUhkF,EAAK+6B,OAAS/6B,EAAKJ,QAAQokF,QACrCvB,kBAAmBziF,EAAKyiF,oBAE5B,MAAMwB,EAAYjkF,EAAK2M,IAAIsL,cAAc,UAAYjV,EAAAhD,EAAI67E,GAAa6G,KAClEuB,GACAA,EAAUp4E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACrD5N,EAAKu9E,+BACN,CAAEtvE,SAAS,IAGlB,MAAMi2E,EAAWlkF,EAAK2M,IAAIsL,cAAc,8BACpC/T,EAAAA,EAAAA,gBACAggF,EAASr4E,iBAAiB,SAAS,WAC/B7L,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvBC,EAAK8gD,WAGTojC,EAASt+E,MAAMg3C,QAAU,KAGzB58C,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1BC,EAAK2M,IAAI/G,MAAM21C,WAAa,UAC5B2oC,EAASt+E,MAAMg3C,QAAU,QAGzB14C,EAAAA,EAAAA,WAAgBs0B,IAChBA,IAIRsrD,YAAY9kF,GACRiB,KAAKC,KAAK4jF,YAAY9kF,GAG1B+kF,aAAa/kF,GACT,MAAMgB,EAAOC,KACbinD,YAAW,WACFlnD,EAAKwjF,cAAcxkF,KACpBgB,EAAK2M,IAAI/G,MAAM21C,WAAa,SAC5Bv7C,EAAK8gD,WAEV,KAGP0iC,cAAcxkF,GACV,MAEMmlF,EAFOlkF,KAEW0M,IAAIoiD,wBAC5B,OAAOo1B,EAAW9P,MAAQr1E,EAAEolF,SACxBD,EAAW9P,KAAO8P,EAAW5xD,OAASvzB,EAAEolF,SACxCD,EAAW/P,KAAOp1E,EAAEqlF,SACpBF,EAAW/P,IAAM+P,EAAW3xD,QAAUxzB,EAAEqlF,QAGhD1G,SACI,MAAM39E,EAAOC,KAEbD,EAAKsL,gBAAgB3M,MAAK,YACjBqB,EAAK+6B,OAAS/6B,EAAKJ,QAAQokF,UAC5BhkF,EAAKsiF,OAASp+E,EAAAA,EAAAA,UAAelE,EAAK81D,GAAI91D,EAAKmH,IAAKnH,EAAK8oC,QAAQ3Y,WAGjE,MAAMm0D,EAActkF,EAAK2M,IAAIsL,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAa+G,QAC1D2B,EAAYD,EAAYrsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAaiH,MAC3D0B,EAAgBF,EAAYrsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAaoH,UA6BrE,GA5BAsB,EAAUvmD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBC,EAAK+6B,OACvDypD,EAAcxmD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBC,EAAK+6B,QAExD/6B,EAAK+6B,OAAS/6B,EAAKJ,QAAQokF,WAC3BhkF,EAAKuiF,IAAMr+E,EAAAA,EAAAA,YAAiBlE,EAAKsiF,OAAO,GAAIviF,EAAAA,EAAAA,kBAC5CC,EAAKwiF,IAAMt+E,EAAAA,EAAAA,YAAiBlE,EAAKsiF,OAAO,GAAIviF,EAAAA,EAAAA,mBAE5CC,EAAK+6B,OACLypD,EAAcvsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAaqH,OAAO91E,UAAYpN,EAAKuiF,IACzEiC,EAAcvsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAasH,OAAO/1E,UAAYpN,EAAKwiF,IACpEgC,EAAcvsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAawH,uBACjDrlD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBC,EAAKsiF,OAAOh/E,QAAU,KAC/DtD,EAAK2jF,IAAM3jF,EAAKsiF,OAAO,GACvBkC,EAAcvsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAauH,aAAah2E,UAAYpN,EAAK2jF,OAInF3jF,EAAK4tB,EAAI1pB,EAAAA,EAAAA,YAAiBlE,EAAK81D,GAAG,GAAI/1D,EAAAA,EAAAA,iBACtCC,EAAK6tB,EAAI3pB,EAAAA,EAAAA,YAAiBlE,EAAK81D,GAAG,GAAI/1D,EAAAA,EAAAA,iBACtCC,EAAK2M,IAAIsL,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAakH,KAAK31E,UAAYpN,EAAK4tB,EAClE5tB,EAAK2M,IAAIsL,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAamH,KAAK51E,UAAYpN,EAAK6tB,EAC7D02D,EAAUtsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAawH,uBAC7CrlD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBC,EAAK81D,GAAGxyD,QAAU,KAC3DtD,EAAK2jF,IAAM3jF,EAAK81D,GAAG,GACnByuB,EAAUtsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAauH,aAAah2E,UAAYpN,EAAK2jF,OAI9E3jF,EAAK+6B,OAAS/6B,EAAKJ,QAAQokF,QAAS,CACrC,MAAMS,EAAazkF,EAAK2M,IAAIsL,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAagH,aAC/D4B,EAAWxsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAaqH,OAAO91E,UAAYpN,EAAKuiF,IACtEkC,EAAWxsE,cAAe,IAAGjV,EAAAhD,EAAI67E,GAAasH,OAAO/1E,UAAYpN,EAAKwiF,IAGrEt+E,EAAAA,EAAAA,iBACDlE,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1BC,EAAK2M,IAAI/G,MAAM21C,WAAa,cAKxCuF,QACI,MAAM9gD,EAAOC,KAEbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvBC,EAAK2M,IAAI/G,MAAM21C,WAAa,gBAErBv7C,EAAK0kF,oBACZ1kF,EAAK4f,WAAWjhB,MAAK,SAAU8F,GACvBA,EAAMsK,SAASzL,QACfmB,EAAM2zB,mBAKlBusD,mBACI,MAAM3kF,EAAOC,KAEbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvBC,EAAK8gD,QAEL9gD,EAAKE,KAAK0kF,mBAGdhB,iBACiB3jF,KAERC,KAAK2kF,iBAGdnjF,YACI,MAAM1B,EAAOC,KAEPgL,EAASjL,EAAKzB,IAAI2G,mBAAmB,qBACvC+F,MAAAA,OAAM,EAANA,EAAQ3H,QAAS,GAAK2H,EAAO,GAAG3F,YAChCtF,EAAK8kF,cAAc75E,EAAO,KAG1BjL,EAAK+kF,iBAAiB,EAAE/kF,EAAKzB,IAAIyoB,YAAY,GAAKhnB,EAAKzB,IAAIyoB,YAAY,IAAM,GAAIhnB,EAAKzB,IAAIyoB,YAAY,GAAKhnB,EAAKzB,IAAIyoB,YAAY,IAAM,IAEtIhnB,EAAKyjF,cAAc9iF,KAAKX,EAAM,CAAE0jF,WAAY1jF,EAAK81D,MAIzDgvB,cAAc7/E,GAGNA,GAFShF,KAGJ8kF,iBAAiB9/E,EAAM/E,KAAK+E,MAAM+/E,eAI/CD,iBAAiBx4E,GACb,MAAMvM,EAAOC,KAETsM,IACKvM,EAAK+6B,QACN/6B,EAAK4tB,EAAIrhB,EAAS,GAClBvM,EAAK6tB,EAAIthB,EAAS,GAClBvM,EAAK81D,GAAK,CAAC91D,EAAK4tB,EAAG5tB,EAAK6tB,GAEpBthB,EAASjJ,OAAS,GAClBtD,EAAK81D,GAAGztD,KAAKkE,EAAS,MAG1BvM,EAAK+6B,OAAS/6B,EAAKJ,QAAQokF,WAC3BhkF,EAAKuiF,IAAMh2E,EAAS,GACpBvM,EAAKwiF,IAAMj2E,EAAS,GACpBvM,EAAKsiF,OAAS,CAACtiF,EAAKuiF,IAAKviF,EAAKwiF,KAE1Bj2E,EAASjJ,OAAS,GAClBtD,EAAKsiF,OAAOj6E,KAAKkE,EAAS,KAIlCvM,EAAK29E,UAMb8F,cAAczkF,GACV,MAAMgB,EAAOC,KAGb,IAAKD,EAAKzB,IAAIoO,IAAIqxB,UAAU8gB,SAAS,sBAAwB9+C,EAAKzB,IAAIoO,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WAA2B,CAEpH,IAAIklF,EAAiBjlF,EAAK2M,IAAIoiD,wBAC9B,GAAIk2B,EAAe5Q,MAAQr1E,EAAEolF,SAAWplF,EAAEolF,SAAWa,EAAe1Q,OAAS0Q,EAAe7Q,KAAOp1E,EAAEqlF,SAAWrlF,EAAEqlF,SAAWY,EAAe3Q,OAIxI,OAHAt0E,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aACvBC,EAAK8gD,QAKT9gD,EAAK2M,IAAIqxB,UAAUC,OAAO,aAC1BipB,YAAW,WACPlnD,EAAK2M,IAAIqxB,UAAUnjB,IAAI,aAIvB,IAAIy1C,EAAW,EACX7mD,EAFkBu9D,iBAAiBhnE,EAAK2M,KAAKu4E,iBAAiB,sBAExCz7E,MAAM,iBAC5BA,IACA6mD,EAAW/3C,SAAS9O,EAAM,IACT,MAAbA,EAAM,KACN6mD,GAAsB,MAEb,IAAbA,IACArJ,aAAajnD,EAAKmlF,sBAClBnlF,EAAKmlF,qBAAuBj+B,YAAW,KAC/BlnD,EAAK0kF,qBACL1kF,EAAK4f,WAAWjhB,MAAK8F,IACjBA,EAAMszB,cAAc/3B,EAAK0kF,qBACzB1kF,EAAK0kF,oBAAsB,UAGpCp0B,MAER,IAEHtwD,EAAK+kF,iBAAiB/lF,EAAE0kF,YAEnB1jF,EAAKzB,IAAI0I,UACVjH,EAAKolF,gBAAgBpmF,EAAE0kF,WAAY1kF,EAAE8nE,UAGzC9mE,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAclCqlF,gBAAgB74E,EAAUu6D,GACtB,MAAM9mE,EAAOC,KAERD,EAAK0kF,oBAQN1kF,EAAK0kF,oBAAoB/iF,UAAU4K,GAPnCvM,EAAK4f,WAAWjhB,MAAK,SAAU8F,GAC3BA,EAAMwxB,UAAU1pB,EAAU,CAAE/B,MAAO,QAASlG,YAAY,EAAOwiE,SAAUA,GAAY/mE,EAAAA,EAAAA,QAAAA,MAAsB8R,OAAQ,CAAC,GAAK,MACpHlT,MAAK,SAAU+8B,GACZ17B,EAAK0kF,oBAAsBhpD,QAQ/C7wB,iBACI,MAAM7K,EAAOC,KAWb,OAVkBoE,MAAdrE,EAAKyE,QACLzE,EAAKyE,YAAczE,EAAKzB,IAAI8rD,SAAS,CACjChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNuvB,SAAS,EACT+1D,MAAOrlF,EACPwK,MAAO,gBAEXxK,EAAKyE,MAAMlG,IAAI20D,cAAclzD,EAAKyE,QAE/BzE,EAAKyE,OAIpBjB,EAAAA,EAAAA,QAAAA,YAAyB4+E,EACzB,W,iFCpYA5+E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM8hF,UAAmBC,EAAAA,QACrB7lF,cACIG,SAASod,WACT,MAAMjd,EAAOC,KAEbD,EAAKgxD,eAAiB,CAClB,CACIxmD,MAAO,SACPg7E,YAAa,CAAEC,YAAazlF,EAAKJ,QAAQ8lF,iBAE7C,CACIC,WAAY,CAAEC,kBAAmB5lF,EAAKJ,QAAQgmF,qBAGtD5lF,EAAKmhF,iBAAmB,EAG5Bt2E,eAAetM,GACX,MAAMyB,EAAOC,KACbD,EAAKzB,IAAMA,EACXyB,EAAKwK,MAAQxK,EAAK4hC,gBAAgB,WAClC,MAAMosB,QAAYnuD,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAE5C,OADAyvD,EAAIrhD,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,WAC5ByR,GAIfxqD,EAAAA,EAAAA,QAAAA,WAAwB8hF,EACxB,W,6GCtHA9hF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,OAAY2B,EAAAA,EAEZ,MAAM0gF,EAAW,SAAUjmF,GACvB,IAAII,EAAOC,KACXD,EAAK8lF,eAAiB,IAAM9lF,EAAKu8C,MAEjCvxC,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAK+lF,YAAc,GAEnB,IAAI9hF,EAAOrE,GAAW,GACtBI,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAeS,EAAKu4E,WAClC9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzBt4E,EAAKu4E,WACN5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,aAIvC/4E,EAAAA,EAAAA,QAAWqiF,EAAUG,EAAAA,SAErB,WACI,IAAItpC,EAAWmpC,EAASplF,UAExBi8C,EAASH,MAAQ,kBAEjBG,EAASQ,cAAgBryC,iBACrB,MACMgzE,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAASozC,EAASH,cAAgBshC,GAAqBtvE,QACvDjF,EAASozC,EAASH,MAAQ,kBAAoBwhC,GAAuBxvE,QANxDtO,KAORqJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAAM,SAAU5yC,GAC1F3J,EAAKu8E,WAAWnvE,UAAYzD,KAC7BhL,MAAK,WACJ,OAAOqM,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAM,CAC3Cg+E,UAAWh+E,EAAKX,GAChB4mF,iBAAkBjmF,EAAKJ,QAAQqmF,mBAChC,WAECjmF,EAAK2M,IAAIhB,iBAAkB,iCAAiCnE,SAAQ,SAAU0+E,GAC1EA,EAAI1tD,SAAW,WACX,MAAM9qB,EAASzN,KAAKyN,OAChBA,IACA1N,EAAKmmF,WAAaz4E,OAI9B,MAAM04E,EAAWpmF,EAAK2M,IAAIsL,cAAe,+CACrCmuE,GAAYA,EAASz9E,WAAgB,MACrC3I,EAAKmmF,WAAav5E,SAAS85D,eAAe0f,EAASz9E,WAAgB,IAAE7F,QAGrEU,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,YAMhB,MAAM6tD,EAAU,SAAUl7C,GACtB,IAAItmC,EAASsmC,EAAOk7C,QAAQ,IAI5B,OAHIxhF,EAAOoE,QAAQ,MAAQ,IACvBpE,EAASA,EAAO2E,QAAQ,MAAO,IAAIA,QAAQ,MAAO,KAE/C3E,GAGX63C,EAAS5W,SAAW,SAAUvnC,GAC1B,IAAIyB,EAAOC,KACX,MAAM4E,EAASmhF,EAAAA,QAAAA,UAAAA,SAAAA,KAAgChmF,EAAMzB,GAGrDyB,EAAKzB,IAAI6uB,YAAc,YAkKvB,IAaIk5D,EAAgB,SAAUpwE,EAAOixC,GACjC,MAAMzmB,EAAQ1gC,EAAK2M,IAAIsL,cAAc,0BAA4BjY,EAAKu8C,MAAQ,WAC9E,IAAI8gB,EACJ,OAAQnnD,EAAMxN,KACV,KAAK3I,EAAAA,EAAAA,UAAAA,iBACDs9D,EAAW38B,EAAMzoB,cAAc,aAAejY,EAAKX,IAAI+N,UAAU6F,OAAO,CAAE8qD,YAAa7nD,EAAMiH,OAAOyiD,eACpG,MACJ,KAAK7/D,EAAAA,EAAAA,UAAAA,UACDs9D,EAAWr9D,EAAK4hC,gBAAgB,kBAChC,MACJ,KAAK7hC,EAAAA,EAAAA,UAAAA,gBACDs9D,EAAW38B,EAAMzoB,cAAc,gBAAkBjY,EAAKX,IAAI+N,UAAU6F,OAAO,CAAE8qD,YAAa7nD,EAAMiH,OAAOyiD,eACvG,MACJ,KAAK7/D,EAAAA,EAAAA,UAAAA,YACDs9D,EAAW38B,EAAMzoB,cAAc,mBAAqBjY,EAAKX,IAAI+N,UAC7D,MACJ,KAAKrN,EAAAA,EAAAA,UAAAA,cAKD,OAJAs9D,EAAWr9D,EAAK4hC,gBAAgB,0BAChC5hC,EAAKzB,IAAIuvD,MAAMuP,EAAU,CAAEjzD,KAAMrK,EAAAA,EAAAA,QAAAA,QACjCyD,EAAAA,EAAAA,MAAS,2EAA2EyP,OAAO,CAAEiD,MAAOA,EAAMiH,OAAOzD,IAAK6sE,YAAarwE,EAAMiH,OAAOuiD,YAAa3B,YAAa7nD,EAAMiH,OAAOyiD,eAAiB7/D,EAAAA,EAAAA,aAAAA,cACxMC,EAAKzB,IAAIw1D,sBAAsBvM,WAAWL,GAE9C,QACIkW,EAAWr9D,EAAK4hC,gBAAgB,OAAS1rB,EAAMxN,IAAKwN,EAAMiH,QAGlEnd,EAAKzB,IAAIuvD,MAAMuP,EAAU,CAAEjzD,KAAMrK,EAAAA,EAAAA,QAAAA,UAEjCC,EAAKzB,IAAIw1D,sBAAsBvM,WAAWL,IA0B9C,OAlBAnnD,EAAK2M,IAAId,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,wBAjDhE,WACZ,IAAIyP,EAAS,GACTjT,EAAKmmF,aACLlzE,EAASjT,EAAKmmF,WAAWluE,cAAc,UAAUnV,OAEjDmQ,EAAOhK,QAAQ,UAAY,EArKb,SAAUgK,GAC5B,MAAMkrE,EAAKn+E,EAAKzB,IAAIw1D,sBACd5M,EAAOg3B,GAAMA,EAAG92B,UAChB9rC,EAASvb,EAAKzB,IAAIyoB,YACT,IAAInoB,SAAQ,SAAUC,EAASk1B,GAC1C,IAAIkgD,EAAWl0E,EAAKzB,IAAI2B,KAAKsmF,YACzB3S,EAAYK,EAAS5wE,OAAS,EAAIE,EAAAA,EAAAA,KAAAA,cAAsB0wE,GAAYA,EAAS,GAOjF,GALSl0E,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,YAC1BxD,EAAKzB,IAAI0I,UAChBjH,EAAKymF,uBAAuB,CAAEnpB,OAAQuW,EAAW6S,MAAM,KAGtD1mF,EAAKmmF,WAAWluE,cAAe,IAAGjY,EAAKu8C,4BACxCv8C,EAAKmmF,WAAWluE,cAAe,IAAGjY,EAAKu8C,0BAA2B,CAClE,MAAMoqC,EAAkB,SACxB,IAAIC,EAAgBh6E,SAAS85D,eAAeigB,GACxCC,EACAA,EAAcx5E,UAAY,KAG1Bw5E,EAAgBh6E,SAASC,cAAc,QACzBwgB,aAAa,KAAMs5D,GACjC/5E,SAAS+0B,KAAK70B,YAAY85E,IAG9BA,EAAchhF,MAAMwuE,IAAM,SAC1BwS,EAAchhF,MAAMyuE,KAAO,SAC3BuS,EAAchhF,MAAM2G,SAAW,WAE/BvM,EAAK6mF,WAAWD,EAAe,IAAIjoF,MAAK,SAAUmoF,GAC9C,GAAIA,EAAc,CACd,IAAI3T,EAAMU,EAAUrB,WAAW,MAC/BW,EAAIP,UAAY,UAChBO,EAAIN,SAASgB,EAAUthD,MAAQ,GAAIshD,EAAUrhD,OAAS,GAAI,GAAI,IAE9DhvB,EAAAA,EAAAA,KAAAA,YAAoBqwE,EAAWiT,EAAc,CAAEl5D,EAAGimD,EAAUthD,MAAQ,GAAI1E,EAAGgmD,EAAUrhD,OAAS,KAAM7zB,MAAK,SAAUooF,GAC/GjoF,EAAQioF,WAGZ5I,GAAMA,EAAG32B,WAAWL,WAI5BroD,EAAQ+0E,MAITl1E,MAAK,SAAUqoF,GAClB,MAAMxuB,EAAW9mD,OAAOY,SAASL,SAAW,IAAMjS,EAAKzB,IAAI4I,IAAIqC,QAAQ,IAAK,IAAM,IAAMhG,EAAAA,EAAAA,KAAAA,kBAAyB,IAAIsgC,MAAO5gB,YAAY,GAClI+jE,EAAgB,IAAMh0E,EAAOb,MAAM,KAAK,GACxC80E,EAAqBj0E,IAAWzP,EAAAA,EAAAA,OAAAA,SAAAA,KAA0B,OAAS,OACzE,GAAIxD,EAAKmmF,WAAWluE,cAAe,IAAGjY,EAAKu8C,6BAA+Bv8C,EAAKzB,IAAI0I,SAC/E,4CAAgBtI,MAAKW,IACjB,MAAMq5D,EAAQr5D,EAAOiP,QACf44E,GAAU5rE,EAAO,GAAKA,EAAO,IAAMyrE,EAAQz0D,MAG3C60D,GAAU7rE,EAAO,GAAKA,EAAO,IAAMyrE,EAAQx0D,OAC3C60D,EAAU9rE,EAAO,GACjB+rE,EAAU/rE,EAAO,GACjBm9C,EAAM,IAAIC,EAChBquB,EAAQO,QAAO,SAAU/4D,GACrBkqC,EAAIrQ,KAAKmQ,EAAWyuB,EAAez4D,GACnCkqC,EAAIrQ,KAAKmQ,EAAW0uB,EAAqB,GAAEb,EAAQc,QARzC,GAS9Bd,QAAQ,QARsB,GAS9BA,QAAQ,OACdA,EAAQe,OACRf,EAAQgB,OACRhB,EAAQiB,MACkB5uB,EAAIO,cAAc,CAAE7uD,KAAM,SAAUzL,MAAK,SAAU6vB,GAC/ChrB,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAW,OAAQhqC,GACxC2vD,GAAMA,EAAG32B,WAAWL,MACrB,SAAUztC,GACTlW,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,uBAAyB,KAAOloB,EAAIkE,SAClEugE,GAAMA,EAAG32B,WAAWL,QAEzBl0C,UAGN,CACD,IACI,MAAMyL,EAAMsoE,EAAQxpB,UAAUvqD,GAC9BzP,EAAAA,EAAAA,KAAAA,gBAAwBg1D,EAAWyuB,EAAeh0E,EAAQyL,GAC5D,MAAO1f,GACLwE,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,uBAAyB,KAAO5iC,EAAE4e,SAEpEugE,GAAMA,EAAG32B,WAAWL,OA+ExBqgC,CAAcv0E,GApEG,SAAUA,GAC/B,MAAMkrE,EAAKn+E,EAAKzB,IAAIw1D,sBACd5M,EAAOg3B,GAAMA,EAAG92B,UAWhBruB,EAAch5B,EAAKzB,IAAIsgE,gBAAgB,CACzC15D,OATInF,EAAKzB,IAAI0I,SACF,IAAI9B,EAAAA,EAAAA,OAAc,KAAM,IAAImL,QAAQtQ,EAAKzB,IAAI2I,OAAOugF,aAAaznF,EAAKzB,IAAI2I,OAAOC,MAAOnH,EAAKzB,IAAI2I,OAAOC,KAGxG,IAAIhC,EAAAA,EAAAA,KAAYnF,EAAKzB,IAAIyoB,YAAahnB,EAAKzB,IAAI8I,UAM1D+pB,aAAcne,EACd6rD,UAAU,IAEdjgE,QAAQwiB,IAAI2X,GAAar6B,MAAKkM,eAAgB68E,GAE1C,IAAIC,EAAYD,EAAcviF,QAAO8E,KAAUA,IAC/C,GAAyB,IAArB09E,EAAUrkF,OAAd,CAKA,IADA,IAAIsyE,EAAe,GACVzzE,EAAI,EAAGA,EAAIwlF,EAAUrkF,OAAQnB,IAElC,GAAIwlF,EAAUxlF,GAAGs9D,QAAUkoB,EAAUxlF,GAAGs9D,OAAOn8D,OAC3C,IAAK,IAAIiU,EAAI,EAAGA,EAAIowE,EAAUxlF,GAAGs9D,OAAOn8D,OAAQiU,IAAK,CACjD,IAAIrB,EAAQyxE,EAAUxlF,GAAGs9D,OAAOloD,GAChC+uE,EAAcpwE,EAAOixC,OAH7B,CAOA,IAAI/iD,EAAOujF,EAAUxlF,GAAGiC,KACpBkR,EAAMqyE,EAAUxlF,GAAGmT,IACnBlR,GAAQkR,GACRsgE,EAAavtE,KAAK,CAAEiN,IAAKA,EAAM,gBAAiBlR,KAAMA,IAE9D,UACUZ,EAAAA,EAAAA,KAAAA,iBAAyBoyE,GAEnC,MAAOl8D,GACH,GAAIA,EAAIhR,MAAQ3I,EAAAA,EAAAA,cAAAA,sBAA4C,CACxD,MAAMmxB,EAAUw2D,EAAc7+E,MAAKojB,GAAYA,EAAS7nB,OAASsV,EAAItV,OAAM8sB,QACrE/T,EAAS,CACXyqE,OAAQ12D,EAAQlO,OAAO1f,OAAS,EAAItD,EAAK4hC,gBAAgB,iCAAmC,GAC5FxkB,WAAY8T,EAAQlO,OAAO9a,QAAO,SAAU+wB,EAAIC,EAAI/2B,EAAG6yD,GACnD,OAAQ/7B,aAAcl4B,MAAQk4B,EAAK,CAACA,IAAK3wB,OAAO,CAAC4wB,EAAG1uB,QAAQD,KAAKpI,EAAI6yD,EAAM1xD,OAAS,EAAI,KAAO,IAAMtD,EAAK4hC,gBAAgB,sCAAwC,OACnK,IACHg+B,aAAc1uC,EAAQ+tC,UAAU,GAAGz0D,MACnCyI,OAAQA,GAEZjT,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,0BAA0B3uB,OAAOkK,GAAS,CAAE/S,KAAMrK,EAAAA,EAAAA,QAAAA,SAI9Fo+E,GAAMA,EAAG32B,WAAWL,QApChBm/B,EAAc,CAAE59E,IAAK3I,EAAAA,EAAAA,UAAAA,WAA8BonD,MAiDvD0gC,CAAiB50E,MAwC2F,CAAEhF,SAAS,IAC/HjO,EAAK2M,IAAId,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,yBANhE,SAAUu8C,GACtBA,EAAIguB,kBACJvqE,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKu8E,WAAWtkE,cAAcjY,EAAK8lF,eAAiB,oBAI2C,CAAE73E,SAAS,IAEhIjO,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,kBAAkB,SAAUv9C,GACnGA,EAAE0O,OAAOmyB,QACT7/B,EAAK8nF,eAEL9nF,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YAI1EC,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,MAAM,SAAUukF,GAC5E/nF,EAAKgoF,qBACNhoF,EAAK8nF,eAET9nF,EAAKioF,wBAGFpjF,GAGX63C,EAASwrC,sBAAwB,SAAUC,GACvC,MAAMnoF,EAAOC,KACPygC,EAAQ1gC,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAClD6rC,EAAapoF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBAEnD6rC,EAAW/qD,SAAW8qD,EAAgBE,GAElCD,EAAWvoD,QACXa,EAAM1C,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBooF,EAAgBE,IAE/D3nD,EAAM1C,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAI5B28C,EAASorC,aAAej9E,iBACpB,MAAM7K,EAAOC,KACPqoF,EAAWtoF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,mBAAmBv8C,EAAKu8C,kBACnE/P,EAAQxsC,EAAK2M,IAAIsL,cAAe,SAAQjY,EAAKu8C,wBACnD+rC,EAASjrD,UAAW,EACpBmP,EAAMxO,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACpB,MAAM8E,QAAemhF,EAAAA,QAAAA,UAAAA,aAAAA,KAAoChmF,GAEzD,OADAwsC,EAAMxO,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAChB8E,GAzTf,GA8TArB,EAAAA,EAAAA,QAAAA,SAAsBqiF,EACtB,W,ivCCtVAriF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,MAAAA,UAAyB,eACzBA,EAAAA,EAAAA,MAAAA,QAAuB,aACvBA,EAAAA,EAAAA,MAAAA,WAA0B,gBAC1BA,EAAAA,EAAAA,MAAAA,SAAwB,cACxBA,EAAAA,EAAAA,MAAAA,SAAwB,cACxBA,EAAAA,EAAAA,MAAAA,MAAqB,WACrBA,EAAAA,EAAAA,MAAAA,QAAuB,aACvBA,EAAAA,EAAAA,MAAAA,eAA8B,oBAC9BA,EAAAA,EAAAA,MAAAA,YAA2B,iBAC3BA,EAAAA,EAAAA,MAAAA,OAAsB,SAEtB,MAAMg8B,EAAY,cACZY,EAAc,aAAa,IAAAmpD,EAAA,IAAArjF,QAAA8lF,EAAA,IAAA9lF,QAAA+lF,EAAA,IAAA/lF,QAAAgmF,EAAA,IAAAhmF,QAAAimF,EAAA,IAAAjmF,QAAAkmF,EAAA,IAAAlmF,QAAAmmF,EAAA,IAAAnmF,QAAAomF,EAAA,IAAApmF,QAAAqmF,EAAA,IAAArmF,QAAAsmF,EAAA,IAAAtmF,QAAAumF,EAAA,IAAAvmF,QAAAwmF,EAAA,IAAAxmF,QAAAymF,EAAA,IAAAzmF,QAAA0mF,EAAA,IAAA1mF,QAAA2mF,EAAA,IAAA3mF,QAAA4mF,EAAA,IAAA5mF,QAAA6mF,EAAA,IAAA52E,QAAA62E,EAAA,IAAA72E,QAAA82E,EAAA,IAAA92E,QAAA+2E,EAAA,IAAA/2E,QAAAg3E,EAAA,IAAAh3E,QAEjC,MAAMi3E,UAAaC,EAAAA,QAyBflqF,cACIG,SAASod,WAAWnK,EAAA,KAAA42E,GAAA52E,EAAA,KAAA22E,GAAA32E,EAAA,KAAA02E,GAAA12E,EAAA,KAAAy2E,GAAAz2E,EAAA,KAAAw2E,GAAAxpF,EAAA,aAzBhBi8B,GAASn5B,EAAA,KAAAkjF,EAAA,CAAAjjF,UAAA,EAAAC,MACA,IAAMi5B,IAASn5B,EAAA,KAAA2lF,EAAA,CAAA1lF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA4lF,EAAA,CAAA3lF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA6lF,EAAA,CAAA5lF,UAAA,EAAAC,MAGlBi5B,EAAY,WAAQn5B,EAAA,KAAA8lF,EAAA,CAAA7lF,UAAA,EAAAC,MACrBi5B,EAAY,UAAOn5B,EAAA,KAAA+lF,EAAA,CAAA9lF,UAAA,EAAAC,MAChBi5B,EAAY,aAAUn5B,EAAA,KAAAgmF,EAAA,CAAA/lF,UAAA,EAAAC,MACpBi5B,EAAY,eAAYn5B,EAAA,KAAAimF,EAAA,CAAAhmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAkmF,EAAA,CAAAjmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAmmF,EAAA,CAAAlmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAomF,EAAA,CAAAnmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAqmF,EAAA,CAAApmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAsmF,EAAA,CAAArmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAumF,EAAA,CAAAtmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAwmF,EAAA,CAAAvmF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAymF,EAAA,CAAAxmF,UAAA,EAAAC,MASxB,IAAIL,UAUlB,MAAMzC,EAAOC,KAEbD,EAAKqG,OAASrG,EAAKJ,QAAQyG,QAAUnC,EAAAA,EAAAA,QAAY,EAAM,GAAIukC,EAAAA,EAAAA,QAC3DzoC,EACK6pF,aAAa,YACbA,aAAa,YACbA,aAAa,gBACbA,aAAa,oBACbA,aAAa,YACbA,aAAa,QAElB5mF,EAAAjD,EAAI6oF,KAAyC,IAAvB7oF,EAAKJ,QAAQ6E,QAEnCzE,EAAKuoD,QAAU,GACfvoD,EAAK8pF,aAAe,EACpB9pF,EAAKy8C,cAAe,EAEpBx5C,EAAAjD,EAAI8oF,EAAiB,MAErB9oF,EACKsO,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAClCgB,EAAK+pF,cACD/qF,EAAE0E,UACF1D,EAAKuoD,QAAUvpD,EAAE0E,QAAQnC,iBACzBvB,EAAK8pF,aAAe9pF,EAAKuoD,QAAQjlD,WAGxCgL,GAAGvO,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC1BgB,EAAKyE,OAASzE,EAAKgqF,cAAgBhqF,EAAKyE,MAAMsK,UAAY/O,EAAKyE,MAAMsK,SAASzL,OAAS,GACvFtD,EAAKyE,MAAM2zB,gBAGfp4B,EAAKuoD,QAAQjlD,OAAStD,EAAK8pF,aAC3B9pF,EAAKuoD,QAAQvoD,EAAK8pF,gBAAkB9qF,EAAEs2B,MAEtCxf,EAAA9V,EAAIypF,EAAAQ,GAAAtpF,KAAJX,MAEHsO,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAChC8W,EAAA9V,EAAI0pF,EAAAQ,GAAAvpF,KAAJX,GAEA,MAAMmqF,EAAY3mF,EAAAA,EAAAA,OAAU,CACxBqjC,OAAQ7mC,EAAK4hC,gBAAgB,UAAY,IACzCkF,QAAS9mC,EAAKyE,MAAMsK,SAASxQ,KAAIyQ,GAAKA,EAAEpL,YAE5C5E,EAAE0E,QAAQS,MAAMgmF,GAEZnqF,EAAKw4B,UACLx4B,EAAKw4B,SAASx5B,EAAE0E,YAKhCw5B,oBACIr9B,MAAMq9B,oBAENj6B,EADahD,KACT4oF,GADS5oF,KACa29B,aAAa,mBAGhCJ,gCACP,MAAO,CAAC,OAAQ,YAGpBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,aAAT6I,GACAgN,EAAA9V,EAAIupF,EAAAa,GAAAzpF,KAAJX,GAES,SAAT8I,GACAgN,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GAIRw8C,eACI,OAAOzgB,EAGP7I,WACA,MAAMlzB,EAAOC,KACb,OAAID,EAAK49B,aAAa,QACX59B,EAAK69B,aAAa,QAEtB99B,EAAAA,EAAAA,KAAAA,SAGPmzB,SAAKpwB,GACL,MAAM9C,EAAOC,KACT6C,EACA9C,EAAKqtB,aAAa,OAAQvqB,GAG1B9C,EAAKk+B,gBAAgB,QAWzBosD,eACA,OAAOrqF,KAAK29B,aAAa,YAGzB0sD,aAASxnF,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GASnCynF,eACA,OAAOtqF,KAAK29B,aAAa,YAGzB2sD,aAASznF,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAGnCknF,mBACA,OAAO/pF,KAAK29B,aAAa,iBAGzBosD,iBAAalnF,GACb7C,KAAKu+B,gBAAgB,kBAAmB17B,GAGxC0nF,uBACA,OAAOvqF,KAAK29B,aAAa,qBAGzB4sD,qBAAiB1nF,GACjB7C,KAAKu+B,gBAAgB,sBAAuB17B,GAGhD+H,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,IAAIwqF,EACJ,OAAQzqF,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACD0qF,EAAazqF,EAAK4hC,gBAAgB,YAClC5hC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI0oF,IACvB,MACJ,KAAK3oF,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD0qF,EAAazqF,EAAK4hC,gBAAgB,eAClC5hC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI2oF,IACvB,MACJ,KAAK5oF,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACD0qF,EAAazqF,EAAK4hC,gBAAgB,aAClC5hC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAIyoF,IACvB,MACJ,KAAK1oF,EAAAA,EAAAA,KAAAA,UACD0qF,EAAazqF,EAAK4hC,gBAAgB,iBAClC5hC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI4oF,IACvB,MACJ,QACI6B,EAAazqF,EAAK4hC,gBAAgB,QAG1C,MAAM8oD,EAAe,CACjBC,QAASF,EACTH,SAAUtqF,EAAKsqF,UAEnB,OAAOtqF,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW0tC,GAAc,WAC3D1qF,EAAKogB,OAAQ,EACbpgB,EAAKw4B,SAAW,KAChBv1B,EAAAjD,EAAI+oF,GAAgB,GAEhB7kF,EAAAA,EAAAA,WAAgBlE,EAAKJ,QAAQ44B,YAC7Bx4B,EAAKw4B,SAAWx4B,EAAKJ,QAAQ44B,UAGjCx4B,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,KAAqBxD,GAErCA,EAAK4qF,YAAYjsF,MAAKksF,IAClBA,EAAOnwD,UAAU16B,EAAKqG,QACtBwkF,EAAOh/E,iBAAiB9L,EAAAA,EAAAA,MAAAA,aAA0Bf,IAC9CgB,EAAKE,KAAKyF,WACV,MAAMmlF,EAAY,GAClBA,EAAU9rF,EAAEkhD,OAAOzrB,UAAYz1B,EAAEkhD,OAAOp9C,MACxC9C,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B+qF,SAI/C7nF,EAAAjD,EAAIgpF,EAAWhpF,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,aACxD9iF,EAAAhD,EAAIgpF,GAASn9E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC9CC,EAAK+qF,QACN,CAAE98E,SAAS,IAEdhL,EAAAjD,EAAIipF,EAAcjpF,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,gBAC3D9iF,EAAAhD,EAAIipF,GAAYp9E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACjDC,EAAK+gC,WACN,CAAE9yB,SAAS,IAEdhL,EAAAjD,EAAIkpF,EAAWlpF,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,aACxD9iF,EAAAhD,EAAIkpF,GAASr9E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC9CC,EAAK+pE,QACN,CAAE97D,SAAS,IAEdhL,EAAAjD,EAAImpF,EAAYnpF,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,cACzD9iF,EAAAhD,EAAImpF,GAAUt9E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC/CC,EAAKgrF,SACN,CAAE/8E,SAAS,IAEdhL,EAAAjD,EAAIopF,EAAYppF,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,cACzD9iF,EAAAhD,EAAIopF,GAAUv9E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC/CC,EAAKirF,SACN,CAAEh9E,SAAS,IAEV/J,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKZ3tB,eAAetM,GACX,MAAMyB,EAAOC,KACbD,EAAKqG,OAASnC,EAAAA,EAAAA,QAAY,EAAM,GAAI3F,EAAIqB,QAAQyG,OAAQrG,EAAKJ,QAAQyG,cAC/DxG,MAAMimC,SAASvnC,GAoDrB,aAlDqByB,EAAK4qF,aACnBlwD,UAAU16B,EAAKqG,QAEtBrG,EAAKzB,IACA+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,WACrBC,EAAKzB,IAAImrC,OAAS3pC,EAAAA,EAAAA,KAAAA,UAClBC,EAAK+pE,SAMZz7D,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACzCgB,EAAKuoD,QAAQ/gD,SAAQ,SAAU8tB,EAAO5tB,EAAKH,GACvCA,EAAIG,GAAOxD,EAAAA,EAAAA,UAAeoxB,EAAOt2B,EAAEw7B,OAAQx7B,EAAEw2D,cAIzDvyD,EAAAjD,EAAI8oF,EAAiB,IAAIjqF,SAAQ,SAAUC,EAASk1B,GAChDz1B,EAAIqb,QAAO,WACH5Z,EAAKJ,QAAQ6E,OACbzE,EAAKke,SAASle,EAAKJ,QAAQ6E,OAC3B3F,EAAQkB,EAAKyE,QAGTzB,EAAChD,EAAI6oF,GAILtqF,EAAI8rD,SAAS,CACThrD,GAAIW,EAAK4mC,SACTp8B,MAAO,cACP8kB,SAAS,EACT+1D,MAAOrlF,EACPoK,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsG,OAAQ,CACJivB,MAAOl2B,OAAOmD,OAAO,GAAIvC,EAAKqG,OAAOivB,OACrCE,KAAMp2B,OAAOmD,OAAO,GAAIvC,EAAKqG,OAAOmvB,MACpCllB,QAASlR,OAAOmD,OAAO,GAAIvC,EAAKqG,OAAOiK,YAE5C3R,MAAK,SAAU8F,GACdlG,EAAI20D,cAAczuD,GAClBzE,EAAKke,SAASzZ,GACd3F,EAAQkB,EAAKyE,UAjBjB3F,EAAQ,aAwBjBkB,EAGX+qF,MACI,MAAM/qF,EAAOC,KAMb,OALID,EAAKyE,OAASzE,EAAKgqF,cACnBhqF,EAAKyE,MAAM2zB,gBAEfp1B,EAAAhD,EAAIipF,GAAY5rD,UAAW,EAC3Br9B,EAAKkrF,QAAQlrF,EAAKkzB,MAAM,GACjBlzB,EAGXgrF,OACI,MAAMhrF,EAAOC,KACb,IAAI4E,EAAS7E,EAAKE,KAAK8qF,OAWvB,OAVInmF,IACA7E,EAAK8pF,eACLh0E,EAAA9V,EAAIypF,EAAAQ,GAAAtpF,KAAJX,GAEIA,EAAK8pF,cAAgB,GACrB9pF,EAAK+pF,cAET/pF,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAGV8E,EAGXomF,OACI,MAAMjrF,EAAOC,KACb,IAAI4E,EAAS5E,KAAKC,KAAK+qF,OAMvB,OALIpmF,IACA7E,EAAK8pF,eACLh0E,EAAA9V,EAAIypF,EAAAQ,GAAAtpF,KAAJX,GACAA,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAEV8E,EAGXk8B,SACI,MAAM/gC,EAAOC,KAMb,OALAgD,EAAAjD,EAAI+oF,GAAgB,GACpB/oF,EAAK+pF,cACLj0E,EAAA9V,EAAI0pF,EAAAQ,GAAAvpF,KAAJX,GACAgD,EAAAhD,EAAIipF,GAAY5rD,UAAW,EAC3Br9B,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAEiN,KAAMhN,IACvCA,EAGX89C,WACI,MAAM99C,EAAOC,KAOb,OANA+C,EAAAhD,EAAIgpF,GAAShrD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC3BiD,EAAAhD,EAAIipF,GAAY5rD,UAAW,EAC3Bx9B,MAAMi+C,SAASn9C,KAAKX,GACpBA,EAAKE,KAAK49C,SAAS99C,EAAKkzB,MACxBlzB,EAAKg+B,UAAUC,OAAMj7B,EAAChD,EAAIyoF,GAAAzlF,EAAchD,EAAI0oF,GAAA1lF,EAAahD,EAAI2oF,GAAA3lF,EAAgBhD,EAAI4oF,IACjF5oF,EAAK4qF,YAAYjsF,MAAKksF,GAAUA,EAAO33D,KAAOlzB,EAAKkzB,OAC3ClzB,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,MACDC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAIyoF,IACvB,MACJ,KAAK1oF,EAAAA,EAAAA,KAAAA,SACDC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI0oF,IACvB,MACJ,KAAK3oF,EAAAA,EAAAA,KAAAA,QACDC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI2oF,IACvB,MACJ,KAAK5oF,EAAAA,EAAAA,KAAAA,UACDC,EAAKg+B,UAAUnjB,IAAG7X,EAAChD,EAAI4oF,IAK/B,OAAO5oF,EAGXi+C,aACI,MAAMj+C,EAAOC,KAcb,OAbA+C,EAAIhD,EAAIgpF,IACJhmF,EAAAhD,EAAIgpF,GAAShrD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAElCiD,EAAIhD,EAAIipF,KACJjmF,EAAAhD,EAAIipF,GAAY5rD,UAAW,GAE/Bx9B,MAAMo+C,WAAWt9C,KAAKX,GAAMgD,EAAChD,EAAI+oF,IAC7B/oF,EAAKE,MACLF,EAAKE,KAAK+9C,aAEdj+C,EAAK+pF,cAEL9mF,EAAAjD,EAAI+oF,GAAgB,GACb/oF,EAGX8gD,QACI,MAAM9gD,EAAOC,KAKb,OAJID,EAAKyE,OACLzE,EAAKyE,MAAM0mF,eAEfnrF,EAAK+pF,cACE/pF,EAGXk/C,cACI,OAAO,EAGX6qB,MACI,MAAM/pE,EAAOC,KAGb,OAFAD,EAAKE,KAAK6pE,MACV/pE,EAAK+pF,cACE/pF,EAGXkrF,QAAQh4D,EAAM4qB,GACV,MAAM99C,EAAOC,KAcb,OAZAD,EAAKkzB,KAAOA,EACR4qB,GAAY5qB,EAIZlzB,EAAK89C,WAGD99C,EAAKq8C,UACLr8C,EAAKi+C,aAGNj+C,EAGX2F,SAASC,GACL,MAAM5F,EAAOC,KAGb,OAFA2F,EAAQ1B,EAAAA,EAAAA,OAAWlB,EAAChD,EAAIuoF,GAAS3iF,GAEzB5F,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACL,KAAKA,EAAAA,EAAAA,KAAAA,UACDC,EAAKqG,OAAOmvB,KAAO5vB,EACnB,MACJ,KAAK7F,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACDC,EAAKqG,OAAOiK,QAAU1K,EACtB,MACJ,KAAK7F,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACDC,EAAKqG,OAAOivB,MAAQ1vB,EACpB,MACJ,QACIA,EAAQ,GAGhB5F,EAAK4qF,YAAYjsF,MAAKksF,IAClBA,EAAOnwD,UAAUr0B,QACjBrG,EAAKE,KAAKyF,cAIlBS,WAAW,IAAAglF,EACP,OAAW,QAAXA,EAAApoF,EAAO/C,KAAIuoF,UAAA,IAAA4C,OAAA,EAAJA,EAAchlF,WAGzBilF,aAGI,OAFaprF,KACR2qF,YAAYjsF,MAAKksF,GAAUA,EAAOQ,eAD1BprF,KAKjBqrF,eAAe9Z,GAGX,OAFavxE,KACR4qF,OAAOS,eAAe9Z,GADdvxE,KAKjBsrF,aAAa/Z,GAGT,OAFavxE,KACR4qF,OAAOU,aAAa/Z,GADZvxE,KAKjBurF,eAAeC,GAGX,OAFaxrF,KACR4qF,OAAOa,oBAAoBD,GADnBxrF,KAKjB0rF,eAAep5D,GAGX,OAFatyB,KACR4qF,OAAOc,eAAep5D,GADdtyB,KAYjB2rF,iBAAiB5mF,GACb,MAAMhF,EAAOC,KAEb,OADA6V,EAAA9V,EAAIwpF,EAAAqC,GAAAlrF,KAAJX,EAAkBA,EAAKiY,cAAe,IAAGjY,EAAKu8C,eAAgBv3C,GACvDhF,EAGX4f,WACI,MAAM5f,EAAOC,KACb,OAAID,EAAKyE,MACE5F,QAAQC,QAAQkB,EAAKyE,OAEhCzB,EAAO/C,KAAI6oF,GAGf5qE,SAASzZ,GACL,MAAMzE,EAAOC,KA+Bb,OA9BID,EAAKzB,MACDyB,EAAKyE,OACLzB,EAAAhD,EAAIqpF,GAAiBtqE,IAAI/e,EAAKyE,MAAOrF,OAAOmD,OAAO,GAAES,EAAEhD,EAAIuoF,KAG3DvoF,EAAKyE,MADY,iBAAVA,EACMzE,EAAKzB,IAAIqhB,SAASnb,GAGlBA,EAGjBzE,EAAK4qF,YAAYjsF,MAAK,SAAUksF,GAC5BA,EAAO3sE,SAASzZ,OAcfA,GAASzE,EAAKq8C,UACfr8C,EAAKi+C,cAGNj+C,EAGX8rF,WAAWpoF,GAEP,OADAzD,KAAK2qF,YAAYjsF,MAAKksF,GAAUA,EAAOiB,WAAWpoF,KAC3C1D,KAGX+pF,cACI,MAAM/pF,EAAOC,KAIb,OAHAD,EAAKuoD,QAAQjlD,OAAS,EACtBtD,EAAK8pF,aAAe,EACpBh0E,EAAA9V,EAAIypF,EAAAQ,GAAAtpF,KAAJX,GACOA,EAGX6K,kBACI,MAAM7K,EAAOC,KAGb,aAFMD,EAAKsL,gBACXrI,EAAAjD,EAAIwoF,EAAWxoF,EAAKiY,cAAc,yBAClCjV,EAAOhD,EAAIwoF,GAGf7tD,cACI,MAAM36B,EAAOC,KACb,OAAID,EAAKy8C,cAAgBz8C,EAAKyE,MACnB,CACHpF,GAAIW,EAAKX,GACToF,MAAOzE,EAAKyE,MAAMk2B,eAGnB,KAGXykB,YAAYtqC,GAKR,OAJa7U,KACR2f,WAAWjhB,MAAK,SAAU8F,GAC3BA,EAAM26C,YAAYtqC,EAAMrQ,UAFfxE,MA4BpB,eAAAoqF,IAnfO,MAAMrqF,EAAOC,KACPizB,EAAOlzB,EAAKkzB,WACZlzB,EAAKsL,uBACJtL,EAAK4qF,aAAa13D,KAAOA,EACnC,eAAAk3D,IAWG,MAAMpqF,EAAOC,WACPD,EAAKsL,gBACXtL,EAAKiY,cAAe,IAAGjY,EAAKu8C,eAAeve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBC,EAAKsqF,UAC5F,SAAAuB,EA6WYE,EAAO/mF,GAChB,GAAI+mF,EAAO,CACP,MAAMC,OAA0B3nF,IAAZW,GAAyBA,OAAUX,EACvD0nF,EAAM/tD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBisF,IAErD,eAAA/B,IA2FG,MAAMjqF,EAAOC,WACPD,EAAKsL,gBACX,MAAM4nB,EAAOlzB,EAAKkzB,KAClBlwB,EAAAhD,EAAIkpF,GAAS7rD,SACa,IAAtBr9B,EAAK8pF,cACL52D,IAASnzB,EAAAA,EAAAA,KAAAA,SAAuBC,EAAK8pF,aAAe,GACpD52D,IAASnzB,EAAAA,EAAAA,KAAAA,UAAwBC,EAAK8pF,aAAe,GACrD52D,IAASnzB,EAAAA,EAAAA,KAAAA,UACbiD,EAAAhD,EAAIopF,GAAU/rD,SAAWr9B,EAAKuoD,QAAQjlD,SAAWtD,EAAK8pF,aACtD9mF,EAAAhD,EAAImpF,GAAU9rD,SAAiC,IAAtBr9B,EAAK8pF,cAAsB9pF,EAAKkzB,OAASnzB,EAAAA,EAAAA,KAAAA,UACrE,eAAAmqF,IAIG,MAAMlqF,EAAOC,WACPD,EAAKsL,gBACXtL,EAAK+pF,cACL/mF,EAAAhD,EAAIkpF,GAAS7rD,UAAW,EACxBr6B,EAAAhD,EAAIipF,GAAY5rD,UAAW,EAC9Bv9B,EA/mBC6pF,EAAI,gBAmBiB,CACnBl8C,SAAU,WACVw+C,QAAS,UACTC,YAAa,gBA4lBrBjtD,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAagtD,GACtEnmF,EAAAA,EAAAA,QAAAA,KAAkBmmF,EAClB,W,uKC7lBAnmF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM2oF,EAAoB,WACtB,IAAInsF,EAAOC,KAEXmsF,EAAAA,QAAAA,MAAcpsF,EAAMid,WAEpBjd,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WAC1C9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzBv8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnC,MAAM8P,EAAKrsF,EAAK8lF,eAAiB,IAAM9lF,EAAKu8C,MAC5Cv8C,EAAKssF,WAAa,CACdC,mBAAoBF,EAAK,oCACzBG,kBAAoB,2BAA0BxsF,EAAKX,aAGvDW,EAAKysF,wBAAyB,EAE9BzsF,EAAKsL,gBAAgB3M,MAAK,WACtBqB,EAAK0sF,cAAgB1sF,EAAK2M,IAAIsL,cAAc,8BAC5CjY,EAAK2sF,cAAgB3sF,EAAK2M,IAAIsL,cAAc,8BAC5CjY,EAAK4sF,eAAiB5sF,EAAK2M,IAAIsL,cAAc,8BAC7CjY,EAAK6sF,eAAiB7sF,EAAK2M,IAAIsL,cAAc,8BAC7CjY,EAAK8sF,eAAiB9sF,EAAK2M,IAAIsL,cAAc,gCAC7CjY,EAAK+sF,gBAAkB/sF,EAAK2M,IAAIsL,cAAc,oCAKtDzU,EAAAA,EAAAA,QAAW2oF,EAAmBC,EAAAA,SAE9B,WACI,IAAI1vC,EAAWyvC,EAAkB1rF,UAEjCi8C,EAASH,MAAQ,aAEjBx8C,EAAAA,EAAAA,MAAAA,kBAAiCA,EAAAA,EAAAA,MAAAA,mBAAkC,uBACnEA,EAAAA,EAAAA,MAAAA,eAA8BA,EAAAA,EAAAA,MAAAA,gBAA+B,oBAE7D28C,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,6BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KAiCb,OAhCgBD,EAAK+8C,qBAAqBqvC,EAAAA,QAAAA,UAAAA,OAAAA,KAA8BpsF,GAAM,WAC1EA,EAAKgtF,wBAA0BhtF,EAAK2M,IAAIsL,cAAc,mCACtDjY,EAAKgtF,wBAAwBxuC,iBAAmBx+C,EAChDA,EAAKitF,UAAYjtF,EAAK2M,IAAIsL,cAAc,6CACxCjY,EAAKitF,UAAUphF,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC1DpK,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,sBAAsB,WAClD5hC,EAAK8gD,QACLosC,EAAW78E,MAAMrQ,QAEtB,CAAEiO,SAAS,IACdjO,EAAKmtF,aAAentF,EAAK2M,IAAIsL,cAAc,4CAC3CjY,EAAKmtF,aAAathF,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC7D5N,EAAKotF,6BACN,CAAEn/E,SAAS,IAEMjO,EAAK2M,IAAIsL,cAAc,8CAC/BpM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACvD,MAAMu8C,GAAcv8C,EAAE0O,OAAOswB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAChDC,EAAKqtF,aAAa7lF,SAAQ,SAAU8lF,GAChCA,EAAG7oF,MAAMM,cAAcw2C,GACnB+xC,EAAGjxC,UACHixC,EAAGptF,KAAK6E,cAAcw2C,MAE9Bv8C,EAAE0O,OAAOlD,MAAQxK,EAAK4hC,gBAAgB2Z,EAAa,aAAa,cAChEv8C,EAAE0O,OAAOswB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,UAC3B,CAAEkO,SAAS,IAEVzK,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,SAOZkkB,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,WACPmsF,EAAAA,QAAAA,UAAAA,SAAAA,KAAgCpsF,EAAMzB,GAC5C,MAAMgvF,EAAWvtF,EAAK4mC,SAChB4mD,EAAqBxtF,EAAK4mC,SAE1B6mD,QAAgB5uF,QAAQwiB,IAAI,CAACrhB,EAAK0tF,aAAc1tF,EAAKsL,gBAAiBtL,EAAKw/C,qBAC3E/6C,EAAQgpF,EAAQ,GACtBztF,EAAK2tF,yBAA2BF,EAAQ,GACpChpF,IACAA,EAAM+F,MAAQxK,EAAK4hC,gBAAgB,WAGvC,MAAMgsD,QAAe5tF,EAAK6tF,mBAC1B7tF,EAAK4tF,OAASA,EACdA,EAAOpvC,iBAAmBx+C,EAC1B4tF,EAAOvuF,GAAKkuF,EACZK,EAAOhhD,SAAW5sC,EAAK4sC,SACvBghD,EAAO1vE,SAASzZ,GAChBmpF,EACKt/E,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA6B,SAAUf,GACvC,MAAM0E,EAAU1E,EAAE+P,SAAS/P,EAAE+P,SAASzL,OAAS,GAC/CtD,EAAK8tF,mBAAmBpqF,GACxB1D,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClCA,EAAIjhD,eAAiB/N,EAAE+P,SAASqM,MAAK,SAAU1X,GAC/C,OAAOsqD,EAAIjhD,aAAa3H,iBAAmB1B,MAE3CsqD,EAAIjhD,aAAaihF,kBAAkB,YAI9C1/E,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GACzC5N,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GACtCA,EAAIigC,wBACAjgC,EAAIjhD,cACJihD,EAAIjhD,aAAaE,cAI5BqB,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtC,GAAIA,EAAEyF,QAAUzE,EAAKyE,MAAO,CACxB,MAAMypF,EAAc,SAAUxqF,GAC1B,MAAMyqF,EAAcnuF,EAAKouF,0BAA0B1qF,GACnD1D,EAAKquF,oBAAoBF,GACzBnuF,EAAKsuF,0BAA0B5qF,IAEnCwqF,EAAYlvF,EAAE0E,SAGV1E,EAAE0E,mBAAmBiM,EAAAA,GACrB3P,EAAKw/C,mBAAmB7gD,MAAK,SAAU6hC,GAC/BA,GACAA,EACK14B,YAAY,CACTiH,SAAU,CAAC/P,EAAE0E,SACbyD,IAAKnH,EAAKzB,IAAI8I,WAEjB1I,MACG,SAAUoQ,GACNm/E,EAAYn/E,EAAS,OAEzB,SAAU/P,GACN2I,QAAQgS,KAAK3a,EAAE4e,eAOxB5d,EAAKzB,IAAI2G,mBAAmB,oBACpCsC,SAAQ,SAAU6wB,GACjBA,EAAGjzB,iBAAmBpG,EAAE0E,SAAW20B,EAAG/yB,aACtC+yB,EAAG9yB,cAMvBhH,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GAC1C,MAAM+L,EAAU/L,EAAE+L,QACdA,IAAY/K,EAAK4tF,QAAU7iF,IAAY/K,EAAKuuF,iBAC5CvuF,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GACtCA,EAAIigC,wBACAjgC,EAAIjhD,eACAhC,IAAY/K,EAAK4tF,QACjB5/B,EAAIjhD,aAAaihF,kBAAkB,MAEvChgC,EAAIjhD,aAAaE,eAKhCqB,GAAGvO,EAAAA,EAAAA,MAAAA,MAAqB,IAAMA,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAE7D,MAAM0E,EAAU1E,EAAE+L,QAAQ3F,eACtB1B,aAAmBuN,EAAAA,GAAYjR,EAAKyE,MAAMsK,SAAS9F,QAAQvF,IAAY,GACnE1D,EAAK2tF,yBACL3uF,EAAE+L,QAAQxF,OACVvF,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClCA,EAAIjhD,eACJihD,EAAIjhD,aAAaihF,kBAAkBtqF,GAC/BsqD,EAAIjhD,aAAayhF,eACjBxgC,EAAIjhD,aAAa0hF,YAGzBzgC,EAAI0gC,wBAAwBhrF,UAK3C4K,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACrCgB,EAAK2uF,qBACL3uF,EAAK2uF,mBAAmBhvF,OAAS6D,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAK2uF,mBAAmBhvF,OAAQX,EAAEw7B,OAAQx7B,EAAEw2D,mBAK7Ex1D,EAAK4uF,sBAE9BtgF,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,WAExBC,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClCA,EAAIjhD,cAAgBihD,EAAIjhD,aAAa3H,gBACrC4oD,EAAIjhD,aAAaihF,kBAAkB,MAEvChuF,EAAK+pF,oBAIZz7E,GAAGvO,EAAAA,EAAAA,MAAAA,SAAwB,IAAMA,EAAAA,EAAAA,MAAAA,UAAuB,WACrD,MAAMwuF,EAAkBtuF,KACxBD,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClChuD,EAAK2tF,yBACDY,EAAgBzE,aAChB97B,EAAI0gC,wBAAwBH,EAAgBhmC,QAAQ39C,MAAM,EAAG2jF,EAAgBzE,eAG7E97B,EAAI6gC,4BAIhB3B,EAAW78E,MAAMrQ,MAEpBsO,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAChCgB,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClCA,EAAIjhD,eACJihD,EAAIjhD,aAAa3H,eAAiBpG,EAAE0E,eAI/C4K,GAAGvO,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC9B,MACMW,EADkBM,KACOsoD,QAAQ39C,MAAM,EADrB3K,KACwC6pF,cAC1DgF,EAAYnvF,EAAOA,EAAO2D,OAAS,GACrCwrF,EAAU,KAAO9vF,EAAEs2B,MAAM,IAAMw5D,EAAU,KAAO9vF,EAAEs2B,MAAM,IACxD31B,EAAO0I,KAAKrJ,EAAEs2B,OAGlBt1B,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClChuD,EAAK2tF,yBACD5wB,UAAUgyB,OACV/gC,EAAI0gC,wBAAwB/uF,GAG5BquD,EAAI6gC,4BAIc,IAA1B7vF,EAAE0O,OAAOo8E,cACTkF,EAAU3+E,MAAMrQ,MAEvBsO,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCgB,EAAKivF,cAAcjwF,MACpBsP,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,WAC3BmtF,EAAW78E,MAAMrQ,aAGQA,EAAKkvF,yBAEjC5gF,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,WACxBC,EAAK+pF,iBAGRz7E,GAAGvO,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACA,IAA1BA,EAAE0O,OAAOo8E,cACTkF,EAAU3+E,MAAMrQ,MAYvBsO,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCgB,EAAKivF,cAAcjwF,MAEtBsP,GAAGvO,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,UAAuB,WACvDmtF,EAAW78E,MAAMrQ,MAGzB,MAAMmvF,QAAyBnvF,EAAKovF,sBAyFpC,OAvFAD,EAAiB3wC,iBAAmBx+C,EACpCmvF,EAAiB9vF,GAAKmuF,EACtB2B,EAAiBviD,SAAW5sC,EAAK4sC,SACjCuiD,EAAiBjxE,SAASle,EAAKyE,OAC/BzE,EAAKqtF,aAAahlF,KAAK8mF,GACvBnvF,EAAKmvF,iBAAmBA,EAExBnvF,EAAK+pF,cAELoF,EACK7gF,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAChC,MAAMqwF,EAAgB,SAAU50D,GAC5Bz6B,EAAKquF,oBAAoB,CAAEhkF,YAAaowB,EAAKl6B,SAAUq7C,MAAOr9C,EAAI2B,KAAK66B,SAAWx8B,EAAI0I,SAAW,UAAY,MAC7GjH,EAAKsuF,0BAA0B7zD,IAEnC40D,EAAcrwF,EAAE0E,SAChB1D,EAAKw/C,mBAAmB7gD,MAAK,SAAU6hC,GAC/BA,GACAA,EAAK14B,YAAY,CACbiH,SAAU,CAAC/P,EAAE0E,SACbyD,IAAKnH,EAAKzB,IAAI8I,WACf1I,MAAK,SAAUoQ,GACdsgF,EAActgF,EAAS,OACxB,SAAU/P,GACT2I,QAAQC,IAAI5I,EAAE4e,eAI1BoxE,EAAU3+E,MAAMrQ,MAEnBsO,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAU6N,GASnCs5C,YAAW,WACPlnD,EAAK+gC,WACN,KACHmsD,EAAW78E,MAAMrQ,MAEpBsO,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCgB,EAAKivF,cAAcjwF,MAG3BmwF,EAAiB1yC,cAAe,EAEhCz8C,EAAKsvF,yBAA2B/wF,EAAI6M,WAAW,YAAapL,EAAKJ,QAAQ6/C,kBAEzEz/C,EAAKkrF,QAAQlrF,EAAKJ,QAAQszB,MAE1B30B,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnC,MAAMyF,EAAQzF,EAAEyF,MACVf,EAAU1E,EAAE0E,QACde,IAAUzE,EAAKyE,QACfzE,EAAKsuF,0BAA0B5qF,GAE/B1D,EAAK6tF,mBAAmBlvF,MAAK,SAAUivF,GACnCA,EAAO2B,iBAAiB7rF,EAAQ0C,WAAWomC,UAE/CxsC,EAAKitF,UAAU5vD,UAAW,EAC1Br9B,EAAKmtF,aAAa9vD,UAAW,MAGpC/uB,GAAGvO,EAAAA,EAAAA,MAAAA,cAA6B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAC3DA,EAAEyF,QACFzE,EAAKyE,OACoB,IAA/BzE,EAAKyE,MAAMsK,SAASzL,SACpBtD,EAAKitF,UAAU5vD,UAAW,EAC1Br9B,EAAKmtF,aAAa9vD,UAAW,EAC7Br9B,EAAK+pF,cACLmD,EAAW78E,MAAMrQ,OAI5BsO,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GAC1CgB,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GAClCA,IAAQhvD,EAAE+L,SACVijD,EAAIggC,kBAAkB,YAK/BhuF,GAGX08C,EAAS8yC,YAAc,SAAUt8D,GAC7B,MAAMlzB,EAAOC,KAOb,OANIizB,IAASnzB,EAAAA,EAAAA,KAAAA,QACTC,EAAKyvF,YAAczvF,EAAK2M,IAAIsL,cAAc,oBAE1CjY,EAAK4tF,QACL5tF,EAAK4tF,OAAOjhF,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAE9BqsF,EAAAA,QAAAA,UAAAA,YAAAA,KAAmCpsF,EAAMkzB,IAGpDwpB,EAASoxC,mBAAqB,SAAUpqF,GACpC,MAAM1D,EAAOC,KACb,GAAIyD,EAEA,OADA1D,EAAKquF,oBAAoBruF,EAAKouF,0BAA0B1qF,KAChD,GACJ,KAAKA,aAAmBpB,EAAAA,EACxB,KAAKoB,aAAmBwM,EAAAA,EACpBlQ,EAAKwvF,YAAYzvF,EAAAA,EAAAA,KAAAA,SACjBC,EAAK0vF,mBAAmB5D,WAAWpoF,GACnC,MACJ,KAAKA,aAAmBuN,EAAAA,EACxB,KAAKvN,aAAmBmN,EAAAA,EACpB7Q,EAAKwvF,YAAYzvF,EAAAA,EAAAA,KAAAA,UACjBC,EAAKuuF,gBAAgBzC,WAAWpoF,GAC5B1D,EAAK2tF,wBACL3tF,EAAK+tF,sBAAsBpvF,MAAKqvD,GAAOA,EAAI0gC,wBAAwBhrF,KAEvE,MACJ,KAAKA,aAAmBiM,EAAAA,EACxB,KAAKjM,aAAmBoM,EAAAA,EACpB9P,EAAKwvF,YAAYzvF,EAAAA,EAAAA,KAAAA,OACjBC,EAAKmvF,iBAAiBrD,WAAWpoF,KAQjDg5C,EAASwuC,QAAU,SAAUh4D,GACzB,MAAMlzB,EAAOC,KACTizB,IAASnzB,EAAAA,EAAAA,KAAAA,MACTC,EAAKovF,sBAAsBzwF,MAAK,SAAUqvD,GACtCA,EAAIlQ,WACJsuC,EAAAA,QAAAA,UAAAA,QAAAA,KAA+BpsF,EAAMkzB,GACrCg6D,EAAW78E,MAAMrQ,OAIrBosF,EAAAA,QAAAA,UAAAA,QAAAA,KAA+BpsF,EAAMkzB,GACrCg6D,EAAW78E,MAAMrQ,KAKzB08C,EAASizC,eAAiB,SAAUC,GAChC,MAAM5vF,EAAOC,KACRc,MAAMC,QAAQ4uF,KACfA,EAAQ,IAERA,EAAM3mF,QAAQjJ,EAAKkzB,MAAQ,GAC3BlzB,EAAKkrF,QAAQ,MAEjB,MAAMlsC,EAAW4wC,EAAMrxF,KAAI6mD,GAAM,UAASA,OAAM76C,QAAU,UAC1DvK,EAAK2M,IAAIhB,iBAAiB3L,EAAKssF,WAAWE,mBAAmBhlF,SAAQ,SAAUqoF,GAC3EA,EAAGxyD,UAAYwyD,EAAGrmE,QAAQw1B,OAIlCtC,EAASx+B,SAAWrT,eAAgBpG,GAAO,IAAAqB,EACvC,MAAM9F,EAAOC,WACPmsF,EAAAA,QAAAA,UAAAA,SAAAA,KAAgCpsF,EAAMyE,GAC5C,UAAW,MAAMsG,IAAW,CAAC/K,EAAKovF,sBAAuBpvF,EAAK6tF,oBAC1D9iF,EAAQmT,SAASle,EAAKyE,OAEZ,QAAdqB,EAAI9F,EAAKyE,aAAK,IAAAqB,GAAVA,EAAYiJ,SAASzL,QACrBtD,EAAK8tF,mBAAmB9tF,EAAKyE,MAAMsK,SAAS,KAIpD2tC,EAAS4xC,0BAA4B,SAAU5qF,GAC3C,MAAM1D,EAAOC,KACb,OAAQD,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,MACDC,EAAKgtF,wBAAwBsB,0BAA0B5qF,GACvD,MACJ,KAAK3D,EAAAA,EAAAA,KAAAA,SACDC,EAAK8vF,uBAAuBxB,0BAA0B5qF,GACtD,MACJ,KAAK3D,EAAAA,EAAAA,KAAAA,QACDC,EAAK+vF,0BAA0BzB,0BAA0B5qF,GAKjE,OAAO1D,GAGX08C,EAAS0xC,0BAA4B,SAAU1qF,GAC3C,MAAM1D,EAAOC,KACP4E,EAAS,CACX+2C,MAAO57C,EAAKzB,IAAI2B,KAAK66B,SAAW/6B,EAAKzB,IAAI0I,SAAW,SAAW,KAE7D+oF,EAAiB,CACnB7oF,IAAKnH,EAAKzB,IAAIqB,QAAQipC,QAE1B,QAAQ,GACJ,KAAKnlC,aAAmBpB,EAAAA,EACxB,KAAKoB,aAAmBwM,EAAAA,EACpBrL,EAAOorF,KAAOvsF,EAAQkN,QAAQo/E,GAC9BnrF,EAAOqrF,UAAYxsF,EAAQiN,UAAUq/E,GACrC,MACJ,KAAKtsF,aAAmBuN,EAAAA,EACxB,KAAKvN,aAAmBmN,EAAAA,EACpBhM,EAAOvB,OAASI,EAAQiN,UAAUq/E,GAClChwF,EAAK+tF,sBAAsBpvF,MAAKqvD,IACxBhuD,EAAK2tF,wBACL3/B,EAAI0gC,wBAAwBhrF,MAGpC,MACJ,KAAKA,aAAmBiM,EAAAA,EACpB9K,EAAOwF,YAAc3G,EAAQnD,SAKrC,OAAOsE,GAGX63C,EAASyzC,2BAA6BtlF,iBAGlC,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,oCAGlCykC,EAAS2xC,oBAAsB,SAAUzuF,GACrC,MAAMI,EAAOC,KAMb,OALAmsF,EAAAA,QAAAA,UAAAA,oBAAAA,KAA2CpsF,EAAMJ,IACjDA,EAAUA,GAAW,IACTyK,aACRrK,EAAKgtF,wBAAwBoD,mBAAmBxwF,GAE7CI,GAGX08C,EAASqtC,YAAc,WACnB,MAAM/pF,EAAOC,KAGb,OAFAmsF,EAAAA,QAAAA,UAAAA,YAAAA,KAAmCpsF,GACnCA,EAAKmwF,6BAA6BxxF,MAAKqvD,GAAOA,EAAIqiC,qBAC3CrwF,GAGX08C,EAASoE,MAAQ,WACb,MAAM9gD,EAAOC,KAgBb,OAfAD,EAAK+pF,cACL/pF,EAAKyE,MAAM2zB,gBACPp4B,EAAK4tF,OAAOvxC,UACZr8C,EAAK4tF,OAAO3vC,aAEZj+C,EAAKJ,QAAQ6/C,kBACbz/C,EAAK+tF,sBAAsBpvF,MAAK,SAAUqvD,GACtCA,EAAIigC,wBACAjgC,EAAIjhD,cACJihD,EAAIjhD,aAAaE,WAI7BjN,EAAKitF,UAAU5vD,UAAW,EAC1Br9B,EAAKmtF,aAAa9vD,UAAW,EACtBr9B,GAGX08C,EAAS0wC,yBAA2B,SAAUjqB,GAC1C,MAAMnjE,EAAOC,KAgBb,OAdAD,EAAKs/C,oBAAoB3gD,MAAK,SAAUoM,GACpC,IAAInL,EAAU,CACV4K,MAAOxK,EAAK4hC,gBAAgB,kBAC5B42B,SAAUx4D,EAAK4hC,gBAAgB,UAAUvT,cAAc7kB,QAAQ,IAAK,KAAO,IAAMhG,EAAAA,EAAAA,KAAAA,kBAAyB,IAAIsgC,MAAO5gB,YAAY,KAGjIljB,EAAKzB,IAAImhD,WAAa1/C,EAAKJ,QAAQ6/C,oBACnC7/C,EAAUR,OAAOmD,OAAO,GAAI3C,EAAS,CACjC8/C,UAAWtgD,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,qBAGpG10C,EAAQsC,KAAKrN,EAAKyE,MAAMsK,SAAUnP,MAG/BI,GAIX08C,EAASuyC,cAAgB,SAAUjwF,GAC/B,MAAMgB,EAAOC,KACb,IAAIqwF,EACJ,OAAQtxF,EAAE0O,OAAOwlB,MACb,KAAKnzB,EAAAA,EAAAA,KAAAA,QACDuwF,EAAchuF,EAAAA,EACd,MACJ,KAAKvC,EAAAA,EAAAA,KAAAA,SACDuwF,EAAcr/E,EAAAA,EACd,MACJ,KAAKlR,EAAAA,EAAAA,KAAAA,MACDuwF,EAAc3gF,EAAAA,EAKlB2gF,GACAtwF,EAAK4tF,OAAO2C,sBAAsB/oF,SAAQ,SAAU9D,GAChD,GAAIA,aAAmB4sF,EAAa,CAChC,MAAME,EAAe,GACjBxxF,EAAEgtC,cACFwkD,EAA0B,YAAIxxF,EAAEgtC,aAChChtC,EAAE+sC,cACFykD,EAA0B,YAAIxxF,EAAE+sC,aAChC/sC,EAAE6sC,YACF2kD,EAAwB,UAAIxxF,EAAE6sC,WAC9B7sC,EAAE8sC,cACF0kD,EAA0B,YAAIxxF,EAAE8sC,aAChC9sC,EAAEqtC,YACFmkD,EAAwB,UAAIxxF,EAAEqtC,WAC9BrtC,EAAEstC,WACFkkD,EAAuB,SAAIxxF,EAAEstC,UAC7BttC,EAAEmtC,oBACFqkD,EAAgC,kBAAIxxF,EAAEmtC,mBACtCntC,EAAEktC,oBACFskD,EAAgC,kBAAIxxF,EAAEktC,mBAG1CxoC,EAAQiC,SAAS6qF,QAUjC9zC,EAAS+zC,yBAA2B5lF,iBAChC,MAAM7K,EAAOC,KACbD,EAAK2tF,wBAAyB,EAC9B,IAAI+C,GAAe,EACnB,MAAMC,QAAyB3wF,EAAK+tF,sBACpC,GAAI/tF,EAAKuuF,gBAAgBzE,aAAe,EACpC6G,EAAiBjC,wBAAwB1uF,EAAKuuF,gBAAgBhmC,QAAQ39C,MAAM,EAAG5K,EAAKuuF,gBAAgBzE,eACpG4G,GAAe,MAEd,CACD,MAAM3hF,EAAW/O,EAAK4tF,OAAOgD,oBAAoBzrF,QAAO,SAAUs1B,GAC9D,OAAOA,aAAgBxpB,EAAAA,KAE3B,GAAIlC,EAASzL,OAAQ,CACjB,MAAMI,EAAUqL,EAASA,EAASzL,OAAS,GAC3CqtF,EAAiBjC,wBAAwBhrF,EAAQnD,UACjDmwF,GAAe,GAGlBA,GACDC,EAAiB1C,wBAEjB0C,EAAiB5jF,cACjB4jF,EAAiB5jF,aAAa4vC,QAItCD,EAASm0C,2BAA6BhmF,iBACrB5K,KACR0tF,wBAAyB,EAC9B,MAAMgD,QAFO1wF,KAEuB8tF,sBACpC4C,EAAiB1C,wBACb0C,EAAiB5jF,cACjB4jF,EAAiB5jF,aAAaE,SAItCyvC,EAASuxC,sBAAwB,WAC7B,MAAMjuF,EAAOC,KACTD,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAK8wF,oBACtC9wF,EAAK2uF,mBAAqB,CACtB/gE,EAAG,CAAC,GACJ+1D,IAAK,CAAC,GACNhkF,OAAQ,CAAC,EAAG,EAAG,GACf+kE,OAAQ,EACRC,SAAU,GAEd3kE,EAAK8wF,kBAAkBC,UAAU/wF,EAAK2uF,sBAI9CjyC,EAASqxC,oBAAsB,WAC3B,OAAO9tF,KAAKqvF,0BAGhB5yC,EAAS0yC,oBAAsBvkF,iBAG3B,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,IAAMm0E,EAAAA,QAAAA,UAAAA,MAA0B,mBAGlE1vC,EAASmxC,iBAAmBhjF,iBACxB,MAAM7K,EAAOC,KAEb,aADMD,EAAKsL,gBACJtL,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,sBAGrD,MAAMyyC,EAAY,WACd,MACMgC,EADO/wF,KACY0M,IAAIsL,cAAc,8CACvC+4E,IAAaA,EAAY3zD,UAAW,IAGtC6vD,EAAa,WACf,MAAMltF,EAAOC,KACP+wF,EAAchxF,EAAK2M,IAAIsL,cAAc,8CAC3C,GAAI+4E,EAAa,CACb,MAAMC,EAAgBhxF,KAAKotF,aAAanlF,QAAO,SAAU/F,EAAG4Y,GAAK,OAAO5Y,EAAEmG,OAAO,CAACyS,EAAE6E,eAAgB,IACpG/gB,QAAQwiB,IAAI4vE,GAAetyF,MAAK,WAC5BqyF,EAAY3zD,UAAYr9B,EAAKqtF,aAAajyE,MAAK81E,GAAMA,EAAGzsF,MAAMsK,SAASzL,QAAW4tF,EAAG70C,UAAY60C,EAAGpH,aAAe,IACnHkH,EAAYhzD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC1BixF,EAAYxmF,MAAQxK,EAAK4hC,gBAAgB,mBAhqBzD,GAuqBAp+B,EAAAA,EAAAA,QAAAA,kBAA+B2oF,EAC/B,W,w0CC1uBA3oF,EAAAA,EAAAA,KAAUtD,EAAAA,EAEV,MAAM67B,EAAY,cACZY,EAAc,aAAa,IAAAmpD,EAAA,IAAArjF,QAAA6pF,EAAA,IAAA7pF,QAAA0uF,EAAA,IAAA1uF,QAAA2uF,EAAA,IAAA3uF,QAAA4uF,EAAA,IAAA5uF,QAAA6uF,EAAA,IAAA7uF,QAAA8uF,EAAA,IAAA9uF,QAAA8mF,EAAA,IAAA72E,QAAA8+E,EAAA,IAAA9+E,QAAA42E,EAAA,IAAA52E,QAAA++E,EAAA,IAAA/+E,QAAAg/E,EAAA,IAAAh/E,QAAAi/E,EAAA,IAAAj/E,QAAAk/E,EAAA,IAAAl/E,QAAAm/E,EAAA,IAAAn/E,QAAAo/E,EAAA,IAAAp/E,QAAAq/E,EAAA,IAAAr/E,QAEjC,MAAMs/E,UAAapI,EAAAA,QAmBflqF,cACIG,SAASod,WAAWnK,EAAA,KAAAi/E,GAAAj/E,EAAA,KAAAg/E,GAAAh/E,EAAA,KAAA++E,GAAA/+E,EAAA,KAAA8+E,GAAA9+E,EAAA,KAAA6+E,GAAA7+E,EAAA,KAAA4+E,GAAA5+E,EAAA,KAAA2+E,GAAA3+E,EAAA,KAAAw2E,GAAAx2E,EAAA,KAAA0+E,GAAA1+E,EAAA,KAAAy2E,GAAAzpF,EAAA,aAnBhBi8B,GAASn5B,EAAA,KAAAkjF,EAAA,CAAAjjF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA0pF,EAAA,CAAAzpF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAuuF,EAAA,CAAAtuF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAwuF,EAAA,CAAAvuF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAyuF,EAAA,CAAAxuF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA0uF,EAAA,CAAAzuF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA2uF,EAAA,CAAA1uF,UAAA,EAAAC,MAOG,IAAIL,UAapB,MAAMzC,EAAOC,KAEbgD,EAAAjD,EAAI8lF,EAAkB,IAAM9lF,EAAKu8C,OAEjCt5C,EAAAjD,EAAIssF,EAAc,CACd2F,SAAW,IAAGjyF,EAAKu8C,yBAGvBv8C,EAAKkzB,KAAOlzB,EAAKJ,QAAQszB,KACzBlzB,EACK6pF,aAAa,YACbA,aAAa,YACbA,aAAa,QACbA,aAAa,sBAClB7pF,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,KAAqBxD,GACrCA,EAAKyE,MAAQ,KAEbzE,EAAKw4B,SAAWt0B,EAAAA,EAAAA,WAAgB+Y,UAAU,IAAMA,UAAU,GAAMjd,EAAKJ,QAAQ44B,SAAWx4B,EAAKJ,QAAQ44B,SAAW,KAChHx4B,EAAKkyF,uBAAyBlyF,EAAKJ,QAAQuyF,WAAanyF,EAAKJ,QAAQwyF,UAAY,+DACjFpyF,EAAKqyF,eAAiB,GACtBryF,EAAKmvF,iBAAmB,KACxBnvF,EAAKuuF,gBAAkB,KACvBvuF,EAAK0vF,mBAAqB,KAE1B1vF,EAAKsyF,cAAgB,KAGd90D,gCACP,MAAO,CAAC,OAAQ,YAGpBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,aAAT6I,GACAgN,EAAA9V,EAAIupF,EAAAa,GAAAzpF,KAAJX,GAES,SAAT8I,GACAgN,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GAEQ,YAAR8I,GACAgN,EAAA9V,EAAIwxF,EAAAe,GAAA5xF,KAAJX,GAIRw8C,eACI,OAAOzgB,EAGPuuD,eACA,OAAOrqF,KAAK29B,aAAa,YAGzB0sD,aAASxnF,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAenC8pC,eACA,OAAO3sC,KAAK29B,aAAa,YAGzBgP,aAAS9pC,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAWnCowB,WACA,MAAMlzB,EAAOC,KACb,OAAID,EAAK49B,aAAa,QACX59B,EAAK69B,aAAa,QAEtBm0D,EAAK9+D,KAAKs/D,OAGjBt/D,SAAKpwB,GACL7C,KAAKotB,aAAa,OAAQvqB,GAAS,IAGnC2vF,yBAEA,OADaxyF,KACA29B,aAAa,kBAG1B60D,uBAAmB3vF,GACnB7C,KAAKu+B,gBAAgB,kBAAmB17B,GA0E5C+H,eAAetM,GACX,MAAMyB,EAAOC,KA0Hb,aAxHMJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAEhC0E,EAAAjD,EAAIsxF,EAAuBtxF,EAAKiY,cAAc,sBAC9CjV,EAAAhD,EAAIsxF,GAAqB7xC,iBAAmBz/C,EAAKJ,QAAQ6/C,iBAgBrD1+C,MAAMC,QAAQhB,EAAKJ,QAAQgwF,QAAuC,GAA7B5vF,EAAKJ,QAAQgwF,MAAMtsF,SACxDtD,EAAKkzB,KAAOlzB,EAAKJ,QAAQgwF,MAAM,IAGnCrxF,EAAIqb,QAAO,WACP5Z,EAAKke,SAASle,EAAKJ,QAAQ6E,UAG/BlG,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GACtCA,EAAE+L,UAAY/K,EAAK0yF,qBACnB1yF,EAAK2yF,iBAAmB,GACxB3yF,EAAK4yF,qBAAqBj0F,MAAKqiB,GAAKA,EAAEoX,sBAG7C9pB,GAAGvO,EAAAA,EAAAA,MAAAA,YAA2B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACnEgB,EAAK0yF,qBAAuB1yF,EAAK0yF,mBAAmB/lF,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAC3EC,EAAK4yF,qBAAqBj0F,MAAK,SAAUk0F,GACrC,IAAK,IAAI1wF,EAAInC,EAAK2yF,iBAAiBrvF,OAAS,EAAGnB,GAAK,EAAGA,IAAK,CACxD,MAAM2wF,EAAM9yF,EAAK2yF,iBAAiBxwF,IAC9B2wF,EAAIruF,QAAUzF,EAAEyF,OAAUquF,EAAIC,UAAYD,EAAIC,SAAStuF,QAAUzF,EAAEyF,SACnEzE,EAAK2yF,iBAAiB3pF,OAAO7G,EAAG,GAChC0wF,EAAQ96D,cAAc+6D,IAG9B,MAAM3U,EAAKn+E,EAAK0yF,mBAAmBplF,mBAAmB2K,cAAe,qBAAoBjZ,EAAEyF,MAAMpF,QAC7F8+E,GACAA,EAAGlgD,eAKlB3vB,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAClCgB,EAAK0yF,qBAAuB1yF,EAAK0yF,mBAAmB/lF,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAC3EC,EAAK4yF,qBAAqBj0F,MAAK,SAAUk0F,GACrC,IAAK,IAAI1wF,EAAI,EAAGgiB,EAAKnkB,EAAK2yF,iBAAiBrvF,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC5D,MAAM2wF,EAAM9yF,EAAK2yF,iBAAiBxwF,GAClC,GAAI2wF,IAAQ9zF,EAAE0E,SAAWovF,EAAIC,WAAa/zF,EAAE0E,QAAS,CACjD1D,EAAK2yF,iBAAiB3pF,OAAO7G,EAAG,GAChC0wF,EAAQ96D,cAAc+6D,GACtB,MAAME,EAAMhzF,EAAK0yF,mBAAmBplF,mBAAmB2K,cAAe,qBAAoBjZ,EAAEyF,MAAMpF,QAClG,GAAI2zF,EAAK,CACL,MAAMC,EAAMD,EAAI/6E,cAAe,+BAA8BjZ,EAAEyF,MAAMpF,MAAML,EAAE0E,QAAQrE,MACjF4zF,GACAA,EAAIh1D,SAEH+0D,EAAI1+E,SAAShR,QACd0vF,EAAI/0D,SAGZ,cAMnB3vB,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpC,GAAIgB,EAAK0yF,qBAAuB1yF,EAAK0yF,mBAAmB/lF,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAAwB,CACnG,MAAMosD,EAAWnsD,EAAKkzF,+BAA+BrqF,MAAKmY,GAAKA,EAAE3hB,KAAOL,EAAEyF,MAAMpF,KAC5E8sD,GACAnsD,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,gBAAiB4P,GAAU,SAAUxiD,GACnE,MAAMwpF,EAAOnzF,EACR0yF,mBACAplF,mBACA2K,cAAe,IAAGjY,EAAKu8C,gCACvB42C,EAAKl7E,cAAe,qBAAoBjZ,EAAEyF,MAAMpF,SACjD8zF,EAAKrjC,mBAAmB,YAAanmD,UAMxD2E,GAAGvO,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpE,GAAIgB,EAAK0yF,qBAAuB1yF,EAAK0yF,mBAAmB/lF,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAAwB,CACnG,MAAM0E,EAAQzF,EAAEyF,MACVsK,GAAY/P,EAAE0E,QAAU,CAAC1E,EAAE0E,SAAW1E,EAAE+P,UAAU5J,QAAO6J,GAAKhP,EAAKozF,iBAAiBpkF,KACtFD,EAASzL,QACTtD,EAAKqzF,qBAAqB,CACtBh0F,GAAIoF,EAAMpF,GACVmL,MAAO/F,EAAM+F,MACbuE,SAAUA,QAKzBT,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,SAAUf,GACxC,OAAQA,EAAE+L,SACN,KAAK/K,EAAKmvF,iBACNnsF,EAAAhD,EAAIsxF,GAAqBpG,QAAQnrF,EAAAA,EAAAA,KAAAA,OACjC,MACJ,KAAKC,EAAKuuF,gBACNvrF,EAAAhD,EAAIsxF,GAAqBpG,QAAQnrF,EAAAA,EAAAA,KAAAA,UACjC,MACJ,KAAKC,EAAK0vF,mBACN1sF,EAAAhD,EAAIsxF,GAAqBpG,QAAQnrF,EAAAA,EAAAA,KAAAA,SACjC,MACJ,QACIiD,EAAAhD,EAAIsxF,GAAqBxwC,YAIlC9gD,EASX6K,sBACI,MAAM7K,EAAOC,KAEP49E,EAAsB,+BACtByV,EAA4B,2BAC5BC,EAAwB,+BACxBC,EAA6B,+BAC7BC,EAA+B,+BAE/BnqF,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkB+2C,GAA2B/kF,QACnEjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBg3C,GAAuBhlF,QACjEjF,EAAStJ,EAAKu8C,MAAQ,wBAA0Bi3C,GAA4BjlF,QAC5EjF,EAAStJ,EAAKu8C,MAAQ,0BAA4Bk3C,GAA8BllF,QAChFvO,EAAKsJ,SAAWA,EAGpBuB,aAAa2tB,GACT,MAAMx4B,EAAOC,WACPD,EAAK+8C,qBAAqBl9C,MAAMm9C,WAAWr8C,KAAKX,EAAM,CACxDg+E,UAAWh+E,EAAKX,GAChBirF,SAAUtqF,EAAKsqF,SACf19C,SAAU5sC,EAAK4sC,SACf6lD,mBAAoBzyF,EAAKyyF,sBAG7B,MAAMroD,QAAiBvrC,QAAQwiB,IAAI,CAC/BrhB,EAAKovF,sBACLpvF,EAAK4uF,qBACL5uF,EAAKkvF,wBAELlvF,EAAK6tF,qBAET7tF,EAAKmvF,iBAAmB/kD,EAAS,GACjCpqC,EAAKuuF,gBAAkBnkD,EAAS,GAChCpqC,EAAK0vF,mBAAqBtlD,EAAS,GACnCpqC,EAAKmvF,iBAAiB9vF,GAAKW,EAAK4mC,SAChC5mC,EAAKuuF,gBAAgBlvF,GAAKW,EAAK4mC,SAC/B5mC,EAAK0vF,mBAAmBrwF,GAAKW,EAAK4mC,SAClC5mC,EAAKmvF,iBAAiBviD,SAAW5sC,EAAK4sC,SACtC5sC,EAAKuuF,gBAAgB3hD,SAAW5sC,EAAK4sC,SACrC5sC,EAAK0vF,mBAAmB9iD,SAAW5sC,EAAK4sC,SAExC5sC,EAAKsyF,cAAgBloD,EAAS,GAC9BpqC,EAAKsyF,cAAcjzF,GAAKW,EAAK4mC,SAE7B,MAAM8sD,EAAe7oF,eAAgBnH,GACjC,GAAI1D,EAAKzB,IAAIqB,QAAQ8/C,WAAah8C,EAAQ63D,oBAAsB,EAAG,CAC/D,IACIo4B,EADAC,GAAU,EAEd,IAAK,MAAMt+D,KAASusB,EAAAA,EAAAA,mBAA4Bn+C,EAAQnD,UACpD,IAAK+0B,EAAM,GAAI,CACXq+D,EAAgBA,SAAuB3zF,EAAKzB,IAAIihD,mBAChD,MAAMq0C,QAAkBF,EAAcG,aAAa,CAC/CzpF,YAAa,CAACirB,KAEdu+D,MAAAA,GAAAA,EAAWvwF,SACXswF,GAAU,EACVt+D,EAAM,GAAKu+D,EAAU,GAAG,IAIhCD,GACAlwF,EAAQxC,eAAewC,EAAQnD,YAKrCwzF,EAAmB,SAAU/0F,GAC/BgE,EAAAhD,EAAIsxF,GAAqBjB,mBACrBrxF,EAAE0E,SACFoS,EAAA9V,EAAI+xF,EAAAiC,GAAArzF,KAAJX,EAA2BhB,EAAE0E,UAG/BuwF,EAAiBppF,eAAgB7L,SAC7B00F,EAAa10F,EAAE0E,SACrB1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,QAAsB,CAAE2D,QAAS1E,EAAE0E,WAE9CwwF,EAAoB,WACtBl0F,EAAK+gC,UAEHozD,EAAiB,SAAUn1F,GAC7BgE,EAAAhD,EAAIsxF,GAAqBlB,mBAAmBpxF,IA6OhD,GA3OAgB,EAAKmvF,iBACA7gF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAsBk0F,GACzB3lF,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyBm0F,GAC5B5lF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAuB,IAAMA,EAAAA,EAAAA,MAAAA,eAA6Bo0F,GAClEn0F,EAAKuuF,gBACAjgF,GAAGvO,EAAAA,EAAAA,MAAAA,UAAwBg0F,GAC3BzlF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAsBk0F,GACzB3lF,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyBm0F,GAC5B5lF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAuB,IAAMA,EAAAA,EAAAA,MAAAA,eAA6Bo0F,GAClEn0F,EAAK0vF,mBACAphF,GAAGvO,EAAAA,EAAAA,MAAAA,UAAwBg0F,GAC3BzlF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAsBk0F,GACzB3lF,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyBm0F,GAC5B5lF,GAAGvO,EAAAA,EAAAA,MAAAA,QAAuB,IAAMA,EAAAA,EAAAA,MAAAA,eAA6Bo0F,GAclEn0F,EAAKsyF,cACAhkF,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B8K,eAA+B7L,GACvDA,EAAEyF,QAAUzE,EAAKyE,OACjBzB,EAAAhD,EAAIsxF,GAAqBlB,mBAAmBpxF,EAAE0E,eAE5CgwF,EAAa10F,EAAE0E,SACrB1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAAS1E,EAAE0E,QAASe,MAAOzF,EAAEyF,WAE3E6J,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnCgB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2D,QAAS1E,EAAE0E,QAASe,MAAOzF,EAAEyF,WAExE6J,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtCgB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAAS1E,EAAE0E,QAASe,MAAOzF,EAAEyF,WAE3E6J,GAAGvO,EAAAA,EAAAA,MAAAA,eAA8B,IAAMA,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GAC7E,MAAMmB,EAAW/O,EAAKsyF,cAAc/B,sBAChCxhF,EAASzL,OACTN,EAAAhD,EAAIsxF,GAAqBlB,mBAAmBrhF,EAASA,EAASzL,OAAS,IAGvEN,EAAAhD,EAAIsxF,GAAqBjB,sBAIrCrwF,EAAKsyF,cAAc8B,kBAAoB,WACnC,MAAMnlF,EAAmBjP,EAAKuwF,sBACxB7sF,EAAUuL,EAAiBA,EAAiB3L,OAAS,GAC3D,GAAII,EAAS,CACT,MAAMU,EAAOV,EAAQM,WAAa,GAClChE,EACKsyF,cACAr6E,cAAc,IAAMjY,EAAKsyF,cAAc/1C,MAAQ,aAC/Cve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnB,IAAI4I,EAAa3I,EAAKq0F,iBAAiB3wF,EAAQe,OAAOkE,WACtD,IAAKvJ,OAAOD,KAAKwJ,GAAYrF,OAAQ,CAIjC,GADgBtD,EAAKuwF,sBAAsB,IAC5BnxF,OAAOD,KAAKiF,GAAMd,OAE7B,IAAK,IAAIoF,KADTC,EAAa,GACGvE,EACZuE,EAAWD,GAAO,CAAEI,KAAMJ,EAAK5F,MAAOsB,EAAKsE,IAIvD,MAAM4rF,EAAYl1F,OAAOD,KAAKwJ,GAAYpK,KAAIuZ,GAAKnP,EAAWmP,KACxDy8E,EAAMv0F,EAAKw0F,0BAA4B,GAE7CF,EAAU9sF,SAAQ,SAAUitF,GACxBA,EAAa3xF,MAAQsB,EAAKqwF,EAAa3rF,MACb,OAAtB2rF,EAAa3rF,OACb2rF,EAAaC,UAAW,GAE5BD,EAAaE,gBAAkB,GAC/BJ,EAAI/sF,SAAQ,SAAUotF,GAClB,MAAM3sF,EAAM2sF,EAAOH,EAAa3rF,WACpBzE,IAAR4D,GAA6B,KAARA,GACrBwsF,EAAaE,gBAAgBtsF,KAAKJ,SAK9CqsF,EAAU9sF,SAAQ,SAAUitF,GACE,SAAtBA,EAAarqF,KACTqqF,EAAa3xF,QACb2xF,EAAa3xF,MAAQ,IAAIghC,KAAK2wD,EAAa3xF,OAAO+xF,cAAchuE,OAAO,EAAG,KAGnD,aAAtB4tE,EAAarqF,MACdqqF,EAAa3xF,QACb2xF,EAAa3xF,MAAQ,IAAIghC,KAAK2wD,EAAa3xF,OAAO+xF,cAAchuE,OAAO,EAAG,QAKtFytE,EAAUlqE,MAAK,SAAUrP,EAAGsP,GACxB,OAAItP,EAAE25E,UAAYrqE,EAAEqqE,SAAWrqE,EAAEqqE,WACrB35E,EAAE25E,UAAYrqE,EAAEqqE,SAExB35E,EAAEjS,KAAOuhB,EAAEvhB,KACJ,EAEPiS,EAAEjS,KAAOuhB,EAAEvhB,MACH,EAEL,KAEX9I,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,CAAEn4C,KAAMkwF,IAAa,SAAU3qF,GACtE,MAAM+B,EAAa1L,EAAK80F,4BACxBppF,EAAWsyB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC5B2L,EAAW0B,UAAYzD,EACvB,MAAMorF,EAASrpF,EAAWC,iBAAiB,SACrCqpF,EAAUtpF,EAAWC,iBAAiB,UAC5CopF,EAAOvtF,SAAQ,SAAUC,GACrBA,EAAIoE,iBAAiB,SAAS,SAAU7M,GACpC,MAAMi2F,EAAQj2F,EAAE0O,OAChB,IAAK,IAAIvL,EAAI,EAAG+I,EAAM8pF,EAAQ1xF,OAAQnB,EAAI+I,EAAK/I,IAAK,CAChD,MAAMwC,EAASqwF,EAAQ7yF,GACvB,GAAIwC,EAAO6kB,QAAS,SAAQxqB,EAAE0O,OAAOmwB,aAAa,aAAel5B,EAAO7B,QAAUmyF,EAAMnyF,MAAO,CAC3F6B,EAAO7B,MAAQ,GACf,cAKhBkyF,EAAQxtF,SAAQ,SAAUC,GACtBA,EAAIoE,iBAAiB,UAAU,SAAU7M,GACrC,MAAM2F,EAAS3F,EAAE0O,OACjB,IAAK,IAAIvL,EAAI,EAAG+I,EAAM6pF,EAAOzxF,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,MAAM8yF,EAAQF,EAAO5yF,GACrB,GAAI8yF,EAAMzrE,QAAS,SAAQxqB,EAAE0O,OAAOmwB,aAAa,YAAa,CAC1Do3D,EAAMnyF,MAAQ6B,EAAO7B,MACrB,cAMhB4I,EAAWuM,cAAe,IAAGjY,EAAKsyF,cAAc/1C,qBAAqB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAChH5N,EAAKsyF,cAAc4C,cACpB,CAAEjnF,SAAS,IAEdvC,EAAWuM,cAAe,IAAGjY,EAAKsyF,cAAc/1C,yBAAyB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACpH5N,EAAKsyF,cAAc6C,oBACpB,CAAElnF,SAAS,SAK1BjO,EAAKsyF,cAAc4C,UAAY,WAC3B,MAAME,EAAOn1F,KACPyD,EAAU0xF,EAAK7E,sBAAsB,GAC3C,GAAI7sF,EAAS,CACT,MAAMU,EAAO,GACPuE,EAAa3I,EAAKq0F,iBAAiB3wF,EAAQe,OAAOkE,WAClD0sF,EAAej2F,OAAOD,KAAKwJ,GAAYrF,OAAS,EACvC8xF,EAAKN,4BAA4BnpF,iBAAiB,SAC1DnE,SAAQ,SAAUytF,GACrB,IAAInsF,EAAOmsF,EAAMp3D,aAAa,QAC1B/6B,EAAQmyF,EAAMnyF,MAClB,GAAIuyF,EACA,OAAQ1sF,EAAWG,GAAMsB,MACrB,IAAK,MACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,kBACL,IAAK,qBACL,IAAK,qBACL,IAAK,kBACL,IAAK,QACL,IAAK,eACL,IAAK,cACL,IAAK,gBACL,IAAK,eACDtH,EAAQyV,SAASzV,GACZ8kB,OAAO3mB,MAAM6B,KACdsB,EAAK0E,GAAQhG,GAEjB,MACJ,IAAK,SACL,IAAK,QACL,IAAK,UACDA,EAAQ+E,WAAW/E,GACd8kB,OAAO3mB,MAAM6B,KACdsB,EAAK0E,GAAQhG,GAEjB,MACJ,IAAK,OAGGsB,EAAK0E,GADLhG,EACa,IAAIghC,KAAKhhC,GAAO+xF,cAAchuE,OAAO,EAAG,IAGxC/jB,EAEjB,MACJ,IAAK,WAGGsB,EAAK0E,GADLhG,EACa,IAAIghC,KAAKhhC,GAAO+xF,cAAchuE,OAAO,EAAG,IAGxC/jB,EAEjB,MACJ,IAAK,UACDsB,EAAK0E,KAAUhG,EACf,MACJ,UAAKuB,EACD,MACJ,QACID,EAAK0E,GAAQhG,OAKrBsB,EAAK0E,GAAQhG,KAGrBY,EAAQK,QAAQK,GAChBgxF,EAAK5pF,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASA,EAASe,MAAO2wF,EAAK3wF,QACzE2wF,EAAKD,oBAMTp0F,MAAMC,QAAQhB,EAAKJ,QAAQgwF,QAAU5vF,EAAKJ,QAAQgwF,MAAMtsF,OAAS,EAAG,CACpE,IAAK,IAAI8hD,KAAK4sC,EAAK9+D,KACf,GAAiB,iBAANkyB,GAAkBplD,EAAKJ,QAAQgwF,MAAM3mF,QAAQ+oF,EAAK9+D,KAAKkyB,IAAM,EAAG,CACvE,MAAM8gC,EAAGpwE,EAAG9V,EAAIyxF,EAAA6D,GAAA30F,KAAJX,EAAiBgyF,EAAK9+D,KAAKkyB,IACjCz4C,EAAMu5E,EAAIx4E,OAChBf,EAAI8vD,cAAcC,YAAY/vD,GAC9Bu5E,EAAIzpB,cAAcC,YAAYwpB,GAGtC,GAAkC,IAA9BlmF,EAAKJ,QAAQgwF,MAAMtsF,OAAc,CACjC,IAAI4vB,EAAOlzB,EAAKJ,QAAQgwF,MAAM,GAC9B,MAAM1J,EAAGpwE,EAAG9V,EAAIyxF,EAAA6D,GAAA30F,KAAJX,EAAiBkzB,GAC7BgzD,EAAIzpB,cAAcC,YAAYwpB,IAgCtC,OA5BAlmF,EAAK2L,iBAAiB3I,EAAAhD,EAAIssF,GAAY2F,UAAUzqF,SAAQ,SAAU0+E,GAC9DA,EAAI1tD,SAAW,WAAY,IAAA+8D,EACvB,MAAMC,EAAsB,QAAdD,EAAGt1F,KAAKyN,cAAM,IAAA6nF,OAAA,EAAXA,EAAa13D,aAAa,MAC3C,GAAI23D,EAAU,CACV,MAAMC,EAAUD,EAAS3uE,OAAO2uE,EAAS7hE,YAAY,KAAO,GAC5D3zB,EAAKkzB,KAAOjzB,KAAKyE,SAAW+wF,EAAU,UAKlDz1F,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,eAAej6E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACnG5N,EAAK01F,2BACN,CAAEznF,SAAS,IAEdjO,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WAAWj6E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC/F5N,EAAKs/C,oBAAoB3gD,MAAK,SAAUi+E,GACpC,MAAMh9E,EAAU,CACZ4K,MAAOxK,EAAK4hC,gBAAgB,YAC5B42B,SAAUx4D,EAAKyE,MAAMpF,GAAGgvB,cAAc7kB,QAAQ,IAAK,KAAO,IAAMtF,EAAAA,EAAAA,kBAAsB,IAAI4/B,MAAO5gB,YAAY,GAC7Gw8B,UAAW1/C,EAAKJ,QAAQ+1F,mBAE5B/Y,EAAOvvE,KAAKrN,EAAKyE,MAAMsK,SAAUnP,QAEtC,CAAEqO,SAAS,IAEV/J,EAAAA,EAAAA,WAAgBs0B,IAChBA,IAEGx4B,EAGX41F,gBAAgBrgE,GACZ,OAAQA,GACJ,IAAK,6BACL,IAAK,0BACL,IAAK,yBACL,IAAK,sBACD,OAAOx1B,EAAAA,EAAAA,KAAAA,QACX,IAAK,+BACL,IAAK,+BACL,IAAK,2BACL,IAAK,2BACD,OAAOA,EAAAA,EAAAA,KAAAA,aACX,IAAK,6BACL,IAAK,wBACL,IAAK,yBACL,IAAK,oBACD,OAAOA,EAAAA,EAAAA,KAAAA,SACX,IAAK,kCACL,IAAK,6BACL,IAAK,8BACL,IAAK,yBACD,OAAOA,EAAAA,EAAAA,KAAAA,cACX,IAAK,wBACL,IAAK,6BACL,IAAK,oBACL,IAAK,yBACD,OAAOA,EAAAA,EAAAA,KAAAA,MACX,IAAK,sBACL,IAAK,kBACD,OAAOA,EAAAA,EAAAA,KAAAA,UACX,IAAK,qCACL,IAAK,8BACL,IAAK,2BACL,IAAK,iCACL,IAAK,0BACL,IAAK,uBACD,OAAO,EACX,QACI,OAAO,GAInBme,SAASzZ,GACL,MAAMzE,EAAOC,KACbD,EAAKsyF,eAAiBtyF,EAAKsyF,cAAcuD,iBAAiB71F,EAAKuwF,uBAC/DvwF,EAAKyE,MAAQzE,EAAKzB,IAAIqhB,SAASnb,GAC3BzE,EAAKyE,OACLA,EAAM+qB,sBACD7wB,MAAK,SAAUgK,GACZ,MAAMmtF,EAAgB,CAClBntF,WAAY,IAGhB,IAAID,EACJ,IAAKA,KAAOC,EAAY,CACpB,MAAMC,EAAOD,EAAWD,GAClB6sB,EAAev1B,EAAK41F,gBAAgBhtF,EAAKwB,MAC3CmrB,GACAugE,EAAcp3B,aAAe91D,EAAKE,KAClCgtF,EAAcvgE,aAAuC,kBAAjBA,EAA6B,KAAOA,GAGxEugE,EAAcntF,WAAWD,GAAOE,EAGxC,IAAKF,KAAOotF,EAAcntF,WAAY,CAClC,MAAMC,EAAOktF,EAAcntF,WAAWD,GACtCE,EAAKwB,KAAOxB,EAAKwB,KAAKyc,OAAOje,EAAKwB,KAAKnB,QAAQ,KAAO,GAE1DjJ,EAAKqyF,eAAe5tF,EAAMpF,IAAMy2F,KAEnC1/E,OAAM,SAAU8zC,GACblqD,EAAKqyF,eAAe5tF,EAAMpF,IAAM,CAC5Bk2B,aAAc,KACd5sB,WAAY,OAI5B,MAAMuV,EAAWzV,GAAKA,EAAEyV,SAASle,EAAKyE,OAQtC,OAPAzE,EAAK6tF,mBAAmBlvF,KAAKuf,GAC7Ble,EAAKovF,sBAAsBzwF,KAAKuf,GAChCle,EAAK4uF,qBAAqBjwF,KAAKuf,GAC/Ble,EAAKkvF,wBAAwBvwF,KAAKuf,GAElCle,EAAKkzB,KAAOlzB,EAAKyE,MAAQutF,EAAK9+D,KAAKs/D,OAAS,KAC5C18E,EAAA9V,EAAI2xF,EAAAoE,GAAAp1F,KAAJX,EAAmBA,EAAKyE,OACjBzE,EAGX2vF,eAAeC,GACX,MAAM5vF,EAAOC,KACRc,MAAMC,QAAQ4uF,KACfA,EAAQ,IAEPA,EAAMtsF,SACPssF,EAAQxwF,OAAOgvB,OAAO4jE,EAAK9+D,OAE/BlzB,EAAK4vF,MAAQA,EACRzqF,QAAO,SAAUigD,GAEd,IAAK,IAAI18C,KAAOspF,EAAK9+D,KACjB,GAAI8+D,EAAK9+D,KAAKxqB,KAAS08C,EACnB,OAAO,EAGf,OAAO,KAEVjgD,QAAO,SAAUigD,GAEd,OAAKrkD,MAAMC,QAAQhB,EAAKJ,QAAQgwF,QAGzB5vF,EAAKJ,QAAQgwF,MAAM3mF,QAAQm8C,IAAM,KAE5CplD,EAAK4vF,MAAM3mF,QAAQjJ,EAAKkzB,MAAQ,IAChClzB,EAAKkzB,KAAO,MAEhB,MAAM8rB,EAAWh/C,EAAK4vF,MAAMrxF,KAAI6mD,GAAM,SAAQplD,EAAKX,WAAW+lD,QAAO76C,QAAU,QAI/E,OAHAvK,EAAK2L,iBAAiB3I,EAAAhD,EAAIssF,GAAY2F,UAAUzqF,SAAQ,SAAU0+E,GAC9DA,EAAI7oD,UAAY6oD,EAAI18D,QAAQw1B,MAEzBh/C,EAGXozF,iBAAiB1vF,GACb,MAAM1D,EAAOC,KACb,QAAQ,GACJ,KAAKyD,aAAmBiM,EAAAA,EACpB,OAAO3P,EAAK4vF,MAAM33D,SAAS+5D,EAAK9+D,KAAK8iE,UACzC,KAAKtyF,aAAmBuN,EAAAA,EACpB,OAAOjR,EAAK4vF,MAAM33D,SAAS+5D,EAAK9+D,KAAK+iE,SACzC,KAAKvyF,aAAmBmN,EAAAA,EACpB,OAAO7Q,EAAK4vF,MAAM33D,SAAS+5D,EAAK9+D,KAAK+iE,UAAYj2F,EAAKk2F,WAC1D,KAAKxyF,aAAmBpB,EAAAA,EACpB,OAAOtC,EAAK4vF,MAAM33D,SAAS+5D,EAAK9+D,KAAKijE,YACzC,KAAKzyF,aAAmBwM,EAAAA,EACpB,OAAOlQ,EAAK4vF,MAAM33D,SAAS+5D,EAAK9+D,KAAKijE,aAAen2F,EAAKk2F,WAC7D,QACI,OAAO,GAInBrrF,yBAAyBqrF,GACrB,MAAMl2F,EAAOC,KACbD,EAAKk2F,WAAaA,SAEXl2F,EAAK4uF,sBAAsB1D,QAAQgL,EAAan2F,EAAAA,EAAAA,KAAAA,cAA4BA,EAAAA,EAAAA,KAAAA,iBAC5EC,EAAKkvF,yBAAyBhE,QAAQgL,EAAan2F,EAAAA,EAAAA,KAAAA,aAA2BA,EAAAA,EAAAA,KAAAA,SAGzFs0F,iBAAiB+B,GACb,MAAMp2F,EAAOC,KACPwE,EAAQ2xF,GAAiBp2F,EAAKyE,MACpC,OAAKA,EAGEzE,EAAKqyF,eAAe5tF,EAAMpF,IAAMW,EAAKqyF,eAAe5tF,EAAMpF,KAAO,CACpEg3F,YAAY,GAHL,KAOft1D,SACI,MAAM/gC,EAAOC,KAQb,OAPIc,MAAMC,QAAQhB,EAAKJ,QAAQgwF,QAAuC,GAA7B5vF,EAAKJ,QAAQgwF,MAAMtsF,OACxDtD,EAAKkzB,KAAOlzB,EAAKJ,QAAQgwF,MAAM,GAG/B5vF,EAAKkzB,KAAO,KAEhBlzB,EAAKE,KAAK6gC,QAAO,EAAM/gC,EAAKkyF,wBACrBlyF,EAGX6K,eAAejL,GACX,MAAMI,EAAOC,KAEb,IAAI+tD,EACJ,QAFApuD,EAAUA,GAAW,IAELszB,MACZ,KAAK8+D,EAAK9+D,KAAK8iE,SACXhoC,QAAYhuD,EAAKovF,sBACjB,MACJ,KAAK4C,EAAK9+D,KAAK+iE,QACXjoC,QAAYhuD,EAAK4uF,qBACjB,MACJ,KAAKoD,EAAK9+D,KAAKijE,WACXnoC,QAAYhuD,EAAKkvF,wBACjB,MACJ,QACIlhC,QAAYhuD,EAAK6tF,mBAIrB7/B,IAAQhuD,EAAKzB,IAAIw/C,eACjB96C,EAAAjD,EAAImxF,EAA0BnxF,EAAKzB,IAAIw/C,eAI/CE,aACI,MAAMj+C,EAAOC,KACb,GAAA+C,EAAIhD,EAAImxF,GAEJ,OADAnxF,EAAKzB,IAAIy/C,sBAAqBh7C,EAAGhD,EAAImxF,GAC7BnxF,EAAKzB,IAAIw/C,eACb,KAAK/9C,EAAKmvF,iBACNnvF,EAAKmvF,iBAAiBlxC,aACtB,MACJ,KAAKj+C,EAAKuuF,gBACNvuF,EAAKuuF,gBAAgBtwC,aACrB,MACJ,KAAKj+C,EAAK0vF,mBACN1vF,EAAK0vF,mBAAmBzxC,aACxB,MACJ,KAAKj+C,EAAKsyF,cACNtyF,EAAKsyF,cAAcr0C,aAO/B,OADAj+C,EAAKsyF,eAAiBtyF,EAAKsyF,cAAc6C,kBAClCn1F,EAGXk/C,cACI,OAAO,EAGX41C,4BAA4B,IAAAwB,EACxB,OAAyB,QAAzBA,EAAOr2F,KAAKqyF,qBAAa,IAAAgE,OAAA,EAAlBA,EAAoBxB,4BA6E/BvE,sBAAsB,IAAAgG,EAClB,OAAyB,QAAzBA,EAAOt2F,KAAKqyF,qBAAa,IAAAiE,OAAA,EAAlBA,EAAoBhG,sBAG/BiG,oBAAoBznF,GAAU,IAAA0nF,EAC1B,OAAyB,QAAzBA,EAAOx2F,KAAKqyF,qBAAa,IAAAmE,OAAA,EAAlBA,EAAoBD,oBAAoBznF,GAGnDlE,iBACI,MAAM7K,EAAOC,KACb,OAAID,EAAKyE,MACEzE,EAAKyE,YAEHzE,EAAK0tF,aAGtB7iF,yBACI,MAAM7K,EAAOC,KAEb,aADMD,EAAKsL,gBACJtL,EAAKiY,cAAe,IAAGjY,EAAKu8C,6BAGvC1xC,4BACI,MAAM7K,EAAOC,KAEb,aADMD,EAAKsL,gBACJtL,EAAKiY,cAAe,IAAGjY,EAAKu8C,0BAGvC1xC,2BACI,MAAM7K,EAAOC,KAEb,aADMD,EAAKsL,gBACJtL,EAAKiY,cAAe,IAAGjY,EAAKu8C,yBAGvC1xC,8BACI,MAAM7K,EAAOC,KAEb,aADMD,EAAKsL,gBACJtL,EAAKiY,cAAe,IAAGjY,EAAKu8C,4BAWvC1xC,8BACI,MAAM7K,EAAOC,KASb,OARI+C,EAAChD,EAAIoxF,KACLnuF,EAAAjD,EAAIoxF,EAA8BpxF,EAAKzB,IAAI6M,WAAW,eAAgB,CAClEc,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,4BAGnC5hC,EAAK0yF,yBAAqB1vF,EAAMhD,EAAIoxF,UAEjCpuF,EAAMhD,EAAIoxF,GAGrBvmF,2BACI,MAAM7K,EAAOC,KAWb,OAVI+C,EAAChD,EAAIqxF,KACLpuF,EAAAjD,EAAIqxF,EAA2BrxF,EAAKzB,IAAI8rD,SAAS,CAC7ChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNyK,MAAO,mBACP8kB,SAAS,EACTjpB,OAAQrG,EAAKzB,IAAIqB,QAAQyG,OAAO8I,WAAa3I,EAAAA,EAAAA,OAAAA,aAEjDxG,EAAK02F,sBAAkB1zF,EAAMhD,EAAIqxF,IAErCruF,EAAOhD,EAAIqxF,GAGfxmF,wBAAwBkE,GACpB,MACM2nF,QADOz2F,KACsB2yF,qBAC7B+D,EAFO12F,KAEoB0yF,iBAAiBrqF,OAAOyG,GACzD2nF,EAAgB3nF,SAASnE,QAAQpD,SAAQ,SAAU9D,KAC1CA,EAAQqvF,UAAY4D,EAAoB1tF,QAAQvF,EAAQqvF,UAAY,IACrE2D,EAAgB3+D,cAAcr0B,YAGhCgzF,EAAgB5+D,YAAY6+D,EAC7BxxF,QAAO,SAAUzB,GACd,OAAQgzF,EAAgB3nF,SAASqM,MAAK,SAAUpM,GAC5C,OAAOA,EAAE+jF,UAAY/jF,EAAE+jF,WAAarvF,QAG3CnF,KAAI,SAAUmF,GACX,MAAMi0D,EAAaj0D,EAAQ+G,QAG3B,OAFAktD,EAAWz0D,qBAAoB,GAC/By0D,EAAWo7B,SAAWrvF,EACfi0D,MAInBu7B,+BACI,MAAMlzF,EAAOC,KACb,OAAOD,EAAKzB,IAAI4rC,WACXhlC,QAAO6b,IAAMA,EAAEjN,aACf5O,QAAO6b,GAAKA,IAAMhhB,EAAKyE,QACvBU,QAAO6b,GAAKA,IAAMhhB,EAAK02F,kBACvBn4F,KAAI,SAAUyiB,GACX,MAAO,CACH3hB,GAAI2hB,EAAE3hB,GACNmL,MAAOwW,EAAExW,MACTuE,SAAUiS,EAAEjS,SAAS5J,QAAO,SAAU6J,GAClC,OAAOhP,EAAKozF,iBAAiBpkF,UAIxC7J,QAAO6b,GAAKA,EAAEjS,SAASzL,SAGhCszF,eAAe7nF,GACX,MAAM/O,EAAOC,KACb,IAAI42F,GAAU,EACd,MAAMf,EAAgB91F,EAAKq0F,mBAmD3B,OAlD0BtlF,GAAY/O,EAAK2yF,kBAAoB,IAC1DxtF,QAAO6J,IACJ,MAAMnK,EAAS7E,EAAKozF,iBAAiBpkF,GAIrC,OAHKnK,IACDgyF,GAAU,GAEPhyF,KAEEtG,KAAI,SAAUmF,GAC3B,IAAIi0D,EACJ,MAAM97B,EAAiB,CACnBz3B,KAAMV,EAAQU,KACds6D,aAAco3B,EAAcp3B,cAEhC,GAAI1+D,EAAKk2F,WACL,QAAQ,GACJ,KAAKxyF,aAAmBpB,EAAAA,EACpBq1D,EAAa,IAAIznD,EAAAA,EAAa,CAACxM,EAAQnD,UAAWs7B,GAClD,MACJ,KAAKn4B,aAAmBuN,EAAAA,EACpB0mD,EAAa,IAAI9mD,EAAAA,EAAc,CAACnN,EAAQnD,UAAWs7B,GACnD,MACJ,QACI87B,EAAaj0D,EAAQ+G,aAK7B,QAAQ,GACJ,KAAK/G,aAAmBwM,EAAAA,EACpBynD,EAAa,IAAIr1D,EAAAA,EAAQoB,EAAQnD,SAAS,GAAIs7B,GAC9C,MACJ,KAAKn4B,aAAmBmN,EAAAA,EACpB8mD,EAAa,IAAI1mD,EAAAA,EAASvN,EAAQnD,SAAS,GAAIs7B,GAC/C,MACJ,QACI87B,EAAaj0D,EAAQ+G,QAKjC,OADAktD,EAAWhyD,SAAS,MACbgyD,KACRnwD,SAAQ,SAAU9D,GACjB1D,EAAKyE,MAAMozB,WAAWn0B,GACtB1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2D,QAASA,EAASe,MAAOzE,EAAKyE,WAGtEoyF,GACA72F,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gCAAiC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,UAE1EC,EAkEX01F,yBACI,MAAM11F,EAAOC,KAEbD,EAAK2yF,iBAAmB,GAExB3yF,EAAK82F,wBAAwBn4F,MAAK,SAAUoN,GACxC,MAAMmoD,EAAYnoD,EAAMuB,mBACxBtN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,CAAEv5B,OAAQhjB,EAAKkzF,iCAAkC,SAAUvpF,GACpGoC,EAAMsB,KAAK1D,EAAMuqD,GACjBA,EAAUj8C,cAAc,MAAMpM,iBAAiB,YAAY,SAAU+B,GACjE5N,EAAK+2F,kBAAkB,OAE3B7iC,EAAUvoD,iBAAiB,eAAenE,SAAQ,SAAUC,GACxDqO,EAAA9V,EAAI6xF,EAAAmF,GAAAr2F,KAAJX,EAA2ByH,MAE/BysD,EAAUj8C,cAAe,IAAGjY,EAAKu8C,uBAAuB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACnG5N,EAAK42F,iBACL52F,EAAK0yF,mBAAmBzlF,UACzB,CAAEgB,SAAS,UAK1BpD,2BAA2BpG,GACvB,MAAMzE,EAAOC,KACb,GAAID,EAAK0yF,qBAAuB1yF,EAAK0yF,mBAAmB/lF,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAAwB,CACnG,MACMozF,EADYnzF,EAAK0yF,mBAAmBplF,mBACnB2K,cAAe,IAAGjY,EAAKu8C,gCACxC06C,EAAwB,qBAAoBxyF,EAAMpF,OAClD8+E,EAAKgV,EAAKl7E,cAAcg/E,GAC9B,GAAI9Y,EASA,OARA15E,EAAMsK,SAASvH,SAAQ,SAAU9D,GACzB1D,EAAKozF,iBAAiB1vF,IACtB1D,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,kBAAmB93C,GAAO,SAAUkF,GAClEw0E,EAAGruB,mBAAmB,YAAanmD,GACnCmM,EAAA9V,EAAI8xF,EAAAoF,GAAAv2F,KAAJX,EAA6Bm+E,EAAGlmE,cAAc,wBAInDkmE,EAEN,CACD,MAAMx0E,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,gBAAiB,CAAEl9C,GAAIoF,EAAMpF,GAAImL,MAAO/F,EAAM+F,MAAOuE,SAAUtK,EAAMsK,WAC1HokF,EAAKrjC,mBAAmB,YAAanmD,GACrC,MAAMi1E,EAAQuU,EAAKl7E,cAAcg/E,GAEjC,OADAnhF,EAAA9V,EAAI6xF,EAAAmF,GAAAr2F,KAAJX,EAA2B4+E,GACpBA,GAGf,OAAO,MAOd,eAAAwL,IA/rCO,MAAMpqF,EAAOC,KACPmqC,QAAiBvrC,QAAQwiB,IAAI,CAC/BrhB,EAAK6tF,mBACL7tF,EAAKovF,sBACLpvF,EAAK4uF,qBACL5uF,EAAKkvF,0BAEHiI,EAAan3F,EAAKsqF,SACxBlgD,EAAS5iC,SAAQiB,GAAKA,EAAE6hF,SAAW6M,IACtC,eAAA5E,IAWG,MAAMvyF,EAAOC,KACP2sC,EAAW5sC,EAAK4sC,gBACf5sC,EAAKovF,uBAAuBxiD,SAAWA,SACvC5sC,EAAK4uF,sBAAsBhiD,SAAWA,SACtC5sC,EAAKkvF,yBAAyBtiD,SAAWA,EACnD,SAAAy9C,IAwBG,MAAMrqF,EAAOC,KACPizB,EAAOlzB,EAAKkzB,KAGlB,IAAIkkE,EAAe,SAAUC,GACrBA,IACIr3F,EAAK4sC,WACLyqD,EAAKzqD,SAAW5sC,EAAKyE,OAEzB4yF,EAAKv5C,aAIbj/C,QAAQwiB,IAAI,CACRrhB,EAAKovF,sBACLpvF,EAAK4uF,qBACL5uF,EAAKkvF,wBAELlvF,EAAK6tF,qBACNlvF,MAAK,SAAUyrC,GACd,MAAM+kD,EAAmB/kD,EAAS,GAC5BmkD,EAAkBnkD,EAAS,GAC3BslD,EAAqBtlD,EAAS,GAE9BkoD,EAAgBloD,EAAS,GAC/B,OAAQlX,GACJ,KAAK8+D,EAAK9+D,KAAKs/D,OACXF,EAAcx0C,WACd,MACJ,KAAKk0C,EAAK9+D,KAAK8iE,SACXoB,EAAajI,GACbnsF,EAAAhD,EAAIsxF,GAAqBp+D,KAAOnzB,EAAAA,EAAAA,KAAAA,MAChC,MACJ,KAAKiyF,EAAK9+D,KAAK+iE,QACXmB,EAAa7I,GACbvrF,EAAAhD,EAAIsxF,GAAqBp+D,KAAOnzB,EAAAA,EAAAA,KAAAA,SAChC,MACJ,KAAKiyF,EAAK9+D,KAAKijE,WACXiB,EAAa1H,GACb1sF,EAAAhD,EAAIsxF,GAAqBp+D,KAAOnzB,EAAAA,EAAAA,KAAAA,QAChC,MACJ,KAAKiyF,EAAK9+D,KAAKokE,MAKf,QACQltD,EAASnhC,QAAQjJ,EAAKzB,IAAIw/C,gBAAkB,GAC5C/9C,EAAKzB,IAAIw/C,cAAcE,aAQnC,GAAI/qB,EAAM,CACMlzB,EAAKiY,cAAe,GAAEjV,EAAAhD,EAAIssF,GAAY2F,iBAAiBjyF,EAAKX,WAAW6zB,OAC/ExuB,UAAW,OAGf1E,EAAK2L,iBAAiB3I,EAAAhD,EAAIssF,GAAY2F,UAAUzqF,SAAQ,SAAU0+E,GAC9DA,EAAIxhF,UAAW,QAI9B,SAAA4wF,EAkIWpiE,GAER,OADajzB,KACDgY,cAAe,kBADdhY,KACoCZ,WAAW6zB,OAC/D,SAAAqkE,EAg1ByB9vF,GACtB,MACMo5C,EAAKp5C,EAAIwQ,cAAc,SACvBxT,EAFOxE,KAEM1B,IAAIqhB,SAASnY,EAAIg1D,cAAcA,cAAcne,QAAQp/B,SACxE,OAAIza,EACOA,EAAMyzB,eAAe2oB,EAAG/9C,OAE5B,KACV,SAAAizF,EAEajhF,GACG7U,KACR0L,iBAAiB3I,EADT/C,KACaqsF,GAAYE,mBAAmBhlF,SAAQ+M,GAAKA,EAAE8oB,UAAYvoB,IACvF,SAAA0iF,EAEYlP,GACT,MAAMtoF,EAAOC,KACPyD,EAAOoS,EAAG9V,EAAI0xF,EAAA6F,GAAA52F,KAAJX,EAA+BsoF,EAAS7rB,eACxD,GAAI6rB,EAASzoD,QACT7/B,EAAK2yF,iBAAiBtqF,KAAK3E,OAE1B,CACD,MAAMgE,EAAM1H,EAAK2yF,iBAAiB1pF,QAAQvF,GACtCgE,GAAO,GACP1H,EAAK2yF,iBAAiB3pF,OAAOtB,EAAK,IAG7C,SAAAsvF,EAEqB7Y,GAClB,MAAMn+E,EAAOC,KAEbk+E,EAAGlmE,cAAc,SAASpM,iBAAiB,UAAU,SAAU+B,GAC3D,MAAMizC,EAAK5gD,KACX4gD,EAAG4b,cAAc9wD,iBAAiB,uBAAuBnE,SAAQ,SAAUiwF,GACnEA,EAAI53D,UAAYghB,EAAGhhB,UACnB43D,EAAI53D,QAAUghB,EAAGhhB,QACjB/pB,EAAA9V,EAAI4xF,EAAA4F,GAAA72F,KAAJX,EAAkBy3F,OAG1Bz3F,EAAK+2F,kBAAkB,OAG3B5Y,EAAGxyE,iBAAiB,iBAAiBnE,SAAQ,SAAUC,GACnDqO,EAAA9V,EAAI8xF,EAAAoF,GAAAv2F,KAAJX,EAA6ByH,MAEpC,SAAAyvF,EAEuB/Y,GACpB,MAAMn+E,EAAOC,KACPy3F,EAAoB,SAAU9pF,GAChC,MAAMlK,EAAOoS,EAAG9V,EAAI0xF,EAAA6F,GAAA52F,KAAJX,EAA+BC,MAC3CyD,GACA1D,EAAK+2F,kBAAkB,CAACrzF,KAGhCy6E,EAAGtyE,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoB23F,EAAmB,CAAEzpF,SAAS,IACtEkwE,EAAGtyE,iBAAiB,YAAa6rF,GACjCvZ,EAAGlmE,cAAc,SAASpM,iBAAiB,UAAU,SAAU+B,GAC3DkI,EAAA9V,EAAI4xF,EAAA4F,GAAA72F,KAAJX,EAAkBC,SAEzB,SAAA+zF,EAsDqBtwF,GAElBV,EADa/C,KACTsxF,GAAmBxyE,IAAIrb,EAASA,EAAQ+G,SAC/C3K,EA/wCCkyF,EAAI,OAUQ,CACVQ,OAAQ,SACRwD,SAAU,WACVC,QAAS,UACTE,WAAY,aACZwB,IAAK,MACLL,MAAO,UAkwCfr4D,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAaq1D,GACtE,W,+JC7xCAxuF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMo0F,EAAY,WACd,MAAM53F,EAAOC,KAEb+K,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAKy/C,kBAAmB,EACxBz/C,EAAK+M,aAAe,MAGxBvJ,EAAAA,EAAAA,QAAWo0F,EAAW5sF,EAAAA,GAEtB,WACI,MAAM0xC,EAAWk7C,EAAUn3F,UAE3Bi8C,EAASH,MAAQ,cAEjB,MAAMs7C,EAAsB,IAAIp1F,QAC1Bq1F,EAAwB,IAAI59E,IAqB5B69E,EAAkC,SAAUr0F,GAC9C,GAAIA,EAAS,CACT,MAAM/D,EAAS+D,EAAQhC,YACnB/B,GACAm4F,EAAsBhqB,OAAOnuE,EAAOujB,cAMhDw5B,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBma,EAAuB,+BAEvB1uF,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,eAAiBy7C,GAAsBzpF,QAC7DvO,EAAKsJ,SAAWA,GAGpBozC,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAoBb,aAnBM+K,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAE5CA,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,cAA6B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACzE+4F,EAAgC/4F,EAAE0E,YAErC4K,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtC+4F,EAAgC/4F,EAAE0E,YAErC4K,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCA,EAAEyF,MAAMsK,UAAY/P,EAAEyF,MAAMsK,SAASvH,SAAQizB,GAAQs9D,EAAgCt9D,QAExFnsB,GAAGvO,EAAAA,EAAAA,MAAAA,MAAqB,IAAMA,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAEzD64F,EAAoBvmE,IAAItyB,EAAE+L,QAAQ3F,iBAClCpF,EAAKi4F,sBAAsBj5F,EAAE+L,QAAQ3F,mBAI1CpF,GAGX08C,EAAS8C,iBAAmB30C,iBACxB,MAAM7K,EAAOC,KACPi4F,EAAW,CACbt4F,QAAS,CACL6/C,iBAAkBz/C,EAAKJ,UAAW,GAEtC8/C,UAAW1/C,EAAK0/C,UAChBnhD,IAAKyB,EAAKzB,KAERyvD,QAAYhjD,EAAAA,EAAAA,UAAAA,iBAAAA,KAAwCktF,GAE1D,OADAl4F,EAAK0/C,UAAYsO,EACVA,GAGXtR,EAASy7C,wBAA0B,SAAUv4F,GACzC,MAAMI,EAAOC,KACbiE,EAAAA,EAAAA,OAAYlE,EAAKJ,QAASA,GACtBI,EAAK0/C,WACLx7C,EAAAA,EAAAA,OAAYlE,EAAK0/C,UAAU9/C,QAASI,EAAKJ,UAIjD88C,EAASu7C,sBAAwBptF,eAAgBnH,EAAS9D,GACtD,MAAMI,EAAOC,KAEb,GADAL,EAAUA,GAAW,GACjB8D,aAAmBiM,EAAAA,EAAO,CAC1B,IAAIyoF,EAOJ,GANIx4F,EAAQy4F,YACRR,EAAoB/pB,OAAOpqE,GAG3B00F,EAAkBP,EAAoBp5E,IAAI/a,IAEzC00F,EAAiB,CAClB,MAAM53D,QAAaxgC,EAAKw/C,mBAClBE,QAAkBlf,EAAKszD,aAAa,CACtC3sF,IAAKnH,EAAKzB,IAAI4I,IACdkD,YAAa,CAAC3G,EAAQnD,YAE1B,GAAIm/C,EAAUp8C,OAAQ,CAClB,MAAMgyB,EAAQoqB,EAAU,GAGxB04C,EAAkB,CACd14C,UAHWpqB,EAAM,GAIjB9C,OAHW8C,EAAMhyB,OAAS,EAAIgyB,EAAM,GAAK,MAK7CuiE,EAAoB94E,IAAIrb,EAAS00F,IAGzC,GAAIA,EAAiB,CACjB,MAAME,EAAU,GAChB,IAAI5qF,EACJ,MAAMrE,EAASrJ,EAAKzB,IAAIqB,QAAQyJ,QAAU7C,EAAAA,EAAAA,OACpC+xF,EAAkBv4F,EAAKzB,IAAI2G,mBAAmB,oBAC/CoD,OAAOtI,EAAKzB,IAAI2G,mBAAmB,4BACxCqzF,EACKpzF,QAAO6oD,GAAOA,EAAI7iD,QAAU6iD,EAAI7iD,OAAOqtF,qBAAuB90F,IAC9D8D,SAAQ,SAA4BwmD,GACjC,MAAMyqC,EAAUzqC,EAAI7iD,OAAOutF,kBAAkBh1F,GACzC+0F,IACA/qF,EAAS+qF,EAAQxgF,cAAc,SAC/BqgF,EAAQjwF,KAAKqF,OAGzB6qF,EACKpzF,QAAO6oD,GAAOA,EAAI5oD,iBAAmB1B,IACrC8D,SAAQ,SAAyBwmD,GAC9B,IAAIkG,EACJ,QAAQ,GACJ,KAAK1wD,EAAAA,EAAAA,QAAAA,OAAoBwqD,aAAexqD,EAAAA,EAAAA,QAAAA,MACpC0wD,EAAYlG,EAAI3iD,sBAChB,MACJ,KAAK7H,EAAAA,EAAAA,QAAAA,cAA2BwqD,aAAexqD,EAAAA,EAAAA,QAAAA,aAC3C0wD,EAAYlG,EAAI1gD,mBAKpB4mD,IACAxmD,EAASwmD,EAAUj8C,cAAc,SACjCqgF,EAAQjwF,KAAKqF,OAIzB,MAAMm9C,EAAgB,CAClB8tC,eAA8C,OAA9BP,EAAgB14C,UAAqBx7C,EAAAA,EAAAA,aAAkB1C,KAAKirC,MAAM2rD,EAAgB14C,WAAYr2C,GAAU,GACxHuvF,YAAaR,EAAgB5lE,OAAS4lE,EAAgB5lE,OAAO0wC,eAAe75D,EAAQ,CAAEi9D,sBAAuB,IAAO,IAGlHuyB,EAAoBn1F,EAAQnD,SAAS,GACV,iBAAtBs4F,GAAkCA,IAAsBT,EAAgB14C,YAC/EmL,EAAciuC,cAAgB50F,EAAAA,EAAAA,aAAkB1C,KAAKirC,MAAMosD,KAE/DP,EAAQ9wF,SAAQ,SAA4BkG,GACxC1N,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,OAAQsO,GAAe,SAAUlhD,GAC/D+D,EAAO/B,iBAAkB,aAAY3L,EAAKu8C,eAAe/0C,SAAQC,GAAOA,EAAIw2B,WAC5EvwB,EAAOoiD,mBAAmB,YAAanmD,YAO3D+yC,EAASgyC,wBAA0B7jF,eAAgBkuF,EAAiB90F,GAChE,MAAMjE,EAAOC,KACPL,EAAUqE,GAAQ,GACxB,IAAI+0F,EACJ,QAAQ,GACJ,KAAKD,aAA2B9nF,EAAAA,EAC5B+nF,EAAQ,CAACD,EAAgBx4F,UACzB,MACJ,KAAKw4F,aAA2BloF,EAAAA,EAC5BmoF,EAAQD,EAAgBx4F,SACxB,MACJ,KAAKw4F,aAA2Bt5F,EAAAA,EAC5B,OACJ,QACIu5F,EAAQ,CAACD,GAEjB/4F,EAAKi5F,kBAAkBt6F,MAAK,SAAUoO,GAClCA,EAAaM,UAEjB,MAAM6rF,EAAgB,SAAUC,GAC5Bn5F,EAAKi5F,kBAAkBt6F,MAAK,SAAUoO,GAClCA,EAAazB,gBAAgB3M,MAAK,WAC9BqB,EAAKo5F,uBAAuBD,UAIxC,GAAIJ,aAA2Bt5F,EAAAA,EAAS,CACpCO,EAAKi5F,kBAAkBt6F,MAAK,SAAUoO,GAClCA,EAAaihF,kBAAkB+K,MAEnC,MAAMI,EAtMuB,SAAUz1F,GAC3C,GAAIA,EAAS,CACT,MAAM/D,EAAS+D,EAAQhC,YACvB,OAAI/B,EACOm4F,EAAsBr5E,IAAI9e,EAAOujB,YAErC,MAgMSm2E,CAA6BN,GAC7C,GAAII,EAEA,YADAD,EAAcC,GAItB,MAAMhb,EAAKn+E,EAAKzB,IAAIw1D,sBACdsD,EAAS8mB,GAAMA,EAAG92B,UAClBvK,EAAS,SAAUw8C,EAAgB15F,GACrC,IAAI25F,EAAYD,EACZE,EAAe5xE,OAAOE,kBACtB2xE,EAAe7xE,OAAOC,kBACtB7nB,EAAKzB,IAAI8I,WAAarH,EAAKzB,IAAIqB,QAAQipC,SACvC0wD,EAAYr1F,EAAAA,EAAAA,UAAeo1F,EAAgBt5F,EAAKzB,IAAI8I,SAAUrH,EAAKzB,IAAIqB,QAAQipC,SAEnF,MAAMswD,EAAUI,EACXh7F,KAAIi3B,IACD,IAAI8uB,EAAW,EACf,OAAO9uB,EAAKj3B,KAAI,SAAsC+2B,EAAO5tB,EAAKH,GAC9D,IAAI0a,EAAe,IAARva,EAAY4tB,EAAQ/tB,EAAIG,EAAM,GACzC48C,GAAY9iD,KAAKC,MAAM6zB,EAAM,GAAKrT,EAAK,GAAIqT,EAAM,GAAKrT,EAAK,IAC3D,IAAI0hE,EAAMruD,EAAM,IAAM,EAKtB,MAJmB,iBAARquD,IACP6V,EAAeh4F,KAAK4K,IAAIu3E,EAAK6V,GAC7BC,EAAej4F,KAAKqa,IAAI8nE,EAAK8V,IAE1B,CAACn1C,EAAUq/B,SAGzBz7E,QAAO,SAAU+Z,EAAMkhB,GACpB,MAAMu2D,EAAez3E,EAAKA,EAAK3e,OAAS,GAAG,GAE3C,OADA6/B,EAAK37B,SAAQC,GAAOA,EAAI,IAAMiyF,IACvBz3E,EAAK3Z,OAAO66B,MAGJ,IAAnBg2D,EAAQ71F,QAER61F,EAAQ9wF,KAAK8wF,EAAQ,IAEzB,MAAMx5F,EAAS45F,EAAU7oF,OACzB,IAAIipF,EAAgB,CAChB/rE,EAAGurE,EAAQ56F,KAAI,SAAUkJ,GACrB,OAAOA,EAAI,MAEfk8E,IAAKwV,EAAQ56F,KAAI,SAAUkJ,GACvB,OAAOA,EAAI,IAAM,KAErB9H,OAAQA,EACRkc,IAAK49E,EACLrtF,IAAKotF,GAGT,MAAMI,EAAuB,CACzBj6F,OAAQA,GAEgB,iBAAjBK,EAAKJ,SAAwBI,EAAKzB,IAAIqB,QAAQ8/C,YACrDk6C,EAAqBx1B,mBAAqBpkE,EAAKJ,QAAQwkE,oBAAsBpkE,EAAKzB,IAAIqB,QAAQ8/C,UAAU0kB,oBAEvF,IAAjBq1B,GAAuC,IAAjBD,GAAsB55F,EAAQi6F,wBACpDF,EAAgB,CACZr1D,IAAKtkC,EAAK4hC,gBAAgB,8BAGlC19B,EAAAA,EAAAA,OAAYy1F,EAAen2F,EAAAA,EAAAA,KAAAA,UAAAA,iBAAmCo2F,GAAuBh6F,GAEjFA,EAAQk6F,aAAe95F,EAAK+5F,4BACvB/5F,EAAK+5F,0BAA0BC,mCAKhCh6F,EAAK+5F,0BAA0BC,mCAAmC,GAAKL,GAJvE35F,EAAK+5F,0BAA0BE,YAAa,EAC5Cj6F,EAAK+5F,0BAA0BC,mCAAqC,GACpEh6F,EAAK+5F,0BAA0BC,mCAAmC3xF,KAAKsxF,KAO3EZ,aAA2Bt5F,EAAAA,IAAYG,EAAQs6F,eAxQ7B,SAAUx2F,EAASU,GAC7C,GAAIV,EAAS,CACT,MAAM/D,EAAS+D,EAAQhC,YACnB/B,GACAm4F,EAAsB/4E,IAAIpf,EAAOujB,WAAY9e,IAqQ7C+1F,CAAsBpB,EAAiBY,GAG3CT,EAAcS,IAGZn5D,QAAaxgC,EAAKw/C,mBAKxB,GAHI5/C,EAAQw6F,mBACRt9C,EAAOk8C,EAAOp5F,GAEdA,EAAQi6F,sBAER,YADA1b,GAAMA,EAAG32B,WAAW6P,IAIxB,MAAMgjC,EAAYv2D,KAAKC,MACvB/jC,EAAKs6F,cAAgBD,EACrB,MAAME,EAA2B,CAC7BpzF,IAAKnH,EAAKzB,IAAI8I,UAGdjI,OAAOqB,UAAUC,eAAeC,KAAK6/B,EAAK5gC,QAAS,gBACnD26F,EAAyBn2C,WAAa5jB,EAAK5gC,QAAQwkD,YAEvD,MAAMO,EAAevlD,OAAOqB,UAAUC,eAAeC,KAAK6/B,EAAK5gC,QAAS,gBAAkB4gC,EAAK5gC,QAAQ+kD,aAAe,EAClHA,EAAe,IACf41C,EAAyBn2C,WAAa,GAI1C,MAAMo2C,EAAyB,IAAIz5F,MAAMi4F,EAAM11F,QAE/C,GADAk3F,EAAuB9T,KAAK/hC,GACxBA,EAAe,EAAG,CAClB,MAAM81C,EAAgB,IAAI15F,MAAMi4F,EAAM11F,QACtC,IAAIgiD,EAAgB,EACpB0zC,EAAMxxF,SAAQ,CAACguB,EAAM9tB,KACjB,MACMgzF,EADK,IAAIzpF,EAAAA,EAASukB,GACA7kB,YACxB8pF,EAAc/yF,GAAOgzF,EACrBp1C,GAAiBo1C,KAErBF,EAAuBhzF,SAAQ,CAACmzF,EAAIjzF,EAAKH,KACrCA,EAAIG,GAAOlG,KAAKonD,MAAM+xC,EAAKF,EAAc/yF,GAAO49C,MAGxD,MAAMs1C,EAAoB5B,EAAMz6F,KAAI,CAACi3B,EAAM9tB,KACvC,MAAMmzF,EAAuBz7F,OAAOmD,OAAO,GAAIg4F,EAA0B,CACrE51C,aAAc61C,EAAuB9yF,KAEzC,OAAOm6C,EAAAA,EAAAA,YAAqBrsB,EAAMqlE,MAGhCC,EAAoBF,EAAkBr8F,KAAI,CAACw8F,EAAkBrzF,KAC/D,MAAMi2D,EAAmBv+D,OAAOmD,OAAO,GAAIg4F,EAA0B,CACjElwF,YAAa0wF,EACbpa,gBAAiB,SAAUqa,GACnBX,IAAcr6F,EAAKs6F,gBACnBM,EAAkBlzF,GAAOszF,EACzBl+C,EAAO89C,EAAmB,CACtBd,YAA6C,IAAhC16F,OAAOD,KAAKS,GAAS0D,OAClC42F,cAAet6F,EAAQs6F,kBAInC91C,WAAY,EACZO,aAAc,IAElB,OAAOnkB,EAAKszD,aAAan2B,MAG7B,UACU9+D,QAAQwiB,IAAIy5E,GACdl7F,EAAQ44B,UAAYt0B,EAAAA,EAAAA,WAAgBtE,EAAQ44B,WAC5C54B,EAAQ44B,WAEZ2lD,MAAAA,GAAAA,EAAI32B,WAAW6P,GAEnB,MAAOmc,GACHxzE,EAAKiuF,wBACL9P,MAAAA,GAAAA,EAAI32B,WAAW6P,KAIvB3a,EAASu+C,mBAAqBpwF,iBAC1B,MAAM7K,EAAOC,KAEP+L,EAAsB,CACxB3M,GAAIW,EAAK4mC,SACT36B,QAAS,QACTC,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,sBAC3Bx1B,IAAKpM,EAAK4hC,gBAAgB,uBAE9B10B,MAAO,CACHimE,IAAKnzE,EACLk7F,WAAYx+C,EAASy+C,uBACrBxQ,QAASjuC,EAAS0+C,sBAI1B,IAAIC,EAMJ,GAAIr7F,EAAKJ,QAAQ07F,UAAW,CACxB,IAAIjvF,EAAmBrM,EAAKzB,IAAI2G,mBAAmB,cAAgBlF,EAAKJ,QAAQ07F,UAAU,GAAGz7C,cAAgB7/C,EAAKJ,QAAQ07F,UAAUliE,UAAU,IAAI,GAC7I/sB,IACDA,QAAyBrM,EAAKzB,IAAI6M,WAAWpL,EAAKJ,QAAQ07F,YARrC,SAAUjvF,GACnCL,EAAoBO,SAAWF,EAAiBG,SAASC,MACzD4uF,EAAoBhvF,EAAiBjB,WAAW,eAAgBY,GAQhEuvF,CAAqBlvF,QAErBL,EAAoBW,IAAMC,SAASC,cAAc,OACjD7M,EAAKzB,IAAIoO,IAAIG,YAAYd,EAAoBW,KAC7C0uF,EAAoBr7F,EAAKzB,IAAI6M,WAAW,eAAgBY,GAG5D,MAAMe,QAAqBsuF,EAI3B,OAHAtuF,EAAa5B,OAASnL,EACtBA,EAAK+M,aAAeA,EACpB/M,EAAKw7F,sBACEzuF,GAGX2vC,EAASu8C,gBAAkBpuF,iBACvB,MAAM7K,EAAOC,KAIb,OAHKD,EAAKy7F,uBACNz7F,EAAKy7F,qBAAuBz7F,EAAKi7F,4BAExBj7F,EAAKy7F,sBAGtB/+C,EAASuxC,sBAAwB,WAC7B,MAAMjuF,EAAOC,KACTD,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAK+M,eACtC/M,EAAK+5F,0BAA4B,CAC7BnsE,EAAG,CAAC,GACJ+1D,IAAK,CAAC,GACNhkF,OAAQ,CAAC,EAAG,EAAG,GACf+kE,OAAQ,EACRC,SAAU,GAEd3kE,EAAK+M,aAAagkF,UAAU/wF,EAAK+5F,6BAIzCr9C,EAAS08C,uBAAyB,SAAUsC,GACxC,MAAM17F,EAAOC,KACRy7F,EAAY5B,cACb95F,EAAK+5F,0BAA4B2B,GAAe17F,EAAK+5F,2BAEzD/5F,EAAKi5F,kBAAkBt6F,MAAK,SAAUoO,GAC7BA,EAAaJ,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UACjC27F,EAAY5B,YACZ/sF,EAAa4uF,gBAAgB37F,EAAK+5F,2BAElChtF,EAAagkF,UAAU/wF,EAAK+5F,2BAE3BhtF,EAAayhF,eACdzhF,EAAa6uF,iBAM7Bl/C,EAASmyC,sBAAwB,WAChB5uF,KACRg5F,kBAAkBt6F,MAAK,SAAUoO,GAClCA,EAAaE,YAIrByvC,EAAS8+C,oBAAsB,WAC3B,MAAMx7F,EAAOC,KACbD,EAAK+M,aAAaihF,kBAAoB,SAAUtqF,GAC5C,MAAM0xF,EAAOn1F,KACTm1F,EAAKhwF,gBACLgwF,EAAKhwF,eAAelC,qBAAoB,GAE5CkyF,EAAKhwF,eAAiB1B,EAClBA,GACAA,EAAQR,qBAAoB,IAIpC,MAAM24F,EAAW77F,EAAK+M,aAAaE,MACnCjN,EAAK+M,aAAaE,MAAQ,WACtB,MAAMmoF,EAAOn1F,KACTm1F,EAAKhwF,gBACLgwF,EAAKhwF,eAAelC,qBAAoB,GAE5C24F,EAASl7F,KAAKy0F,KAItB14C,EAAS0+C,oBAAsB,SAAUj5D,GACrC,MAAMniC,EAAOC,KAOb,OANAD,EAAK+M,aAAa7M,KAAK47F,oBAAoB,CACvC13F,KAAM+9B,EACN19B,MAAOzE,EAAK+M,aAAa3H,gBAAkBpF,EAAK+M,aAAa3H,eAAeX,MAC5E9E,OAAQK,EAAK+5F,0BAA0Bp6F,SAGpCK,EAAK+M,aAAagvF,yBAAyB55D,IAGtDua,EAASy+C,uBAAyB,WAC9B,MAAMn7F,EAAOC,KACTD,EAAK+M,eACD/M,EAAK+M,aAAaG,OAASlN,EAAK+M,aAAaG,MAAMA,OACnDlN,EAAK+M,aAAaG,MAAMA,MAAMy9E,QAAQplF,OAE1CvF,EAAK+M,aAAa7M,KAAK87F,wBAjfnC,GAsfAx4F,EAAAA,EAAAA,QAAAA,UAAuBo0F,EACvB,W,udC1gBAp0F,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAAG,IAAAy4F,EAAA,IAAAx5F,QAE9B,MAAMy5F,UAAoBlxF,EAAAA,EAGtBtL,cACIG,SAASod,WAAWra,EAAA,KAAAq5F,EAAA,CAAAp5F,UAAA,EAAAC,MAHX,KAIT,MAAM9C,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKua,MAAQ,EAEbva,EAAKyiF,mBAAoBrjF,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,sBAAuBI,EAAKJ,QAAQ6iF,kBAGpHjmC,eACI,MAAO,cAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,WACPJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAEhCyB,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,UAAU,SAAUu8C,GACtF,GAAyB,KAArBA,EAAIryC,OAAO5K,MAAc,CACzB,IAAIwS,EAAMyqC,EAAIryC,OAAO5K,MACK,IAAtBwS,EAAIrM,QAAQ,QACZqM,EAAMhD,SAASN,SAAWsD,GAE9BtV,EAAK2M,IAAIsL,cAAc,SAASnV,MAAQwS,EACxCyqC,EAAIryC,OAAO5K,MAAQ,QAO3B,MAUMq5F,EAAS,WACX,IAAI7mF,EAAMtV,EAAK2M,IAAIsL,cAAc,SAASnV,MAAM+mB,OAEhD,GAAKvU,EAGA,GAAK,4qCAA4qC4sB,KAAK5sB,GAIvrC,GAAItS,EAAAhD,EAAIi8F,GAAY7gF,MAAK,SAAUghF,GAC/B,OAAOA,EAAS5yF,QAAQ,mBAAoB,MAAQ8L,EAAI9L,QAAQ,mBAAoB,OAEpFhG,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,4BAE7B,CACD,IAAIwlB,EAAcpnD,EAAKzB,IAAI2G,mBAAmB,+BAA+B,GAC7EkiD,EAAYzK,OACZ,IAAIx/B,EAAS3Z,EAAAA,EAAAA,KAAAA,qBAA6B8R,GAErC,oBAAoB4sB,KAAK5sB,KAC1BA,EAAM,KAAOA,GAIjB,IAAI+mF,EAAiB,CAAC,UAAW,UAAW,WACxCC,EApCY,SAAUhnF,EAAK+mF,GACvC,IAAK,IAAIl6F,EAAI,EAAGA,EAAIk6F,EAAe/4F,OAAQnB,IACvCmT,EAAM9R,EAAAA,EAAAA,KAAAA,mBAA2B8R,EAAK+mF,EAAel6F,IAKzD,OAHImT,EAAI7L,MAAM,SACV6L,EAAMA,EAAIuR,OAAO,EAAGvR,EAAIhS,OAAS,IAE9BgS,EA6BwBinF,CAAoBjnF,EAAKlW,OAAOD,KAAKge,IAE5D,IAAK,IAAIlT,KAAQkT,EACTk/E,EAAepzF,QAAQgB,EAAKokB,gBAAkB,UACvClR,EAAOlT,GAItB,MAAMuyF,EAAYx8F,EAAK2M,IAAIsL,cAAc,UACzCukF,EAAUnvE,aAAa,OAAQ,UAC/BmvE,EAAUn/D,UAAW,EAWrB,IATA,IAAIzB,EAAM,CACNv8B,GAAI,UAAYW,EAAKua,MAErBnQ,KAAM,MACNkL,IAAKgnF,EACLppF,UAAU,EACV6X,YAAa5N,GAGRhb,EAAI,EAAGA,EAAInC,EAAKJ,QAAQ6lF,YAAYniF,OAAQnB,IAAK,CACtD,IAAIs6F,EAAWz8F,EAAKJ,QAAQ6lF,YAAYtjF,GAAGu6F,MAAMv3F,QAAO8E,GAAQA,EAAKqL,MAAQA,IAC7E,GAAImnF,EAASn5F,OAAS,GAAKm5F,EAAS,GAAGr/E,WAAY,CAC/Cwe,EAAIxe,WAAaq/E,EAAS,GAAGr/E,WAC7B,OAIR,IAAI3Y,EAAQ,IAAIuY,EAAAA,EAAO4e,GACvBn3B,EAAMgV,yBAAyB9a,MAAK,SAAUg+F,GAC1C,QAA8B,IAAnBA,EAAIC,WAIX,OAHAp5F,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,2BAC9BwlB,EAAY7hD,YACZi3F,EAAUn/D,UAAW,GAElB,CACH,IAAIw/D,EAAOF,EAAIC,WAAW/pF,MAC1B,GAAIgqF,EAAKna,MAA2C,IAApCma,EAAKna,IAAIz5E,QAAQjJ,EAAKzB,IAAI4I,OAAgBnH,EAAKyiF,kBAK3D,OAHAj/E,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,4BAC9BwlB,EAAY7hD,YACZi3F,EAAUn/D,UAAW,GAIzBr9B,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,qBAAmC,CAAE0E,MAAOA,IAC7DzE,EAAK2M,IAAIsL,cAAc,SAASnV,MAAQ,GAExC,MAAMg6F,EAAkB,GACxB98F,EAAK2M,IAAIhB,iBAAiB,iBAAiBnE,SAAQ,SAAUu1F,GACrDA,EAAOj6F,MAAM0G,QAAQ,mBAAoB,MAAQ8L,EAAI9L,QAAQ,mBAAoB,KACjFszF,EAAgBz0F,KAAK00F,MAG7B/8F,EAAKg9F,uBAAuBF,GAC5B95F,EAAAhD,EAAIi8F,GAAY5zF,KAAKiN,GACrB8xC,EAAY7hD,OACZi3F,EAAUn/D,UAAW,MAGzB,SAAUnnB,GACN1S,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,2BAA6B,MAAQ1rB,GACnEkxC,EAAY7hD,OACZi3F,EAAUn/D,UAAW,UAnFjC75B,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,2BAH9Bp+B,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,mBA4HtC,aAhCM5hC,EAAKsL,gBACXtL,EAAK2M,IAAIsL,cAAc,SAASpM,iBAAiB,SAAU7M,IACnDA,EAAE0J,KAA+B,UAAxB1J,EAAE0J,IAAI2lB,eAA6BruB,EAAK2M,IAAIsL,cAAc,SAASnV,MAAM+mB,OAAOvmB,OAAS,GAClG64F,OAIRn8F,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,yBAA0B24F,IAE/F59F,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,MAChB,GAAIA,IAAUA,EAAMuO,OAAQ,CACxB,IAAIsC,EAAM7Q,EAAM6Q,IAEhB,GAAIA,EAAK,CACLtV,EAAKi9F,+BAAiCj9F,EAAKi9F,gCAAkC,GACnB,IAAtDj9F,EAAK2M,IAAIhB,iBAAiB,iBAAiBrI,QAAgBgS,IAA6D,IAAtDtV,EAAKi9F,+BAA+Bh0F,QAAQqM,IAC9GtV,EAAKi9F,+BAA+B50F,KAAKiN,GAG7C,MAAMwnF,EAAkB,GACxB98F,EAAK2M,IAAIhB,iBAAiB,iBAAiBnE,SAAQ,SAAUu1F,GACrDA,EAAOj6F,MAAM0G,QAAQ,mBAAoB,MAAQ8L,EAAI9L,QAAQ,mBAAoB,KACjFszF,EAAgBz0F,KAAK00F,MAG7B/8F,EAAKg9F,uBAAuBF,GAC5B95F,EAAAhD,EAAIi8F,GAAY5zF,KAAKiN,QAK1BtV,EAGX6K,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAWh9C,EAAKJ,SAAS,WAC3DI,EAAKi9F,+BAAiCj9F,EAAKi9F,gCAAkC,GAE7Ej9F,EAAKi9F,+BAA+Bz1F,SAAQ,SAAU01F,GAClD,MAAMJ,EAAkB,GACxB98F,EAAK2M,IAAIhB,iBAAiB,iBAAiBnE,SAAQ,SAAUu1F,GACrDv5F,EAAAA,EAAAA,KAAAA,YAAoBu5F,EAAOj6F,SAAWU,EAAAA,EAAAA,KAAAA,YAAoB05F,IAC1DJ,EAAgBz0F,KAAK00F,MAI7B/8F,EAAKg9F,uBAAuBF,GAC5B95F,EAAAhD,EAAIi8F,GAAY5zF,KAAK60F,MAGzBl9F,EAAKi9F,+BAAiC,GAEd,mBAAbzkE,GACPA,QAQZwkE,uBAAuBp9F,GACnB,GAAIA,EAAQ0D,OAAS,EAAG,CACpB,MAAM65F,EAAiBv9F,EAAQ,GAC/Bu9F,EAAe9/D,UAAW,EAC1B8/D,EAAen/D,UAAUnjB,IAAI,iCAKzCrX,EAAAA,EAAAA,QAAAA,YAAyB04F,EACzB,W,m1BCxNA14F,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAAG,IAAA45F,EAAA,IAAA36F,QAAA46F,EAAA,IAAA56F,QAAA66F,EAAA,IAAA76F,QAAA86F,EAAA,IAAA96F,QAAA+6F,EAAA,IAAA9qF,QAAA+qF,EAAA,IAAA/qF,QAAAgrF,EAAA,IAAAhrF,QAAAirF,EAAA,IAAAjrF,QAE9B,MAAMkrF,UAA8B5yF,EAAAA,EAMhCtL,cACIG,SAASod,WAAWnK,EAAA,KAAA6qF,GAAA7qF,EAAA,KAAA4qF,GAAA5qF,EAAA,KAAA2qF,GAAA3qF,EAAA,KAAA0qF,GAAA56F,EAAA,KAAAw6F,EAAA,CAAAv6F,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAy6F,EAAA,CAAAx6F,UAAA,EAAAC,OALP,IAAKF,EAAA,KAAA06F,EAAA,CAAAz6F,UAAA,EAAAC,MACG,OAAIF,EAAA,KAAA26F,EAAA,CAAA16F,UAAA,EAAAC,MAClB,CAAC,MAAiB,MAAO,UAAW,MAAO,MAAO,MAAO,MAAO,UAIvE,MAAM9C,EAAOC,KACbD,EAAKwK,MAAQxK,EAAKJ,QAAQ4K,MAC1BxK,EAAK8mE,SAAW9mE,EAAKJ,QAAQknE,UAAY,GAEzC9mE,EAAKssF,WAAa,CACdC,mBAAoB,IAAMvsF,EAAKu8C,MAAQ,6BACvCshD,oBAAqB,IAAM79F,EAAKu8C,MAAQ,MACxCuhD,oBAAsB,0BAAyB99F,EAAKX,sBACpD0+F,uBAAwB,IAAM/9F,EAAKu8C,MAAQ,SAE/Cv8C,EAAK+O,SAAW,GAChB/O,EAAKJ,QAAU,GAGnB48C,eACI,MAAO,gBAGX3xC,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GAEH,OAAO34B,MAAMm9C,WAAWr8C,KADXV,KACsB,CAAE+9E,UADxB/9E,KACwCZ,IAAMm5B,GAoE/DnrB,KAAK2wF,EAAmBp+F,GACpB,MAAMI,EAAOC,KAEbD,EAAKiN,QAELjN,EAAKi+F,YAAYD,GACjBp+F,EAAUA,GAAW,GAQrB,MAAMs+F,GAPNt+F,EAAUR,OAAOmD,OAAO,GAAI,CACxBy7E,UAAWh+E,EAAKX,GAChBynE,SAAU9mE,EAAK8mE,SACfq3B,WAAYn+F,EAAK4mC,SACjB8Y,UAAW9/C,EAAQ8/C,WACpB9/C,IAE6Bs+F,gBAAkBt+F,EAAQs+F,gBAAgBtzF,QAAU,GAChFkL,EAAC9V,EAAIw9F,EAAAY,GAAAz9F,KAAJX,EAAgBA,IAAS8V,EAAC9V,EAAIy9F,EAAAY,GAAA19F,KAAJX,EAAeA,KAAK8V,EAAI9V,EAAI09F,EAAAY,GAAA39F,KAAJX,EAAkBA,IACrEk+F,EAAgB71F,KAAKtI,EAAAA,EAAAA,OAAAA,KAEzBH,EAAQ2+F,QAAUv7F,EAAAhD,EAAIu9F,GAAUp4F,QAAO8E,GAAQi0F,EAAgBj1F,QAAQgB,GAAQ,IAC/EjK,EAAKw+F,WAAW5+F,GAEhBI,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAO38C,GAAS,SAAU+J,GAChD,MAAML,EAAWsD,SAASC,cAAc,YACxCvD,EAAS8D,UAAYzD,EACrB3J,EAAKkuE,MAAQ5kE,EAAS2C,QAAU3C,EAAS2C,QAAQkL,WAAa7N,EAAS6N,WACvEvK,SAAS+0B,KAAK70B,YAAY9M,EAAKkuE,OAE/B,MAAM4R,EAAY9/E,EAAK8/E,UAAY9/E,EAAKkuE,MAAMuwB,uBAAuB,iBAAiB,GACtF3e,EAAUj0E,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,uBAAuB,SAAUxE,GAE9G,IAAIolD,EAAaphD,EAAAhD,EAAIo9F,IAAAp6F,EAAsBhD,EAAIq9F,GAAkBx1F,WAAWi4E,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,uBAAyB,uBAAuBj7F,SAAW9C,EAAKJ,QAAQ8/C,WAAa1/C,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,SAASwkD,WAAa,EAExQ,MAAMs6C,EAAY7zF,MAAOkE,EAAU9K,KAG/B,IAAI88B,GAAS,EAYb,GAXI9tB,IAAWlT,EAAAA,EAAAA,OAAAA,SAAyBkE,EAAKgP,SAAWlT,EAAAA,EAAAA,OAAAA,KAAqBgP,EAASqM,MAAK,SAAUqf,GACjG,IAAK,IAAI7xB,KAAQ6xB,EAAKz2B,UAClB,GAAIy2B,EAAKr2B,KAAKwE,aAAiBxJ,OAC3B,OAAO,EAEf,OAAO,YAEDoE,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,yBAAyB3uB,OAAOA,GAAS,MAC3E,WACI8tB,GAAS,KAEjBA,EACA,OAGJ,MAAMo9C,EAAKn+E,EAAKzB,IAAIw1D,sBACdsD,EAAS8mB,GAAMA,EAAG92B,UAGxB7jD,EAAAA,EAAAA,KAAAA,aACAsS,EAAA9V,EAAI29F,EAAAgB,GAAAh+F,KAAJX,EAAmC+O,EAAU,CACrC0wC,iBAAgBz8C,EAAEhD,EAAIo9F,GACtB19C,UAAW18C,EAAAhD,EAAIo9F,GAAqBh+F,OAAOmD,OAAO,GAAI0B,EAAKy7C,WAAa1/C,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAAS,CAAEwkD,WAAYA,IAAgB,OACzJzlD,MACC,SAAUoQ,GACN,MAAM6vF,EAAgB36F,EAAKu0D,WACtBv0D,EAAKuG,MAAQvG,EAAKuG,MAAM6jB,cAAc7kB,QAAQ,KAAM,KAAO,YAChE,IAAIgvD,EAAWv0D,EAAKu0D,UAAYomC,EAAgB,IAAMp7F,EAAAA,EAAAA,KAAAA,kBAAyB,IAAIsgC,MAAO5gB,YAAY,GACtGljB,EAAKzB,IAAI04D,eAAeloD,EAAU,CAC9BypD,SAAUomC,EACV3rF,OAAQA,IACTtU,MAAKyF,IAEJ,OADAo0D,EAAWA,GAAYh1D,EAAAA,EAAAA,SACfyP,GACJ,KAAKlT,EAAAA,EAAAA,OAAAA,UACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAW,OAAQp0D,GACxC,MACJ,KAAKrE,EAAAA,EAAAA,OAAAA,WACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAW,QAAS,iCAAkCp0D,GAC3E,MACJ,KAAKrE,EAAAA,EAAAA,OAAAA,IACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAW,OAAQp0D,GACxC,MACJ,QAAS,CACL,MAAMwvB,EAAW7zB,EAAAA,EAAAA,SAAgBH,EAAQqT,QACzCzP,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAW,IAAMvlD,EAAOob,cAAeuF,EAAUxvB,GACtE,cAKhB,SAAU8R,GACNlW,EAAKqN,KAAK0B,EAAU9K,GAChBT,EAAAA,EAAAA,KAAAA,WAAqB0S,EAAM0H,UAAYpa,EAAAA,EAAAA,KAAAA,UAAAA,OAAAA,4BACvCA,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,2CAGlCp+B,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,uBAEpCmsB,SAAQ,WACNowB,GAAMA,EAAG32B,WAAW6P,OAI1BpkD,EAASjU,EAAE0O,OAAO4wC,QAAQrrC,OAC5BA,IAAWlT,EAAAA,EAAAA,OAAAA,KACX+V,EAAI9V,EAAI09F,EAAAY,GAAA39F,KAAJX,GACAwD,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,6BAA6B,WACzD88D,EAAU1+F,EAAK6+F,cAAc15F,QAAO,SAAUzB,GAC1C,QAASA,aAAmBpB,EAAAA,GAAcoB,aAAmBwM,EAAAA,MAC7DlQ,EAAK8+F,iBAQjBJ,EAAU1+F,EAAK6+F,cAAe7+F,EAAK8+F,iBAIvC,CAAE7wF,SAAS,IAEf,MAAM8wF,EAAqBjf,EAAU7nE,cAAcjY,EAAKssF,WAAWuR,qBAC7DmB,EAAoBlf,EAAU7nE,cAAcjY,EAAKssF,WAAWC,oBAE9D3sF,EAAQ8/C,YACRz8C,EAAAjD,EAAIo9F,EAAqBx9F,EAAQ8/C,UAAU7f,QAAUjgC,EAAQ8/C,UAAU7f,QAAO78B,EAAGhD,EAAIo9F,IAErF4B,EAAkBn/D,QAAO78B,EAAGhD,EAAIo9F,GAE5B2B,IACA/7F,EAAIhD,EAAIo9F,GACJ2B,EAAmB/gE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE/Bg/F,EAAmB/gE,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACvCg/F,EAAmB/gE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAIrCiD,EAAAhD,EAAIo9F,KAAuBtnF,EAAA9V,EAAIy9F,EAAAY,GAAA19F,KAAJX,IAAI8V,EAAgB9V,EAAI09F,EAAAY,GAAA39F,KAAJX,KAAwBJ,EAAQ8/C,UAAU0E,WACzF26C,EAAmB/gE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE/Bg/F,EAAmB/gE,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACvCg/F,EAAmB/gE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAIzC+/E,EAAUn0E,iBAAiB3L,EAAKssF,WAAWwR,qBAAqB96F,EAAAhD,EAAIq9F,GAAkB,EAAI,GAAGx9D,SAAU,EACvG78B,EAAIhD,EAAIq9F,KACJvd,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,wBAAwB//D,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACjF+/E,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,uBAAyB,UAAUj7F,MAAQE,EAAAhD,EAAIs9F,IAA2Bxd,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,uBAAyB,UAAUj7F,SAKzMg9E,EAAUj0E,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWC,oBAAoB,SAAU3+E,GAGjH3K,EAAAjD,EAAIo9F,GAAqBp6F,EAAChD,EAAIo9F,IAE1B2B,IACA/7F,EAAIhD,EAAIo9F,GACJ2B,EAAmB/gE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE/Bg/F,EAAmB/gE,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACvCg/F,EAAmB/gE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAIrCiD,EAAAhD,EAAIo9F,KAAuBtnF,EAAA9V,EAAIy9F,EAAAY,GAAA19F,KAAJX,IAAI8V,EAAgB9V,EAAI09F,EAAAY,GAAA39F,KAAJX,IAC/C++F,EAAmB/gE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE/Bg/F,EAAmB/gE,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACvCg/F,EAAmB/gE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aAMjD+/E,EAAUj0E,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWwR,qBAAqB,SAAUlwF,GACpGkyE,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,wBAChD//D,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QACvBkD,EAAAjD,EAAIq9F,GAAkBr6F,EAAChD,EAAIq9F,IAC3Br6F,EAAIhD,EAAIq9F,KAAiBvd,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,uBAAyB,UAAUj7F,MAAQE,EAAAhD,EAAIs9F,IAA2Bxd,EAAU7nE,cAAcjY,EAAKssF,WAAWyR,uBAAyB,UAAUj7F,WAE1Ng9E,EAAUj0E,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWyR,wBAAwB,SAAU/+F,GACrHiE,EAAAjD,EAAIs9F,EAA0Bt+F,EAAE0O,OAAO5K,WAG3C,IAAIm8F,EAAe,CACfpxB,cAAe,WACX7tE,EAAKkuE,MAAMzR,cAAcC,YAAY18D,EAAKkuE,SAI9CtuE,EAAQouE,eACRixB,EAAajxB,aAAepuE,EAAQouE,cAGxCxqE,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKkuE,MAAO+wB,MAItChyF,MAAMu0E,GACF,MAAMxhF,EAAOC,KAETD,EAAKkuE,OAASluE,EAAKkuE,MAAMzR,gBACzBv4D,EAAAA,EAAAA,aACAlE,EAAKkuE,MAAMzR,cAAcC,YAAY18D,EAAKkuE,QAIlD+vB,YAAYlvF,GACR9O,KAAK8O,SAAWhO,MAAMC,QAAQ+N,GAAYA,EAAW,CAACA,GAG1D8vF,cACI,OAAO5+F,KAAK8O,SAGhByvF,WAAW5+F,GACPK,KAAKL,QAAUR,OAAOmD,OAAOtC,KAAKL,QAASA,GAG/Ck/F,aACI,OAAO7+F,KAAKL,SAEnB,SAAAw+F,IAjSO,OAAOn+F,KAAK4+F,cAAczjF,MAAK1X,GAAWA,aAAmBiM,EAAAA,GACzDjM,aAAmBoM,EAAAA,IAC1B,SAAAuuF,IAGG,OAAOp+F,KAAK4+F,cAAczjF,MAAK1X,GAAWA,aAAmBuN,EAAAA,GACzDvN,aAAmBmN,EAAAA,IAC1B,SAAAytF,IAGG,OAAOr+F,KAAK4+F,cAAczjF,MAAK1X,GAAWA,aAAmBpB,EAAAA,GACzDoB,aAAmBwM,EAAAA,IAC1B,eAAAyuF,EAEmC5vF,EAAUnP,GAC1C,MAAMI,EAAOC,KAEPi/F,EAAc,SAAUzkE,GAC1B,MAAM51B,EAAS41B,EAAKhwB,QAEpB,OADA5F,EAAOxF,GAAKo7B,EAAKp7B,GACVwF,GAGX,KAPAjF,EAAUA,GAAW,IAOR6/C,iBACT,OAAO1wC,EAASxQ,KAAI,SAAUk8B,GAC1B,GAAIA,EAAK8gC,oBAAsB,EAAG,CAC9B,MAAMvsD,EAAIkwF,EAAYzkE,GAItB,OAHAzrB,EAAE3P,GAAKo7B,EAAKp7B,GACZ2P,EAAEvK,MAAQg2B,EAAKh2B,MACfuK,EAAEzG,UACKyG,EAEX,OAAOyrB,KAIf,IAAI0kE,EAAkBv/F,EAAQ8/C,WAAa9/C,EAAQ8/C,UAAU0E,WAEzDg7C,EAAyBD,EAAkBpwF,EAASxQ,KAAIyQ,GAAKkwF,EAAYlwF,KAAMD,EAASxQ,KAAIyQ,GACrFA,EAAEpN,iBAAiBoT,OAAM3P,IAAMA,EAAE,KAAM65F,EAAYlwF,GAAK,OAGnE,GAAImwF,GAAmBC,EAAuBhkF,MAAKpM,GAAW,OAANA,IAAa,CACjE,MAAMqwF,EAAc,CAChBl4F,IAAKnH,EAAKzB,IAAI8I,SACd0H,SAAUqwF,EACVE,iBAAkB1/F,EAAQ8/C,WAAa9/C,EAAQ8/C,UAAU4/C,iBACzDl7C,WAAYxkD,EAAQ8/C,UAAU0E,WAC9BO,aAAc/kD,EAAQ8/C,UAAUiF,cAAgB,GAE9C46C,QAA2Bv/F,EAAKzB,IAAImhD,WAAa,IAAIl8C,EAAAA,EAAAA,KAAAA,UAA+C,kBAAtB5D,EAAQ8/C,UAA0B,GAAK9/C,EAAQ8/C,YAAY53C,YAAYu3F,GAO3J,OALAE,EAAkB/3F,SAAQ,CAACwH,EAAG+a,KACrB/a,IACDuwF,EAAkBx1E,GAAShb,EAASgb,OAGrCw1E,EAGP,OAAOxwF,EAuOnBvL,EAAAA,EAAAA,QAAAA,sBAAmCo6F,EACnC,W,uHChTAp6F,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMg8F,EAAc,WAChB,IAAIx/F,EAAOC,KACXw/F,EAAAA,QAAAA,MAAyBx/F,KAAMgd,WAC/Bjd,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,YAA4BxD,GAE5CD,EAAAA,EAAAA,QAAAA,SAA0B,cAC1BA,EAAAA,EAAAA,QAAAA,UAA2B,gBAK/B,IAEQ28C,EAEAgjD,EANRl8F,EAAAA,EAAAA,QAAWg8F,EAAaC,EAAAA,SAMhBC,EAAmB,SAASA,EAAiB9jE,EAAKf,GAClD,IAAIh2B,EACJ,GAAI9D,MAAMC,QAAQ46B,GAEd,IAAK,IAAIz5B,EAAI,EAAG+I,GADhBrG,EAAS+2B,EAAIhxB,SACgBtH,OAAQnB,EAAI+I,EAAK/I,IAC1C0C,EAAO1C,GAAKu9F,EAAiB76F,EAAO1C,SAIxC0C,EADoB,iBAAR+2B,EACHp6B,KAAKirC,MAAM7Q,EAAIyqD,QAAQxrD,IAGvBe,EAEb,OAAO/2B,IAhBP63C,EAAW8iD,EAAY/+F,WAmBlBqlC,SAAWj7B,eAAgBtM,GAChC,MACMyvD,QAAYyxC,EAAAA,QAAAA,UAAAA,SAAAA,KADLx/F,KACsD1B,GAGnE,OADAqO,SAASC,cAAc,OAAOC,YAHjB7M,KAGkC0M,KACxCqhD,GAGXtR,EAASlkB,SAAW,SAAU74B,EAAQggG,GAClC,MAAM3/F,EAAOC,KAGb,OADAD,EAAK4/F,UAAW,EACT,IAAI/gG,SAAQ,SAAUC,EAASk1B,GAClC,MAAM2/D,EAAgB3zF,EAAKw/C,mBAU3B,GATAm0C,EAAch1F,MAAK,SAAU6hC,GACrBA,IACAxgC,EAAK6/F,iBAAmBr/D,EAAKszD,aAAa,CACtC3sF,IAAKnH,EAAKzB,IAAI4I,IACdkD,YAAa,CAAC1K,SAKtBK,EAAKzB,KAAOyB,EAAK8/F,YAAa,CAE9B,IAAIt1F,EAAQxK,EAAK4hC,gBAAgB,eAC7Bm+D,EAAgBv8F,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKzB,IAAIqB,QAAQyG,OAAOq1B,OAAQ17B,EAAKggG,YAAa,CAAEx1F,MAAOA,EAAOuU,IAAKvU,EAAOlG,YAAY,IACjItE,EAAK8/F,YAAY1nE,gBACjBp4B,EAAKw4F,mBAAqB,KAC1Bx4F,EAAKigG,cAAgB,KACrBjgG,EAAK8/F,YAAY7pE,UAAUt2B,EAAQogG,GAAephG,MAAK,SAAwB+8B,GAY3E17B,EAAKzB,IAAI20D,cAAclzD,EAAK8/F,aAC5B9/F,EAAKigG,cAAgBvkE,EAErBi4D,EAAch1F,MAAK,SAAU6hC,GACzBxgC,EAAKkgG,cAAc,CAAEvgG,OAAQ+7B,EAAOn7B,SAAUk/C,iBAAkBjf,EAAM2/D,SAAS,IAAQ,WACnFngG,EAAKogG,uBAKb,IADA,IAAIC,GAAgB,EACXl+F,EAAI,EAAGA,EAAInC,EAAKzB,IAAI4rC,WAAW7mC,OAAQnB,IAAK,CACjD,IAAIsC,EAAQzE,EAAKzB,IAAI4rC,WAAWhoC,GAChC,GAAIsC,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KACX0E,EAAM6O,iBAAmB7O,EAAMyW,MAAM5X,OAAS,EAAG,CACjD+8F,GAAgB,EAChB,OAIZrgG,EAAKsgG,gBAAkBtgG,EAAKzB,IAAImkB,gBAC5B29E,EACArgG,EAAKE,KAAKqgG,eAAe5gG,EAAQK,EAAKsgG,iBAAiB3hG,MAAK,IAAMG,MAIlEooD,YAAW,WACPlnD,EAAKwgG,iBAAiB,CAAE7gG,OAAQA,IAChCb,eAMZA,QAKZ49C,EAAS+jD,YAAc,SAAUt7F,GAE7B,OADalF,KACDu4B,SAASrzB,EAAO5D,mBAGhCm7C,EAAS8jD,iBAAmB,SAAU5gG,GAClC,MAAMI,EAAOC,KAGb,GADAw/F,EAAAA,QAAAA,UAAAA,iBAAAA,KAAmDz/F,EAAMJ,GACrDI,EAAKigG,cAAe,CACpB,IAAIriC,EAAWh+D,EAAQg+D,SAGvB,GAAIA,EACA,IAAK,IAAIz7D,EAAI,EAAGA,EAAIy7D,EAASt6D,OAAQnB,IAAK,CAEtC,IADA,IAAI+uB,EAAU0sC,EAASz7D,GACdoV,EAAI,EAAGA,EAAI2Z,EAAQlO,OAAO1f,OAAQiU,IAClC2Z,EAAQlO,OAAOzL,GAAGxI,SAASzL,SAC5B4tB,EAAQlO,OAAOha,OAAOuO,EAAG,GACzBA,GAAQ,GAGX2Z,EAAQlO,OAAO1f,SAChBs6D,EAAS50D,OAAO7G,EAAG,GACnBA,GAAQ,GAKpBnC,EAAKgpB,KAAK03E,eAAiB9gG,EAAQ8gG,eAE/B1gG,EAAK6/F,mBACLjgG,EAAQ6/C,kBAAmB,GAE/Bz/C,EAAKkgG,cAActgG,GAAS,WAGxB,GAFAI,EAAK2gG,cAED3gG,EAAK4gG,kBAAmB,CAIxB,IAAIC,EAHJ7gG,EAAK2M,IAAIhB,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,gBAAgB/0C,SAAQ,SAAU22E,GAC7EA,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YAIrB,IADA,IAAI+gG,EAAa9gG,EAAK4gG,kBACbz+F,EAAI,EAAGgiB,EAAKnkB,EAAKgpB,KAAK40C,SAASt6D,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACzD,IAAI+uB,EAAUlxB,EAAKgpB,KAAK40C,SAASz7D,GACjC,GAAI+uB,EAAQ+tC,UAAU7jD,MAAK2lF,GAAMA,EAAGzrF,MAAQwrF,EAAWn5D,IAAI,CACvD,IAAK,IAAIpwB,EAAI,EAAGypF,EAAK9vE,EAAQlO,OAAO1f,OAAQiU,EAAIypF,EAAIzpF,IAAK,CACrD,IAAI9S,EAAQysB,EAAQlO,OAAOzL,GAC3B,GAAI9S,EAAMqE,OAASg4F,EAAW9/E,EAAG,CAC7B,IAAK,IAAIlJ,EAAI,EAAGC,EAAKtT,EAAMsK,SAASzL,OAAQwU,EAAIC,EAAID,IAAK,CACrD,IAAIpU,EAAUe,EAAMsK,SAAS+I,GAC7B,GAAIpU,EAAQrE,KAAOyhG,EAAW9xF,EAAG,CAC7B6xF,EAAgBn9F,EAChB,IAAIgrD,EAAOuyC,GAAAA,CAAIzvE,KAAK0vE,UAAU,CAC1B98F,KAAMV,EAAQM,UACdzD,SAAUm/F,EAAiBh8F,EAAQnD,SAAUR,EAAAA,EAAAA,qBAE7C+gG,EAAW73C,IAAMyF,GACjBlrD,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,iCAElC,OAGR,OAGR,OAGJi/D,IACA7gG,EAAKw4F,mBAAqBqI,EAC1B7gG,EAAKzB,IAAI8rD,SAAS,CACdhrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNyK,MAAOxK,EAAK4hC,gBAAgB,OAC5ByjD,MAAOrlF,EACPsvB,SAAS,IACV3wB,MAAK,SAAU8F,GACdzE,EAAKmhG,mBAAqB18F,EAC1BzE,EAAK8/F,YAAY1nE,gBACjBp4B,EAAKigG,cAAgB,KACrBx7F,EAAMozB,WAAWgpE,GACjB7gG,EAAKzB,IAAI6uD,eAAe,CAACyzC,eAG1B7gG,EAAK4gG,uBAGZ5gG,EAAKogG,iBAGTpgG,EAAK2M,IAAIhB,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,uBAAyBv8C,EAAKu8C,MAAQ,eAAe/0C,SAAQ,SAAUglC,GAClHA,EAAM3gC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACjDA,EAAE+uE,oBACH,CAAE9/D,SAAS,YAM9ByuC,EAAS0kD,uBAAyB,WAC9B,MAAMphG,EAAOC,KAGb,GAFAw/F,EAAAA,QAAAA,UAAAA,uBAAAA,KAAyDz/F,GAErDA,EAAK6/F,iBAAkB,CACvB,MAAM7xC,EAAMhuD,EAAKqhG,oBACjBrhG,EAAKshG,mBAAmB31F,iBAAkB,IAAG3L,EAAKu8C,eAAev8C,EAAKu8C,gBAAgB/0C,SAAQC,GAAOA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACvHC,EAAK6/F,iBAAiBlhG,MAAK,SAAU4iG,GACjC,GAAIvzC,EAAI5oD,gBAAJ4oD,MAAsBuzC,GAAAA,EAAiBj+F,OAAQ,CAC/C,MAAMk+F,EAAgBxzC,EAAI5oD,eAAe7E,SACnCkhG,EAAYF,EAAgB,GAClC,GAAIC,EAAc,KAAOC,EAAU,IAAMD,EAAc,KAAOC,EAAU,GAAI,CACxE,MAAMrJ,EAAkBmJ,EAAgBj+F,OAASi+F,EAAgB,GAAG32F,MAAM,GAAK,KAC/E5K,EAAK0hG,uBAAuBtJ,QAMrB,IAAI7qF,gBAAeC,IACtC,IAAK,IAAIC,KAASD,EACdC,EAAMC,OAAO/B,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,uBAAyBv8C,EAAKu8C,MAAQ,oBAAsBv8C,EAAKu8C,MAAQ,qBAAqB/0C,SAAQ,SAAUm6F,GAC/JA,EAAG91F,iBAAiB,cAAc,SAAU+B,GACpC3N,KAAK4N,YAAc5N,KAAK6N,YACxB7N,KAAKuK,MAAQvK,KAAK8N,WAAW9D,KAAsB,OAAjBhK,KAAKk2E,QAAmB,EAAI,GAAGnoE,YAGjE/N,KAAKuK,MAAQ,KAElB,CAAEyD,SAAS,UAIXC,QAAQlO,EAAKshG,qBAQhC5kD,EAASwjD,cAAgB,SAAUtgG,EAAS44B,GACxC,MAAMx4B,EAAOC,KACb,GAAID,EAAKigG,cAAe,CACpB,MAAMuB,EAAgBxhG,EAAKigG,cAAc1/F,SACrCX,EAAQD,QAAU6hG,EAAc,KAAO5hG,EAAQD,OAAO,IAAM6hG,EAAc,KAAO5hG,EAAQD,OAAO,KAChGC,EAAQm7B,MAAQ/6B,EAAKzB,IAAI2B,KAAK66B,QAC1Bn7B,EAAQD,SACRC,EAAQuH,IAAMnH,EAAKzB,IAAI4I,IACvBvH,EAAQD,OAASC,EAAQD,OAAOpB,KAAI,SAAUuE,GAC1C,MAAM+3B,EAAYj7B,EAAQm7B,MAAQh7B,EAAAA,EAAAA,iBAA0BA,EAAAA,EAAAA,gBAC5D,OAAOyD,EAAAA,EAAAA,KAAAA,YAAoBV,EAAO+3B,OAG1C76B,EAAKg9C,WAAWp9C,EAAS44B,MAKrCkkB,EAASglD,uBAAyB,SAAU5+F,GACxC,MAAM9C,EAAOC,KACb,IAAI2hG,EAAQC,EACR9gG,MAAMC,QAAQ8B,IACd8+F,EAAS9+F,EAAM,GACf++F,EAAS/+F,EAAMQ,OAAS,EAAIR,EAAM,GAAK,OAGvC8+F,EAAS9+F,EACT++F,EAAS,MAEb,MAAMx4F,EAASrJ,EAAKzB,IAAIqB,QAAQyJ,QAAU7C,EAAAA,EAAAA,OAC1C,IAAIs7F,EAA6B,OAAXF,EAAkB,IAAMp+F,EAAAA,EAAAA,KAAAA,aAAqBhC,KAAKirC,MAAMm1D,GAASv4F,GAAU,KAC7F04F,EAAeF,EAASA,EAAO3+B,eAAe75D,EAAQ,CAAEi9D,sBAAuB,IAAO,KAAO,IACjG,MAAM07B,EAAmBhiG,EAAKshG,mBAAmBrpF,cAAe,IAAGjY,EAAKu8C,cAClE0lD,EAAgBjiG,EAAKshG,mBAAmBrpF,cAAe,IAAGjY,EAAKu8C,gBACjEylD,GAAoBC,IACpBD,EAAiBhkE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAkC,OAAX6hG,GACzDK,EAAcjkE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwB8hG,GACvDG,EAAiB/pF,cAAe,IAAGjY,EAAKu8C,oBAAoBnvC,UAAY00F,EACxEG,EAAchqF,cAAe,IAAGjY,EAAKu8C,oBAAoBnvC,UAAY20F,IAI7ErlD,EAASwlD,kBAAoB,SAAUpB,GAEnC,MAAM9gG,EAAOC,KACb,GAAI6gG,EAAY,CAEZ,GAEc,IAFV9gG,EAAKzB,IAAI4rC,WAAWhlC,QAAO,SAAU8E,EAAM+4D,GAC3C,OAAO/4D,EAAKG,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBkK,EAAKqL,MAAQwrF,EAAWn5D,GAAK19B,EAAKyW,2BAA2BzX,QAAQ63F,EAAW9/E,IAAM,KACpI1d,OAEC,YADAE,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,yBAA0B7hC,EAAAA,EAAAA,aAAAA,OAG5DC,EAAK4gG,kBAAoBE,EAEzB,MAAMnhG,EAAS,EAAE,KAAM,KACvBK,EAAKmiG,cAAc,CAAErsC,GAAIn2D,IAEzBK,EAAK8/F,YAAY1nE,gBACjBp4B,EAAKigG,cAAgB,KACrBjgG,EAAK8/F,YAAY7pE,UAAUt2B,GAAQhB,MAAK,SAAU+8B,GAC9C17B,EAAKigG,cAAgBvkE,EACrB17B,EAAKE,KAAKqgG,eAAeO,EAAWhrC,GAAIgrC,EAAWvsF,EAAG,CAClDiW,WAAYs2E,EAAWn5D,EACvB3hB,UAAW86E,EAAW9/E,EACtBmpE,UAAW2W,EAAW9xF,SAMtC0tC,EAAS0lD,YAAc,WACnB,MACMv9F,EAAS46F,EAAAA,QAAAA,UAAAA,YAAAA,KADFx/F,MAGb,OADA4E,EAAO6Z,IAFMze,KAEKqgG,gBACXz7F,GAGX63C,EAAS2lD,YAAc,SAAU76D,GAC7B,MAAMxnC,EAAOC,KACTunC,EAAMriC,QACNnF,EAAKzB,IAAIy4D,cAAcxvB,EAAM9oB,KACxB/f,MAAK,IAAM8gG,EAAAA,QAAAA,UAAAA,YAAAA,KAA8Cz/F,EAAMwnC,MAMhFhkC,EAAAA,EAAAA,QAAAA,YAAyBg8F,EACzB,W,2ICrXAh8F,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,MAAAA,MAAqBA,EAAAA,EAAAA,MAAAA,OAAsB,WAC3CA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,kBAAiCA,EAAAA,EAAAA,MAAAA,mBAAkC,uBACnEA,EAAAA,EAAAA,MAAAA,iBAAgC,sBAChCA,EAAAA,EAAAA,MAAAA,gBAA+B,qBAE/B,MAAM0/F,EAAqB,WACvB,MAAMz/F,EAAOC,KACb+gF,EAAAA,QAAAA,MAAYhhF,EAAMid,WAElBjd,EAAKssF,WAAa,CACdgW,UAAY,MAAKtiG,EAAKu8C,oBACtBgmD,kBAAoB,IAAGviG,EAAKu8C,oCAAoCv8C,EAAKu8C,qBACrEimD,gBAAkB,IAAGxiG,EAAKu8C,cAAcv8C,EAAKu8C,qBAC7CkmD,eAAiB,IAAGziG,EAAKu8C,cAAcv8C,EAAKu8C,qBAGhDv8C,EAAK0iG,aAAe,KACpB1iG,EAAK8/F,YAAc,KACnB9/F,EAAK2iG,eAAiB,KACtB3iG,EAAKigG,cAAgB,KACrBjgG,EAAKgpB,KAAO,KACZhpB,EAAK4iG,aAAe,GACpB5iG,EAAKiF,MAAQ,KACbjF,EAAK+M,aAAe,KACpB/M,EAAK6iG,iBAAmB,KACxB7iG,EAAKy8C,cAAe,EAEpBz8C,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WAC1C9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzBv8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,cAIvC,WAWI/4E,EAAAA,EAAAA,QAAWi8F,EAAoBze,EAAAA,SAC/Bx9E,EAAAA,EAAAA,IAAOi8F,EAAoBqD,EAAAA,SAE3B,IAAIpmD,EAAW+iD,EAAmBh/F,UAElCi8C,EAASH,MAAQ,eAEjBG,EAASqmD,cAAgB,aAEzBrmD,EAASsmD,gBAAkB,MAC3BtmD,EAASumD,qBAAuB,UAEhC,MAAMC,EAAe,WACjB,MAAMljG,EAAOC,KACPkjG,EAAOnjG,EAAKojG,gBACZC,EAAYF,EAAKlrF,cAAcjY,EAAKssF,WAAWiW,mBACrD,GAAIc,EAAW,CACXA,EAAUxjE,SAAU,EACpB,MAAMxmB,EAAOrZ,EAAK4hC,gBAAgB,4BAClCyhE,EAAUj2F,UAAYiM,EACtBgqF,EAAUh2E,aAAa,QAAShU,GAEpC8pF,EAAKlrF,cAAcjY,EAAKssF,WAAWkW,iBAAiBxkE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACrEojG,EAAKlrF,cAAcjY,EAAKssF,WAAWmW,gBAAgBzkE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAGlEujG,EAAkB,WACpB,MAAMtjG,EAAOC,KACPkjG,EAAOnjG,EAAKojG,gBACZC,EAAYF,EAAKlrF,cAAcjY,EAAKssF,WAAWiW,mBACrD,GAAIc,EAAW,CACXA,EAAUxjE,SAAU,EACpB,MAAMxmB,EAAOrZ,EAAK4hC,gBAAgB,uBAClCyhE,EAAUj2F,UAAYiM,EACtBgqF,EAAUh2E,aAAa,QAAShU,GAChC8pF,EAAKlrF,cAAcjY,EAAKssF,WAAWkW,iBAAiBxkE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClEojG,EAAKlrF,cAAcjY,EAAKssF,WAAWmW,gBAAgBzkE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAIzE28C,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAEPsjG,EAAuBviB,EAAAA,QAAAA,UAAAA,SAAAA,KAA8BhhF,EAAMzB,GA4GjE,OA3GAyB,EAAKwjG,gBAELjlG,EAAIqb,QAAO,WACP,MAAM6pF,EAAWllG,EAAI2G,mBAAmB,oBAAoB,GACxDu+F,GACAzjG,EAAKkiG,kBAAkBuB,EAASC,oBAEpC1jG,EAAK2jG,eAAe3jG,EAAKJ,QAAQ4vF,aAAejxF,EAAIsQ,sBAAwB9O,EAAAA,EAAAA,cAAAA,UAGhFxB,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAyB,IAAMA,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GAAG,IAAA4kG,EAC5E5jG,MAAAA,GAAwB,QAApB4jG,EAAJ5jG,EAAMw4F,0BAAkB,IAAAoL,GAAxBA,EAA0B1gG,qBAAoB,GAC1ClE,EAAE+L,UAAY/K,EAAKqhG,qBAAuBrhG,EAAK0iG,eAC3C1iG,EAAKw4F,qBAAuBx4F,EAAKJ,QAAQ8rC,uBACzC1rC,EAAK6jG,gBAAgB7jG,EAAKw4F,oBAC1Bx4F,EAAKw4F,mBAAqB,OAEzBx4F,EAAK4/F,UAAY5gG,EAAE0E,SACpB1D,EAAK8/F,YAAY/nE,cAAc/4B,EAAE0E,aAO5C4K,GAAGvO,EAAAA,EAAAA,MAAAA,MAAqB,IAAMA,EAAAA,EAAAA,MAAAA,UAAyB,IAAMA,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAC5F,MAAM+L,EAAU/L,EAAE+L,QACdA,EAAQ3F,iBAAmBpF,EAAKigG,gBAChCjgG,EAAKw4F,mBAAqBztF,EAAQ3F,gBAIlCpG,EAAE+L,QAAQI,SAAWnL,GACrBA,EAAK8jG,iBAAiB/4F,MAI7BuD,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAClCkoD,YAAW,WACPlnD,EAAKw4F,mBAAqBx5F,EAAE+L,QAAQ3F,iBACrC,OAENkJ,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,WAC1B,GAAIX,OAAOD,KAAKa,EAAK4iG,cAAct/F,OAAQ,CACvC,MAAMs6D,EAAW,GACjB59D,EAAKzB,IAAI4rC,WACJhlC,QAAO,SAAUV,GACd,OAAOA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,OAEzByH,SAAQ,SAAU/C,GACf,MAAMyW,EAAQ0iD,EAASn5D,EAAM6Q,MAAQ,GACrCsoD,EAASn5D,EAAM6Q,KAAO4F,EAAM5S,OAAO7D,EAAMic,+BAEjD,IAAIqjF,GAAkB,EACtB,IAAK,IAAIzuF,KAAOtV,EAAK4iG,aAAc,CAC/B,MAAMoB,EAAiBhkG,EAAK4iG,aAAattF,GACzC,GAAIlW,OAAOqB,UAAUC,eAAeC,KAAKi9D,EAAUtoD,GAAM,CACrD,MAAM4b,EAAU0sC,EAAStoD,GACzB,IAAK,IAAIxM,KAAQk7F,EAAgB,CAC7B,MAAMC,EAAeD,EAAel7F,GAChCooB,EAAQjoB,QAAQH,GAAQ,IACxBm7F,EAAar5F,QAAQpD,SAAQwH,GAAKhP,EAAK6jG,gBAAgB70F,KACvDi1F,EAAa3gG,OAAS,EACtBygG,GAAkB,QAIzB,CACD,IAAK,IAAIj7F,KAAQk7F,EAAgB,CACRA,EAAel7F,GACvB8B,QAAQpD,SAAQwH,GAAKhP,EAAK6jG,gBAAgB70F,KACvD+0F,GAAkB,SAEf/jG,EAAK4iG,aAAattF,IAG7ByuF,GACA/jG,EAAKkkG,mBAIhB51F,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAEtC,GAAIA,EAAEyF,QAAUzE,EAAK0iG,aACjB,IAAK,IAAIptF,KAAOtV,EAAK4iG,aAAc,CAC/B,MAAMoB,EAAiBhkG,EAAK4iG,aAAattF,GACzC,IAAK,IAAIxM,KAAQk7F,EAAgB,CAC7B,MAAMC,EAAeD,EAAel7F,GACpCk7F,EAAel7F,GAAQm7F,EAAa9+F,QAAO6J,GAAKA,IAAMhQ,EAAE0E,eAKvE4K,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAClCA,EAAEyF,QAAUzE,EAAK0iG,eACjB1iG,EAAK4iG,aAAe,OAG3Bt0F,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAU6N,GACnC5N,EAAKkkG,wBAGPX,EACFvjG,EAAKJ,QAAQukG,aACPnkG,EAAKokG,iBAERpkG,GAGX08C,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtByV,EAA4B,+BAC5B+Q,EAAwB,+BACxBC,EAAyB,+BACzBvmB,EAAwB,+BACxBia,EAAuB,+BACvBuM,EAAuB,+BACvBC,EAAuB,+BACvBC,EAAuB,6BACvBC,EAAuB,+BAGvBp7F,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkB+2C,GAA2B/kF,QACnEjF,EAAStJ,EAAKu8C,MAAQ,kBAAoB8nD,GAAuB91F,QACjEjF,EAAStJ,EAAKu8C,MAAQ,mBAAqB+nD,GAAwB/1F,QACnEjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEjF,EAAStJ,EAAKu8C,MAAQ,oBAAsBy7C,GAAsBzpF,QAClEjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBgoD,GAAsBh2F,QACpEjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBioD,GAAsBj2F,QACpEjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBkoD,GAAsBl2F,QACpEjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBmoD,GAAsBn2F,QACpEvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,WACd,MAAM98C,EAAOC,KAGb,OADAD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAChBC,EAAK+8C,qBAAqB/8C,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,CAC1E4hD,WAAYn+F,EAAK4mC,SACjB8Y,UAAW1/C,EAAKJ,QAAQ6/C,mBACzB,SAAU91C,GACT3J,EAAKu8E,WAAWnvE,UAAYzD,OAIpC+yC,EAAS8jD,iBAAmB,SAAU5gG,GAClC,MAAMI,EAAOC,KAGb,GAFAD,EAAK4/F,UAAW,EAEZ5/F,EAAKigG,gBACLjgG,EAAKgpB,KAAO,CAAE40C,SAAUh+D,EAAQg+D,UAC5B59D,EAAKJ,QAAQ8rC,sBAEb,IAAK,IAAIp2B,KAAOtV,EAAK4iG,aAAc,CAC/B,MAAM+B,GAAe3kG,EAAKgpB,KAAK40C,UAAY,IAAI/0D,MAAK8+B,GAAKA,EAAEryB,MAAQA,IACnE,GAAIqvF,EAAa,CACb,MAAMX,EAAiBhkG,EAAK4iG,aAAattF,GACzC,IAAK,IAAIxM,KAAQk7F,EAAgB,CAC7B,MAAMY,EAAYD,EAAY3hF,OAAOna,MAAKmY,GAAKA,EAAElY,OAASA,IAC1D,GAAI87F,EAAW,CACUZ,EAAel7F,GACvBtB,SAAQ,SAAU9D,GAC3B,MAAMrE,EAAKqE,EAAQxD,KAAK0D,QAClB8D,EAAMk9F,EAAU71F,SAAS+yD,WAAU9yD,GAAKA,EAAE9O,KAAK0D,UAAYvE,KACpD,IAATqI,GACAk9F,EAAU71F,SAAS/F,OAAOtB,EAAK,SAU1D9H,EAAQilG,cAKT7kG,EAAK8kG,uBACL9kG,EAAK6iG,iBAAmBjjG,EAAQilG,aAChC7kG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0ByD,EAAAA,EAAAA,KAAAA,OAAe,CAAEuH,QAAS/K,GAAQJ,MAN7EI,EAAK6iG,iBAAmB,EACxB7iG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAEgL,QAAS/K,MAShE08C,EAASqoD,cAAgB,SAAUnlG,GAC/B,MAAMI,EAAOC,KACU,MAAnBL,EAAQksB,QACR9rB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,6BAA8B,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,QAE9EC,EAAKwgG,iBAAiB,KAG1B9jD,EAASsjD,YAAc,CACnBl5B,SAAU/mE,EAAAA,EAAAA,QAAAA,MACV8R,OAAQ,CAAC,GAAK,IACd0gB,MAAO,GACPC,OAAQ,GACRwyE,SAAS,GAGbtoD,EAASinD,eAAiB94F,eAAgBqoB,GACtC,MAAMlzB,EAAOC,KAEb,GADAD,EAAKwvF,YAAct8D,EACXA,IACCnzB,EAAAA,EAAAA,cAAAA,oBACKC,EAAKilG,uBAGXjlG,EAAKwvF,YAAczvF,EAAAA,EAAAA,cAAAA,YACbC,EAAKklG,YAKvBxoD,EAASwoD,SAAWr6F,iBAChB,MAAM7K,EAAOC,KAYb,OAXKD,EAAKiF,QACNjF,EAAKiF,YAAcjF,EAAKzB,IAAI6M,WAAW,QAAS,CAC5CwiE,aAAa,EACbu3B,UAAWnlG,EAAKJ,QAAQulG,UACxBhB,MAAOnkG,EAAKJ,QAAQukG,QAExBnkG,EAAKiF,MAAMkG,OAASnL,EACpBA,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACtCgB,EAAKolG,YAAYpmG,OAGlBgB,EAAKiF,OAGhBy3C,EAASuoD,gBAAkBp6F,iBACvB,MAAM7K,EAAOC,KACb,IAAKD,EAAK+M,aAAc,CACpB,IAAIs4F,EACJ,MAAMr5F,EAAsB,CACxBC,QAAS,QACTC,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,uBAC3Bx1B,IAAKpM,EAAK4hC,gBAAgB,wBAE9BuiE,MAAOnkG,EAAKJ,QAAQukG,OAElBjwC,EAAYl0D,EAAKzB,IAAI2G,mBAAmB,+BAA+B,GACzEgvD,GACAloD,EAAoBO,SAAW2nD,EAAU1nD,SAASC,MAClD44F,EAAanxC,EAAU9oD,WAAW,eAAgBY,KAGlDA,EAAoBW,IAAMC,SAASC,cAAc,OACjD7M,EAAKzB,IAAIoO,IAAIG,YAAYd,EAAoBW,KAC7C04F,EAAarlG,EAAKzB,IAAI6M,WAAW,eAAgBY,IAErDhM,EAAK+M,mBAAqBs4F,EAC1BrlG,EAAK+M,aAAa5B,OAASnL,EAE/B,OAAOA,EAAK+M,cAGhB2vC,EAAS2kD,kBAAoB,WACzB,IAAIrhG,EAAOC,KACX,OAAQD,EAAKwvF,cACJzvF,EAAAA,EAAAA,cAAAA,cACMC,EAAK+M,aAEL/M,EAAKiF,OAIxBy3C,EAAS4kD,iBAAmB,SAAU1hG,GAClC,IAAII,EAAOC,KAEX,IADAL,EAAUA,GAAW,IACTmL,QACR,QAAQ,GACJ,KAAKvH,EAAAA,EAAAA,QAAAA,OAAoB5D,EAAQmL,mBAAmBvH,EAAAA,EAAAA,QAAAA,MAChD,OAAO5D,EAAQmL,QAAQM,sBAC3B,KAAK7H,EAAAA,EAAAA,QAAAA,cAA2B5D,EAAQmL,mBAAmBvH,EAAAA,EAAAA,QAAAA,aACvD,OAAO5D,EAAQmL,QAAQuC,mBAC3B,QACI,OAAO,KAGnB,OAAQtN,EAAKwvF,cACJzvF,EAAAA,EAAAA,cAAAA,cACMC,EAAK+M,aAAaO,mBAElBtN,EAAKiF,MAAMoG,uBAI9BqxC,EAAS0mD,cAAgB,WACrB,IAAIpjG,EAAOC,KACX,OAAQD,EAAKwvF,cACJzvF,EAAAA,EAAAA,cAAAA,cACMC,EAAK+M,aAAau4F,iBAElBtlG,EAAKiF,MAAMqgG,kBAI9B5oD,EAAS0jD,eAAiB,WACtB,IAAIpgG,EAAOC,KACX,MAAMwK,EAAQzK,EAAK2M,IAAI44F,WAAU,GAGjC,GAFA96F,EAAMuzB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACvBC,EAAKigG,cAAc77F,KAAOqG,EAAMouB,UACxB74B,EAAKwvF,cACJzvF,EAAAA,EAAAA,cAAAA,eACD,GAAIC,EAAK+M,aAAc,CAEqD,IAApE/M,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAA6BF,QACzDtD,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,cAAyBgE,SAAQ,SAAUnC,GAC/DA,EAAEC,aACFD,EAAE4H,WAMCjN,EAAKzB,IAAI2G,mBAAmB,2BACpCsC,SAAQ,SAAUnC,GACjBA,IAAMrF,EAAK+M,cAAgB1H,EAAED,iBAAmBC,EAAE6H,OAClD7H,EAAE4H,WAIVjN,EAAK+M,aAAa3H,eAAiBpF,EAAKigG,cACxCjgG,EAAK+M,aAAaM,KAAKrN,EAAKigG,cAAc77F,KAAMpE,EAAK+M,aAAaO,oBAElEtN,EAAKojG,gBAAgBh2F,UAAY,GACjCpN,EAAKohG,+BAMTphG,EAAKklG,WAAWvmG,MAAKsG,GAASjF,EAAKigG,cAAc17F,UAAUU,MAKvE,MAAMugG,EAAkB,SAAU/9F,GAC9B,OAAO1G,MAAMoX,KAAK1Q,EAAIg1D,cAAcnoD,UAAUrL,QAAQxB,IAGpDg+F,EAAmB,SAAUh+F,EAAK0uE,GACpC,IAAItxE,EAAS4C,EACb,GACI5C,EAASA,EAAO43D,oBAEb53D,GAAUA,EAAOsxE,UAAYA,GACpC,OAAOtxE,GAGL6gG,EAAyB,SAAU13C,EAAKmwB,GAC1C,MAAMwnB,EAAmBxnB,EACnBynB,EAAiBH,EAAiBtnB,EAAI,MACtC0nB,EAAmBJ,EAAiBG,EAAgB,MAC1D,OAAO53C,EAAIh2B,WAAWwtE,EAAgBK,GAAmBL,EAAgBI,GAAiBJ,EAAgBG,KAG9GjpD,EAASg8C,kBAAoB,SAAUh1F,GACnC,MAAM1D,EAAOC,KACb,IAAI4E,EAEJ,MAAM26E,EAAMx/E,EAAKshG,mBAAmB31F,iBAAiB3L,EAAKssF,WAAWgW,WACrE,IAAK,IAAIngG,EAAI,EAAGgiB,EAAKq7D,EAAIl8E,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC1C,MAAMg8E,EAAKqB,EAAIr9E,GAEf,GADaujG,EAAuB1lG,EAAMm+E,KAC7Bz6E,EAAS,CAClBmB,EAASs5E,EACT,OAGR,OAAOt5E,GAGX63C,EAASopD,sBAAwB,SAAUrhC,GACvC,MAAMzkE,EAAOC,KACPu/E,EAAMx/E,EAAKshG,mBAAmB31F,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,kBACpEj5C,EAASk8E,EAAIl8E,OACnB,IAAK,IAAInB,EAAI,EAAGA,EAAImB,EAAQnB,IACxB,GAAIq9E,EAAIr9E,GAAGqnB,QAAQ,IAAMxpB,EAAK+iG,eAC1B,OAAOvjB,GAAKr9E,EAAIsiE,EAAQnhE,GAAUA,GAG1C,OAAO,MAGXo5C,EAASqpD,eAAiB,SAAUriG,GAChC,MAAM1D,EAAOC,KACb,GAAID,EAAKgpB,MAAQhpB,EAAKgpB,KAAK40C,SACvB,IAAK,IAAIz7D,EAAI,EAAGgiB,EAAKnkB,EAAKgpB,KAAK40C,SAASt6D,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACzD,MAAM+uB,EAAUlxB,EAAKgpB,KAAK40C,SAASz7D,GACnC,IAAK,IAAIoV,EAAI,EAAGypF,EAAK9vE,EAAQlO,OAAO1f,OAAQiU,EAAIypF,EAAIzpF,IAAK,CACrD,MAAM9S,EAAQysB,EAAQlO,OAAOzL,GAC7B,IAAK,IAAIO,EAAI,EAAGC,EAAKtT,EAAMsK,SAASzL,OAAQwU,EAAIC,EAAID,IAChD,GAAIrT,EAAMsK,SAAS+I,KAAOpU,EACtB,MAAO,CACHwtB,QAASA,EAAQ1mB,OAAS0mB,EAAQ+tC,UAAU/2D,QAAO,SAAU+Z,EAAMC,GAC/D,OAAOD,GAAQC,EAAI1X,QACpB,IACH/F,MAAOA,EAAM0vB,OAOrC,OAAO,MAGXuoB,EAASwnD,aAAe,WACpB,IAAIlkG,EAAOC,KACX,GAAQD,EAAKwvF,cACJzvF,EAAAA,EAAAA,cAAAA,cACGC,EAAK+M,cAAgB/M,EAAK+M,aAAazH,aACvCtF,EAAK+M,aAAaE,aAIlBjN,EAAKiF,OAASjF,EAAKiF,MAAMK,aACzBtF,EAAKiF,MAAMM,QAM3Bm3C,EAAS0kD,uBAAyB,WAC9B,IAAIphG,EAAOC,KACX,MAAMgM,EAAUjM,EAAKshG,mBAAmBrpF,cAAc,IAAMjY,EAAKu8C,OAU3DypD,EAAU/5F,EAAQgM,cAAe,IAAGjY,EAAKu8C,kBAC3CypD,GACAA,EAAQn6F,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAEnD,OADA5N,EAAKimG,iBAAiBjmG,EAAK8lG,sBAAsB,GAAI,IAC9C,IACR,CAAE73F,SAAS,IAIlB,MAAMi4F,EAAUj6F,EAAQgM,cAAe,IAAGjY,EAAKu8C,kBAC3C2pD,GACAA,EAAQr6F,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAEnD,OADA5N,EAAKimG,iBAAiBjmG,EAAK8lG,uBAAuB,IAAK,IAChD,IACR,CAAE73F,SAAS,IAIlB,MAAMk4F,EAAe,SAAUnnG,GAC3B,MAAMm/E,EAAKsnB,EAAiBzmG,EAAE0O,OAAQ,MACtC,GAAIywE,EAAGngD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAAyB,CAE/C,MAAMqmG,EAAen6F,EAAQgM,cAAe,IAAGjY,EAAKu8C,oCAChD6pD,GAA2D,SAA3Cp/B,iBAAiBo/B,GAAcxpD,SAC/C58C,EAAKqmG,wBAITrmG,EAAKimG,iBAAiB9nB,EAAGlmE,cAAcjY,EAAKssF,WAAWgW,YACnDtiG,EAAKwvF,cAAgBzvF,EAAAA,EAAAA,cAAAA,OACrBC,EAAKiF,MAAMwG,WAAU,IAgBjC,GAZAQ,EAAQN,iBAAkB,MAAK3L,EAAKu8C,mBAAmB/0C,SAAQyhD,GAAKA,EAAEp9C,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBomG,EAAc,CAAEl4F,SAAS,MAChIjO,EAAKwvF,cAAgBzvF,EAAAA,EAAAA,cAAAA,OACrBkM,EAAQN,iBAAiB,OAAOnE,SAAQoE,GAAOA,EAAIC,iBAAiB,QAAQ,IAAM7L,EAAKiF,MAAMwG,gBAU7FzL,EAAKgpB,KAAM,CACX,MAAMja,EAAW/O,EAAK6+F,cAChBsE,EAAOnjG,EAAKojG,gBAClB,GAAIr0F,EAASzL,OAAS,EAElBtD,EAAKu9C,gBAAiB,GAAEv9C,EAAKu8C,gBAAiB,CAAEl9C,GAAIW,EAAKX,KAAMV,MAAK,SAAUgL,GACrEw5F,EAAKlrF,cAAe,IAAGjY,EAAKu8C,kBAC7B4mD,EAAKrzC,mBAAmB,YAAanmD,GACrCw5F,EAAKlrF,cAAe,IAAGjY,EAAKu8C,gBAAgB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB8K,eAAgB+C,GAC7F,MAAM04F,QAAuBtmG,EAAKs/C,oBAClC,IAAI1/C,EAAU,CACV4K,MAAOxK,EAAK4hC,gBAAgB,eAAiB,MAAQ5hC,EAAK4hC,gBAAgB,YAC1E42B,SAAUx4D,EAAKumG,iBAGfvmG,EAAKzB,IAAImhD,WAAa1/C,EAAKJ,QAAQ6/C,oBACnC7/C,EAAUR,OAAOmD,OAAO,GAAI3C,EAAS,CACjC8/C,UAAWtgD,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,qBAGpG6mD,EAAej5F,KAAKrN,EAAK6+F,cAAej/F,KACzC,CAAEqO,SAAS,IAEdk1F,EAAKlrF,cAAcjY,EAAKssF,WAAWiW,mBAAmB12F,iBAAiB,UAAU,SAAU7M,GACnFA,EAAE0O,OAAOmyB,QACT7/B,EAAKwmG,kBAGLxmG,EAAKymG,oBAEV,CAAEx4F,SAAS,IAEdk1F,EAAKlrF,cAAcjY,EAAKssF,WAAWkW,iBAAiB32F,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC/F5N,EAAKzB,IAAI6uD,eAAer+C,KACzB,CAAEd,SAAS,IAEdk1F,EAAKlrF,cAAcjY,EAAKssF,WAAWmW,gBAAgB52F,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC9F5N,EAAKqmG,mBACLrmG,EAAK8/F,YAAY/nE,cAAc/3B,EAAKigG,iBACrC,CAAEhyF,SAAS,YAIrB,CACD,MAAM4+C,EAASs2C,EAAKlrF,cAAe,IAAGjY,EAAKu8C,aACvCsQ,GACAA,EAAO5uB,SAGXj+B,EAAKgpB,KAAK03E,gBAAkB1gG,EAAK04F,kBAAkB14F,EAAKgpB,KAAK03E,iBAC7D1gG,EAAK04F,kBAAkB14F,EAAKgpB,KAAK03E,gBAAgB1iE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAC/DC,EAAKimG,iBAAiBjmG,EAAKgpB,KAAK03E,iBAE3Bz0F,EAAQgM,cAAcjY,EAAKssF,WAAWgW,YAC3CtiG,EAAKimG,iBAAiBh6F,EAAQgM,cAAcjY,EAAKssF,WAAWgW,YA2CpE,GAvCAr2F,EAAQN,iBAAiB,+BAA+BnE,SAAQ,SAAUk/F,GACjEA,EAAMjqC,cAAcz+B,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UACxC2mG,EAAMr5E,aAAa,QAASrtB,EAAK4hC,gBAAgB,qBAGrD8kE,EAAM76F,iBAAiB,SAAS,SAAU7M,GACtC,MAAMm/E,EAAKl+E,KAAKw8D,cAChB,IAAI0hB,EAAGngD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UAA1B,CAGA,GAAIo+E,EAAGngD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAAyB,CAE/C,MAAM2D,EAAUgiG,EAAuB1lG,EAAMm+E,GAC7C,GAAIz6E,GAAWgO,OAAOi1F,gBAAqE,IAAnDj1F,OAAOi1F,eAAezjF,WAAW2G,OAAOvmB,OAAc,CAM1FtD,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,MAJM,SAAS6mG,IACvB5mG,EAAK6mG,UAAW,EAChB7mG,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,KAAmB6mG,MAGpC5mG,EAAK6mG,UAAW,EAGhB7mG,EAAKzB,IAAI6uD,eAAe,CAAC1pD,GAAU,CAAE8mD,SAAS,UAKlDxqD,EAAKimG,iBAAiB9nB,GAE1Bn/E,EAAE+uE,qBACH,CAAE9/D,SAAS,OAElBhC,EAAQN,iBAAiB,qCAAqCnE,SAAQ,SAAUuT,GAC5EA,EAAElP,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC7CA,EAAE+uE,oBACH,CAAE9/D,SAAS,OAGdzK,EAAAA,EAAAA,gBAAAA,SAA8BxD,EAAKwvF,cAAgBzvF,EAAAA,EAAAA,cAAAA,cAAoC,CACvF,MAAMmmG,EAAUj6F,EAAQgM,cAAc,IAAMjY,EAAKu8C,MAAQ,aACpD2pD,GAAqC,SAA1BA,EAAQtgG,MAAMg3C,UACtB58C,EAAK+M,cACLvJ,EAAAA,EAAAA,KAAAA,MAAcxD,EAAK+M,aAAaJ,IAAK,aAroB1BqhD,EAwoBAhuD,GAvoBZgpB,MAAQglC,EAAIhlC,KAAK40C,SACxB5P,EAAIhlC,KAAK40C,SAAS11D,QAAO,SAAU4+F,EAAQ51E,GACvC,OAAO41E,EAAS51E,EAAQlO,OAAO9a,QAAO,SAAU6+F,EAAQh6C,GACpD,OAAOg6C,EAAS,IACjB,KACJ,GAAK,GAkoBmB,GACnBvjG,EAAAA,EAAAA,KAAAA,MAAcyI,EAAS,CACnBooE,KAAM,WACFr0E,EAAKimG,iBAAiBjmG,EAAK8lG,sBAAsB,GAAI,IAEzDvxB,MAAO,WACHv0E,EAAKimG,iBAAiBjmG,EAAK8lG,uBAAuB,IAAK,OA9oB9D,IAAU93C,GAspB3BtR,EAAS0oD,YAAc,SAAUpmG,GAC7B,MAAMgB,EAAOC,KACTjB,EAAE+L,UAAY/K,EAAKiF,OACnBjF,EAAKohG,0BAIb1kD,EAASwlD,kBAAoB,SAAU8E,KAIvCtqD,EAASikD,YAAc,WACnB,IAAI3gG,EAAOC,KACX,MAAMgnG,EAAWjnG,EAAK4hC,gBAAgB,QAChC93B,EAAY9J,EAAK4hC,gBAAgB,mBACvC5hC,EAAK2M,IAAIhB,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,QAAQ/0C,SAAQ,SAAU0/F,GACrE,MAAM7tF,EAAO6tF,EAAGl5F,YACZxK,EAAAA,EAAAA,KAAAA,MAAc6V,KACd6tF,EAAG95F,UAAY,YAAciM,EAAO,4BAA8BvP,EAAY,KAAOm9F,EAAW,YAK5GvqD,EAASupD,iBAAmB,SAAUkB,EAAkB1iC,GACpD,MAAMzkE,EAAOC,KACb,IAAIyD,EACJ,IAAK1D,EAAK6mG,SAAU,CAChB,IAAIO,EAEJ,GAAID,aAA4B1nG,EAAAA,EAC5BiE,EAAUyjG,EACVC,EAAYpnG,EAAK04F,kBAAkBh1F,QAInC,IADA0jG,EAAYD,EACLC,GAAmC,OAAtBA,EAAUjxB,SAC1BixB,EAAYA,EAAU3qC,cAG9B,MAAM4qC,EAAU5B,EAAiB2B,EAAW,MACtCE,EAAY7B,EAAiB4B,EAAS,MAEtCE,EAAa/B,EAAgB8B,GAC7B9mB,EAAWglB,EAAgB6B,GAC3BG,EAAahC,EAAgB4B,GACnC1jG,EAAUA,GAAW1D,EAAKg4B,WAAWuvE,EAAY/mB,EAAUgnB,GAE3DxnG,EAAKqmG,iBAAiB,CAAE7mC,UAAW97D,IAGnC,MAAMwtB,EAAUlxB,EAAKgpB,KAAK40C,SAAS2pC,GAC9BnoG,OAAOqB,UAAUC,eAAeC,KAAKX,EAAK4iG,aAAc1xE,EAAQ5b,OACjEtV,EAAK4iG,aAAa1xE,EAAQ5b,KAAO,IAErC,MAAM0uF,EAAiBhkG,EAAK4iG,aAAa1xE,EAAQ5b,KAC3C7Q,EAAQysB,EAAQlO,OAAOw9D,GACvByjB,EAAeD,EAAev/F,EAAMqE,OAAS,GAC9Cm7F,EAAahsE,SAASv0B,KACvBsgG,EAAev/F,EAAMqE,MAAQm7F,EAAa37F,OAAO5E,IAGrD,MAAM+jG,EAAgBznG,EAAKshG,mBA0B3B,GAzBAmG,EAAc97F,iBAAiB,MAAMnE,SAAQC,GAAOA,EAAIu2B,UAAUC,OAAOj+B,EAAK+iG,iBAC9EqE,EAAUppE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAAwBC,EAAK+iG,eACrDsE,EAAQrpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAAwBC,EAAK+iG,eACnDuE,EAAUtpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAAwBC,EAAK+iG,eACjDt+B,EAAQ,GACR2iC,EAAUppE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACxBsnG,EAAQrpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACtBunG,EAAUtpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAEnB0kE,EAAQ,IACb2iC,EAAUppE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WACxBsnG,EAAQrpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WACtBunG,EAAUtpE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YAGxBqnG,EAAUnvF,cAAc,UACxBmvF,EAAUnvF,cAAc,SAASoV,aAAa,QAASrtB,EAAK4hC,gBAAgB,kBAI1El+B,aAAmBjE,EAAAA,IACrBiE,EAAU,MAIVA,GAAWA,IAAY1D,EAAKw4F,mBAC5B,OAGJx4F,EAAKw4F,mBAAqB90F,EAE1B,MAAM4W,EAAUmtF,EAAcxvF,cAAc,IAAMjY,EAAKu8C,MAAQ,oBAa/D,GAZIjiC,IACAA,EAAQlN,UAAYpN,EAAK0nG,gBAAgBH,EAAY/mB,EAAUgnB,GAAc,GAI5ExnG,EAAKJ,QAAQ8rC,sBACd1rC,EAAK0iG,aAAa3zF,SAASnE,QAAQpD,SAAQwH,IACnCA,IAAMtL,GACN1D,EAAK6jG,gBAAgB70F,MAI7BtL,EAAS,CACT,MAAMikG,EAAe34F,GAAKhP,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CAAE2D,QAASsL,EAAGjE,QAAS/K,IACjG,GAAI0D,EAAQnD,SAAU,CAIlB,IAAIqnG,EAHJlkG,EAAQY,WAAatE,EAAKJ,QAAQ8rC,qBAI9B1rC,EAAKJ,QAAQ8rC,uBACbk8D,EAAW5nG,EAAK0iG,aAAaxqE,eAAex0B,EAAQxD,KAAK0D,SACrDgkG,GACAD,EAAaC,IAGhBA,GACD5nG,EAAK0iG,aAAa7qE,WAAWn0B,GAAS/E,MAAK,SAAUkpG,GACjDF,EAAajkG,WAKrB0jG,EAAUppE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACxB4nG,EAAajkG,MAM7Bg5C,EAASmnD,gBAAkB,SAAUngG,GACjC,MAAM1D,EAAOC,KACPk+E,EAAKn+E,EAAK04F,kBAAkBh1F,GAKlC,IAAIkkG,EAKJ,IAAK,IAAItyF,KATL6oE,GACAA,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAIpBC,EAAKJ,QAAQ8rC,uBACbk8D,EAAW5nG,EAAK0iG,aAAaxqE,eAAex0B,EAAQxD,KAAK0D,UAE7D5D,EAAK0iG,aAAa3qE,cAAc6vE,GAAYlkG,GAC5B1D,EAAK4iG,aAAc,CAC/B,MAAM1xE,EAAUlxB,EAAK4iG,aAAattF,GAClC,IAAK,IAAIxM,KAAQooB,EAAS,CACtB,IAAIzsB,EAAQysB,EAAQpoB,GACpBrE,EAAQysB,EAAQpoB,GAAQrE,EAAMU,QAAO6J,GAAKA,IAAMtL,IAC3Ce,EAAMnB,eACA4tB,EAAQpoB,IAIvB9I,EAAKw4F,qBAAuB90F,IAC5B1D,EAAKw4F,mBAAqB,MAE9Bx4F,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAE2D,QAASA,EAASqH,QAAS/K,KAGhF08C,EAAS2pD,iBAAmB,SAAUzmG,GAClC,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,MAAMkoG,EAAgB9nG,EAAKw4F,mBACvBsP,GAAiBA,IAAkBloG,EAAQ4/D,YAC3Cx/D,EAAK6jG,gBAAgBiE,GACrB9nG,EAAKw4F,mBAAqB,MAE9Bx4F,EAAK6+F,cACA15F,QAAO6J,GAAKA,IAAM84F,IAClBtgG,SAAQwH,GAAKhP,EAAK0iG,aAAa3qE,cAAc/oB,KAElD,MAAM+4F,EAAenoG,EAAQ4/D,UAAYx/D,EAAK04F,kBAAkB94F,EAAQ4/D,gBAAan7D,EACrF,IAAI2jG,EAAcC,EACdF,IACAC,EAAevC,EAAiBsC,EAAc,MAC9CE,EAAexC,EAAiBuC,EAAc,OAGlD,MAAMt6F,EAAS1N,EAAKshG,mBACpBvgG,MAAMoX,KAAKzK,EAAO/B,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,iBACnDp3C,QAAO,SAAUg5E,GACd,OAAOA,IAAO4pB,GAAgB5pB,IAAO6pB,GAAgB7pB,IAAO8pB,KAE/DzgG,SAAQ,SAAU22E,GACfA,EAAGngD,UAAUC,OACTl+B,EAAAA,EAAAA,QAAAA,QACAA,EAAAA,EAAAA,QAAAA,SACAA,EAAAA,EAAAA,QAAAA,SACAA,EAAAA,EAAAA,QAAAA,cAEZ2N,EAAO/B,iBAAiB,IAAM3L,EAAKu8C,MAAQ,yCAAyC/0C,SAAQ,SAAUk/F,GAClGA,EAAMr5E,aAAa,QAASrtB,EAAK4hC,gBAAgB,wBAGrD0hE,EAAgB3iG,KAAKX,IAGzB08C,EAAS8pD,gBAAkB,WACvB,MAAMxmG,EAAOC,KACTD,EAAKw4F,oBACLx4F,EAAK6jG,gBAAgB7jG,EAAKw4F,oBAG9B,IAAK,IAAIr2F,EAAI,EAAGgiB,EAAKnkB,EAAKgpB,KAAK40C,SAASt6D,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACzD,MAAM+lG,EAAiBloG,EAAKgpB,KAAK40C,SAASz7D,GACpC6hG,EAAiBhkG,EAAK4iG,aAAasF,EAAe5yF,KAAOtV,EAAK4iG,aAAasF,EAAe5yF,MAAQ,GACxG,IAAK,IAAIiC,EAAI,EAAGypF,EAAKkH,EAAellF,OAAO1f,OAAQiU,EAAIypF,EAAIzpF,IAAK,CAC5D,MAAMg7C,EAAe21C,EAAellF,OAAOzL,GAC3C,IAAI0sF,EAAeD,EAAezxC,EAAazpD,OAAS,GACxD,IAAK,IAAIgP,EAAI,EAAGC,EAAKw6C,EAAaxjD,SAASzL,OAAQwU,EAAIC,EAAID,IAAK,CAC5D,MAAM1S,EAAiBmtD,EAAaxjD,SAAS+I,GAC7C1S,EAAed,WAAatE,EAAKJ,QAAQ8rC,qBACpCu4D,EAAahsE,SAAS7yB,KACvB4+F,EAAezxC,EAAazpD,MAAQm7F,EAAeA,EAAa37F,OAAOlD,IAEtEpF,EAAK0iG,aAAa3zF,SAASkpB,SAAS7yB,IACrCpF,EAAK0iG,aAAa7qE,WAAWzyB,KAM7C89F,EAAaviG,KAAKX,IAGtB08C,EAAS+pD,gBAAkB,WACvB,MAAMzmG,EAAOC,KACPkoG,EAAenoG,EAAKshG,mBAAmBrpF,cAAe,MAAKjY,EAAKu8C,qBAAqBx8C,EAAAA,EAAAA,QAAAA,WAC3FC,EAAKqmG,mBACD8B,GACAA,EAAanqE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAKnC28C,EAAS1kB,WAAa,SAAUuvE,EAAY/mB,EAAUgnB,GAElD,IAAI3iG,EACJ,MAAMmkB,EAFO/oB,KAEK+oB,KAUlB,OATIA,GAAQA,EAAK40C,WACb/4D,EAASmkB,EAAK40C,SAAS2pC,MAEnB1iG,EAASA,EAAOme,OAAOw9D,MAEnB37E,EAASA,EAAOkK,SAASy4F,IAI9B3iG,GAGX63C,EAASmiD,YAAc,WAEnB,IAAIh6F,EAAS,GACb,MAAMmkB,EAFO/oB,KAEK+oB,KAQlB,OAPIA,GAAQA,EAAK40C,WACb/4D,EAASmkB,EAAK40C,SAAS11D,QAAO,CAAC+Z,EAAMC,IAC1BD,EAAK3Z,OAAO4Z,EAAIc,OAAO9a,QAAO,CAAC7C,EAAGoD,IAC9BpD,EAAEiD,OAAOG,EAAEsG,WACnB,MACJlK,IAEAA,GAGX63C,EAASgrD,gBAAkB,SAAUH,EAAY/mB,EAAUgnB,GAEvD,IAAI3iG,GAAU,EACd,MAAMmkB,EAFO/oB,KAEK+oB,KAClB,GAAIA,EACA,IAAK,IAAI7mB,EAAI,EAAGA,GAAKolG,EAAYplG,IAG7B,IAFA,IAAI+uB,EAAUlI,EAAK40C,SAASz7D,GACxBimG,EAAOjmG,IAAMolG,EAAa/mB,EAAWtvD,EAAQlO,OAAO1f,OAAS,EACxDiU,EAAI,EAAGA,GAAK6wF,EAAM7wF,IAGvB,IAFA,IAAI9S,EAAQysB,EAAQlO,OAAOzL,GACvB8wF,EAAO9wF,IAAMipE,GAAYr+E,IAAMolG,EAAaC,EAAa/iG,EAAMsK,SAASzL,OAAS,EAC5EwU,EAAI,EAAGA,GAAKuwF,EAAMvwF,IACvBjT,GAAkB,EAKlC,OAAOA,GAGX63C,EAAS3kB,cAAgB,SAAUr0B,GAC/B,MAAM1D,EAAOC,KAEb,GADaD,EAAKgpB,KACR,CACN,IAAIja,EAAW/O,EAAK6+F,cACpB,MAAMyJ,EAAev5F,EAAS9F,QAAQvF,GACtC,IAAK,IAAIvB,EAAI,EAAGA,EAAInC,EAAKgpB,KAAK40C,SAASt6D,OAAQnB,IAC3C,IAAK,IAAIoV,EAAI,EAAGA,EAAIvX,EAAKgpB,KAAK40C,SAASz7D,GAAG6gB,OAAO1f,OAAQiU,IAAK,CAC1D,MAAMhL,EAAWvM,EAAKgpB,KAAK40C,SAASz7D,GAAG6gB,OAAOzL,GAAGxI,SAAS+yD,WAAW9yD,GAAMA,EAAE3P,KAAOqE,EAAQrE,KAC5F,GAAIkN,GAAY,GACRvM,EAAKgpB,KAAK40C,SAASz7D,GAAG6gB,OAAOzL,GAAGxI,SAAS/F,OAAOuD,EAAU,GAAGjJ,OAQ7D,OAPAyL,EAAW/O,EAAK6+F,cAChB7+F,EAAKwgG,iBAAiBphG,OAAOmD,OAAOvC,EAAKgpB,KAAM,CAC3CrpB,OAAQK,EAAKigG,cAAc1/F,SAC3BmgG,eAAgB3xF,EAASu5F,IAAiBv5F,EAASzL,OAASglG,EAAa,EAAGA,GAC5EzD,aAAc91F,EAASzL,WAGpB,GAO3B,OAAO,GAGXo5C,EAASylD,cAAgB,SAAUviG,GAC/B,IAAII,EAAOC,KACXD,EAAK4/F,UAAW,EAChB5/F,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAC7C+1D,GAAIl2D,EAAQk2D,GACZ/qD,QAAS/K,IAEbA,EAAKkkG,eACDlkG,EAAKzB,KAAOyB,EAAK0iG,eACjB1iG,EAAK6iG,iBAAmB,KAEnB7iG,EAAKJ,QAAQ8rC,sBACd1rC,EAAK0iG,aAAa3zF,SAASnE,QAAQpD,SAAQwH,GAAKhP,EAAK6jG,gBAAgB70F,KAEzEhP,EAAKgpB,KAAO,OAIpB0zB,EAASoB,SAAW,WAChB,IAAI99C,EAAOC,KACPD,EAAKE,MACLF,EAAKE,KAAK49C,WAEd9yC,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,IAGpC08C,EAASuB,WAAa,SAAUC,GAC5B,IAAIl+C,EAAOC,KACPD,EAAKiF,OAASjF,EAAKiF,MAAMK,aACzBtF,EAAKiF,MAAMM,OAEVvF,EAAKJ,QAAQ8rC,uBACd1rC,EAAK0iG,aAAa3zF,SAASnE,QAAQpD,SAAQwH,GAAKhP,EAAK6jG,gBAAgB70F,KACrEhP,EAAKgpB,KAAO,KACZhpB,EAAK4iG,aAAe,IAExB5iG,EAAK8/F,aAAe9/F,EAAK8/F,YAAY1nE,gBACrCp4B,EAAKigG,cAAgB,KACjBjgG,EAAKE,MACLF,EAAKE,KAAK+9C,aAEdjzC,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAMk+C,IAG5CxB,EAAS/hB,YAAc,WACnB,MAAM36B,EAAOC,KACb,GAAID,EAAKy8C,cAAgBz8C,EAAK0iG,aAAc,CACxC,MAAM6F,EAAqB,GAK3B,OAHIvoG,EAAKwoG,UACLD,EAAmBx5F,SAAW,IAE3B,CACH1P,GAAIW,EAAKX,GACToF,MAAOzE,EAAK0iG,aAAa/nE,YAAY4tE,GACrC/gE,MAAOxnC,EAAKwoG,SAGpB,OAAO,MAGX9rD,EAAS0C,YAAc,SAAUtqC,GAC7B,MAAM9U,EAAOC,KACbD,EAAK2iG,eAAehkG,MAAK,WACrBqB,EAAK0iG,aAAatjD,YAAYtqC,EAAMrQ,OAChCqQ,EAAM0yB,OACNxnC,EAAKqiG,YAAYvtF,EAAM0yB,WAKnCkV,EAAS8mD,cAAgB,WACrB,MAAMxjG,EAAOC,KAEb,IAAIyiG,EAYA5C,EACJ,GAXI4C,EADA1iG,EAAKJ,QAAQ8iG,aACE1iG,EAAKJ,QAAQ8iG,aAEb,CACXrjG,GAAIW,EAAK4mC,SACTp8B,MAAOxK,EAAKu8C,MAAQ,kBACpBnyC,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,GAIbtvB,EAAKJ,QAAQkgG,YACbA,EAAc9/F,EAAKJ,QAAQkgG,gBAE1B,CACD,MAAMz5F,EAAS,GACXrG,EAAKu1B,eAAiBx1B,EAAAA,EAAAA,KAAAA,WACtBsG,EAAOmvB,KAAOx1B,EAAK4F,OAEnB5F,EAAKu1B,eAAiBx1B,EAAAA,EAAAA,KAAAA,UACtBsG,EAAOiK,QAAUtQ,EAAK4F,OAG1Bk6F,EAAc,CACVzgG,GAAIW,EAAK4mC,SACTp8B,MAAOxK,EAAKu8C,MAAQ,iBACpB8oC,MAAOrlF,EACPsvB,SAAS,EACTllB,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsG,OAAQA,GAIhB,MAAM9H,EAAMyB,EAAKzB,IAejB,OAdAyB,EAAK2iG,eAAiB,IAAI9jG,SAAQ,SAAUC,EAASk1B,GACjDz1B,EAAIqb,QAAO,WACP,MAAM6uF,EAAYlqG,EAAIykB,OAAO/Z,QAAQy5F,IAAiB,EAClD7jG,QAAQC,QAAQ4jG,GAAgBnkG,EAAI8rD,SAASq4C,GAC3CgG,EAAYnqG,EAAIykB,OAAO/Z,QAAQ62F,IAAgB,EACjDjhG,QAAQC,QAAQghG,GAAevhG,EAAI8rD,SAASy1C,GAChDjhG,QAAQwiB,IAAI,CAAConF,EAAWC,IAAY/pG,MAAK,SAAUqkB,GAC/ChjB,EAAK0iG,aAAe1/E,EAAO,GAC3BhjB,EAAK8/F,YAAc98E,EAAO,GAC1BlkB,aAKLkB,EAAK2iG,gBAGhBjmD,EAASonD,iBAAmB,SAAU6E,GAClC,MAAM3oG,EAAOC,KAEP2oG,EAAmB5oG,EAAKojG,cAAc,CAAEr4F,QAAS49F,IAGjDE,EAAWD,EAAiB3wF,cAAc,IAAM6wF,EAAAA,QAAAA,UAAAA,MAAwB,QAC9E,GAAID,EAEK7oG,EAAK6iG,kBAAsB8F,EAAevjG,iBAA+D,IAA7CujG,EAAevjG,eAAed,YAC3FukG,EAAS5qE,aAGZ,CACD,IAAI8qE,EAAa/oG,EAAK4hC,gBAAgB,WACtC,GAAI+mE,IAAmB3oG,EAAKqhG,oBACxB,GAAIrhG,EAAKigG,yBAAyBtwF,EAAAA,EAAO,CACrC,MAAMnP,EAAOR,EAAKigG,cAAc1/F,SAChCwoG,EAAa/oG,EAAK4hC,gBAAgB,aAAc,CAC5Cz6B,IAAKnH,EAAKzB,IAAI4I,IACdymB,EAAGpqB,EAAAA,EAAAA,KAAAA,YAAoBhD,EAAK,GAAIR,EAAKzB,IAAI2B,KAAK66B,QAAUh7B,EAAAA,EAAAA,iBAA0BA,EAAAA,EAAAA,iBAClF8tB,EAAGrqB,EAAAA,EAAAA,KAAAA,YAAoBhD,EAAK,GAAIR,EAAKzB,IAAI2B,KAAK66B,QAAUh7B,EAAAA,EAAAA,iBAA0BA,EAAAA,EAAAA,wBAItFgpG,EAAa/oG,EAAK4hC,gBAAgB,4BAGjC+mE,EAAevjG,iBACpB2jG,EAAaJ,EAAevjG,eAAe/F,KAI3CW,EAAK6iG,kBAAoB8F,EAAevjG,iBAA+D,IAA7CujG,EAAevjG,eAAed,aACxF,IAAIwkG,EAAAA,QAAM,CACNp7F,OAAQk7F,EACRI,iBAAkBhpG,EAAKshG,iBAAiB,CAAEv2F,QAAS49F,IACnDn+F,MAAOu+F,IAKnBtJ,EAAmBwJ,kCAAkCN,EAAet9F,wBAIxEqxC,EAASooD,qBAAuB,WAC5B,MAAM9kG,EAAOC,KACPipG,EAAkB,MAAQlpG,EAAK4hC,gBAAgB,WAC/CunE,EAAgB,MAAQnpG,EAAK4hC,gBAAgB,SAE/C5hC,EAAKgpB,MAAQhpB,EAAKgpB,KAAK40C,UACvB59D,EAAKgpB,KAAK40C,SAASp2D,SAAQ,SAAU0pB,GACjCA,EAAQlO,OAAOxb,SAAQ,SAAU/C,GAC7BA,EAAMsK,SAASvH,SAAQ,SAAU9D,GAC7B,GAAIA,aAAmBjE,EAAAA,EAAS,CAC5B,MAAM00B,EAAOn0B,EAAK+lG,eAAeriG,GACjC,GAAIywB,EAAM,CACN,MAAMqjC,EAAU,GAChBA,EAAQ0xC,GAAmB/0E,EAAKjD,QAC5BiD,EAAK1vB,QACL+yD,EAAQ2xC,GAAiBh1E,EAAK1vB,MAAM8F,KAAKvK,EAAKgjG,kBAElD,MAAMoG,EAAU5lG,EAAAA,EAAAA,KAAAA,OAAeg0D,EAAS9zD,EAAQM,WAChDN,EAAQwF,YACRxF,EAAQK,QAAQqlG,eAS5C1sD,EAAS6pD,aAAe,WAEpB,OADatmG,KACD2hC,gBAAgB,eAAevT,cAAc7kB,QAAQ,OAAQ,KAAO,IAAMhG,EAAAA,EAAAA,KAAAA,kBAAyB,IAAIsgC,MAAO5gB,YAAY,IAG1Iw5B,EAAS2sD,gBAAkB,SAAU7sB,GACjC,MAAMx8E,EAAOC,KAEb,OADAD,EAAKwoG,QAAUxoG,EAAKoiG,cACbU,EAAAA,QAAAA,gBAAAA,KAA+B9iG,EAAMw8E,IAGhD9/B,EAAS0lD,YAAc,WACnB,MAAMpiG,EAAOC,KACP4E,EAAS,GACf,GAAI7E,EAAKigG,cAAe,CACpB,MAAMqJ,EAAmBtpG,EAAK8/F,YAAYnlE,cAC1C2uE,EAAiBv6F,SAASvH,SAAQwH,UAAYA,EAAE5K,OAChDS,EAAOM,OAASmkG,EACZtpG,EAAKw4F,qBACL3zF,EAAO0kG,IAAMvpG,EAAKw4F,mBAAmB50F,SAG7C,OAAOiB,GAGX63C,EAAS2lD,YAAc,SAAU76D,GAC7B,MAAMxnC,EAAOC,KACTunC,EAAMriC,SACNnF,EAAK89C,WACL99C,EAAK8/F,YAAY1gD,YAAY5X,EAAMriC,QAC9BxG,MAAK,WACFqB,EAAKigG,cAAgBjgG,EAAK8/F,YAAY/wF,SAAS,GAC/C/O,EAAKygG,YAAYzgG,EAAKigG,eACtB,MAAMuJ,EAAqB,SAAUxqG,GACjC,GAAIA,EAAE+L,UAAY/K,EAAM,CACpB,MAAM0D,EAAU1D,EAAK6+F,cAAch2F,MAAKmG,GAAKA,EAAEpL,UAAY4jC,EAAM+hE,MAC7D7lG,EACA1D,EAAKimG,iBAAiBviG,GAGjBtE,OAAOqB,UAAUC,eAAeC,KAAK6mC,EAAO,QAE7C0f,YAAW,IAAMlnD,EAAKwmG,mBAAmB,KAGjDxmG,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,iBAA+BypG,KAGpDxpG,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA+BypG,QAK3D,MAAMC,EAAmB,CAAEltD,MAAOG,EAASH,OAE3CkjD,EAAmBiK,4BAA8B7+F,eAAgBjL,GAI7D,OAHK6pG,EAAiBngG,gBACZozC,EAASQ,cAAcv8C,KAAK8oG,SAEzB/sD,EAASa,gBAAgB58C,KAAK8oG,EAAkB/sD,EAASH,MAAQ,QAAS38C,IAG3F6/F,EAAmBkK,uBAAyB9+F,eAAgBjL,GAIxD,OAHK6pG,EAAiBngG,gBACZozC,EAASQ,cAAcv8C,KAAK8oG,SAEzB/sD,EAASa,gBAAgB58C,KAAK8oG,EAAkB/sD,EAASH,MAAQ,YAAa38C,IAG/F6/F,EAAmBmK,gBAAkB/+F,eAAgBe,GAC5C69F,EAAiBngG,gBACZozC,EAASQ,cAAcv8C,KAAK8oG,GAEtC,MAAM9/F,QAAa+yC,EAASa,gBAAgB58C,KAAK8oG,EAAkB/sD,EAASH,MAAQ,UAAW,CAC3F3qC,IAAKhG,EAAIiyB,aAAa,SAEpBq2B,EAAYtnD,SAASC,cAAc,OASzC,OARAD,SAAS+0B,KAAK70B,YAAYonD,GAC1BA,EAAU9mD,UAAYzD,EACtBnG,EAAAA,EAAAA,KAAAA,UAAkB0wD,EAAUj8C,cAAe,IAAGykC,EAASH,oBAAqB,CACxEsxB,cAAeA,IAAM3Z,EAAUj2B,WAEnCi2B,EAAUj8C,cAAc,qBAAqBpM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACxFpK,EAAAA,EAAAA,KAAAA,eACD,CAAEyK,SAAS,IACPimD,GAGXurC,EAAmBwJ,kCAAoC,SAAU/0C,GAC7DA,EAAUvoD,iBAAiB,mBAAmBnE,SAAQ,SAAUoE,GAC5DA,EAAIC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC/CkoD,YAAW,IAAMu4C,EAAmBmK,gBAAgB5qG,EAAE0O,SAAS,IAC/D1O,EAAE+uE,oBACH,CAAE9/D,SAAS,QAzvC1B,GA+vCAzK,EAAAA,EAAAA,QAAAA,mBAAgCi8F,EAChC,W,syCCvyCA1/F,EAAAA,EAAAA,MAAAA,YAA2B,iBAE3B,MAAMg8B,EAAY,iBACZY,EAAc,uBAEdktE,EAAc,SAAUr4B,GAC1B,GAAIA,EAAO,CACP,MAAM/nE,EAAQ+nE,EAAM/nE,MAAM,sCAC1B,GAAIA,GAASA,EAAMnG,OACf,MAAO,IAAMmG,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAGlF,OAAO+nE,GACT,IAAAsU,EAAA,IAAArjF,QAAA8lF,EAAA,IAAA9lF,QAAAqnG,EAAA,IAAArnG,QAAAsnG,EAAA,IAAAtnG,QAAAunG,EAAA,IAAAvnG,QAAAwnG,EAAA,IAAAxnG,QAAAynG,EAAA,IAAAznG,QAAA0nG,EAAA,IAAA1nG,QAAA2nG,EAAA,IAAA3nG,QAAA4mF,EAAA,IAAA5mF,QAAA6mF,EAAA,IAAA52E,QAAA23F,EAAA,IAAA33F,QAAA43F,EAAA,IAAA53F,QAAA63F,EAAA,IAAA73F,QAAA83F,EAAA,IAAA93F,QAAA+3F,EAAA,IAAA/3F,QAAA82E,EAAA,IAAA92E,QAAAg4F,EAAA,IAAAh4F,QAAAi4F,EAAA,IAAAj4F,QAAAk4F,EAAA,IAAAl4F,QAAAm4F,EAAA,IAAAn4F,QAAAo4F,EAAA,IAAAp4F,QAEF,MAAMq4F,UAAsBnhB,EAAAA,QAaxBlqF,cACIG,SAASod,WAAWnK,EAAA,KAAAg4F,GAAAh4F,EAAA,KAAA+3F,GAAA/3F,EAAA,KAAA83F,GAAA93F,EAAA,KAAA63F,GAAA73F,EAAA,KAAA43F,GAAA53F,EAAA,KAAA02E,GAAA12E,EAAA,KAAA23F,GAAA33F,EAAA,KAAA03F,GAAA13F,EAAA,KAAAy3F,GAAAz3F,EAAA,KAAAw3F,GAAAx3F,EAAA,KAAAu3F,GAAAv3F,EAAA,KAAAw2E,GAAAxpF,EAAA,aAbhBi8B,GAASn5B,EAAA,KAAAkjF,EAAA,CAAAjjF,UAAA,EAAAC,MACA,IAAMi5B,IAASn5B,EAAA,KAAA2lF,EAAA,CAAA1lF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAknG,EAAA,CAAAjnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAmnG,EAAA,CAAAlnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAonG,EAAA,CAAAnnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAqnG,EAAA,CAAApnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAsnG,EAAA,CAAArnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAunG,EAAA,CAAAtnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAwnG,EAAA,CAAAvnG,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAymF,EAAA,CAAAxmF,UAAA,EAAAC,MASd,IAAIL,UAIlB,MAAMzC,EAAOC,KAEbgD,EAAAjD,EAAIoqG,EAAkBpqG,EAAKJ,QAAQyG,QAAUnC,EAAAA,EAAAA,QAAY,EAAM,GAAIukC,EAAAA,EAAAA,SACnEzoC,EAAKqG,OAAMrD,EAAGhD,EAAIoqG,GAClBpqG,EAAK6pF,aAAa,QAClB7pF,EAAK2F,SAAS3F,EAAKgrG,gBAGZxtE,gCACP,MAAO,CAAC,OAAQ,YAGpBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,SAAT6I,GACAgN,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GAES,aAAT8I,GACAgN,EAAA9V,EAAIqqG,EAAAY,GAAAtqG,KAAJX,GAIRw8C,eACI,OAAOzgB,EAGP7I,WACA,MAAMlzB,EAAOC,KACb,OAAID,EAAK49B,aAAa,QACX59B,EAAK69B,aAAa,QAEtB99B,EAAAA,EAAAA,KAAAA,MAGPmzB,SAAKpwB,GACL,MAAM9C,EAAOC,KACT6C,EACA9C,EAAKqtB,aAAa,OAAQvqB,GAG1B9C,EAAKk+B,gBAAgB,QAezBb,eACA,OAAOp9B,KAAK29B,aAAa,YAGzBP,aAASv6B,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAQvC+H,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GAAU,IAAA0yE,EAAAC,EAAAC,EAAAC,EAAAC,EACb,MAAMtrG,EAAOC,KACb,IAAI8rC,EACAC,EACAH,EACAC,EACAjrC,EACJ,MAAMwF,EAASrG,EAAKqG,OACpB,OAAQrG,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACDgsC,EAAc1lC,EAAOmvB,KAAKuW,YAC1BC,EAAc3lC,EAAOmvB,KAAKwW,YAC1B,MACJ,KAAKjsC,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACDgsC,EAAc1lC,EAAOiK,QAAQy7B,YAC7BC,EAAc3lC,EAAOiK,QAAQ07B,YAC7BH,EAAYxlC,EAAOiK,QAAQu7B,UAC3BC,EAAczlC,EAAOiK,QAAQw7B,YAC7B,MACJ,KAAK/rC,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACDgsC,EAAc1lC,EAAOivB,MAAMyW,YAC3BC,EAAc3lC,EAAOivB,MAAM0W,YAC3BH,EAAYxlC,EAAOivB,MAAMuW,UACzBC,EAAczlC,EAAOivB,MAAMwW,YAC3BjrC,EAASwF,EAAOivB,MAAMz0B,OACtB,MACJ,KAAKd,EAAAA,EAAAA,KAAAA,UACDgsC,EAAc1lC,EAAOmvB,KAAKuW,YAC1BC,EAAc3lC,EAAOmvB,KAAKwW,YAC1BH,EAA0B,QAAjBq/D,EAAG7kG,EAAOiK,eAAO,IAAA46F,OAAA,EAAdA,EAAgBr/D,UAC5BC,EAAc,EACd,MACJ,QACIC,EAAyB,QAAdo/D,EAAG9kG,EAAOmvB,YAAI,IAAA21E,OAAA,EAAXA,EAAap/D,YAC3BC,EAAyB,QAAdo/D,EAAG/kG,EAAOmvB,YAAI,IAAA41E,OAAA,EAAXA,EAAap/D,YAC3BH,EAA0B,QAAjBw/D,EAAGhlG,EAAOiK,eAAO,IAAA+6F,OAAA,EAAdA,EAAgBx/D,UAC5BC,EAA4B,QAAjBw/D,EAAGjlG,EAAOiK,eAAO,IAAAg7F,OAAA,EAAdA,EAAgBx/D,YAGtC,MAAM4+C,EAAe,CACjB3+C,YAAa89D,EAAY99D,GACzBC,YAAaA,EACbH,UAAWg+D,EAAYh+D,GACvBC,YAAkC,KAApBA,GAAe,GAC7BjrC,OAAQA,GAEZ,OAAOb,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW0tC,GAAc,WAC3D50E,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GACA8V,EAAA9V,EAAIqqG,EAAAY,GAAAtqG,KAAJX,GACAiD,EAAAjD,EAAI8pG,EAAsB9pG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WACnE9iF,EAAAhD,EAAI8pG,GAAoBj+F,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GACpEgB,EAAKsrF,eAAetsF,EAAE0O,OAAO5K,UAGjCG,EAAAjD,EAAI+pG,EAAwB/pG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WACrE9iF,EAAAhD,EAAI+pG,GAAsBl+F,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GACtEgB,EAAK2rF,eAAe3sF,EAAE0O,OAAO5K,UAEjCG,EAAAjD,EAAIgqG,EAAqBhqG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,iBAElE7iF,EAAAjD,EAAIiqG,EAAoBjqG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WACjE9iF,EAAAhD,EAAIiqG,GAAkBp+F,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GAClEgB,EAAKurF,aAAavsF,EAAE0O,OAAO5K,UAE/BG,EAAAjD,EAAIkqG,EAAwBlqG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WACrE9iF,EAAAhD,EAAIkqG,GAAsBr+F,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GACtEgB,EAAKwrF,eAAe3jF,WAAW7I,EAAE0O,OAAO5K,OAAS,QAErDG,EAAAjD,EAAImqG,EAAmBnqG,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WAChE9iF,EAAAhD,EAAImqG,GAAiBt+F,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GACjEgB,EAAKurG,UAAU1jG,WAAW7I,EAAE0O,OAAO5K,WAGnCoB,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKZkC,UAAUr0B,GACN,MAAMrG,EAAOC,KAGb,OAFAD,EAAKqG,OAASnC,EAAAA,EAAAA,QAAY,EAAM,GAAImC,GACpCrG,EAAK2F,SAAS3F,EAAKgrG,gBACZhrG,EAGX2F,SAASC,GACL,MAAM5F,EAAOC,KACPurG,EAAetnG,EAAAA,EAAAA,OAAWlB,EAAChD,EAAIuoF,GAAS3iF,GAC9C,IAAIC,EAAW,GACf,IAAK,IAAI6C,KAAO8iG,EACZ11F,EAAI9V,EAAIuqG,EAAAkB,GAAA9qG,KAAJX,EAA0B0I,KAC1B7C,EAAS6C,GAAO8iG,EAAa9iG,IAIrC,OADAzF,EAAAjD,EAAIuoF,EAAU1iF,GACN7F,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACL,KAAKA,EAAAA,EAAAA,KAAAA,UACDC,EAAKqG,OAAOmvB,KAAO3vB,EACnB,MACJ,KAAK9F,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACDC,EAAKqG,OAAOiK,QAAUzK,EACtB,MACJ,KAAK9F,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACDC,EAAKqG,OAAOivB,MAAQzvB,EACpB,MACJ,QACIA,EAAW,GAqDnB,OAlDA7F,EAAKsL,gBAAgB3M,MAAK,WACtB,OAAQqB,EAAKkzB,MACT,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACL,KAAKA,EAAAA,EAAAA,KAAAA,UACD,MAAM2rG,EAAY1rG,EAAKqG,OAAOmvB,KAC1Bk2E,EAAU3/D,aACV/rC,EAAKsrF,eAAeogB,EAAU3/D,aAE9B2/D,EAAU1/D,aACVhsC,EAAK2rF,eAAe+f,EAAU1/D,aAElC,MACJ,KAAKjsC,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD,MAAM4rG,EAAe3rG,EAAKqG,OAAOiK,QAC7Bq7F,EAAa5/D,aACb/rC,EAAKsrF,eAAeqgB,EAAa5/D,aAEjC4/D,EAAa3/D,aACbhsC,EAAK2rF,eAAeggB,EAAa3/D,aAEjC2/D,EAAa9/D,WACb7rC,EAAKurF,aAAaogB,EAAa9/D,WAE/B8/D,EAAa7/D,aACb9rC,EAAKwrF,eAAemgB,EAAa7/D,aAErC,MACJ,KAAK/rC,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACD,MAAM6rG,EAAa5rG,EAAKqG,OAAOivB,MAC3Bs2E,EAAW7/D,aACX/rC,EAAKsrF,eAAesgB,EAAW7/D,aAE/B6/D,EAAW5/D,aACXhsC,EAAK2rF,eAAeigB,EAAW5/D,aAE/B4/D,EAAW//D,WACX7rC,EAAKurF,aAAaqgB,EAAW//D,WAE7B+/D,EAAW9/D,aACX9rC,EAAKwrF,eAAeogB,EAAW9/D,aAM3Ch2B,EAAA9V,EAAIsqG,EAAAuB,GAAAlrG,KAAJX,MAEGA,EAGXoG,WAEI,OAAApD,EADa/C,KACFsoF,GAGf8C,aACI,MAAMrrF,EAAOC,KAEb,OADAD,EAAK2F,SAAS3F,EAAKgrG,gBACZhrG,EAGXgrG,aAAa93E,GACT,MAAMlzB,EAAOC,KAEb,OADAizB,EAAOA,GAAQlzB,EAAKkzB,MAEhB,KAAKnzB,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACL,KAAKA,EAAAA,EAAAA,KAAAA,UACD,OAAOC,EAAKqG,OAAOmvB,KACvB,KAAKz1B,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD,OAAOC,EAAKqG,OAAOiK,QACvB,KAAKvQ,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACD,OAAOC,EAAKqG,OAAOivB,MACvB,QACI,OAAO,MAWnBpX,SAASzZ,GACL,MAAMzE,EAAOC,KAEb,GADAD,EAAKyE,MAAQA,GACRA,EACD,OAAOzE,EAEX,IAAIqG,EAASrD,EAAAhD,EAAIqpF,GAAiB5qE,IAAIha,GAqCtC,OApCK4B,IAEGA,EADA5B,EAAM4B,OACG,CAAC,GAAErD,EAAEhD,EAAIoqG,GAAiB3lG,EAAM4B,QAGhC,CAAC,GAAErD,EAAEhD,EAAIoqG,IAAiB9hG,OAAO7D,EACrCsK,SACAxQ,KAAIyQ,IACD,MAAMpJ,EAAQoJ,EAAE5I,WAChB,GAAkC,IAA9BhH,OAAOD,KAAKyG,GAAOtC,OACnB,OAAO,KAEX,MAAMwoG,EAAW,GACjB,QAAQ,GACJ,KAAK98F,aAAaiC,EAAAA,EAClB,KAAKjC,aAAa6B,EAAAA,EACdi7F,EAASt2E,KAAO5vB,EAChB,MACJ,KAAKoJ,aAAa1M,EAAAA,EAClB,KAAK0M,aAAakB,EAAAA,EACd47F,EAASx7F,QAAU1K,EACnB,MACJ,KAAKoJ,aAAaW,EAAAA,EAClB,KAAKX,aAAac,EAAAA,EACdg8F,EAASx2E,MAAQ1vB,EACjB,MACJ,QACI,OAAO,KAEf,OAAOkmG,KAEV3mG,QAAOS,KAAWA,KAE3BS,EAAS7C,EAAAA,EAAAA,KAAAA,UAAkB6C,IAE/BrG,EAAK06B,UAAUr0B,GACRrG,EASX8rF,WAAWpoF,GACP,MAAM1D,EAAOC,KACbD,EAAKyE,MAAQ,KACb,MAAMmB,EAAQlC,MAAAA,OAAO,EAAPA,EAAS0C,WACvB,QAAQ,GACJ,KAAK1C,aAAmBuN,EAAAA,EACxB,KAAKvN,aAAmBmN,EAAAA,EACpB7Q,EAAKkzB,KAAOnzB,EAAAA,EAAAA,KAAAA,SACZ,MACJ,KAAK2D,aAAmBiM,EAAAA,EACxB,KAAKjM,aAAmBoM,EAAAA,EACpB9P,EAAKkzB,KAAOnzB,EAAAA,EAAAA,KAAAA,MACZ,MACJ,QACIC,EAAKkzB,KAAOnzB,EAAAA,EAAAA,KAAAA,QAKpB,OAHI6F,GAASxG,OAAOD,KAAKyG,GAAOtC,OAAS,GACrCtD,EAAK2F,SAASC,GAEX5F,EAsBX+rG,oBAAoBv6B,GAChB,MAAMxxE,EAAOC,KAKb,YAJcoE,IAAVmtE,IACAA,EAAQxxE,EAAKgrG,eAAej/D,aAEhCj2B,EAAA9V,EAAIwqG,EAAAwB,GAAArrG,KAAJX,EAAIgD,EAAgBhD,EAAI8pG,GAAqBt4B,GACtCxxE,EAGXisG,kBAAkBz6B,GACd,MAAMxxE,EAAOC,KAKb,YAJcoE,IAAVmtE,IACAA,EAAQxxE,EAAKgrG,eAAen/D,WAEhC/1B,EAAA9V,EAAIwqG,EAAAwB,GAAArrG,KAAJX,EAAIgD,EAAgBhD,EAAIiqG,GAAmBz4B,GACpCxxE,EAmBXsrF,eAAe9Z,GACX,MAAMxxE,EAAOC,KACb,OAAA6V,EAAO9V,EAAIyqG,EAAAyB,GAAAvrG,KAAJX,EAAuB,cAAeA,EAAK+rG,oBAAqBv6B,GAG3E+Z,aAAa/Z,GACT,MAAMxxE,EAAOC,KACb,OAAA6V,EAAO9V,EAAIyqG,EAAAyB,GAAAvrG,KAAJX,EAAuB,YAAaA,EAAKisG,kBAAmBz6B,GAGvEka,oBAAoBygB,GAChB,MAAMnsG,EAAOC,KAQb,YAPmBoE,IAAf8nG,IACAA,EAAa3qG,KAAKirC,MAAwC,IAAlCzsC,EAAKgrG,eAAel/D,cAEhDqgE,EAAa5zF,SAAS4zF,EAAY,IAC7BvkF,OAAO3mB,MAAMkrG,KACdnpG,EAAAhD,EAAIkqG,GAAsBpnG,MAAQqpG,GAE/BnsG,EAGXwrF,eAAeC,GACX,MAAMzrF,EAAOC,KACb,IAAK2nB,OAAO3mB,MAAMwqF,GAAQ,CACtBzrF,EAAK0rF,oBAAoBlqF,KAAKirC,MAAc,IAARg/C,IACpC,MAAM7lF,EAAK5C,EAAGhD,EAAIuoF,GAClB,GAAI3iF,EAAO,CACP,GAAIA,EAAMkmC,cAAgB2/C,EACtB,OAAOzrF,EAEX4F,EAAMkmC,YAAc2/C,EAGxB31E,EAAA9V,EAAI8qG,EAAAsB,IAAAzrG,KAAJX,EAAyB,CAAEy0B,SAAU,cAAe3xB,MAAO2oF,IAE/D,OAAOzrF,EAGXqsG,oBAAoB95E,GAChB,MAAMvyB,EAAOC,KASb,YARcoE,IAAVkuB,IACAA,EAAQvyB,EAAKgrG,eAAeh/D,aAEhCzZ,EAAQha,SAASga,EAAO,IACnB3K,OAAO3mB,MAAMsxB,KACdvvB,EAAAhD,EAAI+pG,GAAsBjnG,MAAQyvB,EAClCvvB,EAAAhD,EAAIgqG,GAAmBpkG,MAAM0mG,kBAAoB/5E,EAAQ,MAEtDvyB,EAGX2rF,eAAep5D,GACX,MAAMvyB,EAAOC,KAEb,GADAsyB,EAAQha,SAASga,EAAO,KACnB3K,OAAO3mB,MAAMsxB,GAAQ,CACtBvyB,EAAKqsG,oBAAoB95E,GACzB,MAAM3sB,EAAK5C,EAAGhD,EAAIuoF,GAClB,GAAI3iF,EAAO,CACP,GAAIA,EAAMomC,cAAgBzZ,EACtB,OAAOvyB,EAEX4F,EAAMomC,YAAczZ,EAGxBzc,EAAA9V,EAAI8qG,EAAAsB,IAAAzrG,KAAJX,EAAyB,CAAEy0B,SAAU,cAAe3xB,MAAOyvB,IAE/D,OAAOvyB,EAGXusG,eAAe1rG,GACX,MAAMb,EAAOC,KAQb,YAPeoE,IAAXxD,IACAA,EAASb,EAAKgrG,eAAenqG,QAEjCA,EAAS0X,SAAS1X,EAAQ,IACrB+mB,OAAO3mB,MAAMJ,KACdmC,EAAAhD,EAAImqG,GAAiBrnG,MAAQjC,GAE1Bb,EAGXurG,UAAU1qG,GACN,MAAMb,EAAOC,KAEb,GADAY,EAAS0X,SAAS1X,EAAQ,KACrB+mB,OAAO3mB,MAAMJ,GAAS,CACvBb,EAAKusG,eAAe1rG,GACpB,MAAM+E,EAAK5C,EAAGhD,EAAIuoF,GAClB,GAAI3iF,EAAO,CACP,GAAIA,EAAM/E,SAAWA,EACjB,OAAOb,EAEX4F,EAAM/E,OAASA,EAGnBiV,EAAA9V,EAAI8qG,EAAAsB,IAAAzrG,KAAJX,EAAyB,CAAEy0B,SAAU,SAAU3xB,MAAOjC,IAE1D,OAAOb,GAqCd,SAAAqqF,IAjfO,MAAMrqF,EAAOC,KACPizB,EAAOlzB,EAAKkzB,KAClBjwB,EAAAjD,EAAIuoF,EAAUvoF,EAAKgrG,aAAa93E,IAChCpd,EAAA9V,EAAI4qG,EAAA4B,IAAA7rG,KAAJX,EAA2BkzB,IAASnzB,EAAAA,EAAAA,KAAAA,UAChCmzB,IAASnzB,EAAAA,EAAAA,KAAAA,eACTmzB,IAASnzB,EAAAA,EAAAA,KAAAA,WACb+V,EAAA9V,EAAI6qG,EAAA4B,IAAA9rG,KAAJX,EAA6BkzB,IAASnzB,EAAAA,EAAAA,KAAAA,OAClCmzB,IAASnzB,EAAAA,EAAAA,KAAAA,YAChB,SAAAkrG,IAWG,MAAMjrG,EAAOC,KACbD,EAAK2L,iBAAiB,SAASnE,SAAQrF,GAAKA,EAAEk7B,SAAWr9B,EAAKq9B,WACjE,SAAAwuE,IAiNG,MAAM7rG,EAAOC,KACTD,EAAKyE,OACLzB,EAAAhD,EAAIqpF,GAAiBtqE,IAAI/e,EAAKyE,MAAOzE,EAAKqG,QAEjD,SAAAolG,EAgDoB3iG,GACjB,MAAgB,gBAATA,GAAmC,gBAATA,GACpB,cAATA,GAAiC,gBAATA,GACf,WAATA,EACP,SAAAkjG,EAwBcU,EAAal7B,GACxB,MAAMm7B,EAAQlkG,GAAK,IAAImf,OAAOnf,GAAGya,SAAS,IAAI0pF,SAAS,EAAG,KAC1D,GAAI7rG,MAAMC,QAAQwwE,GACdA,EAAS,IAAGm7B,EAAMn7B,EAAM,MAAMm7B,EAAMn7B,EAAM,MAAMm7B,EAAMn7B,EAAM,UAE3D,CACD,MAAM/nE,EAAQ+nE,EAAM/nE,MAAM,sCACtBA,GAASA,EAAMnG,SACfkuE,EAAQ,IAAM/nE,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,IAInF,GADAijG,EAAY5pG,MAAQ0uE,GACfhuE,EAAAA,EAAAA,gBAAAA,iBAAqC,CACtC,MAAMyxF,EAAQyX,EACdzX,EAAMrvF,MAAMinG,gBAAkBr7B,EAC9ByjB,EAAMxX,QAEb,SAAAyuB,EAoBiBz3E,EAAUq4E,EAASt7B,GACjC,MAAMxxE,EAAOC,KACP2F,EAAK5C,EAAGhD,EAAIuoF,GAClB,GAAI3iF,EAAO,CACPknG,EAAQnsG,KAAKX,EAAMwxE,GAEnB,GADqB5rE,EAAM6uB,KACN+8C,EACjB,OAAOxxE,EAEX4F,EAAM6uB,GAAY+8C,EAItB,OADA17D,EAAA9V,EAAI8qG,EAAAsB,IAAAzrG,KAAJX,EAAyB,CAAEy0B,SAAUA,EAAU3xB,MAAO0uE,IAC/CxxE,EACV,SAAA6rF,GAsGYE,EAAO/mF,GAChB,GAAI+mF,EAAO,CACP,MAAMC,OAA0B3nF,IAAZW,GAAyBA,OAAUX,EACvD0nF,EAAM/tD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBisF,IAErD,SAAA+gB,KAIG,OADa9sG,KACDgY,cAAe,IADdhY,KACsBs8C,cACtC,SAAAywD,KAIG,OADa/sG,KACDgY,cAAe,IADdhY,KACsBs8C,gBACtC,SAAAiwD,GAEqBxnG,GAClB,MAAMhF,EAAOC,KAEb,OADA6V,EAAA9V,EAAIwpF,EAAAqC,IAAAlrF,KAAJX,EAAI8V,EAAc9V,EAAI0qG,EAAAqC,IAAApsG,KAAJX,GAA2BgF,GACtChF,EACV,SAAAysG,GAEuBznG,GACpB,MAAMhF,EAAOC,KAEb,OADA6V,EAAA9V,EAAIwpF,EAAAqC,IAAAlrF,KAAJX,EAAI8V,EAAc9V,EAAI2qG,EAAAqC,IAAArsG,KAAJX,GAA6BgF,GACxChF,EACV,SAAAosG,GAEmBhoG,GAChB,MACM07B,EAAQ,IAAImhB,YAAYlhD,EAAAA,EAAAA,MAAAA,YAA0B,CAAEmgD,OAAQ97C,IADrDnE,KAERggC,cAAcH,GAI3Bb,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAaouE,GACtEvnG,EAAAA,EAAAA,QAAAA,cAA2BunG,EAC3B,Y,yqCCtkBAvnG,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,UAAuBs/F,EAAAA,QACvBt/F,EAAAA,EAAAA,QAAAA,MAAmBslG,EAAAA,QACnBtlG,EAAAA,EAAAA,QAAawH,EAAAA,EAEbjL,EAAAA,EAAAA,MAAAA,MAAqBA,EAAAA,EAAAA,MAAAA,OAAsB,WAC3CA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,OAAsBA,EAAAA,EAAAA,MAAAA,QAAuB,YAC7CA,EAAAA,EAAAA,MAAAA,iBAAgCA,EAAAA,EAAAA,MAAAA,kBAAiC,sBACjEA,EAAAA,EAAAA,MAAAA,gBAA+BA,EAAAA,EAAAA,MAAAA,iBAAgC,qBAE/D,MAAMktG,EAA4B,SAAUvpG,GACxC,OAAIA,GAAW3C,MAAMC,QAAQ0C,EAAQqL,UACD,IAA5BrL,EAAQqL,SAASzL,OACVI,EAAQqL,SAAS,GAErB,KAEJrL,GAWT,IAAA4oF,EAAA,IAAA7pF,QAAAqjF,EAAA,IAAArjF,QAAAqhG,EAAA,IAAApxF,QAAAw6F,EAAA,IAAAx6F,QAAAy6F,EAAA,IAAAz6F,QAAA06F,EAAA,IAAA16F,QAEF,MAAM26F,UAAqBriG,EAAAA,EAQvBtL,cACIG,SAASod,WAAWnK,EAAA,KAAAs6F,GAAAt6F,EAAA,KAAAq6F,GAAAr6F,EAAA,KAAAo6F,GAAAp6F,EAAA,KAAAgxF,GAAAhkG,EAAA,uBARN,OAAKA,EAAA,4BACA,MAAI8C,EAAA,KAAA0pF,EAAA,CAAAzpF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAkjF,EAAA,CAAAjjF,UAAA,EAAAC,WAAA,IAAAhD,EAAA,0BAAAA,EAAA,0BAQvB,MAAME,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKy8C,cAAe,EACpB,MAAM4vC,EAAEppF,EAAGjD,EAAI8lF,EAAkB,IAAM9lF,EAAKu8C,OAC5Ct5C,EAAAjD,EAAIssF,EAAc,CACdC,mBAAoBF,EAAK,oCACzByR,oBAAqB,0CACrBC,uBAAwB1R,EAAK,iBAGjCrsF,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WACzCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAIvC//B,eACI,MAAO,gBAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,KAoBb,OAnBA1B,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,MAAqB,IAAMA,EAAAA,EAAAA,MAAAA,UAAyB,IAAMA,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAC5F,MAAM+L,EAAU/L,EAAE+L,SACdA,EAAQI,QAAUJ,EAAQ3F,iBAC1BpF,EAAKstG,MAAMviG,MAIlBuD,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACzCgB,EAAKstG,MAAMtuG,EAAE+L,QAAQs2F,qBACrBriG,EAAE0E,QAAQR,qBAAoB,MAEjCoL,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,SAAUf,GACxCgB,EAAKutG,SAASvuG,EAAE+L,QAAQs2F,qBACxBriG,EAAE0E,QAAQR,qBAAoB,YAGhCrE,QAAQwiB,IAAI,CAAC7d,EAAAA,EAAAA,QAAAA,UAAAA,SAAAA,KAAmCxD,EAAMzB,GAAMyB,EAAKsL,wBACjEtL,EAAKokG,iBACJpkG,EAGX6K,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,EAGpBwzC,SACI,MAAM98C,EAAOC,KAEb,OAAOD,EAAK+8C,qBAAqBl+C,QAAQwiB,IAAI,CACzCrhB,EAAKg9C,WAAW,CAAE0C,UAAW1/C,EAAKJ,QAAQ6/C,mBAC1Cz/C,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,CACzC4hD,WAAYn+F,EAAK4mC,SACjB8Y,UAAW1/C,EAAKJ,QAAQ6/C,mBACzB,SAAU91C,GACT3J,EAAKu8E,WAAWnvE,UAAYzD,QAKxC2jG,MAAMt/C,GACF,MAAMhuD,EAAOC,KACbD,EAAKwtG,WAAax/C,EAClB,MAAMy/C,EAAgBz/C,EAAIs3C,iBAEpBoI,EAAgB,WAClB,OAAOD,IAAkBA,EAAcx1F,cAAc,IAAMjY,EAAKu8C,QAGhEv8C,EAAK2tG,kBAAkB3/C,KACnB0/C,IAEA1tG,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAO,MAAM,SAAU5yC,GAG7C,GAAI+jG,IAAiB,CACjB,IAAIE,EAAkB/uG,QAAQC,UAC9B,MAAMo1D,EAAYlG,EAAI3iD,sBACtB,IAAK6oD,EAAUvoD,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,MAAAA,UAAAA,MAAmC,QAAQF,OAAQ,CACrF,MAAMk1F,GAAsBxqC,EAAI7iD,QAAU6iD,EAAI5oD,eAAiB4oD,EAAI5oD,eAAiB4oD,EAAI7iD,OAAOqtF,mBAC3FA,IAAwD,IAAlCA,EAAmBl0F,aACzCtE,EAAK6tG,aAAe,IAAIrqG,EAAAA,EAAAA,QAAAA,MAAiB,CACrCkK,OAAQ+/F,EACRzE,iBAAkB90C,EAClB1pD,MAAOguF,EAAmBn5F,KAE9BuuG,EAAkB5tG,EAAK6tG,aAAaviG,iBAI5CsiG,EAAgBjvG,MAAK,WACjB,GAAI+uG,IAAiB,CACjB,MACM3hB,GADS,IAAItuE,WACEE,gBAAgBhU,EAAM,aAAag4B,KAAKxqB,WAC7Ds2F,EAAc3gG,YAAYi/E,GAE1B/rF,EAAKutG,SAASv/C,GAEdl4C,EAAA9V,EAAIktG,EAAAY,GAAAntG,KAAJX,EAA4BguD,GAE5Bl4C,EAAA9V,EAAI8jG,EAAAiK,GAAAptG,KAAJX,EAAsBguD,WAOtChuD,EAAKutG,SAASv/C,IA8B1Bu/C,SAASv/C,GACL,MAAMhuD,EAAOC,KACP+tG,EAAQhgD,EAAIs3C,iBAAiBrtF,cAAc,IAAMjY,EAAKu8C,OACtDn3C,EAAiBpF,EAAK2tG,kBAAkB3/C,GAKxC3R,EAAWj3C,GAAkBA,EAAeX,OAASW,EAAeX,MAAM4gF,MAC5EjgF,EAAeX,MAAM4gF,MAAMya,cAAgB16F,EAAeX,MAAQW,KAAoBA,EAAeX,MACzG,GAAI43C,EACA,GAAIj3C,EAAgB,CAChB4oG,EAAM1vD,QAAQp/B,QAAU9Z,EAAeX,MAAMpF,GAC7C2uG,EAAM1vD,QAAQ6rC,UAAY/kF,EAAe/F,GAEzC,MAAM4uG,IAAc7oG,EAAeX,MAAM0M,SAAW/L,EAAe2J,SAASzL,OAAS,EAC/E4qG,EAAWF,EAAM/1F,cAAe,IAAGjY,EAAKu8C,mBAC9C2xD,GAAYA,EAASlwE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBkuG,GAC7DD,EAAM/1F,cAAe,IAAGjY,EAAKu8C,gBAAgBve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBkuG,GACrFD,EAAM/1F,cAAe,IAAGjY,EAAKu8C,iBAAiBve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBkuG,GAEtFjuG,EAAKw/C,mBAAmB7gD,MAAK,SAAU6hC,GACnC,MAAM2tE,EAAaH,EAAM/1F,cAAe,IAAGjY,EAAKu8C,kBAC5C4xD,GACAA,EAAWnwE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QACvBygC,KACCp7B,aAA0B6L,EAAAA,GAAY7L,aAA0ByL,EAAAA,MAChEm9C,EAAI9gD,OAEd,MAAMkhG,EAAUJ,EAAM/1F,cAAe,IAAGjY,EAAKu8C,kBACzC6xD,GACAA,EAAQpwE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBygC,KAC3Cp7B,aAA0BuK,EAAAA,IAC5Bs+F,kBAKLD,EAAM1vD,QAAQp/B,eACd8uF,EAAM1vD,QAAQ6rC,UAGzBnqF,EAAK6tG,cAAgBzoG,IACrBpF,EAAK6tG,aAAarjG,MAAQpF,EAAe/F,IAEzC2uG,IACAA,EAAMhwE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACvBmnD,YAAW,WACP8mD,EAAMhwE,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBs8C,KACjD,MAIXgyD,sBAAsBrvG,GAClB,MAAMgB,EAAOC,KACPyD,EAAUupG,EAA0BjtG,EAAKsuG,sBAAsBtvG,EAAE0O,OAAO+uD,gBAC1E/4D,GACA1D,EAAKuuG,mBAAmB7qG,GAIhC8qG,mBAAmBxvG,GACf,MAAMgB,EAAOC,KACPyD,EAAUupG,EAA0BjtG,EAAKsuG,sBAAsBtvG,EAAE0O,OAAO+uD,gBAC9E,IAAI/4D,EASA,MAAMzE,MAAM,8CARZ6W,EAAA9V,EAAImtG,EAAAsB,GAAA9tG,KAAJX,EAA4B,CAAE0D,QAASA,IAAW/E,MAAKkM,eAAgBmE,GACnEhP,EAAKwoG,QAAU,CACX9kG,QAASsL,GAGbhP,EAAKqpG,qBAOjBqF,kBAAkB1vG,GACd,MAAMgB,EAAOC,KACP8O,GAtPyBrL,EAsPO1D,EAAKsuG,sBAAsBtvG,EAAE0O,OAAO+uD,gBApPtE17D,MAAMC,QAAQ0C,EAAQqL,UACfrL,EAAQqL,SAEZ,CAACrL,GAEL,GAPkB,IAAUA,EAuP3BqL,EAASzL,QACTtD,EAAKotD,eAAer+C,GAI5B4/F,oBAAoB3vG,GACHiB,KACR83B,cADQ93B,KACWquG,sBAAsBtvG,EAAE0O,OAAO+uD,gBAG3DmyC,qBAAqB5vG,GACjB,MAAMgB,EAAOC,KACPyD,EAAUupG,EAA0BjtG,EAAKsuG,sBAAsBtvG,EAAE0O,OAAO+uD,gBACxEoyC,EAAa,GACfnrG,GACA1D,EAAK+tF,sBAAsBpvF,MAAK,SAAUmwG,GAClCA,IACIprG,EAAQ63D,oBAAsB,GAC9BszC,EAAWzU,mBAAoB,EAC/ByU,EAAWhV,uBAAwB,EAEnCiV,EAAQ3W,wBAAwB,CAC5B/zC,WAAYpkD,EAAKJ,QAAQwkD,YAAc,EACvCO,aAAc3kD,EAAKJ,QAAQ+kD,cAAgB,KAG/CmqD,EAAQ3W,wBAAwB/4F,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,mBAErHqvD,EAAQpgB,wBAAwBhrF,EAASmrG,OAMzDE,uBAAuB/vG,GACnB,MAAMgB,EAAOC,KACbD,EAAK+tF,sBAAsBpvF,MAAKmwG,GAAWA,GACvCA,EAAQ7W,sBAAsBgV,EAA0BjtG,EAAKsuG,sBAAsBtvG,EAAE0O,OAAO+uD,gBAAiB,CACzG47B,aAAa,MA8CzBxtF,4BACI,MAAM7K,EAAOC,KACb,OAAKD,EAAKJ,QAAQ6/C,kBAGbz/C,EAAK2wF,mBACN3wF,EAAK2wF,uBAAyB3wF,EAAKzB,IAAI6M,WAAW,YAAapL,EAAKJ,QAAQ6/C,mBAEzEz/C,EAAK2wF,kBALD,KAQf9lF,yBAAyBnH,GACrB,MAAM1D,EAAOC,KAEPqmG,QAAuBtmG,EAAKs/C,oBAElC,IAAI1/C,EAAU,CACV4K,MAAOxK,EAAK4hC,gBAAgB,WAAa,MAAQ5hC,EAAK4hC,gBAAgB,YACtE42B,SAAQ1iD,EAAE9V,EAAIotG,EAAA4B,GAAAruG,KAAJX,EAAyB0D,KAGnC1D,EAAKzB,IAAImhD,WAAa1/C,EAAKJ,QAAQ6/C,oBACnC7/C,EAAUR,OAAOmD,OAAO,GAAI3C,EAAS,CACjC8/C,UAAWtgD,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,qBAIpG7/C,EAAQouE,aAAe,WACnBhuE,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,OAAqB,CAAEgL,QAASu7F,EAAgB35E,OAAQ,cAG7E25E,EAAej5F,KAAK3J,EAAS9D,GAGjC+tG,kBAAkB3/C,GAAK,IAAAihD,EACnB,OAAOjhD,MAAAA,GAAW,QAARihD,EAAHjhD,EAAK7iD,cAAM,IAAA8jG,OAAR,EAAHA,EAAazW,sBAAsBxqC,MAAAA,OAAG,EAAHA,EAAK5oD,gBAGnDkpG,sBAAsB7mG,GAClB,MACMhD,EADOxE,KACM1B,IAAIqhB,SAASnY,EAAI62C,QAAQp/B,SAC5C,OAAIza,EACOA,EAAMyzB,eAAezwB,EAAI62C,QAAQ6rC,WAErC,KAGX/8B,eAAer+C,GACX,MAAM/O,EAAOC,KACTD,EAAKzB,KACLyB,EAAKzB,IAAI6uD,eAAer+C,EAAU,CAAEy7C,SAAS,IAIrDzyB,cAAcr0B,GACV,MAAM1D,EAAOC,KACP83B,EAAgB,WACdr0B,GAAWA,EAAQe,OACnBf,EAAQe,MAAMszB,cAAcr0B,IAIuE,IAAAwrG,EAAAC,EAAAC,EAAAC,EAAvG3rG,GAAWA,EAAQe,OAASf,EAAQe,MAAM4gF,OAAS3hF,EAAQe,QAAUf,EAAQe,MAAM4gF,MAAMqd,cACzF3qE,IAEmB,QAAnBm3E,EAAIlvG,EAAKwtG,kBAAU,IAAA0B,GAAQ,QAARC,EAAfD,EAAiB/jG,cAAM,IAAAgkG,GAAvBA,EAAyBp3E,gBAA8B,QAAfq3E,EAAApvG,EAAKwtG,kBAAU,IAAA4B,GAAQ,QAARC,EAAfD,EAAiBjkG,cAAM,IAAAkkG,GAAvBA,EAAyBt3E,cAAcr0B,KAGnFF,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,0BAA0B,WAAY,IAAA0tE,EAAAC,EAAAC,EAAAC,EAClE13E,IAEmB,QAAnBu3E,EAAItvG,EAAKwtG,kBAAU,IAAA8B,GAAQ,QAARC,EAAfD,EAAiBnkG,cAAM,IAAAokG,GAAvBA,EAAyBx3E,gBAA6B,QAAfy3E,EAAAxvG,EAAKwtG,kBAAU,IAAAgC,GAAQ,QAARC,EAAfD,EAAiBrkG,cAAM,IAAAskG,GAAvBA,EAAyB13E,cAAcr0B,OA0C9FgsG,gBAAgBhsG,GACZ,IAAImB,EAAS,GAIb,OAHInB,IACAmB,EAASnB,EAAQrE,IAEdwF,EASX81B,cACI,MAAM36B,EAAOC,KAEb,GAAID,EAAKwoG,QAAS,CACd,MAAM1zF,EAAQ,GAKd,GAJI9U,EAAKwoG,QAAQmH,SACb76F,EAAM66F,OAAS3vG,EAAKwoG,QAAQmH,QAEhC76F,EAAMzV,GAAKW,EAAKX,GACZW,EAAKwoG,QAAQ9kG,QAAS,CACtB,IAAIksG,EACJ,MAAMC,EAAiB7vG,EAAKwoG,QAAQ9kG,QAAQ+G,QAC5ColG,EAAevrG,YAAa,EAC5BurG,EAAerrG,WAAY,EAC3BorG,EAAa5vG,EAAKwoG,QAAQ9kG,QAAQe,MAAMk2B,YAAY,CAChD5rB,SAAU,CAAC8gG,KAEf/6F,EAAM/F,SAAW6gG,EAAW7gG,SACxB6gG,EAAWzoG,MACX2N,EAAM3N,IAAMyoG,EAAWzoG,UAExB,GAAInH,EAAKwoG,QAAQz5F,SAAU,CAE9B,GADA+F,EAAM/F,SAAW/O,EAAKwoG,QAAQz5F,SAC1B/O,EAAK8vG,oBAAqB,CAC1B,IAAIF,EAAa5vG,EAAK8vG,oBAAoBn1E,cAC1C7lB,EAAM/F,SAAW6gG,EAAW7gG,SAE5B/O,EAAKwoG,QAAQrhG,MACb2N,EAAM3N,IAAMnH,EAAKwoG,QAAQrhG,KAGjC,OAAO2N,EAGX,OAAO,KAGXsqC,YAAYtqC,GACR,MAAM9U,EAAOC,KACTD,EAAKzB,KAAOuW,EAAM/F,UAAY+F,EAAM/F,SAASzL,SAC7CtD,EAAKwoG,QAAU,CACXz5F,SAAU+F,EAAM/F,UAEhB+F,EAAM3N,MACNnH,EAAKwoG,QAAQrhG,IAAM2N,EAAM3N,KAE7BnH,EAAKzB,IAAI8rD,SAAS,CACdhrD,GAAIW,EAAK4mC,SACTy+C,MAAOrlF,EACPoK,KAAMrK,EAAAA,EAAAA,UAAAA,OACNyK,MAAOxK,EAAK4hC,gBAAgB,OAC5BtS,SAAS,IACV3wB,MAAK,SAAU8F,GACdzE,EAAK8vG,oBAAsBrrG,EAC3BA,EAAM26C,YAAY,CAAErwC,SAAU+F,EAAM/F,SAAU5H,IAAK2N,EAAM3N,MAAOxI,MAAK,WAC7DmW,EAAM66F,QACN3vG,EAAKzB,IAAI6uD,eAAe3oD,EAAMsK,kBAMrD,SAAAg/F,EA1XoBpF,GACb,MAAM3oG,EAAOC,KAEb0oG,EAAet9F,sBAAsBM,iBAAiB,iBAAiBnE,SAAQ,SAAUuoG,IAChFpH,EAAex9F,QAAUw9F,EAAevjG,iBAGzC2qG,EAAelkG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC1D5N,EAAKotD,eAAe,CAACptD,EAAK2tG,kBAAkBhF,OAC7C,CAAE16F,SAAS,IAEd8hG,EAAe/xE,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,SAC1CwzD,EAAe1iF,aAAa,QAASrtB,EAAK4hC,gBAAgB,mBAG9DmuE,EAAepkG,iBAAiB,iCAAiCnE,SAAQ,SAAUuT,GAC/EA,EAAElP,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC7CA,EAAE+uE,oBACH,CAAE9/D,SAAS,UAGtB,MAAMy4F,EAAQiC,EAAet9F,sBAAsB4M,cAAe,IAAG0wF,EAAepsD,sBAChFmqD,GAAOA,EAAMjqC,cAAcz+B,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,SAC7D,SAAAuxD,EA4HsB9/C,GACnB,MAAMhuD,EAAOC,KAEPi0D,EAAYlG,EAAIs3C,iBAGtBpxC,EAAUj8C,cAAc,IAAMjY,EAAKu8C,MAAQ,WAAW1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACjGgB,EAAKquG,sBAAsBrvG,KAC5B,CAAEiP,SAAS,IAGdimD,EAAUj8C,cAAc,IAAMjY,EAAKu8C,MAAQ,cAAc1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACpGgB,EAAKwuG,mBAAmBxvG,KACzB,CAAEiP,SAAS,IAGdimD,EAAUj8C,cAAc,IAAMjY,EAAKu8C,MAAQ,aAAa1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACnGgB,EAAK0uG,kBAAkB1vG,KACxB,CAAEiP,SAAS,IAGd,MAAMkgG,EAAaj6C,EAAUj8C,cAAe,IAAGjY,EAAKu8C,kBAChD4xD,GACAA,EAAWtiG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACtDgB,EAAK4uG,qBAAqB5vG,KAC3B,CAAEiP,SAAS,IAIlB,MAAMmgG,EAAUl6C,EAAUj8C,cAAe,IAAGjY,EAAKu8C,kBAC7C6xD,GACAA,EAAQviG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACnDgB,EAAK+uG,uBAAuB/vG,KAC7B,CAAEiP,SAAS,IAIlBimD,EAAUj8C,cAAc,IAAMjY,EAAKu8C,MAAQ,YAAY1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAClGgB,EAAK2uG,oBAAoB3vG,KAC1B,CAAEiP,SAAS,IACjB,eAAAwgG,EA8E4B7uG,GACzB,MAAMI,EAAOC,KAEPmF,GADNxF,EAAUA,GAAW,IACU8D,QAC/B,GAAI0B,EAAgB,CAChB,MAAM1B,EAAU0B,EAAeqF,QAG/B,GAFA/G,EAAQS,MAAMiB,EAAe/F,IAC7BqE,EAAQe,MAAQW,EAAeX,MAC3B7E,EAAQ8/C,UAAW,CACnB,IAAIswD,GAAoB,EAIxB,IAHKpwG,EAAQ8/C,UAAU0E,YAAc1gD,EAAQ63D,oBAAsB,IAC/Dy0C,GAAoB,GAEpBA,EAAmB,KAAAC,EACnB,MAAM5Q,EAAc,CAChBl4F,IAAKnH,EAAKzB,IAAI4I,IACd4H,SAAU,CAACrL,GACX47F,iBAA+C,QAA/B2Q,EAAEjwG,EAAKJ,QAAQ6/C,wBAAgB,IAAAwwD,OAAA,EAA7BA,EAA+B3Q,iBACjDl7C,WAAYxkD,EAAQ8/C,UAAU0E,WAC9BO,aAAc,GAEZnkB,QAAaxgC,EAAKw/C,mBAExB,aADuBhf,EAAK14B,YAAYu3F,IACxB,GAGhB,OAAO37F,EAKX,OADAA,EAAQ6E,UACD7E,EAGf,OAAO,KACV,SAAAsrG,EAUmBtrG,GAChB,MAAM1D,EAAOC,KAEb,OADmBD,EAAK0vG,gBAAgBhsG,GAASwf,WAAW1Z,QAAQ,IAAI+f,OAAOvpB,EAAKgjG,gBAAiB,KAAMhjG,EAAKkwG,uBAAyBlwG,EAAK4hC,gBAAgB,YAC5IvT,cAAc7kB,QAAQ,OAAQ,KAAO,IAAMhG,EAAAA,EAAAA,KAAAA,kBAAyB,IAAIsgC,MAAO5gB,YAAY,GAmErH1f,EAAAA,EAAAA,IAAO6pG,EAAcvK,EAAAA,SAErBt/F,EAAAA,EAAAA,QAAAA,aAA0B6pG,EAC1B,W,25BC5hBA7pG,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,SAAcq+C,EAAAA,EACdr+C,EAAAA,EAAAA,OAAY2B,EAAAA,EAEZ,MAAMgrG,EAAe,IAAIj8E,IACzBxiB,OAAO7F,iBAAiB,gBAAgB,SAAwB7M,GACxDmxG,EAAar7E,KAAO,IACpB91B,EAAEoxG,iBACFpxG,EAAEqxG,YAAc,MAErB,CAAEC,SAAS,IAEd,MAAM3zE,EAAc,kBAAkB,IAAA4sD,EAAA,IAAA72E,QAAA8+E,EAAA,IAAA9+E,QAAA69F,EAAA,IAAA79F,QAAA89F,EAAA,IAAA99F,QAEtC,MAAM+9F,UAAiB7mB,EAAAA,QAInBlqF,cACIG,SAASod,WAAWnK,EAAA,KAAA09F,GAAA19F,EAAA,KAAAy9F,GAAAz9F,EAAA,KAAA0+E,GAAA1+E,EAAA,KAAAy2E,GAAAzpF,EAAA,uBAHN,OAKDG,KACR4pF,aAAa,YADL5pF,KAGRwE,MAAQ,KAGN+4B,gCACP,MAAO,CAAC,YAGZC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,aAAT6I,GACAgN,EAAA9V,EAAIupF,EAAAa,GAAAzpF,KAAJX,GAEQ,YAAR8I,GACAgN,EAAA9V,EAAIwxF,EAAAe,GAAA5xF,KAAJX,GAIRw8C,eACI,MAAO,eAGP8tC,eACA,OAAOrqF,KAAK29B,aAAa,YAGzB0sD,aAASxnF,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GASnC8pC,eACA,OAAO3sC,KAAK29B,aAAa,YAGzBgP,aAAS9pC,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GASvC+H,eAAetM,GACX,MAAMyB,EAAOC,KACP4E,QAAehF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAE/CyB,EAAK0wG,kBAAoB1wG,EAAK2wG,iBAC1B3wG,EAAK0wG,cACL1wG,EAAK0wG,YAAYrqG,OAASrG,EAAKJ,QAAQyG,QAG3C9H,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GACtCA,EAAE+L,UAAY/K,EAAK+L,OACnB/L,EAAK4wG,sBAGZtiG,GAAGvO,EAAAA,EAAAA,MAAAA,YAA2B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACvEmxG,EAAariC,OAAO9uE,EAAEyF,OACtBzE,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GACvB7xG,EAAEyF,QAAUosG,GACZ7wG,EAAK4wG,yBAIhBtiG,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnCgB,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GAC3B,GAAI7xG,EAAEyF,QAAUosG,EAAU,CACtB,MAAMn2C,EAAe17D,EAAEyF,MAAMsK,SAAS,GACN,IAAA+hG,EAAhC,GAAIp2C,IAAiB17D,EAAE0E,QACnB1E,EAAE0E,QAAQI,QAAU42D,MAAAA,GAAqB,QAATo2C,EAAZp2C,EAAc52D,eAAO,IAAAgtG,OAAT,EAAZA,EAAuBlmG,QAC3C5L,EAAE0E,QAAQxD,KAAKwD,QAAQG,SAAW7E,EAAE0E,QAAQI,eAK3DwK,GAAGvO,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtEgB,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GACvB7xG,EAAEyF,QAAUosG,IACPV,EAAa7+E,IAAItyB,EAAEyF,QACpB0rG,EAAat1F,IAAI7b,EAAEyF,cA2BvC,OArBuBzE,EAAK2wG,iBACbhyG,MAAKoyG,IAChBA,EAAQziG,GAAGvO,EAAAA,EAAAA,MAAAA,cAA6B,IAAMA,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GACtEA,EAAE0E,QAAQe,QAAU0rG,EAAa7+E,IAAItyB,EAAE0E,QAAQe,QAC/C0rG,EAAat1F,IAAI7b,EAAE0E,QAAQe,aAKvClG,EAAIquD,OAAM,WACF5sD,EAAKJ,QAAQuL,OACb2K,EAAA9V,EAAIuwG,EAAAS,GAAArwG,KAAJX,EAAmBA,EAAKJ,QAAQuL,QAGhC5M,EAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAClB8E,OAAO/J,EAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,cAC9BgE,SAAQ,SAAUwmD,GACfl4C,EAAA9V,EAAIuwG,EAAAS,GAAArwG,KAAJX,EAAmBguD,SAI5BnpD,EA4KXgG,sBACI,MACMomG,EAAuB,+BACvB3nG,EAAW,GACjBA,EAHarJ,KAGCs8C,cAAgB00D,GAAsB1iG,QAHvCtO,KAIRqJ,SAAWA,EAGpBuB,aAAa2tB,GACT,MAAMx4B,EAAOC,KACPixG,IAAwBx/F,OAAOy/F,mBACrC,OAAOnxG,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GAC5Dh0B,EAAKg9C,WAAW,CACZo0D,cAAepxG,EAAK4mC,SACpB0jD,SAAUtqF,EAAKsqF,SACf19C,SAAU5sC,EAAK4sC,SACfykE,cAAeH,IAChB,WACKlxG,EAAKzB,KACLyB,EAAKzB,IAAI01D,gBAAgB,CACrBq9C,QAAQ,EACRrlG,QAAS,QACTC,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,mBAEhCjjC,MAAKoN,IACJ/L,EAAK+L,MAAQA,EACb/L,EAAK+L,MAAMY,IAAIsL,cAAc,IAAMjY,EAAK+L,MAAMwwC,MAAQ,SAAS4iC,sBAAsB,YAAan/E,GAClGA,EAAKuxG,WAAavxG,EAAK+L,MAAMY,IAAIsL,cAAe,IAAGjY,EAAKu8C,8BAA8Bv8C,EAAKu8C,kBAC3Fv8C,EAAKuxG,WAAW1lG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC3D5N,EAAK2wG,iBAAiBhyG,MAAK,SAAU+xG,GACjCA,EAAY7iB,mBAAmBlvF,MAAK,SAAU2zF,GAC1CA,EAAcuD,iBAAiBvD,EAAc/B,uBAC7CvwF,EAAKwxG,eAGd,CAAEvjG,SAAS,IACVijG,IACAlxG,EAAKyxG,aAAezxG,EAAK+L,MAAMY,IAAIsL,cAAe,IAAGjY,EAAKu8C,8BAA8Bv8C,EAAKu8C,oBAC7Fv8C,EAAKyxG,aAAa5lG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC7D5N,EAAK2wG,iBAAiBhyG,MAAK,SAAU+xG,GACjCA,EAAY7iB,mBAAmBlvF,MAAK,SAAU2zF,GAC1CA,EAAcuD,iBAAiBvD,EAAc/B,uBAC7CvwF,EAAKwxG,KAAK,CAAEE,YAAY,YAGjC,CAAEzjG,SAAS,KAEM,mBAAbuqB,GACPA,IAEJ15B,cAOpB+L,uBAAuB,IAAA8mG,EACnB,MAAM3xG,EAAOC,KAEb,aADMD,EAAKsL,gBACM,QAAjBqmG,EAAO3xG,EAAK+L,aAAK,IAAA4lG,OAAA,EAAVA,EAAYhlG,IAAIsL,cAAe,IAAGjY,EAAKu8C,yBAGlD1xC,sBAAsBjL,GAAS,IAAAgyG,EAC3B,MAAM5xG,EAAOC,KACP2vF,EAAQhwF,MAAAA,OAAO,EAAPA,EAASgwF,YACjB5vF,EAAKsL,gBACX,MAAM7G,QAAczE,EAAK4f,WACnB8wF,QAAoB1wG,EAAK2wG,iBACzBkB,QAAoBnB,EAAY9hB,qBACtC,GAAIhvF,MAAAA,GAAAA,EAAS4qF,iBAAkB,CAG3B,IAAIsnB,EAAcrtG,EAAMsK,SAASqM,MAAKpM,GAAKA,aAAaiC,EAAAA,IACpD8gG,EAAmBttG,EAAMsK,SAASqM,MAAKpM,GAAKA,aAAa6B,EAAAA,IAC7D,GAAIihG,GAAeC,EAEf,YADAvuG,EAAAA,EAAAA,MAAS,wDAGTsuG,GACAD,EAAY3mB,QAAQnrF,EAAAA,EAAAA,KAAAA,UACpB8xG,EAAYrnB,iBAAmB5qF,MAAAA,OAAO,EAAPA,EAAS4qF,kBAEnCunB,IACLF,EAAY3mB,QAAQnrF,EAAAA,EAAAA,KAAAA,eACpB8xG,EAAYrnB,iBAAmB5qF,MAAAA,OAAO,EAAPA,EAAS4qF,kBAGhDkmB,EAAY/gB,eAAeC,GAC3B5vF,EAAKsqF,SAA4B,QAApBsnB,EAAGhyG,MAAAA,OAAO,EAAPA,EAAS0qF,gBAAQ,IAAAsnB,GAAAA,EACjC97F,EAAA9V,EAAIwwG,EAAAwB,GAAArxG,KAAJX,GACAA,EAAK+L,MAAMsB,OAGfujG,mBACI,MAAM5wG,EAAOC,KACTD,EAAK0wG,aACL1wG,EAAK0wG,YAAYxyF,SAAS,MAE1Ble,EAAK+L,QAAU/L,EAAK+L,MAAMY,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACjDC,EAAK+L,MAAMkB,QAInBiR,SAASzZ,GACL,MAAMzE,EAAOC,KACb,OAAID,EAAK0wG,aACL1wG,EAAK0wG,YAAYxyF,SAASzZ,GACnB5F,QAAQC,WAEZD,QAAQ6W,OAAO,IAAIzW,MAAM,iCAGpC4L,iBACI,mBAAoB5K,KAAK0wG,kBAAkB/wF,WAG/Cu3E,WAAW1yF,GAAO,IAAAwtG,EACd,MAAMnpG,EAAwB,QAApBmpG,EAAGxtG,EAAM29D,mBAAW,IAAA6vC,OAAA,EAAjBA,EAAmBnpG,KAChC,OAAQA,GAAQA,EAAKimB,SAAS,SAAWjmB,EAAKimB,SAAS,QAG3DlkB,WAAWjL,GACP,MAAMI,EAAOC,KAEPwE,GADN7E,EAAUA,GAAW,IACC6E,aAAezE,EAAK4f,WAC1C,IAAImjB,EACA48C,EACAnnB,EACAvlD,EACAlE,EACA0zD,EACAyvC,EACAC,EACJ,MAAMC,EAAuBvnG,wBACI80E,EAAS3/E,EAAKzB,IAAI4rC,aAChC3iC,SAAQwZ,GAAKmvF,EAAariC,OAAO9sD,MAEpD,GAAIvc,EAAM29D,YAAa,CAEnB+vC,EAAgB1tG,EAAM29D,YACtB8vC,EAAaC,EACb35C,EAAW05C,EAAWppG,KACtB62E,EAAW90E,eAAgBmY,GACvB,MAAMijB,QAAgBpnC,QAAQwiB,IAAI2B,EAAOzkB,KAAIyiB,IAAC,IAAAqxF,EAAA,OAAiB,QAAjBA,EAAIrxF,EAAEohD,mBAAW,IAAAiwC,OAAA,EAAbA,EAAezwC,YAAYuwC,OAC7E,OAAOnvF,EAAO7d,QAAO,CAACitD,EAAI1qD,IAAQu+B,EAAQv+B,MAE9C,MAAM4qG,EAAgBznG,eAAgBw3D,GAClC,MAAMkwC,EAAuB,CAAEr/E,KAAM,aACrC,IAAIruB,QAAew9D,EAAOK,gBAAgB6vC,GAI1C,MAHe,YAAX1tG,IACAA,QAAew9D,EAAOM,kBAAkB4vC,IAErC1tG,GAENjF,EAAQ8xG,aAITjvC,QAAmB6vC,EAAcJ,IAErCnvE,EAAQl4B,iBACJ,GAAIjL,EAAQ8xG,YACJhgG,OAAOy/F,mBAAoB,CAC3B,MAAMv9E,EAAW1vB,EAAAA,EAAAA,mBAAwBguG,EAAWppG,MAC9C4qB,EAAYw+E,EAAWppG,KAAK+d,OAAOqrF,EAAWppG,KAAK6qB,YAAY,MACrE,IACIu+E,QAAmBxgG,OAAOy/F,mBAAmB,CACzCqB,cAAeN,EAAWppG,KAC1B2pG,MAAO,CAAC,CACJ3xE,OAAQ,CACJ,CAAClN,GAAW,CAACF,QAIzB+uC,QAAmB6vC,EAAcJ,GAErC,MAAOlzG,GAEH,YADA2I,QAAQC,IAAI5I,EAAE4e,UAK1B,GAAmB,YAAf6kD,EAA0B,CAC1B,MAAM5/D,QAAiBqvG,EAAWQ,iBAC5BtuG,QAAapE,EAAKzB,IAAI04D,eAAeloD,EAAU,CACjDypD,SAAUA,EACVvlD,OAAQA,IAEZ,UACUpQ,EAASy1D,MAAMl0D,GACrBvB,EAASoK,QACT,MAAM0lG,EAAoB,CAAET,WAAYA,GACpCtyG,EAAQ8xG,aACRiB,EAAkBR,cAAgBA,GAEtCnyG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,SAAuB4yG,SAClCP,IAEN,IAAIQ,EAAa,SACYjzB,EAAS3/E,EAAKzB,IAAI4rC,aAChC3iC,SAAQqD,MAAAA,IAEfjL,EAAQ8xG,aACR1wF,EAAEohD,YAAc8vC,GAEpBlxF,EAAEphB,QAAQgzG,WAAaA,OAGvBhzG,EAAQ8xG,kBACF1xG,EAAKzB,IAAI+iE,mBAAmB,CAAEK,WAAYuwC,IAEpDlyG,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,aAAc,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,OAE9D,MAAOf,GACHwE,EAAAA,EAAAA,MAASxE,EAAE4e,iBAOvB46C,EAAW/zD,EAAM7E,QAAQizG,gBAAkBpuG,EAAM7E,QAAQyoD,KACzDs3B,EAAW90E,eAAgBmY,GACvB,OAAOA,EAAO7d,QAAO6b,GAAKvc,EAAM7E,QAAQizG,eACpC7xF,EAAEphB,QAAQizG,iBAAmBpuG,EAAM7E,QAAQizG,eAC3C7xF,EAAEphB,QAAQyoD,OAAS5jD,EAAM7E,QAAQyoD,QAEzCtlB,EAAQl4B,iBACJ,MAAMzG,QAAapE,EAAKzB,IAAI04D,eAAeloD,EAAU,CACjDypD,SAAUA,EACVvlD,OAAQA,IAGZ,OADAm/F,IACQn/F,GACJ,KAAKlT,EAAAA,EAAAA,OAAAA,UACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAUp0D,GAC/B,MACJ,KAAKrE,EAAAA,EAAAA,OAAAA,WACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAU,iCAAkCp0D,GACjE,MACJ,KAAKrE,EAAAA,EAAAA,OAAAA,IACDyD,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAUp0D,GAC/B,MACJ,QAAS,CACL,MAAMwvB,EAAW7zB,EAAAA,EAAAA,SAAgBkT,GACjCzP,EAAAA,EAAAA,KAAAA,aAAqBg1D,EAAU5kC,EAAUxvB,GACzC,SAKhB,GAAIo0D,EAAU,CACVvlD,EAASzP,EAAAA,EAAAA,KAAAA,2BAAmCg1D,EAAS3xC,OAAO2xC,EAAS7kC,YAAY,OAC5E1gB,IACDA,EAASzP,EAAAA,EAAAA,KAAAA,2BAAmCiB,EAAM7E,QAAQyoD,KAAKxhC,OAAOpiB,EAAM7E,QAAQyoD,KAAK10B,YAAY,QAEzG,MAAMm/E,QAAuBnzB,EAAS3/E,EAAKzB,IAAI4rC,YAC/Cp7B,EAAW+jG,EACNv0G,KAAIyiB,GAAKA,EAAEjS,WACX2B,OACL,MAAMqiG,QAAiBpzB,EAAS3/E,EAAKzB,IAAI4rC,WAAWhlC,QAAO6b,GAAKA,IAAMvc,KAClEsuG,EAASzvG,OACTE,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,+BAAgC,CAC5Dq+B,UAAW8yC,EAASx0G,KAAIyiB,GAChBA,EAAEjS,SAASzL,OACJ0d,EAAEjS,SAAS,GAAGnK,UAAU2F,KAAKvK,EAAKgjG,iBAEtChiF,EAAExW,QACVD,KAAK,QACRw4B,GAGJA,MAcf,eAAAqnD,WAhiBoBnqF,KACkB0wG,kBACnBrmB,SAFCrqF,KAEeqqF,SAC/B,eAAAiI,IAWG,MACM3lD,EADO3sC,KACS2sC,gBADT3sC,KAED0wG,kBAAkB/jE,SAAWA,EAC5C,SAAAokE,EAsEahjD,GACV,MAAMhuD,EAAOC,KACb,GAAI+tD,EAAIpuD,QAAQozG,YAAa,CAGzB,IAAIC,EACJ,MAAMC,EAAsBlsC,iBAAiBp6D,SAASqL,cAAc,UAC/DitE,iBAAiB,eAChBz7E,EAAQypG,EAAoBzpG,MAAM,kBASxC,GAPIwpG,EADAxpG,EACe8H,OAAO4a,aAAa5T,SAAS9O,EAAM,GAAI,KAGvCypG,EAAoB1pG,QAAQ,QAAS,IAIpDwkD,aAAexqD,EAAAA,EAAAA,QAAAA,iBACfwqD,EAAImlD,YAAY,CACZC,SAAU,SAAUl/C,EAAWh1C,GAE3B,GADclf,EAAKzB,IAAIqhB,SAASV,GACtB9U,OAASrK,EAAAA,EAAAA,UAAAA,OACf,OAEJ,MAAMg8B,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAI+rC,EAAWp0B,EAAUj8C,cAAc,gBAAkB8jB,GACzD,IAAKusD,EAAU,CACX,MAAMjvE,EAAOrZ,EAAK4hC,gBAAgB,gBAClC0mD,EAAW,IAAI1oD,EAAAA,EACf0oD,EAASjvE,KAAOA,EAChBivE,EAASpoD,gBAAkB+yE,EAC3B3qB,EAASnoD,kBAAoB8yE,EAC7B3qB,EAAShqC,QAAQp/B,QAAUA,EAE/B,OAAOopE,GAEX+qB,aAAc,CAACtzG,EAAAA,EAAAA,MAAAA,gBAA8BA,EAAAA,EAAAA,MAAAA,mBAC7CuzG,SAAU,SAAU1lG,GAChB,MAAM06E,EAAWroF,KACXwE,EAAQzE,EAAKzB,IAAIqhB,SAAS0oE,EAAShqC,QAAQp/B,SACjDlf,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GAC3BvoB,EAASzoD,QAAUgxE,IAAapsG,MAGxC8uG,SAAU,WACN,MAAMjrB,EAAWroF,KACXwE,EAAQzE,EAAKzB,IAAIqhB,SAAS0oE,EAAShqC,QAAQp/B,SAC5Cza,EAAMsP,aACP/T,EAAK4wG,mBACDtoB,EAASzoD,SACT7/B,EAAKke,SAASzZ,GAAO9F,MAAK,KACtBqB,EAAKwzG,8BAOxB,GAAIxlD,aAAexqD,EAAAA,EAAAA,QAAAA,YAAwB,CAC5C,MAAMiwG,EAAiBzzG,EAAK2wG,iBAC5B8C,EAAe90G,MAAK,SAAUoyG,GAC1BA,EAAQziG,GAAGvO,EAAAA,EAAAA,MAAAA,QAAuB,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAC1E,GAAIA,EAAE0E,QAAQe,QAAUupD,EAAI0lD,aACpB10G,EAAE0E,mBAAmBuN,EAAAA,GAAYjS,EAAE0E,mBAAmBmN,EAAAA,GAAe,CACrEm9C,EAAI2lD,mBACJ,MAAMC,EAAoB5lD,EAAI6lD,uBAC1BD,GACA5lD,EAAI8lD,oBAAoBF,EAAmB,CAAEG,cAAc,QAK3EhD,EAAQziG,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GACvC,GAAIA,EAAE0E,QAAQe,QAAUupD,EAAI0lD,YACpB10G,EAAE0E,mBAAmBiM,EAAAA,EAAO,KAAAqkG,EAAAC,EAC5Bj1G,EAAE0E,QAAQK,QAAQ,CAAE+E,KAAM,KAC1B,MAAMlD,EAAQ5G,EAAE0E,QAAQ0C,YAAc,GACtCR,EAAM4mC,MAA6B,QAAxBwnE,EAAGhmD,EAAI0lD,WAAWrtG,cAAM,IAAA2tG,GAAO,QAAPC,EAArBD,EAAuB1+E,aAAK,IAAA2+E,OAAP,EAArBA,EAA8BznE,MAC5CxtC,EAAE0E,QAAQiC,SAASC,OAI/BmrG,EAAQniB,qBAAqBjwF,MAAK,SAAUu1G,GACxCA,EAAQ5lG,GAAGvO,EAAAA,EAAAA,MAAAA,MAAqB,IAAMA,EAAAA,EAAAA,MAAAA,SAClC,IAAMA,EAAAA,EAAAA,MAAAA,SAAwB,IAAMA,EAAAA,EAAAA,MAAAA,YAAyB,SAAU6N,GACnEogD,EAAI8lD,oBAAoB9lD,EAAI6lD,uBAAwB,CAChDE,cAAc,EACdrwG,QAASwwG,EAAQh0G,KAAKi0G,uBAM1CnmD,EAAImlD,YAAY,CACZC,SAAU,SAAUl/C,GAChB,MAAMn4B,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAI+rC,EAAWp0B,EAAUj8C,cAAc,gBAAkB8jB,GACzD,IAAKusD,EAAU,CACX,MAAMjvE,EAAOrZ,EAAK4hC,gBAAgB,aAClC0mD,EAAW,IAAI1oD,EAAAA,EACf0oD,EAASjvE,KAAOA,EAChBivE,EAASpoD,gBAAkB+yE,EAC3B3qB,EAASnoD,kBAAoB8yE,EAC7BjzG,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GAC3BvoB,EAASzoD,QAAUgxE,IAAa7iD,EAAI0lD,cAG5C,OAAOprB,GAEX+qB,aAAc,CAACtzG,EAAAA,EAAAA,MAAAA,gBAA8BA,EAAAA,EAAAA,MAAAA,kBAA+B,CAAGA,EAAAA,EAAAA,MAAAA,aAC/EuzG,SAAU,SAAU1lG,GAChB,MAAM06E,EAAWroF,KACjBD,EAAK4f,WAAWjhB,MAAK,SAAUkyG,GAC3BvoB,EAASzoD,QAAUgxE,IAAa7iD,EAAI0lD,eAG5CH,SAAU,WACN,MAAMjrB,EAAWroF,KACXm0G,EAAgBvpG,iBAClB7K,EAAK4wG,yBACC5wG,EAAKke,SAAS8vC,EAAI0lD,YACxB1zG,EAAKwzG,gBAAgB,CACjBlpB,UAAU,EACVE,kBAAkB,EAClBoF,MAAO,CACHoC,EAAAA,QAAAA,KAAAA,OACAA,EAAAA,QAAAA,KAAAA,SACAA,EAAAA,QAAAA,KAAAA,YAIZ,GAAI1J,EAASzoD,QAAS,CACImuB,EAAI0lD,WAAW3kG,SAASqM,MAAKpM,GAAKA,EAAEusD,oBAAsB,IAE5E/3D,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,qCAC5BwyE,GACA,IAAM9rB,EAASzoD,SAAWyoD,EAASzoD,UAGvCu0E,SAIJp0G,EAAK4wG,sBAOjB6C,EAAe90G,MAAKoyG,IAChBA,EAAQniB,qBAAqBjwF,MAAK01G,IAC9BA,EAAY/lG,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GACzCq1G,EAAY5vG,QAAUupD,EAAI0lD,aACzB10G,EAAEs1G,WACHtmD,EAAI0lD,WAAW3kG,SAASqM,MAAKpM,GAAKA,aAAaiC,EAAAA,GAAYjC,aAAa6B,EAAAA,MAExEwjG,EAAYtpB,MACZ/qF,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,kCAAmC,CACnEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,sBAQrC,eAAAiyG,IA0RG,MAAMhyG,EAAOC,KACPwE,QAAczE,EAAK4f,WACnB08B,GAAc73C,KAAYA,EAAM29D,cAAgB39D,EAAM8vG,uBAA0B9vG,EAAM7E,QAAQizG,gBAAkBpuG,EAAM7E,QAAQyoD,MACpIroD,EAAKuxG,WAAWl0E,SAAWif,EACvBt8C,EAAKyxG,eACLzxG,EAAKyxG,aAAap0E,SAAWif,GAIzCrd,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAa8zE,GACtEjtG,EAAAA,EAAAA,QAAAA,SAAsBitG,EACtB,W,yjBC/lBAjtG,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,KAAUU,EAAAA,EAEV,MAAMy4B,EAAc,oBAAoB,IAAA63E,EAAA,IAAA/xG,QAExC,MAAMgyG,UAAmB7qB,EAAAA,QAIrBlqF,cACIG,SAASod,WAAWra,EAAA,KAAA4xG,EAAA,CAAA3xG,UAAA,EAAAC,MAHF,IAAIoX,MAKtB,MAAMla,EAAOC,KA6Db,GA5DAD,EAAK00G,gCAAkC,wBAEvC10G,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WACzCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnCv8E,EAAK20G,UAAY,CACb,CACI7zE,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,KAAsB,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,OAGtC,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,KAAsB,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,OAGtC,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,KAAsB,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,IAAmB,IAAMA,EAAAA,EAAAA,OAAAA,QAG/D,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,SAA0B,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,QAAuB,IAAMA,EAAAA,EAAAA,OAAAA,QAGvE,CACI+gC,OAAQ,CACJ,aAAc,CAAC,IAAM/gC,EAAAA,EAAAA,OAAAA,OAG7B,CACI+gC,OAAQ,CACJ,aAAc,CAAC,IAAM/gC,EAAAA,EAAAA,OAAAA,OAG7B,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,KAAsB,CAAC,UAGhC,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,YAA6B,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,cAG7C,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,WAA4B,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,UAGtE,CACI+gC,OAAQ,CACJ,CAAC/gC,EAAAA,EAAAA,SAAAA,KAAsB,CAAC,IAAMA,EAAAA,EAAAA,OAAAA,QAKtCgB,MAAMC,QAAQhB,EAAKJ,QAAQ2+F,SAAU,CACrCv+F,EAAKu+F,QAAUv+F,EAAKJ,QAAQ2+F,QAC5B,MAAMqW,EAAY50G,EAAKiT,OAAO1U,KAAIyQ,GAAKxL,EAAAA,EAAAA,KAAAA,mBAA2BwL,KAClEhP,EAAK20G,UAAY30G,EAAK20G,UAAUxvG,QAAO0vG,IACnCA,EAAG/zE,OAAO3hC,KAAKic,MAAK1S,GAAOksG,EAAU38E,SAASvvB,aAIlD1I,EAAKu+F,QAAUv+F,EAAK20G,UAAUzsG,QAAO,CAACE,EAAKysG,KACvC,IAAK,IAAInsG,KAAOmsG,EAAG/zE,OACf14B,EAAMA,EAAIE,OAAOusG,EAAG/zE,OAAOp4B,GAAKnK,KAAI6pB,GAAOA,EAAIvB,OAAO,MAE1D,OAAOze,IACR,IAGPpI,EAAKo6E,eAAiB,GACtBp6E,EAAKq6E,oBAAsB,GAC3Br6E,EAAKs6E,iBAAmB,GAExBt6E,EAAKy8C,cAAe,EAGxBD,eACI,MAAO,cAGX1W,SAASvnC,GACL,MAAMyB,EAAOC,KACP4E,EAAShF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GA2MzC,OA1MAyB,EAAK80G,mBAED90G,EAAKJ,QAAQgmF,mBACbrnF,EAAI2B,KAAK0lF,kBAAkB5lF,EAAKJ,SAGpCrB,EAAIw2G,gBAAkB,GAEtBnoG,SAASf,iBAAiB,SAAShB,MAAAA,IAC/B,GAAI7L,EAAEg2G,cAAct3C,OAAS1+D,EAAEg2G,cAAct3C,MAAMp6D,OAAQ,CACvD,IAAIo6D,EAAQ1+D,EAAEg2G,cAAct3C,MAC5B,GAAIxV,iBAAiBznD,UAAU0nD,sBAAuB,CAElDuV,EAAQ,GACR,IAAK,IAAIv7D,EAAI,EAAGgiB,EAAKnlB,EAAEg2G,cAActY,MAAMp5F,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC5D,MAAM8H,EAAOjL,EAAEg2G,cAActY,MAAMv6F,GAC7BkgE,QAAep4D,EAAKk+C,wBACtBka,GAAO3E,EAAMr1D,KAAKg6D,IAG9BriE,EAAKy9D,UAAUC,QAGV1+D,EAAEg2G,cAActY,MAAMp5F,QACvB/E,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gCAAiC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,aAIpFxB,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA6B8K,eAAgB7L,GAC7C,MAAMw5D,EAAWx5D,EAAEw5D,SACb05C,EAAalzG,EAAEkzG,WACfxkG,EAAS1O,EAAEi2G,WACXlmG,EAAW/P,EAAE+P,SACbmmG,EAAYl2G,EAAEk2G,UACdtC,EAAa5zG,EAAE4zG,WACfC,EAAiB7zG,EAAE6zG,gBAAkB7zG,EAAE6zG,eAAe/pG,KAEtDqsG,EAAc,SAAUzxG,GAC1B,MACMlD,EAAOkD,EAAQnD,SACrB,GAAIC,EAAM,CACN,IAAI6J,EACJ,QAAQ,GACJ,KAAK3G,aAAmBiM,EAAAA,EACpBtF,EAAc,CAAC7J,GACf,MACJ,KAAKkD,aAAmBoM,EAAAA,EACxB,KAAKpM,aAAmBuN,EAAAA,EACpB5G,EAAc7J,EACd,MACJ,KAAKkD,aAAmBmN,EAAAA,EACxB,KAAKnN,aAAmBpB,EAAAA,EACpB+H,EAAc7J,EAAKkQ,OACnB,MACJ,KAAKhN,aAAmBwM,EAAAA,EACpB7F,EAAc7J,EAAKkQ,KAAK,GAK5BrG,GAAeA,EAAY2K,OAAM,SAAUkhB,GAC3C,OAAO10B,KAAKyoB,IAAIiM,EAAM,KAAO,KAAO10B,KAAKyoB,IAAIiM,EAAM,KAAO,OAE1DxyB,EAAQ/B,UAAU6B,EAAAA,EAAAA,KAAAA,UAAkBhD,EAzB5B,YAyB2CR,EAAKzB,IAAI4I,MAIpE,OAAOzD,GAGX,IAAI0xG,EAAa,IAAMr1G,EAAAA,EAAAA,OAAAA,IAAAA,cACvB,GAAIy4D,EAASnqC,cAAcplB,QAAQmsG,KAAgB58C,EAASl1D,OAAS8xG,EAAW9xG,QAC5EoK,GAAUA,IAAW1N,EAAKzB,IAAIoO,KAAOe,IAAW1N,EAEhD,YADAA,EAAKq1G,uBAIT,MAAMhrD,EAAWhrD,IACb,IAAKA,EACD,GACIA,EAAKW,EAAK4mC,OAAOsrE,GAAcgD,SAE5Bl1G,EAAKzB,IAAIqhB,SAASvgB,IAE7B,OAAOd,EAAI8rD,SAAS,CAChBhrD,GAAIA,EACJmL,MAAOguD,EACP6sB,MAAOrlF,EACPoK,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsoD,KAAMmQ,EACNo6C,WAAYA,EACZC,eAAgBA,KAIxB,IAAIyC,EAAet2G,EAAEs2G,cAAgB,GAChCA,EAAahyG,QACdgyG,EAAajtG,WAAWgiD,KAE5B,IAAK,IAAIloD,EAAI,EAAGA,EAAImzG,EAAahyG,OAAQnB,IAAK,CAC1C,MAAMwwD,EAAc2iD,EAAanzG,GAC3B+pD,EAAWlsD,EAAKzB,IAAIqhB,SAAS+yC,UAAsBtI,EAASsI,EAAYtzD,IACxE4lB,QAAiBjlB,EAAKu1G,kBAAkBrpD,GACzCjnC,GAAYA,EAAS2tF,aAAeA,EAKrC0C,EAAanzG,IAAK,EAJlBmzG,EAAanzG,GAAK+pD,EAO1BopD,EAAeA,EAAanwG,QAAOqwG,GAAMA,IAEzCj3G,EAAIk3G,0BAA4Bl3G,EAAIw1D,sBAAsB1M,QAAQ9oD,EAAIk3G,2BAEtEH,EAAa9tG,SAAQqD,eAAgBpG,GAC7BytG,IACAztG,EAAM29D,YAAc8vC,EAChBlzG,EAAE02G,wBACFjxG,EAAMkxG,uBAAyB32G,EAAE02G,6BAE/B11G,EAAK41G,kBAAkBnxG,IAEjCA,EAAMoxG,WAAaX,EACnBzwG,EAAM4gF,MAAQrlF,EACdA,EAAK81G,YAAYztG,KAAK5D,GAEtB,MAAMsxG,EAAYtxG,EAAMpF,GAAK,IACvB22G,EAAMjnG,EAASxQ,KAAIyQ,GAAKA,EAAEpL,UAchCa,EAAMqzB,YACF/oB,EACKxQ,IAAI42G,GACJ52G,KAhBK,SAAUmF,EAASgE,GAC7B,MAAMrI,EAAKqE,EAAQE,QAEnB,GAAIoyG,EAAI7wG,QAAO,CAAC8wG,EAAI9zG,IAAMA,IAAMuF,IAAKuwB,SAAS54B,GAAK,CAC/C,MAAM62G,EAAQ1yG,EAAAA,EAAAA,OAAU,CACpBqjC,OAAQkvE,EACRjvE,QAASkvE,IAEbA,EAAItuG,GAAOwuG,EACXxyG,EAAQS,MAAM+xG,GAElB,OAAOxyG,MAON/E,MAAK,IAAMqB,EAAKm2G,wBAEhBn3G,EAAE2zD,cACHp0D,EAAIw2G,gBAAkBx2G,EAAIw2G,gBAAgBzsG,OAAO7D,EAAMsK,cAI/D/O,EAAKq1G,0BAER/mG,GAAGvO,EAAAA,EAAAA,MAAAA,qBAAkC,SAAUf,GAC5C,IAAIo3G,EACA59C,EAAWx5D,EAAEqpD,KAAKv/C,KAElBstG,EADuD,SAAvD59C,EAASnqC,cAAcxH,OAAO2xC,EAASl1D,OAAS,GACtC,6BAGA,iCAGdE,EAAAA,EAAAA,MAASxE,EAAE4e,QAAU5d,EAAK4hC,gBAAgB5iC,EAAE4e,SAAW5d,EAAK4hC,gBAAgBw0E,EAAS,CAAE59C,SAAUA,IAAaz4D,EAAAA,EAAAA,aAAAA,QAEjG,IAAIs2G,YACVxqF,OAAS,SAAUiU,GACtBt8B,EAAAA,EAAAA,MAAS,uBAAyBg1D,EAAW,kCAAoC14B,EAAMpyB,OAAO7I,OAAQ9E,EAAAA,EAAAA,aAAAA,MAA2B,qCAErIC,EAAKm2G,yBAER7nG,GAAGvO,EAAAA,EAAAA,MAAAA,uBAAoC,SAAUf,GAC9CgB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,6BAA8B,CAAE42B,SAAUx5D,EAAEqpD,KAAKv/C,KAAM49F,MAAO1nG,EAAE0nG,MAAOptF,OAAQta,EAAEsa,SAAW,CAAElP,KAAMrK,EAAAA,EAAAA,QAAAA,WAE3IuO,GAAGvO,EAAAA,EAAAA,MAAAA,oBAAiC,SAAUf,GAC3CgB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,uBAAwB,CAAE42B,SAAUx5D,EAAEqpD,KAAKv/C,OAAS,CAAEsB,KAAMrK,EAAAA,EAAAA,QAAAA,aAEnGuO,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAU6N,GACtC5N,EAAKq1G,0BAER/mG,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACjCgB,EAAKs2G,mBAAmB,CAACt3G,EAAEyF,WAE9B6J,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAChCA,EAAEyF,MAAM4gF,QAAUrlF,GAClBA,EAAKu2G,oBAAoBv3G,EAAEyF,OAE/B,MAAM+xG,EAAYx2G,EAAK81G,YACjBpuG,EAAM8uG,EAAUvtG,QAAQjK,EAAEyF,OAC5BiD,GAAO,GACP8uG,EAAUxtG,OAAOtB,EAAK,MAIlCnJ,EAAIqb,QAAO,KACP5Z,EAAKs2G,mBAAmB/3G,EAAI4rC,eAGzBtlC,EAGXgG,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,EAGpBwzC,SACI,MAAM98C,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GAC5Dh0B,EAAKg9C,WAAW,CAAEuhD,QAASv+F,EAAKu+F,UAAW,WACvC,MAAMkY,EAAYz2G,EAAKiY,cAAc,oBAErCw+F,EAAU5qG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB8K,eAAgB7L,GAC3D,MAAMi2F,EAAQh1F,KAERy2G,EAAO9pG,SAASC,cAAc,QAC9BpJ,EAASwxF,EAAMx4B,cAQrB,GAPAh5D,EAAO++B,aAAak0E,EAAMzhB,GAC1ByhB,EAAK5pG,YAAYmoF,GACjByhB,EAAKt2F,QAELs2F,EAAKv3B,sBAAsB,WAAY8V,GACvCxxF,EAAOi5D,YAAYg6C,GAEfxyG,EAAAA,EAAAA,WAAgBwN,OAAOilG,oBAAqB,CAE5C,IAAIC,EADJ53G,EAAEoxG,iBAEF,IACIwG,QAAoBllG,OAAOilG,mBAAmB,CAC1CE,UAAU,IAGlB,MAAO73G,GACH,GAAIA,aAAa83G,cAAgBplG,OAAOjO,SAAWiO,OAAQ,CAEvD,IAAIqlG,EAAc/2G,EAAK4hC,gBAAgB,4BACnC5hC,EAAKJ,QAAQgmF,oBACbmxB,GAAe,aAAe/2G,EAAK4hC,gBAAgB,gCAEvD5hC,EAAKzB,IAAIuvD,MAAMipD,EAAa,CAAE3sG,KAAMrK,EAAAA,EAAAA,QAAAA,eAEnC,GAAe,eAAXf,EAAE8J,KACP,MAAM9J,EAGV43G,GACA52G,EAAKy9D,UAAUm5C,OAI3BH,EAAU5qG,iBAAiB,UAAU,SAAU7M,GACvCgB,EAAKzB,KACLyB,EAAKy9D,UAAUz+D,EAAE0O,OAAOgwD,UAIhC19D,EAAKq1G,uBAELr1G,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAAM,SAAU5yC,GACzD3J,EAAKu8E,WAAWnvE,UAAYzD,EAC5B7K,EAAQkB,aAMxBy9D,UAAUC,GACN,MAAM19D,EAAOC,KAEb,OADAD,EAAKzB,IAAIk/D,UAAUC,EAAO,CAAE3yD,QAAS/K,IAC9BA,EAGX6K,yBAAyBmY,GACrB,MAAMhjB,EAAOC,KAEPu2G,EAAYxzF,EAAO7d,QAAO6b,GAAKhhB,EAAKg3G,WAAWh2F,EAAE3hB,MAAQ2hB,EAAEphB,QAAQylF,OAASrkE,EAAEphB,QAAQyoD,OAC5F,GAAImuD,EAAUlzG,OAAQ,CAClB,MAAMszG,EAAc,GACdK,EAAUz1G,KAAK4K,OAAOoqG,EAAUj4G,KAAIyiB,GAAKhhB,EAAKg3G,WAAWh2F,EAAE3hB,OACjEmE,EAAAA,EAAAA,YAAeyzG,EAAU,EAAG,CAAEpwE,OAAQ7mC,EAAKX,GAAK,MAChD,MAAM63G,QAAuBr4G,QAAQwiB,IAAIm1F,EAAUj4G,KAAIyiB,GAAKhhB,EAAKu1G,kBAAkBv0F,MACnFw1F,EAAUhvG,SAAQ,CAACwZ,EAAGtZ,KAAQ,IAAAyvG,EAC1Bn2F,EAAEphB,QAAQgzG,WAAgC,QAAtBuE,EAAGD,EAAexvG,UAAI,IAAAyvG,OAAA,EAAnBA,EAAqBvE,cAEhD,MAAMwE,EAAc,IAAIl9F,IAClBm9F,EAAiC,IAAIn9F,IAC3C,IAAK,IAAI/X,EAAI,EAAGA,EAAI+0G,EAAe5zG,OAAQnB,IAAK,CAC5C,MAAM8iB,EAAWiyF,EAAe/0G,GAChC,GAAI8iB,MAAAA,GAAAA,EAAUitF,WAAY,CACtB,IAAIptG,EACJ,IAAK,MAAOotG,EAAYoF,KAAiBF,EAAY5pG,UACjD,SAAU0kG,EAAWtwC,YAAY38C,EAASitF,YAAa,CACnDptG,EAAQwyG,EACR,MAGHxyG,IACDA,EAAQ,GACRsyG,EAAYr4F,IAAIkG,EAASitF,WAAYptG,GACrC8xG,EAAYvuG,KAAK4c,EAASitF,YACtBjtF,EAASywF,uBACT2B,EAA+Bt4F,IAAIkG,EAASitF,WAAYjtF,EAASywF,wBAGzE5wG,EAAMuD,KAAKmuG,EAAUr0G,QAEpB,CAED,MAAMo1G,EAAgBv0F,EAAO7gB,GACzBnC,EAAKzB,IAAIqhB,SAAS23F,IAClBv3G,EAAKzB,IAAIwsD,YAAYwsD,UAI3Bv3G,EAAKsL,gBACX,MAAMsxE,EAAS58E,EAAKu8E,WAAWtkE,cAAe,uBACxCzN,EAAQoyE,EAAO3kE,cAAc,MAC7B40C,EAAS7sD,EAAKu8E,WAAWtkE,cAAc,sCAEvC8qB,EAAQu/B,IACVtiE,EAAKzB,IAAIk/D,UAAU6E,EAAS,CACxBt/C,OAAQo0F,EAAY34F,IAAI6jD,EAAQ,IAChC50D,OAAQ1N,KAIhB,IAAK,MAAMkyG,KAAckF,EAAYj4G,OAAQ,CACzC,IAAIy3G,EAAc,CAAC1E,GACnB,MAAMwD,EAAwB2B,EAA+B54F,IAAIyzF,GAC7DwD,IACAkB,EAAcA,EAAYtuG,OAAOotG,IAGrC,MAAMlzC,EAAc,GACpB,UAAW,IAAIC,KAAcm0C,EAAYr4G,KAAI0qD,GAAKA,EAAEyZ,oBAChDF,EAAYn6D,KAAKo6D,GAErB,IAAI+0C,GAAiB,EACrB,IAAK,IAAIjgG,EAAI,EAAGA,EAAIirD,EAAYl/D,OAAQiU,IAAK,CAEzC,GAAmB,WADFirD,EAAYjrD,GACA,CACzBigG,GAAiB,EACjB,MAAMC,EAAoBb,EAAYr/F,GACtC,GAAI/M,EAAM4C,UAAU9J,OAAQ,CACxB,MAAMo0G,EAAY,QACJltG,EAAM4C,UAAUgF,MAAMslG,GACzBz/E,SAASw/E,EAAkB3uG,QAClC0B,EAAM4C,UAAY5C,EAAM4C,UAAYsqG,EAAYD,EAAkB3uG,WAItE0B,EAAM4C,UAAYqqG,EAAkB3uG,MAIhD,MAAM6uG,EAAsBtyG,GAAW,YAANA,EACjC,GAAImyG,EAAgB,CAChB,MAAMI,EAAe/sG,eAAgB+C,GACjC,IAAK,IAAIkK,EAAI,EAAGA,EAAI0qD,EAAYl/D,OAAQwU,IACpC0qD,EAAY1qD,SAAW8+F,EAAY9+F,GAAG6qD,oBAE1C,GAAIH,EAAYxtD,MAAM2iG,GAClB50E,EAAM6zE,OAEL,CAEsBQ,EAAY34F,IAAIyzF,GACxB1qG,SAAQwZ,GAAKhhB,EAAKzB,IAAIwsD,YAAY/pC,KAErDxW,EAAM4C,UAAY,GAClBlJ,EAAAA,EAAAA,cAEJA,EAAAA,EAAAA,UAAe04E,EAAQ,CACnB/O,cAAe+pC,IAEnB/qD,EAAOhhD,iBAAiB,QAAS+rG,QAE5Bp1C,EAAYxtD,MAAM2iG,IACvB50E,EAAM6zE,KAMtBj8E,cACI,MAAM36B,EAAOC,KACb,OAAID,EAAKy8C,cAAgBz8C,EAAK81G,YAAYxyG,OAC/B,CACHjE,GAAIW,EAAKX,GACT2jB,OAAQhjB,EAAK81G,YAAYv3G,KAAI,SAAUkG,GAAO,IAAAozG,EAC1C,MAAMjI,EAAa,CACfplG,MAAO/F,EAAM+F,MACbsK,MAAOtR,EAAAA,EAAAA,KAAAA,OAAeiB,EAAMk2B,cAAe,CAAExG,KAAoB,QAAd0jF,EAAApzG,EAAMsK,gBAAQ,IAAA8oG,GAAdA,EAAgBv0G,OAASmB,EAAMsK,SAAS,GAAGnK,eAAYP,KAK9G,OAHII,EAAM29D,cACNwtC,EAAWvnD,KAAO5jD,EAAM29D,YAAYt5D,MAEjC8mG,MAIZ,KAGX/kG,kBAAkBiK,GACd,MAAM9U,EAAOC,KACb,GAAID,EAAKzB,IAAK,CACV,MAAM0yF,EAAgB,SAChBjxF,EAAKs2G,mBAAmBt2G,EAAKzB,IAAI4rC,YACvCr1B,EAAMkO,OACD7d,QAAO,SAAUV,GACd,OAAQzE,EAAKzB,IAAI4rC,WAAW/uB,MAAK4F,GAAKA,EAAEphB,QAAQyoD,MAAQ5jD,EAAM4jD,OAASrnC,EAAEphB,QAAQyoD,UAEpF7gD,SAAQ,SAAUswG,GACf7mB,EAAc5oF,KAAKrI,EAAKzB,IAAI8rD,SAAS,CACjChrD,GAAIW,EAAK4mC,SACTp8B,MAAOstG,EAAUttG,MACjB66E,MAAOrlF,EACPoK,KAAMrK,EAAAA,EAAAA,UAAAA,aAIlB,MAAMijB,QAAenkB,QAAQwiB,IAAI4vE,GACjC,IAAK,IAAI9uF,EAAI,EAAG+I,EAAM8X,EAAO1f,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,MAAMsC,EAAQue,EAAO7gB,GACfgiB,EAAKhiB,EACXsC,EAAM26C,YAAYtqC,EAAMkO,OAAO7gB,GAAG2S,OAAOnW,MAAK,WAC1C,IAAK,IAAI4Y,EAAI,EAAGA,EAAI9S,EAAMsK,SAASzL,OAAQiU,IACvC9S,EAAMsK,SAASwI,GAAGzT,QAAUgR,EAAMkO,OAAOmB,GAAIrP,MAAMqf,QAG3Dn0B,EAAK81G,YAAYztG,KAAK5D,KAKlCoG,wBAAwBpG,GACpB,MAAMzE,EAAOC,KACP83G,EAAc,CAChB7F,WAAYztG,EAAM29D,YAClBwwC,WAAYnuG,EAAM7E,QAAQgzG,YAM9B,OAJInuG,EAAMkxG,yBACNoC,EAAYrC,sBAAwBjxG,EAAMkxG,wBAE9C3yG,EAAAhD,EAAIw0G,GAAqBz1F,IAAIta,EAAMpF,GAAI04G,SAC1BxhG,IAAAA,QACAvW,EAAK00G,gCAAkC10G,EAAKzB,IAAIc,GAAK,IAAMoF,EAAMpF,GAAI04G,GAC7E3hG,OAAMpX,GAAK2I,QAAQgS,KAAK3a,KAGjC6L,wBAAwBpG,GACpB,MAAMzE,EAAOC,KACb,IAAIglB,QAAiB1O,IAAAA,QACRvW,EAAK00G,gCAAkC10G,EAAKzB,IAAIc,GAAK,IAAMoF,EAAMpF,IACzE+W,OAAMsD,GAAO/R,QAAQgS,KAAKD,KAO/B,OANIuL,EACAjiB,EAAAhD,EAAIw0G,GAAqBz1F,IAAIta,EAAMpF,GAAI4lB,GAGvCA,EAAWjiB,EAAAhD,EAAIw0G,GAAqB/1F,IAAIha,EAAMpF,IAE3C4lB,EAGXsxF,oBAAoB9xG,GAChB,MAAMzE,EAAOC,KAKb,OAJAsW,IAAAA,WAAuBvW,EAAK00G,gCAAkC10G,EAAKzB,IAAIc,GAAK,IAAMoF,EAAMpF,IACnF+W,OAAM,SAAUpX,GACb2I,QAAQgS,KAAK3a,EAAE4e,YAEhB5d,EAGX6K,yBAAyB02D,SACRthE,KACF1B,IAAI+iE,mBAAmBC,GAGtC12D,4BAA4Bkf,SACX9pB,KACF1B,IAAI2jE,sBAAsBn4C,GADxB9pB,KAERo1G,uBAGTxqG,2BAA2BmtG,GACvB,MAAMh4G,EAAOC,KACPg4G,EAAc,SAAUj5G,GAC1BgB,EAAKzB,IAAI4jE,oBAAoBnjE,EAAE0O,OAAO4wC,QAAQujB,YAE5Cq2C,EAAgB,SAAUl5G,GAC5BgB,EAAKkiE,sBAAsBljE,EAAE0O,OAAO4wC,QAAQujB,YAE1CsxB,EAAOnzF,EAAKiY,cAAc,uBAChC,GAAIk7E,EAAM,CACN,MAAMglB,EAAan4G,EAAK4hC,gBAAgB,kBAClCp0B,QAAiBwqG,EAAWn5G,QAAQC,QAAQk5G,GAAah4G,EAAKzB,KAAOyB,EAAKzB,IAAI2iE,mBAAsB,IAE1G,GADAiyB,EAAKilB,gBAAkBjlB,EAAKilB,kBAAoBjlB,EAAK/lF,UAAU,GAC3DI,EAAQlK,OAAQ,CAChB,MAAM66E,EAAKvxE,SAASC,cAAc,MAC5BwrG,EAASzrG,SAASC,cAAc,MACtCwrG,EAAOjrG,UAAYpN,EAAK4hC,gBAAgB,eACxCu8C,EAAGrxE,YAAYurG,GACfllB,EAAKrmF,YAAYqxE,GAErB3wE,EAAQhG,SAAQ,CAACiG,EAAOsc,KAAU,IAAAuuF,EAC9B,MAAMn6B,EAAKvxE,SAASC,cAAc,MAC5BwyB,EAAOzyB,SAASC,cAAc,gBACpCwyB,EAAKif,QAAQujB,UAAY93C,EACzBsV,EAAKxzB,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBk4G,GAC1C54E,EAAKhS,aAAa,UAAW0P,EAAAA,EAAAA,QAAAA,MAE7BsC,EAAKhS,aAAa,QAAwB,QAAhBirF,EAAA7qG,EAAMk0D,kBAAU,IAAA22C,OAAA,EAAhBA,EAAkBxvG,OAAQ2E,EAAM3E,MAC1Dq1E,EAAGrxE,YAAYuyB,GACf,MAAMwtB,EAASjgD,SAASC,cAAc,gBACtCggD,EAAOxzC,KAAO8+F,EACdtrD,EAAOvO,QAAQujB,UAAY93C,EAC3B8iC,EAAOhhD,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBm4G,GAC5CrrD,EAAOx/B,aAAa,UAAW0P,EAAAA,EAAAA,QAAAA,SAC/B8vB,EAAOx/B,aAAa,OAAQ0P,EAAAA,EAAAA,OAAAA,OAC5BohD,EAAGrxE,YAAY+/C,GACfsmC,EAAKrmF,YAAYqxE,OAK7Bg4B,sBACI,MAAMn2G,EAAOC,KACbyR,OAAO6mG,mBACyB,IAA5B7mG,OAAO6mG,mBACPv4G,EAAKzB,IAAI6uD,eAAeptD,EAAKzB,IAAIw2G,iBACjC/0G,EAAKzB,IAAIw2G,gBAAkB,UACpBrjG,OAAO6mG,kBAElB,IAAIp6B,EAAKn+E,EAAKzB,IAAIw1D,sBASlB,OARIoqB,IACIn+E,EAAKzB,IAAIi6G,sBACTr6B,EAAG32B,WAAWxnD,EAAKzB,IAAIi6G,sBAEvBx4G,EAAKzB,IAAIk3G,2BACTt3B,EAAG32B,WAAWxnD,EAAKzB,IAAIk3G,4BAGxBz1G,EAGX4mC,OAAO6xE,GACH,MAAMz4G,EAAOC,KACb,GAAIw4G,EAAuB,CACvB,MAAMC,EAAet5G,OAAOqB,UAAUC,eAAeC,KAAK+Q,OAAQ,wBAA0B,cAAgB,aACtGinG,EAAU34G,EAAK81G,YAAY5tG,QAAO,CAAC+wB,EAAIC,IAClCD,EAAG2/E,eAAeF,EAAcx/E,EAAGw/E,KACtCz/E,EAAG7d,MAAK4F,GAAK,iBAAiB7O,KAAK+mB,EAAG75B,IAAI,KAAO,iBAAiB8S,KAAK6O,EAAE3hB,IAAI,KAAM45B,EAAKA,EAAG3wB,OAAO4wB,IACvG,IACH,OAAO11B,EAAAA,EAAAA,OAAU,CACbqjC,OAAS,GAAE7mC,EAAKX,MAAMs5G,EAAQxzG,QAAO6b,GAAKA,EAAE03F,IAAiBD,IAAuBn1G,OAAS,OAGrG,OAAOE,EAAAA,EAAAA,OAAU,CACbqjC,OAAQ7mC,EAAKX,GAAK,OAK9BmE,EAAAA,EAAAA,IAAOixG,EAAYoE,EAAAA,SAEnB55E,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAa83E,GACtEjxG,EAAAA,EAAAA,QAAAA,WAAwBixG,EACxB,W,kGClrBAjxG,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMs1G,EAAa,WACf,IAAI94G,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,YAGxBzZ,EAAAA,EAAAA,QAAWs1G,EAAY9tG,EAAAA,GAEvB,WACI,IAAI0xC,EAAWo8D,EAAWr4G,UAE1Bi8C,EAASH,MAAQ,iBAEjB,MAAM7zC,EAAM,CACRqwG,kBAAmB,EACnBC,kBAAmB,EACnBC,kBAAmB,EACnBC,eAAgB,EAChBC,iBAAkB,EAClBC,gBAAiB,GAGfC,EAAS,CACX,0BACA,0BACA,0BACA,uBACA,yBACA,yBAGEC,EAAM,CACR,uBACA,uBACA,uBACA,sBACA,sBACA,sBAGEC,EAAK,CACP,sBACA,sBACA,sBACA,mBACA,qBACA,qBAGE3sG,EAA6B,oBAAX8E,aAAqD,IAApBA,OAAO9E,SAA2B8E,OAAO9E,SAAW,GAEvG4sG,EAAS,sBAAuB5sG,GAAYxN,OAAOD,KAAKuJ,IAC1D2wG,EAAO,KAAMzsG,GAAYysG,GACzBC,EAAI,KAAM1sG,GAAY0sG,GACtBC,EAAG,KAAM3sG,GAAY2sG,GACrB,GAEJ78D,EAAS+8D,QAAU,CACfC,cAAc,EACdT,kBAAmB73D,GAAWA,EAAQo4D,EAAO9wG,EAAIuwG,sBACjDU,0BAA2Bv4D,GAAWA,EAAQo4D,EAAO9wG,EAAIuwG,oBACrDC,qBAAmB,OAAOtsG,EAAS4sG,EAAO9wG,EAAIwwG,iBAAiB/4D,KAAKvzC,IACxEf,iBAAkBA,CAACzB,EAAMwvG,EAASh6G,IAAYgN,EAASf,iBAAiB2tG,EAAO9wG,EAAI0B,IAAQwvG,EAASh6G,GACpGghD,oBAAqBA,CAACx2C,EAAMwvG,EAASh6G,IAAYgN,EAASg0C,oBAAoB44D,EAAO9wG,EAAI0B,IAAQwvG,EAASh6G,GACtGm5G,wBAAsB,OAAOc,QAAQjtG,EAAS4sG,EAAO9wG,EAAIqwG,sBACzDA,sBAAkB9wG,KAClB+wG,wBAAsB,OAAOpsG,EAAS4sG,EAAO9wG,EAAIswG,qBACjDA,sBAAkB/wG,KAClB6xG,yBAAuB,OAAOltG,GAAU,KAAO4sG,EAAO9wG,EAAIywG,mBAAmB9qF,gBAC7EyrF,uBAAmBF,GAAW,OAAOhtG,GAAU,KAAO4sG,EAAO9wG,EAAIywG,mBAAmB9qF,eAAiBurF,GACrGG,wBAAsB,OAAOntG,EAAS,KAAO4sG,EAAO9wG,EAAI0wG,iBAAiB/qF,gBACzE0rF,sBAAkBH,GAAW,OAAOhtG,EAAS,KAAO4sG,EAAO9wG,EAAI0wG,iBAAiB/qF,eAAiBurF,IAGzGl9D,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,6BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KACP4E,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAqFrD,OAnFAsG,EAAOlG,MAAK,WACR,MAAMyvE,EAAMpuE,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QAEtD,GAAIv8C,EAAKy5G,QAAQV,kBAAmB,CAEhC,MAAMiB,EAAqBA,KACvB5rC,EAAIpwC,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBC,EAAKy5G,QAAQC,cACzDtrC,EAAI/gD,aAAa,QAASrtB,EAAKy5G,QAAQC,aAAe15G,EAAK4hC,gBAAgB,sBAAwB5hC,EAAK4hC,gBAAgB,iBAG5H5hC,EAAKy5G,QAAQ5tG,iBAAiB,oBAAoB,KAC9C7L,EAAKy5G,QAAQC,aAAkD,OAAnC15G,EAAKy5G,QAAQT,kBACzCgB,OACD,GAEH5rC,EAAIviE,iBAAiB,SAAS,WAC1B7L,EAAKi6G,OAAQ,EACRj6G,EAAKy5G,QAAQC,aAGd15G,EAAKy5G,QAAQP,iBAFbl5G,EAAKy5G,QAAQR,kBAAkBrsG,EAAS+0B,SAI7C,GAEEz9B,EAAAA,EAAAA,gBACDwN,OAAO7F,iBAAiB,UAAU,KAC9B,GAAI7L,EAAKi6G,MAEL,YADAj6G,EAAKi6G,OAAQ,GAIjB,MAAMC,EAAcxoG,OAAOyoG,WAAazoG,OAAO0oG,iBACzCC,EAAe3oG,OAAOwrD,YAAcxrD,OAAO0oG,iBAC3CE,EAAc5oG,OAAO6oG,OAAOhoF,MAC5BioF,EAAe9oG,OAAO6oG,OAAO/nF,OAG/BxyB,EAAKy5G,QAAQC,aADbQ,EAAcI,GAAe,KAAQD,EAAeG,GAAgB,IAMxER,IAEA,IAAI3B,EAASzrG,EAAS+0B,KAAK/qB,qBAAqB,UAC5C5W,EAAKy5G,QAAQC,cACbtrC,EAAI/gD,aAAa,WAAY,YAEzBgrF,EAAO/0G,OAAS,GAChB+0G,EAAO,GAAGr6E,UAAUnjB,IAAI,0BAG5B7a,EAAKzB,IAAIoO,IAAIqxB,UAAUnjB,IAAI,uBACvB7a,EAAKzB,IAAI2I,QACTlH,EAAKzB,IAAI2I,OAAOgtD,UAAUl2B,UAAUnjB,IAAI,yBAI5CuzD,EAAIlwC,gBAAgB,YAEhBm6E,EAAO/0G,OAAS,GAChB+0G,EAAO,GAAGr6E,UAAUC,OAAO,0BAG/Bj+B,EAAKzB,IAAIoO,IAAIqxB,UAAUC,OAAO,uBAC1Bj+B,EAAKzB,IAAI2I,QACTlH,EAAKzB,IAAI2I,OAAOgtD,UAAUl2B,UAAUC,OAAO,wBAInDmwC,EAAI/gD,aAAa,QAASrtB,EAAKy5G,QAAQC,aAAe15G,EAAK4hC,gBAAgB,wBAA0B5hC,EAAK4hC,gBAAgB,gBAE1H,MAAM64E,EAAc7tG,EAASk5C,YAAY,cACzC20D,EAAYC,UAAU,UAAU,GAAO,GACvC16G,EAAKzB,IAAIoO,IAAIszB,cAAcw6E,WAKnCz6G,EAAK0+C,aAIN75C,GA/Jf,GAoKArB,EAAAA,EAAAA,QAAAA,WAAwBs1G,EACxB,W,s1CC9IAt1G,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,MAAAA,WAA0BA,EAAAA,EAAAA,MAAAA,YAA2B,gBACrDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,MAAAA,OAAsBA,EAAAA,EAAAA,MAAAA,QAAuB,YAC7CA,EAAAA,EAAAA,QAAAA,UAA2B,eAE3B,MACM46G,EAAkBlgF,GAAQA,aAAgB5pB,EAAAA,EAC1C+pG,EAAYngF,GAFCA,CAAAA,GAAQA,aAAgBxpB,EAAAA,EAEjB4pG,CAAWpgF,IAASkgF,EAAgBlgF,GACxDqgF,EAAgBrgF,GAAQkgF,EAAgBlgF,GAAQA,EAAKl6B,SAAS,GAAG,GAAKk6B,EAAKl6B,SAAS,GAG1F,IAAIw6G,EAAgB,KAChBC,GAAgB,EAEpB,MAAMpU,EAAc,aACXmU,GAAkBA,EAAc,KAAO96G,KAAKkB,YAAY,IAAM45G,EAAc,KAAO96G,KAAKkB,YAAY,MACrG45G,EAAgB96G,KAAKkB,YAChB65G,GACD/6G,KAAKiF,mBAAmB+1G,IAAa,GAAGC,cAAa,KAM3DC,EAAoB,aAAcp+C,UACxC,IAAIq+C,EAAW,KACXC,EAAgB,KAEpB,MAgBMC,EAAc,SAAUC,GAC1B,IAAIC,EAAc,GAElB,IAAK,IAAIzxF,KAASwxF,EACVA,EAAOxxF,IAAmC,iBAAlBwxF,EAAOxxF,KAC/ByxF,EAAYnzG,KAAKkzG,EAAOxxF,IACxByxF,EAAYpxF,MAAK,SAAUrP,EAAGsP,GAC1B,MAAsB,iBAAXtP,EAAEjS,MACF5E,EAAAA,EAAAA,WAAgB6W,EAAEjS,KAAK2yG,eAAiB1gG,EAAEjS,KAAK2yG,cAAcpxF,EAAEvhB,MAC1D,MAK5B,OAAO0yG,GACT,IAAAj/B,EAAA,IAAA95E,QAAAi5G,EAAA,IAAAj5G,QAAAk5G,EAAA,IAAAl5G,QAAAm5G,EAAA,IAAAn5G,QAAAo5G,EAAA,IAAAp5G,QAAAq5G,EAAA,IAAAr5G,QAAAs5G,EAAA,IAAAt5G,QAAAu5G,EAAA,IAAAv5G,QAAAw5G,EAAA,IAAAx5G,QAAAy5G,EAAA,IAAAz5G,QAAA05G,EAAA,IAAA15G,QAAA25G,EAAA,IAAA35G,QAAA45G,EAAA,IAAA55G,QAAA65G,EAAA,IAAA75G,QAAA85G,EAAA,IAAA95G,QAAA+5G,EAAA,IAAA9pG,QAAA+pG,EAAA,IAAA/pG,QAAAgqG,GAAA,IAAAhqG,QAAAiqG,GAAA,IAAAjqG,QAAAkqG,GAAA,IAAAn6G,QAAAo6G,GAAA,IAAAnqG,QAAAoqG,GAAA,IAAApqG,QAAAqqG,GAAA,IAAAt6G,QAAAu6G,GAAA,IAAAtqG,QAAAuqG,GAAA,IAAAvqG,QAAAwqG,GAAA,IAAAxqG,QAAAyqG,GAAA,IAAAzqG,QAAA0qG,GAAA,IAAA1qG,QAAA2qG,GAAA,IAAA3qG,QAAA4qG,GAAA,IAAA5qG,QAAA6qG,GAAA,IAAA7qG,QAAA8qG,GAAA,IAAA9qG,QAAA+qG,GAAA,IAAA/qG,QAAAgrG,GAAA,IAAAhrG,QAAAirG,GAAA,IAAAl7G,QAAAm7G,GAAA,IAAAlrG,QAAAmrG,GAAA,IAAAnrG,QAAAorG,GAAA,IAAAprG,QAAAqrG,GAAA,IAAArrG,QAAAsrG,GAAA,IAAAtrG,QAAAurG,GAAA,IAAAvrG,QAAAwrG,GAAA,IAAAxrG,QAAAyrG,GAAA,IAAAzrG,QAAA0rG,GAAA,IAAA1rG,QAAA2rG,GAAA,IAAA57G,QAAA67G,GAAA,IAAA5rG,QAEF,MAAMuoG,WAAoBjwG,EAAAA,EAsFtBtL,cACIG,SAASod,WAAWnK,EAAA,KAAAwrG,IAAAxrG,EAAA,KAAAsrG,IAAAtrG,EAAA,KAAAqrG,IAAArrG,EAAA,KAAAorG,IAAAprG,EAAA,KAAAmrG,IAAAnrG,EAAA,KAAAkrG,IAAAlrG,EAAA,KAAAirG,IA+lDxBjrG,EAAA,KAAAgrG,IAAAhrG,EAAA,KAAA+qG,IAAA/qG,EAAA,KAAA8qG,IAAA9qG,EAAA,KAAA4qG,IAAA5qG,EAAA,KAAA2qG,IAAA3qG,EAAA,KAAA0qG,IAAA1qG,EAAA,KAAAyqG,IAAAzqG,EAAA,KAAAwqG,IAAAxqG,EAAA,KAAAuqG,IAAAvqG,EAAA,KAAAsqG,IAAAtqG,EAAA,KAAAqqG,IAAArqG,EAAA,KAAAoqG,IAAApqG,EAAA,KAAAmqG,IAAAnqG,EAAA,KAAAkqG,IAAAlqG,EAAA,KAAAgqG,IAAAhqG,EAAA,KAAA+pG,IAAA/pG,EAAA,KAAA6pG,IAAA7pG,EAAA,KAAA4pG,IAAA5pG,EAAA,KAAA2pG,GAAA3pG,EAAA,KAAA0pG,GAAA18G,EAAA,aArrDQ,CACJi8B,UAAW,CACP2R,OAAQ,4BACR6wE,cAAe,iBACfC,oBAAqB,uBACrBC,KAAM,UACNC,MAAO,YAEX1/D,SAAU,CAEN2/D,UAAW,+BACX5/E,KAAM,eACNH,OAAQ,iBACRggF,UAAW,qBACXC,KAAM,eACNC,OAAQ,iBACRC,OAAQ,iBACR//E,MAAO,gBACPggF,KAAM,eACNN,MAAO,gBACPO,SAAU,mBACVC,QAAS,kBACTC,MAAO,gBACPC,WAAY,wCAEhBC,gBAAiB,CACbC,YAAa,MACbC,gBAAiB,UACjBC,6BAA8B,mBAC9BC,qBAAsB,mBACtBC,KAAM,QAEV5/E,MAAO,CACH6/E,eAAgB,gCAChBC,kBAAmB,mCACnBC,iBAAkB,+BAClBC,aAAc,8BACdC,OAAQ,wBACRC,cAAe,+BACfC,UAAW,2BACXC,WAAY,4BACZC,cAAe,gCAEnBC,wBAAyB,CACrB,OACA,OACA,QAEJ37G,MAAO,CACH47G,IAAK,MACLC,MAAO,QACPhB,YAAa,iBAEpBx/G,EAAA,mBACa,CACVe,OAAQ,GACRgrC,UAAW,CAAC,IAAK,EAAG,EAAG,KACvBE,YAAa,CAAC,IAAK,IAAK,IAAK,KAC7BC,YAAa,IAChBlsC,EAAA,iBACW,CACRksC,YAAa,EACbD,YAAa,CAAC,EAAG,IAAK,IAAK,OAC9BjsC,EAAA,aACO,KAAGA,EAAA,oBACI,KAAIA,EAAA,0BACE,IAAEA,EAAA,kBACV,aAAWA,EAAA,iCAAAA,EAAA,uBAEN,IAAE8C,EAAA,KAAA25E,EAAA,CAAA15E,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA84G,EAAA,CAAA74G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA+4G,EAAA,CAAA94G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAg5G,EAAA,CAAA/4G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAi5G,EAAA,CAAAh5G,UAAA,EAAAC,OAKD,IAAIF,EAAA,KAAAk5G,EAAA,CAAAj5G,UAAA,EAAAC,OACR,IAAIF,EAAA,KAAAm5G,EAAA,CAAAl5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAo5G,EAAA,CAAAn5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAq5G,EAAA,CAAAp5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAs5G,EAAA,CAAAr5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAu5G,EAAA,CAAAt5G,UAAA,EAAAC,MAKM,IAAIoX,MAAKtX,EAAA,KAAAw5G,EAAA,CAAAv5G,UAAA,EAAAC,MACL,KAAEF,EAAA,KAAAy5G,EAAA,CAAAx5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA05G,EAAA,CAAAz5G,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA25G,EAAA,CAAA15G,UAAA,EAAAC,MAuTR,SAAUquD,GAE7B,IAAImf,EAAWnf,EAAKl5C,cADPhY,KAC0BsgH,MAAMvhE,SAAS2/D,WAAWtlG,KAC7D8rD,EAAQ,IAAI57C,OAFHtpB,KAEesgH,MAAMH,wBAAwB71G,KAAK,KAAM,MACrE,OAAO+lE,EAAS9mE,QAAQ27D,EAAO,IAAM,IAAMjhE,EAAAA,EAAAA,iBAAsB,IAAI4/B,MAAQ,MAChFlhC,EAAA,KAAAg6G,GAAA,CAAA/5G,UAAA,EAAAC,MA+XY,WACI7C,KACR1B,IAAIuvD,MADI7tD,KACO0M,IAAIsL,cAAc,qBAAqB7K,UAAW,CAClEkjD,SAAU,SAEjB1tD,EAAA,KAAAm6G,GAAA,CAAAl6G,UAAA,EAAAC,MA4gBmB,WAChB,OAAO7C,KAAKyzG,WAAW3kG,SAClB5J,QAAOs1B,GAAQA,aAAgB9qB,EAAAA,OACvC7P,EAAA,8BA2GuB,SAAUqiC,GAC9B,MAAMniC,EAAOC,KAEbD,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,kBAAiBzmC,EAAE9V,EAAIi9G,GAAAuD,IAAA7/G,KAAJX,EAA+BmiC,EAAEs+E,KAAK,SAAU92G,GACjG3J,EAAK0gH,oBAAoB/hH,MAAK,SAAUgiH,GAC/BA,EAAUnyB,eACXmyB,EAAUr1G,gBAAgB3M,MAAK,WAC3BgiH,EAAU/gH,QAAQghH,kBAAoBD,EAAUE,mBAAmBC,OACnEH,EAAUtzG,KAAK1D,eAMlC/G,EAAA,KAAA+6G,GAAA,CAAA96G,UAAA,EAAAC,MAuPqB,WAClB,MAAM9C,EAAOC,KACbyR,OAAOkvC,oBAAoB,mBAAkB59C,EAAEhD,EAAIi8G,IAAsB,GACzEh5G,EAAAjD,EAAIi8G,EAAuB,MAEvB,eAAgBvqG,OAChBA,OAAOkvC,oBAAoB,WAAU59C,EAAEhD,EAAI+7G,IAAmB,GAE9DrqG,OAAOkvC,oBAAoB,OAAM59C,EAAEhD,EAAI+7G,IAAmB,GAE1D,eAAgBrqG,OAChBA,OAAOkvC,oBAAoB,WAAU59C,EAAEhD,EAAIg8G,IAAmB,GAE9DtqG,OAAOkvC,oBAAoB,QAAO59C,EAAEhD,EAAIg8G,IAAmB,MAElEl8G,EAAA,yBA+TkB,SAAUihH,EAAUtkB,EAAUukB,EAAWC,GACxD,MAAMjhH,EAAOC,KAEb,IAAID,EAAK2wF,mBAAoB3wF,EAAK2wF,iBAAiB5jF,cAAkB/M,EAAK2wF,iBAAiB5jF,aAAazH,cAAetF,EAAK2wF,iBAAiB5jF,aAAayhF,cAA1J,CAIA,IAAI0yB,EAAOH,EAAS5+E,EAGpB,GAAIniC,EAAK2uF,mBAAoB,CACzB3uF,EAAKmhH,wCAAwCnhH,EAAK2uF,mBAAmBhvF,QAErE,IAAIyhH,EAAK,EACT,KAAOphH,EAAK2uF,mBAAmB/gE,EAAEwzF,IAAOF,GACpCE,IAGJphH,EAAK+tF,sBAAsBpvF,MAAKmwG,GAAWA,GACvCA,EAAQ7V,kBAAkBt6F,MAAK,SAAUoN,GACjCA,IACAA,EAAMmB,MAAMA,MAAMy9E,QAAQhuC,KAAK,CAAE/uB,EAAG5tB,EAAK2uF,mBAAmB/gE,EAAS,IAAPwzF,EAAW,EAAIA,EAAK,KAClFr1G,EAAM7L,KAAK87F,iCAI9Bp5F,EAAA,KAAAy7G,GAAA,CAAAx7G,UAAA,EAAAC,MAiJ4B,SAAUY,EAASU,GAC5C,MAAMpE,EAAOC,KACb,IAAI4E,EAAMiR,EAAG9V,EAAIo+G,GAAAiD,IAAA1gH,KAAJX,EAAqC0D,GAQlD,OAPKmB,IACDA,EAAS,CACLnB,QAASA,GAEbV,EAAAhD,EAAIo8G,GAA4B/zG,KAAKxD,IAEzCA,EAAOT,KAAOA,EACPS,KACV/E,EAAA,oBA6Xa,SAAUq+E,EAAIv+E,GACxB,MAAMI,EAAOC,KAEb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClCh0B,EAAKshH,qBAAqB3iH,MAAK,SAAU48G,GACrC,GAAIA,EAAQ,CACR,IAAIgG,EAASpjC,EAAG7/B,QAAQj/C,GACxB,GAAIk8G,EAAOgG,GAAS,CAChB,IAAIltG,EAAMknG,EAAOgG,GAAQltG,IAEzB,MAAMmtG,EAAO,WAET,MAAM5N,EAAoB5zG,EAAK6zG,uBAC3BD,GAAqBA,EAAkBt1D,QAAQj/C,KAAOkiH,GACtDvhH,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAGhC/pG,IAAAA,WAAuBvW,EAAKugH,MAAMlB,gBAAgBC,YAAc,IAAMjrG,GAAK1V,MAAK,WAC5EqB,EAAKyhH,kBAAkB9iH,MAAK,WACxBmX,EAAA9V,EAAIg+G,GAAA0D,IAAA/gH,KAAJX,GAAmBrB,MAAK,IAAMG,GAAQ,WAE3CsX,OAAM,SAAUsD,GACf/R,QAAQgS,KAAKD,GACb5a,GAAQ,OAKZc,MAAAA,GAAAA,EAAS8T,OACT8tG,IAGAh+G,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,wBAAyB4/E,GAAM,IAAM1iH,GAAQ,gBAMpGgB,EAAA,wBAEiB,SAAU+sD,GACxB,MAAM7sD,EAAOC,KACbuD,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,6BAA6B,WACzD5hC,EAAK2M,IAAIhB,iBAAkB,IAAG3L,EAAKu8C,yCAAyC/0C,SAAQ,SAAU22E,GAC1Fn+E,EAAK2hH,YAAYxjC,EAAI,CAAEzqE,QAAQ,IAC/Bm5C,EAAOxvB,UAAW,WAG7Bv9B,EAAA,yBAEkB,SAAUq+E,GACzB,MAAMn+E,EAAOC,KAERD,EAAKq8C,UACNr8C,EAAK89C,WAGT99C,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,MAAMnE,SAAQ,SAAU22E,GAAI,IAAA2jC,EAC9D3jC,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAC2B,QAA/C+hH,EAAA3jC,EAAGlmE,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,kBAAU,IAAAmD,GAA/CA,EAAiD5jF,gBAAgB,YAGrEigD,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAEjB,MAAMquE,EAAM+P,EAAGlmE,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAE3CoD,EAAkB,SAAUC,GAC9B7jC,EAAG8jC,eAAe,CAAEC,SAAU,SAAUC,MAAO,QAC/ChkC,EAAGv9B,oBAAoB,gBAAiBmhE,GAAiB,IAE7D5jC,EAAGtyE,iBAAiB,gBAAiBk2G,GAAiB,GAEtD5jC,EAAG9wD,aAAa,QAASrtB,EAAK4hC,gBAAgB,gBAAkB,IAAMwsC,EAAI/0D,MAC1E+0D,EAAI/gD,aAAa,QAAS8wD,EAAGtgD,aAAa,UAErC79B,EAAKoiH,qBACCpiH,EAAKwoG,WAEnB1oG,EAAA,6BAEsB,WAEnB,OADaG,KACD2hH,MAAMC,UAAU5pG,cAAc,MAAQlY,EAAAA,EAAAA,QAAAA,YA5gFlD,MAAMC,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bt5C,EAAAjD,EAAIu8E,EAAcr4E,EAAAA,EAAAA,OAAYlE,EAAKJ,QAAQ48E,YACtCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAW9J,EAAChD,EAAIu8E,IAGlCt5E,EAAAjD,EAAI07G,EAAmBx3G,EAAAA,EAAAA,OAAY,KACnC0I,SAAS+0B,KAAK70B,YAAW9J,EAAChD,EAAI07G,IAE9B17G,EAAKqiH,kBAAoBriH,EAAKJ,QAAQyiH,mBAAqB,GAE3DriH,EAAKy8C,cAAe,EAEpBz8C,EAAKsiH,mBAAoB,EAEzBtiH,EAAKuiH,mBAAqB,mBAC1BviH,EAAKwiH,uBAA0B,IAAGxiH,EAAKu8C,qBAG3CC,eACI,MAAO,qBAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,WACPJ,MAAMimC,SAASvnC,GAErByB,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,YAA4BxD,GAC5CA,EAAKE,KAAK4lC,SAASvnC,GAEfyB,EAAKJ,QAAQozG,mBACPz0G,EAAI6M,WAAW,WAAY,CAAED,OAAQnL,EAAM4sC,UAAU,IAG/DruC,EAAIw2G,gBAAkB,GAEtB/0G,EAAKokE,mBAAqBpkE,EAAKJ,SAAWI,EAAKJ,QAAQwkE,oBACnDpkE,EAAKzB,IAAIqB,QAAQ8/C,WAAa1/C,EAAKzB,IAAIqB,QAAQ8/C,UAAU0kB,oBACzD,GAEJ,MAAMq+C,EAAkBlkH,EAAI8rD,SAAS,CACjChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,EACT9kB,MAAO,mBAGLk4G,EAA0BnkH,EAAI8rD,SAAS,CACzChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,EACT9kB,MAAO,yBACPnE,OAAQ,SAAU3C,GACd,IAAIoF,EAAOpF,EAAQM,UAAU8E,KAM7B,OAJIA,EADAA,IAASA,EAAO,IAAI+gB,OAAOvmB,OAAS,GAC5BwF,EAAO,IAAI+gB,OAAOwE,cAEnB,GAEJ,CACHiH,MAAO,CACHz0B,OAAQ,EACRgrC,UAAW,UACXC,YAAa9rC,EAAK4hH,MAAMe,YAAY9iF,QAAU,EAAI,EAClDkM,YAAa,UACbM,UAAW,UACXF,kBAAmB,UACnBD,kBAAmB,EACnBM,MAAO1jC,GAEX0sB,KAAM,CACF,CACIyW,cAAejsC,EAAK4hH,MAAMe,YAAY9iF,QAAU,EAAI,EACpDmM,YAAa,EACbD,YAAa,WAEjB,CACIE,cAAejsC,EAAK4hH,MAAMe,YAAY9iF,QAAU,EAAI,EACpDmM,YAAa,EACbD,YAAa,gBAK3B62E,EAAoBrkH,EAAI8rD,SAAS,CACnChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,EACT9kB,MAAO,mBACPnE,OAAQ,CACJmvB,KAAM,CACFwW,YAAa,EACbD,YAAa,WAEjBzW,MAAO,CACHz0B,OAAQ,EACRgrC,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbK,UAAW,UACXC,SAAU,GACVH,kBAAmB,UACnBD,kBAAmB,EACnBE,YAAa,CAAC,GAAI,IAClBI,MAAO,cAKbq2E,EAAuBtkH,EAAI8rD,SAAS,CACtChrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,EACT9kB,MAAO,wBAGXjM,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA6B,SAAUf,GAC1C,MAAMgB,EAAOC,KAEP6iH,EAAiB,SAAU9jH,GAC7B,MAAMw5D,EAAWx5D,EAAEw5D,SACb9qD,EAAS1O,EAAEi2G,WACjB,IAAI8N,EAAa,IAAMhjH,EAAAA,EAAAA,OAAAA,IAAAA,cACnBq1G,EAAa,IAAMr1G,EAAAA,EAAAA,OAAAA,IAAAA,cAGvB,GAAIy4D,EAASnqC,cAAcplB,QAAQmsG,KAAgB58C,EAASl1D,OAAS8xG,EAAW9xG,QAE5Ek1D,EAASnqC,cAAcplB,QAAQ85G,KAAgBvqD,EAASl1D,OAASy/G,EAAWz/G,QAAUoK,IAAW1N,EAAM,CAEvGA,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAC5B,MAAM0C,EAAc,WAEhB97D,YAAW,WAGP,GAFAlnD,EAAKzB,IAAIw2G,gBAAkB/0G,EAAKzB,IAAIw2G,gBAAgBzsG,OAAOtJ,EAAE+P,UAC7D2C,OAAO6mG,mBACyB,IAA5B7mG,OAAO6mG,iBAAwB,CAC/Bv4G,EAAKzB,IAAI6uD,eAAeptD,EAAKzB,IAAIw2G,iBACjC/0G,EAAKzB,IAAIw2G,gBAAkB,UACpBrjG,OAAO6mG,iBACd,IAAIp6B,EAAKn+E,EAAKzB,IAAIw1D,sBACdoqB,GACAA,EAAG32B,WAAWxnD,EAAKzB,IAAIk3G,2BAE3Bz1G,EAAKqO,IAAIrO,EAAKugH,MAAMzgF,MAAMqgF,cAAe6C,MAE9C,IAEPhjH,EAAKsO,GAAGtO,EAAKugH,MAAMzgF,MAAMqgF,cAAe6C,GACxChjH,EAAKijH,YAAYjkH,GAEb,SAASkjC,KAAKs2B,EAASnqC,gBAAkBruB,EAAK0zG,YAC1C1zG,EAAK0zG,WAAWrtG,QAChBrG,EAAK0zG,WAAW3kG,SAASvH,SAAQ,SAAU9D,GAClCA,EAAQ0C,aACL1C,aAAmBiM,EAAAA,GAAS3P,EAAK0zG,WAAWrtG,OAAOivB,MACnD5xB,EAAQiC,SAAS3F,EAAK0zG,WAAWrtG,OAAOivB,OACjCslF,EAAUl3G,IAAY1D,EAAK0zG,WAAWrtG,OAAOmvB,MACpD9xB,EAAQiC,SAAS3F,EAAK0zG,WAAWrtG,OAAOmvB,YAYhEx1B,EAAKkjH,SAAWh/G,EAAAA,EAAAA,WAAgBlE,EAAKkjH,QAAQvkH,MAC7CqB,EAAKkjH,QAAQvkH,KAAKmkH,EAAe9jH,KAEjCgB,EAAKkjH,SAAU,EACfJ,EAAe9jH,KAGrBmhD,KAAKngD,IAEPzB,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACxCgB,EAAK2uF,qBACL3uF,EAAK2uF,mBAAmBhvF,OAASuE,EAAAA,EAAAA,UAAelE,EAAK2uF,mBAAmBhvF,OAAQX,EAAEw7B,OAAQx7B,EAAEw2D,QACxFx1D,EAAK2uF,mBAAmBqL,oCAAsCh6F,EAAK2uF,mBAAmBqL,mCAAmC12F,QACzHtD,EAAK2uF,mBAAmBqL,mCAAmCxyF,SAAS27G,IAChEA,EAAiBC,eAAiBl/G,EAAAA,EAAAA,UAAei/G,EAAiBC,eAAgBpkH,EAAEw7B,OAAQx7B,EAAEw2D,eAK9Gj3D,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GAClC,GAAIA,EAAE+L,QACF,OAAQ/L,EAAE2tB,QACN,IAAK,QACG3tB,EAAE+L,QAAQI,SAAWnL,GACrB8V,EAAA9V,EAAI08G,GAAA2G,IAAA1iH,KAAJX,EAAwBhB,EAAE+L,QAAQI,QAEtC,MACJ,IAAK,WACD2K,EAAA9V,EAAI28G,GAAA2G,IAAA3iH,KAAJX,EAA2BhB,EAAE+L,QAAQI,YAMrD5M,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACpC,MAAMukH,EAAUnkH,OAAOqB,UAAUC,eAAeC,KAAK3B,EAAG,iBAClDwkH,EAAkBD,EAAUvkH,EAAEmzG,cAAgBnzG,EAAEkzG,WAClDlyG,EAAK0zG,WAAWtxC,aAChBpiE,EAAK0zG,WAAWtxC,YAAYR,YAAY4hD,GAAiB7kH,MAAKkG,IAC1D,GAAIA,EAAQ,CACR,MAAM4+G,EAAYzjH,EAAK6zG,uBACjB6P,EAAmB,CAAErvG,IAAKovG,EAAUnlE,QAAQjqC,KAC9CkvG,IAEAG,EAAiBxR,WAAalzG,EAAEkzG,YAEpClyG,EAAK2jH,UAAUD,GAAkB/kH,MAAK,WACrB,IAAAilH,EAATL,IACAvjH,EAAK6jH,gBAAkB,KACnBJ,EAAUxrG,cAAc,SAASnV,SAAyB,QAApB8gH,EAAK5kH,EAAEmzG,qBAAa,IAAAyR,OAAA,EAAfA,EAAiB96G,OAC5D9I,EAAK8jH,cAAcJ,EAAiBrvG,IAAKqvG,EAAiBxR,WAAWppG,iBASjGvK,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACrCA,EAAEyF,QAAUzE,EAAK0zG,YAAckH,EAAU57G,EAAE0E,UAC3C1D,EAAK2zG,sBAIb3zG,EAAK+jH,mBAAqB3kH,OAAOmD,OAAOvC,EAAKJ,QAAQokH,cAAgB,GAAI,CACrEp3C,IAAK,oBACLq3C,QAAS,CAAC,KACVC,UAAU,EACVC,oBAAoB,EACpBxiF,KAAM3hC,EAAK4hC,gBAAgB,8BAC5B,CACCp3B,MAAOxK,EAAKJ,QAAQokH,cAAgBhkH,EAAKJ,QAAQokH,aAAax5G,MAAQxK,EAAK4hC,gBAAgB5hC,EAAKJ,QAAQokH,aAAax5G,OAASoC,SAASpC,QAG3IxK,EAAKokH,eAAiB3B,EACtBziH,EAAKqkH,uBAAyB3B,EAC9B1iH,EAAK0zG,iBAAmBkP,EACxB5iH,EAAKskH,oBAAsBzB,EAE3B,MAAM0B,EAAcvkH,EAAKzB,IAAIykB,OAAO/Z,QAAQjJ,EAAK0zG,YAEjD,OADA1zG,EAAKzB,IAAI8zD,YAAYryD,EAAKokH,SAAUG,GAC7BvkH,EAGX6K,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtB2mC,EAA2B,+BAC3BC,EAA+B,+BAC/B1mC,EAAwB,+BACxB2mC,EAA+B,+BAC/BC,EAAgC,+BAChCC,EAA6B,+BAE7Bt7G,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBioE,GAA0Bj2G,QACxEjF,EAAStJ,EAAKu8C,MAAQ,+BAAiCkoE,GAA8Bl2G,QACrFjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEjF,EAAStJ,EAAKu8C,MAAQ,0BAA4BmoE,GAA8Bn2G,QAChFjF,EAAStJ,EAAKu8C,MAAQ,sBAAwBooE,GAA+Bp2G,QAC7EjF,EAAStJ,EAAKu8C,MAAQ,wBAA0BqoE,GAA4Br2G,QAC5EvO,EAAKsJ,SAAWA,EAGpBuB,aAAa2tB,GACT,MAAMx4B,EAAOC,KAEb+C,EAAAhD,EAAIu8E,GAAYnvE,gBAAkBpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,YACzEv8C,EAAKs/C,oBACXt/C,EAAKu/C,gBAAgBp0C,OAASnL,EAC9B,MAAMsJ,EAAWsD,SAASC,cAAc,YAKxC,OAJAvD,EAAS8D,gBAAkBpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,cAAe,CAAEyhC,UAAWh+E,EAAKX,KAC9FW,EAAK6kH,uBAAyBv7G,EAAS2C,QAAU3C,EAAS2C,QAAQkL,WAAa7N,EAAS6N,WACxFnU,EAAAhD,EAAI07G,GAAiBtuG,gBAAkBpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,gBAAiB,UAE7Ev8C,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,CAAEghC,UAAWh+E,EAAKX,KAAM,WAC3EW,EAAK2M,IAAIsL,cAAcjY,EAAKugH,MAAMvhE,SAAS4/D,WAAW/yG,iBAAiB,SAAS,SAAU7M,GACtFgB,EAAK8kH,gBAAgB9lH,EAAE0O,QACvB1O,EAAE+uE,qBAEF7pE,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAkCZ3tB,4BACI,MAAM7K,EAAOC,KAEb,IAAKD,EAAK2wF,iBAAkB,CACxB,IAAI/wF,EAAU,IACTI,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAKJ,QAAQ07F,UAC/C17F,EAAQ07F,UAAYt7F,EAAKJ,QAAQ07F,UAC1Bt7F,EAAKJ,QAAQ6/C,mBACpB7/C,EAAUI,EAAKJ,QAAQ6/C,kBAEvBrgD,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,cACnDA,EAAQwkD,WAAapkD,EAAKJ,QAAQwkD,WAElCxkD,EAAQwkD,WAAa,EAEzBpkD,EAAK2wF,uBAAyB3wF,EAAKzB,IAAI6M,WAAW,YAAaxL,GAE/DI,EAAK2wF,iBAAiB6K,oBAAsB,WACxCv7F,KAAK8M,aAAaihF,kBAAoB,SAAU+2B,GAC5C,MAAM3vB,EAAOn1F,KACbm1F,EAAKhwF,eAAiBpF,EAAK0zG,WAAW3kG,SAASlG,MAAMnF,KACxCA,aAAmBgM,EAAAA,GAAahM,aAAmBiM,EAAAA,KAEhE,MAAMikG,EAAoB5zG,EAAK6zG,uBAC3BD,GAAqBxe,EAAKhwF,iBAC1BgwF,EAAKhwF,eAAeiP,IAAMu/F,EAAkBt1D,QAAQjqC,IACpD+gF,EAAKhwF,eAAeozD,SAAQx1D,EAAGhD,EAAIu8G,GAAA57G,KAAJX,EAA0B4zG,MAOzE,OAAO5zG,EAAK2wF,iBAGhBsyB,YAAYrjH,GACR,MAAMI,EAAOC,KACb,GAAKD,EAAKs8C,WA+BC,SAASpa,KAAKtiC,EAAQ44D,SAASnqC,gBACtCruB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,2BAA4B,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,eA/BxE,GAAIH,EAAQ44D,UAAY54D,EAAQmP,UAAYnP,EAAQmP,SAASzL,OAAS,EAAG,CACrE,MAAM6jD,EAAOnnD,EAAK+zD,sBAAsB1M,UACxCrnD,EAAKglH,iBAAmBplH,EAAQ44D,SAChC,MAAMysD,EAAc,GACpB,IAAK,IAAI9iH,EAAI,EAAG+I,EAAMtL,EAAQmP,SAASzL,OAAQnB,EAAI+I,EAAK/I,IACpD8iH,EAAY58G,KAAKrI,EAAK0zG,WAAW77E,WAAWj4B,EAAQmP,SAAS5M,KAEjEtD,QAAQwiB,IAAI4jG,GAAatmH,MAAK,WAC1BqB,EAAKE,KAAKglH,wBAAwB,CAC9B/9D,KAAMA,EACNg+D,aAAcvlH,EAAQulH,aACtBjT,WAAYtyG,EAAQsyG,aAEpBlyG,EAAK0zG,aAEL1zG,EAAK4+C,YAEDh/C,EAAQsyG,aACRlyG,EAAK0zG,WAAWtxC,YAAcxiE,EAAQsyG,YAG1ClyG,EAAK2M,IAAIsL,cAAe,kBAAiBjY,EAAKX,qBAAqBqF,UAAW,EAEzE9E,EAAQwlH,UAETplH,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,gBA8QzCslH,yBAAyB7sD,GACrB,MAAMx4D,EAAOC,KAEPL,EAAU,CACZ4K,MAAOxK,EAAK4hC,gBAAgB,YAC5B42B,SAAUA,EACVwV,aAAc,WACVl4D,EAAA9V,EAAI28G,GAAA2G,IAAA3iH,KAAJX,EAA2BA,GAAM,KAezC,OAZIA,EAAKJ,QAAQ6/C,iBACb7/C,EAAQ8/C,UAAY,CAChB0E,WAAYpkD,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAKJ,QAAQ6/C,iBAAiB2E,YAAcpkD,EAAKzB,IAAIqB,QAAQ8/C,WAAa1/C,EAAKzB,IAAIqB,QAAQ8/C,UAAU0E,YAAc,GAChKO,aAAc3kD,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAKJ,QAAQ6/C,iBAAiBkF,cAAgB3kD,EAAKzB,IAAIqB,QAAQ8/C,WAAa1/C,EAAKzB,IAAIqB,QAAQ8/C,UAAUiF,cAAgB,EACtK9kB,SAAS,GAGbjgC,EAAQ8/C,UAAY,CAChB7f,SAAS,GAIVjgC,EAsBXo9C,WAAW54C,EAAMo0B,GACb,MAAMx4B,EAAOC,KAEPqlH,EAAMtlH,EAAKugH,MAAMvhE,SAEvB,OAAOn/C,MAAMm9C,WAAW54C,GAAM,WAiB1BpE,EAAK4hH,MAAQ,CACT2D,eAAgBvlH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,2BAChDipE,iBAAkBxlH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,6BAClDkpE,YAAazlH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,8BAC7CmpE,gBAAiB1lH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,sBACjDopE,UAAW3lH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,oBAC3CqpE,SAAU5lH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,uBAC1CspE,cAAe7iH,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,wBACtDupE,WAAY9iH,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,mBACnDwpE,WAAY/iH,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,qDAEnDypE,qBAAsBhjH,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,0BAGjEv8C,EAAK4hH,MAAMC,UAAY7hH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,6BAEvDv8C,EAAK4hH,MAAMqE,qBAAuBjmH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kDAElEv8C,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,qBAAqB1wC,iBAAiB,SAAS,WACrF7I,EAAAhD,EAAI48G,IAAAj8G,KAAJX,MAGJA,EAAK4hH,MAAMsE,UAAYlmH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,qBAEvDv8C,EAAK4hH,MAAMuE,SAAWnmH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,wBAElDr4C,EAAAA,EAAAA,gBACIujC,WAAW,uDAAuDje,UAClExpB,EAAK4hH,MAAMqE,qBAAqBpmF,SAAU,GAG9CnuB,OAAO00G,MAAQ10G,OAAO2kG,YAAc3kG,OAAO20G,UAAY30G,OAAOJ,MAC9DtR,EAAK4hH,MAAM8D,gBAAgBroF,UAAW,EACtCr9B,EAAK4hH,MAAM8D,gBAAgB75G,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB8K,eAAgB7L,GAC5E,GAAIkF,EAAAA,EAAAA,WAAgBwN,OAAOilG,oBAAqB,CAG5C,IAAIC,EADJ53G,EAAEoxG,iBAEF,IACIwG,QAAoBllG,OAAOilG,mBAAmB,CAC1ClE,MAAOzyG,EAAKugH,MAAMH,wBAAwB7hH,KAAIqrE,IAC1C,MAAM/kE,EAAS,CACXi8B,OAAQ,IAGZ,OADAj8B,EAAOi8B,OAAO/gC,EAAAA,EAAAA,SAAgB6pE,EAAI/iD,OAAO,GAAGg5B,gBAAkB,CAAC+pB,GACxD/kE,OAInB,MAAO7F,GACH,GAAIA,aAAa83G,cAAgBplG,OAAOjO,SAAWiO,OAAQ,CAEvD,IAAIqlG,EAAc/2G,EAAK4hC,gBAAgB,4BACvC5hC,EAAKzB,IAAIuvD,MAAMipD,EAAa,CAAE3sG,KAAMrK,EAAAA,EAAAA,QAAAA,eAEnC,GAAe,eAAXf,EAAE8J,KACP,MAAM9J,EAGV43G,GACA52G,EAAKsmH,SAAS1P,EAAY,GAAI,CAAE7rG,QAAS/K,IAMjD,MAAMi1F,EAAQh1F,KACRy2G,EAAO9pG,SAASC,cAAc,QAC9BpJ,EAASwxF,EAAMx4B,cACrBh5D,EAAO++B,aAAak0E,EAAMzhB,GAC1ByhB,EAAK5pG,YAAYmoF,GAGjByhB,EAAKv3B,sBAAsB,WAAY8V,GACvCxxF,EAAOi5D,YAAYg6C,MAGvB12G,EAAK4hH,MAAM8D,gBAAgB75G,iBAAiB,UAAU,SAAU7M,GAC5DgB,EAAKsmH,SAAStnH,EAAE0O,OAAOgwD,MAAM,QAGjC/1D,QAAQC,IAAI,gCAGhB5H,EAAK4hH,MAAM2D,eAAe15G,iBAAiB,SAAS,WAChD7L,EAAKumH,yBAETvmH,EAAK4hH,MAAM4D,iBAAiB35G,iBAAiB,SAAS,WAClD7L,EAAKwmH,2BAGT,MAmCMC,EAAsB,YAnCb,SAAUC,GACrBA,EAAaA,EAAWr4F,cAExB,MAAMmxD,EAAMz+E,MAAMoX,KAAKnY,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,OAC7D6zE,EAAIh4E,SAAQ,SAAU22E,GAClBA,EAAGv4E,MAAMg3C,QAAU,UAEvB,MAAM+pE,EAAWnnC,EAAIr6E,QAAO,SAAUg5E,GAClC,OAAOA,EAAG30D,QAAQ,sBAAwBzpB,EAAAA,EAAAA,QAAAA,YAGxC6mH,EAAa5mH,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,2BACnD,GAA0B,IAAtBmqE,EAAWpjH,OACXqjH,EAASn/G,SAAQ,SAAU22E,GACvBA,EAAGv4E,MAAMg3C,QAAU,MAEvBgqE,EAAWhhH,MAAM21C,WAAa,cAC3B,CACHqrE,EAAWhhH,MAAM21C,WAAa,SAC9B,IAAIhnC,EAAI,IAAIgV,OAAOm9F,EAAY,KAC/BC,EAASn/G,SAAQ,SAAU22E,GACvBA,EAAGv4E,MAAMg3C,QAAUroC,EAAE2tB,KAAKi8C,EAAGlmE,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAAWtlG,MAAQ,GAAK,UAGtFstG,EAASvrG,MAAK,SAAU+iE,GACzB,MAA4B,KAArBA,EAAGv4E,MAAMg3C,YAEhB4iC,EAAIh4E,SAAQ,SAAU22E,GACdA,EAAG30D,QAAQ,6CACX20D,EAAGv4E,MAAMg3C,QAAU,QAOnCz3C,CAAOlF,KAAK6C,MAAMurB,cAAcxE,SAEpC7pB,EAAK4hH,MAAM6D,YAAY55G,iBAAiB,QAAS46G,GACjDzmH,EAAK4hH,MAAM6D,YAAY55G,iBAAiB,SAAU46G,GAGlDzmH,EAAK4hH,MAAM+D,UAAU95G,iBAAiB,QAAS7L,EAAK2jH,UAAUxjE,KAAKngD,IACnEA,EAAK4hH,MAAMgE,SAAS/5G,iBAAiB,QAAS7L,EAAK6mH,YAAY1mE,KAAKngD,IAEpE,MAAMmzF,EAAOnzF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,6BAGvCuqE,EAAW,SAAUC,EAAMt/G,GACT,OAAhBA,EAAI0uE,UACJ1uE,EAAMA,EAAIg1D,cAAcA,eAG5B,MAAMw4B,EAAQxtF,EAAIwQ,cAAc,SAC1Bm2D,EAAM3mE,EAAIwQ,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAE9CoI,GAEA9xB,EAAMj3D,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACvBk1F,EAAM+xB,QACN/xB,EAAMnyF,MAAQsrE,EAAI/0D,KAClB+0D,EAAIpwC,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClB0H,EAAI62C,QAAQ9zC,MAAQ/C,EAAI+C,MACxB/C,EAAI+C,MAAQ,GAGZ/C,EAAIwQ,cAAcqtG,EAAIvmF,MAAMf,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC1C0H,EAAIwQ,cAAcqtG,EAAI1mF,QAAQZ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC5C0H,EAAIwQ,cAAcqtG,EAAI3G,WAAW3gF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/C0H,EAAIwQ,cAAcqtG,EAAIvG,QAAQ/gF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC5C0H,EAAIwQ,cAAcqtG,EAAItmF,OAAOhB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAE3C0H,EAAIwQ,cAAcqtG,EAAIzG,MAAM7gF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC7C0H,EAAIwQ,cAAcqtG,EAAIxG,QAAQ9gF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAG/Ck1F,EAAMj3D,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACpBquE,EAAIpwC,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACrB0H,EAAI+C,MAAQ/C,EAAI62C,QAAQ9zC,aACjB/C,EAAI62C,QAAQ9zC,MAGnB/C,EAAIwQ,cAAcqtG,EAAIvmF,MAAMf,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC7C0H,EAAIwQ,cAAcqtG,EAAI1mF,QAAQZ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC/C0H,EAAIwQ,cAAcqtG,EAAI3G,WAAW3gF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAClD0H,EAAIwQ,cAAcqtG,EAAIvG,QAAQ/gF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC/C0H,EAAIwQ,cAAcqtG,EAAItmF,OAAOhB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE9C0H,EAAIwQ,cAAcqtG,EAAIzG,MAAM7gF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC1C0H,EAAIwQ,cAAcqtG,EAAIxG,QAAQ9gF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAIpDC,EAAKinH,WAAa,SAAUC,EAAWz/G,GACnC,GAAIA,EAAK,CAGL,MAAM0/G,GADoB,OAAhB1/G,EAAI0uE,QAAmB1uE,EAAMA,EAAIg6C,YACtBxpC,cAAcqtG,EAAI5G,OACvCyI,EAASnpF,UAAUnjB,IAAI7a,EAAKugH,MAAMxkF,UAAU0iF,MAC5C0I,EAAS95F,aAAa,QAASrtB,EAAK4hC,gBAAgB,iBACpD5hC,EAAKsiH,mBAAoB,IAcjCnvB,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC8hH,EAAI3G,WAAW,SAAU3/G,GACtF,IAAImoD,EAAOnnD,EAAK+zD,sBAAsB1M,UAEtC+/D,EAAUpnH,EAAMhB,EAAE0O,QAAQ/O,MAAK,WAC3BqB,EAAK+zD,sBAAsBvM,WAAWL,UAI9CnnD,EAAKsO,GAAGtO,EAAKugH,MAAMzgF,MAAMqgF,eAAe,SAAUnhH,GAC9C,GAAKgB,EAAKs8C,WAmBNt8C,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,2BAA4B,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,cAnBtD,CAClB,MAAMsnH,EAAcrnH,EAAK4hH,MAAMC,UAAU5pG,cAAc,eAAiBjZ,EAAE+qB,MAAQ,MAClFq9F,EAAUpnH,EAAMqnH,EAAYpvG,cAAcqtG,EAAI3G,YAAYhgH,MAAK,WACvDqB,EAAKoiH,sBACEpiH,EAAKoiH,oBACLpiH,EAAKwoG,YAGpB,MAAMuZ,EAAkB,SAAUC,GACzB7iF,YAAY1+B,UAAUwhH,eAIvBoF,EAAYpF,eAAe,CAAEC,SAAU,SAAUC,MAAO,QAHxDniH,EAAK4hH,MAAMC,UAAUyF,UAAYtoH,EAAE+qB,MAAQs9F,EAAYE,aAK3DF,EAAYzmE,oBAAoB,gBAAiBmhE,GAAiB,IAEtEsF,EAAYx7G,iBAAiB,gBAAiBk2G,GAAiB,OAMvE,MAAMyF,EAAmB,SAAUxnH,EAAMynH,GACrCznH,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,eAAenE,SAAQ,SAAUkgH,GACnE,GAAIA,EAASppE,QAAQj/C,KAAOooH,EAAW,CAEnC,MAAMN,EAAWO,EAASzvG,cAAcqtG,EAAI5G,OAC5C1+G,EAAKsiH,mBAAoB,EAIzB6E,EAASnpF,UAAUnjB,IAAI7a,EAAKugH,MAAMxkF,UAAU0iF,MAC5C0I,EAAS95F,aAAa,QAASrtB,EAAK4hC,gBAAgB,iBAGpDklF,GAAS,EAAOY,QAQtBN,EAAY,SAAUpnH,EAAM2nH,GAC9B,OAAO,IAAI9oH,SAAQ,SAAUC,EAASk1B,GAElC,MAAM4zF,EAAUD,EAAQlrD,cAAcA,cAEtCvV,YAAW,WACH0gE,EAAQ5pF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UAG3BC,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAE5BqH,EAAQzpF,gBAAgB,UAGnBl+B,EAAK6zG,wBACV2T,EAAiBxnH,EAAM4nH,EAAQtpE,QAAQj/C,IACvCW,EAAKkjH,QAAUljH,EAAKonH,UAAUQ,IAE9B5nH,EAAKkjH,QAAUljH,EAAKonH,UAAUQ,GAK9BA,EAAQ5pF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAC3B+V,EAAA9V,EAAIy8G,EAAAoL,IAAAlnH,KAAJX,EAA6B,CAAEqU,IAAKuzG,EAAQtpE,QAAQjqC,IAAKyzG,oBAAoB,IAAQnpH,MAAK,WACtFG,OAGJA,MAEL,OA0BLipH,EAAuB,SAAUtgH,GACnC,IAAI5C,EAAS4C,EACb,KAA0B,OAAnB5C,EAAOsxE,SACVtxE,EAASA,EAAO43D,cAEpB,OAAO53D,GAGXsuF,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIvmF,QAAQ,SAAU//B,GACrG8nH,GAAS,EAAM9nH,EAAE0O,YAErBylF,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAI1mF,UAAU,SAAU5/B,GACvGgB,EAAK2hH,YAAYoG,EAAqB/oH,EAAE0O,SAAS/O,MAAK,SAAUqpH,GACxDA,IAAYhoH,EAAK6jH,gBAAgBvgH,SACjCtD,EAAK2M,IAAIsL,cAAcjY,EAAKugH,MAAMvhE,SAAS4/D,WAAWvhF,UAAS,UAI3E81D,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIzG,QAAQ,SAAU7/G,GACrG,MAAMm/E,EAAK4pC,EAAqB/oH,EAAE0O,QAEJ,IADhBywE,EAAGlmE,cAAc,SAASnV,MAC5B+mB,OAAOvmB,OACfE,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,wBAG9B5hC,EAAK8jH,cAAc3lC,EAAG7/B,QAAQjqC,IAAK8pE,EAAGlmE,cAAc,SAASnV,OAC7DgkH,GAAS,EAAO9nH,EAAE0O,aAG1BylF,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIxG,UAAU,SAAU9/G,GACvG8nH,GAAS,EAAO9nH,EAAE0O,YAGtBylF,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAItmF,SAAS,SAAUhgC,GACtG8W,EAAA9V,EAAIg9G,GAAAiL,IAAAtnH,KAAJX,EAAsB+nH,EAAqB/oH,EAAE0O,SAAS/O,MAAK,WACvDqB,EAAKqpG,gBAAermG,EAAChD,EAAI07G,WAIjCvoB,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIvG,UAAU,SAAU//G,GACvG,MAAMyE,EAASskH,EAAqB/oH,EAAE0O,QACtC1O,EAAE0O,OAAO2f,aAAa,WAAY,IAElCrtB,EAAKm8D,OAAO14D,GAAQ9E,MAAMoQ,IACtB/O,EAAKs/C,oBAAoB3gD,MAAK,SAAUi+E,GACpC,MAAMh9E,EAAUI,EAAKqlH,yBAAwBriH,EAAChD,EAAIu8G,GAAA57G,KAAJX,EAA0ByD,IACxEm5E,EAAOvvE,KAAK0B,EAASxQ,KAAKyQ,IAAQA,EAAEqF,IAAM5Q,EAAO66C,QAAQjqC,IAAYrF,KAAOpP,GAE5EZ,EAAE0O,OAAOwwB,gBAAgB,sBAKrCi1D,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAItG,QAAQ,SAAUhgH,GAErGgB,EAAKE,KAAKgoH,mBACV,MAAMf,EAAWnoH,EAAE0O,OAAO+uD,cAAcxkD,cAAcqtG,EAAI5G,OAC1DyI,EAASnpF,UAAUnjB,IAAI7a,EAAKugH,MAAMxkF,UAAU0iF,MAC5C0I,EAAS95F,aAAa,QAASrtB,EAAK4hC,gBAAgB,iBAC/C5hC,EAAKsiH,oBACNtjH,EAAE0O,OAAO+uD,cAAcxkD,cAAcqtG,EAAInG,OAAOnxG,YAAc,OAClEhO,EAAKmoH,gBAAkB,EACvBnoH,EAAKsiH,mBAAoB,MAG7BnvB,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAI5G,SAAS,SAAU1/G,GAEtG,GADAgB,EAAKooH,iBAAmBppH,EAAE0O,OAAOswB,UAAU8gB,SAAS9+C,EAAKugH,MAAMxkF,UAAU0iF,MACrEz+G,EAAKooH,gBACLpoH,EAAKqoH,uBAAyB,OAG9B,GAAIroH,EAAKsiH,kBAAmB,CACxB,IAAIn7D,EAAOnnD,EAAK+zD,sBAAsB1M,UACtCroD,EAAE0O,OAAO+uD,cAAcxkD,cAAcqtG,EAAInG,OAAOnxG,YAAc,MA/FxD,SAAUhO,EAAMsoH,GAC9B,OAAO,IAAIzpH,SAAQ,SAAUC,EAASk1B,GAClCkzB,YAAW,WACP,MAAM0gE,EAAUU,EAAYC,QAAQ,MAC9B3U,EAAoB5zG,EAAK6zG,uBAC/B2T,EAAiBxnH,EAAM4nH,EAAQtpE,QAAQj/C,IAKnCu0G,GAAqBgU,EAAQtpE,QAAQj/C,KAAOu0G,EAAkBt1D,QAAQj/C,IACtEW,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAGhCtgH,EAAKooH,iBAAkB,EACvBpoH,EAAKwoH,cAAcZ,GAEnB9oH,MACD,MA8EC2pH,CAAUzoH,EAAMhB,EAAE0O,QAAQ/O,MAAK,WAC3BqB,EAAK+zD,sBAAsBvM,WAAWL,GACtCnnD,EAAKsiH,mBAAoB,KAOrCtjH,EAAE0O,OAAO2f,aAAa,QAASrtB,EAAK4hC,gBAAgB5hC,EAAKooH,gBAAkB,cAAgB,iBAC3FppH,EAAE0O,OAAOswB,UAAUS,OAAOz+B,EAAKugH,MAAMxkF,UAAU0iF,OAAQz+G,EAAKooH,qBAIhEj1B,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIrG,YAAY,SAAUjgH,GAC5E,IAAzBgB,EAAKmoH,gBACLnoH,EAAKmoH,gBAHD,GAIHnoH,EAAKmoH,gBAAkBnoH,EAAKmoH,gBAAkB,EAEnDnpH,EAAE0O,OAAO+uD,cAAcxkD,cAAe,IAAGjY,EAAKu8C,SAAS+oE,EAAIpG,WAAW7hF,UAAW,EAEjFr+B,EAAE0O,OAAO+uD,cAAcxkD,cAAcqtG,EAAInG,OAAOnxG,YAAchO,EAAKmoH,gBAAkB,EAAI,KAAO,EAAInoH,EAAKmoH,gBAAkB,KAAOnoH,EAAKmoH,gBAE1G,gBAAzBnoH,EAAKmoH,kBACLnpH,EAAE0O,OAAO2vB,UAAW,OAI5B81D,EAAKtnF,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,SAAS+oE,EAAIpG,WAAW,SAAUlgH,GACxGgB,EAAKmoH,gBAAkBnoH,EAAKmoH,gBAhBpB,GAkBRnpH,EAAE0O,OAAO+uD,cAAcxkD,cAAcqtG,EAAInG,OAAOnxG,YAAchO,EAAKmoH,gBAAkB,EAAI,KAAO,EAAInoH,EAAKmoH,gBAAkB,KAAOnoH,EAAKmoH,gBAEvInpH,EAAE0O,OAAO+uD,cAAcxkD,cAAe,IAAGjY,EAAKu8C,SAAS+oE,EAAIrG,YAAY5hF,UAAW,EAErD,OAAzBr9B,EAAKmoH,kBACLnpH,EAAE0O,OAAO2vB,UAAW,OAM5Br9B,EAAK4hH,MAAMiE,cAAch6G,iBAAiB,SAAS,WAE/C3H,EAAAA,EAAAA,aAEAlE,EAAK0oH,oBAET1oH,EAAK4hH,MAAMkE,WAAWj6G,iBAAiB,SAAS,kBAErC7L,EAAK2oH,mBACZzkH,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBE,qBAAiBl7G,GAC9EkS,IAAAA,WACgBvW,EAAKugH,MAAMlB,gBAAgBE,iBACtCnpG,OAAMsD,GAAO/R,QAAQgS,KAAKD,KAE/BxV,EAAAA,EAAAA,aAEAlE,EAAK0oH,oBAET1oH,EAAK4hH,MAAMmE,WAAWl6G,iBAAiB,SAAS,WAC5CiK,EAAA9V,EAAI88G,GAAA8L,IAAAjoH,KAAJX,MASJA,EAAK4hH,MAAMoE,qBAAqBn6G,iBAAiB,SAAS,WAEtD,MAAMg9G,EAAaj8G,SAAS+0B,KAAKh2B,iBAAiB,wCAE9Ck9G,EAAWvlH,OAAS,GACpBiT,IAAAA,QACasyG,EAAW,GAAGhrF,aAAa,SAAS,GAC5CznB,OAAMsD,GAAO/R,QAAQgS,KAAKD,KAGnCxV,EAAAA,EAAAA,gBAGJlE,EAAK4hH,MAAMe,YAAc3iH,EAAK2M,IAAIsL,cAAc,oCAAsCjY,EAAKX,IAC3FW,EAAK4hH,MAAMe,YAAY92G,iBAAiB,UAAU,WAC1C7L,EAAK4hH,MAAM2D,eAAevnF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAC7CC,EAAKqkH,iBAAiBt/G,cAAc9E,KAAK4/B,SAG7C58B,EAAAjD,EAAI67G,EAAoB57G,KAAK4/B,YAGjC/pB,EAAA9V,EAAIg+G,GAAA0D,IAAA/gH,KAAJX,GAEIkE,EAAAA,EAAAA,WAAgBs0B,IAChBA,OAoBZslB,YAIAG,aAGI/5C,EAAAA,EAAAA,aAFajE,KAGR6oH,iBAHQ7oH,KAIRumH,wBA+BT9F,oBACI,MAAM1gH,EAAOC,KAmDb,OAlDKD,EAAK4hH,MAAMmH,oBACZ/oH,EAAK4hH,MAAMmH,kBAAoB,IAAIlqH,SAAQ,SAAUC,EAASk1B,GAC1D,GAAKh0B,EAAK4hH,MAAMjB,UA4CZ7hH,EAAQkB,EAAK4hH,MAAMjB,eA5CI,CAEvB,MAAM30G,EAAsB,CACxBC,QAAS,QACTqlG,QAAQ,EACRplG,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,kBAC3Bx1B,IAAKpM,EAAK4hC,gBAAgB,wBAE9B2K,QAAS,CACLy8E,UAAW,gBAInB,IAAI3jB,EACJ,MAAM4jB,EAAsB,SAAU58G,GAClCL,EAAoBO,SAAWF,EAAiBG,SAASC,MACzD44F,EAAah5F,EAAiBjB,WAAW,eAAgBY,IAG7D,IAAIsvF,EAMJ,IALKt7F,EAAKJ,QAAQ6/C,kBAAoBz/C,EAAKJ,QAAQ07F,UAC/CA,EAAYt7F,EAAKJ,QAAQ07F,UAClBt7F,EAAKJ,QAAQ6/C,mBACpB67C,EAAYt7F,EAAKJ,QAAQ6/C,iBAAiB67C,WAE1CA,EAAW,CACX,MAAMjvF,EAAmBrM,EAAKzB,IAAI2G,mBAAmB,cAAgBo2F,EAAU,GAAGz7C,cAAgBy7C,EAAUliE,UAAU,IAAI,GACtH/sB,EACA48G,EAAoB58G,GAEpBrM,EAAKzB,IAAI6M,WAAWkwF,GAAW38F,KAAKsqH,QAGxCj9G,EAAoBW,IAAMC,SAASC,cAAc,OACjD7M,EAAKzB,IAAIoO,IAAIG,YAAYd,EAAoBW,KAC7C04F,EAAarlG,EAAKzB,IAAI6M,WAAW,eAAgBY,GAGrDq5F,EAAW1mG,MAAK,SAAUuqH,GACtBlpH,EAAK4hH,MAAMjB,UAAYuI,EACvBpqH,EAAQoqH,WAOjBlpH,EAAK4hH,MAAMmH,kBA2BtB7N,aAAap4G,GACT,MAAM9C,EAAOC,KAEb,GADAgD,EAAAjD,EAAI87G,EAAgBh5G,GAChB9C,EAAKmpH,kBAAmB,CACxB,MAAM/6C,EAAMpuE,EAAKmpH,kBAAkBlxG,cAAc,UACjDm2D,EAAIpwC,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,WAA2B+C,GAChDsrE,EAAI5jE,MAAQxK,EAAK4hC,gBAAgB9+B,EAAQ,oBAAsB,mBAElEA,GAAS9C,EAAKmpH,mBAAqBnpH,EAAKmpH,kBAAkBlxG,cAAc,UAAU+lB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WACjG+C,GAAS9C,EAAKmpH,mBAAqBnpH,EAAKmpH,kBAAkBlxG,cAAc,UAAU+lB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAGvG8K,aAAa+rE,GACT,MAAM52E,EAAOC,KACT22E,GAAS71E,MAAMC,QAAQ41E,IAAUA,EAAMtzE,OAAS,IAChD03G,GAAgB,EACZpkC,EAAM,aAAcn3E,EAAAA,QACdO,EAAKzB,IAAI6uD,eAAewpB,EAAO,CAAEpsB,SAAS,UAG1CxqD,EAAKzB,IAAI61D,UAAUwiB,EAAO,CAAEpsB,SAAS,IAE/CtD,YAAW,WACP8zD,GAAgB,IACjB,MAIX0N,iBACI,MAAM1oH,EAAOC,KAEbD,EAAK89C,WACL76C,EAAAjD,EAAI87G,GAAgB,GACpBhmG,EAAA9V,EAAI68G,GAAAuM,IAAAzoH,KAAJX,GACA8V,EAAA9V,EAAIk9G,GAAAmM,IAAA1oH,KAAJX,GAEAA,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,KAAmB6mG,GAE/B5mG,EAAKsO,GAAGtO,EAAKugH,MAAMzgF,MAAM6/E,gBAAgB,SAAUx9E,GAC3CniC,EAAKspH,cAAiBtpH,EAAKspH,aAAa/8G,SAAS,KAAO41B,EAAEs+E,GAAGl0G,SAAS,IAAMvM,EAAKspH,aAAa/8G,SAAS,KAAO41B,EAAEs+E,GAAGl0G,SAAS,IAE5HvJ,EAAIhD,EAAI87G,IACJ97G,EAAKupH,OAAOpnF,EAAEs+E,GAAGl0G,UAGzBvM,EAAKspH,aAAennF,EAAEs+E,GACtBzgH,EAAKwpH,sBAAsBrnF,GAE3BniC,EAAK4hH,MAAMsE,UAAU7oF,UAAW,EAChCr9B,EAAK4hH,MAAM+D,UAAUtoF,UAAW,EAEhCr9B,EAAK4hH,MAAMuE,SAAS9oF,UAAW,EAC/Br9B,EAAK4hH,MAAMgE,SAASvoF,UAAW,EAG/Bn5B,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBE,gBAAiBv/G,EAAKE,KAAKupH,mBAAmBzpH,EAAKqkH,kBAAkBt1G,aAEtI/O,EAAKsO,GAAGtO,EAAKugH,MAAMzgF,MAAMggF,cAAc,SAAU4J,OAIjD1pH,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM66G,aAE5BxpG,EAAA9V,EAAI89G,GAAA6L,IAAAhpH,KAAJX,EAAoBA,EAAKugH,MAAMlB,gBAAgBG,8BAE/Cx/G,EAAKE,KAAKwoH,gBAAe,GA2P7BnC,sBACI,MAAMvmH,EAAOC,KACb6V,EAAA9V,EAAI68G,GAAAuM,IAAAzoH,KAAJX,GACA,IAAI4pH,GAAuB,EAEtB5pH,EAAKq8C,UACNr8C,EAAK89C,WAGT99C,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM66G,aAE5B,IACIp7G,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBK,KAAM1/G,EAAKugH,MAAMlB,gBAAgBK,MAChG,MAAOxpG,GACDA,EAAMhX,OAAS43G,aAAa+S,mBAC5BrmH,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,mCAC7Bp+B,EAAAA,EAAAA,MAAS0S,GAEd0zG,GAAuB,EAG3B,GAAIA,EAAsB,CACtB,GAAIl4G,OAAOo4G,cAAgBp4G,OAAOq4G,oBAAqB,CAInD,MAAMC,EAAiBt4G,OAAOo4G,cAAgBp4G,OAAOq4G,oBACnB,WAA9BC,EAAevnD,WACf44C,EAAgB,KACqB,YAA9B2O,EAAevnD,WAA0B44C,EAAgB2O,EAC/DA,EAAernD,mBAPU,SAAUF,GACjB,YAAfA,IAA0B44C,EAAgB2O,MAYtD,GAJAl0G,EAAA9V,EAAIm9G,GAAA8M,IAAAtpH,KAAJX,GACA8V,EAAA9V,EAAI09G,GAAAwM,IAAAvpH,KAAJX,GAEAA,EAAK2oH,mBAAqBzkH,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBE,iBACnFv/G,EAAK2oH,mBACI7yG,EAAG9V,EAAI+9G,GAAAoM,IAAAxpH,KAAJX,GAAqB,WAC7B8V,EAAA9V,EAAI88G,GAAA8L,IAAAjoH,KAAJX,OAIAA,EAAK4hH,MAAMkE,WAAWv6E,aAG1BvrC,EAAK0oH,sBAGT5yG,EAAA9V,EAAI88G,GAAA8L,IAAAjoH,KAAJX,GAIRwmH,wBACI,MAAMxmH,EAAOC,KAEPmqH,EAAyB,WAuC3B,OArCApqH,EAAK0gH,oBAAoB/hH,MAAKoN,GAASA,EAAMkB,UAE7C6I,EAAA9V,EAAI49G,GAAAyM,IAAA1pH,KAAJX,GAEAA,EAAKE,KAAKwoH,gBAAe,UAGlB1oH,EAAKsqH,oBAERtnH,EAAChD,EAAI67G,IACL77G,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,sBAAsBtkC,cAAc,SAASszB,QAGjFz1B,EAAA9V,EAAIo9G,GAAAmN,IAAA5pH,KAAJX,GACAgD,EAAAhD,EAAI29G,IAAAh9G,KAAJX,GAEAA,EAAKqO,IAAIrO,EAAKugH,MAAMzgF,MAAM6/E,gBAC1B3/G,EAAKqO,IAAIrO,EAAKugH,MAAMzgF,MAAMggF,cAE1BhqG,EAAA9V,EAAI88G,GAAA8L,IAAAjoH,KAAJX,GAEAA,EAAK4hH,MAAMsE,UAAUpjH,MAAQ,GAC7B9C,EAAK4hH,MAAMsE,UAAU7oF,UAAW,EAChCr9B,EAAK4hH,MAAM+D,UAAUtoF,UAAW,EAEhCr9B,EAAK4hH,MAAMuE,SAASrjH,MAAQ,GAC5B9C,EAAK4hH,MAAMuE,SAAS9oF,UAAW,EAC/Br9B,EAAK4hH,MAAMgE,SAASvoF,UAAW,EAE/Br9B,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM66G,aAC5Bt/G,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM47G,KAG5BrgH,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,KAAmB6mG,IAIzB,GAGX,OAAI5mG,EAAKE,KAAKsqH,kBACVxqH,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,4BAA6B,CAC7D0uB,SAAU,MAGP85D,KAEAA,IAKfv/G,wBAAwB,IAAA4/G,EACpB,MAAMzqH,EAAOC,KACb,IAAIs7G,EAAS,GAEb,MAAMmP,EAAY,SAAUC,GAOxB,OALyC,IAArC3nH,EAAAhD,EAAIm8G,GAAwBrnF,MAC5B61F,EACKxlH,QAAOsC,GAAOA,EAAI0xF,UAClB3xF,SAASC,GAAQzE,EAAAhD,EAAIm8G,GAAwBp9F,IAAItX,EAAI4M,IAAKmd,KAAKC,MAAMhqB,EAAI0xF,YAE3EwxB,GAGX,IAAIxrH,EACJ,IACIA,QAAaoX,IAAAA,OAEjB,MAAO2zC,GACHviD,QAAQC,IAAI,oEACZpE,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,+BASlC,GAPAziC,EAAW,QAAPsrH,EAAGtrH,SAAI,IAAAsrH,OAAA,EAAJA,EAAMtlH,QAAO,SAAU2S,GAC1B,OAA8D,IAA1DA,EAAE7O,QAAQjJ,EAAKugH,MAAMlB,gBAAgBE,kBAAgF,IAAtDznG,EAAE7O,QAAQjJ,EAAKugH,MAAMlB,gBAAgBC,cAC7F,UAAUntG,KAAK2F,OAKzB3Y,GAAwB,IAAhBA,EAAKmE,OAEd,OADAtD,EAAK6jH,gBAAkBtI,EAChBmP,EAAUnP,GAGrB,MAAMt6F,EAAW,IAAIlgB,MAAM5B,EAAKmE,QAChCnE,EAAKqI,SAAQ,SAAUkB,EAAKhB,GACxBuZ,EAASvZ,GAAO6O,IAAAA,QAAoB7N,MAGxC,MAAMu9B,QAAgBpnC,QAAQwiB,IAAIJ,GAClC,GAAIglB,GAAWA,EAAQ3iC,OAAQ,CAC3B2iC,EAAQz+B,SAAQ,SAAUkX,GACH,iBAARA,IACPA,EAAM8S,KAAKC,MAAM/S,IAEjBA,aAAe3d,MACfw6G,EAASA,EAAOjzG,OAAOoW,GAEvB68F,EAAOlzG,KAAKqW,MAIpB,MAAM88F,EAAcD,EAAOj4G,OAAS,EAAIg4G,EAAYC,GAAUA,EAE9D,OADAv7G,EAAK6jH,gBAAkBrI,EAChBkP,EAAUlP,IAKzB3wG,sBAAsB0wG,GAClB,MAAMv7G,EAAOC,KACPghB,EAAW,GACjBs6F,EAAO/zG,SAAQ,SAAUwgC,GACrB/mB,EAAS5Y,KAAKkO,IAAAA,QAAoBvW,EAAKugH,MAAMlB,gBAAgBC,YAAc,IAAMt3E,EAAE3zB,IAAK2zB,GAAG5xB,OAAMsD,IAC7F/R,QAAQgS,KAAKD,gBAIf7a,QAAQwiB,IAAIJ,SACZjhB,EAAKyhH,kBACX3rG,EAAA9V,EAAIg+G,GAAA0D,IAAA/gH,KAAJX,GAIJ6K,2BACI,MAAM7K,EAAOC,KACb,OAAKD,EAAK6jH,gBAIC7jH,EAAK6jH,sBAHC7jH,EAAKyhH,kBAgE1BmJ,qBACiB3qH,KACR8tF,sBAAsBpvF,MAAKmwG,GAAWA,GAAWA,EAAQ3T,2BA+BlEgmB,wCAAwC0J,GAAmB,IAAAC,EAAAC,EACvD,MACMC,EAAwC,QAA1BF,EADP7qH,KACe0uF,0BAAkB,IAAAm8B,GAAoC,QAApCC,EAAvBD,EAAyB9wB,0CAAkC,IAAA+wB,OAApC,EAAvBA,EAA8D,GAErF,GAAIC,MAAAA,GAAAA,EAAgBrnC,MAAQqnC,MAAAA,IAAAA,EAAgB5H,gBAAgB,CAGxD,IAAIn1F,GAAS,EACTg9F,EAAWJ,EACf,GACI58F,IACAg9F,EAAWA,EAAS,SAEjBlqH,MAAMC,QAAQiqH,IACrBD,EAAe5H,eAAiByH,EAC3Bn6G,KAAKud,GACL1vB,KAAI,CAACkK,EAAGtG,IAAM,CAACsG,EAAE,GAAIA,EAAE,GAAIuiH,EAAernC,IAAIxhF,OAI3D+oH,gBAAgBC,EAAUC,GACtB,IAAIC,EAAOD,EAASD,EACpB,MAAMhpF,EAAI,GACV,IAAImpF,EAAiB9pH,KAAKonD,MAAMyiE,EAAO,IAAO,GAAK,GAAK,IACxDA,GAAyB,IAAjBC,EAAwB,GAAK,GAAK,GAE1C,IAAIC,EAAkB/pH,KAAKonD,MAAMyiE,EAAO,IAAO,GAAK,IACpDA,GAA0B,IAAlBE,EAAyB,GAAK,GAEtCppF,EAAE8mB,EAAIsiE,EAAmC,GAAjBD,EAExB,IAAIE,EAAoBhqH,KAAKonD,MAAMyiE,EAAO,IAAO,IAOjD,OANAA,GAA4B,IAApBG,EAA2B,GAEnCrpF,EAAEijB,EAAIomE,EAENrpF,EAAEwF,EAAInmC,KAAKonD,MAAMyiE,EAAO,KAEjBnnH,EAAAA,EAAAA,OAAY,GAAIi+B,EAAG,CAAEjf,UAAW,QAAUif,EAAE8mB,GAAGr+C,OAAO,GAAK,KAAO,QAAUu3B,EAAEijB,GAAGx6C,OAAO,GAAK,KAAO,QAAUu3B,EAAEwF,GAAG/8B,OAAO,KAGrIC,oBAAoBszE,GAChB,MAAMn+E,EAAOC,KAEP6uG,QAAgB9uG,EAAK+tF,sBAC3B+gB,EAAQ3T,yBACRn7F,EAAKmoH,gBAAkB,EACnBnoH,EAAK6zG,yBAA2B11B,GAChC2wB,EAAQ/hG,cAAgB+hG,EAAQ/hG,aAAaG,OAAS4hG,EAAQ/hG,aAAaG,MAAMA,OAC5ElN,EAAKyrH,eACNzrH,EAAKyrH,aAAyD,IAA1C3c,EAAQ/U,0BAA0Bl+E,KAAuD,IAA1CizF,EAAQ/U,0BAA0B3tF,KAEzGpM,EAAKE,KAAKsoH,iBAEVxoH,EAAKonH,UAAUjpC,GAAI,GAAOx/E,MAAK,WACvBqB,EAAK2uF,oBAC2B,IAAhC3uF,EAAK2uF,mBAAmB9yE,KACQ,IAAhC7b,EAAK2uF,mBAAmBviF,KACxBpM,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,0BAA2B,CAAE0uB,SAAU,MAC3EtwD,EAAKyrH,cAAe,GACqB,IAAhCzrH,EAAK2uF,mBAAmB9yE,KAA6C,IAAhC7b,EAAK2uF,mBAAmBviF,MACtEpM,EAAKyrH,cAAe,GAGxBzrH,EAAKE,KAAKsoH,mBAKtB39G,gBAAgBszE,EAAIutC,GAChB,MAAM1rH,EAAOC,KAEbD,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAE5BxqG,EAAA9V,EAAIk9G,GAAAmM,IAAA1oH,KAAJX,GACAA,EAAK2rH,iBAAiBxtC,SAChBn+E,EAAK4rH,cAAcztC,SACnBn+E,EAAK8zG,oBAAoB31B,GAC/Bn+E,EAAK89C,WA8ETjzC,0BAA0BszE,EAAIv+E,GAC1B,MAAMI,EAAOC,KAEb,GAAIL,MAAAA,GAAAA,EAASisH,QAGT,YAFA7rH,EAAKE,KAAKgoH,iBAAiBtoH,EAAQisH,SAInC7oH,EAAChD,EAAIk8G,KACLj5G,EAAAjD,EAAIk8G,EAAal8G,EAAK8zG,oBAAoB3zD,KAAKngD,EAAMm+E,EAAI,CAAEmzB,QAAQ,KACnE5/F,OAAO7F,iBAAiB,SAAQ7I,EAAEhD,EAAIk8G,IAAY,IAEtD,MAAMpN,QAAgB9uG,EAAK+tF,sBAvtEdtzD,IAAAA,EAwtEb,IAAIq0E,EA2FA,MAAM7vG,MAAM,wBA3FhB,CACI,IAAI6sH,EAOJ,GANIlsH,MAAAA,GAAAA,EAASm0G,aACTj+F,EAAA9V,EAAIm+G,GAAA4N,IAAAprH,KAAJX,EAAsCm+E,EAAG7/B,QAAQjqC,KAGjDy3G,EAAah2G,EAAG9V,EAAIi+G,GAAA+N,IAAArrH,KAAJX,EAAmCm+E,EAAG7/B,QAAQjqC,KAE7Dy3G,EAsEE,CACE9rH,EAAKJ,QAAQ6/C,yBACPqsE,EAAc9xB,mCAAmC,GAE5Dh6F,EAAK2uF,mBAAqBm9B,EAC1B,MAAM/+G,QAAqB+hG,EAAQ7V,wBAC7BlsF,EAAazB,gBACnByB,EAAa6uF,YACbkT,EAAQ1V,uBAAuBp5F,EAAK2uF,oBACpC5hF,EAAaihF,wBA/EG,KAAAi+B,EAChB,MAAMrK,QAAc5hH,EAAKksH,aAAa/tC,GACtC,GAAmB,QAAnB8tC,EAAIjsH,EAAK0zG,kBAAU,IAAAuY,IAAfA,EAAiBl9G,SAkEjB,MAAM9P,MAAM,yBAlEe,CAE3B,MAAMg2E,EAAU2sC,EAAMh2E,SAAWhG,GAAGplC,KAAK2rH,eAAeC,MACpDxK,EAAMh2E,SAAWhG,GAAGplC,KAAK2rH,eAAeE,IACtCC,EAAar3C,GAAWj1E,EAAKJ,QAAQ6/C,iBAC3C,IAAI1wC,EAAW/O,EAAK0zG,WAAW3kG,SAAS5J,QAAO6J,GACpCs9G,GAAc1R,EAAU5rG,KAG/BwmB,GAAO51B,MAAAA,OAAO,EAAPA,EAAS8D,UAAWqL,EAAS,GAExC,IAAIymB,EAoDA,MAAMv2B,MAAM,+CApDN,CACN,IAAIstH,EAAO,GACX,GAAIt3C,EAAS,CACT,IAAIo2C,EAAO,EACX,MAAMmB,EAAa1R,EAActlF,GAC3Bi3F,EAlvEL9R,EAARlgF,EAkvEsCjF,GAlvENiF,EAAKl6B,SAAS,GAAGk6B,EAAKl6B,SAAS,GAAG+C,OAAS,GAAKm3B,EAAKl6B,SAASk6B,EAAKl6B,SAAS+C,OAAS,GAovE1G+nH,EADAzJ,EAAMh2E,SAAWhG,GAAGplC,KAAK2rH,eAAeC,KACjCK,EAAU,GAAKD,EAAW,GAE1BC,EAAU,GAAKD,EAAW,GAErCD,EAAO,CACH5kF,EAAGnmC,KAAKonD,MAAMyiE,EAAO,IAAO,IAC5BjmE,EAAG5jD,KAAKonD,MAAMyiE,EAAO,IAAc,IACnCpiE,EAAGznD,KAAKonD,MAAMyiE,EAAO,KAAmB,KAIhD,IAAIhsB,EAAc,CACdjF,mBAAmB,EACnBP,uBAAwB75F,EAAKJ,QAAQ6/C,iBACrCy6C,eAAe,EACfqyB,KAAMA,EACN/zF,SAAU,WACNx4B,EAAK2uF,mBAAqBmgB,EAAQ/U,0BAClC/5F,EAAKyrH,aAAyD,IAA1C3c,EAAQ/U,0BAA0Bl+E,KAAuD,IAA1CizF,EAAQ/U,0BAA0B3tF,IACrG0J,EAAA9V,EAAIk+G,GAAAwO,IAAA/rH,KAAJX,EAA4B8uG,EAAQ/U,0BAA2B5b,EAAG7/B,QAAQjqC,KAE1ErU,EAAK8wF,kBAAkBnkF,IAAId,iBAAiB,aAAa,SAAU+B,GAC3D5N,EAAK0zG,YAAc1zG,EAAK0zG,WAAWpgG,iBAAmBtT,EAAK0zG,WAAWlgG,aAAe,GACrFxT,EAAKE,KAAKysH,iBAAiBhsH,KAAKX,EAAKE,SAE7CF,EAAK8wF,kBAAkBnkF,IAAId,iBAAiB,YAAY,SAAU+B,GAC1D5N,EAAK0zG,aAAgB1zG,EAAK0zG,WAAWpgG,iBAAmD,GAAhCtT,EAAK0zG,WAAWlgG,cACxExT,EAAKE,KAAK0sH,mBAAmBjsH,KAAKX,EAAKE,SAG/CF,EAAKzB,IACA+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,WAAcC,EAAK4qH,wBACpDt8G,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,WAAcC,EAAK4qH,wBAG3D9b,EAAQ7V,kBAAkBt6F,MAAK,SAAUoO,GACrC,IAAI6mG,EAAoB5zG,EAAK6zG,uBACzBD,IACA7mG,EAAa3H,eAAeozD,SAAQx1D,EAAGhD,EAAIu8G,GAAA57G,KAAJX,EAA0B4zG,SAKjF9E,EAAQpgB,wBAAwBl5D,EAAM6pE,OAwB1Dv+C,MAAM7J,GACF,MAAMj3C,EAAOC,KAEb+C,EAAIhD,EAAIk8G,KACJxqG,OAAOkvC,oBAAoB,SAAQ59C,EAAEhD,EAAIk8G,IAAY,GACrDj5G,EAAAjD,EAAIk8G,OAAa73G,IAGjB4yC,IAAcj3C,EAAKugH,MAAM97G,MAAM67G,OAE/BtgH,EAAK0zG,WAAWt7E,gBAChBp4B,EAAKskH,cAAclsF,gBACnBn1B,EAAAjD,EAAIq8G,EAAgB,MACpBp5G,EAAAjD,EAAIs8G,EAAiB,aACdt8G,EAAK0zG,WAAWtxC,YAGvBpiE,EAAK+tF,sBAAsBpvF,MAAKmwG,GAAWA,GAAWA,EAAQjgB,iCACvD7uF,EAAK2uF,mBAGZ3uF,EAAKE,KAAKgoH,mBAEVloH,EAAKE,KAAK4gD,QAGV9gD,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,MAAMnE,SAAQ,SAAU22E,GAC1DA,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,YAGxBC,EAAKzB,IAAIiN,QAAQxL,EAAKugH,MAAMzgF,MAAMogF,YAElClgH,EAAK6sH,gBAAkB,GAElB7sH,EAAKoiH,qBACCpiH,EAAKwoG,UAMhBxoG,EAAKqkH,iBAAiBjsF,gBACtBp4B,EAAKokH,SAAShsF,iBAatBkuF,SAASj+D,GACL,MAAMroD,EAAOC,KASb,OARKD,EAAK8sH,YACN9sH,EAAK8gD,MAAM9gD,EAAKugH,MAAM97G,MAAM67G,OAExBtgH,EAAKzB,MACLyB,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,WAAuB+V,EAAE9V,EAAIs+G,GAAAyO,KACzC/sH,EAAKzB,IAAI2B,KAAKu9D,UAAU,CAACpV,GAAO,CAAEt9C,QAAS/K,MAG5CA,EAGX6K,gBAAgBjL,GACZ,MAAMI,EAAOC,KACb,IAAI2d,EAAUhe,EAAQge,SAAW5d,EAAK4hC,gBAAgB,sBAEtD,MAAM4vE,EAAO3mG,eAAgBpG,GACzB,IAAI0iD,EACJA,EAAOnnD,EAAK+zD,sBAAsB1M,UAElC,IAqBI2lE,EArBA9G,EAAYtmH,EAAQolH,kBAAoBhlH,EAAK4hH,MAAMsE,UAAUpjH,MAAM+mB,OAEnE0xF,QAAev7G,EAAKshH,qBAEpB2L,EAAYjtH,EAAKE,KAAKupH,mBAAmBhlH,GAAO,EAAM7E,EAAQulH,cAE9D+H,EAAQ,SAAU/lE,GAClBnnD,EAAK4hH,MAAMsE,UAAUpjH,MAAQ,GAC7B9C,EAAK4hH,MAAMsE,UAAU7oF,UAAW,EAChCr9B,EAAK4hH,MAAM+D,UAAUtoF,UAAW,EAEhCr9B,EAAK4hH,MAAMuE,SAASrjH,MAAQ,GAC5B9C,EAAK4hH,MAAMuE,SAAS9oF,UAAW,EAC/Br9B,EAAK4hH,MAAMgE,SAASvoF,UAAW,EAE/Br9B,EAAK+zD,sBAAsBvM,WAAWL,GAEtCrxC,EAAA9V,EAAIk9G,GAAAmM,IAAA1oH,KAAJX,IAGAmtH,GAAU,EAEd,GAAIvtH,EAAQyU,IACR24G,EAAWzR,EAAO1yG,MAAKm/B,GAAKA,EAAE3zB,KAAOzU,EAAQyU,WAE5C,GAAIzU,EAAQsyG,WACb,IAAK,IAAI/vG,EAAI,EAAGgiB,EAAKo3F,EAAOj4G,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAE7C,SADwBvC,EAAQsyG,WAAWtwC,YAAY25C,EAAOp5G,GAAG+vG,YAClD,CACX8a,EAAWzR,EAAOp5G,GAClB,OAIP6qH,IACDG,GAAU,EACVH,EAAW,CACPlkH,KAAMo9G,EACNt6E,OAAQqhF,EAAUrhF,OAClBzkC,IAAKnH,EAAKotH,aAGlBJ,EAAS5oH,KAAO6oH,EAAUl+G,SAEtBnP,EAAQsyG,aACR8a,EAAS9a,WAAatyG,EAAQsyG,YAGlC,MAAMmb,EAAmB,SAAUC,GAE/B,IAAIC,EAAY/7F,KAAKC,MAAMD,KAAK0vE,UAAUosB,IAI1C,OAFAC,EAAUnpH,KAAOmpH,EAAUnpH,KAAKoF,QADlB,kCACiC,MAExCy3F,GAAAA,CAAIzvE,KAAK0vE,UAAUqsB,KAGxBC,EAAa,IAAI5nF,GAAG3yB,OAAOw6G,QAcjC,IAEIC,EAFAh/D,EAAO2+D,EAAiBL,GAGxBG,IAEAO,EAAenS,EAAOh9G,KAAI,SAAUovH,GAChC,IAAIC,EAAcp8F,KAAKC,MAAMD,KAAK0vE,UAAUysB,IAI5C,cAHOC,EAAYv5G,WACZu5G,EAAYz0B,QAEfzqC,IAAS2+D,EAAiBO,GACnBD,EAAWt5G,KAGlBu5G,EAAYxpH,KA1BE,SAAU2K,GAEhC,IAAI8rB,EAAYr5B,KAAKs5B,IAAI,GAAI/6B,EAAAA,EAAAA,iBAA0B,GAOvD,OALAgP,EAASvH,SAAQ,SAAU9D,GACvB,IAAIlD,EAAO0D,EAAAA,EAAAA,gBAAqBA,EAAAA,EAAAA,gBAAqBR,EAAQtC,cAAcG,iBAAkBs5B,IAC7Fn3B,EAAQtC,cAAcF,eAAeV,MAGlCgtH,EAAWK,cAAc9+G,GAiBL++G,CAAkBN,EAAWO,aAAaH,EAAYxpH,OACrEsqD,IAASuyC,GAAAA,CAAIzvE,KAAK0vE,UAAU0sB,IACrBD,EAAWt5G,IAEX,SAIhBxL,MAAK,SAAUwL,GACd,OAAe,OAARA,MAIf,MAAM25G,EAAgBnjH,eAAgBwJ,GAIlC,IAAI0V,QAHE/pB,EAAKyhH,wBACX3rG,EAAM9V,EAAIg+G,GAAA0D,IAAA/gH,KAAJX,GAGN,IAAK,IAAImC,EAAI,EAAGA,EAAInC,EAAK6jH,gBAAgBvgH,OAAQnB,IAC7C,GAAInC,EAAK6jH,gBAAgB1hH,GAAGkS,MAAQA,EAAK,CACrC0V,EAAQ5nB,EACR,MAIR,OAAO4nB,GAGX,GAAK2jG,EAqBE,CACH/lH,QAAQC,IAAI,yCAEZslH,EAAM/lE,GAGN,aADoB6mE,EAAcN,GAzB9BP,IACAH,EAAS34G,IAAMzU,EAAQyU,KAAQyvB,KAAKC,MAAQviC,KAAKysH,SACjD1S,EAAOlzG,KAAK2kH,IAEhBzR,EAASD,EAAYC,GAErB,UACUv7G,EAAKkuH,gBAAgB3S,GAC3Bv7G,EAAKzB,IAAIuvD,MAAMlwC,EAAS,CAAE0yC,SAAU,MAEpC48D,EAAM/lE,GAGN,aADoB6mE,EAAchB,EAAS34G,KAG/C,MAAO6B,GAGH,MAFA1S,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,8BAAgC,KAAO1rB,EAAM0H,SAC3EsvG,EAAM/lE,GACAjxC,IAYlB,OAAIlW,EAAKglH,kBAAoBplH,EAAQyU,UACpBm9F,EAAKxxG,EAAK0zG,YAEsB,IAA7C1zG,EAAK4hH,MAAMsE,UAAUpjH,MAAM+mB,OAAOvmB,QAClCtD,EAAK4hH,MAAMsE,UAAUpjH,OAAQ,IAAIghC,MAAOo/B,uBAC3BsuC,EAAKxxG,EAAKqkH,yBAEd7S,EAAKxxG,EAAKqkH,kBAG3BwC,cACI,MAAM7mH,EAAOC,KAEb,IAAIkuH,EAAenuH,EAAK4hH,MAAMuE,SAASrjH,MAAM+mB,OACxCskG,IACDA,GAAe,IAAIrqF,MAAOo/B,kBAG9B,MAAM/b,EAAOnnD,EAAK+zD,sBAAsB1M,UAExCvxC,EAAA9V,EAAIk9G,GAAAmM,IAAA1oH,KAAJX,GAEAA,EAAKE,KAAK2mH,YAAY7mH,EAAKspH,aAAa/8G,SAAU,CAC9CzD,KAAMqlH,EACNxqC,IAAK3jF,EAAKspH,aAAa8E,QACvB7B,MAAM,IAAIzoF,MAAOsrC,YAGrBpvE,EAAK4hH,MAAMuE,SAASrjH,MAAQ,GAC5B9C,EAAK4hH,MAAMuE,SAAS9oF,UAAW,EAC/Br9B,EAAK4hH,MAAMgE,SAASvoF,UAAW,EAG/Bn5B,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBE,gBAAiBv/G,EAAKE,KAAKupH,mBAAmBzpH,EAAKqkH,kBAAkBt1G,UAElI/O,EAAK+zD,sBAAsBvM,WAAWL,GAG1Ct8C,oBAAoBwjH,EAASC,GACzB,MAAMtuH,EAAOC,KAEPs7G,QAAev7G,EAAKshH,qBAC1B,GAAI/F,EAAQ,CACR,MAAMqG,EAAQrG,EAAO1yG,MAAKm/B,GAAKA,EAAE3zB,KAAOg6G,IACpCzM,IACAA,EAAM94G,KAAOwlH,QACPtuH,EAAKkuH,gBAAgB3S,KA0FvCgT,qBACI,MAAMvuH,EAAOC,KAEPyE,EAAW1E,EAAK6zG,uBAClBnvG,IAEA1B,EAAIhD,EAAIk8G,KACJxqG,OAAOkvC,oBAAoB,SAAQ59C,EAAEhD,EAAIk8G,IAAY,GACrDj5G,EAAAjD,EAAIk8G,OAAa73G,IAGrBK,EAASs5B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAC1B2E,EAAS2oB,aAAa,QAAS3oB,EAASsJ,aACxCtJ,EAASuT,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAAWzgF,gBAAgB,gBAE/Dl+B,EAAKwoG,SAIpBsgB,iBAEI9oH,KAAKE,KAAK0sH,qBACK5sH,KAAK6zG,wBAEhB7zG,KAAKuuH,qBAELvuH,KAAK8wF,oBAEL9wF,KAAK8wF,kBAAkBnkF,IAAIi0C,oBAAoB,YAAa5gD,KAAK8wF,kBAAkB87B,oBACnF5sH,KAAK8wF,kBAAkBnkF,IAAIi0C,oBAAoB,WAAY5gD,KAAK8wF,kBAAkB67B,kBAElF3sH,KAAK8wF,kBAAkB7jF,SAG3BjN,KAAK8gD,MAAM9gD,KAAKugH,MAAM97G,MAAM67G,OAGhCz1G,oBAAoBszE,GAChB,MAAMn+E,EAAOC,KAEbD,EAAKE,KAAK4gD,QAEV,MAAM8gE,QAAc5hH,EAAKksH,aAAa/tC,GAClCyjC,GAASA,EAAMx9G,aACTpE,EAAKE,KAAK0rH,cAAchK,GAC9B5hH,EAAK2zG,mBACDiO,EAAM1P,aACNlyG,EAAK0zG,WAAWtxC,YAAcw/C,EAAM1P,YAExClyG,EAAK0zG,WAAW3uG,eAAc,IAItC8F,mBAAmBszE,GACf,MAAMn+E,EAAOC,KACPs7G,QAAev7G,EAAKshH,qBAC1B,GAAI/F,EAAQ,CACR,MACMqG,EAAQrG,EADCp9B,EAAG7/B,QAAQj/C,IAE1B,GAAIuiH,EAAO,CACP,IAAI4M,EAAY5M,EAAMx9G,KAItB,OADAoqH,EAAYxuH,EAAKE,KAAKuuH,qBAAqBD,GACpC,CACHpqH,KAAMoqH,EACN5iF,OAAQg2E,EAAMh2E,OACdsmE,WAAY0P,EAAM1P,aAI9B,OAAO,KAGXrnG,yBACI,MAAM7K,EAAOC,KACb,IAAIyuH,EAAe1uH,EAAK0zG,WAAW3kG,SACnC,GAAI2/G,GAAgBA,EAAaprH,OAAS,EAAG,CAEzCorH,EAAalnH,SAAQwH,IACjBA,EAAE1K,WAAc0K,aAAaW,EAAAA,KAEjC,MAAMg/G,EAAcD,EAAa7lH,MAAK,SAAUnF,GAC5C,QAAIk3G,EAAUl3G,MAKlB,GAAIirH,EAAa,CACb,IAAItkH,EAEAA,EADAswG,EAAgBgU,GACFA,EAAYpuH,SAASmQ,OAErBi+G,EAAYpuH,SAG9B,MAAMquH,EAAQvkH,EAAY,GACpBwkH,EAAOxkH,EAAYA,EAAY/G,OAAS,GAE9C,GAAIsrH,GAASA,IAAUC,EAAM,CACzB,MAAMC,EAAeF,EAAMhkH,QAAQ5B,OAAO,EAAG,GAC7ChG,EAAIhD,EAAIq8G,GACJr5G,EAAAhD,EAAIq8G,GAAcn7G,eAAe4tH,GAGjC7rH,EAAAjD,EAAIq8G,QAAsBr8G,EAAKskH,cAAcruF,UAAU64F,EAAc,CACjExqH,YAAY,EACZiuB,MAAO,GACPC,OAAQ,GACRs0C,SAAU9mE,EAAKu8C,MAAQ,yBACvB1qC,OAAQ,CAAC,GAAK,GACdslD,UAAU,KAKtB,GAAI03D,EAAM,CACN,MAAMC,EAAeD,EAAKjkH,QAAQ5B,OAAO,EAAG,GAC5ChG,EAAIhD,EAAIs8G,GACJt5G,EAAAhD,EAAIs8G,GAAep7G,eAAe4tH,GAGlC7rH,EAAAjD,EAAIs8G,QAAuBt8G,EAAKskH,cAAcruF,UAAU64F,EAAc,CAClExqH,YAAY,EACZiuB,MAAO,GACPC,OAAQ,GACRs0C,SAAU9mE,EAAKu8C,MAAQ,qBACvB1qC,OAAQ,CAAC,GAAK,GACdslD,UAAU,WAMtBn0D,EAAIhD,EAAIq8G,KACJr8G,EAAKskH,cAAcvsF,cAAa/0B,EAAChD,EAAIq8G,IACrCp5G,EAAAjD,EAAIq8G,EAAgB,OAExBr5G,EAAIhD,EAAIs8G,KACJt8G,EAAKskH,cAAcvsF,cAAa/0B,EAAChD,EAAIs8G,IACrCr5G,EAAAjD,EAAIs8G,EAAiB,QAMrCngD,OAAOgiB,GAEH,OADal+E,KACDC,KAAKi8D,OAAOgiB,GAG5B4wC,eAAetY,GACX,MAAMC,EAAO9pG,SAASC,cAAc,QAC9BpJ,EAASgzG,EAAUh6C,cACzBh5D,EAAO++B,aAAak0E,EAAMD,GAC1BC,EAAK5pG,YAAY2pG,GACjBC,EAAKt2F,QAELs2F,EAAKv3B,sBAAsB,WAAYs3B,GACvChzG,EAAOi5D,YAAYg6C,GAGvB3iD,sBACI,MAAM/zD,EAAOC,KAQb,OANKD,EAAKmgG,UACNngG,EAAKmgG,QAAUngG,EAAKzB,IAAI2G,mBAAmB8pH,EAAAA,SACvChvH,EAAKmgG,SAAWngG,EAAKmgG,QAAQ78F,OAAS,IACtCtD,EAAKmgG,QAAUngG,EAAKmgG,QAAQ,KAG7BngG,EAAKmgG,QAGhB8uB,iBAAiB/4G,GACb,MAAMlW,EAAOC,KAmBb,IAAIo9D,EACJ,OAlBIN,UAAUmyD,cACNlvH,EAAKmvH,iBACLpyD,UAAUmyD,YAAYE,WAAWpvH,EAAKmvH,iBACtCnvH,EAAKqvH,qBACLrvH,EAAKqvH,mBAAqBrvH,EAAKqvH,8BAA8BtuH,MAAQf,EAAKqvH,mBAAqB,CAACrvH,EAAKqvH,oBAErGrvH,EAAKqvH,mBAAmB7nH,SAAQ,SAAU8nH,GACtCvyD,UAAUmyD,YAAYE,WAAWE,MAGrCtvH,EAAKqvH,mBAAqB,KAI9BrvH,EAAKuvH,wBACLvvH,EAAK+zD,sBAAsBvM,WAAWxnD,EAAKuvH,wBAGvCr5G,EAAMhX,MACV,KAAKgX,EAAMs5G,kBACPnyD,EAAWr9D,EAAK4hC,gBAAgB,+BAChC,MACJ,KAAK1rB,EAAMu5G,qBACPpyD,EAAWr9D,EAAK4hC,gBAAgB,kCAChC,MACJ,KAAK1rB,EAAMw5G,QACPryD,EAAWr9D,EAAK4hC,gBAAgB,qBAChC,MACJ,QACIy7B,EAAWr9D,EAAK4hC,gBAAgB,qBAIxC5hC,EAAKzB,IAAIuvD,MAAMuP,EAAU,CAAEjzD,KAAMrK,EAAAA,EAAAA,QAAAA,WAE5BC,EAAKsqH,qBAAuBtqH,EAAK4hH,QAClC5hH,EAAK4hH,MAAM2D,eAAevnF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC3CC,EAAK4hH,MAAM4D,iBAAiBxnF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAIlD46B,cACI,MAAM36B,EAAOC,KAEb,GAAID,EAAK0zG,YAAc1zG,EAAK4hH,OAAS5hH,EAAKwoG,QAAS,CAC/C,IAAI1zF,EAAQ,CACRzV,GAAIW,EAAKX,IAEb,IAAKW,EAAKwoG,SAAWxoG,EAAKwoG,UAAYxoG,EAAKwoG,QAAQmH,OAAQ,CACvD3vG,EAAKwoG,QAAU,CAAEmH,QAAQ,GACzB,IAAIggB,EAAgBvwH,OAAOmD,OAAO,GAAIvC,EAAKwoG,SACvCz5F,EAAW/O,EAAK0zG,WAAW3kG,SAE/B,GAAIA,EAASzL,OAAS,GAAKtD,EAAK6sH,iBAAmB7sH,EAAK6sH,gBAAgBvpH,OAAS,EAC7EqsH,EAAc5gH,SAAW/O,EAAK6sH,oBAC3B,CACH,MAAMjd,EAAa5vG,EAAK0zG,WAAW/4E,YAAY,CAC3C5rB,SAAUA,IAGd4gH,EAAc5gH,SAAW6gG,EAAW7gG,SAGxC,MAAM6kG,EAAoB5zG,EAAK6zG,uBAC3BD,IACA+b,EAAczJ,UAAYtS,EAAkB37F,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAAWtlG,MAE7FvE,EAAM86G,YAAcp+F,KAAK0vE,UAAUyuB,QAEnC76G,EAAM86G,YAAcp+F,KAAK0vE,UAAUlhG,EAAKwoG,SAG5C,OAAO1zF,EAGP,OAAO,KAIfsqC,YAAYtqC,GACR,MAAM9U,EAAOC,KACb,GAAID,EAAKzB,KACDuW,EAAM86G,aAAe96G,EAAM86G,YAAYtsH,OAAQ,CAC/CtD,EAAKq+C,SACL,IAAIwxE,EAAoBr+F,KAAKC,MAAM3c,EAAM86G,aAEzC,GAAIC,EAAkB9gH,UAAY8gH,EAAkB9gH,SAASzL,OAAS,EAAG,CACrE,MAAM2d,EAAW,IAAIlgB,MAAM8uH,EAAkB9gH,SAASzL,QACtDusH,EAAkB9gH,SAASvH,SAAQ,SAAUwH,EAAGtH,GAC5C,MAAMm0B,EAAiB,CAAEz3B,KAAM4K,EAAE5K,KAAM/E,GAAI2P,EAAE3P,GAAIiF,WAAY0K,EAAE1K,YAC/D,IAAI9D,EAAOwO,EAAExO,KACb,OAAQwO,EAAE5E,MACN,KAAKrK,EAAAA,EAAAA,KAAAA,SACDkhB,EAASvZ,GAAO,IAAIuJ,EAAAA,EAASzQ,EAAMq7B,GACnC,MACJ,KAAK97B,EAAAA,EAAAA,KAAAA,cACDkhB,EAASvZ,GAAO,IAAImJ,EAAAA,EAAcrQ,EAAMq7B,GACxC,MACJ,KAAK97B,EAAAA,EAAAA,KAAAA,OACDkhB,EAASvZ,GAAO,IAAIgI,EAAAA,EAAOlP,EAAMq7B,GACjC,MACJ,KAAK97B,EAAAA,EAAAA,KAAAA,MACDkhB,EAASvZ,GAAO,IAAIiI,EAAAA,EAAMnP,EAAMq7B,OAKxCz8B,OAAOqB,UAAUC,eAAeC,KAAKkvH,EAAmB,YACxD7vH,EAAKoiH,cAAe,EACpBpiH,EAAKwoG,QAAU,CAAEmH,OAAQkgB,EAAkBlgB,SAG/C9wG,QAAQwiB,IAAIJ,GAAUtiB,MAAK,SAAUmxH,GACjC,IAAIlwH,EAAU,CAAEmP,SAAU+gH,EAAYt3D,SAAUq3D,EAAkB3J,UAAWf,cAAc,EAAMC,UAAU,GACtGplH,EAAK6jH,gBAKN7jH,EAAKijH,YAAYrjH,GAJjBI,EAAKyhH,kBAAkB9iH,MAAK,WACxBqB,EAAKijH,YAAYrjH,YAUhD,eAAAmwH,GAtgFkCrsH,GAC3B,MAAM1D,EAAOC,KACb,IAAI+vH,EAAal6G,EAAG9V,EAAIo+G,GAAAiD,IAAA1gH,KAAJX,EAAqC0D,GACzD,GAAIssH,EAEA,OADAroH,QAAQC,IAAI,wBACLooH,EAAc5rH,KAClB,CACHuD,QAAQC,IAAI,2BACZ,MAAM44B,QAAaxgC,EAAKw/C,mBACxB,GAAIhf,EAAM,CACN,IAAIyvF,EAASvsH,EAAQ+G,QACrB,IACI,IAAIylH,QAAmB1vF,EAAK14B,YAAY,CAAEiH,SAAU,CAACkhH,GAAS9oH,IAAKnH,EAAKzB,IAAI4I,MAE5E,OADAnE,EAAAhD,EAAIq+G,IAAA19G,KAAJX,EAAgC0D,EAASwsH,EAAW,IAC7CA,EAAW,GACpB,MAAOlxH,GACL,OAAO,QAItB,eAAA6oH,GA4E6BjoH,GAC1B,MAAMI,EAAOC,KACb,IAAIkwH,EAAWvwH,EAAQyU,IACvB,GAAI87G,EAAU,CACV,MACMC,SADwBpwH,EAAKshH,sBACCz4G,MAAK,SAAUwnH,GAC/C,OAAOA,EAAMh8G,IAAI6O,aAAeitG,EAASjtG,cAC1C9e,KAIH,IAAI2K,GAFoB,IAAI62B,GAAG3yB,OAAOw6G,SAAUM,aAAaqC,GAC1B7xH,KAAIyQ,GAAKxL,EAAAA,EAAAA,KAAAA,QAAAA,cAA8BwL,KAChDzQ,KAAI,SAAUyQ,GACpC,MAAMwsB,EAAO,GACb,QAAQ,GACJ,KAAKxsB,aAAaU,EAAAA,EACd8rB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,OACZ,MACJ,KAAKiP,aAAaW,EAAAA,EACd6rB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,MACZ,MACJ,KAAKiP,aAAaiC,EAAAA,EACduqB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,SACZ,MACJ,KAAKiP,aAAa6B,EAAAA,EACd2qB,EAAKpxB,KAAOrK,EAAAA,EAAAA,KAAAA,cAOpB,OAJAy7B,EAAKn8B,GAAK2P,EAAE3P,GACZm8B,EAAKh7B,KAAOwO,EAAEzO,SACdi7B,EAAKp3B,KAAO4K,EAAEhL,UAEPw3B,KAMX,OAHI57B,EAAQkoH,qBACR9nH,EAAK6sH,gBAAkB99G,GAEpBA,EAEP,MAAM9P,MAAM,gBAEnB,SAAAokH,GAEkBl4G,GACf,MAAMnL,EAAOC,KACb,OAAIkL,aAAkB86C,SAAW96C,aAAkBmlH,aAC3CnlH,EAAO6yB,UAAU8gB,SAAS9+C,EAAKu8C,MAAQ,iBAChCumD,EAAAA,QAAAA,kBAAAA,KAAiC9iG,GAEjCnB,QAAQC,UAEZqM,IAAWnL,EACX8iG,EAAAA,QAAAA,kBAAAA,KAAiC9iG,QAEnCmL,IAAWnL,GAChBmL,EAAOq9F,SACPr9F,EAAOq9F,QAAQ9kG,SACfyH,EAAOq9F,QAAQ9kG,QAAQe,QAAUzE,EAAK0zG,YAEtCxvG,EAAAA,EAAAA,YAAgB,WACZ4+F,EAAAA,QAAAA,mBAAAA,KAAkC33F,GAClC,MAAMyoG,EAAoB5zG,EAAK6zG,uBAC/B,OAAID,EACO99F,EAAA9V,EAAIg9G,GAAAiL,IAAAtnH,KAAJX,EAAsB4zG,GAAmBj1G,MAAK,WACjD,MAAM4xH,EAAcvtH,EAAAhD,EAAI07G,GAAiBzjG,cAAc,IAAMjY,EAAKu8C,MAAQ,iBAC1Er4C,EAAAA,EAAAA,UAAeqsH,EAAa,CACxBviD,aAAc,WACV,OAAO80B,EAAAA,QAAAA,kBAAAA,KAAiC9iG,IAE5C6tE,cAAe,WACXi1B,EAAAA,QAAAA,mBAAAA,KAAkC9iG,SAMvCnB,QAAQC,cAI9B,SAAAwkH,GAEqBn4G,EAAQqlH,GAC1B,MAAMxwH,EAAOC,KAGPwwH,EAAyBzwH,EAAKu/C,gBAAgBs/C,cAGpD,GAAI1zF,IAAWnL,GAAQA,EAAKu/C,gBAAgBs/C,cAAc7pF,OAAMhG,GAAKA,GAAKA,EAAEvK,QAAUzE,EAAK0zG,aAAa,CACpG,IAAIgd,EAAiB1wH,EAAKu/C,gBAAgBu/C,aACtC9tC,EAAiBhxD,EAAKqlH,2BAC1BqL,EAAehxE,UAAYsR,EAAetR,iBACnCgxE,EAAe1iD,aAEtBhuE,EAAKu/C,gBAAgBlyC,KAAKrN,EAAKu/C,gBAAgBs/C,cAAe6xB,GASlE,GALsC,IAAlCD,EAAuBntH,QAAgBmtH,EAAuBz7G,OAAOhG,GAAMA,GAAKA,EAAEwpD,YAClFx4D,EAAKu/C,gBAAgBi/C,WAAW,CAAEhmC,SAAUi4D,EAAuB,GAAGj4D,WAIrEx4D,EAAKJ,QAAQ6/C,mBAKdt0C,IAAWnL,GAAQA,EAAKu/C,gBAAgBs/C,cAAc7pF,OAAMhG,GAAKA,GAAKA,EAAEvK,QAAUzE,EAAK0zG,gBAClF1zG,EAAKu/C,gBAAgBugC,UAAU7nE,cAAc,IAAMjY,EAAKu8C,MAAQ,eAAgB,CACjF,IAAIo0E,EAAkB3wH,EAAKu/C,gBAAgBugC,UAAU7nE,cAAc,IAAMjY,EAAKu/C,gBAAgBhD,MAAQ,QACtG,GAAIo0E,EAAiB,CACjBA,EAAgB7jH,YAAY9M,EAAK6kH,wBAEjC5hH,EAAAjD,EAAI47G,EAAuB57G,EAAKu/C,gBAAgBugC,UAAU7nE,cAAc,IAAMjY,EAAKu/C,gBAAgBhD,MAAQ,iCAC3Gt5C,EAAAjD,EAAI27G,EAAuB37G,EAAKu/C,gBAAgBugC,UAAU7nE,cAAc,IAAMjY,EAAKu/C,gBAAgBhD,MAAQ,QAC3G,MAAMq0E,EAAgB5wH,EAAKu/C,gBAAgBugC,UAAUn0E,iBAAkB,2BAA0B3L,EAAKX,sBAGhGwxH,EAAwB,SAAU9tH,GACpC,MAAM+tH,EAAiBF,EAAc,GACjC7tH,EACK+tH,EAAe9yF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WACnC+wH,EAAe9yF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAGjC+wH,EAAe9yF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAGxC,IAAI2D,EAAU+sH,EAAuBtrH,OAAOy1G,GAAW,GACvD,MAAM4R,EAAa1R,EAAcp3G,GACjC,IAAIqtH,EAA4B,IAAtBvE,EAAWlpH,OACrB,GAAIytH,EACAF,EAAsBE,QACnB,GAAIvE,EAAWlpH,OAAS,EAAG,CAE9ButH,GADoBlW,EAAgBj3G,GAAWA,EAAQnD,SAASmQ,OAAShN,EAAQnD,UAC/ChC,KAAIkK,GAAKA,EAAE,KAAIuM,OAAM/M,GAAe,IAARA,KAIlE,MAAM+oH,EAA6B,WAC/B,OAAOhuH,EAAAhD,EAAI27G,IAAwB34G,EAAAhD,EAAI27G,GAAqB39E,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAE7EkxH,EAAkC,WACpC,GAAIL,EAAc,GAAG/wF,UAAYmxF,IAC7BhuH,EAAAhD,EAAI27G,GAAqB39E,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aACpC,GAAI6wH,EAAc,GAAG/wF,QAAS,CACjC,IAAIqxF,EAAW,IAAIC,kBAAiB,SAAUC,GAC1CA,EAAUjsH,QAAOigD,GAAyB,UAApBA,EAAEisE,gBAA2B7pH,SAAQ,SAAU8pH,GAC7DA,EAAS5zF,SAASz0B,QAAQlJ,EAAAA,EAAAA,QAAAA,SAA0B,IAChD6wH,EAAc,GAAG/wF,SACjB78B,EAAAhD,EAAI27G,GAAqB39E,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvCmxH,EAASK,cAETL,EAASK,oBAMrBriE,EAAS,CAAEvmD,YAAY,EAAM6oH,mBAAmB,GACpDN,EAAShjH,QAAOlL,EAAChD,EAAI27G,GAAsBzsD,QAEvC8hE,KAAgChuH,EAAAhD,EAAI47G,GAAqB/7E,SACzD78B,EAAAhD,EAAI27G,GAAqB39E,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAkBtD,GAbAiD,EAAIhD,EAAI47G,KACA54G,EAAAhD,EAAI47G,GAAqB/7E,SACzBoxF,IACAjxH,EAAK6kH,uBAAuB7mF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACrCC,EAAK6kH,uBAAuB7mF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACvDC,EAAK6kH,uBAAuB7mF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAE9CiD,EAAAhD,EAAI47G,GAAqB/vG,iBAAiB,UAAU,WAChDolH,IACAjxH,EAAK6kH,uBAAuB7mF,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,YAIjD6wH,IACAK,IACAL,EAAcppH,SAAQyC,IACdA,EAAKq0C,QAAQmzE,iBAGjBxnH,EAAKq0C,QAAQmzE,gBAAiB,EAC9BxnH,EAAK4B,iBAAiB,UAAUhB,eAAgB7L,GAC5C,GAAIA,EAAE0O,OAAOmyB,QAAS,CAElB,IAAI6xF,EACJ,GAFAT,IA5GR,UA8GYjyH,EAAE0O,OAAO5K,MACT4uH,EAAqBjB,MAClB,CACH,IAAIkB,EAAqBlB,EACrB/sH,EAAUiuH,EAAmBxsH,OAAOy1G,GAAW,GAE/C4V,IACAkB,EAAqBC,EAAmBxsH,QAAQs1B,GACrCA,aAAgB9qB,EAAAA,KAI/B,IAAI0E,EAAM3Q,EAAQ2Q,IACdy3G,EAAah2G,EAAG9V,EAAIi+G,GAAA+N,IAAArrH,KAAJX,EAAmCqU,GACvD,GAAIy3G,EAAe,CAEf,IAAIoE,EAAaxsH,EAAQ+G,QACzBylH,EAAWvuH,UAAUmqH,EAAc9xB,mCAAmC,GAAGr6F,QACrE6wH,GACKkB,IACDA,EAAqB1uH,EAAAhD,EAAI+8G,IAAAp8G,KAAJX,IAA4B,IAErD0xH,EAAmBrpH,KAAK6nH,IAExBwB,EAAqBxB,MAEtB,CACHlwH,EAAKu/C,gBAAgBugC,UAAU9hD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAE7C,IAAImwH,QAAap6G,EAAM9V,EAAIw8G,EAAAuT,IAAApvH,KAAJX,EAA8B0D,GACjDwsH,EACIM,EACAkB,EAAmBrpH,KAAK6nH,GAExBwB,EAAqBxB,GAGzBlwH,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,mBAAoB,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,MAAsBuwD,SAAU,MAChGsgE,EAAc,GAAG/wF,SAAU,GAG/B7/B,EAAKu/C,gBAAgBugC,UAAU9hD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAIxDC,EAAKu/C,gBAAgB0+C,YAAYyzB,WAKzCd,EAAc,GAAG5yF,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WA/JtC,QAgKE6M,SAASqL,cAAc,IAAMjY,EAAKu8C,MAAQ,yCAAyCz5C,OAAqB,CACxG,MAAM8uH,EAAWhB,EAAc,GAC/BgB,EAAS/xF,SAAU,EACnB+xF,EAAS3xF,cAAc,IAAIF,MAAM,WAIH,IAAlC0wF,EAAuBntH,QAAgBmtH,EAAuB,GAAGj4D,UACjEx4D,EAAKu/C,gBAAgBi/C,WAAW,CAAEhmC,SAAUi4D,EAAuB,GAAGj4D,aAKzF,SAAA4wD,KAmCgBnpH,KACR2hH,MAAM2D,eAAevnF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAD3BE,KAER2hH,MAAM4D,iBAAiBxnF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAChD,SAAA6oH,KAGgB3oH,KACR2hH,MAAM2D,eAAevnF,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAD9BE,KAER2hH,MAAM4D,iBAAiBxnF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC7C,eAAAkoH,GAqgBsB9pC,GACnB,MAAMn+E,EAAOC,WACPD,EAAKokG,eAAcphG,EAAChD,EAAI07G,IAC9B,MAAM3sG,QAAW+G,EAAM9V,EAAIy8G,EAAAoL,IAAAlnH,KAAJX,EAA6B,CAAEqU,IAAK8pE,EAAG7/B,QAAQjqC,IAAKyzG,oBAAoB,IAC/F9nH,EAAKwoG,QAAU,CACX0d,UAAW/nC,EAAGlmE,cAAcjY,EAAKugH,MAAMvhE,SAAS2/D,WAAWtlG,KAC3DtK,SAAUA,GAEjB,SAAAyxG,GAeyB+D,GACtB,MAAMvkH,EAAOC,KAEPmE,EAAO,GACPiF,EAASnF,EAAAA,EAAAA,aAAkBlE,EAAKzB,KAEtC,GAAIyB,EAAKzB,IAAI0I,SAAU,CACnB,IAAI4qH,EAAY7xH,EAAKzB,IAAI4I,MAAQnH,EAAKzB,IAAI2I,OAAOC,IAAMjD,EAAAA,EAAAA,UAAeqgH,EAAYh4G,SAAUvM,EAAKzB,IAAI4I,IAAKnH,EAAKzB,IAAI2I,OAAOC,KAAOo9G,EAAYh4G,SAC7InI,EAAKwpB,EAAIikG,EAAU,GAAG3uD,eAAe75D,GACrCjF,EAAKypB,EAAIgkG,EAAU,GAAG3uD,eAAe75D,GAErCjF,EAAK0tH,IAAMtwH,KAAKirC,MAAMzsC,EAAKzB,IAAI2I,OAAO6qH,iBAAiBF,IAAY3uD,eAAe75D,GAElFjF,EAAK22B,OAAQ,OAGb32B,EAAKwpB,EAAI22F,EAAYh4G,SAAS,GAAG22D,eAAe75D,GAChDjF,EAAKypB,EAAI02F,EAAYh4G,SAAS,GAAG22D,eAAe75D,GAOpD,OAJAjF,EAAKupB,EAAInsB,KAAKirC,MAAM83E,EAAYyN,UAAU9uD,eAAe75D,GACzDjF,EAAK6tH,SAAWzwH,KAAKirC,MAAM83E,EAAY0N,UAAU/uD,eAAe75D,GAChEjF,EAAK8tH,MAAQ3N,EAAY2N,MAAMhvD,eAAe75D,EAAQ,CAAE8oH,sBAAuB,EAAG7rD,sBAAuB,IAElGliE,EACV,SAAAilH,KA0EG,MAAMrpH,EAAOC,KAERD,EAAK4hH,MAAMqE,qBAAqBpmF,SACjC7/B,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAExB,SAAAkqH,KAuEG,MAAMjqH,EAAOC,KACb,GAAIk7G,EAAmB,CAEKtwG,WACpB,IACIuwG,QAAiBr+C,UAAUq+C,SAASnqF,QAAQ,UAC5CtpB,QAAQC,IAAI,oBACZwzG,EAASvvG,iBAAiB,WAAW,KAEjClE,QAAQC,IAAI,yBAElB,MAAO8R,GAEL/R,QAAQuO,MAAMwD,KAGtB04G,QAKAt8G,EAAA9V,EAAIq9G,GAAAgV,IAAA1xH,KAAJX,GAEP,SAAAuqH,KAGG,MAAMvqH,EAAOC,KACTk7G,EAEAC,EAASn5C,UACJtjE,MAAK,KACFy8G,EAAW,QAInBtlG,EAAA9V,EAAIs9G,GAAAgV,IAAA3xH,KAAJX,GAEP,SAAAqyH,KAGG,MAAMryH,EAAOC,KAEb,IAAKD,EAAKuyH,cAAe,CACrB,IAAIvmD,EAAQ,CACRwmD,KAAM,kRACNC,IAAK,klCAGTzyH,EAAKuyH,cAAgB3lH,SAASC,cAAc,SAC5C7M,EAAKuyH,cAAcllG,aAAa,OAAQ,IACxCrtB,EAAKuyH,cAAcllG,aAAa,QAAS,IACzCrtB,EAAKuyH,cAAcllG,aAAa,qBAAsB,IACtDrtB,EAAKuyH,cAAcllG,aAAa,cAAe,IAC/CrtB,EAAKuyH,cAAcllG,aAAa,QAAS,+BAEzC,IAAIqlG,EAAa9lH,SAASC,cAAc,UACxC6lH,EAAW9gH,IAAMo6D,EAAMwmD,KACvBE,EAAWtoH,KAAO,aAClBpK,EAAKuyH,cAAczlH,YAAY4lH,GAE/B,IAAIC,EAAY/lH,SAASC,cAAc,UACvC8lH,EAAU/gH,IAAMo6D,EAAMymD,IACtBE,EAAUvoH,KAAO,YACjBpK,EAAKuyH,cAAczlH,YAAY6lH,GAGnC3yH,EAAKuyH,cAAcK,OACtB,SAAAN,KAGG,MAAMtyH,EAAOC,KACTD,EAAKuyH,eACLvyH,EAAKuyH,cAAcM,QAE1B,SAAAC,KAGG,MAAM9yH,EAAOC,KACT+C,EAAChD,EAAI+7G,IACL94G,EAAAjD,EAAI+7G,EAAoB,WAEpBjmG,EADa7V,KACT29G,GAAAyM,IAAA1pH,KADSV,OAEfkgD,KAAKngD,IAGP,eAAgB0R,OAChBA,OAAO7F,iBAAiB,WAAU7I,EAAEhD,EAAI+7G,IAAmB,GAE3DrqG,OAAO7F,iBAAiB,OAAM7I,EAAEhD,EAAI+7G,IAAmB,GAE9D,SAAAgX,KAGG,MAAM/yH,EAAOC,KACT+C,EAAChD,EAAIg8G,IACL/4G,EAAAjD,EAAIg8G,EAAoB,WACpB,MAAMh8G,EAAOC,KACTD,EAAKuyH,eAAiBvyH,EAAKuyH,cAAcS,QACzChzH,EAAKuyH,cAAcK,OAEvB98G,EAAA9V,EAAI69G,GAAAoV,IAAAtyH,KAAJX,IACFmgD,KAAKngD,IAGP,eAAgB0R,OAChBA,OAAO7F,iBAAiB,WAAU7I,EAAEhD,EAAIg8G,IAAmB,GAE3DtqG,OAAO7F,iBAAiB,QAAO7I,EAAEhD,EAAIg8G,IAAmB,GAE/D,SAAAkX,KAGG,MAAMlzH,EAAOC,KACT+C,EAAChD,EAAIi8G,IACLh5G,EAAAjD,EAAIi8G,EAAuBpxG,iBACvB,IAAI7K,EAAOC,KAEP0tE,EA/nDM,WACtB,MAAM1mC,EAAW,CAAC,SAAU,MAAO,KAAM,KACzC,GAAI,WAAYr6B,SACZ,MAAO,SAEX,IAAK,IAAIzK,EAAI,EAAGA,EAAI8kC,EAAS3jC,OAAQnB,IACjC,GAAI8kC,EAAS9kC,GAAK,WAAYyK,SAC1B,OAAOq6B,EAAS9kC,GAAK,SAG7B,OAAO,KAqnDkBgxH,GAEb,GAAKvmH,SAAS+gE,IAQT,GAAI0tC,EACL,GAAIt+C,UAAUsa,gBAETta,UAAUsa,cAAcC,YAErBt3E,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,eAA0BF,QAAwG,qBAAvFtD,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,eAA0B,GAAG4vH,oBAAoBt+G,OACxJ,WAC+BioD,UAAUsa,cAAczqB,OACtCymE,iBAAiBrzH,EAAK+jH,mBAAmBv5G,MAAOpL,OAAOmD,OAAOvC,EAAK+jH,mBAAoB,CAChGuP,QAAS,CAAC,CACN3mG,OAAQ,OACRniB,MAAOxK,EAAK4hC,gBAAgB,qCAC5Bx9B,KAAM,CACN,IAAOwI,SAAS0F,SAASR,SAIrC,MAAOyhH,GACH,IAAIzJ,aAAa9pH,EAAK+jH,mBAAmBv5G,MAAOxK,EAAK+jH,yBAGzD,IAAI+F,aAAa9pH,EAAK+jH,mBAAmBv5G,MAAOxK,EAAK+jH,yBA5BxC,OAAb3I,EACAtlG,EAAA9V,EAAIm9G,GAAA8M,IAAAtpH,KAAJX,GAGAgD,EAAAhD,EAAIg8G,GAAAr7G,KAAJX,IA2BHo7G,GAAYp7G,EAAKuyH,eAClB5qH,QAAQC,IAAI,aAAe5H,EAAKuyH,cAAcS,SAGpD7yE,KAAKngD,IAGX0R,OAAO7F,iBAAiB,mBAAkB7I,EAAEhD,EAAIi8G,IAAsB,GACzE,SAAAiO,KAGG,MAAMlqH,EAAOC,KACb6V,EAAA9V,EAAIy9G,GAAAyV,IAAAvyH,KAAJX,GACA8V,EAAA9V,EAAIu9G,GAAAuV,IAAAnyH,KAAJX,GACA8V,EAAA9V,EAAIw9G,GAAAuV,IAAApyH,KAAJX,GACH,SAAAqqH,KAsBG,IAAI1B,EAAqBzkH,EAAAA,EAAAA,QAAAA,qBAFZjE,KAEmDsgH,MAAMlB,gBAAgBE,iBAClFoJ,GAAsBA,EAAmBrlH,OAAS,GAClDiT,IAAAA,QAJStW,KAKSsgH,MAAMlB,gBAAgBE,gBAA+C,iBAAvBoJ,EAAkCA,EAAqBn3F,KAAK0vE,UAAUynB,IACjIvyG,OAAMsD,GAAO/R,QAAQgS,KAAKD,KACtC,SAAAu5G,KAGG,MAAMjzH,EAAOC,KAEbsW,IAAAA,QAAoBvW,EAAKugH,MAAMlB,gBAAgBE,iBAAiB5gH,MAAK,SAAUyxH,GACvD,OAAhBA,GAAwC,SAAhBA,GAA0BA,EAAY9sH,OAAS,GACvEY,EAAAA,EAAAA,QAAAA,qBAAkClE,EAAKugH,MAAMlB,gBAAgBE,gBAAiB6Q,MAEnF12G,GAAO/R,QAAQgS,KAAKD,KAC1B,SAAAiwG,GAIc6J,GACX,MAAMxzH,EAAOC,KAEbsW,IAAAA,QAAoBi9G,GAAmB70H,MAAK,SAAU80H,GAClD,GAAmC,MAA/BA,EAAqC,CACrC,MAAM72C,EAAS55E,EAAAhD,EAAIu8E,GAAYtkE,cAAc,2CACvCqwE,EAAW1L,EAAO3kE,cAAc,0BACtCqwE,EAASj7D,aAAa,OAAQmmG,GAC9BlrC,EAASzoD,SAAU,EAEnBjzB,SAASqL,cAAc,gBAAgBjK,YAAc9J,EAAAA,EAAAA,eAAsBlE,EAAK4hC,gBAAgB,qBAAuB5hC,EAAK4hC,gBAAgB,6BAE5Ig7C,EAAO3kE,cAAc,MAAMjK,YAAcwlH,IAAsBxzH,EAAKugH,MAAMlB,gBAAgBI,qBACtFz/G,EAAK4hC,gBAAgB,sBAAwB,IAAM5hC,EAAK4hC,gBAAgB,WACxE5hC,EAAK4hC,gBAAgB,4BAEzB19B,EAAAA,EAAAA,UAAelB,EAAAhD,EAAIu8E,GAAYtkE,cAAc,gDAElDyB,GAAO/R,QAAQgS,KAAKD,KAEvB1Z,EAAKzB,IAAIuvD,MAAO5pD,EAAAA,EAAAA,eAA0ElE,EAAK4hC,gBAAgB,qBAAzE5hC,EAAK4hC,gBAAgB,6BAA0E,CACjIx3B,KAAMrK,EAAAA,EAAAA,QAAAA,UAEb,SAAAoqH,GAEe3xF,GAYZ,OATAt0B,EAAAA,EAAAA,UAAelB,EAFF/C,KAEMs8E,GAAYtkE,cAAc,6CAA8C,CACvF41D,cAAe,WAEP3pE,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKL,EACV,eAAAkpF,KAoMG,MAAM1hH,EAAOC,KAEKD,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,MAC9CnE,SAAQ,SAAU22E,GACxBA,EAAGv4E,MAAMg3C,QAAU,UAGvB,MAAM2+D,QAAev7G,EAAKshH,qBAM1B,IAJ0B1lF,EAId2/E,IAHsB,IAAf3/E,EAAIt4B,OASlB,CACD,MAAMswG,EAAoB5zG,EAAK6zG,uBAC/B,IAAI6f,EACA9f,IACA8f,EAAkB9f,EAAkBt1D,QAAQjqC,KAEhDrU,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,eAAenE,SAAQ,SAAU22E,GACnEn+E,EAAK4hH,MAAMC,UAAUnlD,YAAYyhB,MAGrC,MAAM3gE,EAAS,IAAIC,UACnB,IAAK,IAAItb,EAAI,EAAGA,EAAIo5G,EAAOj4G,OAAQnB,IAAK,CACpC,IAAI6lC,EAAIuzE,EAAOp5G,GACf,GAAI6lC,GAAkB,iBAANA,EAAgB,CAC5B,MAAMr+B,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,cAAe,CAChEl9C,GAAI8C,EAAGkS,IAAK2zB,EAAE3zB,IAAKvL,KAAMk/B,EAAEl/B,KAAOk/B,EAAEl/B,KAAK+gB,OAAS,KAEhD+0D,EAAQphE,EAAOG,gBAAgBhU,EAAM,aAAag4B,KAAKxqB,WAC7DnX,EAAK2zH,eAAensH,SAAQg5B,GAAQxgC,EAAK4zH,cAAch1C,EAAOp+C,KAC9DxgC,EAAK4hH,MAAMC,UAAU/0G,YAAY8xE,GACjCA,EAAM3mE,cAAcjY,EAAKugH,MAAMvhE,SAASogE,YAAYvzG,iBAAiB,UAAU,SAAU7M,GACrFgB,EAAK0zG,WAAW3uG,cAAc/F,EAAE0O,OAAOmyB,SACvC7/B,EAAKskH,cAAcv/G,cAAc/F,EAAE0O,OAAOmyB,aAKtD7/B,EAAK2M,IAAIsL,cAAcjY,EAAKugH,MAAMvhE,SAAS4/D,WAAWvhF,UAAS,EAE3Dq2F,GACA1zH,EAAK2rH,iBAAiB3rH,EAAK4hH,MAAMC,UAAU5pG,cAAc,gBAAkBy7G,EAAkB,OAGjG1zH,EAAK4hH,MAAM6D,YAAYpoF,UAAW,OAtClCr9B,EAAK4hH,MAAMC,UAAUl2G,iBAAiB,yDAAyDnE,SAAQ,SAAU22E,GAC7GA,EAAGv4E,MAAMg3C,QAAU,MAEvB58C,EAAK4hH,MAAM6D,YAAYpoF,UAAW,EARtB,IAAUzB,EA6C7B,SAAAowF,GAoH6B33G,GAC1B,OAAOrR,EAAA/C,KAAIk8G,GAAwB19F,IAAIpK,GAC1C,SAAAq4G,GAEsBtoH,EAAMyvH,GACzB,MAAM7zH,EAAOC,KACb,IAAI4E,EAAMiR,EAAG9V,EAAIi+G,GAAA+N,IAAArrH,KAAJX,EAAmC6zH,GAchD,OAbKhvH,IACD7B,EAAAhD,EAAIm8G,GAAwBp9F,IAAI80G,EAAUzvH,GAC1CpE,EAAKshH,qBAAqB3iH,MAAK,SAAU48G,GACrC,GAAIA,EAAQ,CACR,IAAIxxF,EAAQwxF,EAAOz5C,WAAU95B,GAAKA,EAAE3zB,IAAI6O,aAAe2wG,IACnD9pG,GAAS,IACTwxF,EAAOxxF,GAAOovE,QAAU3nE,KAAK0vE,UAAU98F,GACvCpE,EAAKkuH,gBAAgB3S,QAIjC12G,EAAST,GAENS,EACV,SAAAknH,GAEgC13G,GAC7BrR,EAAA/C,KAAIk8G,GAAwBruC,OAAOz5D,GACtC,SAAAgtG,GAE+B39G,GAC5B,MAAM1D,EAAOC,KACP6zH,EAAkB9wH,EAAAhD,EAAIo8G,GAA4BvzG,MAAK,SAAUpB,GACnE,OAAOA,EAAI/D,UAAYA,KAE3B,IAAKowH,EAAiB,CAClB,MAAMC,EAAW,SAAUzyG,EAAIC,GAG3B,IAFA,IAAIxG,EAAI,GAAIswG,EAAO,GAEVlpH,EAAI,EAAGA,EAAImf,EAAGhe,OAAQnB,IAC3B4Y,EAAEuG,EAAGnf,KAAM,EAGf,IAAKA,EAAI,EAAGA,EAAIof,EAAGje,OAAQnB,IACnB4Y,EAAEwG,EAAGpf,WACE4Y,EAAEwG,EAAGpf,IAEZ4Y,EAAEwG,EAAGpf,KAAM,EAInB,IAAK,IAAI2V,KAAKiD,EACVswG,EAAKhjH,KAAKyP,GAGd,OAAOuzG,GAEX,OAAOroH,EAAAhD,EAAIo8G,GAA4BvzG,MAAK,SAAUpB,GAClD,OAAmE,IAA5DssH,EAAStsH,EAAI/D,QAAQnD,SAAUmD,EAAQnD,UAAU+C,UAIhE,OAAOwwH,EACV,SAAA/G,KA0KG,MAAM/sH,EAAOC,KACbD,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,WAAuB+V,EAAE9V,EAAIs+G,GAAAyO,KAC1C/sH,EAAK+uH,eAAe/uH,EAAK4hH,MAAM8D,iBAE/BliH,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,0BAkmBtCp+B,EAAAA,EAAAA,IAAOy3G,GAAanY,EAAAA,SACpBt/F,EAAAA,EAAAA,IAAOy3G,GAAa+Y,EAAAA,SAEpBxwH,EAAAA,EAAAA,QAAAA,YAAyBy3G,GACzB,a,oGC9+FAz3G,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,OAAY2B,EAAAA,EAEZ,MAAM8uH,UAA4Bx0B,EAAAA,QAC9B//F,cACIG,SAASod,WACT,MAAMjd,EAAOC,KACbD,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,oBAAoCxD,GACpDA,EAAKk0H,YAAa,EAClBl0H,EAAKm0H,cAAe,EACpBn0H,EAAKo0H,YAAa,EAGtBvpH,eAAetM,GACX,MAAMyB,EAAOC,KACP4E,EAAShF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAMzC,OAJAyB,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAU6N,GAC9C5N,EAAKE,KAAKgtF,sBAGDroF,EAGjB2zB,SAAS74B,EAAQggG,GACb,MAAM3/F,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,GAAIh0B,EAAKo0H,WACLt1H,QADJ,CAIAkB,EAAKkkG,eACDlkG,EAAKigG,gBACLjgG,EAAK8/F,YAAY/nE,cAAc/3B,EAAKigG,eACpCjgG,EAAKigG,cAAgB,MAEzBjgG,EAAKw4F,mBAAqB,KAE1B,IADA,IAAI6H,GAAgB,EACXl+F,EAAI,EAAGA,EAAInC,EAAKzB,IAAI4rC,WAAW7mC,OAAQnB,IAAK,CACjD,IAAIsC,EAAQzE,EAAKzB,IAAI4rC,WAAWhoC,GAChC,GAAIsC,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KACX0E,EAAM6O,iBAAmB7O,EAAMyW,MAAM5X,OAAS,EAAG,CACjD+8F,GAAgB,EAChB,OAIRA,GACArgG,EAAKkkG,eACLlkG,EAAKE,KAAK8uF,UAAU,CAChBz5D,aAAcv1B,EAAKu1B,aACnBugC,GAAIn2D,EACJ8E,MAAOzE,EAAK8/F,YACZtnE,SAAU,SAAU90B,GAChB1D,EAAKE,KAAKm0H,sBAAsB3wH,GAAS/E,KAAKG,OAKtDA,QAKZ2hG,YAAYt7F,GACR,OAAOlF,KAAKC,KAAKm0H,sBAAsBlvH,GAG3Cq7F,iBAAiB5gG,GACb,MAAMI,EAAOC,KAIb,GAFAJ,MAAM2gG,iBAAiB7/F,KAAKX,EAAMJ,GAE9BI,EAAKigG,cAAe,CAIpB,IAHA,IAAIriC,EAAWh+D,EAAQg+D,SAGdz7D,EAAI,EAAGA,EAAIy7D,EAASt6D,OAAQnB,IAAK,CACtC,IAAI+uB,EAAU0sC,EAASz7D,GACvB,GAAI+uB,EAAQojG,iBACDpjG,EAAQlO,WAGd,CACD,IAAK,IAAIzL,EAAI,EAAGA,EAAI2Z,EAAQlO,OAAO1f,OAAQiU,IAClC2Z,EAAQlO,OAAOzL,GAAGxI,SAASzL,SAC5B4tB,EAAQlO,OAAOha,OAAOuO,EAAG,GACzBA,GAAQ,GAGX2Z,EAAQlO,OAAO1f,SAChBs6D,EAAS50D,OAAO7G,EAAG,GACnBA,GAAQ,IAKpBnC,EAAKg9C,WAAWp9C,GAAS,WACjBg+D,EAASt6D,QACTtD,EAAK2gG,cAET3gG,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,gBAAgBve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACzDC,EAAKgpB,MAAShpB,EAAKgpB,KAAK40C,SAASt6D,OAItCtD,EAAKogG,iBAHDpgG,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,sBAAuB,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,YASvFyD,EAAAA,EAAAA,QAAAA,oBAAiCywH,EACjC,W,20CC/HA,MAAMM,EAAoB,wBAAwB,IAAAC,EAAA,IAAA/xH,QAElD,MAAMgyH,UAAuBt1F,YAGzBz/B,YAAYE,GACRC,QAAQ+C,EAAA,KAAA4xH,EAAA,CAAA3xH,UAAA,EAAAC,WAAA,IAER,MAAM9C,EAAOC,KACbD,EAAKu8C,MAAQ,mBACbt5C,EAAAjD,EAAIw0H,EAASx0H,EAAKiY,cAAe,KAAIjY,EAAKu8C,UACtCv5C,EAAChD,EAAIw0H,KACLvxH,EAAAjD,EAAIw0H,EAAS5nH,SAASC,cAAc,MACpC7J,EAAAhD,EAAIw0H,GAAOx2F,UAAUnjB,IAAI7a,EAAKu8C,OAC9Bv8C,EAAK8M,YAAW9J,EAAChD,EAAIw0H,KAGrB50H,IACAI,EAAK00H,SAAW90H,EAAQ80H,SACxB10H,EAAK20H,UAAY/0H,EAAQ+0H,UACzB30H,EAAKy6D,YAAc76D,EAAQ66D,aAInCv9B,oBACI,MAAMl9B,EAAOC,KACbD,EAAK00H,SAAW10H,EAAK00H,SACrB10H,EAAK20H,UAAY30H,EAAK20H,UACtB30H,EAAKy6D,YAAcz6D,EAAKy6D,YAGjBj9B,gCACP,MAAO,CAAC,YAAa,aAAc,cAAe,QAGlDk3F,eACA,OAAOz0H,KAAK49B,aAAa,aAGzB62F,aAAS5xH,GACI7C,KACRotB,aAAa,YAAavqB,GAG/B6xH,gBACA,OAAO10H,KAAK49B,aAAa,cAGzB82F,cAAU7xH,GAAO,IAAA8xH,EACjB,MAAM50H,EAAOC,KACbD,EAAKqtB,aAAa,aAAcvqB,GAChCE,EAAAhD,EAAIw0H,GAAOl2E,QAAQu2E,SAAW/xH,EAC9B,IAAIW,EAASzD,EACb,GACIyD,EAASA,EAAOg5D,oBAEbh5D,KAAYA,aAAkBqxH,IACrC9xH,EAAAhD,EAAIw0H,GAAO1iH,KAAa,QAAT8iH,EAAGnxH,SAAM,IAAAmxH,OAAA,EAANA,EAAQ34F,OAAOn5B,GACjCE,EAAAhD,EAAIw0H,GAAOpnH,UAAYtK,EAGvB23D,kBACA,OAAOx6D,KAAK49B,aAAa,eAGzB48B,gBAAY33D,GACC7C,KACRotB,aAAa,cAAevqB,GACjCE,EAFa/C,KAETu0H,GAAOnnG,aAAa,QAASvqB,GAGjCgP,WACA,OAAO9O,EAAA/C,KAAIu0H,GAAO32F,aAAa,QAG/B/rB,SAAKhP,GACLE,EAAA/C,KAAIu0H,GAAOnnG,aAAa,OAAQvqB,IAIxCm8B,eAAexgB,IAAI81G,IAAsBt1F,eAAeC,OAAOq1F,EAAmBE,GAElF,MAAMM,EAAqB,wBAE3B,MAAMD,UAAyBlrC,EAAAA,QAK3BlqF,cACIG,SAASod,WAET,MAAMjd,EAAOC,KAEbD,EAAK+vE,UAAY,GACb/vE,EAAKJ,QAAQU,SACbN,EAAKM,QAAS,GAElBN,EAAKg1H,iBAAmBh1H,EAAKJ,QAAQo1H,kBAAoB,kBAG7D93F,oBACI,MAAMl9B,EAAOC,KAIb,GAHAJ,MAAMq9B,oBACNl9B,EAAK+vE,UAAYhvE,MAAMoX,KAAKnY,EAAK2L,iBAAiB,2BAE7C3L,EAAK+vE,UAAUzsE,OAAQ,CACxB,MAAM2xH,EAAkBj1H,EAAKJ,QAAQmwE,WAAa,CAC9C,CACI2kD,SAAU,QACVC,UAAW,KACXl6D,YAAa,qBAEjB,CACIi6D,SAAU,QACVC,UAAW,KACXl6D,YAAa,kBAEjB,CACIi6D,SAAU,QACVC,UAAW,KACXl6D,YAAa,oBAGrBz6D,EAAK+vE,UAAYklD,EAAgB12H,KAAI02H,GAAmB,IAAIR,EAAeQ,KAC3Ej1H,EAAK88C,SAET98C,EAAKM,OAASN,EAAKM,OACdN,EAAKM,SACNN,EAAKgpH,UAAYhpH,EAAKgpH,YAAa,GAEvC,MAAMj5C,EAAYhvE,MAAMoX,KAAKnY,EAAK2L,iBAAiB,0BAC/CokE,EAAUzsE,SACVtD,EAAK+vE,UAAYA,GAIdvyC,gCACP,MAAO,CAAC,SAAU,aAGtBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,WAAT6I,IACA9I,EAAKM,OAASN,EAAK49B,aAAa90B,IAEvB,cAATA,IACA9I,EAAKgpH,UAAYhpH,EAAK49B,aAAa90B,IAI3C0zC,eACI,MAAO,qBAGPl8C,aACA,OAAOL,KAAK29B,aAAa,UAGzBt9B,WAAOwC,GACP,MAAM9C,EAAOC,KACT6C,EACA9C,EAAKqtB,aAAa,SAAU,IAG5BrtB,EAAKk+B,gBAAgB,UAIzB8qF,gBACA,OAAO/oH,KAAK29B,aAAa,aAGzBorF,cAAUlmH,GACV,MAAM9C,EAAOC,KACT6C,EACA9C,EAAKqtB,aAAa,YAAa,IAG/BrtB,EAAKk+B,gBAAgB,aAI7B4H,SAASvnC,GACL,MACMsG,EAAShF,MAAMimC,SAASnlC,KADjBV,KAC4B1B,GAEzC,OADAA,EAAIquD,OAAM,IAAMkoE,EAAiBI,qBAC1BrwH,EAGXgG,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,SACI,MAAM98C,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GAC5Dh0B,EAAKg9C,WAAW,CAAE+yB,UAAW/vE,EAAK+vE,YAAa,WAAY,IAAAolD,EAAAC,EAAAC,EACvD,MAAMC,EAAgBt1H,EAAKiY,cAAe,IAAGjY,EAAKu8C,eAClD,IAAIg5E,EACJv1H,EAAK+vE,UAAUvoE,SAAQwoE,IACnBslD,EAAcxoH,YAAYkjE,GAC1B,MAAM3wC,EAAO2wC,EAAS/3D,cAAe,KAAI+3D,EAASzzB,SAClDld,EAAKxzB,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAChDA,EAAEoxG,iBACFpwG,EAAKw1H,YAAYx2H,EAAE0O,OAAO4wC,QAAQu2E,aAElCC,EAAiBW,gBAAkBzlD,EAAS0kD,WAC5Ca,EAAal2F,MAGX,QAAV81F,EAAAI,SAAU,IAAAJ,IAAVI,EAAgC,QAAtBH,EAAKp1H,EAAK+vE,UAAU,UAAE,IAAAqlD,OAAA,EAAjBA,EAAmBn9G,cAAe,KAAI+3D,SAASzzB,UACpD,QAAV84E,EAAAE,SAAU,IAAAF,GAAVA,EAAYr3F,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC1BC,EAAKy+B,OAASz+B,EAAKiY,cAAe,IAAGjY,EAAKu8C,gBAE1Cv8C,EAAKy+B,OAAO5yB,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACvD5N,EAAKgpH,WAAahpH,EAAKgpH,aAG3BlqH,EAAQkB,UAKpBi8B,OAAO/8B,GACH,OAAOgF,EAAAA,EAAAA,iBAAsBwN,OAAOY,SAASR,KAAM,CAC/C,CAACgjH,EAAiBY,gBAAiBx2H,IAI3Cs2H,YAAYt2H,GAAM,IAAAy2H,EACd,MACMC,EADO31H,KACM8vE,UAAUxxE,KAAIyxE,GAAYA,EAAS/3D,cAAe,KAAI+3D,EAASzzB,WAClFq5E,EAAMpuH,SAAQ63B,GAAQA,EAAKrB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UACM,QAAlD41H,EAAAC,EAAM/sH,MAAKw2B,GAAQA,EAAKif,QAAQu2E,WAAa31H,WAAK,IAAAy2H,GAAlDA,EAAoD33F,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClE2R,OAAOY,SAASR,KAJH7R,KAIeg8B,OAAO/8B,GAGvCoB,0BACIsM,SAASjB,iBAAkB,IAAG3L,KAAKg1H,qBAAqBxtH,SAAQ,SAAUC,GACtE,IAAIkC,EAAOlC,EAAI2F,UACf,MAAMyoH,EAASlsH,EAAKF,MAAM,uBAC1B,GAAIosH,EACA,IAAK,IAAI1zH,EAAI,EAAG+I,EAAM2qH,EAAOvyH,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,MAAMkoB,EAAIwrG,EAAO1zH,GACXuG,EAAM2hB,EAAE5gB,MAAM,YAAY,GAChCE,EAAOA,EAAKH,QAAQ6gB,EAAGnmB,EAAAA,EAAAA,gBAAqB4wH,EAAiBW,cAAe/sH,IAGhFjB,EAAI2F,YAAczD,IAClBlC,EAAI2F,UAAYzD,MAKjB8rH,2B,YAOP,OANIK,EAAChB,EAjLPA,EAAgBiB,K,EAkLVjB,E,EAlLNA,E,EAAgBiB,E,EAkLwB7xH,EAAAA,EAAAA,oBAAyB,CACvD0rE,WAAYklD,EAAiBkB,YAC7BnmD,UAAWilD,EAAiBY,iB,4BAGpCI,EAAOhB,EAvLTA,EAAgBiB,IAyLrBj2H,EAzLKg1H,EAAgB,iBACM,QAAMh1H,EAD5Bg1H,EAAgB,cAEG,kBAAgB,IAAAiB,EAAA,CAAAlzH,UAAA,EAAAC,WAAA,GAyLzCgyH,EAAiBW,cAEjBjyH,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,iBAA8BsxH,EAC9B71F,eAAexgB,IAAIs2G,IAAuB91F,eAAeC,OAAO61F,EAAoBD,GACpF,W,sHCxNAtxH,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,GAAQA,EAAAA,EAAAA,IAAS,GACjBA,EAAAA,EAAAA,GAAAA,aAAqByyH,EAAAA,EAErB,MAAMC,EAAe,WACjB,IAAIl2H,EAAOC,KAEXD,EAAKgjB,OAAS,GACdhjB,EAAKm2H,YAAa,EAElB9zC,EAAAA,QAAAA,MAAyBriF,EAAMid,WAE/Bjd,EAAKssF,WAAa,CACd8pC,WAAY,OAASp2H,EAAKu8C,MAAQ,cAAgBv8C,EAAKu8C,MAAQ,gBAAkBv8C,EAAKu8C,MAAQ,SAG7Fx8C,EAAAA,EAAAA,QAAAA,aACDA,EAAAA,EAAAA,QAAAA,WAA4B,iBAE3BA,EAAAA,EAAAA,QAAAA,eACDA,EAAAA,EAAAA,QAAAA,aAA8B,mBAE7BA,EAAAA,EAAAA,QAAAA,SACDA,EAAAA,EAAAA,QAAAA,OAAwB,cAIhCyD,EAAAA,EAAAA,QAAW0yH,EAAc7zC,EAAAA,SAEzB,WAEI,IAAI3lC,EAAWw5E,EAAaz1H,UAE5Bi8C,EAASH,MAAQ,cAgBjBG,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,WAEPoiF,EAAAA,QAAAA,UAAAA,SAAAA,KAA2CriF,EAAMzB,GAEvD,MAAM83H,EAAO,SAAUv3H,EAASk1B,GAC5B,GAAIjzB,MAAMC,QAAQhB,EAAKJ,QAAQojB,QAAS,CACpC,IAAK,IAAI7gB,EAAI,EAAGA,EAAInC,EAAKJ,QAAQojB,OAAO1f,OAAQnB,IAAK,CACjD,IAAIsC,EAAQzE,EAAKJ,QAAQojB,OAAO7gB,GAC3BsC,EAAM2F,MAAQ3F,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MACzB0E,EAAMpF,KACPoF,EAAMpF,GAAKmE,EAAAA,EAAAA,UAEXA,EAAAA,EAAAA,KAAAA,cAAsBiB,KACtBA,EAAQ,IAAIuY,EAAAA,EAAOvY,IAEvBzE,EAAKgjB,OAAO3a,KAAK5D,IAGzBzE,EAAK88C,QAAO,WACRh+C,YAIJA,KAIRkB,EAAKs2H,cAAgB,IAAIz3H,SAAQ,SAAUC,EAAS4W,GAChD,MAAM6gH,EAAW,SAAUv3H,GACnBA,EAAEyF,QAAUlG,EAAI8wB,YAChBgnG,EAAKv3H,GACLP,EAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0Bw2H,KAI1Ch4H,EAAIqb,QAAO,WACFrb,EAAI8wB,UAAUva,OAASvW,EAAI8wB,UAAUva,QAAUjC,EAAAA,EAAAA,MAAAA,KAIhDtU,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0Bw2H,GAHjCF,EAAKv3H,SAkDjB,IAAI03H,EAAiBx2H,EAAK4hC,gBAAgB,mBA0F1C,OAxFArjC,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA8B,IAAMA,EAAAA,EAAAA,MAAAA,oBAAiC,SAAUf,GAC/EgB,EAAK4jB,cAAc5kB,EAAEyF,OAAO+C,SAAQ,SAAUkN,GAC1CA,EAAKspB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,gBACZ2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,cAGjDr8E,GAAGvO,EAAAA,EAAAA,MAAAA,SAAwB,IAAMA,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACnE,MAAMyF,EAAQzF,EAAEyF,MACXA,EAAMuO,QAAUvO,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAChCC,EAAK4Z,SAASjb,MAAK,WAEf,GAAIqB,EAAKy2H,iBAAiBhyH,GACtBiyH,EAAc/1H,KAAKX,EAAMyE,OAExB,CAGD,IADA,IAAIkyH,GAAoB,EACfx0H,EAAI,EAAG+I,EAAMlL,EAAKgjB,OAAO1f,OAAQnB,EAAI+I,EAAK/I,IAAK,CACpD,IAAIokB,EAAMvmB,EAAKgjB,OAAO7gB,GACtB,GAAIokB,EAAInc,OAAS3F,EAAM2F,MAAQmc,EAAI3mB,QAAQ0V,MAAQ7Q,EAAM7E,QAAQ0V,IAAK,CAClEqhH,GAAoB,EACpB,OAKJA,GACK32H,EAAK42H,qBACN52H,EAAK42H,mBAAqB,IAG9B52H,EAAK42H,mBAAmBvuH,KAAK5D,IAE7BzE,EAAKqqD,SAAS,IAAIrtC,EAAAA,EAAO,CACrB1H,IAAK7Q,EAAM7E,QAAQ0V,IACnBlL,KAAM3F,EAAM2F,KACZgT,WAAY,GACZ5S,MAAO/F,EAAM+F,OAAS/F,EAAMvE,KAAK22H,kBACjC1jH,WAAW,EACXD,UAAU,KACVvU,MAAK,WACL+3H,EAAc/1H,KAAKX,EAAMyE,aAOhD6J,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnC,MAAMsa,EAASta,EAAEsa,OACbtZ,EAAKgjB,OAAO5H,MAAKpM,GAAKA,IAAMhQ,EAAEyF,UAC1B6U,GACA9V,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgBtoB,EAAQ,CAAEhE,IAAKtW,EAAEyF,MAAM6Q,OAEzDtV,EAAK4jB,cAAc5kB,EAAEyF,OAAO+C,SAAQ,SAAUkN,GAC1CA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,gBAIjCuO,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,MAChBzE,EAAK4jB,cAAcnf,GAAO+C,SAAQ,SAAUkN,GACxCA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,QAAU6rC,KA5GjC,SAAU/xH,GAC9B,MAAMI,EAAS,GACf,IAAKJ,EAAMuO,OAAQ,CACf,IAAIsC,EAAM7Q,EAAM7E,QAAQ0V,IACpBtV,EAAKmzF,MACLnzF,EAAKmzF,KAAKxnF,iBAAiB,MAAMnE,SAAQ,SAAU22E,GAC/C,MAAM53D,EAAMvmB,EAAK4f,SAASu+D,EAAG7/B,QAAQp/B,SACrC,GAAIqH,GAAOA,EAAInc,OAAS3F,EAAM2F,MAAQmc,EAAI3mB,QAAQ0V,MAAQA,EACtD,IAAK,IAAInT,EAAI,EAAGA,EAAIsC,EAAMyW,MAAM5X,OAAQnB,IACpC,GAAIg8E,EAAG7/B,QAAQt4B,YAAcvhB,EAAMyW,MAAM/Y,GAAI,CACzC0C,EAAOwD,KAAK81E,GACZ,UAOxB,OAAOt5E,EA4FHiyH,CAAgBryH,GAAO+C,SAAQ,SAAUkN,GACrCA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2U,EAAKuD,cAAc,MAAMqmC,QAAQqsC,QAAU6rC,KAxFxB,SAAUO,GACrC,IAAIC,EAASh3H,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAA6B,GACtE,GAAIwzH,EAGA,IAFA,IAAIh0G,EAASg0G,EAAOh0G,OAEX7gB,EAAI,EAAGA,EAAI6gB,EAAO1f,OAAQnB,IAAK,CACpC,IAAIsC,EAAQue,EAAO7gB,GAEfsC,IAAUsyH,GACV/2H,EAAK4jB,cAAcnf,GAAO+C,SAAQ,SAAUkN,GACxCA,EAAKspB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACnB2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,QAAU3qF,EAAK4hC,gBAAgB,yBAkF9Eq1F,CAAuBxyH,GAGvByyH,EAAmBv2H,KAAKX,MAE3BsO,GAAGvO,EAAAA,EAAAA,MAAAA,sBAAmC,SAAUf,GACzCA,GAAKA,EAAEyF,QACPzE,EAAKqqD,SAASrrD,EAAEyF,OAChBzE,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,eAGjCuO,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GACzC5N,EAAK29E,YAGN39E,GAGX,MAAMm3H,EAAwB,SAAUn4H,GACpCA,EAAE0O,OAAO+vE,OACTz+E,EAAE+uE,kBACF,MAAMoQ,EAAKn/E,EAAE0O,OAAO+uD,cACpB,GAAmB,OAAf0hB,EAAGhI,UAAqBgI,EAAGngD,UAAU8gB,SAASpC,EAASH,MAAQ,SAAU,CACzE4hC,EAAGngD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,WACTo+E,EAAGlmE,cAAc,MACzB+lB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,aAItBq3H,EAAc,SAAUp4H,EAAGgvD,EAAKqpE,GAClC,MAAMl5C,EAAKn/E,EAAE0O,OAAO66G,QAAQ,MAC5B,IAAKpqC,EAAGngD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WAA4Bo+E,EAAGngD,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SAAyB,CAClGf,EAAEoxG,eAEF,IAAIpqF,EAAYm4D,EAAG7/B,QAAQt4B,UAC3BA,OAA0B3hB,IAAd2hB,EAA0BA,EAAU9C,WAAa,GAC7D,IAAIze,EAAQ4yH,EAAe12H,KAAKqtD,EAAImwB,GACpC,GAAI15E,GAASuhB,EAAW,CACpB,IAAIsxG,EAAa,EAEb,QAAQp1F,KAAK66B,UAAUC,WACvBs6D,EAAa,GACR9zH,EAAAA,EAAAA,KAAAA,kBACL8zH,EAAa,KAEZ7yH,EAAM+F,QACP/F,EAAM+F,MAAQ/F,EAAM0P,UAAU3J,OAGlC2zE,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACjBo+E,EAAGlmE,cAAc,WAAWqmC,QAAQqsC,QAAU,IAE/B,SAAUvpC,GACrB,OAAO,IAAIviD,SAAQ,SAAUC,EAASk1B,GAClCkzB,YAAW,WACP9F,EAAQ/zB,aAAa,eAAgB+zB,EAAQmmE,cAC7CnmE,EAAQ/zB,aAAa,cAAe+zB,EAAQvzC,aAE5C/O,MACDw4H,OAIXC,CAAOp5C,GAAIx/E,MAAK,WACZqvD,EAAIwpE,cAAc/yH,EAAOuhB,MAE7BhnB,EAAE+uE,qBAKR0pD,EAA2B,WAC7B,MAAMz3H,EAAOC,KAEbD,EAAK03H,UAAY13H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAC3Dv8C,EAAKmzF,KAAOnzF,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,cAEtDv8C,EAAK03H,UAAU7rH,iBAAiB,WAAW,SAAU+B,GAGhC,KAFF5N,EAAK03H,UAAU50H,OAQ9BokD,YAAW,WAGU,KAFFlnD,EAAK03H,UAAU50H,QAG1B9C,EAAKmzF,KAAK/lF,UAAY,MAE3B,MAGP,IAAIuqH,EAAmB,GA6GvB,GA3GAn0H,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,aAA0B,KAE1BA,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBxD,EAAK03H,UAAW,CACpCr4F,KAAM,IACN3xB,OAAQ1N,EAAKmzF,KACbykC,UAAW,EACXh9G,OAAQ,SAAUvB,EAAMmf,GAEpBm/F,EAAmB,GACnB33H,EAAK63H,OAAOrwH,SAAQ,SAAUq1F,GAC1BA,EAAKlxF,iBAAiB,MAAQ5L,EAAAA,EAAAA,QAAAA,SAAwByH,SAAQ,SAAUyC,GACpE0tH,EAAiBtvH,KAAK4B,EAAKq0C,QAAQt4B,kBAK3C3M,EAAOA,EAAKwQ,QACHvmB,OAxRG,EAyRRtD,EAAKmzF,KAAK/lF,UAAY,GAEjBiM,EAAK/V,QA3RF,IA4RJE,EAAAA,EAAAA,QAAAA,cACAyjD,aAAazjD,EAAAA,EAAAA,QAAAA,cACjBA,EAAAA,EAAAA,QAAAA,aAA0B0jD,YAAW,WAEjC,IADA,IAAIjhB,EAAU,GACL9jC,EAAI,EAAGgiB,EAAKnkB,EAAK83H,aAAax0H,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACxD,MAAM41H,EAAc/3H,EAAK83H,aAAa31H,GACtC,IAAI61H,EAAUD,EAAY5uG,gBAAgB9P,GACtC2+G,EAAQ10H,QACR2iC,EAAQ59B,KAAK,CACT6oB,QAAS,CACL7xB,GAAI04H,EAAY14H,GAChBmL,MAAOutH,EAAYvtH,OAASutH,EAAY14H,IAE5C44H,OAAQD,IAIpBx/F,EAAS,CAAE0/F,cAAejyF,EAASkyF,eAAgBn4H,EAAK83H,aAAax0H,WACtEE,EAAAA,EAAAA,QAAAA,YAGXg1B,SAAU,SAAUx5B,GAChBgB,EAAK03H,UAAU50H,MAAQ9D,EAAE0O,OAAO2L,MAAQra,EAAE0O,OAAO+pD,UACjDj0D,EAAAA,EAAAA,QAAAA,YAAyBxD,EAAK03H,UAAU50H,MACxC9C,EAAKo4H,WAAWhnD,SAASpyE,EAAE0O,OAAOghD,MAAMt1B,UAAU,IAClD51B,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBxD,EAAK03H,UAAW,UAE5CW,UAAW,SAAUj0H,GACjB,IAAI8vD,EAAYj0D,KAAKyN,OAErB,GAAItJ,EAAK6hC,SAAW7hC,EAAK6hC,QAAQiyF,cAAc50H,OAAS,EAEpD,IADA,IAAI6mC,EAAanqC,EAAKzB,IAAI80D,eAAelpB,WAChCryB,EAAI,EAAGA,EAAI1T,EAAK6hC,QAAQiyF,cAAc50H,OAAQwU,IAAK,CAExD,IADA,IAAImgH,EAAS7zH,EAAK6hC,QAAQiyF,cAAcpgH,GAAGmgH,OAClC1gH,EAAI,EAAGA,EAAI0gH,EAAO30H,OAAQiU,IAAK,QAC7B0gH,EAAO1gH,GAAG+gH,aACjB,IAAK,IAAIn2H,EAAI,EAAGA,EAAIgoC,EAAW7mC,OAAQnB,IAEnC,GAAIw1H,EAAiB1uH,QAAQgvH,EAAO1gH,GAAGsZ,OAAS,EAAG,CAC/ConG,EAAO1gH,GAAG+gH,cAAe,EACzB,MAIHL,EAAO1gH,GAAGsZ,OACXonG,EAAOjvH,OAAOuO,EAAG,GACjBA,KAGHnT,EAAK6hC,QAAQiyF,cAAcpgH,GAAGmgH,OAAO30H,OAKtCtD,EAAK2M,IAAIhB,iBAAiB,6BAA6BmM,KACvD1T,EAAK6hC,QAAQiyF,cAAcpgH,GAAGoZ,QAAQqqD,YAAcv7E,EAAK2M,IAAIhB,iBAAiB,6BAA6BmM,GAAGkmB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,YALjIqE,EAAK6hC,QAAQiyF,cAAclvH,OAAO8O,EAAG,GASjD,IAAI0H,EAAM,GAqBV,OApBAxf,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,WAAYn4C,EAAK6hC,SAAStnC,MAAK,SAAUggF,GAGvE,MAAM45C,EAAiB,IAAIhvG,OAAO,uEAAyE/lB,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAK03H,UAAU50H,OAAS,8DAA+D,MACpNoxD,EAAU9mD,UAAYoS,EAAMm/D,EAAIn1E,QAAQ+uH,EAAe,0CAEvD,MAAMC,EAAkBx4H,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,cACxD,GAAIi8E,EAAiB,CACjB,MAAMC,EAAYD,EAAgBl6E,QAAQm6E,UAE1C,IAAIz5E,EAAY,uBADEw5E,EAAgBl6E,QAAQt4B,sCACkChmB,EAAKu8C,wBAC7Ev8C,EAAK83H,aAAax0H,OAAS,IAC3B07C,EAAY,uBAAsBy5E,OAAez5E,KAErD,MAAM05E,EAAexkE,EAAUj8C,cAAc+mC,GACzC05E,IACAA,EAAa74F,SAAU,OAI5BrgB,MAKVxf,EAAKm2H,WAAY,CAElBn2H,EAAK2M,IAAIsL,cAAc,aAAapM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC/EA,EAAE0O,OAAO+vE,OAET,MAAMk7C,EAAa34H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WACvDq8E,EAAW54H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SACrDs8E,EAAW74H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SAErDu8E,EAAqBH,EAAW36F,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAKzD,GAJA44H,EAAW36F,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwB+4H,GACpDF,EAAS56F,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuB+4H,GACjD95H,EAAE0O,OAAOswB,UAAUS,OAAOz+B,EAAKu8C,MAAQ,YAAau8E,GACpD95H,EAAE0O,OAAOswB,UAAUS,OAAOz+B,EAAKu8C,MAAQ,eAAgBu8E,GACnDA,EACA94H,EAAK03H,UAAU1Q,QACfhoH,EAAE0O,OAAO2f,aAAa,QAASrtB,EAAK4hC,gBAAgB,gCAEnD,CACD5iC,EAAE0O,OAAO2f,aAAa,QAASrtB,EAAK4hC,gBAAgB,uBAG9B5hC,EAAK2M,IAAIhB,iBAAiB,qDAAqDrI,OACjF,GAChBu1H,EAAS76F,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAGnC,CAAEkO,SAAS,IAKdjO,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,IAAMxD,EAAKu8C,MAAQ,gCAAkCv8C,EAAKu8C,MAAQ,oBAAoB,SAAUwD,GAClKA,EAAIguB,kBACJ,MAAMrgE,EAASqyC,EAAIryC,OACnB,GAAIA,EAAOmyB,QAAS,CAChB,MAAMs+C,EAAKzwE,EAAO+uD,cAClB,IAAIh5D,EAAS06E,EACb,GACI16E,EAASA,EAAOg5D,oBAEbh5D,GAA6B,OAAnBA,EAAO0yE,SACxBn2E,EAAK+4H,cAAc/4H,EAAKgjB,OAAO1f,OAAS,EAAItD,EAAKgjB,OAAO7d,QAAO6b,GAAKA,EAAE3hB,KAAOoE,EAAO66C,QAAQm6E,YAAW,GAAKz4H,EAAKgjB,OAAO,GAAIm7D,EAAG7/B,QAAQt4B,gBAGvIhmB,EAAKg5H,oBAIbh5H,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,IAAMxD,EAAKu8C,MAAQ,gCAAkCv8C,EAAKu8C,MAAQ,oBAAoB,SAAUwD,GACjKA,EAAIguB,sBAIR,MAAMkrD,EAA4B,IAAMj5H,EAAKu8C,MAAQ,aACrDv8C,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkCy1H,GAA2B,SAAUl5E,GACtGA,EAAIguB,kBAEJ,IADA,IAAIoQ,EAAKp+B,EAAIryC,OACNywE,IAAOA,EAAG30D,QAAQyvG,IACrB96C,EAAKA,EAAG1hB,cAER0hB,EAAGngD,UAAU8gB,SAAS9+C,EAAKu8C,MAAQ,iBAGnC4hC,EAAGngD,UAAU8gB,SAAS9+C,EAAKu8C,MAAQ,iBACnC4hC,EAAGngD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,WAGxBq3H,EAAYr3E,EAAK//C,GAAM,WACnB,OAA2B,IAAvBC,KAAK+iB,OAAO1f,OACLrD,KAAK+iB,OAAO,GAEhB/iB,KAAK2f,SAASu+D,EAAGoqC,QAAQ,8BAAgCpqC,EAAGoqC,QAAQ,6BAA6BjqE,QAAQm6E,mBAKxHz4H,EAAKm2H,YAAa,IA+BpBe,EAAqB,WACvB,MAAMl3H,EAAOC,KAEb,GAAI,gBAAiB2M,SAAU,CAC3B,IAAImzC,EAAMnzC,SAASk5C,YAAY,cAC/B/F,EAAI26D,UAAU,SAAS,GAAO,GAC1B16G,EAAK03H,WACL13H,EAAK03H,UAAUz3F,cAAc8f,QAI7B//C,EAAK03H,WACL13H,EAAK03H,UAAUwB,UAAU,UAK/BxC,EAAgB,SAAUjyH,GAC5B,MAAMzE,EAAOC,KAEPk5H,EAAan5H,EAAKzB,IAAI4rC,WACvBhlC,QAAO6b,GAAKA,EAAE5W,OAAS3F,EAAM2F,MAAQ4W,EAAE1L,MAAQ7Q,EAAM6Q,MACrD/W,KAAIyiB,GAAKhhB,EAAK4jB,cAAc5C,KAC5BtQ,OACLyoH,EAAW3xH,SAAQ,SAAUkN,GACzBA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2U,EAAKspB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACnB2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,QAAU3qF,EAAK4hC,gBAAgB,wBAEtE5hC,EAAKy2H,iBAAiBhyH,GAAOkH,iBAAiB,mDAAmDnE,SAAQ,SAAUkN,GAC1GykH,EAAWtwH,MAAKgM,GAAKA,IAAMH,MAC5BA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,QAAQ3qF,EAAK4hC,gBAAgB,uBAGxEs1F,EAAmBv2H,KAAKX,IAGtBo5H,EAAyB,WAC3B,MAAMp5H,EAAOC,KAETD,EAAK42H,oBAAsB52H,EAAK42H,mBAAmBtzH,OAAS,GAC5DtD,EAAK42H,mBAAmBpvH,SAAQ,SAAU/C,EAAOslB,EAAOirC,GAChDh1D,EAAKy2H,iBAAiBhyH,KACtBiyH,EAAc/1H,KAAKX,EAAMyE,GAEzBuwD,EAAMhsD,OAAO+gB,EAAO,QAM9BsvG,EAAiB,SAAU3kH,EAAMjQ,GACnC,MAAMzE,EAAOC,KAEbyU,EAAK/I,iBAAiB,eAAiB3L,EAAKu8C,MAAQ,iBAAiB/0C,SAAQ,SAAU4mE,GACnFA,EAAIviE,iBAAiB,QAASsrH,MAGlCziH,EAAK/I,iBAAiB,QAAQnE,SAAQ,SAAUq1D,GAC5CA,EAAKhxD,iBAAiB,SAAS,SAAU7M,GACrCo4H,EAAYp4H,EAAGgB,GAAM,SAAUm+E,GAC3B,IAAK,IAAIh8E,EAAI,EAAG+I,EAAMjL,KAAK43H,OAAOv0H,OAAQnB,EAAI+I,EAAK/I,IAAK,CACpD,MAAM06F,EAAO58F,KAAK43H,OAAO11H,GACzB,GAAI06F,EAAK/9C,SAASq/B,GACd,OAAOl+E,KAAK2f,SAASi9E,EAAKv+C,QAAQp/B,SAG1C,OAAOlf,EAAK4f,SAASu+D,EAAG7/B,QAAQp/B,kBAK5Clf,EAAK63H,OAAS73H,EAAK2M,IAAIhB,iBAAiB3L,EAAKssF,WAAW8pC,YAExD1hH,EAAK4pC,QAAQp/B,QAAUza,EAAMpF,GAE7BqV,EAAK/I,iBAAiB,IAAM3L,EAAKu8C,MAAQ,aAAa/0C,SAAQ,SAAUuT,GACpE,MAAM8hD,EAAO9hD,EAAE0hD,cAAcxkD,cAAc,QACrCnP,EAAOiS,EAAE0hD,cAAcne,QAAQt4B,UACrC,GAAIld,EAAM,CACN+zD,EAAK7+B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YACnB,IAAIipB,EAAOvkB,EAAM0E,QAAQL,GAyBzB,GAxBK1J,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,aAC3C5pB,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,WAC3C5pB,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,aAI5CjO,EAAElP,iBAAiB,UAAU,SAAU7M,GACnCA,EAAE+uE,kBACU9tE,KACJ4/B,QACJ7/B,EAAK+4H,cAAct0H,EAAOqE,GAE1B9I,EAAKg5H,kBAEV,CAAE/qH,SAAS,IACd8M,EAAElP,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC7CA,EAAE+uE,oBACH,CAAE9/D,SAAS,KAdd8M,EAAE0hD,cAAcC,YAAY3hD,GAgB5BtW,EAAM60H,kBAAoB70H,EAAM60H,iBAAiBrwH,QAAQH,GAAQ,IACjE+zD,EAAK7+B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,cACnB88D,EAAKxvC,aAAa,QAASrtB,EAAK4hC,gBAAgB,wBAGhD5hC,EAAKzB,IACL,IAAK,IAAIgZ,EAAI,EAAGrM,EAAMlL,EAAKzB,IAAI4rC,WAAW7mC,OAAQiU,EAAIrM,EAAKqM,IAAK,CAC5D,IAAI82C,EAAKruD,EAAKzB,IAAI4rC,WAAW5yB,GACzB82C,EAAGjkD,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBsuD,EAAG/4C,MAAQ7Q,EAAM6Q,KAA2B,IAApB+4C,EAAGnzC,MAAM5X,QAAgB+qD,EAAGnzC,MAAM,KAAOpS,IACrG+zD,EAAKJ,cAAcz+B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACjC88D,EAAKve,QAAQqsC,QAAU3qF,EAAK4hC,gBAAgB,4BAMxD7mB,EAAElP,iBAAiB,UAAU,SAAU7M,GACnCA,EAAE+uE,kBACU9tE,KACJ4/B,QACJ7/B,EAAK+4H,cAAct0H,EAAOqE,EAAM+zD,EAAKpF,WAErCz3D,EAAKg5H,kBAEV,CAAE/qH,SAAS,IAEd8M,EAAElP,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC7CA,EAAE+uE,oBACH,CAAE9/D,SAAS,OAItBmrH,EAAuBz4H,KAAKX,GAE5BA,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAAM,SAAU5yC,GACzD3J,EAAKu8E,WAAWnvE,UAAYzD,MAIpC+yC,EAAS68E,aAAe,SAAU90H,EAAO+zB,EAAUghG,GAC/C,MAAMx5H,EAAOC,KAEbD,EAAK83H,aAAavxH,QAAQ9B,GAC1BA,EAAMgV,yBACD9a,KAAK,SAAU86H,GAEZz5H,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UA/KzB,SAAU93C,GAC3B,IAAII,EAASJ,EAAM0P,UACnB,MAYMulH,EAAa,SAAUhlH,EAAMuZ,GAC/B,GAAIxpB,EAAM7E,QAAQ+5H,kBAAoB1rG,EAAO,CACzCvZ,EAAKklH,UAAW,EAChB,IAAK,IAAIz3H,EAAI,EAAGA,EAAIuS,EAAKJ,SAAShR,OAAQnB,IACtCu3H,EAAWhlH,EAAKJ,SAASnS,GAAI8rB,EAAQ,KAMjD,OAtBwB,SAAS4rG,EAAgBnlH,GAE7C,IADA,IAAIolH,GAAkB,EACb33H,EAAI,EAAGA,EAAIuS,EAAKJ,SAAShR,OAAQnB,IAClC03H,EAAgBnlH,EAAKJ,SAASnS,MAC9B23H,GAAkB,GAM1B,OAHI16H,OAAOqB,UAAUC,eAAeC,KAAK+T,EAAM,eAC3CA,EAAKpP,WAAab,EAAMyW,QAAUzW,EAAMyW,MAAM5X,QAAUw2H,GAAmBplH,EAAKpP,WAE7EoP,EAAKpP,UAUhBu0H,CAAgBh1H,GAChB60H,EAAW70H,EAAQ,GACZA,EAuJ8CwuD,CAAapzD,MAAO,SAAU0J,GACvE,IAAIL,EAAWsD,SAASC,cAAc,YACtCvD,EAAS8D,UAAYzD,EAErB,MAAMowH,EAAS/5H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WACzD,IAAIy9E,EAAW1wH,EAAS2C,QAAU3C,EAAS2C,QAAQkL,WAAa7N,EAAS6N,WACrE8iH,EAAWF,EAAO9hH,cAAc,MAAQjY,EAAKu8C,MAAQ,gCAAkCt8C,KAAKZ,GAAK,MAEjG46H,EACAF,EAAOG,aAAaF,EAAUC,GAE9BF,EAAO56C,sBAAsB,aAAc66C,GAG/CX,EAAe14H,KAAKX,EAAMg6H,EAAU/5H,MAEH,IAA7B85H,EAAOI,mBACPX,IAGAh2H,EAAAA,EAAAA,KAAAA,WAAmBg1B,IAEnBA,EAASx4B,EAAK83H,aAAa93H,EAAK83H,aAAav5H,KAAIyiB,GAAKA,GAAKA,EAAE3hB,KAAI4J,QAAQhJ,KAAKZ,OAGpF8gD,KAAKlgD,QAETkgD,KAAK17C,IACN2R,MAAM,SAAUo9D,GACb,IAAIzpD,EAAQ/pB,EAAKgjB,OAAOzkB,KAAIyiB,GAAKA,EAAE3hB,KAAI4J,QAAQhJ,KAAKZ,IACpDW,EAAKgjB,OAAOha,OAAO+gB,EAAO,GAE1B,IAAIsnC,EAAerxD,EAAK4hC,gBAAgB,2BAA4B,CAAEm8B,YAAa99D,KAAKuK,QACpF4vH,EAAUp6H,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAAWtkC,cAAc,MAAQjY,EAAKu8C,MAAQ,gCAAkCt8C,KAAKZ,GAAK,MAClJ+6H,EAAQp8F,UAAUnjB,IAAI,YACtBu/G,EAAQ/sG,aAAa,QAASgkC,GAE9BrxD,EAAKzB,IAAIuvD,MAAMuD,EAAc,CAAEjnD,KAAMrK,EAAAA,EAAAA,QAAAA,SAEvCogD,KAAK17C,KAGfi4C,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBw8C,EAAwB,+BACxBv8C,EAAsB,+BACtBw8C,EAAsB,+BACtBC,EAAyB,+BACzBC,EAA6B,+BAC7Bz8C,EAAwB,6BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoB89E,GAAuB9rH,QACjEjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBuhC,GAAqBvvE,QAC7DjF,EAAStJ,EAAKu8C,MAAQ,gBAAkB+9E,GAAqB/rH,QAC7DjF,EAAStJ,EAAKu8C,MAAQ,mBAAqBg+E,GAAwBhsH,QACnEjF,EAAStJ,EAAKu8C,MAAQ,wBAA0Bi+E,GAA4BjsH,QAC5EjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KAIb,OAFAD,EAAK83H,aAAe,GAEb93H,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GACjC,IAAvBh0B,EAAKgjB,OAAO1f,OACZtD,EAAKg9C,WAAW,CAAE0hC,WAAY,GAAI+7C,cAAc,IAAS,WAEjDj3H,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,IAGJ15B,OAGJkB,EAAKg9C,WAAW,CAAEh6B,OAAQhjB,EAAKgjB,OAAQy3G,cAAc,IAAQ,WAEzDhD,EAAyB92H,KAAKX,GAE9BA,EAAKgjB,OAAOxb,SAAQ,SAAU/C,GAC1BzE,EAAKu5H,aAAa90H,EAAO+zB,EAAU15B,cAOvD49C,EAAS+5E,iBAAmB,SAAUhyH,GAClC,MAAMzE,EAAOC,KACb,IAAI4E,EAAS,KACb,IAAKJ,EAAMuO,OAAQ,CACf,IAAIsC,EAAM7Q,EAAM7E,QAAQ0V,IACpBtV,EAAK63H,QACL73H,EAAK63H,OAAOrwH,SAAQ,SAAU22E,GAC1B,MAAM53D,EAAMvmB,EAAK4f,SAASu+D,EAAG7/B,QAAQp/B,SACjCqH,GAAOA,EAAInc,OAAS3F,EAAM2F,MAAQmc,EAAI3mB,QAAQ0V,IAAI+Y,gBAAkB/Y,EAAI+Y,gBACxExpB,EAASs5E,MAKzB,OAAOt5E,GAGX63C,EAAS94B,cAAgB,SAAUnf,GAC/B,MACMI,EAAS,GACT4f,EAFOxkB,KAESw2H,iBAAiBhyH,GACvC,GAAIggB,EACA,IAAK,IAAItiB,EAAI,EAAGA,EAAIsC,EAAMyW,MAAM5X,OAAQnB,IAAK,CACzC,MAAMu4H,EAAUj2G,EAASxM,cAAc,uBAAyBxT,EAAMyW,MAAM/Y,GAAK,MAC5Eu4H,IAGL71H,EAAOwD,KAAKqyH,GACZA,EAAQ/uH,iBAAiB,MAAMnE,SAAQ,SAAU22E,GAC7Ct5E,EAAOwD,KAAK81E,OAIxB,OAAOt5E,GAGX63C,EAASq8E,cAAgB,SAAUt0H,EAAOqE,EAAM0B,GAC5C,MAAMxK,EAAOC,KACb,IAAI4E,EAAS,KAETmkB,EAAOhpB,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SAErD,MAAMo+E,EAAa,SAAU30G,EAAW40G,GACpC,IAAI/1H,GAAS,EAuBb,OAjBI+1H,IACA/1H,GAAS,EACTmkB,EAAKs1B,QAAQm6E,UAAYh0H,EAAMpF,GAC/B2pB,EAAKs1B,QAAQt4B,UAAYA,EACzBgD,EAAKgV,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACtBC,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAASq+E,GACtCj8H,MAAK,SAAUggF,GACZ31D,EAAK5b,UAAYuxE,EACjB31D,EAAK/Q,cAAc,IAAMjY,EAAKu8C,MAAQ,eAAe1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACtFC,EAAKg5H,kBACN,CAAE/qH,SAAS,OAEjBmI,OAAM,SAAUsD,GACblW,EAAAA,EAAAA,MAASkW,OAId7U,GAGX7E,EAAK2M,IAAIhB,iBAAiB,IAAM3L,EAAKu8C,MAAQ,eAAiBv8C,EAAKu8C,MAAQ,oBAAoB/0C,SAAQ,SAAU4mE,GAC7GA,EAAIvuC,SAAU,KAGlB,MAAMg7F,EAAiB,SAAUp2H,EAAO+F,GACpC,GAAI/F,EAAMqgB,QAAUta,EAChB,MAAO,CACHA,MAAOA,EACPua,SAAUtgB,EAAMugB,SAChBC,SAAWxgB,EAAMygB,YAAqBzgB,EAAMygB,YAAYhd,QAAO,SAAU+wB,EAAIC,GAQzE,OAPAD,EAAG5wB,KAAK,CACJ4K,OAAQimB,EAAG4hG,OACX5xG,kBAAmB1lB,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKzB,IAAIqB,QAAQyJ,OAAQ7F,EAAAA,EAAAA,KAAAA,kBAA0B01B,EAAG4hG,UAC7Ft3H,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKzB,IAAIqB,QAAQyJ,OAAQ,gBACrDe,KAAM8uB,EAAG9uB,KACTkL,IAAK4jB,EAAG6hG,iBAEL9hG,IACR,IAT4B,MAYvC,GAAIx0B,EAAMoO,MACN,IAAK,IAAI1Q,EAAI,EAAGA,EAAIsC,EAAMoO,MAAMvP,OAAQnB,IAAK,CACzC,MAAMuc,EAAMm8G,EAAep2H,EAAMoO,MAAM1Q,GAAIqI,GAC3C,GAAIkU,EACA,OAAOA,IAMvB,IAAK,IAAIvc,EAAI,EAAGgiB,EAAKnkB,EAAK63H,OAAOv0H,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAClD,MAAM06F,EAAO78F,EAAK63H,OAAO11H,GACzB,GAAI06F,EAAKv+C,QAAQp/B,UAAYza,EAAMpF,GAAI,CACnC,MAAM27H,EAAcn+B,EAAKlxF,iBAAiB,IAAM3L,EAAKu8C,MAAQ,aAC7D,IAAK,IAAIhlC,EAAI,EAAGypF,EAAKg6B,EAAY13H,OAAQiU,EAAIypF,EAAIzpF,IAAK,CAClD,MAAM0jH,EAAaD,EAAYzjH,GAC/B,IAAI1C,EAAIomH,EAAWx+D,cAAcne,QAAQt4B,UACzC,GAAIld,GAAQ+L,IAAM/L,EAAM,CACpB,MAAMkgB,EAAOvkB,EAAM0E,QAAQL,GACrBoyH,EAAUl7H,EAAK2M,IAAIsL,cAAc,uBAAyBpD,EAAI,+BAAiC7U,EAAKu8C,MAAQ,aAClH2+E,EAAQr7F,QAAU86F,EAAW9lH,EAAGmU,GAChC,MAAMmyG,EAAgBn7H,EAAK2M,IAAIsL,cAAc,uBAAyBpD,EAAI,+BAAiC7U,EAAKu8C,MAAQ,oBACpH4+E,IACAA,EAAct7F,QAAUq7F,EAAQr7F,SAEpCh7B,EAASmkB,EACT,MAEJ,MAAMgf,EAAIizF,EAAWx+D,cAAcxkD,cAAc,QAAQw/C,UACzD,IAAK3uD,GAAQ0B,GAASw9B,IAAMx9B,EAAM,CAE9B,MAAMwe,EAAO6xG,EAAep2H,EAAMwR,aAAa2mF,WAAW/pF,MAAOrI,GAEjEywH,EAAWp7F,QAAU86F,EAAW3yF,EAAGhf,GACnCnkB,EAASmkB,EACT,OAGR,OAIR,OAAOnkB,GAGX63C,EAASihC,OAAS,WACd,MAAM39E,EAAOC,KACbD,EAAK83H,aAAatwH,SAAQ,SAAU/C,GAChCA,EAAMgV,yBAAyB9a,MAAK,WAChC8F,EAAM60H,iBAAmB70H,EAAMvE,KAAKk7H,oBAAoBp7H,EAAKzB,IAAI4I,KAEjE,MAAMsd,EAAWzkB,EAAKy2H,iBAAiBhyH,GACnCggB,GACAA,EACK9Y,iBAAiB,uBACjBnE,SAAQ,SAAU22E,GACf,MAAMr1E,EAAOq1E,EAAG7/B,QAAQt4B,UAClB62C,EAAOshB,EAAGlmE,cAAc,QAAUlY,EAAAA,EAAAA,QAAAA,YACpC0E,EAAM60H,iBAAiBrwH,QAAQH,GAAQ,GACvC+zD,EAAK7+B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,cACnB88D,EAAKxvC,aAAa,QAASrtB,EAAK4hC,gBAAgB,yBAGhDi7B,EAAK7+B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,cACtB88D,EAAK3+B,gBAAgB,oBAQjDwe,EAASs8E,cAAgB,WACrB,IAAIh5H,EAAOC,KACXD,EAAK2M,IAAIhB,iBAAiB,IAAM3L,EAAKu8C,MAAQ,eAAiBv8C,EAAKu8C,MAAQ,oBAAoB/0C,SAAQ,SAAU4mE,GAC7GA,EAAIvuC,SAAU,KAElB,MAAM8gF,EAAY3gH,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,gBACrDokE,EAAUriE,QAAQm6E,iBAClB9X,EAAUriE,QAAQt4B,UACzB26F,EAAU3iF,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAG5B28C,EAAS2N,SAAW,SAAU5lD,GAC1B,MAAMzE,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IAAIqnG,EAAmB,GAEnBr7H,EAAKJ,QAAQojB,QAAUhjB,EAAKJ,QAAQojB,OAAO1f,SAC3C+3H,EAAmBr7H,EAAKJ,QAAQojB,OAAO7d,QAAO,SAAU6b,GACpD,IAAIywC,EAASjuD,EAAAA,EAAAA,KAAAA,wBAAgCwd,EAAE1L,KAC/C,OAAOm8C,GAAUA,EAAOjoD,QAAQhG,EAAAA,EAAAA,KAAAA,MAAAA,YAA4BiB,EAAM6Q,IAAI9L,QAAQhG,EAAAA,EAAAA,KAAAA,MAAAA,cAItD,IAA5B63H,EAAiB/3H,SACjB+3H,EAAmBr7H,EAAKgjB,OAAO7d,QAAO,SAAU6b,GAC5C,OAAOA,EAAE1L,IAAI9L,QAAQhG,EAAAA,EAAAA,KAAAA,MAAAA,YAA4BiB,EAAM6Q,IAAI9L,QAAQhG,EAAAA,EAAAA,KAAAA,MAAAA,cAG3C,IAA5B63H,EAAiB/3H,QACjBtD,EAAKgjB,OAAOzc,QAAQ9B,GACpBA,EAAMgV,yBAAyB9a,MAAK,WAChC8F,EAAM60H,iBAAmB70H,EAAMvE,KAAKk7H,oBAAoBp7H,EAAKzB,IAAI4I,KACjE1C,EAAM+F,MAAQ/F,EAAM+F,OAAS/F,EAAMvE,KAAK22H,kBACxC72H,EAAKu5H,aAAa90H,GAAO,WACrB3F,WAGHA,QAIjB49C,EAAS98B,SAAW,SAAUvgB,GAC1B,MAAMW,EAAOC,KACb,IAAK,IAAIkC,EAAI,EAAG+I,EAAMlL,EAAKgjB,OAAO1f,OAAQnB,EAAI+I,EAAK/I,IAAK,CACpD,MAAMsC,EAAQzE,EAAKgjB,OAAO7gB,GAC1B,GAAIsC,EAAMpF,KAAOA,EAAI,CAGjB,IAAIi8H,EAAct7H,EAAKJ,QAAQojB,OAAO7d,QAAO6b,GAAKA,EAAE3hB,KAAOA,IAQ3D,OANIi8H,EAAYh4H,OAAS,EACrBmB,EAAM0O,UAAY1O,EAAM7E,QAAQuT,UAAYmoH,EAAY,GAAGnoH,UAE3D1O,EAAM0O,UAAY1O,EAAM7E,QAAQuT,WAAY,EAGzC1O,GAGf,OAAO,MAGXi4C,EAAS86E,cAAgB,SAAU/yH,EAAOuhB,GACtC,MAAMhmB,EAAOC,KACP4wD,EAAertD,EAAAA,EAAAA,KAAAA,OAAe,GAAIiB,EAAM7E,SAC9CixD,EAAaxxD,GAAKW,EAAK4mC,SACvBiqB,EAAazzC,WAAa,CAAC4I,GAC3B6qC,EAAarmD,MAAQ/F,EAAM+F,MAC3BqmD,EAAa39C,UAAW,EACxB,MAAMo3C,EAAW,IAAIttC,EAAAA,EAAO6zC,GACxBvG,EAAS12C,aAAa5T,EAAKzB,IAAI4I,KAC/BnH,EAAKzB,IAAI8rD,SAASwG,GAj8BS,SAAU7C,EAAKvpD,GAC9CupD,EAAIuvB,2BAA2B,CAC3B94E,MAAOA,EACPopE,cAAe,WACX7f,EAAIpqC,cAAcoqC,EAAIutE,aAAa/zH,SAAQ,SAAUkN,GACjDA,EAAKspB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2U,EAAKuD,cAAc,QAAQqmC,QAAQqsC,QAAU38B,EAAIpsB,gBAAgB,yBA87BzE27C,CAA2Bv9E,EAAMsqD,IAIzC5N,EAAS9iC,OAAS,WACd,OAAO3Z,KAAKq2H,eAGhB55E,EAAS8+E,gBAAkB,SAAU57H,GACjC,MAAMI,EAAOC,KAEb,OADAL,EAAUA,GAAW,GACdI,EAAKzB,IAAIojB,iBAAiB,CAC7BqB,OAAQhjB,EAAKzB,IAAI4rC,WAAW7hC,OAAOtI,EAAKzB,IAAI8wB,UAAWzvB,EAAQ6E,OAC/DkwD,kBAAkB,KAI1BjY,EAAStnC,cAAgB,SAAUxV,GAC/B,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GAErB4D,EAAAA,EAAAA,YAAe,CACX2D,IAAKvH,EAAQuH,IACbqxB,SAAU,WACNx4B,EAAKzB,IAAI6W,cAAcxV,GAASjB,MAAK,WAC7BqB,EAAKu7H,aACLv7H,EAAKzB,IAAI8rD,SAASrqD,EAAKu7H,aAE3B/3H,EAAAA,EAAAA,KAAAA,oBAMhBk5C,EAAS6gC,2BAA6B,SAAU39E,GAC/BK,KACRs7H,YAAc37H,EAAQ6E,MAC3B49E,EAAAA,QAAAA,UAAAA,2BAAAA,KAFapiF,KAEsDL,IA/+B3E,GAo/BA4D,EAAAA,EAAAA,QAAAA,aAA0B0yH,EAC1B,W,0FC/kCA1yH,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMi4H,EAAS,WACX9/C,EAAAA,QAAAA,MAAkB17E,KAAMgd,YAK5B,IACQy/B,EAHRl5C,EAAAA,EAAAA,QAAWi4H,EAAQ9/C,EAAAA,UAGXj/B,EAAW++E,EAAOh7H,WAEb87C,MAAQ,gBAEjBG,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAab,OAXA1B,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACtC,MAAM0qC,EAAO1qC,EAAE0qC,KACTgyF,EAAa17H,EAAK27H,aAAax7E,KAAKngD,GAEtC0pC,IAAS3pC,EAAAA,EAAAA,KAAAA,OACTxB,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,SAAuB27H,GACvBhyF,IAAS3pC,EAAAA,EAAAA,KAAAA,SAChBxB,EAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,SAAuB27H,MAIhC//C,EAAAA,QAAAA,UAAAA,SAAAA,KAAoC37E,EAAMzB,IAGrDm+C,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBC,EAAsB,+BAEtBx0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBuhC,GAAqBvvE,QAC7DvO,EAAKsJ,SAAWA,GAGpBozC,EAASi/E,aAAe,WACpB,MAAM37H,EAAOC,KACbD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,MAAM15E,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SACvCza,GACA05E,EAAGxyE,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,iBAAiB/0C,SAAQ,SAAUwZ,GACxEA,EAAErV,iBAAiB,OAAOnE,SAAQ,SAAUoE,GACpCA,GAAOA,EAAIgyB,aAAa,QAA6C,IAAnChyB,EAAIiyB,aAAa,OAAOv6B,QAC1DtD,EAAK67H,iBAAiBjwH,EAAKnH,aAQnDi4C,EAAS6hC,YAAc,WACnB,MAAMv+E,EAAOC,KACP67H,EAAU97H,EAAKu8C,MAAQ,gBACvBw/E,EAAa/7H,EAAKu8C,MAAQ,mBAEhCv8C,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,MAAM15E,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SAE3C,GAAIza,IAAUA,EAAMkhB,aAAe,CAC/B,IAAIq2G,GAAgB,EACpB,MAAMx8C,EAAMrB,EAAGxyE,iBAAiB,MAChC6zE,EAAIh4E,SAAQ,SAAUwZ,GAClB,GAAIA,EAAEgd,UAAU8gB,SAAS9+C,EAAKu8C,MAAQ,iBAAkB,CACpD,MAAMloC,EAAM2M,EAAEs9B,QAAQugC,SAClBp6E,EAAMuP,iBAAiBK,IACvB2nH,GAAgB,EAChBh7G,EAAEgd,UAAUC,OAAO89F,GACnB/6G,EAAEgd,UAAUnjB,IAAIihH,GAChB96G,EAAErV,iBAAiB,OAAOnE,SAAQ,SAAUoE,GACxC5L,EAAK67H,iBAAiBjwH,EAAKnH,QAI/Buc,EAAEgd,UAAUnjB,IAAIkhH,GAChB/6G,EAAEgd,UAAUC,OAAO69F,QAI/BE,EAAgBA,IAAkBx8C,EAAIl8E,OACjCk8E,EAAIl8E,QACL66E,EAAGxyE,iBAAiB,OAAOnE,SAAQ,SAAUoE,GACzC5L,EAAK67H,iBAAiBjwH,EAAKnH,MAGnC05E,EAAGngD,UAAUS,OAAOq9F,EAASE,GAC7B79C,EAAGngD,UAAUS,OAAOs9F,GAAaC,QAK7Ct/E,EAASihC,OAAS,WACd,MAAM39E,EAAOC,KAEbD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,MAAM15E,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SAC3C,GAAIza,KAAWA,EAAMkhB,eAAiBlhB,EAAM6O,iBAAkB,CAC1D,MAAMmB,EAAOhQ,EAAM0P,SAAQ,GAAO,GAElCgqE,EAAGxyE,iBAAiB,MAAMnE,SAAQ,SAAUwZ,GACxC,MAAMhc,EAAUhF,EAAKu8C,MAAQ,gBACvB0/E,EAAaj8H,EAAKu8C,MAAQ,mBAC1B2/E,EAAal8H,EAAKu8C,MAAQ,mBAEhC,OAAQ93C,EAAMwQ,kBAAkB+L,EAAEs9B,QAAQugC,SAAUpqE,IAChD,KAAK1U,EAAAA,EAAAA,WAAAA,QACDihB,EAAEgd,UAAUC,OAAOg+F,EAAYC,GAC/Bl7G,EAAEgd,UAAUnjB,IAAI7V,GAChB,MACJ,KAAKjF,EAAAA,EAAAA,WAAAA,YACDihB,EAAEgd,UAAUC,OAAOj5B,EAASk3H,GAC5Bl7G,EAAEgd,UAAUnjB,IAAIohH,GAChB,MACJ,KAAKl8H,EAAAA,EAAAA,WAAAA,YACDihB,EAAEgd,UAAUC,OAAOj5B,EAASi3H,GAC5Bj7G,EAAEgd,UAAUnjB,IAAIqhH,GAChB,MACJ,KAAK,KAEDl7G,EAAEgd,UAAUC,OAAOj5B,EAASk3H,GAC5Bl7G,EAAEgd,UAAUnjB,IAAIohH,GAChB,MACJ,QAEIj7G,EAAEgd,UAAUC,OAAOg+F,EAAYC,GAC/Bl7G,EAAEgd,UAAUnjB,IAAI7V,OAK5BhF,EAAKm8H,sBAAsB13H,OAGnCzE,EAAKu+E,eAGT7hC,EAAS8hC,gBAAkB,SAAU/5E,GACjC,IAAIzE,EAAOC,KAEX,IAAKwE,EAAMuO,SAAWvO,EAAM7E,QAAQ0vB,QAAS,CAIrC7qB,EAAMyO,UAAYzO,EAAM7E,QAAQsT,SAQpClT,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClE,IAAIod,EAAS1Y,EAAM4f,cAAgB5f,EAAM4f,gBAAkB5f,EAAM0P,UAC7D1P,EAAM23H,QAAU33H,EAAM23H,SAAW33H,EAAM+F,QACvC2S,EAAS/d,OAAOmD,OAAO4a,EAAO,CAAE,MAAS1Y,EAAM23H,UACnDp8H,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAASp/B,GACtCxe,MAAK,SAAUggF,GACZ,MACMC,GADS,IAAInhE,WACEE,gBAAgBghE,EAAK,aAAah9C,KAAKxqB,WACtD9C,EAAMuqE,EAAMtgC,QAAQugC,SACpBC,EAAK9+E,EAAK2M,IAAIsL,cAAc,MAAQjY,EAAKu8C,MAAQ,WACjDijC,EAAMV,EAAGnzE,iBAAiB,sBAAwB0I,EAAM,MAC9D,GAAmB,IAAfmrE,EAAIl8E,OAAc,CAClB,MAAM66E,EAAKqB,EAAI,GACXrB,EAAG/wE,YAAcwxE,EAAMxxE,YACvB+wE,EAAG/wE,UAAYwxE,EAAMxxE,UACrB+wE,EAAG9wD,aAAa,QAASuxD,EAAM/gD,aAAa,gBAKhD+gD,EAAMtgC,QAAQp/B,QAAUza,EAAMpF,GAC9By/E,EAAGt8C,aAAao8C,EAAOE,EAAG3nE,YAG9BnX,EAAK29E,YAERvnE,OAAM,SAAUsD,GACblW,EAAAA,EAAAA,MAASkW,QAKzBgjC,EAASqO,YAAc,SAAUtmD,GACxBA,EAAMuO,QACP2oE,EAAAA,QAAAA,UAAAA,YAAAA,KAAuC17E,KAAMwE,IAIrDi4C,EAASy/E,sBAAwB,SAAU13H,GACvC,IAAIzE,EAAOC,KACXD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACpCA,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,IAC7B8+E,EAAGngD,UAAUS,OAAOz+B,EAAKu8C,MAAQ,oBAAqB93C,EAAM6O,qBAKxEopC,EAASk/E,mBAAqB,WAC1B,MAAM57H,EAAOC,KACb,OAAOD,EAAK2M,IAAIsL,cAAc,MAAQjY,EAAKu8C,MAAQ,WAAW5wC,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,UAI5G/4C,EAAAA,EAAAA,QAAAA,OAAoBi4H,EACpB,W,0FCnNAj4H,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM64H,UAAwBpI,EAAAA,QAC1Bv0H,cACIG,SAASod,WACT,MAAMjd,EAAOC,KACbD,EAAKu1B,aAAex1B,EAAAA,EAAAA,KAAAA,SACpBC,EAAK4F,MAAQpC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,CAAEuoC,YAAa/rC,EAAKijG,qBAAsBj3D,YAAa,GAAKhsC,EAAKJ,QAAQgG,QAInHpC,EAAAA,EAAAA,QAAAA,gBAA6B64H,EAC7B,W,gFCdA74H,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,QAAqB84H,EAAAA,QACrB,MACA,EADgB94H,EAAAA,EAAAA,QAAAA,S,8nBCAhBA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAAG,IAAA+4H,EAAA,IAAA95H,QAE9B,MAAMusH,UAAyBhkH,EAAAA,EAG3BtL,cACIG,SAASod,WAAWra,EAAA,KAAA25H,EAAA,CAAA15H,UAAA,EAAAC,MAHf,KAIL,MAAM9C,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5B7qC,OAAO7F,iBAAiB,SAAS,WAG7B,OAFA7L,EAAKogB,SAEE,KACR,GAGPo8B,eACI,MAAO,cAGX3xC,sBACI,MACMvL,QAAe,6BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3B1D,eAAetM,GACX,MAAMyB,EAAOC,KAkCb,aAjCMJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAChCA,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA8B,IAC9BA,EAAAA,EAAAA,MAAAA,kBAAiC,IACjCA,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GACtCgB,EAAKw8H,UAAUx9H,MAEtBsP,GAAGvO,EAAAA,EAAAA,MAAAA,SAAwB,IACxBA,EAAAA,EAAAA,MAAAA,WAA0B,IAC1BA,EAAAA,EAAAA,MAAAA,YAA2B,IAC3BA,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAChCgB,EAAKy8H,SAASz9H,MAErBsP,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,WAChCC,EAAKqnD,QAAQtnD,EAAAA,EAAAA,MAAAA,gBAEhBuO,GAAGvO,EAAAA,EAAAA,MAAAA,YAA2B,IAC3BA,EAAAA,EAAAA,MAAAA,cAA6B,IAC7BA,EAAAA,EAAAA,MAAAA,kBAA+B,WAC3BC,EAAKwnD,WAAWznD,EAAAA,EAAAA,MAAAA,gBAEvBuO,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCgB,EAAK08H,QAAQ19H,MAGhBwE,EAAAA,EAAAA,SAEDkO,OAAO7F,iBAAiB,SAAS,SAAU8wH,EAAMC,EAAMC,EAAOC,EAAMtpD,GAEhE,OADAxzE,EAAKogB,SACE,KAIRpgB,EAGXw8H,UAAUx9H,GACN,MAAMgB,EAAOC,KACPif,EAAUlgB,EAAEyF,MAAMpF,QACKgF,IAAzBrB,EAAAhD,EAAIu8H,GAAQr9G,KACZlc,EAAAhD,EAAIu8H,GAAQr9G,GAAW,GAE3Blc,EAAAhD,EAAIu8H,GAAQr9G,GAAWlc,EAAAhD,EAAIu8H,GAAQr9G,GAAW,EAC9Clf,EAAK28C,OAEL38C,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cAGrB08H,SAASz9H,GACL,MAAMgB,EAAOC,KACPif,EAAUlgB,EAAEyF,MAAMpF,GACxB,IAAI8nD,EAAOnkD,EAAAhD,EAAIu8H,GAAQr9G,GACnBioC,EAAO,IACPA,EAAOnkD,EAAAhD,EAAIu8H,GAAQr9G,GAAWioC,EAAO,GAEpCA,UACMnkD,EAAAhD,EAAIu8H,GAAQr9G,GAET9f,OAAOD,KAAI6D,EAAChD,EAAIu8H,IAASj5H,SAEnCtD,EAAKuF,OACLvF,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cAIzB28H,QAAQ19H,GACJ,MAAMgB,EAAOC,KACPif,EAAUlgB,EAAEyF,MAAMpF,GACb2D,EAAAhD,EAAIu8H,GAAQr9G,GACZ,UACAlc,EAAAhD,EAAIu8H,GAAQr9G,GAET9f,OAAOD,KAAI6D,EAAChD,EAAIu8H,IAASj5H,SAEnCtD,EAAKuF,OACLvF,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cAIzBqgB,MAAMxS,GACF,MAAM5N,EAAOC,KACbgD,EAAAjD,EAAIu8H,EAAU,IACdv8H,EAAKuF,OACLvF,EAAKzB,KAAOyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAGjCsnD,QAAQhzC,GACJ,MACMxP,EAASwP,GAAO7Q,EAAAA,EAAAA,SAEtB,OAHavD,KAERu8H,UAAU,CAAE/3H,MAAO,CAAEpF,GAAIwF,KACvBA,EAGX2iD,WAAWnzC,GACPpU,KAAKw8H,SAAS,CAAEh4H,MAAO,CAAEpF,GAAIgV,MAIrC7Q,EAAAA,EAAAA,QAAAA,iBAA8BwrH,EAC9B,W,oGC/HAxrH,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMm4E,EAAc,WAChB,IAAI37E,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAK0+E,WAAa,IAGtBl7E,EAAAA,EAAAA,QAAWm4E,EAAa3wE,EAAAA,GAExB,WACI,IAAI0xC,EAAWi/B,EAAYl7E,UAE3Bi8C,EAASH,MAAQ,YAEjBG,EAASI,OAAS,SAAUtkB,EAAU54B,GAClC,MAAMI,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKzB,IAAMyB,EAAKg9C,WAAWp9C,EAAU4D,EAAAA,EAAAA,KAAAA,OAAexD,EAAKzB,IAAI80D,eAAgBzzD,GAAWI,EAAKzB,IAAI80D,gBAAgB,WAC9IrzD,EAAKi9C,sBACmB,mBAAbzkB,GACPA,OAEH35B,QAAQ6W,OAAOzW,MAAM,wCAG9By9C,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,WACPpB,QAAQwiB,IAAI,CAACrW,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAAMyB,EAAKsL,kBACpE,IAAK,IAAInJ,EAAI,EAAG+I,EAAM3M,EAAIykB,OAAO1f,OAAQnB,EAAI+I,EAAK/I,IAC9CnC,EAAKw+E,gBAAgBjgF,EAAIykB,OAAO7gB,IAiEpC,OA9DA5D,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,KAAoB,IAAMA,EAAAA,EAAAA,MAAAA,kBAA+B,WACzDC,EAAKu+E,iBAERjwE,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACrC,MAAMyF,EAAQzF,EAAEyF,MAChB,IAAIyW,EAAQzW,EAAMyW,OACC,SAAS6hH,EAAaroH,GACrC,IAAI7P,GAAS,EACb,GAAI6P,EACA,GAAIwG,EAAMjS,QAAQyL,EAAK5L,OAAS,EAC5BjE,GAAS,OAGT,IAAK,IAAI1C,EAAI,EAAGA,EAAIuS,EAAKJ,SAAShR,OAAQnB,IACtC,GAAI46H,EAAaroH,EAAKJ,SAASnS,IAAK,CAChC0C,GAAS,EACT,MAKhB,OAAOA,EAEPk4H,CAAa/8H,EAAK0+E,WAAWj6E,EAAMpF,MAAyB,IAAjB6b,EAAM5X,OAIjDtD,EAAKw+E,gBAAgB/5E,GAHrBzE,EAAK29E,OAAO39E,aAAgBwD,EAAAA,EAAAA,QAAAA,qBAA6Ba,EAAYI,MAM5E6J,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,SAAUf,GACxCgB,EAAKm8H,sBAAsBn9H,EAAEyF,UAEhC6J,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACjCgB,EAAKw+E,gBAAgBx/E,EAAEyF,UAE1B6J,GAAGvO,EAAAA,EAAAA,MAAAA,aAA4B,IAAMA,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACtG,MAAMyF,EAAQzF,EAAEyF,MAEhBzE,EAAKg9H,yBAA2Bh9H,EAAKg9H,0BAA4B,GAC7Dh9H,EAAKg9H,yBAAyBv4H,EAAMpF,KACpC4nD,aAAajnD,EAAKg9H,yBAAyBv4H,EAAMpF,KAErDW,EAAKg9H,yBAAyBv4H,EAAMpF,IAAM6nD,YAAW,WAC7ClnD,EAAKzB,IAAI4rC,WAAWlhC,QAAQxE,IAAU,IAEtCzE,EAAKw+E,gBAAgB/5E,UACdzE,EAAKg9H,yBAAyBv4H,EAAMpF,OAEhD,QAENiP,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpCgB,EAAK+qD,YAAY/rD,EAAEyF,UAEtB6J,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnCgB,EAAKq/E,iBAAiBrgF,EAAEyF,MAAOzF,EAAE+zD,SAAU/zD,EAAEg0D,aAEhD1kD,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnCgB,EAAKy/E,aAAazgF,EAAEyF,UAGrBzE,GAGX08C,EAAS6hC,YAAc,aAGvB7hC,EAASy/E,sBAAwB,SAAUpvE,KAG3CrQ,EAAS8hC,gBAAkB,SAAU/5E,GACjCA,EAAMgQ,KAAO,KACbxU,KAAKy+E,WAAWj6E,EAAMpF,IAAMoF,EAAM0P,WAGtCuoC,EAAS2iC,iBAAmB,SAAU56E,EAAOw4H,EAAQC,EAAQ5jG,GACzD,MAAMt5B,EAAOC,KACb,GAAIg9H,GAAU,GAAKA,IAAWC,EAAQ,CAClC,IAAIC,EAAYC,EAChB,MAAMC,EAAOr9H,EAAK47H,qBAIlB,IAAK,IAAIz5H,GAFTm3B,EAAaA,GAAct5B,EAAKzB,IAAI4rC,YAEZ7mC,OAAS,EAAGnB,GAAK,EAAGA,IAAK,CAC7C,MAAM6e,EAAIsY,EAAWn3B,GACrBi7H,EAAcD,EACd,IAAK,IAAI5lH,EAAI,EAAGypF,EAAKq8B,EAAK/5H,OAAQiU,EAAIypF,EAAIzpF,IAAK,CAC3C,MAAM9P,EAAM41H,EAAK9lH,GACjB,GAAI9P,EAAI62C,QAAQp/B,UAAY8B,EAAE3hB,GAAI,CAC9B89H,EAAa11H,EACb,OAGR,GAAIuZ,IAAMvc,EAAO,CACT04H,IACIC,EACAA,EAAYj+C,sBAAsB,WAAYg+C,GAG9CA,EAAW1gE,cAActlD,WAAWgoE,sBAAsB,cAAeg+C,IAGjF,UAMhBzgF,EAASqO,YAAc,SAAUtmD,GAC7B,MAAMzE,EAAOC,KACPq9H,EAAet9H,EAAK47H,qBAC1B,IAAK,IAAIz5H,EAAI,EAAG+I,EAAMoyH,EAAah6H,OAAQnB,EAAI+I,EAAK/I,IAAK,CACrD,MAAMg8E,EAAKm/C,EAAan7H,GACxB,GAAIg8E,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,GAAI,CACjC8+E,EAAG1hB,cAAcC,YAAYyhB,GAC7B,OAGiC,IAArCn+E,EAAK47H,qBAAqBt4H,QAC1BtD,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUve,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAI7E28C,EAAS+iC,aAAe,SAAU1yB,KAElCrQ,EAASk/E,mBAAqB,WAC1B,OAAO37H,KAAK0M,IAAIsL,cAAc,MAAM3D,UAWxCooC,EAASm/E,iBAAmB,SAAUjwH,EAAKnH,GACvC,IAAKmH,EAAIiyB,aAAa,OAAQ,CAC1B,IAAI0/F,EAAS3xH,EAAI0yC,QAAQ1yC,IAEzB,MAAMwH,EAAoB,IAAIC,EAAAA,QAAc7P,EAAAA,EAAAA,SAE5C,GAAIiB,GAASA,EAAM7E,QAAQsuB,QAAmC,SAAzBzpB,EAAM7E,QAAQsuB,OAC/CzpB,EAAM0mB,wBACDxsB,MAAK,SAAUiT,GACZhG,EAAIgG,IAAMA,KACXwE,OAAM,SAAUsD,GACflW,EAAAA,EAAAA,MAASkW,EAAI+T,YAAc/T,UAEhC,CACH,GArBD,gCAAgCwoB,KAqBRq7F,GAAS,CAC5B,MAAMjO,EAAQ1jH,EAAI6wD,cAElB,IAAI+gE,EAAWlO,EAAM1pH,MAAM4rE,MAEvBisD,EAAUD,EAASv0H,QAAQ,KAC3By0H,EAAWF,EAASv0H,QAAQ,KAChC,GAAIw0H,GAAW,GAAKC,EAAWD,EAAS,CACpC,IAAIjsD,EAAQgsD,EACP32G,OAAO,EAAG62G,GACV72G,OAAO42G,EAAU,GACjBrrH,MAAM,KACXorH,EAAW,KACX,IAAK,IAAIr7H,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAIw7H,EAAYplH,SAASi5D,EAAMrvE,IAAI+gB,SAAS,IAC5Cs6G,GAAiC,IAArBG,EAAUr6H,OAAe,IAAMq6H,EAAYA,QAI3DH,EAASh0H,QAAQ,IAAK,MAE1B+zH,GAAU,4BAA8BjO,EAAM1pH,MAAMg4H,WAChD,aAAerlH,SAAS+2G,EAAM1pH,MAAM0mC,UACpC,cAAgBkxF,EAChB,yBACA/4H,EAAM0Y,QAAU1Y,EAAM0Y,OAAOI,WAC7BggH,EAAS/5H,EAAAA,EAAAA,KAAAA,iBAAyB+5H,EAAQ,CAAEhgH,SAAU9Y,EAAM0Y,OAAOI,YAGvEnK,EAAkBsZ,WAAW6wG,GAAQ5+H,MAAK,SAAUiN,GAChDA,EAAI0yC,QAAQ1yC,IAAMA,EAAIgG,OACvBwE,OAAM,SAAUsD,GACflW,EAAAA,EAAAA,MAASkW,EAAI+T,YAAc/T,MAInCtG,EAAkBsZ,WAAW6wG,GAAQ5+H,MAAK,SAAUwD,GAChDyJ,EAAIgG,IAAMzP,EAAEyP,OACbwE,OAAM,SAAUsD,IACXA,EAAIoS,QAA0B,MAAfpS,EAAIoS,QAAiC,MAAfpS,EAAIoS,OAGpC1Y,EAAkByqH,OAAOC,UAAUC,wBAA0BrkH,EAAIkE,SACtEpa,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBiB,EAAMlG,IAAIqB,QAAQyJ,OAAQ,2BAE3DuC,EAAIgG,IAAM7R,EAAAA,EAAAA,aAGVyD,EAAAA,EAAAA,MAASkW,GARTlW,EAAAA,EAAAA,MAASA,EAAAA,EAAAA,KAAAA,gBAAwBiB,EAAMlG,IAAIqB,QAAQyJ,OAAQ,uBACvD,CAAEiM,IAAKioH,WAvNnC,GAsOA/5H,EAAAA,EAAAA,QAAAA,YAAyBm4E,EACzB,W,oGCnPAn4E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMwiF,EAAU,WACZ,IAAIhmF,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,YAKxB,IACQy/B,EAHRl5C,EAAAA,EAAAA,QAAWwiF,EAASh7E,EAAAA,IAGZ0xC,EAAWspC,EAAQvlF,WAEd87C,MAAQ,YAEjBG,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAEP4E,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GASrD,OAPAyB,EAAKg+H,kBAAoB,IACzBh+H,EAAKi+H,mBAAqB,KAE1Bj+H,EAAKy8C,cAAe,EAEpBz8C,EAAKk+H,qBAAmD75H,IAAjCrE,EAAKJ,QAAQs+H,iBAAiCl+H,EAAKJ,QAAQs+H,gBAE3Er5H,GAGX63C,EAAS2f,oBAAsB,WAC3B,MAAMr8D,EAAOC,KACb,OAAID,EAAKzB,IACEyB,EAAKzB,IAAI89D,sBAEb,IAGX3f,EAASuR,oBAAsB,SAAUkwE,GACrC,MAAMn+H,EAAOC,KACTD,EAAKzB,KACLyB,EAAKzB,IAAI0vD,oBAAoBkwE,IAIrCzhF,EAAS/hB,YAAc,WACnB,MAAM36B,EAAOC,KACb,GAAID,EAAKy8C,aAAc,CACnB,MAAM3nC,EAAQ,GACd,GAAI9U,EAAK6vG,gBAAkB7vG,EAAK8vG,oBAAqB,CACjD,IAAIF,EAEJ,GADA96F,EAAMzV,GAAKW,EAAKX,GACZW,EAAK6vG,eAAgB,CACrB,MAAMA,EAAiB7vG,EAAK6vG,eAAeplG,QAC3ColG,EAAevrG,YAAa,EAC5BsrG,EAAa5vG,EAAK6vG,eAAeprG,MAAMk2B,YAAY,CAC/C5rB,SAAU,CAAC8gG,UAGfD,EAAa5vG,EAAK8vG,oBAAoBn1E,cAE1C7lB,EAAM/F,SAAW6gG,EAAW7gG,SACxB6gG,EAAWzoG,MACX2N,EAAM3N,IAAMyoG,EAAWzoG,KAG/B,OAAO2N,EAEX,OAAO,MAGX4nC,EAAS0C,YAAc,SAAUtqC,GAC7B,MAAM9U,EAAOC,KACTD,EAAKzB,KAAOuW,EAAM/F,SAASzL,QAC3BtD,EAAKzB,IAAI8rD,SAAS,CACdhrD,GAAIW,EAAK4mC,SACTy+C,MAAOrlF,EACPoK,KAAMrK,EAAAA,EAAAA,UAAAA,OACNyK,MAAOxK,EAAK4hC,gBAAgB,OAC5BtS,SAAS,IACV3wB,MAAK,SAAU8F,GACdzE,EAAK8vG,oBAAsBrrG,EAC3BA,EAAM26C,YAAY,CAAErwC,SAAU+F,EAAM/F,SAAU5H,IAAK2N,EAAM3N,MAAOxI,MAAK,WACjEqB,EAAKzB,IAAI6uD,eAAe3oD,EAAMsK,iBAM9C2tC,EAASwrC,sBAAwB,WAC7B,KAAM,yDAGVxrC,EAASorC,aAAej9E,iBACpB,IAAI7K,EAAOC,KAEPm+H,EAAa1sH,OAAOY,SAASR,KAC7BusH,EAAeD,EAAWn1H,QAAQ,KAKtC,GAJIo1H,EAAe,IACfD,EAAaA,EAAWhlG,UAAU,EAAGilG,IAGrCr+H,EAAKs+H,YAAa,CAElB,IAAInhH,EAAS3Z,EAAAA,EAAAA,KAAAA,qBAA6B46H,GAC1C56H,EAAAA,EAAAA,KAAAA,OAAe2Z,EAAQnd,EAAKs+H,aAC5B,IAAIC,EAAaH,EAAWn1H,QAAQ,KAChCs1H,GAAc,IACdH,EAAaA,EAAWhlG,UAAU,EAAGmlG,IAEzCH,EAAaA,EAAW91H,OAAO,IAAK9E,EAAAA,EAAAA,KAAAA,eAAuB2Z,QAE1D,CAED,IAAIqxD,EAAQ4vD,EAAWn1H,QAAQ,KAG3BulE,EAAQ,IACR4vD,EAAaA,EAAW50H,QAAQ40H,EAAWhlG,UAAUo1C,GAAQ,KAIrE,MAAMlS,EAAgBt8D,EAAKk+H,gBAAkBl+H,EAAKq8D,sBAAwB,IACrEr8D,EAAKk+H,iBAAmBl+H,EAAKy8C,eAAiBz8C,EAAK6vG,gBAAkB7vG,EAAK8vG,qBAAuB9vG,EAAKmL,QAAUnL,EAAKmL,OAAOq9F,WACzHxoG,EAAKmL,QAAUnL,EAAKmL,OAAOq9F,QAC3BlsC,EAAcj0D,KAAKrI,EAAKmL,OAAOwvB,eAE/B2hC,EAAcj0D,KAAKrI,EAAK26B,gBAGhC,MAAM8uB,EAAc6S,EAAch5D,OAAS,CAAE0qD,IAAKsO,QAAkBj4D,EAEpE,IAAIm6H,QAAkBx+H,EAAKzB,IAAIgwD,YAAY,CAAE9E,YAAaA,EAAaC,YAAa1pD,EAAKk+H,kBAErF5oH,EAAM8oH,EAAW91H,OAAO,IAAKk2H,GAEjC,OADAx+H,EAAKkoF,sBAAsB,CAAE3b,QAASj3D,EAAIhS,OAASvD,EAAAA,EAAAA,eAAuBsoF,GAAI/yE,EAAIhS,OAAStD,EAAKi+H,qBACzF3oH,GAGXonC,EAAS+hF,cAAgB5zH,iBACrB,MAAM7K,EAAOC,KACb,IAAIknD,EAkBJ,MAiBMmI,EAAU,WAGZ,OAFAtvD,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,0BAA2B,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,QACvEC,EAAKzB,IAAIw1D,sBAAsBvM,WAAWL,GACnC,IAGL7xC,QAAYtV,EAAK8nF,eACvB,GAAIxyE,EAAIhS,OAAStD,EAAKg+H,mBAAqB1oH,EAAIhS,OAAStD,EAAKi+H,mBAAoB,CAE7E92E,EAAOnnD,EAAKzB,IAAIw1D,sBAAsB1M,UAEtC,MAAMp7B,QA5BS,SAAU3W,GACzB,IAEIlR,EAAO,IAAIs6H,SAIf,OAHAt6H,EAAK8/B,OAAO,MAAO5uB,GAEO,IAAIjC,EAAAA,QAAc7P,EAAAA,EAAAA,QAAY,CAAEm7H,qBAAqB,IACtD/oH,MAND,qCAM0B,CAC9CxL,KAAM,OACNhG,KAAMA,IACPzF,MAAK,SAAUyF,GACd,OAAOA,KACRgS,OAAM,SAAUo9D,GACf,OAAO,QAeYxC,CAAW17D,GAClC,OAAI2W,GAAYA,EAASjW,cACrBhW,EAAKzB,IAAIw1D,sBAAsBvM,WAAWL,GACnCl7B,EAASjW,aAAaxM,QAAQ,UAAW,aAEzC8lD,IAGX,OAAIh6C,EAAIhS,QAAUtD,EAAKi+H,mBACZ3uE,IAGJ,IAIf5S,EAASmqC,WAAah8E,eAAgB+7E,EAAer0D,GACjD,MACMqsG,EAAgB,oCAChBtpH,QAFOrV,KAEUw+H,iBAAmB,GAC1C,GAAInpH,EAAIhS,OAAS,EAAG,CAChB,MAAM1D,EAAU,CACZyZ,KAAM/D,EACNupH,OAAQ,GAGRtsG,IACA3yB,EAAQ2yB,MAAQA,GAGpBq0D,EAAcx5E,UAAY,GAC1B,MAAMxB,EAAMgB,SAASC,cAAc,OAC7BiyH,SAAgBF,GAAerwH,QAGrC,OAFA3C,EAAIgG,UAAYktH,EAAOthE,UAAUloD,EAAK1V,GACtCgnF,EAAc95E,YAAYlB,GACnBA,EAAIgG,MAInB8qC,EAAS+pC,uBAAyB,SAAU7mF,GAExC,IAAI09D,EACAyhE,EAFS9+H,KAEC1B,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,UACrC,GAAkB,IAAdu7H,EAAGz7H,OACH,OAAO,KA4BX,IAAI6vE,GAHA7V,GAtBJ19D,EAAUA,GAAW,IAmBR09D,OAGA19D,EAAQ09D,OAFR1wD,SAASC,cAAc,WAKnB2lE,WAAW,MAC5BW,EAAIq+B,OAEJ,IASIj/E,EAAOC,EARP9d,EADO9H,SAAS6xF,uBAAuB,uBAC3Bx0F,KAAK,GACjB+0H,EAAax7H,EAAAA,EAAAA,KAAAA,OAAe,GAAIkR,EAAKq6C,yBAErC11C,EAAO3E,EAAK1G,YAEhBmlE,EAAI8rD,YACJ9rD,EAAI+rD,YAAcxtH,OAAOs1D,iBAAiBtyD,GAAMyqH,YAI5CH,EAAWzsG,MAAQysG,EAAWxsG,QAE9BD,EAAQysG,EAAWzsG,MACnBC,EAASwsG,EAAWxsG,SAIpBD,EAAQysG,EAAWxsG,OACnBA,EAASwsG,EAAWzsG,OAGpB3yB,EAAQw/H,UACR9hE,EAAO/qC,MAAQA,EACf+qC,EAAO9qC,OAASA,GAGpBwsG,EAAW3qD,UAAwBhwE,IAAjBzE,EAAQy0E,KAAqBz0E,EAAQy0E,KAAO,GAC9D2qD,EAAW5qD,SAAsB/vE,IAAhBzE,EAAQw0E,IAAoBx0E,EAAQw0E,IAAM,GAE3DjB,EAAIo2C,OAAOyV,EAAW3qD,KAAM2qD,EAAW5qD,KACvCjB,EAAIksD,OAAOL,EAAW3qD,KAAM2qD,EAAW5qD,IAAM5hD,GAC7C2gD,EAAIksD,OAAOL,EAAW3qD,KAAO9hD,EAAOysG,EAAW5qD,IAAM5hD,GACrD2gD,EAAIksD,OAAOL,EAAW3qD,KAAO9hD,EAAOysG,EAAW5qD,KAE/CjB,EAAI39D,SAEJ,IAAI8pH,EAAe,CACf1xG,EAAGoxG,EAAW3qD,KAAO9hD,EAAQ,EAC7B1E,EAAGmxG,EAAW5qD,IAAM5hD,EAAS,GAejC,OAZI5yB,EAAQ8mF,MApEK,SAAUvT,EAAK5gD,EAAOC,GACnC,IACI+sG,EADO3yH,SAAS6xF,uBAAuBsgC,EAAG,GAAGxiF,OAC7BtyC,KAAK,GACrBu1H,EAAiBh8H,EAAAA,EAAAA,KAAAA,OAAe,GAAI+7H,EAASxwE,yBAEjDywE,EAAenrD,MAAQz0E,EAAQy0E,MAAQ,IAAM,EAE7CmrD,EAAeprD,IAAMx0E,EAAQw0E,KAAO,GACpCorD,EAAeprD,MAEfjB,EAAIssD,YAAc,GAClBtsD,EAAIP,UAAYlhE,OAAOs1D,iBAAiBu4D,GAAU1yB,gBAClDt6E,GAAS,EACTC,GAAU,EACV2gD,EAAIN,SAAS2sD,EAAenrD,KAAMmrD,EAAeprD,IAAK7hD,EAAOC,GAuD7DktG,CAASvsD,EAAK5gD,EAAOC,GAGzB2gD,EAAIssD,YAAc,EAClBtsD,EAAIP,eAAkCvuE,IAAtBzE,EAAQ+/H,UAA0B//H,EAAQ+/H,UAAYjuH,OAAOs1D,iBAAiBtyD,GAAM88D,MAEpG2B,EAAIysD,UAAwBv7H,IAAjBzE,EAAQggI,KAAqBhgI,EAAQggI,KAAOluH,OAAOs1D,iBAAiBtyD,GAAM43B,SAAW,IAAM56B,OAAOs1D,iBAAiBtyD,GAAMkpH,WACpIzqD,EAAI0sD,UAAY,SAChB1sD,EAAI2sD,aAAe,SACnB3sD,EAAI4sD,SAAS1mH,EAAMimH,EAAa1xG,EAAG0xG,EAAazxG,GAEzCyvC,GAGX5gB,EAASurC,kBAAoB,WACzB,MAAMjoF,EAAOC,KACb,IAAKD,EAAKgoF,oBAAqB,CAC3B,IAAIg4C,EACJ,MAAMpmB,EAAU,SAAUhsG,GACtBq5C,aAAa+4E,GAEbA,EAAiB94E,YAAW,kBACjBlnD,EAAKzB,IAAIorD,oBAChB3pD,EAAKsL,gBAAgB3M,MAAK,WACtBqB,EAAK8nF,oBAEV,MAEP9nF,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,SAAuB65G,GAC9BtrG,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0B65G,GAC7BtrG,GAAGvO,EAAAA,EAAAA,MAAAA,WAAyB65G,GAC5BtrG,GAAGvO,EAAAA,EAAAA,MAAAA,cAA6B,IAAMA,EAAAA,EAAAA,MAAAA,cAA4B65G,GAEvE55G,EAAKgoF,qBAAsB,IAMvCxkF,EAAAA,EAAAA,QAAAA,QAAqBwiF,EACrB,W,kGCzVAxiF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM4oF,EAAU,WACZ,IAAIpsF,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,WACpBjd,EAAK4sC,SAAW5sC,EAAKJ,QAAQgtC,SAE7B5sC,EAAKqtF,aAAe,GACpBrtF,EAAKysF,wBAAyB,EAC9BzsF,EAAKigI,UAAY,IAEjBjgI,EAAKy8C,cAAe,EAEpBx8C,KAAKqL,gBAAgB3M,MAAK,WACtBqB,EAAKkgI,YAAclgI,EAAKJ,QAAQszB,KAEhClzB,EAAKuoD,QAAU,GACfvoD,EAAK8pF,aAAe,EACpB9pF,EAAKogB,OAAQ,EAEbpgB,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,QAAwBxD,OAMhD,IACQ08C,EAHRl5C,EAAAA,EAAAA,QAAW4oF,EAASphF,EAAAA,IAGZ0xC,EAAW0vC,EAAQ3rF,WAEd87C,MAAQ,cAEjBG,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/xC,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAM,CACrEg+E,UAAWh+E,EAAKX,GAChBogD,iBAAkBz/C,EAAKJ,QAAQ6/C,iBAC/BuqC,cAAehqF,EAAKysF,uBACpBjC,iBAAkBxqF,EAAKysF,uBACvBnC,SAAUtqF,EAAKysF,yBAChB,WACKzsF,EAAKJ,QAAQszB,MACblzB,EAAK2M,IAAIsL,cAAc,uBAAuB+lB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAGhEC,EAAK8vF,uBAAyB9vF,EAAK2M,IAAIsL,cAAc,sCACrDjY,EAAK+vF,0BAA4B/vF,EAAK2M,IAAIsL,cAAc,qCACxDjY,EAAK8vF,uBAAuBtxC,iBAAmBx+C,EAC/CA,EAAK8vF,uBAAuBrwC,iBAAmBz/C,EAAKJ,QAAQ6/C,iBAC5Dz/C,EAAK+vF,0BAA0BvxC,iBAAmBx+C,EAElDA,EAAK2M,IAAIhB,iBAAkB,IAAGygF,EAAQ3rF,UAAU87C,0BAA0B/0C,SAAQ,SAAU0+E,GACxFA,EAAI1tD,SAAW,WACX,MAAM9qB,EAASzN,KAAKyN,OAChBA,GACA1N,EAAKkrF,QAAQx9E,EAAOrO,GAAGwnB,OAAOnZ,EAAOrO,GAAG4J,QAAQ,UAAY,IAAI,OAKxEzF,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,SAKZkkB,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,WACP+K,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAC5CyB,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,WAC7BC,EAAKzB,IAAImrC,OAAS3pC,EAAAA,EAAAA,KAAAA,UAClBC,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,YAIrB,MAAMmf,EAAUlf,EAAK4mC,SACfu5F,EAAcngI,EAAK4mC,SACnBw5F,EAAiBpgI,EAAK4mC,SAE5B5mC,EAAK47C,MAAQ57C,EAAKJ,QAAQg8C,MAAQ57C,EAAKJ,QAAQg8C,MAAQ,CAAC,IAAK,MAEzD57C,EAAKJ,QAAQygI,UACbrgI,EAAK0tF,aAAe7uF,QAAQC,QAAQ,MAGpCkB,EAAK0tF,aAAenvF,EAAI8rD,SAAS,CAC7BhrD,GAAI6f,EACJ1U,MAAOxK,EAAK4hC,gBAAgB,WAC5ByjD,MAAOrlF,EACPsvB,SAAS,EACTllB,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsG,OAAQ,CACJivB,MAAO/2B,EAAIqB,QAAQyG,OAAOivB,MAC1BE,KAAMj3B,EAAIqB,QAAQyG,OAAOmvB,KACzBllB,QAAS/R,EAAIqB,QAAQyG,OAAOiK,WAIxCtQ,EAAKyE,YAAczE,EAAK0tF,mBAClB1tF,EAAKsL,gBACPtL,EAAKyE,OACLlG,EAAI20D,cAAclzD,EAAKyE,OAG3B,MAAM2lC,QAAiBvrC,QAAQwiB,IAAI,CAACrhB,EAAK4uF,qBAAsB5uF,EAAKkvF,0BAqCpE,OApCAlvF,EAAKuuF,gBAAkBnkD,EAAS,GAChCpqC,EAAK0vF,mBAAqBtlD,EAAS,GACnCpqC,EAAKuuF,gBAAgBlvF,GAAK8gI,EAC1BngI,EAAK0vF,mBAAmBrwF,GAAK+gI,EAC7BpgI,EAAKuuF,gBAAgBrwE,SAASle,EAAKyE,OACnCzE,EAAK0vF,mBAAmBxxE,SAASle,EAAKyE,OACtCzE,EAAKuuF,gBAAgB3hD,SAAW5sC,EAAK4sC,SACrC5sC,EAAK0vF,mBAAmB9iD,SAAW5sC,EAAK4sC,SACxCxC,EAAS5iC,SAAQ,SAAUwmD,GACvBA,EAAIxP,iBAAmBx+C,EACvBA,EAAKqtF,aAAahlF,KAAK2lD,GACvBA,EACK1/C,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAU6N,GAClC5N,EAAK+pF,iBAERz7E,GAAGvO,EAAAA,EAAAA,MAAAA,QAAuB,IAAMA,EAAAA,EAAAA,MAAAA,gBAA6B,SAAUf,GACpEgB,EAAKquF,oBAAoBrvF,MAE5BsP,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAU6N,GASnCs5C,YAAW,WACPlnD,EAAK+gC,WACN,QAGXitB,EAAIvR,cAAe,KAGvBz8C,EAAKkrF,QAAQlrF,EAAKJ,QAAQszB,MACnBlzB,GAGX08C,EAAS8yC,YAAc,SAAUt8D,GAC7B,MAAMlzB,EAAOC,KAEP2vF,EAAQ,GAId,OAHA5vF,EAAK2M,IAAIhB,iBAAiB,qBAAqBnE,SAAQ,SAAUC,GAC7DmoF,EAAMvnF,KAAKZ,MAEPyrB,GACJ,KAAKnzB,EAAAA,EAAAA,KAAAA,SACDC,EAAKyvF,YAAcG,EAAM/mF,MAAK,SAAUpB,GACpC,OAAOA,EAAI+hB,QAAQ,uBAEvB,MACJ,KAAKzpB,EAAAA,EAAAA,KAAAA,QACDC,EAAKyvF,YAAcG,EAAM/mF,MAAK,SAAUpB,GACpC,OAAOA,EAAI+hB,QAAQ,wBAEvB,MACJ,KAAK,KACL,UAAKnlB,EACDrE,EAAKyvF,YAAc,KAM3B,MAAM6wC,EAAc1wC,EAAMzqF,QAAO,SAAUsC,GACvC,OAAOA,IAAQzH,EAAKyvF,eAmBxB,OAhBIv8D,EACYlzB,EAAK2M,IAAIsL,cAAe,oBAAmBjY,EAAKX,kBAAkBW,EAAKX,WAAW6zB,OAC1FxuB,UAAW,EAGf1E,EAAK2M,IAAIhB,iBAAkB,oBAAmB3L,EAAKX,aAAamI,SAAQ,SAAU0+E,GAC9EA,EAAIxhF,UAAW,KAGnB1E,EAAKyvF,cACLzvF,EAAKyvF,YAAYzxD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAClCC,EAAKyvF,YAAYx3E,cAAc,WAAW+lB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,YAE/DugI,EAAY94H,SAAQ,SAAUC,GAC1BA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAEfC,GAGX08C,EAASwuC,QAAU,SAAUh4D,GACzB,MAAMlzB,EAAOC,KAKb,IAAI6/B,EACJ,OAJA9/B,EAAKkzB,KAAOA,EACZlzB,EAAKwvF,YAAYt8D,GAGTA,GACJ,KAAKnzB,EAAAA,EAAAA,KAAAA,SACDC,EAAKuuF,gBAAgBzwC,WACrBhe,EAAQ//B,EAAAA,EAAAA,MAAAA,gBACR,MACJ,KAAKA,EAAAA,EAAAA,KAAAA,QACDC,EAAK0vF,mBAAmB5xC,WACxBhe,EAAQ//B,EAAAA,EAAAA,MAAAA,gBACR,MACJ,KAAK,KACL,UAAKsE,EACDrE,EAAKqtF,aAAa7lF,SAAQ,SAAUwmD,GAC5BA,EAAI3R,UACJ2R,EAAI/P,gBAGZne,EAAQ//B,EAAAA,EAAAA,MAAAA,kBACR,MACJ,QACI+/B,EAAQ//B,EAAAA,EAAAA,MAAAA,gBAIhBC,EAAK+pF,cAEDjqD,GAAS9/B,EAAKzB,KACdyB,EAAKzB,IAAIiN,QAAQs0B,EAAO,CAAE/0B,QAAS/K,KAI3C08C,EAAS3b,OAAS,WAEd,OADA9gC,KAAKirF,QAAQ,MAAM,GACZjrF,MAGXy8C,EAAS2xC,oBAAsB,SAAUzuF,GACrC,MAAMI,EAAOC,KAQb,OAPAL,EAAUA,GAAW,GACjBR,OAAOqB,UAAUC,eAAeC,KAAKf,EAAS,SAC9CI,EAAK+vF,0BAA0BK,mBAAmBxwF,GAElDR,OAAOqB,UAAUC,eAAeC,KAAKf,EAAS,WAC9CI,EAAK8vF,uBAAuBM,mBAAmBxwF,GAE5CI,GAGX08C,EAAS6jF,0BAA4B11H,iBAGjC,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,uCAGlCykC,EAAS8jF,6BAA+B31H,iBAGpC,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,sCAGlCykC,EAASqtC,YAAc,WACnB,MAAM/pF,EAAOC,KAGb,OAFAD,EAAKugI,4BAA4B5hI,MAAKqvD,GAAOA,EAAIqiC,qBACjDrwF,EAAKwgI,+BAA+B7hI,MAAKqvD,GAAOA,EAAIqiC,qBAC7CrwF,GAGX08C,EAAS+jF,aAAe,aAIxB/jF,EAAS98B,SAAW,WAChB,MAAM5f,EAAOC,KACb,OAAID,EAAKyE,MACE5F,QAAQC,QAAQkB,EAAKyE,OAEzBzE,EAAK0tF,cAGhBhxC,EAASx+B,SAAWrT,eAAgBpG,GAChC,MAAMzE,EAAOC,KACbD,EAAKyE,MAAQA,EACb,UAAW,MAAMsG,IAAW,CAAC/K,EAAK4uF,qBAAsB5uF,EAAKkvF,yBACzDnkF,EAAQmT,SAASle,EAAKyE,QAI9Bi4C,EAASkyC,mBAAqB/jF,iBAG1B,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,gCAGlCykC,EAASwyC,sBAAwBrkF,iBAG7B,aAFa5K,KACFqL,gBADErL,KAED0M,IAAIsL,cAAc,iCAGlCykC,EAAS/hB,YAAc,WACnB,MAAM36B,EAAOC,KACb,OAAID,EAAKy8C,cAAgBz8C,EAAKyE,MACnB,CACHpF,GAAIW,EAAKX,GACToF,MAAOzE,EAAKyE,MAAMk2B,eAGnB,MAGX+hB,EAAS0C,YAAc,SAAUtqC,GAChB7U,KACRytF,aAAa/uF,MAAK,SAAU8F,GAC7BA,EAAM26C,YAAYtqC,EAAMrQ,WAMpCjB,EAAAA,EAAAA,QAAAA,QAAqB4oF,EACrB,W,8yCC7TA5oF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMm5B,EAAc,oBAAoB,IAAA+jG,EAAA,IAAAj+H,QAAAk+H,EAAA,IAAAl+H,QAAAm+H,EAAA,IAAAn+H,QAAAo+H,EAAA,IAAAp+H,QAAAqqF,EAAA,IAAArqF,QAAAsqF,EAAA,IAAAtqF,QAAAq+H,EAAA,IAAAr+H,QAAAs+H,EAAA,IAAAt+H,QAAAu+H,EAAA,IAAAv+H,QAAAw+H,EAAA,IAAAx+H,QAAAy+H,EAAA,IAAAz+H,QAAA0+H,EAAA,IAAAzuH,QAAA42E,EAAA,IAAA52E,QAExC,MAAM0uH,UAAoBx3C,EAAAA,QAwBtBlqF,cACIG,SAASod,WAAWnK,EAAA,KAAAw2E,GAAAx2E,EAAA,KAAAquH,GAAArhI,EAAA,iBAfZ,KAAG8C,EAAA,KAAA89H,EAAA,CAAA79H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA+9H,EAAA,CAAA99H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAg+H,EAAA,CAAA/9H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAi+H,EAAA,CAAAh+H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAkqF,EAAA,CAAAjqF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAmqF,EAAA,CAAAlqF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAk+H,EAAA,CAAAj+H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAm+H,EAAA,CAAAl+H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAo+H,EAAA,CAAAn+H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAq+H,EAAA,CAAAp+H,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAs+H,EAAA,CAAAr+H,UAAA,EAAAC,WAAA,IAgBE7C,KAER4pF,aAAa,kBACbA,aAAa,QACbA,aAAa,SAGXrsD,gCACP,MAAO,CAAC,OAAQ,mBAGpBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,oBAAT6I,GACAgN,EAAA9V,EAAImhI,EAAAE,GAAA1gI,KAAJX,GAES,SAAT8I,GACAgN,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GAIRw8C,eACI,MAAO,cAGP8kF,qBACA,OAAOrhI,KAAK29B,aAAa,mBAGzB0jG,mBAAex+H,GACf7C,KAAKu+B,gBAAgB,oBAAqB17B,GAO1CowB,WACA,OAAOjzB,KAAK49B,aAAa,QAGzB3K,SAAKpwB,GACDA,EACA7C,KAAKotB,aAAa,OAAQvqB,GAG1B7C,KAAKi+B,gBAAgB,QAQ7BgtD,QAAQpoF,GACJ,MAAM9C,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClBh0B,EAAKkzB,OACLpwB,GACZ9C,EAAKsL,gBAAgB3M,MAAK,IAAMG,EAAQgE,KAE5C9C,EAAKkzB,KAAOpwB,EACZ9C,EAAK88C,SAASn+C,MAAK,IAAMG,EAAQgE,QAIrC84C,YACA,MACM2lF,EADOthI,KACe49B,aAAa,SACzC,OAAI0jG,EACOA,EAAenvH,MAAM,KAEzB,CAAC,IAAK,MAGbwpC,UAAM94C,GACN,MAAM9C,EAAOC,KACTc,MAAMC,QAAQ8B,GACd9C,EAAKqtB,aAAa,QAASvqB,EAAMyH,QAGjCvK,EAAKqtB,aAAa,QAASvqB,GAInC+H,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACPuhI,EAAU,CACZF,eAAgBthI,EAAKshI,gBAEnBpuG,EAAOlzB,EAAKkzB,KAIlB,OAHIA,IACAsuG,EAAQtuG,IAAQ,GAEblzB,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GAC5Dh0B,EAAKg9C,WAAWwkF,GAAS,WACrBv+H,EAAAjD,EAAI2gI,EAAW3gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,wBAC3Ct5C,EAAAjD,EAAI0gI,EAAY1gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,wBAC5Ct5C,EAAAjD,EAAI6gI,EAAW7gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,wBAC3Ct5C,EAAAjD,EAAI4gI,EAAY5gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,wBAC5Ct5C,EAAAjD,EAAI8sF,EAAkB9sF,EAAKiY,cAAe,IAAGjY,EAAKu8C,0BAClDt5C,EAAAjD,EAAI+sF,EAAmB/sF,EAAKiY,cAAe,IAAGjY,EAAKu8C,0BACnDt5C,EAAAjD,EAAI8gI,EAAgB9gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,kBAChDt5C,EAAAjD,EAAIghI,EAAchhI,EAAKiY,cAAe,IAAGjY,EAAKu8C,mBAC9Ct5C,EAAAjD,EAAI+gI,EAAmB/gI,EAAKiY,cAAe,IAAGjY,EAAKu8C,mBACnDt5C,EAAAjD,EAAIihI,EAAkBjhI,EAAKiY,cAAc,sCACzCjY,EAAKi9C,sBACLj9C,EAAKqwF,mBACmB,mBAAb73D,GACPA,IAEJ15B,WAKZm+C,sBAAsB,IAAAmuC,EAClB,MAAMprF,EAAOC,KACT,QAAJmrF,EAAApoF,EAAAhD,EAAIihI,UAAA,IAAA71C,GAAJA,EAAqBv/E,iBAAiB,UAAU,SAAU7M,GACtD,MAAMw/C,EAAmBx+C,EAAKw+C,iBAC1Bx/C,EAAE0O,OAAOmyB,SACT2e,EAAiBiyC,2BACjBzxF,EAAE0O,OAAO2f,aAAa,OAAQrtB,EAAK4hC,gBAAgB,iCAGnD4c,EAAiBqyC,6BACjB7xF,EAAE0O,OAAO2f,aAAa,OAAQrtB,EAAK4hC,gBAAgB,gCAExD,CAAE3zB,SAAS,IAGlBmgF,0BAA0B1qF,GACtB,MAAM1D,EAAOC,KACP4E,EAAS,CACX+2C,MAAO,KAELo0C,EAAiB,CACnB7oF,IAAKnH,EAAKzB,IAAIqB,QAAQipC,QAE1B,QAAQ,GACJ,KAAKnlC,aAAmBpB,EAAAA,EACxB,KAAKoB,aAAmBwM,EAAAA,EACpBrL,EAAOorF,KAAOvsF,EAAQkN,QAAQo/E,GAC9BnrF,EAAOqrF,UAAYxsF,EAAQiN,UAAUq/E,GACrC,MACJ,KAAKtsF,aAAmBuN,EAAAA,EACxB,KAAKvN,aAAmBmN,EAAAA,EACpBhM,EAAOvB,OAASI,EAAQiN,UAAUq/E,GAClC,MACJ,KAAKtsF,aAAmBiM,EAAAA,EACpB9K,EAAOwF,YAAc3G,EAAQnD,SAC7BsE,EAAO+2C,MAAQ57C,EAAKzB,IAAI2B,KAAK66B,QAAU,UAAY,IACnD,MACJ,KAAKr3B,aAAmBoM,EAAAA,EACpBjL,EAAOwF,YAAc3G,EAAQnD,SAAS,GACtCsE,EAAO+2C,MAAQ57C,EAAKzB,IAAI2B,KAAK66B,QAAU,UAAY,IAK3D,OAAOl2B,EAGXypF,0BAA0B5qF,GACtB,MAAM1D,EAAOC,KACPmE,EAAO,GACb,QAAQ,GACJ,KAAKV,aAAmBiM,EAAAA,EAAO,CAC3B,MAAM8xH,EAAiBz+H,EAAAhD,EAAIkhI,GAAkBQ,WACvCC,EAAkB3+H,EAAAhD,EAAIkhI,GAAkBU,WACxCC,EAAgB7+H,EAAAhD,EAAIkhI,GAAkBW,cACxCziI,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,WAC5D9hI,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,YAC5D98H,EAAKs+E,IAAM1iF,EAAKzB,IAAI8I,SACpBjD,EAAKq9H,EAAe56G,OAAO,EAAG46G,EAAex4H,QAAQ,OAASjG,EAAAhD,EAAIkhI,GAAkBY,OACpF19H,EAAKu9H,EAAgB96G,OAAO,EAAG86G,EAAgB14H,QAAQ,OAASjG,EAAAhD,EAAIkhI,GAAkBa,OAClFF,IACAz9H,EAAKpE,EAAK4hC,gBAAgB,QAAU5+B,EAAAhD,EAAIkhI,GAAkBxhF,WAE9Dh8C,EAAQK,QAAQK,IAEpB,MAEJ,KAAKV,aAAmBuN,EAAAA,EAChB7R,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,YAC5D98H,EAAKpE,EAAK4hC,gBAAgB,aAAe5+B,EAAAhD,EAAIkhI,GAAkB59H,OAC/DI,EAAQK,QAAQK,IAEpB,MACJ,KAAKV,aAAmBpB,EAAAA,EAChBlD,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,SAC5D9hI,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,eAC5D98H,EAAKpE,EAAK4hC,gBAAgB,SAAW5+B,EAAAhD,EAAIkhI,GAAkBjxC,KAC3D7rF,EAAKpE,EAAK4hC,gBAAgB,gBAAkB5+B,EAAAhD,EAAIkhI,GAAkBhxC,UAClExsF,EAAQK,QAAQK,IAM5B,OAAOpE,EAGXowF,mBAAmB4xC,GACf,MAAMhiI,EAAOC,KACb,IACIizB,EACA2H,EACAn3B,EAHA9D,EAAUoiI,EAIVA,aAA4BviI,EAAAA,IAC5BiE,EAAUs+H,EACVpiI,EAAUI,EAAKouF,0BAA0B4zC,IAE7ChiI,EAAKoF,eAAiB1B,EACtBT,EAAAjD,EAAIkhI,EAAoB,IACxB,IAAItlF,EAAQh8C,EAAQg8C,MACpB,GAAIh8C,EAAQyK,YAAa,CACrB6oB,EAAOnzB,EAAAA,EAAAA,KAAAA,MACP,MAAM0sC,EAAQ,SAAUxkC,EAAK4yB,GACzB,MAAMonG,EAASzgI,KAAKs5B,IAAI,GAAID,GAC5B,OAAOr5B,KAAKirC,MAAMxkC,EAAMg6H,GAAUA,GAExB,MAAVrmF,GACA/gB,EAAY96B,EAAAA,EAAAA,gBACZiD,EAAAhD,EAAIkhI,GAAkBY,OAASliI,EAAQyK,YAAY,GACnDrH,EAAAhD,EAAIkhI,GAAkBa,OAASniI,EAAQyK,YAAY,GACnDrH,EAAAhD,EAAIkhI,GAAkBQ,WAAa,MACnC1+H,EAAAhD,EAAIkhI,GAAkBU,WAAa,QAGnC/mG,EAAY96B,EAAAA,EAAAA,iBACZiD,EAAAhD,EAAIkhI,GAAkBY,OAASliI,EAAQyK,YAAY,GACnDrH,EAAAhD,EAAIkhI,GAAkBa,OAASniI,EAAQyK,YAAY,GACnDrH,EAAAhD,EAAIkhI,GAAkBQ,WAAa,QACnC1+H,EAAAhD,EAAIkhI,GAAkBU,WAAa,SAEvC5+H,EAAAhD,EAAIkhI,GAAkBY,OAASr1F,EAAMzpC,EAAAhD,EAAIkhI,GAAkBY,OAAQjnG,GACnE73B,EAAAhD,EAAIkhI,GAAkBa,OAASt1F,EAAMzpC,EAAAhD,EAAIkhI,GAAkBa,OAAQlnG,GAE/Dj7B,EAAQyK,YAAY/G,OAAS,IAC7BN,EAAAhD,EAAIkhI,GAAkBxhF,UAAYl+C,KAAKirC,MAAM7sC,EAAQyK,YAAY,IACjErH,EAAAhD,EAAIkhI,GAAkBW,cAAgB7hI,EAAK4hC,gBAAgB,OAAOvT,cAAgB,WAGjFjvB,OAAOqB,UAAUC,eAAeC,KAAKf,EAAS,SACnDszB,EAAOnzB,EAAAA,EAAAA,KAAAA,QACPiD,EAAAhD,EAAIkhI,GAAkBjxC,KAAOrwF,EAAQqwF,KACrCjtF,EAAAhD,EAAIkhI,GAAkBhxC,UAAYtwF,EAAQswF,YAG1Ch9D,EAAOnzB,EAAAA,EAAAA,KAAAA,SACPiD,EAAAhD,EAAIkhI,GAAkB59H,OAAS1D,EAAQ0D,QAoD3C,OAlDAtD,EAAKkrF,QAAQh4D,GAAMv0B,MAAK,WACpB,MAAM0K,EAASrJ,EAAKzB,IAAIqB,QAAQyJ,QAAU7C,EAAAA,EAAAA,OAC1C,GAAI0sB,IAASnzB,EAAAA,EAAAA,KAAAA,QAAqB,CAC9B,IAAIkwF,EAAOjtF,EAAAhD,EAAIkhI,GAAkBjxC,KACjCjwF,EAAK47C,MAAMp0C,SAAQ,SAAUytD,EAAMitE,EAAQltE,GACvC,MAAMtsD,EAAMusD,EAAKprC,OACXs4G,EAAaf,EAAYxlF,MAAMlzC,GAAK05H,OAAShB,EAAYxlF,MAAMwJ,EAAEg9E,OACvE,IAAIvnG,EAAYumG,EAAYxlF,MAAMlzC,GAAKmyB,UAAYumG,EAAYxlF,MAAMlzC,GAAKmyB,UAAY,GACjE,IAAjBm6B,EAAM1xD,QACN2sF,GAAQzuF,KAAKs5B,IAAI,IAAKqnG,GAAc3gI,KAAKs5B,IAAI,GAAID,EAAYA,EAAY,EAAIA,MAC7E73B,EAAAhD,EAAIghI,GAAY5zH,UAAYlJ,EAAAA,EAAAA,cAAmB+rF,EAAOzuF,KAAKs5B,IAAI,IAAKqnG,IAAa97C,QAAQxrD,GAAYxxB,GACjG,IAAM+3H,EAAYxlF,MAAMqZ,GAAMotE,SAG1C,IAAInyC,EAAYltF,EAAAhD,EAAIkhI,GAAkBhxC,UAClCA,EAAY,MACZA,GAAwB,IACxBt0C,EAAQ,MAEZ/gB,EAAsB,MAAV+gB,EAAgB,EAAI,EAChC54C,EAAAhD,EAAI+gI,GAAiB3zH,UAAYlJ,EAAAA,EAAAA,aAAkBgsF,EAAU7J,QAAQxrD,GAAYxxB,GAAU,IAAMuyC,OAEhG,GAAI1oB,IAASnzB,EAAAA,EAAAA,KAAAA,SAAsB,CACpC,IAAIuD,EAASN,EAAAhD,EAAIkhI,GAAkB59H,OAC/BA,EAAS,MACTA,GAAkB,IAClBs4C,EAAQ,MAEZ/gB,EAAsB,MAAV+gB,EAAgB,EAAI,EAChC54C,EAAAhD,EAAI8gI,GAAc1zH,UAAYlJ,EAAAA,EAAAA,aAAkBZ,EAAO+iF,QAAQxrD,GAAYxxB,GAAU,IAAMuyC,OAEtF1oB,IAASnzB,EAAAA,EAAAA,KAAAA,QACdiD,EAAAhD,EAAI2gI,GAASvzH,UAAYpK,EAAAhD,EAAIkhI,GAAkBQ,WAC/C1+H,EAAAhD,EAAI6gI,GAASzzH,UAAYpK,EAAAhD,EAAIkhI,GAAkBU,WAC/C5+H,EAAAhD,EAAI0gI,GAAUtzH,UAAYlJ,EAAAA,EAAAA,aAAkBlB,EAAAhD,EAAIkhI,GAAkBY,OAAOz7C,QAAQxrD,GAAYxxB,GAC7FrG,EAAAhD,EAAI0gI,GAAUpiF,QAAQx7C,MAAQE,EAAAhD,EAAIkhI,GAAkBY,OACpD9+H,EAAAhD,EAAI4gI,GAAUxzH,UAAYlJ,EAAAA,EAAAA,aAAkBlB,EAAAhD,EAAIkhI,GAAkBa,OAAO17C,QAAQxrD,GAAYxxB,GAC7FrG,EAAAhD,EAAI4gI,GAAUtiF,QAAQx7C,MAAQE,EAAAhD,EAAIkhI,GAAkBa,OAChD3iI,OAAOqB,UAAUC,eAAeC,KAAIqC,EAAChD,EAAIkhI,GAAmB,cAC5Dl+H,EAAAhD,EAAI8sF,GAAgB1/E,UAAYpK,EAAAhD,EAAIkhI,GAAkBW,cACtD7+H,EAAAhD,EAAI+sF,GAAiB3/E,UAAYlJ,EAAAA,EAAAA,aAAkBlB,EAAAhD,EAAIkhI,GAAkBxhF,UAAU2mC,QAAQtmF,EAAAA,EAAAA,iBAAyBsJ,GAAU,KAC9HrG,EAAAhD,EAAI+sF,GAAiBzuC,QAAQx7C,MAAQE,EAAAhD,EAAIkhI,GAAkBxhF,YAG3D18C,EAAAhD,EAAI8sF,GAAgB1/E,UAAY,GAChCpK,EAAAhD,EAAI+sF,GAAiB3/E,UAAY,GACjCpK,EAAAhD,EAAI+sF,GAAiBzuC,QAAQx7C,MAAQ,QAI1C9C,EAGXsiI,2BAIAjyC,mBACI,MAAMrwF,EAAOC,KACb+C,EAAIhD,EAAI0gI,KACJ19H,EAAAhD,EAAI0gI,GAAUtzH,UAAYpN,EAAKigI,WAEnCj9H,EAAIhD,EAAI4gI,KACJ59H,EAAAhD,EAAI4gI,GAAUxzH,UAAYpN,EAAKigI,WAEnCj9H,EAAIhD,EAAI8sF,KACJ9pF,EAAAhD,EAAI8sF,GAAgB1/E,UAAY,IAEpCpK,EAAIhD,EAAI+sF,KACJ/pF,EAAAhD,EAAI+sF,GAAiB3/E,UAAY,IAErCpK,EAAIhD,EAAI8gI,KACJ99H,EAAAhD,EAAI8gI,GAAc1zH,UAAYpN,EAAKigI,WAEvCj9H,EAAIhD,EAAI+gI,KACJ/9H,EAAAhD,EAAI+gI,GAAiB3zH,UAAYpN,EAAKigI,WAE1Cj9H,EAAIhD,EAAIghI,KACJh+H,EAAAhD,EAAIghI,GAAY5zH,UAAYpN,EAAKigI,WAKzCn/E,QACI7gD,KAAKizB,KAAO,MAEnB,SAAAmuG,IAvTOphI,KAAK68C,SACR,SAAAutC,IAgBGpqF,KAAK68C,SACRh9C,EAjFCshI,EAAW,QAEE,CACXh8E,EAAG,CAAEg9E,OAAQ,EAAGC,KAAM,WACtBE,IAAK,CAAEH,OAAQ,EAAGC,KAAM,YAAaxnG,UAAW,GAChD2nG,GAAI,CAAEJ,OAAQ,EAAGC,KAAM,WAAYxnG,UAAW,GAC9C4nG,GAAI,CAAEL,OAAQ,EAAGC,KAAM,KAAMxnG,UAAW,GACxC6nG,GAAI,CAAEN,OAAQ,EAAGC,KAAM,WAAYxnG,UAAW,KAiXtDoE,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAaykG,GACtE59H,EAAAA,EAAAA,QAAAA,YAAyB49H,EACzB,W,oyCC/XA59H,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,MAAAA,oBAAmC,yBACnCA,EAAAA,EAAAA,MAAAA,cAA6B,mBAC7BA,EAAAA,EAAAA,MAAAA,eAA8B,oBAC9BA,EAAAA,EAAAA,MAAAA,iBAAgC,sBAChCA,EAAAA,EAAAA,MAAAA,OAAsB,SAsDtB,MAAM4iI,EAAwB,SAAUl7H,GACpC,IAAI5C,GAAS,EAMb,OALI4C,aAAeyI,EAAAA,GAAgBzI,aAAeoJ,EAAAA,IAC1CpJ,EAAIlH,SAAS+C,OAAS,IACtBuB,GAAS,GAGVA,GAGL+9H,EAAuB,SAAUn7H,GACnC,OAAOA,aAAenF,EAAAA,GAClBmF,aAAewJ,EAAAA,GACfxJ,aAAeyI,EAAAA,GACfzI,aAAeoJ,EAAAA,GAGjBkrB,EAAY,aACZY,EAAc,eAAe,IAAAmpD,EAAA,IAAArjF,QAAAogI,EAAA,IAAApgI,QAAAqgI,EAAA,IAAArgI,QAAAsgI,EAAA,IAAAtgI,QAAAugI,EAAA,IAAAvgI,QAAAwgI,EAAA,IAAAxgI,QAAAygI,EAAA,IAAAzgI,QAAA0gI,EAAA,IAAA1gI,QAAA2gI,EAAA,IAAA3gI,QAAA4gI,EAAA,IAAA5gI,QAAA6gI,EAAA,IAAA7gI,QAAA8gI,EAAA,IAAA9gI,QAAA+lF,EAAA,IAAA/lF,QAAA+gI,EAAA,IAAA/gI,QAAAqmF,EAAA,IAAArmF,QAAA6mF,EAAA,IAAA52E,QAAA62E,EAAA,IAAA72E,QAAA+wH,EAAA,IAAA/wH,QAAAgxH,EAAA,IAAAhxH,QAAAixH,EAAA,IAAAjxH,QAEnC,MAAMkxH,UAAeh6C,EAAAA,QAuBjBlqF,cACIG,SAASod,WAAWnK,EAAA,KAAA6wH,GAAA7wH,EAAA,KAAA4wH,GAAA5wH,EAAA,KAAA2wH,GAAA3wH,EAAA,KAAAy2E,GAAAz2E,EAAA,KAAAw2E,GAAAxpF,EAAA,aAvBhBi8B,GAASn5B,EAAA,KAAAkjF,EAAA,CAAAjjF,UAAA,EAAAC,MACA,gBAAeF,EAAA,KAAAigI,EAAA,CAAAhgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAkgI,EAAA,CAAAjgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAmgI,EAAA,CAAAlgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAogI,EAAA,CAAAngI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAqgI,EAAA,CAAApgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAsgI,EAAA,CAAArgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAugI,EAAA,CAAAtgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAwgI,EAAA,CAAAvgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAygI,EAAA,CAAAxgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA0gI,EAAA,CAAAzgI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA2gI,EAAA,CAAA1gI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA4lF,EAAA,CAAA3lF,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA4gI,EAAA,CAAA3gI,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAkmF,EAAA,CAAAjmF,UAAA,EAAAC,WAAA,IAuB5B,MAAM9C,EAAOC,KAEbD,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,OAAuBxD,GACvCA,EACK6pF,aAAa,QACbA,aAAa,YACbA,aAAa,YAGXrsD,gCACP,MAAO,CAAC,OAAQ,YAGpBC,yBAAyB30B,EAAM40B,EAAUC,GACrC,GAAID,IAAaC,EACb,OAEJ,MAAM39B,EAAOC,KACA,aAAT6I,GACAgN,EAAA9V,EAAIupF,EAAAa,GAAAzpF,KAAJX,GAES,SAAT8I,GACAgN,EAAA9V,EAAIspF,EAAAe,GAAA1pF,KAAJX,GAIRw8C,eACI,OAAOzgB,EAGP6Q,eACA,OAAO3sC,KAAK29B,aAAa,YAGzBgP,aAAS9pC,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAGnCowB,WACA,MAAMlzB,EAAOC,KACb,OAAID,EAAK49B,aAAa,QACX59B,EAAK69B,aAAa,QAEtB+lG,EAAO1wG,KAAK2wG,OAGnB3wG,SAAKpwB,GACL7C,KAAKotB,aAAa,OAAQvqB,GAAS8gI,EAAO1wG,KAAK2wG,QAS/Cv5C,eACA,OAAOrqF,KAAK29B,aAAa,YAGzB0sD,aAASxnF,GACT7C,KAAKu+B,gBAAgB,aAAc17B,GAkCvCgjC,SAASvnC,GAAK,IAAAulI,EAAAC,EAAAC,EACV,MAAMhkI,EAAOC,KAEbD,EAAKqG,OAAS7C,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIgD,EAAAA,EAAAA,OAAAA,UAAwC,QAApBs9H,EAAEvlI,EAAIqB,QAAQyG,cAAM,IAAAy9H,OAAA,EAAlBA,EAAoB30H,UAAWnP,EAAKJ,QAAQyG,QACzGrG,EAAKqG,OAAOumC,SAAWppC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIgD,EAAAA,EAAAA,OAAAA,SAAuC,QAApBu9H,EAAExlI,EAAIqB,QAAQyG,cAAM,IAAA09H,OAAA,EAAlBA,EAAoBn3F,SAA6B,QAArBo3F,EAAEhkI,EAAKJ,QAAQyG,cAAM,IAAA29H,OAAA,EAAnBA,EAAqBp3F,UACxH5sC,EAAKqG,OAAOgT,KAAOrZ,EAAKqG,OAAOgT,MAAQ,CACnCizB,SAAUtsC,EAAKqG,OAAOmvB,KAAK8W,SAC3BD,UAAWrsC,EAAKqG,OAAOmvB,KAAK6W,UAC5BF,kBAAmBnsC,EAAKqG,OAAOmvB,KAAK2W,kBACpCD,kBAAmBlsC,EAAKqG,OAAOmvB,KAAK0W,mBAGxC,MAAMrnC,EAAShF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GA+DzC,OA9DIyB,EAAKJ,QAAQ6E,OACbzE,EAAKke,SAASle,EAAKJ,QAAQ6E,OAG/BlG,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpEH,QAAQwiB,IAAI,CAACrhB,EAAK4f,WAAY5f,EAAKsL,kBAAkB3M,MAAK,SAAU8uF,GAChE,MAAMhpF,EAAQgpF,EAAQ,GAClBzuF,EAAEyF,QAAUA,GACZzE,EAAKikI,oBAAmB,SAInC31H,GAAGvO,EAAAA,EAAAA,MAAAA,cAA6B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACzE,MAAMyF,EAAQzF,EAAEyF,MACVf,EAAU1E,EAAE0E,QAClB7E,QAAQwiB,IAAI,CAACrhB,EAAK4f,WAAY5f,EAAKsL,kBAAkB3M,MAAK,SAAU8uF,GAC5DhpF,IAAUgpF,EAAQ,KACd/pF,EACA1D,EAAK61F,iBAAiB,CAACnyF,IAGvB1D,EAAK61F,mBAET//E,EAAA9V,EAAI0jI,EAAAQ,GAAAvjI,KAAJX,EAA8BA,EAAKuwF,uBACL,IAA1B9rF,EAAMsK,SAASzL,SACftD,EAAKikI,oBAAmB,GACxBjkI,EAAKmkI,aAAY,WAKhC71H,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,MAChB5F,QAAQwiB,IAAI,CAACrhB,EAAK4f,WAAY5f,EAAKsL,kBAAkB3M,MAAK,SAAU8uF,GAC5DhpF,IAAUgpF,EAAQ,IAClB33E,EAAA9V,EAAI0jI,EAAAQ,GAAAvjI,KAAJX,EAA8BA,EAAKuwF,6BAKnDvwF,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,eAA8B,IAAMA,EAAAA,EAAAA,MAAAA,kBAA+B,WACvE,MAAMkP,EAAmBjP,EAAKuwF,sBAC9Bz6E,EAAA9V,EAAI0jI,EAAAQ,GAAAvjI,KAAJX,EAA8BiP,GACHjP,EAAKyE,MAAMsK,SAAS5J,QAAO,SAAUzB,GAC5D,OAAOuL,EAAiBhG,QAAQvF,GAAW,KAE5B8D,SAAQ,SAAU9D,GACjCA,EAAQR,qBAAoB,MAEhC+L,EAAiBzH,SAAQ,SAAU9D,GAC/BA,EAAQR,qBAAoB,MAG3BlD,EAAK80F,4BAA4B92D,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,SACrDC,EAAKo0F,oBAEJnlF,EAAiB3L,QAClBtD,EAAKm1F,qBAINtwF,EAGXgG,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtByV,EAA4B,+BAE5BhqF,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkB+2C,GAA2B/kF,QACnEvO,EAAKsJ,SAAWA,EAGpBwzC,OAAOtkB,GAAU,IAAA4rG,EAAAC,EAAAC,EAAAC,EACb,MAAMvkI,EAAOC,KAuEPoG,EAASrG,EAAKqG,QAAU,GACxBqkF,EAAe,CACjBJ,SAAUtqF,EAAKsqF,SACfh+C,SAAqB,QAAb83F,EAAE/9H,EAAOgT,YAAI,IAAA+qH,OAAA,EAAXA,EAAa93F,SACvBD,UAAsB,QAAbg4F,EAAEh+H,EAAOgT,YAAI,IAAAgrH,OAAA,EAAXA,EAAah4F,UACxBF,kBAA8B,QAAbm4F,EAAEj+H,EAAOgT,YAAI,IAAAirH,OAAA,EAAXA,EAAan4F,kBAChCD,kBAA8B,QAAbq4F,EAAEl+H,EAAOgT,YAAI,IAAAkrH,OAAA,EAAXA,EAAar4F,mBAGpC,OAAOlsC,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW0tC,GA9E1B,WACnBznF,EAAAjD,EAAI8iI,EAAc9iI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,gBACxDv5C,EAAAhD,EAAI8iI,GAAYj3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACtDA,EAAE0O,OAAO2vB,WACNr9B,EAAKq8C,SACDr8C,EAAKkzB,OAAS0wG,EAAO1wG,KAAKsxG,cAC1BxkI,EAAKi+C,aAGLj+C,EAAKkrF,QAAQ04C,EAAO1wG,KAAK2wG,QAAQ,GAIrC7jI,EAAK89C,cAGd,CAAE7vC,SAAS,IACdhL,EAAAjD,EAAI6iI,EAAc7iI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,gBACxDv5C,EAAAhD,EAAI6iI,GAAYh3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACjDC,EAAKykI,2BACN,CAAEx2H,SAAS,IACdhL,EAAAjD,EAAI+iI,EAAoB/iI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,oBAC9Dv5C,EAAAhD,EAAI+iI,GAAkBl3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACvD,MAAM01F,EAAUz1F,EAAKkzB,OAAS0wG,EAAO1wG,KAAKsxG,cACtCZ,EAAO1wG,KAAK2wG,OAASD,EAAO1wG,KAAKsxG,cACrCxkI,EAAKkrF,QAAQuK,GAAS,KACvB,CAAExnF,SAAS,IACdhL,EAAAjD,EAAIojI,EAAYpjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,cACtDv5C,EAAAhD,EAAIojI,GAAUv3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC/CC,EAAKmkI,aAAankI,EAAK0kI,cACxB,CAAEz2H,SAAS,IACdhL,EAAAjD,EAAIkjI,EAAYljI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,cACtDt5C,EAAAjD,EAAImjI,EAAanjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,eACvDt5C,EAAAjD,EAAIgjI,EAAgBhjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,cAC1Dv5C,EAAAhD,EAAIgjI,GAAcn3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACnDC,EAAK2kI,qBACN,CAAE12H,SAAS,IACdhL,EAAAjD,EAAIqjI,EAAcrjI,EAAKiY,cAAc,SAAWjY,EAAKu8C,MAAQ,SAC7Dv5C,EAAAhD,EAAIqjI,GAAYx3H,iBAAiB,SAAS,SAAU7M,GAChDgB,EAAK4kI,cAAc5lI,EAAE0O,OAAO5K,UAEhCG,EAAAjD,EAAIujI,EAAiBvjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,iBAE3Dt5C,EAAAjD,EAAIsjI,EAAoBtjI,EAAKiY,cAAcjV,EAAAhD,EAAI8lF,GAAkB,WACjE9iF,EAAAhD,EAAIsjI,GAAkBz3H,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GAClEgB,EAAK6kI,aAAa7lI,EAAE0O,OAAO5K,UAG/BG,EAAAjD,EAAIwjI,EAAqBxjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,WAC/Dv5C,EAAAhD,EAAIwjI,GAAmB33H,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAqB,SAAUf,GACnEgB,EAAK8kI,YAAY9lI,EAAE0O,OAAO5K,UAG9BG,EAAAjD,EAAIijI,EAAsBjjI,EAAKiY,cAAc,IAAMjY,EAAKu8C,MAAQ,UAEhEv8C,EAAK4qF,YAAYjsF,MAAKksF,GAAUA,EAAOh/E,iBAAiB9L,EAAAA,EAAAA,MAAAA,aAA0Bf,IAC9EgB,EAAKuwF,sBAAsB/oF,SAAQwH,IAC/B,MAAMwoD,EAAU,GAChBA,EAAQx4D,EAAEkhD,OAAOzrB,UAAYz1B,EAAEkhD,OAAOp9C,MACtC,MAAM+C,EAAWzG,OAAOmD,OAAO,GAAIyM,EAAE5I,WAAYoxD,GACjDxoD,EAAErJ,SAASE,WAIfrC,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,QAgBZslB,WACI,MAAM99C,EAAOC,KACb+C,EAAAhD,EAAI8iI,GAAY9kG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC9BF,MAAMi+C,SAASn9C,KAAKX,GACpBA,EAAKE,KAAK49C,SAAS99C,EAAKkzB,MACxBpd,EAAA9V,EAAI2jI,EAAAoB,GAAApkI,KAAJX,EAA+BA,EAAKuwF,uBAGxCtyC,aACI,MAAMj+C,EAAOC,KACbJ,MAAMo+C,WAAWt9C,KAAKX,GACtBgD,EAAIhD,EAAI8iI,IACJhtH,EAAA9V,EAAI0jI,EAAAQ,GAAAvjI,KAAJX,EAA8B,IAElCgD,EAAIhD,EAAI8iI,KACJ9/H,EAAAhD,EAAI8iI,GAAY9kG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC7BC,EAAKyE,OACLzE,EAAK61F,iBAAiB71F,EAAKuwF,wBAG/BvwF,EAAKE,MACLF,EAAKE,KAAK+9C,aAEdj+C,EAAKkzB,KAAO0wG,EAAO1wG,KAAK2wG,OAG5B/iF,QACI,MAAM9gD,EAAOC,KAIb,OAHID,EAAKyE,OACLzE,EAAKyE,MAAM0mF,eAERnrF,EAGXk/C,cACI,OAAO,EAGX6qB,MAGI,OAFa9pE,KACRC,KAAK6pE,MADG9pE,KAKjBirF,QAAQh4D,EAAM4qB,GACV,MAAM99C,EAAOC,KAeb,OAbIizB,IACAlzB,EAAKkzB,KAAOA,GAGZ4qB,GAAY5qB,GACRlzB,EAAKyE,OACLzE,EAAKyE,MAAMlG,IAAI20D,cAAclzD,EAAKyE,OAEtCzE,EAAK89C,YAGL99C,EAAKi+C,aAEFj+C,EAGX4f,WACI,IAAI5f,EAAOC,KAEX,OAAID,EAAKJ,SAAyC,kBAAvBI,EAAKJ,QAAQ6E,QAAwBzE,EAAKJ,QAAQ6E,MAClE5F,QAAQC,QAAQ,MAEvBkB,EAAKyE,MACE5F,QAAQC,QAAQkB,EAAKyE,OAEhCzB,EAAOhD,EAAI8oF,GAGf5qE,SAASzZ,GACL,MAAMzE,EAAOC,KACTD,EAAKzB,MACLyB,EAAKw2F,oBAAoB,IACzBvzF,EAAAjD,EAAI8oF,EAAiB,IAAIjqF,SAAQ,SAAUC,EAASk1B,GACzB,iBAAXvvB,EACRzE,EAAKzB,IAAIqb,QAAO,WACZ5Z,EAAKyE,MAAQzE,EAAKzB,IAAIqhB,SAASnb,GAC/B3F,EAAQkB,EAAKyE,YAIZA,GAASzE,EAAKq8C,UACfr8C,EAAKi+C,aAETj+C,EAAKyE,MAAQA,EACb3F,EAAQkB,EAAKyE,YAGrB5F,QAAQwiB,IAAI,CAAAre,EAAChD,EAAI8oF,GAAgB9oF,EAAKsL,kBAAkB3M,MAAK,SAAUqmI,GACnE,MAAMvgI,EAAQugI,EAAK,GACnBhlI,EAAKikI,mBAAmBx/H,GAASA,EAAMsK,SAASzL,OAAS,OAKrE2gI,mBAAmB7mG,GAEfp6B,EADa/C,KACT6iI,GAAYzlG,UAAYD,EAC5Bp6B,EAFa/C,KAETmjI,GAAU/lG,UAAYD,EAG9BmzD,sBACI,OAAOtwF,KAAKC,KAAKqwF,sBAGrBiG,oBAAoBznF,GAChB,MACMlK,EADO5E,KACOC,KAAKs2F,oBAAoBznF,GAE7C,OAHa9O,KAERsvF,mBACE1qF,EAGX+rF,oBACI,MAAM5wF,EAAOC,KACP4E,EAAS7E,EAAKuwF,sBAIpB,OAHK1rF,EAAOvB,QAAUtD,EAAKyE,MAAMsK,SAASzL,QACtCuB,EAAOwD,KAAKrI,EAAKyE,MAAMsK,SAAS/O,EAAKyE,MAAMsK,SAASzL,OAAS,IAE1DuB,EAGXgxF,iBAAiB9mF,GAKb,OAJAA,EAAWA,GAAY,GACvB9O,KAAKC,KAAK21F,iBAAiB9mF,EAASxQ,KAAI,SAAUk8B,GAC9C,OAAOA,EAAKv6B,KAAKwD,YAEdzD,KAGXwkI,yBACI,MAAMzkI,EAAOC,KACP8O,EAAW/O,EAAKuwF,sBAMtB,OALAvwF,EAAKE,KAAK21F,iBAAiB9mF,GAC3BA,EAASvH,SAAQ,SAAU9D,GACvB1D,EAAKyE,MAAMszB,cAAcr0B,GACzB1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASA,OAEjD1D,EAGXilI,cAAcvhI,EAASwhI,GAEnB,IAAIrgI,EACJ,MAAMsgI,EAFOllI,KAEU1B,IAAIqB,QAAQyG,OAAO8I,UAC1C,QAAQ,GACJ,KAAKzL,aAAmBpB,EAAAA,EACxB,KAAKoB,aAAmBwM,EAAAA,EACpBrL,EAASrB,EAAAA,EAAAA,KAAAA,OAAe,GAAI2hI,EAAU70H,SACtC,MACJ,KAAK5M,aAAmBiM,EAAAA,EACxB,KAAKjM,aAAmBoM,EAAAA,EACpBjL,EAASrB,EAAAA,EAAAA,KAAAA,OAAe,GAAI2hI,EAAU7vG,OACtC,MACJ,QACIzwB,EAASrB,EAAAA,EAAAA,KAAAA,OAAe,GAAI2hI,EAAU3vG,MAG9C,MAAM5vB,EAAQlC,EAAQ0C,WAQtB,OAPIR,EAAM4mC,QACN3nC,EAAO2nC,MAAQ5mC,EAAM4mC,MACrB3nC,EAAOynC,SAAW1mC,EAAM0mC,SACxBznC,EAAOwnC,UAAYzmC,EAAMymC,UACzBxnC,EAAOsnC,kBAAoBvmC,EAAMumC,kBACjCtnC,EAAOqnC,kBAAoBtmC,EAAMsmC,mBAE9BrnC,EAGXs/H,YAAY/mG,GACR,MAAMp9B,EAAOC,KAWb,OAVAD,EAAK0kI,WAAatnG,EACdA,GACAp6B,EAAAhD,EAAIojI,GAAUplG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,OAAuBq9B,GACnDp6B,EAAAhD,EAAIujI,GAAevlG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAGpCiD,EAAAhD,EAAIojI,GAAUplG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,OAAuBq9B,GACtDp6B,EAAAhD,EAAIujI,GAAevlG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAErCC,EAAKuvF,mBACEvvF,EAGXolI,kBAAkB5zD,EAAO6zD,GACrB,MAAMrlI,EAAOC,KAeb,YAdcoE,IAAVmtE,IACAA,EAAQxxE,EAAKqG,OAAOgT,KAAKgzB,WAE7BmlC,EAAQhuE,EAAAA,EAAAA,KAAAA,mBAA2BguE,GACnC6zD,EAAeA,GAAgBrlI,EAAKslI,qBAAqB9zD,GACzDxxE,EAAKsL,gBAAgB3M,MAAK,WACtBqE,EAAAhD,EAAIsjI,GAAkBxgI,MAAQ0uE,EAC9BxuE,EAAAhD,EAAIqjI,GAAYz9H,MAAM4rE,MAAQA,EAC9BxuE,EAAAhD,EAAIqjI,GAAYz9H,MAAM2/H,WAAa,OAASvlI,EAAKqG,OAAOgT,KAAK6yB,kBAAoB,MAAQm5F,EACpF7hI,EAAAA,EAAAA,gBAAAA,mBACDR,EAAAhD,EAAIsjI,GAAkB19H,MAAMinG,gBAAkBr7B,EAC9CxuE,EAAAhD,EAAIsjI,GAAkB7lD,WAGvBz9E,EAGX6kI,aAAarzD,GACT,MAAMxxE,EAAOC,KACbD,EAAKqG,OAAOgT,KAAKgzB,UAAYmlC,EAC7BxxE,EAAKqG,OAAOgT,KAAK8yB,kBAAoBnsC,EAAKslI,qBAAqB9zD,GAC/DxxE,EAAKolI,kBAAkB5zD,EAAOxxE,EAAKqG,OAAOgT,KAAK8yB,mBAQ/C,OAPiBnsC,EAAK4wF,oBACbppF,SAAQ,SAAU9D,GACvB,MAAMkC,EAAQlC,EAAQ0C,WACtBR,EAAMymC,UAAYmlC,EAClB5rE,EAAMumC,kBAAoBnsC,EAAKqG,OAAOgT,KAAK8yB,kBAC3CzoC,EAAQiC,SAASC,MAEd5F,EAGXwlI,iBAAiB1wG,GACb,MAAM90B,EAAOC,UACAoE,IAATywB,IACAA,EAAO90B,EAAKqG,OAAOgT,KAAKizB,UAE5B,MAAMm5F,EAAYltH,SAASuc,GAO3B,OANKlN,OAAO3mB,MAAMwkI,IACdzlI,EAAKsL,gBAAgB3M,MAAK,WACtBqE,EAAAhD,EAAIwjI,GAAmB1gI,MAAQ2iI,EAC/BziI,EAAAhD,EAAIqjI,GAAYz9H,MAAM0mC,SAAWm5F,EAAY,QAG9CzlI,EAGX8kI,YAAYhwG,GACR,MAAM90B,EAAOC,KACPwlI,EAAYltH,SAASuc,GAC3B,IAAKlN,OAAO3mB,MAAMwkI,GAAY,CAC1BzlI,EAAKqG,OAAOgT,KAAKizB,SAAWm5F,EAC5BzlI,EAAKwlI,iBAAiBC,GACLzlI,EAAK4wF,oBACbppF,SAAQ,SAAU9D,GACvB,MAAMkC,EAAQlC,EAAQ0C,WACtBR,EAAM0mC,SAAWm5F,EACb7/H,EAAMg6H,OACNh6H,EAAMg6H,KAAOh6H,EAAMg6H,KAAKp2H,QAAQ,OAAQi8H,IAC5C/hI,EAAQiC,SAASC,MAGzB,OAAO5F,EAGXslI,qBAAqBj5F,GACjB,GAAIA,EAAW,CAEX,MAAMq5F,GADNr5F,EAAY7oC,EAAAA,EAAAA,KAAAA,mBAA2B6oC,IACP5iC,MAAM,sCAClCi8H,GAAiBA,EAAcpiI,SAC/B+oC,EAAY,IAAMq5F,EAAc,GAAKA,EAAc,GAAKA,EAAc,GAAKA,EAAc,GAAKA,EAAc,GAAKA,EAAc,IAEnI,MAAMC,EAAet5F,EAAU5iC,MAAM,+CACrC,GAAIk8H,GAAgBA,EAAariI,OAAQ,CAIrC,OAHUiV,SAASotH,EAAa,GAAI,IAC1BptH,SAASotH,EAAa,GAAI,IAC1BptH,SAASotH,EAAa,GAAI,KACf,EAAI,IAAM,UAAY,WAGnD,MAAO,UAGXp2C,mBACI,MAAMvvF,EAAOC,KACP8O,EAAW/O,EAAKuwF,sBACtB,IAAIl3E,EACAyb,EACA08C,EACJ,GAAIxxE,EAAKq8C,UAAYttC,EAASzL,OAAQ,CAClC,MACMsC,EADUmJ,EAASA,EAASzL,OAAS,GACrB8C,WACtBiT,EAAOzT,EAAM4mC,MACbglC,EAAQ5rE,EAAMymC,UACdvX,EAAOlvB,EAAM0mC,cAGbjzB,EAAO,GACPm4D,EAAQxxE,EAAKqG,OAAOgT,KAAKgzB,UACzBvX,EAAO90B,EAAKqG,OAAOgT,KAAKizB,SAQ5B,OANAtsC,EAAKsL,gBAAgB3M,MAAK,WACtBqE,EAAAhD,EACKwlI,iBAAiB1wG,GACjBswG,kBAAkB5zD,GAAM6xD,GACbvgI,MAAQuW,GAAQ,MAE7BrZ,EAGX4kI,cAAcvrH,GACV,MAAMrZ,EAAOC,KACP8O,EAAW/O,EAAK4wF,oBACtB,GAAI7hF,EAASzL,OAAQ,CACjB,MAAMsC,EAAQmJ,EAAS,GAAG3I,WAC1B2I,EAASvH,SAAQ,SAAU9D,GACvB,MAAMkiI,EAAYpiI,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKqG,OAAOgT,KAAMzT,GACvDA,EAAM4mC,MAAQnzB,EACdzT,EAAMwmC,YAAcw5F,EAAUx5F,YAC9BxmC,EAAMymC,UAAYu5F,EAAUv5F,UAC5BzmC,EAAM0mC,SAAWs5F,EAAUt5F,SAC3B1mC,EAAMumC,kBAAoBy5F,EAAUz5F,kBACpCvmC,EAAMsmC,kBAAoB05F,EAAU15F,kBACpCxoC,EAAQiC,SAASC,MAGzB,OAAO5F,EAGX80F,4BACI,OAAA9xF,EAAO/C,KAAIgjI,GAGfp4H,kBACI,MAAM7K,EAAOC,KAGb,aAFMD,EAAKsL,gBACXrI,EAAAjD,EAAIwoF,EAAWxoF,EAAKiY,cAAc,yBAClCjV,EAAOhD,EAAIwoF,GAGf4L,oBACI,MAAMp0F,EAAOC,KACPgP,EAAmBjP,EAAKuwF,sBACxB7sF,EAAUuL,EAAiBA,EAAiB3L,OAAS,GACvDI,GACA1D,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,CAAEn4C,KAAMV,EAAQM,YAAa,SAAU2F,GAC9E,MAAMk8H,EAAoB7lI,EAAK80F,4BAC/B+wC,EAAkBz4H,UAAYzD,EAC9Bk8H,EAAkB7nG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACnCiD,EAAAhD,EAAIgjI,GAAchlG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAEhC8lI,EAAkB5tH,cAAe,GAAEjY,EAAKu8C,qBAAqB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACxG5N,EAAKk1F,cACN,CAAEjnF,SAAS,IAEd43H,EAAkB5tH,cAAe,IAAGjY,EAAKsyF,cAAc/1C,yBAAyB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACjHC,EAAKm1F,oBACN,CAAElnF,SAAS,OAK1BknF,kBAAkB,IAAA/J,EAAA06C,EAEV,QAAJ16C,EAAApoF,EADa/C,KACTgjI,UAAA,IAAA73C,GAAJA,EAAyBptD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnC,QAAJ+lI,EAAA9iI,EAFa/C,KAET+iI,UAAA,IAAA8C,GAAJA,EAAmB9nG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAGxC4kI,mBACI,MAAM3kI,EAAOC,KACT+C,EAAAhD,EAAIgjI,GAAchlG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QACnCC,EAAKo0F,oBAGLp0F,EAAKm1F,kBAIbD,YACI,MAAMl1F,EAAOC,KACPyD,EAAU1D,EAAKuwF,sBAAsB,GAC3C,GAAI7sF,EAAS,CACT,MAAMU,EAAO,GACbpE,EAAK80F,4BAA4BnpF,iBAAiB,SAASnE,SAAQ,SAAUytF,GACzE7wF,EAAK6wF,EAAMp3D,aAAa,SAAWo3D,EAAMnyF,SAE7CY,EAAQK,QAAQK,GAChBpE,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASA,EAASe,MAAOzE,EAAKyE,QACzEzE,EAAKm1F,mBAIb4wC,aAAah3H,GACT,MAAM/O,EAAOC,KACb,GAAID,EAAKu1B,eAAiBx1B,EAAAA,EAAAA,KAAAA,eACtBC,EAAKu1B,eAAiBx1B,EAAAA,EAAAA,KAAAA,cACtBC,EAAKu1B,eAAiBx1B,EAAAA,EAAAA,KAAAA,WAAwB,CAE9C,IAAI43D,EACJ,GAFA33D,EAAKw0F,yBAA2B,GAE5BzlF,EAASzL,OAAS,EAAG,CACrB,IAII0iI,EAJaj3H,EAASxQ,KAAI,SAAUkJ,GAEpC,OADAzH,EAAKw0F,yBAAyBnsF,KAAKZ,EAAIzD,WAChCyD,EAAIlH,YAEc2H,QAAO,SAAU6S,EAAGsP,GAC7C,OAAOtP,EAAEzS,OAAO+hB,MAEpBstC,EAAa,IAAI5oD,EAAS,GAAGrP,YAAYsmI,GACzC,IAAK,IAAI7jI,EAAI,EAAG+I,EAAM6D,EAASzL,OAAQnB,EAAI+I,EAAK/I,IAAK,CACjD,IAAIuB,EAAUqL,EAAS5M,GACvBnC,EAAKyE,MAAMszB,cAAcr0B,GACzB1D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASA,IAExD1D,EAAKyE,MAAMozB,WAAW8/B,GAAYh5D,MAAK,SAAU87B,GAC7Cz6B,EAAKw2F,oBAAoB,CAAC7+B,IAC1B33D,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2D,QAAS+2B,IACjDA,EAAKl2B,UAAUvE,EAAKimI,oBAG5BnwH,EAAA9V,EAAI0jI,EAAAQ,GAAAvjI,KAAJX,EAA8B,CAAC23D,MAG1C,eAAA0yB,IAtnBO,MAAMrqF,EAAOC,WACPD,EAAKsL,gBACXwK,EAAA9V,EAAI2jI,EAAAoB,GAAApkI,KAAJX,EAA+BA,EAAKuwF,uBACvC,SAAAnG,IAUmB,IAAA87C,EAChB,MAAMlmI,EAAOC,KACT,QAAJimI,EAAApwH,EAAA9V,EAAIyjI,EAAA0C,GAAAxlI,KAAJX,UAAI,IAAAkmI,GAAJA,EAA2BloG,UACtBS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBC,EAAKsqF,UAAYtqF,EAAKuwF,sBAAsBjtF,SACpF,SAAA6iI,IAIG,OADalmI,KACDgY,cAAe,IADdhY,KACsBs8C,eACtC,SAAA2nF,EAEwBn1H,GACrB,MAAM/O,EAAOC,KACb+C,EAAAhD,EAAI6iI,GAAYxlG,SAA+B,IAApBtuB,EAASzL,OACpCN,EAAAhD,EAAI+iI,GAAkB1lG,UAAYtuB,EAASqM,KAAKwnH,GAChD5/H,EAAAhD,EAAIgjI,GAAc3lG,SAA+B,IAApBtuB,EAASzL,OACtCN,EAAAhD,EAAIkjI,GAAU7lG,SAAWtuB,EAASzL,OAAS,EAC3CN,EAAAhD,EAAImjI,GAAW9lG,UAAYtuB,EAASqM,KAAKunH,GACzC3iI,EAAKuvF,mBACLz5E,EAAA9V,EAAIupF,EAAAa,GAAAzpF,KAAJX,GACAA,EAAK4qF,YAAYjsF,MAAKksF,GAAUA,EAAOiB,WAAW/8E,EAAS,MAC9D,SAAAg2H,EAEyBh2H,GACtB,MAAM/O,EAAOC,KACb+C,EAAAhD,EAAI+iI,GAAkB1lG,UAAYtuB,EAASqM,KAAKwnH,GAChD,MAAM1vG,EAAOlzB,EAAKkzB,KAClBlwB,EAAAhD,EAAI+iI,GAAkB/kG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBmzB,IAAS0wG,EAAO1wG,KAAKsxG,eACnFxhI,EAAAhD,EAAI8iI,GAAY9kG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBmzB,IAAS0wG,EAAO1wG,KAAKsxG,eAChF1kI,EAtHC8jI,EAAM,OAkBM,CACVC,OAAQ,SACRW,cAAe,kBAgrBvBvlG,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAainG,GACtEpgI,EAAAA,EAAAA,QAAAA,OAAoBogI,EACpB,W,6GCltBApgI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM2pD,EAAe,SAAUi5E,EAAMC,GACjC,OAAID,IACa,IAATA,IACAA,EAAO,IAEJliI,EAAAA,EAAAA,QAAY,EAAMkiI,EAAMC,IAE5BD,GAGX,MAAME,UAAyB7mC,EAAAA,QAC3B//F,cACIG,SAASod,WACT,MAAMjd,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUC,OAAOp+B,MAAM08C,OAChCv8C,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAK4vF,MAAQ5vF,EAAKJ,QAAQgwF,OAAS,QACU,IAAlC5vF,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,SAClBC,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,QAAqB,QAEW,IAApCC,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,WAClBC,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,UAAuB,GAEtCC,EAAKumI,mBAAqB,KAC1BvmI,EAAKwmI,uBAAyB,KAC9BxmI,EAAKymI,0BAA4B,KACjCzmI,EAAK0mI,oBAAsB,GAC3B1mI,EAAK8zD,eAAiB,KACtB9zD,EAAKiF,MAAQ,KACbjF,EAAKy8C,cAAe,EAGxBD,eACI,MAAO,iBAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,KAEbD,EAAK2M,IAAIhB,iBAAiB,qBAAqBnE,SAAQ,SAAUytF,GAC7DA,EAAMp1D,SAAU,KAGpB,MAAM4tB,EAAc,CAACziD,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,IACrD8H,EAASrG,EAAKJ,QAAQyG,QAAU,GAChCsgI,EAAY3mI,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,OACvB6mI,EAAe5mI,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,UAC1B8mI,EAAc7mI,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,SA6D/B,OA5DI4mI,GACAl5E,EAAYplD,KAAK9J,EAAI6M,WAAW,cAAe+hD,EAAantD,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,OACnE,CACIV,GAAIW,EAAK4mC,SACT4oD,YAAaxvF,EAAKJ,QAAQ4vF,YAC1B9jD,qBAAsB1rC,EAAKJ,QAAQ8rC,qBACnCy4D,MAAOnkG,EAAKJ,QAAQukG,SACpBxlG,MAAK,SAAUoM,GAGf,OAFA/K,EAAKumI,mBAAqBx7H,EAC1B/K,EAAK0mI,oBAAoBr+H,KAAK0C,GACvBA,MAGf/K,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,WACX0tD,EAAYplD,KAAK9J,EAAI6M,WAAW,kBAAmB+hD,EAAantD,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,UACvE,CACIV,GAAIW,EAAK4mC,SACTxJ,OAAQwpG,EAAaxpG,OACrBoyD,YAAaxvF,EAAKJ,QAAQ4vF,YAC1B9jD,qBAAsB1rC,EAAKJ,QAAQ8rC,qBACnCy4D,MAAOnkG,EAAKJ,QAAQukG,MACpBv+F,MAAOghI,EAAaE,aAAezgI,EAAOmvB,QAC1C72B,MAAK,SAAUoM,GAGf,OAFA/K,EAAKwmI,uBAAyBz7H,EAC9B/K,EAAK0mI,oBAAoBr+H,KAAK0C,GACvBA,MAGf/K,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,UACX0tD,EAAYplD,KAAK9J,EAAI6M,WAAW,qBAAsB+hD,EAAantD,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,SAC1E,CACIV,GAAIW,EAAK4mC,SACTxJ,OAAQypG,EAAYzpG,OACpBoyD,YAAaxvF,EAAKJ,QAAQ4vF,YAC1B9jD,qBAAsB1rC,EAAKJ,QAAQ8rC,qBACnCy4D,MAAOnkG,EAAKJ,QAAQukG,MACpBv+F,MAAOihI,EAAYC,aAAezgI,EAAOiK,WACzC3R,MAAK,SAAUoM,GAGf,OAFA/K,EAAKymI,0BAA4B17H,EACjC/K,EAAK0mI,oBAAoBr+H,KAAK0C,GACvBA,MAInBxM,EAAI+P,GAAI,GAAEvO,EAAAA,EAAAA,MAAAA,YAAyBA,EAAAA,EAAAA,MAAAA,eAA4BA,EAAAA,EAAAA,MAAAA,mBAAgC,SAAU6N,GACrG5N,EAAKutG,cAGThvG,EAAI+P,GAAI,GAAEvO,EAAAA,EAAAA,MAAAA,mBAAgCA,EAAAA,EAAAA,MAAAA,qBAAkC,SAAUf,GAC9EA,EAAE+L,UAAY/K,EAAKumI,oBAAsBvnI,EAAE+L,UAAY/K,EAAKwmI,wBAA0BxnI,EAAE+L,UAAY/K,EAAKymI,2BACzGzmI,EAAKutG,oBAIP1uG,QAAQwiB,IAAIosC,GACdztD,EAAKumI,qBACLvmI,EAAKumI,mBAAmBzoF,WACxB99C,EAAK8zD,eAAiB9zD,EAAKumI,oBAE/BvmI,EAAKutG,WACEvtG,EAGX6K,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,IAAI+8C,EAAa,CAAEghC,UAAWh+E,EAAKX,IAUnC,OATIW,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,SACXi9C,EAAW+pF,iBAAmBhnI,EAAAA,EAAAA,KAAAA,OAE9BC,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,YACXi9C,EAAWgqF,gBAAkBjnI,EAAAA,EAAAA,KAAAA,UAE7BC,EAAK4vF,MAAM7vF,EAAAA,EAAAA,KAAAA,WACXi9C,EAAWiqF,mBAAqBlnI,EAAAA,EAAAA,KAAAA,SAE7BC,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAWA,GAC7C,WACI,IAAIkqF,EAAc,WACd,OAAQjnI,KAAK6C,OACT,KAAK/C,EAAAA,EAAAA,KAAAA,SAEDC,EAAKwmI,uBAAuB1oF,WAC5B99C,EAAK8zD,eAAiB9zD,EAAKwmI,uBAC3B,MACJ,KAAKzmI,EAAAA,EAAAA,KAAAA,QAEDC,EAAKymI,0BAA0B3oF,WAC/B99C,EAAK8zD,eAAiB9zD,EAAKymI,0BAC3B,MACJ,QAEIzmI,EAAKumI,mBAAmBzoF,WACxB99C,EAAK8zD,eAAiB9zD,EAAKumI,qBAIvCvmI,EAAK2M,IAAIhB,iBAAiB,qBAAqBnE,SAAQ,SAAUytF,GAC7DA,EAAMppF,iBAAiB,SAAUq7H,MAIdlnI,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,oBACxC1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC1D5N,EAAK0mI,oBAAoBl/H,SAAQwmD,IAC7BA,EAAI00C,aAAa3zF,SAASnE,QAAQpD,SAAQwH,GAAKg/C,EAAI61C,gBAAgB70F,KACnEg/C,EAAI8xC,YAAY/wF,SAASnE,QAAQpD,SAAQwH,GAAKA,EAAEvK,MAAMszB,cAAc/oB,UAEzE,CAAEf,SAAS,IAEdjO,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,gBAAgB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB8K,eAAgB+C,GACjG,MAAM04F,QAAuBtmG,EAAKs/C,oBAClC,IAAI1/C,EAAU,CACV4K,MAAOxK,EAAK4hC,gBAAgB,eAAiB,MAAQ5hC,EAAK4hC,gBAAgB,YAC1E42B,SAAUx4D,EAAKumG,iBAGfvmG,EAAKzB,IAAImhD,WAAa1/C,EAAKJ,QAAQ6/C,oBACnC7/C,EAAUR,OAAOmD,OAAO,GAAI3C,EAAS,CACjC8/C,UAAWtgD,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,qBAGpG6mD,EAAej5F,KAAKtM,MAAMN,UAAU6H,OAAO+H,MAAM,GAAIrQ,EAAK0mI,oBAAoBnoI,KAAIyvD,GAAOA,EAAI00C,aAAa3zF,YAAYnP,KACvH,CAAEqO,SAAS,IACdjO,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBAAkB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GAC7F,IAAImB,EAAW/O,EAAK0mI,oBAAoBx+H,QAAO,CAAC/F,EAAG4Y,IACxC5Y,EAAEmG,OAAOyS,EAAE2nF,aAAa3zF,WAChC,IACH/O,EAAKzB,IAAI6uD,eAAer+C,KAEzB,CAAEd,SAAS,IACdjO,EAAKzB,IASA+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAClCgB,EAAK0mI,oBAAoBtrH,MAAK4yC,GAAOA,EAAI00C,eAAiB1jG,EAAEyF,OAASupD,EAAI8xC,cAAgB9gG,EAAEyF,SAC3FzE,EAAKutG,cAGZj/F,GAAGvO,EAAAA,EAAAA,MAAAA,WAA0B,IAAMA,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAChEgB,EAAK0mI,oBAAoBtrH,MAAK4yC,GAAOA,EAAI00C,eAAiB1jG,EAAEyF,OAASupD,EAAI8xC,cAAgB9gG,EAAEyF,SAC3FzE,EAAKutG,cAIbrpG,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKhBslB,WACI,MAAM99C,EAAOC,KACTD,EAAK8zD,gBACL9zD,EAAK8zD,eAAehW,WAI5BG,aACiBh+C,KACR6zD,eAAe7V,YAAW,GAGnCsvD,WACI,MAAMvtG,EAAOC,KACbD,EAAKsL,gBAAgB3M,MAAK,WACtB,MAAMwoI,EAAUnnI,EAAKzB,IAAI4rC,WAAW/uB,MAAK4F,GAAKA,EAAE5W,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBihB,EAAE1N,kBAInF,GAHAtT,EAAK2M,IAAIhB,iBAAiB,SAASnE,SAAQ,SAAUytF,GACjDA,EAAM53D,UAAY8pG,KAElBnnI,EAAKumI,mBAAoB,CACzB,MAAMtxC,EAAQj1F,EAAK2M,IAAIsL,cAAe,eAAclY,EAAAA,EAAAA,KAAAA,UAChDk1F,IACKkyC,IAAYnnI,EAAKwmI,uBAAuBnqF,WAAYr8C,EAAKymI,0BAA0BpqF,UAEpFr8C,EAAKumI,mBAAmBzoF,WAE5Bm3C,EAAMp1D,QAAU7/B,EAAKumI,mBAAmBlqF,UAGhD,GAAIr8C,EAAKwmI,uBAAwB,CAC7B,MAAMvxC,EAAQj1F,EAAK2M,IAAIsL,cAAe,eAAclY,EAAAA,EAAAA,KAAAA,aAChDk1F,IACAA,EAAMp1D,QAAU7/B,EAAKwmI,uBAAuBnqF,UAGpD,GAAIr8C,EAAKymI,0BAA2B,CAChC,MAAMxxC,EAAQj1F,EAAK2M,IAAIsL,cAAe,eAAclY,EAAAA,EAAAA,KAAAA,YAChDk1F,IACAA,EAAMp1D,QAAU7/B,EAAKymI,0BAA0BpqF,UAIvD,MAAM3Q,EAAuB1rC,EAAK0mI,oBAAoBtrH,MAAK3S,GAAKA,EAAE7I,QAAQ8rC,uBACpE07F,EAAsBpnI,EAAK0mI,oBAAoB1xH,OAAMg5C,KAASA,EAAI00C,cAAqD,IAArC10C,EAAI00C,aAAa3zF,SAASzL,QAC5G0qD,EAAI8xC,aAAmD,IAApC9xC,EAAI8xC,YAAY/wF,SAASzL,UAC5C+jI,EAAiBrnI,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,oBACvD8qF,EAAerpG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwB2rC,GACxD27F,EAAehqG,SAAW+pG,EAC1B,MAAME,EAAgBtnI,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,gBACtD+qF,EAActpG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwB2rC,GACvD47F,EAAcjqG,SAAW+pG,EAEzB,MAAMG,EAAkBvnI,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBACxDgrF,EAAgBvpG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwB2rC,GACzD67F,EAAgBlqG,SAAW+pG,EAG3B,MAAMI,EAAexnI,EAAK2M,IAAI/G,MAAMg3C,QACpC58C,EAAK2M,IAAI/G,MAAMg3C,QAAU,OACrB4qF,EACAxnI,EAAK2M,IAAI/G,MAAMg3C,QAAU4qF,EAGzBxnI,EAAK2M,IAAI/G,MAAM6hI,eAAe,eAM9CjkI,EAAAA,EAAAA,QAAAA,iBAA8B8iI,EAC9B,W,iFCxWA9iI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMkkI,UAAe18H,EAAAA,EACjBtL,cACIG,SAASod,WACIhd,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,aAGXM,SACI,MAAM98C,EAAOC,KAIb,OAHKD,EAAKE,OACNF,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,OAAuBxD,IAEpCA,EAAK+8C,qBAAqBl+C,QAAQC,WAG7C+L,eAAetM,GACX,MAAMyB,EAAOC,KACP0nI,EAAuB9nI,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAavD,OAZAyB,EAAKE,KAAK4lC,SAASvnC,SAEO8F,IAAtBrE,EAAKJ,QAAQgoI,MAAsB5nI,EAAKJ,QAAQgoI,aAC1CrpI,EAAI6M,WAAW,cAIzB7M,EAAIqb,QAAO,WACP5Z,EAAKE,KAAKuvB,mBAGRk4G,EACC3nI,GAIfwD,EAAAA,EAAAA,QAAAA,OAAoBkkI,EACpB,W,0FCxCAlkI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMqkI,UAAmB78H,EAAAA,EACrBtL,cACIG,SAASod,WACIhd,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,kBAGXM,SACI,MAAM98C,EAAOC,KAIb,OAHKD,EAAKE,OACNF,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,WAA2BxD,IAExCnB,QAAQC,UAGnB+L,eAAetM,GACX,MAAMyB,EAAOC,KAWb,aAVMJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAChCyB,EAAKE,KAAK4lC,SAASvnC,GAEnBA,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GAC5C,MAAMmI,EAAMnI,EAAEw2D,OACR95C,EAAalY,EAAAA,EAAAA,KAAAA,UAAkB,CAACjF,EAAIqB,QAAQmpC,cAAc,GAAIxqC,EAAIqB,QAAQmpC,cAAc,IAAKxqC,EAAIqB,QAAQuH,IAAKA,GAC9GwU,EAAWnY,EAAAA,EAAAA,KAAAA,UAAkB,CAACjF,EAAIqB,QAAQmpC,cAAc,GAAIxqC,EAAIqB,QAAQmpC,cAAc,IAAKxqC,EAAIqB,QAAQuH,IAAKA,GAClHnH,EAAKE,KAAK4nI,iBAAiB,CAACpsH,EAAW,GAAIA,EAAW,GAAIC,EAAS,GAAIA,EAAS,QAG7E3b,GAIfwD,EAAAA,EAAAA,QAAAA,WAAwBqkI,EACxB,W,iIC8BArkI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMukI,EAAsB,SAAUn/G,GAClC,OAAOwJ,mBAAmBxJ,GAAKxW,MAAM,KAAK7T,KAAI,SAAUkJ,GACpD,OAAOI,WAAWJ,OAIpBs5E,EAAkB,WACpB,IAAI/gF,EAAOC,KAEX+nI,EAAAA,QAAAA,MAAoB/nI,KAAMgd,WAE1B,IAAIovE,EAAKrsF,EAAK8lF,eAAiB,IAAM9lF,EAAKu8C,MAC1Cv8C,EAAKssF,WAAa,CACd27C,KAAM57C,EAAK,QACX67C,QAAS77C,EAAK,WACd87C,SAAU97C,EAAK,YACf+7C,IAAK/7C,EAAK,OACVg8C,KAAMh8C,EAAK,QACXi8C,SAAUj8C,EAAK,aACfk8C,MAAOl8C,EAAK,UACZm8C,OAAQn8C,EAAK,WACbo8C,QAAS,eACTC,UAAW,iBACXC,QAAS,eACTC,QAAS,eACTC,UAAW,iBACXC,UAAWz8C,EAAK,cAChB08C,OAAQ18C,EAAK,YACb28C,QAAS,mBACTC,KAAM58C,EAAK,aACX68C,SAAU78C,EAAK,aACf88C,gBAAiB98C,EAAK,aACtB+8C,OAAQ/8C,EAAK,WACbg9C,WAAYh9C,EAAK,gBACjBi9C,WAAYj9C,EAAK,gBACjBk9C,UAAWl9C,EAAK,cAChBm9C,OAAQn9C,EAAK,sBACbo9C,UAAWp9C,EAAK,uBAChBq9C,cAAe,gBAGnB1pI,EAAK2pI,WAAa,GAElB,MAAMC,EAAepmI,EAAAA,EAAAA,KAAAA,mBAA2BxD,EAAK6pI,2BAC/CC,EAAetmI,EAAAA,EAAAA,KAAAA,mBAA2BxD,EAAK+pI,uBACrD/pI,EAAKgqI,eAAiBJ,EAClBA,IACA5pI,EAAKiqI,qBAAuBz4G,KAAKC,MAAM/f,OAAOo/D,KAAK1+C,mBAAmBw3G,MAEtEE,IACA9pI,EAAKkqI,iBAAmBnC,EAAoB+B,IAIhD,IACI9pI,EAAK0qE,aAAeh5D,OAAOg5D,aAC3B,MAAMhiE,EAAM,gBACZ1I,EAAK0qE,aAAalxD,QAAQ9Q,EAAKA,GAC/B1I,EAAK0qE,aAAaI,WAAWpiE,GAEjC,MAAO1J,GACHgB,EAAK0qE,aAAe,KACpBlnE,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,+BAIlC,GAAI5hC,EAAK0qE,aAAc,CACnB,IAAK,IAAIvoE,EAAI,EAAG+I,EAAMlL,EAAK0qE,aAAapnE,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC1D,IAAIuG,EAAM1I,EAAK0qE,aAAahiE,IAAIvG,GAChC,GAAmD,IAA/CuG,EAAIO,QAAQjJ,EAAKmqI,2BAAmCzhI,IAAQ1I,EAAKmqI,yBAA2BnqI,EAAKoqI,gBAAkB,QAAS,CAE5H,IAAIh8G,EAASpuB,EAAK0qE,aAAaE,QAAQliE,GAAK0J,MAAM,KAC9CmJ,EAASwsH,EAAoB35G,EAAOoa,SACpC1/B,EAAOslB,EAAO7jB,KAAK,KACnBhM,EAAM,CACNuK,KAAMA,EACNyS,OAAQA,EACRjG,IAAK8c,mBAAmB1pB,EAAIme,OAAO7mB,EAAKmqI,yBAAyB7mI,UAErEtD,EAAK2pI,WAAWthI,KAAK9J,IAG7ByB,EAAK2pI,WAAWv/G,MAAK,SAAUrP,EAAGsP,GAC9B,OAAItP,EAAEjS,KAAOuhB,EAAEvhB,KACJ,EAEPiS,EAAEjS,KAAOuhB,EAAEvhB,MACH,EAEL,KAIf,IAAIlJ,EAAU4D,EAAAA,EAAAA,KAAAA,OAAe,GAAIyZ,UAAU3Z,OAAS,EAAI2Z,UAAU,GAAKA,UAAU,IACjFjd,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAe5D,EAAQ48E,WACrC9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzB38E,EAAQ48E,WACT5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAG/Bv8E,EAAKgqI,cACLp9H,SAASjB,iBAAiB3L,EAAKssF,WAAWo9C,eAAeliI,SAAQ,SAAUC,GACvEA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAI1BiL,EAAAA,EAAAA,MAAchL,EAAMid,WACpBjd,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,gBAAgCxD,GAEhDA,EAAKqqI,eAAgB,EACrBrqI,EAAKiqC,WAAa,GAElBjqC,EAAKJ,QAAQmqC,gBAAkB/pC,EAAKJ,QAAQmqC,iBAAmBvjC,EAAAA,EAAAA,gBAC/DxG,EAAKsqI,eAAiB,GACtBtqI,EAAKuqI,cAAgB,EACrBvqI,EAAKwqI,WAAa,KAElBxqI,EAAKyqI,aAAe,EAIpB,IAAI/hF,EAAYH,QAAQG,UACxBH,QAAQG,UAAY,SAAUrJ,GAC1B,IAAIx6C,EAQJ,OAJAA,EAAS6jD,EAAUr4C,MAAMk4C,QAAStrC,WAC9Bjd,EAAK0qI,oBACL1qI,EAAK0qI,mBAAmBzyH,cAAcjY,EAAKssF,WAAW28C,MAAM57G,aAAa,OAAQrtB,EAAK2qI,mBAEnF9lI,GAIX,IAAI+lI,EAAa7tE,UAAU6tE,YAAc7tE,UAAU8tE,eAAiB9tE,UAAU+tE,kBAAoB,GAClG,MAAMC,EAAgB,WAClB,GAAI/qI,EAAK0qI,mBAAoB,CACzB,MAAM3+H,EAAQ/L,EAAK0qI,mBAAmBzyH,cAAcjY,EAAKssF,WAAW48C,UAOpE,OANAn9H,EAAMiyB,UAAUC,OACZl+B,EAAAA,EAAAA,QAAAA,mBACAA,EAAAA,EAAAA,QAAAA,kBACAA,EAAAA,EAAAA,QAAAA,iBAEO6qI,EAAWxgI,MAElB,KAAK,EACL,KAAK,EACL,UAAK/F,EACD0H,EAAMiyB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,iBACpB,MACJ,QACIgM,EAAMiyB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,sBAK9BirI,EAAiB,WACnB,GAAIhrI,EAAK0qI,mBAAoB,CACzB,MAAM3+H,EAAQ/L,EAAK0qI,mBAAmBzyH,cAAcjY,EAAKssF,WAAW48C,UACpEn9H,EAAMiyB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,oBACpBgM,EAAMiyB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,kBAAkCA,EAAAA,EAAAA,QAAAA,mBAG7D6qI,EAAW/+H,kBACX++H,EAAW/+H,iBAAiB,aAAck/H,GAE9Cr5H,OAAO7F,iBAAiB,SAAUk/H,GAClCr5H,OAAO7F,iBAAiB,UAAWm/H,GACnChrI,EAAKsL,gBAAgB3M,MAAK,KACjBo+D,UAAUgyB,QACXi8C,QAKZxnI,EAAAA,EAAAA,QAAWu9E,EAAiBinD,EAAAA,SAE5B,WAEIjoI,EAAAA,EAAAA,QAAAA,mBAAoCA,EAAAA,EAAAA,QAAAA,oBAAqC,kBACzEA,EAAAA,EAAAA,QAAAA,gBAAiCA,EAAAA,EAAAA,QAAAA,iBAAkC,eACnEA,EAAAA,EAAAA,QAAAA,kBAAmCA,EAAAA,EAAAA,QAAAA,mBAAoC,iBACvEA,EAAAA,EAAAA,QAAAA,QAAyBA,EAAAA,EAAAA,QAAAA,SAA0B,aAEnD,IAkCI28C,EAAWqkC,EAAgBtgF,UAE/Bi8C,EAASH,MAAQ,aACjBG,EAASmtF,0BAA4B,UACrCntF,EAASqtF,sBAAwB,aACjCrtF,EAASytF,yBAA2B,kBACpCztF,EAAS0tF,gBAAkB,OAC3B1tF,EAASuuF,oBAAsB,KAC/BvuF,EAASwuF,QAAU,CACfC,MAAO,QACPpsG,KAAM,UACNqsG,YAAa,cACbC,SAAU,YAEd3uF,EAAS4uF,SAAW,CAChBC,OAAQ,SACR3sG,OAAQ,UAEZ8d,EAAS8uF,gBAAkB,CACvB,cACA,kBACA,kBACA,QACA,cACA,aACA,OACA,OACA,aACA,aACA,cACA,mBACA,UACA,SACA,SACA,QACA,QACA,QACA,WACA,gBACA,QACA,oBAGJzrI,EAAAA,EAAAA,MAAAA,iBAAgCA,EAAAA,EAAAA,MAAAA,kBAAiC,sBACjEA,EAAAA,EAAAA,MAAAA,eAA8BA,EAAAA,EAAAA,MAAAA,gBAA+B,oBAC7DA,EAAAA,EAAAA,MAAAA,iBAAgCA,EAAAA,EAAAA,MAAAA,kBAAiC,sBACjEA,EAAAA,EAAAA,MAAAA,cAA6BA,EAAAA,EAAAA,MAAAA,eAA8B,mBAE3D,MAyCM0rI,EAAoB,SAAUz9E,EAAKmwB,GACrCA,EAAGlmE,cAAc,QAAQ+lB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1Co+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAW08C,SAAShrG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvDo+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWm8C,SAASzqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvDo+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWo8C,WAAW1qG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACzDo+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWq8C,SAAS3qG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1Do+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWs8C,SAAS5qG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1Do+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWu8C,WAAW7qG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAGhE,IAAIsmE,EAAe,SAAUl7B,GACzB,OAAOA,EAAOjoB,WAAW1Z,QAAQ,wBAAyB,MAG1DkiI,EAAoB,SAAU19E,EAAKpuD,GACnC,IAAIqE,EAAOrE,GAAW,GACtB,MAAM+rI,EAAS39E,EAAIuuB,WAAWtkE,cAAc+1C,EAAI83B,eAAiB,QAC3D8lD,EAAQ59E,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWi9C,WAC1D,IACIsC,EAASC,EAAUC,EADnBhlH,EAAcinC,EAAI74C,iBAEtB,GAAI4R,EAAYzjB,OAAQ,CAEpB,GADAsoI,EAAMv+G,aAAa,MAAOtG,EAAYzjB,OAAS,GAC3C0qD,EAAIu8E,eAEJ,QAAwBlmI,IAApBJ,EAAK+nI,WACL,IAAK,IAAI7pI,EAAI,EAAG+I,EAAM6b,EAAYzjB,OAAQnB,EAAI+I,EAAK/I,IAC/C,GAAI6rD,EAAIu8E,eAAiBxjH,EAAY5kB,GAAI,CACrCypI,EAAM9oI,MAAQX,EACd,YAMZ,QAAwBkC,IAApBJ,EAAK+nI,WAA0B,CAE/B,MAAMC,EAAoBj+E,EAAIzvD,IAAImkB,gBAClCkpH,EAAM9oI,MAAQikB,EAAY5hB,QAAOoP,GAAKA,EAAI03H,IAAmB3oI,OAGrEwoI,EAAWvzH,SAASqzH,EAAM9oI,OAC1B,IAAIopI,EAAW1qI,KAAKonD,MAA0C,IAApC,IAAIhhC,OAAOb,EAAY+kH,KAAqB,IACtED,EAAU79E,EAAIpsB,gBAAgB,iBAAkB,CAC5C9+B,MAAOopI,EAAShpE,gBAAgBlV,EAAIzvD,IAAMyvD,EAAIzvD,IAAIqB,QAAQyJ,OAAS7C,EAAAA,EAAAA,QAAYgD,QAAQ,IAAK,QAEhGuiI,EAA2B,KAAhBD,EAAW,IAAY/kH,EAAYzjB,OAAS,GAAK,IAC5DsoI,EAAMvuG,UAAW,EACjB2wB,EAAIu8E,cAAgBxjH,EAAY6kH,EAAM9oI,YAGtCgpI,EAAW,EACXD,EAAU,GACVD,EAAM9oI,MAAQ,EACdipI,EAAU,IACV/9E,EAAIu8E,cAAgB,EACpBqB,EAAMvuG,UAAW,EAErB2wB,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAW68C,iBAAiBnrG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyB6rI,EAAMvuG,UAC7G2wB,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWw8C,WAAW9qG,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyB6rI,EAAMvuG,UAEvGsuG,EAAO/lI,MAAMyuE,KAAO03D,EACpBJ,EAAOv+H,UAAYy+H,GAGvB,MAWMM,EAAmB,SAAUn+E,GAC/BA,EAAIuuB,WAAW5wE,iBAAiBqiD,EAAI83B,eAAiB,iCAAiCt+E,SAAQ,SAAUq5C,EAAIu9B,GACxG,GAAIv9B,EAAGhhB,QAAS,CACZ,IAAIusG,EAASp+E,EAAIs8E,eAAezhI,MAAK,SAAUpB,GAC3C,OAAOA,EAAIyX,UAAY2hC,EAAG/9C,SAE9B,GAAIspI,EAAQ,CACR,IAAIC,EAlBS,SAAUD,EAAQhoF,GAE3C,IADA,IAAIv/C,EAAS,KACJ1C,EAAI,EAAG+I,EAAMkhI,EAAOE,iBAAiBhpI,OAAQnB,EAAI+I,MACtDrG,EAASunI,EAAOE,iBAAiBnqI,IACtBuc,KAAO0lC,GAFyCjiD,KAM/D,OAAO0C,EAUe0nI,CAAqBH,EAAQp+E,EAAIu8E,eAC3C,GAAI8B,EAAK,CACL,MAAMG,EAAS,kBACTC,EAAQ,eACRC,EAAQ,YACRC,EAAQ,YACd,IAAIr3H,EAAM82H,EAAO92H,IACjB,GAAIA,EAAIrM,QAAQwjI,GAAS,EAAG,CAExB,IAAIG,EAAQt3H,EAAIrM,QAAQ,KACpB2jI,GAAS,IACTt3H,EAAMA,EAAIuR,OAAO,EAAG+lH,IAExB,IAAK,IAAIr1H,EAAI,EAAGs1H,EAAO7+E,EAAI/jB,WAAW3mC,OAAQiU,EAAIs1H,EAAMt1H,IAAK,CACzD,IAAIyJ,EAAIgtC,EAAI/jB,WAAW1yB,GACvB,GAAIyJ,EAAE3hB,KAAO+sI,EAAOltH,QAAS,CACzB5J,EAAMA,EAAM,UAAY0L,EAAE5D,WAAa,gCAAkCovH,EACrE,sDAAwDxrH,EAAE/N,OAC1D,eAAiBw5H,EAAQ,YAAcC,EAAQ,YAAcC,EACjE,QAIZ,KAAO9rF,GAAqB,UAAfA,EAAGs1B,SACZt1B,EAAKA,EAAG4b,cAER5b,IACAA,EAAGj7C,MAAMknI,eAAiB,OAC1BjsF,EAAGj7C,MAAMmnI,mBAAqB,cAC9BlsF,EAAGj7C,MAAMqhE,gBAAkB,OAAS3xD,EAC/B9L,QAAQgjI,EAAQJ,EAAO/sH,eACvB7V,QAAQijI,EAAOJ,EAAIW,KACnBxjI,QAAQkjI,EAAOL,EAAIY,IACnBzjI,QAAQmjI,EAAON,EAAIa,IAAM,YAQhDC,EAAa,SAAUn/E,EAAKl5B,GAQ9B,OANIA,EAAO,EACEk5B,EAAIpsB,gBAAgB,eAGpBosB,EAAIpsB,gBAAgB,YAAa,CAAEwrG,SAAU/mE,EAAavxC,MAKrEu4G,EAAuB,SAAUr/E,GACnC,IAAI30C,EAAO,GACX20C,EAAIs/E,UAAY,EAChB,IAAK,IAAInrI,EAAI,EAAGgiB,EAAK6pC,EAAIs8E,eAAehnI,OAAQnB,EAAIgiB,EAAIhiB,IAEpD,IADA,IAAIiqI,EAASp+E,EAAIs8E,eAAenoI,GACvBoV,EAAI,EAAGypF,EAAKorC,EAAOE,iBAAiBhpI,OAAQiU,EAAIypF,EAAIzpF,IAAK,CAC9D,IAAI80H,EAAMD,EAAOE,iBAAiB/0H,GAClC,GAAI80H,EAAI3tH,IAAMsvC,EAAIu8E,cACd,MAEJv8E,EAAIs/E,YAAcjB,EAAIkB,GAAKlB,EAAIa,GAAK,IAAMb,EAAIx8C,GAAKw8C,EAAIY,GAAK,GAGhEj/E,EAAIs/E,YACJt/E,EAAIw/E,iBAAmBhsI,KAAKirC,MAAMuhB,EAAIs/E,UAAYt/E,EAAIpuD,QAAQmqC,gBAAkB,SAChF1wB,EAAO20C,EAAIpsB,gBAAgB,SAAU,CAAEwrG,SAAU/mE,EAAarY,EAAIs/E,aAAgB,KAAOH,EAAWn/E,EAAKA,EAAIw/E,kBAAoB,KAErIx/E,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWw8C,WAAW17H,UAAYiM,GAejEo0H,EAAyB,SAAUz/E,EAAK14C,GAC1C,IAAIo4H,EAAUp4H,EAAIrM,QAAQ,KACtBykI,GAAW,IACXp4H,EAAMA,EAAIuR,OAAO,EAAG6mH,IAExB,MAAMluD,EAAMxxB,EAAIrhD,IAAIhB,iBAAiBqiD,EAAIs+B,WAAWg8C,UACpD,IAAK,IAAInmI,EAAI,EAAG+I,EAAMs0E,EAAIl8E,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC5C,MAAMg8E,EAAKqB,EAAIr9E,GACT0P,EAASssE,EAAGlmE,cAAc,KAChC,GAAIpG,GAAUA,EAAOgsB,aAAa,UAAYvoB,EAC1C,OAAO6oE,EAGf,OAAO,MAGX,IAAIwvD,EAAmB,SAAU3/E,EAAKzvD,GAClC,IAAIsG,GAAS,EAKb,OAJImpD,EAAI0c,eACJ1c,EAAI0c,aAAalxD,QAAQw0C,EAAIm8E,yBAA2Bz3G,mBAAmBn0B,EAAI+W,KAAM/W,EAAIgd,OAAS,IAAMhd,EAAIuK,MAC5GjE,GAAS,GAENA,GAYX,MAaM+oI,EAAY,SAAU5/E,EAAK14C,GAC7B,MAAM/W,EAAMyvD,EAAI6/E,cAAc,CAAEv4H,IAAKA,IACrC,GAAI/W,EAAK,CACL,GAzBmB,SAAUyvD,EAAK14C,GACtC,IAAIzQ,GAAS,EAKb,OAJImpD,EAAI0c,eACJ1c,EAAI0c,aAAaI,WAAW9c,EAAIm8E,yBAA2Bz3G,mBAAmBpd,IAC9EzQ,GAAS,GAENA,EAmBCipI,CAAqB9/E,EAAK14C,GAAM,CAChC,MAAM6oE,EA/Dc,SAAUnwB,EAAKllD,GAC3C,MAAM02E,EAAMxxB,EAAIrhD,IAAIhB,iBAAiBqiD,EAAIs+B,WAAWg8C,UACpD,IAAK,IAAInmI,EAAI,EAAG+I,EAAMs0E,EAAIl8E,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC5C,MAAMg8E,EAAKqB,EAAIr9E,GACT0P,EAASssE,EAAGlmE,cAAc,KAChC,GAAIpG,GAAUA,EAAOzE,YAActE,EAC/B,OAAOq1E,EAGf,OAAO,KAsDY4vD,CAAwB//E,EAAKzvD,EAAIuK,MACxCq1E,GACAA,EAAG1hB,cAAcC,YAAYyhB,GAGrC,IAAIz2E,EAAMsmD,EAAI27E,WAAW1gI,QAAQ1K,GAWjC,OAVAyvD,EAAI27E,WAAW3gI,OAAOtB,EAAK,GACtBsmD,EAAI27E,WAAWrmI,SAChB0qD,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWk9C,QAAQnsG,UAAW,EACxD2wB,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWm9C,WAAWvrG,gBAAgB,WAGpE8vB,EAAIvpD,MAAMsK,SACL5J,QAAO6J,GAAKA,EAAE5K,KAAK7F,MAAQA,EAAIuK,OAC/BtB,SAAQwH,GAAKg/C,EAAIvpD,MAAMszB,cAAc/oB,KAEnCzQ,EAAIuK,KAGf,OAAO,MAGX4zC,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBmwD,EAAyB,+BACzBC,EAA+B,6BAC/BlwD,EAAwB,+BACxBmwD,EAA8B,6BAE9B5kI,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,oBAAsByxF,GAAwBz/H,QACpEjF,EAAStJ,EAAKu8C,MAAQ,mBAAqB0xF,GAA8B1/H,QACzEjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEjF,EAAStJ,EAAKu8C,MAAQ,qBAAuB2xF,GAA6B3/H,QAC1EvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAAS4W,GAC5D,IAAIg1E,EAAe,CAAEi/C,WAAY3pI,EAAK2pI,WAAYwE,OAAQnuI,EAAKu8C,MAAQ,SAAW/4C,EAAAA,EAAAA,UAClFxD,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAAM,SAAU5yC,GACzD3J,EAAKu8E,WAAWnvE,UAAYzD,EAC5B3J,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQl9H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACjGA,EAAEoxG,iBACFnwG,KAAKmuI,eAAiB,EACtBnuI,KAAKouI,aAAepuI,KAAK6C,MAAMQ,OAC/BrD,KAAK+mH,cAGVroH,MAAK,WACJqB,EAAKg9C,WAAW0tC,GAAc,WAC1B1qF,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi8C,OAAO18H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACtFC,EAAKsuI,kBACN,CAAErgI,SAAS,IACdjO,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQl9H,iBAAiB,SAAS,WAC5E7L,EAAKuuI,uBAETvuI,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAWk8C,QAAQ38H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAChFC,EAAKwuI,iBACN,CAAEvgI,SAAS,IACdjO,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,oBAAoBj6E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAClGC,EAAKyuI,kBACN,CAAExgI,SAAS,IAEdjO,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,kBAAkBj6E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAChGC,EAAK0uI,uBACN,CAAEzgI,SAAS,IAEd,MAAMklF,EAAOnzF,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW+7C,MACpDl1C,EAAKtnF,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWu8C,WAAW,SAAU7pI,GAC7GgB,EAAK2uI,eAAe3vI,EAAE0O,OAAO+uD,cAAcxkD,cAAc,KAAK7K,cAC9D,CAAEa,SAAS,IACfklF,EAAKtnF,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWq8C,SAAS,SAAU3pI,IAjTnG,SAAUgvD,EAAKmwB,GACvCA,EAAGlmE,cAAc,QAAQ+lB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvC,MAAM6uI,EAAUzwD,EAAGlmE,cAAc+1C,EAAIs+B,WAAW08C,SAChD4F,EAAQ5wG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACzB6uI,EAAQ9rI,MAAQq7E,EAAGlmE,cAAc,UAAU7K,UAC3CwhI,EAAQ5nB,QACR7oC,EAAGlmE,cAAc+1C,EAAIs+B,WAAWm8C,SAASzqG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1Do+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWo8C,WAAW1qG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC5Do+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWq8C,SAAS3qG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvDo+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWs8C,SAAS5qG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvDo+E,EAAGlmE,cAAc+1C,EAAIs+B,WAAWu8C,WAAW7qG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAwSzC8uI,CAAoB7uI,EAAMhB,EAAE0O,OAAO+uD,kBACnC,CAAExuD,SAAS,IACfklF,EAAKtnF,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWo8C,WAAW,SAAU1pI,GAC7G,MAAMm/E,EAAKn/E,EAAE0O,OAAO+uD,cACpB0hB,EAAGlmE,cAAcjY,EAAKssF,WAAW08C,SAASlmI,MAAQq7E,EAAGlmE,cAAc,KAAK7K,UACxEq+H,EAAkBzrI,EAAMm+E,MACxB,CAAElwE,SAAS,IACfklF,EAAKtnF,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWm8C,SAAS,SAAUzpI,GAC3G,MAAMm/E,EAAKn/E,EAAE0O,OAAO+uD,cACpBgvE,EAAkBzrI,EAAMm+E,GACxB,MAAMtsE,EAASssE,EAAGlmE,cAAc,KAC1Bq2G,EAAUnwC,EAAGlmE,cAAcjY,EAAKssF,WAAW08C,SAASlmI,MACpDvE,EAAMyB,EAAK6tI,cAAc,CAAEv4H,IAAKzD,EAAOgsB,aAAa,UACtDt/B,IACAA,EAAIuK,KAAOwlH,EACXz8G,EAAOzE,UAAYkhH,EACnBz8G,EAAOwb,aAAa,QAASihG,GAC7Bqf,EAAiB3tI,EAAMzB,OAE3B,CAAE0P,SAAS,IACfklF,EAAKtnF,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkCxD,EAAKssF,WAAWs8C,SAAS,SAAU5pI,GAC3G,MAAMovE,EAAMpvE,EAAE0O,OACd,IAAIohI,GAAc1gE,EAAIpwC,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QACzCC,EAAK2M,IAAIhB,iBAAiB3L,EAAKssF,WAAWs8C,SAASphI,SAAQ6iB,GAAKA,EAAE2T,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UACnF,MAAM2/E,EAAUtR,EAAI3R,cAAcxkD,cAAc,KAAK7K,UACrD,GAAIsyE,EAAS,CACT,IAAInhF,EAAMyB,EAAK6tI,cAAc,CAAE/kI,KAAM42E,IACrC,GAAInhF,EAAK,CACL,IAAIgd,EAASwsH,EAAoBxpI,EAAIgd,QACrCvb,EAAKyE,MAAM2zB,gBACP02G,IACA9uI,EAAKyE,MAAMwyB,WACP,CACI,CACI,CAAC1b,EAAO,GAAIA,EAAO,IACnB,CAACA,EAAO,GAAIA,EAAO,IACnB,CAACA,EAAO,GAAIA,EAAO,IACnB,CAACA,EAAO,GAAIA,EAAO,MAGzB,CACEjX,YAAY,EACZF,KAAM,CACF7F,IAAKA,EAAIuK,QAEdnK,MAAK,WACJqB,EAAKyE,MAAMlG,IAAI6uD,eAAeptD,EAAKyE,MAAMsK,aAEjDq/D,EAAIpwC,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClBquE,EAAI/gD,aAAa,QAASrtB,EAAK4hC,gBAAgB,0BAI3D,CAAE3zB,SAAS,IAwCf,MAAMw3G,EAAczlH,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAWk9C,QACrDuF,EAAiB,YAvCT,SAAUroB,GACpBA,EAAaA,EAAWr4F,cAExB,MAAMmxD,EAAMx/E,EAAK2M,IAAIhB,iBAAiB3L,EAAKssF,WAAWg8C,UACtD9oD,EAAIh4E,SAAQ,SAAU22E,GAClBA,EAAGv4E,MAAMg3C,QAAU,UAEvB,MAAMoyF,EAAS,GAOf,GANAxvD,EAAIh4E,SAAQ,SAAU22E,GACdA,EAAG30D,QAAQ,sBAAwBzpB,EAAAA,EAAAA,QAAAA,SACnCivI,EAAO3mI,KAAK81E,MAIM,IAAtBuoC,EAAWpjH,OACX0rI,EAAOxnI,SAAQ,SAAU22E,GACrBA,EAAGv4E,MAAM6hI,eAAe,cAE5BznI,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,oBAAoBlgF,MAAM21C,WAAa,cACjF,CACHv7C,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,oBAAoBlgF,MAAM21C,WAAa,SACpF,IAAIhnC,EAAI,IAAIgV,OAAOm9F,EAAY,KAC/BsoB,EAAOxnI,SAAQ,SAAU22E,GACrBA,EAAGv4E,MAAMg3C,QAAUroC,EAAE2tB,KAAKi8C,EAAGlmE,cAAc,KAAKjK,aAAe,GAAK,UAGnEghI,EAAO5zH,MAAK,SAAU+iE,GACvB,OAAQA,EAAGxQ,WAEX6R,EAAIh4E,SAAQ,SAAU22E,GACdA,EAAG30D,QAAQ,kCACX20D,EAAGv4E,MAAM6hI,eAAe,eASxCtpE,CAAQl+D,KAAK6C,MAAMurB,cAAcxE,SAErC47F,EAAY55G,iBAAiB,QAASkjI,GACtCtpB,EAAY55G,iBAAiB,SAAUkjI,GAEvC/uI,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAW88C,QAAQv9H,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,wBAAwB,SAAUxE,GACjJ,MAAMspF,EAAWtpF,EAAE0O,OACnB,GAAI46E,EAASzoD,QACT7/B,EAAKiqC,WAAW5hC,KAAKrI,EAAKzB,IAAIqhB,SAAS0oE,EAASxlF,aAGhD,IAAK,IAAIX,EAAI,EAAGgiB,EAAKnkB,EAAKiqC,WAAW3mC,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAEtD,GADWnC,EAAKiqC,WAAW9nC,GACpB9C,KAAOipF,EAASxlF,MAAO,CAC1B9C,EAAKiqC,WAAWjhC,OAAO7G,EAAG,GAC1B,OAIZnC,EAAKivI,uBACLvD,EAAkB1rI,GAClBmsI,EAAiBnsI,GACjBA,EAAKuuI,oBACLlB,EAAqBrtI,OAGzB,MAAM4rI,EAAQ5rI,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi9C,WACtD2F,EAAgB,SAAUlwI,GAC5B0sI,EAAkB1rI,EAAM,CACpBgsI,WAAYhtI,EAAE0O,OAAO5K,QAEzBqpI,EAAiBnsI,GACjBqtI,EAAqBrtI,IAEzB4rI,EAAM//H,iBAAiB,QAASqjI,GAChCtD,EAAM//H,iBAAiB,SAAUqjI,GAEjC,MAAM/wD,EAAKsvD,EAAuBztI,EAAMsS,SAASR,MAC7CqsE,GACAA,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAGjByD,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,OAGH75B,MAAK,WACFG,OAEHsX,OAAM,SAAUsD,GACbhE,EAAOgE,aAAeza,MAAQya,EAAMza,MAAMya,UAKtDhI,OAAO7F,iBAAiB,gBAAgB,SAAU7M,GAC9C,GAAIgB,EAAKqqI,cAAe,CACpB,IAAI/lG,EAAMtkC,EAAK4hC,gBAAgB,6BAE/B,OADA5iC,EAAEqxG,YAAc/rE,EACTA,MAEZ,QAIXoY,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAEPkvI,EAAuBnH,EAAAA,QAAAA,UAAAA,SAAAA,KAAsChoI,EAAMzB,GAEzEyB,EAAKozH,mBAAmBz0H,MACpB,WACIo+D,UAAUsa,cAAczqB,MAAMjuD,MAAK,WAC/Bo+D,UAAUsa,cAAcxrE,iBAAiB,WAAW,SAAUi0B,GAC1D,OAAQA,EAAM17B,KAAK07B,OACf,IAAK,WACD9/B,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CACxCuV,IAAKwqB,EAAM17B,KAAK0E,KAChBsmI,UAAWtvG,EAAM17B,KAAKgrI,UACtBx1H,OAAQkmB,EAAM17B,KAAKmW,MACnB80H,MAAOvvG,EAAM17B,KAAKirI,QAEtB,MACJ,IAAK,SACDrvI,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CACxCuV,IAAKwqB,EAAM17B,KAAK0E,KAChBsmI,UAAWtvG,EAAM17B,KAAKgrI,YAE1B,MACJ,IAAK,UACDpvI,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAA6B,CAAEuV,IAAKwqB,EAAM17B,KAAK0E,OAC5D,MACJ,IAAK,QACGg3B,EAAM17B,KAAKuoB,SAAW3sB,EAAKsrI,SAASC,QACpC/nI,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,4BAA6B,CAAEtsB,IAAKwqB,EAAM17B,KAAKkR,cAS7FynD,UAAUgyB,QApmBJlkF,iBAClB,MAAMykI,EAAe1iI,SAAS8J,gBAAgBmnB,aAAa,aAAe,oBAM1E,IAAIz5B,SALmBZ,EAAAA,EAAAA,KAAQ,CAC3B8R,IAAK9R,EAAAA,EAAAA,KAAAA,iBAAyB8rI,EAAc,CAAEC,GAAIzrG,KAAKC,QACvD7V,OAAQ,MACRtC,aAAc,UAEExnB,KAAKorI,YACzB,IAAI9gF,EAAOuyC,GAAAA,CAAI78F,GACXqrI,EAASrrI,EAAK6E,QAAQ,YACtBwmI,GAAU,IACVrrI,EAAOA,EAAKyiB,OAAO,EAAG4oH,KAE1BA,EAASrrI,EAAK6E,QAAQ,eACR,IACV7E,EAAOA,EAAKyiB,OAAO,EAAG4oH,KAE1BA,EAASrrI,EAAK6E,QAAQ,eACR,IACV7E,EAAOA,EAAKyiB,OAAO,EAAG4oH,IAE1B,IAAIz2C,EAAQ50F,EAAKgO,MAAM,UAAUjN,QAAO,SAAUsC,GAC9C,OAAOA,EAAInE,OAAS,GAA0B,IAArBmE,EAAIwB,QAAQ,MAAsB,WAARxB,KAIvD,OADAuxF,EAAMxwD,QACC,CACHkmB,KAAMA,EACN1rB,KAAMg2D,GA0kBE02C,GAAkB/wI,MAAK,SAAUi9B,GAC7B,MAAM+zG,EAAiB3vI,EAAKmqI,yBAA2BnqI,EAAKoqI,gBAAkB,QAC9E,IAAI17E,EAIJ,GAHI1uD,EAAK0qE,eACLhc,EAAO1uD,EAAK0qE,aAAaE,QAAQ+kE,IAEjCjhF,IAAS9yB,EAAI8yB,KAAM,CACnB,MAAMkhF,GAAalhF,EACb0gF,EAAYpvI,EAAK6vI,aAAaj0G,EAAIoH,MAClC8sG,EAAkB,SAAU9wI,GAC1BA,EAAEowI,YAAcA,IACZpvI,EAAK0qE,cACL1qE,EAAK0qE,aAAalxD,QAAQm2H,EAAgB/zG,EAAI8yB,MAE7CkhF,GACDpsI,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,2BAA2B,WACvDtvB,SAASy9H,YAGjB/vI,EAAKqO,IAAItO,EAAAA,EAAAA,MAAAA,iBAA+B+vI,KAGhD9vI,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA+B+vI,UAKvD,SAAU55H,GACNlW,EAAKsL,gBAAgB3M,MAAK,WACtB,MAAMu1D,EAAYl0D,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,aAC5CyzF,EAAUpjI,SAASC,cAAc,OACvCmjI,EAAQhyG,UAAUnjB,IAAI,WAAY,oBAClC,MAAMw9F,EAASzrG,SAASC,cAAc,KAChCwM,EAAOzM,SAASC,cAAc,UACpCwM,EAAKjM,UAAYpN,EAAK4hC,gBAAgB,oBACtCy2E,EAAOvrG,YAAYuM,GACnB,MAAMC,EAAS1M,SAASC,cAAc,KACtCyM,EAAOlM,UAAY8I,EAAM0H,QACzBoyH,EAAQljI,YAAYurG,GACpB23B,EAAQljI,YAAYwM,GACpB46C,EAAUj8C,cAAcjY,EAAKssF,WAAWk8C,QAAQxqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC9Dm0D,EAAUpnD,YAAYkjI,SAGhC55H,OAAM,IAAMzO,QAAQC,IAAI,wCAEtB5H,EAAKgqI,eACLzrI,EAAIoO,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAEtBC,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,aAAc,CAAEjnC,IAAKtV,EAAK2qI,oBAAqB,SAAUhhI,GAOvF,GALA3J,EAAK0qI,mBAAqBlnI,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQqwI,mBACjDjwI,EAAKJ,QAAQqwI,mBACd1xI,EAAIoO,IAAIG,YAAY9M,EAAK0qI,oBAE7B1qI,EAAK0qI,mBAAmBt9H,UAAYzD,GAC/BozD,UAAUgyB,OAAQ,CACnB,MAAMmhD,EAAWlwI,EAAK0qI,mBAAmBzyH,cAAcjY,EAAKssF,WAAW48C,UACvEgH,EAASlyG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,oBACvBmwI,EAASlyG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,kBAAkCA,EAAAA,EAAAA,QAAAA,iBAEhEC,EAAK0qI,mBAAmBzyH,cAAcjY,EAAKssF,WAAW28C,MAAMp9H,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GACvGwE,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,0BAC5B,MACA,WACI5iC,EAAEoxG,2BAMtB,MAAM+/B,EAASnwI,EAAK4mC,SACd1nB,EAAUlf,EAAK4mC,SACrB5mC,EAAK0tF,aAAenvF,EAAI8rD,SAAS,CAC7BhrD,GAAI6f,EACJ9U,KAAMrK,EAAAA,EAAAA,UAAAA,OACNuvB,SAAS,EACT+1D,MAAOrlF,EACPqG,OAAQ,CACJmvB,KAAMj3B,EAAIqB,QAAQyG,OAAOmvB,QAGjCx1B,EAAKyE,MAAQ,KACb,MAAMgpF,QAAgB5uF,QAAQwiB,IAAI,CAC9BrhB,EAAK0tF,aACL1tF,EAAKsL,kBAEH7G,EAAQzE,EAAKyE,MAAQgpF,EAAQ,GACnCztF,EAAKowI,cAAgB7xI,EAAI6M,WAAW,OAAQ,CACxC/L,GAAI8wI,EACJxjI,IAAK3M,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW27C,MAC5C/0G,KAAMnzB,EAAAA,EAAAA,KAAAA,UACNiqF,cAAc,IAElBhqF,EAAKowI,QAAQlyH,SAASzZ,GACtBzE,EAAKowI,QACA9hI,GAAGvO,EAAAA,EAAAA,MAAAA,WAAwB,SAAU6N,GAClC5N,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,qCAAsC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,UAErFuO,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAChC,IAAI+C,EAAS/C,EAAE0E,QAAQnD,SAAS,GAC5B8vI,EAAStuI,EAAO,GAChBuuI,EAAOvuI,EAAO,GACdwuI,EAAO/uI,KAAKqa,IAAIw0H,EAAO,GAAIC,EAAK,IAChCE,EAAOhvI,KAAK4K,IAAIikI,EAAO,GAAIC,EAAK,IAChCG,EAAOjvI,KAAKqa,IAAIw0H,EAAO,GAAIC,EAAK,IAChCI,EAAOlvI,KAAK4K,IAAIikI,EAAO,GAAIC,EAAK,IACpCtwI,EAAKuqD,UAAU,CAACgmF,EAAME,EAAMD,EAAME,IAClC,MAAM7nB,EAAa7oH,EAAKu8E,WAAW5wE,iBAAiB,wBACpDk9G,EAAWrhH,SAAQ,SAAU8gF,GAEzB,MAAM7jF,EAAQzE,EAAKzB,IAAIqhB,SAAS0oE,EAASxlF,OAEzC,IADA,IAAIq7E,EAAKmK,EACFnK,GAAqB,OAAfA,EAAGhI,SACZgI,EAAKA,EAAG1hB,cAEZ,GAAIh4D,EAAMvE,KAAKwhB,wBAAwBnjB,EAAI4I,KAAK8wB,SAASxzB,EAAM2a,WAAY,CACvE,MAAMitH,EAAMrsI,EAAKE,KAAKywI,kBAAkB,CACpCp1H,OAAQvb,EAAKub,OACbyH,OAAQ,CAACve,KACV,GAAG6nI,iBAENnuD,EAAGngD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBssI,EAAI/oI,aAGhD66E,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAGzB,MAAM6wI,EAAY5wI,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAW+8C,WAAa,SAAWtpI,EAAAA,EAAAA,QAAAA,OAAwB,KAChHC,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWg9C,YAAYl8H,UAAYpN,EAAK4hC,gBAAgBgvG,EAAY,mBAAqB,6BAE5HzE,EAAiBnsI,GACjBqtI,EAAqBrtI,GACrBwD,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKu8E,WAAWtkE,cAAcjY,EAAK8lF,eAAiB,WAAY,CAC9E9X,aAAc,WAMV,IAAIu+C,EACJ,GANArlE,YAAW,WACP2hE,EAAWrhH,SAAQ,SAAUq5C,GACzBA,EAAGxjB,UAAW,OAEnB,KAECyG,KAAKrjC,UAAUyiE,eAAgB,CAC/B,IAAI2tE,EAAM,GACVA,EAAIC,KAAOD,EAAIE,MAAQF,EAAIG,IAAMH,EAAII,KAAOJ,EAAIK,OAASL,EAAIM,OAAS,UACtE5kB,GAAO,IAAIzoF,MAAOo/B,eAAeljE,EAAKzB,IAAIqB,QAAQyJ,OAAOG,QAAQ,IAAK,KAAMqnI,QAG5EtkB,GAAO,IAAIzoF,MAAO5gB,WAEtBljB,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQjmI,MAAQypH,EAC9DvsH,EAAKuuI,qBAET1gE,cAAe,WACXg7C,EAAWrhH,SAAQ,SAAUq5C,GACzBA,EAAGxjB,UAAW,KAElBr9B,EAAKowI,QAAQ3rI,MAAM2zB,sBAKnC75B,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GACzCgB,EAAKowI,UAAYpxI,EAAE+L,SACf/K,EAAKq/C,SAAWr/C,EAAKkrI,QAAQkG,SAC7BpxI,EAAKyuI,mBAKjB,IAAI4C,EAAsB,SAAU5sI,GAChC,IAAII,GAAS,EACb,MAAMysI,EAAStxI,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAW88C,QACvDmI,EAAe,WACjB,QAASD,EAAOr5H,cAAc,sBAAwBxT,EAAMpF,GAAK,OAErE,IAAImyI,EAAe/sI,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,OAA0B0E,EAAM8d,cAalE,OAZI/e,EAAAA,EAAAA,KAAAA,gBAA0BA,EAAAA,EAAAA,KAAAA,cAC1BguI,EAAeA,GAAgBhuI,EAAAA,EAAAA,KAAAA,aAAqBiB,EAAM6Q,MAE1Dk8H,IAAiBD,MACjB1sI,GAAS,EACT7E,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,WAAY93C,GAAO,SAAUkF,GAC3D,IAAK4nI,IAAgB,CACjB,MAAM/zH,EAAS,IAAIC,UACnB6zH,EAAOxkI,YAAY0Q,EAAOG,gBAAgBhU,EAAM,aAAag4B,KAAKxqB,iBAIvEtS,GAGX,MAAMwlD,EAAW,SAAU5lD,GACvB,GAAIA,EAAMuO,QAAUhT,EAAKgqI,aAAc,CAEnC,MAAMjjH,EAActiB,EAAM0Q,iBAC1B,GAAI4R,EAAa,CACb,MAAM0qH,EAAoB1qH,EAAY5hB,QAAOoP,GAAKA,GAAKvU,EAAKiqI,qBAAqBvrH,MAC7E+yH,EAAkBnuI,QAClBmB,EAAMqiB,eAAe2qH,IAKjCzxI,EAAKsL,gBAAgB3M,MAAK,WACtB0yI,EAAoB5sI,OA4L5B,OAxLAlG,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACjCqrD,EAASrrD,EAAEyF,UAEd6J,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAEpCgB,EAAKsL,gBAAgB3M,MAAK,WACtB,MAAM8F,EAAQzF,EAAEyF,MAChB,GAAIA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAuB,CACtC,MAAMo+E,EAAKn+E,EAAKu8E,WACXtkE,cAAcjY,EAAKssF,WAAW88C,QAC9BnxH,cAAc,sBAAwBxT,EAAMpF,GAAK,MACtD8+E,EAAG1hB,cAAcC,YAAYyhB,UAIxC7vE,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GACzCrP,EAAI0rC,WAAWziC,SAAQwZ,GAAKqpC,EAASrpC,QAG7CziB,EAAIquD,OAAM,WACN,GAAI5sD,EAAKgqI,aAAc,CAEnB,IAAI0H,EAAU,GACd1xI,EAAKwrI,gBAAgBhkI,SAAQ,SAAUmqI,GACnCA,EAASA,EAAO9qH,OAAO,EAAG,GAAGg5B,cAAgB8xF,EAAO9qH,OAAO,GAC3D6qH,EAAUA,EAAQppI,OAAO/J,EAAI2G,mBAAmB,cAAgBysI,OAGpE,MAAMC,EAAkB5xI,EAAK4hC,gBAAgB,wCAE7CrjC,EAAI6rC,SAAS5iC,SAAQ,SAAyBuD,GACtC2mI,EAAQzoI,QAAQ8B,GAAW,GAC3BA,EAAQ2zC,QAAQ,CAAEplC,OAAQs4H,OAIlChlI,SAASjB,iBAAiB3L,EAAKssF,WAAWo9C,eAAeliI,SAAQ,SAAUC,GACvEA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,eAK9BxB,EAAIqb,QAAO,WAWP,GATA5Z,EAAK0tF,aAAa/uF,MAAK,SAAU8F,GAC7BlG,EAAI20D,cAAczuD,MAGtBzE,EAAKsL,gBAAgB3M,MAAK,WACtBqB,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAWk8C,QAAQnrG,UAAW,EAC1D9+B,EAAI0rC,WAAWziC,QAAQ6pI,MAGvBrxI,EAAKgqI,aAAc,CACnB,MAAM6H,EAAS7xI,EAAKiqI,qBACd6H,EAAc,SAAUrtI,EAAOstI,GAEjC,OAD6C,IAA5BttI,EAAM6Q,IAAIrM,QAAQ,MAAcqJ,SAASN,SAAWvN,EAAM6Q,IAAM7Q,EAAM6Q,OACnEu8H,EAAOv8H,IAAIy8H,EAAYC,SAAWvtI,EAAM2Y,aAAe20H,EAAY1yI,IAAMoF,EAAM2a,YAAcyyH,EAAOtpH,IAAIwpH,EAAYE,SAGtIC,EAAgB3zI,EAAIqB,QAAQwvB,oBAC7BjqB,QAAQgmD,GAAQA,EAAI/gD,OAASrK,EAAAA,EAAAA,UAAAA,OAC7BoF,QAAQgmD,GACE0mF,EAAO7uH,OAAO5H,MAAM4F,GAAM8wH,EAAY3mF,EAAKnqC,OAErD7b,QAAQgmD,IACG5sD,EAAI0rC,WAAW7uB,MAAM4F,GAAMA,EAAE3hB,KAAO8rD,EAAI9rD,OAExDR,QAAQwiB,IAAI6wH,EAAc3zI,KAAKkG,GACpBlG,EAAI8rD,SAAS7mD,EAAAA,EAAAA,KAAAA,OAAe,GAAIiB,EAAO,CAAEuO,QAAQ,QACxD+6C,SAAQ,WAER,MAAMokF,EAAe,GACrB,IAAK,IAAIhwI,EAAI,EAAGgiB,EAAK0tH,EAAO7uH,OAAO1f,OAAQnB,EAAIgiB,EAAIhiB,IAC/C,IAAK,IAAIoV,EAAI,EAAGypF,EAAKziG,EAAI0rC,WAAW3mC,OAAQiU,EAAIypF,EAAIzpF,IAAK,CACrD,MAAM8X,EAAY9wB,EAAI0rC,WAAW1yB,GACjC,GAAI8X,GAAaA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,MAAyB+xI,EAAYziH,EAAWwiH,EAAO7uH,OAAO7gB,IAAK,CACnGgwI,EAAa9pI,KAAKgnB,GAClB,OAIR8iH,EAAa7uI,QACb/E,EAAI4rD,aAAagoF,EAAa,IAAI,WAE9B,IAAK,IAAIhwI,EAAI5D,EAAI0rC,WAAW3mC,OAAS,EAAGnB,GAAK,EAAGA,IAAK,CACjD,MAAMktB,EAAY9wB,EAAI0rC,WAAW9nC,GAC7BktB,GAAaA,EAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,SAA4BoyI,EAAal6G,SAAS5I,IAClF9wB,EAAIwsD,YAAY17B,GAIxB9wB,EAAIgsD,UAAUvqD,EAAKkqI,iBAAkB,CAAE1/E,SAAS,EAAO8H,SAAS,cAOpFtyD,EACKsO,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACzCgB,EAAKqqI,eAAgB,EACrB,MAIM/0H,EAJa,SAAUA,GACzB,MAAMo4H,EAAUp4H,EAAIrM,QAAQ,KAC5B,OAAOykI,GAAW,EAAIp4H,EAAIuR,OAAO,EAAG6mH,GAAWp4H,EAEvC88H,CAAWpzI,EAAEsW,KACnB6oE,EAAKsvD,EAAuBztI,EAAMsV,GACpC6oE,IAAOn+E,EAAKqyI,sBAEZl0D,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UACpByD,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,qBAG1B5hC,EAAKwqI,YAAcl1H,IAAQtV,EAAKwqI,WAAWl1H,OAxmBhD,SAAU04C,GACrB,MAAMzvD,EAAMyvD,EAAIw8E,WACZmD,EAAiB3/E,EAAKzvD,KACtByvD,EAAIzQ,gBAAgByQ,EAAIzR,MAAQ,YAAa,CAAEzzC,KAAMvK,EAAIuK,KAAMwM,IAAK/W,EAAI+W,MAAO,SAAU3L,GACrF,MAAM6T,EAAS,IAAIC,UACnBuwC,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW+7C,MAAMv7H,YAAY0Q,EAAOG,gBAAgBhU,EAAM,aAAag4B,KAAKxqB,YACtG62C,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWm9C,WAAWp8G,aAAa,SAAU,UACvE2gC,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWk9C,QAAQnsG,UAAW,KAE5D2wB,EAAI27E,WAAWthI,KAAK9J,IAgmBR+zI,CAAOtyI,GACPzB,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gBAAiB,CAAE89C,QAAS1/E,EAAKwqI,WAAW1hI,SAGnF9I,EAAKwqI,WAAa,KAClBxqI,EAAKyuI,mBAERngI,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA6B,SAAUf,GACvCgB,EAAKqqI,eAAgB,EACrB,IAAI3qD,EAAUkuD,EAAU5tI,EAAMhB,EAAEsW,MAAQtV,EAAKwqI,YAAcxqI,EAAKwqI,WAAW1hI,KAC3E9I,EAAKwqI,WAAa,KACd9qD,GACAnhF,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,aAAc,CAAE89C,QAASA,KAE5D1/E,EAAKyuI,mBAERngI,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACzC,IAAIqwI,EAAQrwI,EAAEqwI,OACTA,GAASrvI,EAAKsqI,iBACf+E,EAAQrvI,EAAKsqI,eAAe,GAAGgD,WAEnC,IAAI1zH,EAAS5a,EAAE4a,OACXA,EACA5Z,EAAKyqI,aAAe7wH,GAGpB5Z,EAAKyqI,cAAgB,EACrB7wH,EAAS5Z,EAAKyqI,cAElBzqI,EAAKuyI,qBAAqB34H,EAAQy1H,MAErC/gI,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtCgB,EAAKqqI,eAAgB,EACrBrqI,EAAKyuI,gBACL,IAAInqG,EAAMtkC,EAAK4hC,gBAAgB,wBAC3B4wG,GAAc,EAClB,OAAQxzI,EAAEsa,QACN,IAAK,QACDgrB,GAAO,KAAOtkC,EAAK4hC,gBAAgB,oCACnC,MACJ,IAAK,WACD0C,GAAO,KAAOtkC,EAAK4hC,gBAAgB,uCACnC,MACJ,IAAK,WACe,OAAZ5iC,EAAE8sB,QACF8hH,EAAU5tI,EAAMhB,EAAEsW,KAEtBk9H,GAAc,EACd,MACJ,IA79BK,iBA89BDluG,GAAO,KAAOtkC,EAAK4hC,gBAAgB,4CAKvC4wG,IACIhvI,EAAAA,EAAAA,KAAAA,YACAA,EAAAA,EAAAA,MAAS8gC,GACT9gC,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,qCAG9Bp+B,EAAAA,EAAAA,MAAS8gC,IAGjBtkC,EAAKwqI,WAAa,cAGpB2E,EACCnvI,GAGX08C,EAAS6N,UAAY,SAAUhvC,GAEvBxa,MAAMC,QAAQua,IAAWA,EAAOjY,QAAU,IADnCrD,KAEFsb,OAASA,EAFPtb,KAGFgvI,yBAIbvyF,EAAS6xF,kBAAoB,WACzB,MAAMvuI,EAAOC,KACbD,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi8C,OAAOlrG,UAChDr9B,EAAKub,QACiE,IAAvEvb,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQjmI,MAAMQ,QAC5DtD,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi9C,WAAWlsG,UAGjEqf,EAAS+xF,cAAgB,WACrB,MAAMzuI,EAAOC,KACbD,EAAKq/C,OAASr/C,EAAKkrI,QAAQC,MAC3BnrI,EAAKuyI,qBAAqB,EAAG,GAC7BvyI,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW47C,SAASlqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC9DC,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW67C,UAAUnqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/DC,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW87C,KAAKpqG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC7DC,EAAK2M,IAAIhB,iBAAiB3L,EAAKssF,WAAWg8C,UAAU9gI,SAAQ,SAAU22E,GAClEA,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,aAExBC,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi8C,OAAOlrG,UAAW,EAChEr9B,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAWk8C,QAAQnrG,UAAW,EAC1Dr9B,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWw8C,WAAW17H,UAAY,GACrEpN,EAAKub,OAAS,KACdvb,EAAKyqI,aAAe,EAChBzqI,EAAKowI,SACLpwI,EAAKowI,QAAQrvG,UAIrB2b,EAAS8xF,aAAe,WACpB,MAAMxuI,EAAOC,KACbD,EAAKq/C,OAASr/C,EAAKkrI,QAAQkG,QAC3BpxI,EAAKuyI,qBAAqB,EAAG,GAC7BvyI,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW87C,KAAKpqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC1DC,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW67C,UAAUnqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/DC,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAW47C,SAASlqG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACjEC,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,kCAAmC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,OAC/EC,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWi8C,OAAOlrG,UAAW,EAChEr9B,EAAK2M,IAAIsL,cAAcjY,EAAKssF,WAAWk8C,QAAQnrG,UAAW,EAC1Dr9B,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQjmI,MAAQ,GAC9D9C,EAAKowI,QAAQtyF,YAGjBpB,EAAS4xF,cAAgB,WACrB,MAAMtuI,EAAOC,KACPL,EAAU,CACZ8/E,QAAS1/E,EAAKu8E,WAAWtkE,cAAcjY,EAAKssF,WAAWy8C,QAAQjmI,OAEnE,GAAI9C,EAAK6tI,cAAc,CAAE/kI,KAAMlJ,EAAQ8/E,UACnCl8E,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,gCAAiChiC,QAE9D,CACD,IAAI6yI,EAAe,WA59BC,IAAUzkF,EA69B1BhuD,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,SAAS14E,UAAYxN,EAAQ8/E,QAC1E1/E,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,iBAAkB,CAAE89C,QAAS9/E,EAAQ8/E,YA99B/C1xB,EA+9BNhuD,GA99BxBq/C,OAAS2O,EAAIk9E,QAAQE,YACzB5nI,EAAAA,EAAAA,KAAAA,aACAwqD,EAAIukF,qBAAqB,EAAG,GAC5BvkF,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW87C,KAAKpqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACxDiuD,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW47C,SAASlqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC5DiuD,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW67C,UAAUnqG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAChEiuD,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWi8C,OAAOlrG,UAAW,EAC9D2wB,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWk8C,QAAQnrG,UAAW,EACxD2wB,EAAIvpD,MAAM2zB,gBACV41B,EAAIoiF,QAAQrvG,SAs9BJ/gC,EAAK0yI,aAAa9yI,IAIlBm9D,UAAUuN,SAAWvN,UAAUuN,QAAQqoE,SACvC51E,UAAUuN,QAAQqoE,WAAWh0I,MAAK,SAAUg0I,GACxC,MAAMC,GAAeD,EAASE,MAAQF,EAASG,OAAS,QACpD9yI,EAAKwtI,iBAAmBoF,EACxBH,IAGAjvI,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,oCAAqC,CACjE89C,QAAS9/E,EAAQ8/E,QACjBqzD,QAAS5F,EAAWntI,EAAMA,EAAKwtI,kBAC/BwF,iBAAkB7F,EAAWntI,EAAMwB,KAAKirC,MAAMmmG,MAC9CH,MAKZA,MAKZ/1F,EAASmzF,aAAe,SAAUoD,EAASrzI,GACvC,IAAII,EAAOC,KACPgE,EAAOrE,GAAW,GACtB,MAAMwvI,EAAYtrG,KAAKC,MAAM7gB,WAM7B,OALAljB,EAAKkzI,YAAYjvI,EAAK6E,MAAQ9I,EAAKmqI,yBAA2BnqI,EAAKoqI,gBAAiB,CAChFgF,UAAWA,EACX6D,QAASA,EACTv/H,OAAQzP,EAAKyP,SAEV07H,GAGX1yF,EAASg2F,aAAe,SAAU9yI,GAC9B,IAAII,EAAOC,KACPgE,EAAOrE,GAAW,GACtB,GAAII,EAAKzB,IAAK,CACV,IAAIgd,EAAStX,EAAKsX,QAAUvb,EAAKub,QAAUvb,EAAKzB,IAAIyoB,YAGpD,GAFAhnB,EAAKivI,qBAAqB,CAAE1zH,OAAQA,IAEhCvb,EAAKsqI,eAAgB,CACrB,IAAI6I,EAAY,SAAU1rI,EAAKtF,EAAGoF,GAC9B,IAAI1C,EAAS4C,EAAIiX,KAAO1e,EAAKuqI,cAI7B,OAHK1lI,GAAU1C,EAAI,IACf0C,EAAS0C,EAAIpF,EAAI,GAAGuc,IAAM1e,EAAKuqI,eAE5B1lI,GAEPuuI,EAAU,SAAU/G,GACpB,MAAO,CACHW,IAAKX,EAAIW,IACTE,GAAIb,EAAIa,GACRK,GAAIlB,EAAIkB,GACRN,GAAIZ,EAAIY,GACRp9C,GAAIw8C,EAAIx8C,KAIZy6C,EAAiBtqI,EAAKsqI,eAAe/rI,KAAI,SAAU6tI,GACnD,MAAO,CACHltH,QAASktH,EAAOltH,QAChBG,cAAe+sH,EAAO/sH,cACtBitH,iBAAkBF,EAAOE,iBAAiBnnI,OAAOguI,OAKrDE,EAAqB,CAACzrH,OAAOC,kBAAmBD,OAAOC,kBAAmBD,OAAOE,kBAAmBF,OAAOE,mBAC/GwiH,EAAe9iI,SAAQ,SAAsB8rI,GACzC,MAAMjH,EAAMiH,EAAGhH,iBAAiBgH,EAAGhH,iBAAiBhpI,OAAS,GACvDiwI,EAAelH,EAAI3tH,IAAM2tH,EAAImH,MACnCH,EAAmB,GAAK7xI,KAAKqa,IAAIw3H,EAAmB,GAAIhH,EAAIt6H,OAAO,GAAKwhI,EAAelH,EAAIa,IAC3FmG,EAAmB,GAAK7xI,KAAKqa,IAAIw3H,EAAmB,GAAIhH,EAAIt6H,OAAO,GAAKwhI,GAAgBlH,EAAIx8C,GAAK,IACjGwjD,EAAmB,GAAK7xI,KAAK4K,IAAIinI,EAAmB,GAAIhH,EAAIt6H,OAAO,GAAKwhI,GAAgBlH,EAAIkB,GAAK,IACjG8F,EAAmB,GAAK7xI,KAAK4K,IAAIinI,EAAmB,GAAIhH,EAAIt6H,OAAO,GAAKwhI,EAAelH,EAAIY,IAC3FqG,EAAGhH,iBAAmBgH,EAAGhH,iBAAiB/tI,IAAI60I,MAIlD,IAAIv4G,EAAYr5B,KAAKs5B,IAAI,GAAI96B,EAAKzB,IAAI2B,KAAK66B,QAAUh7B,EAAAA,EAAAA,iBAA0BA,EAAAA,EAAAA,iBAM3E0zI,EAAgB,CAChBC,KANJL,EAAqBA,EAAmB90I,KAAI,SAAUkJ,EAAKC,GAEvD,OADYA,EAAM,EAAIlG,KAAKgjD,KAAOhjD,KAAKonD,OAC1BnhD,EAAMozB,GAAaA,KAKhCnc,IAAKld,KAAKonD,MAA2B,IAArB5oD,EAAKuqI,eAAwB,IAC7Cj1H,IAAK,GACLiT,IAAK,GACLtV,OAAQ,GACR+P,OAAQ,IAAIjiB,MAAMf,EAAKiqC,WAAW3mC,SAEtCtD,EAAKiqC,WAAWziC,SAAQ,SAA+B/C,EAAOiD,GAC1D,IAAIisI,EAAuC,IAA5BlvI,EAAM6Q,IAAIrM,QAAQ,MAAcqJ,SAASN,SAAWvN,EAAM6Q,IAAM7Q,EAAM6Q,IACjF08H,EAASyB,EAAcn+H,IAAIrM,QAAQ0qI,GACnC3B,EAAS,IACTA,EAASyB,EAAcn+H,IAAIjN,KAAKsrI,GAAY,GAEhD,IAAI1B,EAASwB,EAAclrH,IAAItf,QAAQxE,EAAM2a,WACzC6yH,EAAS,IACTA,EAASwB,EAAclrH,IAAIlgB,KAAK5D,EAAM2a,WAAa,GAEvD,IAAIw0H,EAAcnvI,EAAMwO,OAAO4T,OAAOpiB,EAAMwO,OAAOhK,QAAQ,KAAO,GAC9D4qI,EAAYJ,EAAcxgI,OAAOhK,QAAQ2qI,GACzCC,EAAY,IACZA,EAAYJ,EAAcxgI,OAAO5K,KAAKurI,GAAe,GAEzDH,EAAczwH,OAAOtb,GAAO,CACxBsqI,OAAQA,EACR3yI,GAAIoF,EAAM2Y,WACV60H,OAAQA,EACR4B,UAAWA,MAInB,IAAI12H,EAAS3Z,EAAAA,EAAAA,KAAAA,uBACTxE,EAAIme,EAAOnd,EAAK+pI,uBAAyBsJ,EAAmBnwH,WAChE/F,EAAOnd,EAAK6pI,2BAA6Bx+G,KAAKmG,KAAK0vE,UAAUuyC,IACzDzzI,EAAKqyI,uBACLl1H,EAAOnd,EAAKirI,qBAAuB,GAEvC,MAAM5hF,EAAI/2C,SAASP,OAASO,SAASwhI,SAAW,IAAMtwI,EAAAA,EAAAA,KAAAA,eAAuB2Z,GAK7E,GAJAnd,EAAKwqI,WAAa,CAAE1hI,KAAM7E,EAAKy7E,QAASnkE,OAAQvc,EAAGsW,IAAK+zC,GACxDrpD,EAAKqqI,eAAgB,EAGjBrqI,EAAKqyI,qBAAsB,CAC3B,MAAMY,EAAU,GAChB,IAAK,IAAI9wI,EAAI,EAAG+I,EAAMo/H,EAAehnI,OAAQnB,EAAI+I,EAAK/I,IAAK,CAGvD,IAFA,IAAIiqI,EAAS9B,EAAenoI,GACxB4xI,EAAa,KACRx8H,EAAI,EAAGs1H,EAAO7sI,EAAKiqC,WAAW3mC,OAAQiU,EAAIs1H,EAAMt1H,IAAK,CAC1D,IAAIyJ,EAAIhhB,EAAKiqC,WAAW1yB,GACxB,GAAIyJ,EAAE3hB,KAAO+sI,EAAOltH,QAAS,CACzB60H,EAAa/zI,EAAKE,KAAK8zI,kBAAkBhzH,GACrCA,EAAEe,kBAEFf,EAAEe,mBAEFf,EAAEqE,WACF4tH,EAAQ5qI,KAAK2Y,EAAEqE,WAEnB,OAGR,GAAI0uH,EACA,IAAK,IAAIj8H,EAAI,EAAGm8H,EAAO7H,EAAOE,iBAAiBhpI,OAAQwU,EAAIm8H,EAAMn8H,IAAK,CAClE,MAAMu0H,EAAMD,EAAOE,iBAAiBx0H,GACpC,IAAK,IAAIvD,EAAI83H,EAAIY,GAAI14H,GAAK83H,EAAIx8C,GAAIt7E,IAC9B,IAAK,IAAI9L,EAAI4jI,EAAIa,GAAIzkI,GAAK4jI,EAAIkB,GAAI9kI,IAC9BwqI,EAAQ5qI,KAAK0rI,EAAWvqI,QAAQ,kBAAmB4iI,EAAO/sH,eAAe7V,QAAQ,eAAgB6iI,EAAIW,KAAKxjI,QAAQ,YAAaf,GAAGe,QAAQ,YAAa+K,KAM3K0+H,EAAQ5qI,KAAKghD,GACbrpD,EAAK6vI,aAAaoD,EAAS,CAAEnqI,KAAMugD,QAMnD3M,EAASgyF,mBAAqB,WAC1B,IAAI1uI,EAAOC,KACPD,EAAKwqI,YACLxqI,EAAKk0I,YAAYl0I,EAAKwqI,WAAWl1H,KAAK3W,MAAK,SAAUi9B,GAC5CA,IACD57B,EAAKwqI,WAAa,SAI9BxqI,EAAKqqI,eAAgB,EACrBrqI,EAAKyuI,iBAGT/xF,EAASy3F,UAAY,SAAUrrI,GAC3B,IAEIvK,EAFO0B,KAEI4tI,cAAc,CAAE/kI,KAAMA,IACjCvK,GAHO0B,KAIFi0I,YAAY31I,EAAI+W,MAI7BonC,EAASiyF,eAAiB,SAAU7lI,GAChC,MAAM9I,EAAOC,KACb,GAAI88D,UAAUgyB,QACV,GAAIjmF,EAAM,CACN,IAAIsrI,EAAcp0I,EAAK4hC,gBAAgB,oBAAqB,CAAE89C,QAAS52E,IAClE9I,EAAKqyI,uBACN+B,EAAcA,EAAc,IAAMp0I,EAAK4hC,gBAAgB,sCAEvDf,QAAQuzG,KACJr3E,UAAUgyB,SA1pCK/gC,EA2pCEhuD,GA1pC7Bq/C,OAAS2O,EAAIk9E,QAAQG,SACzBr9E,EAAIukF,qBAAqB,EAAG,GAC5BvkF,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW47C,SAASlqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC5DiuD,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW67C,UAAUnqG,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC7DiuD,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAW87C,KAAKpqG,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC3DiuD,EAAIrhD,IAAIhB,iBAAiBqiD,EAAIs+B,WAAWg8C,UAAU9gI,SAAQ,SAAU22E,GAChEA,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aAErBiuD,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWi8C,OAAOlrG,UAAW,EAC9D2wB,EAAIrhD,IAAIsL,cAAc+1C,EAAIs+B,WAAWk8C,QAAQnrG,UAAW,EACxD2wB,EAAIuuB,WAAWtkE,cAAc+1C,EAAIs+B,WAAWw8C,WAAW17H,UAAY,GACnE4gD,EAAIoiF,QAAQrvG,SAgpCI/gC,EAAKm0I,UAAUrrI,IAEftF,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,gCAK1Cp+B,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,yBAnqCb,IAAUosB,GAuqCnCtR,EAASmxF,cAAgB,SAAUjuI,GAE/B,OADWK,KACC0pI,WAAW9gI,MAAK,SAAUpB,GAClC,IAAI5C,GAAS,EAOb,OANIjF,EAAQkJ,MAAQlJ,EAAQkJ,OAASrB,EAAIqB,OACrCjE,GAAS,GAETA,GAAUjF,EAAQ0V,KAAO1V,EAAQ0V,MAAQ7N,EAAI6N,MAC7CzQ,GAAS,GAENA,MAIf63C,EAAS61F,qBAAuB,SAAU8B,EAAShF,GAC/C,MAAMrvI,EAAOC,KACPosF,EAAKrsF,EAAK8lF,eACVvrE,EAAQva,EAAK2M,IAAIsL,cAAco0E,EAAK,mBAC1C,GAAIgjD,EAAO,CACP,IACIiF,EADU9yI,KAAKqa,IAAIra,KAAKirC,MAAgB,IAAV4nG,EAAgBhF,GAAQ,KAC5B,IAC9B,MAAMkF,EAAKv0I,EAAK2M,IAAIsL,cAAco0E,EAAK,mBACnCkoD,IACAA,EAAG3uI,MAAM2sB,MAAQ+hH,GAEjB/5H,IACAA,EAAMnN,UAAYknI,OAGrB,CACD,MAAME,EAAKx0I,EAAK2M,IAAIsL,cAAco0E,EAAK,iBACnCmoD,GACAA,EAAGx2G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAEjBwa,IACAA,EAAMnN,UAAYpN,EAAK4hC,gBAAgB,SAAU,CAAEwrG,SAAUiH,OAKzE33F,EAASuyF,qBAAuB,SAAUrvI,GACtC,IAAII,EAAOC,KACPgE,EAAOrE,GAAW,GAItB,OAHAqE,EAAKsX,OAAStX,EAAKsX,QAAUvb,EAAKub,OAClCtX,EAAK+e,OAAS/e,EAAK+e,QAAUhjB,EAAKiqC,WAClCjqC,EAAKsqI,eAAiBtqI,EAAKE,KAAKywI,kBAAkB1sI,GAC3CjE,EAAKsqI,gBAGhB5tF,EAASvnC,eAAiB,WAEtB,IAAItQ,EAAS,GAEb,MAAM4vI,EAAmB,SAAUpI,GAC/B,OAAOA,EAAI3tH,KAGTg2H,EAPOz0I,KAOeqqI,eAAe/rI,KAAI,SAAU6tI,GACrD,OAAOA,EAAOE,iBAAiB/tI,IAAIk2I,MAQvC,OAJA5vI,EAASA,EACJyD,OAAO+H,MAAMxL,EAAQ6vI,GACrBtqH,MAAK,CAACrP,EAAGsP,IAAMA,EAAItP,IACnB5V,QAAO,CAACsC,EAAKC,EAAKH,IAAgB,IAARG,GAAaH,EAAIG,EAAM,KAAOD,KAIjEi1C,EAASiuF,gBAAkB,WACvB,MAAM3qI,EAAOC,KACPkd,EAAS3Z,EAAAA,EAAAA,KAAAA,8BACR2Z,EAAOnd,EAAK6pI,kCACZ1sH,EAAOnd,EAAK+pI,8BACZ5sH,EAAOnd,EAAKirI,qBACnB,IAAIlrH,EAAYvc,EAAAA,EAAAA,KAAAA,eAAuB2Z,GAIvC,OAHI4C,EAAUzc,SACVyc,EAAY,IAAMA,GAEfzN,SAASwhI,SAAW/zH,EAAYzN,SAASo8C,MA51CxD,GAi2CAlrD,EAAAA,EAAAA,QAAAA,gBAA6Bu9E,EAC7B,W,uuBC9kDAv9E,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAawH,EAAAA,EAAQ,IAAA2pI,EAAA,IAAAlyI,QAAAmyI,EAAA,IAAAliI,QAErB,MAAMmiI,UAAoB7pI,EAAAA,EAGtBtL,c,QACIG,SAASod,W,IAAW,K,EAAA23H,G,2CAAAhyI,CAAA,KAAA+xI,EAAA,CAAA9xI,UAAA,EAAAC,WAAA,IACpB,MAAM9C,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKqrD,UAAW,EAChBrrD,EAAKyE,MAAQ,KAGjB+3C,eACI,MAAO,eAGX3xC,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3B1D,eAAetM,GACX,MAAMyB,EAAOC,KA0CP60I,EAAgB,SAAUrwI,GAC5B,IAAI8hB,EAIJ,OAFAA,EA3CkB,SAAU9hB,GAC5B,IAAI8hB,EAEAwuH,EAAgB,SAAU11I,EAAI2jB,GAE9B,IADA,IAAIne,EAAS,KACJ1C,EAAI,EAAGA,EAAI6gB,EAAO1f,OAAQnB,IAAK,CACpC,IAAIokB,EAAMvD,EAAO7gB,GAEjB,IADQokB,EAAIlnB,IAAMknB,KACRlnB,EAAI,CACVwF,EAAS0hB,EACT,OAGR,OAAO1hB,GAGX,GAAqB,iBAAVJ,EAAoB,CAC3B,IAAIuwI,EAASD,EAActwI,EAAOlG,EAAIqB,QAAQwvB,qBACzClrB,EAAAA,EAAAA,cAAmB8wI,KACpBA,EAASD,EAActwI,EAAOlG,EAAIqB,QAAQqqC,aAE1C/lC,EAAAA,EAAAA,cAAmB8wI,KACnBzuH,EAAM,IAAIvJ,EAAAA,EAAOg4H,SAKjBzuH,EADA9hB,aAAiBuY,EAAAA,GAAUvY,aAAiBotB,EAAAA,EACtCptB,EAEDA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAC/F,IAAI8xB,EAAAA,EAAOptB,GAGX,IAAIuY,EAAAA,EAAOvY,GAIzB,OAAO8hB,EAMD0uH,CAAcxwI,GAEb8hB,GAaL2uH,EAAkB,SAAUl2I,GAC9B,MAAMgB,EAAOC,KAEb,GAAID,EAAKzB,IAAI8wB,UAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBC,EAAKzB,IAAI8wB,UAAUjlB,OAASrK,EAAAA,EAAAA,UAAAA,MAAyBC,EAAKJ,QAAQ6E,MAAO,CAC7H,IAAI6lD,EAAWtqD,EAAKzB,IAAI8wB,UAAU2a,kBAAoBhqC,EAAKJ,QAAQ6E,MACnE,IAAI0wI,EACAn1I,EAAKyE,MAAMpF,KAAOirD,EAClB6qF,EAAaL,EAAcxqF,GACpBvqD,EAAAA,EAAAA,MAAAA,iBAAAA,SAAuCf,EAAEoL,QAChD+qI,EAAan1I,EAAKyE,OAElB0wI,GACAn1I,EAAKE,KAAKkgB,MAAM,CACZ3b,MAAO0wI,IACRx2I,MAAK,SAAU8F,GACdzE,EAAKyE,MAAQA,OAMvBupD,QAAYnuD,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAW5C,OAVAyB,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,YAA4BxD,GAC5CzB,EAAIqb,QAAO,WACP5Z,EAAKo1I,aAAeN,EAAc90I,EAAKJ,QAAQ6E,OAC/CzE,EAAKyE,MAAQqwI,EAAcv2I,EAAI8wB,UAAU2a,kBAAoBhqC,EAAKJ,QAAQ6E,OAASlG,EAAIqB,QAAQqqC,WAAW,IAAM1rC,EAAIqB,QAAQwvB,oBAAoB,IAEhJtZ,EAAA9V,EAAI40I,EAAAS,GAAA10I,KAAJX,GAAqBrB,MAAK,IArCD,SAAUiP,GACnC,MAAM0nI,EAAe,GACrBt1I,EAAKyE,MAAMgV,yBAAyB9a,MAAK,WAChCqB,EAAKyE,MAAMmP,aAAarV,EAAI4I,MAAoE,IAA5DnH,EAAKyE,MAAMvE,KAAKwhB,wBAAwBnjB,EAAI4I,KAAK7D,SACtFgyI,EAAa7wI,MAAQzE,EAAKyE,MAAMsd,oBAEpC/hB,EAAKE,KAAKkgB,MAAMk1H,MA+BYC,CAA4Bh3I,EAAI4I,OAEhE5I,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAAgC,IAAMA,EAAAA,EAAAA,MAAAA,gBAA8Bm1I,EAAgB/0F,KAAKngD,OAG7FguD,EAGXp0C,OAAO4e,GACH,MAAMx4B,EAAOC,KAETiE,EAAAA,EAAAA,WAAgBs0B,KACZx4B,EAAKqrD,UAAYrrD,EAAKzB,KAAOyB,EAAKzB,IAAI8sD,SACtC7yB,IAGAx4B,EAAKsO,GAAGvO,EAAAA,EAAAA,MAAAA,QAAsBy4B,IAK1CslB,WACI79C,KAAKo+C,SAGTJ,aACIh+C,KAAKy+C,UAGTL,SACI,MAAMr+C,EAAOC,KACbJ,MAAMw+C,OAAO19C,KAAKX,GAClB8V,EAAA9V,EAAI40I,EAAAS,GAAA10I,KAAJX,GAAqBrB,MAAK,IAAMqB,EAAKE,KAAKm+C,WAG9CK,UACI,MAAM1+C,EAAOC,KACbJ,MAAM6+C,QAAQ/9C,KAAKX,GACnB8V,EAAA9V,EAAI40I,EAAAS,GAAA10I,KAAJX,GAAqBrB,MAAK,IAAMqB,EAAKE,KAAKw+C,aAUjD,SAAA22F,IANO,MAAMr1I,EAAOC,KAIb,OAHI+C,EAAChD,EAAI20I,IAAiB30I,EAAKzB,KAC3B0E,EAAAjD,EAAI20I,EAAgB30I,EAAKE,KAAK4lC,SAAS9lC,EAAKzB,MAEhDyE,EAAOhD,EAAI20I,GAInBnxI,EAAAA,EAAAA,QAAAA,YAAyBqxI,EACzB,W,0FClLArxI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMgyI,UAA2BvhB,EAAAA,QAC7Bv0H,cACIG,SAASod,WACT,MAAMjd,EAAOC,KACbD,EAAKu1B,aAAex1B,EAAAA,EAAAA,KAAAA,QACpBC,EAAK4F,MAAQpC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,CAAEuoC,YAAa/rC,EAAKijG,qBAAsBj3D,YAAa,EAAGH,UAAW,OAAQC,YAAa,IAAO9rC,EAAKJ,QAAQgG,QAIxJpC,EAAAA,EAAAA,QAAAA,mBAAgCgyI,EAChC,W,0FCZAhyI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,MAAAA,MAAqBA,EAAAA,EAAAA,MAAAA,OAAsB,WAC3CA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eACnDA,EAAAA,EAAAA,QAAAA,KAAsBA,EAAAA,EAAAA,QAAAA,MAAuB,UAC7CA,EAAAA,EAAAA,QAAAA,QAAyBA,EAAAA,EAAAA,QAAAA,SAA0B,aACnDA,EAAAA,EAAAA,QAAAA,UAA2BA,EAAAA,EAAAA,QAAAA,WAA4B,eAEvD,MAAM2O,EAAQ,WACV,IAAI1O,EAAOC,KAEX+K,EAAAA,EAAAA,MAAchL,EAAMid,WACpBjd,EAAKoF,eAAiB,KAEtBpF,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,MAAsBxD,IAK1C,IACQ08C,EAHRl5C,EAAAA,EAAAA,QAAWkL,EAAO1D,EAAAA,IAGV0xC,EAAWhuC,EAAMjO,WAEZ87C,MAAQ,eAEjBG,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAAS4W,GAC5D1K,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAM,CACpC4tE,YAAa5tE,EAAKJ,QAAQguE,kBAA4CvpE,IAA7BrE,EAAKJ,QAAQguE,YACtD6nE,YAAaz1I,EAAKJ,QAAQukG,QAEzBxlG,MAAK,WACFqB,EAAK01I,SAAW11I,EAAK2M,IAAIsL,cAAe,IAAGykC,EAASH,SACpDv8C,EAAK0L,WAAa1L,EAAK01I,SAASz9H,cAAe,IAAGykC,EAASH,iBAC3Dv8C,EAAKmN,QAAUnN,EAAK01I,SAASz9H,cAAe,IAAGykC,EAASH,cACxDv8C,EAAKi9C,sBAELj9C,EAAKzB,IAAI2B,KAAKy1I,SAAS31I,GAAMrB,MAAK,WAC1B6E,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,IAEJ15B,UAGPsX,OAAMsD,GAAOhE,EAAOgE,aAAeza,MAAQya,EAAMza,MAAMya,WAIpEgjC,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KA6Eb,aA5EM+K,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,SACtCyB,EAAKsL,gBACX/M,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,WACxBxB,EAAImrC,OAAS3pC,EAAAA,EAAAA,KAAAA,UACTC,EAAKsF,aACLtF,EAAKuF,UAKjBhH,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA8B,SAAUf,GACvCgB,EAAKoF,gBAAkBpF,EAAKoF,eAAeX,QAAUzF,EAAEyF,QAAUzF,EAAEyF,MAAM6O,iBACrEtT,EAAKsF,aACLtF,EAAKuF,UAKjBhH,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA2B,IAAMA,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtEgB,EAAKoF,gBAAkBpF,EAAKoF,eAAeX,QAAUzF,EAAEyF,OACnDzE,EAAKsF,aACLtF,EAAKuF,UAKjBhH,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,QAAqB,WACnBC,EAAKoF,gBAAkBpF,EAAKoF,eAAeK,uBAAyB1F,EAAAA,EAAAA,WAAAA,aACjEC,EAAKsF,aACLtF,EAAKuF,UAKjBhH,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACrCgB,EAAKoF,iBAAmBpG,EAAE0E,SACtB1D,EAAKsF,aACLtF,EAAKuF,UAuCVvF,GAGX08C,EAASO,oBAAsB,WAC3B,MAAMj9C,EAAOC,KACPikF,EAAWlkF,EAAKmN,QAAQ8K,cAAe,IAAGjY,EAAKu8C,eACjD2nC,GACAA,EAASr4E,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC1CC,EAAKuF,SACN,CAAE0I,SAAS,IAElB,MAAMigG,EAAWluG,EAAKmN,QAAQ8K,cAAe,IAAGjY,EAAKu8C,eACjD2xD,GACAA,EAASriG,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACtCC,EAAKmL,QACLnL,EAAKmL,OAAOk+F,oBAEjB,CAAEp7F,SAAS,KAItByuC,EAASjxC,UAAY,SAAUmqI,GAC3B,IAAI51I,EAAOC,KACP21I,EACA1uF,YAAW,WACPlnD,EAAKE,KAAKuL,cACX,KAGHzL,EAAKE,KAAKuL,aAIlBixC,EAASn3C,KAAO,WACZ,IAAIvF,EAAOC,KACX,GAAID,EAAKzB,IAAK,CACV,MAAM6F,EAAO,CACT2G,QAAS/K,EACT0D,QAAS1D,EAAKoF,gBAElBpF,EAAKuL,YAAW,GAChBvL,EAAKzB,IAAI2B,KAAK21I,UAAU71I,GACxBA,EAAKqL,sBAAsB+B,UAAY,GACvCpN,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,UAAwBqE,KAIjDs4C,EAASrxC,oBAAsB,WAC3B,OAAOpL,KAAKyL,YAAc,MAG9BgxC,EAAS4oD,eAAiB,WACtB,OAAOrlG,KAAKkN,SAAW,MAG3BuvC,EAASnxC,WAAa,SAAUuqI,GAC5B,MAAM91I,EAAOC,KACbD,EAAK81I,QAAUA,EACX91I,EAAK01I,UACL11I,EAAK01I,SAAS13G,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,UAA0B+1I,GAE7D91I,EAAKE,KAAKqL,WAAWuqI,IAGzBp5F,EAASq5F,YAAc,SAAUC,GAC7B,MAAMh2I,EAAOC,KACT+1I,GACAh2I,EAAKuL,YAAW,GAChBvL,EAAK01I,SAAS13G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,OAG5BC,EAAK01I,SAAS13G,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,OAIvC28C,EAASp3C,UAAY,WAGjB,OAFarF,KAEDy1I,UAFCz1I,KAEgBy1I,SAAS13G,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UAKjEyD,EAAAA,EAAAA,QAAAA,MAAmBkL,EACnB,W,mGCvNAlL,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,QAAAA,UAA2B,eAE3B,MAAM+oG,EAAQ,SAAUlpG,GAEpB,MAAMI,EAAOC,KACbD,EAAKJ,QAAUA,GAAW,GAE1BI,EAAK4sD,OAAQ,EAEb5sD,EAAKwK,MAAQxK,EAAKJ,QAAQ4K,OAAShH,EAAAA,EAAAA,KAAAA,gBAAwBgD,EAAAA,EAAAA,OAAY,aACvExG,EAAKi2I,OAASj2I,EAAKJ,QAAQq2I,QAAUzyI,EAAAA,EAAAA,YAAiB,gBAElDxD,EAAKJ,QAAQ8N,UACZ1N,EAAKJ,QAAQopG,kBAAoBhpG,EAAKJ,QAAQ8N,QAAQswB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WACrEC,EAAK88C,WAIbt5C,EAAAA,EAAAA,QAAWslG,EAAO99F,EAAAA,GAElB,WACI,MAAM0xC,EAAWosD,EAAMroG,UAEvBi8C,EAASH,MAAQ,eAEjBG,EAASw5F,gBAAkB,WACvB,MAAMl2I,EAAOC,KACPk2I,EAAO9oI,KAAK,KAAMrN,EAAKu8C,OACvBtwC,GAAWjM,EAAKJ,QAAQopG,kBAAoBhpG,EAAKJ,QAAQ8N,QAAQN,UACvEpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,CAAE/xC,MAAOxK,EAAKwK,MAAOyB,QAASA,EAASgqI,OAAQj2I,EAAKi2I,SAC1Ft3I,MAAK,SAAUggF,GACZw3D,EAAKvpI,SAAS0rD,MAAMqmB,GACpBw3D,EAAKvpI,SAASK,QACdkpI,EAAKnvB,WAER5wG,OAAM,SAAUsD,GACblW,EAAAA,EAAAA,MAASkW,OAIrBgjC,EAAS05F,gBAAkB,WAEvB,OADan2I,KACDL,QAAQ8N,QADPzN,KACsB0M,KAGvC+vC,EAASO,oBAAsB,WAC3B,MAAMj9C,EAAOC,KACb,GAAID,EAAKq2I,kBAAmB,CACxB,MAAM3oI,EAAS1N,EAAKo2I,kBACpB,GAAI1oI,EAAQ,CACR,MAAM0gE,EAAM1gE,EAAOuK,cAAc,IAAMjY,EAAKu8C,MAAQ,QAChD6xB,IACAA,EAAIviE,iBAAiB,SAAS,SAAU+B,GACpC5N,EAAKk2I,4BAEFl2I,EAAKq2I,sBAM5B35F,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBy4D,EAAsB,+BAEtBhtI,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkB+5F,GAAqB/nI,QAC7DvO,EAAKsJ,SAAWA,GAGpBozC,EAASM,WAAanyC,eAAgBzG,EAAMo0B,GACxC,MAAMx4B,EAAOC,KACb,GAAID,EAAK2M,IAEL,kBADM3B,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAMoE,EAAMo0B,GAGxD,MAAM9qB,EAAS1N,EAAKo2I,kBACpB,GAAI1oI,EAAQ,CACR,MAAM/D,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAO,MAC/C7uC,EAAOuK,cAAc,IAAMjY,EAAKu8C,MAAQ,UACzCv8C,EAAKq2I,mBAAoB,EACzB3oI,EAAOoiD,mBAAmB,YAAanmD,IAG3CnG,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,KAnEZ,GAyEAh1B,EAAAA,EAAAA,QAAAA,MAAmBslG,EACnB,W,2WC1EAtlG,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM+yI,EACQ,WADRA,EAES,YAETC,EACE,KADFA,EAEE,KAeFC,EAAc,CAChBC,UAAW,GACXC,WAAY,GACZC,UAAW,CACPC,SAAU,CACNtkH,MAAO,IACPC,OAAQ,KAEZskH,YAAa,CAAC,KAAM,GAAI,KAAM,MAC9B7qI,QAAS,CACL,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GAERqsG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACNkZ,MAAO,IACPwkH,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,IAEvB,CACIkY,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,UAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,OAK7D72H,MAAO,WACHngB,KAAK22I,UAAU3qI,QAAU,CACrB,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GAERqsG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACNkZ,MAAO,IACPwkH,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,IAEvB,CACIkY,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,UAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,QAO3DI,EAAe,CACjBX,UAAW,GACXC,WAAY,GACZC,UAAW,CACPC,SAAU,CACNtkH,MAAO,IACPC,OAAQ,KAEZskH,YAAa,CAAC,GAAI,GAAI,GAAI,IAC1B7qI,QAAS,CACL,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GAERqsG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACN09H,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBtsG,MAAO,KAEX,CACIwkH,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,QAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,OAK7D72H,MAAO,WACHngB,KAAK22I,UAAU3qI,QAAU,CACrB,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GAERqsG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACN09H,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBtsG,MAAO,KAEX,CACIwkH,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,QAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,QAQ3DK,EAAc,CAChBZ,UAAW,GACXC,WAAY,GACZC,UAAW,CACPC,SAAU,CACNtkH,MAAO,OACPC,OAAQ,SAEZskH,YAAa,CAAC,OAAQ,GAAI,OAAQ,OAClC7qI,QAAS,CACL,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GACRD,MAAO,GACPssG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACNkZ,MAAO,IACPssG,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBkY,UAAW,UAEf,CACIA,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,SAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,OAK7D72H,MAAO,WACHngB,KAAK22I,UAAU3qI,QAAU,CACrB,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GACRD,MAAO,GACPssG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACNkZ,MAAO,IACPssG,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBkY,UAAW,UAEf,CACIA,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,IACPC,OAAQ,SAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,QAO3DM,EAAe,CACjBb,UAAW,GACXC,WAAY,GACZC,UAAW,CACPC,SAAU,CACNtkH,MAAO,QACPC,OAAQ,QAEZskH,YAAa,CAAC,OAAQ,GAAI,OAAQ,OAClC7qI,QAAS,CACL,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GACRD,MAAO,GACPssG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACN09H,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBtsG,MAAO,KAEX,CACIwkH,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,KACPC,OAAQ,QAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,OAK7D72H,MAAO,WACHngB,KAAK22I,UAAU3qI,QAAU,CACrB,CACI2uD,QAAS,CACL,CACI5tC,MAAO,KACPwF,OAAQ,GACRD,MAAO,GACPssG,OAAQ,CAAC,EAAG,EAAG,EAAG,IAEtB,CACIxlH,KAAM,GACN09H,UAAW,SACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,GACnBtsG,MAAO,KAEX,CACIwkH,UAAW,QACXlY,OAAQ,CAAC,EAAG,GAAI,EAAG,MAI/B,CACIn4B,MAAO,CACHr0E,OAAQ,CAAC,KACTsP,KAAM,CACF,CAAC,CACG3U,MAAO,KACPuF,MAAO,KACPC,OAAQ,QAIpBoZ,OAAQ,CACJorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,QAO3DO,EAAY,SAAUC,EAAaxkI,GACrC,OAAQwkI,GACJ,KAAKlB,EACD,OAAQtjI,GACJ,KAAKujI,EACD,OAAOC,EAEX,KAAKD,EACD,OAAOc,EAIf,MAEJ,KAAKf,EACD,OAAQtjI,GACJ,KAAKujI,EACD,OAAOa,EAEX,KAAKb,EACD,OAAOe,EAIf,MAEJ,QACI,OAAOd,IAIbiB,EAAgB,SAAU9rG,GAC5B,OAAOA,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,IAYzCh7D,EACM,CACJ+3I,WAAY,IAElB,IAAAC,EAAA,IAAAllI,QAAAmlI,EAAA,IAAAnlI,QAEF,MAAMolI,UAAiB9xD,EAAAA,QACnBtmF,cACIG,SAASod,WAAWnK,EAAA,KAAA+kI,GAAA/kI,EAAA,KAAA8kI,GACP33I,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,gBAGX3xC,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBk6D,EAAsB,+BACtBC,EAAuB,+BAEvB1uI,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBw7F,GAAqBxpI,QAC7DjF,EAAStJ,EAAKu8C,MAAQ,iBAAmBy7F,GAAsBzpI,QAC/DvO,EAAKsJ,SAAWA,EAGpBwzC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqBl9C,MAAMm9C,WAAWr8C,KAAKX,EAAM,CAAEg+E,UAAWh+E,EAAKX,IAAMm5B,IAGzFsN,SAASvnC,GACL,MAAMyB,EAAOC,KACP4E,EAAShF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAGzCyB,EAAKzB,IAAI6uB,YAAc,YAEvB,MAAM6qH,EAAqB,WACVT,EAAUx3I,EAAKy3I,aAAelB,EAAsBv2I,EAAKiT,OAAOiQ,WAAW28B,eAAiB,MAClGz/B,SAmLX,OAbApgB,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,IAAMxD,EAAKu8C,MAAQ,QAnK1E,WACV,MAAM5vC,EAAM3M,EAAKk4I,eAEjBl4I,EAAKzB,IAAI60D,QAAQrzD,EAAAA,EAAAA,KAAAA,UAEjB,IAAI6mF,EAAgBh6E,SAASqL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAC9D,MAAMsE,EAAK7gD,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,mBACtCsE,EAAGxjB,UAAYwjB,EAAGhhB,SACd+mD,KACDA,EAAgBh6E,SAASC,cAAc,QACzBmxB,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,WACzCv8C,EAAKk4I,eAAeprI,YAAY85E,IAGpCA,EAAcx5E,UAAY,GAC1BpN,EAAK6mF,WAAWD,EAAehnF,EAAe+3I,aAE1C/wD,IACAA,EAAcx5E,UAAY,IAIlC,MAAM+qI,EAAmB,IAAMn4I,EAAKu8C,MAAQ,OAC5Cv8C,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,WACnC,MAAM8oG,EAAW7oG,EAAK2M,IAAIsL,cAAckgI,GACxCtvC,EAAS7qE,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACvB8oG,EAASxrE,UAAW,KAGxBr9B,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,WAClC,MAAM8oG,EAAW7oG,EAAK2M,IAAIsL,cAAckgI,GACxCtvC,EAAS7qE,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAC1B8oG,EAASxrE,UAAW,KAGxBvnB,EAAI9V,EAAI43I,EAAAQ,GAAAz3I,KAAJX,IAEAA,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,KAAmBk4I,GAGnC,MAAMI,EAAe,SAAUC,GAE3B,GAAIA,EAAa,CACb3rI,EAAIqxB,UAAUnjB,IAAIy9H,GAIlB,IAAIC,EAAW5rI,EAAIoiD,wBACdnnC,OAAOy7C,UAAUk1E,EAAShmH,SAC3B5lB,EAAI/G,MAAM2sB,MAAQ/wB,KAAKirC,MAAM8rG,EAAShmH,OAAS,MAE9C3K,OAAOy7C,UAAUk1E,EAAS/lH,UAC3B7lB,EAAI/G,MAAM4sB,OAAShxB,KAAKirC,MAAM8rG,EAAS/lH,QAAU,MAGrD,MAAMgmH,EAAY,cAAaD,EAAShmH,MAAQ,OAShD,GARAvyB,EAAKy4I,SAASxgI,cAAe,IAAGjY,EAAKu8C,mBAAmB32C,MAAM2sB,MAAQimH,EACtEx4I,EAAKy4I,SAASxgI,cAAe,IAAGjY,EAAKu8C,oBAAoB32C,MAAM2sB,MAAQimH,EACvEx4I,EAAKy4I,SAASxgI,cAAe,IAAGjY,EAAKu8C,qBAAqB32C,MAAMwuE,IAAMmkE,EAAS/lH,OAAS,KAExFxyB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,sBAAwB,KAAO5hC,EAAK4hC,gBAAgB,qBAAsB,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,KAAqBuwD,SAAU,MAGrJioF,EAAW5rI,EAAIoiD,wBACXr9C,OAAO6oG,OAAOhoF,MAAQgmH,EAAShmH,MAAO,CACtC,MAAMmmH,EAAUhnI,OAAO6oG,OAAOhoF,MAAQgmH,EAAShmH,MACzComH,EAASJ,EAAShmH,MAAQ7gB,OAAO6oG,OAAOhoF,MACxCqmH,EAAehsI,SAASqL,cAAc,yBAC5CjY,EAAK64I,cAAgBD,EAAa/6G,aAAa,WAC/C+6G,EAAavrH,aAAa,UAAY,oCAAmCqrH,oBAA0BA,KACnG,MAAMI,EAAa94I,EAAK+4I,kBAAkBnzI,MAC1C5F,EAAKg5I,gBAAkBF,EAAWG,UAClCj5I,EAAKk5I,sBAAwBJ,EAAWK,gBACxCL,EAAWG,UAAa,SAAQN,MAAWA,KAC3CG,EAAWK,gBAAkB,UAC7B,MAAMrrF,EAAQlhD,SAASqL,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,iBAC3C,GAAI+tD,EAAO,CACP,MAAMsrF,EAAatrF,EAAMloD,MACzB5F,EAAKq5I,gBAAkBD,EAAWH,UAClCj5I,EAAKs5I,sBAAwBF,EAAWD,gBACxCC,EAAWH,UAAa,SAAQN,MAAWA,KAC3CS,EAAWD,gBAAkB,YAKpCn5I,EAAKzB,IAAI0I,SAGVjH,EAAKzB,IAAI2I,OAAOqyI,WAAWz8F,SAF3B98C,EAAKzB,IAAI2B,KAAK3B,IAAIyiE,cAKpBw4E,EAAgB,WAGlB,GAAIp6I,OAAOqB,UAAUC,eAAeC,KAAKX,EAAM,iBAAkB,CAC7D4M,SAASqL,cAAc,yBAAyBoV,aAAa,UAAWrtB,EAAK64I,sBACtE74I,EAAK64I,cACZ,MAAMC,EAAa94I,EAAK+4I,kBAAkBnzI,MAC1CkzI,EAAWG,UAAYj5I,EAAKg5I,gBAC5BF,EAAWK,gBAAkBn5I,EAAKk5I,6BAC3Bl5I,EAAKg5I,uBACLh5I,EAAKk5I,sBACZ,MAAMprF,EAAQlhD,SAASqL,cAAc,IAAMlY,EAAAA,EAAAA,QAAAA,iBACvC+tD,IACAA,EAAMloD,MAAMqzI,UAAYj5I,EAAKq5I,gBAC7BvrF,EAAMloD,MAAMuzI,gBAAkBn5I,EAAKs5I,8BAEhCt5I,EAAKq5I,uBACLr5I,EAAKs5I,sBAGH9B,EAAUx3I,EAAKy3I,aAAelB,EAAsBv2I,EAAKiT,OAAOiQ,WAAW28B,eAAiB,MAClGz/B,QAEPtK,EAAI9V,EAAI43I,EAAAQ,GAAAz3I,KAAJX,IACAA,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,KAAmBk4I,GAGpCj4I,EAAKzB,IAAIi+D,UAAUx8D,EAAK4hC,gBAAgB,sBAAwB,KAAO5hC,EAAK4hC,gBAAgB,sBAE5F,MAAMj1B,EAAM3M,EAAKk4I,eAEjBvrI,EAAIqxB,UAAUC,OAAOj+B,EAAKy5I,cAAez5I,EAAKu8C,MAAQ,aAEtD5vC,EAAI/G,MAAM6hI,eAAe,SACzB96H,EAAI/G,MAAM6hI,eAAe,UAEzB4Q,IAEAr4I,EAAKzB,IAAI60D,QAAQrzD,EAAAA,EAAAA,KAAAA,SAEjBC,EAAKy4I,SAASz6G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAG3BC,EAAKy4I,WACNz4I,EAAKy4I,SAAWv0I,EAAAA,EAAAA,SAChB0I,SAAS+0B,KAAK70B,YAAY9M,EAAKy4I,UAE/Bz4I,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,MAAM,SAAU5yC,GACvD3J,EAAKy4I,SAASrrI,UAAYzD,KAG9B3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,SAAU,MAAM,SAAU5yC,GACxDgD,EAAImjD,mBAAmB,YAAanmD,GAEpCgD,EAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,cAAc1wC,iBAAiB,QAAS2tI,GAE7E7sI,EAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,YAAY1wC,iBAAiB,QAAS7L,EAAK05I,UAAUv5F,KAAKngD,QAIvGA,EAAKy3I,YAAcz3I,EAAK2M,IAAIsL,cAAc,iBAAiBnV,MAC3D9C,EAAKiT,OAASjT,EAAK2M,IAAIsL,cAAc,eAAenV,MAEpD9C,EAAKy5I,cAAgBz5I,EAAKu8C,MAAQ,IAAMv8C,EAAKy3I,YAAc,IAAMz3I,EAAKiT,OAEtEjT,EAAKy4I,SAASz6G,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAE/BC,EAAKk4I,eAAel6G,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,aAC/C87F,EAAar4I,EAAKy5I,mBAKtBz5I,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,kBAAkB,SAAUwrC,GACtG/nF,EAAK8nF,mBAGT9nF,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,MAAM,SAAUukF,GAC5E/nF,EAAKgoF,qBACNhoF,EAAK8nF,eAET9nF,EAAKioF,wBAGFpjF,EA6BXqzI,eACI,OAAOj4I,KAAK1B,IAAI0I,SAAWhH,KAAK1B,IAAI2I,OAAOgtD,UAAYj0D,KAAK1B,IAAIoO,IAGpE9B,kBACI,MAAM7K,EAAOC,KAEb,IAAImnD,EAAcpnD,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAA6B,GACvEumD,EAAU3C,EAAYC,gBACpB,kCACN,IAEIxiD,EAFA80I,QAAiB,oCACrBC,QAAQC,IAAMF,EAASC,QAAQC,IAE/B,IAAI3lE,EAAWl0E,EAAKzB,IAAI2B,KAAKsmF,YAC7BxmF,EAAKs9D,OAASp5D,EAAAA,EAAAA,cAAmBgwE,GAEjC,IAAItoC,EAAS4rG,EAAUx3I,EAAKy3I,aAAelB,EAAsBv2I,EAAKiT,OAAOiQ,WAAW28B,eAAiB,MACrGi6F,EAAcluG,EAAOgrG,UAEzB,MAAMmD,EAAY,SAAUD,GACxB,IAAIxpE,EAAW5+D,OAAOY,SAAS86D,KAAO,IAClC5iE,EAAQxK,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUz5C,MAAM+mB,OAElErf,EACA8lE,GAAY9lE,EAGZ8lE,GADkBpsE,EAAAA,EAAAA,kBAAsB,IAAI4/B,MAAO5gB,YAAY,GAInE,IACI02H,QAAQF,UAAUI,GAAah7E,SAASwR,EAAS9mE,QAAQ,kBAAmB,IAAM,QACpF,MAAO0M,GACLlW,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,eAAgB,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,QAC5DyD,EAAAA,EAAAA,MAAS0S,EAAM0H,QAAU,KAAO1H,EAAMsrB,MAAOzhC,EAAAA,EAAAA,aAAAA,OAGjDqnD,EAAYI,WAAWuC,IAGrBiwF,EAAqB,SAAUvrH,GACjCjrB,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,gBAC9Bp+B,EAAAA,EAAAA,MAAS,kEAAoEirB,EAAU1uB,EAAAA,EAAAA,aAAAA,MAA2B,0BAkGhHqD,EAAY,WACd,IAAI6I,EAAU,GACV+W,EAAShjB,EAAKzB,IAAI4rC,WAAWhlC,QAAO,SAAUV,GAC9C,OAAOA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM6O,mBAEpD2mI,EAAgB,GAEhBC,EAAW,SAAUp3I,EAAOq3I,EAAaC,GAErC,IAAIxoI,EACAyoI,EAFJF,EAAYnmI,iBAAiBlR,EAAMgG,QAK/BqxI,EAAYv6I,SAAWu6I,EAAYv6I,QAAQud,QAAUg9H,EAAYv6I,QAAQud,OAAOiO,gBAChFivH,EAAYF,EAAYv6I,QAAQud,OAAOiO,gBAElCtoB,EAAMwiB,SACX1T,EAAM9O,EAAMwiB,OAAO1T,KAGvB/M,EAAOwD,KAAK,CAAEuJ,IAAKA,EAAKpH,MAAO1H,EAAM0H,MAAOyjB,MAAOmsH,EAAWC,UAAWA,MAG7EC,EAAY,SAAUv7I,EAAGw7I,EAAMJ,EAAaC,GAC5C,GAAIr5I,MAAMC,QAAQjC,GACd,IAAK,IAAIoD,EAAI,EAAGA,EAAIpD,EAAEuE,OAAQnB,IAC1Bm4I,EAAUv7I,EAAEoD,GAAIo4I,EAAMJ,EAAaC,QAGnCr7I,GAAKK,OAAOqB,UAAUC,eAAeC,KAAK5B,EAAG,aAAeA,EAAEuV,SAAShR,OAAS,KAC5EvE,EAAEyL,OAASzL,EAAE+J,OACbjE,EAAOwD,KAAK,CAAEgwG,OAAQt5G,EAAEyL,OAASzL,EAAE+J,KAAMmlB,MAAOmsH,IAEpDE,EAAUv7I,EAAEuV,SAAUimI,EAAMJ,IAAeC,IAI/Cr7I,GAAKK,OAAOqB,UAAUC,eAAeC,KAAK5B,EAAG,aAAqC,IAAtBA,EAAEuV,SAAShR,SACvEi3I,EAAKlqI,MAAMpQ,KAAM,CAAClB,EAAGo7I,EAAaC,IAClCA,MAyDR,OAjBAp3H,EAAOxb,SAAQ,SAAU/C,GAErB,GADAI,EAAS,GACJJ,EAAM2Y,YAA0C,IAA5B3Y,EAAM2Y,WAAW9Z,OAA1C,CACA,IAAI4P,EAAWzO,EAAMyO,SAErBzO,EAAMgQ,KAAO,KACbhQ,EAAMyO,UAAW,EAEjBonI,EAAU71I,EAAM4f,gBAAiB61H,EAAUz1I,EAAO,GAElDA,EAAMyO,SAAWA,EAEbrO,EAAOvB,OAAS,GAChB22I,EAAc5xI,KAAK,CAAEmC,MAAO/F,EAAM+F,MAAOwY,OAAQne,QAIlD,IAAIhG,SAAQ,SAAUC,EAAS4W,GAClC7W,QAAQwiB,IAvDW,WAGnB,IAFA,IAAIm5H,EAAgB,GAEXr4I,EAAI,EAAGA,EAAI83I,EAAc32I,OAAQnB,IAGtC,IAFA,IAAI6gB,EAASi3H,EAAc93I,GAAG6gB,OAErBzL,EAAI,EAAGA,EAAIyL,EAAO1f,OAAQiU,KAC/B,SAAWO,EAAGkJ,GACV,IAAIvc,EAAQw1I,EAAcniI,GAAGkL,OAAOhC,GAChCpP,EAAMnN,EAAMmN,KAAOnN,EAAM41I,UAEzBzoI,GAEA4oI,EAAcnyI,KAAK,IAAIxJ,SAAQ,SAAUC,EAAS4W,GACpB,IAAIrC,EAAAA,QAAc7P,EAAAA,EAAAA,QAAY,CAAEm7H,qBAAqB,IAC7DjyG,WAAW9a,EAAK,CAAE6a,YAAY,IAAQ9tB,MAAK,SAAUiN,GACnE,GAAIA,EAAI6nE,SAAU,CACd,IAAIgnE,EAAcv2I,EAAAA,EAAAA,gBAAqB0H,EAAK,aAC5CnH,EAAMuoB,MAAQ,CAAE2mD,OAAQ8mE,EAAY9mE,OAAQrW,OAAQm9E,EAAYn9E,OAAQ9qC,OAAQ5mB,EAAI4mB,OAAQD,MAAO3mB,EAAI2mB,YAEvGynH,EAAmBpoI,GAGvB9S,OAED,SAAUoX,GACT8jI,EAAmBpoI,GACnB8D,EAAOQ,UApBvB,CAwBG/T,EAAGoV,GAId,OAAOijI,EAoBKE,IAAoB/7I,MAAK,WA2FjCs7I,EAAc17I,KAAI,SAAUuG,EAAOilB,GAC/B,MAAO,CACH6oF,WAAY7oF,EACZyI,OAAQ1tB,EAAMke,OAAO7d,QAAO,SAAU8E,GAClC,OAAOA,EAAK+iB,OAAS/iB,EAAK+iB,MAAMswC,UACjCp1D,QAAO,SAAU+Z,EAAMoyH,EAAStqH,EAAO4wH,GACtC,OAAO14H,EAAO04H,EAAO5wH,GAAOiD,MAAMswC,OAAO9qC,SAC1C,OAERpI,MAAK,SAAUrP,EAAGsP,GACjB,OAAItP,EAAEyX,OAASnI,EAAEmI,OACN,EAEPzX,EAAEyX,OAASnI,EAAEmI,QACL,EAEL,KACRhrB,SAAQ,SAAUozI,EAAiB7wH,IA1GhB,SAAUjlB,EAAOilB,GACnC,IAAI8wH,EAAO,CAAC,CAAC,CAAExhI,KAAMvU,EAAM0F,MAAO8hC,SAAU,GAAI1mC,MAAO,CAAC,cAAei5H,OAAQ,CAAC,EAAG90G,EAAQ,EAAI,GAAK,EAAG,EAAG,MAQ1G,MAAM+wH,GANND,EAAOA,EAAKvyI,OAAOxD,EAAMke,OAAO7d,QAAO,SAAU8E,GAC7C,OAAO7K,OAAOqB,UAAUC,eAAeC,KAAKsJ,EAAM,WAAaA,EAAKouG,OAAOxuF,OAAOwE,gBAAkBvpB,EAAM0F,MAAMqf,OAAOwE,iBACxH9vB,KAAI,SAAU0L,EAAMi4H,GACnB,MAAO,CAAC,CAAE7oH,KAAMpP,EAAKouG,OAAOxuF,OAAQyiB,SAAU9qC,KAAK4K,IAAI,EAAG,GAAKnC,EAAKgkB,OAAQ4wG,OAAQ,CAJtE,GAIqF50H,EAAKgkB,MAAO,EAAG,EAAG,UAGjG3qB,OACxB,IAAIy3I,EAAa,KACbC,EAAY,KAiEhBl2I,EAAMke,OAAOxb,SA/DS,SAAUyC,EAAMi4H,GAClC,GAAIj4H,EAAKouG,OACL0iC,EAAa9wI,EAET+wI,IACAA,EAAY,UAEb,CAKH,IAAIzuI,EACJ,GALKyuI,IACDA,EAAY,GAIZD,EAAY,CACZ,IAAIE,EAAcJ,EAAKt8I,KAAI0L,GAAQA,EAAK,GAAGoP,MAAQ,KAAIpQ,QAAQ8xI,EAAW1iC,QAC1E9rG,EAAW0uI,EAAcD,IAG7B,GAAI/wI,EAAK+iB,MAAO,CACZguH,IACA,IAAIE,EAAgC,IAAnBjxI,EAAK+iB,MAAMuF,MACxB4oH,EAAkC,IAApBlxI,EAAK+iB,MAAMwF,OAE7B,MAAM4oH,EAAY,CAAC,CACf,GAAM,CAAC,CACH,KAAQnxI,EAAKO,MACb,SAAYhJ,KAAK4K,IAAI,EAAG,GAAKnC,EAAKgkB,OAClC,OAAU,EAAC,GAAiB,EAAG,EAAG,IACnC,CACC,MAAShkB,EAAK+iB,MAAM2mD,OACpB,MAASunE,EACT,OAAUC,EACV,OAAU,CAAC,EAAG,EAAG,EAAG,KAGxB,KAAQ,OACR,OAAU,CA/CR,GA+CuBlxI,EAAKgkB,MAAO,EAAG,EAAG,KAG3C1hB,EACAsuI,EAAK7xI,OAAOuD,EAAU,EAAG6uI,GAGzBP,EAAKxyI,KAAK+yI,OAIX,CACH,MAAMh3I,EAAO,CAAC,CACViV,KAAMpP,EAAKO,MACX8hC,SAAU,GACVuyF,OAAQ,CA9DN,GA8DqB50H,EAAKgkB,MAAO,EAAG,EAAG,KAGzC1hB,EACAsuI,EAAK7xI,OAAOuD,EAAU,EAAGnI,GAEzBy2I,EAAKxyI,KAAKjE,QAQ1B6H,EAAQ5D,KAAK,CACTujC,OAAQ,YACR86D,MAAO,CACH20C,eAAe,EACfC,mBAAoB,EACpBR,WAAYA,EACZn5G,KAAMk5G,KAuBdU,CAActB,EAAcW,EAAgBhoC,YAAa7oF,MAG7DjrB,EAAQmN,MAET,WACCyJ,EAAO,WAyBb8lI,EAAS,CA5UC,WAEZ,MAAMC,EAAc,WAChB,IAAIC,EAAahE,EAAc9rG,GAI/B,cAHO8vG,EAAW1uH,MAClB0uH,EAAWriI,KAAO,GAClBqiI,EAAWnpH,MAAQ,EACZmpH,GAGX,OAAI17I,EAAKJ,QAAQ+7I,KACNz3I,EAAAA,EAAAA,aAAkBlE,EAAKJ,QAAQ+7I,MAAMh9I,MAAK,SAAUkG,GACvD,MAAMy4D,EAASz4D,EAAOy4D,OAChBiW,EAAU1uE,EAAO0uE,QAEvB,IAAImoE,EAAahE,EAAc9rG,GAK/B,OAHK8vG,EAAWnpH,QACZmpH,EAAWnpH,MAAS+qC,EAAO/qC,MAAQ+qC,EAAO9qC,OAAUkpH,EAAWlpH,QACnEkpH,EAAW1uH,MAAQumD,EACZmoE,KAER,WAGC,OAFA1B,EAAmBh6I,EAAKJ,QAAQ+7I,MAEzBF,OAGJA,KAgTU,WACrB,IAAIG,EAhoBO,SAAUhwG,GAC7B,OAAOA,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,GA+nBjBihF,CAAejwG,GAEjC,OADAgwG,EAAYviI,KAAOrZ,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUz5C,MAAM+mB,OACtE+xH,GAhTS,WAChB,IAAIE,EAhVU,SAAUlwG,GAChC,OAAOA,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,GA+UdmhF,CAAkBnwG,GACvC,MAAM0jB,EAAU,WAIZ,cAHOwsF,EAAe9uH,MACtB8uH,EAAeziI,KAAO,GACtByiI,EAAevpH,MAAQ,OAChBupH,GAGX,GAAI97I,EAAKzB,IAAI0I,SACT60I,EAAep1C,MAAQ,CAAEr0E,OAAQ,CAAC,GAAIsP,KAAM,CAAC,CAAEq6G,OAAQ,EAAC,GAAO,GAAO,GAAO,GAAQ3iI,KAAM,UAQ1F,CACD,IAAI4iI,EAAYj8I,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,UAAqB,GACjE,IAAIy4I,EA2BA,OAAO3sF,IA1BP,IAAI6B,EAAOvkD,SAAS6xF,uBAAuB,uBACvC85C,EAAWpnF,EAAK,GAAGpC,wBACvB,IAAIwpF,EAqBA,OAAOjpF,IApBP,IAAI4sF,EAAUl1E,iBAAiB7V,EAAK,GAAI,MACpCgrF,EAAa5jI,SAAS2jI,EAAQh3D,iBAAiB,qBAAqB17E,QAAQ,KAAM,MAAQ,EAC1F4yI,EAAc7jI,SAAS2jI,EAAQh3D,iBAAiB,sBAAsB17E,QAAQ,KAAM,MAAQ,EAEhGsyI,EAAep1C,MAAQ,CACnBr0E,OAAQ,CAAsG,MAAnGkmH,EAAShmH,MAAQgmH,EAAS/lH,OAAS+lH,EAAShmH,MAAQgmH,EAAS/lH,QAAU2pH,EAAaC,IAC/Fz6G,KAAM,CACF,CAAC,CAAEq6G,OAAQ,EAAC,GAAM,GAAO,GAAM,GAAO3iI,KAAM4iI,EAAU17H,UAAW+rB,SAAU,GAAIyqG,UAAW,aAIlG+E,EAAelwG,OAAS,CACpBorG,YAAa,SAAUh0E,EAAIi0E,GAAS,OAAO,GAC3CC,aAAc,SAAUl0E,EAAIi0E,GAAS,OAAO,GAC5CE,WAAY,SAAUn0E,EAAIi0E,GAAS,OAAO,GAC1CG,cAAe,SAAUp0E,EAAIi0E,GAAS,OAAO,IAW7D,OAAO6E,GAsOI,WAGX,MAAMj7F,EAAK7gD,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBAC3C,IAAKsE,EAAGxjB,UAAYwjB,EAAGhhB,QAAS,CAC5B,MAAMw8G,EAAWzvI,SAASqL,cAAc,IAAMjY,EAAKu8C,MAAQ,WAE3D,OADA8/F,EAASjvI,UAAY,GACdpN,EAAK6mF,WAAWw1D,EAAUz8I,EAAe+3I,YAAYh5I,MAAK,SAAUmoF,GACvE,OAAIA,EACO5iF,EAAAA,EAAAA,YAAiBlE,EAAKs9D,OAAQwpB,EAAc,CAAEl5D,EAAG5tB,EAAKs9D,OAAO/qC,MAAQ3yB,EAAe+3I,WAAY9pH,EAAG7tB,EAAKs9D,OAAO9qC,OAAS5yB,EAAe+3I,YAAc,CAAEplH,MAAO3yB,EAAe+3I,WAAYnlH,OAAQ5yB,EAAe+3I,aAAch5I,MAAK,SAAUooF,GAChP,OAAOA,KAGJ/mF,EAAKs9D,UAIpB,OAAOt9D,EAAKs9D,SAUpBz+D,QAAQwiB,IAAIm6H,EAAOj9I,KAAI,SAAU6qD,GAC7B,OAAOA,QACPzqD,MAAK,SAAU29I,GAEf,GAAIA,EAAW,GAAG51C,MAAO,CACrB,MAAM61C,EAAa3wG,EAAOgrG,UAAUC,SAAStkH,OAASqZ,EAAOgrG,UAAUE,YAAY,GAAKlrG,EAAOgrG,UAAUE,YAAY,IAC/GJ,EAAY9qG,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,GAAGroC,OAAS,EAC5DupH,EAAiBlwG,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,GACrD4hF,EAAgBV,EAAep1C,MAAMr0E,OAAO,GAAK,EACjDupH,EAAchwG,EAAOgrG,UAAU3qI,QAAQ,GAAG2uD,QAAQ,GACxDghF,EAAYrpH,MAAQgqH,EAAa7F,EAAY8F,EAC3B,IAAd9F,IAEAkF,EAAY7E,UAAY,OACxB+E,EAAejd,OAAO,GAAK,GAInC,IAAI4d,EAjpBD,SAAU7wG,GACrB,OAAOA,EAAOgrG,UAAU3qI,QAAQ,GAAGy6F,MAAM/kE,KAAK,GAAG,GAgpB1B8vB,CAAO7lB,GAClB0xB,EAASg/E,EAAW,IAAMt8I,EAAKs9D,OAInC,GAFAm/E,EAASzvH,MAAQswC,EAAOE,YAEpB1nD,EAAA9V,EAAI63I,EAAA6E,GAAA/7I,KAAJX,IAC+B,IAA/B85I,EAAY7tI,QAAQ3I,OAAc,CAElC,MAAMkH,EAAQxK,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUz5C,MAAM+mB,OACxEiwH,EAAY7tI,QAAQ5D,KAAK,CACrBs0I,UAAW,SACXC,gBAAkB58I,EAAKJ,QAAQ0lB,QAAUtlB,EAAKJ,QAAQ0lB,OAAOmyH,aAAgBlB,EAC7El9H,KAAM7O,EAAMlH,OAAS,EAAIkH,EAAQ,GACjC8hC,SAAU,GACVuyF,OAAQ,CAAC,EAAG,GAAI,EAAG,MAEvBib,EAAYzzI,OAAS,CACjB,WAAc,CACVw2I,MAAM,IAGd/C,EAAYgD,aAAe,CACvB/F,UAAW,QAGf3zI,IAAYzE,MAAK,SAAUsN,GACvB6tI,EAAY7tI,QAAU6tI,EAAY7tI,QAAQ3D,OAAO2D,GACjD8tI,EAAUD,WAGdC,EAAUD,MAKtB5xD,sBAAsBC,GAClB,MAAMnoF,EAAOC,KACP88I,EAAW/8I,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UACrD6rC,EAAapoF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBAEnD6rC,EAAW/qD,SAAW8qD,EAAgBE,GAElCD,EAAWvoD,QACXk9G,EAAS/+G,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBooF,EAAgBE,IAElE00D,EAAS/+G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAI/B8K,qBACI,MAAM7K,EAAOC,KACPqoF,EAAWtoF,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,mBAAmBv8C,EAAKu8C,kBACnE/P,EAAQxsC,EAAK2M,IAAIsL,cAAe,SAAQjY,EAAKu8C,wBACnD+rC,EAASjrD,UAAW,EACpBmP,EAAMxO,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACpB,MAAM8E,QAAemhF,EAAAA,QAAAA,UAAAA,aAAAA,KAAoChmF,GAEzD,OADAwsC,EAAMxO,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAChB8E,EAGXk0I,kBAEI,OADa94I,KACDi4I,eAAejgI,cAAe,IAD7BhY,KACqCs8C,gBAEzD,SAAA67F,IAxeO,OAFan4I,KAED1B,IAAI4rC,WAAW/uB,MAAK,SAAU3W,GACtC,OAAOA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM6O,mBAE3D,SAAAopI,IAKG,OAFaz8I,KAED1B,IAAI4rC,WAAW/uB,MAAK,SAAU3W,GACtC,GAAIA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM6O,gBAAiB,CAC9D,IAAK,IAAInR,EAAI,EAAGA,EAAIsC,EAAMyW,MAAM5X,OAAQnB,IACpC,GAAIsC,EAAMuP,iBAAiBvP,EAAMyW,MAAM/Y,IACnC,OAAO,EAIf,OAAO,EAGX,OAAO,KAudnBqB,EAAAA,EAAAA,QAAAA,SAAsBs0I,EACtB,W,0FCnqCAt0I,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM6+E,EAAqB,WACvB,MAAMriF,EAAOC,KAEb+K,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAK67E,YAAc,CACfC,gBAAiB97E,EAAKu8C,MAAQ,gBAC9Bw/B,WAAY/7E,EAAKu8C,MAAQ,cACzBy/B,SAAUh8E,EAAKu8C,MAAQ,YACvB2/B,iBAAkBl8E,EAAKu8C,MAAQ,gBAC/B4/B,iBAAkBn8E,EAAKu8C,MAAQ,gBAC/BygG,OAAQh9I,EAAKu8C,MAAQ,UACrB0gG,UAAWj9I,EAAKu8C,MAAQ,cAG5Bv8C,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WAC1C9qE,OAAOsvC,IACPhhD,EAAKy8E,YAAcz7B,EAAEhhD,EAAKu8E,aAEzBv8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnCv8E,EAAKu8E,WAAW1wE,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,eAAiBxD,EAAK67E,YAAYC,gBAAkB,KAAK,SAAU98E,GACtJ,MAAMmI,EAAMnI,EAAE0O,OAAO4wC,QAAQq+B,QACzBx1E,GACAnH,EAAKoV,cAAc,CACfjO,IAAKA,EACLiuD,oBAAoB,OAG5B,CAAEnnD,SAAS,IAEfjO,EAAKu8E,WAAW1wE,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,UAAYxD,EAAK67E,YAAYC,iBAAiB,WACjI97E,EAAK08E,6BACL,CAAEzuE,SAAS,KAGnBzK,EAAAA,EAAAA,QAAW6+E,EAAoBr3E,EAAAA,GAE/B,WAEI,MAAM0xC,EAAW2lC,EAAmB5hF,UAEpCi8C,EAASH,MAAQ,eAEjBG,EAASI,OAASjyC,eAAgB2tB,GAC9B,MAAMx4B,EAAOC,WACP+K,EAAAA,EAAAA,UAAAA,OAAAA,KAA8BhL,EAAMw4B,GAE1Cx4B,EAAKu8E,WAAWnvE,gBAAkBpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,OAGnFG,EAAS8+E,gBAAkB,SAAU57H,GACjC,OAAOK,KAAK1B,IAAIojB,iBAAiBne,EAAAA,EAAAA,KAAAA,OAAe5D,GAAW,GAAI,CAAE+0D,kBAAkB,MAGvFjY,EAAS6gC,2BAA6B,SAAU39E,GAC5C,MAAMI,EAAOC,KAEP28E,EAAS58E,EAAKu8E,WAAWtkE,cAAc,IAAMjY,EAAK67E,YAAYE,YAC9Dp6C,EAAOi7C,EAAO3kE,cAAc,kBAClC0pB,EAAK3D,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACnB,MAAM++E,EAAKn9C,EAAK1pB,cAAc,MAAQjY,EAAK67E,YAAYG,UACvD8C,EAAG1xE,UAAY,GACf,MAAM8vI,EAAgBl9I,EAAKzB,IAAI8wB,UAAUE,aAAevvB,EAAKzB,IAAI8wB,UAC3D8tH,EAAaD,EAAcnpI,WAAampI,EAAcn7H,mBAAqB,KAE3Eq7H,EAAY,WACd,IAAIvoF,EAAU,GACVkrB,EAAY,GAIhB,GAFAngF,EAAUA,GAAW,GAEjBs9I,EAAcnpI,WACdgsE,EAAYm9D,EAAcv7H,mBAC1BkzC,EAAU70D,EAAKw7H,gBAAgBh4H,EAAAA,EAAAA,KAAAA,OAAe5D,EAAS,SACpD,CACHmgF,EAAY//E,EAAKzB,IAAI0rC,WAChB9kC,QAAQV,GACEA,EAAMsP,aAEhBxV,KAAKkG,GACKA,EAAMkd,iBAAiB,CAAEK,YAAY,EAAMJ,iBAAiB,MAEtE1Z,QAAO,CAAC+Z,EAAMoyH,IACJpyH,EAAK3Z,OAAO+rI,EAAQlvI,QAAO6b,GAAKiB,EAAKhZ,QAAQ+X,GAAK,OAGjE,MAAM0zC,GAAY90D,EAAQ6E,MAAQzE,EAAKzB,IAAI4rC,WAAW7hC,OAAO1I,EAAQ6E,OAASzE,EAAKzB,IAAI4rC,YAClFhlC,QAAO,SAAUV,GACd,OAAOA,EAAMsP,cAEhBxV,KAAI,SAAUkG,GACX,OAAOA,EAAMkd,iBAAiB,CAAEK,YAAY,EAAMJ,iBAAiB,OAG3EizC,EAAUkrB,EAAU56E,QAAQgC,GACjButD,EAAS1/C,OAAOvN,GACZA,EAAIwB,QAAQ9B,IAAQ,MAKvCnH,EAAKzB,IAAIu2D,gBAAgB,CACrBD,QAASA,EACTK,QAAS,SACVv2D,MAAK,SAAUo2D,GACd,IAAIirB,GAAiB,EACjBq9D,EAAiBzgE,EAAO3kE,cAAc,IAAMjY,EAAK67E,YAAYK,kBAC7DohE,EAAiB1gE,EAAO3kE,cAAc,IAAMjY,EAAK67E,YAAYM,kBAyBjE,GAxBApnB,EACKvtD,SAAQ,SAAU04E,GACf,GAAIm9D,GAAkBC,GAAkB95I,EAAAA,EAAAA,KAAAA,cAAsBxD,EAAKzB,IAAI4I,IAAK+4E,EAAQhhF,MAChFm+I,EAAervI,YAAckyE,EAAQp3E,KACrCw0I,EAAetvI,YAAckyE,EAAQhhF,SAEpC,CACD,MAAM2tD,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAO7+C,YAAckyE,EAAQp3E,KAAO,KAAOo3E,EAAQhhF,KAAO,IAC1D2tD,EAAOvO,QAAQq+B,QAAUuD,EAAQhhF,KACjC,MAAMi/E,EAAKvxE,SAASC,cAAc,MAClCsxE,EAAGrxE,YAAY+/C,GAGD,IAFVkzB,EAAU56E,QAAO,SAAUgC,GAC3B,OAAO3D,EAAAA,EAAAA,KAAAA,cAAsB2D,EAAK+4E,EAAQhhF,SAC3CoE,SAEC08E,GAAiB,EACjB7B,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACjB8sD,EAAO7uB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAEzB++E,EAAGhyE,YAAYqxE,OAGvB6B,EAAgB,CAChB,MAAM7B,EAAKvxE,SAASC,cAAc,MAC5BggD,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAO7uB,UAAUnjB,IAAI7a,EAAK67E,YAAYC,iBACtCjvB,EAAOz/C,UAAYpN,EAAK4hC,gBAAgB,2BACxCu8C,EAAGrxE,YAAY+/C,GACfiyB,EAAGhyE,YAAYqxE,GAInB,GAAyC,IAArCW,EAAGnzE,iBAAiB,MAAMrI,OAAc,CACxC,MAAM66E,EAAKvxE,SAASC,cAAc,MAClCsxE,EAAG/wE,UAAYpN,EAAK4hC,gBAAgB,2BACpCk9C,EAAGhyE,YAAYqxE,GAEnB,MAAMyyD,EAAY9xD,EAAGnzE,iBAAiB,WAAa5L,EAAAA,EAAAA,QAAAA,OAAwB,KAC3E68E,EAAOjxE,iBAAiB,IAAM3L,EAAK67E,YAAYmhE,QAAQx1I,SAAQ,SAAUC,GACrEA,EAAI7B,MAAMg3C,QAAUg0F,EAAUttI,OAAS,EAAI,GAAK,UAEpDs5E,EAAOjxE,iBAAiB,IAAM3L,EAAK67E,YAAYohE,WAAWz1I,SAAQ,SAAUC,GACxEA,EAAI7B,MAAMg3C,QAAUg0F,EAAUttI,OAAS,EAAI,OAAS,MAExDs5E,EAAO3kE,cAAc,MAAQjY,EAAK67E,YAAYG,UAAUp2E,MAAMg3C,QAAUg0F,EAAUttI,OAAS,GAAK08E,EAAiB,GAAK,OACtHr+C,EAAK3D,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,aAI1Bo9I,EACAA,EAAW1jI,yBAAyB9a,KAAKy+I,GAGzCA,IAEJ55I,EAAAA,EAAAA,KAAAA,UAAkBo5E,EAAQh9E,IAG9B88C,EAAStnC,cAAgB,SAAUxV,GAC/B,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GAErB4D,EAAAA,EAAAA,YAAe,CACX2D,IAAKvH,EAAQuH,IACbqxB,SAAU,WACNx4B,EAAKzB,IAAI6W,cAAcxV,OAKnC88C,EAASggC,wBAA0B,WAC/B,MAAM18E,EAAOC,KACPu/E,EAAMx/E,EAAKu8E,WACZtkE,cAAc,IAAMjY,EAAK67E,YAAYE,YACrCpwE,iBAAiB,MAAQ3L,EAAK67E,YAAYG,SAAW,OAC1DwD,EAAIh4E,SAAQ,SAAU22E,GAClBA,EAAGngD,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAChBo+E,EAAGlmE,cAAc,UAAYjY,EAAK67E,YAAYC,kBAC9CqC,EAAGngD,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAGzBC,EAAKu8E,WAAW5wE,iBAAiB,KAAO5L,EAAAA,EAAAA,QAAAA,SAAwByH,SAAQ,SAAUnC,GAC9EA,EAAE24B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAEvBC,EAAKu8E,WAAW5wE,iBAAiB,IAAM3L,EAAK67E,YAAYmhE,QAAQx1I,SAAQ,SAAUC,GAC9EA,EAAI7B,MAAMg3C,QAAU4iC,EAAIl8E,OAAS,EAAI,GAAK,UAE9CtD,EAAKu8E,WAAW5wE,iBAAiB,IAAM3L,EAAK67E,YAAYohE,WAAWz1I,SAAQ,SAAUC,GACjFA,EAAI7B,MAAMg3C,QAAU4iC,EAAIl8E,OAAS,EAAI,OAAS,OAlK1D,GAwKAE,EAAAA,EAAAA,QAAAA,mBAAgC6+E,EAChC,W,+mBC7MA7+E,iCAAAA,EAAAA,QAAaA,iCAAAA,EAAAA,SAAc,GAE3BzD,qCAAAA,EAAAA,MAAAA,UAAyB,eACzBA,qCAAAA,EAAAA,MAAAA,UAAyB,eACzBA,qCAAAA,EAAAA,MAAAA,gBAA+B,qBAC/BA,qCAAAA,EAAAA,MAAAA,gBAA+B,qBAC/BA,qCAAAA,EAAAA,MAAAA,kBAAiC,uBACjCA,qCAAAA,EAAAA,MAAAA,mBAAkC,wBAElC,MAAM4O,aAAe,WACjB,IAAI3O,EAAOC,KAEX+K,sCAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAKE,KAAO,IAAIsD,iCAAAA,EAAAA,KAAAA,QAAAA,aAA6BxD,GAE7CA,EAAKoE,KAAO,GACZpE,EAAKusC,QAAU,CACXgxG,QAAS,aACTC,SAAU,cACVC,UAAW,eACXC,gBAAiB,gBACjBC,aAAc,cAGlB39I,EAAKiM,QAAUjM,EAAKuuB,YAAYqvH,MAEhC59I,EAAKwiH,uBAA0B,IAAGxiH,EAAKu8C,cAEnC/4C,iCAAAA,EAAAA,KAAAA,cAAsBxD,EAAKJ,WAC3BI,EAAKJ,QAAU,CAAEqM,QAAS,UAG1BjM,EAAKJ,QACDI,EAAKJ,QAAQqM,UACbjM,EAAKiM,QAAUjM,EAAKuuB,YAAYvuB,EAAKJ,QAAQqM,QAAQ4zC,gBAErD7/C,EAAKJ,QAAQsN,QACblN,EAAKkN,MAAQlN,EAAKJ,QAAQsN,OAE1BlN,EAAKJ,QAAQ8mG,QACb1mG,EAAK0mG,MAAQ1mG,EAAKJ,QAAQ8mG,OAE1B1mG,EAAKJ,QAAQ4xG,OACbxxG,EAAKwxG,KAAOxxG,EAAKJ,QAAQ4xG,MAEzBxxG,EAAKJ,QAAQukG,QACbnkG,EAAKmkG,MAAQnkG,EAAKJ,QAAQukG,QAKtC3gG,iCAAAA,EAAAA,QAAWmL,aAAc3D,sCAAAA,GAEzB,WAEI,MAAM0xC,SAAW/tC,aAAalO,UAE9Bi8C,SAASH,MAAQ,gBAEjBG,SAASmkE,mBAAqB,CAC1BC,OAAQ,EACR+8B,IAAK,EACLC,OAAQ,EACRC,KAAM,GAGVrhG,SAASshG,WAAa,CAClBC,WAAY,GACZC,WAAY,IAEZC,UAAW,IACXC,aAAc,IACdC,UAAW,KAGf,MAAMC,iBAAmB,SAAU72I,GAC/B,MAAM82I,EAAgBv3E,iBAAiBv/D,GACvC,OAAOA,IAAQA,EAAIkmE,QAAoC,SAA1B4wE,EAAc3hG,SAAmD,WAA7B2hG,EAAchjG,YAGnFmB,SAASp3C,UAAY,WACjB,MACMk5I,EADOv+I,KACQ0M,IAAIsL,cAAc,+BACjCwmI,EAFOx+I,KAEY0M,IAAIsL,cAAc,gCAC3C,OAAOqmI,iBAAiBE,IAAYF,iBAAiBG,IAGzD/hG,SAAS8xC,YAAc,WACnB,MACMgwD,EADOv+I,KACQ0M,IAAIsL,cAAc,+BACjCwmI,EAFOx+I,KAEY0M,IAAIsL,cAAc,gCAC3C,OAAOqmI,iBAAiBG,KAAiBH,iBAAiBE,IAG9D,MAAME,gBAAkB,SAAUC,EAAcC,EAAOC,GACnD,MAEMp3I,EAFOxH,KAEI0M,IAAIsL,cAAc,IAAM0mI,GACrCl3I,IACAA,EAAIu2B,UAAUnjB,IAAI+jI,GAClBn3I,EAAIu2B,UAAUC,OAAO4gH,KAI7BniG,SAASC,KAAO,SAAUgiG,GACtB,MAAM3+I,EAAOC,KAEPwH,EAAMzH,EAAK2M,IAAIsL,cAAc,IAAM0mI,GACrCl3I,GAA6B,SAAtBA,EAAI7B,MAAMg3C,UACjBn1C,EAAI7B,MAAMg3C,QAAU,IAGxB8hG,gBAAgB/9I,KAAKX,EAAM2+I,EAAc3+I,EAAKusC,QAAQgxG,QAASv9I,EAAKusC,QAAQixG,WAGhF9gG,SAASn3C,KAAO,SAAUo5I,GACtB,MAAM3+I,EAAOC,KAEby+I,gBAAgB/9I,KAAKX,EAAM2+I,EAAc3+I,EAAKusC,QAAQixG,SAAUx9I,EAAKusC,QAAQgxG,SAE7E,MAAM91I,EAAMzH,EAAK2M,IAAIsL,cAAc,IAAM0mI,GACrCl3I,IACAA,EAAI7B,MAAMg3C,QAAU,SAI5BF,SAASk/C,UAAY,WACJ37F,KAER0M,IAAIqxB,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,QAFbE,KAGR08C,KAAK,+BAGd,MAAMmiG,mBAAqB,SAAU9wF,GACjCphD,SAASjB,iBAAiB,IAAMqiD,EAAIzR,MAAQ,mBAAmB/0C,SAASu3I,IACpEA,EAAG/gH,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,YAIzB28C,SAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,qFACtBmhE,EAAuB,qFACvBC,EAAuB,qFAEvB31I,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,iBAAmByiG,GAAsBzwI,QAC/DjF,EAAStJ,EAAKu8C,MAAQ,iBAAmB0iG,GAAsB1wI,QAC/DvO,EAAKsJ,SAAWA,GAGpB,MAAM41I,aAAe,SAAUC,EAAkBC,EAAW7rC,GACxD,MAAMvzG,EAAOC,KACbD,EAAKmzG,YAAY,CACbC,SAAU,SAAUl/C,GAEhB,MAAMn4B,EAAY/7B,EAAKu8C,MAAQ4iG,EAC/B,IAAItyF,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACnD8wB,IACAA,EAAO5uB,SACP4uB,EAAS,MAEb,MAAMxzC,EAAOrZ,EAAK4hC,gBAAgBw9G,GAKlC,OAJAvyF,EAAS,IAAI9vB,8CAAAA,EACb8vB,EAAO1vB,QAAUJ,8CAAAA,EAAAA,QAAAA,QACjB8vB,EAAOxzC,KAAOA,EACdwzC,EAAO7uB,UAAUnjB,IAAIkhB,GACd8wB,GAEX0mD,SAAUA,KAIlB72D,SAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KAIb,OAFAD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,QAEhBiL,sCAAAA,EAAAA,UAAAA,OAAAA,KAA8BhL,GAAM,WA+FvC,GA5FAA,EAAKq/I,aAAer/I,EAAK2M,IAAIsL,cAAc,8BACvCjY,EAAK2M,IAAIsL,cAAc,uBAG3BjY,EAAKs/I,eAAiBt/I,EAAK2M,IAAIsL,cAAc,2BACzCjY,EAAK2M,IAAIsL,cAAc,kCAC3BjY,EAAKs/I,eAAezzI,iBAAiB,SAAS,WAC1C7L,EAAKu/I,cAITv/I,EAAK4tE,YAAc5tE,EAAK2M,IAAIsL,cAAc,6BACtCjY,EAAK2M,IAAIsL,cAAc,oCAC3BjY,EAAK4tE,YAAY/hE,iBAAiB,SAAS,WACvC7L,EAAKiN,QACL,MAAMuyI,EAAgBx/I,EAAK2M,IAAIsL,cAAe,GAAEjY,EAAKusC,QAAQkxG,gCACzD+B,IAEOA,EAAc55I,MAAM6hI,eAAe,SACnC+X,EAAc55I,MAAM6hI,eAAe,iBACnC+X,EAAclhG,QAAQmhG,sBACtBD,EAAclhG,QAAQohG,uBACtBF,EAAclhG,QAAQqhG,sBACtBH,EAAclhG,QAAQshG,oBAKrC5/I,EAAK6/I,eAAiB7/I,EAAK2M,IAAIsL,cAAc,iCACzCjY,EAAK2M,IAAIsL,cAAc,oBAC3BjY,EAAK6/I,eAAeh0I,iBAAiB,SAAS,WAC1C7L,EAAKyuF,cAGLzuF,EAAKwxG,MACL0tC,aAAa7uI,MAAMrQ,EAAM,CAAC,WAAY,eAAgB,WAClDA,EAAK8/I,mBAIT9/I,EAAKJ,QAAQk/D,UAAqC,UAAzB9+D,EAAKJ,QAAQqM,SACtCizI,aAAa7uI,MAAMrQ,EAAK,CAAC,WAAY,WAAY,WACzCwD,iCAAAA,EAAAA,KAAAA,WAAmBxD,EAAKJ,QAAQk/D,WAChC9+D,EAAKJ,QAAQk/D,SAASzuD,MAAMrQ,EAAM,OAI1CA,EAAKJ,QAAQukG,OACb+6C,aAAa7uI,MAAMrQ,EAAM,CAAC,aAAc,aAAc,WAC9CA,EAAKmL,QACLnL,EAAKmL,OAAOk+F,qBAIpBrpG,EAAKiM,UACLjM,EAAKiM,QAAUjM,EAAKiM,QAEhBjM,EAAKJ,QAAQsM,QAETlM,EAAKJ,QAAQsM,OAAOC,OACpBnM,EAAKq/I,aAAahyH,aAAa,QAASrtB,EAAKJ,QAAQsM,OAAOC,MAC5DnM,EAAKq/I,aAAajyI,UAAYpN,EAAKJ,QAAQsM,OAAOC,MAGlDnM,EAAKJ,QAAQsM,OAAOE,KACpBpM,EAAK6/I,eAAexyH,aAAa,QAASrtB,EAAKJ,QAAQsM,OAAOE,OAGlEpM,EAAKq/I,aAAahyH,aAAa,QAASrtB,EAAK4hC,gBAAgB,cAC7D5hC,EAAKq/I,aAAajyI,UAAYpN,EAAK4hC,gBAAgB,eAK3D5hC,EAAKmO,QAAUnO,EAAK2M,IAAIsL,cAAc,wBAClCjY,EAAK2M,IAAIsL,cAAc,yBAE3BjY,EAAK+/I,SAAW//I,EAAK2M,IAAIsL,cAAc,yBACnCjY,EAAK2M,IAAIsL,cAAc,0BAG3BjY,EAAKmN,QAAUnN,EAAK2M,IAAIsL,cAAc,wBAClCjY,EAAK2M,IAAIsL,cAAc,yBAEvBzU,iCAAAA,EAAAA,gBAAAA,SACAA,iCAAAA,EAAAA,KAAAA,MAAcxD,EAAK2M,IAAK,CACpB0nE,KAAM,WACFr0E,EAAKu/I,cAKZ/7I,iCAAAA,EAAAA,KAAAA,eAcDs7I,mBAAmB9+I,OAdM,CACzB,MAAMggJ,IAAgB5gJ,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAAS,YAAcI,EAAKJ,QAAQ0xG,QACpG,QAAQ,GACJ,IAA8B,UAAzBtxG,EAAKJ,QAAQqM,SAAuB+zI,EACzC,KAAKhgJ,EAAKJ,QAAQ0xG,OAClB,IAA8B,UAAzBtxG,EAAKJ,QAAQqM,SAAuBjM,EAAKmO,SAAWnO,EAAKmO,QAAQgsH,kBAAoB,GAAK6lB,EAC3FhgJ,EAAKigJ,WAAY,EACjBjgJ,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKusC,QAAQkxG,WACpC,MACJ,QACIz9I,EAAKigJ,WAAY,GAOzBznH,GAAgC,mBAAbA,GACnBA,QAKZkkB,SAASwjG,qBAAuB,SAAUtgJ,GACtC,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,0FAAqBjB,MAAK,SAAUW,GAChC,MAAM6gJ,EAAW7gJ,EAAOiP,QAClBb,EAAS,IAAM1N,EAAKusC,QAAQkxG,UAC5B2C,EAAqB,sBACrBC,EAAazgJ,EAAQ8N,QAAU9N,EAAQ8N,OAAOuK,cAAcmoI,IAC9DxzI,SAASqL,cAAcmoI,GAG3B,GAFAC,EAAWriH,UAAUnjB,IAAI7a,EAAKusC,QAAQkxG,WACtC4C,EAAW93B,QAAQ,kBAAkBvqF,UAAUnjB,IAAI7a,EAAKusC,QAAQkxG,YAC3D0C,EAASG,MAAM5yI,GAAS,CACzB,MAAM6yI,EAAM3zI,SAASqL,cAAc,oBAC/BsoI,IACAA,EAAI9jF,cAAc72D,MAAMivE,UAAY,QACpC0rE,EAAIriH,gBAAgB,cACpBqiH,EAAIriH,gBAAgB,aACpBqiH,EAAIriH,gBAAgB,cACpBqiH,EAAIriH,gBAAgB,cAEHiiH,EAASzyI,GACzBuyI,UAAU,CACPO,oBAAqB5gJ,EAAQ4gJ,sBAAuB,EACpDC,MAAO,CACHlsE,MAAO,gCACPD,OAAQ,iCAEZosE,cAAcC,EAASC,EAAex/F,EAASy/F,GAC3C,IAAIC,EAAS,GAiBb,OAhBsB1/F,EAAQz1C,iBAAiB,UAC/BnE,SAAQ,SAAUoyG,GAC9B,QAAQ,GACJ,KAAKA,EAAQ57E,UAAUl7B,MAAMmG,QAAQ,mCAAqC,EACtE63I,EAAS,WACT,MACJ,KAAKlnC,EAAQ57E,UAAUl7B,MAAMmG,QAAQ,oCAAsC,EACvE63I,EAAS,WACT,MACJ,KAAKlnC,EAAQ57E,UAAUl7B,MAAMmG,QAAQ,sCAAwC,EACzE63I,EAAS,YACT,MACJ,QACIA,EAAS,cAGdA,GAEXC,UAAW,CACPh3E,IAAK,SAAUjqC,GACX9/B,EAAKghJ,SAASlhH,IAElBmhH,KAAKnhH,GACD,QAAQ,GACJ,IAAmC,aAA9BA,EAAMpyB,OAAO9H,MAAMk7I,OACpB1hJ,OAAOmD,OAAOu9B,EAAMpyB,OAAO9H,MAAO,CAC9B2sB,MAAQ,GAAEuN,EAAM00C,KAAKjiD,UACrBC,OAAS,GAAEsN,EAAMpyB,OAAOqhD,wBAAwBv8B,aAEpD,MACJ,IAAmC,cAA9BsN,EAAMpyB,OAAO9H,MAAMk7I,OACpB1hJ,OAAOmD,OAAOu9B,EAAMpyB,OAAO9H,MAAO,CAC9B2sB,MAAQ,GAAEuN,EAAM00C,KAAKjiD,UACrBC,OAAS,GAAEsN,EAAM00C,KAAKhiD,aAE1B,MACJ,IAAmC,aAA9BsN,EAAMpyB,OAAO9H,MAAMk7I,OACpB1hJ,OAAOmD,OAAOu9B,EAAMpyB,OAAO9H,MAAO,CAC9B2sB,MAAQ,GAAEuN,EAAMpyB,OAAOqhD,wBAAwBx8B,UAC/CC,OAAS,GAAEsN,EAAM00C,KAAKhiD,aAO9BsN,EAAMpyB,OAAOuK,cAAc,iBAC3B6nB,EAAMpyB,OAAOswB,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,WAIvCmhJ,UAAW,CACPf,EAASe,UAAUC,SAAS,CACxBC,YAAa,YAKzBxhJ,EAAQ44B,UAAYh1B,iCAAAA,EAAAA,KAAAA,WAAmB5D,EAAQ44B,WAC/C54B,EAAQ44B,gBAMxBkkB,SAAS2kG,sBAAwB,SAAU3zI,GACvC,GAAIA,EAAQ,CACR,IAAI4zI,EAAuB5zI,EAAOuK,cAAc,gBAAgB82C,wBAKhE,MAJgB,CACZx8B,MAAO+uH,EAAqB/uH,MAC5BC,OAAQ8uH,EAAqB9uH,UAMzCkqB,SAAS6kG,2BAA6B,SAAUngG,GAC5C,MAAMphD,EAAOC,KAEb,IAAIuhJ,EAAgBxhJ,EAAKzB,IAAI2G,mBAAmByJ,cAChD,IAAK,IAAIxM,EAAI,EAAGA,EAAIq/I,EAAcl+I,OAAQnB,IACtC,GAAIq/I,EAAcr/I,GAAGwK,IAAIsL,cAAe,IAAGjY,EAAKusC,QAAQkxG,kCAAoCr8F,EACxF,OAAOogG,EAAcr/I,GAI7B,OAAO,MAGXu6C,SAASskG,SAAW,SAAUhiJ,GAC1B,MAAMgB,EAAOC,KACPyN,EAAS1O,EAAE0O,OACjB,GAAIA,EAAOuK,cAAc,gBAAiB,CACtCvK,EAAOswB,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,SACxB,MAAM0hJ,EAAUzhJ,EAAKqhJ,sBAAsB3zI,GAC3C,GAAI+zI,EAAS,CACT,IAAI10I,EAAe/M,EAAKuhJ,2BAA2B7zI,GAC/CX,GACAA,EAAaG,MAAMA,MAAMokG,OAAOmwC,IAI5CzhJ,EAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,mBAAiC,CAC9CgL,QAAS/K,EAAM80B,KAAM,CACjBvC,MAAO7kB,EAAOqhD,wBAAwBx8B,MACtCC,OAAQ9kB,EAAOqhD,wBAAwBv8B,WAKnDkqB,SAAS6iG,SAAW,WAChB,MAAMv/I,EAAOC,KAEPyhJ,EAAe1hJ,EAAK2M,IAAIsL,cAAcjY,EAAKiM,QAAQ01I,gBACrDD,EAAa1jH,UAAU8gB,SAAS/+C,qCAAAA,EAAAA,QAAAA,UAChC2hJ,EAAa1jH,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,QAE9BC,EAAKuF,KAAK,8BACVvF,EAAK28C,KAAK,+BAEV38C,EAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,IAC1D4hJ,oBAAoB3jH,OAAOj+B,KAInC08C,SAAS+xC,SAAW,WAChB,MAAMzuF,EAAOC,KAEPyhJ,EAAe1hJ,EAAK2M,IAAIsL,cAAcjY,EAAKiM,QAAQ01I,gBACpDD,EAAa1jH,UAAU8gB,SAAS/+C,qCAAAA,EAAAA,QAAAA,UACjC2hJ,EAAa1jH,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,QAE3BC,EAAK28C,KAAK,8BACV38C,EAAKuF,KAAK,+BAEVvF,EAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,IAC1D4hJ,oBAAoB/mI,IAAI7a,KAIhC08C,SAASzvC,MAAQ,WACb,MAAMjN,EAAOC,KAIb,GAFAD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,QAEnBC,EAAKkN,OAASlN,EAAKkN,MAAMA,MAAO,CAEhC,MAAMsyI,EAAgBx/I,EAAK2M,IAAIsL,cAAe,GAAEjY,EAAKusC,QAAQkxG,gCAC7D,GAAI+B,GAAiBA,EAAc55I,OAAS45I,EAAc55I,MAAM2sB,OAASitH,EAAc55I,MAAM4sB,OAAQ,CACjG,MACMqvH,EADerC,EAAcvnI,cAAc,aACd82C,wBAE/Bx2C,SAASspI,EAActvH,OAAS,GAAKha,SAASspI,EAAcrvH,QAAU,IACtEgtH,EAAclhG,QAAQmhG,eAAiBoC,EAActvH,MACrDitH,EAAclhG,QAAQohG,gBAAkBmC,EAAcrvH,QAE1DgtH,EAAclhG,QAAQqhG,eAAiBH,EAAc55I,MAAM2sB,MAC3DitH,EAAclhG,QAAQshG,gBAAkBJ,EAAc55I,MAAM4sB,OAEhExyB,EAAKkN,MAAMA,MAAQlN,EAAKkN,MAAMA,MAAM40I,UAGxC,MAAMngH,EAAO3hC,EAAKqL,sBAClB,GAAIs2B,EAAM,CACNA,EAAK/7B,MAAMg3C,QAAU,OACrB58C,EAAK2M,IAAIsL,cAAc,gCAAgCrS,MAAMg3C,QAAU,OACvEjb,EAAKh2B,iBAAiB,sBAAsBnE,SAAQC,GAAOA,EAAIw2B,WAE1Cj+B,EAAK2M,IAAIsL,cAAcjY,EAAKiM,QAAQ01I,gBAC5C3jH,UAAUnjB,IAAI9a,qCAAAA,EAAAA,QAAAA,QAE3B,IAAIkgJ,EAAYrzI,SAASqL,cAAc,IAAMjY,EAAKusC,QAAQkxG,WACtDwC,IACAA,EAAUr6I,MAAQ,IAEtB5F,EAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,kBAAgC,CAAEgL,QAAS/K,EAAM0D,QAAS1D,EAAKoF,iBAGhFw8I,oBAAoB3jH,OAAOj+B,KAKnC08C,SAASq0C,UAAY,SAAU3sF,GAC3B,MAAMpE,EAAOC,KAEbD,EAAK+hJ,SACL/hJ,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,QAG1BC,EAAKzB,IAAI2G,mBAAmByJ,cACvBxJ,QAAO,SAAU6oD,GACd,OAAOA,IAAQhuD,KAElBmF,QAAO,SAAU6oD,GACd,MAA+B,UAAxBA,EAAIpuD,QAAQqM,WAEtBzE,SAAQ,SAAUwmD,GACfA,EAAI/gD,WAGR7I,IAEIA,EAAKkgC,KACLtkC,EAAKzB,IAAIuvD,MAAM1pD,EAAKkgC,KAChBtkC,EAAKsF,aACLtF,EAAKuF,KAAK,gCAIdvF,EAAK+5F,0BAA4B31F,EACjCpE,EAAKgiJ,4BAA4B,CAC7B59I,KAAMA,EACNuI,IAAK3M,EAAK2M,IAAIsL,cAAc,IAAMykC,SAASH,MAAQ,eAMnE,MAAM0lG,YAAc,SAAU9/G,EAAG94B,GAE7B,OADQkP,SAAS4pB,EAAEkkD,QAAQ,KAAO,GACzBnjB,eAAe75D,GAAU,MAGtCqzC,SAASslG,4BAA8Bn3I,eAAgBjL,SACnD,MAAMI,KAAOC,KACbL,QAAUA,SAAW,GACrB,MAAMsiJ,UAAY,2FAA6C3zI,QACzDnK,KAAOxE,QAAQwE,KACrBA,KAAKu/E,IAAMv/E,KAAKu/E,IAAIplF,KAAI0J,GAAe,OAARA,EAAe,EAAIA,IAClD,MAAM0E,IAAM/M,QAAQ+M,IACpB,IAAItD,OAAS7F,iCAAAA,EAAAA,KAAAA,aAAqBxD,KAAKzB,KAEvC,MAAM4jJ,SAAWniJ,KAAK2M,IAAIsL,cAAc,wBACxCjY,KAAK2zH,eAAensH,SAAQg5B,GAAQxgC,KAAK4zH,cAAcuuB,SAAU3hH,KAEjE,IAAI4hH,aAAe,CACf19E,OAAQtgE,KAAKsgE,OAAStgE,KAAKsgE,OAAOxB,eAAe75D,QAAU,IAC3Ds7D,SAAUvgE,KAAKugE,SAAWvgE,KAAKugE,SAASzB,eAAe75D,QAAU,KAGrE,MAAMg5I,sCAAwCj+I,KAAK41F,oCAC/Cj5F,MAAMC,QAAQoD,KAAK41F,qCACnB51F,KAAK41F,mCAAmC12F,OAAS,GAAKc,KAAK41F,mCAAmC,GAE9FqoD,wCACAD,aAAavmI,IAAMomI,YAAY79I,KAAKyX,IAAKxS,QACzC+4I,aAAah2I,IAAM61I,YAAY79I,KAAKgI,IAAK/C,QAEzC+4I,aAAaE,YAAc,CACvB59E,OAAQtgE,KAAK41F,mCAAmC,GAAGt1B,OAAStgE,KAAK41F,mCAAmC,GAAGt1B,OAAOxB,eAAe75D,QAAU,IACvIs7D,SAAUvgE,KAAK41F,mCAAmC,GAAGr1B,SAAWvgE,KAAK41F,mCAAmC,GAAGr1B,SAASzB,eAAe75D,QAAU,IAC7IwS,IAAKomI,YAAY79I,KAAK41F,mCAAmC,GAAGn+E,IAAKxS,QACjE+C,IAAK61I,YAAY79I,KAAK41F,mCAAmC,GAAG5tF,IAAK/C,UAIzErJ,KAAKu9C,gBAAgBb,SAASH,MAAQ,SAAU6lG,cAAc,SAAUzjE,KAKpE,GAHAhyE,IAAIS,UAAYuxE,IAChBhyE,IAAI/G,MAAMg3C,QAAU,GAEhB58C,KAAKJ,QAAQsM,OAAQ,CAErB,GAAIlM,KAAKJ,QAAQsM,OAAOC,KAAM,CAC1B,MAAMo2I,EAAWviJ,KAAK2M,IAAIsL,cAAc,6BACxCsqI,EAASl1H,aAAa,QAASrtB,KAAKJ,QAAQsM,OAAOC,MACnDo2I,EAASn1I,UAAYpN,KAAKJ,QAAQsM,OAAOC,KAGzCnM,KAAKJ,QAAQsM,OAAOE,KACpBpM,KAAK2M,IAAIsL,cAAc,gCAAgCoV,aAAa,QAASrtB,KAAKJ,QAAQsM,OAAOE,KAIzG,IAAIo2I,cAAgB,CAAE7lG,MAAM,GACxB0lG,wCACAG,cAAgB,CACZj2I,SAAU,QACVk2I,MAAO,CACH5wI,OAAQ,cACR+b,GAAI,GACJC,GAAI,GACJ+C,KAAM,KAIlB,IAAI8xH,aAAel/I,iCAAAA,EAAAA,KAAAA,OAAe,CAC9Bm/I,OAAQh2I,IAAIsL,cAAc,aAC1B2qI,QAAS,CACLxuE,IAAK,GACLG,MAAO,GACPD,OAAQ,EACRD,KAAM,IAEV/uD,OAAQk9H,eACTxiJ,KAAK6iJ,mBAAmBz+I,OAG3B,MAAMo7I,cAAgBx/I,KAAK2M,IAAIsL,cAAe,GAAEjY,KAAKusC,QAAQkxG,gCACzD+B,eACAA,cAAclhG,QAAQmhG,gBAAkBlnI,SAASinI,cAAclhG,QAAQmhG,gBAAkB,GACzFD,cAAclhG,QAAQohG,iBAAmBnnI,SAASinI,cAAclhG,QAAQohG,iBAAmB,IAC3Fl8I,iCAAAA,EAAAA,KAAAA,OAAek/I,aAAa5tH,KAAM,CAAEvC,MAAOitH,cAAclhG,QAAQmhG,eAAgBjtH,OAAQgtH,cAAclhG,QAAQohG,kBAE3GF,cAAclhG,QAAQqhG,gBAAkBpnI,SAASinI,cAAclhG,QAAQqhG,gBAAkB,GACzFH,cAAclhG,QAAQshG,iBAAmBrnI,SAASinI,cAAclhG,QAAQshG,iBAAmB,IAC3FJ,cAAc55I,MAAM2sB,MAAQitH,cAAclhG,QAAQqhG,eAClDH,cAAc55I,MAAM4sB,OAASgtH,cAAclhG,QAAQshG,kBAGvD5/I,KAAKkN,MAAMy9E,UACX+3D,aAAa/3D,QAAU,CACnBp+E,SAAU,SAAUm9G,EAAOo5B,EAAQC,EAAS3hG,GACxC,IAAI8S,EAAYtnD,SAASqL,cAAc,yBACnC+qI,EAAep2I,SAASqL,cAAc,OAAO82C,wBAAwBslB,KACrE4uE,EAAer2I,SAASqL,cAAc,mBAAmB82C,wBAAwBwlB,MACjF2uE,EAAehvF,EAAUivF,YACzBv1H,EAAIrV,SAAS6qI,GAAGC,MAAMjiG,GAAS,IAAM6hG,EAAeD,EAAexhJ,KAAKonD,MAAMs6F,EAAe,GAG7FI,EAAc12I,SAASqL,cAAc,mBAAmB82C,wBAAwBv8B,OAAS,EACzF+wH,EAAWrvF,EAAUj8C,cAAe,IAAGjY,KAAKusC,QAAQmxG,mBAIxD,OAHI6F,GAAYD,IACZC,EAAS39I,MAAM4sB,OAAS8wH,EAAc,MAEnC,CAAElvE,IAAK,EAAGC,KAAMzmD,IAE3B41H,SAAU,SAAUrhH,GAChB,IAAIinB,GAAKppD,KAAKkN,MAAMy9E,QAGpB,MAFkB,mBAAPvhC,KACPA,GAAK5lD,iCAAAA,EAAAA,KAAAA,gBAAwBxD,KAAKkN,MAAMy9E,UACrCvhC,GAAGzoD,KAAK8iJ,KAAKzjJ,KAAKkN,MAAMimE,KAAMhxC,MAK7CniC,KAAKkN,OAASlN,KAAKkN,MAAMguF,aACzBwnD,aAAaxnD,WAAa,WACtB,IAAI9xC,GAAKppD,KAAKkN,MAAMguF,WACF,mBAAP9xC,KACPA,GAAK5lD,iCAAAA,EAAAA,KAAAA,gBAAwBxD,KAAKkN,MAAMguF,aAC5C9xC,GAAGzoD,KAAK8iJ,KAAKzjJ,KAAKkN,MAAMimE,QAIhCuvE,aAAagB,WAAa,WAClBlgJ,iCAAAA,EAAAA,KAAAA,WAAmBk/I,aAAaiB,cAChCjB,aAAaiB,YAAYhjJ,KAAKV,MAElCD,KAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,UAAwB,CAAEgL,QAAS/K,KAAMugJ,IAAKtgJ,KAAKsgJ,IAAI,GAAG,GAAIrzI,MAAOjN,QAGrFiiJ,GAAG0B,eAEJ1B,GAAGh1I,MAAM22I,SAASz6F,GAAG06F,iBAAmB,SAAUC,EAAaC,GAC3D,IAAIC,EAAKhkJ,KAAMivD,EAAS+0F,EAAG/0F,OACvB15B,EAAOyuH,EAAGb,GAAG7C,IAAI/qH,OACjB0uH,EAAYD,EAAGE,sBAAsBJ,EAAaC,GAClDI,EAAeJ,EAAQC,EAAGI,aAAeJ,EAAGK,UAC5CC,EAAS,SAAUpiH,GAAK,OAAQ6hH,EAAQC,EAAGO,MAAQP,EAAGQ,IAAI9jJ,KAAKsjJ,EAAI9hH,IACnEuiH,EAAS,SAAUviH,EAAGhgC,GAClB,OAAO+sD,EAAOy1F,YAAYrhJ,OAAS,EAAI4gJ,EAAU/hH,EAAGhgC,GAAG,GAAG,GAAKiiJ,EAAazjJ,KAAKsjJ,EAAI9hH,EAAE9iC,GAAxB+kJ,CAA4BjiH,EAAEr/B,QAIrG,OAFA0yB,EAAO05B,EAAO01F,aAAepvH,EAAK5H,EAAE82H,GAAQ72H,EAAE02H,GAAU/uH,EAAK5H,EAAE22H,GAAQ12H,EAAE62H,GACpEx1F,EAAO21F,mBAAoBrvH,EAAOA,EAAKsvH,SAAQ,SAAU3iH,GAAK,OAAkB,MAAXA,EAAEr/B,UACrE,SAAUq/B,GACb,IACiFhO,EAD7E/F,EAAS8gC,EAAO21F,iBAAmBZ,EAAGc,iBAAiB5iH,EAAE/T,QAAU+T,EAAE/T,OACrER,EAAIo2H,EAAQC,EAAGr2H,EAAIq2H,EAAGe,KAAMn3H,EAAIu2H,EAAazjJ,KAAKsjJ,EAAI9hH,EAAE9iC,IAAK4lJ,EAAK,EAAGC,EAAK,EAe9E,OAdIjB,EAAGkB,WAAWhjH,GACV+sB,EAAOk2F,aAAajjH,EAAE9iC,IACtB80B,EAAO8vH,EAAGoB,gBAAgBj3H,EAAQR,EAAGC,EAAGqhC,EAAOk2F,aAAajjH,EAAE9iC,MAE1D4kJ,EAAGqB,WAAWnjH,KAAM/T,EAAS61H,EAAGsB,oBAAoBn3H,IACxD+F,EAAOqB,EAAK0uB,YAAY,SAAjB1uB,CAA2BpH,KAGlCA,EAAO,KACP62H,EAAKr3H,EAAEQ,EAAO,GAAGR,GACjBs3H,EAAKr3H,EAAEO,EAAO,GAAGtrB,QAErBqxB,EAAO+6B,EAAO01F,aAAe,KAAOM,EAAK,IAAMD,EAAK,KAAOA,EAAK,IAAMC,GAEnE/wH,GAAc,UAG7B+tH,GAAGh1I,MAAM22I,SAASz6F,GAAGo8F,iBAAmB,SAAUC,EAAazB,GAC3D,IAAIC,EAAKhkJ,KAAMivD,EAAS+0F,EAAG/0F,OAAQ+gC,EAAOg0D,EAAGb,GAAG7C,IAAItwD,OAChDi0D,EAAYD,EAAGyB,sBAAsBD,EAAazB,GAClDI,EAAeJ,EAAQC,EAAGI,aAAeJ,EAAGK,UAC5CC,EAAS,SAAUpiH,GAAK,OAAQ6hH,EAAQC,EAAGO,MAAQP,EAAGQ,IAAI9jJ,KAAKsjJ,EAAI9hH,IACnEwjH,EAAS,SAAUxjH,EAAGhgC,GAClB,OAAO+sD,EAAOy1F,YAAYrhJ,OAAS,EAAI4gJ,EAAU/hH,EAAGhgC,GAAG,GAAG,GAAKiiJ,EAAazjJ,KAAKsjJ,EAAI9hH,EAAE9iC,GAAxB+kJ,CAA4B,IAE/FpxH,EAAS,SAAUmP,EAAGhgC,GAClB,OAAO+sD,EAAOy1F,YAAYrhJ,OAAS,EAAI4gJ,EAAU/hH,EAAGhgC,GAAG,GAAG,GAAKiiJ,EAAazjJ,KAAKsjJ,EAAI9hH,EAAE9iC,GAAxB+kJ,CAA4BjiH,EAAEr/B,QAMrG,OAJAmtF,EAAO/gC,EAAO01F,aAAe30D,EAAKg1D,GAAGU,GAAQC,GAAG5yH,GAAQnF,EAAE02H,GAAUt0D,EAAKriE,EAAE22H,GAAQW,GAAGS,GAAQE,GAAG7yH,GAC5Fk8B,EAAO21F,mBACR50D,EAAOA,EAAK60D,SAAQ,SAAU3iH,GAAK,OAAmB,OAAZA,EAAEr/B,UAEzC,SAAUq/B,GACb,IACoBhO,EADhB/F,EAAS8gC,EAAO21F,iBAAmBZ,EAAGc,iBAAiB5iH,EAAE/T,QAAU+T,EAAE/T,OACrE62H,EAAK,EAAGC,EAAK,EAWjB,OAVIjB,EAAG6B,WAAW3jH,IACV8hH,EAAGqB,WAAWnjH,KAAM/T,EAAS61H,EAAGsB,oBAAoBn3H,IACxD+F,EAAO87D,EAAK/rC,YAAY,SAAjB+rC,CAA2B7hE,KAE9BA,EAAO,KACP62H,EAAKhB,EAAGr2H,EAAEQ,EAAO,GAAGR,GACpBs3H,EAAKjB,EAAGK,UAAUniH,EAAE9iC,GAAf4kJ,CAAmB71H,EAAO,GAAGtrB,QAEtCqxB,EAAO+6B,EAAO01F,aAAe,KAAOM,EAAK,IAAMD,EAAK,KAAOA,EAAK,IAAMC,GAEnE/wH,GAAc,UAG7B+tH,GAAG0B,cAAe,GAGtB5jJ,KAAKkN,MAAMA,MAAQg1I,GAAG6D,SAASrD,kBAIvC,MAAMsD,6BAA+B,WACjC,MAAMhmJ,EAAOC,KAEbD,EAAKzB,IAAI2G,mBAAmByJ,cACvBxJ,QAAO,SAAU6oD,GACd,OAAOA,IAAQhuD,GAAQguD,EAAI1oD,eAE9BH,QAAO,SAAU6oD,GACd,MAA+B,UAAxBA,EAAIpuD,QAAQqM,WAEtBzE,SAAQ,SAAUwmD,GACfA,EAAI/gD,YAIhByvC,SAASupG,UAAY,WACjB,IAAIjmJ,EAAOC,KAEXD,EAAK+hJ,SACL/hJ,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,QAE1B,IAAIqE,EAAO6Y,UAAU,GACrB,GAAI7Y,EAAM,CAEN,IAAI8hJ,EACA9hJ,EAAK8hJ,MACLA,EAAM9hJ,EAAK8hJ,KAEf,IAAI1tH,EAAWp0B,EAAKo0B,SAChBoiC,EAAUx2D,EAAKw2D,QAEnB,GAAIx2D,EAAKA,MAAQA,EAAKA,KAAKd,OAAS,EAAG,CAEnC,IAAKs3D,EAED,IAAK,IAAI9iD,KADT8iD,EAAU,GACIx2D,EAAKA,KAAK,GACpBw2D,EAAQvyD,KAAKyP,GAMrB9X,EAAKmmJ,UAAY,CACbvrF,QAASA,EACT30B,QAAS7hC,EAAKA,KACd8hJ,IAAKA,EACL1tH,SAAUA,EACVpO,KAAMhmB,EAAKgmB,KAAO,GAAK,MAE3B,IAAIg8H,EAAiB,KACrB,MAAMC,EAAQA,CAACF,EAAWG,EAAOC,KAC7B,IAAIC,EAAkBL,EACtB,GAAIG,EAAO,CACP,MAAMG,EAAYzmJ,EAAKmmJ,UAAUlgH,QAAQ1nC,KAAI,SAAUwgJ,EAAI58I,GACvD,MAAO,CAAE4nB,MAAO5nB,EAAGqyB,WAAYuqH,MAEnC0H,EAAUr8H,MAAK,CAACrP,EAAGsP,KACf,MAAMq8H,EAAS3rI,EAAEyZ,WAAW8xH,IAAU,GAChCK,EAASt8H,EAAEmK,WAAW8xH,IAAU,GACtC,OAAIC,EACwB,iBAAZG,EACDA,EAAOjrC,cAAckrC,GAErBD,EAASC,GAAU,EAAKD,GAAUC,EAAS,EAAI,EAElC,iBAAZA,EACDA,EAAOlrC,cAAcirC,GAErBA,EAASC,EAAS,EAAKD,GAAUC,EAAS,GAAK,MAGlEH,EAAkBpnJ,OAAOmD,OAAO,GAAI4jJ,EAAW,CAC3ClgH,QAASwgH,EAAUloJ,KAAI,SAAUwgJ,GAC7B,OAAO3/I,OAAOmD,OAAO,GAAIw8I,EAAGvqH,WAAY,CAAEzK,MAAOg1H,EAAGh1H,cAG5CK,KAAO,CAAEk8H,MAAOA,EAAOC,MAAOA,GAElDvmJ,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,SAAUiqG,GAAiB7nJ,MAAK,SAAUgL,GACxE,MAAM+8F,EAAQ1mG,EAAK2M,IAAIsL,cAAc,wBAC/BxU,EAASijG,EAAMjqC,cACrBh5D,EAAOi5D,YAAYgqC,GACnBA,EAAMt5F,UAAYzD,EAClBlG,EAAOqJ,YAAY45F,GACfy/C,EAAU3tH,UACV2tH,EAAU3tH,SAASkuE,GAEnB8/C,EAAgBp8H,MAChBs8E,EAAM/6F,iBAAiB,YAAYnE,SAAQo/I,IACvCA,EAAG/6I,iBAAiB,SAAS7M,IACzBonJ,EAAiBpnJ,EAAE0O,OAAOm5I,aAAaC,WACvC,MAAMR,EAAQtnJ,EAAE0O,OAAO4wC,QAAQyoG,YAAc/nJ,EAAE0O,OAAO+pD,UAElD+uF,EAAgBp8H,KAAKk8H,QAAUA,GAASE,EAAgBp8H,KAAKm8H,MAC7DF,EAAMF,EAAWG,GAAO,IACnBE,EAAgBp8H,KAAKk8H,QAAUA,GAAUE,EAAgBp8H,KAAKm8H,MAGnEF,EAAMF,EAAWG,GAAO,UAKxCN,6BAA6BrlJ,KAAKX,GAElC,MAAMmiJ,EAASniJ,EAAK2M,IAAIsL,cAAc,wBACtCjY,EAAK2zH,eAAensH,SAAQg5B,GAAQxgC,EAAK4zH,cAAcuuB,EAAU3hH,KAEjExgC,EAAKzB,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,UAAwB,CAAEgL,QAAS/K,IAChDomJ,IACA1/C,EAAMogD,WAAaV,OAK/BC,EAAMrmJ,EAAKmmJ,WAEXnmJ,EAAK2M,IAAIsL,cAAc,wBAAwBrS,MAAMg3C,QAAU,OAC/D58C,EAAK2M,IAAIsL,cAAc,uBAAuBrS,MAAMg3C,QAAU,OAE9D58C,EAAK28C,KAAK,iCAKtB,MAAMilG,oBAAsB,CACxB/mI,IAAK,SAAUmsI,GACX,MAAMC,EAAQD,EAAar6I,IAAIsL,cAAc,+BAC7CgvI,EAAMrhJ,MAAM0uE,OAAS,GACrB,MAAMA,EAAS0yE,EAAazoJ,IAAI2G,mBAAmByJ,cAC9CxJ,QAAO4G,GAASA,EAAME,UAAYF,EAAMwiB,YAAYqvH,OAAS7xI,IAAUi7I,IACvE7hJ,QAAO4G,GAASk7I,EAAMntE,UAAU/tE,EAAMY,IAAIsL,cAAc,kCAAiC/P,QAAO,CAACg/I,EAASC,IAChGD,EAAUC,EAAQx6I,IAAIsL,cAAc,+BAA+BmvI,cAC3E,GACH9yE,IAAQ2yE,EAAMrhJ,MAAM0uE,OAASA,EAAS,OAE9Cr2C,OAAQ,SAAU+oH,GACdA,EAAazoJ,IAAI2G,mBAAmByJ,cAC/BxJ,QAAO4G,GAASA,EAAME,UAAYF,EAAMwiB,YAAYqvH,OAAS7xI,IAAUi7I,IACvEx/I,SAASuE,IACNA,EAAMY,IAAIsL,cAAc,+BAA+BrS,MAAM0uE,OAAS,QAMtF53B,SAASrvC,KAAO,SAAU1D,EAAMuqD,GAC5B,MAAMl0D,EAAOC,KAEbD,EAAK+hJ,SACL/hJ,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,qCAAAA,EAAAA,QAAAA,QAE1B,MAAMsnJ,EAAUnzF,GAAal0D,EAAK2M,IAAIsL,cAAc,wBAapDjY,EAAKsnJ,kBAAoB51I,OAAO61I,sBAZV,WAClB,IAAIpjE,EAAakjE,EAAQt4F,wBACzB,GAAIo1B,GAAcA,EAAW5xD,MAAQ,IAAK,CACtC7gB,OAAO81I,qBAAqBvnJ,KAAKqnJ,mBAEjC,MAAMnF,EAAWniJ,EAAK2M,IAAIsL,cAAc,wBACxCjY,EAAK2zH,eAAensH,SAAQg5B,GAAQxgC,EAAK4zH,cAAcuuB,EAAU3hH,KAEjEvgC,KAAK1B,IAAIiN,QAAQzL,qCAAAA,EAAAA,MAAAA,UAAwB,CAAEgL,QAAS/K,MAIUmgD,KAAKngD,IAE3E,MAAMynJ,EAAWznJ,EAAK2M,IAAIsL,cAAc,wBACxCwvI,EAAS7hJ,MAAMg3C,QAAU,OACzB,MAAM8qG,EAAW1nJ,EAAK2M,IAAIsL,cAAc,wBACxCyvI,EAAS9hJ,MAAMg3C,QAAU,OACzB,MAAM+qG,EAAU3nJ,EAAK2M,IAAIsL,cAAc,uBACvC0vI,EAAQ/hJ,MAAMg3C,QAAU,OAEpBjzC,EACIuqD,GACAl0D,EAAK4nJ,kBAAoB,WACrB,OAAO1zF,GAEXA,EAAU9mD,UAAYzD,EACtBuqD,EAAUtuD,MAAMg3C,QAAU,KAE1B8qG,EAASt6I,UAAYzD,EACrB+9I,EAAS9hJ,MAAMg3C,QAAU,IAIzB6qG,EAASttB,kBACTstB,EAAS7hJ,MAAMg3C,QAAU,GAEpB8qG,EAASvtB,kBACdutB,EAAS9hJ,MAAMg3C,QAAU,GAEpB+qG,EAAQxtB,oBACbwtB,EAAQ/hJ,MAAMg3C,QAAU,IAIhC,MAAM6hG,EAAcz+I,EAAK2M,IAAIsL,cAAc,gCAE3C,GAAIjY,EAAKJ,QAAQsM,OAAQ,CAErB,GAAIlM,EAAKJ,QAAQsM,OAAOC,KAAM,CAC1B,MAAMo2I,EAAWviJ,EAAK2M,IAAIsL,cAAc,6BACxCsqI,EAASl1H,aAAa,QAASrtB,EAAKJ,QAAQsM,OAAOC,MACnDo2I,EAASn1I,UAAYpN,EAAKJ,QAAQsM,OAAOC,KAGzCnM,EAAKJ,QAAQsM,OAAOE,KACpBqyI,EAAYpxH,aAAa,QAASrtB,EAAKJ,QAAQsM,OAAOE,KAI1DpM,EAAKJ,QAAQ2sC,SACTvsC,EAAKJ,QAAQ2sC,QAAQy8E,WACrBy1B,EAAYxmI,cAAc,0CAA0C+lB,UAAUnjB,IAAI7a,EAAKJ,QAAQ2sC,QAAQy8E,WAK/G,MAAM04B,EAAe1hJ,EAAK2M,IAAIsL,cAAcjY,EAAKiM,QAAQ01I,gBACrDrD,iBAAiBoD,IACjB1hJ,EAAKyuF,WAGTzuF,EAAK28C,KAAK,8BACV38C,EAAKuF,KAAK,+BAEVq8I,oBAAoB/mI,IAAI7a,IAG5B08C,SAASqlG,OAAS,WACd,MAAM/hJ,EAAOC,KACTD,EAAKigJ,UACLjgJ,EAAKkgJ,qBAAqB,CAAExyI,OAAQ1N,EAAK2M,IAAK6zI,qBAAqB,IAGnE1B,mBAAmB9+I,IAI3B08C,SAASi/C,gBAAkB,SAAUv3F,GACjC,MAAMpE,EAAOC,KACP8iC,EAAQ,WACV/iC,EAAK+5F,0BAA4B31F,EACjCpE,EAAKgiJ,4BAA4B,CAC7B59I,KAAMA,EACNuI,IAAK3M,EAAK2M,IAAIsL,cAAc,IAAMykC,SAASH,MAAQ,aAIvDv8C,EAAKkN,OAASlN,EAAKkN,MAAMA,MACzBlN,EAAKkN,MAAMA,MAAM26I,OAAO,CACpB3mC,KAAMn+E,IAIVA,KAIR2Z,SAASmmG,mBAAqB,SAAUjjJ,GACpC,MAAMI,EAAOC,KACb,IAAI4E,EAAS,GAEb,MAAMwE,GADNzJ,EAAUA,GAAW,IACEyJ,QAAU7F,iCAAAA,EAAAA,KAAAA,aAAqBxD,EAAKzB,KAGnD,GAFAqB,EAAQkoJ,UAEW,MAAfloJ,EAAQ+jF,IAAa,CACrB,MAAMokE,EAAe,WACjB,MAAMC,EAAahhF,iBAAiBhnE,EAAKqL,uBACnC48I,EAAWr7I,SAAS8J,gBAAgBysI,YAAc,IAAM,GACxD5uI,EAAI,CACNie,OAAQy1H,EAAW,IAAMroJ,EAAQi1E,WAAa70E,EAAKg+I,WAAWE,WAAat+I,EAAQsoJ,WAAaloJ,EAAKg+I,WAAWC,YASpH,OANI+J,EAAWz1H,QAAUy0C,iBAAiBhnE,EAAKzB,IAAIoO,KAAK4lB,MACpDhe,EAAEge,MAAuC,IAA/B1qB,WAAWmgJ,EAAWz1H,OAGhChe,EAAEge,MAAQ01H,EAAW,IAAMroJ,EAAQg1E,UAAY50E,EAAKg+I,WAAWK,UAAY4J,EAAW,IAAMroJ,EAAQuoJ,aAAenoJ,EAAKg+I,WAAWI,aAAex+I,EAAQwoJ,UAAYpoJ,EAAKg+I,WAAWG,UAEnL5pI,GAEL8zI,EAAU,CAAC,OAAS7kJ,iCAAAA,EAAAA,UAE1B,IAAIktI,EAAO9oH,OAAOE,kBACd2oH,EAAO7oH,OAAOC,kBAClBjoB,EAAQ+jF,IAAIn8E,SAAQ,SAAUqmB,GACT,iBAANA,IACP6iH,EAAOlvI,KAAK4K,IAAIyhB,EAAG6iH,GACnBD,EAAOjvI,KAAKqa,IAAIgS,EAAG4iH,OAI3B,IAAI6X,EAAU,IAAI1oJ,EAAQguB,GACtB26H,EAAY,IAAI3oJ,EAAQ+jF,KAE5B9+E,EAAS,CACLT,KAAM,CACFwpB,EAAG,IACHgtC,QAAS,CACL,CAAC,KAAKtyD,OAAOggJ,GACb,CAAC,OAAOhgJ,OAAOigJ,IAEnB91C,MAAO,CACH,IAAO,eAEX+1C,OAAQ,CACJ,IAAO,QAAUH,EAAQ,GAAK,MAGtCvzH,KAAMizH,IACNzyH,MAAO,CACHqnB,MAAM,GAEVhX,KAAM,CACF/X,EAAG,CACC66H,KAAM,CACFC,OAAO,EACPnuI,MAAO,EAAGtH,OAAQ,SAAUkvB,GAExB,IAAIwmH,EACAt9G,EAUJ,OAZAlJ,GAAQ,KAGA,GACJwmH,EAAOnnJ,KAAKirC,MAAU,IAAJtK,GAClBkJ,EAAU,OAEVs9G,EAAOnnJ,KAAKirC,MAAU,IAAJtK,GAAW,IAC7BkJ,EAAU,QAGds9G,EAAOA,EAAKzlF,eAAe75D,IACbgiC,KAI1Bxd,EAAG,CACC+0H,QAAS,CACLxuE,IAAK,EAAGE,OAAQ,GAEpBloE,IAAKskI,EACL70H,IAAK40H,EACLgY,KAAM,CACFluI,MAAO,EACPtH,OAAQ,SAAUkvB,GACd,OAAO8/G,YAAY9/G,EAAG94B,OAKtCu/I,SAAU,WACN,IAAI9zH,EACAurH,EAAapgJ,KAAKivD,OAAOyzF,OAAOp6B,QAAS,GAAEvoH,EAAKusC,QAAQkxG,gCAExD3oH,EADAurH,EACOrgJ,EAAKqhJ,sBAAsBhB,GAE3B0H,IAEPjzH,GACA70B,KAAKm7E,IAAIk2B,OAAOx8E,KAK5B,MAAMutH,EAAwCziJ,EAAQo6F,oCAClDj5F,MAAMC,QAAQpB,EAAQo6F,qCACtBp6F,EAAQo6F,mCAAmC12F,OAAS,GAAK1D,EAAQo6F,mCAAmC,GAEpGqoD,IACAx9I,EAAOT,KAAK8W,MAAQ,CAChByoE,IAAK3jF,EAAK4hC,gBAAgB,yBAC1BinH,KAAM7oJ,EAAK4hC,gBAAgB,QAE/B/8B,EAAOT,KAAKw2D,QAAQvyD,KAAK,CAAC,QAAQC,OAAO1I,EAAQo6F,mCAAmC,GAAGrW,MAEvF9+E,EAAOT,KAAKquG,MAAMo2C,KAAOhkJ,EAAOT,KAAKquG,MAAM9uB,IAC3C0kE,EAAQhgJ,KAAK,OAAS7E,iCAAAA,EAAAA,UACtBqB,EAAOT,KAAKokJ,OAAOK,KAAO,QAAUR,EAAQA,EAAQ/kJ,OAAS,GAAK,IAClEuB,EAAOT,KAAK0kJ,KAAO,CACfnlE,IAAK,KAGL4kE,EAAUvzI,OAAO/M,GAAgB,IAARA,KACzBpD,EAAO8gC,KAAK9X,EAAEhS,IAAMjc,EAAQo6F,mCAAmC,GAAGn+E,IAClEhX,EAAO8gC,KAAK9X,EAAEzhB,IAAMxM,EAAQo6F,mCAAmC,GAAG5tF,KAC3DxM,EAAQo6F,mCAAmC,GAAGrW,IAAI3uE,OAAO/M,GAAgB,IAARA,KACxEpD,EAAO8gC,KAAK9X,EAAEhS,IAAMra,KAAKqa,OAAO0sI,GAChC1jJ,EAAO8gC,KAAK9X,EAAEzhB,IAAM5K,KAAK4K,OAAOm8I,KAEhC1jJ,EAAO8gC,KAAK9X,EAAEhS,IAAMra,KAAKqa,OAAO0sI,EAAUjgJ,OAAO1I,EAAQo6F,mCAAmC,GAAGn+E,MAC/FhX,EAAO8gC,KAAK9X,EAAEzhB,IAAM5K,KAAK4K,OAAOm8I,EAAUjgJ,OAAO1I,EAAQo6F,mCAAmC,GAAG5tF,QAInGxM,EAAQ2sH,OAAM1nH,EAAO0nH,MAAQ,QAAU3sH,EAAQ2sH,KAAKtjE,GAAGr+C,OAAO,GAAK,KAAO,QAAUhL,EAAQ2sH,KAAKnnE,GAAGx6C,OAAO,GAAK,KAAO,QAAUhL,EAAQ2sH,KAAK5kF,GAAG/8B,OAAO,IAE5J,IAAIm+I,GAAW,EACflkJ,EAAO8+I,YAAc,WA6BjB,GA5BKoF,IACDA,GAAW,EAEP1G,IAEAz1I,SAASjB,iBAAiB,wBAAwBnE,SAASyC,IACvDA,EAAKojB,aAAa,KAAM,GACxBpjB,EAAKojB,aAAa,KAAM,MAG5BzgB,SAASjB,iBAAiB,mBAAmBnE,SAASyC,IAClD,IAAIO,EAAQoC,SAASo8I,gBAAgB,6BAA8B,SACnEx+I,EAAMwD,YAAchO,EAAK4hC,gBAAgB,QACzC33B,EAAK6C,YAAYtC,GAEjBP,EAAK4B,iBAAiB9L,qCAAAA,EAAAA,MAAAA,OAAoB,WAClCkK,EAAK+zB,UAAU8gB,SAAS/+C,qCAAAA,EAAAA,QAAAA,QACxBkK,EAAKgO,cAAc,SAASjK,YAAchO,EAAK4hC,gBAAgB,QAE/D33B,EAAKgO,cAAc,SAASjK,YAAchO,EAAK4hC,gBAAgB,QAGnE33B,EAAK+zB,UAAUS,OAAO1+B,qCAAAA,EAAAA,QAAAA,UACvB,CAAEkO,SAAS,UAKrBhO,KAAKsgJ,IACN,OAGJ,MAAMA,EAAMtgJ,KAAKsgJ,IAAI,GAAG,GACxB,IAAI0I,EAAiB1I,EAAI3pI,qBAAqB,QAAQ,GAClDsyI,EAAQ,6BAEZ,MAAMC,EAAuB,SAAU9pJ,EAAImpJ,GACvC,IAAIY,EAAOx8I,SAASo8I,gBAAgBE,EAAO,kBAC3CE,EAAKC,eAAe,KAAM,KAAMhqJ,GAChC+pJ,EAAKC,eAAe,KAAM,KAAM,MAChCD,EAAKC,eAAe,KAAM,KAAM,MAChCD,EAAKC,eAAe,KAAM,KAAM,MAChCD,EAAKC,eAAe,KAAM,KAAM,QAChCD,EAAKC,eAAe,KAAM,gBAAiB,kBAE3C,MAAMC,EAAQ18I,SAASo8I,gBAAgBE,EAAO,QAC9CI,EAAMD,eAAe,KAAM,SAAU,MACrCC,EAAMD,eAAe,KAAM,aAAcb,EAAO,IAChDc,EAAMD,eAAe,KAAM,eAAgB,OAC3CD,EAAKt8I,YAAYw8I,GAEjB,MAAMC,EAAS38I,SAASo8I,gBAAgBE,EAAO,QAC/CK,EAAOF,eAAe,KAAM,SAAU,OACtCE,EAAOF,eAAe,KAAM,aAAcb,EAAO,IACjDe,EAAOF,eAAe,KAAM,eAAgB,OAC5CD,EAAKt8I,YAAYy8I,GAEjB,MAAMC,EAAU58I,SAASo8I,gBAAgBE,EAAO,QAChDM,EAAQH,eAAe,KAAM,SAAU,QACvCG,EAAQH,eAAe,KAAM,aAAcb,EAAO,IAClDgB,EAAQH,eAAe,KAAM,eAAgB,KAC7CD,EAAKt8I,YAAY08I,GAEjBP,EAAen8I,YAAYs8I,IAG/BD,EAAqBd,EAAQ,GAAI,CAAC,MAAO,SAAU,UAC/CzoJ,EAAQo6F,oCACRmvD,EAAqBd,EAAQA,EAAQ/kJ,OAAS,GAAI,CAAC,OAAQ,OAAQ,UAGvE,MAAMmmJ,EAASrG,GAAGz+I,OAAO,aAAa+P,OAClC+0I,GACAA,EAAOhoG,WAAWib,YAAY+sF,GAGlCrG,GAAGz+I,OAAO,0CACL+kJ,UAAU,QACV9jJ,MAAM,SAAU,WAChB0I,GAAG,SAAS,SAAUtP,GACnBokJ,GAAGtjH,MAAMiuC,kBACT,IAAIz4C,EAAQt1B,EAAK+5F,0BAA0Bp6F,OAAOX,EAAE+qB,OAChDuL,IACAA,EAAQA,EAAM1qB,MAAM,EAAG,GACnB5K,EAAKzB,IAAI4I,MAAQnH,EAAKzB,IAAIqB,QAAQipC,SAClCvT,EAAQ9xB,iCAAAA,EAAAA,KAAAA,UAAkB8xB,EAAOt1B,EAAKzB,IAAIqB,QAAQipC,OAAQ7oC,EAAKzB,IAAI4I,MAEvEnH,EAAKzB,IAAI6uD,eAAe,CAAC,IAAIz9C,kDAAAA,EAAM2lB,EAAO,UAItD,MAAMnB,EAAOivH,GAAGz+I,OAAO,sBAAsBA,OAAO,QACpD,IAAKwvB,EAAKw1H,QAAS,CACf,IAAIC,EAAUz1H,EAAKvrB,KAAK,KAExB,GADY,6BAA6BuJ,KAAKy3I,GAE1CA,EAAUA,EAAQpgJ,QAAQ,aAAc,OAAOA,QAAQ,iBAAkB,OACzE2qB,EAAKvrB,KAAK,IAAKghJ,OACZ,CACS,2CAA2Cz3I,KAAKy3I,KAExDA,EAAUA,EAAQpgJ,QAAQ,eAAgB,OAAOA,QAAQ,uBAAwB,OACjF2qB,EAAKvrB,KAAK,IAAKghJ,KAM3B,MAAMC,EAAUtJ,EAAIxxF,wBACd+6F,EAAY,CACdv3H,MAAOs3H,EAAQt3H,MACfC,OAAQq3H,EAAQr3H,QAUpB,IAAIu3H,EAAqB,WACrB,IAAIn8H,EAAIw1H,GAAG54G,MAAMw/G,UAAUC,gBAAgB,CAAC,EAAGH,EAAUv3H,OAAQ,GAAI,IACrE6wH,GAAGz+I,OAAO,cAAc+kJ,UAAU,8BAC7B/oJ,MAAK,SAAUupJ,EAAUpH,GACtBoH,EAASC,MAAK,WACVD,EAASC,MAAK,SAAUhoH,EAAGhgC,GACvB,GAAU,IAANA,EACA,OAGJ,MAAMioJ,EAAShH,GAAGz+I,OAAO1E,MAEzB,GAAwC,IAApCmqJ,EAAO11I,OAAO3G,WAAWzK,OAAc,CACvC,IAAImH,EAAQ2/I,EAAOzlJ,OAAO,SAAS+P,OAAO6wF,YACtC8kD,EAAQD,EAAO/wI,OAAOjH,MAAM,KAEhCg4I,EAAOzlJ,OAAO,SAAS0U,KAAKgxI,EAAM,IAClC5/I,EAAMuD,YAAcq8I,EAAM,GAC1B,IAAItnG,EAAKt4C,EAAMozB,aAAa,MAE5BklB,GADAA,EAAKA,EAAKl7C,WAAW4C,EAAMozB,aAAa,OAAS,KACvC,IAAO,KACjBpzB,EAAM4iB,aAAa,KAAM01B,GACzBqnG,EAAO11I,OAAO5H,YAAYrC,YAIvCmjB,EAAE08H,cAGb,MAAMC,EAAgBnH,GAAGz+I,OAAO,cAAc+P,OAAOq6C,wBACrD,GAAKw7F,EAAch4H,MA+Bd,CACD,MAAMi4H,EAAgBpH,GAAGz+I,OAAO,cAAc+P,OAAOq6C,yBACjDw7F,EAAch4H,OAASu3H,EAAUv3H,MAAQi4H,EAAcj4H,OACjC,IAAtBg4H,EAAch4H,OAAeu3H,EAAUv3H,MAAQi4H,EAAcj4H,OAAS,KACtEw3H,QAnCkB,CAElB/pJ,EAAKyqJ,0BACL/4I,OAAO81I,qBAAqBxnJ,EAAKyqJ,yBACjCzqJ,EAAKyqJ,6BAA0BpmJ,GAGnC,MAAMqmJ,EAAU,WACZ,MAAMC,EAAQvH,GAAGz+I,OAAO,cAClBimJ,EAAYD,EAAMj2I,OACxB,GAAIi2I,EAAMrnJ,SAAWsnJ,EACjB5qJ,EAAKyqJ,wBAA0BlD,sBAAsBmD,QAEpD,GAAIC,EAAMrnJ,QAAUsnJ,IACpBA,EAAU77F,wBAAwBx8B,MACnCvyB,EAAKyqJ,wBAA0BlD,sBAAsBmD,OAClD,CACHh5I,OAAO81I,qBAAqBxnJ,EAAKyqJ,yBACjCzqJ,EAAKyqJ,6BAA0BpmJ,EAE/B,MAAMwmJ,EAAiBD,EAAU77F,wBAC3B+7F,EAAiB1H,GAAGz+I,OAAO,cAAc+P,OAAOq6C,yBAClD87F,EAAet4H,OAASu3H,EAAUv3H,MAAQu4H,EAAev4H,OAClC,IAAvBs4H,EAAet4H,OAAeu3H,EAAUv3H,MAAQu4H,EAAev4H,OAAS,KACxEw3H,MAKZ/pJ,EAAKyqJ,wBAA0BlD,sBAAsBmD,GAWzDtH,GAAGz+I,OAAO,OAAOA,OAAO,mBAAmB+kJ,UAAU,kBAAkBS,MAAK,WACxElqJ,KAAKwhD,WAAW30C,YAAY7M,SAG3BD,EAAKwuF,gBACNxuF,EAAK28C,KAAK,8BACV38C,EAAKuF,KAAK,gCAIdvF,EAAK2M,IAAIsL,cAAc,wBAAwBrS,MAAMg3C,QAAU,GAC/D58C,EAAK2M,IAAIsL,cAAc,uBAAuBrS,MAAMg3C,QAAU,SAIlE/3C,EAAS,CACLy/B,IAAKtkC,EAAK4hC,gBAAgB,6BAK1C,OAAO/8B,GAGX,MAAMuqE,QAAU,SAAU+7C,EAAUC,GAChC,IAAIC,EAAOD,EAASD,EAChBhpF,EAAI,GACJmpF,EAAiB9pH,KAAKonD,MAAMyiE,EAAO,IAAO,GAAK,GAAK,IACxDA,GAAyB,IAAjBC,EAAwB,GAAK,GAAK,GAE1C,IAAIC,EAAkB/pH,KAAKonD,MAAMyiE,EAAO,IAAO,GAAK,IACpDA,GAA0B,IAAlBE,EAAyB,GAAK,GAEtCppF,EAAE8mB,EAAIsiE,EAAmC,GAAjBD,EAExB,IAAIE,EAAoBhqH,KAAKonD,MAAMyiE,EAAO,IAAO,IAOjD,OANAA,GAA4B,IAApBG,EAA2B,GAEnCrpF,EAAEijB,EAAIomE,EAENrpF,EAAEwF,EAAInmC,KAAKonD,MAAMyiE,EAAO,KAEjB7nH,iCAAAA,EAAAA,KAAAA,OAAe,GAAI2+B,EAAG,CAAEjf,UAAW,QAAUif,EAAE8mB,GAAGr+C,OAAO,GAAK,KAAO,QAAUu3B,EAAEijB,GAAGx6C,OAAO,GAAK,KAAO,QAAUu3B,EAAEwF,GAAG/8B,OAAO,MAGxI8xC,SAASq/C,yBAA2B,SAAU33F,GAC1C,MAAMpE,EAAOC,KAEPoJ,EAASrJ,EAAKzB,IAAIqB,QAAQyJ,QAAUrJ,EAAKzB,IAAIqB,QAAQyJ,OAAOG,QAAQ,IAAK,WAAQnF,EACjF1E,EAASK,EAAK+5F,0BAA0Bp6F,OACxCorJ,EAAyB,SAAUC,GACrC,OAAOA,EAASloJ,MAAQyV,SAASyyI,EAASloJ,MAAMujF,QAAQ,IAAInjB,eAAe75D,GAAU,KAEnFhE,EAAI1F,EAAOyE,EAAK,GAAG2lB,OACzB,IAAIkhI,EACqB,IAArBtrJ,EAAO,GAAG2D,QAAgB3D,EAAO,GAAG,GAAK,GAAK0F,IAC9C4lJ,EAAW77E,QAAQzvE,EAAO,GAAG,GAAI0F,EAAE,KAEvC,IAAIi/C,EAAWlgD,EAAK,GAAGwpB,EAAI,IACvBs9H,GAAqB5mG,EAAW,EAAI9iD,KAAKirC,MAAiB,IAAX6X,GAAmB9iD,KAAKirC,MAAiB,IAAX6X,GAAkB,KAAK4e,eAAe75D,IAAWi7C,EAAW,EAAI,KAAO,OAmBxJ,MAjBoB,eAActkD,EAAKusC,QAAQoxG,uBAE3Cv5I,EAAK7F,KAAI,CAAC4yD,EAAMpnC,IACRonC,EACiB,IAAVpnC,EAAc,+BAA6C,QAAZonC,EAAK9xD,GAAe,cAAgB,UAAY,KAAO0rJ,EAAuB55F,GAA/G,YACjB,+BAA6C,QAAZA,EAAK9xD,GAAe,cAAgB,UAAY,KAAO0rJ,EAAuB55F,GAA/G,aAEG,KAEZ5mD,KAAK,IATQ,kBAaM,eAAcvK,EAAKusC,QAAQmxG,0BAA0BwN,aAC1ED,EAAW,SAAWA,EAAS/nI,SAAW,gBAAkB,YAMrEw5B,SAASkrG,kBAAoB,WACzB,OAAO3nJ,KAAK8/I,UAGhBrjG,SAASpvC,iBAAmB,WACxB,OAAOrN,KAAKkO,SAGhBuuC,SAAS4oD,eAAiB,WACtB,OAAOrlG,KAAKkN,SAGhBuvC,SAASrxC,oBAAsB,WAC3B,OAAOpL,KAAK0M,IAAIsL,cAAc,gCAGlCykC,SAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAEP4E,EAASmG,sCAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAiDrD,OA/CAyB,EAAKE,KAAK4lC,SAASvnC,GAEfyB,EAAKmrJ,QACLnrJ,EAAKzB,IAAIy9B,IAAIh8B,EAAKmrJ,QAAQ,SAAUnsJ,EAAGosJ,GACnCprJ,EAAKiM,QAAQo/I,OAAO1qJ,KAAKX,EAAMhB,EAAEoF,SAIrCpE,EAAKsrJ,SACLtrJ,EAAKzB,IAAIy9B,IAAIh8B,EAAKsrJ,SAAS,SAAU19I,EAAIw9I,GACrCprJ,EAAKiN,WAITjN,EAAKJ,QAAQurJ,QACbnrJ,EAAKzB,IAAI+P,GAAGtO,EAAKJ,QAAQurJ,QAAQ,SAAUnsJ,EAAGosJ,GAC1CprJ,EAAKiM,QAAQo/I,OAAO1qJ,KAAKX,EAAMhB,EAAEoF,SAIrCpE,EAAKJ,QAAQ0rJ,SACbtrJ,EAAKzB,IAAI+P,GAAGtO,EAAKJ,QAAQ0rJ,SAAS,SAAU19I,EAAIw9I,GAC5CprJ,EAAKiN,WAIb1O,EACK+P,GAAGvO,qCAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAClCgB,EAAKoF,iBAAmBpG,EAAE0E,SAAW1D,EAAKsF,aAC1CtF,EAAKiN,WAGZqB,GAAGvO,qCAAAA,EAAAA,MAAAA,cAA6B,IAAMA,qCAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACnEgB,EAAKoF,gBAAkBpF,EAAKoF,eAAeX,QAAUzF,EAAEyF,OAASzE,EAAKsF,aACrEtF,EAAKiN,WAaVpI,GAGX63C,SAASojG,cAAgB,WACrB,MAAM9/I,EAAOC,KAEb,IAAI46I,EAAO,CAAC76I,EAAKmmJ,UAAUvrF,SAE3B56D,EAAKmmJ,UAAUlgH,QAAQz+B,SAAQ,SAAU1E,GACrC,IAAIyoJ,EAAM,GACV,IAAK,IAAIzzI,KAAKhV,EACN1D,OAAOqB,UAAUC,eAAeC,KAAKmC,EAAOgV,IAAY,OAANA,GAAoB,SAANA,GAChEyzI,EAAIljJ,KAAKvF,EAAMgV,IAGvB+iI,EAAKxyI,KAAKkjJ,MAEd,2EAA8B5sJ,MAAK,SAAqBW,GACpD,MACMksJ,EAAW,IAAIC,EADDnsJ,EAAOiP,SAE3B,IAAIiqD,EAAWx4D,EAAKwxG,KAAKh5C,SAAWx4D,EAAKwxG,KAAKh5C,SAAW,iBACrDhuD,EAAQxK,EAAKJ,QAAQsM,QAAUlM,EAAKJ,QAAQsM,OAAOC,KAAOnM,EAAKJ,QAAQsM,OAAOC,KAAO,KACzFq/I,EAASE,KAAKlzF,EAAUqiF,EAAMrwI,OAItCkyC,SAASnuB,YAAc,CACnBqvH,MAAO,CACHyN,OAAQ3uG,SAASupG,UACjBtE,eAAiB,IAAGjlG,SAASH,6BAEjCovG,MAAO,CACHN,OAAQ3uG,SAASq0C,UACjB4wD,eAAiB,IAAGjlG,SAASH,8BA77CzC,GAk8CA/4C,iCAAAA,EAAAA,QAAAA,aAA0BmL,aAC1BnL,iCAAAA,EAAAA,IAAOmL,aAAcqlH,gDAAAA,SACrB,+C,0FChgDAxwH,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMwkI,EAAgB,WAClB,MAAMhoI,EAAOC,KACb+K,EAAAA,EAAAA,MAAc/K,KAAMgd,WACpBjd,EAAKqyI,sBAAuB,EAC5BryI,EAAK4rJ,wBAA0B5rJ,EAAKJ,QAAQgsJ,0BAA2B,GAG3EpoJ,EAAAA,EAAAA,QAAWwkI,EAAeh9H,EAAAA,GAE1B,WAEI,IAAI0xC,EAAWsrF,EAAcvnI,UAE7Bi8C,EAASH,MAAQ,cACjBG,EAASmvG,OAAS,0BAElBnvG,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAEP4E,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GA0DrD,OAvDAyB,EAAK8rJ,WAAa,IAAIjtJ,SAAQ,SAAUC,EAAS4W,GACzCqnD,UAAUsa,cAEVta,UAAUsa,cAAcvxC,SAAS9lC,EAAK6rJ,OAAQ,CAC1ChmF,MAAO,OACRlnE,MACC,SAAUotJ,GACN/rJ,EAAKqyI,sBAAuB,EACxB0Z,EAAIC,WACJltJ,EAAQitJ,EAAIC,YACLD,EAAIE,QACXntJ,EAAQitJ,EAAIE,SACLF,EAAI3uH,QACXt+B,EAAQitJ,EAAI3uH,QAEhBz1B,QAAQC,IAAImkJ,EAAIlmF,MAAO,eAE3B,SAAUvsD,GACNtZ,EAAKqyI,sBAAuB,EAC5B38H,EAAO,IAAIzW,MAAMqa,IACjB3R,QAAQuO,MAAM,sCAAwCoD,MAI9D5D,EAAO,IAAIzW,MAAM,gDAIzBe,EAAK8rJ,WAAW11I,OAAM,KAClB,IAAI81I,GAAiB,EACrB,MAAMC,EAAUz6I,OAAOjO,SAAWiO,OAClC,IAAK,IAAIm0D,EAAQn0D,QAASw6I,EAAgBrmF,EAAQA,EAAMpiE,OAAQ,CAC5D,IACoC,WAA5BoiE,EAAMvzD,SAASN,WACfk6I,GAAiB,GAGzB,MAAOltJ,IAEP,GAAI6mE,IAAUA,EAAMpiE,OAChB,MAGJyoJ,EACA3tJ,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,wBAAyB,CAAEtsB,IAAKhD,SAASR,KAAKtI,QAAQ8I,SAASN,SAAU,MAAQ,CAAE5H,KAAMrK,EAAAA,EAAAA,QAAAA,UAEnHosJ,EACL5tJ,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gCAAiC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,UAGpEC,EAAK4rJ,yBACLrtJ,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gCAAiC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,aAI7E8E,GAGX63C,EAAS02E,iBAAmB,WACxB,OAAKnzH,KAAK6rJ,WAGH7rJ,KAAK6rJ,WAFDjtJ,QAAQ6W,OAAO,IAAIzW,MAAM,iCAKxC,IAAImtJ,EAA0B,SAAUttJ,EAAS4W,EAAQ22I,EAAW1/H,EAAQ2/H,GACxE,IAAIC,EAAU,UAcdxvF,UAAUsa,cAAcxrE,iBAAiB0gJ,GAbpB,SAASC,EAAe1sH,GACrCA,EAAM17B,KAAK0E,OAASujJ,IAChBvsH,EAAM17B,KAAKuoB,SAAWA,GAAUmT,EAAM17B,KAAK07B,QAAUwsH,EACrDxtJ,EAAQutJ,GAEkB,UAArBvsH,EAAM17B,KAAK07B,OAChBpqB,EAAOzW,MAAO,sCAAqC6gC,EAAM17B,KAAKkR,SAASwqB,EAAM17B,KAAKuoB,YAAYmT,EAAM17B,KAAK0E,UAEpF,aAArBg3B,EAAM17B,KAAK07B,OACXi9B,UAAUsa,cAAcz2B,oBAAoB2rG,EAASC,QAOrE9vG,EAASw2F,YAAc,SAAUpqI,EAAMlJ,GACnC,IAAII,EAAOC,KACX,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC1V,EAAKozH,mBAAmBz0H,MAAK,SAAU8tJ,GACnC,IAAIC,EAAS,SACTzoJ,EAAOrE,GAAW,GACtBwsJ,EAAwBttJ,EAAS4W,EAAQ5M,EAAM4jJ,EAAQ,UACvDD,EAAGrzI,YAAY,CACXuT,OAAQ+/H,EACR5jJ,KAAMA,EACNsmI,UAAWnrI,EAAKmrI,UAChBj8C,KAAMlvF,EAAKgvI,SAAW,GACtBv/H,OAAQzP,EAAKyP,YAElB,WACC5U,GAAQ,UAKpB49C,EAASw3F,YAAc,SAAUprI,EAAMlJ,GACnC,IAAII,EAAOC,KACX,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC1V,EAAKozH,mBAAmBz0H,MAAK,SAAU8tJ,GACnC,IAAIC,EAAS,SACTzoJ,EAAOrE,GAAW,GACtBwsJ,EAAwBttJ,EAAS4W,EAAQ5M,EAAM4jJ,EAAQ,WACvDD,EAAGrzI,YAAY,CACXuT,OAAQ+/H,EACRtd,UAAWnrI,EAAKmrI,UAChBtmI,KAAMA,EACN4K,OAAQzP,EAAKyP,YAElB,WACC5U,GAAQ,UAlIxB,GAyIA0E,EAAAA,EAAAA,QAAAA,cAA2BwkI,EAC3B,W,6GCnJAxkI,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,gBAAyB,oBAEzB,MAAM4sJ,UAAc3hJ,EAAAA,EAChBtL,cACIG,SAASod,WACIhd,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,aAGX3xC,sBACI,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,CAAExS,MAAOxqC,EAAK4sJ,WAAYjjH,WAAYnjC,EAAAA,EAAAA,aAAkB,WAErG,MAAMq2D,EAAO78D,EAAK2M,IAAIsL,cAAc,QACpC4kD,EAAK7uD,YAAc,KAAOhO,EAAKiT,OAAO4pD,EAAK7uD,YAAY6Y,OAAO,IAE9D7mB,EAAK2M,IAAIsL,cAAc,wBAAwBpM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAChFC,EAAK6sJ,kBACN,CAAE5+I,SAAS,IAEV/J,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKZsN,SAASvnC,GACL,MAAMyB,EAAOC,KACP4E,EAAShF,MAAMimC,SAASnlC,KAAKX,EAAMzB,GACzC,IAAIorC,EAAazlC,EAAAA,EAAAA,QAAAA,cAA2BnE,EAAAA,EAAAA,iBAW5C,OAVI4pC,IACAnjC,EAAAA,EAAAA,WAAiBmjC,GAErB3pC,EAAK88C,QAAO,WACRv+C,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,MAAmB,kBACfC,EAAK8sJ,gBACZ9sJ,EAAK29E,eAIN94E,EAGX84E,SACI19E,KAAK68C,SAMT+vG,gBACI,MAAM7sJ,EAAOC,KACbuD,EAAAA,EAAAA,OAAUxD,EAAK4hC,gBAAgB,oBAAqBp7B,EAAAA,EAAAA,YAAgB,SAAU1D,GACtEA,IACA0D,EAAAA,EAAAA,WAAiBqB,WAAW/E,GAC5BoB,EAAAA,EAAAA,QAAAA,cAA2BnE,EAAAA,EAAAA,gBAAwByG,EAAAA,EAAAA,YACnDxG,EAAK29E,aAUjBivE,SAASxoG,GACL,MAAMpkD,EAAOC,KACb,IAAI4E,EAAS,EACT6Z,GAAO0lC,GAAcpkD,EAAKzB,IAAMyB,EAAKzB,IAAI2B,KAAKwiB,gBAAkB0hC,EAOpE,GANI1lC,IACA7Z,EAAS6Z,EAAM1e,EAAK+sJ,OAAOvmJ,EAAAA,EAAAA,YAAkB,MACzCkL,OAAO0oG,mBACPv1G,GAAkB6M,OAAO0oG,mBAG7Bp6G,EAAKzB,KAAOyB,EAAKzB,IAAI2B,KAAK66B,QAAS,CACnC,IAAK/6B,EAAK8sJ,gBAAiB,CACvB,IAAIvxI,EAASvb,EAAKzB,IAAIyoB,YAClBzL,IACAvb,EAAK8sJ,gBAAkB5oJ,EAAAA,EAAAA,mBAAwBqX,IAGnDvb,EAAK8sJ,kBACLjoJ,GAAkB7E,EAAK8sJ,iBAG/B,OAAOjoJ,EAOXkoJ,OAAOpjH,GAGH,OAFa1pC,KACR+sJ,IAAMxrJ,KAAKkrC,KAAK6tE,OAAOhoF,MAAQgoF,OAAOhoF,MAAQgoF,OAAO/nF,OAAS+nF,OAAO/nF,QAAUmX,EADvE1pC,KAED+sJ,IAGhB/5I,OAAOk4B,GAGH,IAFA,IAAIt2B,EAAK,IAAI+S,OAAOujB,GAASk7C,QAAQ,GACjCtrE,EAAI,GACDlG,EAAEvR,OAAS,GAAG,CACjB,IAAI0d,EAAInM,EAAEvR,OAAS,EACnByX,EAAExU,QAAQsO,EAAEgS,OAAO7F,IACnBnM,EAAIA,EAAEgS,OAAO,EAAG7F,GAKpB,OAHInM,GACAkG,EAAExU,QAAQsO,GAEPkG,EAAExQ,KAAK,MAItB/G,EAAAA,EAAAA,QAAAA,MAAmBmpJ,EACnB,W,iFCnIAnpJ,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMypJ,UAAiBjiJ,EAAAA,EACnBtL,cACIG,SAASod,WACIhd,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,YAGXM,SACI,MAAM98C,EAAOC,KAKb,OAJKD,EAAKE,OACNF,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,SAAyBxD,IAE7CA,EAAKE,KAAK48C,SACH98C,EAAK+8C,qBAAqBl+C,QAAQC,WAG7C+L,eAAetM,GACX,MAAMyB,EAAOC,KAGb,aAFsBpB,QAAQwiB,IAAI,CAACxhB,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAAMA,EAAI2B,KAAKuxD,YACpE,GAAGrmD,WAAWpL,EAAKE,KAAK8tD,KACzBhuD,EAGXugB,UAGI,OAFatgB,KAEDC,KAAKqgB,WAIzB/c,EAAAA,EAAAA,QAAAA,SAAsBypJ,EACtB,W,qjBClCAzpJ,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM0pJ,UAAsBP,EAAAA,QAGxBjtJ,cACIG,SAASod,WAAWnd,EAAA,cAHf,MAIQG,KACR0M,IAAIqxB,UAAUnjB,IADN5a,KACes8C,OAGhCC,eACI,MAAO,YAGX3xC,sBACI,MACMvL,QAAe,6BADRW,KAERqJ,SAAWhK,EAAOiP,QAG3BuuC,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAAS4W,GAC5D,GAAI1V,EAAKzB,IAAK,EACLyB,EAAKmtJ,QAAUntJ,EAAKzB,IAAIqB,QAAQmnB,cACjC/mB,EAAKmtJ,OAASntJ,EAAKzB,IAAIqB,QAAQmnB,YAAYxoB,IAAIyB,EAAK4sJ,SAAU5sJ,IAElE,IAAI88C,EAAS,WACT98C,EAAKmtJ,OAASntJ,EAAKzB,IAAI2B,KAAKiV,iBAAiB5W,IAAIyB,EAAK4sJ,SAAU5sJ,GAChEA,EAAKg9C,WAAW,CAAExS,MAAOxqC,EAAK4sJ,WAAYjjH,WAAYnjC,EAAAA,EAAAA,WAAgB2mJ,OAAQntJ,EAAKmtJ,SAAU,WAEzFntJ,EAAK2M,IAAIhB,iBAAiB,UAAUnE,SAAQ,SAAUu1F,GAClDA,EAAO/uF,YAAc,KAAOhO,EAAKiT,OAAO8pF,EAAO/uF,YAAY6Y,OAAO,OAGtE7mB,EAAK2M,IAAIsL,cAAc,wBAAwBpM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAChFC,EAAK6sJ,kBACN,CAAE5+I,SAAS,IAEdjO,EAAK2M,IAAIsL,cAAc,UAAUpM,iBAAiB,UAAU,WACxD7L,EAAKotJ,SAASntJ,KAAK6C,UAEnBoB,EAAAA,EAAAA,WAAgBs0B,IAChBA,IAEJ15B,OACDsX,OAAM,SAAUsD,GACfhE,EAAOgE,aAAeza,MAAQya,EAAMza,MAAMya,QAG9C1Z,EAAKmtJ,OACLrwG,IAGA98C,EAAKzB,IAAI2B,KAAKuxD,SAAS9yD,KAAKm+C,QAIhCpnC,EAAOzW,MAAM,oCAUzBmuJ,SAAS5iH,GACL,MAAMxqC,EAAOC,KACb,IAAI4E,EAAiB,MAAR2lC,EAAgBxqC,EAAK+sJ,OAAOvmJ,EAAAA,EAAAA,YAQzC,OAPIkL,OAAO0oG,mBACPv1G,GAAkB6M,OAAO0oG,kBAEzBp6G,EAAK8sJ,kBACLjoJ,GAAkB7E,EAAK8sJ,iBAE3B9sJ,EAAKzB,IAAI2B,KAAK82D,cAAcnyD,GACrBA,GAMfrB,EAAAA,EAAAA,QAAAA,cAA2B0pJ,EAC3B,W,4IC2zBA1pJ,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,OAAY2B,EAAAA,EACZ3B,EAAAA,EAAAA,GAAQA,EAAAA,EAAAA,IAAS,GACjBA,EAAAA,EAAAA,GAAAA,aAAqByyH,EAAAA,EACrBzyH,EAAAA,EAAAA,SAAcilC,EAAAA,EACdjlC,EAAAA,EAAAA,QAAAA,UAAuBs/F,EAAAA,QACvBt/F,EAAAA,EAAAA,QAAawH,EAAAA,EAIJ0G,OAAO27I,YAOD37I,OAAO27I,cAAgB37I,OAAO27I,YAAYtpH,MACjDryB,OAAO27I,YAAYn7H,OAAS4R,KAAKC,MACjCryB,OAAO27I,YAAYtpH,IAAM,WACrB,OAAOD,KAAKC,MAAQryB,OAAO27I,YAAYn7H,SAT3CxgB,OAAO27I,YAAc,CACjBn7H,OAAQ4R,KAAKC,MACbA,IAAK,WACD,OAAOD,KAAKC,MAAQ9jC,KAAKiyB,SAWzC,MAAMo7H,EAAa,SAAUljJ,EAAMxK,EAAS6D,GACxC,IAAIzD,EAAOC,KAEXD,EAAKyD,OAASA,EAEdzD,EAAKutJ,cAAgB,GAErB/pJ,EAAAA,EAAAA,KAAAA,OAAexD,EAAMJ,GAErBI,EAAKgvB,SAAW5kB,EAEhBpK,EAAKwtJ,kBAAoB,WAGrB,MAAM,IAAIvuJ,MAAM,6CAFLgB,KAEyD+uB,WAGxEhvB,EAAKytJ,gBAAkB,SAAUC,GAC7B,IAAI1tJ,EAAOC,KAEX,GAAIytJ,EACA,OAAO1tJ,EAAK4xB,uBAAuB7wB,MAAQf,EAAK4xB,YAAc,CAAC5xB,EAAK4xB,aAGxE,GAAkC,IAA9B5xB,EAAKutJ,cAAcjqJ,OAAc,CACjC,IAAIqqJ,EAAmB3tJ,EAAK4xB,uBAAuB7wB,MAAQf,EAAK4xB,YAAc,CAAC5xB,EAAK4xB,aAChFg8H,EAAyB5tJ,EAAK6tJ,kBAAoB7tJ,EAAK6tJ,6BAA6B9sJ,MAAQf,EAAK6tJ,kBAAoB,CAAC7tJ,EAAK6tJ,mBAAqB,GACpJ7tJ,EAAKutJ,cAAgBI,EAAiBrlJ,OAAOslJ,GAGjD,OAAO5tJ,EAAKutJ,eAGhBvtJ,EAAK8tJ,oBAAsB,SAAUzuJ,GAGjC,OAFWY,KAECwtJ,kBAAkBxkJ,QAAQ5J,IAAO,GAGjDW,EAAK+tJ,sBAAwB,SAAUn8H,GACnC,IAAI5xB,EAAOC,KAEX,OAAID,EAAKytJ,kBAAkBxkJ,QAAQ2oB,IAAgB,EACxC5xB,EAAKqG,OAAOrG,EAAKytJ,kBAAkBxkJ,QAAQ2oB,IAG/C,MAGX,IAAIo8H,EAAW,SAAU9H,EAAK+H,EAAUr8H,GACpC,IAAI5xB,EAAOC,KAEPiuJ,EAAW,SAAUtoJ,EAAOqoJ,EAAU/H,GACtC,GAAI+H,GACA,GAAI7uJ,OAAOqB,UAAUC,eAAeC,KAAKiF,EAAOqoJ,IAAa7uJ,OAAOqB,UAAUC,eAAeC,KAAKiF,EAAMqoJ,GAAW/H,GAC/G,OAAOtgJ,EAAMqoJ,GAAU/H,QAG3B,IAAK,IAAIiI,KAASvoJ,EACd,GAAIxG,OAAOqB,UAAUC,eAAeC,KAAKiF,EAAMuoJ,GAAQjI,GACnD,OAAOtgJ,EAAMuoJ,GAAOjI,IAMpC,GAAIt0H,EAAa,CAEb,OAAOs8H,EADOluJ,EAAK+tJ,sBAAsBn8H,GAClBq8H,EAAU/H,GAEjC,IAAK,IAAI/jJ,EAAI,EAAGA,EAAInC,EAAKqG,OAAO/C,OAAQnB,IAAK,CACzC,MACMqvE,EAAQ08E,EADAluJ,EAAKqG,OAAOlE,GACI8rJ,EAAU/H,GACxC,GAAI10E,EACA,OAAOA,IAMvBxxE,EAAKouJ,sBAAwB,WACzB,IAEIC,EAAY7hH,EAAOglC,EAFnBxxE,EAAOC,KAIX,GAAuC,mBAA5BD,EAAKsuJ,mBACZD,EAAaruJ,EAAKsuJ,qBAClB9hH,EAAQ6hH,EAAW7hH,MACnBglC,EAAQ,CAAC,CACLA,MAAO68E,EAAW78E,MAClBhnE,MAAO6jJ,EAAW7hH,aAOtB,GAJA6hH,EAAaruJ,EAAKsuJ,mBAClB9hH,EAAQxsC,EAAKyD,OAAOm+B,gBAAgBysH,EAAW7hH,OAGf,iBAArB6hH,EAAW78E,MAClBA,EAAQ,CAAC,CACLA,MAAOw8E,EAASrtJ,KAAKX,EAAMquJ,EAAW78E,OACtChnE,MAAOgiC,SAER,GAAI6hH,EAAW78E,iBAAiBzwE,MAAO,CAC1C,IAAIwtJ,EAAevuJ,EAAKytJ,kBACpBY,EAAW78E,MAAMluE,SAAWirJ,EAAajrJ,OACzCkuE,EAAQ68E,EAAW78E,MAAMjzE,KAAI,SAAUkJ,EAAKtF,GACxC,MAAO,CACHqvE,MAAOw8E,EAASrtJ,KAAKX,EAAMyH,EAAI8mJ,EAAapsJ,IAAIqvE,MAAM00E,IAAKz+I,EAAI8mJ,EAAapsJ,IAAIqvE,MAAMy8E,SAAUM,EAAapsJ,IAC7GqI,MAAOxK,EAAKyD,OAAOm+B,gBAAgBn6B,EAAI8mJ,EAAapsJ,IAAIqI,QAAUgiC,MAI1ExsC,EAAKwtJ,wBAE0B,iBAArBa,EAAW78E,QACzBA,EAAQ,CAAC,CACLA,MAAOw8E,EAASrtJ,KAAKX,EAAMquJ,EAAW78E,MAAM00E,IAAKmI,EAAW78E,MAAMy8E,UAClEzjJ,MAAOgiC,KAKnB,GAAIA,GAASglC,EAAO,CAChB,IAAIg9E,EAAS,sCAAwChiH,EAAQ,UAQ7D,OANAgiH,GAAUh9E,EAAMjzE,KAAI,SAAUkJ,GAC1B,GAAIA,EAAI+pE,MACJ,MAAO,wCAA0C/pE,EAAI+C,MAAQ,mBAAqB/C,EAAI+pE,MAAQ,gBAEnGjnE,KAAK,IAAM,QAKdvK,EAAKwtJ,qBAIbxtJ,EAAKyuJ,0BAA4B,SAAUrqJ,GACvC,IAAIpE,EAAOC,KACPgmC,EAAU,GAEVyoH,EAAU,SAAU3zI,EAAGsP,GACvB,QAAQ,GACJ,IAAkB,iBAANtP,EACR,GAAIA,IAAMsP,EACN,OAAO,EAEX,MACJ,IAAkB,iBAANtP,EACR,GAAK9Z,MAAM8Z,IAAO9Z,MAAMopB,IAKpB,GAAItP,EAAE8O,SAAWQ,EAAER,OACf,OAAO,OALX,GAAI9O,IAAMsP,EACN,OAAO,EAUvB,OAAO,GAEPskI,EAAY,SAAUC,GAEtB,IADA,IAAIC,EAAc,GACT1sJ,EAAI,EAAGA,EAAIysJ,EAAWtrJ,OAAQnB,KACS,IAAxC0sJ,EAAY5lJ,QAAQ2lJ,EAAWzsJ,KAC/B0sJ,EAAYxmJ,KAAKumJ,EAAWzsJ,IAIpC,OAAO0sJ,GAwEX,OArDe7uJ,EAAK8uJ,cAAc1qJ,GAEzBoD,SAAQ,SAAU9D,GACvB,IAAIiF,EAAa,GAAIqtG,EAAM,GACvB+4C,EAAa,GAEbv6H,EAAax0B,EAAKgvJ,iBAClBC,EAAmBjvJ,EAAKkvJ,eAExBC,EAAYnvJ,EAAKovJ,kBACjBhU,EAAY13I,EAAQrE,GAAG+S,MAAM,KAAKxH,MAAM,EAAG,GAAG49B,QAE5CxoC,EAAKgvJ,4BAA4BjuJ,QACnCyzB,EAAax0B,EAAKgvJ,iBAAiB5T,GACnC6T,EAAmBjvJ,EAAKkvJ,eAAe9T,GACvC+T,EAAYA,EAAU/T,IAG1B,IAAK,IAAI7jI,EAAI,EAAGA,EAAIid,EAAWlxB,OAAQiU,IACnC5O,EAAWN,KAAK3E,EAAQU,KAAKowB,EAAWjd,KAG5C,IAAKA,EAAI,EAAGA,EAAI03I,EAAiB3rJ,OAAQiU,IACrCy+F,EAAI3tG,KAAK3E,EAAQU,KAAK6qJ,EAAiB13I,KAI3C,IADA,IAAI83I,EAAc,GACThqJ,EAAI,EAAGA,EAAIrF,EAAKgvJ,iBAAiB1rJ,OAAQ+B,IAC9CgqJ,EAAYrvJ,EAAKgvJ,iBAAiB3pJ,IAAMsD,EAAWtD,GAGnDsD,aAAsB5H,OAASouJ,GAAaR,EAAUhmJ,GAAYrF,OAAS,EAC3EyrJ,EAAaI,EAAUG,SAAS3mJ,GAE3BA,aAAsB5H,OAA0C,IAAjC4tJ,EAAUhmJ,GAAYrF,SAC1DyrJ,EAAapmJ,EAAW,IAG5B,IAAI0Q,EAAO01I,EAAWQ,eAvDR,SAAUF,GACxB,IAAK,IAAI96I,EAAI,EAAGA,EAAI0xB,EAAQ3iC,OAAQiR,IAAK,CACrC,IAAIjR,EAAS,EACTksJ,EAAU,GACd,IAAK,IAAI/6H,KAAY46H,EACjBG,EAAQnnJ,KAAKqmJ,EAAQW,EAAY56H,GAAWwR,EAAQ1xB,GAAGigB,WAAWC,KAClEnxB,IAEJ,GAAIksJ,EAAQrqJ,QAAO,SAAUhD,GAAK,OAAOA,KAAMmB,SAAWA,EACtD,OAAO,EAKf,OAAO,GA2CFmsJ,CAAYJ,IAEbppH,EAAQ59B,KAAK,CACTgR,KAAMA,EACNmzB,MAAOnzB,EACPha,GAAI22G,EAAIzrG,KAAK,KACbmlJ,SAAU1vJ,EAAKgvB,SACfosH,UAAWA,EACX5mH,WAAY66H,OAKjBppH,GAGXjmC,EAAK8uJ,cAAgB,SAAU1qJ,GAW3B,OATIpE,EAAKoxB,eAAiBrxB,EAAAA,EAAAA,OAAAA,KACb,IAAIyD,EAAAA,EAAAA,KAAAA,OAAAA,KAGJ,IAAIA,EAAAA,EAAAA,KAAAA,OAAAA,IAAmB,CAC5BmsJ,UAAW3vJ,EAAK4vJ,cAChBh+H,YAAa5xB,EAAK4xB,eAGZ7a,KAAK3S,IAGvBpE,EAAK6vJ,WAAa,WACd,IAAI7vJ,EAAOC,KAEX,MAA4B,mBAAjBD,EAAK4pJ,QACL5pJ,EAAK4pJ,UAEL5pJ,EAAK4pJ,SAIpB5pJ,EAAKmF,OAAU,SAAUnF,GAErB,MAAM8vJ,EAAqB,SAAUC,EAAYC,GAC7C,IAAIC,EAAc,GAElB,GAAID,GAAShwJ,EAAKyD,OAAOysJ,QAAQ9yH,OAAOy/D,KAEpC,IAA4B,IAAxBmzD,EAAM/mJ,QAAQ,MAAgBjJ,EAAKyD,OAAOysJ,QAAQ9yH,OAAOhlB,MActD,CACH,MAAMnO,EAAO+lJ,EAAM59I,MAAM,KAEzBpS,EAAKyD,OAAOysJ,QAAQ9yH,OAAO8xH,eAAe1nJ,SAAQ,SAAgB0nJ,EAAgBxnJ,EAAKH,GACvE,IAARG,GAAaH,EAAIjE,OAAS,GAC1B2sJ,EAAY5nJ,KAAK,aAGrB4nJ,EAAY5nJ,KAAKrI,EAAKmF,OAAOgrJ,cAAcjB,EAAgBjlJ,EAAK3G,OAASoE,EAAMuC,EAAKvC,GAAOuC,EAAK,KAE5FvC,IAAQH,EAAIjE,OAAS,GAAKiE,EAAIjE,OAAS,GACvC2sJ,EAAY5nJ,KAAK,qBAzBuC,CAEhE,IAAI+nJ,EAAapwJ,EAAKyD,OAAOysJ,QAAQ9yH,OAAOizH,gBAAgBC,eAAe/xJ,KAAI,SAAUgyJ,GACrF,OAAOvwJ,EAAKmF,OAAOgrJ,cAAcI,EAAWvwJ,EAAKyD,OAAO+sJ,cAAgBR,EAAQhwJ,EAAKyD,OAAO+sJ,kBAG5FJ,EAAW9sJ,OAAS,GACpB2sJ,EAAY5nJ,KAAK,cACjB4nJ,EAAcA,EAAY3nJ,OAAO8nJ,IACrB/nJ,KAAK,eAEjB4nJ,EAAcA,EAAY3nJ,OAAO8nJ,QAmBzCpwJ,EAAKyD,OAAOysJ,QAAQ9yH,OAAOy/D,KAAKr1F,SAAQ,SAAeyC,EAAMvC,EAAKH,GAClD,IAARG,GAAaH,EAAIjE,OAAS,GAC1B2sJ,EAAY5nJ,KAAK,YAGrBrI,EAAKyD,OAAOysJ,QAAQ9yH,OAAO8xH,eAAe1nJ,SAAQ,SAAgB0nJ,EAAgB/sJ,EAAG4Y,GACvE,IAAN5Y,GAAW4Y,EAAEzX,OAAS,GACtB2sJ,EAAY5nJ,KAAK,aAGrB4nJ,EAAY5nJ,KAAKrI,EAAKmF,OAAOgrJ,cAAcjB,EAAgBjlJ,EAAK3G,OAASnB,EAAI8H,EAAK9H,GAAK8H,EAAK,KAExF9H,IAAM4Y,EAAEzX,OAAS,GAAKyX,EAAEzX,OAAS,GACjC2sJ,EAAY5nJ,KAAK,oBAKzBrI,EAAKyD,OAAOysJ,QAAQ9yH,OAAOy/D,KAAKv5F,OAAS,GACzC2sJ,EAAY5nJ,KAAK,aAIzB,OAAO0nJ,EAAWznJ,OAAO2nJ,IAG7B,MAAO,CACH/qE,iBAAkB,SAAUurE,EAAM7/F,GAC9B,OAAO5wD,EAAK0wJ,oBAAoBD,GAAM7/F,IAE1C+/F,cAAe,SAAU7nJ,EAAMhG,GAC3B,IAAI8tJ,EAAW,wBAKf,OAJIA,EAAS1uH,KAAKp/B,KACdA,EAAQA,EAAM0G,QAAQonJ,EAAU,SAGhC9tJ,EAAMogB,WAAWja,QAAQjJ,EAAKyD,OAAO+sJ,gBAAkB,EAChD,+FACgB1nJ,EADhB,2BAEWhG,EAAMurB,cAAc7kB,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,QAFvE,sHAKgBV,EALhB,2BAMWhG,EAAM+8C,cAAcr2C,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,QANvE,mCASA,oCACgBV,EADhB,2BAEWhG,EAAM0G,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,QAFzD,kCAKfqnJ,sBAAuB,SAAU/nJ,EAAMhG,GACnC,IAAI8tJ,EAAW,sBAKf,GAJIA,EAAS1uH,KAAKp/B,KACdA,EAAQA,EAAM0G,QAAQonJ,EAAU,SAGhC9tJ,EAAMogB,WAAWja,QAAQjJ,EAAKyD,OAAO+sJ,gBAAkB,EAAG,CAE1D,IAAI5G,EAAU9mJ,EAOd,MAAO,8EAEoBgG,EAFpB,yCAFP8gJ,GADAA,GADAA,GADAA,GADAA,EAAUA,EAAQpgJ,QAAQ,MAAO,UACfA,QAAQ,MAAO,UACfA,QAAQ,MAAO,UACfA,QAAQ,MAAO,UACfA,QAAQ,MAAO,WAKMA,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,QAHxE,0FASP,MAAO,oCACgBV,EADhB,2BAEWhG,EAAM0G,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,QAFzD,kCAMf2mJ,cAAe,SAAUv/F,EAAckgG,GACnC,IAAIv8I,EAEA60C,EAAKppD,EAAKmF,OAAOwrJ,cAErB,GAAI3wJ,EAAK+wJ,cAAe,CAEpB3nG,EAAKppD,EAAKmF,OAAO0rJ,sBAEjB,IAAI1rF,EAAQ,IAAI57C,OAAO,KAAOvpB,EAAKyD,OAAO+sJ,cAAe,MACzDM,EAAgBA,EAActnJ,QAAQ27D,EAAOnlE,EAAKyD,OAAOutJ,gBAG7D,GAAMpgG,aAAwB7vD,OAAkC,iBAAjB6vD,EAyBxC,OAAIA,aAAwB7vD,OAAS6vD,EAAattD,OAAS,GAC9DiR,EAAI,WACJq8C,EAAappD,SAAQypJ,IACjB18I,GAAK60C,EAAG6nG,EAAMpnI,OAAQinI,MAEnBv8I,GAAK,aAEL60C,EAAGwH,aAAwB7vD,OAAiC,IAAxB6vD,EAAattD,OAAestD,EAAa,GAAG/mC,OAAS+mC,EAAa/mC,OAAQinI,GA/BrH,IAAI9hJ,EAAI,GACR,IAAK,IAAItG,KAAOkoD,EACZ,GAAIA,EAAaloD,aAAgB3H,OAAS6vD,EAAaloD,GAAKpF,OAAS,EACjEiR,EAAI,OACJq8C,EAAaloD,GAAKlB,SAAQypJ,IACtB18I,GAAK60C,EAAG6nG,EAAMpnI,OAAQinI,MAG1Bv8I,GAAK,QACLvF,EAAE3G,KAAK,+CAAiDkM,EAAI,kBACzD,CACH,IAAIujE,EAAWlnB,EAAaloD,GACxBkoD,EAAaloD,aAAgB3H,OAAsC,IAA7B6vD,EAAaloD,GAAKpF,SACxDw0E,EAAWlnB,EAAaloD,GAAK,IAGjCsG,EAAE3G,KAAK,mDACM+gD,EAAG0uB,EAASjuD,OAAQinI,GAD1B,mBAMf,OAAO9hJ,EAAEzE,KAAK,KAYtB2mJ,UAAW,SAAU9sJ,GACjB,IAIIyjG,EAJAtzF,EAAI,GAMR,OALAA,EAAE48I,QAAS,EACX58I,EAAEvF,EAAI,IAIE,GACJ,KAAKhP,EAAKgvB,WAAajvB,EAAAA,EAAAA,WAAAA,OAEnB,GADA8nG,EAAK,GACA7nG,EAAKyD,OAAOysJ,QAAQ9yH,SAAW,iBAAiBjrB,KAAK/N,EAAK4jC,KAAM,iBAAiB71B,KAAK/N,EAAKujC,GAoBxF3nC,EAAKyD,OAAOysJ,QAAQ9yH,OACpByqE,EAAKioD,EAAmBjoD,EAAIzjG,EAAK4jC,GAEjC6/D,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,gBAE5H3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAI3nC,EAAKyD,OAAO+sJ,oBAzBxB,CACjG,IAAI/mJ,EAAQ,iBAAiB0I,KAAK/N,EAAK4jC,GACnCv+B,EAEAo+F,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAE5O,UAAU,EAAGh1B,EAAK4jC,EAAE/+B,QAAQQ,EAAM,KAAKogB,OAAS7pB,EAAKyD,OAAO+sJ,gBAElKxwJ,EAAKyD,OAAOysJ,QAAQ9yH,OACpByqE,EAAKioD,EAAmBjoD,EAAIzjG,EAAK4jC,GAGjC6/D,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,gBAIhI/mJ,EAAQ,iBAAiB0I,KAAK/N,EAAKujC,GAC/Bl+B,EACAo+F,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAEvO,UAAU,EAAGh1B,EAAKujC,EAAE1+B,QAAQQ,EAAM,KAAKogB,OAAS7pB,EAAKyD,OAAO+sJ,gBACtK3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAI3nC,EAAKyD,OAAO+sJ,gBAWlI3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBgB,eAAgBjtJ,EAAKiB,EAAIrF,EAAKyD,OAAO+sJ,gBAE5Fj8I,EAAEvF,EAAI,+DAAsE64F,EAAGt9F,KAAK,IAA9E,0BAEN,MACJ,KAAKvK,EAAKgvB,WAAajvB,EAAAA,EAAAA,WAAAA,OAGnB,GAFA8nG,EAAK,GAEA7nG,EAAKyD,OAAOysJ,QAAQ9yH,SAAW,iBAAiBjrB,KAAK/N,EAAK4jC,KAAM,iBAAiB71B,KAAK/N,EAAKujC,GAmBxF3nC,EAAKyD,OAAOysJ,QAAQ9yH,OACpByqE,EAAKioD,EAAmBjoD,EAAIzjG,EAAK4jC,GAGjC6/D,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,gBAE5H3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAI3nC,EAAKyD,OAAO+sJ,oBAzBxB,CACjG,IAAI/mJ,EAAQ,iBAAiB0I,KAAK/N,EAAK4jC,GACnCv+B,EACAo+F,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAE5O,UAAU,EAAGh1B,EAAK4jC,EAAE/+B,QAAQQ,EAAM,KAAKogB,OAAS7pB,EAAKyD,OAAO+sJ,gBAElKxwJ,EAAKyD,OAAOysJ,QAAQ9yH,OACpByqE,EAAKioD,EAAmBjoD,EAAIzjG,EAAK4jC,GAGjC6/D,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,gBAIhI/mJ,EAAQ,iBAAiB0I,KAAK/N,EAAKujC,GAC/Bl+B,EACAo+F,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAEvO,UAAU,EAAGh1B,EAAKujC,EAAE1+B,QAAQQ,EAAM,KAAKogB,OAAS7pB,EAAKyD,OAAO+sJ,gBACtK3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAI3nC,EAAKyD,OAAO+sJ,gBAWlIj8I,EAAEvF,EAAI,+DAAsE64F,EAAGt9F,KAAK,IAA9E,0BACN,MACJ,KAAKvK,EAAKgvB,WAAajvB,EAAAA,EAAAA,WAAAA,SACnBwU,EAAEvF,EAAIhP,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,eACtHj8I,EAAE48I,QAAS,EACX,MACJ,KAAK/xJ,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKqwJ,gBAAiB,oBAC5DxoD,EAAK,IACFx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,gBACxH3oD,EAAGx/F,KAAKrI,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBe,gBAAiBpxJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAKujC,EAAI3nC,EAAKyD,OAAO+sJ,gBACzHj8I,EAAEvF,EAAI,+DAAsE64F,EAAGt9F,KAAK,IAA9E,0BACN,MACJ,QACIgK,EAAEvF,EAAI,sDAAwDhP,EAAKmF,OAAOgrJ,cAAcnwJ,EAAKqwJ,gBAAgBC,eAAgBtwJ,EAAKyD,OAAO+sJ,cAAgBpsJ,EAAK4jC,EAAIhoC,EAAKyD,OAAO+sJ,eAAiB,gBAIvM,OAAOj8I,GAEX2L,UAAW,SAAU9b,GACjB,IAAIktJ,EAAUtxJ,EAAKmF,OAAO+rJ,UAAU9sJ,GAEhC+Y,EAAS,CACT2N,QAAS,aACTF,QAAS,MACT2mI,YAAa,IACb1mI,QAAS7qB,EAAKuP,QACdiiJ,aAAcxxJ,EAAKoxB,cAGnBm9H,EAAevuJ,EAAKytJ,iBAAgB,GACxC,GAAMc,aAAwBxtJ,MAEzB,CACD,IAAI8zG,EAAK05C,EAAahwJ,KAAIqzB,GAAe5xB,EAAK4vJ,cAC1C5vJ,EAAK4vJ,cAAgB,IAAMh+H,EAAY/H,OACvC+H,EAAY/H,SAEhB1M,EAAOs0I,SAAW58C,EAAGtqG,KAAK,UAN1B4S,EAAOs0I,SAAWzxJ,EAAK4vJ,cAAgB5vJ,EAAK4vJ,cAAgB,IAAMrB,EAAa1kI,OAAS0kI,EAAa1kI,OASzG,IAAI6nI,EAAiB,SAAUl9H,GAC3B,GAA2B,MAAtBA,GAAc,IAAY,CAC3B,GAAMA,aAAsBzzB,MAcxB,OAAOyzB,EAAWjqB,KAAK,KAbvB,IAAIlF,EAAI,GACR,GAAImvB,aAAsBp1B,OACtB,IAAK,IAAIsJ,KAAO8rB,EAAY,CACxB,IAAIy2B,EAAOz2B,EAAW9rB,GAAK,GACvB8rB,EAAW9rB,GAAKpF,OAAS,IACzB2nD,EAAOz2B,EAAW9rB,GAAK6B,KAAK,MAEhClF,EAAEgD,KAAK4iD,GAGf,OAAO5lD,IAOfssJ,EAAcD,EAAe1xJ,EAAKgvJ,kBAClC4C,EAAOF,EAAe1xJ,EAAKkvJ,gBAE/B,MAAM2C,EAAoBxK,IACtB,MAAM9/I,EAAM8/I,EAAQj1I,MAAM,KAC1B,OAAO7K,EAAIpC,QAAO,CAAC8E,EAAM9H,IACdoF,EAAI0B,QAAQgB,KAAU9H,IAC9BoI,KAAK,MAGZ,GAAIonJ,aAAuB5wJ,OAAS6wJ,aAAgB7wJ,MAAO,CACvDoc,EAAO20I,aAAe,GACtB,IAAK,IAAI3vJ,EAAI,EAAGA,EAAIwvJ,EAAYruJ,OAAQnB,IACpCgb,EAAO20I,cAAgB,IAAMD,EAAiBF,EAAYxvJ,GAAK,IAAMyvJ,EAAKzvJ,IAAM,SAGpFgb,EAAO20I,aAAeD,EAAiBF,EAAc,IAAMC,GAK/D,OAFAz0I,EAAO40I,OAAST,EAAQtiJ,EAEjBxL,EAAAA,EAAAA,KAAAA,eAAuB2Z,IAElC60I,cAAe,SAAU3yJ,GACrB,IAAIw1B,EAAQ,GACRo9H,EAAM5yJ,EAAG+S,MAAM,KAEfwI,EAAS5a,EAAKkvJ,eACd9T,EAAYp7I,EAAKytJ,kBAErB,GAAI7yI,GAAUwgI,EAEV,GAAI/7I,EAAG4J,QAAQ,MAAQ,GAAKmyI,aAAqBr6I,OAASq6I,EAAU93I,OAAS,EACzE83I,EAAU5zI,SAAQ0qJ,IACdt3I,EAAOs3I,GAAQ1qJ,SAAQ,CAACoK,EAAKlK,KACzBmtB,EAAMxsB,KAAK,CAAES,KAAM8I,EAAK9O,MAAOmvJ,EAAIvqJ,gBAGxC,IAAyB,IAArBrI,EAAG4J,QAAQ,MAAemyI,aAAqBr6I,MAAO,CAC7D,IAAI6Q,EAAMgJ,EAEVwgI,EAAU5zI,SAAQ0qJ,IACT9yJ,OAAOqB,UAAUC,eAAeC,KAAKk0B,EAAOq9H,KAEzCtgJ,aAAexS,QAAUA,OAAOqB,UAAUC,eAAeC,KAAKia,EAAQs3I,KACtEtgJ,EAAMgJ,EAAOs3I,IAGjBtgJ,EAAIpK,SAAQ,CAACmgC,EAAGjgC,KACRA,EAAMuqJ,EAAI3uJ,QACVuxB,EAAMxsB,KAAK,CAAES,KAAM6+B,EAAG7kC,MAAOmvJ,EAAIvqJ,iBAO7CkT,aAAkBxb,QAAUA,OAAOqB,UAAUC,eAAeC,KAAKia,EAAQwgI,KACzExgI,EAASA,EAAOwgI,IAGpBxgI,EAAOpT,SAAQ,CAACoK,EAAKlK,KACjBmtB,EAAMxsB,KAAK,CAAES,KAAM8I,EAAK9O,MAAOmvJ,EAAIvqJ,QAK/C,OAAO1H,EAAKmF,OAAOgtJ,gBAAgBt9H,IAEvCs9H,gBAAiB,SAAU39H,GAEvB,GAAIA,GAAcA,aAAsBzzB,MAAO,CAC3C,IAAIuwJ,EAAU98H,EAAWj2B,KAAI,SAAUkJ,GACnC,OAAIrI,OAAOqB,UAAUC,eAAeC,KAAK8G,EAAK,SAClC,IACCA,EAAI2C,OAASrK,EAAAA,EAAAA,WAAAA,UACP,IAAIyD,EAAAA,EAAAA,OAAAA,QAAkBiE,EAAIqB,KAAMrB,EAAI3E,YAFnD,EAMO,IAAIU,EAAAA,EAAAA,OAAAA,QAAkBiE,EAAIqB,KAAMrB,EAAI3E,UAInD,OAAIwuJ,EAAQhuJ,OAAS,EACVE,EAAAA,EAAAA,OAAAA,IAAAA,MAAoB,KAAM8tJ,GAE1BA,EAAQ,MAnYpB,CAwYZtxJ,IAGPwD,EAAAA,EAAAA,QAAAA,OAAoB,WAChB,IAAIxD,EAAOC,KA4uBX,GA3uBAuD,EAAAA,EAAAA,QAAAA,MAAiBxD,EAAMid,WAEvBjd,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WACzCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnCv8E,EAAKy8C,cAAe,EAEpB18C,EAAAA,EAAAA,MAAAA,WAA0BA,EAAAA,EAAAA,MAAAA,YAA2B,gBAErDC,EAAKsV,IAAM,6BACXtV,EAAKuP,QAAU,QACfvP,EAAK4vJ,cAAgB,QAEjB5vJ,EAAKJ,SAAWI,EAAKJ,QAAQ0V,MAC7BtV,EAAKsV,IAAMtV,EAAKJ,QAAQ0V,KAG5BtV,EAAKwwJ,cAAgB,IACrBxwJ,EAAKgxJ,eAAiB,KAEtBhxJ,EAAKoyJ,KAAO,IACZpyJ,EAAKqyJ,KAAO,IACZryJ,EAAKmjF,IAAM,MACXnjF,EAAKkjF,IAAM,MAEXljF,EAAKsyJ,WAAa,MAClBtyJ,EAAKuyJ,WAAa,MAClBvyJ,EAAKwyJ,UAAY,QACjBxyJ,EAAKyyJ,UAAY,QAEjBzyJ,EAAK0yJ,IAAM,MACX1yJ,EAAK2yJ,IAAM,MACX3yJ,EAAK4yJ,IAAM,MAEX5yJ,EAAK6yJ,UAAY,QACjB7yJ,EAAK8yJ,UAAY,QACjB9yJ,EAAK+yJ,UAAY,QAEjB/yJ,EAAKgzJ,QAAU,CAAE5uJ,KAAM,IAEvBpE,EAAKizJ,oBAAsBjzJ,EAAK4hC,gBAAgB,aAChD5hC,EAAKkzJ,oBAAsBlzJ,EAAK4hC,gBAAgB,kBAChD5hC,EAAKmzJ,aAAenzJ,EAAK4hC,gBAAgB,mBACzC5hC,EAAKozJ,eAAiB,CAAC,MAAO,UAAW,eAAgB,gBAAiB,cAAe,aAAc,gBAEvGpzJ,EAAKqzJ,qBAAuB,GAE5BrzJ,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,WAA+B,CACrDuzJ,eAAgB,KAChBh+I,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd60F,aAAc,EACd3hI,YAAa,CAAC,yBAA0B,0BAA2B,2BACnEoZ,aAAc,CACVpZ,YAAa,uBACb4hI,cAAe,YACfC,WAAY,cAEhBpD,gBAAiB,CACbC,eAAgB,aAChBc,gBAAiB,WACjBC,eAAgB,WAEpB/C,mBAAoB,CAChB9hH,MAAO,wBACPglC,MAAO,CACH,CACIkiF,uBAAwB,CACpBlpJ,MAAO,8BACPgnE,MAAO,CACHy8E,SAAU,UACV/H,IAAK,iBAIjB,CACIyN,wBAAyB,CACrBnpJ,MAAO,+BACPgnE,MAAO,CACHy8E,SAAU,UACV/H,IAAK,iBAIjB,CACI0N,wBAAyB,CACrBppJ,MAAO,8BACPgnE,MAAO,CACHy8E,SAAU,UACV/H,IAAK,mBAMzB7/I,OAAQ,CACJ,CACIiK,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,IAGvB,CACI37B,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,IAGvB,CACI37B,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,KAI3BzuB,OAAQxd,EAAK6zJ,gBACbC,KAAM9zJ,EAAK+zJ,iBACXC,aAAch0J,EAAK0yJ,IAAM,MAAQ1yJ,EAAK2yJ,IAAM,MAAQ3yJ,EAAK4yJ,IAAM,MAC/DqB,uBAAwB,KAG5Bj0J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,aAAiC,CACvDyd,OAAQxd,EAAKuB,eACbuyJ,KAAM9zJ,EAAKk0J,gBACXX,aAAc,EACd/mH,MAAO,KACP8hH,mBAAoB,SAAU6F,GAC1B,MAAO,CACH3nH,MAAOxsC,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,aAA+BysC,OAASxsC,EAAK4hC,gBAAgB,8BAK1G5hC,EAAKqwJ,gBAAkB,CACnB+D,UAAW,YACXC,MAAO,QACPC,OAAQ,SACRC,MAAO,SAGXv0J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,cAAkC,CACxD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe,QACflxF,aAAc,WACd9sC,YAAa,uBACbs9H,eAAgB,CAAC,cACjBmB,gBAAiB,CACbC,eAAgB,CAAC,WAAY,cAEjChC,mBAAoB,CAChB9hH,MAAO,2BACPglC,MAAO,eAEXw9E,iBAAkB,CAAC,aACnBI,kBAAmB,MACnBmE,aAAc,EACdltJ,OAAQ,CACJ,CACIiK,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,KAI3BzuB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,eAC1C00J,qBAAsBz0J,EAAK00J,yBAAyBC,OACpDb,KAAM9zJ,EAAK40J,mBA4Df50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,SAA6B,CACnD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,qBACbi8H,kBAAmB,GACnBqB,eAAgB,CAAC,aAAc,YAC/BmB,gBAAiB,CACbC,eAAgB,CAAC,YAErBtB,iBAAkB,CAAC,YAAa,WAChCI,kBAAmB,YACnBmE,aAAc,EACd/1I,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,UAC1C00J,qBAAsBz0J,EAAK00J,yBAAyBC,OACpDb,KAAM9zJ,EAAK40J,kBACXX,uBAAwB,IACxB3F,mBAAoB,CAChB9hH,MAAO,sBACPglC,MAAO,eAEXnrE,OAAQ,CACJ,CACIiK,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,MAM/BjsC,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,QAA4B,CAClD88F,KAAM,KACNzkF,MAAO,KACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACdmvF,kBAAmB,mBACnBj8H,YAAa,sBACbs9H,eAAgB,CAAC,QACjBqE,aAAc,EACdlD,gBAAiB,CACbC,eAAgB,CAAC,WAAY,YAC7Bc,gBAAiB,CAAC,MAAO,YAE7B9C,mBAAoB,CAChB9hH,MAAO,qBACPglC,MAAO,eAEXw9E,iBAAkB,CAAC,WAAY,MAAO,OAAQ,YAAa,cAC3DI,kBAAmB,WACnB/oJ,OAAQ,CACJ,CACImvB,KAAM,CACFuW,YAAa,UACbE,cAAe,EACfD,YAAa,EACb6oH,cAAe,QACfC,gBAAiB,UAGzB,CACIx/H,MAAO,CACHkX,MAAO,MACPuoH,iBAAkB,WAClB1oH,UAAW,UACXC,SAAU,GACV0oH,WAAY,OACZ7oH,kBAAmB,UACnBD,kBAAmB,KAI/B1uB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,SAC1C+zJ,KAAM9zJ,EAAK40J,mBAGf50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,QAA4B,CAClD88F,KAAM,KACNzkF,MAAO,KACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,oBACbi8H,kBAAmB,GACnB0F,aAAc,EACdrE,eAAgB,CAAC,aAAc,YAAa,OAAQ,UACpDmB,gBAAiB,CACbC,eAAgB,CAAC,WAAY,YAC7Bc,gBAAiB,CAAC,MAAO,WACzBC,eAAgB,CAAC,WAErB/C,mBAAoB,CAChB9hH,MAAO,qBACPglC,MAAO,aAEXw9E,iBAAkB,CAAC,WAAY,MAAO,SAAU,OAAQ,YAAa,cACrEI,kBAAmB,eACnB/oJ,OAAQ,CACJ,CACIivB,MAAO,CACHz0B,OAAQ,EACR2rC,MAAO,SACPuoH,iBAAkB,WAClB1oH,UAAW,UACXC,SAAU,GACVH,kBAAmB,UACnBD,kBAAmB,KAI/B1uB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,SAC1C+zJ,KAAM9zJ,EAAK40J,mBAGf50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,OAA2B,CACjD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,wBACbi8H,kBAAmB,GACnBqB,eAAgB,CAAC,aAAc,YAC/B+E,uBAAwB,IACxB5D,gBAAiB,CACbC,eAAgB,CAAC,WAAY,YAEjChC,mBAAoB,CAChB9hH,MAAO,oBACPglC,MAAO,eAEXw9E,iBAAkB,CAAC,YAAa,WAChCI,kBAAmB,YACnBmE,aAAc,EACdltJ,OAAQ,CACJ,CACIiK,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,KAI3BzuB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,QAC1C00J,qBAAsBz0J,EAAK00J,yBAAyBC,OACpDb,KAAM9zJ,EAAK40J,mBAGf50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,WAA+B,CACrD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,uBACbi8H,kBAAmB,GACnBqB,eAAgB,CAAC,aAAc,aAC/B+E,uBAAwB,IACxB5D,gBAAiB,CACbC,eAAgB,CAAC,WAAY,eAEjChC,mBAAoB,CAChB9hH,MAAO,wBACPglC,MAAO,aAEXw9E,iBAAkB,CAAC,YAAa,WAAY,aAAc,aAC1DI,kBAAmB,YACnBmE,aAAc,EAEdltJ,OAAQ,CACJ,CACIivB,MAAO,CACHz0B,OAAQ,EACR2rC,MAAO,WACPuoH,iBAAkB,WAClB1oH,UAAW,UACXC,SAAU,GACVH,kBAAmB,UACnBD,kBAAmB,KAI/B1uB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,YAC1C00J,qBAAsBz0J,EAAK00J,yBAAyBC,OACpDb,KAAM9zJ,EAAK40J,mBAGf50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,uBAA2C,CACjE88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,uBACbi8H,kBAAmB,GACnBqB,eAAgB,CAAC,aAAc,aAC/B+E,uBAAwB,IACxB5D,gBAAiB,CACbC,eAAgB,CAAC,YAAa,YAC9Bc,gBAAiB,CAAC,WAAY,eAElC9C,mBAAoB,CAChB9hH,MAAO,wBACPglC,MAAO,aAEXw9E,iBAAkB,CAAC,YAAa,WAAY,aAAc,aAC1DI,kBAAmB,YACnBmE,aAAc,EAEdltJ,OAAQ,CACJ,CACIivB,MAAO,CACHz0B,OAAQ,EACR2rC,MAAO,WACPuoH,iBAAkB,WAClB1oH,UAAW,UACXC,SAAU,GACVH,kBAAmB,UACnBD,kBAAmB,KAI/B1uB,OAAQxd,EAAKw0J,iBAAiBr0G,KAAKlgD,KAAM,CAACF,EAAAA,EAAAA,WAAAA,wBAC1C00J,qBAAsB,CAACz0J,EAAK00J,yBAAyBnlB,GAAIvvI,EAAK00J,yBAAyBO,IACvFnB,KAAM9zJ,EAAK40J,mBAGf50J,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,cAAkC,CACxD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,CAAC,wBACdi8H,kBAAmB,GACnBqB,eAAgB,CAAC,cACjBmB,gBAAiB,CACbC,eAAgB,CAAC,eAErBtB,iBAAkB,CAAC,cACnBI,kBAAmB,MACnBmE,aAAc,EACdltJ,OAAQ,CACJ,CACIiK,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,MAM/BjsC,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,MAA0B,CAChD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,qBACbs9H,eAAgB,CAAC,cACjBmB,gBAAiB,CACbC,eAAgB,CAAC,eAErBhC,mBAAoB,CAChB9hH,MAAO,mBACPglC,MAAO,eAEXw9E,iBAAkB,CAAC,cACnBI,kBAAmBpvJ,EAAK4hC,gBAAgB,4BAArB5hC,QACnBuzJ,aAAc,GACdltJ,OAAQ,CACJ,CACIiK,QAAS,CACLy7B,YAAa,UACbE,cAAe,EACfD,YAAa,GAEjBxW,KAAM,CACFuW,YAAa,UACbE,cAAe,EACfD,YAAa,EACb6oH,cAAe,QACfC,gBAAiB,WAI7Bt3I,OAAQxd,EAAKk1J,QACbpB,KAAM9zJ,EAAKm1J,SACXvL,QAAS,WACL,OAAO,IAAIrgI,OAAO,UAAYvpB,EAAK4hC,gBAAgB,oBAAsB,IAAM5hC,EAAK4hC,gBAAgB,4BAA8B,qGAAsG,OAIhP5hC,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,eAAmC,CACzD88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,oBACbs9H,eAAgB,CAAC,aAAc,OAC/BmB,gBAAiB,CACbC,eAAgB,CAAC,cACjBc,gBAAiB,CAAC,OAEtB9C,mBAAoB,CAChB9hH,MAAO,+BACPglC,MAAO,aAEXw9E,iBAAkB,CAAC,aAAc,MACjCI,kBAAmBpvJ,EAAK4hC,gBAAgB,4BAA8B,SAAW5hC,EAAK4hC,gBAAgB,yBAA2B,QACjI2xH,aAAc,GACdltJ,OAAQ,CACJ,CACIivB,MAAO,CACHkX,MAAO,CAAC,aAAc,MACtBH,UAAW,UACXC,SAAU,GACVH,kBAAmB,UACnBD,kBAAmB,KAI/B1uB,OAAQxd,EAAKo1J,aACbtB,KAAM9zJ,EAAKq1J,cACXzL,QAAS,WACL,OAAO,IAAIrgI,OAAO,UAAYvpB,EAAK4hC,gBAAgB,oBAAsB,IAAM5hC,EAAK4hC,gBAAgB,4BAA8B,sHAAwH5hC,EAAK4hC,gBAAgB,yBAA2B,qEAAsE,OAIxX5hC,EAAKkwJ,QAAU,GACflwJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAkC,CAC3C88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,uBACbs9H,eAAgB,CAAC,cACjBmB,gBAAiB,CACbC,eAAgB,CAAC,cAErBtB,iBAAkB,CAAC,aACnBI,kBAAmB,MACnBkG,aAAc,WACV,OAAO,IAAIz2J,SAAQ,SAAUC,EAASk1B,GAElC,GAAIh0B,EAAKkwJ,QAAQ9yH,SAAWp9B,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,UAAW,CAEhF,IAAIp4I,EAAS,CACbA,QAAiB,OACjBA,EAAO0N,QAAU7qB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCwP,QAC9D4N,EAAO2N,QAAU,aACjB3N,EAAOs0I,SAAWzxJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgC6vJ,cAAgB,IAAM5vJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgC6xB,YAClIzU,EAAOq0I,aAAexxJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCqxB,aACnEjU,EAAO20I,aAAe,CAAC,cAAcxpJ,OAAOtI,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCivJ,kBAAkBzkJ,KAAK,KAEhH4S,EAAOq4I,WAAax1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgC88F,KAAKt+F,KAAI,SAAU4yD,GAChF,MAAO,CAAC,cAAc5yD,KAAI,SAAUc,EAAI0qB,GACpC,OAAO1qB,EAAK,IAAM8xD,EAAKpnC,MACxBxf,KAAK,YAGZ4S,EAAOq4I,WAAar4I,EAAOq4I,WAAWjrJ,KAAK,QAE3C/G,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKtV,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCuV,IAAM,IAAM9R,EAAAA,EAAAA,KAAAA,eAAuB2Z,GACrF+Q,OAAQ,MACRtC,aAAc7rB,EAAAA,EAAAA,SAAAA,OACfpB,MAAK,SAAUstB,GACd,MAAM7nB,EAAO6nB,EAAS7nB,KAClBA,EAAKqxJ,cAAgB,GAErBz1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,UAAYnxJ,EAAK2K,SAASxQ,KAAI,SAAUmF,GACjF,MAAO,CACHrE,GAAI,CAAC,cAAcd,KAAI,SAAU4yD,GAC7B,OAAOztD,EAAQ8wB,WAAW28B,MAC3B5mD,KAAK,KACRiiC,MAAO9oC,EAAQ8wB,WAAWx0B,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCivJ,iBAAiB,IAAI3gI,kBAIpGvvB,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,aAGrDv1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,UAAY,GACzDz2J,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,eAE1Dn/I,OAAM,WACLtX,EAAQ,YAIZA,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,cAAgCw1J,gBAKrEv1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA8B,CACvC88F,KAAM,KACNzkF,OAAO,EACP9C,IAAKtV,EAAKsV,KAAO,6BACjB/F,QAASvP,EAAKuP,SAAW,QACzB6hB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACd6vJ,cAAe5vJ,EAAK4vJ,eAAiB,QACrClxF,aAAc,WACd9sC,YAAa,CAAC,yBACdi8H,kBAAmB,GACnBqB,eAAgB,CAAC,aAAc,aAC/BmB,gBAAiB,CACbC,eAAgB,CAAC,aAErBtB,iBAAkB,CAAC,YACnBsG,aAAc,WACV,OAAO,IAAIz2J,SAAQ,SAAUC,EAASk1B,GAClC,GAAIh0B,EAAKkwJ,QAAQ9yH,SAAWp9B,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,UAAW,CAE5E,IAAIp4I,EAAS,CACbA,QAAiB,OACjBA,EAAO0N,QAAU7qB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4BwP,QAC1D4N,EAAO2N,QAAU,aACjB3N,EAAOs0I,SAAWzxJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4B6vJ,cAAgB,IAAM5vJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4B6xB,YAC1HzU,EAAOq0I,aAAexxJ,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4BqxB,aAC/DjU,EAAO20I,aAAe,CAAC,aAAc,YAAYxpJ,OAAOtI,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4BivJ,kBAAkBzkJ,KAAK,KAExH4S,EAAOq4I,WAAax1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4B88F,KAAKt+F,KAAI,SAAU4yD,GAC5E,MAAO,CAAC,aAAc,YAAY5yD,KAAI,SAAUc,EAAI0qB,GAChD,OAAO1qB,EAAK,IAAM8xD,EAAKpnC,MACxBxf,KAAK,YAGZ4S,EAAOq4I,WAAar4I,EAAOq4I,WAAWjrJ,KAAK,QAE3C/G,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKtV,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4BuV,IAAM,IAAM9R,EAAAA,EAAAA,KAAAA,eAAuB2Z,GACjF+Q,OAAQ,MACRtC,aAAc7rB,EAAAA,EAAAA,SAAAA,OACfpB,MAAK,SAAUstB,GACd,MAAM7nB,EAAO6nB,EAAS7nB,KAClBA,EAAKqxJ,cAAgB,GAErBz1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,UAAYnxJ,EAAK2K,SAASxQ,KAAI,SAAUmF,GAC7E,MAAO,CACHrE,GAAI,CAAC,aAAc,YAAYd,KAAI,SAAU4yD,GACzC,OAAOztD,EAAQ8wB,WAAW28B,MAC3B5mD,KAAK,KACRiiC,MAAO9oC,EAAQ8wB,WAAWx0B,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4BivJ,iBAAiB,IAAI3gI,kBAIhGvvB,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,aAGjDv1J,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,UAAY,GACrDz2J,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,eAEtDn/I,OAAM,WACLtX,EAAQ,YAIZA,EAAQkB,EAAKkwJ,QAAQnwJ,EAAAA,EAAAA,WAAAA,UAA4Bw1J,gBAMjEv1J,EAAK+qC,mBAAqB,GAEtB/qC,EAAKJ,QAAQmrC,mBACb,IAAK,IAAImiB,KAAWltD,EAAKJ,QAAQmrC,mBAEzB/qC,EAAKqzJ,qBAAqBnmG,KAAa1pD,EAAAA,EAAAA,KAAAA,cAAsBxD,EAAKJ,QAAQmrC,mBAAmBmiB,MAKzFltD,EAAKqzJ,qBAAqBnmG,GAAS2gG,mBAAqB7tJ,EAAKqzJ,qBAAqBnmG,GAAS2gG,kBAAkBvqJ,OAAS,GACtHtD,EAAKJ,QAAQmrC,mBAAmBmiB,GAASt7B,cAAgB5xB,EAAKJ,QAAQmrC,mBAAmBmiB,GAAS2gG,2BAE3F7tJ,EAAKqzJ,qBAAqBnmG,GAAS2gG,kBAC1C7tJ,EAAKqzJ,qBAAqBnmG,GAAS7mD,OAASrG,EAAKqzJ,qBAAqBnmG,GAAS7mD,OAAOuE,MAAM,EAAG5K,EAAKqzJ,qBAAqBnmG,GAAS7mD,OAAO/C,OAAS,IAItJE,EAAAA,EAAAA,KAAAA,OAAexD,EAAKqzJ,qBAAqBnmG,GAAUltD,EAAKJ,QAAQmrC,mBAAmBmiB,KAI/EltD,EAAKJ,QAAQmrC,mBAAmBmiB,GAAS2vC,MACxC3vC,IAAYntD,EAAAA,EAAAA,WAAAA,cAAkCC,EAAKJ,QAAQmrC,mBAAmBmiB,GAASwoG,WAAa31J,EAAAA,EAAAA,WAAAA,cACrGmtD,IAAYntD,EAAAA,EAAAA,WAAAA,UAA8BC,EAAKJ,QAAQmrC,mBAAmBmiB,GAASwoG,WAAa31J,EAAAA,EAAAA,WAAAA,YAEhGC,EAAKkwJ,QAAQ9yH,OAASp9B,EAAKkwJ,QAAQlwJ,EAAKJ,QAAQmrC,mBAAmBmiB,GAASwoG,UAC5E11J,EAAKkwJ,QAAQ9yH,OAAOy/D,KAAO78F,EAAKJ,QAAQmrC,mBAAmBmiB,GAAS2vC,KACpE78F,EAAKkwJ,QAAQ9yH,OAAOhlB,MAAQpY,EAAKJ,QAAQmrC,mBAAmBmiB,GAAS90C,MAErEpY,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,QAA0BswJ,gBAAgBC,eAChEtwJ,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,QAA0BswJ,gBAAgBC,eACpEtwJ,EAAKkwJ,QAAQ9yH,OAAO8xH,iBAK3BlvJ,EAAKJ,QAAQmrC,mBAAmBmiB,GAGjCltD,EAAK21J,qBAAqBzoG,EAASltD,EAAKqzJ,qBAAqBnmG,GAAWltD,EAAKqzJ,qBAAqBnmG,GAAWltD,EAAKJ,QAAQmrC,mBAAmBmiB,GAAUltD,UAFhJA,EAAKJ,QAAQmrC,mBAAmBmiB,GAO/CltD,EAAKkwJ,QAAQ9yH,QACbp9B,EAAKkwJ,QAAQ9yH,OAAOk4H,eAGxBt1J,EAAK41J,kBAAoB51J,EAAKJ,QAAQg2J,oBAAqB,EAE3D51J,EAAK61J,SAAW,EAChB71J,EAAK81J,SAAW,EAEhB91J,EAAKE,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,QAAAA,OAAuBxD,GAEvCA,EAAK+1J,SAAW,IAEhB/1J,EAAKg2J,gBAAkB,CACnBC,aAAc,oEACdC,iBAAkB,qCAClBC,SAAU,uCAIlB3yJ,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,QAAAA,OAAmBA,EAAAA,EAAAA,SAC9BA,EAAAA,EAAAA,IAAOA,EAAAA,EAAAA,QAAAA,OAAmBA,EAAAA,EAAAA,QAAAA,WAE1B,WACI,IAAIk5C,EAAWl5C,EAAAA,EAAAA,QAAAA,OAAAA,UAEfk5C,EAASH,MAAQ,gBAEjBx8C,EAAAA,EAAAA,MAAAA,iBAAgCA,EAAAA,EAAAA,MAAAA,kBAAiC,sBAEjE28C,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC7W,QAAQwiB,IAAI,CAAC7d,EAAAA,EAAAA,QAAAA,UAAAA,SAAAA,KAAmCxD,EAAMzB,GAAMyB,EAAKsL,kBAAkB3M,MAAK,WAChFqB,EAAKJ,SAAWI,EAAKJ,QAAQukG,MAC7BnkG,EAAKokG,iBAAiBzlG,MAAK,WACvBG,EAAQkB,MACToW,OAAM,SAAUsD,GACfhE,EAAOgE,aAAeza,MAAQya,EAAMza,MAAMya,OAG9C5a,EAAQkB,UAMxB,MAAMo2J,EAAe,SAAU3uJ,GAC3B,MAAMzH,EAAOC,KAEb,IAAIo2J,EAAc5uJ,EAAI+kC,MAClB8pH,EAAS,GAI0B,IAAnCt2J,EAAKopB,YAAYS,OAAOvmB,QAAgBtD,EAAK03H,UAAU50H,MAAM+mB,OAAOvmB,OAAS,IAC7EtD,EAAKopB,YAAcppB,EAAK03H,UAAU50H,MAAM+mB,QAG5C,IAAI0sI,EAAwBv2J,EAAKopB,YAO7BotI,EAAS,GACTC,EAAgB,IAQpB,IAPsD,KAPlDF,EADAv2J,EAAKg2J,gBAAgBC,aAAa/zH,KAAKq0H,GACfA,EAAsB/sJ,QAAQxJ,EAAKg2J,gBAAgBE,iBAAkB,IAErEK,EAAsB/sJ,QAAQxJ,EAAKg2J,gBAAgBG,SAAU,KAK/DltJ,QAAQwtJ,KAC9BA,EAAgB,KAGpBD,EAASD,EAAsB1sI,OAAOzX,MAAMqkJ,GAGxChvJ,EAAI+kC,MAAMvjC,QAAQjJ,EAAKyyJ,YAAc,GAAKhrJ,EAAI+kC,MAAMvjC,QAAQjJ,EAAKwyJ,YAAc,GAC/E/qJ,EAAI+kC,MAAMvjC,QAAQjJ,EAAKsyJ,aAAe,GAAK7qJ,EAAI+kC,MAAMvjC,QAAQjJ,EAAKuyJ,aAAe,EAAG,CACpFiE,EAASx2J,EAAKopB,YAAYhX,MAAM,KAEhC,IAAK,IAAI41B,EAAI,EAAGA,EAAIwuH,EAAOlzJ,OAAQ0kC,IACI,MAA/BwuH,EAAOxuH,GAAGne,OAAOjf,OAAO,KACxB4rJ,EAAOxuH,GAAKwuH,EAAOxuH,GAAGp9B,MAAM,GAAI,IAK5C,IAAK,IAAIm4D,EAAI,EAAGA,EAAIyzF,EAAOlzJ,OAAQy/D,IAC/B,GAAIyzF,EAAOzzF,GAAGl5C,OAAOvmB,OAAS,EAAG,CAC7BgzJ,EAAOjuJ,KAAK,IAAMmuJ,EAAOzzF,GAAGl5C,OAAOrgB,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAAM,KAE7E,GADc,uBAAuB2I,KAAKqkJ,EAAOzzF,GAAGl5C,QAGhD,IADA,IAAI6sI,EAAUF,EAAOzzF,GAAGl5C,OAAOrgB,QAAQ,uBAAwB,IAAI4I,MAAM,KAChE6iJ,EAAK,EAAGA,EAAKyB,EAAQpzJ,OAAQ2xJ,IAC9ByB,EAAQzB,GAAIprI,OAAOvmB,OAAS,GAC5BgzJ,EAAOjuJ,KAAK,IAAMquJ,EAAQzB,GAAIprI,OAAOrgB,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OAAS,KAMzG,GAAI/B,EAAIioJ,WAAa3vJ,EAAAA,EAAAA,WAAAA,MAA0B0H,EAAIioJ,WAAa3vJ,EAAAA,EAAAA,WAAAA,cAAiC,CAE7F,MAAM0J,EADSzJ,EAAK0wJ,oBAAoBjpJ,EAAIioJ,UAAUG,aAC/B19I,KAAKnS,EAAKopB,aAE7B3f,IACA6sJ,EAAS,GAEL7sJ,EAAM,IAAMA,EAAM,IAAMA,EAAM,GAC9B6sJ,EAAOjuJ,KAAK,IAAMoB,EAAM,GAAK,IAAMA,EAAM,GAAK,IAAMA,EAAM,GAAK,KACxDA,EAAM,IAAMA,EAAM,GACzB6sJ,EAAOjuJ,KAAK,IAAMoB,EAAM,GAAK,IAAMA,EAAM,GAAK,KACvCA,EAAM,IAAMA,EAAM,GACzB6sJ,EAAOjuJ,KAAK,IAAMoB,EAAM,GAAK,IAAMA,EAAM,GAAK,MACvCA,EAAM,IAAMA,EAAM,KACzB6sJ,EAAOjuJ,KAAK,KAAOoB,EAAM,IAAMA,EAAM,IAAM,KAG3CA,EAAM,IACN6sJ,EAAOjuJ,KAAK,MAAQrI,EAAK4hC,gBAAgB,yBAA7B,eAA8En4B,EAAM,GAApF,UAKxB,IAAImgJ,EAAU,IAAM0M,EAAO/rJ,KAAK,KAAO,IAavCq/I,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAUA,EAAQpgJ,QAAQ,QAAS,MACjBA,QAAQ,QAAS,MACjBA,QAAQ,QAAS,MACjBA,QAAQ,QAAS,MACjBA,QAAQ,QAAS,MACjBA,QAAQ,MAAO,MAEfA,QAAQ,MAAO,YACfA,QAAQ,MAAO,YACfA,QAAQ,MAAO,YACfA,QAAQ,MAAO,YACfA,QAAQ,MAAO,aACjC,IAAImtJ,EAAM,IAAIptI,OAAOqgI,EAAS,MAE1Bp9G,EAAQ/kC,EAAI+kC,MAiBhB,OAdI6pH,EADA5uJ,EAAIioJ,WAAa3vJ,EAAAA,EAAAA,WAAAA,MAA0B0H,EAAIioJ,WAAa3vJ,EAAAA,EAAAA,WAAAA,cAC9CysC,EAAMhjC,QAAQmtJ,GACxB,WACI,IAAIx5I,EAASpc,MAAMN,UAAUmK,MAAMjK,KAAKsc,UAAW,GAEnD,OAAIE,EAAOA,EAAO7Z,OAAS,GAChB6Z,EAAO,GAAG3T,QAAQ2T,EAAOA,EAAO7Z,OAAS,GAAI,MAAQ6Z,EAAOA,EAAO7Z,OAAS,GAAK,QAEjF,MAAQ6Z,EAAO,GAAK,UAIzBqvB,EAAMhjC,QAAQmtJ,EAAK,aAG9BN,GAGLO,EAAoB,SAAU53J,GAChC,MAAMgB,EAAOC,KACb,IAAI42J,EAAU73J,EAAE0O,OAEhB,GAAsC,MAAlCmpJ,EAAQ1gF,QAAQ9nD,cAAuB,CACvC,IAAI0wH,EAAK//I,EAAE0O,OACX,MAAMw4C,EAAkB64F,EAAGv1H,SAAWu1H,EAAGz4F,uBAAyBy4F,EAAG54F,oBAAsB44F,EAAG34F,kBAE9F,KAAO24F,GAAI,CACP,GAAI74F,EAAgBvlD,KAAKo+I,EAAI,KAAM,CAC/B8X,EAAU9X,EACV,MAEAA,EAAKA,EAAGtiF,eAKhBo6F,EAAQ5+I,cAAc,kBACtBjY,EAAK03H,UAAU50H,MAAQ+zJ,EAAQ5+I,cAAc,gBAAgBjK,YAC7DhO,EAAKopB,YAAcppB,EAAK03H,UAAU50H,MAClC9C,EAAK82J,YAAY1lF,SAASylF,EAAQh5H,aAAa,SAASzE,UAAU,GAAIy9H,EAAQp1G,WAAW5jB,aAAa,aACtGr6B,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBxD,EAAK03H,UAAW,SAExC13H,EAAKy1I,aAAez1I,EAAKy1I,YAAYz3G,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAIxDg3J,EAAe,SAAUh8I,EAAGsP,GAC9B,MAAM2sI,EAAM,aACNC,EAAM,UAEZ,IAAIC,EAAO3+I,SAASwC,EAAG,IACnBo8I,EAAO5+I,SAAS8R,EAAG,IAEvB,GAAIppB,MAAMi2J,IAASj2J,MAAMk2J,GAAO,CAC5B,IAAIC,EAAKr8I,EAAEvR,QAAQwtJ,EAAK,IACpBK,EAAKhtI,EAAE7gB,QAAQwtJ,EAAK,IACxB,GAAII,IAAOC,EAAI,CACX,IAAIC,EAAK/+I,SAASwC,EAAEvR,QAAQytJ,EAAK,IAAK,IAClCM,EAAKh/I,SAAS8R,EAAE7gB,QAAQytJ,EAAK,IAAK,IACtC,OAAOK,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,EAEtC,OAAOH,EAAKC,EAAK,GAAK,EAEvB,OAAIp2J,MAAMi2J,GACN,EACAj2J,MAAMk2J,IACL,EAEDD,EAAOC,EAAO,GAAK,GAI5BK,EAAwB,SAAUz8I,EAAGsP,GACvC,MAAMrqB,EAAOC,KAEb,OAAID,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgBvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cACrFvzJ,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgB,IAAMvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cAAgB,GAC1G,GACCvzJ,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgB,IAAMvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cAAgB,IAChH,EAGDwD,EAAah8I,EAAEyxB,MAAOniB,EAAEmiB,OAG/BzxB,EAAE20I,SAAWrlI,EAAEqlI,SACR,EAEF30I,EAAE20I,SAAWrlI,EAAEqlI,UACZ,EAEDqH,EAAah8I,EAAEyxB,MAAOniB,EAAEmiB,QAKrCirH,EAAa,SAAU18I,EAAGsP,GAC5B,MAAMrqB,EAAOC,KAEPy3J,EAAQ,WACV,IAEIC,EAAOC,EAFPhpC,EAAQ5uH,EAAKkwJ,QAAQ9yH,OAAOy/D,KAAK,aAAc97F,MAAQf,EAAKkwJ,QAAQ9yH,OAAOy/D,KAAK,GAAGtyF,KAAK,KAAOvK,EAAKkwJ,QAAQ9yH,OAAOy/D,KAAK,GAW5H,OARI9hF,EAAEyZ,YAAczZ,EAAEyZ,WAAWlxB,OAAS,GAAK+mB,EAAEmK,YAAcnK,EAAEmK,WAAWlxB,OAAS,GACjFq0J,EAAQ33J,EAAKkwJ,QAAQ9yH,OAAO8xH,eAAe3wJ,KAAI,SAAU4yD,GAAQ,OAAOp2C,EAAEyZ,WAAW28B,GAAMjuC,cAAe3Y,KAAK,KAC/GqtJ,EAAQ53J,EAAKkwJ,QAAQ9yH,OAAO8xH,eAAe3wJ,KAAI,SAAU4yD,GAAQ,OAAO9mC,EAAEmK,WAAW28B,GAAMjuC,cAAe3Y,KAAK,OAE/GotJ,EAAQ58I,EAAE1b,GACVu4J,EAAQvtI,EAAEhrB,IAGVs4J,IAAU/oC,GAASgpC,IAAUhpC,EACtB,EACA+oC,IAAU/oC,GAASgpC,IAAUhpC,GAC5B,EAEDmoC,EAAah8I,EAAEyxB,MAAOniB,EAAEmiB,QAErC2T,KAAKlgD,MAEP,OAAID,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgBvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cACrFvzJ,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgB,IAAMvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cAAgB,GAC1G,GACCvzJ,EAAK0wJ,oBAAoB31I,EAAE20I,UAAU6D,cAAgB,IAAMvzJ,EAAK0wJ,oBAAoBrmI,EAAEqlI,UAAU6D,cAAgB,IAChH,EAGDmE,IAIJA,KAITr/B,EAAY,SAAUpyF,GACxB,MAAMjmC,EAAOC,KAEb,IAAI0J,EAAO,GACPkuJ,EAAY,GAGZzzJ,EAAO6hC,EAAQA,QAAQ7b,KAAKotI,EAAsBr3G,KAAKngD,IAEvDA,EAAKkwJ,QAAQ9yH,SACbh5B,EAAOA,EAAKgmB,KAAKqtI,EAAWt3G,KAAKngD,KAGrC,IAAK,IAAImC,EAAI,EAAGA,EAAIiC,EAAKd,OAAQnB,IAAK,CAClC,IAAIsF,EAAMrD,EAAKjC,IAE0B,IAArC01J,EAAU5uJ,QAAQxB,EAAIioJ,YACtB/lJ,EAAKtB,KAAKrI,EAAK0wJ,oBAAoBjpJ,EAAIioJ,UAAUtB,yBACjDyJ,EAAUxvJ,KAAKZ,EAAIioJ,WAGvB/lJ,EAAKtB,KAAM,iBAAgBZ,EAAIioJ,uBAAuBh9H,mBAAmBjrB,EAAIpI,qBAAqBoI,EAAI+kC,eAAe4pH,EAAaz1J,KAAKX,EAAMyH,eAYjJ,OATA1G,MAAMN,UAAUlC,IAAIoC,KAAKX,EAAK83J,YAAYnsJ,iBAAiB,iBAAkBlE,GAClEA,EAAIo2B,aAAa,cACzB14B,QAAO,CAACuqJ,EAAUvtJ,EAAG41J,IACbA,EAAY9uJ,QAAQymJ,KAAcvtJ,IAAM01J,EAAU5/H,SAASy3H,KACnEloJ,SAAQkoJ,IACP/lJ,EAAKtB,KAAKrI,EAAK0wJ,oBAAoBhB,GAAUtB,yBAC7CzkJ,EAAKtB,KAAM,iBAAgBqnJ,mDAA0D1vJ,EAAK4hC,gBAAgB,qGAGvGj4B,EAAKY,KAAK,KAGrBmyC,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,WACd,MAAM98C,EAAOC,KAEb,OAAOD,EAAK+8C,qBAAqBl+C,QAAQwiB,IAAI,CACzCrhB,EAAKg9C,aACLh9C,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,IAAI,SAAU5yC,GACvD3J,EAAKu8E,WAAWnvE,UAAYzD,SAKxC+yC,EAASM,WAAa,SAAU54C,EAAMo0B,GAClC,IAAIx4B,EAAOC,KACXD,EAAKgzJ,QAAUhzJ,EAAKgzJ,SAAW,GAC/B,IAAIA,EAAU,WACVhzJ,EAAK+wB,OAAO/wB,EAAK03H,UAAU50H,OAAO,SAAUqwF,GACpB,IAAhBA,EAAK7vF,QACLtD,EAAK03H,UAAU50H,MAAQqwF,EAAK,GAAG3mD,MAC/BxsC,EAAK82J,YAAY3jE,EAAK,GAAG9zF,GAAIW,EAAK83J,YAAY7/I,cAAc,oBAAoB4lB,aAAa,aAC7F79B,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAEV,IAAhBozF,EAAK7vF,QACVtD,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,YA8C3C,OA1CAC,EAAKg4J,aAAgB,WACjB,SAASC,EAAeC,GACpB,OAAOA,EAAUjvJ,QAAQ,MAAQ,EAAIivJ,EAAU9lJ,MAAM,KAAK,GAAK8lJ,EAEnE,SAAS9xJ,EAASquB,EAAUw5H,EAAU5uJ,GAClC,IAAI+K,EAAOpK,EAAKm4J,uBAAuB94J,GACvC,GAAI+K,EAAM,CACN,IAAIxE,EAAQwE,EAAK2jJ,sBAAsBkK,EAAe54J,IACtD,GAAIuG,GAASxG,OAAOqB,UAAUC,eAAeC,KAAKiF,EAAOqoJ,GACrD,OAAOroJ,EAAMqoJ,GAAUx5H,GAG/B,OAAOjuB,EAAAA,EAAAA,OAAWynJ,GAAUx5H,GAEhC,OAAO,SAAUw5H,EAAUx5H,EAAU2jI,EAAcppJ,GAEzCA,aAAavP,EAAAA,GADRQ,KAEF1B,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAFtCxE,KAEkDwE,MAAOjE,KAAMwO,EAAExO,OAE5E,IAAIyqD,EAAO7kD,EAASquB,EAAUw5H,EAAUgK,EAAejpJ,EAAE3P,KACzD,GAAI+4J,EAAc,CACd,GAAIntG,aAAgBlqD,MAAO,CACvB,IAAIqtB,EAAS68B,EAAK1sD,KAAI,SAAU8G,GAC5B,MAAMjB,EAAO4K,EAAEhL,UACf,OAAO5E,OAAOqB,UAAUC,eAAeC,KAAKyD,EAAMiB,GAAKjB,EAAKiB,GAAK,MAEjE6yC,EAAaj4C,KAAKk4J,uBAAuBF,EAAejpJ,EAAE3P,KAC9D,OAAI64C,EACOA,EAAWk3G,kBAAkBE,SAASlhI,GAEtCA,EAAO7jB,KAAK,KAEpB,CACH,MAAMnG,EAAO4K,EAAEhL,UACf,OAAO5E,OAAOqB,UAAUC,eAAeC,KAAKyD,EAAM6mD,GAAQ7mD,EAAK6mD,GAAQ,IAI3E,OAAOA,GAtCE,GA0Cd,IAAIpsD,SAAQ,SAAUC,EAAS4W,GAClClS,EAAAA,EAAAA,QAAAA,UAAAA,WAAAA,KAAqCxD,EAAMZ,OAAOmD,OAAO6B,GAAQ,GAAI,CAAE+/F,MAAOnkG,EAAKJ,QAAQukG,SAAU,WAC7FnkG,EAAKzB,IACLyB,EAAK0tF,aAAe1tF,EAAKzB,IAAI8rD,SAAS,CAClChrD,GAAIW,EAAK4mC,SACTp8B,MAAO,YACP66E,MAAOrlF,EACPsvB,SAAS,EACT+oI,WAAW,EACXjuJ,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsG,OAAQ,CACJiK,QAAS,CACLu7B,UAAW7rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,UAAW,aAAa,GAChE8rC,YAAa9rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,UAAW,eAAe,GACpE+rC,YAAa/rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,UAAW,eAAe,GACpEisC,cAAejsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,UAAW,iBAAiB,GACxEgsC,YAAahsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,UAAW,eAAe,IAExEw1B,KAAM,CACFuW,YAAa/rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,OAAQ,eAAe,GACjEisC,cAAejsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,OAAQ,iBAAiB,GACrEgsC,YAAahsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,OAAQ,eAAe,IAErE07B,OAAQ,CACJ7pB,OAAQrO,EAAAA,EAAAA,SAAAA,OAAAA,OAAAA,OACRgvB,OAAQhvB,EAAAA,EAAAA,SAAAA,OAAAA,OAAAA,OACR+uB,MAAO/uB,EAAAA,EAAAA,SAAAA,OAAAA,OAAAA,OAEX8xB,MAAO,CACHz0B,OAAQb,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,UAAU,GACxDwyB,OAAQxyB,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,UAAU,GACxDuyB,MAAOvyB,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,SAAS,GACtD6rC,UAAW7rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,aAAa,GAC9D8rC,YAAa9rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,eAAe,GAClE+rC,YAAa/rC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,eAAe,GAClEgsC,YAAahsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,eAAe,GAClEssC,SAAUtsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,YAAY,GAC5DqsC,UAAWrsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,aAAa,GAC9DmsC,kBAAmBnsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,qBAAqB,GAC9EksC,kBAAmBlsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,qBAAqB,GAC9EwsC,MAAOxsC,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,SAAS,GACtD+0J,iBAAkB/0J,EAAKg4J,aAAa73G,KAAKngD,EAAM,QAAS,oBAAoB,OAGrFrB,MAAK,SAAU8F,GAEd,OADAzE,EAAKyE,MAAQA,EACNzE,EAAKyE,SAIhBzE,EAAK0tF,aAAe7uF,QAAQ6W,OAAO,IAAIzW,MAAM,kCAIjD,IAyFIq5J,EAzFAC,EAAY,WACZv4J,EAAK03H,UAAU50H,MAAQ9C,EAAK83J,YAAYtrH,OAASxsC,EAAK83J,YAAY7/I,cAAc,+BAA+BjK,YAC/GhO,EAAKopB,YAAcppB,EAAK03H,UAAU50H,MAClC9C,EAAK82J,YAAY92J,EAAK83J,YAAYz4J,IAAM+xE,SAASpxE,EAAK83J,YAAY7/I,cAAc,wBAAwB4lB,aAAa,SAASzE,UAAU,GAAIp5B,EAAK83J,YAAY7/I,cAAc,oBAAoB4lB,aAAa,aAC5M79B,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAGnCC,EAAK03H,UAAY13H,EAAK2M,IAAIsL,cAAc,SAAWjY,EAAKu8C,MAAQ,QAC5Dv8C,EAAKJ,SAAWI,EAAKJ,QAAQ44J,aAC7Bx4J,EAAK03H,UAAUrqG,aAAa,cAAertB,EAAKJ,QAAQ44J,YAAY3uI,QAGxE7pB,EAAK83J,YAAc93J,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SAC7Dv8C,EAAK6sD,OAAS7sD,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QACxDv8C,EAAK6sD,OAAOhhD,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC7CC,EAAK4f,WAAWjhB,MAAK,SAAUqiB,GACvBhhB,EAAK83J,YAAYnsJ,iBAAiB,sEAAsErI,OAAS,IAC5G0d,EAAEjS,SAASzL,OAAS,EACzB0d,EAAEziB,IAAI6uD,eAAepsC,EAAEjS,UAEiG,IAAnH/O,EAAK83J,YAAYnsJ,iBAAiB,sEAAsErI,OAC7Gi1J,IAGAv4J,EAAK03H,UAAUz3F,cAAc,IAAIF,MAAM,gBAGhD,CAAE9xB,SAAS,IACVjO,EAAKJ,QAAQ64J,eACbz4J,EAAK03H,UAAUrqG,aAAa,QAASrtB,EAAKJ,QAAQ64J,aAAa5uI,QAC/D7pB,EAAK6sD,OAAOx/B,aAAa,QAASrtB,EAAKJ,QAAQ64J,aAAa5uI,SAIhE7pB,EAAK83J,YAAYjsJ,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoByD,EAAAA,EAAAA,YAAAA,mBAAkC,KAAOxD,EAAKu8C,MAAQ,aAAa,WACrHv8C,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/BC,EAAK03H,UAAU1Q,WACf,CAAE/4G,SAAS,IAEfjO,EAAK03H,UAAU7rH,iBAAiB,YAAY,SAAU7M,GAClD,GAAe,IAAXA,EAAE05J,MAWF,OAVA15J,EAAEoxG,iBACFpxG,EAAE+uE,kBAEF/tE,EAAKopB,YAAc,GAEoG,IAAnHppB,EAAK83J,YAAYnsJ,iBAAiB,sEAAsErI,OACxGi1J,IAEAvF,KAEG,KAGfhzJ,EAAK03H,UAAU7rH,iBAAiB,UAAU,WACF,IAAhC7L,EAAK03H,UAAU50H,MAAMQ,gBACdtD,EAAKwoG,QACZxoG,EAAKy1I,aAAez1I,EAAKy1I,YAAYz3G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnDC,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/BizJ,QAGRhzJ,EAAK03H,UAAU7rH,iBAAiB,SAAS,WACD,IAAhC7L,EAAK03H,UAAU50H,MAAMQ,SACrBtD,EAAKy1I,aAAez1I,EAAKy1I,YAAYz3G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnDC,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/BizJ,QAGRhzJ,EAAK03H,UAAU7rH,iBAAiB,8BAA8B,WAC1D7L,EAAKy1I,aAAez1I,EAAKy1I,YAAYz3G,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnDC,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAEnCC,EAAK03H,UAAU7rH,iBAAiB,8BAA8B,WACtD7L,EAAK83J,YAAYnsJ,iBAAiB,MAAMrI,OAAS,GACjDtD,EAAK83J,YAAY95H,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAKtCC,EAAKJ,QAAQukG,QACbnkG,EAAKy1I,YAAcz1I,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,cAC7Dv8C,EAAKy1I,YAAY5pI,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAClDC,EAAKqpG,oBACN,CAAEp7F,SAAS,KAGlBjO,EAAKopB,YAAc,GACnBppB,EAAK24J,aAAe,KAyCpBn1J,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBxD,EAAK03H,UAAW,CACpCr4F,KAAM,IACN3xB,OAAQ1N,EAAK83J,YACblgC,UAAW,EACXzkD,IAAKnzE,EACL4a,OA3CW,SAAUu5I,EAAO37H,GAG5B,GAFAx4B,EAAK44J,UAAYvL,YAAYtpH,OAExBu0H,EAAa,CACd,MAAM1nI,EAAO,WACT,IAAIioI,EAAW74J,EAAK03H,UAAU50H,MAAM+mB,OAEhCgvI,EAASv1J,OAAS,KAChBtD,EAAKopB,aAAeyvI,IAAa74J,EAAKopB,cACxCikI,YAAYtpH,MAAQ/jC,EAAK44J,UAAY54J,EAAK+1J,UAE1CrkJ,OAAO81I,qBAAqB8Q,GAC5BA,OAAcj0J,EAEdrE,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAY/BC,EAAKopB,YAAcyvI,EAEnB74J,EAAK+wB,OAAO8nI,EAAUrgI,IAEtB8/H,EAAc/Q,sBAAsB32H,IAI5C0nI,EAAc/Q,sBAAsB32H,KAUxC4H,SAAUo+H,EAAkBz2G,KAAKngD,GACjCq4H,UAAWA,EAAUl4E,KAAKngD,KAG9B,MA2BM84J,EAAY,SAAU95J,GACnBA,EAAE+5J,SAAY/5J,EAAEg6J,QAAWh6J,EAAEi6J,WACZ,KAAdj6J,EAAEk6J,SACEl5J,EAAK03H,WAAa9qH,SAASusJ,eAAiBn5J,EAAK83J,YAAY7/I,cAAc,sBAE3EjY,EAAK83J,YAAY7/I,cAAc,sBAAsB+uG,QAC9ChnH,EAAK83J,YAAY7/I,cAAc,mCAAqCrL,SAASusJ,cAEpFn5J,EAAK03H,UAAU1Q,QAnCR,SAAU71D,EAAMnS,GAEnC,IAAIo6G,EAAUjoG,EAAKkoG,mBAEnB,IAAKr6G,EAAU,OAAOo6G,EAGtB,KAAOA,GAAS,CACZ,GAAIA,EAAQ5vI,QAAQw1B,GAAW,OAAOo6G,EACtCA,EAAUA,EAAQC,oBA6BVC,CAAe1sJ,SAASusJ,cAAc18F,cAAe,oBAChDxkD,cAAc,KAAK+uG,QAE5BhoH,EAAEoxG,iBACFpxG,EAAE+uE,mBACmB,KAAd/uE,EAAEk6J,UACLl5J,EAAK03H,WAAa9qH,SAASusJ,eAGpBvsJ,SAASusJ,eAAiBn5J,EAAK83J,YAAY7/I,cAAc,sBADhEjY,EAAK83J,YAAY7/I,cAAc,iCAAiC+uG,QAjCrD,SAAU71D,EAAMnS,GAEvC,IAAIo6G,EAAUjoG,EAAKooG,uBAEnB,IAAKv6G,EAAU,OAAOo6G,EAGtB,KAAOA,GAAS,CACZ,GAAIA,EAAQ5vI,QAAQw1B,GAAW,OAAOo6G,EACtCA,EAAUA,EAAQG,wBA6BVC,CAAmB5sJ,SAASusJ,cAAc18F,cAAe,oBACpDxkD,cAAc,KAAK+uG,QAE5BhoH,EAAEoxG,iBACFpxG,EAAE+uE,oBAGV/uE,EAAE+uE,mBAGN/tE,EAAK03H,UAAU7rH,iBAAiB,UAAWitJ,GAC3C94J,EAAK83J,YAAYjsJ,iBAAiB,UAAWitJ,GAEzCt1J,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,IAGJx4B,EAAK0tF,aAAa/uF,KAAKG,GAASsX,MAAMV,UAKlDgnC,EAASi5G,qBAAuB,SAAU7sJ,EAAMlJ,GACjCK,KAEN8qC,mBAAmB1iC,KAAK,IAAIilJ,EAAWxkJ,EAAMlJ,EAFvCK,QAKfy8C,EAASg0G,oBAAsB,SAAUtmJ,GAGrC,OAFWnK,KAEC8qC,mBAAmB5lC,QAAO,SAAU+nD,GAC5C,OAAOA,EAAQl+B,UAAY5kB,KAC5B,IAGPsyC,EAASy7G,uBAAyB,SAAU94J,GACxC,IAEI+K,EAFOnK,KAEK8qC,mBAAmB5lC,QAAO,SAAU+nD,GAChD,OAAOA,EAAQ4gG,oBAAoBzuJ,MAGvC,OAAI+K,EAAK9G,OAAS,EACP8G,EAAK,GAGT,MAGXsyC,EAAS+8G,2BAA6B,SAAUp6J,EAAIqwJ,GAChD,MAAM1vJ,EAAOC,KAEb,IAAK,IAAIkC,EAAI,EAAGA,EAAInC,EAAK05J,sBAAsBp2J,OAAQnB,IACnD,GAAInC,EAAK05J,sBAAsBv3J,GAAG9C,IAAMA,KAAQqwJ,GAAaA,GAAY1vJ,EAAK05J,sBAAsBv3J,GAAGutJ,WAAaA,GAChH,OAAO1vJ,EAAK05J,sBAAsBv3J,IAI9Cu6C,EAAS98B,SAAW,WAEhB,OADa3f,KACDytF,cAGhBhxC,EAASmiD,YAAc,WAEnB,OADa5+F,KACDwE,MAAMsK,UAGtB2tC,EAASi9G,SAAW,WAChB,MAAM35J,EAAOC,KAEb,GAAID,EAAKyE,MAAO,CACZ,MAAMuc,EAAIhhB,EAAKyE,MACf,IAAIsK,EAAWiS,EAAEjS,SAASnE,QAC1BoW,EAAEoX,gBAEErpB,GAAYA,EAASzL,OAAS,GAC9BtD,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE0E,MAAOuc,EAAGtd,QAASqL,EAAS,KAG/E,IAAK,IAAI5M,EAAI,EAAGA,EAAInC,EAAKozJ,eAAe9vJ,OAAQnB,IACxC/C,OAAOqB,UAAUC,eAAeC,KAAKqgB,EAAGhhB,EAAKozJ,eAAejxJ,YACrD6e,EAAEhhB,EAAKozJ,eAAejxJ,MAM7Cu6C,EAASk9G,kBAAoB,WACzB,IAAI55J,EAAOC,KAqEX,OAnEAuD,EAAAA,EAAAA,MAAAA,OAAkBA,EAAAA,EAAAA,MAAAA,QAAmB,GACrCxD,EAAK65J,uBAAyB,IAAIh7J,SAAQ,SAAUC,EAASk1B,GACzD,GAAIxwB,EAAAA,EAAAA,MAAAA,OAAAA,eACA1E,EAAQ0E,EAAAA,EAAAA,MAAAA,OAAAA,oBAEP,CACD,IAAI4G,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAEpC,KAAIqK,EAAK4gC,cAAgB5gC,EAAK4gC,aAAapZ,aAAexnB,EAAK4gC,aAAawoH,eAAiBppJ,EAAK4gC,aAAayoH,YAuD3G,MAAM,IAAIx0J,MAAM,6CAA+CmL,EAAK4kB,SAAW,qCAtD/E,IAAI7R,EAAS,CACT2N,QAAS,aACTF,QAAS,MACT6mI,SAAUrnJ,EAAK4gC,aAAapZ,YAC5B/G,QAASzgB,EAAKmF,QACduiJ,aAAc1nJ,EAAK4gC,aAAawoH,cAAgB,IAAMppJ,EAAK4gC,aAAayoH,WACxEjC,aAAcpnJ,EAAKgnB,cAEnBhnB,EAAKwlJ,gBACLzyI,EAAOs0I,SAAWrnJ,EAAKwlJ,cAAgB,IAAMzyI,EAAOs0I,UAExD,IAAIn8I,EAAMlL,EAAKkL,IAAM,IAAM9R,EAAAA,EAAAA,KAAAA,eAAuB2Z,GAClD3Z,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKA,EACL4Y,OAAQ,MACRtC,aAAc,SACfjtB,MAAK,SAAUstB,GACd,MAAM7nB,EAAO6nB,EAAS7nB,KACtB,IAUI2K,GATA3E,EAAKgnB,eAAiBrxB,EAAAA,EAAAA,OAAAA,KACb,IAAIyD,EAAAA,EAAAA,KAAAA,OAAAA,KAGJ,IAAIA,EAAAA,EAAAA,KAAAA,OAAAA,IAAmB,CAC5BmsJ,UAAWvlJ,EAAK4gC,aAAa4kH,cAC7Bh+H,YAAaxnB,EAAK4gC,aAAapZ,eAGjB7a,KAAK3S,GAC3BZ,EAAAA,EAAAA,MAAAA,OAAAA,eAAiC,GACjC,IAAK,IAAIrB,EAAI,EAAGA,EAAI4M,EAASzL,OAAQnB,IAAK,CACtC,IAAIuB,EAAUqL,EAAS5M,GACvBqB,EAAAA,EAAAA,MAAAA,OAAAA,eAAAA,KAAoC,CAAEgpC,MAAO9oC,EAAQU,KAAKgG,EAAK4gC,aAAawoH,eAAgBn0J,GAAIqE,EAAQU,KAAKgG,EAAK4gC,aAAayoH,cAGnIjwJ,EAAAA,EAAAA,MAAAA,OAAAA,eAAAA,MAAoC,SAAUuX,EAAGsP,GAW7C,OATItP,EAAEyxB,MAAQniB,EAAEmiB,OACF,EAELzxB,EAAEyxB,MAAQniB,EAAEmiB,MACR,EAGA,KAKjB1tC,EAAQ0E,EAAAA,EAAAA,MAAAA,OAAAA,mBACT4S,OAAM,WACLtX,WAOTkB,EAAK65J,wBAGhBn9G,EAASn7C,eAAiB,SAAUqoJ,GAChC,MAAM5pJ,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC,IAAIjM,EAAQmgJ,EAAQngJ,MAAM,IAAI8f,OAAO,IAAMvpB,EAAKsyJ,WAAWzoI,OAAOwE,cAAgB,oBAAsBruB,EAAK61J,SAAW,8BAAgC71J,EAAKuyJ,WAAW1oI,OAAOwE,cAAgB,oBAAsBruB,EAAK81J,SAAW,qBAUrO,GATIrsJ,IACAmgJ,EAAUngJ,EAAM,GAAK,IAAMA,EAAM,KAGrCA,EAAQmgJ,EAAQngJ,MAAM,IAAI8f,OAAO,IAAMvpB,EAAKyyJ,UAAU5oI,OAAOwE,cAAgB,0CAA4CruB,EAAKwyJ,UAAU3oI,OAAOwE,cAAgB,wCAE3Ju7H,EAAUngJ,EAAM,GAAK,IAAMA,EAAM,IAGjC,KAAKy4B,KAAK0nH,KAAa,IAAIrgI,OAAO,gBAAkBvpB,EAAK61J,SAAW,0CAA4C71J,EAAK81J,SAAW,oBAAoB5zH,KAAK0nH,IAAY,2DAA2D1nH,KAAK0nH,IASrO,IARAngJ,EAAQ,2DAA2D0I,KAAKy3I,MAC1DngJ,EAAM,GAAGR,QAAQ,MAAQ,GAAKQ,EAAM,GAAGR,QAAQ,MAAQ,KACjEQ,EAAM,GAAKA,EAAM,GAAGD,QAAQ,IAAK,KACjCC,EAAM,GAAKA,EAAM,GAAGD,QAAQ,IAAK,KAEjCogJ,EAAUngJ,EAAM,GAAK,IAAMA,EAAM,KAGhCA,GAASA,IAAUA,EAAM,GAAGR,QAAQ,MAAQ,EAAIQ,EAAM,GAAGD,QAAQ,IAAK,KAAOC,EAAM,KAAO,MAAQA,EAAM,GAAGR,QAAQ,MAAQ,EAAIQ,EAAM,GAAGD,QAAQ,IAAK,KAAOC,EAAM,KAAO,GAAI,EAE9KA,EAAQ,IAAI8f,OAAO,gBAAkBvpB,EAAK61J,SAAW,0CAA4C71J,EAAK81J,SAAW,oBAAoB3jJ,KAAKy3I,MAC5HngJ,EAAM,GAAGR,QAAQ,MAAQ,GAAKQ,EAAM,GAAGR,QAAQ,MAAQ,KACjEQ,EAAM,GAAKA,EAAM,GAAGD,QAAQ,IAAK,KACjCC,EAAM,GAAKA,EAAM,GAAGD,QAAQ,IAAK,KAEjCogJ,EAAUngJ,EAAM,GAAK,IAAMA,EAAM,IAIrCmgJ,EAAUA,EAAQpgJ,QAAQxJ,EAAKsyJ,WAAY,IAAI9oJ,QAAQxJ,EAAKuyJ,WAAY,IAAI/oJ,QAAQxJ,EAAKwyJ,UAAW,IAAIhpJ,QAAQxJ,EAAKyyJ,UAAW,IAChI,IAAI9yJ,EAAS6D,EAAAA,EAAAA,KAAAA,YAAoBomJ,GACjC,GAAIjqJ,EAAQ,CACR,IAAI4kJ,EAAS5kJ,EAAO,GAAGmD,MACnB4hJ,EAAS/kJ,EAAO,GAAGmD,MACnBg3J,EAASn6J,EAAO,GAAGyK,OAASrK,EAAAA,EAAAA,IAAaC,EAAKoyJ,KAAOpyJ,EAAKkjF,IAC1D62E,EAASp6J,EAAO,GAAGyK,OAASrK,EAAAA,EAAAA,IAAaC,EAAKqyJ,KAAOryJ,EAAKmjF,IAC1D9jF,EAAKy6J,EAASvV,EAASwV,EAASrV,EAEhCpvH,EAAQt1B,EAAKg6J,SAAS36J,GACtBi2B,IAAUt1B,EAAKi6J,YAAY3kI,KAC3BivH,EAAS5kJ,EAAO,GAAGmD,MACnB4hJ,EAAS/kJ,EAAO,GAAGmD,MAGnBzD,GAFAy6J,EAASn6J,EAAO,GAAGyK,OAASrK,EAAAA,EAAAA,IAAaC,EAAKoyJ,KAAOpyJ,EAAKkjF,KAE5CqhE,GADdwV,EAASp6J,EAAO,GAAGyK,OAASrK,EAAAA,EAAAA,IAAaC,EAAKqyJ,KAAOryJ,EAAKmjF,KAC1BuhE,EAChCpvH,EAAQt1B,EAAKg6J,SAAS36J,IAGtBi2B,GACAt1B,EAAKqzJ,qBAAqBtzJ,EAAAA,EAAAA,WAAAA,aAA+BysC,MAAQ,+CAA+CtK,KAAK7iC,GAAMW,EAAK4hC,gBAAgB,+BAAiC5hC,EAAKzB,IAAI4I,IAAMnH,EAAK4hC,gBAAgB,+BAGrN9iC,EAAQ,CAAC,CACLO,GAAIA,EAAImtC,MAAOxsC,EAAKk6J,SAAS76J,GAAKqwJ,SAAU3vJ,EAAAA,EAAAA,WAAAA,gBAKhD2V,SAIJA,SAIJA,SAIJA,QAKZgnC,EAASm3G,gBAAkB,SAAUjK,GACjC,MAAM5pJ,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC,IAAIjM,EAAQmgJ,EAAQngJ,MAAM,IAAI8f,OAAOvpB,EAAK6yJ,UAAUhpI,OAAOwE,cAAgB,kBAAoBruB,EAAK8yJ,UAAUjpI,OAAOwE,cAAgB,wBAA0BruB,EAAK+yJ,UAAUlpI,OAAOwE,cAAgB,mBACjM5kB,IACAmgJ,EAAUngJ,EAAM,GAAK,KAAOA,EAAM,GAAK,KAAOA,EAAM,IAGxD,IAAI0wJ,EAAWvQ,GACV,2CAA2C1nH,KAAK0nH,IAAY5pJ,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAA6BuzJ,iBACnH6G,EAAWn6J,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAA6BuzJ,eAAiB,KAAO1J,GAEzF,2CAA2C1nH,KAAKi4H,KAAc,IAAI5wI,OAAO,gBAAkBvpB,EAAK61J,SAAW,4BAA8B71J,EAAK81J,SAAW,OAAO5zH,KAAK0nH,GACrK5pJ,EAAK45J,oBAAoBj7J,MAAK,SAAUw0F,GACpC,IAAI1pF,EAAQ,2CAA2C0I,KAAKgoJ,GAC5D,GAAI1wJ,EAAO,CACP,IAAI2wJ,EAAU,IAAI7wI,OAAO9f,EAAM,GAAGogB,OAAOrgB,QAAQ,2BAA4B,QAAS,KAClFy8B,EAAU,GAEd,MAAM2kC,EAAU,SAAUyvF,EAAKC,EAAUC,EAAKC,GAC1C,IAAIhmI,EAAa,GAMjB,OAJAA,EAAWnsB,KAAKrI,EAAK0yJ,KAAO2H,EAC5B7lI,EAAWnsB,KAAKrI,EAAK2yJ,KAAO4H,EAC5B/lI,EAAWnsB,KAAKrI,EAAK4yJ,KAAO4H,EAErB,CACHn7J,GAAIW,EAAK0yJ,IAAM2H,EAAMr6J,EAAK2yJ,IAAM4H,EAAMv6J,EAAK4yJ,IAAM4H,EACjDhuH,MAAOxsC,EAAKk6J,SAASl6J,EAAK0yJ,IAAM4H,EAAWt6J,EAAK2yJ,IAAM4H,EAAMv6J,EAAK4yJ,IAAM4H,GACvE9K,SAAU3vJ,EAAAA,EAAAA,WAAAA,UACVy0B,WAAYA,IASpB,IALAyR,EAAUktD,EAAKhuF,QAAO,SAAUrC,GAE5B,OADAA,EAAQA,EAAM0pC,OAAS1pC,EAAMzD,IAAMyD,EAC5Bs3J,EAAQl4H,KAAKp/B,IAAUs3J,EAAQl4H,KAAKliC,EAAKy6J,kBAAkB33J,QAG1DQ,OAAS,EACjB,IAAK,IAAInB,EAAI,EAAGA,EAAI8jC,EAAQ3iC,OAAQnB,IAChC8jC,EAAQ9jC,GAAKyoE,EAAQ3kC,EAAQ9jC,GAAG9C,GAAI4mC,EAAQ9jC,GAAGqqC,MAAO/iC,EAAM,GAAGogB,OAAQpgB,EAAM,GAAGogB,QAIxF,GAAI,YAAYqY,KAAKz4B,EAAM,IAAK,CAE5B,GAAIA,EAAM,GAAGogB,SAAW7pB,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAA6BuzJ,eAAgB,CAE1F,IAAIA,EAAiBngE,EAAKhuF,QAAO,SAAUsC,GACvC,OAAO8Q,SAAS9Q,EAAIpI,MAAQkZ,SAASvY,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAA6BuzJ,mBAC5F,GAECA,GACAx0J,EAAQ,CAAC8rE,EAAQ0oF,EAAej0J,GAAIi0J,EAAe9mH,MAAO/iC,EAAM,GAAGogB,OAAQpgB,EAAM,GAAGogB,UAI5Foc,EAAQ59B,KAAKuiE,EAAQnhE,EAAM,GAAGogB,OAAQpgB,EAAM,GAAGogB,OAAQpgB,EAAM,GAAGogB,OAAQpgB,EAAM,GAAGogB,SAIrF/qB,EAAQmnC,OAKhBvwB,QAKZgnC,EAASg4G,yBAA2B,CAChCgG,IAAK,SAAUrhJ,EAAMxU,EAAQg4F,EAAMzkF,GAC/B,MAAMpY,EAAOC,KAEb,IAAIwJ,EAAQ,yNAAyN0I,KAAKkH,GAC1O,GAAI5P,GAASA,EAAM,IAAMA,EAAM,GAAI,CAE/B,IAAIkxJ,EAAY,WACZ,OAAOC,EAAmBj6J,KAAKX,GAAOyJ,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAIogB,SAoBxF,MAjBI,eAAeqY,KAAKz4B,EAAM,GAAGogB,SAAW,eAAeqY,KAAKz4B,EAAM,GAAGogB,SACrEhlB,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAE/C91J,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,OAI3C,eAAez4H,KAAKz4B,EAAM,GAAGogB,QAAShlB,EAAOwD,KAAK,CAClD2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAE1C91J,EAAOwD,KAAK,CACbs/B,EAAGl+B,EAAM,GAAGogB,OAAQme,EAAGv+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAGnDE,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,IAC3B,EAGX,OAAO,GAEX0iJ,IAAK,SAAUzhJ,EAAMxU,EAAQg4F,EAAMzkF,GAC/B,MAAMpY,EAAOC,KAEb,IAAIwJ,EAAQ,yNAAyN0I,KAAKkH,GAC1O,GAAI5P,GAASA,EAAM,IAAMA,EAAM,GAAI,CAE/B,IAAIkxJ,EAAY,WACZ,OAAOC,EAAmBj6J,KAAKX,GAAOyJ,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAIogB,SAoBxF,MAjBI,eAAeqY,KAAKz4B,EAAM,GAAGogB,SAAW,eAAeqY,KAAKz4B,EAAM,GAAGogB,SACrEhlB,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAE/C91J,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,OAI3C,eAAez4H,KAAKz4B,EAAM,GAAGogB,QAAShlB,EAAOwD,KAAK,CAClD2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAE1C91J,EAAOwD,KAAK,CACbs/B,EAAGl+B,EAAM,GAAGogB,OAAQme,EAAGv+B,EAAM,GAAGogB,OAAQxkB,EAAGs1J,MAGnDE,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,IAC3B,EAGX,OAAO,GAEX2iJ,KAAM,SAAU1hJ,EAAMxU,EAAQg4F,EAAMzkF,GAChC,MAAMpY,EAAOC,KAEb,IAAIwJ,EAAQ,yNAAyN0I,KAAKkH,GAE1O,SAAI5P,GAASA,EAAM,IAAMA,EAAM,MAC3B5E,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,OAAQxkB,EAAGu1J,EAAmBj6J,KAAKX,GAAOyJ,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAIogB,UAE5HgxI,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,IAC3B,IAKfm3H,GAAI,SAAUl2H,EAAMxU,EAAQg4F,EAAMzkF,GAC9B,MAAMpY,EAAOC,KAEb,IAAIwJ,EAAQ,2EAA2E0I,KAAKkH,GAG5F,IAAK5P,GAAS,aAAay4B,KAAK7oB,EAAKwQ,QAAS,CAC1C,IAAIgvI,EAAWx/I,EAAKjH,MAAM,KAAK+d,UAC/B1mB,EAAQ,2EAA2E0I,KAAK0mJ,EAAStuJ,KAAK,MAG1G,GAAId,GAASA,EAAM,IAAMA,EAAM,GAAI,CAE/B,GAAI,eAAey4B,KAAKz4B,EAAM,GAAGogB,SAAW,eAAeqY,KAAKz4B,EAAM,GAAGogB,QACrEhlB,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGl+B,EAAM,GAAGogB,SAEpChlB,EAAOwD,KAAK,CACRs/B,EAAGl+B,EAAM,GAAGogB,OAAQme,EAAGv+B,EAAM,GAAGogB,SAGpCgxI,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,OAEjC,CAED,IAAI4iJ,EAAY,SAAUrzH,GAItB,IAHA,IAAIszH,EAAOtzH,EAAEv1B,MAAM,KAAK+d,UAEpB+qI,EAAK,GACAC,EAAK,EAAGA,EAAKF,EAAK33J,OAAQ63J,IACP,IAApBF,EAAKE,GAAI73J,SACT43J,EAAG7yJ,KAAK4yJ,EAAKE,IACbF,EAAKE,GAAM,IAInB,OAAOD,EAAG53J,OAAS,EAAI23J,EAAK9qI,UAAU5lB,KAAK,KAAKsf,OAAS7pB,EAAKwwJ,cAAgB0K,EAAG/qI,UAAU5lB,KAAKvK,EAAKwwJ,eAAiByK,EAAK9qI,UAAU5lB,KAAK,KAAKsf,QAG/I,eAAeqY,KAAKz4B,EAAM,GAAGogB,QAC7BhlB,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OAAQ8d,EAAGqzH,EAAUvxJ,EAAM,GAAGogB,UAE7ChlB,EAAOwD,KAAK,CACbs/B,EAAGqzH,EAAUvxJ,EAAM,GAAGogB,QAASme,EAAGv+B,EAAM,GAAGogB,SAG/CgxI,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,GAAO,GAG7C,OAAO,EAGX,OAAO,GAEX68I,GAAI,SAAU57I,EAAMxU,EAAQg4F,EAAMzkF,GAC9B,MAAMpY,EAAOC,KAEb,IAAIwJ,EAAQ,0EAA0E0I,KAAKkH,GAE3F,IAAK5P,EAAO,CACR,MAAMovJ,EAAWx/I,EAAKjH,MAAM,KAAK+d,UACjC1mB,EAAQ,2EAA2E0I,KAAK0mJ,EAAStuJ,KAAK,MAG1G,GAAId,EAAO,CACP,IAAIrF,EAAO,GAEX,MAAMy0J,EAAWx/I,EAAKjH,MAAM,KAAK+d,UACjC,IAAK,IAAIhuB,EAAI,EAAGA,EAAI02J,EAASv1J,OAAQnB,IACjC,GAAI,iBAAiB+/B,KAAK22H,EAAS12J,GAAG0nB,QAClCzlB,EAAK4jC,EAAI6wH,EAAS12J,GAAG0nB,YAEpB,GAAI,YAAYqY,KAAK22H,EAAS12J,GAAG0nB,QAClC,IAAyC,IAArCgvI,EAAS12J,GAAG0nB,OAAO5gB,QAAQ,KAC3B7E,EAAKujC,EAAIkxH,EAAS12J,GAAG0nB,WAClB,CAcH,IAbA,IAAIuxI,EAAYvC,EAAS12J,GAAG0nB,OAAOzX,MAAM,KAAK+d,UAE1CkrI,EAAW,SAAU5yJ,GAErB,QADQ,yIAAyI0J,KAAK1J,EAAEohB,UAEpJzlB,EAAKiB,EAAIu1J,EAAmBj6J,KAAKX,EAAMyI,EAAEohB,SAClC,IAKX+D,EAAI,EACJvoB,EAAI+1J,EAAUxtI,GAAG/D,OACd+D,EAAIwtI,EAAU93J,SAAW+3J,EAASh2J,MACrCuoB,EACQwtI,EAAU93J,SACd+B,GAAQ+1J,EAAUxtI,IAI1B,GAAIxpB,EAAKiB,EAAG,CAER,IADA,IAAIi2J,EAAMF,EACDnyG,EAAI,EAAGA,EAAIqyG,EAAIh4J,OAAQ2lD,IAAK,CAGjC,IADA,IAAIsyG,GAAW,EACN9yJ,EAAI,EAAGA,EAAI6yJ,EAAIryG,GAAG72C,MAAM,IAAI9O,OAAQmF,IACrCrE,EAAKiB,EAAE4D,QAAQqyJ,EAAIryG,GAAGxgD,KAAO,IAC7B8yJ,GAAW,GAGnB,GAAIA,IACAD,EAAIryG,GAAK,GACL7kD,EAAKiB,GAAKu1J,EAAmBj6J,KAAKX,EAAMqF,IACxC,MAKZ,GAAI,+CAA+C68B,KAAKk5H,EAAUjrI,UAAU5lB,KAAK,KAAKsf,QAAS,CAG3F,IAFA,IAAIqxI,EAAK,GACLM,EAAcJ,EAAUjrI,UACnBsrI,EAAM,EAAGA,EAAMD,EAAYl4J,OAAQm4J,IACD,IAAnCD,EAAYC,GAAK5xI,OAAOvmB,SACxB43J,EAAG7yJ,KAAKmzJ,EAAYC,GAAK5xI,QACzB2xI,EAAYC,GAAO,IAI3Br3J,EAAKujC,EAAIuzH,EAAG53J,OAAS,EAAIk4J,EAAYrrI,UAAU5lB,KAAK,KAAKsf,OAAS7pB,EAAKwwJ,cAAgB0K,EAAG/qI,UAAU5lB,KAAKvK,EAAKwwJ,eAAiBgL,EAAYrrI,UAAU5lB,KAAK,KAAKsf,OAMnKhlB,EAAOwD,KAAK,CACR2/B,EAAG5jC,EAAK4jC,EACRL,EAAGvjC,EAAKujC,EAAI,IAAMvjC,EAAKiB,SAG3BjB,EAAKujC,EAAIkxH,EAAS12J,GAAG0nB,OAQrC,OAFAhlB,EAAOwD,KAAKjE,GACZy2J,EAASl6J,KAAKV,KAAM4E,EAAQg4F,EAAMzkF,IAC3B,EAGX,OAAO,GAEXu8I,OAAQ,SAAUt7I,EAAMxU,EAAQg4F,EAAM6+D,GAClC,IAAIjyJ,EAAQ,mDAAmD0I,KAAKkH,GACpE,SAAI5P,IAASA,EAAM,MACXozF,GACAh4F,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,SAGhBhlB,EAAOwD,KAAK,CACR2/B,EAAG60D,EACHl1D,EAAGl+B,EAAM,GAAGogB,UAGfhlB,EAAOwD,KAAK,CACb2/B,EAAGv+B,EAAM,GAAGogB,UAET,IAKf8xI,GAAI,SAAUtiJ,EAAMxU,EAAQg4F,EAAM6+D,GAC9B,MAAM17J,EAAOC,KACb,IAAIwJ,EAAQ,sLAAsL0I,KAAKkH,GACvM,SAAI5P,GAASA,EAAM,IAAMA,EAAM,MACvBozF,EACAh4F,EAAOwD,KAAK,CACR2/B,EAAG60D,EACHl1D,EAAGl+B,EAAM,GAAGogB,OACZxkB,EAAGu1J,EAAmBj6J,KAAKX,EAAMyJ,EAAM,GAAGogB,UAG9ChlB,EAAOwD,KAAK,CACR2/B,EAAGv+B,EAAM,GAAGogB,OACZ8d,EAAGl+B,EAAM,GAAGogB,UAGb,IAKf+xI,IAAK,SAAUviJ,EAAMxU,EAAQg4F,EAAM6+D,GAC/B,MAAM17J,EAAOC,KACb,IAAIwJ,EAAQ,wKAAwK0I,KAAKkH,GACzL,SAAI5P,GAASA,EAAM,IAAMA,EAAM,IAAMozF,KACjCh4F,EAAOwD,KAAK,CACR2/B,EAAG60D,EACHl1D,EAAGl+B,EAAM,GAAGogB,OACZxkB,EAAGu1J,EAAmBj6J,KAAKX,EAAMyJ,EAAM,GAAGogB,WAEvC,KASnB,MAAMgyI,EAAqB,SAAU/4J,GACjC,MAAM9C,EAAOC,KAWb,OATA6C,EAAQ9C,EAAKy6J,kBAAkB33J,IAI3BA,EADA9C,EAAKg2J,gBAAgBC,aAAa/zH,KAAKp/B,GAC/BA,EAAM0G,QAAQxJ,EAAKg2J,gBAAgBE,iBAAkB,IAGrDpzJ,EAAM0G,QAAQxJ,EAAKg2J,gBAAgBG,SAAU,KAE5C9nI,eAGXusI,EAAqB,SAAU93J,GACjC,MAAM9C,EAAOC,KA8Db,IA5DA,IAyDI67J,EAAU,CAzDA,SAAUh5J,GACpB,MAAO,yDAAyDo/B,KAAKp/B,IAgB7D,SAAUA,GAClB,MAAO,oCAAoCo/B,KAAKp/B,IAgBxC,SAAUA,GAClB,MAAO,yBAAyBo/B,KAAKp/B,IAW5B,SAAUA,GACnB,MAAO,oCAAoCo/B,KAAKp/B,KAWhDi5J,EAAQ,CAvDD,SAAUj5J,GACjB,IAAIkM,EAAI,GACJo2C,EAAI,yDAAyDjzC,KAAKrP,GACtE,GAAIsiD,EAAG,CACH,IAAK,IAAIjjD,EAAI,EAAGA,EAAIijD,EAAE9hD,OAAQnB,IACtBijD,EAAEjjD,GAAG0nB,OAAOvmB,OAAS,GACrB0L,EAAE3G,KAAK+8C,EAAEjjD,GAAG0nB,QAGpB,OAAO7a,EAAEzE,KAAKvK,EAAKwwJ,eAEvB,OAAO1tJ,GAMF,SAAUA,GACf,IAAIkM,EAAI,GACJo2C,EAAI,oCAAoCjzC,KAAKrP,GACjD,GAAIsiD,EAAG,CACH,IAAK,IAAIjjD,EAAI,EAAGA,EAAIijD,EAAE9hD,OAAQnB,IACtBijD,EAAEjjD,GAAG0nB,OAAOvmB,OAAS,GACrB0L,EAAE3G,KAAK+8C,EAAEjjD,GAAG0nB,QAGpB,OAAO7a,EAAEzE,KAAKvK,EAAKwwJ,eAEvB,OAAO1tJ,GAMF,SAAUA,GAEf,MADQ,yBAAyBqP,KAAKrP,GAE3B,MAEJA,GAOD,SAAUA,GACR,oCAAoCqP,KAAKrP,GACjD,OACWA,IAOXk5J,EAAK,EACFA,EAAKD,EAAMz4J,SAAWw4J,EAAQE,GAAIr7J,KAAKX,EAAM8C,IAChDk5J,IAGJ,OAAIA,EAAKD,EAAMz4J,OACJy4J,EAAMC,GAAIr7J,KAAKX,EAAM8C,GACpBA,GAGV+3J,EAAW,SAAUh2J,EAAQg4F,EAAMzkF,EAAO6jJ,GAC5C,MAAMj8J,EAAOC,KAEb,GAAI48F,EAEA,IADA,IAAI16F,EAAI0C,EAAOvB,OACRnB,KACH,GAAK85J,EAwBDp3J,EAAOwD,KAAK7E,EAAAA,EAAAA,KAAAA,OAAe,GAAIqB,EAAO1C,GAAI,CAAE6lC,UAvB5C,GAAInjC,EAAO1C,GAAG6lC,EAAG,CACb,IAAIk0H,EAAgBl8J,EAAKkwJ,QAAQ9yH,OAAOm4H,UAAUpwJ,OAAO,SAAUgsD,GAC/D,OAAOA,EAAK3kB,MAAMvjC,QAAQjJ,EAAKy6J,kBAAkB51J,EAAO1C,GAAG6lC,GAAG3Z,gBAAkB,GAClF8xB,KAAKngD,IAEsB,IAAzBk8J,EAAc54J,OACduB,EAAO1C,GAAG6lC,EAAIk0H,EAAc,GAAG78J,GACxB68J,EAAc54J,OAAS,EAE9B44J,EAAc39J,KAAI,SAAU4yD,GACxB,IAAIgrG,EAAY34J,EAAAA,EAAAA,KAAAA,OAAe,GAC5BqB,EAAO1C,IACVg6J,EAAUn0H,EAAImpB,EAAK9xD,GAEnBwF,EAAOwD,KAAK8zJ,MAGgB,IAAzBD,EAAc54J,QAAgB8U,GACrCvT,EAAOmE,OAAO7G,EAAG,KAWnCi6J,EAA8B,SAAUC,EAAchjJ,GACxD,MAAMrZ,EAAOC,KACP48F,EAAO78F,EAAKkwJ,QAAQ9yH,QAAUp9B,EAAKkwJ,QAAQ9yH,OAAOy/D,MAAQ,GAC1DzkF,EAAQpY,EAAKkwJ,QAAQ9yH,QAAUp9B,EAAKkwJ,QAAQ9yH,OAAOhlB,QAAS,EAElE,IAAIvT,EAAS,GA4Bb,GAJqC,OAHrCwU,EAAOA,EAAKwQ,QAGHmuD,OAAO3+D,EAAK/V,OAAS,KAC1B+V,EAAOA,EAAK+f,UAAU,EAAG/f,EAAK/V,OAAS,IAvB9B,WAUT,IATA,IAAIg5J,EAAQ,CAAC,SAAUjjJ,GACnB,OAAOA,EAAK/V,QAAU,GAE1B,SAAU+V,GACN,OAAO,QAAQ6oB,KAAK7oB,KAEhB,gBAAgB6oB,KAAK7oB,KAGpBlX,EAAI,EAAGA,EAAIm6J,EAAMh5J,OAAQnB,IAC9B,IAAKm6J,EAAMn6J,GAAGxB,KAAKX,EAAMqZ,GACrB,OAAO,EAGf,OAAO,EAWP6oB,GAAY,CACZ,IAAI65H,EAAQ,GAUS,KARrBA,EAAQM,EAAa99J,KAAI,SAAUmxJ,GAC/B,OAAO1vJ,EAAK0wJ,oBAAoBhB,MACjCvqJ,QAAO,SAAU+yC,GAChB,OAAOA,EAAWu8G,wBACnBl2J,KAAI,SAAU25C,GACb,OAAOA,EAAWu8G,wBACnB/jJ,QAEOpN,SACNy4J,EAAQ,CAAC/7J,EAAK00J,yBAAyBgG,IAAK16J,EAAK00J,yBAAyBoG,IAAK96J,EAAK00J,yBAAyBqG,KAAM/6J,EAAK00J,yBAAyBnlB,GAAIvvI,EAAK00J,yBAAyBO,IAE/K8G,EADAl/D,GAAQxjF,EAAKjH,MAAM,KAAK9O,OAAS,EACzB,CAACtD,EAAK00J,yBAAyBiH,GAAI37J,EAAK00J,yBAAyBkH,IAAK57J,EAAK00J,yBAAyBC,QAAQrsJ,OAAOyzJ,GAGnHA,EAAMzzJ,OAAO,CAACtI,EAAK00J,yBAAyBiH,GAAI37J,EAAK00J,yBAAyBkH,IAAK57J,EAAK00J,yBAAyBC,UAIjI,IAAIqH,EAAK,EACT,IACI,KAAOA,EAAKD,EAAMz4J,SAAWy4J,EAAMC,GAAIr7J,KAAKX,EAAMqZ,EAAMxU,EAAQg4F,EAAMzkF,IAClE4jJ,IAGR,MAAOzoC,GACH/vH,EAAAA,EAAAA,MAAS,0BAA4B6V,EAAMtZ,EAAAA,EAAAA,aAAAA,MAA2B,sCAG1E,OAAO8E,EAGX,OAAO,MAGL03J,EAAe,SAAUnyJ,EAAMoyJ,EAAQC,EAAcr4J,GAEvD,OAAOwR,MAAMxL,EAAKkL,IAAK,CACnB4Y,OAAQ,OACR5jB,QAAS,CACL,eAAgB,oDAEpBq3B,KAAMv3B,EAAKjF,OAAO+a,UAAU9b,GAC5Bo4J,OAAQA,IAEP79J,MAAK,SAAUstB,GACZ,GAAIA,EAASkY,GACT,OAAOlY,EAAS5S,OAEhB,KAAM,gCAGb1a,KAAK89J,GACLrmJ,OAAM,SAAUsD,GACb,GAAiB,eAAbA,EAAI5Q,KAIJ,MADAtF,EAAAA,EAAAA,MAASkW,GACHA,EAHN/R,QAAQC,IAAI,iCAU5B80C,EAAS83G,iBAAmB,SAAU6H,EAAczS,GAChD,MAAM5pJ,EAAOC,KAEb,OAAO,IAAIpB,SAAQ,CAACC,EAAS4W,KACzB,IAAIgnJ,EAAU,GACVC,EAAgB,GAEpB/S,EAAUiS,EAAmBl7J,KAAKX,EAAM4pJ,GAMxC,IAAIgT,EAAmB,gBAAgBzqJ,KAAKy3I,GAC5C,GAAIgT,GAAoBA,EAAiBt5J,OAAS,EAAG,CAEjDo5J,EAAUN,EAA4Bz7J,KAAKX,EAAMq8J,EAAcO,EAAiB,KAAO,GAEvF,IAAIC,EAAkBT,EAA4Bz7J,KAAKX,EAAMq8J,EAAcO,EAAiB,GAAK,IAAMA,EAAiB,KAAO,GAE/HF,EAAUA,EAAQp0J,OAAOu0J,QAEzBH,EAAUN,EAA4Bz7J,KAAKX,EAAMq8J,EAAczS,IAAY,GAG/E,GAAI8S,EAAQp5J,OAAS,EAAG,CACpB,IAAIw5J,EAA2B,GAC3BC,EAAeC,GACRX,EAAal3J,QAAO,SAAUsC,GACjC,OAAOrI,OAAOD,KAAKa,EAAK0wJ,oBAAoBjpJ,GAAK4oJ,iBAAiB/sJ,SAAWlE,OAAOD,KAAK69J,GAAa15J,UAG1G25J,EAAqB,GAEzB,IAAK,IAAI96J,EAAI,EAAGA,EAAIu6J,EAAQp5J,OAAQnB,IAAK,CACrC,IAAI66J,EAAcN,EAAQv6J,GACtB+6J,EAAQH,EAAYC,GAExB,IAAK,IAAIzoJ,EAAI,EAAGA,EAAI2oJ,EAAM55J,OAAQiR,IAAK,CACnC,IAAInK,EAAOpK,EAAK0wJ,oBAAoBwM,EAAM3oJ,IAEtC0oJ,EAAmBh0J,QAAQmB,EAAK4kB,UAAY,IAC5C8tI,EAAyBz0J,KAAK+B,EAAKgkJ,yBACnC0O,EAAyBz0J,KAAK,iBAAmB+B,EAAK4kB,SAAW,kDAAoDhvB,EAAK4hC,gBAAgB,aAAe,sFAEzJq7H,EAAmB50J,KAAK+B,EAAK4kB,WAGjC,IAAImuI,EAA+BlxI,GACxB7hB,EAAKqkJ,0BAA0BxiI,GAG1C0wI,EAAct0J,KAAKk0J,EAAa57J,KAAKX,EAAMoK,EAAMpK,EAAKo9J,8BAA8BZ,OAAQW,EAA6BH,KAI7HL,EAAcr5J,OAAS,GACvBtD,EAAK83J,YAAY1qJ,WAAa0vJ,EAAyBvyJ,KAAK,IAC5DvK,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAE7CpiD,QAAQwiB,IAAIs7I,GACPh+J,MAAMsnC,IAEHnnC,EAAQ,GAAGwJ,OAAO+H,MAAM,GAAI41B,OAC7B7vB,OAAOo9D,IACN99D,QAGRA,SAGJA,QAKZgnC,EAASw4G,QAAU,SAAUtL,GACzB,MAAM5pJ,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAElC,IADAk0I,EAAUA,EAAQ//H,QACNvmB,OAAS,EACjBxE,EAAQ,QACL,CACH,IAAIsL,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,MAGhC0J,EADcW,EAAKylJ,aACC19I,KAAKy3I,GAC7B,GAAIngJ,GAASA,EAAM,GAAI,CAEnB,IAAI0wJ,EAAW1wJ,EAAM,GAAKA,EAAM,GAAGogB,OAAS,IAAMpgB,EAAM,GAAGogB,OAASpgB,EAAM,GAAGogB,OACzEpgB,EAAM,IAAMA,EAAM,GAAGnG,OAAS,IAC9B62J,EAAWA,EAAW,IAAM1wJ,EAAM,GAAGogB,QAGzC7pB,EAAK83J,YAAY1qJ,UAAYhD,EAAKgkJ,wBAC9B,iBAAmBhkJ,EAAK4kB,SAAW,kDAAoDhvB,EAAK4hC,gBAAgB,aAAe,qFAC/H5hC,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAG7CrrC,MAAMxL,EAAKkL,IAAM,IAAMlL,EAAKjF,OAAO+a,UAAU,CAAE8nB,EAAGmyH,IAAa,CAC3DqC,OAAQx8J,EAAKo9J,8BAA8BZ,SAC5C79J,MAAMstB,IACL,GAAIA,EAASkY,GACT,OAAOlY,EAAS5S,OAEhB,KAAM,2BAEX1a,MAAMstB,IACL,IAAIpnB,EAAS,GACTT,EAAOgG,EAAK0kJ,cAAc7iI,GAC1B7nB,EAAKd,OAAS,GACdc,EAAK7F,KAAI,SAAUmF,GACf,IAAI8wB,EAAapqB,EAAK4kJ,iBACtB,IAAKnqJ,EAAOuW,MAAK,SAAU+1C,GACvB,OAAQA,EAAK93C,MAAQ3V,EAAQU,KAAKowB,EAAW,OAC7C,CACA,IAAIgY,EAAQpiC,EAAKglJ,kBAAkBE,SAASllJ,EAAK4kJ,iBAAiBzwJ,KAAI,SAAU8+J,GAC5E,OAAO35J,EAAQU,KAAKi5J,OAGpBhkJ,EAAOjP,EAAK4kJ,iBAAiBzwJ,KAAI,SAAU8+J,GAC3C,OAAO35J,EAAQU,KAAKi5J,MACrB9yJ,KAAK,KAER1F,EAAOwD,KAAK,CACRhJ,GAAI+K,EAAK8kJ,eAAe3wJ,KAAI,SAAU4yD,GAClC,OAAOztD,EAAQU,KAAK+sD,MACrB5mD,KAAK,KACRiiC,MAAOA,EACPnzB,KAAMA,EACN+hI,UAAW13I,EAAQrE,GAAG+S,MAAM,KAAK,GACjCs9I,SAAUtlJ,EAAK4kB,eAM3BlwB,EAAQ+F,IAGR6Q,OAELU,OAAM,SAAUszG,GAEfh0G,YAIJA,SAMhBgnC,EAAS04G,aAAe,SAAUxL,GAC9B,IAAI5pJ,EAAOC,KACX,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAElC,IADAk0I,EAAUA,EAAQ//H,QACNvmB,OAAS,EACjBxE,EAAQ,QACL,CAEH,IAAIsL,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,eAGhC0J,EADuBW,EAAKylJ,aACC19I,KAAKy3I,GACtC,GAAIngJ,GAASA,EAAM,IAAMA,EAAM,GAAI,CAE/B,IAAI0wJ,EAAW1wJ,EAAM,GAAKA,EAAM,GAAGogB,OAAS,IAAMpgB,EAAM,GAAGogB,OAASpgB,EAAM,GAAGogB,OACzEpgB,EAAM,IAAMA,EAAM,GAAGnG,OAAS,IAC9B62J,EAAWA,EAAW,IAAM1wJ,EAAM,GAAGogB,QAGzC7pB,EAAK83J,YAAY1qJ,UAAYhD,EAAKgkJ,wBAC9B,iBAAmBhkJ,EAAK4kB,SAAW,kDAAoDhvB,EAAK4hC,gBAAgB,aAAe,qFAC/H5hC,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAI7CrrC,MAAMxL,EAAKkL,IAAM,IAAMlL,EAAKjF,OAAO+a,UAAU,CAAE8nB,EAAGmyH,EAAUxyH,EAAGl+B,EAAM,GAAGogB,SAAW,CAC/E2yI,OAAQx8J,EAAKo9J,8BAA8BZ,SAC5C79J,MAAMstB,IACL,GAAIA,EAASkY,GACT,OAAOlY,EAAS5S,OAEhB,KAAM,gCAEX1a,MAAK,SAAUstB,GACd,IAAIpnB,EAAS,GACTT,EAAOgG,EAAK0kJ,cAAc7iI,GAC1B7nB,EAAKd,OAAS,GACdc,EAAK7F,KAAI,SAAUmF,GACf,IAAI8wB,EAAapqB,EAAK4kJ,iBACtB,IAAKnqJ,EAAOuW,MAAK,SAAU+1C,GACvB,OAAQA,EAAK3kB,OAAS9oC,EAAQU,KAAKowB,EAAW,OAC9C,CACA,IAAInb,EAAOjP,EAAKglJ,kBAAkBE,SAASllJ,EAAK4kJ,iBAAiBzwJ,KAAI,SAAU8+J,GAC3E,OAAO35J,EAAQU,KAAKi5J,OAExBx4J,EAAOwD,KAAK,CACRhJ,GAAI+K,EAAK8kJ,eAAe3wJ,KAAI,SAAU4yD,GAClC,OAAOztD,EAAQU,KAAK+sD,MACrB5mD,KAAK,KACRiiC,MAAOnzB,EACPA,KAAMA,EACN+hI,UAAW13I,EAAQrE,GAAG+S,MAAM,KAAK,GACjCs9I,SAAUtlJ,EAAK4kB,eAK3BlwB,EAAQ+F,IAGR6Q,OAELU,OAAM,SAAUszG,GAEfh0G,YAIJA,SAMhBgnC,EAAS3rB,OAAS,SAAU64H,EAASpxH,GACjC,IAAIx4B,EAAOC,KAGX,IADA2pJ,EAAUA,EAAQ//H,QACNvmB,OAAS,EAAG,CACpBsmJ,EAAUA,EAAQv7H,cAEdruB,EAAKo9J,+BACLp9J,EAAKo9J,8BAA8BE,QAGvCt9J,EAAK83J,YAAY1qJ,UAAY,GAC7BpN,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAE7CjhD,EAAK05J,sBAAwB,GAE7B,IAAI6D,EAAUA,KACVv9J,EAAKo9J,8BAA8BZ,OAAO57G,oBAAoB,QAAS28G,IAG3Ev9J,EAAKo9J,8BAAgC,IAAII,gBACzCx9J,EAAKo9J,8BAA8BZ,OAAO3wJ,iBAAiB,QAAS0xJ,GAEpE,IAAIE,EAAW,EACXC,EAAeA,KAEf,GADAD,IACiB,IAAbA,EAAgB,CAEhB,GAAI7T,IAAY5pJ,EAAK03H,UAAU50H,MAAM+mB,OAAOwE,cACxC,OAG0C,IAAtCruB,EAAK05J,sBAAsBp2J,SAC3BtD,EAAK25J,WAEA35J,EAAKyE,OAAwC,IAA/BzE,EAAKyE,MAAMsK,SAASzL,SAEnCtD,EAAK83J,YAAY1qJ,UAAY,iBAAmBpN,EAAKkzJ,oBAAsB,oCAAsClzJ,EAAKizJ,oBAAsB,YAC5IjzJ,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,iCAIrDjhD,EAAKopB,YAAc,KAK3Bu0I,EAAgCA,KAC5B39J,EAAK05J,wBACL15J,EAAK05J,sBAAwB15J,EAAK05J,sBAAsBtvI,MAAK,SAAUrP,EAAGsP,GACtE,IACI44C,EADA2mF,EAAU,QACNgU,EAAK,GASb,OARIhU,EAAQ1nH,KAAKnnB,EAAEyxB,QAAUo9G,EAAQ1nH,KAAK7X,EAAEmiB,QACxCy2B,EAAKloD,EAAEyxB,MAAM/iC,MAAMmgJ,GAAS,GAC5BgU,EAAKvzI,EAAEmiB,MAAM/iC,MAAMmgJ,GAAS,KAE5B3mF,EAAKloD,EAAEyxB,MACPoxH,EAAKvzI,EAAEmiB,OAGPy2B,EAAK26F,EACE,EAEH36F,EAAK26F,GACG,EAED,KAInB59J,EAAKgzJ,QAAQ5uJ,KAAOpE,EAAK05J,sBAErBlhI,GACAA,EAASx4B,EAAK05J,yBAK1B15J,EAAK+qC,mBAAmBvjC,SAAQ,SAAU0lD,GAClCA,EAAQ1vC,QACRigJ,IAIAvwG,EAAQ1vC,OAAO7c,KAAKX,EAAM4pJ,GACrBjrJ,KAAK,SAAU+wJ,EAAU7qJ,GAEtB,IAAIg5J,EAA0BA,KAC1B,IAAIC,EAAwB99J,EAAK83J,YAAY7/I,cAAc,gBAAkBy3I,EAAW,MACxF,GAAIoO,EAAuB,CACvB,IAAIC,EAA6Bh9J,MAAMN,UAAUwI,QAAQtI,KAAKm9J,EAAsBrhG,cAAc1uD,WAAY+vJ,GAC1GE,EAAuBh+J,EAAK83J,YAAY/pJ,WAAWgwJ,EAA6B,GAEpF/9J,EAAK83J,YAAYp7F,YAAYshG,GAC7Bh+J,EAAK83J,YAAYp7F,YAAYohG,KAMrC,GAAIj5J,GAAUA,EAAOvB,OAAS,EAAG,CAG7B,IAAI26J,EAAWp5J,EAAOM,QAAOsC,IAAmF,IAA5EzH,EAAK05J,sBAAsB53F,WAAWo8F,GAAWA,EAAO7+J,KAAOoI,EAAIpI,OACnG4+J,EAAS36J,SAAWuB,EAAOvB,QAC3BtD,EAAK05J,sBAAwB15J,EAAK05J,sBAAsBpxJ,OAAO21J,GAE/DN,KACyB,IAAlB94J,EAAOvB,QACdu6J,SAGJA,IAGJH,KAGFv9G,KAAKngD,EAAMktD,EAAQl+B,WAAW5Y,MAAM,SAAU+nJ,GAG5CT,KACFv9G,KAAKngD,EAAMktD,EAAQl+B,YAEzBrnB,QAAQC,IAAI,kDAKpB5H,EAAKopB,YAAc,GAEnBppB,EAAK25J,YAIb,IAAIyE,EAAuB,SAAUrvJ,GACjC,MAAM/O,EAAOC,KAEb,GAAI8O,GAAYA,EAASzL,OAAS,EAAG,CACjC,MAAM+6J,EAAe,SAAUtvJ,GAC3B,IAAK,IAAI5M,EAAI,EAAGA,EAAI4M,EAASzL,OAAQnB,IAC7B4M,EAAS5M,GAAGmC,YAActE,EAAK41J,oBAC/B7mJ,EAAS5M,GAAGmC,WAAatE,EAAK41J,oBAG1CyI,EAAatvJ,GAEbsvJ,EAAar+J,EAAKyE,MAAMsK,YAGhC2tC,EAASo6G,YAAc,SAAUz3J,EAAIqwJ,GACjC,MAAM1vJ,EAAOC,KAEbD,EAAKwoG,QAAU,CAAEnpG,GAAIA,EAAIqwJ,SAAUA,GAEnC,IAAIoE,EAAO,KAOX,OAJI9zJ,EAAKo9J,+BACLp9J,EAAKo9J,8BAA8BE,QAGhC,IAAIz+J,SAAQ,SAAUC,EAAS4W,GAIlC,IAAIyxC,EAHCnnD,EAAKmgG,UACNngG,EAAKmgG,QAAUngG,EAAKzB,IAAI2G,mBAAmB,+BAA+B,IAG9EiiD,EAAOnnD,EAAKmgG,QAAQ94C,UAGhB5f,WAAW,qBAAqBje,UAChCxpB,EAAK03H,UAAUj6C,OACfz9E,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAGrBC,EAAK25J,WAIL,IAFA,IAAI2E,GAAmB,EAEdn8J,EAAI,EAAGgiB,EAAKnkB,EAAK+qC,mBAAmBznC,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC9D,MAAM+qD,EAAUltD,EAAK+qC,mBAAmB5oC,GACxC,GAAKnC,EAAKqzJ,qBAAqBnmG,EAAQl+B,UAahC,CAEH,MAAMuvI,EAAK7O,GAAY1vJ,EAAKy5J,2BAA2B94J,KAAKX,EAAMX,GAAIqwJ,SACtE,GAAI6O,EAAI,CACJ,MAAMrmH,EAAal4C,EAAK0wJ,oBAAoB6N,GAE5C,GAAIv+J,EAAKqzJ,qBAAqBkL,IAAOrmH,GAAcA,EAAW47G,MAE1D,GAAa,QADbA,EAAO57G,EAAW47G,KAAKnzJ,KAAKX,EAAMX,EAAIk/J,IAElC,WAED,IAAKv+J,EAAKqzJ,qBAAqBkL,IAAOrmH,GAAcA,EAAW47G,MAIlE,GAHAwK,GAAmB,EAGN,QADbxK,EAAO57G,EAAW47G,KAAKnzJ,KAAKX,EAAMX,EAAIk/J,IAElC,WAGJ52J,QAAQC,IAAI,8CA9BpB,GAAIslD,EAAQ4mG,MAIR,GAHAwK,GAAmB,EAGN,QADbxK,EAAO5mG,EAAQ4mG,KAAKnzJ,KAAKX,EAAMX,IAE3B,WAGJsI,QAAQC,IAAI,wCA4BxB5H,EAAKmgG,QAAQ34C,WAAWL,GAEpB2sG,EACA9zJ,EAAK4f,WAAWjhB,MAAK,SAAU8F,GAC3B,IAAItC,EACJ,QAAQ,GACJ,KAAK2xJ,EAAK32I,OAAO/S,OAASrK,EAAAA,EAAAA,UAAAA,OACtB,IAAKoC,EAAI,EAAGA,EAAInC,EAAKozJ,eAAe9vJ,OAAQnB,IACpC/C,OAAOqB,UAAUC,eAAeC,KAAK8D,EAAOzE,EAAKozJ,eAAejxJ,YACzDsC,EAAMzE,EAAKozJ,eAAejxJ,IAGzC,MACJ,KAAK2xJ,EAAK32I,OAAO/S,OAASrK,EAAAA,EAAAA,UAAAA,IACtB,IAAKoC,EAAI,EAAGA,EAAInC,EAAKozJ,eAAe9vJ,OAAQnB,IACxCsC,EAAMzE,EAAKozJ,eAAejxJ,IAAM2xJ,EAAK32I,OAAOnd,EAAKozJ,eAAejxJ,IAM5EsC,EAAM2F,KAAO0pJ,EAAK32I,OAAO/S,KAEzB,MAAMo0J,EAAgB,SAAUx/J,GACxBA,EAAEyF,QAAUzE,EAAKyE,QACjBzE,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0By+J,GACvCJ,EAAqBz9J,KAAKX,EAAMhB,EAAE+P,YAG1C/O,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0By+J,GAEtC,MAAMC,EAAoB,SAAUz/J,GAC5BA,EAAEyF,QAAUA,IACZzE,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0B0+J,GAEvCz+J,EAAKzB,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAC7C,GAAIA,EAAEyF,QAAUA,EACZ,IAAKzF,EAAEyF,MAAMsK,UAAwC,IAA5B/P,EAAEyF,MAAMsK,SAASzL,QAAgBtE,EAAEyF,MAAMvE,KAAKuE,MAAM2d,YAAYy8E,cAAe,CACpG7+F,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAC/B,IAAIi2D,EAASh3D,EAAEyF,MAAMvE,KAAKuE,MAAM2d,YAAY4E,YACxCnmB,EAAS7B,EAAEyF,MAAMlG,IAAIqB,QAAQspC,kBAE7B8sB,EAAO,GAAKA,EAAO,IAAO,IAC1BA,EAAO,GAAKA,EAAO,GAAKn1D,EACxBm1D,EAAO,GAAKA,EAAO,GAAKn1D,GAExBm1D,EAAO,GAAKA,EAAO,IAAO,IAC1BA,EAAO,GAAKA,EAAO,GAAKn1D,EACxBm1D,EAAO,GAAKA,EAAO,GAAKn1D,GAE5B7B,EAAEyF,MAAMlG,IAAIgsD,UAAUyL,GAGlBh2D,EAAKzB,IAAI0I,WAAajH,EAAKoiH,cAC3BpiH,EAAKzB,IAAI23D,YAAY,CAAE36C,OAAQy6C,EAAQvxD,MAAOzF,EAAEyF,aAG/CzF,EAAEyF,MAAMsK,UAAY/P,EAAEyF,MAAMsK,SAASzL,OAAS,GACnDtD,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAE1BC,EAAKoiH,cACNpiH,EAAKyE,MAAMlG,IAAI6uD,eAAepuD,EAAEyF,MAAMsK,UAG1C/O,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOzE,EAAKyE,MAAOsK,SAAU/O,EAAKyE,MAAMsK,YAE9E/P,EAAEyF,MAAMsK,UAAwC,IAA5B/P,EAAEyF,MAAMsK,SAASzL,QAAgBwwJ,EAAK32I,OAAO/S,OAASrK,EAAAA,EAAAA,UAAAA,MACjFC,EAAK83J,YAAY4G,MAAQ5K,EAAK6K,gBAC9B3+J,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAE7CjhD,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAIzBC,EAAKmgG,QAAQ34C,WAAWL,MAGxBnoD,EAAEyF,MAAMsK,UAAY/P,EAAEyF,MAAMsK,SAASzL,OAAS,GAC9CtD,EAAK83J,YAAY95H,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAE1BC,EAAKoiH,cACNpiH,EAAKyE,MAAMlG,IAAI6uD,eAAeptD,EAAKyE,MAAMsK,UAG7C/O,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOzE,EAAKyE,MAAOsK,SAAU/O,EAAKyE,MAAMsK,WAErF/O,EAAKmgG,QAAQ34C,WAAWL,IACjBnoD,EAAEyF,MAAMsK,UAAwC,IAA5B/P,EAAEyF,MAAMsK,SAASzL,QAAgBwwJ,EAAK32I,OAAO/S,OAASrK,EAAAA,EAAAA,UAAAA,MACjFC,EAAK83J,YAAY1qJ,UAAY0mJ,EAAK6K,gBAClC3+J,EAAK03H,UAAUz3F,cAAc,IAAIghB,YAAY,+BAEvCjiD,EAAEw4D,SAAWx4D,EAAEw4D,QAAQzoD,UAAY/P,EAAEw4D,QAAQzoD,SAASzL,OAAS,GACjEtD,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAGrBC,EAAKmgG,QAAQ34C,WAAWL,IAG5BroD,EAAQg1J,KAGhB9zJ,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0B0+J,GACtCh6J,EAAMvE,KAAKwvB,mBAGfha,EAAOzW,MAAM,sCACRq/J,GACDt+J,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,uBAMjC28C,EAAS07E,WAAa,SAAU/4H,EAAIqwJ,GAChC,IAAI1vJ,EAAOC,KAEX,OAAID,EAAK0wJ,oBAAoBhB,GAClB1vJ,EAAK82J,YAAYz3J,EAAIqwJ,GAErB1vJ,EAAKqzJ,qBAAqB3D,IACjC1vJ,EAAK21J,qBAAqBjG,EAAU1vJ,EAAKqzJ,qBAAqB3D,GAAW1vJ,GAClEA,EAAK82J,YAAYz3J,EAAIqwJ,SAE5BhvH,MAAM,uCAAyCgvH,IAIvD,IAAIkP,EAAY,SAAUv/J,GACtB,IAAIW,EAAOC,KAEX,IAAIknD,EAAOnnD,EAAKmgG,QAAQ94C,UAExB,IACI78C,EACA2yC,EAFA7nB,EAAQt1B,EAAKg6J,SAAS36J,GAI1B,GAAIi2B,EACA9qB,EAAQxK,EAAKk6J,SAAS76J,GACtB89C,EAAUn9C,EAAKyE,MAAMwxB,UAAUX,EAAO9xB,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKzB,IAAIqB,QAAQyG,OAAOivB,MAAO,CAAE9qB,MAAOA,EAAO1F,MAAO0F,SAC5G,CACH,IAAIf,EAAQ,2DAA2D0I,KAAK9S,GAC5EA,EAAKW,EAAKkjF,IAAMz5E,EAAM,GAAKzJ,EAAKmjF,IAAM15E,EAAM,IAC5C6rB,EAAQt1B,EAAKg6J,SAAS36J,MAGlBmL,EAAQxK,EAAKk6J,SAAS76J,GACtB89C,EAAUn9C,EAAKyE,MAAMwxB,UAAUX,EAAO9xB,EAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKzB,IAAIqB,QAAQyG,OAAOivB,MAAO,CAAE9qB,MAAOA,EAAO1F,MAAO0F,KAE/GxK,EAAK03H,UAAU50H,MAAQ0H,GAG/B,MAAMq0J,EAAc,IAAIhgK,SAASC,IAC7BooD,YAAW,KAAQpoD,MAAa,QAEpCD,QAAQwiB,IAAI,CAAC87B,EAAS0hH,IAAclgK,MAAK,SAAUwvB,GAC/CnuB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CACvC0E,MAAOzE,EAAKyE,MAAO+yD,QAASrpC,EAAM,KAGtCnuB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CACvC0E,MAAOzE,EAAKyE,MAAOsK,SAAU,CAACof,EAAM,MAIxCnuB,EAAKzB,IAAI6uD,eAAe,CAACj/B,EAAM,KAE/BnuB,EAAKmgG,QAAQ34C,WAAWL,OAIhCzK,EAASw3G,gBAAkB,SAAU70J,GACjC,IAAIW,EAAOC,KACP6zJ,EAAO,GACX,MAAI,uDAAuD5xH,KAAK7iC,IAAO,+DAA+D6iC,KAAK7iC,IAEvIy0J,EAAK32I,OAAS,CACV/S,KAAMrK,EAAAA,EAAAA,UAAAA,OACNsG,OAAQ,CACJq1B,OAAQ,CACJpmB,IAAKtV,EAAKg4J,aAAa73G,KAAKngD,EAAM,SAAU,OAAO,MAK/D8zJ,EAAK6K,gBAAkB,yCAA2C3+J,EAAKmzJ,aAAe,YAEtFyL,EAAUj+J,KAAKX,EAAMX,GAEdy0J,GAGJ,MAGXp3G,EAASq3G,iBAAmB,SAAU10J,GAClC,IAAIW,EAAOC,KACP6zJ,EAAO,GAEP3uF,EAAQ,IAAI57C,OAAO,IAAMvpB,EAAK0yJ,IAAM,SAAW1yJ,EAAK2yJ,IAAM,aAAe3yJ,EAAK4yJ,IAAM,iBACxF,GAAIztF,EAAMjjC,KAAK7iC,GAAK,CAChB,IAAIoK,EAAQ07D,EAAMhzD,KAAK9S,GAEnB+K,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,WAmBpC,OAjBA+zJ,EAAK32I,OAAS,CACV/S,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKlL,EAAKkL,IACV/F,QAASnF,EAAKmF,QACdmvD,aAAct0D,EAAKs0D,aACnBkxF,cAAexlJ,EAAKwlJ,cACpBh+H,YAAaxnB,EAAKwnB,YAClB4C,WAAY,IAAIhxB,EAAAA,EAAAA,OAAAA,IACZ,IAAIA,EAAAA,EAAAA,OAAAA,QAAkB4G,EAAKimJ,gBAAgBC,eAAgB7mJ,EAAM,GAAGogB,QACpE,IAAIrmB,EAAAA,EAAAA,OAAAA,QAAkB4G,EAAKimJ,gBAAgBe,gBAAiB3nJ,EAAM,GAAGogB,QACrE,IAAIrmB,EAAAA,EAAAA,OAAAA,QAAkB4G,EAAKimJ,gBAAgBgB,eAAgB5nJ,EAAM,GAAGogB,SACxEuH,aAAchnB,EAAKgnB,aACnB/qB,OAAQ+D,EAAK/D,QAGjBytJ,EAAK6K,gBAAkB,iBAAmB3+J,EAAKkzJ,oBAAsB,oCAAsClzJ,EAAKizJ,oBAAsB,YAE/Ha,EAGX,OAAO,MAGXp3G,EAASy4G,SAAW,SAAU91J,GAC1B,IAAIW,EAAOC,KACP6zJ,EAAO,GAEP1pJ,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,MAiBpC,OAfA+zJ,EAAK32I,OAAS,CACV/S,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKlL,EAAKkL,IACV/F,QAASnF,EAAKmF,QACdmvD,aAAct0D,EAAKs0D,aACnBkxF,cAAexlJ,EAAKwlJ,cACpBh+H,YAAaxnB,EAAKqjJ,kBAClB13E,YAAa,IACbvhD,WAAYpqB,EAAKjF,OAAO6sJ,cAAc3yJ,GACtC+xB,aAAchnB,EAAKgnB,aACnB/qB,OAAQ+D,EAAK/D,QAGjBytJ,EAAK6K,gBAAkB,iBAAmB3+J,EAAKkzJ,oBAAsB,oCAAsClzJ,EAAKizJ,oBAAsB,YAE/Ha,GAGXp3G,EAAS24G,cAAgB,SAAUh2J,GAC/B,IAAIW,EAAOC,KACP6zJ,EAAO,GAEP1pJ,EAAOpK,EAAK0wJ,oBAAoB3wJ,EAAAA,EAAAA,WAAAA,eAiBpC,OAfA+zJ,EAAK32I,OAAS,CACV/S,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKlL,EAAKkL,IACV/F,QAASnF,EAAKmF,QACdmvD,aAAct0D,EAAKs0D,aACnBkxF,cAAexlJ,EAAKwlJ,cACpBh+H,YAAaxnB,EAAKqjJ,kBAClB13E,YAAa,IACbvhD,WAAYpqB,EAAKjF,OAAO6sJ,cAAc3yJ,GACtC+xB,aAAchnB,EAAKgnB,aACnB/qB,OAAQ+D,EAAK/D,QAGjBytJ,EAAK6K,gBAAkB,iBAAmB3+J,EAAKkzJ,oBAAsB,oCAAsClzJ,EAAKizJ,oBAAsB,YAE/Ha,GAGXp3G,EAASk4G,kBAAoB,SAAUv1J,EAAIqwJ,GACvC,IACIoE,EAAO,GAEP1pJ,EAHOnK,KAGKywJ,oBAAoBhB,GAepC,OAbAoE,EAAK32I,OAAS,CACV/S,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKlL,EAAKkL,IACV/F,QAASnF,EAAKmF,QACdmvD,aAAct0D,EAAKs0D,aACnBkxF,cAAexlJ,EAAKwlJ,cACpBh+H,YAAaxnB,EAAKqjJ,kBAClB13E,YAAa,IACbvhD,WAAYpqB,EAAKjF,OAAO6sJ,cAAc3yJ,GACtC+xB,aAAchnB,EAAKgnB,aACnB/qB,OAAQ+D,EAAK/D,QAGVytJ,GAGXp3G,EAASs9G,SAAW,SAAUpQ,GAC1B,IAEIt0H,EAFAt1B,EAAOC,KACP6+J,EAAW9+J,EAAKzB,IAAI2B,KAAK66B,QAEzBtxB,EAAQ,+CAA+C0I,KAAKy3I,GAChE,GAAIngJ,GAA0B,IAAjBA,EAAMnG,OACfgyB,EAAQ,CAACztB,WAAW4B,EAAM,IAAK5B,WAAW4B,EAAM,KAC5Cq1J,IACAxpI,EAAQ9xB,EAAAA,EAAAA,KAAAA,UAAkB8xB,EAAOt1B,EAAKzB,IAAIqB,QAAQipC,OAAQ7oC,EAAKzB,IAAI4I,UAGtE,CAED,IADAsC,EAAQ,+DAA+D0I,KAAKy3I,KAC9C,IAAjBngJ,EAAMnG,SACfgyB,EAAQ,CAACztB,WAAW4B,EAAM,IAAK5B,WAAW4B,EAAM,MAC3Cq1J,GACD,OAAOt7J,EAAAA,EAAAA,KAAAA,UAAkB8xB,EAAOt1B,EAAKzB,IAAIqB,QAAQkpC,OAAQ9oC,EAAKzB,IAAI4I,KAK1E,IADAsC,EAAQ,+DAA+D0I,KAAKy3I,KAC9C,IAAjBngJ,EAAMnG,SACfgyB,EAAQ,CAACztB,WAAW4B,EAAM,IAAK5B,WAAW4B,EAAM,MAC3Cq1J,GACD,OAAOt7J,EAAAA,EAAAA,KAAAA,UAAkB8xB,EAAOt1B,EAAKzB,IAAIqB,QAAQkpC,OAAQ9oC,EAAKzB,IAAI4I,KAK9E,OAAOmuB,GAGXonB,EAASu9G,YAAc,SAAU3kI,GAQ7B,QAN0B,SAAU/Z,EAAQ+Z,GACxC,QAAI/Z,aAAkBxa,QACXu0B,EAAM,IAAM/Z,EAAO,IAAM+Z,EAAM,IAAM/Z,EAAO,IAAM+Z,EAAM,IAAM/Z,EAAO,IAAM+Z,EAAM,IAAM/Z,EAAO,GAIzGwjJ,CAPO9+J,KAOkB1B,IAAIqB,QAAQopC,UAAW1T,IAOxDonB,EAASmzG,WAAa,WAElB,OADW5vJ,KACCy3H,UAAU50H,OAG1B45C,EAASw9G,SAAW,SAAU76J,GAC1B,IAAIW,EAAOC,KACP4E,EAASxF,EACTgK,EAAS7F,EAAAA,EAAAA,KAAAA,aAAqBxD,EAAKzB,KAEvC,MAAMygK,EAAiB,SAAUn6J,EAAQ4E,GACrC,IAAIw1J,EAAez7J,EAAAA,EAAAA,KAAAA,YAAoBiG,EAAM,GAAK,IAAMA,EAAM,IAI9D,OAFA5E,GADAA,EAASA,EAAO2E,QAAQC,EAAM,GAAIw1J,EAAa,GAAGn8J,MAAMogE,eAAe75D,EAAQ,CAAE8oH,sBAAuBpyH,EAAAA,EAAAA,iBAAyBumE,sBAAuBvmE,EAAAA,EAAAA,qBACxIyJ,QAAQC,EAAM,GAAIw1J,EAAa,GAAGn8J,MAAMogE,eAAe75D,EAAQ,CAAE8oH,sBAAuBpyH,EAAAA,EAAAA,iBAAyBumE,sBAAuBvmE,EAAAA,EAAAA,qBAK5J,GAAIV,EAAGoK,MAAM,IAAI8f,OAAO,OAASvpB,EAAKkjF,IAAM,cAAgBljF,EAAKoyJ,KAAO,gBAAiB,CAErF,IAAI3oJ,GADJ5E,EAASA,EAAO2E,QAAQxJ,EAAKkjF,IAAKljF,EAAKyyJ,WAAWjpJ,QAAQxJ,EAAKmjF,IAAK,IAAMnjF,EAAKwyJ,WAAWhpJ,QAAQxJ,EAAKoyJ,KAAMpyJ,EAAKsyJ,YAAY9oJ,QAAQxJ,EAAKqyJ,KAAM,IAAMryJ,EAAKuyJ,aACzI9oJ,MAAM,IAAI8f,OAAO,IAAMvpB,EAAKyyJ,UAAU5oI,OAAS,0CAA4C7pB,EAAKwyJ,UAAU3oI,OAAS,qCAClIpgB,IACA5E,EAASm6J,EAAen6J,EAAQ4E,IAGpC,IAAIy1J,EAAyB,IAAIh8F,eAAe75D,GAAQ+vB,UAAU,EAAG,GACrE3vB,EAAQ5E,EAAO4E,MAAM,IAAI8f,OAAO,IAAMvpB,EAAKsyJ,WAAWzoI,OAAS,oBAAsB7pB,EAAK61J,SAAW,8BAAgC71J,EAAKuyJ,WAAW1oI,OAAS,oBAAsB7pB,EAAK81J,SAAW,qBAChMrsJ,IACKme,OAAOy7C,UAAUx7D,WAAW4B,EAAM,OACnC5E,EAASA,EAAO2E,QAAQC,EAAM,GAAIA,EAAM,GAAGD,QAAQ,IAAK01J,KACvDt3I,OAAOy7C,UAAUx7D,WAAW4B,EAAM,OACnC5E,EAASA,EAAO2E,QAAQC,EAAM,GAAIA,EAAM,GAAGD,QAAQ,IAAK01J,WAG7D,GAAI7/J,EAAGoK,MAAM,IAAI8f,OAAO,OAASvpB,EAAKmjF,IAAM,YAAa,CAG5D,MAAM15E,GAFN5E,EAASA,EAAO2E,QAAQxJ,EAAKmjF,IAAKnjF,EAAKwyJ,WAAWhpJ,QAAQxJ,EAAKkjF,IAAK,IAAMljF,EAAKyyJ,YAE1DhpJ,MAAM,IAAI8f,OAAO,IAAMvpB,EAAKwyJ,UAAU3oI,OAAS,0CAA4C7pB,EAAKyyJ,UAAU5oI,OAAS,qCACpIpgB,IACA5E,EAASm6J,EAAen6J,EAAQ4E,SAGjC,GAAIpK,EAAGoK,MAAM,IAAI8f,OAAO,UAAYvpB,EAAK0yJ,IAAjB,cAA4C1yJ,EAAK2yJ,IAAjD,oBAAuF3yJ,EAAK4yJ,IAA5F,oBAA4H,CACvJ,MAAMnpJ,EAAQpK,EAAGoK,MAAM,IAAI8f,OAAO,UAAYvpB,EAAK0yJ,IAAjB,cAA4C1yJ,EAAK2yJ,IAAjD,oBAAuF3yJ,EAAK4yJ,IAA5F,oBAClC/tJ,EAAS7E,EAAK6yJ,UAAYppJ,EAAM,GAAK,KAAOzJ,EAAK8yJ,UAAYrpJ,EAAM,GAAK,KAAOzJ,EAAK+yJ,UAAYtpJ,EAAM,GAE1G,OAAO5E,GAGX63C,EAAS+9G,kBAAoB,SAAUphJ,GACnCA,EAAOA,GAAQ,GA0Bf,IAzBA,IAAIxU,EAAS,IAAI9D,MAAMsY,EAAK/V,QACxB/E,EAAM,IAAI2b,IAAI,CACd,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,OAED/X,EAAI,EAAG+I,EAAMmO,EAAK/V,OAAQnB,EAAI+I,EAAK/I,IACxC0C,EAAO1C,GAAK5D,EAAIkgB,IAAIpF,EAAK2+D,OAAO71E,KAAOkX,EAAK2+D,OAAO71E,GAEvD,OAAO0C,EAAO0F,KAAK,KAGvBmyC,EAAS/hB,YAAc,WACnB,MAAM36B,EAAOC,KACb,OAAID,EAAKwoG,QACE,CACHnpG,GAAIW,EAAKX,GACT8/J,WAAYn/J,EAAK03H,WAAa13H,EAAK03H,UAAU50H,MAC7Cs8J,aAAc5tI,KAAK0vE,UAAUlhG,EAAKwoG,UAYnC,MAGX9rD,EAAS0C,YAAc,SAAUtqC,GAC7B,MAAM9U,EAAOC,KACb,GAAI6U,EAAMsqJ,aAAc,CACpB,IAAIC,EAAqB7tI,KAAKC,MAAM3c,EAAMsqJ,cACtCC,EAAmBhgK,IAAMggK,EAAmB3P,UACxC2P,EAAmB1vD,QACnB3vG,EAAKzB,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACzCA,EAAEyF,QAAUzE,EAAKyE,OACjBzE,EAAKyE,MAAMlG,IAAI6uD,eAAepuD,EAAEyF,MAAMsK,aAIlD/O,EAAKoiH,cAAe,EACpBpiH,EAAKo4H,WAAWinC,EAAmBhgK,GAAIggK,EAAmB3P,UAAU/wJ,MAAK,kBAC9DqB,EAAKoiH,aACZpiH,EAAK03H,UAAU50H,MAAQgS,EAAMqqJ,WAC7Bn/J,EAAKy1I,aAAez1I,EAAKy1I,YAAYz3G,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACtDC,EAAKmgG,QAAQ//E,YAGjBsgB,MAAM,0BA/yEtB,GA+zEKnvB,OAAO9Q,UAAU6uJ,WAClB/9I,OAAO9Q,UAAU6uJ,SAAW,WACxB,IAAIr2E,GAAQh8D,WAAa,CAAC,KAAK,GAC/B,OAAOhd,KAAKuJ,QAAQ,YAAY,SAAUC,EAAO0hC,GAC7C,YAA+B,IAAjB8tC,EAAK9tC,GACf8tC,EAAK9tC,GACH1hC,OAOb8H,OAAO9Q,UAAU6+J,yBAClB/tJ,OAAO9Q,UAAU6+J,uBAAyB,SAAU5nD,GAGhD,IAFA,IAAI6nD,EAAO,GACPh4J,EAAMtH,KAAKmS,MAAMslG,GACZv1G,EAAI,EAAGA,EAAIoF,EAAIjE,OAAQnB,IACxBoF,EAAIpF,GAAG0nB,OAAOvmB,OAAS,GACvBi8J,EAAKl3J,KAAKd,EAAIpF,GAAG0nB,QAEzB,OAAO01I,IAKVhuJ,OAAO9Q,UAAU8uJ,cAClBh+I,OAAO9Q,UAAU8uJ,YAAc,WAC3B,IAAIiQ,EAASv/J,KAAKouB,cACd5kB,EAAQxJ,KAAKouB,cAAc5kB,MAAM,4CACrC,GAAIA,EACA,IAAK,IAAItH,EAAI,EAAGA,EAAIsH,EAAMnG,OAAQnB,IAC1B,0BAA0B+/B,KAAKz4B,EAAMtH,MACrCq9J,EAASA,EAAOh2J,QAAQC,EAAMtH,GAAIsH,EAAMtH,GAAG09C,gBAIvD,OAAO2/G,EAAOxnF,OAAO,GAAGn4B,cAAgB2/G,EAAOpmI,UAAU,KAK5Dh6B,OAAOqB,UAAUC,eAAeC,KAAKI,MAAMN,UAAW,mBACvDrB,OAAOqgK,eAAe1+J,MAAMN,UAAW,iBAAkB,CACrDi/J,YAAY,EACZ78J,UAAU,EACVC,MAAO,SAAU8tD,EAAc9tD,GAC3B,IAAK,IAAIX,EAAI,EAAGA,EAAIlC,KAAKqD,OAAQnB,IAC7B,GAAIlC,KAAKkC,GAAGyuD,IAAiB9tD,EACzB,OAAO7C,KAAKkC,MAM3BoP,OAAO9Q,UAAUsuB,WAClBxd,OAAO9Q,UAAUsuB,SAAW,SAAU4wI,EAAcpzJ,GAChD,IAAIqzJ,EAAgB3/J,KAAKijB,YACD,iBAAb3W,IAA0BszJ,SAAStzJ,IAAa/K,KAAKonD,MAAMr8C,KAAcA,GAAYA,EAAWqzJ,EAAct8J,UACrHiJ,EAAWqzJ,EAAct8J,QAE7BiJ,GAAYozJ,EAAar8J,OACzB,IAAIw8J,EAAYF,EAAc32J,QAAQ02J,EAAcpzJ,GACpD,OAAsB,IAAfuzJ,GAAoBA,IAAcvzJ,IAIjD,MACA,EADe/I,EAAAA,EAAAA,QAAAA,Q,gFCzvJfA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,gBAA6B+hF,EAAAA,QAC7B,MACA,EADwB/hF,EAAAA,EAAAA,QAAAA,iB,2rCCCxBA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAAG,IAAA+4E,EAAA,IAAA95E,QAAAs9J,EAAA,IAAArtJ,QAAAstJ,EAAA,IAAAttJ,QAE9B,MAAMutJ,UAAcj6E,EAAAA,QAShBtmF,c,UACIG,SAASod,WAAWnK,EAAA,KAAAktJ,GAAAltJ,EAAA,KAAAitJ,GAAAjgK,EAAA,yBATJ,KAAGA,EAAA,oBACR,SAAOA,EAAA,qBACN,SAAOA,EAAA,qBACP,eAAaA,EAAA,yBAAAA,EAAA,wB,EAAA,CAAA+C,UAAA,EAAAC,WAAA,G,IAAA,K,EAAAy5E,G,WAOzB,MAAMv8E,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bt5C,EAAAjD,EAAIu8E,EAAcr4E,EAAAA,EAAAA,OAAYlE,EAAKJ,QAAQ48E,YACtCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAW9J,EAAChD,EAAIu8E,IAItC//B,eACI,MAAO,eAGX3xC,eAAetM,GACX,MAAMyB,EAAOC,KA+Bb,aA7BMJ,MAAMimC,SAASnlC,KAAKX,EAAMzB,GAChCyB,EAAKy8C,cAAe,EAEpBz8C,EAAKkgK,UAAYlgK,EAAK4hC,gBAAgB,gCACtC5hC,EAAKmgK,SAAWngK,EAAK4hC,gBAAgB,0BAErC5hC,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAwB,SAAU6N,GAC1C,MACMqnF,EADOh1F,KACM0M,IAAIsL,cAAc,4BACjCg9E,IACAA,EAAM32C,QAAQq/B,QAAS,UAHd19E,KAMD1B,IAAIorD,qBAClBxJ,KAAKngD,IASPzB,EAAIqb,QAAO,KACF5Z,EAAK2M,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,YAC7BC,EAAK29E,YAIN39E,EAGX6K,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBE,EAAwB,+BAExBz0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEvO,EAAKsJ,SAAWA,EAGpBuB,aAAa2tB,GACT,MAAMx4B,EAAOC,KACb+C,EAAAhD,EAAIu8E,GAAYnvE,gBAAkBpN,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,MAC/E,MAAMjxC,EAAgBzL,MAAMm9C,WAAWr8C,KAAKX,EAAM,CAAEg+E,UAAWh+E,EAAKX,KACpEW,EAAK+8C,qBAAqBzxC,SACpBA,EAGFsB,SAASwzJ,uBAAyBxzJ,SAASwzJ,sBAAsB,UACjEpgK,EAAK2M,IAAIhB,iBAAiB,UAAUnE,SAAQ,SAAU4mE,GAClDA,EAAIpwC,UAAUC,OAAO,WAEzBj+B,EAAK2M,IAAIhB,iBAAiB,oBAAoBnE,SAAQ,SAAUytF,UACrDA,EAAM32C,QAAQ+hH,sBAI7BrgK,EAAK2M,IAAIsL,cAAc,MAAMpM,iBAAiB,SAAS,SAAU+B,GAC7D5N,EAAK29E,YAIJz5E,EAAAA,EAAAA,gBACDlE,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,sBAAsBve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAGpFC,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,wBAAwBv8C,EAAKu8C,qBAAqB1wC,iBAAiB,SAAS,SAAU7M,GAClH,MAAMovE,EAAMpvE,EAAE0O,OACdoI,EAAA9V,EAAI+/J,EAAAO,GAAA3/J,KAAJX,EAAuBouE,GAAK,MAGhCpuE,EAAK2M,IAAIhB,iBAAkB,IAAG3L,EAAKu8C,wBAAwBv8C,EAAKu8C,kBAAkB/0C,SAAQC,IACtFA,EAAIoE,iBAAiB,SAAShB,eAAgB7L,GAC1C,MAAMovE,EAAMpvE,EAAE0O,aAEdoI,EAAM9V,EAAI+/J,EAAAO,GAAA3/J,KAAJX,EAAuBouE,GAE7BxhE,SAAS2zJ,YAAY,QAErBnyF,EAAIpgE,YAAchO,EAAK4hC,gBAAgB,UAEvCslB,YAAW,WACPknB,EAAIpgE,YAAchO,EAAK4hC,gBAAgB,QACvC9rB,EAAA9V,EAAIggK,EAAAQ,GAAA7/J,KAAJX,KACD,WAIXA,EAAK2M,IAAIsL,cAAc,oBAAoBpM,iBAAiB,SAAS,SAAU7M,GAC3E8W,EAAA9V,EAAI+/J,EAAAO,GAAA3/J,KAAJX,EAAuBhB,EAAE0O,WAI7B1N,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,mBAAmB1wC,iBAAiB,SAAShB,eAAgB+C,GACrG,MAAM0H,QAAYtV,EAAKy+H,gBACvB,GAAInpH,EAAK,CACL,MAAMqsB,EAAOjP,mBAAmBpd,EAAM,MAClCqsB,EAAKr+B,OAAStD,EAAKygK,mBACnBzgK,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,uBAAwB,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,UAExE2R,OAAOY,SAASR,KAAO,gBAAkB6vB,MAKjD3hC,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,gBAAgB1wC,iBAAiB,SAAS,SAAU+B,GAC5F,MAAM8yJ,EAAc19J,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,gBAC3DmkH,EAAYtzJ,UAAY,GAEpBpK,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,kBAAkBve,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAC5EC,EAAK6mF,WAAW65E,EAAa,KAAK/hK,MAAK,SAAUmoF,GACzCA,GACA5iF,EAAAA,EAAAA,UAAelB,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,uBAI9Dr4C,EAAAA,EAAAA,UAAelB,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,uBAI9D,MAAMokH,EAAkB,SAAUC,EAAKtrJ,EAAKurJ,GACpCvrJ,GAAOA,EAAIuU,OAAOvmB,OAAS,EAC3Bs9J,EAAItuJ,SAASR,KAAO+uJ,EAAQvrJ,IAE5B9R,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,2BAC9Bg/H,EAAI3zJ,UAKZjN,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,sBAAsB1wC,iBAAiB,SAAS,SAAU+B,GAClG,MAAMkzJ,EAAIpvJ,OAAOrE,OACjBrN,EAAKy+H,gBAAgB9/H,MAAK,SAAU2W,GAChCqrJ,EAAgBG,EAAGxrJ,GAAK,SAAUA,GAC9B,MAAO,gDAAkDod,mBAAmBpd,YAMxFtV,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,qBAAqB1wC,iBAAiB,SAAS,SAAU+B,GACjG,MAAMkzJ,EAAIpvJ,OAAOrE,OACjBrN,EAAKy+H,gBAAgB9/H,MAAK,SAAU2W,GAChCqrJ,EAAgBG,EAAGxrJ,GAAK,SAAUA,GAE9B,MAAO,yCADMod,mBAAmBhhB,OAAO9E,SAASpC,MAAQkH,OAAO9E,SAASpC,MAAQ,mBACrB,QAAUkoB,mBAAmBpd,YAMhGpR,EAAAA,EAAAA,gBACAlE,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,sBAAsB1wC,iBAAiB,SAAS,SAAU+B,GAClG5N,EAAKy+H,gBAAgB9/H,MAAKkM,eAAgByK,GACtC,IAAIyrJ,EAAS,wBAETzuJ,SAASR,UADDzN,IAARiR,EACgByrJ,EAASruI,mBAAmBpd,GAE5ByrJ,EAASruI,yBAAyB1yB,EAAK8nF,sBAOvE9nF,EAAK2M,IAAIsL,cAAe,gBAAejY,EAAKu8C,sBAAsB1wC,iBAAiB,SAAShB,eAAgB+C,GACxG,IAAIozJ,QAAoBhhK,EAAK8nF,eACzBm5E,EAAgBr0J,SAASpC,MAEzBtG,EAAAA,EAAAA,eAEAw8B,MAAM1gC,EAAKkgK,WACJxuJ,OAAOwvJ,SAAWxvJ,OAAOwvJ,QAAQC,SAExCzvJ,OAAOwvJ,QAAQC,SAASF,EAAeD,EAAa,IAC7CtvJ,OAAOwvJ,SAAW,WAAWh/H,KAAK66B,UAAUC,YAActrD,OAAO0vJ,OAAS1vJ,OAAO2vJ,OAGxF3vJ,OAAOY,SAASR,KAAOkvJ,EACvBtgI,OAAO,OAAOwB,KAAK66B,UAAUC,WAAa,MAAQ,QAAUh9D,EAAKmgK,WAE1DzuJ,OAAO4vJ,UAAY,gBAAiB5vJ,OAAO4vJ,SAElD5vJ,OAAO4vJ,SAASC,YAAYP,EAAaC,IAGzCvvJ,OAAOY,SAASR,KAAOkvJ,EACvBtgI,OAAO,OAAOwB,KAAK66B,UAAUC,WAAa,MAAQ,QAAUh9D,EAAKmgK,cAIrEj8J,EAAAA,EAAAA,WAAgBs0B,IAChBA,IAsDRgpI,cACI,IAAI38J,EAAS6M,OAAOY,SAASR,KAI7B,OAHIJ,OAAOY,SAASo8C,OAChB7pD,EAASA,EAAOgiB,OAAO,EAAGhiB,EAAOoE,QAAQyI,OAAOY,SAASo8C,QAEtD7pD,EAGXqjF,sBAAsBC,GAClB,MAAMnoF,EAAOC,KAEQD,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,eAExCve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBooF,EAAgB5b,SAEtDvpE,EAAAhD,EAAIu8E,GAAYtkE,cAAe,IAAGjY,EAAKu8C,kBAC/Cve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBooF,EAAgBE,IAGrEx9E,qBAAqByK,GACjB,MAAMtV,EAAOC,KACPinC,EAAY5xB,SAAatV,EAAK8nF,eACpC,OAAI5gD,EACO,wBAA0BlnC,EAAKyhK,aAAe,WAAazhK,EAAK0hK,cAAgB,WAAax6H,EAAY,cAE7G,GAGXw8D,mBACI,MAAM1jG,EAAOC,KACb,IAAI4E,EAAS,KACb,MAAM88J,EAAgBz9J,EAAAA,EAAAA,mBAAwBlE,EAAK4hK,eACnD,GAAID,EAAe,CACf,IAAI7gE,EACJ,IACIA,EAAatvE,KAAKC,MAAMW,mBAAmBk/C,OAAO5/D,OAAOo/D,KAAK6wF,MAElE,MAAOzrJ,GACH1S,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,yBAA0B7hC,EAAAA,EAAAA,aAAAA,OAExD+gG,GAAc9gG,EAAKzB,MACfuiG,EAAWtgG,KACXR,EAAKzB,IAAI8rD,SAAS,CACdhrD,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,OACNyK,MAAOxK,EAAK4hC,gBAAgB,OAC5ByjD,MAAOrlF,EACPsvB,SAAS,IACV3wB,MAAK,SAAU8F,GACdzE,EAAK6hK,kBAAoBp9J,EACzBA,EAAM26C,YAAY,CAAErwC,SAAU,CAAC+xF,KAAeniG,MAAK,WAC/CqB,EAAKzB,IAAI6uD,eAAe3oD,EAAMsK,gBAKtClK,EAASi8F,GAIrB,OAAOj8F,EAGXgG,eACI,MAAM7K,EAAOC,KACPg1F,EAAQj1F,EAAK2M,IAAIsL,cAAc,4BACrC,GAAkC,IAA9Bg9E,EAAMnyF,MAAM+mB,OAAOvmB,OAAc,CACjC,MAAM+7B,QAAar/B,EAAK8nF,eACxB9nF,EAAKioF,oBACLgN,EAAMnyF,MAAQu8B,EACdr/B,EAAK2M,IAAIsL,cAAc,+BAA+BnV,YAAc9C,EAAK8hK,eAAeziI,IAIhGx0B,qBACI,MAAM7K,EAAOC,KACP8hK,EAAqB/hK,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,eACrDylH,EAAYhiK,EAAK2M,IAAIhB,iBAAkB,IAAG3L,EAAKu8C,4BAC/C0lH,EAAUjiK,EAAK2M,IAAIhB,iBAAkB,IAAG3L,EAAKu8C,wBAC7C7b,EAAQ1gC,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UACxDwlH,EAAmB/jI,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACjCiiK,EAAUx6J,SAAQ06J,GAAMA,EAAG7kI,UAAW,IACtC4kI,EAAQz6J,SAAQ4mE,IACZA,EAAIpwC,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAClBquE,EAAI/wC,UAAW,KAEnBqD,EAAM1C,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACpB,MAAM8E,QAAemhF,EAAAA,QAAAA,UAAAA,aAAAA,KAAoChmF,GAQzD,OAPAgiK,EAAUx6J,SAAQ06J,GAAMA,EAAG7kI,UAAW,IACtC4kI,EAAQz6J,SAAQ4mE,IACZA,EAAI/wC,UAAW,EACf+wC,EAAIpwC,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,YAEzBgiK,EAAmB/jI,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACpC2gC,EAAM1C,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAChB8E,GAGd,eAAAy7J,EApJ2B74J,EAAK06J,GACzB,MAAMniK,EAAOC,KACPg1F,EAAQxtF,EAAIg1D,cAAcxkD,cAAc,oBAE9C,GAAIkqJ,GACA,GAAIltE,EAAM32C,QAAQq/B,SAAWsX,EAAM32C,QAAQ8jH,UAAW,CAClD,MAAMt/J,QAAc9C,EAAKy+H,gBACrB37H,GAASA,EAAM+mB,OAAOvmB,OAAS,GAE/BmE,EAAIuG,YAAchO,EAAK4hC,gBAAgB,aACvCslB,YAAW,WACPz/C,EAAIuG,YAAchO,EAAK4hC,gBAAgB,WACvC9rB,EAAA9V,EAAIggK,EAAAQ,GAAA7/J,KAAJX,KACD,YAEIi1F,EAAM32C,QAAQq/B,OACrBsX,EAAM32C,QAAQ8jH,WAAY,EAC1BntE,EAAMnyF,MAAQA,EAEdmyF,EAAMtwF,kBAGCswF,EAAM32C,QAAQq/B,cACdsX,EAAM32C,QAAQ8jH,UACrBntE,EAAMnyF,YAAc9C,EAAK8nF,sBAI5BmN,EAAMj3D,UAAU8gB,SAAS,UAGtBm2C,EAAM32C,QAAQq/B,gBACPsX,EAAM32C,QAAQq/B,cACdsX,EAAM32C,QAAQ8jH,UACrBntE,EAAMnyF,YAAc9C,EAAK8nF,gBAL7BmN,EAAMnyF,YAAc9C,EAAK8hK,iBAS7B7sE,EAAMtwF,SAEb,SAAA67J,IAGG5zJ,SAAS+5F,eAAe07D,kBACxBz1J,SAAS+5F,eAAe27D,SAAS11J,SAAS21J,eA0GlD/+J,EAAAA,EAAAA,QAAAA,MAAmBy8J,EACnB,W,oGC1VAz8J,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMg/J,EAAa,WACf,IAAIxiK,EAAOC,KACXD,EAAKyiK,IAAM,KACXziK,EAAK0iK,kBAAoB,KAEzB13J,EAAAA,EAAAA,MAAchL,EAAMid,WAEpBjd,EAAK2iK,QAAU,KACf3iK,EAAK4iK,aAAe,MAGxBp/J,EAAAA,EAAAA,QAAWg/J,EAAYx3J,EAAAA,GAEvB,WACIjL,EAAAA,EAAAA,IAAAA,WAAwB,wCACxB,IAAI8iK,EAAW9iK,EAAAA,EAAAA,IAAAA,WACfyG,EAAAA,EAAAA,gBAAsBA,EAAAA,EAAAA,iBAAuB,GAC7CA,EAAAA,EAAAA,gBAAAA,KAAyBzG,EAAAA,EAAAA,IAAAA,YAEzB,IAAI28C,EAAW8lH,EAAW/hK,UAE1Bi8C,EAASH,MAAQ,YAEjB,MAAMumH,EAAuB,WACzB,IAAIhjI,EAAQlzB,SAASk5C,YAAY,cACjChmB,EAAM46E,UAAU,UAAU,GAAM,IACpBz6G,KAAK1B,IAAIoO,IAAIsL,cAAc,WAAavG,QAChDuuB,cAAcH,IAGtB,IAKI1f,EAAQ,SAAU4tC,GAClB,MAAMtkB,EAAOskB,EAAI20G,QACXI,EAAkB,WACpBr5H,EAAKkX,oBAAoB,gBAAiBmiH,GAC1CD,EAAqBniK,KAAKqtD,IAG9BtkB,EAAK79B,iBAAiB,gBAAiBk3J,GAGvC77G,YAAW,WACP47G,EAAqBniK,KAAKqtD,KAC3B,KAECA,EAAIzvD,IAAI0I,UAAY+mD,EAAIg1G,cACxBh1G,EAAIg1G,aAAarmH,MAAO,EACxBqR,EAAIzvD,IAAI2I,OAAOqyI,WAAW0pB,iBAG1Bj1G,EAAIvpD,MAAM2zB,gBACd41B,EAAIrhD,IAAIsL,cAAc,IAAM+1C,EAAIzR,MAAQ,QAAQve,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACjEiuD,EAAIrhD,IAAIsL,cAAc,IAAM+1C,EAAIzR,MAAQ,SAASve,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAClEiuD,EAAIk1G,OAAOllI,UAAUC,OAAO+vB,EAAIzR,MAAQ,WACxCyR,EAAI40G,aAAe,MA0CvBlmH,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAERD,EAAK2iK,UACN3iK,EAAK2iK,QAAUn/J,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ+iK,SAC3C3iK,EAAK2iK,QAAQ3kI,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,QAASx8C,EAAAA,EAAAA,QAAAA,QAC5CC,EAAKJ,QAAQ+iK,SACdpkK,EAAIoO,IAAIwyE,sBAAsB,cAAen/E,EAAK2iK,UAI1D,MAAM99J,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAErDyB,EAAKkjK,OAASljK,EAAKzB,IAAIoO,IAEvB3M,EAAK61D,uBAAyB71D,EAAKzB,IAAI2B,KAAK21D,uBAE5C,IAAIstG,EAAe,OAAS3hK,KAAKysH,SAAW,GAAG/qG,SAAS,IAAIkW,UAAU,GAEtE1nB,OAAOyxJ,GAAgB,kBACZzxJ,OAAOyxJ,IAElB,MAAMtlG,EAAgB79D,EAAKJ,QAAQi+D,eAAiBt/D,EAAIqB,QAAQi+D,cAC5DA,IACAglG,GAAY,QAAUhlG,EAAgB,aAAeslG,GAGzDnjK,EAAKyE,MAAQ,KACbzE,EAAKgjK,aAAe,KAEpB,IADA,IAAI9jJ,EAAUlf,EAAK4mC,SACVzkC,EAAI,EAAGA,EAAI5D,EAAI4rC,WAAW7mC,OAAQnB,IAAK,CAC5C,IAAIsC,EAAQlG,EAAI4rC,WAAWhoC,GAC3B,GAAIsC,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAMpF,KAAO6f,EAAS,CAChElf,EAAKyE,MAAQA,EACb,OA8DR,OA3DKzE,EAAKyE,OACNlG,EAAIqb,QAAO,WACPrb,EAAI8rD,SAAS,CACThrD,GAAI6f,EACJmmE,MAAOrlF,EACPsvB,SAAS,EACTllB,KAAMrK,EAAAA,EAAAA,UAAAA,SACPpB,MAAK,SAAU8F,GACdzE,EAAKyE,MAAQA,QAKzBzE,EAAKsL,gBAAgB3M,MAAK,WACtB,oCAAsBA,MAAK,SAAUW,GACjC,MACM8jK,EAAO,IAAIC,EADG/jK,EAAOiP,SACEvO,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SAAU,CAC7E+mH,YAActjK,EAAKujK,WAAavjK,EAAKkjK,QAAWljK,EAAKzB,IAAIoO,MAE7Dy2J,EAAK90J,GAAG,aAAa,SAAUV,GA9H9B,IAAUogD,GAAAA,EA+HAhuD,GA9Hf2M,IAAIsL,cAAc,IAAM+1C,EAAIzR,MAAQ,QAAQve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAC9DiuD,EAAIk1G,OAAOllI,UAAUnjB,IAAImzC,EAAIzR,MAAQ,cA+H7B6mH,EAAK90J,GAAG,WAAW,SAAUV,IAlG3B,SAAUogD,GACpB,IAAInpD,GAAS,EACb,MAAMupE,EAAMpgB,EAAIrhD,IAAIsL,cAAc,IAAM+1C,EAAIzR,MAAQ,QAC9C6mH,EAAOp1G,EAAIrhD,IAAIsL,cAAc,IAAM+1C,EAAIzR,MAAQ,SAErD,IAAIinH,EAAUp1F,EAAIrf,wBACd00G,EAAWL,EAAKr0G,wBAEpB,GADAq0G,EAAKplI,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACf0jK,EAASrvF,IAAMovF,EAAQpvF,KAAOqvF,EAASrvF,IAAMovF,EAAQlvF,QACrDmvF,EAASpvF,KAAOmvF,EAAQnvF,MAAQovF,EAASpvF,KAAOmvF,EAAQjvF,MAAO,CAE/D1vE,GAAS,EAET,IAAI0W,EAASyyC,EAAIzvD,IAAIyoB,YACjB8uC,EAAK,CAACv6C,EAAO,GAAIA,EAAO,IAC5B,IAAKyyC,EAAIzvD,IAAI0I,SACT,IAAK,IAAI9E,EAAI,EAAGA,EAAI,GAAIA,IACpB6rD,EAAIvpD,MAAMwxB,UAAU6/B,EAAI,CACpBz2D,GAAI,SACJynE,SAAU,gBAAkB3kE,EAC5BowB,MAAO,GACPC,OAAQ,GACR3gB,OAAQ,CAAC,EAAG,KAKxB,IAAI6xJ,EAAU11G,EAAIk1G,OAAOn0G,wBACrBtK,GAAQg/G,EAASpvF,KAAOovF,EAASlvF,OAAS,EAAImvF,EAAQrvF,KACtD3vB,EAAO++G,EAASnvF,OAASovF,EAAQtvF,IACjCz0E,EAASquD,EAAI6H,uBAAuB,CAACpR,EAAMC,IAC/CsJ,EAAIx1B,SAAS74B,QAGbygB,EAAM4tC,GAiEElvD,CAAQkB,GACRojK,EAAKO,YAAY,EAAG,SAIf3jK,EAAK2iK,QACb1qJ,cAAc,IAAMjY,EAAKu8C,MAAQ,cAAc1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC/FA,EAAE+uE,kBACF/tE,EAAK4jK,cACN,CAAE31J,SAAS,OAEZ,WACEzK,EAAAA,EAAAA,MAAS,sCAGjBjF,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACtC,MAAM0qC,EAAO1qC,EAAE0qC,KAEXA,IAAS3pC,EAAAA,EAAAA,KAAAA,QACTC,EAAKkjK,OAASjjK,KAAKiH,OAAOgtD,UAC1Bl0D,EAAK61D,uBAA0Bl2D,IAC3B,MAAMkkK,EAAU5jK,KAAKiH,OAAO48J,kBAAkBnkK,GAC9C,MAAO,CAACkkK,EAAQrhF,IAAKqhF,EAAQthF,OAG1B74C,IAAS3pC,EAAAA,EAAAA,KAAAA,UAChBC,EAAKkjK,OAASjjK,KAAK0M,IACnB3M,EAAK61D,uBAAyB71D,EAAKzB,IAAI2B,KAAK21D,2BAGpDt3D,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACnCA,EAAE+kK,gBAAkB/jK,EAAKgjK,eACzBhjK,EAAK4iK,aAAe5jK,EAAEglK,UACtBhkK,EAAKyiK,IAAIkB,YAAY,CAAEM,IAAKjlK,EAAE60F,UAAU,GAAItR,IAAKvjF,EAAE60F,UAAU,SAG9DhvF,GAGX63C,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtBk6D,EAAsB,6BAEtBzuI,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBw7F,GAAqBxpI,QAC7DvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,WACd,MAAM98C,EAAOC,KAEb,OAAOD,EAAK+8C,qBAAqB,IAAIl+C,SAAQ,SAAUC,EAASk1B,GAC5Dh0B,EAAKg9C,WAAW,MAAM,WAClBh9C,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,QAAS,MAAM59C,MAAK,SAAUggF,GAK5Dz3B,YAAW,WACPlnD,EAAK2iK,QAAQv1J,UAAYuxE,EACzB7/E,EAAQkB,KAEN,QAaLoW,OAAM,SAAUsD,GACblW,EAAAA,EAAAA,MAASkW,cAM7B,IAAI29C,EAAS,EAEb3a,EAASlkB,SAAW,SAAU74B,GAC1B,IAAIK,EAAOC,KACPikK,EAAU,YACVC,EAAS,SAAUzgK,GACnB,GAAI1D,EAAKyiK,IAAK,CACV,IAAIzsG,EAAStyD,EAAQgC,YACrB,MAAM0+J,EAAS5gK,EAAAA,EAAAA,KAAAA,UAAkB,EAAEwyD,EAAO,GAAKA,EAAO,IAAM,GAAIA,EAAO,GAAKA,EAAO,IAAM,GAAIh2D,EAAKzB,IAAI+yD,SAAU4yG,GAChHlkK,EAAKyiK,IAAIkB,YAAY,CAAEM,IAAKG,EAAO,GAAI7hF,IAAK6hF,EAAO,OAIvDC,EAAS,SAAU3gK,GACnB,GAAI1D,EAAKyiK,IAAK,CACV,IAAIzsG,EAAStyD,EAAQgC,YACrB1F,EAAK4iK,aAAep/J,EAAAA,EAAAA,KAAAA,UAAkB,EAAEwyD,EAAO,GAAKA,EAAO,IAAM,GAAIA,EAAO,GAAKA,EAAO,IAAM,GAAIh2D,EAAKzB,IAAI+yD,SAAU4yG,KAIzH/lF,EAAKn+E,EAAKzB,IAAIw1D,sBACdoqB,IACA9mB,EAAS8mB,EAAG92B,QAAQgQ,IAGxB,MAAM6rG,EAASljK,EAAKkjK,OAEpB,IAAIoB,EAAY,SAAUC,EAAI3jK,GAI1B,IAAIk1D,EACAs4D,EACJ,GAJApuH,EAAKyE,MAAM2zB,gBAIPmsI,EAAI,CACJ,IAAIjiF,EAASiiF,EAAGv/E,cAChBlvB,EAAKtyD,EAAAA,EAAAA,KAAAA,UAAkB,CAAC8+E,EAAO2hF,MAAO3hF,EAAOC,OAAQ2hF,EAASlkK,EAAKzB,IAAI+yD,UACvE88D,EAAUm2C,EAAGC,SAASp2C,aAGtBt4D,EAAKn2D,EACLyuH,EAAU,EAuBd,GArBIpuH,EAAKzB,IAAI0I,SACTjH,EAAKgjK,aAAehjK,EAAKzB,IAAI2I,OAAOo9J,UAAUxuG,EAC1CtyD,EAAAA,EAAAA,KAAAA,wBAAgC,iBAAmBhC,KAAKirC,MAAM,GAAO2hF,EAAU,KAAO,IAAM,IAC5FpuH,EAAKgjK,eAIThjK,EAAKzB,IAAI03B,UAAU6/B,EAAI,CACnBgR,SAAU,iBAAmBtlE,KAAKirC,MAAM,GAAO2hF,EAAU,KAAO,IAAM,GACtE77F,MAAO,GACPC,OAAQ,GACR3gB,OAAQ,CAAC,kBAAoB,mBAC7BpN,MAAOzE,EAAKyE,MACZH,YAAY,IAEhBzF,QAAQwiB,IAAIrhB,EAAKzB,IAAIotD,iBAAiBhtD,MAAK,WAEvCqB,EAAKyE,MAAMvE,KAAKukK,cAAa,EAAMN,EAAQE,OAI/CzjK,EAAQ,CACR,IAAIwzD,EAAY,WACPp0D,EAAKzB,IAAI0I,SAGVjH,EAAKzB,IAAI2I,OAAOktD,UAAU0B,GAF1B91D,EAAKzB,IAAI61D,UAAU0B,IAMvBotG,EAAOllI,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,WAC1Bq0D,IAGAlN,WAAWkN,EAAW,QAoBlC5wD,EAAAA,EAAAA,QACKkO,OAAOgzJ,SAAWA,OAAOC,KAC1B9B,GACA,WAEI,GAAInxJ,OAAOgzJ,OAAQ,CACfJ,IACA,MAAM56H,EAAO1pC,EAAK2iK,QACZyB,EAAS5gK,EAAAA,EAAAA,KAAAA,UAAkB7D,EAAQK,EAAKzB,IAAI+yD,SAAU4yG,GACtDU,EAAa,IAAIF,OAAOC,KAAKE,OAAOT,EAAO,GAAIA,EAAO,KAG1C,IAAIM,OAAOC,KAAKG,mBACxBC,YAAY,CAClBzyJ,SAAUsyJ,EACVI,WAAYN,OAAOC,KAAKM,qBAAqBC,OAC9C,SAAUC,EAAgBC,GACzB,GAAIA,IAAaV,OAAOC,KAAKU,iBAAiBC,GACtCnnF,GACAA,EAAG32B,WAAW6P,GAElBnQ,YAAW,WACP1jD,EAAAA,EAAAA,MAAS4hK,IAAaV,OAAOC,KAAKU,iBAAiBE,aAAevlK,EAAK4hC,gBAAgB,gBAAkB5hC,EAAK4hC,gBAAgB,2BAC9H5hC,EAAKyE,MAAMvE,KAAKukK,cAAa,GAC7BrkJ,EAAMpgB,KACP,SAEF,CACD,MAAM+iK,EAAkB,SAAU/jK,GAC9B,GAAKgB,EAAKwlK,iBAIa,UAAnBxmK,EAAE4xD,cAA+C,WAAnB5xD,EAAE4xD,cAA2B,CAE3D5wD,EAAKwlK,gBAAiB,EAElBrnF,GACAA,EAAG32B,WAAW6P,GAGlB,MAAMojD,EAAc7tG,SAASk5C,YAAY,cACzC20D,EAAYC,UAAU,UAAU,GAAO,GACvCwoD,EAAOjjI,cAAcw6E,GAErBqoD,EAAqBniK,KAAKX,GAC1B0pC,EAAKkX,oBAAoB,gBAAiBmiH,GAE1C,IAAI0C,EAAY,CACZl5J,SAAUq4J,EACVc,IAAK,CACDt3C,QAAS,EACTu3C,MAAO,GAEXC,KAAM,EACNC,mBAAmB,EACnBC,mBAAoB,CAChBv5J,SAAUm4J,OAAOC,KAAKoB,gBAAgBC,UAE1CC,kBAAmB,CACf15J,SAAUm4J,OAAOC,KAAKoB,gBAAgBC,UAE1CE,kBAAkB,GAGjBlmK,EAAKyiK,KAkCNziK,EAAKyiK,IAAIjkE,WAAWinE,GACpBzlK,EAAKyiK,IAAI0D,YAAW,KAlCpBnmK,EAAKyiK,IAAM,IAAIiC,OAAOC,KAAKyB,mBAAmB18H,EAAM+7H,GACpDf,OAAOC,KAAK7kI,MAAMumI,YAAYrmK,EAAKyiK,IAAK,oBAAoB,WACxD6B,EAAUtkK,EAAKyiK,IAAK/4H,EAAK1L,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,aAEhDC,EAAKsmK,gBAAkB,WACnB,IAAIl4C,EAEAA,EADApuH,EAAKzB,IAAI0I,UACEjH,EAAKyiK,IAAI+B,SAASp2C,SAAW,KAAOpuH,EAAKzB,IAAI2I,OAAOq/J,gBAAgBn4C,QAErEpuH,EAAKyiK,IAAI+B,SAASp2C,QA3FjD,SAAUtnD,GAUpB,IAAA0/F,EATL,GAAKxmK,EAAKzB,IAAI0I,SAUO,QAAjBu/J,EAAAxmK,EAAKgjK,oBAAY,IAAAwD,GAAjBA,EAAmBC,SAAyB,IAAhBjlK,KAAKysH,SAAiBzqH,EAAAA,EAAAA,KAAAA,wBAAgCsjE,SATlF,GAAI9mE,EAAKyE,MAAMsK,UAAY/O,EAAKyE,MAAMsK,SAASzL,OAAS,EAAG,CACvD,IAAIojK,EAAe1mK,EAAKyE,MAAMsK,SAAS,UAChC23J,EAAa9mK,QAAQ0V,IAC5BoxJ,EAAa9mK,QAAQknE,SAAWA,EAEhC4/F,EAAa/gK,SAAS+gK,EAAa9mK,UAsFX+mK,CAAa,iBAAmBnlK,KAAKirC,MAAM,GAAO2hF,EAAU,KAAO,IAAM,KAE7EpuH,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,aAA2BC,EAAKsmK,iBAC5C5B,OAAOC,KAAK7kI,MAAMumI,YAAYrmK,EAAKyiK,IAAK,cAAeziK,EAAKsmK,iBAC5D5B,OAAOC,KAAK7kI,MAAMumI,YAAYrmK,EAAKyiK,IAAK,kBAAkB,WACtD,IAAI2C,EAAWplK,EAAKyiK,IAAImE,YAEpBxB,IAAaV,OAAOC,KAAKU,iBAAiBC,KAC1CtlK,EAAKyiK,IAAI0D,YAAW,GACpB3iK,EAAAA,EAAAA,MAAS4hK,IAAaV,OAAOC,KAAKU,iBAAiBE,aAAevlK,EAAK4hC,gBAAgB,gBAAkB5hC,EAAK4hC,gBAAgB,2BAC1H5hC,EAAK4iK,cACL5iK,EAAKyiK,IAAI0D,YAAW,GACpBnmK,EAAKyiK,IAAIkB,YAAY,CAAEM,IAAKjkK,EAAK4iK,aAAa,GAAIrgF,IAAKviF,EAAK4iK,aAAa,OAGzE5iK,EAAKyE,MAAMvE,KAAKukK,cAAa,GAC7BzkK,EAAK4jK,oBAe7B,GAHA5jK,EAAKwlK,gBAAiB,EACtB97H,EAAK79B,iBAAiB,gBAAiBk3J,IAElC/iK,EAAKJ,QAAQ+iK,UAAYO,EAAOllI,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,aAA6B,CAGjF,MAAM2jK,EAAUR,EAAOn0G,wBACvB/uD,EAAK2iK,QAAQ/8J,MAAM4sB,OAASkxI,EAAQlxI,OAAS,KAC7CxyB,EAAK2iK,QAAQ/8J,MAAM2sB,MAAQmxI,EAAQnxI,MAAQ,KAE/C,MAAMs0I,EAAYtuJ,SAAS7G,OAAOs1D,iBAAiBk8F,GAAQv2H,OAAQ,IAEnEu2H,EAAOllI,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WACrBmjK,EAAOt9J,MAAM2sB,MAAQvyB,EAAKJ,QAAQknK,QAAU,OAC5C5D,EAAOt9J,MAAM4sB,OAASxyB,EAAKJ,QAAQmnK,QAAU,OACzC/mK,EAAKzB,IAAI0I,WACTjH,EAAKzB,IAAIoO,IAAI/G,MAAMg3C,QAAU,QACjClT,EAAK9jC,MAAMyuE,KAAO,GAClB3qC,EAAK9jC,MAAMwuE,IAAM,GACjB1qC,EAAK1L,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACtB2pC,EAAK1L,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAEnB,MAAMinK,EAAazuJ,SAAS7G,OAAOs1D,iBAAiBt9B,GAAMiD,OAAQ,IAC9Dk6H,GAAaG,IACb9D,EAAOt9J,MAAM+mC,OAAUq6H,EAAa,GAIxC9/G,YAAW,WACP67G,EAAgB,CAAEnyG,aAAc,YACjC,KAEH,MAAMynD,EAASzrG,SAAS+0B,KAAK1pB,cAAc,UACvCogG,IACAA,EAAOzyG,MAAMg3C,QAAU,QAMvB58C,EAAKzB,IAAIw/C,gBACT/9C,EAAKmxF,uBAAyBnxF,EAAKzB,IAAIw/C,cACvC/9C,EAAKzB,IAAIw/C,cAAcE,YAAW,IAGtCqmH,EAAUtkK,EAAKyiK,cAKvBriJ,EAAMpgB,MAEX,GAAO,IAGlB08C,EAASknH,UAAY,WACjB,MAAM5jK,EAAOC,KACPijK,EAASljK,EAAKkjK,OACdx5H,EAAO1pC,EAAK2iK,QAEZsE,EAAa,WACf/D,EAAOllI,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WACxBmjK,EAAOt9J,MAAM2sB,MAAQ2wI,EAAOt9J,MAAM4sB,OAAS0wI,EAAOt9J,MAAM+mC,OAAS,GAC7D3sC,EAAKzB,IAAI0I,WACTjH,EAAKzB,IAAIoO,IAAI/G,MAAMg3C,QAAU,IACjC,MAAM69D,EAAc7tG,SAASk5C,YAAY,cACzC20D,EAAYC,UAAU,UAAU,GAAO,GACvCwoD,EAAOjjI,cAAcw6E,GACrBz6G,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,aAA2BC,EAAKsmK,kBAE3CY,EAAgB,gBAChBnE,EAAkB,SAAU/jK,GACP,UAAnBA,EAAE4xD,cAA+C,WAAnB5xD,EAAE4xD,eAChClnB,EAAKkX,oBAAoBsmH,EAAenE,GACxCkE,MAGRv9H,EAAKkX,oBAAoBsmH,EAAenE,GACxCr5H,EAAK79B,iBAAiBq7J,EAAenE,GACrC77G,WAAW+/G,EAAY,KAElBjnK,EAAKJ,QAAQ+iK,UAGd3iK,EAAK2iK,QAAQ/8J,MAAM6hI,eAAe,UAClCznI,EAAK2iK,QAAQ/8J,MAAM6hI,eAAe,UAEtC/9F,EAAK1L,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACnB2pC,EAAK1L,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACtB2pC,EAAK9jC,MAAM4sB,OAASkX,EAAK9jC,MAAM2sB,MAAQ,GACvCvyB,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,SAASve,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QACpEC,EAAKyE,MAAMvE,KAAKukK,cAAa,GAC7BrkJ,EAAMpgB,GACNA,EAAKyiK,IAAI0D,YAAW,GACpB,MAAM9tD,EAASzrG,SAAS+0B,KAAK1pB,cAAc,UACvCogG,IACAA,EAAOzyG,MAAMg3C,QAAU,IAGvB58C,EAAKmxF,wBACLnxF,EAAKmxF,uBAAuBrzC,YAphBxC,GAyhBAt6C,EAAAA,EAAAA,QAAAA,WAAwBg/J,EACxB,W,iICvkBAh/J,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAMonC,EAAM,WACR,MAAM5qC,EAAOC,KACb07E,EAAAA,QAAAA,MAAkB37E,EAAMid,YAG5BzZ,EAAAA,EAAAA,QAAWonC,EAAK+wC,EAAAA,SAEhB,WACI,IAAIj/B,EAAW9R,EAAInqC,UAEnBi8C,EAASH,MAAQ,aAIjBG,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KACP4E,EAAS82E,EAAAA,QAAAA,UAAAA,SAAAA,KAAoC37E,EAAMzB,GAMzD,OAJAA,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,sBAAmC,SAAUf,GAChDgB,EAAKmnK,uBAAuBnoK,MAGzB6F,GAGX63C,EAASyqH,uBAAyB,SAAUnoK,GACxC,MAAMgB,EAAOC,KACTjB,GAAKA,EAAEyF,QACPzF,EAAEyF,MAAMlG,IAAMyB,EAAKzB,IACnByB,EAAKzB,IAAI8rD,SAASrrD,EAAEyF,OAAO9F,MAAK,SAAUouD,GACtC/sD,EAAKw+E,gBAAgBx/E,EAAEyF,YAKnCi4C,EAASO,oBAAsB,WAC3B,MAAMj9C,EAAOC,KACbD,EAAK2M,IAAId,iBAzBI,QAyByBrI,EAAAA,EAAAA,YAAAA,mBAAkC,wBAAwB,SAAUxE,GACtG,MAAMspF,EAAWtpF,EAAE0O,OACnB,IAAIoxE,EAAKwJ,EAGT,GAAIA,EAAS7rB,cAAcne,QAAQp/B,QAAS,CACxC,MAAMza,EAAQzE,EAAKzB,IAAIqhB,SAAS0oE,EAAS7rB,cAAcne,QAAQp/B,SAE/D,GAAIopE,EAASzoD,SAAWyoD,EAAS7rB,cAAc9wD,iBAAiB,yBAAyBrI,OAAS,EAAG,CAEjG,MAAM8jK,EAAc,OAAS3iK,aAAiBuY,EAAAA,EAAU,MAAQhd,EAAKu8C,MAAQ,SAAU,IAAM,sBACvF5V,EAAO5lC,MAAMoX,KAAKnZ,EAAE0O,OAAO+uD,cAAc9wD,iBAAiBy7J,IAAc7oK,KAAKsiD,GACxEA,EAAG4b,cAAcne,QAAQugC,WAEpCp6E,EAAM+P,kBAAkBmyB,EAAM2hD,EAASzoD,UAI/C,KAAOi/C,IAAOA,EAAGt1D,QAAQ,MAAQxpB,EAAKu8C,MAAQ,QAC1CuiC,EAAKA,EAAGriB,cAEZ,MAAM+iB,EAAM,GACZ,IAAIr9E,EACJ,IAAKA,EAAI,EAAGA,EAAI28E,EAAGxqE,SAAShR,OAAQnB,IAAK,CACrC,MAAM+hB,EAAQ46D,EAAGxqE,SAASnS,GACJ,OAAlB+hB,EAAMiyD,SACNqJ,EAAIn3E,KAAK6b,GAGjB,IAAK/hB,EAAI,EAAGA,EAAIq9E,EAAIl8E,OAAQnB,IAAK,CAC7B,MAAMg8E,EAAKqB,EAAIr9E,GACf,GAAIg8E,EAAGr/B,SAASwpC,GAAW,CACvB,MAAM7jF,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SAC3C,IAAIzb,EAAS6kF,EACb,GACI7kF,EAASA,EAAOg5D,oBAGbh5D,GAA6B,OAAnBA,EAAO0yE,UAAqB1xE,EAAMwQ,kBAAkBxR,EAAO66C,QAAQugC,WACpF,MAAMxqE,EAAM5Q,EAAO66C,QAAQugC,UACtBp6E,EAAM6O,iBAAmBg1E,EAASzoD,SAASp7B,EAAMM,cAAcujF,EAASzoD,SAC7Ep7B,EAAM+P,kBAAkBH,EAAKi0E,EAASzoD,SACtC,OAIR7gC,EAAE+uE,sBAEN/tE,EAAK2M,IAAId,iBAAiB9L,EAAAA,EAAAA,MAAAA,QAAsByD,EAAAA,EAAAA,YAAAA,mBAAkC,UAAYxD,EAAKu8C,MAAQ,iBAAiB,SAAUv9C,GAClIA,EAAE0O,OAAO+vE,OACT,MAAMU,EAAKn/E,EAAE0O,OAAO+uD,cACpB,IAAK0hB,EAAGngD,UAAU8gB,SAAS9+C,EAAKu8C,MAAQ,SAAU,CAC9C4hC,EAAGngD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,WACTo+E,EAAGlmE,cAAc,MACzB+lB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,WACpBf,EAAE+uE,wBAKdrxB,EAASihC,OAAS,SAAUl5E,GACxB,IAEI4iK,EAAe,SAAUlpF,GACzB,IAAK,IAAIh8E,EAAI,EAAG+I,EAAMizE,EAAG7pE,SAAShR,OAAQnB,EAAI+I,EAAK/I,IAAK,CACpD,MAAM+hB,EAAQi6D,EAAG7pE,SAASnS,GAC1B,GAAI+hB,EAAMsF,QAAQ,wBACd,OAAOtF,EAGf,OAAO,MAGX,MAAMi6D,EAZKl+E,KAYK27H,qBAAqB/yH,MAAKy+J,GAAMA,EAAGhpH,QAAQp/B,UAAYza,EAAMpF,KAC7E,IAAK8+E,EAAI,OAET15E,EAAMgQ,KAAO,KACb,MAAMA,EAAOhQ,EAAM0P,SAAQ,GACrBozJ,EAAYF,EAAalpF,GAC/BopF,EAAU1nI,QAAUp7B,EAAM6O,gBAEtBi0J,EAAU1nI,SAAWp7B,EAAMwQ,kBAAkBR,EAAKJ,IAAKI,KAAU1U,EAAAA,EAAAA,WAAAA,cACjEwnK,EAAU1nI,SAAU,EACpB0nI,EAAUC,eAAgB,GAE1BD,EAAU1nI,SAAWp7B,EAAMwQ,kBAAkBR,EAAKJ,IAAKI,KAAU1U,EAAAA,EAAAA,WAAAA,cACjEwnK,EAAU1nI,QAAU0nI,EAAUC,eAAgB,GAElDrpF,EAAGxyE,iBAAiB,MAAMnE,SAAQ,SAAUwZ,GACxC,MAAMsnE,EAAW++E,EAAarmJ,GACxB3M,EAAM2M,EAAEs9B,QAAQugC,SACtB,OAAQp6E,EAAMwQ,kBAAkBZ,EAAKI,IACjC,KAAK1U,EAAAA,EAAAA,WAAAA,QACDuoF,EAASzoD,SAAU,EACnByoD,EAASk/E,eAAgB,EACzB,MACJ,KAAKznK,EAAAA,EAAAA,WAAAA,YACDuoF,EAASzoD,SAAU,EACnByoD,EAASk/E,eAAgB,EACzB,MACJ,KAAKznK,EAAAA,EAAAA,WAAAA,0BACDuoF,EAASzoD,SAAU,EACnByoD,EAASk/E,eAAgB,EACzB,MACJ,KAAKznK,EAAAA,EAAAA,WAAAA,YAIL,KAAK,KAEDuoF,EAASzoD,SAAU,EACnByoD,EAASk/E,eAAgB,EACzB,MACJ,QAAS,CAEL,MAAM9yJ,EAAOjQ,EAAM2P,SAASC,EAAKI,GAC3BnP,GAAYlG,OAAOqB,UAAUC,eAAeC,KAAK+T,EAAM,cAAeA,EAAKpP,UACjF,IAAIoP,EAAKJ,WAAYI,EAAKJ,SAAShR,QAAYmB,aAAiBotB,EAAAA,EAO5Dy2D,EAASzoD,QAAUv6B,EACnBgjF,EAASk/E,eAAgB,MAR4C,CACrE,MAAMC,EAAwB/yJ,EAAKJ,SAASU,OAAMvM,GAAKA,EAAEnD,WAAcmD,EAAEsM,iBAAmBtM,EAAEsM,kBAAoBhV,EAAAA,EAAAA,WAAAA,UAC5G2nK,EAAuBhzJ,EAAKJ,SAASU,OAAMvM,IAAMA,EAAEnD,WAAcmD,EAAEsM,iBAAmBtM,EAAEsM,kBAAoBhV,EAAAA,EAAAA,WAAAA,cAClHuoF,EAASzoD,QAAU4nI,EACnBn/E,EAASk/E,eAAiBC,IAA0BC,QAUpE3mK,MAAMoX,KAAKgmE,EAAG1hB,cAAc9wD,iBAAiB,WAtElC1L,KAsEoDs8C,MAAQ,WAAWpsB,UAAU3oB,SAASwZ,IACjG,MAAM2mJ,IAAgBxpF,EAAG1hB,cAAcxkD,cAAc,sBAAwB+I,EAAEs9B,QAAQugC,SAAW,gCAC5F+oF,IAAmBzpF,EAAG1hB,cAAcxkD,cAAc,sBAAwB+I,EAAEs9B,QAAQugC,SAAW,sCAC/FgpF,IAAuB1pF,EAAG1hB,cAAcxkD,cAAc,sBAAwB+I,EAAEs9B,QAAQugC,SAAW,sCACzG79D,EAAE/I,cAAc,SAASuvJ,cAAiBG,GAAeC,GAAmBC,EAC5E7mJ,EAAE/I,cAAc,SAAS4nB,QAAU8nI,IAAgBC,IAAmBC,MAI9EnrH,EAAS6hC,YAAc,SAAU95E,GAC7B,MAAMzE,EAAOC,KACP6nK,EAAuB,SAAU3pF,EAAI15E,GAClC05E,GACLA,EAAGxyE,iBAAiB,MAAMnE,SAAQ,SAAUC,GACxC,MAAM4M,EAAM5M,EAAI62C,QAAQugC,SACxBp3E,EAAIu2B,UAAUS,OAAOz+B,EAAKu8C,MAAQ,oBAAqB93C,EAAMuP,iBAAiBK,QAGjF5P,EAMDqjK,EAAqB9nK,EAAK47H,qBAAqB/yH,MAAKy+J,GAAMA,EAAGhpH,QAAQp/B,UAAYza,EAAMpF,KAAKoF,GAL5FzE,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC2pF,EAAqB3pF,EAAIn+E,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,cAOlEw9B,EAAS8hC,gBAAkB,SAAU/5E,GACjC,IAAIzE,EAAOC,KAENwE,EAAMuO,QAAWvO,EAAM7E,QAAQ0vB,UAChCqsD,EAAAA,QAAAA,UAAAA,gBAAAA,KAA2C37E,EAAMyE,GAEjDzE,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UAAUve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAClEC,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAAWv8C,EAAK0+E,WAAWj6E,EAAMpF,KAC9DV,MAAK,SAAUggF,GACZ,MACMC,GADS,IAAInhE,WACEE,gBAAgBghE,EAAK,aAAah9C,KAAKxqB,WACtD9C,EAAMuqE,EAAMtgC,QAAQugC,SACpBV,EAAKn+E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,0BAA4BloC,EAAM,OACnFrU,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,yBAA2B93C,EAAMpF,GAAK,MACpF,GAAK8+E,GAyBE,GAAI15E,aAAiBotB,EAAAA,EAAQ,CAChC,MAAMw8B,EAAK,MAAQruD,EAAKu8C,MAAQ,MAC1Bw9E,EAAS,MAAQ/5H,EAAKu8C,MAAQ,UAC9B7nC,EAAO,MAAQ1U,EAAKu8C,MAAQ,QAC5BwrH,EAAO,MAAQ/nK,EAAKu8C,MAAQ,QAE5ByrH,EAAuBjnK,MAAMoX,KAAKgmE,EAAGxyE,iBAAiB,gEAAgEzD,QAAO,SAAU+/J,EAAejhI,GAExJ,OADAihI,EAAc5/J,KAAK2+B,EAAasX,QAAQugC,UACjCopF,IACR,IACH9pF,EAAG/wE,UAAYwxE,EAAMxxE,UACrB+wE,EAAG9wD,aAAa,QAASuxD,EAAM/gD,aAAa,UACvCsgD,EAAG7/B,QAAQp/B,UACZi/D,EAAG7/B,QAAQp/B,QAAUza,EAAMpF,IAE/B8+E,EAAGxyE,iBAAiB0iD,EAAK,IAAM0rE,EAAS,IAAMA,EAAS,IAAM1rE,EAAK,IAAM0rE,EAAS,IAAMrlH,GAAMlN,SAAQ,SAAU0gK,GAEtGA,EAAM1+I,QAAQu+I,IACK,OAAlBG,EAAM/xF,SAAoB6xF,EAAqB5sJ,MAAK+sJ,GAAmBA,IAAoBD,EAAM5pH,QAAQugC,YACzF,OAAlBqpF,EAAM/xF,SAAoB6xF,EAAqB5sJ,MAAK+sJ,GAAmBA,IAAoBD,EAAMzrG,cAAcne,QAAQugC,YAEvHqpF,EAAMlqI,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,mBA9CvB,CACL6+E,EAAMtgC,QAAQp/B,QAAUza,EAAMpF,GAC9B,MAAMy/E,EAAK9+E,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,OAG/CxyB,EAAQ/pB,EAAKzB,IAAI4rC,WAAWlhC,QAAQxE,GACrCslB,EAID+0D,EAAGxqE,SAASyV,EAAQ,GAAGo1D,sBAAsB,WAAYP,GAHzDE,EAAGK,sBAAsB,aAAcP,GAM3C,MAAMvwB,EAAK,MAAQruD,EAAKu8C,MAAQ,MAC1Bw9E,EAAS,MAAQ/5H,EAAKu8C,MAAQ,UAC9B7nC,EAAO,MAAQ1U,EAAKu8C,MAAQ,QAC5BwrH,EAAO,MAAQ/nK,EAAKu8C,MAAQ,QAClCqiC,EAAMjzE,iBAAiB0iD,EAAK,IAAM0rE,EAAS,IAAMA,EAAS,IAAM1rE,EAAK,IAAM0rE,EAAS,IAAMrlH,GAAMlN,SAAQ,SAAU0gK,GACzGA,EAAM1+I,QAAQu+I,IACfG,EAAMlqI,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,cAGxB0E,aAAiBuY,EAAAA,GACjB4hE,EAAM3mE,cAAc,0BAA0B+lB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QA4BpEC,EAAK29E,OAAOl5E,GACZzE,EAAKu+E,YAAY95E,MAEpB2R,OAAM,SAAUsD,GACblW,EAAAA,EAAAA,MAASkW,QAIzBgjC,EAASqO,YAAc,SAAUtmD,GACxBA,EAAMuO,QACP2oE,EAAAA,QAAAA,UAAAA,YAAAA,KAAuC17E,KAAMwE,IAIrDi4C,EAASy/E,sBAAwB,SAAU13H,GACvC,MAAMzE,EAAOC,KACbD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,GAAIA,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,GAAI,CACjC,IAAI+oK,GAAY3jK,EAAM6O,gBAClB80J,GACAjqF,EAAGxyE,iBAAiB,wBAAwBnE,SAAQ,SAAU8gF,GAC1DA,EAASzoD,SAAWuoI,EAChB3jK,aAAiBotB,EAAAA,GACjBptB,EAAM+P,kBAAkB8zE,EAAS7rB,cAAcne,QAAQugC,UAAU,MAGrEp6E,aAAiBuY,EAAAA,GACjBhd,EAAKzB,IAAIqhB,SAAS,SAASe,cAAc,KAIzClc,aAAiBuY,EAAAA,GAAUmhE,EAAGlmE,cAAc,uCAC5CxT,EAAMkc,cAAc5f,MAAMoX,KAAKgmE,EAAGxyE,iBAAiB,MAAQ3L,EAAKu8C,MAAQ,UACnEr0C,QAAO,CAAC+wB,EAAIC,IAAgBD,EAAG3wB,OAAO4wB,EAAGolB,QAAQt4B,YAAc,UAOxF02B,EAAS2iC,iBAAmB,SAAUtyB,EAAQuyB,EAASC,KAIvD7iC,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP49E,EAAsB,6BACtBw8C,EAAwB,+BACxBv8C,EAAsB,+BAEtBx0E,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,kBAAoB89E,GAAuB9rH,QACjEjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBuhC,GAAqBvvE,QAC7DvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KAEb,OAAO+K,EAAAA,EAAAA,UAAAA,OAAAA,KAA8BhL,GAAM,WAEvC,IAAIgxD,EAAiBhxD,EAAKJ,QAAQwqC,UAAY,GAE9C,GAAI4mB,EAAe1tD,OAAS,EAAG,CAC3B,IAAI0qD,EAAMgD,EAAe,GACrBq3G,EAASz7J,SAASC,cAAc,OACpC7M,EAAK2M,IAAIG,YAAYu7J,GACrBroK,EAAKzB,IAAI6M,WAAW4iD,EAAIllD,KAAM5E,EAAAA,EAAAA,OAAY,CAAE,IAAOmkK,GAAUr6G,EAAIpuD,UAGjEsE,EAAAA,EAAAA,WAAgBs0B,IAChBA,QAKZkkB,EAASk/E,mBAAqB,WAC1B,MACM/2H,EAAS,GACTyP,EAFOrU,KAES0M,IAAIsL,cAAc,MAF3BhY,KAEwCs8C,MAAQ,OAAOjoC,SACpE,IAAK,IAAInS,EAAI,EAAG+I,EAAMoJ,EAAShR,OAAQnB,EAAI+I,EAAK/I,IAAK,CACjD,MAAM+hB,EAAQ5P,EAASnS,GACD,OAAlB+hB,EAAMiyD,SACNtxE,EAAOwD,KAAK6b,GAGpB,OAAOrf,GAGX63C,EAAS/hB,YAAc,aAGvB+hB,EAAS0C,YAAc,SAAUC,KA1VrC,GA+VA77C,EAAAA,EAAAA,QAAAA,IAAiBonC,EACjB,W,0FC1UApnC,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3B,MAAM+hF,EAAe,WACjB,MAAMvlF,EAAOC,KAEbghF,EAAAA,QAAAA,MAAgBjhF,EAAMid,WAEtBjd,EAAK8lF,eAAiB,IAAM9lF,EAAKu8C,OAKrC,IACQG,EAHRl5C,EAAAA,EAAAA,QAAW+hF,EAActE,EAAAA,UAGjBvkC,EAAW6oC,EAAa9kF,WAEnB87C,MAAQ,cAEjBG,EAAS6kC,SAAW12E,iBAChB,MAAM7K,EAAOC,KAEbD,EAAKwK,MAAQxK,EAAKwK,OAASxK,EAAK4hC,gBAAgB5hC,EAAKJ,QAAQ4K,OAAS,gBACtExK,EAAK2M,IAAIsL,cAAc,MAAM7K,UAAYpN,EAAKwK,MAE9CxK,EAAKgxD,eAAexpD,SAAQ,CAACwmD,EAAK7rD,KAC9B,IAAI6/E,EAAU,GACVt0B,EAAa,QAGArpD,IAAb2pD,EAAIllD,WAAsCzE,IAAhB2pD,EAAIpuD,SAC9B+H,QAAQC,IAAI,8CAEZo6E,EAAUh0B,EAAIllD,KACd4kD,EAAaM,EAAIpuD,UAEjBoiF,EAAU5iF,OAAOD,KAAK6uD,GAAKnlD,MAAKH,GAAe,UAARA,IACvCglD,EAAaM,EAAIg0B,IAGrBhiF,EAAKohF,aAAaj/E,GAAKnC,EAAKzB,IAAI6M,WAAW42E,EAASx+E,EAAAA,EAAAA,KAAAA,OAAe,CAC/DnE,GAAIW,EAAK2mC,KAAKxkC,GACdwK,IAAK3M,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QAAUp6C,IAC1DurD,OAGP,MAAM46G,EAAaz9J,eAAgBmjD,EAAKtmD,SAC9BsmD,EAAI1iD,gBACV,MAAMd,EAAQxK,EAAK4hC,gBAAgB5hC,EAAKgxD,eAAetpD,GAAK8C,QAAUwjD,EAAIrhD,IAAIsL,cAAc,MAAM7K,UAClG,IAAI3J,EAASuqD,EAAIrhD,IACjB,GACIlJ,EAASA,EAAOg5D,oBAEbh5D,IAAWA,EAAO+lB,QAAQxpB,EAAK8lF,iBACtCriF,EAAOwU,cAAe,kBAAiBjY,EAAKX,UAAUqI,OAAS2R,KAAO7O,GAGpE4/B,QAAiBvrC,QAAQwiB,IAAIrhB,EAAKohF,cACxC,IAAK,IAAIj/E,EAAI,EAAG+I,EAAMk/B,EAAS9mC,OAAQnB,EAAI+I,EAAK/I,IAAK,CACjD,MAAM6rD,EAAM5jB,EAASjoC,GACrB6rD,EAAIxP,iBAAmBx+C,QACjBsoK,EAAWt6G,EAAK7rD,GAE1B,OAAOnC,GAGX08C,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,CAC7CghC,UAAWh+E,EAAKX,GAChBmL,MAAOxK,EAAKwK,MACZy7E,iBAAkBjmF,EAAKJ,QAAQqmF,iBAC/B77C,SAAUpqC,EAAKgxD,iBAChB,WAEChxD,EAAK2M,IAAIhB,iBAAiB,aAAanE,SAAQ0+E,IAC3C,MAAMx4E,EAASw4E,EAAIx4E,OAIyB,IAAIyjH,kBAAiB,SAAUC,GACvEA,EAAU5pH,SAAQ,SAAU8pH,GACpBA,EAAS5jH,OAAOswB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,YACnCuxH,EAAS5jH,OAAOswB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,iBAITmO,QAAQR,EAAQ,CAAE/E,YAAY,IAElEu9E,EAAI1tD,SAAW,WACPv4B,KAAKyE,UACLgJ,EAAOswB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,eAYC,iBAA1BC,EAAKmhF,kBACZnhF,EAAK2M,IAAIhB,iBAAiB,aAAa3L,EAAKmhF,kBAAkBonF,UAG1C,mBAAb/vI,GACPA,SAKZkkB,EAAS8rH,UAAY,SAAUz+I,GAC3B,MACMm8D,EADOjmF,KACI0M,IAAIhB,iBAAiB,aAAaoe,GAC/Cm8D,IACAA,EAAIxhF,UAAW,IAIvBg4C,EAASiC,iBAAmB,SAAU5zC,GAClC,MAAM/K,EAAOC,KACbD,EAAK0hF,cAAc/iF,MAAKyrC,IACpB,MAAMq+H,EAAer+H,EAASnhC,QAAQ8B,GACtC,GAAI09J,GAAgB,EAAG,CACnB,IAAIC,EAAmBD,EACnBtqH,EAAcpzC,EAClB,GACI29J,GAAoBA,EAAmB,GAAKt+H,EAAS9mC,OACrD66C,EAAc/T,EAASs+H,SAEpBvqH,EAAY7B,YAAc6B,IAAgBpzC,GAC7C29J,IAAqBD,GACrBzoK,EAAKwoK,UAAUE,QAOnCllK,EAAAA,EAAAA,QAAAA,aAA0B+hF,EAC1B,W,oGCtHA/hF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAW,GACrBA,EAAAA,EAAAA,KAAAA,OAAiBmlK,EAAAA,QAEjB,MAAMC,EAAS,WACX59J,EAAAA,EAAAA,MAAc/K,KAAMgd,YAKxB,IAEQy/B,EAJRl5C,EAAAA,EAAAA,QAAWolK,EAAQ59J,EAAAA,IAIX0xC,EAAWksH,EAAOnoK,WAEb87C,MAAQ,YAEjBG,EAAS5W,SAAW,SAAUvnC,GAC1B,MAAMyB,EAAOC,KAEP4E,EAASmG,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAQrD,OANAA,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GAClCA,EAAE0qC,OAAS3pC,EAAAA,EAAAA,KAAAA,QACXC,EAAK89C,cAINj5C,GAGX63C,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,uCADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAASM,WAAa,SAAU54C,EAAMo0B,GAClC,MAAMx4B,EAAOC,KAEb,OAAO+K,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAMoE,GAAM,WACjDpE,EAAK6sD,OAAS7sD,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,QAExDv8C,EAAK6sD,OAAOhhD,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAEzCC,EAAK6sD,OAAOxvB,WAIXr9B,EAAKzB,IAAI0I,UAGVjH,EAAK6sD,OAAOxvB,UAAW,EAEvB75B,EAAAA,EAAAA,KAAAA,OAAAA,QAAuB,CACnBg1B,SAAU,WACNx4B,EAAK6sD,OAAOx/B,aAAa,QAASrtB,EAAK4hC,gBAAgB,eAEvD5hC,EAAK6sD,OAAO7uB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SAE7BC,EAAK6sD,OAAOxvB,UAAW,MAV/Br9B,EAAK89C,cAcV,CAAE7vC,SAAS,IAEVzK,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,QAKZkkB,EAASoB,SAAW,WAChB,IAAI99C,EAAOC,KAEND,EAAKzB,IAAI0I,WACVjH,EAAK6sD,OAAOxvB,UAAW,GAG3Br9B,EAAK6oK,oBAAoBloK,KAAKX,GAE9B,MAMM8oK,EAAiB,WACnB9oK,EAAK6sD,OAAOxvB,UAAW,GAGtBr9B,EAAKzB,IAAI2I,QAAWlH,EAAKzB,IAAI0I,UAC9BzD,EAAAA,EAAAA,KAAAA,OAAAA,MAAqB,CAAEjF,IAAKyB,EAAKzB,IAAKqB,QAASI,EAAKJ,QAAS29C,gBAAiBv9C,EAAKu9C,gBAAiB/kB,SAAUswI,IAV9G9oK,EAAK6sD,OAAOx/B,aAAa,QAASrtB,EAAK4hC,gBAAgB,mBAEvD5hC,EAAK6sD,OAAO7uB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UAgBlC28C,EAASuB,WAAa,WAGlBjzC,EAAAA,EAAAA,UAAAA,WAAAA,KAFW/K,OAKfy8C,EAASmsH,oBAAsB,WAC3B,IAAI7oK,EAAOC,KACP4E,GAAS,EAGb,GAAK6M,OAAOq3J,sBAKL,CACH,IAAIzrG,EAAS1wD,SAASC,cAAc,UAEhCm8J,EAAe,CACfv9E,OAAO,EACPw9E,SAAS,EACTC,8BAA8B,GAGlC,IACI,IAAIC,EAAK7rG,EAAOkV,WAAW,QAASw2F,IAChC1rG,EAAOkV,WAAW,qBAAsBw2F,IACxC1rG,EAAOkV,WAAW,YAAaw2F,IAC/B1rG,EAAOkV,WAAW,YAAaw2F,GAC9BG,EAiBDtkK,GAAS,GAfTmkK,EAAaE,8BAA+B,GAC5CC,EAAK7rG,EAAOkV,WAAW,QAASw2F,IAC5B1rG,EAAOkV,WAAW,qBAAsBw2F,IACxC1rG,EAAOkV,WAAW,YAAaw2F,IAC/B1rG,EAAOkV,WAAW,YAAaw2F,KAM/BnkK,EAAS,OACT7E,EAAKopK,UAAW,GAJhBvkK,GAAS,GAUnB,MAAO7F,GACL2I,QAAQC,IAAI5I,GAGhB,GAAe,SAAX6F,IAAsBA,EAAQ,CAC9B,IAAImrI,EAAqB,SAAXnrI,EAAoB,+BAAiC,uBACnE7E,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgBouG,GAAU,CAC1C5lI,KAAMrK,EAAAA,EAAAA,QAAAA,QACNuwD,SAAU,MAIlB,OAAOzrD,EA9CPA,GAAS,GAoDrBrB,EAAAA,EAAAA,QAAAA,OAAoBolK,EACpB,W,6OCxKAplK,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,SAAcq+C,EAAAA,EACdr+C,EAAAA,EAAAA,OAAY2B,EAAAA,EAGZ,MAAMkkK,EAAU,WACZ,MAAMrpK,EAAOC,KAEb+nI,EAAAA,QAAAA,MAAoB/nI,KAAMgd,WAC1Bjd,EAAK4rJ,wBAA0B5rJ,EAAKJ,QAAQgsJ,0BAA2B,EAEvE5rJ,EAAK8lF,eAAiB,IAAM9lF,EAAKu8C,MAEjCv8C,EAAKyE,MAAQ,KAEbzE,EAAKw4B,SAAWh1B,EAAAA,EAAAA,KAAAA,WAAmByZ,UAAU,IACzCA,UAAU,GACVjd,EAAKJ,QAAQ44B,SAAWx4B,EAAKJ,QAAQ44B,SAAW,KACpDx4B,EAAKqyF,eAAiB,GACtBryF,EAAKspK,sBAAqE,kBAAtCtpK,EAAKJ,QAAQ2pK,sBAAqCvpK,EAAKJ,QAAQ2pK,qBACnGvpK,EAAKwpK,gBAAkBxpK,EAAKypK,mBAAqBzpK,EAAK0pK,kBAA6D,kBAAlC1pK,EAAKJ,QAAQ+pK,kBAAiC3pK,EAAKJ,QAAQ+pK,iBACvInmK,EAAAA,EAAAA,KAAAA,WAAmBxD,EAAKJ,QAAQgqK,mCACjC5pK,EAAK4pK,gCAAkC5pK,EAAK6pK,yBAEhD7pK,EAAKqG,OAASrG,EAAKJ,QAAQyG,QAAU,CACjCivB,MAAO,CACHuW,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,EACfprC,OAAQ,GAEZ20B,KAAM,CACFuW,YAAa,UACbC,YAAa,EACbC,cAAe,GAEnB37B,QAAS,CACLu7B,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,EACbC,cAAe,KAK3BzoC,EAAAA,EAAAA,QAAW6lK,EAASrhC,EAAAA,SAEpB,WACI,IAAI8hC,EAAqB,EACzB,MAIMC,EAAe,SAAU/7G,GAC3B,MAAM8nC,EAAgB9nC,EAAIqmC,mBAC1BrmC,EAAIg8G,SAAS3sI,WAAa0/B,UAAUgyB,QAAU+G,GAAiBA,EAAcO,aAAeroC,EAAIi8G,WAG9Fz7B,EAAe,SAAUxgF,EAAKm5E,GAEhC,GADAn5E,EAAIrhD,IAAIsL,cAAc+1C,EAAI83B,eAAiB,SAAS9nD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBonI,IAAYn5E,EAAIvpD,SAAWupD,EAAIvpD,MAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwBiuD,EAAIvpD,MAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MAClLiuD,EAAIvpD,OAASupD,EAAIvpD,MAAMylK,SAAU,CACjC,MAAMC,EAAiB3mK,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,OAAAA,MAAkBwqD,EAAIvpD,MAAMylK,SAAS11I,sBAAsBhxB,EAAAA,EAAAA,OAAAA,KAC/FwqD,EAAIo8G,WAAWpsI,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBoqK,GAE5Dn8G,EAAIrhD,IAAIsL,cAAc+1C,EAAI83B,eAAiB,SAAS9nD,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBonI,IAG3FkjC,EAAyB,SAAUr8G,GACrC+7G,EAAa/7G,GACb,MAAM8nC,EAAgB9nC,EAAIqmC,mBAC1BrmC,EAAIs8G,YAAYjtI,UAAYy4D,IAAkBA,EAAcO,YAG1Dk0E,EAAkB,SAAUv8G,EAAKw8G,GACnC,GAAIx8G,EAAIvpD,MAAO,CACX,MAAMqxF,EAAgB9nC,EAAIqmC,mBAC1B,QAAyB,IAAdm2E,EACP10E,EAAcO,WAAam0E,EAC3BH,EAAuBr8G,OAEtB,CACD,IAAIy8G,EAAgBC,EAAiB18G,GACrCz3C,IAAAA,OAAmB5X,MAAK,SAAUQ,GAC9B,GAAIA,EAAM,CAEN,IADA,IAAIk+B,GAAW,EACNl7B,EAAI,EAAG+I,EAAM/L,EAAKmE,OAAQnB,EAAI+I,EAAK/I,IACxC,GAAuC,IAAnChD,EAAKgD,GAAG8G,QAAQwhK,GAAsB,CACtCptI,GAAW,EACX,MAGRy4D,EAAcO,YAAch5D,EAC5BgtI,EAAuBr8G,OAE5Bt0C,GAAO/R,QAAQgS,KAAKD,WAI3B2wJ,EAAuBr8G,IAIzB28G,EAAe9/J,eAAgBnC,EAAKhF,GACtC,IAAIk4B,EACArG,EACJ,QAAQ,GACJ,KAAK7xB,aAAmBpB,EAAAA,EACpBizB,EAAex1B,EAAAA,EAAAA,KAAAA,QACf,MACJ,KAAK2D,aAAmBuN,EAAAA,EACpBskB,EAAex1B,EAAAA,EAAAA,KAAAA,SACf,MACJ,KAAK2D,aAAmBiM,EAAAA,EACpB4lB,EAAex1B,EAAAA,EAAAA,KAAAA,MACf,MACJ,KAAK2D,aAAmBwM,EAAAA,EACpBqlB,EAAex1B,EAAAA,EAAAA,KAAAA,aACf,MACJ,KAAK2D,aAAmBmN,EAAAA,EACpB0kB,EAAex1B,EAAAA,EAAAA,KAAAA,cACf,MACJ,KAAK2D,aAAmBoM,EAAAA,EACpBylB,EAAex1B,EAAAA,EAAAA,KAAAA,WAGvB67B,EAAM,CACFv8B,GAAIqE,EAAQrE,IAAMqE,EAAQknK,OAC1BjiK,WAAYjF,EAAQU,KACpBgG,KAAMmrB,EACNh1B,SAAUmD,EAAQnD,UAEtB,IAEI,aADMgW,IAAAA,QAAoB7N,EAAKkzB,GACxB,CAAEl4B,QAASA,GAEtB,MAAOwS,GACH,KAAM,CAAExS,QAASA,EAASwS,MAAOA,KAKnC20J,EAAgBhgK,eAAgBnC,GAElC,aADM6N,IAAAA,WAAuB7N,GACtBA,GAmBLgiK,EAAmB,SAAU18G,EAAKvpD,GACpC,OAAOupD,EAAIm8E,yBATS,SAAU1lI,GAC9B,IAAImtB,EAAcntB,EAAM7E,QAAQgyB,YAAY,GAI5C,OAHIA,EAAY3oB,QAAQ,KAAO,IAC3B2oB,EAAcntB,EAAM7E,QAAQ+vJ,UAAY,IAAM/9H,GAE3CA,EAAc,IAAMntB,EAAM7E,QAAQ0V,IAIHw1J,CAAgBrmK,GAASupD,EAAIvpD,MAAMylK,UAAYl8G,EAAIvpD,QAGvFsmK,EAAwB,SAAU/8G,EAAKvpD,GACzC,OAAOimK,EAAiB18G,EAAKvpD,GAASupD,EAAIg9G,gCAGxCC,EAA2B,SAAUj9G,EAAKvpD,GAC5C,OAAOimK,EAAiB18G,EAAKvpD,GAASupD,EAAIk9G,mCAGxCC,EAA0B,SAAUn9G,EAAKvpD,GAC3C,OAAOimK,EAAiB18G,EAAKvpD,GAASupD,EAAIo9G,kCAGxCC,EAAgB,SAAU5mK,GAC5B,OAAOA,EAAMG,QAAUH,EAAMG,UAAU2F,KAAK,OAAS9F,EAAM+F,OAAS/F,EAAMpF,IAGxEq9C,EAAW2sH,EAAQ5oK,UAEzBi8C,EAASH,MAAQ,iBAEjBG,EAASytF,yBAA2B,mBACpCztF,EAASsuH,+BAAiC,UAC1CtuH,EAASwuH,kCAAoC,aAC7CxuH,EAAS0uH,iCAAmC,YAE5C1uH,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KA6Nb,aA3NM+nI,EAAAA,QAAAA,UAAAA,SAAAA,KAAsChoI,EAAMzB,GAElDmT,OAAO7F,iBAAiB,UAAU,WAC9Bk+J,EAAa/pK,MAEjB0R,OAAO7F,iBAAiB,WAAW,WAC/Bk+J,EAAa/pK,MAGjBzB,EAAIqb,QAAO,WAGP,GAFA5Z,EAAKsrK,aAAajuI,UAAW,EAEzBr9B,EAAKJ,QAAQ6E,MACbzE,EAAKke,SAASle,EAAKJ,QAAQ6E,WAE1B,CACD,MAAM8mK,EAAYhtK,EAAI4rC,WAAWhlC,QAAO,SAAUsC,GAC9C,OAAOA,EAAI2C,OAASrK,EAAAA,EAAAA,UAAAA,MAAyB0H,EAAI7H,QAAQ0vB,WAEpC,IAArBi8I,EAAUjoK,OACVtD,EAAKke,SAASqtJ,EAAU,GAAGlsK,IAG3BW,EAAKke,SAAS,MAItBle,EAAKupK,qBAAqBvpK,EAAKspK,0BAGnC/qK,EAAIquD,OAAM,WACNruD,EAAI2G,mBAAmB,+BAA+BsC,SAAQ,SAAUwmD,GACpEA,EAAImlD,YAAY,CACZC,SAAU,SAAUl/C,EAAWh1C,GAC3B,MAAM6c,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAIsQ,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACvD,IAAK8wB,EAAQ,CACT,MAAMxzC,EAAOrZ,EAAK4hC,gBAAgB,kBAClCirB,EAAS,IAAIjtB,EAAAA,EACbitB,EAAOxzC,KAAOA,EACdwzC,EAAO7uB,UAAUnjB,IAAIkhB,GACrB8wB,EAAO3sB,gBAAkB8mC,iBAAiBp6D,SAASqL,cAAc,UAC5DitE,iBAAiB,eACjBsmF,WAAW,IAAK,IACrB3+G,EAAO1sB,kBAAoB0sB,EAAO3sB,gBAClC2sB,EAAOvO,QAAQp/B,QAAUA,EACzB,MAAMza,EAAQlG,EAAIqhB,SAASV,GACvBza,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MACf8sD,EAAO7uB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACrB0E,EAAMs7D,qBACD3pD,OAAM,IAAMy2C,EAAO7uB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACjCguD,SAAQ,IAAMlB,EAAO7uB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,YAGnD,OAAO8sD,GAEXwmD,aAAc,CAACtzG,EAAAA,EAAAA,MAAAA,kBAAgCA,EAAAA,EAAAA,MAAAA,YAA0BA,EAAAA,EAAAA,MAAAA,WAAyBA,EAAAA,EAAAA,MAAAA,gBAA8BA,EAAAA,EAAAA,MAAAA,mBAChIuzG,SAAU,SAAU1lG,GAChB,MAAMi/C,EAAS5sD,KACTwE,EAAQlG,EAAIqhB,SAASitC,EAAOvO,QAAQp/B,SAC1CgoC,YAAW,KACP2F,EAAO7uB,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,OAAuBC,EAAKyE,QAAUA,KAC/D,KACHooD,EAAOxvB,UAAY54B,GAASA,EAAMsP,YAAqC,IAAvBtP,EAAMyW,MAAM5X,QAEhEiwG,SAAU,WACN,MACM9uG,EAAQlG,EAAIqhB,SADH3f,KACmBq+C,QAAQp/B,SACpCusJ,EAAYzrK,EAAKyE,MAFRxE,KAGR+9B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACpB0E,EAAMyW,OAAgC,IAAvBzW,EAAMyW,MAAM5X,SAAiBmB,EAAMsP,cAC9CtP,GAASgnK,IAAchnK,EACvBzE,EAAKke,SAASzZ,GAAO9F,MAAK,KAEtBqB,EAAKwzG,qBAITxzG,EAAKke,SAAS,gBAQtCle,EAAK0rK,aAAentK,EAAI6M,WAAW,OAAQ,CACvC/L,GAAIW,EAAK4mC,SACTj6B,IAAK3M,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,cACrCl2C,OAAQrG,EAAKqG,OACbsvF,kBAAmB31F,EAAKJ,QAAQ+1F,kBAChC/oD,SAAU5sC,EAAKJ,QAAQgtC,WAG3B5sC,EAAK0wG,kBAAoB1wG,EAAK0rK,aAE9B1rK,EAAK0wG,YAAYxd,6BAA+B,WAC5C,MAAMhxC,EAAa9iD,OAAOusK,eAAe3rK,EAAK0wG,aAAaxd,6BAA6BvyF,KAAKX,EAAK0wG,aAC5F5a,EAAgB91F,EAAKq0F,mBAC3B,OAAOnyC,EAAW/8C,QAAOy2B,IACrB,MAAMn3B,EAAQlG,EAAIqhB,SAASgc,EAAIv8B,IAC/B,OAAOoF,IAAUqxF,EAAc81E,oBAC3BnnK,IAAUqxF,EAAc+1E,uBACxBpnK,IAAUqxF,EAAcg2E,sBACxBrnK,IAAUqxF,EAAci2E,oBAGpC/rK,EAAK0wG,YAAY9Z,eAAiB,SAAU7nF,GACxC,MAAM4jF,EAAmB5jF,GAAY9O,KAAK0yF,kBAAoB,GACxDmD,EAAgB91F,EAAKq0F,mBACrB23E,EAAcl2E,EAAcntF,WAAagqF,EAAiBp0F,KAAI,SAAUmF,GAC1E,MAAM8wB,EAAa,GACnB,IAAK,IAAI9rB,KAAOotF,EAAcntF,WAC1B6rB,EAAW9rB,GAAOhF,EAAQU,KAAKsE,GAEnC,OAAO,IAAIhF,EAAQhE,YAAYgE,EAAQnD,SAAU,CAAEm+D,aAAco3B,EAAcp3B,aAAct6D,KAAMowB,OAClGzlB,EACL3P,OAAOusK,eAAe3rK,EAAK0wG,aAAa9Z,eAAej2F,KAAKX,EAAK0wG,YAAas7D,IAElFhsK,EAAK0wG,YACApiG,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAC5BgB,EAAKq0F,mBAAmB43E,cACxBjsK,EAAKksK,iBAAiBltK,EAAE0E,YAG/B4K,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GACtC,MAAMy7B,EAAOz7B,EAAE0E,QACTyoK,EAAM1xI,EAAKmwI,QAAUnwI,EAAKp7B,GAC1B+sK,EAAe,WACjB7B,EAAgBvqK,GAAM,IAEpBqsK,EAAe,WACjB7oK,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,8CAE5Bk0D,EAAgB91F,EAAKq0F,mBAC3B,GAAIyB,EAAcm2E,aAAc,CAC5B,IAAIK,EAAgBx2E,EAAc81E,mBAAmB1zI,eAAei0I,GAChEG,GACAA,EAAc3qK,UAAU84B,EAAKl6B,UAC7B+rK,EAAcvoK,QAAQ02B,EAAKz2B,WAC3B2mK,EAAaI,EAAsB/qK,GAAQmsK,EAAK1xI,GAAM97B,KAAKytK,EAAcC,KAGzEC,EAAgBx2E,EAAc+1E,sBAAsB3zI,eAAei0I,GAC/DG,GACAA,EAAc3qK,UAAU84B,EAAKl6B,UAC7B+rK,EAAcvoK,QAAQ02B,EAAKz2B,YAG3B8xF,EAAc+1E,sBAAsBh0I,WAAW73B,EAAKusK,kBAAkB9xI,IAE1EkwI,EAAaM,EAAyBjrK,GAAQmsK,EAAK1xI,GAAM97B,KAAKytK,EAAcC,QAIvF/9J,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GAC/BgB,EAAKq0F,mBAAmB43E,cACxBjsK,EAAKksK,iBAAiBltK,EAAE0E,YAG/B4K,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,SAAUf,GAClCgB,EAAKq0F,mBAAmB43E,cACxBjsK,EAAKwsK,oBAAoBxtK,EAAE0E,YAIvCnF,EAAI4rC,WAAW3iC,SAAQ/C,GAASzE,EAAKqqD,SAAS5lD,KAE9ClG,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,MACZA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAyB0E,EAAM7E,QAAQ80F,UACtD10F,EAAKysK,iBAAiBhoK,GACjB9F,MAAKqiB,GAAKhhB,EAAK0sK,WAAW1rJ,KAC1B5K,OAAM8zC,GAAQviD,QAAQC,IAAI,uBAAyBnD,EAAMpF,SAGrEiP,GAAGvO,EAAAA,EAAAA,MAAAA,MAAmB,SAAU6N,GAC7BrP,EAAI4rC,WACChlC,QAAO6b,GAAKA,EAAEkpJ,WACd/kK,QAAO6b,GAAKhhB,EAAKyE,QAAUuc,IAC3BxZ,SAAQ,SAAU/C,GACfA,EAAMylK,SAAW,KACjBlqK,EAAKysK,iBAAiBhoK,SAGjC6J,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACjCgB,EAAKqqD,SAASrrD,EAAEyF,UAEnB6J,GAAGvO,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GACpC,MAAMyF,EAAQzF,EAAEyF,MAChB,GAAIzE,EAAK2sK,iBAAmBloK,EACxB,QAEAzE,EAAKyE,QAAUA,GAASA,EAAMmoK,UAAY5sK,EAAKyE,QAAUA,EAAMmoK,WAC/D5sK,EAAKke,SAAS,MAElB,MAAM6+E,EAAS/8F,EAAKsrK,aAAarzJ,cAAe,iBAAgBxT,EAAMpF,QAClE09F,GACAA,EAAOtgC,cAAcC,YAAYqgC,MAGxCzuF,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnC,MAAMyF,EAAQzF,EAAEyF,MACZA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAyB0E,EAAM7E,QAAQ80F,WAClD11F,EAAEsa,SAAWvZ,EAAAA,EAAAA,UAAAA,kBACbxB,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,0BAA2B,CAAExpB,MAAOpZ,EAAEoF,KAAKgU,QAAU,CAAEhO,KAAMrK,EAAAA,EAAAA,QAAAA,WAE5FC,EAAKyE,QAAUA,GAASzE,EAAKyE,OAASzE,EAAKyE,MAAMylK,WAAazlK,YACvDzE,EAAKqyF,eAAeryF,EAAKyE,MAAMpF,IACtCW,EAAKke,SAAS,OAEdzZ,EAAMmoK,WACNruK,EAAIwsD,YAAYtmD,GAChBA,EAAMmoK,SAAS1C,SAAW,UAKnClqK,GAGX08C,EAASQ,cAAgBryC,iBACrB,MACMvL,QAAe,+BADRW,KAERqJ,SAAWhK,EAAOiP,SAG3BmuC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KACb,IAAI4sK,EAAa,GACjB,GAAI7sK,EAAKzB,IACL,IAAK,IAAI4D,EAAI,EAAG+I,EAAMlL,EAAKzB,IAAI4rC,WAAW7mC,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC5D,IAAIksD,EAAKruD,EAAKzB,IAAI4rC,WAAWhoC,GACzBksD,EAAGjkD,OAASrK,EAAAA,EAAAA,UAAAA,KAAyBsuD,EAAGzuD,QAAQ0vB,SAChDu9I,EAAWxkK,KAAK,CACZhJ,GAAIgvD,EAAGhvD,GACPmL,MAAO6jD,EAAG7jD,OAAS6jD,EAAGhvD,KAKtC,OAAOW,EAAK+8C,qBAAqB/xC,EAAAA,EAAAA,UAAAA,WAAAA,KAAkChL,EAAM,CACrEgjB,OAAQ6pJ,EACRtD,qBAAsBvpK,EAAKspK,sBAC3BK,iBAAkB3pK,EAAKwpK,iBAAmBxpK,EAAKypK,oBAAsBzpK,EAAK0pK,kBAC1E1rF,UAAWh+E,EAAKX,KACjB,WAECW,EAAK8sK,UAAY9sK,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,UAC9D9lF,EAAKsrK,aAAetrK,EAAK8sK,UAAU70J,cAAcjY,EAAK8lF,eAAiB,cACvE9lF,EAAKsrK,aAAaz/J,iBAAiB,UAAU,SAAU+B,GACnD4gI,EAAaxuI,GAAM,GACnBA,EAAKysK,iBAAiBzsK,EAAKsrK,aAAaxoK,OACnCnE,MAAK,SAAU8F,GACZzE,EAAKke,SAASzZ,EAAMmoK,UAAYnoK,GAAO9F,MAAK,WACpCqB,EAAKyE,OACLzE,EAAKwzG,wBAIhBp9F,OAAM,KACHpW,EAAKke,SAAS,YAI1B,MAAM6uJ,EAAe/sK,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,SAElE9lF,EAAKgtK,cAAgBD,EAAa90J,cAAe,IAAGjY,EAAKu8C,oBACzDv8C,EAAKitK,sBAAwBF,EAAa90J,cAAe,IAAGjY,EAAKu8C,6BACjEv8C,EAAKktK,YAAcH,EAAa90J,cAAe,IAAGjY,EAAKu8C,0BACvDv8C,EAAKmtK,eAAiBJ,EAAa90J,cAAe,IAAGjY,EAAKu8C,6BAC1Dv8C,EAAKotK,cAAgBL,EAAa90J,cAAe,IAAGjY,EAAKu8C,4BAEzDwwH,EAAa90J,cAAe,IAAGjY,EAAKu8C,0BAA0Bv8C,EAAKX,MAAMwM,iBAAiB,UAAU,SAAU7M,GAC1GgB,EAAKupK,qBAAqBvqK,EAAE0O,OAAOmyB,YAGvCktI,EAAa90J,cAAe,IAAGjY,EAAKu8C,uBAAuBv8C,EAAKX,MAAMwM,iBAAiB,UAAU,SAAU7M,GACvGgB,EAAKqtK,eAAeruK,EAAE0O,OAAOmyB,YAGjCktI,EAAa90J,cAAe,IAAGjY,EAAKu8C,0BAA0Bv8C,EAAKX,MAAMwM,iBAAiB,UAAU,SAAU7M,GAC1GgB,EAAKstK,kBAAkBtuK,EAAE0O,OAAOmyB,YAGpCktI,EAAa90J,cAAe,IAAGjY,EAAKu8C,yBAAyBv8C,EAAKX,MAAMwM,iBAAiB,UAAU,SAAU7M,GACzGgB,EAAKutK,iBAAiBvuK,EAAE0O,OAAOmyB,YAGnC,MAAM2tI,EAAc,IAAIjkJ,OAAQ,GAAEvpB,EAAKu8C,uBAAuBv8C,EAAKX,MAC7DouK,EAAe,SAAU7/J,GAC3B,MAAMqnF,EAAQh1F,KAAKw8D,cAAcxkD,cAAc,qBACzC69E,EAAgB91F,EAAKq0F,mBACrB5vF,EAAQqxF,EAAcb,EAAM51F,GAAGoK,MAAM+jK,GAAa,GAAK,iBAC7D,OAAQ13E,EAAcvgE,cAClB,KAAKx1B,EAAAA,EAAAA,KAAAA,MACDk1F,EAAMnyF,MAAQ2B,EAAM4B,OAAOivB,MAAMyW,YACjC,MACJ,KAAKhsC,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACDk1F,EAAMnyF,MAAQ2B,EAAM4B,OAAOmvB,KAAKuW,YAChC,MACJ,QACIkpD,EAAMnyF,MAAQ2B,EAAM4B,OAAOiK,QAAQy7B,YAG3CkpD,EAAM1pD,SAGJmiI,EAAgB,SAAU1uK,GAC5B,MAAMi2F,EAAQj2F,EAAE0O,OACVooF,EAAgB91F,EAAKq0F,mBACrBxtD,EAASouD,EAAM51F,GAAGoK,MAAM+jK,GAAa,GACrC/oK,EAAQqxF,EAAcjvD,EAAS,iBAC/B8mI,EAAW73E,EAAcjvD,EAAS,eAAiBouD,EAAMnyF,MAC/D,OAAQgzF,EAAcvgE,cAClB,KAAKx1B,EAAAA,EAAAA,KAAAA,MACD0E,EAAM4B,OAAOivB,MAAMyW,YAAc4hI,EACjC,MACJ,KAAK5tK,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACD0E,EAAM4B,OAAOmvB,KAAKuW,YAAc4hI,EAChC,MACJ,QACIlpK,EAAM4B,OAAOiK,QAAQy7B,YAAc4hI,EACnClpK,EAAM4B,OAAOiK,QAAQu7B,UAAY8hI,EAGzClpK,EAAMi2B,UAAUj2B,EAAM4B,QACtBrG,EAAM,IAAG6mC,UAAej1B,IAAMg8J,EAAenpK,EAAOqxF,EAAcvgE,eAGhEs4I,EAAqB,GAAE7tK,EAAKu8C,wBAAwBv8C,EAAKX,KAC/D0tK,EAAa90J,cAAe,cAAa41J,OAAuBhiK,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoB0tK,EAAc,CAAEx/J,SAAS,IAC9HrB,SAAS85D,eAAemnG,GAAmBhiK,iBAAiB,SAAU6hK,GAEtE,MAAMI,EAAwB,GAAE9tK,EAAKu8C,2BAA2Bv8C,EAAKX,KACrE0tK,EAAa90J,cAAe,cAAa61J,OAA0BjiK,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoB0tK,EAAc,CAAEx/J,SAAS,IACjIrB,SAAS85D,eAAeonG,GAAsBjiK,iBAAiB,SAAU6hK,GAEzE,MAAMK,EAAuB,GAAE/tK,EAAKu8C,0BAA0Bv8C,EAAKX,KACnE0tK,EAAa90J,cAAe,cAAa81J,OAAyBliK,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoB0tK,EAAc,CAAEx/J,SAAS,IAChIrB,SAAS85D,eAAeqnG,GAAqBliK,iBAAiB,SAAU6hK,GAExE1tK,EAAKgqK,SAAWhqK,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,aAC7D9lF,EAAKgqK,SAASn+J,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAC/CyD,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,0BAA2B,CAAEosI,WAAY3C,EAAcrrK,EAAKyE,UAAW,WACnGzE,EAAKg6B,kBAEV,CAAE/rB,SAAS,IAEdjO,EAAKsqK,YAActqK,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,gBAChE9lF,EAAKsqK,YAAYz+J,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAClDyD,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,4BAA6B,CAAEosI,WAAY3C,EAAcrrK,EAAKyE,UAAW,WACrGzE,EAAKiuK,oBAEV,CAAEhgK,SAAS,IAEdjO,EAAKoqK,WAAapqK,EAAK2M,IAAIsL,cAAe,IAAGjY,EAAKu8C,qBAAqBv8C,EAAKu8C,kBAC5Ev8C,EAAKoqK,WAAWv+J,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACjD,GAAIC,EAAKyE,MAAO,CACZ,MAAMsrI,EAASA,KACX,GAAI/vI,EAAKyE,OAASzE,EAAKyE,MAAMylK,UAAY1mK,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,OAAAA,MAAkBxD,EAAKyE,MAAMylK,SAAS11I,sBAAsBhxB,EAAAA,EAAAA,OAAAA,KAAgB,CAC9H,MAAMsyF,EAAgB91F,EAAKq0F,mBAC3Br0F,EAAKyE,MAAMylK,SAAS11I,WAAa,IAAIhxB,EAAAA,EAAAA,OAAAA,KAAe,KAAMxD,EAAKzB,IAAIyoB,YAAahnB,EAAKzB,IAAI8I,UACzFrH,EAAKyE,MAAMylK,SAASz6I,UAChBqmE,EAAci2E,kBACdj2E,EAAci2E,gBAAgBv3I,WAAax0B,EAAKyE,MAAMylK,SAAS11I,WAC/DshE,EAAci2E,gBAAgBt8I,aAIpCqmE,EAAgB91F,EAAKq0F,mBACrB65E,EAAiBp4E,EAAc81E,mBAAmB78J,SAASzG,OAAOwtF,EAAc+1E,sBAAsB98J,SAAU+mF,EAAcg2E,qBAAqB/8J,UACzJ,GAAIm/J,EAAe5qK,OAAQ,CACvB,IAAI6qK,GAAkB,EACtB,MAAM5yJ,EAASvb,EAAKzB,IAAIyoB,YAClBQ,EAAO,CAAC,CAACjM,EAAO,GAAIA,EAAO,IAAK,CAACA,EAAO,GAAIA,EAAO,IAAK,CAACA,EAAO,GAAIA,EAAO,IAAK,CAACA,EAAO,GAAIA,EAAO,KACzG,IAAK,IAAIpZ,EAAI,EAAGgiB,EAAK+pJ,EAAe5qK,OAAQnB,EAAIgiB,EAAIhiB,IAChD,IAAKqB,EAAAA,EAAAA,SAAAA,WAAuB0qK,EAAe/rK,GAAG5B,SAAUinB,GAAO,CAC3D2mJ,GAAkB,EAClB,MAGJA,EACA3qK,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,wCAAwC,WACpEmuG,OAIJA,SAIJA,OAIT,CAAE9hI,SAAS,IAEVzK,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,SAKZkkB,EAAS2N,SAAW,SAAU5lD,GAC1B,MAAMzE,EAAOC,KASRwE,EAAMuO,QAAWvO,EAAM7E,QAAQ80F,UAAajwF,EAAM7E,QAAQ0vB,SAC3DtvB,EAAKysK,iBAAiBhoK,GACjB9F,MAAK,SAAUqiB,IAERvc,EAAMsP,YAAeiN,EAAE4rJ,UAZlB,SAAUnoK,GAC3B,MAAMs4F,EAASnwF,SAASC,cAAc,UACtCkwF,EAAO1vE,aAAa,QAAS5oB,EAAMpF,IACnC09F,EAAO3vF,UAAYi+J,EAAc5mK,GACjCzE,EAAKsL,gBAAgB3M,MAAK,WACtBqB,EAAKsrK,aAAax+J,YAAYiwF,MAQtBqxE,CAAa3pK,MAGpB2R,OAAOsD,GAAQ/R,QAAQC,IAAK,SAAQnD,EAAMpF,4BAA4Bqa,EAAIkE,cAIvF8+B,EAASx+B,SAAW,SAAUzZ,GAC1B,MAAMzE,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAElC,MAAMnX,EAAMyB,EAAKzB,IACXygD,EAAWh/C,EAAK2M,IAAIsL,cAAcjY,EAAK8lF,eAAiB,cAE9DrhF,EAAQlG,EAAIqhB,SAASnb,GACrB,MAAMynD,EAAW3tD,EAAI4rC,WAAWthC,MAAKmY,GAAKA,IAAMvc,IAE1C4pK,EAAc,WACZniH,EACAlsD,EAAKysK,iBAAiBvgH,GACjBvtD,MAAK,SAAU2vK,GACZ,MAAMrH,EAAa,WACfjnK,EAAKyE,MAAQynD,EACblsD,EAAKuuK,yBAAyBriH,GACzBvtD,MAAK,WACFqB,EAAK2wG,iBAAiBhyG,MAAK8J,IACvBu2C,EAASl8C,MAAQ9C,EAAKyE,MAAMpF,GAC5BoJ,EAAEyqB,KAAO,KACTzqB,EAAEyV,SAASowJ,GACXxvK,EAAQkB,EAAKyE,aAGpB2R,OAAOsD,IACJ1Z,EAAKke,SAAS,MACdxI,EAAOgE,OAIfnb,EAAI4rC,WAAWlhC,QAAQqlK,IAAkB,EACzCrH,IAGA1oK,EAAI8rD,SAASikH,GAAe3vK,KAAKsoK,MAGxC7wJ,OAAM,KACHpW,EAAKke,SAAS,MACdpf,EAAQ,UAIZkB,EAAKyE,OAASzE,EAAKyE,MAAMylK,WACzBlqK,EAAK2sK,eAAiB3sK,EAAKyE,MAAMylK,UAErClqK,EAAK2wG,iBAAiBhyG,MAAK8J,IACvB+lI,EAAaxuI,GAAM,GAEnBA,EAAK4wG,mBACAjyG,MAAK,KACFqgD,EAASl8C,MAAQ,GACjB2F,EAAEyqB,KAAO,KACTzqB,EAAEyV,SAAS,MACXle,EAAKyE,MAAQ,KACb3F,EAAQ,SAEXivD,SAAQ,YACE/tD,EAAK2sK,uBAMlB,OAAVloK,GAAmBzE,EAAKyE,OAIpBzE,EAAKyE,MAAMylK,WACXlqK,EAAK2sK,eAAiB3sK,EAAKyE,MAAMylK,UAErClqK,EAAK4wG,mBAAmBjyG,MAAK,KACrButD,GACAmiH,QARRA,QAeZ3xH,EAASwvH,iBAAmB,SAAUxoK,GAClC,MAAM1D,EAAOC,KACbyD,EAAQknK,OAhpBD,cAAgBd,IAipBvB,MAAMh0E,EAAgB91F,EAAKq0F,mBACrB18B,EAAa33D,EAAKusK,kBAAkB7oK,GAC1CoyF,EAAc81E,mBAAmB/zI,WAAW8/B,GAC5CgzG,EAAaI,EAAsB/qK,GAAQ0D,EAAQknK,OAAQjzG,GAAYh5D,MAAK,WACxE4rK,EAAgBvqK,GAAM,MAEvB,WACCwD,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,8CAItC8a,EAAS8vH,oBAAsB,SAAU9oK,GACrC,MAAM1D,EAAOC,KACb,IAAIksK,EAAMzoK,EAAQknK,QAAUlnK,EAAQrE,GAChC+sK,EAAe,WACf7B,EAAgBvqK,IAGhBqsK,EAAe,WACf7oK,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,8CAElC,MAAMk0D,EAAgB91F,EAAKq0F,mBAC3B,GAAIyB,EAAcm2E,aAAc,CAC5B,IAAIK,EAAgBx2E,EAAc81E,mBAAmB1zI,eAAei0I,GACpE,GAAKG,EAoBDx2E,EAAc81E,mBAAmB7zI,cAAcu0I,GAC/CzB,EAAcE,EAAsB/qK,GAAQmsK,GAAKxtK,KAAKytK,EAAcC,OArBpD,CAChB,IAAImC,EAAuBrD,EAAwBnrK,GACnDssK,EAAgBx2E,EAAc+1E,sBAAsB3zI,eAAei0I,GAC9DG,GAQDx2E,EAAc+1E,sBAAsB9zI,cAAcu0I,GAClDx2E,EAAcg2E,qBAAqBj0I,WAAW73B,EAAKusK,kBAAkB7oK,IACrEmnK,EAAcI,EAAyBjrK,GAAQmsK,GAAKxtK,MAAK,WACrDytK,IACAzB,EAAa6D,EAAuBrC,EAAKzoK,GAAS/E,KAAKytK,EAAcC,KACtEA,KAZHC,EAAgBx2E,EAAcg2E,qBAAqB5zI,eAAei0I,GAC7DG,IACDx2E,EAAcg2E,qBAAqBj0I,WAAW73B,EAAKusK,kBAAkB7oK,IACrEinK,EAAa6D,EAAuBrC,EAAKzoK,GAAS/E,KAAKytK,EAAcC,QAmBzF3vH,EAAS6vH,kBAAoB,SAAU7oK,GACnC,MACMyoK,EAAMzoK,EAAQknK,QAAUlnK,EAAQrE,GAChCy2F,EAFO71F,KAEco0F,mBACrBxvF,EAAS,IAAInB,EAAQhE,YAAYgE,EAAQnD,SAAU,CAAEm+D,aAAco3B,EAAcp3B,aAAct6D,KAAMV,EAAQM,YAGnH,OAFAa,EAAOc,SAAS,MAChBd,EAAOV,MAAMgoK,GACNtnK,GAGX63C,EAASi0D,eAAiB,WACtB,MAAM3wG,EAAOC,KACb,OAAOD,EAAK0rK,cAAgB,IAAI7sK,SAAQ,SAAUC,EAASk1B,GACvDh0B,EAAKsL,gBAAgB3M,MAAK,IAAMG,EAAQkB,EAAK0wG,mBAIrDh0D,EAASgwH,WAAa7hK,eAAgBpG,GAClC,MAAMzE,EAAOC,KAEb,SADMD,EAAKozH,mBACPr2D,UAAUgyB,OAAQ,CAClB,MAAM0/E,EAAQhqK,EAAMvE,KAAKwuK,mBACnBC,QAAelqK,EAAM0qB,4BACvBs/I,GAASE,SACH3uK,EAAKkzI,YAAYw3B,EAAiB1qK,EAAMyE,GAAQ,CAClDwuI,QAAS,CAACw7B,EAAOE,OAMjCjyH,EAASu7G,eAAiB,SAAUxzJ,GAChC,MAAMzE,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClCjR,EAAQA,GAASzE,EAAKyE,MACtB,MAAM05E,EAAKn+E,EAAKzB,IAAIw1D,sBACdsD,EAAS8mB,GAAMA,EAAG92B,UACxB5iD,EAAM+qB,sBACD7wB,MAAK,SAAUgK,GACZ3I,EAAK2wG,iBAAiBhyG,MAAK,SAAU+xG,GACjC,MAAM5a,EAAgB91F,EAAKq0F,iBAAiB5vF,GAG5C,IAAIiE,EACJ,IAAKA,KAFLotF,EAAcntF,WAAa,GAEfA,EAAY,CACpB,MAAMC,EAAOD,EAAWD,GAClB6sB,EAAem7E,EAAY9a,gBAAgBhtF,EAAKwB,MAClDmrB,GACAugE,EAAcp3B,aAAe91D,EAAKE,KAClCgtF,EAAcvgE,aAAuC,kBAAjBA,EAA6B,KAAOA,GAGxEugE,EAAcntF,WAAWD,GAAOE,EAGxC,IAAKF,KAAOotF,EAAcntF,WAAY,CAClC,MAAMC,EAAOktF,EAAcntF,WAAWD,GACtCE,EAAKwB,KAAOxB,EAAKwB,KAAKyc,OAAOje,EAAKwB,KAAKnB,QAAQ,KAAO,GAE1DnK,EAAQg3F,SAGf1/E,OAAM,SAAUsD,GACbhE,EAAOgE,MAEVq0C,SAAQ,IAAMowB,GAAMA,EAAG32B,WAAW6P,SAI/C3a,EAASkyH,mBAAqB/jK,eAAgBpG,GAC1C,MAAMzE,EAAOC,KACP1B,EAAMyB,EAAKzB,IACjBkG,EAAQA,GAASzE,EAAKyE,MACtB,MAAMqxF,EAAgB91F,EAAKq0F,iBAAiB5vF,GACtCoqK,EAAU/4E,EAAci2E,gBAC9B,IAAI8C,EAyCA,MAAM5vK,MAAO,2BAA0BwF,EAAMpF,MAzCpC,CACT,MAAMyvK,EAAgB,SAAU9vK,GACxBA,EAAEyF,QAAUoqK,IACZA,EAAQ9pK,cAAc/E,EAAKspK,uBAC3BuF,EAAQl7J,WAAW,GACnBpV,EAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0B+uK,KAG1CvwK,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0B+uK,GACjC,MAAMC,EAAUj5E,EAAc81E,mBACxBoD,EAAUl5E,EAAc+1E,sBACxBoD,EAAUn5E,EAAcg2E,2BACxBjtK,QAAQwiB,IAAI,CACdwtJ,EAAQl7J,WAAW,GACnBpV,EAAI8rD,SAASwkH,GACbtwK,EAAI8rD,SAAS0kH,GACbxwK,EAAI8rD,SAAS2kH,GACbzwK,EAAI8rD,SAAS4kH,KAEjB,MAAMX,QAAsBtuK,EAAKysK,iBAAiBhoK,GAClD,IAAIiD,EAAMnJ,EAAIykB,OAAO/Z,QAAQqlK,GAC7BS,EAAQhqK,cAAc/E,EAAKwpK,iBAC3BwF,EAAQjqK,cAAc/E,EAAKypK,oBAC3BwF,EAAQlqK,cAAc/E,EAAK0pK,yBACrBnrK,EAAI8zD,YAAYw8G,IAAWnnK,GACjC,MAAMw1H,EAASx1H,EAAM,EACrBnJ,EAAI8zD,YAAY08G,EAAS7xC,GACzB3+H,EAAI8zD,YAAY28G,EAAS9xC,GACzB3+H,EAAI8zD,YAAY48G,EAAS/xC,GAEzB2xC,EAAQn0I,UAAU16B,EAAK6pK,wBAAwByE,IAC/CS,EAAQr0I,UAAU16B,EAAKkvK,2BAA2BZ,IAClDU,EAAQt0I,UAAU16B,EAAKmvK,8BAA8Bb,IACrDW,EAAQv0I,UAAU16B,EAAKovK,6BAA6Bd,IACpDtuK,EAAKgtK,cAAcp7J,IAAMg8J,EAAeU,EAAex4E,EAAcvgE,cACrEv1B,EAAKitK,sBAAsBr7J,IAAMg8J,EAAeiB,EAAS/4E,EAAcvgE,cACvEv1B,EAAKktK,YAAYt7J,IAAMg8J,EAAemB,EAASj5E,EAAcvgE,cAC7Dv1B,EAAKmtK,eAAev7J,IAAMg8J,EAAeoB,EAASl5E,EAAcvgE,cAChEv1B,EAAKotK,cAAcx7J,IAAMg8J,EAAeqB,EAASn5E,EAAcvgE,gBAOvEmnB,EAAS82D,gBAAkB,WACvB,MAAMxzG,EAAOC,KACb,OAAKD,EAAKyE,MAGH,IAAI5F,SAAQ,SAAUC,EAAS4W,GAElC1V,EAAKi4J,iBACAt5J,MAAK,SAAUm3F,GAEZ91F,EAAK2wG,iBAAiBhyG,MAAK,SAAU+xG,GACjC1wG,EAAKysK,iBAAiBzsK,EAAKyE,OAAO9F,MAAK,SAAU2vK,GAE7C,OADA59D,EAAYxyF,SAASowJ,GACbx4E,EAAcvgE,cAClB,KAAKx1B,EAAAA,EAAAA,KAAAA,cACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD2wG,EAAY2+D,oBAAmB,GAC/B,MACJ,QACI3+D,EAAY2+D,oBAAmB,GAGvC3+D,EAAY5yD,WACZ0wF,EAAaxuI,GAAM,GACnBuqK,EAAgBvqK,GAEhB,MAAM4vF,EAAQ,CAACoC,EAAAA,QAAAA,KAAAA,OAAkBA,EAAAA,QAAAA,KAAAA,OACjC,OAAQ8D,EAAcvgE,cAClB,KAAKx1B,EAAAA,EAAAA,KAAAA,MACD6vF,EAAMvnF,KAAK2pF,EAAAA,QAAAA,KAAAA,UACX,MACJ,KAAKjyF,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACD6vF,EAAMvnF,KAAK2pF,EAAAA,QAAAA,KAAAA,SAEX,MACJ,KAAKjyF,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD6vF,EAAMvnF,KAAK2pF,EAAAA,QAAAA,KAAAA,YAMnB0e,EAAY/gB,eAAeC,GAC3B8gB,EAAYx9E,KAAO8+D,EAAAA,QAAAA,KAAAA,OAEnBhyF,EAAK4uK,qBACAjwK,MAAK,IAAMG,MACXsX,OAAOsD,GAAQhE,EAAOgE,cAItCtD,OAAM,SAAUsD,GACT1Z,EAAKyE,OAASzE,EAAKyE,MAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,OAClCC,EAAK2wG,iBAAiBhyG,MAAK,SAAU+xG,GACjCA,EAAY5yD,WACZ0wF,EAAaxuI,GAAM,GACnB0wG,EAAYx9E,KAAO8+D,EAAAA,QAAAA,KAAAA,OACnBlzF,OAIJ4W,EAAOgE,SA5DZ7a,QAAQ6W,OAAOzW,MAAM,8BAkEpCy9C,EAASk0D,iBAAmB/lG,iBACxB,MAAM7K,EAAOC,WACPD,EAAKsL,gBACXi/J,EAAgBvqK,GAAM,GACtBA,EAAK2wG,iBAAiBhyG,MAAK8J,GAAKA,EAAEw1C,eAClC,MAAM63C,EAAgB91F,EAAKq0F,mBAC3B,GAAIyB,MAAAA,GAAAA,EAAei2E,gBAAiB,CAChC/rK,EAAKgtK,cAAcp7J,IAAM7R,EAAAA,EAAAA,YACzBC,EAAKitK,sBAAsBr7J,IAAM7R,EAAAA,EAAAA,YACjCC,EAAKktK,YAAYt7J,IAAM7R,EAAAA,EAAAA,YACvBC,EAAKmtK,eAAev7J,IAAM7R,EAAAA,EAAAA,YAC1BC,EAAKotK,cAAcx7J,IAAM7R,EAAAA,EAAAA,YACzB,MAAMuvK,EAAgBtvK,EAAKyE,MACrB6pK,QAAsBtuK,EAAKysK,iBAAiBzsK,EAAKyE,OACjD8qK,EAAiB,GACjBxkH,EAAc,SAAUtmD,GACtBzE,EAAKzB,IAAI4rC,WAAWlhC,QAAQxE,IAAU,GACtC8qK,EAAelnK,KAAKrI,EAAKzB,IAAIwsD,YAAYtmD,KAGjDsmD,EAAY+qC,EAAci2E,iBAC1BhhH,EAAY+qC,EAAci2E,iBAC1BhhH,EAAY+qC,EAAc81E,oBAC1B7gH,EAAY+qC,EAAc+1E,uBAC1B9gH,EAAY+qC,EAAcg2E,sBACtBwD,IAAkBhB,IAClBgB,EAAcpF,SAAW,KACzBn/G,EAAYujH,UAEVzvK,QAAQwiB,IAAIkuJ,KAI1B7yH,EAAS+vH,iBAAmB5hK,eAAgBpG,GACxC,MAAMzE,EAAOC,KACPuvK,EAAuB,SAAQ/qK,EAAMpF,kBACrCd,EAAMyB,EAAKzB,IAEjB,GADAkG,EAAQlG,EAAMA,EAAIqhB,SAASnb,GAASA,EACzB,CACP,GAAIA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAMmoK,WAAanoK,EAAM7E,QAAQ0vB,SAAY7qB,EAAM7E,QAAQ80F,UAIlG,IAAIjwF,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CAC1C,GAAI0E,EAAMylK,SAEN,aADMzlK,EAAMylK,SAASzwJ,yBACdhV,EAAMylK,SAEZ,CACD,MAAMj0J,QAAqBxR,EAAMs7D,qBAE3B/8C,EAASve,EAAMic,2BACrB,IAAI+uJ,EAAgBzsJ,EAAO,GACvB0sJ,EAAWD,EAAcxmK,QAAQ,KACjCymK,EAAW,IACXD,QAAsBhrK,EAAMkrK,oBAC5BD,EAAWD,EAAcxmK,QAAQ,MAErC,MAAM49B,EAAS4oI,EAAc5oJ,OAAO,EAAG6oJ,GACjCE,EAAiBH,EAAcr2I,UAAUs2I,EAAW,GAC1D,GAAsB,IAAlB1sJ,EAAO1f,QAAgBlE,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAakqD,aAAcyvG,GAAiB,CACxG,MAAMC,EAAkB,CACpBxwK,GAAIW,EAAK4mC,SACTx8B,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,UAAW7Q,EAAMyqB,YACjBsF,WAAYj2B,EAAM,IAAIiF,EAAAA,EAAAA,OAAAA,KAAe,KAAMjF,EAAIyoB,YAAazoB,EAAI8I,UAAY,KAC5E+pB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACdyK,MAAQ,GAAE/F,EAAMG,UAAU2F,KAAK,YAAYvK,EAAK4hC,gBAAgB,oBAChE88B,aAAc,OACd9sC,YAAa,CAACg+I,GACdjgB,UAAW9oH,EACXxgC,OAAQrG,EAAKqG,OACbipB,SAAS,GAIb,OAFA7qB,EAAMylK,SAAW,IAAIr4I,EAAAA,EAAOg+I,GAC5BprK,EAAMylK,SAAS0C,SAAWnoK,EACnBA,EAAMylK,SAGb,MAAMjrK,MAAMuwK,IAInB,GAAI/qK,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,OACpB,OAAO0E,EAGP,MAAMxF,MAAMuwK,GA9CZ,aADM/qK,EAAMgV,yBACLhV,EAkDX,MAAMxF,MAAM,qBAIpBy9C,EAASozH,cAAgBjlK,eAAgBpG,GACrC,MACMgmK,EAAgBC,EADTzqK,KACgCwE,GAC7C,IACI,MAAMtF,QAAaoX,IAAAA,OACnB,QAAIpX,GACOA,EAAKic,MAAK1S,GAAsC,IAA/BA,EAAIO,QAAQwhK,KAI5C,MAAO/wJ,GAEH,OADA/R,QAAQgS,KAAKD,IACN,IAIfgjC,EAAS23C,iBAAmB,SAAU+B,GAClC,MAAMp2F,EAAOC,KACPwE,EAAQ2xF,GAAiBp2F,EAAKyE,MACpC,OAAKA,EAGEzE,EAAKqyF,eAAe5tF,EAAMpF,IAAMW,EAAKqyF,eAAe5tF,EAAMpF,KAAO,CACpEg3F,YAAY,GAHL,MAOf,MAAMu3E,EAAiB,SAAUnpK,EAAO8wB,GACpC,OAAQA,GACJ,KAAKx1B,EAAAA,EAAAA,KAAAA,MACL,KAAKA,EAAAA,EAAAA,KAAAA,WACD,OAAOyD,EAAAA,EAAAA,KAAAA,wBAAgCiB,EAAM4B,OAAOivB,MAAO,CAAEC,aAAcx1B,EAAAA,EAAAA,KAAAA,QAC/E,KAAKA,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACD,OAAOyD,EAAAA,EAAAA,KAAAA,wBAAgCiB,EAAM4B,OAAOmvB,KAAM,CAAED,aAAcx1B,EAAAA,EAAAA,KAAAA,WAC9E,QACI,OAAOyD,EAAAA,EAAAA,KAAAA,wBAAgCiB,EAAM4B,OAAOiK,QAAS,CAAEilB,aAAcx1B,EAAAA,EAAAA,KAAAA,YAIzF28C,EAAS6xH,yBAA2B,SAAU9pK,GAC1C,MAAMzE,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClCh0B,EAAKysK,iBAAiBhoK,GACjB9F,MAAK,SAAU2vK,GAEZ,MAAMrH,EAAa,WACf,MAAMnxE,EAAgB91F,EAAKq0F,iBAAiB5vF,GAEtCsrK,EAAY1E,EAAc5mK,GAEhC,IAAIsnK,EAAkBj2E,EAAci2E,gBAC/BA,IACDA,EAAkBj2E,EAAci2E,gBAAkB,IAAIl6I,EAAAA,EAAOruB,EAAAA,EAAAA,KAAAA,OAAe,GAAI8qK,EAAc1uK,QAAS,CACnGP,GAAIW,EAAK4mC,SACTp8B,MAAQ,GAAEulK,OAAe/vK,EAAK4hC,gBAAgB,qBAC9C8yD,UAAU,EACVrP,MAAOrlF,EACPsvB,SAAS,MAIjB,IAAIs8I,EAAqB91E,EAAc81E,mBACvC,IAAIoE,GAAW,EACVpE,IACDoE,GAAW,EACXpE,EAAqB91E,EAAc81E,mBAAqB,IAAI/5I,EAAAA,EAAO,CAC/DxyB,GAAIW,EAAK4mC,SACTp8B,MAAQ,GAAEulK,OAAe/vK,EAAK4hC,gBAAgB,mBAC9CyjD,MAAOrlF,EACPsvB,SAAS,EACTqd,OAAQ,KAIhB,IAAIk/H,EAAwB/1E,EAAc+1E,sBAC1C,IAAIoE,GAAW,EACVpE,IACDoE,GAAW,EACXpE,EAAwB/1E,EAAc+1E,sBAAwB,IAAIh6I,EAAAA,EAAO,CACrExyB,GAAIW,EAAK4mC,SACTp8B,MAAQ,GAAEulK,OAAe/vK,EAAK4hC,gBAAgB,sBAC9CyjD,MAAOrlF,EACPsvB,SAAS,EACTqd,OAAQ,KAIhB,IAAIm/H,EAAuBh2E,EAAcg2E,qBACzC,IAAIoE,GAAW,EACVpE,IACDoE,GAAW,EACXpE,EAAuBh2E,EAAcg2E,qBAAuB,IAAIj6I,EAAAA,EAAO,CACnExyB,GAAIW,EAAK4mC,SACTp8B,MAAQ,GAAEulK,OAAe/vK,EAAK4hC,gBAAgB,qBAC9CyjD,MAAOrlF,EACPsvB,SAAS,EACTqd,OAAQ,KAIhB,MAAMwjI,EAAkB,GACxB,GAAIH,GAAYC,GAAYC,EAExBpE,EAAqB/8J,SAASvH,SAAQ,SAAU4oK,GAC5C,MAAMphK,EAAIs/J,EAAcp2I,eAAek4I,EAAe/wK,IAClD2P,GACAs/J,EAAcv2I,cAAc/oB,MAGpC68J,EAAsB98J,SAASvH,SAAQ,SAAU6oK,GAC7C,MAAMrhK,EAAIs/J,EAAcp2I,eAAem4I,EAAgBhxK,IACnD2P,IACAA,EAAErN,UAAU0uK,EAAgB9vK,UAC5ByO,EAAEjL,QAAQssK,EAAgBrsK,eAGlC4nK,EAAmB78J,SAASvH,SAAQ,SAAU8oK,GACrChC,EAAcp2I,eAAeo4I,EAAajxK,KAC3C8wK,EAAgB9nK,KAAKimK,EAAcz2I,WAAW73B,EAAKusK,kBAAkB+D,QAG7EzxK,QAAQwiB,IAAI8uJ,GAAiBxxK,MAAK,KAC9Bm3F,EAAcm2E,cAAe,EAC7BntK,EAAQwvK,UAGX,CAED,MAAM7D,EAAgBC,EAAiB1qK,EAAMsuK,GACvCiC,EAAqBxF,EAAsB/qK,EAAMsuK,GACjDkC,EAAwBvF,EAAyBjrK,EAAMsuK,GACvDE,EAAuBrD,EAAwBnrK,EAAMsuK,GAE3D/3J,IAAAA,OAAmB5X,MAAK,SAAUQ,GAC1BA,GACAA,EACKgG,QAAOuD,GAAsC,IAA/BA,EAAIO,QAAQwhK,KAC1BjjK,SAAQ,SAAUkB,GAEfynK,EAAgB9nK,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKmiE,IA3gCpEh2E,eAAgBnC,GAEhC,MAAO,CACHA,IAAKA,EACLhF,cAHgB6S,IAAAA,QAAoB7N,KA2gCA+nK,CAAY/nK,GAAK/J,MAAK,SAAUi9B,GAC5B,IAAIv8B,EACAyY,EAAI8jB,EAAIlzB,IACZ,GAAwC,IAApCoP,EAAE7O,QAAQulK,GAA6B,CACvCnvK,EAAKyY,EAAE+O,OAAO2nJ,EAAqBlrK,QACnC,MAAMI,EAAU4qK,EAAcp2I,eAAe74B,GAC7CivK,EAAcv2I,cAAcr0B,GAC5BooK,EAAqBj0I,WAAWn0B,GAAS/E,MAAK,IAAM+f,EAAIhb,UAGvD,GAAyC,IAArCoU,EAAE7O,QAAQunK,GAA8B,CAC7CnxK,EAAKyY,EAAE+O,OAAO2pJ,EAAsBltK,QACpC,MAAMI,EAAU4qK,EAAcp2I,eAAe74B,GAC7C,GAAIqE,EAAS,CACTA,EAAQ/B,UAAUi6B,EAAIl4B,QAAQnD,UAC9BmD,EAAQK,QAAQ63B,EAAIl4B,QAAQiF,YAC5B,MAAMgvD,EAAaj0D,EAAQ+G,QAC3BktD,EAAWxzD,MAAMT,EAAQrE,IACzBwsK,EAAsBh0I,WAAW8/B,GAAYh5D,MAAK,IAAM+f,EAAIhb,UAI5Dgb,EAAIhb,QAGP,GAAsC,IAAlCoU,EAAE7O,QAAQsnK,GAA2B,CAC1ClxK,EAAKyY,EAAE+O,OAAO0pJ,EAAmBjtK,QACjC,IAEIotK,EAFAC,EAAWp4J,SAASlZ,EAAGwnB,OAAOxnB,EAAGs0B,YAAY,KAAO,IAGxD,OAFAm2I,EAAqBtoK,KAAK4K,IAAI09J,EAAoB6G,EAAW,GAErD/0I,EAAIl4B,QAAQ0G,MAChB,KAAKrK,EAAAA,EAAAA,KAAAA,MACD2wK,EAAapC,EAAc74I,SAASmG,EAAIl4B,QAAQnD,UAChD,MACJ,KAAKR,EAAAA,EAAAA,KAAAA,SACD2wK,EAAapC,EAAc73I,YAAYmF,EAAIl4B,QAAQnD,UACnD,MACJ,KAAKR,EAAAA,EAAAA,KAAAA,QACD2wK,EAAapC,EAAcr3I,WAAW2E,EAAIl4B,QAAQnD,UAClD,MACJ,KAAKR,EAAAA,EAAAA,KAAAA,cACD2wK,EAAapC,EAAcz3I,iBAAiB+E,EAAIl4B,QAAQnD,UACxD,MACJ,KAAKR,EAAAA,EAAAA,KAAAA,aACD2wK,EAAapC,EAAcj3I,gBAAgBuE,EAAIl4B,QAAQnD,UAK/DmwK,EAAW/xK,MAAK,SAAU87B,GAEtBA,EAAKmwI,OAASvrK,EACdo7B,EAAK12B,QAAQ63B,EAAIl4B,QAAQiF,YACzB,MAAMioK,EAAUn2I,EAAKhwB,QACrBmmK,EAAQjrK,SAAS,MACjBirK,EAAQzsK,MAAMs2B,EAAKmwI,QACnBgB,EAAmB/zI,WAAW+4I,GAASjyK,MAAK,IAAM+f,EAAIkyJ,mBAQlF/xK,QAAQwiB,IAAI8uJ,GAAiBxxK,MAAK,KAC9Bm3F,EAAcm2E,cAAe,EAC7BntK,EAAQwvK,WAMxB,GAAIA,EAAclkK,OAASrK,EAAAA,EAAAA,UAAAA,IACvB,GAAIuuK,EAAcx5J,QAAUjC,EAAAA,EAAAA,MAAAA,KACxBo0J,QAEC,CACD,MAAM6H,EAAgB,SAAU9vK,GACxBA,EAAEyF,QAAU6pK,IACZrH,IACAjnK,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0B+uK,KAG/C9uK,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0B+uK,QAI1ChwK,EAAQwvK,UAM5B5xH,EAAS1iB,WAAa,WAClB,MAAMh6B,EAAOC,KACb,GAAID,EAAKyE,MAAO,CACZ,MAAMqxF,EAAgB91F,EAAKq0F,mBAC3B,GAAIyB,EAAcm2E,aAAc,CAC5BjsK,EAAKiqK,WAAY,EACjBF,EAAa/pK,GACb,MAAMm+E,EAAKn+E,EAAKzB,IAAIw1D,sBACdsD,EAAS8mB,GAAMA,EAAG92B,UAElBwpH,EAAW/6E,EAAc+1E,sBAAsB98J,SAASxQ,KAAI,SAAUmF,GACxE,MAAMotK,EAAoBh7E,EAAci2E,gBAAgBh9J,SAAS5J,QAAO6J,GAAKA,EAAE3P,KAAOqE,EAAQrE,KAAI,GAClG,IAAIm4D,EACAwuE,EACJ,GAAI8qC,GAIA,IAAK,IAAIpoK,KAHTs9H,EAAcnkF,EAAAA,EAAAA,OAAgBn+C,EAAQnD,SAAUuwK,EAAkBvwK,UAC9D,KAAOmD,EAAQnD,SACnBi3D,EAAU,GACM9zD,EAAQU,KACpB,GAAY,OAARsE,EAAc,CACd,MAAMg1B,EAAWozI,EAAkB1sK,KAAKsE,GAClCi1B,EAAWj6B,EAAQU,KAAKsE,GAC1Bg1B,IAAaC,IACb65B,EAAQ9uD,GAAOi1B,SAM3BqoG,EAActiI,EAAQnD,SACtBi3D,EAAU9zD,EAAQU,KAEtB,MAAMS,EAAS,IAAInB,EAAQhE,YAAYsmI,EAAa,CAAEtnE,aAAco3B,EAAcp3B,eAGlF,OAFA75D,EAAOd,QAAQyzD,GACf3yD,EAAOV,MAAMT,EAAQrE,IACdwF,KAEX7E,EAAKysK,iBAAiBzsK,EAAKyE,OACtB9F,MAAK,SAAUqiB,GACZA,EAAEgZ,WAAW87D,EAAc81E,mBAAmB78J,SAAU8hK,EAAU/6E,EAAcg2E,qBAAqB/8J,UAChGpQ,MAAK,SAAUoyK,GACR/wK,EAAKyE,MAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KACpBC,EAAKyE,MAAMgrB,UAEfqmE,EAAci2E,gBAAgB3zI,gBAC9BpX,EAAEjS,SAASvH,SAAQwH,IACf,MAAMgiK,EAAkBl7E,EAAci2E,gBAAgBh9J,SACtDiiK,EAAgBA,EAAgB1tK,QAAU0L,EAAEvE,WAEhDzK,EAAKk0I,YAAYw2B,EAAiB1qK,IAAOrB,MAAK,WAC1CqB,EAAK0sK,WAAW1rJ,GAAG+sC,SAAQ,WACvB/tD,EAAKiqK,WAAY,EACjB9rF,GAAMA,EAAG32B,WAAW6P,GAEpBr3D,EAAKiuK,eACLjuK,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,uCAAwC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,gBAI/FqW,OAAM,SAAUwlB,GACb57B,EAAKiqK,WAAY,EACjBF,EAAa/pK,GACbm+E,GAAMA,EAAG32B,WAAW6P,GACpB7zD,EAAAA,EAAAA,MAASxD,EAAK4hC,gBAAgB,sBAAuB,CAAE1iC,KAAM08B,EAAI18B,KAAMoa,OAAQsiB,EAAItiB,SAAW,CAACvZ,EAAAA,EAAAA,aAAAA,MAA2BA,EAAAA,EAAAA,aAAAA,mBAOtJ28C,EAASuxH,aAAe,WACpB,IAAIjuK,EAAOC,KACXD,EAAKw0F,yBAA2B,GAChC,IAAIi2E,EAAgBC,EAAiB1qK,GACrCuW,IAAAA,OAAmB5X,MAAK,SAAUQ,GAC9B,GAAIA,EAAM,CACN,IAAK,IAAIgD,EAAI,EAAG+I,EAAM/L,EAAKmE,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC7C,IAAIuG,EAAMvJ,EAAKgD,GACoB,IAA/BuG,EAAIO,QAAQwhK,IACZl0J,IAAAA,WAAuB7N,GAG/B,GAAI1I,EAAKyE,MAAO,CACZ,MAAMqxF,EAAgB91F,EAAKq0F,mBACvByB,EAAcm2E,eACdn2E,EAAc81E,mBAAmBxzI,gBACjC09D,EAAc+1E,sBAAsBzzI,gBACpC09D,EAAcg2E,qBAAqB1zI,gBACnCp4B,EAAK0wG,YAAYla,oBAAoB,IACrCx2F,EAAK0wG,YAAYpe,cAAc6C,kBAC/Bn1F,EAAKysK,iBAAiBzsK,EAAKyE,OAAO9F,MAAKqiB,GAAKA,EAAEyO,aAGtD86I,EAAgBvqK,GAAM,OAE3B0Z,GAAO/R,QAAQgS,KAAKD,KACvB1Z,EAAK0wG,YAAYx9E,KAAO,MAG5BwpB,EAAS6sH,qBAAuB,SAAU5sH,GACzB18C,KACRqpK,sBAAwB3sH,EAC7B,MAAMm5C,EAFO71F,KAEco0F,mBACvByB,GACAA,EAAci2E,gBAAgBhnK,cAAc43C,IAIpDD,EAAS2wH,eAAiB,SAAUzuH,GACnB3+C,KACRupK,gBAAkB5qH,EACvB,MAAMk3C,EAFO71F,KAEco0F,mBACvByB,GAAiBA,EAAc81E,oBAC/B91E,EAAc81E,mBAAmB7mK,cAAc65C,IAIvDlC,EAAS4wH,kBAAoB,SAAU1uH,GACtB3+C,KACRwpK,mBAAqB7qH,EAC1B,MAAMk3C,EAFO71F,KAEco0F,mBACvByB,GAAiBA,EAAc+1E,uBAC/B/1E,EAAc+1E,sBAAsB9mK,cAAc65C,IAI1DlC,EAAS6wH,iBAAmB,SAAU3uH,GACrB3+C,KACRypK,kBAAoB9qH,EACzB,MAAMk3C,EAFO71F,KAEco0F,mBACvByB,GAAiBA,EAAcg2E,sBAC/Bh2E,EAAcg2E,qBAAqB/mK,cAAc65C,IAIzD,MAAMqyH,EAA0B,SAAUjjH,EAAKvpD,GAC3C,MAAMI,EAAS,GAEf,OADsBmpD,EAAIqmC,iBAAiB5vF,EAAMmoK,UAAYnoK,GACvC8wB,cAClB,KAAKx1B,EAAAA,EAAAA,KAAAA,QACL,KAAKA,EAAAA,EAAAA,KAAAA,aACD8E,EAAOyL,QAAU7L,EAAMlG,IAAIqB,QAAQyG,OAAOiK,QAC1C,MACJ,KAAKvQ,EAAAA,EAAAA,KAAAA,SACL,KAAKA,EAAAA,EAAAA,KAAAA,cACD8E,EAAO2wB,KAAO/wB,EAAMlG,IAAIqB,QAAQyG,OAAOmvB,KACvC,MACJ,QACI3wB,EAAOywB,MAAQ7wB,EAAMlG,IAAIqB,QAAQyG,OAAOivB,MAGhD,OAAOzwB,GAGX63C,EAASmtH,wBAA0B,SAAUplK,GACzC,MACMysK,EAAmB,SAAU1/F,GAC/B,MAAM2/F,EAAO1sK,EAAMvE,KAAKkxK,QAAQ5/F,GAChC,IAAK,IAAIrvE,EAAI,EAAGA,EAAI,EAAGA,IACnBgvK,EAAKhvK,GAAK,IAAMgvK,EAAKhvK,GAEzB,MAAO,KAAiB,MAAVgvK,EAAK,GAAuB,IAAVA,EAAK,GAAWA,EAAK,IAAIjuJ,SAAS,IAAI0pF,SAAS,EAAG,MAGhFykE,EAAO,CAAC,EAAG,GACXxsK,EAASrB,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIiB,EAAM7E,QAAQyG,QAAU4qK,EAVnDhxK,KAUiFwE,IAc9F,OAbII,EAAOywB,QACPzwB,EAAOywB,MAAMyW,YAAcmlI,EAAiBrsK,EAAOywB,MAAMyW,aACzDlnC,EAAOywB,MAAMiyC,SAAW8pG,GAExBxsK,EAAO2wB,OACP3wB,EAAO2wB,KAAKuW,YAAcmlI,EAAiBrsK,EAAO2wB,KAAKuW,aACvDlnC,EAAO2wB,KAAK+xC,SAAW8pG,GAEvBxsK,EAAOyL,UACPzL,EAAOyL,QAAQy7B,YAAcmlI,EAAiBrsK,EAAOyL,QAAQy7B,aAC7DlnC,EAAOyL,QAAQi3D,SAAW8pG,GAGvBxsK,GAGX,MAAMysK,EAAgB,SAAUtjH,EAAKvpD,EAAO+sE,GACxC,MAAM3sE,EAASrB,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIiB,EAAM7E,QAAQyG,QAAU4qK,EAAwBjjH,EAAKvpD,IAa7F,OAZII,EAAOywB,QACPzwB,EAAOywB,MAAMyW,YAAcylC,EAC3B3sE,EAAOywB,MAAMuW,UAAY2lC,GAEzB3sE,EAAO2wB,OACP3wB,EAAO2wB,KAAKuW,YAAcylC,GAE1B3sE,EAAOyL,UACPzL,EAAOyL,QAAQy7B,YAAcylC,EAC7B3sE,EAAOyL,QAAQu7B,UAAY2lC,GAGxB3sE,GAGX63C,EAASwyH,2BAA6B,SAAUzqK,GAC5C,MACMqxF,EADO71F,KACco0F,iBAAiB5vF,EAAMmoK,UAAYnoK,GAC9D,OAAO6sK,EAFMrxK,KAEcwE,EAAOqxF,EAAcy7E,kBAAoB,YAGxE70H,EAASyyH,8BAAgC,SAAU1qK,GAC/C,MACMqxF,EADO71F,KACco0F,iBAAiB5vF,EAAMmoK,UAAYnoK,GAC9D,OAAO6sK,EAFMrxK,KAEcwE,EAAOqxF,EAAc07E,qBAAuB,YAG3E90H,EAAS0yH,6BAA+B,SAAU3qK,GAC9C,MACMqxF,EADO71F,KACco0F,iBAAiB5vF,EAAMmoK,UAAYnoK,GAC9D,OAAO6sK,EAFMrxK,KAEcwE,EAAOqxF,EAAc27E,oBAAsB,YAl6C9E,GAu6CAjuK,EAAAA,EAAAA,QAAAA,QAAqB6lK,EACrB,W,8LCl8CA7lK,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAoB3BA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,GAAQA,EAAAA,EAAAA,IAAS,GACjBA,EAAAA,EAAAA,GAAAA,aAAqByyH,EAAAA,EACrBzyH,EAAAA,EAAAA,QAAawH,EAAAA,EACbxH,EAAAA,EAAAA,OAAY2B,EAAAA,EAEZ,MAAMusK,EAAW,SAAUvuG,GACvB,IAAInjE,EAAOC,KAEX+K,EAAAA,EAAAA,MAAc/K,KAAMgd,WAEpBjd,EAAKu8E,WAAa/4E,EAAAA,EAAAA,KAAAA,OAAexD,EAAKJ,QAAQ48E,WACzCx8E,EAAKJ,QAAQ48E,WACd5vE,SAAS+0B,KAAK70B,YAAY9M,EAAKu8E,YAGnCv8E,EAAKy8C,cAAe,EAEpBz8C,EAAKqG,OAASrG,EAAKJ,QAAQyG,OAC3BrG,EAAK2xK,gBAAkB3xK,EAAKJ,QAAQ+xK,iBAAmB3xK,EAAKJ,QAAQgyK,gBACpE5xK,EAAK8+D,SAAW9+D,EAAKJ,QAAQk/D,SAC7B9+D,EAAK+M,aAAe,KACpB/M,EAAK6xK,cAAgB,KACrB7xK,EAAK8xK,gBAAkB,GACvB9xK,EAAKqG,OAAS7C,EAAAA,EAAAA,KAAAA,QAAe,EAAM,CAC/B8M,QAAS,CACLy7B,YAAa/rC,EAAKijG,qBAClBj3D,YAAa,EAAGH,UAAW,OAC3BC,YAAa,GAEjBtW,KAAM,CACFuW,YAAa/rC,EAAKijG,qBAClBj3D,YAAa,EAAGH,UAAW,SAEhC7rC,EAAKJ,QAAQyG,QAEhB,MAAMgmF,EAAK,IAAMrsF,EAAKu8C,MACtBv8C,EAAKssF,WAAa,CACdC,mBAAoBF,EAAK,oCACzByR,oBAAqB,0CACrBC,uBAAwB1R,EAAK,iBAIrC7oF,EAAAA,EAAAA,QAAWkuK,EAAU1mK,EAAAA,GACrBxH,EAAAA,EAAAA,IAAOkuK,EAAU5uE,EAAAA,SAEjB,WACI,MAAMpmD,EAAWg1H,EAASjxK,UAC1Bi8C,EAASumD,qBAAuB,UAEhC,MAAM8uE,EAAkBhyK,EAAAA,EAAAA,QAAAA,QAClBiyK,EAAiBjyK,EAAAA,EAAAA,QAAAA,OACjBkyK,EAAkB,aACxB,IAAInyF,EAAY,KACZoyF,EAAQ,KACRC,EAAoB,KACpB76F,EAAa,KACbjuE,EAAS,KAEb,MAAMsgJ,EAAQ,SAAUj1I,GACpB,GAAIA,EACA,KAAOA,EAAKJ,SAAShR,QACjBoR,EAAKgoD,YAAYhoD,EAAKJ,SAAS,KAcrC89J,EAAoB,CACtBC,GAAI,CACAC,KAAM9uK,EAAAA,EAAAA,OAAAA,QACNkF,IAAK,iBAET6pK,IAAK,CACDD,KAAM9uK,EAAAA,EAAAA,OAAAA,WACNkF,IAAK,oBAET8pK,GAAI,CACAF,KAAM9uK,EAAAA,EAAAA,OAAAA,YACNkF,IAAK,qBAET+pK,GAAI,CACAH,KAAM9uK,EAAAA,EAAAA,OAAAA,SACNkF,IAAK,mBAETgqK,IAAK,CACDJ,KAAM9uK,EAAAA,EAAAA,OAAAA,qBACNkF,IAAK,8BAETiqK,IAAK,CACDL,KAAM9uK,EAAAA,EAAAA,OAAAA,kBACNkF,IAAK,4BAETo2C,SAAU,CACNwzH,KAAM9uK,EAAAA,EAAAA,OAAAA,KACNkF,IAAK,kBAETkqK,OAAQ,CACJN,KAAM9uK,EAAAA,EAAAA,OAAAA,KACNkF,IAAK,kBAETmqK,KAAM,CACFP,KAAM9uK,EAAAA,EAAAA,OAAAA,KACNkF,IAAK,gBAEToqK,IAAK,CACDR,KAAM9uK,EAAAA,EAAAA,OAAAA,QACNkF,IAAK,iBAETqqK,KAAM,CACFrqK,IAAK,oBAET26C,WAAY,CACRivH,KAAM9uK,EAAAA,EAAAA,OAAAA,KACNkF,IAAK,oBAETsqK,OAAQ,CACJV,KAAM9uK,EAAAA,EAAAA,OAAAA,QACNkF,IAAK,gBAETihJ,MAAO,CACH2oB,KAAM9uK,EAAAA,EAAAA,OAAAA,QACNkF,IAAK,eAETuqK,KAAM,CACFX,KAAM9uK,EAAAA,EAAAA,OAAAA,OACNkF,IAAK,gBAGPwqK,EAAS,CACX7+B,QAAS,CACL5vI,MAAO,KACPqE,KAAM,KACNmN,aAAc,KACdzL,MAAO,KACPqO,IAAK,KACL1T,OAAO,IAEXguK,QAAS,MAGb,IAAIC,EAAa,WAAc,OAAO,MAClCC,EAAsB,WAAc,OAAO,MAC3CzxI,EAAkB,KAClBx3B,EAAO,KACXsyC,EAASH,MAAQ,kBAEjB,IAAI+2H,EAAa,SAAUlpK,GACvB,IAAI6qF,EAAQroF,SAASC,cAAc,SAEnC,OADAooF,EAAM5nE,aAAa,OAAQjjB,GACpB6qF,EAAM7qF,MAAQA,GAmErBmpK,EAAgB,KAChBC,EAAkB,KAClBC,EAAkB,SAAUC,GACxBJ,EAAW,QACXI,EAAOtpK,KAAO,QAEdspK,EAAOtpK,KAAO,SArEX,IAAIvL,SAAQ,SAAUC,EAASk1B,GACb,oBAAV2/I,MACPzsH,YAAW,WACPpoD,MACD,IAGH0E,EAAAA,EAAAA,QAAU,EACN,CAACA,EAAAA,EAAAA,YAAiB,wBAClB,WACImE,QAAQC,IAAI,gBACZ9I,UA2DQH,MAAK,WAErB40K,EAAgB,IAAII,MAAMD,EAAQ,CAC9BE,KAAM9vI,KACN8lH,QAAUvgJ,GAAqB,UAAXA,EAEH,UAAXA,EAAqB,UAAY,UADnC,UAEJqR,MAAM,EACNzH,OAAQ,SAAU+hE,GACd,IAAIg8D,EAAMh8D,EAAK9sC,UACX6oG,EAAQ/7D,EAAKI,WAAa,EAC1B07D,EAAO97D,EAAKG,cAGhB,OAFI67D,EAAM,KAAIA,EAAM,IAAMA,GACtBD,EAAQ,KAAIA,EAAQ,IAAMA,GACtB1nI,GACJ,IAAK,QACD,MAAO,CAACynI,EAAMC,EAAOC,GAAKzmI,KAAK,KACnC,IAAK,QACD,MAAO,CAACwmI,EAAOC,EAAKF,GAAMvmI,KAAK,KAEnC,QACI,MAAO,CAACymI,EAAKD,EAAOD,GAAMvmI,KAAK,OAK3CknB,MAAO,SAAU7I,GACb,OAAQvf,GACJ,IAAK,QACD,OAAO,IAAIy6B,KAAKlb,EAAIxW,MAAM,KAAK,GAAK,IAAMwW,EAAIxW,MAAM,KAAK,GAAK,IAAMwW,EAAIxW,MAAM,KAAK,IACvF,IAAK,QACD,OAAO,IAAI0xB,KAAKlb,GAEpB,QACI,OAAO,IAAIkb,KAAKlb,EAAIxW,MAAM,KAAK,GAAK,IAAMwW,EAAIxW,MAAM,KAAK,GAAK,IAAMwW,EAAIxW,MAAM,KAAK,MAI/FyhK,OAAQ,CACJ1xI,EAAG,CACCyxI,KAAMD,MAAMG,YACZ37J,KAAM,EACN47J,GAAI,GACJC,UAAW,GAEf5uH,EAAG,CACCwuH,KAAMD,MAAMG,YACZ37J,KAAM,EACN47J,GAAI,GACJC,UAAW,GAEfhxF,EAAG,CACC4wF,KAAMD,MAAMG,YACZ37J,KAAM,KACN47J,GAAI,cAOxBE,EAAmB,WACnB,GAAIV,EAAe,CACf,IAAIt+E,EAAQs+E,EAAcx0B,GAAG9pD,MAC7Bs+E,EAAczxB,UACdyxB,EAAgB,KAChBt+E,EAAMnyF,MAAQ,GACdmyF,EAAM7qF,KAAO,WAarB,IAAI8pK,EACJ,IAIIC,EAAsB,SAAU/pK,EAAMssG,GAEtC,IAAI/sG,EAAO,GAEX,IAAK,IAAIjB,KADTiB,GAAQ,oBAAsBi4B,EAAgB,yBAA2B,YACzDx3B,EACPA,EAAK1B,GAAK0B,OAAQ5G,EAAAA,EAAAA,KAAAA,WAAmB4G,EAAK1B,GAAK0B,QACpDT,GAAQ,mBAAqBS,EAAK1B,GAAKI,MAAQJ,GAAO,KAAOA,EAAM,aAEvE,IAAIwrD,EAAYtnD,SAASC,cAAc,OACvCqnD,EAAUpE,mBAAmB,YAAa,kBAAoB7vD,KAAK87B,UAAY,WAAa97B,KAAK6I,KAAO,KAAOa,EAAO,aACtH1J,KAAKwhD,WAAWA,WAAWjf,aAAa0xB,EAAWj0D,KAAKwhD,WAAW2yH,aAAaC,kBAAkBxoK,iBAAiB,UAAU,WACzHyoK,EAAsBjkK,MAAMpQ,KAAM,CAACy2G,EAAMtsG,QAKjD,MAAMkqK,EAAwB,SAAU59D,EAAMtyG,GAE1C,IAAImwK,EAAQt0K,KACZs0K,EAAM93G,cAAcA,cAAc9wD,iBAAiB,UAAUnE,SAAQ,SAAU45C,GACvEmzH,EAAMC,UAAYpzH,EAAQozH,WAC1BpzH,EAAQqb,cAAcA,cAAcC,YAAYtb,EAAQqb,kBAIhE,MAAMg4G,EAAiB/9D,EAAKz+F,cAAe,IAAGykC,EAASH,iBACjDm4H,EAAch+D,EAAKz+F,cAAe,IAAGykC,EAASH,cAC9Co4H,EAAcj+D,EAAKz+F,cAAe,IAAGykC,EAASH,cAC9Cq4H,EAAcl+D,EAAKz+F,cAAe,IAAGykC,EAASH,cAC9Cs4H,EAAen+D,EAAKz+F,cAAe,IAAGykC,EAASH,eAC/Cu4H,EAAYp+D,EAAKz+F,cAAe,IAAGykC,EAASH,YAClD,IAAIw4H,EAAaF,EAAa58J,cAAc,eAU5C,GATA88J,EAAW13I,UAAW,EAClB03I,EAAWz2H,QAAQ23E,cACnBzyH,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuxK,EAAY,SAExCN,EAAez2I,UAAUnjB,IAAIm3J,GAC7B2C,EAAY32I,UAAUnjB,IAAIm3J,GAC1B0C,EAAY12I,UAAUnjB,IAAIm3J,GAC1B4C,EAAY52I,UAAUnjB,IAAIm3J,GAC1B6C,EAAa72I,UAAUnjB,IAAIm3J,GACtB5tK,EAAKnE,KAAK68F,gBAAgB,GAAGh6F,MAAMs2B,UAAUn5B,KAAK68F,gBAAgB,GAAGh6F,MAAMmG,QAAQ,KAAO,IAU/F,OANAmB,EAAOhG,EAAKnE,KAAK68F,gBAAgB,GAAGh6F,MAAMs2B,UAAUn5B,KAAK68F,gBAAgB,GAAGh6F,MAAMmG,QAAQ,KAAO,IAAImB,KACrG0qK,EAAU92I,UAAUC,OAAO+zI,GAC3BxuK,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuxK,EAAY,WA9DhB,WACpB,GAAIvB,EAAiB,CACjB,IAAIv+E,EAAQu+E,EAAgBz0B,GAAG9pD,MAC/Bu+E,EAAgB1xB,UAChB0xB,EAAkB,KAClBv+E,EAAMnyF,MAAQ,GACdmyF,EAAM7qF,KAAO,UA0DjB4qK,GACAD,EAAW3qK,KAAO,UACV,GACJ,KAAMA,EACFzC,QAAQC,IAAI,gBACZ,MACJ,KAAKwC,aAAgBhL,OACjB+0K,EAAoB9jK,MAAMpQ,KAAM,CAACmK,EAAMssG,IACvC,MACJ,KAAKlzG,EAAAA,EAAAA,KAAAA,WAAmB4G,GACpBwqK,EAAY52I,UAAUC,OAAO+zI,GAC7B6C,EAAa72I,UAAUC,OAAO+zI,GAC9B6C,EAAa72I,UAAUnjB,IAAIo3J,GAEkC,IAAzD2C,EAAYjpK,iBAAiB,iBAAiBrI,SAC9CsxK,EAAYP,kBAAkBx0I,SAAU,GAE5Co0I,IAGA,MACJ,KAAK7pK,EAAKnB,QAAQ,QAAU,EAC5B,KAAKmB,EAAKnB,QAAQ,UAAY,EAC9B,KAAKmB,EAAKnB,QAAQ,WAAa,EAC/B,KAAKmB,EAAKnB,QAAQ,SAAW,EAC7B,KAAKmB,EAAKnB,QAAQ,YAAc,EAC5BwrK,EAAez2I,UAAUC,OAAO+zI,GAChC6C,EAAa72I,UAAUC,OAAO+zI,EAAgBC,GAEkB,IAA5DwC,EAAe9oK,iBAAiB,iBAAiBrI,SACjDmxK,EAAeJ,kBAAkBx0I,SAAU,GAE/Co0I,IAEIX,EAAW,YACP9vK,EAAAA,EAAAA,KAAAA,YACAuxK,EAAW3qK,KAAO,OA/N3B,IAAIvL,SAAQ,SAAUC,EAASk1B,GACb,oBAAV2/I,MACPzsH,YAAW,WACPpoD,MACD,IAGH0E,EAAAA,EAAAA,QAAU,EACN,CAACA,EAAAA,EAAAA,YAAiB,wBAClB,WACImE,QAAQC,IAAI,gBACZ9I,UAqNsBH,MAAK,WACvB60K,EAAkB,IAAIG,MAAMoB,EAAY,CACpCnB,KAAMhsJ,OACN4iB,MAAOpgC,EAAKnB,QAAQ,QAAU,GAAKmB,EAAKnB,QAAQ,SAAW,EAAI,EAAI,EACnEgsK,QAAQ,EACRC,mBAAoB7rK,GAAqB,UAAXA,EAAqB,IAAM,IACzD8rK,oBAAoB,EACpBC,gBAAgB,EAChBC,MAAOhsK,GAAqB,UAAXA,EAAqB,IAAM,WAKpD0rK,EAAW3qK,KAAO,SACdA,EAAKnB,QAAQ,QAAU,GAAKmB,EAAKnB,QAAQ,SAAW,EACpD8rK,EAAWnkJ,KAAO,IAElBmkJ,EAAWnkJ,KAAO,WAG9B,MACJ,KAAKxmB,EAAKnB,QAAQ,aAAe,EACjC,KAAKmB,EAAKnB,QAAQ,SAAW,EAEzB0rK,EAAY32I,UAAUC,OAAO+zI,GAC7B6C,EAAa72I,UAAUC,OAAO+zI,EAAgBC,GAEe,IAAzD0C,EAAYhpK,iBAAiB,iBAAiBrI,SAC9CqxK,EAAYN,kBAAkBx0I,SAAU,GAE5C4zI,EAAgBsB,GAChB,MACJ,KAAK3qK,EAAKnB,QAAQ,WAAa,EAAG,CAC9ByrK,EAAY12I,UAAUC,OAAO+zI,GAC7B6C,EAAa72I,UAAUC,OAAO+zI,EAAgBC,GAEe,IAAzDyC,EAAY/oK,iBAAiB,iBAAiBrI,SAC9CoxK,EAAYL,kBAAkBx0I,SAAU,GAE5Co0I,IACA,MAAMnxK,EAAQ,GAAG8H,MAAMjK,KAAK+1G,EAAK/qG,iBAAiB,eAAiB1L,KAAK6I,KAAO,MAAMZ,QAAO,SAAU+wB,EAAIC,GAAM,OAAOD,GAAMA,EAAK,IAAM,IAAMC,EAAGp2B,QAAU,IAC3JwyK,EAAyBP,EAAYjyK,EAAO4zG,EAAKjY,uBAAuB/hD,EAASH,MAAQ,4BAA4B,IACrH,YAtFJu4H,EAAU92I,UAAUnjB,IAAIm3J,IA2F1BuD,EAA0B,WAC5B,MAAMv1K,EAAOC,KAEPy2G,EAAO12G,EAAKw1K,UACZC,EAAW/+D,EAAKz+F,cAAe,IAAGjY,EAAKu8C,oBAC7CotG,EAAM8rB,GACN/4H,EAASa,gBAAgBv9C,EAAKu8C,MAAQ,UAAW,CAC7CkiB,WAAYy0G,EAAO7+B,QAAQlvI,OAAO5G,KAAIyQ,GAvYb,SAAUg/C,EAAK7oD,GAC5C,MAAMuwK,EAAYvwK,aAAkB3B,EAAAA,EAAAA,OAAAA,QACpC,MAAO,CACH8iJ,MAAOovB,EAAY1nH,EAAIpsB,gBAAgB,YAAcz8B,EAAOyrD,aAC5D+kH,OAAQ3nH,EAAIpsB,gBAAgBwwI,EAAkBjtK,EAAOywK,OAAOltK,KAC5DmtK,YAAa1wK,EAAO2wK,aACpBJ,UAAWA,GAiYgCK,CAAyB/1K,EAAMgP,KAC1E3F,OAAQrJ,EAAKzB,IAAIqB,QAAQyJ,SAC1B,SAAUM,GACT8rK,EAASroK,UAAYzD,EACrB8rK,EAAS9pK,iBAAkB,IAAG3L,EAAKu8C,yBAAyB/0C,SAAQ,SAAU4mE,EAAK1mE,GAC/E0mE,EAAIviE,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACrCC,EAAKzB,IAAI6uD,eAAe,CAAC8lH,EAAO7+B,QAAQlvI,OAAOA,QAAO6J,GAAKA,aAAaxL,EAAAA,EAAAA,OAAAA,UAAmBkE,GAAKnH,WAChGP,EAAKg2K,sBACN,CAAE/nK,SAAS,OAElByoG,EAAK/qG,iBAAkB,IAAG3L,EAAKu8C,kBAAkB/0C,SAAQ,SAAU4mE,EAAK1mE,GACpE0mE,EAAIviE,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACrCC,EAAKi2K,aAAavuK,KACnB,CAAEuG,SAAS,WAK1B,IAAIioK,EAAY,SAAUx/D,GACtB,MAAM12G,EAAOC,KACb,IAeIkrC,EAfA4xD,EAAS2Z,EAAKz+F,cAAc,gDAEhC,OAAIs7J,IAAkBA,EAAc4C,OAAOC,aACyU,IAA5W,8VAA8Vl0I,KAAKtZ,MACnWytJ,EAAa11K,KAAKX,EAAM4hC,EAAgB,0BACrC,GAEW,IAAlBm7D,EAAOz5F,QACP+yK,EAAa11K,KAAKX,EAAM4hC,EAAgB,0BACjC,GAEP80E,EAAK/qG,iBAAiB,sBAAwBrI,SAAWozG,EAAKz+F,cAAc,sBAAwBq+J,iBACpGD,EAAa11K,KAAKX,EAAM4hC,EAAgB,0BACjC,GAGP80E,EAAK/qG,iBAAiB,wBAA0BrI,QAAsE,QAA3D6nC,EAASurE,EAAKz+F,cAAc,2BAAwCkzB,EAAOmrI,iBAClH,MAAhBnrI,EAAOva,KACPylJ,EAAa11K,KAAKX,EAAM4hC,EAAgB,kCAExCy0I,EAAa11K,KAAKX,EAAM4hC,EAAgB,4BACrC,GAEiD,KAAxD80E,EAAKz+F,cAAc,oBAAoBnV,MAAM+mB,QAAmC,UAAjBkzE,EAAOj6F,OAAsC,SAAjBi6F,EAAOj6F,QAClGuzK,EAAa11K,KAAKX,EAAM4hC,EAAgB,+BACjC,IAKf,MAAM20I,EAAgBA,IAAMrD,EAAO7+B,QAAQ7pI,MAE3C,IAAIgsK,EAAqB3rK,eAAgBmb,GACrC,MAAMhmB,EAAOC,KACb,IAAIw2K,EAAazwJ,EAgBjB,GAAKhmB,EAAK+M,aAwEN/M,EAAK+M,aAAanN,QAAQ4xG,KAAKh5C,SAAWi+G,EAAa,WAxEnC,CACpB,IAAIC,EAAa12K,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAC7C,MAAMmzK,EAAe,CACjB1qK,QAAS,QACTC,OAAQ,CACJC,KAAM,GACNC,IAAK,IAETolG,KAAM,CACFh5C,SAAUi+G,EAAa,QAE3B33G,SAAUA,IA1BU,SAAU83G,EAAO5wJ,GACzC,MAAMhmB,EAAO42K,EACb52K,EAAKs/C,oBAAoB3gD,MAAK,SAAUoM,GACpC,IAAInL,EAAU,CACV4K,MAAOwb,MAEPhmB,EAAKzB,IAAImhD,WAAa1/C,EAAKJ,QAAQ6/C,oBACnC7/C,EAAUR,OAAOmD,OAAO,GAAI3C,EAAS,CACjC8/C,UAAWtgD,OAAOmD,OAAO,GAAIvC,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,QAASI,EAAKJ,QAAQ6/C,qBAIpG10C,EAAQsC,KAAKrN,EAAK0iG,aAAa3zF,SAAUnP,MAczBi3K,CAAsB72K,EAAMu2K,GAC5CpyE,OAAO,EACPmN,QAAQ,GAEc,IAAtBolE,EAAWpzK,QACXtD,EAAK+M,mBAAqB/M,EAAKzB,IAAI6M,WAAW,eAAgBurK,GAC9D32K,EAAK+M,aAAa5B,OAASnL,IAG3B22K,EAAapqK,SAAW,QACxBvM,EAAK+M,mBAAqB2pK,EAAW,GAAGtrK,WAAW,eAAgBurK,GACnE32K,EAAK+M,aAAa5B,OAASnL,GAE/BA,EAAK+M,aAAazD,SAAStJ,EAAK+M,aAAawvC,MAAQ,UAAYv8C,EAAKsJ,SAAStJ,EAAKu8C,MAAQ,UAE5Fv8C,EAAK+M,aAAaomG,YAAY,CAC1BC,SAAU,SAAUl/C,GAChB,MAAMn4B,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAIsQ,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACnD8wB,IACAA,EAAO5uB,SACP4uB,EAAS,MAEb,MAAMxzC,EAAOrZ,EAAK4hC,gBAAgB,sBAMlC,OALAirB,EAAS,IAAI9vB,EAAAA,EACb8vB,EAAO1vB,QAAUJ,EAAAA,EAAAA,QAAAA,QACjB8vB,EAAOxzC,KAAOA,EACdwzC,EAAOtvB,SAAW,IAClBsvB,EAAO7uB,UAAUnjB,IAAIkhB,GACd8wB,GAEXwmD,aAAc,GACdE,SAAU,WACNvzG,EAAKzB,IAAIk4D,YAAYz2D,EAAK0iG,iBAGlC1iG,EAAK+M,aAAaomG,YAAY,CAC1BC,SAAU,SAAUl/C,GAChB,MAAMn4B,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAIsQ,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACnD8wB,IACAA,EAAO5uB,SACP4uB,EAAS,MAQb,OALAA,EAAS,IAAI9vB,EAAAA,EACb8vB,EAAO1vB,QAAUJ,EAAAA,EAAAA,QAAAA,QACjB8vB,EAAOxzC,KAHM,oBAIbwzC,EAAOtvB,SAAW,IAClBsvB,EAAO7uB,UAAUnjB,IAAIkhB,GACd8wB,GAEXwmD,aAAc,GACdE,SAAU1oG,iBAENqoK,EAAO7+B,QAAUj1I,OAAOmD,OAAO,GAAI2wK,EAAOC,QAAS,CAAEhuK,OAAQ,IAAI+tK,EAAOC,QAAQhuK,gBAC1E2xK,EAAazmK,MAAMrQ,EAAM,CAACkzK,EAAO7+B,aAOnDr0I,EAAK+M,aAAanN,QAAQsM,OAAOE,IAAMpM,EAAK+M,aAAa60B,gBAAgB,sBAGzEy0I,EAAe,SAAUU,EAAS3sK,GAElC,GAAI01E,EAAW,CACX,IAAIk3F,EAAal3F,EAAU2e,uBAAuB,2BAA2B,GAC7E,GAAIyzE,EACAjrH,aAAairH,OAEZ,CAED,OADA8E,EAAW5pK,UAAY2pK,EACf3sK,GACJ,KAAKrK,EAAAA,EAAAA,QAAAA,KACDi3K,EAAWh5I,UAAUnjB,IAAI,eACzB,MACJ,KAAK9a,EAAAA,EAAAA,QAAAA,QACDi3K,EAAWh5I,UAAUnjB,IAAI,kBACzB,MACJ,KAAK9a,EAAAA,EAAAA,QAAAA,MACL,QACIi3K,EAAWh5I,UAAUnjB,IAAI,gBAGjCm8J,EAAWh5I,UAAUC,OAAO+zI,GAEhCE,EAAQhrH,YAAW,WACfgrH,EAAQ,KACR8E,EAAWh5I,UAAUnjB,IAAIm3J,KAC1B,UAGH/xK,KAAK1B,IAAIuvD,MAAMipH,EAAS,CAAE3sK,KAAMA,KAGpC6sK,EAAqBpsK,eAAgBy7I,EAAOxjJ,GAC5C,MAAM9C,EAAOC,KACb,IAAIi3K,EAAgB93K,OAAOmD,OAAO,GAAI2wK,EAAO7+B,QAAQp+H,cACrD,OAAQrJ,SAASqL,cAAc,uDAAuDnV,OAClF,IAAK,SACDA,GAAgB,IAChB,MACJ,IAAK,WACL,IAAK,KACL,IAAK,MACDA,EAAQ,IAAMA,EAAQ,IACtB,MACJ,IAAK,OACDA,EAAQ,IAAMA,EAIlBw0E,GACAA,EAAWgmF,QAGf,IAAId,GADJllF,EAAa,IAAIkmF,iBACOhB,OAExB,IACI,IAAIp4J,QAAa8uK,EAAO7+B,QAAQ5vI,MAAM2O,kBAAkBwC,MAAMs9J,EAAO7+B,QAAQx7H,IAAK,CAE9EzU,KAAMZ,EAAAA,EAAAA,KAAAA,mBAA2B0vK,EAAO7+B,QAAQvrI,OAAMw9I,EAAMr9I,QAAQ,MAAQ,IAAYq9I,EAAO9iJ,EAAAA,EAAAA,OAAAA,KAAe8iJ,EAAOxjJ,OAAOuB,OAAWA,OAAWA,GAAW,GAAQ6yK,GACrK3oJ,YAAa,kBACbL,OAAQ,OACRsuI,OAAQA,IAGZ,GAAIp4J,EAAKmqB,YAAYgD,WAAW,oBAAsBntB,EAAKmqB,YAAYgD,WAAW,YAAa,CAC3F,IAAII,GAAS,IAAIlU,WAAYE,gBAAgBvZ,EAAK4R,aAAc,YAC5DE,EAAQyb,EAAO1Z,cAAc,2BACjC,GAAI/B,EAEA,OADAmgK,EAAa11K,KAAKX,EAAMkW,EAAM9I,UAAWrN,EAAAA,EAAAA,QAAAA,OAClC,GAGX,MAAMwH,EAAM,GAMZ,OALAoqB,EAAOhmB,iBAAiB,cAAcnE,SAAQ,SAAUyC,GAChD1C,EAAI0B,QAAQgB,EAAKmD,WAAa,IAC9B7F,EAAIA,EAAIjE,QAAU2G,EAAKmD,cAGxB7F,EAMX,GAHInD,EAAKmqB,YAAYgD,WAAW,sBAC5BntB,EAAOotB,KAAKC,MAAMrtB,EAAK4R,eAEvB5R,EAAK2K,UAAY3K,EAAK2K,SAASzL,OAAS,EAAG,CAC3C,IAAIiE,EAeJ,OAd6B,IAAzBnD,EAAK2K,SAASzL,SACdiE,EAAM,CAAC++I,EAAMl0I,MAAM,KAAKlK,QAAO,SAAU+wB,EAAIC,GAAM,OAAOD,EAAGC,EAAGE,UAAUF,EAAGjwB,QAAQ,KAAO,MAAQ7E,EAAK2K,SAAS,GAAGylB,cAErHpwB,EAAK2K,SAASzL,OAAS,IACvBiE,EAAMnD,EAAK2K,SAAS7G,QAAO,SAAUivK,EAAIC,GACrC,GAAID,GAAMA,aAAcp2K,MACpB,OAAIo2K,EAAGluK,QAAQmuK,EAAG5iJ,WAAW8xH,IAAU,EAC5B6wB,EAAG7uK,OAAOg+I,EAAMl0I,MAAM,KAAKlK,QAAO,SAAU+wB,EAAIC,GAAM,OAAOD,EAAGC,EAAGE,UAAUF,EAAGjwB,QAAQ,KAAO,MAAQmuK,EAAG5iJ,aAE1G2iJ,IAEhB,KAGA5vK,EAEP,MAAO,GAEf,MAAOmS,GAGH,OAFIA,aAAeo9F,cAA6B,eAAbp9F,EAAI5Q,MACnCutK,EAAa11K,KAAKX,EAAM0Z,EAAK3Z,EAAAA,EAAAA,QAAAA,OAC1B,OAGXu1K,EAA2B,SAAUvqK,EAAS0pB,EAAU4iJ,GAExD7zK,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuH,EAAS,CAC7B6sH,UAAW,EACXlqH,OAAQ2pK,EACRz8J,OAAQ,SAAUvB,EAAMmf,GACpB,IAAIo+I,EAAQ32K,KACZ22K,EAAMlpK,OAAON,UAAY,oDAAsDw0B,EAAgB,aAAe,qFAC9Gg1I,EAAMlpK,OAAOswB,UAAUC,OAAO+zI,GAC1BG,GACAzgK,OAAOu1C,aAAakrH,GACxBA,EAAoBzgK,OAAOw1C,YAAWr8C,iBAClC,IAAK+B,SAASqL,cAAc,yCAAyC+lB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,QAAwB,CAC5G,IAAIqE,QAAa6yK,EAAmBt2K,KAAKi2K,EAAOniJ,EAAUpb,GACtDjV,IACIA,EAAKd,OACLk1B,EAASp0B,EAAKgmB,QAEdwsJ,EAAMlpK,OAAOswB,UAAUnjB,IAAIm3J,OAGxC,MAEPx5I,SAAU,SAAUx5B,GAChB+L,EAAQjI,MAAQ9D,EAAEihD,cAAc3B,QAAQx7C,MACxC7C,KAAKyN,OAAOswB,UAAUnjB,IAAIm3J,IAE9B35C,UAAW,SAAUj0H,GACjB,IAAIwlJ,EAAU7+I,EAAQjI,MAEtB,OADA7C,KAAKyN,OAAO9H,MAAMivE,UAAY,GAC1BzwE,EAAK6hC,QAAQ3iC,OAAS,EACfc,EAAK6hC,QAAQ/9B,QAAO,SAAUivK,EAAIvoH,EAAIzsD,GACzC,OAAQA,EAAI,EAAIg1K,EAAKG,EAAeH,EAAIvtB,IAAY0tB,EAAe1oH,EAAIg7F,MAGpE0tB,EAAelzK,EAAK6hC,QAAQ,GAAI2jH,MAGnD7+I,EAAQc,iBAAiB,8BAA8B,WACnDwrK,EAASr5I,UAAUnjB,IAAIm3J,MAE3BjnK,EAAQc,iBAAiB,YAAY,SAAU7M,GAC5B,IAAXA,EAAE05J,OACFl1J,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuH,EAAS,YAGzCA,EAAQc,iBAAiB,UAAU,SAAU+B,GACZ,IAAzB7C,EAAQjI,MAAMQ,QACdE,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuH,EAAS,YAGzCA,EAAQc,iBAAiB,SAAS,SAAU+B,GACX,IAAzB7C,EAAQjI,MAAMQ,QACdE,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuH,EAAS,aAIzCusK,EAAiB,SAAUj+J,EAAMuwI,GAEjC,OADAA,EAAU,IAAIrgI,OAAOqgI,EAAQpgJ,QAAQ,MAAO,IAAK,MAC1C,+BAAoC6P,EAAO,KAAQA,EAAK7P,QAAQogJ,EAAS,aAAe,aAG/F2tB,EAAU,SAAU7zK,GACpB,MAAM1D,EAAOC,KACb,IAAIu3K,EAAc,SAAU/yK,EAAOf,GAC/B,IAAImB,EAgBJ,OAfInB,aAAmBiM,EAAAA,EACnB9K,EAASJ,EAAMgxB,SAAS/xB,EAAQhC,aAE3BgC,aAAmBuN,EAAAA,EACxBpM,EAASJ,EAAMgyB,YAAY/yB,EAAQhC,aAE9BgC,aAAmBpB,EAAAA,EACxBuC,EAASJ,EAAMwyB,WAAWvzB,EAAQhC,aAE7BgC,aAAmBwM,EAAAA,EACxBrL,EAASJ,EAAM4yB,gBAAgB3zB,EAAQhC,aAElCgC,aAAmBmN,EAAAA,IACxBhM,EAASJ,EAAMoyB,iBAAiBnzB,EAAQhC,cAErCmD,GAEX,GAAKnB,EAAQe,MAAb,CAEA,IAAIA,EAAQf,EAAQe,MAAMlG,IAAIqhB,SAAS,4BAClCnb,EAYD+yK,EAAY/yK,EAAOf,GAXnBA,EAAQe,MAAMlG,IAAI8rD,SAAS,CACvBhrD,GAAI,2BACJ+K,KAAMrK,EAAAA,EAAAA,UAAAA,OACNslF,MAAOrlF,EACPsvB,SAAS,EACTjpB,OAAQgtK,MACT,SAAU5uK,GACT+yK,EAAY/yK,EAAOf,QAa/Bg5C,EAASQ,cAAgBryC,iBACrB,MAAM7K,EAAOC,KACP89E,EAAwB,+BACxB05F,EAAsB,+BACtBC,EAAwB,+BACxB14B,EAAuB,+BACvBhnD,EAAuB,+BACvBqM,EAAwB,+BACxBszE,EAA0B,+BAC1B/yD,EAA6B,+BAE7Bt7G,EAAW,GACjBA,EAAStJ,EAAKu8C,MAAQ,kBAAoBwhC,GAAuBxvE,QACjEjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBk7H,GAAqBlpK,QAC7DjF,EAAStJ,EAAKu8C,MAAQ,kBAAoBm7H,GAAuBnpK,QACjEjF,EAAStJ,EAAKu8C,MAAQ,iBAAmByiG,GAAsBzwI,QAC/DjF,EAAS,gCAAkC0uF,GAAsBzpF,QACjEjF,EAAS,8BAAgC+6F,GAAuB91F,QAChEjF,EAAStJ,EAAKu8C,MAAQ,gBAAkBo7H,GAAyBppK,QACjEjF,EAAStJ,EAAKu8C,MAAQ,wBAA0BqoE,GAA4Br2G,QAC5EvO,EAAKsJ,SAAWA,GAGpBozC,EAASI,OAAS,SAAUtkB,GACxB,MAAMx4B,EAAOC,KAEb,OAAOD,EAAK+8C,qBAAqBl+C,QAAQwiB,IAAI,CACzCrW,EAAAA,EAAAA,UAAAA,OAAAA,KAA8BhL,EAAMw4B,GACpCx4B,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,gBAAiB,IAAI,SAAU5yC,GAC7D3J,EAAKu8E,WAAWnvE,UAAYzD,SAKxC+yC,EAAS5W,SAAWj7B,eAAgBtM,GAChC,MAAMyB,EAAOC,KAqKb,OAnKA1B,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0Bf,IAC7B,GAAIA,EAAEyF,QAAUzE,EAAK0iG,aAAc,CAI/B,GAHI1iG,EAAK43K,aACL53K,EAAK43K,YAAYn5E,uBAAuB,iBAAiB,GAAGzgE,UAAUC,OAAO8zI,GAE7E/yK,EAAEsa,SAAWvZ,EAAAA,EAAAA,UAAAA,iBAMb,MADAs2K,EAAa11K,KAAKX,EAAM4hC,EAAgB,wBAAyB7hC,EAAAA,EAAAA,QAAAA,OAC3D,IAAId,MAAMD,EAAEsa,QALlB+8J,EAAa11K,KAAKX,EAAM4hC,EAAgB,0BAA2B,CAAExpB,MAAOpZ,EAAEoF,KAAKgU,QAAUrY,EAAAA,EAAAA,QAAAA,aASzGxB,EAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,qBAAmCf,IACtC,GAAIA,EAAEyF,QAAUzE,EAAK0iG,aAAc,CAC/B,MAAM34E,EAAQ/qB,EAAEyF,MAAMsK,SAAS9F,QAAQjK,EAAE0E,SACzC1D,EAAK8xK,gBAAgBzpK,KAAK0hB,GAC1B,MAAM8tJ,EAAK73K,EAAK+M,aAAaJ,IAAIsL,cAAc,uBAAyBlY,EAAAA,EAAAA,QAAAA,SAA0B,iBAAmBgqB,EAAQ,aACtH8tJ,EAAGv5H,QAAQv0B,MAClB8tJ,EAAG35I,gBAAgB,SACnB25I,EAAG75I,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACjB,IAAK,IAAIwX,EAAIwS,EAAQ,EAAGxS,EAAIvY,EAAEyF,MAAMsK,SAASzL,OAAQiU,IAAK,CACtD,MAAMugK,EAAM93K,EAAK+M,aAAaJ,IAAIsL,cAAc,8BAAgCV,EAAI,MAChFugK,GAAOA,EAAIx5H,QAAQv0B,QACnB+tJ,EAAIx5H,QAAQv0B,MAAQxR,SAASu/J,EAAIx5H,QAAQv0B,MAAO,IAAM,cAKhE/e,EAAAA,EAAAA,UAAAA,SAAAA,KAAgChL,EAAMzB,GAE5C60K,EAAa,WACT,IAAI2E,EAAU,SAAU9pB,EAAUx5H,GAC9B,OAAOx0B,KAAKL,QAAQyG,QAAUpG,KAAKL,QAAQyG,OAAO4nJ,IAAYhuJ,KAAKL,QAAQyG,OAAO4nJ,GAAUx5H,IAA8CjuB,EAAAA,EAAAA,OAAWynJ,GAAUx5H,IAEnK,MAAO,CACHnkB,QAAS,CACLu7B,UAAWksI,EAAQ53H,KAAKngD,EAAM,UAAW,aACzC8rC,YAAaisI,EAAQ53H,KAAKngD,EAAM,UAAW,eAC3C+rC,YAAagsI,EAAQ53H,KAAKngD,EAAM,UAAW,eAC3CisC,cAAe8rI,EAAQ53H,KAAKngD,EAAM,UAAW,iBAC7CgsC,YAAa+rI,EAAQ53H,KAAKngD,EAAM,UAAW,gBAE/Cw1B,KAAM,CACFuW,YAAagsI,EAAQ53H,KAAKngD,EAAM,OAAQ,eACxCisC,cAAe8rI,EAAQ53H,KAAKngD,EAAM,OAAQ,iBAC1CgsC,YAAa+rI,EAAQ53H,KAAKngD,EAAM,OAAQ,gBAE5Cs1B,MAAO,CACHz0B,OAAQk3K,EAAQ53H,KAAKngD,EAAM,QAAS,UACpCwyB,OAAQulJ,EAAQ53H,KAAKngD,EAAM,QAAS,UACpCuyB,MAAOwlJ,EAAQ53H,KAAKngD,EAAM,QAAS,SACnC6rC,UAAWksI,EAAQ53H,KAAKngD,EAAM,QAAS,aACvC8rC,YAAaisI,EAAQ53H,KAAKngD,EAAM,QAAS,eACzC+rC,YAAagsI,EAAQ53H,KAAKngD,EAAM,QAAS,eACzCgsC,YAAa+rI,EAAQ53H,KAAKngD,EAAM,QAAS,eACzCssC,SAAUyrI,EAAQ53H,KAAKngD,EAAM,QAAS,YACtCqsC,UAAW0rI,EAAQ53H,KAAKngD,EAAM,QAAS,aACvCmsC,kBAAmB4rI,EAAQ53H,KAAKngD,EAAM,QAAS,qBAC/CksC,kBAAmB6rI,EAAQ53H,KAAKngD,EAAM,QAAS,qBAC/CwsC,MAAOurI,EAAQ53H,KAAKngD,EAAM,QAAS,SACnC+0J,iBAAkBgjB,EAAQ53H,KAAKngD,EAAM,QAAS,uBAI1DqzK,EAAsB,WAClB,IAAI2E,EAAW,CACX,QAAWx0K,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIgD,EAAAA,EAAAA,OAAAA,QAAoB,CACpDqlC,UAAW,UACXC,YAAa,EACbC,YAAa,UACbC,YAAa,IAEjB,KAAQxoC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIgD,EAAAA,EAAAA,OAAAA,KAAiB,CAC9CulC,YAAa,UACbC,YAAa,IAEjB,MAASxoC,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIgD,EAAAA,EAAAA,OAAAA,MAAkB,CAChDulC,YAAa,aAGrB,OAAO/rC,EAAK2xK,gBAAkB,CAC1B,QAAWnuK,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIw0K,EAAS1nK,QAAStQ,EAAK2xK,gBAAgBrhK,QAAUtQ,EAAK2xK,gBAAgBrhK,QAAU,IACpH,KAAQ9M,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIw0K,EAASxiJ,KAAMx1B,EAAK2xK,gBAAgBn8I,KAAOx1B,EAAK2xK,gBAAgBn8I,KAAO,IACxG,MAAShyB,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIw0K,EAAS1iJ,MAAOt1B,EAAK2xK,gBAAgBr8I,MAAQt1B,EAAK2xK,gBAAgBr8I,MAAQ,KAC5G0iJ,GAGR3uK,EAAS9K,EAAIqB,QAAQyJ,OAErBu4B,EAAkB,SAAUl5B,EAAKy2C,GAC7B,OAAO37C,EAAAA,EAAAA,KAAAA,gBAAwB6F,EAAQX,EAAKy2C,IAGhD5gD,EAAIquD,OAAM,WACNruD,EAAI2G,mBAAmB,+BAA+BsC,SAAQ,SAAUwmD,GACpEA,EAAImlD,YAAY,CACZC,SAAU,SAAUl/C,EAAWh1C,GAC3B,MAAM6c,EAAY/7B,EAAKu8C,MAAQ,YAC/B,IAAIsQ,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACnD8wB,IACAA,EAAO5uB,SACP4uB,EAAS,MAEb,MAAMpoD,EAAQlG,EAAIqhB,SAASV,GAC3B,GAAIza,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CAC5E,MAAMsZ,EAAOrZ,EAAK4hC,gBAAgB,0BAClCirB,EAAS,IAAI9vB,EAAAA,EACb8vB,EAAO1vB,QAAUJ,EAAAA,EAAAA,QAAAA,QACjB8vB,EAAOxzC,KAAOA,EACdwzC,EAAOtvB,SAAW,IAClBsvB,EAAO7uB,UAAUnjB,IAAIkhB,GACrB8wB,EAAOvO,QAAQp/B,QAAUA,EACrBza,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MACf8sD,EAAO7uB,UAAUnjB,IAAIk3J,GACrBttK,EAAMs7D,qBAAqBphE,MAAMs5K,IAE7B,GAAKA,EAAgB3/I,WAAW4nC,WAAhC,CAKA,IAAIl9C,EAASve,EAAMic,yBAA2Bjc,EAAMic,2BAA6Bjc,EAAMmtB,aACvF5O,EAASA,EAAO7d,QAAO,SAAU6b,GAC7B,OAAO5hB,OAAOqB,UAAUC,eAAeC,KAAKs3K,EAAgB93G,aAAcn/C,EAAEoY,UAAUpY,EAAE/X,QAAQ,KAAO,QAE/F3F,QACRupD,EAAO7uB,UAAUnjB,IAAIm3J,QATrBnlH,EAAO7uB,UAAUnjB,IAAIm3J,MAY1B57J,OAAM,IAAMy2C,EAAO7uB,UAAUnjB,IAAIm3J,KAC/BjkH,SAAQ,IAAMlB,EAAO7uB,UAAUC,OAAO8zI,MAGnD,OAAOllH,GAEXwmD,aAAc,GACdE,SAAU,WAAY,IAAA2kE,EAClB,MAAMrrH,EAAS5sD,KACf,GAAI4sD,EAAO7uB,UAAU8gB,SAAS,mBAAqB+N,EAAO7uB,UAAU8gB,SAAS,cACzE,OAEJ,MAAMr6C,EAAQzE,EAAKzB,IAAIqhB,SAASitC,EAAOvO,QAAQp/B,SAC3Cg0J,EAAOC,UACPD,EAAO7+B,QAAUj1I,OAAOmD,OAAO,GAAI2wK,EAAOC,QAAS,CAAEhuK,OAAQ,IAAI+tK,EAAOC,QAAQhuK,WAC/E+tK,EAAO7+B,QAAQ5vI,OAASyuK,EAAO7+B,QAAQ5vI,OAASA,GAM9B,QAAdyzK,EAAAhF,EAAO7+B,eAAO,IAAA6jC,OAAA,EAAdA,EAAgBzzK,SAAUA,GAAUyuK,EAAO7+B,QAAQlvI,OAAO7B,SAC/D4vK,EAAO7+B,QAAQvrI,KAAO,KANtBoqK,EAAO7+B,QAAQ5vI,MAAQA,EACvByuK,EAAO7+B,QAAQvrI,KAAO,GACtBoqK,EAAO7+B,QAAQlvI,OAAS,GACxBnF,EAAK43K,YAAc,MAKvBd,EAAazmK,MAAMrQ,EAAM,CAACkzK,EAAO7+B,yBAM3Cr0I,EAAKokG,iBACJpkG,GAGX,MAAMm4K,EAAoB,SAAUn5K,GAChC,MAAMgvD,EAAMhvD,EAAEyF,MAAM4gF,MACpB,GAAIr3B,GAAOhvD,EAAEyF,QAAUupD,EAAI00C,aAAc,CACrC,GAAI1jG,EAAEw4D,SAAuC,IAA5Bx4D,EAAEw4D,QAAQi+F,cAGvB,OAFAznG,EAAI4pH,YAAYn5E,uBAAuB,iBAAiB,GAAGzgE,UAAUC,OAAO8zI,QAC5EsE,EAAa11K,KAAKqtD,EAAKpsB,EAAgB,sBAAuB7hC,EAAAA,EAAAA,QAAAA,MAGlE,IAAIgP,EAAW/P,EAAEyF,MAAMsK,SACvB,GAAIA,EAASzL,OAAS,EAAG,CACjB0qD,EAAIw6C,SAAWx6C,EAAIw6C,QAAQmH,SAC3B3hD,EAAIoqH,kBAAkB,CAAEzoE,QAAQ,IAChC3hD,EAAIzvD,IAAI6uD,eAAer+C,IAE3B,MAAMm6F,EAAkB,MAAQl7C,EAAIpsB,gBAAgB,WAC9CunE,EAAgB,MAAQn7C,EAAIpsB,gBAAgB,SAC5Cy2I,EAAkBrqH,EAAIzvD,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,OAAkB4X,MAAK3S,GAAKA,EAAEu6F,kBAC7Eh1C,EAAIzvD,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,OAAkBqF,MAAKJ,GAAKA,EAAEu6F,kBAAiBA,gBAC1E,MAEJ,IAAK,IAAI7gG,EAAI,EAAGA,EAAI4M,EAASzL,OAAQnB,IAAK,CACtC,MAAMgyB,EAAO++I,EAAO7+B,QAAQ5vI,MAAMG,QAAQsuK,EAAO7+B,QAAQvrI,MAAM8B,MAAM,GACrE,GAAIupB,EAAM,CACN,MAAMqjC,EAAU,GAChBA,EAAQ0xC,GAAmBgqE,EAAO7+B,QAAQ7pI,MAC1CgtD,EAAQ2xC,GAAiBh1E,EAAK5pB,KAAK8tK,GACnC,MAAMjvE,EAAU5lG,EAAAA,EAAAA,KAAAA,OAAeg0D,EAASzoD,EAAS5M,GAAG6B,WACpD+K,EAAS5M,GAAG+G,YACZ6F,EAAS5M,GAAG4B,QAAQqlG,IAG5Bp7C,EAAIp/C,iBACAG,EAASzL,OAAS,EACdyL,EAAS7G,QAAO,SAAU+wB,EAAIC,GAC1B,OAAQD,aAAcl4B,MAAQk4B,EAAK,CAACA,EAAG70B,OAAOkE,OAAO,CAAC4wB,EAAG90B,UAG7D,CAAC2K,EAAS,GAAG3K,MACjB8uK,EAAO7+B,QAAQ7pI,OAGvBxL,EAAEyF,MAAMlG,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0Bo4K,KAI5CG,EAAsB,SAAUt5K,GAClC,MAAMgvD,EAAMhvD,EAAEyF,MAAM4gF,MAChBr3B,GAAOhvD,EAAEyF,QAAUupD,EAAI00C,cAAgB1jG,EAAEwoC,OACzCwmB,EAAIoqH,kBAAkB,CAAEjzK,OAAQnG,EAAEwoC,SAI1CkV,EAAS67H,WAAa1tK,eAAgB1F,GAClC,MAAMnF,EAAOC,KAEb,GAAIizK,EAAO7+B,QAAQ5vI,OAASyuK,EAAO7+B,QAAQvrI,MAAQoqK,EAAO7+B,QAAQ7pI,OAASrF,EAAQ,CAC/E,IAAIy3H,QAAas2C,EAAO7+B,QAAQ5vI,MAAMyqB,YACtClvB,EAAKw4K,kBAAoB,CAACrzK,GAC1B+tK,EAAOC,QAAUD,EAAO7+B,cAClBmiC,EAAmBnmK,MAAMrQ,EAAM,CAACkzK,EAAO7+B,QAAQ7pI,QACrD0oK,EAAO7+B,QAAQ5vI,MAAM2O,kBAAkBwZ,UAAUC,UAAU+vG,GAAMj+H,MAAK,SAAUiuB,GAC5E,MAAMtX,EAAMsX,EAAUD,OAAOiwG,GACzB58H,EAAK0iG,cAAgB1iG,EAAK0iG,aAAaptF,MAAQA,IAC/CtV,EAAKzB,IAAIwsD,YAAY/qD,EAAK0iG,cAC1B1iG,EAAK0iG,aAAe,MAEnB1iG,EAAK0iG,cAuCN1iG,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,iBAA+Bu4K,GAC5Ct4K,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA+Bu4K,GAC3Ct4K,EAAK0iG,aAAa39F,eAAc,GAChC/E,EAAK0iG,aAAatqE,gBAElBp4B,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0Bo4K,GACvCn4K,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0Bo4K,GACtCn4K,EAAK0iG,aAAaptF,IAAMA,EACxBtV,EAAK0iG,aAAaktD,cAAgBsjB,EAAO7+B,QAAQvrI,KAAKswB,UAAU,EAAG85I,EAAO7+B,QAAQvrI,KAAKG,QAAQ,MAC/FjJ,EAAK0iG,aAAa9wE,YAAcshJ,EAAO7+B,QAAQvrI,KAAKswB,UAAU85I,EAAO7+B,QAAQvrI,KAAKG,QAAQ,KAAO,GACjGjJ,EAAK0iG,aAAaluE,WAAarvB,EAC/BnF,EAAK0iG,aAAa39F,eAAc,GAChC/E,EAAK0iG,aAAajzE,YAlDlBzvB,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,iBAA+Bu4K,GAC3Ct4K,EAAKzB,IACA8rD,SAAS,CACNhrD,GAAI,kBACJ+K,KAAMrK,EAAAA,EAAAA,UAAAA,IACNuV,IAAKA,EACL+vE,MAAOrlF,EACPsvB,SAAS,EACTovC,aAAc,WACdkxF,cAAesjB,EAAO7+B,QAAQvrI,KAAKswB,UAAU,EAAG85I,EAAO7+B,QAAQvrI,KAAKG,QAAQ,MAC5E2oB,YAAashJ,EAAO7+B,QAAQvrI,KAAKswB,UAAU85I,EAAO7+B,QAAQvrI,KAAKG,QAAQ,KAAO,GAC9EurB,WAAYrvB,EACZisB,aAAcrxB,EAAAA,EAAAA,OAAAA,KACdsG,OAAQ+sK,MAEXz0K,MAAK,SAAU8F,GACZzE,EAAK0iG,aAAej+F,EACpBA,EAAMlG,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAA0Bo4K,MAG/Cn4K,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GAC9CA,EAAE+L,UAAY/K,EAAK+M,eAEnBvJ,EAAAA,EAAAA,gBAAAA,SACAA,EAAAA,EAAAA,KAAAA,MAAcxE,EAAE+L,QAAQ4B,IAAK,UAEjC3M,EAAK0iG,aAAatqE,gBAClBp4B,EAAK0iG,aAAa39F,eAAc,GAChC/E,EAAKy4K,eACLvF,EAAO7+B,QAAQvrI,KAAO,GACtBoqK,EAAOC,QAAU,KACjBnzK,EAAK43K,YAAc,KACnB53K,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,YAA0Bo4K,GACvCn4K,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,iBAA+Bu4K,UACrCt4K,EAAKwoG,kBAsBhC9rD,EAASg8H,UAAY7tK,iBACjB,MAAM7K,EAAOC,KACb,IAAKD,EAAK24K,gBAEN,YADAtC,EAAa11K,KAAKX,EAAM4hC,EAAgB,2BAK5C,IAAIz8B,EACJ,GAHAnF,EAAK43K,YAAYn5E,uBAAuB,iBAAiB,GAAGzgE,UAAUnjB,IAAIk3J,GAGtEmB,EAAO7+B,QAAQlvI,OAAO7B,OAAS,EAAG,CAClC,MAAMP,EAAY/C,EAAK43K,YAAY3/J,cAAc,uCAAuCnV,MACxFqC,EAAS3B,EAAAA,EAAAA,OAAUzD,EAAAA,EAAAA,gBAAuBgD,IAAYsN,MAAM,KAAM6iK,EAAO7+B,QAAQlvI,aAGjFA,EAAS+tK,EAAO7+B,QAAQlvI,OAAO,GAGnCnF,EAAKu4K,WAAW53K,KAAKX,EAAMmF,IAG/Bu3C,EAAS07H,kBAAoB,SAAUx4K,GACnC,MAAMI,EAAOC,KACuB,IAAhCb,OAAOD,KAAKS,GAAS0D,QAAgBlE,OAAOqB,UAAUC,eAAeC,KAAKf,EAAS,UACnFI,EAAKwoG,QAAUhlG,EAAAA,EAAAA,KAAAA,OAAexD,EAAKwoG,QAAS,CAAEmH,OAAQ/vG,EAAQ+vG,UACvD/vG,EAAQuF,QAAUnF,EAAK0iG,cAAgB1iG,EAAK0iG,aAAaluE,sBAAsBhxB,EAAAA,EAAAA,OAAAA,UACtFxD,EAAKwoG,QAAUhlG,EAAAA,EAAAA,KAAAA,OAAexD,EAAKwoG,QAAS,CACxCowE,IAAK,CACDtjK,IAAK49J,EAAO7+B,QAAQ5vI,MAAM6Q,IAAK4F,MAAOg4J,EAAO7+B,QAAQ5vI,MAAMyW,OAE/D1Q,MAAO0oK,EAAO7+B,QAAQ7pI,MACtB1B,KAAMoqK,EAAO7+B,QAAQvrI,KACrB3D,OAAQvF,EAAQuF,OAASvF,EAAQuF,OAASnF,EAAK0iG,aAAaluE,WAAWjU,UACvEovF,QAAQvwG,OAAOqB,UAAUC,eAAeC,KAAKf,EAAS,WAAYA,EAAQ+vG,WAKtFjzD,EAASm8H,kBAAoB,WAEzB,OADa54K,KACDuoG,SAGhB9rD,EAAS/hB,YAAc,WACnB,MAAM36B,EAAOC,KACb,OAAID,EAAKwoG,QACE,CACHnpG,GAAIW,EAAKX,GACTy5K,YAAatnJ,KAAK0vE,UAAUlhG,EAAKwoG,UAWlC,MAGX9rD,EAAS0C,YAAc,SAAUtqC,GAC7B,MAAM9U,EAAOC,KAEb,GAAI6U,EAAMgkK,YAAa,CACnB,IAAI3xH,EAAOnnD,EAAKzB,IAAIw1D,sBAAsB1M,UAC1CrnD,EAAKzB,IAAIqb,QAAO,WACZ,IAAIm/J,EAAsBvnJ,KAAKC,MAAM3c,EAAMgkK,aAC3C,GAAIC,EAAoBH,KAAOG,EAAoB5zK,OAAQ,CACvD,IAAIynK,EAAW5sK,EAAKzB,IAAI4rC,WAAWhlC,QAAO6b,GAAKA,EAAE1L,KAAO0L,EAAE1L,MAAQyjK,EAAoBH,IAAItjK,KACtF0L,EAAE9F,MAAM3Q,SAAWwuK,EAAoBH,IAAI19J,MAAM3Q,SACjDqiK,EAAStpK,OAAS,IAClB4vK,EAAO7+B,QAAQ5vI,MAAQmoK,EAAS,GAChCsG,EAAO7+B,QAAQvrI,KAAOiwK,EAAoBjwK,KAC1CoqK,EAAO7+B,QAAQ7pI,MAAQuuK,EAAoBvuK,MAE3CxK,EAAKo4K,kBAAkB,CAAEzoE,OAAQopE,EAAoBppE,SAErDujE,EAAO7+B,QAAQ5vI,MAAM+qB,oBAAoB0jJ,EAAO7+B,QAAQvrI,MAAMnK,MAAK,SAAUyF,GACzE40K,EAAsB3oK,MAAMrQ,EAAM,CAACoE,GAAM,IACzCpE,EAAKu4K,WAAWQ,EAAoB5zK,QAEpCnF,EAAKo4K,kBAAkB,CAAEjzK,OAAQ4zK,EAAoB5zK,OAAQwqG,OAAQopE,EAAoBppE,SACzFujE,EAAO7+B,QAAQlvI,OAAS,CAAC3B,EAAAA,EAAAA,OAAAA,OAAAA,SAA0Bu1K,EAAoB5zK,SACvE+tK,EAAOC,QAAUD,EAAO7+B,QAAUj1I,OAAOmD,OAAO,GAAI2wK,EAAO7+B,QAAS,CAAElvI,OAAQ,IAAI+tK,EAAO7+B,QAAQlvI,UACjGnF,EAAKzB,IAAIw1D,sBAAsBvM,WAAWL,YAIlDzmB,MAAM,2BAetBgc,EAASi8H,cAAgB,WACrB,OAAOzF,EAAO7+B,QAAQlvI,OAAO7B,OAAS,GAG1Co5C,EAAS9tC,iBAAmB,SAAUxK,EAAM60K,GACxC,MAAMj5K,EAAOC,KACbD,EAAK8xK,gBAAkB,GAGvB9xK,EAAK+M,aAAaJ,IAAIsL,cAAe,IAAGjY,EAAK+M,aAAawvC,oBAAoBkb,UAAYz3D,EAAK+M,aAAa60B,gBAAgBx9B,EAAKd,OAAS,EAAI,4BAA8B,4BAA6B,CAAE,OAAUc,EAAKd,OAAQ,UAAa21K,IAE/Oj5K,EAAK+M,aAAaJ,IAAIqxB,UAAUnjB,IAAI,2BAEhC7a,EAAK43K,aACL53K,EAAK43K,YAAYn7G,cAAcC,YAAY18D,EAAK43K,aAGpD,MAAMsB,EA17BChF,IA67BPl0K,EAAK+M,aAAak5I,UAAU,CACxB7hJ,KAAMA,EACN8hJ,IAAK,CACDizB,QAAS,UACTC,QAAS,UACTC,QAAS,WAEbjvJ,MAAM,EACNoO,SAAU,SAAU8gJ,GAEhBt5K,EAAK+M,aAAa0hF,WAClB9mF,QAAQC,IAAI,kCACZ,IAAI2xK,EAAMD,EAAM3tK,iBAAiB,0BAC7B4L,EAAI,EACR,IAAK,IAAI7O,KAAOtE,EAAK,GACjB,GAAIhF,OAAOqB,UAAUC,eAAeC,KAAKu4K,EAAWxwK,GAAM,CACtD,MAAM8wK,EAAWN,EAAUxwK,GAAK0B,KAChC,GAAIovK,KAAcA,aAAoBp6K,UAC9Bo6K,EAASvwK,QAAQ,QAAU,GAC3BuwK,EAASvwK,QAAQ,UAAY,GAC7BuwK,EAASvwK,QAAQ,WAAa,GAC9BuwK,EAASvwK,QAAQ,SAAW,GAC5BuwK,EAASvwK,QAAQ,YAAc,GAE/B,IADA,IAAIwwK,EAAYH,EAAM3tK,iBAAiB,gBAAkB4L,EAAI,KACpDO,EAAI,EAAGA,EAAI2hK,EAAUn2K,OAAQwU,IAClC2hK,EAAU3hK,GAAGkmB,UAAUnjB,IAAI,cAInC2+J,GAAYA,aAAoBp6K,QAChCuI,QAAQC,IAAI,kBAEhB2P,IAIR,IAAK,IAAIpV,EAAI,EAAGA,EAAIo3K,EAAIj2K,OAAQnB,IAC5Bo3K,EAAIp3K,GAAG0J,iBAAiB,SAAS,SAAU7M,GAEvC,GADAA,EAAE+uE,mBACE9tE,KAAK+9B,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UAA5B,CACA,IAAIgqB,EAAQ9pB,KAAKq+C,QAAQv0B,MACZ1lB,MAAT0lB,GACA/pB,EAAK0iG,aAAankG,IAAI6uD,eAAe,CAACptD,EAAK0iG,aAAa3zF,SAASgb,SAEzEwvJ,EAAIp3K,GAAG0J,iBAAiB,cAAc,WAClC,IAAI5L,KAAK+9B,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,UAA5B,CACA,IAAIgqB,EAAQ9pB,KAAKq+C,QAAQv0B,MACzB,GAAa1lB,MAAT0lB,EAAJ,CACA,IAAI0Q,EAAOz6B,EAAK0iG,aAAa3zF,SAASgb,GAClC0Q,GAAQA,EAAKl6B,UAEbg3K,EAAQ52K,KAAKX,EAAMy6B,GAEvB,IAAIi/I,EAAaz5K,KAAK0L,iBAAiB,mBACnC+tK,EAAWp2K,OAAS,EACpBo2K,EAAWlyK,SAAQ,SAAUmyK,GACrBA,EAAM9rK,YAAc8rK,EAAM7rK,cAC1B6rK,EAAMnvK,MAAQmvK,EAAMliH,cAI5Bx3D,KAAK0L,iBAAiB,MAAMnE,SAAQ,SAAU0/F,GACtCA,EAAGr5F,YAAcq5F,EAAGp5F,cACpBo5F,EAAG18F,MAAQ08F,EAAGzvC,mBAI9B8hH,EAAIp3K,GAAG0J,iBAAiB,cAAc,WAClC,IAAIke,EAAQ9pB,KAAKq+C,QAAQv0B,MACzB,GAAa1lB,MAAT0lB,EAAJ,CACA,IA9gBZtlB,EA8gBgBg2B,EAAOz6B,EAAK0iG,aAAa3zF,SAASgb,GAClC0Q,GAAQA,EAAKl6B,WA/gB7BkE,EAihB0Bg2B,EAjhBVh2B,MAAMlG,IAAIqhB,SAAS,8BAEnCnb,EAAM2zB,oBAqhBFkhJ,EAAM3tK,iBAAiB,iDAAiDnE,SAAQ,SAAUglC,GACtFA,EAAM3gC,iBAAiB,SAAS,SAAU7M,GACtCA,EAAE+uE,wBAGVurG,EAAM3tK,iBAAiB,0BAA0BnE,SAAQ,SAAUoyK,GAC/DA,EAAO/tK,iBAAiB,UAAU,SAAU+B,GACpC3N,KAAK4/B,SACL5/B,KAAKo5J,mBAAmB1tJ,iBAAiB,mBAAmBnE,SAAQ,SAAUmF,GACtEA,EAAIkB,YAAclB,EAAImB,cACtBnB,EAAInC,MAAQmC,EAAI8qD,oBAMpCj0D,EAAAA,EAAAA,QAAAA,mBAAAA,kCAAgE81K,GAChEA,EAAM3tK,iBAAiB,iDAAiDnE,SAASxI,GAAMA,EAAEyiD,WAAWzjB,UAAUnjB,IAAI,mBAClHy+J,EAAM3tK,iBAAiB,SAASnE,SAASqhB,IACrCA,EAAEhd,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAUf,GAC7CA,EAAE+uE,oBACH,CAAE9/D,SAAS,OAGdjO,EAAK8xK,gBAAgBxuK,OAAS,IAC9BtD,EAAK8xK,gBAAgB1nJ,OAAO5iB,SAASwH,IACjC,MAAM6oK,EAAK73K,EAAK+M,aAAaJ,IAAIsL,cAAc,8BAAgCjJ,EAAI,aAC5E6oK,EAAGv5H,QAAQv0B,MAClB8tJ,EAAG35I,gBAAgB,SACnB25I,EAAG75I,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aAGrBgB,MAAMoX,KAAKnY,EAAK+M,aAAaJ,IAAIhB,iBAAiB,uBAAyB5L,EAAAA,EAAAA,QAAAA,SAA0B,MAAMyH,SAASqyK,IAChH,MAAM9vJ,EAAQxR,SAASshK,EAAWv7H,QAAQv0B,MAAO,IACjD8vJ,EAAWv7H,QAAQv0B,MAAQA,EAAQ/pB,EAAK8xK,gBAAgB3sK,QAAQyoB,GAAMA,EAAI7D,IAAOzmB,WAKrFE,EAAAA,EAAAA,gBAAAA,SACAA,EAAAA,EAAAA,KAAAA,MAAcxD,EAAK+M,aAAaJ,IAAK,eAOrD+vC,EAASs5H,kBAAoB,SAAU9iJ,EAAKs7C,GAAM,GAC9C,MAAMxuE,EAAOC,KACb,OAAO,IAAIpB,SAASgM,eAAgB/L,GAEhC,GADA0E,EAAAA,EAAAA,KAAAA,aACKxD,EAAK6xK,cAwEN7xK,EAAK6xK,cAAcxkK,OACnBvO,EAAQkB,EAAK85K,YAAYr1K,WAzEJ,CACrB,MAAMipD,EAAa,CACfxhD,OAAQ,CACJC,KAAMnM,EAAK4hC,gBAAgB,yBAG7Bm4I,EAAe/5K,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,kBAA6B,GAC1Eu2K,GACArsH,EAAWnhD,SAAWwtK,EAAavtK,SAASC,MAC5CzM,EAAK6xK,oBAAsBkI,EAAa3uK,WAAW,eAAgBsiD,IAGnE1tD,EAAK6xK,oBAAsB7xK,EAAKzB,IAAI6M,WAAW,eAAgBsiD,GAEnE1tD,EAAKzB,IACA+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAA6Bf,GACzDA,EAAE+L,UAAY/K,EAAK6xK,gBACnB3qH,YAAW,IAAMlnD,EAAK85K,YAAY/4I,UAAU,KAC5Cv9B,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAK43K,YAAa,CAChC/pG,cAAeA,IAAM7tE,EAAKy4K,qBAI1C,MAAM9uK,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,SACrDv8C,EAAK6xK,cAAcxkK,KAAK1D,GACxB3J,EAAK6xK,cAAcllK,IAAIsL,cAAe,IAAGjY,EAAKu8C,qBAAqB1wC,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WACpGC,EAAK6xK,cAAc5kK,UACpB,CAAEgB,SAAS,IACTjO,EAAK85K,cACN95K,EAAK85K,kBAAoB95K,EAAKzB,IAAI6M,WAAW,OAAQ,CACjDuB,IAAK3M,EAAK6xK,cAAcjqB,oBAAoB3vI,cAAe,IAAGjY,EAAKu8C,mBACnEl2C,OAAQrG,EAAKqG,SAEjBvH,EAAQkB,EAAK85K,YAAYr1K,OACzBzE,EAAK85K,YAAYxrK,GAAGvO,EAAAA,EAAAA,MAAAA,SAAsB,SAAUf,GAChDA,EAAE0E,QAAQY,YAAa,EACvBtE,EAAK6xK,cAAc5kK,QAEnB,MAAM+sK,EAAKh6K,EAAK43K,YAAY3/J,cAAe,eAAcjY,EAAKX,0BAA0ByD,MACxF,IAAIqC,EACJ,GACS,eADD60K,EAEA70K,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,WAAqB,KAAMxE,EAAE0E,QAAS1D,EAAKzB,IAAI4I,UAG5DhC,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,OAAiB,KAAMxE,EAAE0E,QAAS1D,EAAKzB,IAAI4I,KAGhE,OADAhC,EAAOywK,MAAQoE,EACPh7K,EAAE0O,OAAOwlB,MACb,IAAK,UACD/tB,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,WAC3C,MACJ,IAAK,OACL,IAAK,WACDz8B,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,QAC3C,MACJ,IAAK,YACDz8B,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,OAGnDsxI,EAAO7+B,QAAQlvI,OAAOkD,KAAKlD,GAC3BowK,EAAwBllK,MAAMrQ,GAC9BwD,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAK43K,YAAa,CAChC/pG,cAAeA,IAAK7tE,EAAKy4K,oBAGjCz4K,EAAK85K,YAAYxrK,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GACnDA,EAAEgO,KAAKixC,iBAQnBj+C,EAAK6xK,cAAcllK,IAAIsL,cAAe,IAAGjY,EAAKu8C,mBAAmBve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBmzB,GAC1GlzB,EAAK6xK,cAAcllK,IAAIsL,cAAe,IAAGjY,EAAKu8C,kBAAkBve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBmzB,GACtGA,GACAlzB,EAAK85K,YAAY5uF,QAAQh4D,EAAMs7C,OAM3C,MAAMwqG,EAAwB,SAAU50K,EAAO61K,GAE3C,MAAMj6K,EAAOC,KAMb,IAAK,IAAIyI,KAJTwrK,EAAwB,WACpB,OAAO9vK,GAGKA,EAAM,CAClB,MAAMtB,EAAQsB,EAAKsE,GACflF,EAAAA,EAAAA,KAAAA,WAAmBV,EAAMsH,QACzBtH,EAAMu1E,YAAa,GAI3B,GAAI4hG,EAEA,OAAO,IAAIp7K,SAAQ,SAAUC,GACzB49C,EAASa,gBAAgBb,EAASH,MAAQ,QACtC,CACI29H,UAAW9H,EACXzpK,WAAYvE,EACZ45E,UAAWh+E,EAAKX,KACjB,SAAUsK,GACT,MAAMizE,EAAS58E,EAAK43K,YACdlhE,EAAO12G,EAAKw1K,UAClB7rB,EAAMjzC,GACNA,EAAK5mD,mBAAmB,YAAanmD,GACrCm2E,EAAU9hD,UAAUC,OAAO8zI,GAC3B,IAAIwC,EAAQ79D,EAAKjY,uBAAuB,YACxC,GAAqB,IAAjB81E,EAAMjxK,OACNs5E,EAAO6hB,uBAAuB,mCAAmC,GAAGpxE,aAAa,WAAY,QAC5F,CACDuvD,EAAO6hB,uBAAuB,mCAAmC,GAAGvgE,gBAAgB,YACpFq2I,EAAM,GAAG1oK,iBAAiB,UAAU,WAChCyoK,EAAsBjkK,MAAMpQ,KAAM,CAACy2G,EAAMtyG,OAG7CsyG,EAAK/qG,iBAAkB,eAAc3L,EAAKX,kBAAkBmI,SAAQ2yK,IAChEA,EAAItuK,iBAAiB,UAAUhB,eAAgB7L,GAC3C03G,EAAKz+F,cAAe,IAAGykC,EAASH,2BAA2Blf,SAA8B,WAAnBr+B,EAAE0O,OAAO5K,MAC/E,MAAMiyK,EAAaj1F,EAAU7nE,cAAc,gCAW3C,GAVA88J,EAAW13I,UAAW,EAClBp9B,KAAKw8D,cAAcz+B,UAAU8gB,SAAS,yBAA0C,UAAf7+C,KAAK6C,QACtEiyK,EAAWjyK,MAAQ,GACnBiyK,EAAW13I,UAAW,EACtB75B,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuxK,EAAY,UAEpC90K,KAAKw8D,cAAcz+B,UAAU8gB,SAAS,yBAA0C,SAAf7+C,KAAK6C,QACtEiyK,EAAWjyK,MAAQ,GACnBiyK,EAAW13I,UAAW,GAEM,KAA5B03I,EAAWjyK,MAAM+mB,QACb5pB,KAAKw8D,cAAcz+B,UAAU8gB,SAAS,yBAA0C,UAAf7+C,KAAK6C,MAAmB,CACzF,IAAIi9C,EAAMnzC,SAASk5C,YAAY,cAC/B/F,EAAI26D,UAAU,SAAS,GAAO,GAC9Bq6D,EAAW90I,cAAc8f,UAMzC22D,EAAKz+F,cAAc,cAAcpM,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,WAClE,IAAIg1K,EAAar+D,EAAKz+F,cAAc,oBAIpC,GAHAzU,EAAAA,EAAAA,GAAAA,aAAAA,KAAwBuxK,EAAY,SAChCvB,GACAA,EAAgB2C,OAAOl4I,UACtBi4I,EAAUv1K,KAAKX,EAAM02G,GACtB,OAEJ,IAAI4vC,EAAQ,GAAGp+I,OAAOvH,KAAK+1G,EAAK/qG,iBAAiB,cAAc,SAAUstB,EAAIC,GACzE,OAAOD,GAAMA,EAAK,IAAM,IAAMC,EAAGp2B,QAClC,IAEH,IAAIk3K,EADctjE,EAAKz+F,cAAc,gDAClBnV,MAEnBs3K,EAAsB/pK,MAAMrQ,EAAM,CAAC+0K,EAAYzuB,EAAO0zB,EAAI5vK,IAE1DmrK,EAAwBllK,MAAMrQ,GAC9B+0K,EAAWjyK,MAAQ,KACpB,CAAEmL,SAAS,IAEd,MAAMosK,EAAc,SAAUr7K,GAC1BgB,EAAKg2K,kBAAkBh3K,EAAE0O,OAAO5K,QAEpC4zG,EAAK/qG,iBAAiB,2BAA2BnE,SAAQ4mE,GAAOA,EAAIviE,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBs6K,EAAa,CAAEpsK,SAAS,MACjInP,EAAQ43G,WAO1B0jE,EAAwB,SAAUrF,EAAWzuB,EAAM70E,EAAUrnE,GAE/D,IAAItH,GAx2CkBmyF,EAw2CA8/E,EAv2ClBvB,EACOA,EAAgB8G,cAEhB/G,EAEAA,EAAc+G,cAAclhJ,UAAU,GAAK,IAAMm6I,EAAc+G,cAAclhJ,UAAU,EAAG,GAAK,IAAMm6I,EAAc+G,cAAclhJ,UAAU,EAAG,GAElJ67D,EAAMnyF,OARD,IAAUmyF,EAy2CtB,IAAI4gF,EA91Cc,SAAU5gF,GAC5B,GAAIu+E,EACA,OAAOA,EAAgB1wK,MAEtB,GAAIywK,EAEL,OAAOA,EAAczwK,MAEpB,GAAmB,SAAfmyF,EAAM7qF,KACX,OAAO,IAAI05B,KAAKmxD,EAAMnyF,OAAOy3K,mBAAmBlxK,EAAQ,CAAEmxK,SAAU,QAEnE,GAAmB,WAAfvlF,EAAM7qF,KAAmB,CAC9B,IAAIqwK,EAAa,IAAIv3G,eAAe75D,GAAQ+vB,UAAU,EAAG,GACzD,OAAO67D,EAAMnyF,MAAM0G,QAAQ,IAAKixK,GAEpC,OAAOxlF,EAAMnyF,MA+0CK43K,CAAgB3F,GAClC,QAAQ,GACJ,KAAK3qK,EAAKnB,QAAQ,YAAc,EAC5B4sK,EAAct9J,SAASzV,EAAO,IAC9B,MACJ,KAAKsH,EAAKnB,QAAQ,cAAgB,EAClC,KAAKmB,EAAKnB,QAAQ,eAAiB,EACnC,KAAKmB,EAAKnB,QAAQ,aAAe,EACjC,KAAKmB,EAAKnB,QAAQ,gBAAkB,EAChC4sK,EAAchuK,WAAW/E,EAAO,IAChC,MACJ,KAAKsH,EAAKnB,QAAQ,eAAiB,GAAmB,UAAdwoE,EACpCokG,EAAc,IAAMA,EAAc,IAClC,MACJ,KAAKzrK,EAAKnB,QAAQ,aAAe,GAAmB,SAAdwoE,EAClCokG,EAAc,GAKtB,IAAI7mK,EACJ,GAAI5E,EAAKnB,QAAQ,aAAe,GAAKmB,EAAKnB,QAAQ,SAAW,EACzD,GAAInG,EAAO,CACP,MAAMqV,EAAO,IAAI2rB,KAAKhhC,EAAQ,aAAa+xF,cACrCk/E,EAAK,IAAIjwI,KAAKhhC,EAAQ,aAAa+xF,cAGrC7lF,EAFc,SAAdyiE,EAEI,IAAIjuE,EAAAA,EAAAA,OAAAA,IAAcA,EAAAA,EAAAA,OAAAA,QAAkB8iJ,EAAOnuI,EAAM47J,IAGjD,IAAI3B,EAAkB3gG,GAAW6gG,KAAKhsB,EAAOnuI,EAAM47J,QAI3D/kK,EAAI,IAAIojK,EAAkB3gG,GAAW6gG,KAAKhsB,QAK9Ct3I,EAAI,IAAIojK,EAAkB3gG,GAAW6gG,KACjChsB,GACe,SAAd70E,GAAsC,aAAdA,EAA2B,IAAM,IAC1D3uE,GACe,WAAd2uE,GAAwC,aAAdA,EAA2B,IAAM,KAEpEziE,EAAE2rK,WAAY,EACd3rK,EAAE4mK,MAAQnkG,EACVziE,EAAE8mK,aAAeD,EACjB3C,EAAO7+B,QAAQlvI,OAAOkD,KAAK2G,IAGzB4rK,EAAkB/vK,eAAgBpG,EAAOm4E,EAAQ3mE,GACnD,MAAMjW,EAAOC,KACbD,EAAK43K,YAAch7F,EACnBs2F,EAAO7+B,QAAQ5vI,MAAQA,EACvByuK,EAAO7+B,QAAQp+H,aAAeA,EAC9Bi9J,EAAO7+B,QAAQx7H,IAAM5C,EAAaqiB,WAAWC,oBAAoBqoC,IAAIH,KAAKo6G,IAAI/oK,KAC1E,IAAI+G,IAAIq6J,EAAO7+B,QAAQx7H,KAAKu0D,OAASxgE,SAAS0F,SAAS86D,OACvD8lG,EAAO7+B,QAAQx7H,IAAMq6J,EAAO7+B,QAAQx7H,IAAIugB,UAAU85I,EAAO7+B,QAAQx7H,IAAI5P,QAAQ,KAAO,IAIxF,IAAI+Z,EAASve,EAAMic,yBAA2Bjc,EAAMic,2BAA6Bjc,EAAMmtB,YAKvF,IAHA5O,EAASA,EAAO7d,QAAO,SAAU6b,GAC7B,OAAO5hB,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAakqD,aAAcn/C,EAAEoY,UAAUpY,EAAE/X,QAAQ,KAAO,QAE7F3F,OAAS,EAAG,CACnBw8E,EAAU9hD,UAAUC,OAAO8zI,GACbn1F,EAAO6hB,uBAAuB,YAAY,GAElD5yF,iBAAiB,UAAU,WAC7B,GAAK5L,KAAK6C,MAOV85E,EAAO3kE,cAAc,0CAA2C2kE,GAAQ5+C,UAAUnjB,IAAIm3J,GACtFkB,EAAO7+B,QAAQ7pI,MAAQvK,KAAKL,QAAQK,KAAK66K,eAAezhK,KACxDymE,EAAU9hD,UAAUnjB,IAAIk3J,GACxBmB,EAAO7+B,QAAQvrI,KAAO7I,KAAK6C,MAC3Bi4K,EAAgB1qK,MAAMrQ,EAAM,CAACkzK,EAAO7+B,QAAQ5vI,MAAOyuK,EAAO7+B,QAAQvrI,KAAM8zE,QAXxE,CACI,IAAI85B,EAAO12G,EAAKw1K,UAChB7rB,EAAMjzC,GACN,IAAK,IAAIv0G,EAAI,EAAGA,EAAIu0G,EAAKpiG,SAAShR,OAAQnB,IAAKu0G,EAAKh6C,YAAYg6C,EAAKpiG,SAASnS,IAC9EnC,EAAKy4K,wBAWZ,GAAsB,IAAlBz1J,EAAO1f,OAAc,CAG1B,GADwB2S,EAAakqD,aAAan9C,EAAO,GAAGoW,UAAUpW,EAAO,GAAG/Z,QAAQ,KAAO,IAE3FiqK,EAAO7+B,QAAQ7pI,MAAQyL,EAAakqD,aAAan9C,EAAO,GAAGoW,UAAUpW,EAAO,GAAG/Z,QAAQ,KAAO,IAAI6b,MAClGouJ,EAAO7+B,QAAQvrI,KAAOka,EAAO,SACvB+3J,EAAgB1qK,MAAMrQ,EAAM,CAACkzK,EAAO7+B,QAAQ5vI,MAAOyuK,EAAO7+B,QAAQvrI,KAAM8zE,QAE7E,CACD,IAAIo+F,EAAQp+F,EAAO6hB,uBAAuB,iBAAiB,GAC3Du8E,EAAMh9I,UAAUC,OAAO8zI,GACvBiJ,EAAMlrH,mBAAmB,YAAa,uDAA2DluB,EAAgB,2BAA6B,gBAMlJp+B,EAAAA,EAAAA,KAAAA,aACAiB,EAAMlG,IAAIuvD,MAAMtqD,EAAAA,EAAAA,KAAAA,gBAAwBiB,EAAMlG,IAAIqB,QAAQyJ,OAAQ,2BAA4B,CAAEe,KAAMrK,EAAAA,EAAAA,QAAAA,SAGxGg7K,EAAkBlwK,eAAgBpG,EAAMuhB,EAAW42D,GACrD,MAAM58E,EAAOC,KACb,IACI,MAAMmE,QAAaK,EAAM+qB,oBAAoBxJ,GAE7C,MAAQ,CAAErd,WAAYvE,EAAMsyG,WADTsiE,EAAsB3oK,MAAMrQ,EAAM,CAACoE,GAAM,KAGhE,MAAOsV,GACH,IAAIshK,EAAQp+F,EAAO6hB,uBAAuB,iBAAiB,GAM3D,MALAu8E,EAAMh9I,UAAUC,OAAO8zI,GAClBr4J,EAGDshK,EAAMlrH,mBAAmB,YAAa,qDAAyDp2C,EAAM,UAFrGshK,EAAMlrH,mBAAmB,YAAa,uDAA2DluB,EAAgB,2BAA6B,UAG5IloB,IAIRo9J,EAAcjsK,eAAgBw0C,GAChC,MAAMr/C,EAAOC,KACb,GAAID,EAAK43K,cAAgB53K,EAAK43K,YAAYn7G,cAUtC,OATA7vD,SAAS+0B,KAAK70B,YAAY9M,EAAK43K,aAC/B53K,EAAK43K,YAAYn5E,uBAAuB,iBAAiB,GAAGzgE,UAAUC,OAAO8zI,GAC7EmB,EAAO7+B,QAAUh1F,EACjB6zH,EAAO7+B,QAAQlvI,OAAOA,QAAQ6J,GAAMA,aAAaxL,EAAAA,EAAAA,OAAAA,UAAmBgE,SAASwH,IACrEA,EAAEzO,oBAAoB06K,MAAMv3K,QAAQpB,UAAY0M,EAAEzO,SAASkE,OAC3DzE,EAAK85K,YAAYr1K,MAAMwyB,WAAWjoB,EAAEzO,UACpCyO,EAAEzO,oBAAoB06K,MAAMv3K,QAAQuN,WAAajC,EAAEzO,SAASkE,OAC5DzE,EAAK85K,YAAYr1K,MAAMgyB,YAAYznB,EAAEzO,aAEtCP,EAAK43K,YAEX,KAAAsD,EACD,MAAMjlK,QAAqBklK,EAAgB9qK,MAAMrQ,EAAM,CAACq/C,EAAO56C,QACzDypE,QAAcktG,EAAkB/qK,MAAMrQ,EAAM,CAACq/C,EAAO56C,MAAOwR,EAAcopC,EAAOv2C,OAChF8zE,QAAeg+F,EAAgBvqK,MAAMrQ,EAAM,CAACq/C,EAAO56C,MAAOypE,EAAOj4D,IACvE,GAAiB,QAAjBilK,EAAI77H,EAAOl6C,cAAM,IAAA+1K,GAAbA,EAAe53K,OAAQ,CACvB,MAAM6B,EAAS,IAAIk6C,EAAOl6C,QAC1BnF,EAAKy4K,eACL,MAAMr0K,QAAa22K,EAAgB1qK,MAAMrQ,EAAM,CAACq/C,EAAO56C,MAAO46C,EAAOv2C,KAAM8zE,IACrEy+F,EAAYj3K,EAAKsyG,KAAKz+F,cAAc,gCACpCumD,EAAWp/D,OAAOoO,QAAQpJ,EAAKuE,YAAYE,MAAMs5B,GAAM3+B,EAAAA,EAAAA,KAAAA,WAAmB2+B,EAAE,GAAG/3B,QAAO,GAC5F,GAAIixK,EAAW,CACX,IAAItxJ,EAAQ3qB,OAAOD,KAAKiF,EAAKuE,YAAYxD,QAAQ2S,GAAY,YAANA,IAAiB7O,QAAQ9D,EAAO,GAAGyrD,cAAgB4N,GAC1G68G,EAAUz7K,QAAQmqB,EAAQ,GAAGrlB,UAAW,EACxC4vK,EAAsBjkK,MAAMgrK,EAAW,CAACj3K,EAAKsyG,KAAMtyG,EAAKuE,aAE5D,MAAM2yK,EAAan2K,EAAO,aAAc3B,EAAAA,EAAAA,OAAAA,YAAwB2B,EAAO,GAAGy5D,aAAe,MACzFx6D,EAAKsyG,KAAKz+F,cAAc,IAAMjY,EAAKu8C,MAAQ,sBAAwB++H,EAAWz7H,cAAgB,MAAMhgB,SAAU,EAC9G,MAAM07I,EAAWp2K,EAAO+C,QAAO,CAAC+wB,EAAIC,IAAgBD,EAAG3wB,OAAO4wB,aAAc11B,EAAAA,EAAAA,OAAAA,YAAwB01B,EAAGulC,WAAavlC,IAAO,IAC3H,IAAK,IAAI/2B,KAAKo5K,EAAU,CACpB,MAAMvsK,EAAIusK,EAASp5K,GACbq5K,EAAUC,GAAezsK,GACzB5E,EAAOhG,EAAKuE,WAAWqG,EAAE4hD,cAAgB4N,GAAUp0D,KACnD2qK,QAAmB2G,GAAgBrrK,MAAMrQ,EAAM,CAACgP,EAAGwsK,EAASp3K,EAAMo6D,IAClExvD,aAAaxL,EAAAA,EAAAA,OAAAA,SACf42K,EAAsB/pK,MAAMrQ,EAAM,CAAC+0K,EAAY/lK,EAAE4hD,aAAc4qH,EAASpxK,IAGhFmrK,EAAwBllK,MAAMrQ,GAElC,OAAOkuE,IAITitG,EAAkB,SAAU12K,GAC9B,IAAI+F,EACAmxK,EACJ,GAAIl3K,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CACrC,MAAMo0B,EAAO1vB,EAAMG,UACnB4F,EAAQ2pB,EAAKA,EAAK7wB,OAAS,GAC3Bq4K,EAAsBl3K,EAAMs7D,yBAE3B,IAAIt7D,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAKpB,OAJAyK,EAAQ/F,EAAM+F,MACdmxK,EAAsBl3K,EAAMgV,yBAKhC,OAAOkiK,GAGLP,EAAoBvwK,eAAgBpG,EAAOwR,EAAa+P,GAC1D,MAAMhmB,EAAOC,KACb,IAAIuK,EAYAwY,EAXJ,GAAIve,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAAsB,CACrC,MAAMo0B,EAAO1vB,EAAMG,UACnB4F,EAAQ2pB,EAAKA,EAAK7wB,OAAS,OAE1B,IAAImB,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAIpB,OAHAyK,EAAQ/F,EAAM+F,MAOlB,OAAO,IAAI3L,SAAQ,SAAUC,GACrB2F,EAAMic,0BACNsC,EAAS,GACTve,EAAMic,2BAA2BlZ,SAAQ,SAAU1E,EAAOo/H,GACtD,IAAI/tG,EAAO1vB,EAAMG,QAAQ9B,GAErB1D,OAAOqB,UAAUC,eAAeC,KAAKsV,EAAakqD,aAAcr9D,EAAMs2B,UAAUt2B,EAAMmG,QAAQ,KAAO,KACrG+Z,EAAO3a,KAAK,CAAES,KAAMhG,EAAO0H,MAAO2pB,EAAKA,EAAK7wB,OAAS,QAE7D0f,EAAOoH,MAAK,SAAUrP,EAAGsP,GACrB,OAAItP,EAAEvQ,MAAQ6f,EAAE7f,OAAe,EAC3BuQ,EAAEvQ,MAAQ6f,EAAE7f,MAAc,EACvB,MAIXwY,EAASve,EAAMmtB,YAGnB5xB,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,UAC9B,CACIv2B,UAAW4b,EAAgB,oBAAqB,CAAE,UAAap3B,IAC/DwY,OAAQA,IACT,SAAUrZ,GAETiD,SAAS+0B,KAAKh2B,iBAAkB,IAAG3L,EAAKu8C,gBAAgB/0C,SAAQC,GAAOA,EAAIw2B,WAE3E,IAAIkE,EAAIv1B,SAASC,cAAc,OAC/Bs1B,EAAE2tB,mBAAmB,YAAanmD,GAClC,IAAIukE,EAAQ,KAYZ,GAXI/rC,EAAEp0B,WAAWzK,OAAS,IACtB4qE,EAAQ/rC,EAAEhrB,WACVvK,SAAS+0B,KAAK70B,YAAYohE,KAE9B4R,EAAY5R,EAAMuwB,uBAAuB,iBAAiB,IAChDzgE,UAAUnjB,IAAIk3J,GAExBvuK,EAAAA,EAAAA,KAAAA,UAAkB0qE,EAAO,CACrBL,cAAeA,IAAM7tE,EAAKy4K,iBAG1Bj1K,EAAAA,EAAAA,KAAAA,WAAoB,CACpB,IAAIo4K,EAAO,EACX,QAAQ,GACJ,KAAKhvK,SAAS+0B,KAAKwhH,YAAc,KAAOv2I,SAAS+0B,KAAKwhH,YAAcv2I,SAAS+0B,KAAKylH,aAClF,KAAKx6I,SAAS+0B,KAAKwhH,YAAc,KACjC,KAAKv2I,SAAS+0B,KAAKwhH,YAAc,KAC7By4B,EAAO,GAGf97F,EAAUl6E,MAAMivE,UAAYjoE,SAAS+0B,KAAKylH,aAAew0B,EAAO97F,EAAUu5E,mBAAmBjS,aAAetnE,EAAUy5E,uBAAuBnS,aAEjJpnJ,EAAK43K,YAAc1pG,EACnBA,EAAMuwB,uBAAuB,mCAAmC,GAAG5yF,iBAAiB,SAAS,WACzF7L,EAAK04K,eAEL1yJ,GAAahD,EAAO1f,OAAS,IAC7BvC,MAAMoX,KAAK+1D,EAAMj2D,cAAc,sCAAsCpP,MAAMgoI,GAAQA,EAAI/tI,QAAUkjB,IAAWthB,UAAW,GAC3H5F,EAAQovE,UAMxBxxB,EAASu5H,aAAe,SAAU9wK,GAC9B,MAAMnF,EAAOC,KACb,IAAIyH,EAAMvC,EAIV,GAHIA,aAAkB3B,EAAAA,EAAAA,OAAAA,SAClBkE,EAAMwrK,EAAO7+B,QAAQlvI,OAAO8D,QAAQ9D,IAEpCuC,GAAO,GAAKA,EAAMwrK,EAAO7+B,QAAQlvI,OAAO7B,OAAQ,CAChD,MAAMu4K,EAAgB3I,EAAO7+B,QAAQlvI,OAAO6D,OAAOtB,EAAK,GAAG,GACvDm0K,aAAyBr4K,EAAAA,EAAAA,OAAAA,SACzBq4K,EAAct7K,SAASkE,MAAMszB,cAAc8jJ,EAAct7K,UAE7Dg1K,EAAwBllK,MAAMrQ,KAItC08C,EAAS+7H,aAAe,WACpBvF,EAAO7+B,QAAQlvI,OACVA,QAAO6J,GAAKA,aAAaxL,EAAAA,EAAAA,OAAAA,UACzBgE,SAAQwH,IAAC,IAAA8sK,EAAAC,EAAA,OAAc,QAAdD,EAAI9sK,EAAEzO,gBAAQ,IAAAu7K,GAAO,QAAPC,EAAVD,EAAYr3K,aAAK,IAAAs3K,OAAP,EAAVA,EAAmBhkJ,cAAc/oB,EAAEzO,aACrD2yK,EAAO7+B,QAAQlvI,OAAO7B,OAAS,GAGnCo5C,EAAS84H,QAAU,WAEf,OADav1K,KACD23K,aADC33K,KACmB23K,YAAY3/J,cAAc,mBAG9D,MAAMwjK,GAAiB,SAAUzsK,GAAG,IAAAgtK,EAAAC,EAChC,QAAQ,GACJ,KAAKjtK,aAAaxL,EAAAA,EAAAA,OAAAA,QACd,MAAO,KACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,WACd,MAAO,MACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,YACd,MAAO,KACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,SAElB,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,qBAElB,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,kBACd,MAAO,KACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,OACd,IAAIomJ,GAA6D,QAAnDoyB,EAAA,oCAAoC7pK,KAAKnD,EAAE46I,gBAAQ,IAAAoyB,GAAQ,QAARC,EAAnDD,EAAqDxqH,cAAM,IAAAyqH,OAAR,EAAnDA,EAA6DhwK,UAAW+C,EAAE46I,QAExF,OADA56I,EAAEktK,WAAatyB,EAAQpgJ,QAAQ,MAAO,IAClCogJ,EAAQr4H,WAAW,KACZq4H,EAAQ76H,SAAS,KAAO,WAAa,OAErC66H,EAAQ76H,SAAS,KAAO,SAAW,GAClD,KAAK/f,aAAaxL,EAAAA,EAAAA,OAAAA,OACd,MAAO,OACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,UAEd,OADAwL,EAAEktK,WAAa,IAAIp4I,KAAK90B,EAAEmtK,eAAehnG,cAAgB,IAAM,IAAIrxC,KAAK90B,EAAEmtK,eAAe/mG,WAA1E,KAAiG,IAAItxC,KAAK90B,EAAEmtK,eAAej0I,UACnI,MACX,KAAKl5B,aAAaxL,EAAAA,EAAAA,OAAAA,WACd,MAAO,aACX,KAAKwL,aAAaxL,EAAAA,EAAAA,OAAAA,OACd,MAAO,WAGbk4K,GAAkB7wK,eAAgBmE,EAAGyiE,EAAWrtE,EAAMo6D,GAAU,IAAA49G,EAAAC,EAClE,MAAMr8K,EAAOC,KACP80K,EAAanoK,SAASC,cAAc,SAC1CkoK,EAAWjyK,OAA8D,QAAtDs5K,EAAA,oCAAoCjqK,KAAKnD,EAAEktK,mBAAW,IAAAE,GAAQ,QAARC,EAAtDD,EAAwD5qH,cAAM,IAAA6qH,OAAR,EAAtDA,EAAgEpwK,UAAW+C,EAAEktK,WAChG,MAAM9xK,EAAOhG,EAAKuE,WAAWqG,EAAE4hD,cAAgB4N,GAAUp0D,KAEzD,QAAQ,GACJ,KAAK5G,EAAAA,EAAAA,KAAAA,WAAmB4G,GACpB,IAAI3F,QAAczE,EAAKg2K,kBAAkBhnK,EAAEzO,SAAS+F,WAAU,GAC9DtG,EAAK6xK,cAAc5kK,QACnB,IAAI9H,EAAS,IAAI6J,EAAEtP,YAAY,KAAMsP,EAAEzO,SAAUP,EAAKzB,IAAI4I,KAE1D,OADAhC,EAAOywK,MAAQnkG,EACPziE,EAAEzO,SAAS+F,WACf,IAAK,UACD,IAAI3G,EAASqP,EAAEzO,SAASgB,iBAAiB,GACrC5B,EAAO,GAAG,KAAOA,EAAO,GAAG,IAAMA,EAAO,GAAG,KAAOA,EAAO,GAAG,IAC5DA,EAAO,GAAG,IAAOA,EAAO,GAAG,IAAMA,EAAO,GAAG,IAAOA,EAAO,GAAG,GAC5DwF,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,OAE3Cz8B,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,WAC/C,MACJ,IAAK,OACDz8B,EAAO2wK,aAAe91K,EAAK4hC,gBAAgB,QAInDsxI,EAAO7+B,QAAQlvI,OAAOkD,KAAKlD,GAC3BV,EAAMozB,WAAW7oB,EAAEzO,UACnB,MACJ,KAAK6J,EAAKnB,QAAQ,QAAU,EAC5B,KAAKmB,EAAKnB,QAAQ,UAAY,EAC9B,KAAKmB,EAAKnB,QAAQ,WAAa,EAC/B,KAAKmB,EAAKnB,QAAQ,SAAW,EAC7B,KAAKmB,EAAKnB,QAAQ,YAAc,EAC5B8rK,EAAW3qK,KAAO,SACdA,EAAKnB,QAAQ,QAAU,GAAKmB,EAAKnB,QAAQ,SAAW,EACpD8rK,EAAWnkJ,KAAO,IAElBmkJ,EAAWnkJ,KAAO,SACtB,MACJ,KAAKxmB,EAAKnB,QAAQ,aAAe,EACjC,KAAKmB,EAAKnB,QAAQ,SAAW,EACzB8rK,EAAW3qK,KAAO,OAClB,MACJ,KAAKA,EAAKnB,QAAQ,WAAa,EAC3B8rK,EAAW3qK,KAAO,OAG1B,OAAO2qK,GAx3Df,GA63DAvxK,EAAAA,EAAAA,QAAAA,SAAsBkuK,EACtB,W,wiCCnhEAluK,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAWiM,EAAAA,EAErB,MAAMktB,EAAc,gBAAgB,IAAAukB,EAAA,IAAAz+C,QAAA65K,EAAA,IAAA5pK,QAAA6pK,EAAA,IAAA7pK,QAAA8pK,EAAA,IAAA9pK,QAEpC,MAAMk3E,UAA4BzqD,YAM9Bz/B,c,UACIG,QAAQiT,EAAA,KAAA0pK,GAAA1pK,EAAA,KAAAypK,GAAAzpK,EAAA,KAAAwpK,GAAAx8K,EAAA,wBAAAA,EAAA,uB,EAAA,K,EAAAohD,E,EAAA,CAAAr+C,UAAA,EAAAC,MAJO,IAAIL,S,kBAKnB,MAAMzC,EAAOC,KAEbD,EAAKzB,IAAM,KACXyB,EAAKq8C,UAAW,EAChBr8C,EAAKs8C,YAAa,EAClBt8C,EAAKu8C,MAAQv8C,EAAKw8C,eAElB,IAAItxC,EAAM+R,UAAU3Z,OAEpBtD,EAAKJ,QAAUsE,EAAAA,EAAAA,OAAY,GAAIgH,EAAM,EAAI+R,UAAU,GAAKA,UAAU,IAElE,MAAMw/J,EAAYz8K,EAAKJ,QAAQ+M,KAAOsQ,UAAU,GAChD,GAAIw/J,EAAW,CACX,MAAMhgH,EAAgBv4D,EAAAA,EAAAA,OAAYu4K,GAClCz8K,EAAK2M,IAAM8vD,OAGXz8D,EAAK2M,IAAM3M,EAAKy8D,cAGpBz8D,EAAKsJ,SAAWtJ,EAAKJ,QAAQ0J,UAAYtJ,EAAKsJ,SAC9CtJ,EAAKy8C,cAAe,EAGxBvf,oBACI,MAAMl9B,EAAOC,KAEb,GADAD,EAAKg+B,UAAUnjB,IAAI+uE,EAAoBrtC,MAAOv8C,EAAKu8C,OAC/Cv8C,EAAKzB,eAAem+K,EAAAA,EACpB,OAEJ,MAAMC,EAAY38K,EAAK69B,aAAa,OACpC,IAAIt/B,EACJ,GAAIo+K,EAAW,CACX,MAAMC,EAAahwK,SAAS85D,eAAei2G,GAC3C,GAAIC,EAEA,GADAr+K,EAAMm+K,EAAAA,EAAAA,IAAaE,GACfr+K,EACAA,EAAI6M,WAAWpL,OAEd,CACgB,IAAImxH,kBAAiB,SAAU0rD,EAAc3rD,GAC1D,IAAK,MAAMI,KAAYurD,EACG,cAAlBvrD,EAASlnH,OACT7L,EAAMm+K,EAAAA,EAAAA,IAAaE,GACfr+K,IACAA,EAAI6M,WAAWpL,GACfkxH,EAASK,kBAKhBrjH,QAAQ0uK,EAAY,CAAEE,WAAW,SAIjD,CACD,IAAI17H,EAAUphD,EACd,GACIohD,EAAUA,EAAQqb,eACbz8D,EAAKw+C,kBAAoB4C,aAAmBwoC,IAC7C5pF,EAAKw+C,iBAAmB4C,SAGzBA,IAAYA,EAAQpjB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,MAC9CxB,EAAMm+K,EAAAA,EAAAA,IAAat7H,GACf7iD,EACAA,EAAI6M,WAAWpL,GAGfA,EAAKsL,iBAKjByxK,uBACI98K,KAAK+8K,aAGTxgI,eACI,OAAOv8C,KAAKs8C,MAGhBstC,aAAa/gF,GACT,MAAM9I,EAAOC,KAIb,OAHIb,OAAOqB,UAAUC,eAAeC,KAAKX,EAAKJ,QAASkJ,KACnD9I,EAAK8I,GAAQ9I,EAAKJ,QAAQkJ,IAEvB9I,EAGX28C,OAEI,OADA18C,KAAK2F,MAAMg3C,QAAU,GACd38C,KAGXsF,OACI,MAAMvF,EAAOC,KAGb,OAFAD,EAAK4F,MAAMg3C,QAAU,OACrB58C,EAAK68C,cACE78C,EAGX88C,OAAOtkB,GACH,MAAMx4B,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKg9C,WAAW,MAAM,WACnDh9C,EAAKi9C,sBACmB,mBAAbzkB,GACPA,QAKZ3tB,uBAIAkyC,qBAAqBI,GACjB,MAAMn9C,EAAOC,KAIb,OAHKD,EAAKo9C,eACNp9C,EAAKo9C,aAAeD,GAEjBA,EAGXtyC,iBAAiBzG,EAAMo0B,GACnB,MAAMx4B,EAAOC,KAMb,IAAIqJ,EALAtJ,EAAKzB,KACLyB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,oBAAkC,CAAEs9C,WAAYj5C,IAEjEpE,EAAKg+B,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,SAAyBC,EAAKs8C,YAG/Ct8C,EAAKsJ,gBACAtJ,EAAKk9C,gBAEc,iBAAlBl9C,EAAKsJ,UAA0BtJ,EAAKsJ,SAASg0C,UAIpDh0C,EAAWtJ,EAAKsJ,SAChBtJ,EAAKsJ,SAAW,GAChBtJ,EAAKsJ,SAAStJ,EAAKu8C,OAASjzC,GAL5BA,EAAWtJ,EAAKsJ,SAAStJ,EAAKu8C,OAQlC,MAAM5yC,QAAa3J,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAOn4C,GACpDpE,EAAKoN,UAAYzD,GACZ3J,EAAKy8D,eAAiBz8D,EAAK2M,KAC5B3M,EAAK2M,IAAIG,YAAY9M,GAErBA,EAAKzB,KACLyB,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,eAEbyD,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,IAIR3tB,sBAAsB2yC,EAAYp5C,EAAMo0B,GACpC,MAAMx4B,EAAOC,KAEP8iC,EAAQ,SAAUz5B,GACpB,QAAwB,IAAbA,EACP,MAAO,GAEX,MAAMK,EAAOL,EAASlF,GAItB,OAHIZ,EAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAAS7uB,GAENA,GAGN3J,EAAKsJ,gBACAtJ,EAAKk9C,gBAEf,MAAM5zC,EAAWtJ,EAAKsJ,SAASk0C,GAC/B,MAAwB,mBAAbl0C,SACPwM,EAAM9V,EAAIs8K,EAAAW,GAAAt8K,KAAJX,EAAuB,CAAEqJ,OAAQrJ,EAAKzB,KAAOyB,EAAKzB,IAAIqB,QAAQyJ,OAAQ0yB,UAAW/7B,EAAKu8C,QACrFxZ,EAAM/iC,EAAKsJ,SAASk0C,KAGpBza,EAAMz5B,GA+CrBuB,eAAetM,GACX,MAAMyB,EAAOC,KAeb,OAdKD,EAAKX,KACNW,EAAKX,GAAKW,EAAKJ,QAAQP,IAAMmE,EAAAA,EAAAA,OAAU,CACnCqjC,OAAQ7mC,EAAKu8C,MAAM11B,OAAO,SAASvjB,OAAS,GAAK,OAGzDtD,EAAKzB,IAAMA,QACLyB,EAAK88C,SACN98C,EAAKy8D,gBACNl+D,EAAIoO,IAAIG,YAAY9M,GACpBA,EAAK2M,IAAMpO,EAAIoO,KAEf3M,EAAKJ,QAAQw9B,QACbp9B,EAAK89C,WAEF99C,EAGXg9K,aACI,MAAMh9K,EAAOC,KACb,GAAID,EAAKzB,IAAK,CACVyB,EAAKzB,IAAIykB,OAAOpY,QAAQpD,SAAQ/C,IACxBA,EAAM4gF,QAAUrlF,GAChBA,EAAKzB,IAAIwsD,YAAYtmD,MAG7B,MAAMiD,EAAM1H,EAAKzB,IAAI6rC,SAASnhC,QAAQjJ,GAClC0H,GAAO,GACP1H,EAAKzB,IAAI6rC,SAASphC,OAAOtB,EAAK,GAElC1H,EAAKzB,IAAM,KAEf,OAAOyB,EAGX89C,WACI,MAAM99C,EAAOC,KAWb,OAVID,EAAKzB,KAAOyB,EAAKzB,IAAIw/C,eAAiB/9C,EAAKzB,IAAIw/C,gBAAkB/9C,IACjEA,EAAKzB,IAAIy/C,sBAAwBh+C,EAAKzB,IAAIw/C,cAC1C/9C,EAAKzB,IAAIw/C,cAAcE,cAE3Bj+C,EAAKq8C,UAAW,EACZr8C,EAAKzB,MACLyB,EAAKzB,IAAIw/C,cAAgB/9C,EACzBA,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,IAC1DA,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAEgL,QAAS/K,KAEnDA,EAGXi+C,WAAWC,GACkB,IAArBjhC,UAAU3Z,SACV46C,GAAY,GAGhB,MAAMl+C,EAAOC,KAEb,GADAD,EAAKq8C,UAAW,EACZr8C,EAAKzB,IAAK,CAGV,GAFAyB,EAAKzB,IAAIw/C,cAAgB,MAEpBG,EAAW,CAGZ,IAAIC,EAAcn+C,EAAKzB,IAAI6/C,oBACvBD,IAAgBn+C,GACXA,EAAKzB,IAAIy/C,wBAA0Bh+C,EADlBm+C,EAAc,KAG9BA,IACNA,EAAcn+C,EAAKzB,IAAIy/C,uBAGvBG,GACAA,EAAYL,WAEpB99C,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAEgL,QAAS/K,IAC5DA,EAAKwL,QAAQzL,EAAAA,EAAAA,MAAAA,kBAAgC,CAAEgL,QAAS/K,IAE5D,OAAOA,EAGXq+C,SACI,MAAMr+C,EAAOC,KAOb,OANAD,EAAKs8C,YAAa,EAClBt8C,EAAKg+B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,iBACfC,EAAKs+C,QAAQC,UAChBv+C,EAAKw+C,kBAAoBx+C,EAAKw+C,iBAAiBC,iBAC/Cz+C,EAAKw+C,iBAAiBC,gBAAgBz+C,GAEnCA,EAGX0+C,QAAQ9+C,GACJ,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrBI,EAAKs8C,YAAa,EAClBt8C,EAAKg+B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,UACnB,IAAI6d,EAAU5d,EAAK4hC,gBAAgB,mBAQnC,OAPIhiC,EAAQ0Z,SACRsE,EAAW,GAAEA,OAAahe,EAAQ0Z,UAEtCtZ,EAAKs+C,QAAQC,UAAY3gC,EACrB5d,EAAKw+C,kBAAoBx+C,EAAKw+C,iBAAiBG,kBAC/C3+C,EAAKw+C,iBAAiBG,iBAAiB3+C,GAEpCA,EAGX4+C,YACI,MAAM5+C,EAAOC,KAOb,OANID,EAAK2M,KACL3M,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,aAEvBC,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,CAAEgL,QAAS/K,IAExDA,EAGX68C,cACI,MAAM78C,EAAOC,KAOb,OANID,EAAK2M,KACL3M,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,aAE1BC,EAAKzB,KACLyB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAAiC,CAAEgL,QAAS/K,IAE1DA,EAGX6+C,gBACI,MAAM7+C,EAAOC,KACb,QAAID,EAAK2M,KACE3M,EAAK2M,IAAIqxB,UAAU8gB,SAAS/+C,EAAAA,EAAAA,QAAAA,aAK3CuL,gBACI,MAAMtL,EAAOC,KACb,OAAOD,EAAKo9C,cAAgB,IAAIv+C,SAAQ,SAAUC,EAASk1B,GACvDh0B,EAAKg8B,IAAIj8B,EAAAA,EAAAA,MAAAA,eAA4B,WACjCjB,EAAQkB,SAKpB++C,mBAAmBC,EAAUlf,EAAOmf,GAChC,MAAMj/C,EAAOC,KAKb,OAJiB++C,EAAWh/C,EAAK2L,iBAAiBqzC,GAAY,CAACh/C,IACtDwH,SAAQ,SAAUC,GACvBA,EAAIoE,iBAAiBi0B,EAAOmf,MAEzBj/C,EAGXi9C,sBACI,OAAOh9C,KAGXi/C,cACI,OAAO,EAGXtd,gBAAgBl5B,EAAKy2C,GACjB,MACM91C,EADOpJ,KACO1B,IADP0B,KACkB1B,IAAIqB,QAAQyJ,OAAS7C,EAAAA,EAAAA,OACpD,OAAOtC,EAAAA,EAAAA,gBAAqBmF,EAAQX,EAAKy2C,GAG7CvY,SAEI,OAAOpjC,EAAAA,EAAAA,OAAU,CACbqjC,OAFS5mC,KAEIZ,GAAK,MAI1Bs7B,cAEI,OADa16B,KACJw8C,aACE,GAEJ,KAGX2C,YAAYC,GACR,OAAOp/C,KAGX4K,0BACI,MAAM7K,EAAOC,KAMb,OALAD,EAAKu/C,gBAAkBv/C,EAAKu/C,iBAAmBv/C,EAAKzB,IAAI2G,mBAAmB,oCAAoC,GAC1GlF,EAAKu/C,kBACNv/C,EAAKu/C,sBAAwBv/C,EAAKzB,IAAI6M,WAAW,0BAErDpL,EAAKu/C,gBAAgBp0C,OAASnL,EACvBA,EAAKu/C,gBAGhB10C,yBACI,MAAM7K,EAAOC,KACb,IAAKD,EAAKy/C,mBAAqBz/C,EAAKJ,QAAQ6/C,iBACxC,OAAO,KAEX,GAAIz/C,EAAK0/C,UACL,OAAO1/C,EAAK0/C,UAKhB,GAHKl8C,EAAAA,EAAAA,KAAAA,iBACK,+BAEmC,kBAAlCxD,EAAKJ,QAAQ6/C,iBACpB,GAAIz/C,EAAKzB,IAAK,CACV,MAAMohD,QAAqB3/C,EAAKzB,IAAIihD,mBAEhCx/C,EAAK0/C,UADLC,GAIiB,IAAIn8C,EAAAA,EAAAA,KAAAA,eAIzBxD,EAAK0/C,UAAY,IAAIl8C,EAAAA,EAAAA,KAAAA,eAIzB,GAAIxD,EAAKzB,IAAK,CACV,MAAMohD,QAAqB3/C,EAAKzB,IAAIihD,mBAEhCx/C,EAAK0/C,UADLC,EACiB,IAAIn8C,EAAAA,EAAAA,KAAAA,UAAkBA,EAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIm8C,EAAa//C,QAASI,EAAKJ,QAAQ6/C,mBAGlF,IAAIj8C,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKJ,QAAQ6/C,uBAIxDz/C,EAAK0/C,UAAY,IAAIl8C,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKJ,QAAQ6/C,kBAG5D,OAAOz/C,EAAK0/C,UAkChBpxC,GAAGgyC,EAAQ9nB,GACP,OAAA1iB,EAAO7V,KAAIu8K,EAAAU,GAAAv8K,KAAJV,KAAiBqgD,EAAQ9nB,GAGpCwD,IAAIskB,EAAQ9nB,GACR,OAAA1iB,EAAO7V,KAAIu8K,EAAAU,GAAAv8K,KAAJV,KAAiBqgD,EAAQ9nB,EAAU,CAAEkoB,MAAM,IAGtDryC,IAAIiyC,EAAQ9nB,GACR,MAAMx4B,EAAOC,KACP0gD,EAAYL,EAAOluC,MAAM,KAoB/B,OAnBIomB,EACAmoB,EAAUn5C,SAAQ,SAAUu4C,GACxB,MAAMve,EAAQxhC,EAAKogD,WAAWL,GAC1Bve,GAASA,EAAMlQ,IAAIkH,IACnBx4B,EAAK4gD,oBAAoBb,EAAKve,EAAM/iB,IAAI+Z,OAKhDmoB,EAAUn5C,SAAQ,SAAUu4C,GACxB,MAAMve,EAAQxhC,EAAKogD,WAAWL,GAC1Bve,IACAA,EAAMh6B,SAAQ,SAAUq5C,GACpB7gD,EAAK4gD,oBAAoBb,EAAKc,MAElCrf,EAAMsf,YAIX9gD,EAGXwL,QAAQpB,EAAMxK,GAEV,IAAImhD,EACAnhD,IACAmhD,EAAY,CACRb,OAAQtgD,IAGhB,MAAMkgC,EAAQ,IAAImhB,YAAY72C,EAAM22C,GAPvB9gD,KAQRggC,cAAcH,GAGvBqhB,mBAAmBnC,EAAUxmB,GACzB,MAAMx4B,EAAOC,KAOb,OAAO,SAAUjB,GACb,MAAMoiD,EAAUnhD,KACVohD,EAAYriD,EAAEoL,KACpB,IAAIk3C,EAAat+C,EAAAhD,EAAIkhD,GAAkBziC,IAAI2iC,GACtCE,IACDA,EAAa,GACbt+C,EAAAhD,EAAIkhD,GAAkBniC,IAAIqiC,EAASE,IAEvC,IAAIC,EAAYD,EAAWD,GAS3B,GARKE,IACDD,EAAWD,GAAaE,EAAY,IAEnCA,EAAUvC,KACXuC,EAAUvC,GAAYxmB,IAIrBx5B,EAAEwiD,0BAIH,IAHA,IAEI38C,EAFA2kB,GAAU,EACV/hB,EAAMzI,EAAE0O,OAELjG,GAAOA,IAAQ25C,GAAS,CAC3B,IAAKpC,KAAYuC,EACT95C,EAAI+hB,SAAW/hB,EAAI+hB,QAAQw1B,KAC3Bx1B,GAAU,EACV3kB,EAAS08C,EAAUvC,GAAUr+C,KAAKygD,EAASpiD,GAC3CA,EAAEwiD,2BAA4B,GAGtC,GAAIh4B,EACA,OAAO3kB,EAEX4C,EAAMA,EAAIg6C,aAM1BnhD,oBAAoB8J,EAAMxK,GACtB,MAAMggD,EAAWx1C,EAAKyc,OAAO,EAAG,GAAGg5B,cAAgBz1C,EAAKyc,OAAO,GAC/D,IAAKrjB,EAAAA,EAAAA,QAAWo8C,GAAW,CACvB,MAAMtgD,QAAe,QAAO,KAAOsgD,GACnCp8C,EAAAA,EAAAA,QAAWo8C,GAAYtgD,EAAOiP,QAElC,OAAO,IAAI/K,EAAAA,EAAAA,QAAWo8C,GAAU,KAAMhgD,IAE7C,eAAAq9K,EA9Z2Br9K,GAEpBA,EAAUA,GAAW,GACrB,MAAM69C,EAFOx9C,KAEUqJ,SAEjBo0C,EAAmB,GACzB,IAAK,IAAIh1C,KAAO+0C,EAAW,CACvB,MAAME,EAAej1C,EACrB,IAAIY,EAAWm0C,EAAUE,GACD,iBAAbr0C,EACPo0C,EAAiBr1C,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKC,GAC7Cnb,EAAAA,EAAAA,KAAQ,CACJ8R,IAAKhM,EACL4kB,OAAQ,MACRtC,aAAc,SAEbjtB,MAAK,SAAUstB,GACZwxB,EAAUE,GAAgBr0C,EAAW6yC,EAAAA,EAAAA,QAAmBlwB,EAAS7nB,MACjEsa,EAAIpV,MAEP8M,OAAM,SAAUsD,GACb/R,QAAQC,IAAI,4BAA8B8R,GAC1CiF,EAAIjF,UAKQ,iBAAbpQ,IACPm0C,EAAU/0C,GAAOY,EAAW6yC,EAAAA,EAAAA,SAAoB7yC,IAM5D,IAAK,IAAIZ,WADH7J,QAAQwiB,IAAIq8B,GACFD,EAAW,CACbA,EAAU/0C,IACXA,IAAQ9I,EAAQm8B,WACrBogB,EAAAA,EAAAA,gBAA2BzzC,EAAK+0C,EAAU/0C,KAIrD,SAAAy0K,EAmPkBp9H,EAAKvnB,GACpB,MAAMx4B,EAAOC,KACP4E,EAAS,SAAUk7C,GACrB,MAAMC,EAAc,CAChB51C,KAAM21C,EAAI31C,KACVsD,OAAQ1N,EACRigD,cAAejgD,GASnB,OAPI+/C,EAAIG,QACJ9gD,OAAOD,KAAK4gD,EAAIG,QAAQ14C,SAAQ,SAAUkB,GAChCA,KAAOs3C,IACTA,EAAYt3C,GAAOq3C,EAAIG,OAAOx3C,OAInC8vB,EAAS73B,KAAKX,EAAMggD,IAC7BG,KAAKlgD,MACPD,EAAKogD,WAAapgD,EAAKogD,YAAc,GAGrC,OAFcpgD,EAAKogD,WAAWL,GAAO9/C,KAAKmgD,WAAWL,IAAQ,IAAI7lC,KAC3D6E,IAAIyZ,EAAU3zB,GACbA,EACV,SAAAq4K,EAEW58H,EAAQ9nB,EAAU54B,GAC1B,MAAMI,EAAOC,KAIb,OAHAqgD,EAAOluC,MAAM,KAAK5K,SAAQ,SAAUu4C,GAChC//C,EAAK6L,iBAAiBk0C,EAAGjqC,EAAE9V,EAAIu8K,EAAAY,GAAAx8K,KAAJX,EAAwB+/C,EAAKvnB,GAAW54B,MAEhEI,EACVF,EAzfC8pF,EAAmB,QAIN,UA4lBnB3qD,eAAexgB,IAAIke,IAAgBsC,eAAeC,OAAOvC,EAAaitD,GACtEpmF,EAAAA,EAAAA,QAAAA,oBAAiComF,EACjC,W,slCCtmBApmF,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAE3BzD,EAAAA,EAAAA,QAAAA,KAAsBA,EAAAA,EAAAA,QAAAA,MAAuB,UAC7CA,EAAAA,EAAAA,QAAAA,QAAyBA,EAAAA,EAAAA,QAAAA,SAA0B,aACnDA,EAAAA,EAAAA,MAAAA,UAAyBA,EAAAA,EAAAA,MAAAA,WAA0B,eAWnD,IAAAq9K,EAAA,IAAA1qK,QAAA2qK,EAAA,IAAA56K,QAAA66K,EAAA,IAAA5qK,QAAA6qK,EAAA,IAAA96K,QAEA,MAAM65H,UAAyB1xF,EAAAA,QAG3BlrC,cACIG,SAASod,WAAWnK,EAAA,KAAAwqK,GAAAxqK,EAAA,KAAAsqK,GAAAt9K,EAAA,kBAHX,SAAO8C,EAAA,KAAAy6K,EAAA,CAAAx6K,UAAA,EAAAC,MAkkBK,WACrB,OAAQ7C,KAAK+iB,OAAO5H,MAAK3W,GAASA,EAAM0kD,iBAC3CvmD,EAAA,KAAA26K,EAAA,CAAA16K,UAAA,EAAAC,MAMY,SAAU4kH,EAAU30D,EAAUC,EAAUx6B,GACjD,MAAMx4B,EAAOC,KACPu9K,EAAax9K,EAAK47H,qBACxB,IAAI6hD,EACJ,GAAIzqH,EAAWD,EACX0qH,EAAaD,EAAWxqH,EAAW,OAElC,MAAIA,EAAWD,GAIhB,OAHA0qH,EAAaD,EAAWxqH,EAAW,GAKvC,MAAM+kE,EAAc/3H,EAAKzB,IAAIqhB,SAAS8nG,EAASppE,QAAQp/B,SACjDyzC,EAAc3yD,EAAKzB,IAAIqhB,SAAS69J,EAAWn/H,QAAQp/B,SACnDg+G,EAASl9H,EAAKzB,IAAIykB,OAAO/Z,QAAQ0pD,GACnCuqE,GAAU,GAAKA,EAASl9H,EAAKzB,IAAIykB,OAAO1f,QACxCtD,EAAKzB,IAAI8zD,YAAY0lE,EAAamF,EAAQ1kG,MAvlB9C,MAAMx4B,EAAOC,KACbD,EAAK2M,IAAIqxB,UAAUC,OAAOp+B,MAAM08C,OAChCv8C,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKu8C,OAE5Bv8C,EAAKgjB,OAAS,GAEdhjB,EAAKuiH,mBAAsB,WAAUviH,EAAKu8C,YAC1Cv8C,EAAKwiH,uBAA0B,IAAGxiH,EAAKu8C,cAEvCv8C,EAAKmzG,YAAY,CACbC,SAAU,SAAUl/C,EAAWh1C,GAC3B,MAAM6c,EAAY/7B,EAAKu8C,MAAQ,UAE/B,IAAIsQ,EAASqH,EAAUj8C,cAAc,gBAAkB8jB,GACvD,IAAK8wB,EAAQ,CAET,GADc7sD,EAAKzB,IAAIqhB,SAASV,aACX2S,EAAAA,EAAQ,CACzB,MAAMxY,EAAOrZ,EAAK4hC,gBAAgB,oBAClCirB,EAAS,IAAI9vB,EAAAA,EACb8vB,EAAO1vB,QAAUJ,EAAAA,EAAAA,QAAAA,QACjB8vB,EAAOxzC,KAAOA,EACdwzC,EAAOvvB,KAAOP,EAAAA,EAAAA,OAAAA,aACd8vB,EAAOx/B,aAAa,QAAShU,GAC7BwzC,EAAOvO,QAAQp/B,QAAUA,GAGjC,OAAO2tC,GAEX0mD,SAAU,WAEN,IAAIp1B,EADWl+E,KAEf,GACIk+E,EAAKA,EAAG1hB,oBAEL0hB,GAAqB,OAAfA,EAAGhI,SAChB,MAAM1xE,EAAQzE,EAAKzB,IAAIqhB,SANR3f,KAMwBq+C,QAAQp/B,SAC/Clf,EAAKs/C,oBAAoB3gD,MAAK,SAAUoM,GACpC,MAAMP,EAAQ/F,EAAM+F,OAAS,GACvB5K,EAAU,CACZ4K,MAAQ,GAAEA,OAAWxK,EAAK4hC,gBAAgB,sBAC1C42B,SAAU,gBAAgBt2B,KAAK13B,GAASA,EAAMqc,OAAO,EAAGrc,EAAMmpB,YAAY,MAAQnpB,EAClFk1C,UAAW1/C,EAAKzB,IAAImhD,WAAa1/C,EAAKzB,IAAImhD,UAAU9/C,SAExDmL,EAAQsC,KAAK5I,EAAMsK,SAAUnP,SAM7C48C,eACI,MAAO,aAGX3xC,sBACI,MAAM7K,EAAOC,KACP49E,EAAsB,+BACtB6/F,EAAyB,+BACzBC,EAAwB,+BACxBC,EAAuB,+BACvBC,EAA2B,+BAE3Bv0K,EAAW,GACjBA,EAAStJ,EAAKu8C,cAAgBshC,GAAqBtvE,QACnDjF,EAAStJ,EAAKu8C,MAAQ,eAAiBmhI,GAAwBnvK,QAC/DjF,EAAStJ,EAAKu8C,MAAQ,oBAAsBohI,GAAuBpvK,QACnEjF,EAAStJ,EAAKu8C,MAAQ,oBAAsBqhI,GAAsBrvK,QAClEjF,EAAStJ,EAAKu8C,MAAQ,yBAA2BshI,GAA0BtvK,QAC3EvO,EAAKsJ,SAAWA,EAGpBwzC,OAAOtkB,EAAU54B,GACb,MAAMI,EAAOC,KACb,OAAOD,EAAK+8C,qBAAqB/8C,EAAKzB,IAClCyB,EAAKg9C,WAAWp9C,EAAU4D,EAAAA,EAAAA,KAAAA,OAAexD,EAAKzB,IAAI80D,eAAgBzzD,GAAWI,EAAKzB,IAAI80D,gBAAgB,WAClGrzD,EAAKi9C,sBACL,+BAAqBt+C,MAAK,SAAUW,GAChC,MAAMw+K,EAAWx+K,EAAOiP,QACxBvO,EAAKzB,IAAI4rC,WACJhlC,QAAO,SAAUV,GACd,OAAQA,EAAM6qB,WAEjB9nB,SAAQ,SAAU/C,GACfzE,EAAKw+E,gBAAgB/5E,MAI7B,MAAMq6E,EAAK9+E,EAAK2M,IAAIsL,cAAc,MAClCjY,EAAK+9K,UAAYD,EAASx3I,OAAOw4C,EAAI,CACjCzc,OAAQ,IAAMriE,EAAKu8C,MAAQ,MAC3ByhI,UAAW,IACXC,OAAQ,SAAUj/K,GACdgE,EAAAhD,EAAIu9K,GAAA58K,KAAJX,EAAgBhB,EAAEiL,KAAMjL,EAAE+zD,SAAU/zD,EAAEg0D,aAI9C8rB,EAAGjzE,iBAAiB,UAAWrI,EAAAA,EAAAA,YAAAA,mBAAkC,MAAM,SAAUxE,GAG7E,IADA,IAAIyI,EAAMzI,EAAE0O,OACW,OAAhBjG,EAAI0uE,SAEP,KADA1uE,EAAMA,EAAIg1D,eAEN,OAGR,MAAMyhH,EAAO,SAAUjhD,EAAQC,GAC3B,MAAMihD,EAAgBn+K,EAAK+9K,UAAUK,UAC/BvlH,EAASslH,EAAclhD,GAC7BkhD,EAAclhD,GAAUkhD,EAAcjhD,GACtCihD,EAAcjhD,GAAUrkE,EACxB74D,EAAK+9K,UAAU3zJ,KAAK+zJ,GACpBn7K,EAAAhD,EAAIu9K,GAAA58K,KAAJX,EAAgByH,EAAKw1H,EAAQC,IAE3BmhD,EAAYr+K,EAAK47H,qBACjB0iD,EAASD,EAAUp1K,QAAQxB,GACjC,QAAQ,GACJ,IAAK,MAAMy6B,KAAKljC,EAAE0J,KACV41K,EAAS,IACTJ,EAAKI,EAAQA,EAAS,GACtB72K,EAAIu/G,QACJhoH,EAAE+uE,mBAEN,MACJ,IAAK,QAAQ7rC,KAAKljC,EAAE0J,KACZ41K,EAASD,EAAU/6K,OAAS,IAC5B46K,EAAKI,EAAQA,EAAS,GACtB72K,EAAIu/G,QACJhoH,EAAE+uE,mBAEN,MACJ,IAAK,SAAS7rC,KAAKljC,EAAE0J,KACjBjB,EAAIg2E,OACJz+E,EAAE+uE,uBAOU,mBAAbv1C,GACPA,UAKZ35B,QAAQ6W,OAAOzW,MAAM,uCAG7B4L,eAAetM,GACX,MAAMyB,EAAOC,KAsCb,aArCMJ,MAAMimC,SAASvnC,GAEjByB,EAAKJ,QAAQozG,mBACPz0G,EAAI6M,WAAW,WAAY,CAAED,OAAQnL,EAAM4sC,UAAU,IAG/DruC,EAAIqb,QAAO,WACP5Z,EAAKu+E,iBAGThgF,EACK+P,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GACrC,MAAMm/E,EAAEroE,EAAG9V,EAAIo9K,EAAAmB,GAAA59K,KAAJX,EAAuBhB,EAAEyF,OAChC05E,IACAA,EAAGlmE,cAAc,qBAAqBnV,MAAQtB,KAAKirC,MAAkB,IAAZztC,EAAEyU,aAGlEnF,GAAGvO,EAAAA,EAAAA,MAAAA,gBAA6B,SAAUf,GACvC,IAAIw5D,EAAWx5D,EAAEw5D,SACjB,GAAIx5D,EAAE+P,UAAY/P,EAAE+P,SAASzL,OAAS,EAAG,CAErC,IAAIsmJ,EAAU,IAAM7pJ,EAAAA,EAAAA,OAAAA,IAAAA,cACpB,GAAIf,EAAEw5D,SAASnqC,cAAcplB,QAAQ2gJ,KAAa5qJ,EAAEw5D,SAASl1D,OAASsmJ,EAAQtmJ,OAC1E,OAGJ/E,EAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACjCA,GAAKA,EAAEyF,OAASzF,EAAEyF,MAAM+F,QAAUguD,IAElCx4D,EAAK4+C,YAGL5+C,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAK9BC,EAGXmnK,uBAAuBv5J,IAIvBqvC,sBACI,MAAMj9C,EAAOC,KAEbD,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAmC,gBAAexD,EAAKu8C,uBAAuB,SAAUv9C,GAExH,MAAMspF,EAAWtpF,EAAE0O,OACnB,IAAIywE,EAAKmK,EACT,GACInK,EAAKA,EAAG1hB,oBAEL0hB,IAAOA,EAAG30D,QAAQ,MAAQxpB,EAAKu8C,MAAQ,SAEhCv8C,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SACrCna,cAAcujF,EAASzoD,SAC7B7gC,EAAE+uE,sBAGN,MAAMywG,EAAqB,SAAUx/K,GACjC,MAAM4sI,EAAQ5sI,EAAE0O,OAChB,IAAIywE,EAAKytD,EACT,GACIztD,EAAKA,EAAG1hB,oBAEL0hB,GAAqB,OAAfA,EAAGhI,SAEFn2E,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SACrCvL,WAAWi4H,EAAM9oI,MAAQ,MAEnC9C,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAkC,oBAAqBg7K,IAC3Fx+K,EAAK2M,IAAId,iBAAiB,QAASrI,EAAAA,EAAAA,YAAAA,mBAAkC,oBAAqBg7K,IAE1Fx+K,EAAK2M,IAAId,iBAAiB,SAAUrI,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,iBAAiB,SAAUv9C,GACtG,MAAMspF,EAAWtpF,EAAE0O,OACnB,IAAIywE,EAAKmK,EACT,GACInK,EAAKA,EAAG1hB,oBAEL0hB,GAAqB,OAAfA,EAAGhI,SAChB,MAAMntD,EAAOm1D,EAAGlmE,cAAc,IAAMjY,EAAKu8C,MAAQ,SAC3C93C,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SAE3C8J,EAAKrd,iBAAiB,IAAM3L,EAAKu8C,MAAQ,eAAe/0C,SAAQ,SAAUoE,GACtE5L,EAAK67H,iBAAiBjwH,EAAKnH,MAE/BukB,EAAKgV,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAwBuoF,EAASzoD,aAG3D7/B,EAAK2M,IAAId,iBAAiB7L,EAAKy+K,WAAYj7K,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,gCAAgC,SAAUv9C,GAC5H,IAAIm/E,EAAKn/E,EAAE0O,OACX,GACIywE,EAAKA,EAAG1hB,oBAEL0hB,GAAqB,OAAfA,EAAGhI,SAChB,MAAM1xE,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SAC3Clf,EAAKzB,IAAIwsD,YAAYtmD,OAGzBzE,EAAK2M,IAAId,iBAAiB7L,EAAKy+K,WAAYj7K,EAAAA,EAAAA,YAAAA,mBAAkC,IAAMxD,EAAKu8C,MAAQ,YAAY,SAAUv9C,GAClHwE,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,yBAAyB,WACrD5hC,EAAK47H,qBACAr9H,KAAI,SAAU4/E,GACX,OAAOn+E,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,YAEvC1X,SAAQ,SAAU/C,GACfzE,EAAKzB,IAAIwsD,YAAYtmD,SAGjCzF,EAAE+uE,sBAGN/tE,EAAK2M,IAAId,iBAAiB7L,EAAKy+K,WAAYj7K,EAAAA,EAAAA,YAAAA,mBAAmC,IAAGxD,EAAKu8C,kBAAkB,SAAUv9C,GAC9G,MAAM6tD,EAAS7tD,EAAE0O,OAEXgxK,EADY7xH,EAAO4P,cACIz+B,UAAUS,OAAO,eAC9CouB,EAAOxzC,KAAOrZ,EAAK4hC,gBAAgB88I,EAAa,WAAa,cAC7D7xH,EAAOtvB,SAAWmhJ,EAAa,IAAW,UAIlDviD,sBAAsB13H,GAClB,MAAMzE,EAAOC,KACPk+E,EAAEroE,EAAG9V,EAAIo9K,EAAAmB,GAAA59K,KAAJX,EAAuByE,GAClC,GAAI05E,EAAI,CACJ,MAAMn5E,EAAUP,EAAM6O,gBACtB6qE,EAAGlmE,cAAe,gBAAejY,EAAKu8C,uBAAuB1c,QAAU76B,GAI/Ew5E,gBAAgB/5E,GACZ,MAAMzE,EAAOC,KAcb,IAAKwE,EAAMuO,SAAWvO,EAAM7E,QAAQ0vB,QAAS,CACzCqsD,EAAAA,QAAAA,UAAAA,gBAAAA,KAA2C37E,EAAMyE,GAGjD,IADA,IAAIk6K,GAAgB,EACXx8K,EAAI,EAAG+I,EAAMlL,EAAKgjB,OAAO1f,OAAQnB,EAAI+I,EAAK/I,IAC/C,GAAIsC,IAAUzE,EAAKgjB,OAAO7gB,GAAI,CAC1Bw8K,GAAgB,EAChB,MAIR,GAAKA,EAqJA,KAAA9mE,EACD,IAAIm2D,EAAavpK,EAAM+F,OAAS/F,EAAMvE,KAAK22H,iBAAmBpyH,EAAMvE,KAAK22H,kBAEzE,MAAM+nD,EAAe,WACjB,OAAO,IAAIr1J,OAAO9kB,EAAMpF,GAAGmK,QAAQ,qBAAsB,UAAW,OAIlEugB,EAAS/pB,EAAKgjB,OAAO7d,QAAQ6b,GAAMA,EAAExW,QAAU/F,EAAM+F,QAAOtC,QAAO,CAAC+wB,EAAIC,KAC1E,MAAM2lJ,EAAcD,IAAezsK,KAAK+mB,EAAG75B,IAAMu/K,IAAezsK,KAAK+mB,EAAG75B,IAAI,GAAK65B,EAAG75B,GACpF,OAAO45B,EAAGhwB,QAAQ41K,IAAgB,EAAI5lJ,EAAKA,EAAG3wB,OAAOu2K,KACtD,IAAI/8G,WAAW9gD,IAAQ,MAAM0uC,EAAS,iBAAiBv9C,KAAK1N,EAAMpF,IAAK,OAAO2hB,KAAO0uC,EAASA,EAAO,GAAKjrD,EAAMpF,OAE/G0qB,EAAQ,IACRtlB,EAAM23H,OAAS4xC,EAAaA,EAAa,MAAQjkJ,EAAQ,GAAK,KAClE,MAAM+0J,EAAS9+K,EAAK2M,IAAIsL,cAAc,wBAA0BxT,EAAMpF,GAAK,MAC3E,GAAkB,QAAlBw4G,EAAIpzG,EAAMsK,gBAAQ,IAAA8oG,GAAdA,EAAgBv0G,OAChB,GAAImB,EAAMsK,SAASqM,MAAKpM,GAAKA,EAAEpK,UAAUtB,SAAS,CAC9Cw7K,EAAO7mK,cAAc,mBAAmB7K,UAAY4gK,EACpD8Q,EAAO7mK,cAAc,mBAAmBzN,MAAQwjK,EAEhD,MAAM+Q,EAAc,IAAI,IAAI7qJ,IAAIzvB,EAAMsK,SAASxQ,KAAIyQ,GAAKA,EAAEpK,UAAU2F,KAAK,kBACzEu0K,EAAO7mK,cAAc,oBAAoB7K,UAAY2xK,EAAYx0K,KAAK,iBAGtEu0K,EAAO7mK,cAAc,oBAAoB7K,UAAY4gK,EACrD8Q,EAAO7mK,cAAc,oBAAoBzN,MAAQwjK,MA/KzC,CAChBhuK,EAAKgjB,OAAO3a,KAAK5D,GAGjB,MAAMupK,EAAavpK,EAAM+F,OAAS/F,EAAMvE,KAAK22H,iBAAmBpyH,EAAMvE,KAAK22H,kBAC3EpyH,EAAM23H,OAAS4xC,EACf,IAAIl2D,EAAY,CACZttG,MAAO/F,EAAM0O,UAAY,GAAK66J,EAC9BzoK,QAAMd,EAAMomD,gBAAiBpmD,EAAMomD,cAActlD,MACjDkO,QAAShP,EAAMomD,eAAiBpmD,EAAMomD,cAAcp3C,QAAwC,IAA9BhP,EAAMomD,cAAcp3C,QAAgB,IAClGkS,aAAclhB,EAAMkhB,aACpBwjC,YAAa1kD,EAAM0kD,YACnB9pD,GAAIoF,EAAMpF,IAEV0U,EAAWtP,EAAMsP,WACrB,GAAIA,EAAU,CACV+jG,EAAUknE,YAAcv6K,EAAMuiB,YAC9B8wF,EAAU16F,WAAa3Y,EAAM2Y,WAC7B,MAAM+W,EAAO1vB,EAAMyW,MAAM3c,KAAIsW,GAAKpQ,EAAMG,QAAQiQ,KAChDsf,EAAK3sB,SAAQnC,GAAKA,EAAEmjC,UACpBsvE,EAAU3jF,KAAOA,EACjB2jF,EAAUxyF,OAAS,GACnBwyF,EAAU/yF,SAAW,GACrB+yF,EAAU7yF,SAAW,GACrBxgB,EAAMyW,MAAM1T,SAAQ,SAAUsB,GAC1B,IAAIkgB,EAAOvkB,EAAM0E,QAAQL,GACzBkgB,EAAK1D,QAAUwyF,EAAUxyF,OAAOjd,KAAK2gB,EAAK1D,QAC1C0D,EAAKjE,UAAY+yF,EAAU/yF,SAAS1c,KAAK2gB,EAAKjE,UAC9CiE,EAAK/D,UAAY6yF,EAAU7yF,SAAS5c,KAAK2gB,EAAK/D,aAGlD,MAAM+D,EAAOvkB,EAAM0E,UACnB2uG,EAAUmnE,QAAU7/K,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,aAC3D5pB,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,WAC3C5pB,OAAOqB,UAAUC,eAAeC,KAAKqoB,EAAM,iBAG/C8uF,EAAUknE,WAAY,EACtBlnE,EAAUmnE,SAAU,GA7DPp0K,eAAgBpG,GACrC,GAAIA,GAASA,EAAM7E,QAAQsuB,QAAmC,SAAzBzpB,EAAM7E,QAAQsuB,OAC/C,IAEI,aADkBzpB,EAAM0mB,wBAG5B,MAAOzR,GACHlW,EAAAA,EAAAA,MAASkW,KAyDbwlK,CAAmBz6K,GAAO9F,MAAK,SAAUmvB,GAErC9tB,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,OAAQu7D,GAAWn5G,MAAK,SAAUggF,GAChE,MACMR,GADS,IAAI1gE,WACDE,gBAAgBghE,EAAK,aAAah9C,KAAKxqB,WACzD,IAAImI,EAEAnd,EADAg9K,GAAU,EAEd,GAAIprK,KACAorK,EAAU16K,EAAMyW,MAAM5X,OAAS,GACjB,CACV,MAAMwF,EAAOrE,EAAMyW,MAAM,GACnByI,EAAalf,EAAMvE,KAAK+iB,mBAC9B,IAAK9gB,EAAI,EAAGA,EAAIwhB,EAAWrgB,OAAQnB,IAAK,CACpC,IAAIuS,EAAOiP,EAAWxhB,GACtB,GAAIsC,EAAMvE,KAAKijB,QAAQzO,KAAU5L,EAAM,CACnCwW,EAAY5K,EACRjQ,EAAMvE,KAAK0jB,cAAclP,GAAMpR,OAAS,IACxC67K,GAAU,GAEd,QAMhB,MAAMC,EAAUjhG,EAAGlmE,cAAc,IAAMjY,EAAKu8C,MAAQ,SAC9CxgB,EAAYojJ,EAAUn/K,EAAKu8C,MAAQ,YAAcv8C,EAAKu8C,MAAQ,YACpE6iI,EAAQphJ,UAAUnjB,IAAIkhB,GAEtB,MAAMsjJ,EAAUlhG,EAAGlmE,cAAe,IAAGjY,EAAKu8C,kBACtC8iI,GACAA,EAAQxzK,iBAAiB9L,EAAAA,EAAAA,MAAAA,OAAoB,SAAU6N,GACnD5N,EAAKzB,IAAIk4D,YAAY0nB,EAAG7/B,QAAQp/B,QAAS,CAAEsrC,SAAS,MACrD,CAAEv8C,SAAS,IAGdqR,IACA7a,EAAMvE,KAAK0pB,mBAAmBtK,GAE9Btf,EAAKu9C,gBAAgBxhB,EAAWzc,GAAW3gB,MAAK,SAAUggF,GACtD,IAAI2gG,EAEJF,EAAQvzK,iBAAiB,aAAa,SAAU+B,GAC5C,MAAMs1J,EAASljK,EAAKzB,IAAIoO,IAClB4yK,EAAcH,EAAQrwH,yBAC5BuwH,EAAM1yK,SAASC,cAAc,QACzBmxB,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,QAC/B+iI,EAAIlyK,UAAYuxE,EAChB2gG,EAAI15K,MAAMwuE,IAAMmrG,EAAYnrG,IAAM8uF,EAAOsR,UAAY,KACrD8K,EAAI15K,MAAM2uE,MAAQ2uF,EAAOr1J,aAAe0xK,EAAYlrG,KAAO6uF,EAAOsc,YAAc,KAChFtc,EAAOp2J,YAAYwyK,MAEvBF,EAAQvzK,iBAAiB,YAAY,SAAU+B,GAC3C0xK,EAAI7iH,cAAcC,YAAY4iH,UAI1C,MAAMxgG,EAAK9+E,EAAK2M,IAAIsL,cAAc,MAClCkmE,EAAG7/B,QAAQp/B,QAAUza,EAAMpF,GAE3B,MAAMmgF,EAAMx/E,EAAK47H,qBACX37D,EAAYjgE,EAAKzB,IAAI4rC,WACtBhlC,QAAO,SAAU6b,GACd,OAAQA,EAAEsO,WAEZkxD,EAAWvgB,EAAUh3D,QAAQxE,GAEnCzE,EAAK2zH,eAAensH,SAAQg5B,GAAQxgC,EAAK4zH,cAAcz1C,EAAI39C,KAE3D,IAAIy+C,GAAW,EACf,IAAK98E,EAAI,EAAGA,EAAIq9E,EAAIl8E,OAAQnB,IAAK,CAC7B,MAAMs9K,EAAcjgG,EAAIr9E,GAExB,GAD0B89D,EAAUh3D,QAAQjJ,EAAKzB,IAAIqhB,SAAS6/J,EAAYnhI,QAAQp/B,UAC1DshE,EAAU,CAC9Bi/F,EAAYtgG,sBAAsB,cAAehB,GACjDc,GAAW,EACX,OAGHA,GACDH,EAAGhyE,YAAYqxE,GAInBn+E,EAAKu+E,oBAIb,IAAImhG,EAAkB5pK,EAAG9V,EAAIs9K,EAAAqC,GAAAh/K,KAAJX,GACzB,MAAM4/K,EAAS5/K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,MACnDsjI,EAAW7/K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UACrDujI,EAAa9/K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,YAC7DqjI,EAAO5xK,YAAc0xK,EACjBA,EAAqB,GACrBE,EAAO5hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SACrB8/K,EAAS7hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvB+/K,EAAW9hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAG5B6/K,EAAO5hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,SACxB8/K,EAAS7hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1B+/K,EAAW9hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,SAGRC,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,YAClDve,UAAUS,OAAO1+B,EAAAA,EAAAA,QAAAA,QAAuBiD,EAAChD,EAAIq9K,GAAA18K,KAAJX,MAmClEu+E,cACI,MAAMv+E,EAAOC,KACbD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,IAAI15E,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SACzC,GAAIza,GAASA,EAAMyW,MAAO,CAEtB,IADA,IAAI5V,GAAY,EACPnD,EAAI,EAAGA,EAAIsC,EAAMyW,MAAM5X,OAAQnB,IACpC,GAAIsC,EAAMuP,iBAAiBvP,EAAMyW,MAAM/Y,IAAK,CACxCmD,GAAY,EACZ,MAGR64E,EAAGngD,UAAUS,OAAOz+B,EAAKu8C,MAAQ,mBAAoBj3C,OAKjEq4E,SACI,MAAM39E,EAAOC,KAEbD,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACxC,MAAM15E,EAAQzE,EAAKzB,IAAIqhB,SAASu+D,EAAG7/B,QAAQp/B,SACvCza,IACA05E,EAAGlmE,cAAe,gBAAejY,EAAKu8C,uBAAuB1c,QAAUp7B,EAAM6O,gBAC7E7O,EAAMgQ,KAAO,SAIrBzU,EAAKu+E,cAGTc,iBAAiBtyB,EAAQuyB,EAASC,GAC9B,MAAMv/E,EAAOC,KACbD,EAAKzB,IAAI4rC,WACJhlC,QAAO,SAAUV,GACd,OAAQA,EAAM6qB,WAEjB9nB,SAAQ,SAAU/C,GACf,MAAM05E,EAAEroE,EAAG9V,EAAIo9K,EAAAmB,GAAA59K,KAAJX,EAAuByE,GAC9B05E,GACAA,EAAG1hB,cAActlD,WAAWgoE,sBAAsB,cAAehB,MAKjFpzB,YAAYtmD,GACR,MAAMzE,EAAOC,KACPyH,EAAM1H,EAAKgjB,OAAO/Z,QAAQxE,GAC5BiD,GAAO,GACP1H,EAAKgjB,OAAOha,OAAOtB,EAAK,GAE5B1H,EAAK47H,qBAAqBp0H,SAAQ,SAAU22E,GACpCA,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,IAC7B8+E,EAAG1hB,cAAcC,YAAYyhB,MAGrC,MAAM2hG,EAAa9/K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,YACvDsjI,EAAW7/K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,UACrDwjI,EAAY//K,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,MAC5D,IAAIyjI,EAASlqK,EAAG9V,EAAIs9K,EAAAqC,GAAAh/K,KAAJX,GAChB+/K,EAAU/xK,YAAcgyK,EACpBA,EAAY,GACZF,EAAW9hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC5B8/K,EAAS7hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACvBggL,EAAU/hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAGxBiD,EAAIhD,EAAIq9K,GAAA18K,KAAJX,IACAA,EAAK2M,IAAIsL,cAAc,IAAMjY,EAAKu8C,MAAQ,YAAYve,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAExE+/K,EAAW9hJ,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QACzB8/K,EAAS7hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1BggL,EAAU/hJ,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,UAInC67H,qBAEI,OAAO76H,MAAMoX,KADAlY,KACU0M,IAAIhB,iBAAkB,WADhC1L,KAC+Cs8C,eAmCnE,SAAAgiI,EAhCqB95K,GACdxE,KAAK27H,qBAAqB/yH,MAAKs1E,GAAMA,EAAG7/B,QAAQp/B,UAAYza,EAAMpF,KACrE,SAAAsgL,IAOG,OAAO1/K,KAAK+iB,OAAO1f,OAyB3BE,EAAAA,EAAAA,IAAO84H,EAAkBtI,EAAAA,SAEzBxwH,EAAAA,EAAAA,QAAAA,iBAA8B84H,EAC9B,W,yFC1nBA94H,EAAAA,EAAAA,KAAUU,EAAAA,EACVV,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAG3BA,EAAAA,EAAAA,QAAAA,UAAuB,CAEnBijE,OAAQ,SAAUw5G,GAEd,OAAOA,GADMhgL,KACyBs8E,YAG1C6nB,eAAgBv5F,eAAgBo1K,GAC5B,MAAMjgL,EAAOC,KACPu8E,EAAYx8E,EAAKymE,OAAOw5G,GAU9B,OATKjgL,EAAKkgL,YACNlgL,EAAKkgL,gBAAkBlgL,EAAKzB,IAAI6M,WAAW,QAAS,CAChD/L,GAAIW,EAAK4mC,SACTj6B,IAAK6vE,EAAUvkE,cAAc,mBAAqBjY,EAAKu8C,MAAQ,qBAC/D2hF,iBAAiB,IAErBl+H,EAAKkgL,UAAU/0K,OAASnL,EACxBA,EAAKkgL,UAAU5hD,YAAc,MAE1Bt+H,EAAKkgL,WAGhBC,kBAAmBt1K,iBACf,MAAM7K,EAAOC,KACbD,EAAKwoG,QAAUxoG,EAAKwoG,SAAW,GAC/BxoG,EAAKwoG,QAAQmH,QAAS,EAEtB3vG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WACjB,MAAM0jG,EAAWzjG,EAAKkgL,UAChBE,EAAW38E,EAAS92F,IACpB0yB,QAAaokE,EAAS3b,eACtBmN,EAAQmrF,EAASnoK,cAAc,4BACrCg9E,EAAMnyF,MAAQu8B,SACP41D,EAAM32C,QAAQq/B,cACdsX,EAAM32C,QAAQ8jH,UACrBge,EAASnoK,cAAc,+BAA+BnV,YAAc2gG,EAASq+D,eAAeziI,IAGhGgqE,gBAAiB,SAAU42E,GACvB,MAAMjgL,EAAOC,KAEPswH,EADYvwH,EAAKymE,OAAOw5G,GACAhoK,cAAc,IAAMjY,EAAKu8C,MAAQ,iBAC/D/4C,EAAAA,EAAAA,KAAAA,UAAkB+sH,EAAa,CAC3BviD,aAAc,WACVhuE,EAAKmgL,kBAAkB5vD,GAAa5xH,MAAK,WACrCqB,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,OAAqB,CAAEgL,QAAS/K,EAAKkgL,UAAWvzJ,OAAQ,cAGjFkhD,cAAe,WACX7tE,EAAKqgL,yBAKjBA,mBAAoB,WAChB,MAAMrgL,EAAOC,KACbD,EAAKwoG,QAAUxoG,EAAKwoG,SAAW,GAC/BxoG,EAAKwoG,QAAQmH,QAAS,EAEtB3vG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAKzB,MACA,EADkByD,EAAAA,EAAAA,QAAAA,W,mGCnElBA,EAAAA,EAAAA,KAAUU,EAAAA,EACVV,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAG3B,MAAMwwH,EAAoB,CAEtBzR,mBAAqB,UACrBC,uBAAwB,iBACxB89D,qBAAqB,EAErB3sD,aAAc,WACV,MAAM3zH,EAAOC,KAIb,OAHKD,EAAKugL,YACNvgL,EAAKugL,UAAY,IAEdvgL,EAAKugL,WAGhBC,kBAAmB,SAAUxhI,GACzB,MAAMh/C,EAAOC,KAIb,OAHI++C,IACAh/C,EAAKuiH,mBAAqBvjE,GAEvBj+C,MAAMoX,KAAKnY,EAAK2M,IAAIhB,iBAAiB3L,EAAKuiH,sBAGrDk+D,iBAAkB,SAAUC,GAExB,OAAOA,EAAYzoK,cADNhY,KACyBuiH,yBAG1CoR,cAAe,SAASnsH,EAAK+4B,GACzB,MAAMxgC,EAAOC,KACb,GAAIiE,EAAAA,EAAAA,WAAgBs8B,EAAK4yE,UAAW,CAChC,MAAMl/C,EAAYl0D,EAAKygL,iBAAiBh5K,GAClColD,EAASrsB,EAAK4yE,SAASl/C,EAAWzsD,EAAI62C,QAAQp/B,SACpD,GAAI2tC,EAAQ,CACR,MAAM8zH,EAAazsH,EAAUj8C,cAAe,sBAO5C,GANI0oK,EACAA,EAAWxhG,sBAAsB,cAAetyB,GAGhDqH,EAAUpnD,YAAY+/C,GAEtB3oD,EAAAA,EAAAA,WAAgBs8B,EAAK+yE,UAAW,CAChC,MAAM+4C,EAAaz/F,aAAkBjtB,EAAAA,EAAU,SAAW7/B,EAAAA,EAAAA,MAAAA,MAC1D8sD,EAAOhhD,iBAAiBygJ,GAAW,SAAU1+I,GACzC4yB,EAAK+yE,SAAS5yG,KAAKksD,KACpB,CAAE5+C,SAAS,IAEd/J,EAAAA,EAAAA,WAAgBs8B,EAAK8yE,WAAa9yE,EAAK6yE,cACvCrzG,EAAKzB,IAAI+P,GAAGkyB,EAAK6yE,aAAa9oG,KAAK,MAAM,SAAUvL,GAC1CA,EAAEyF,OAASzF,EAAEyF,MAAMpF,KAAOwtD,EAAOvO,QAAQp/B,SAC1CshB,EAAK8yE,SAAS3yG,KAAKksD,EAAQ7tD,SAQnDm0G,YAAa,SAASvzG,GAClB,MAAMI,EAAOC,KACbD,EAAK2zH,eAAetrH,KAAKzI,GACzBI,EAAKwgL,oBAAoBh5K,SAAQ,SAAUC,GACvCzH,EAAK4zH,cAAcnsH,EAAK7H,QAMpC4D,EAAAA,EAAAA,QAAAA,kBAA+BwwH,EAC/B,W,gFCxEA,MAiCA,EAjCmB,CAEfle,UAAW,WACP,MAAM91G,EAAOC,KAIb,OAHKD,EAAKgjB,SACNhjB,EAAKgjB,OAAS,IAEXhjB,EAAKgjB,QAGhB8xF,iBAAkB,WACd,MAAM90G,EAAOC,KACbD,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAuB,SAAUf,GACzC,MAAMyK,EAAQzJ,EAAKg3G,WAAWh4G,EAAEyF,MAAMpF,IAClCoK,IACAjG,EAAAA,EAAAA,YAAeiG,EAAQ,EAAG,CAAEo9B,OAAQ7mC,EAAKX,GAAK,MAC9CL,EAAEyF,MAAM4gF,MAAQrlF,OAK5Bg3G,WAAY,SAAU33G,GAClB,MACMuhL,EAAQ,IAAIr3J,OAAQ,IADbtpB,KACqBZ,iBAC5BoK,EAAQpK,EAAGoK,MAAMm3K,GACvB,OAAIn3K,EACO8O,SAAS9O,EAAM,IAEnB,K,0DChCfjG,EAAAA,EAAAA,OAAY,GAEZA,EAAAA,EAAAA,OAAAA,UAAsB,CAClB,oBACA,wBACA,iCACA,qBACA,8BACA,uBACA,iBACA,iBACA,oBACA,SACA,aACA,QAGJA,EAAAA,EAAAA,OAAAA,OAAmB,SAAU2yE,GACzBl2E,KAAK4gL,SAAW1qG,EAEhBl2E,KAAK6gL,cAAgB,6BACrB7gL,KAAK8gL,iBAAmB9gL,KAAK+gL,aAAe,MAC5C/gL,KAAKghL,YAAc,eAEnBhhL,KAAK6gL,cAAgB7gL,KAAKihL,UAAY,6BACtCjhL,KAAKkhL,cAAgB,MACrBlhL,KAAKmhL,WAAa,iCAClBnhL,KAAKohL,gBAAkB,iBACvBphL,KAAKqhL,gBAAkB,SACvBrhL,KAAKshL,oBAAsB,cAK/B/9K,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,WAAwC,WACpC,OAAOvD,KAAK4gL,UAEhBr9K,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,WAAwC,SAAU2wJ,GAC9C,OAAOl0J,KAAK4gL,UAGhBr9K,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,sBAAmD,WAI/C,MAAO,yHAA2HyP,OAAO,CACrI4zB,OAAQ5mC,KAAK8gL,iBACbS,MAAOvhL,KAAK6gL,cACZl0G,IAJS3sE,KAIG2+D,aACZ8/F,MAAOz+J,KAAKwhL,qBALHxhL,MAMTg3E,WAAah3E,KAAK6gL,gBAAkB7gL,KAAKmhL,WAAa,OAAS,MAQvE59K,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,qBAAkD,SAAU2B,GAOxD,OANIA,GAAUlF,OACVkF,EAAO27K,cAAgB7gL,KAAK6gL,cAC5B37K,EAAO47K,iBAAmB9gL,KAAK8gL,iBAC/B57K,EAAO87K,YAAchhL,KAAKghL,aAG1B97K,aAAkB3B,EAAAA,EAAAA,OAAAA,aAGb2B,aAAkB3B,EAAAA,EAAAA,OAAAA,kBAGlB2B,aAAkB3B,EAAAA,EAAAA,OAAAA,YAGlB2B,aAAkB3B,EAAAA,EAAAA,OAAAA,SAGAA,EAAAA,EAAAA,OAAAA,SAXhB2B,EAAOmzD,SAiBtB90D,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,0BAAuD,SAAU+3K,GAC7D,MAAM93K,EAASxD,KACf,OAAOwD,EAAOg7D,WAAWv2D,QAAO,SAAU+wB,EAAIC,EAAIgpG,GAC9C,OAAQjpG,aAAcz1B,EAAAA,EAAAA,OAAAA,OAAmBC,EAAOg+K,qBAAqBxoJ,GAAMA,GAAMx1B,EAAOg+K,qBAAqBvoJ,OAIrH11B,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,QAAqC,SAAUk+K,GAO3C,OANIA,GAAc75K,WAAW65K,EAAW,KAAO,IAC3CzhL,KAAK8gL,iBAAmB9gL,KAAKkhL,cAC7BlhL,KAAK6gL,cAAgB7gL,KAAKmhL,WAC1BnhL,KAAKghL,YAAchhL,KAAKohL,gBACxBphL,KAAKqhL,gBAAkBrhL,KAAKshL,qBAEzBthL,KAAK0hL,yBAGhBn+K,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,SAAsC,SAAU6V,GAW5C,OAVIA,EAAKpQ,QAAQhJ,KAAKkhL,gBAAkB,GACpC9nK,EAAKpQ,QAAQhJ,KAAKmhL,aAAe,GACjC/nK,EAAKpQ,QAAQhJ,KAAKohL,kBAAoB,GACtChoK,EAAKpQ,QAAQhJ,KAAKshL,sBAAwB,IAC1CthL,KAAK8gL,iBAAmB9gL,KAAKkhL,cAC7BlhL,KAAK6gL,cAAgB7gL,KAAKmhL,WAC1BnhL,KAAKghL,YAAchhL,KAAKohL,gBACxBphL,KAAKqhL,gBAAkBrhL,KAAKshL,qBAGzBthL,KAAK2hL,qBAAqBvoK,IAGrC7V,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,qBAAkD,SAAU6V,GAExD,OADApZ,KAAK4hL,WAAWxoK,GACTpZ,KAAK6hL,oBAAoBzoK,IAEpC7V,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,oBAAiD,SAAU6V,GAqBnD,OAAOlU,EAAO4R,KAAKsC,IAG3B7V,EAAAA,EAAAA,OAAAA,IAAgB,SAAUu+K,GACtB,IAAI5kK,EAAS,CAAC,MAAM7U,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YACtD,OAAO,IAAK+kK,SAASvhL,UAAU0/C,KAAK9vC,MAAM7M,EAAAA,EAAAA,OAAAA,IAAe2Z,KAG7D3Z,EAAAA,EAAAA,OAAAA,GAAe,SAAUu+K,GACrB,IAAI5kK,EAAS,CAAC,MAAM7U,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YACtD,OAAO,IAAK+kK,SAASvhL,UAAU0/C,KAAK9vC,MAAM7M,EAAAA,EAAAA,OAAAA,GAAc2Z,KAG5D3Z,EAAAA,EAAAA,OAAAA,IAAgB,SAAUT,GACtB,OAAO,IAAIS,EAAAA,EAAAA,OAAAA,IAAcT,IAI7BS,EAAAA,EAAAA,OAAAA,WAAuB,WACnB,MAAqD,oBAAjDpE,OAAOqB,UAAUyiB,SAASviB,KAAKsc,UAAU,IAClC,IAAIzZ,EAAAA,EAAAA,OAAAA,WAAqB,KAAMyZ,UAAU,GAAIA,UAAU,IAEvD,IAAIzZ,EAAAA,EAAAA,OAAAA,WAAqByZ,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAI9EzZ,EAAAA,EAAAA,OAAAA,OAAmB,WACf,MAAqD,oBAAjDpE,OAAOqB,UAAUyiB,SAASviB,KAAKsc,UAAU,IAClC,IAAIzZ,EAAAA,EAAAA,OAAAA,OAAiB,KAAMyZ,UAAU,GAAIA,UAAU,IAEnD,IAAIzZ,EAAAA,EAAAA,OAAAA,OAAiByZ,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAI1EzZ,EAAAA,EAAAA,OAAAA,QAAoB,SAAUotD,EAAcsrH,EAAY+F,GACpD,OAAO,IAAIz+K,EAAAA,EAAAA,OAAAA,QAAkBotD,EAAcsrH,EAAY+F,IAG3Dz+K,EAAAA,EAAAA,OAAAA,WAAuB,SAAUotD,EAAcsrH,EAAY+F,GACvD,OAAO,IAAIz+K,EAAAA,EAAAA,OAAAA,WAAqBotD,EAAcsrH,EAAY+F,IAG9Dz+K,EAAAA,EAAAA,OAAAA,SAAqB,SAAUotD,EAAcsrH,GACzC,OAAO,IAAI14K,EAAAA,EAAAA,OAAAA,SAAmBotD,EAAcsrH,IAGhD14K,EAAAA,EAAAA,OAAAA,kBAA8B,SAAUotD,EAAcsrH,GAClD,OAAO,IAAI14K,EAAAA,EAAAA,OAAAA,kBAA4BotD,EAAcsrH,IAGzD14K,EAAAA,EAAAA,OAAAA,YAAwB,SAAUotD,EAAcsrH,GAC5C,OAAO,IAAI14K,EAAAA,EAAAA,OAAAA,YAAsBotD,EAAcsrH,IAGnD14K,EAAAA,EAAAA,OAAAA,qBAAiC,SAAUotD,EAAcsrH,GACrD,OAAO,IAAI14K,EAAAA,EAAAA,OAAAA,qBAA+BotD,EAAcsrH,IAG5D14K,EAAAA,EAAAA,OAAAA,OAAmB,SAAUotD,GACzB,OAAO,IAAIptD,EAAAA,EAAAA,OAAAA,OAAiBotD,IAGhCptD,EAAAA,EAAAA,OAAAA,QAAoB,SAAUotD,EAAcsxH,EAAeC,GACvD,OAAO,IAAI3+K,EAAAA,EAAAA,OAAAA,UAAoBotD,EAAcsxH,EAAeC,IAGhE3+K,EAAAA,EAAAA,OAAAA,SAAwB,SAAU4+K,EAAcjlK,GAC5C,OAAO,IAAI3Z,EAAAA,EAAAA,OAAAA,SAAmB4+K,EAAcjlK,IAGhD3Z,EAAAA,EAAAA,OAAAA,KAAiB,SAAUotD,EAAcg5F,EACrCy4B,EAAcC,EAAgBC,EAAgBN,GAC9C,OAAO,IAAIz+K,EAAAA,EAAAA,OAAAA,OAAiBotD,EAAcg5F,EACtCy4B,EAAcC,EAAgBC,EAAgBN,IAGtDz+K,EAAAA,EAAAA,OAAAA,YAAwB,SAAU2yE,EAAS4rG,GAEvCv+K,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAMk2E,GAE5Bl2E,KAAKw+D,WAAa19D,MAAMN,UAAUmK,MAAMjK,KAAKsc,UAAW,IAE5DzZ,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,YAAuBA,EAAAA,EAAAA,OAAAA,QAElCA,EAAAA,EAAAA,OAAAA,IAAgB,SAAUu+K,GACtB,IAAI5kK,EAAS,CAAC,OAAO7U,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YACvDzZ,EAAAA,EAAAA,OAAAA,YAAAA,MAA4BvD,KAAMkd,IAEtC3Z,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,IAAeA,EAAAA,EAAAA,OAAAA,aAE1BA,EAAAA,EAAAA,OAAAA,GAAe,SAAUu+K,GACrB,IAAI5kK,EAAS,CAAC,MAAM7U,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YACtDzZ,EAAAA,EAAAA,OAAAA,YAAAA,MAA4BvD,KAAMkd,IAEtC3Z,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,GAAcA,EAAAA,EAAAA,OAAAA,aAEzBA,EAAAA,EAAAA,OAAAA,YAAAA,UAAAA,MAAwC,WACpC,MAAO,2CAA2CyP,OAAO,CACrD4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV8/F,MAAOz+J,KAAKuiL,+BAIpBh/K,EAAAA,EAAAA,OAAAA,IAAgB,SAAUT,GACtB9C,KAAK8C,UAAYA,EACjBS,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAM,QAGhCuD,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,IAAeA,EAAAA,EAAAA,OAAAA,QAE1BA,EAAAA,EAAAA,OAAAA,OAAAA,UAAAA,MAAiC,WAC7B,MAAO,2CAA2CyP,OAAO,CACrD4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV8/F,MAAOz+J,KAAKwhL,qBAAqBxhL,KAAK8C,cAI9CS,EAAAA,EAAAA,OAAAA,WAAuB,SAAU2yE,EAASvlB,GAEtCptD,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAMk2E,GAE5Bl2E,KAAK2wD,aAAeA,GAExBptD,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,WAAsBA,EAAAA,EAAAA,OAAAA,QAEjCA,EAAAA,EAAAA,OAAAA,WAAAA,UAAAA,MAAuC,WACnC,IAAI4qB,EAAS,GAwBb,OAtBInuB,KAAKk8K,eAAiBl8K,KAAKwiL,gBAC3Br0J,EAAS,6MAA6Mnb,OAAO,CACzN4zB,OAAO5mC,KAAK8gL,iBACZ5E,cAAel8K,KAAKk8K,cACpBsG,cAAexiL,KAAKwiL,iBAExBxiL,KAAK2pJ,UACLx7H,EAAS,6DAA6Dnb,OAAO,CACzE4zB,OAAQ5mC,KAAK8gL,iBACb2B,QAASziL,KAAK2pJ,WAElB3pJ,KAAKkd,SAEDiR,EADArtB,MAAMC,QAAQf,KAAKkd,QACVld,KAAKkd,OAAOjV,QAAO,SAAU6S,EAAGsP,EAAGloB,GACxC,IAAIwgL,EAAM,SAAUtpK,GAChB,MAAO,2DAA2DpG,OAAO,CAAE4zB,OAAQ5mC,KAAK8gL,iBAAkBj+K,MAAOuW,KAErH,OAAQlX,EAAI,EAAI4Y,EAAI4nK,EAAI5nK,IAAM4nK,EAAIt4J,MAG7B,2DAA2DpX,OAAO,CAAE4zB,OAAQ5mC,KAAK8gL,iBAAkBj+K,MAAO7C,KAAKkd,UAEzH,0IAA0IlK,OAAO,CACpJ4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV+7G,eAAwC,IAApB16K,KAAK06K,UAA6B,eAAkB16K,KAAK06K,UAAY,IAAO,GAChGrpG,YAAsC,IAArBrxE,KAAK2iL,WAA+B,IAAM3iL,KAAKqhL,gBAAiB,KAAQrhL,KAAK2iL,WAAa,IAAQ,GACnHC,gBAA0C,IAArB5iL,KAAK4iL,WAA8B,gBAAmB5iL,KAAK4iL,WAAa,IAAO,GACpGC,cAAsC,IAAnB7iL,KAAK6iL,SAA4B,cAAiB7iL,KAAK6iL,SAAW,IAAO,GAC5Fh6K,KAAM7I,KAAK2wD,aACXxiC,OAAQA,EACR20J,WAAY9iL,KAAKghL,eAIzBz9K,EAAAA,EAAAA,OAAAA,iBAA6B,SACzB2yE,EAASvlB,EAAcsrH,EAAY+F,GAEnCz+K,EAAAA,EAAAA,OAAAA,WAAAA,KAA0BvD,KAAMk2E,EAASvlB,GAEzC3wD,KAAKi8K,WAAaA,EAElBj8K,KAAK06K,UAAYsH,GAErBz+K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,iBAA4BA,EAAAA,EAAAA,OAAAA,YAEvCA,EAAAA,EAAAA,OAAAA,iBAAAA,UAAAA,MAA6C,WAEzC,OADW,+BAAiCvD,KAAK2wD,wBAAwBptD,EAAAA,EAAAA,OAAAA,OAAmB,SAAW,yDAA2D,6EACtJyP,OAAO,CACf4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV+7G,eAAwC,IAApB16K,KAAK06K,UAA6B,eAAkB16K,KAAK06K,UAAY,IAAO,GAIhG7xK,KAAM7I,KAAK2wD,wBAAwBptD,EAAAA,EAAAA,OAAAA,OAAmBvD,KAAK2wD,aAAa0H,QAAUr4D,KAAK2wD,aACvF9tD,MAAO7C,KAAKi8K,WACZ6G,WAAY9iL,KAAKghL,eAGzBz9K,EAAAA,EAAAA,OAAAA,QAAoB,SAAUotD,EAAcsrH,EAAY+F,GACpDz+K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,oBAAqB2wD,EAAcsrH,EAAY+F,IAEzFz+K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,QAAmBA,EAAAA,EAAAA,OAAAA,kBAE9BA,EAAAA,EAAAA,OAAAA,YAAwB,SAAUotD,EAAcsrH,GAC5C14K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,wBAAyB2wD,EAAcsrH,IAEjF14K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,YAAuBA,EAAAA,EAAAA,OAAAA,kBAElCA,EAAAA,EAAAA,OAAAA,qBAAiC,SAAUotD,EAAcsrH,GACrD14K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,iCAAkC2wD,EAAcsrH,IAE1F14K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,qBAAgCA,EAAAA,EAAAA,OAAAA,kBAE3CA,EAAAA,EAAAA,OAAAA,SAAqB,SAAUotD,EAAcsrH,GACzC14K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,qBAAsB2wD,EAAcsrH,IAE9E14K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,SAAoBA,EAAAA,EAAAA,OAAAA,kBAE/BA,EAAAA,EAAAA,OAAAA,kBAA8B,SAAUotD,EAAcsrH,GAClD14K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,8BAA+B2wD,EAAcsrH,IAEvF14K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,kBAA6BA,EAAAA,EAAAA,OAAAA,kBAExCA,EAAAA,EAAAA,OAAAA,WAAuB,SAAUotD,EAAcsrH,EAAY+F,GACvDz+K,EAAAA,EAAAA,OAAAA,iBAAAA,KAAgCvD,KAAM,uBAAwB2wD,EAAcsrH,EAAY+F,IAE5Fz+K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,WAAsBA,EAAAA,EAAAA,OAAAA,kBAEjCA,EAAAA,EAAAA,OAAAA,OAAmB,SAAUotD,EAAcg5F,EACvCy4B,EAAcC,EAAgBC,EAAgBN,GAC9Cz+K,EAAAA,EAAAA,OAAAA,WAAAA,KAA0BvD,KAAM,iBAAkB2wD,GAElD3wD,KAAK2pJ,QAAUA,EAEf3pJ,KAAK6iL,cAA6Bz+K,IAAjBg+K,EAA8BA,EAAe,IAE9DpiL,KAAK4iL,gBAAiCx+K,IAAnBi+K,EAAgCA,EAAiB,IAEpEriL,KAAK2iL,gBAAiCv+K,IAAnBk+K,EAAgCA,EAAiB,IAEpEtiL,KAAK06K,UAAYsH,GAErBz+K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,OAAkBA,EAAAA,EAAAA,OAAAA,YAE7BA,EAAAA,EAAAA,OAAAA,OAAmB,SAAUotD,GACzBptD,EAAAA,EAAAA,OAAAA,WAAAA,KAA0BvD,KAAM,iBAAkB2wD,IAEtDptD,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,OAAkBA,EAAAA,EAAAA,OAAAA,YAE7BA,EAAAA,EAAAA,OAAAA,UAAsB,SAAUotD,EAAcsxH,EAAeC,GACzD3+K,EAAAA,EAAAA,OAAAA,WAAAA,KAA0BvD,KAAM,oBAAqB2wD,GACrD3wD,KAAKk8K,cAAgB+F,EACrBjiL,KAAKwiL,cAAgBN,GAEzB3+K,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,UAAqBA,EAAAA,EAAAA,OAAAA,YAEhCA,EAAAA,EAAAA,OAAAA,SAAqB,SAAU4+K,EAAcjlK,GACzC3Z,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAMmiL,GAC5BniL,KAAKkd,OAASA,GAElB3Z,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,SAAoBA,EAAAA,EAAAA,OAAAA,QAE/BA,EAAAA,EAAAA,OAAAA,OAAAA,SAA4B,SAAUw/K,GAOlC,IAAI3yH,EAAO37C,IAAS,IAAAuuK,EAAAC,EAChB,MAAMC,EAAazuK,EAAKyhE,QAAQ/8C,UAAU1kB,EAAKyhE,QAAQltE,QAAQ,KAAO,GACtE,IAAI9D,EAEJ,OAAQg+K,GACJ,IAAK,oBACDh+K,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,QACb,MACJ,IAAK,wBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,YACb,MACJ,IAAK,iCACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,qBACb,MACJ,IAAK,qBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,SACb,MACJ,IAAK,8BACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,kBACb,MACJ,IAAK,uBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,WACb,MACJ,IAAK,iBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,OACb,MACJ,IAAK,iBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,OACb,MACJ,IAAK,oBACD2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAAA,UACb,MACJ,QACI2B,EAAS,IAAI3B,EAAAA,EAAAA,OAAU2/K,GAG/B,MAAMvyH,EAAoF,QAAxEqyH,EAAGvuK,EAAKuD,cAAc9S,EAAO87K,YAAc,IAAM97K,EAAOk8K,wBAAgB,IAAA4B,OAAA,EAArEA,EAAuE71K,UACtF0jJ,EAA6C,QAAhCoyB,EAAGxuK,EAAKuD,cAAc,kBAAU,IAAAirK,OAAA,EAA7BA,EAA+B91K,UAQV,IAAAg2K,EAAAC,GAP3Cl+K,EAAO27K,cAAgBpsK,EAAKyhE,QAAQ/8C,UAAU,EAAG+8C,EAAQltE,QAAQ,MAE7D2nD,IACAzrD,EAAOyrD,aAAeA,GACtBzrD,aAAkB3B,EAAAA,EAAAA,OAAAA,SAClB2B,EAAOykJ,QAAUkH,GAEjB3rJ,aAAkB3B,EAAAA,EAAAA,OAAAA,aAClB2B,EAAOg3K,cAA6D,QAAhDiH,EAAG1uK,EAAKuD,cAAc,kCAA0B,IAAAmrK,OAAA,EAA7CA,EAA+Ch2K,UACtEjI,EAAOs9K,cAA6D,QAAhDY,EAAG3uK,EAAKuD,cAAc,kCAA0B,IAAAorK,OAAA,EAA7CA,EAA+Cj2K,WAK1E,GAHIjI,aAAkB3B,EAAAA,EAAAA,OAAAA,mBAClB2B,EAAO+2K,WAAaprB,GAEpB3rJ,aAAkB3B,EAAAA,EAAAA,OAAAA,QAAmB,CACrC,MAAM6G,EAAcqK,EAAK3G,WAAW,GAAGC,YAAYoE,MAAM,KAAKlK,QAAO,CAAC+wB,EAAIC,EAAInP,EAAOirC,KAE7EjrC,EAAQ,GAAM,GACdkP,EAAG5wB,KAAK,CACJR,WAAWmtD,EAAMjrC,EAAQ,IACzBliB,WAAWqxB,KAEZD,IACR,IACH,OAAQvkB,EAAK3G,WAAW,GAAGooE,QAAQtvD,OAAO,IACtC,IAAK,UACD1hB,EAAO5E,SAAW,IAAI06K,MAAMv3K,QAAQpB,QAAQ+H,GAC5C,MACJ,IAAK,aACDlF,EAAO5E,SAAW,IAAI06K,MAAMv3K,QAAQuN,SAAS5G,IAWzD,OALAlF,EAAOs5D,WAAa19D,MAAMoX,KAAKzD,EAAK3G,YAAY5I,QAAQsD,GACpDjF,EAAAA,EAAAA,OAAAA,UAAAA,SAA6BiF,EAAE0tE,QAAQ/8C,UAAU3wB,EAAE0tE,QAAQltE,QAAQ,KAAO,MAC5Ef,QAAO,SAAU+wB,EAAIC,GACD,OAAlBD,EAAG5wB,KAAKgoD,EAAIn3B,IAAaD,IAC1B,IACI9zB,GAEPm+K,GAAM,IAAI7lK,WAAYE,gBAAgBqlK,EAAK,mBAC/C,MAAM7sG,EAAUmtG,EAAIjP,kBAAkBA,kBAAkBl+F,QAGxD,OAFe9lB,EAAIizH,EAAIjP,kBAAkBA,oBAK7C7wK,EAAAA,EAAAA,OAAAA,SAAAA,UAAAA,MAAqC,WACjC,IAAI4qB,EAAS,GACb,GAAInuB,KAAKkd,OAAQ,CACb,IAAIomK,EAAgB,SAAUp1J,EAAO0Y,GACjC,GAAuB,iBAAX1Y,EACR,MAAO,2DAA2Dlb,OAAO,CAAE4zB,OAAQA,EAAQ/jC,MAAOqrB,IAEtG,GAAuB,iBAAXA,EAAqB,CAC7B,IAAIgmI,EAAQ,GACZ,IAAK,IAAIvrJ,KAAQulB,EACbgmI,GAAgB,2CAA2ClhJ,OAAO,CAAE4zB,OAAQA,EAAQ/jC,MAAOqrB,EAAMvlB,GAAOF,IAAKE,IAEjH,OAAOurJ,IAGf,GAAIpzJ,MAAMC,QAAQf,KAAKkd,QAAS,CAC5B,IAAI0pB,EAAS5mC,KAAK8gL,iBAClB3yJ,EAASnuB,KAAKkd,OAAOjV,QAAO,SAAU6S,EAAGsP,EAAGloB,GACxC,IAAIwgL,EAAM,SAAUx0J,GAChB,OAAOo1J,EAAcp1J,EAAO0Y,IAEhC,OAAQ1kC,EAAI,EAAI4Y,EAAI4nK,EAAI5nK,IAAM4nK,EAAIt4J,WAItC+D,EAASm1J,EAActjL,KAAKkd,OAAQld,KAAK8gL,kBAEjD,MAAO,8DAA8D9tK,OAAO,CACxE4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV8/F,MAAOtwI,KAIf5qB,EAAAA,EAAAA,OAAAA,QAAoB,SAAU2yE,EAASzX,EAAcn+D,EAAUijL,GAC3DhgL,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAMk2E,GAC5Bl2E,KAAKy+D,aAAeA,EACpBz+D,KAAKM,SAAWA,EAChBN,KAAKuP,QAAUg0K,EACfvjL,KAAKC,KAAO,IAAIsD,EAAAA,EAAAA,KAAAA,OAAevD,OAGnCuD,EAAAA,EAAAA,KAAAA,OAAiB,SAAU2B,GACvBlF,KAAKwD,OAAS0B,GAGlB3B,EAAAA,EAAAA,KAAAA,OAAAA,UAAAA,mBAA8C,WAI1C,IAAIgM,EAAUvP,KAAKwD,OAAO+L,QAC1B,GAAIA,EAAS,CACT,MAAM/F,EAAQ+F,EAAQ/F,MAAM,YAC5B,GAAIA,EAAO,CACP,MAAMvK,EAAOuK,EAAM,GACb07B,EAAMS,GAAGC,KAAKpnB,IAAIjP,GACxB,GAAI21B,EACA,OAAkC,QAAzBA,EAAIs+I,iBAA6B,0BAA4B,SAAWvkL,GAI7F,OAAOsQ,GAGXhM,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,QAAmBA,EAAAA,EAAAA,OAAAA,QAE9BA,EAAAA,EAAAA,OAAAA,QAAAA,UAAAA,MAAoC,WAShC,OAPIvD,KAAKy+D,aACK,mGAGA,uEAGCzrD,OAAO,CAClB4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACV91D,KAAM7I,KAAKy+D,aACXn+D,SAAWN,KAAKM,oBAAoBiD,EAAAA,EAAAA,OAAAA,SAAqBvD,KAAKwhL,qBAAqBxhL,KAAKM,UAAYN,KAAKM,SAASL,KAAKoP,WAAMjL,EAAWpE,KAAKC,KAAKwjL,sBAClJX,WAAY9iL,KAAKghL,eAIzBz9K,EAAAA,EAAAA,OAAAA,KAAiB,WACb,MAAqD,oBAAjDpE,OAAOqB,UAAUyiB,SAASviB,KAAKsc,UAAU,IAClC,IAAIzZ,EAAAA,EAAAA,OAAAA,KAAe,KAAMyZ,UAAU,GAAIA,UAAU,IAEjD,IAAIzZ,EAAAA,EAAAA,OAAAA,KAAeyZ,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAGxEzZ,EAAAA,EAAAA,OAAAA,KAAiB,SAAUk7D,EAAcnjD,EAAQioK,GAC7ChgL,EAAAA,EAAAA,OAAAA,OAAAA,KAAsBvD,KAAM,QAC5BA,KAAKy+D,aAAeA,EACpBz+D,KAAKsb,OAASA,EACdtb,KAAKuP,QAAUg0K,GAEnBhgL,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,KAAgBA,EAAAA,EAAAA,OAAAA,SAE3BA,EAAAA,EAAAA,OAAAA,KAAAA,UAAAA,MAAiC,WAC7B,IAAIgkB,EAAO,yIACbvU,OAAO,CACDzD,aAAoC,IAAlBvP,KAAKuP,QAA2B,aAAgBvP,KAAKuP,QAAU,IAAO,GACxFsnE,YAAc72E,KAAKsb,OAAO,GAAK,IAAMtb,KAAKsb,OAAO,GACjDw7D,YAAc92E,KAAKsb,OAAO,GAAK,IAAMtb,KAAKsb,OAAO,KAOrD,OAJItb,KAAKy+D,aACG,+FAEA,mEACGzrD,OAAO,CAClB4zB,OAAQ5mC,KAAK8gL,iBACbn0G,IAAK3sE,KAAK2+D,aACVmkH,WAAa9iL,KAAKghL,YAClBn4K,KAAM7I,KAAKy+D,aACXilH,KAAMn8J,KAIdhkB,EAAAA,EAAAA,OAAAA,WAAuB,SAAUk7D,EAAcn+D,EAAUijL,GACrDhgL,EAAAA,EAAAA,OAAAA,QAAAA,KAAuBvD,KAAM,aAAcy+D,EAAcn+D,EAAUijL,IAEvEhgL,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,WAAsBA,EAAAA,EAAAA,OAAAA,SAEjCA,EAAAA,EAAAA,OAAAA,OAAmB,SAAUk7D,EAAcn+D,EAAUijL,GACjDhgL,EAAAA,EAAAA,OAAAA,QAAAA,KAAuBvD,KAAM,SAAUy+D,EAAcn+D,EAAUijL,IAEnEhgL,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAAA,OAAkBA,EAAAA,EAAAA,OAAAA,SAE7B,MAAM2B,EAAS3B,EAAAA,EAAAA,OACf,K,mECzmBA,MAAMiM,EAAO,CACbA,cAAqB5E,eAAgB9H,EAAWoxB,EAAM9qB,GAClD,GAAItG,EAAW,CACX,MAKMqB,SALiBZ,EAAAA,EAAAA,KAAQ,CAC3B8R,IAAK6e,EAAO9qB,EAAS,QACrB6kB,OAAQ,MACRtC,aAAc7rB,EAAAA,EAAAA,SAAAA,QAEIqE,KACtBqL,EAAKpG,GAAUoG,EAAKpG,IAAW,GAC/BjK,OAAOmD,OAAOkN,EAAKpG,GAASjF,GAC5BqL,EAAKgmH,cAAgBhmH,EAAKpG,GAC1BoG,EAAKm0K,iBAAmBv6K,OAExBoG,EAAKgmH,cAAgBhmH,EAAKpG,KAIlC,K,4BCbO,SAAS,IACd,OACE,WACE,MAAM,IAAIpK,MAAM,kCAFI,G,kBAY1B,IAAI4kL,EAAc,EAWX,SAASC,EAAOloJ,GACrB,OAAOA,EAAImoJ,SAAWnoJ,EAAImoJ,OAASxyK,SAASsyK,IAOvC,IAAMh5J,EAAU,SCJvB,QA3BA,WACE,aAME5qB,KAAK+jL,UAAW,EAkBpB,OAZE,YAAAC,QAAA,WACOhkL,KAAK+jL,WACR/jL,KAAK+jL,UAAW,EAChB/jL,KAAKikL,oBAQT,YAAAA,gBAAA,aACF,EAzBA,GCuCO,SAASC,EAA0BppK,EAAGsP,GAC3C,OAAOtP,EAAIsP,EAAI,EAAItP,EAAIsP,GAAK,EAAI,EAS3B,SAAS4N,EAAS1wB,EAAKq0B,GAC5B,OAAOr0B,EAAI0B,QAAQ2yB,IAAQ,EA0BtB,SAASwoJ,EAAkB78K,EAAKmG,EAAQ22K,GAC7C,IAAMxvK,EAAItN,EAAIjE,OACd,GAAIiE,EAAI,IAAMmG,EACZ,OAAO,EACF,GAAIA,GAAUnG,EAAIsN,EAAI,GAC3B,OAAOA,EAAI,EAEX,IAAI1S,OAAC,EACL,GAAIkiL,EAAY,GACd,IAAKliL,EAAI,EAAGA,EAAI0S,IAAK1S,EACnB,GAAIoF,EAAIpF,GAAKuL,EACX,OAAOvL,EAAI,OAGV,GAAIkiL,EAAY,GACrB,IAAKliL,EAAI,EAAGA,EAAI0S,IAAK1S,EACnB,GAAIoF,EAAIpF,IAAMuL,EACZ,OAAOvL,OAIX,IAAKA,EAAI,EAAGA,EAAI0S,IAAK1S,EAAG,CACtB,GAAIoF,EAAIpF,IAAMuL,EACZ,OAAOvL,EACF,GAAIoF,EAAIpF,GAAKuL,EAClB,MAAyB,mBAAd22K,EACLA,EAAU32K,EAAQnG,EAAIpF,EAAI,GAAIoF,EAAIpF,IAAM,EACnCA,EAAI,EAEJA,EAEAoF,EAAIpF,EAAI,GAAKuL,EAASA,EAASnG,EAAIpF,GACrCA,EAAI,EAEJA,EAKf,OAAO0S,EAAI,EASR,SAASyvK,EAAgB/8K,EAAKg9K,EAAOx6G,GAC1C,KAAOw6G,EAAQx6G,GAAK,CAClB,IAAMy6G,EAAMj9K,EAAIg9K,GAChBh9K,EAAIg9K,GAASh9K,EAAIwiE,GACjBxiE,EAAIwiE,GAAOy6G,IACTD,IACAx6G,GASC,SAAS,EAAOxiE,EAAKnD,GAG1B,IAFA,IAAMsvB,EAAY3yB,MAAMC,QAAQoD,GAAQA,EAAO,CAACA,GAC1Cd,EAASowB,EAAUpwB,OAChBnB,EAAI,EAAGA,EAAImB,EAAQnB,IAC1BoF,EAAIA,EAAIjE,QAAUowB,EAAUvxB,GAyBzB,SAAS0G,EAAKtB,EAAKgzI,GAIxB,IAHA,IACIz3I,EADEQ,EAASiE,EAAIjE,SAAW,EAGrBnB,EAAI,EAAGA,EAAImB,EAAQnB,IAE1B,GAAIo4I,EADJz3I,EAAQyE,EAAIpF,GACIA,EAAGoF,GACjB,OAAOzE,EAGX,OAAO,KAQF,SAAS2/C,EAAOgiI,EAAMC,GAC3B,IAAMC,EAAOF,EAAKnhL,OAClB,GAAIqhL,IAASD,EAAKphL,OAChB,OAAO,EAET,IAAK,IAAInB,EAAI,EAAGA,EAAIwiL,EAAMxiL,IACxB,GAAIsiL,EAAKtiL,KAAOuiL,EAAKviL,GACnB,OAAO,EAGX,OAAO,EA8BF,SAAS2/D,EAAUv6D,EAAKgzI,GAC7B,IAAIxwH,EAKJ,OAJexiB,EAAIyN,OAAM,SAAU+pI,EAAIr3I,GAErC,OADAqiB,EAAQriB,GACA6yI,EAAKwE,EAAIr3I,EAAKH,MAETwiB,GAAS,ECtOnB,SAAS66J,IACd,OAAO,EAOF,SAASC,IACd,OAAO,EAQF,SAASC,KCvBhB,I,EAAMz5G,EACiB,oBAAdtO,gBAA4D,IAAxBA,UAAUC,UACjDD,UAAUC,UAAU3uC,cACpB,GAMO02J,GAAqC,IAA3B15G,EAAGpiE,QAAQ,WAYrB+7K,GANmC,IAA1B35G,EAAGpiE,QAAQ,YAA4C,GAAxBoiE,EAAGpiE,QAAQ,aAS5DoiE,EAAGpiE,QAAQ,iBAAmB,GAC9BoiE,EAAG5hE,MAAM,0CAOAw7K,GAAmC,IAA1B55G,EAAGpiE,QAAQ,YAA2C,GAAvBoiE,EAAGpiE,QAAQ,QAMnD,GAAmC,IAA7BoiE,EAAGpiE,QAAQ,aASjBi8K,EACiB,oBAArB9qE,iBAAmCA,iBAAmB,EAOlD+qE,EACkB,oBAAtBC,mBACoB,oBAApBC,iBACPrlL,gBAAgBolL,kBAMLE,EACM,oBAAVjyG,OAAyBA,MAAM5yE,UAAU6nC,OAKrCi9I,EAA0B,WACrC,IAAIt3K,GAAU,EACd,IACE,IAAMrO,EAAUR,OAAOqgK,eAAe,GAAI,UAAW,CACnDhhJ,IAAK,WACHxQ,GAAU,KAIdyD,OAAO7F,iBAAiB,IAAK,KAAMjM,GACnC8R,OAAOkvC,oBAAoB,IAAK,KAAMhhD,GACtC,MAAOsW,IAGT,OAAOjI,EAd8B,G,mcC7BvC,QAnCA,YAIE,WAAY/O,GAAZ,WAEQ0e,EACJ,oDAF4C,IAAMiN,EAAQzY,MAAM,KAAK,IAIrE,gBACAlT,EACA,gB,SAEF,YAAM0e,IAAQ,MAUT1e,KAAOA,EAKZ,EAAK4J,KAAO,iBAGZ,EAAK8U,QAAUA,E,EAEnB,OAjC6B,OAiC7B,EAjCA,CAA6B3e,OCDtB,SAAS,EAAOumL,EAAWC,GAChC,IAAKD,EACH,MAAM,IAAI,EAAeC,GCkB7B,IAkPIC,EAlPEC,EAAO,IAAI5kL,MAAM,GAehB,SAAS,EAAMk4I,GACpB,OAAOl6H,EAAIk6H,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,GAUhC,SAAS2sC,EAASC,EAAYC,GACnC,IAAMxkK,EAAKukK,EAAW,GAChBE,EAAKF,EAAW,GAChBG,EAAKH,EAAW,GAChBI,EAAKJ,EAAW,GAChBK,EAAKL,EAAW,GAChBM,EAAKN,EAAW,GAChBtkK,EAAKukK,EAAW,GAChBM,EAAKN,EAAW,GAChBO,EAAKP,EAAW,GAChBQ,EAAKR,EAAW,GAChBS,EAAKT,EAAW,GAChBU,EAAKV,EAAW,GAStB,OAPAD,EAAW,GAAKvkK,EAAKC,EAAKykK,EAAKI,EAC/BP,EAAW,GAAKE,EAAKxkK,EAAK0kK,EAAKG,EAC/BP,EAAW,GAAKvkK,EAAK+kK,EAAKL,EAAKM,EAC/BT,EAAW,GAAKE,EAAKM,EAAKJ,EAAKK,EAC/BT,EAAW,GAAKvkK,EAAKilK,EAAKP,EAAKQ,EAAKN,EACpCL,EAAW,GAAKE,EAAKQ,EAAKN,EAAKO,EAAKL,EAE7BN,EAcF,SAAS9mK,EAAIk6H,EAAWl+H,EAAGsP,EAAG5hB,EAAG05B,EAAGnjC,EAAGgQ,GAO5C,OANAiqI,EAAU,GAAKl+H,EACfk+H,EAAU,GAAK5uH,EACf4uH,EAAU,GAAKxwI,EACfwwI,EAAU,GAAK92G,EACf82G,EAAU,GAAKj6I,EACfi6I,EAAU,GAAKjqI,EACRiqI,EA4BF,SAAS5oI,EAAM4oI,EAAWv1D,GAC/B,IAAM91D,EAAI81D,EAAW,GACf71D,EAAI61D,EAAW,GAGrB,OAFAA,EAAW,GAAKu1D,EAAU,GAAKrrH,EAAIqrH,EAAU,GAAKprH,EAAIorH,EAAU,GAChEv1D,EAAW,GAAKu1D,EAAU,GAAKrrH,EAAIqrH,EAAU,GAAKprH,EAAIorH,EAAU,GACzDv1D,EAsBF,SAASl5C,EAAMyuG,EAAWrrH,EAAGC,GAClC,OAAO+3J,EAAS3sC,EAAWl6H,EAAI4mK,EAAM/3J,EAAG,EAAG,EAAGC,EAAG,EAAG,IAqB/C,SAAS4nD,EAAUwjE,EAAWn2F,EAAIC,GACvC,OAAO6iI,EAAS3sC,EAAWl6H,EAAI4mK,EAAM,EAAG,EAAG,EAAG,EAAG7iI,EAAIC,IAgBhD,SAAS0jI,EAAQxtC,EAAWytC,EAAKC,EAAKC,EAAIC,EAAI3kL,EAAO4kL,EAAKC,GAC/D,IAAM1kL,EAAMb,KAAKa,IAAIH,GACfE,EAAMZ,KAAKY,IAAIF,GAOrB,OANA+2I,EAAU,GAAK2tC,EAAKxkL,EACpB62I,EAAU,GAAK4tC,EAAKxkL,EACpB42I,EAAU,IAAM2tC,EAAKvkL,EACrB42I,EAAU,GAAK4tC,EAAKzkL,EACpB62I,EAAU,GAAK6tC,EAAMF,EAAKxkL,EAAM2kL,EAAMH,EAAKvkL,EAAMqkL,EACjDztC,EAAU,GAAK6tC,EAAMD,EAAKxkL,EAAM0kL,EAAMF,EAAKzkL,EAAMukL,EAC1C1tC,EAqCF,SAAS+tC,EAAYt5K,EAAQkN,GAClC,IAyB0BqsK,EAzBpBC,GAyBoBD,EAzBFrsK,GA0Bb,GAAKqsK,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAzBtC,EAAe,IAARC,EAAW,IAElB,IAAMnsK,EAAIH,EAAO,GACXyP,EAAIzP,EAAO,GACXnS,EAAImS,EAAO,GACXunB,EAAIvnB,EAAO,GACX5b,EAAI4b,EAAO,GACX5L,EAAI4L,EAAO,GASjB,OAPAlN,EAAO,GAAKy0B,EAAI+kJ,EAChBx5K,EAAO,IAAM2c,EAAI68J,EACjBx5K,EAAO,IAAMjF,EAAIy+K,EACjBx5K,EAAO,GAAKqN,EAAImsK,EAChBx5K,EAAO,IAAMjF,EAAIuG,EAAImzB,EAAInjC,GAAKkoL,EAC9Bx5K,EAAO,KAAOqN,EAAI/L,EAAIqb,EAAIrrB,GAAKkoL,EAExBx5K,EAwBF,SAAS,EAASu5K,GACvB,IAAME,EAAkB,UAAYF,EAAI18K,KAAK,MAAQ,IACrD,GAAI46K,EACF,OAAOgC,EAET,IAAMzyK,EACJgxK,IAAuBA,EAAqB94K,SAASC,cAAc,QAErE,OADA6H,EAAK9O,MAAMqzI,UAAYkuC,EAChBzyK,EAAK9O,MAAMqzI,UCvRpB,QACW,EADX,EAEgB,EAFhB,EAGS,EAHT,EAIS,EAJT,EAKS,EALT,EAMQ,GCUD,SAAS,EAAe5uI,GAE7B,IADA,IAAMkR,EAAS6rK,KACNjlL,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EACjDklL,GAAiB9rK,EAAQlR,EAAYlI,IAEvC,OAAOoZ,EA0BF,SAAS,EAAOA,EAAQzY,EAAOwkL,GACpC,OAAIA,GACFA,EAAW,GAAK/rK,EAAO,GAAKzY,EAC5BwkL,EAAW,GAAK/rK,EAAO,GAAKzY,EAC5BwkL,EAAW,GAAK/rK,EAAO,GAAKzY,EAC5BwkL,EAAW,GAAK/rK,EAAO,GAAKzY,EACrBwkL,GAEA,CACL/rK,EAAO,GAAKzY,EACZyY,EAAO,GAAKzY,EACZyY,EAAO,GAAKzY,EACZyY,EAAO,GAAKzY,GAYX,SAAS2H,EAAM8Q,EAAQ+rK,GAC5B,OAAIA,GACFA,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GAChB+rK,GAEA/rK,EAAO3Q,QAUX,SAAS28K,EAAyBhsK,EAAQqS,EAAGC,GAClD,IAAIi1B,EAAIC,EAeR,OAbED,EADEl1B,EAAIrS,EAAO,GACRA,EAAO,GAAKqS,EACRrS,EAAO,GAAKqS,EAChBA,EAAIrS,EAAO,GAEX,GASKunC,GANVC,EADEl1B,EAAItS,EAAO,GACRA,EAAO,GAAKsS,EACRtS,EAAO,GAAKsS,EAChBA,EAAItS,EAAO,GAEX,GAEewnC,EAWjB,SAASykI,EAAmBjsK,EAAQmoE,GACzC,OAAO+jG,GAAWlsK,EAAQmoE,EAAW,GAAIA,EAAW,IAe/C,SAASgkG,GAAeC,EAASC,GACtC,OACED,EAAQ,IAAMC,EAAQ,IACtBA,EAAQ,IAAMD,EAAQ,IACtBA,EAAQ,IAAMC,EAAQ,IACtBA,EAAQ,IAAMD,EAAQ,GAanB,SAASF,GAAWlsK,EAAQqS,EAAGC,GACpC,OAAOtS,EAAO,IAAMqS,GAAKA,GAAKrS,EAAO,IAAMA,EAAO,IAAMsS,GAAKA,GAAKtS,EAAO,GAUpE,SAASssK,GAAuBtsK,EAAQmoE,GAC7C,IAAMokG,EAAOvsK,EAAO,GACdwsK,EAAOxsK,EAAO,GACdysK,EAAOzsK,EAAO,GACd0sK,EAAO1sK,EAAO,GACdqS,EAAI81D,EAAW,GACf71D,EAAI61D,EAAW,GACjBwkG,EAAeC,EAcnB,OAbIv6J,EAAIk6J,EACNI,GAA8BC,EACrBv6J,EAAIo6J,IACbE,GAA8BC,GAE5Bt6J,EAAIk6J,EACNG,GAA8BC,EACrBt6J,EAAIo6J,IACbC,GAA8BC,GAE5BD,IAAiBC,IACnBD,EAAeC,GAEVD,EAQF,SAASd,KACd,MAAO,CAACnxH,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GAYnC,SAASmyH,GAAeN,EAAMC,EAAMC,EAAMC,EAAMX,GACrD,OAAIA,GACFA,EAAW,GAAKQ,EAChBR,EAAW,GAAKS,EAChBT,EAAW,GAAKU,EAChBV,EAAW,GAAKW,EACTX,GAEA,CAACQ,EAAMC,EAAMC,EAAMC,GASvB,SAASI,GAAoBf,GAClC,OAAOc,GAAenyH,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,EAAUqxH,GAQ3D,SAASgB,GAA6B5kG,EAAY4jG,GACvD,IAAM15J,EAAI81D,EAAW,GACf71D,EAAI61D,EAAW,GACrB,OAAO0kG,GAAex6J,EAAGC,EAAGD,EAAGC,EAAGy5J,GAqB7B,SAASiB,GACdC,EACAt2J,EACA63C,EACA0+G,EACAnB,GAGA,OAAOoB,GADQL,GAAoBf,GACEkB,EAAiBt2J,EAAQ63C,EAAK0+G,GAoB9D,SAAS,GAAOd,EAASC,GAC9B,OACED,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,GA2BnB,SAAS,GAAOD,EAASC,GAa9B,OAZIA,EAAQ,GAAKD,EAAQ,KACvBA,EAAQ,GAAKC,EAAQ,IAEnBA,EAAQ,GAAKD,EAAQ,KACvBA,EAAQ,GAAKC,EAAQ,IAEnBA,EAAQ,GAAKD,EAAQ,KACvBA,EAAQ,GAAKC,EAAQ,IAEnBA,EAAQ,GAAKD,EAAQ,KACvBA,EAAQ,GAAKC,EAAQ,IAEhBD,EAOF,SAASN,GAAiB9rK,EAAQmoE,GACnCA,EAAW,GAAKnoE,EAAO,KACzBA,EAAO,GAAKmoE,EAAW,IAErBA,EAAW,GAAKnoE,EAAO,KACzBA,EAAO,GAAKmoE,EAAW,IAErBA,EAAW,GAAKnoE,EAAO,KACzBA,EAAO,GAAKmoE,EAAW,IAErBA,EAAW,GAAKnoE,EAAO,KACzBA,EAAO,GAAKmoE,EAAW,IAwBpB,SAASglG,GACdntK,EACAitK,EACAt2J,EACA63C,EACA0+G,GAEA,KAAOv2J,EAAS63C,EAAK73C,GAAUu2J,EAC7BE,GAASptK,EAAQitK,EAAgBt2J,GAASs2J,EAAgBt2J,EAAS,IAErE,OAAO3W,EAoBF,SAASotK,GAASptK,EAAQqS,EAAGC,GAClCtS,EAAO,GAAK/Z,KAAKqa,IAAIN,EAAO,GAAIqS,GAChCrS,EAAO,GAAK/Z,KAAKqa,IAAIN,EAAO,GAAIsS,GAChCtS,EAAO,GAAK/Z,KAAK4K,IAAImP,EAAO,GAAIqS,GAChCrS,EAAO,GAAK/Z,KAAK4K,IAAImP,EAAO,GAAIsS,GAY3B,SAAS+6J,GAAcrtK,EAAQid,GACpC,IAAIvwB,EAEJ,OADAA,EAAMuwB,EAAS,GAAcjd,OAI7BtT,EAAMuwB,EAAS,GAAejd,OAI9BtT,EAAMuwB,EAAS,GAAYjd,KANlBtT,GAUTA,EAAMuwB,EAAS,GAAWjd,OAInB,EASF,SAAS3K,GAAQ2K,GACtB,IAAI00E,EAAO,EAIX,OAHK,GAAQ10E,KACX00E,EAAO44F,GAASttK,GAAUutK,GAAUvtK,IAE/B00E,EASF,SAAS,GAAc10E,GAC5B,MAAO,CAACA,EAAO,GAAIA,EAAO,IASrB,SAAS,GAAeA,GAC7B,MAAO,CAACA,EAAO,GAAIA,EAAO,IASrB,SAASpa,GAAUoa,GACxB,MAAO,EAAEA,EAAO,GAAKA,EAAO,IAAM,GAAIA,EAAO,GAAKA,EAAO,IAAM,GAS1D,SAASwtK,GAAUxtK,EAAQytK,GAChC,IAAItlG,EAYJ,MAXe,gBAAXslG,EACFtlG,EAAa,GAAcnoE,GACP,iBAAXytK,EACTtlG,EAAa,GAAenoE,GACR,aAAXytK,EACTtlG,EAAa,GAAWnoE,GACJ,cAAXytK,EACTtlG,EAAa,GAAYnoE,GAEzB,GAAO,EAAO,IAETmoE,EAwBF,SAASulG,GACdroL,EACAwjD,EACAkQ,EACAx/B,EACAwyJ,GAEM,MAAmC4B,GACvCtoL,EACAwjD,EACAkQ,EACAx/B,GAJKmwH,EAAE,KAAEC,EAAE,KAAEU,EAAE,KAAEC,EAAE,KAAEsjC,EAAE,KAAEC,EAAE,KAAEC,EAAE,KAAEC,EAAE,KAMrC,OAAOlB,GACL5mL,KAAKqa,IAAIopI,EAAIW,EAAIujC,EAAIE,GACrB7nL,KAAKqa,IAAIqpI,EAAIW,EAAIujC,EAAIE,GACrB9nL,KAAK4K,IAAI64I,EAAIW,EAAIujC,EAAIE,GACrB7nL,KAAK4K,IAAI84I,EAAIW,EAAIujC,EAAIE,GACrBhC,GAWG,SAAS4B,GAAmBtoL,EAAQwjD,EAAYkQ,EAAUx/B,GAC/D,IAAMguB,EAAMsB,EAAatvB,EAAK,GAAM,EAC9BiuB,EAAMqB,EAAatvB,EAAK,GAAM,EAC9By0J,EAAc/nL,KAAKY,IAAIkyD,GACvBk1H,EAAchoL,KAAKa,IAAIiyD,GACvBm1H,EAAO3mI,EAAKymI,EACZG,EAAO5mI,EAAK0mI,EACZG,EAAO5mI,EAAKwmI,EACZK,EAAO7mI,EAAKymI,EACZ57J,EAAIhtB,EAAO,GACXitB,EAAIjtB,EAAO,GACjB,MAAO,CACLgtB,EAAI67J,EAAOG,EACX/7J,EAAI67J,EAAOC,EACX/7J,EAAI67J,EAAOG,EACX/7J,EAAI67J,EAAOC,EACX/7J,EAAI67J,EAAOG,EACX/7J,EAAI67J,EAAOC,EACX/7J,EAAI67J,EAAOG,EACX/7J,EAAI67J,EAAOC,EACX/7J,EAAI67J,EAAOG,EACX/7J,EAAI67J,EAAOC,GAUR,SAASb,GAAUvtK,GACxB,OAAOA,EAAO,GAAKA,EAAO,GAqBrB,SAASsuK,GAAgBlC,EAASC,EAASN,GAChD,IAAMwC,EAAexC,GA9Zd,CAACrxH,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KAubvC,OAxBI5S,GAAWskI,EAASC,IAClBD,EAAQ,GAAKC,EAAQ,GACvBkC,EAAa,GAAKnC,EAAQ,GAE1BmC,EAAa,GAAKlC,EAAQ,GAExBD,EAAQ,GAAKC,EAAQ,GACvBkC,EAAa,GAAKnC,EAAQ,GAE1BmC,EAAa,GAAKlC,EAAQ,GAExBD,EAAQ,GAAKC,EAAQ,GACvBkC,EAAa,GAAKnC,EAAQ,GAE1BmC,EAAa,GAAKlC,EAAQ,GAExBD,EAAQ,GAAKC,EAAQ,GACvBkC,EAAa,GAAKnC,EAAQ,GAE1BmC,EAAa,GAAKlC,EAAQ,IAG5BS,GAAoByB,GAEfA,EA2BF,SAAS,GAAWvuK,GACzB,MAAO,CAACA,EAAO,GAAIA,EAAO,IASrB,SAAS,GAAYA,GAC1B,MAAO,CAACA,EAAO,GAAIA,EAAO,IASrB,SAASstK,GAASttK,GACvB,OAAOA,EAAO,GAAKA,EAAO,GAUrB,SAAS8nC,GAAWskI,EAASC,GAClC,OACED,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,IACtBD,EAAQ,IAAMC,EAAQ,GAUnB,SAAS,GAAQrsK,GACtB,OAAOA,EAAO,GAAKA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAwB9C,SAASwuK,GAAgBxuK,EAAQzY,GACtC,IAAMknL,GAAWzuK,EAAO,GAAKA,EAAO,IAAM,GAAMzY,EAAQ,GAClDmnL,GAAW1uK,EAAO,GAAKA,EAAO,IAAM,GAAMzY,EAAQ,GACxDyY,EAAO,IAAMyuK,EACbzuK,EAAO,IAAMyuK,EACbzuK,EAAO,IAAM0uK,EACb1uK,EAAO,IAAM0uK,EA8ER,SAAS,GAAe1uK,EAAQ2uK,EAAa5C,EAAY6C,GAC9D,IAAI9/K,EAAc,GAClB,GAAI8/K,EAAY,EAGd,IAFA,IAAM53J,EAAQhX,EAAO,GAAKA,EAAO,GAC3BiX,EAASjX,EAAO,GAAKA,EAAO,GACzBpZ,EAAI,EAAGA,EAAIgoL,IAAahoL,EAC/BkI,EAAYhC,KACVkT,EAAO,GAAMgX,EAAQpwB,EAAKgoL,EAC1B5uK,EAAO,GACPA,EAAO,GACPA,EAAO,GAAMiX,EAASrwB,EAAKgoL,EAC3B5uK,EAAO,GAAMgX,EAAQpwB,EAAKgoL,EAC1B5uK,EAAO,GACPA,EAAO,GACPA,EAAO,GAAMiX,EAASrwB,EAAKgoL,QAI/B9/K,EAAc,CACZkR,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IAGX2uK,EAAY7/K,EAAaA,EAAa,GAGtC,IAFA,IAAM+/K,EAAK,GACLC,EAAK,GACKrpK,GAAP7e,EAAI,EAAOkI,EAAY/G,QAAQnB,EAAI6e,EAAG7e,GAAK,EAClDioL,EAAG/hL,KAAKgC,EAAYlI,IACpBkoL,EAAGhiL,KAAKgC,EAAYlI,EAAI,IAE1B,OAjzBF,SAA4BioL,EAAIC,EAAI/C,GAKlC,OAAOc,GAJM5mL,KAAKqa,IAAIxL,MAAM,KAAM+5K,GACrB5oL,KAAKqa,IAAIxL,MAAM,KAAMg6K,GACrB7oL,KAAK4K,IAAIiE,MAAM,KAAM+5K,GACrB5oL,KAAK4K,IAAIiE,MAAM,KAAMg6K,GACY/C,GA4yBvCgD,CAAmBF,EAAIC,EAAI/C,GAW7B,SAASiD,GAAMhvK,EAAQivK,GAC5B,IAAMC,EAAmBD,EAAWxjK,YAC9BpmB,EAASO,GAAUoa,GACzB,GACEivK,EAAWE,aACV9pL,EAAO,GAAK6pL,EAAiB,IAAM7pL,EAAO,IAAM6pL,EAAiB,IAClE,CACA,IAAME,EAAa9B,GAAS4B,GAItBv4J,EAHa1wB,KAAKonD,OACrBhoD,EAAO,GAAK6pL,EAAiB,IAAME,GAEVA,EAC5BpvK,EAAO,IAAM2W,EACb3W,EAAO,IAAM2W,EAEf,OAAO3W,ECt2BF,SAASqvK,GAAM9nL,EAAO+Y,EAAKzP,GAChC,OAAO5K,KAAKqa,IAAIra,KAAK4K,IAAItJ,EAAO+Y,GAAMzP,GAYjC,IAAMy+K,GAAO,WAGlB,IAAIA,EAWJ,OAREA,EAFE,SAAUrpL,KAELA,KAAKqpL,KAGL,SAAUj9J,GACf,IAAMC,EAAwB,KAAOi9J,IAAIl9J,GACzC,OAAQC,EAAI,EAAIA,GAAK,GAGlBg9J,EAdW,GA0BPE,GAAO,WAGlB,IAAIA,EAUJ,OAPEA,EAFE,SAAUvpL,KAELA,KAAKupL,KAGL,SAAUn9J,GACf,OAAOpsB,KAAKoG,IAAIgmB,GAAKpsB,KAAKwpL,OAGvBD,EAbW,GA2Bb,SAASE,GAAuBr9J,EAAGC,EAAG+3H,EAAIC,EAAIsjC,EAAIC,GACvD,IAAMtmI,EAAKqmI,EAAKvjC,EACV7iG,EAAKqmI,EAAKvjC,EAChB,GAAW,IAAP/iG,GAAmB,IAAPC,EAAU,CACxB,IAAM/a,IAAMpa,EAAIg4H,GAAM9iG,GAAMj1B,EAAIg4H,GAAM9iG,IAAOD,EAAKA,EAAKC,EAAKA,GACxD/a,EAAI,GACN49G,EAAKujC,EACLtjC,EAAKujC,GACIphJ,EAAI,IACb49G,GAAM9iG,EAAK9a,EACX69G,GAAM9iG,EAAK/a,GAGf,OAAO,GAAgBpa,EAAGC,EAAG+3H,EAAIC,GAW5B,SAAS,GAAgBD,EAAIC,EAAIsjC,EAAIC,GAC1C,IAAMtmI,EAAKqmI,EAAKvjC,EACV7iG,EAAKqmI,EAAKvjC,EAChB,OAAO/iG,EAAKA,EAAKC,EAAKA,EA0EjB,SAAS,GAAUmoI,GACxB,OAAQA,EAAiB1pL,KAAKS,GAAM,IAU/B,SAAS,GAAO8Y,EAAGsP,GACxB,IAAM9V,EAAIwG,EAAIsP,EACd,OAAO9V,EAAI8V,EAAI,EAAI9V,EAAI8V,EAAI9V,EAWtB,SAAS42K,GAAKpwK,EAAGsP,EAAGuD,GACzB,OAAO7S,EAAI6S,GAAKvD,EAAItP,GASf,SAASsrE,GAAQxxE,EAAGu2K,GACzB,IAAMnpD,EAASzgI,KAAKs5B,IAAI,GAAIswJ,GAC5B,OAAO5pL,KAAKirC,MAAM53B,EAAIotH,GAAUA,EAU3B,SAASx1F,GAAM53B,EAAGu2K,GACvB,OAAO5pL,KAAKirC,MAAM45C,GAAQxxE,EAAGu2K,IAUxB,SAASxiI,GAAM/zC,EAAGu2K,GACvB,OAAO5pL,KAAKonD,MAAMy9B,GAAQxxE,EAAGu2K,IAUxB,SAAS5mI,GAAK3vC,EAAGu2K,GACtB,OAAO5pL,KAAKgjD,KAAK6hC,GAAQxxE,EAAGu2K,ICnO9B,IAAMC,GAAgB,oDAQhBC,GAAkB,4BAQjB,SAASC,GAAS/5G,GACvB,MAAqB,iBAAVA,EACFA,EAEA,GAASA,GASpB,SAASg6G,GAAUh6G,GACjB,IAAMutE,EAAKnyI,SAASC,cAAc,OAElC,GADAkyI,EAAGn5I,MAAM4rE,MAAQA,EACM,KAAnButE,EAAGn5I,MAAM4rE,MAAc,CACzB5kE,SAAS+0B,KAAK70B,YAAYiyI,GAC1B,IAAM0sC,EAAMzkH,iBAAiB+3E,GAAIvtE,MAEjC,OADA5kE,SAAS+0B,KAAK+6B,YAAYqiF,GACnB0sC,EAEP,MAAO,GAQJ,IAAMC,GAAa,WASxB,IAKM3+J,EAAQ,GAKV4+J,EAAY,EAEhB,OAAO,SAKKhkJ,GACR,IAAI6pC,EACJ,GAAIzkD,EAAMrsB,eAAeinC,GACvB6pC,EAAQzkD,EAAM4a,OACT,CACL,GAAIgkJ,GAtBa,KAsBgB,CAC/B,IAAIxpL,EAAI,EACR,IAAK,IAAMuG,KAAOqkB,EACE,IAAP,EAAN5qB,cACI4qB,EAAMrkB,KACXijL,GAIRn6G,EA6BR,SAA6B7pC,GAC3B,IAAIpzB,EAAGuuD,EAAGz4C,EAAGtP,EAAGy2D,EAEZ85G,GAAgBn5K,KAAKw1B,KACvBA,EAAI6jJ,GAAU7jJ,IAGhB,GAAI0jJ,GAAcl5K,KAAKw1B,GAAI,CAEzB,IAAM9yB,EAAI8yB,EAAErkC,OAAS,EACjB6+B,O,EAEFA,EADEttB,GAAK,EACH,EAEA,EAEN,IAAM+2K,EAAiB,IAAN/2K,GAAiB,IAANA,EAC5BN,EAAIgE,SAASovB,EAAE9gB,OAAO,EAAI,EAAIsb,EAAGA,GAAI,IACrC2gC,EAAIvqD,SAASovB,EAAE9gB,OAAO,EAAI,EAAIsb,EAAGA,GAAI,IACrC9X,EAAI9R,SAASovB,EAAE9gB,OAAO,EAAI,EAAIsb,EAAGA,GAAI,IAEnCpnB,EADE6wK,EACErzK,SAASovB,EAAE9gB,OAAO,EAAI,EAAIsb,EAAGA,GAAI,IAEjC,IAEG,GAALA,IACF5tB,GAAKA,GAAK,GAAKA,EACfuuD,GAAKA,GAAK,GAAKA,EACfz4C,GAAKA,GAAK,GAAKA,EACXuhK,IACF7wK,GAAKA,GAAK,GAAKA,IAGnBy2D,EAAQ,CAACj9D,EAAGuuD,EAAGz4C,EAAGtP,EAAI,UACS,GAAtB4sB,EAAE1+B,QAAQ,SAGnBumI,GADAh+D,EAAQ7pC,EAAE/8B,MAAM,GAAI,GAAGwH,MAAM,KAAK7T,IAAIqpB,SAER,GAArB+f,EAAE1+B,QAAQ,UAEnBuoE,EAAQ7pC,EAAE/8B,MAAM,GAAI,GAAGwH,MAAM,KAAK7T,IAAIqpB,SAChCvf,KAAK,GACXmnI,GAAUh+D,IAEV,GAAO,EAAO,IAEhB,OAAOA,EA3EOq6G,CAAoBlkJ,GAC5B5a,EAAM4a,GAAK6pC,IACTm6G,EAEJ,OAAOn6G,GA5Ca,GAwDnB,SAASs6G,GAAQt6G,GACtB,OAAIzwE,MAAMC,QAAQwwE,GACTA,EAEAk6G,GAAWl6G,GA+Df,SAASg+D,GAAUh+D,GAKxB,OAJAA,EAAM,GAAKo5G,GAAOp5G,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAKo5G,GAAOp5G,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAKo5G,GAAOp5G,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,GAAKo5G,GAAMp5G,EAAM,GAAI,EAAG,GACvBA,EAOF,SAAS,GAASA,GACvB,IAAIj9D,EAAIi9D,EAAM,GACVj9D,IAAU,EAAJA,KACRA,EAAKA,EAAI,GAAO,GAElB,IAAIuuD,EAAI0O,EAAM,GACV1O,IAAU,EAAJA,KACRA,EAAKA,EAAI,GAAO,GAElB,IAAIz4C,EAAImnD,EAAM,GAKd,OAJInnD,IAAU,EAAJA,KACRA,EAAKA,EAAI,GAAO,GAGX,QAAU9V,EAAI,IAAMuuD,EAAI,IAAMz4C,EAAI,UADlBhmB,IAAbmtE,EAAM,GAAmB,EAAIhwE,KAAKirC,MAAiB,IAAX+kC,EAAM,IAAY,KACjB,IC/MrD,kBACE,aAKEvxE,KAAK8rL,OAAS,GAMd9rL,KAAK+rL,WAAa,EAMlB/rL,KAAKgsL,cAAgB,GAoEzB,OA9DE,YAAAnrI,MAAA,WACE7gD,KAAK8rL,OAAS,GACd9rL,KAAK+rL,WAAa,GAMpB,YAAAE,eAAA,WACE,OAAOjsL,KAAK+rL,WAAa/rL,KAAKgsL,eAMhC,YAAAE,OAAA,WACE,GAAIlsL,KAAKisL,iBAAkB,CACzB,IAAI/pL,EAAI,EACR,IAAK,IAAMuG,KAAOzI,KAAK8rL,OAAQ,CAC7B,IAAMK,EAAYnsL,KAAK8rL,OAAOrjL,GACZ,IAAP,EAANvG,MAAmBiqL,EAAUC,uBACzBpsL,KAAK8rL,OAAOrjL,KACjBzI,KAAK+rL,eAYf,YAAAvtK,IAAA,SAAI7M,EAAKwb,EAAaokD,GACpB,IAAM9oE,EAAM4jL,GAAO16K,EAAKwb,EAAaokD,GACrC,OAAO9oE,KAAOzI,KAAK8rL,OAAS9rL,KAAK8rL,OAAOrjL,GAAO,MASjD,YAAAqW,IAAA,SAAInN,EAAKwb,EAAaokD,EAAO46G,GAC3B,IAAM1jL,EAAM4jL,GAAO16K,EAAKwb,EAAaokD,GACrCvxE,KAAK8rL,OAAOrjL,GAAO0jL,IACjBnsL,KAAK+rL,YAUT,YAAA5sD,QAAA,SAAQmtD,GACNtsL,KAAKgsL,cAAgBM,EACrBtsL,KAAKksL,UAET,EAtFA,GA8FA,SAASG,GAAO16K,EAAKwb,EAAaokD,GAEhC,OAAOpkD,EAAc,IAAMxb,EAAM,KADb4/D,EAAQ+5G,GAAS/5G,GAAS,QAWzC,IAAMg7G,GAAS,IAAIC,GClDnB,SAAS1+G,GAAgBhuB,GAC9BA,EAAIguB,kBAUN,SA9DA,WAIE,WAAY3jE,GAIVnK,KAAKysL,mBAKLzsL,KAAK0sL,iBAOL1sL,KAAKmK,KAAOA,EAOZnK,KAAKyN,OAAS,KAmBlB,OAXE,YAAA0iG,eAAA,WACEnwG,KAAK0sL,kBAAmB,GAO1B,YAAA5+G,gBAAA,WACE9tE,KAAKysL,oBAAqB,GAE9B,EA9CA,GCPA,GAMkB,iBCAX,IAAM,GACc,mBAAlBttL,OAAOmD,OACVnD,OAAOmD,OACP,SAAUmL,EAAQk/K,GAChB,GAAIl/K,MAAAA,EACF,MAAM,IAAIsC,UAAU,8CAItB,IADA,IAAM68K,EAASztL,OAAOsO,GACbvL,EAAI,EAAGgiB,EAAKlH,UAAU3Z,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAClD,IAAMyY,EAASqC,UAAU9a,GACzB,GAAIyY,MAAAA,EACF,IAAK,IAAMlS,KAAOkS,EACZA,EAAOla,eAAegI,KACxBmkL,EAAOnkL,GAAOkS,EAAOlS,IAK7B,OAAOmkL,GAOR,SAAS/rI,GAAMkH,GACpB,IAAK,IAAMvzB,KAAYuzB,SACdA,EAAOvzB,GAYX,IAAMq4J,GACc,mBAAlB1tL,OAAOgvB,OACVhvB,OAAOgvB,OACP,SAAU45B,GACR,IAAM55B,EAAS,GACf,IAAK,IAAMqG,KAAYuzB,EACrB55B,EAAO/lB,KAAK2/C,EAAOvzB,IAErB,OAAOrG,GAQR,SAAS,GAAQ45B,GACtB,IAAIvzB,EACJ,IAAKA,KAAYuzB,EACf,OAAO,EAET,OAAQvzB,E,+dCiHV,SAhKA,YAIE,WAAYs4J,GAAZ,MACE,cAAO,K,OAMP,EAAKC,aAAeD,EAMpB,EAAKE,iBAAmB,KAMxB,EAAKC,aAAe,KAMpB,EAAKC,WAAa,K,EAiItB,OA9JqB,QAoCnB,YAAAthL,iBAAA,SAAiBzB,EAAM60C,GACrB,GAAK70C,GAAS60C,EAAd,CAGA,IAAM8hG,EAAY9gJ,KAAKktL,aAAeltL,KAAKktL,WAAa,IAClDC,EAAmBrsC,EAAU32I,KAAU22I,EAAU32I,GAAQ,KACnB,IAAxCgjL,EAAiBnkL,QAAQg2C,IAC3BmuI,EAAiB/kL,KAAK42C,KAc1B,YAAAhf,cAAA,SAAcH,GACZ,IAAMg+B,EAA4B,iBAAVh+B,EAClB11B,EAAO0zD,EAAWh+B,EAAQA,EAAM11B,KAChC22I,EAAY9gJ,KAAKktL,YAAcltL,KAAKktL,WAAW/iL,GACrD,GAAK22I,EAAL,CAIA,IAAMhhG,EAAM+d,EAAW,IAAI/9B,GAAMD,GAA8B,EAC1DigB,EAAIryC,SACPqyC,EAAIryC,OAASzN,KAAK+sL,cAAgB/sL,MAEpC,IAQIotL,EAREC,EAAcrtL,KAAKitL,eAAiBjtL,KAAKitL,aAAe,IACxDK,EACJttL,KAAKgtL,mBAAqBhtL,KAAKgtL,iBAAmB,IAC9C7iL,KAAQkjL,IACZA,EAAYljL,GAAQ,EACpBmjL,EAAgBnjL,GAAQ,KAExBkjL,EAAYljL,GAEd,IAAK,IAAIjI,EAAI,EAAGgiB,EAAK48H,EAAUz9I,OAAQnB,EAAIgiB,IAAMhiB,EAU/C,IAAkB,KARhBkrL,EADE,gBAAiBtsC,EAAU5+I,GAE3B4+I,EAAU5+I,GACVqrL,YAAYztI,GAGZghG,EAAU5+I,GACVxB,KAAKV,KAAM8/C,KAEYA,EAAI2sI,mBAAoB,CACjDW,GAAY,EACZ,MAGJ,GAA4B,KAAtBC,EAAYljL,GAAa,CAC7B,IAAImqI,EAAKg5C,EAAgBnjL,GAEzB,WADOmjL,EAAgBnjL,GAChBmqI,KACLt0I,KAAK2gD,oBAAoBx2C,EAAM06K,UAE1BwI,EAAYljL,GAErB,OAAOijL,IAMT,YAAAnJ,gBAAA,WACEjkL,KAAKktL,YAAcrsI,GAAM7gD,KAAKktL,aAUhC,YAAAM,aAAA,SAAarjL,GACX,OAAQnK,KAAKktL,YAAcltL,KAAKktL,WAAW/iL,SAAU/F,GAQvD,YAAAgoL,YAAA,SAAYqB,GACV,QAAKztL,KAAKktL,aAGHO,EACHA,KAAYztL,KAAKktL,WACjB/tL,OAAOD,KAAKc,KAAKktL,YAAY7pL,OAAS,IAO5C,YAAAs9C,oBAAA,SAAoBx2C,EAAM60C,GACxB,IAAM8hG,EAAY9gJ,KAAKktL,YAAcltL,KAAKktL,WAAW/iL,GACrD,GAAI22I,EAAW,CACb,IAAMh3H,EAAQg3H,EAAU93I,QAAQg2C,IACjB,IAAXl1B,IACE9pB,KAAKgtL,kBAAoB7iL,KAAQnK,KAAKgtL,kBAExClsC,EAAUh3H,GAAS+6J,IACjB7kL,KAAKgtL,iBAAiB7iL,KAExB22I,EAAU/3I,OAAO+gB,EAAO,GACC,IAArBg3H,EAAUz9I,eACLrD,KAAKktL,WAAW/iL,OAMnC,EA9JA,CAAqB,GCnBrB,IAME4yI,OAAQ,SAOR/uG,MAAO,QAEP0/I,KAAM,OACNC,MAAO,QACPC,YAAa,cACbv7I,MAAO,QACPw7I,SAAU,WACVC,UAAW,YACXC,SAAU,WACVngJ,KAAM,OACNogJ,MAAO,QACPC,QAAS,UACTC,SAAU,WACVC,KAAM,OACNC,OAAQ,SACRC,UAAW,YACXC,MAAO,SCSF,SAASC,GAAO9gL,EAAQtD,EAAM60C,EAAUwvI,EAAUC,GAIvD,GAHID,GAAYA,IAAa/gL,IAC3BuxC,EAAWA,EAASkB,KAAKsuI,IAEvBC,EAAU,CACZ,IAAM,EAAmBzvI,EACzBA,EAAW,WACTvxC,EAAOkzC,oBAAoBx2C,EAAM60C,GACjC,EAAiB5uC,MAAMpQ,KAAMgd,YAGjC,IAAM0xK,EAAY,CAChBjhL,OAAQA,EACRtD,KAAMA,EACN60C,SAAUA,GAGZ,OADAvxC,EAAO7B,iBAAiBzB,EAAM60C,GACvB0vI,EAuBF,SAASC,GAAWlhL,EAAQtD,EAAM60C,EAAUwvI,GACjD,OAAOD,GAAO9gL,EAAQtD,EAAM60C,EAAUwvI,GAAU,GAY3C,SAASI,GAAcnmL,GACxBA,GAAOA,EAAIgF,SACbhF,EAAIgF,OAAOkzC,oBAAoBl4C,EAAI0B,KAAM1B,EAAIu2C,UAC7C6B,GAAMp4C,I,+dC9DV,eACE,mBACE,cAAO,K,OAEP,EAAK4F,GAED,EAAe,WAGnB,EAAKoyC,KAED,EAAiB,aAGrB,EAAKouI,GAAiD,EAAe,WAMrE,EAAKC,UAAY,E,EAgFrB,OApGyB,QA2BvB,YAAAn7F,QAAA,aACI3zF,KAAK8uL,UACP9uL,KAAKggC,cAAc+uJ,GAAUhyC,SAS/B,YAAAiyC,YAAA,WACE,OAAOhvL,KAAK8uL,WASd,YAAA1uI,WAAA,SAAWj2C,EAAM60C,GACf,GAAIl+C,MAAMC,QAAQoJ,GAAO,CAGvB,IAFA,IAAMc,EAAMd,EAAK9G,OACXnE,EAAO,IAAI4B,MAAMmK,GACd/I,EAAI,EAAGA,EAAI+I,IAAO/I,EACzBhD,EAAKgD,GAAKqsL,GAAOvuL,KAAMmK,EAAKjI,GAAI88C,GAElC,OAAO9/C,EAEP,OAAOqvL,GAAOvuL,KAA4B,EAAQg/C,IAUtD,YAAAiwI,aAAA,SAAa9kL,EAAM60C,GACjB,IAAIv2C,EACJ,GAAI3H,MAAMC,QAAQoJ,GAAO,CACvB,IAAMc,EAAMd,EAAK9G,OACjBoF,EAAM,IAAI3H,MAAMmK,GAChB,IAAK,IAAI/I,EAAI,EAAGA,EAAI+I,IAAO/I,EACzBuG,EAAIvG,GAAKysL,GAAW3uL,KAAMmK,EAAKjI,GAAI88C,QAGrCv2C,EAAMkmL,GAAW3uL,KAA4B,EAAQg/C,GAGvD,OADsB,EAAWkwI,OAASzmL,EACnCA,GAST,YAAA0mL,WAAA,SAAWhlL,EAAM60C,GACf,IAAMv2C,EAA4B,EAAWymL,OAC7C,GAAIzmL,EACF2mL,GAAQ3mL,QACH,GAAI3H,MAAMC,QAAQoJ,GACvB,IAAK,IAAIjI,EAAI,EAAGgiB,EAAK/Z,EAAK9G,OAAQnB,EAAIgiB,IAAMhiB,EAC1ClC,KAAK2gD,oBAAoBx2C,EAAKjI,GAAI88C,QAGpCh/C,KAAK2gD,oBAAoBx2C,EAAM60C,IAGrC,EApGA,CAAyB,IA6IlB,SAASowI,GAAQ3mL,GACtB,GAAI3H,MAAMC,QAAQ0H,GAChB,IAAK,IAAIvG,EAAI,EAAGgiB,EAAKzb,EAAIpF,OAAQnB,EAAIgiB,IAAMhiB,EACzC0sL,GAAcnmL,EAAIvG,SAGpB0sL,GAA6D,GAnCjES,GAAW7uL,UAAU6N,GAYrBghL,GAAW7uL,UAAUigD,KASrB4uI,GAAW7uL,UAAUquL,GAkBrB,Y,+dClLA,eAME,WAAY1kL,EAAM1B,EAAKg1B,GAAvB,MACE,YAAMtzB,IAAK,K,OAOX,EAAK1B,IAAMA,EAQX,EAAKg1B,SAAWA,E,EAEpB,OAxBiC,QAwBjC,EAxBA,CAAiCqC,IA2PjC,SA/KA,YAIE,WAAYwvJ,GAAZ,MACE,cAAO,K,OAKP,EAAKjhL,GAKL,EAAKoyC,KAKL,EAAKouI,GAMLhL,EAAO,GAMP,EAAK0L,QAAU,UAEInrL,IAAfkrL,GACF,EAAKE,cAAcF,G,EA0IzB,OA7KyB,QA6CvB,YAAA9wK,IAAA,SAAI/V,GACF,IAAI5F,EAIJ,OAHI7C,KAAKuvL,SAAWvvL,KAAKuvL,QAAQ9uL,eAAegI,KAC9C5F,EAAQ7C,KAAKuvL,QAAQ9mL,IAEhB5F,GAQT,YAAA4sL,QAAA,WACE,OAAQzvL,KAAKuvL,SAAWpwL,OAAOD,KAAKc,KAAKuvL,UAAa,IAQxD,YAAAG,cAAA,WACE,OAAQ1vL,KAAKuvL,SAAW,GAAO,GAAIvvL,KAAKuvL,UAAa,IAMvD,YAAAI,cAAA,WACE,QAAS3vL,KAAKuvL,SAOhB,YAAAK,OAAA,SAAOnnL,EAAKg1B,GACV,IAAI2jB,EACJA,EAAY,iBAAU34C,GAClBzI,KAAKosL,YAAYhrI,IACnBphD,KAAKggC,cAAc,IAAI6vJ,GAAYzuI,EAAW34C,EAAKg1B,IAErD2jB,EAAY0uI,GACR9vL,KAAKosL,YAAYhrI,IACnBphD,KAAKggC,cAAc,IAAI6vJ,GAAYzuI,EAAW34C,EAAKg1B,KAQvD,YAAAsyJ,kBAAA,SAAkBtnL,EAAKu2C,GACrBh/C,KAAK4L,iBAAiB,iBAAUnD,GAAOu2C,IAOzC,YAAAgxI,qBAAA,SAAqBvnL,EAAKu2C,GACxBh/C,KAAK2gD,oBAAoB,iBAAUl4C,GAAOu2C,IAU5C,YAAAlgC,IAAA,SAAIrW,EAAK5F,EAAOotL,GACd,IAAM9hK,EAASnuB,KAAKuvL,UAAYvvL,KAAKuvL,QAAU,IAC/C,GAAIU,EACF9hK,EAAO1lB,GAAO5F,MACT,CACL,IAAM46B,EAAWtP,EAAO1lB,GACxB0lB,EAAO1lB,GAAO5F,EACV46B,IAAa56B,GACf7C,KAAK4vL,OAAOnnL,EAAKg1B,KAYvB,YAAA+xJ,cAAA,SAAcrhK,EAAQ8hK,GACpB,IAAK,IAAMxnL,KAAO0lB,EAChBnuB,KAAK8e,IAAIrW,EAAK0lB,EAAO1lB,GAAMwnL,IAS/B,YAAAC,gBAAA,SAAgBv1K,GACTA,EAAO40K,SAGZ,GAAOvvL,KAAKuvL,UAAYvvL,KAAKuvL,QAAU,IAAK50K,EAAO40K,UASrD,YAAAY,MAAA,SAAM1nL,EAAKwnL,GACT,GAAIjwL,KAAKuvL,SAAW9mL,KAAOzI,KAAKuvL,QAAS,CACvC,IAAM9xJ,EAAWz9B,KAAKuvL,QAAQ9mL,UACvBzI,KAAKuvL,QAAQ9mL,GAChB,GAAQzI,KAAKuvL,WACfvvL,KAAKuvL,QAAU,MAEZU,GACHjwL,KAAK4vL,OAAOnnL,EAAKg1B,KAIzB,EA7KA,CAAyB,IClFzB,GACW,UADX,GAEW,UAFX,GAGU,SAHV,GAIW,SAJX,GAKkB,gBALlB,GAMkB,gBANlB,GAOY,UAPZ,GAQY,UARZ,GASU,SATV,GAUO,M,+dC4XP,SA9UA,YAIE,WAAY99B,GAAZ,MACE,cAAO,KAKP,EAAK0O,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKuB,YAAczwL,EAAQ0wL,WAK3B,IAAM97J,EAAa,GAAO,GAAI50B,G,MACI,iBAAvBA,EAAQ40B,oBACVA,EAAWA,WAClB,GAAOA,EAAY50B,EAAQ40B,aAG7BA,EAAW,SACWnwB,IAApBzE,EAAQ6T,QAAwB7T,EAAQ6T,QAAU,EACpD,EAAoD,iBAAtC+gB,EAAW,IAAqC,IAE9DA,EAAW,SACWnwB,IAApBzE,EAAQoF,SAAwBpF,EAAQoF,QAC1CwvB,EAAW,IAAyB50B,EAAQ+sC,OAC5CnY,EAAW,SACiBnwB,IAA1BzE,EAAQ2wL,cAA8B3wL,EAAQ2wL,cAAgBt6H,EAAAA,EAChEzhC,EAAW,SACiBnwB,IAA1BzE,EAAQ2qI,cAA8B3qI,EAAQ2qI,cAAgB,EAChE/1G,EAAW,SACWnwB,IAApBzE,EAAQ4wL,QAAwB5wL,EAAQ4wL,SAAWv6H,EAAAA,EACrDzhC,EAAW,SACWnwB,IAApBzE,EAAQ6wL,QAAwB7wL,EAAQ6wL,QAAUx6H,EAAAA,EAMpD,EAAKy6H,gBACsBrsL,IAAzBmwB,EAAWuH,UAA0BvH,EAAWuH,UAAY,kBACvDvH,EAAWuH,UAElB,EAAK0zJ,cAAcj7J,GAMnB,EAAKm8J,OAAS,K,EAyQlB,OA5UwB,QA0EtB,YAAAC,cAAA,WACE,OAAO3wL,KAAKowL,aAMd,YAAA7zI,aAAA,WACE,OAAOv8C,KAAKywL,YAUd,YAAAG,cAAA,SAAcC,GAEZ,IAAMh8K,EACJ7U,KAAK0wL,QACY,CACflsL,MAAOxE,KACP8wL,aAAyB1sL,IAAhBysL,GAAmCA,GAE1CnkJ,EAAS1sC,KAAK+wL,YAWpB,OAVAl8K,EAAMrB,QAAUm3K,GAAMppL,KAAKirC,MAA0B,IAApBxsC,KAAKuT,cAAsB,IAAK,EAAG,GACpEsB,EAAM9P,QAAU/E,KAAKgxL,aACrBn8K,EAAMyG,OAAStb,KAAK+mB,YACpBlS,EAAM63B,YAAoBtoC,IAAXsoC,GAAyB73B,EAAMi8K,QAAqBpkJ,EAAXspB,EAAAA,EACxDnhD,EAAMy7K,cAAgBtwL,KAAKixL,mBAC3Bp8K,EAAMy1H,cAAgB/oI,KAAK4K,IAAInM,KAAKkxL,mBAAoB,GACxDr8K,EAAM07K,QAAUvwL,KAAKmxL,aACrBt8K,EAAM27K,QAAUxwL,KAAKoxL,aACrBpxL,KAAK0wL,OAAS77K,EAEPA,GAST,YAAAw8K,eAAA,SAAeC,GACb,OAAO,KAST,YAAAC,oBAAA,SAAoBC,GAClB,OAAO,KAUT,YAAAzqK,UAAA,WACE,OACE/mB,KAAKwe,IAAI,KAUb,YAAAyyK,iBAAA,WACE,OAA8BjxL,KAAKwe,IAAI,KASzC,YAAA0yK,iBAAA,WACE,OAA8BlxL,KAAKwe,IAAI,KASzC,YAAA2yK,WAAA,WACE,OAA8BnxL,KAAKwe,IAAI,KASzC,YAAA4yK,WAAA,WACE,OAA8BpxL,KAAKwe,IAAI,KASzC,YAAAjL,WAAA,WACE,OAA8BvT,KAAKwe,IAAI,KAOzC,YAAAizK,eAAA,WACE,OAAO,KAST,YAAAT,WAAA,WACE,OAA+BhxL,KAAKwe,IAAI,KAU1C,YAAAuyK,UAAA,WACE,OAA8B/wL,KAAKwe,IAAI,KAOzC,YAAAkzK,cAAA,SAAcC,GACZ3xL,KAAKowL,YAAcuB,EACnB3xL,KAAK2zF,WAUP,YAAArpC,UAAA,SAAUhvC,GACRtb,KAAK8e,IAAI,GAAsBxD,IASjC,YAAAs2K,iBAAA,SAAiBtB,GACftwL,KAAK8e,IAAI,GAA8BwxK,IASzC,YAAAuB,iBAAA,SAAiBvnD,GACftqI,KAAK8e,IAAI,GAA8BwrH,IAWzC,YAAAwnD,WAAA,SAAWtB,GACTxwL,KAAK8e,IAAI,GAAwB0xK,IAWnC,YAAAuB,WAAA,SAAWxB,GACTvwL,KAAK8e,IAAI,GAAwByxK,IASnC,YAAA78K,WAAA,SAAWF,GACT,EAA0B,iBAAZA,EAAsB,IACpCxT,KAAK8e,IAAI,GAAuBtL,IASlC,YAAA0yJ,WAAA,SAAWnhK,GACT/E,KAAK8e,IAAI,GAAuB/Z,IAUlC,YAAAitL,UAAA,SAAUC,GACRjyL,KAAK8e,IAAI,GAAuBmzK,IAMlC,YAAAhO,gBAAA,WACMjkL,KAAK0wL,SACP1wL,KAAK0wL,OAAOlsL,MAAQ,KACpBxE,KAAK0wL,OAAS,MAEhB,YAAMzM,gBAAe,YAEzB,EA5UA,CAAwB,ICxDxB,IAMEiO,UAAW,YAOXC,WAAY,aASZC,WAAY,aASZC,YAAa,cASbC,eAAgB,kB,+dCkXX,SAASC,GAAO5iF,EAAY6iF,GACjC,IAAK7iF,EAAW5qG,QACd,OAAO,EAET,IAAMo/C,EAAaquI,EAAUruI,WAC7B,GACEA,EAAawrD,EAAW26B,eACxBnmF,GAAcwrD,EAAW2gF,cAEzB,OAAO,EAET,IAAM3qB,EAAO6sB,EAAU7sB,KACvB,OAAOA,EAAOh2D,EAAW4gF,SAAW5qB,GAAQh2D,EAAW6gF,QAGzD,SA/UA,YAIE,WAAY7wL,GAAZ,WACQ8yL,EAAc,GAAO,GAAI9yL,UACxB8yL,EAAY93K,Q,EAEnB,YAAM83K,IAAY,MAKbpkL,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAK6D,kBAAoB,KAMzB,EAAKC,cAAgB,KAMrB,EAAKC,iBAAmB,KAMxB,EAAKC,UAAY,KAMjB,EAAK/pC,UAAW,EAGZnpJ,EAAQk9C,SACV,EAAKA,OAASl9C,EAAQk9C,QAGpBl9C,EAAQrB,KACV,EAAKivD,OAAO5tD,EAAQrB,KAGtB,EAAKyxL,kBACH,GACA,EAAK+C,6BAGP,IAAMn4K,EAAShb,EAAQgb,OACQhb,EAAc,OACzC,K,OACJ,EAAKozL,UAAUp4K,G,EA+OnB,OAvToB,QA+ElB,YAAA02K,eAAA,SAAeC,GACb,IAAMv8H,EAAQu8H,GAAwB,GAEtC,OADAv8H,EAAM3sD,KAAKpI,MACJ+0D,GAOT,YAAAw8H,oBAAA,SAAoBC,GAClB,IAAMwB,EAASxB,GAA0B,GAEzC,OADAwB,EAAO5qL,KAAKpI,KAAK4wL,iBACVoC,GAST,YAAA7wK,UAAA,WACE,OAAkCniB,KAAKwe,IAAI,KAA0B,MAMvE,YAAAy0K,gBAAA,WACE,OAAOjzL,KAAKmiB,aAMd,YAAAsvK,eAAA,WACE,IAAM92K,EAAS3a,KAAKmiB,YACpB,OAAQxH,EAAuBA,EAAOu4K,WAArB,aAMnB,YAAAC,oBAAA,WACEnzL,KAAK2zF,WAMP,YAAAm/F,4BAAA,WACM9yL,KAAK4yL,mBACPhE,GAAc5uL,KAAK4yL,kBACnB5yL,KAAK4yL,iBAAmB,MAE1B,IAAMj4K,EAAS3a,KAAKmiB,YAChBxH,IACF3a,KAAK4yL,iBAAmBrE,GACtB5zK,EACAo0K,GAAUhyC,OACV/8I,KAAKmzL,oBACLnzL,OAGJA,KAAK2zF,WAQP,YAAAiL,YAAA,SAAYw0F,GACV,OAAKpzL,KAAK6yL,UAGH7yL,KAAK6yL,UAAUj0F,YAAYw0F,GAFzB,IAAIx0L,SAAQ,SAACC,GAAY,OAAAA,EAAQ,QAS5C,YAAAkF,QAAA,SAAQqvL,GACN,OAAKpzL,KAAK6yL,WAAc7yL,KAAK8oJ,SAGtB9oJ,KAAK6yL,UAAU9uL,QAAQqvL,GAFrB,MAaX,YAAAv2I,OAAA,SAAOw2I,EAAY5lL,GACjB,IAAM6lL,EAAgBtzL,KAAKuzL,cAE3B,GAAID,EAAcE,aAAaH,GAE7B,OADArzL,KAAK8oJ,UAAW,EACTwqC,EAAcG,YAAYJ,EAAY5lL,IAOjD,YAAAimL,SAAA,WACE1zL,KAAK8oJ,UAAW,GAOlB,YAAA6qC,eAAA,SAAer1L,GACRA,GACH0B,KAAK0zL,WAEP1zL,KAAK8e,IAAI,GAAmBxgB,IAO9B,YAAAs1L,eAAA,WACE,OAAO5zL,KAAKwe,IAAI,KAelB,YAAA+uC,OAAA,SAAOjvD,GACD0B,KAAK0yL,oBACP9D,GAAc5uL,KAAK0yL,mBACnB1yL,KAAK0yL,kBAAoB,MAEtBp0L,GACH0B,KAAK2zF,UAEH3zF,KAAK2yL,gBACP/D,GAAc5uL,KAAK2yL,eACnB3yL,KAAK2yL,cAAgB,MAEnBr0L,IACF0B,KAAK0yL,kBAAoBnE,GACvBjwL,EACA,eACA,SAAUwhD,GACR,IAEM+zI,EADgD,EACjBR,WAAWQ,iBAC1ClkF,EAAa3vG,KAAK4wL,eAAc,GAEtC,GACGiD,EAAiB14K,MAAK,SAAU24K,GAC/B,OAAOA,EAAgBtvL,QAAUmrG,EAAWnrG,SAE9C,IAEFqvL,EAAiBzrL,KAAKunG,KAExB3vG,MAEFA,KAAK2yL,cAAgBpE,GAAOvuL,KAAM+uL,GAAUhyC,OAAQz+I,EAAIu+C,OAAQv+C,GAChE0B,KAAK2zF,YAUT,YAAAo/F,UAAA,SAAUp4K,GACR3a,KAAK8e,IAAI,GAAsBnE,IAOjC,YAAA44K,YAAA,WAIE,OAHKvzL,KAAK6yL,YACR7yL,KAAK6yL,UAAY7yL,KAAK+zL,kBAEjB/zL,KAAK6yL,WAMd,YAAAmB,YAAA,WACE,QAASh0L,KAAK6yL,WAQhB,YAAAkB,eAAA,WACE,OAAO,MAMT,YAAA9P,gBAAA,WACMjkL,KAAK6yL,YACP7yL,KAAK6yL,UAAU7O,iBACRhkL,KAAK6yL,WAGd7yL,KAAK+yL,UAAU,MACf,YAAM9O,gBAAe,YAEzB,EAvTA,CAAoBgQ,IC1Db,SAASr5K,GAAI6oE,EAAYjf,GAG9B,OAFAif,EAAW,KAAOjf,EAAM,GACxBif,EAAW,KAAOjf,EAAM,GACjBif,EAUF,SAASywG,GAAgBzwG,EAAY0wG,GAC1C,IAAM7/K,EAAI6/K,EAAO/yL,YACXT,EAASwzL,EAAOjzL,YAChB8jJ,EAAKrkJ,EAAO,GACZskJ,EAAKtkJ,EAAO,GAIdkiD,EAHO4gC,EAAW,GAGRuhE,EACRliG,EAHK2gC,EAAW,GAGNwhE,EACL,IAAPpiG,GAAmB,IAAPC,IACdD,EAAK,GAEP,IAAM3gB,EAAI3gC,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,GAKnC,MAAO,CAHGkiG,EAAM1wI,EAAIuuC,EAAM3gB,EAChB+iH,EAAM3wI,EAAIwuC,EAAM5gB,GAiBrB,SAASkyJ,GAAiB3wG,EAAY4wG,GAC3C,IAcI1mK,EAAGC,EAdDo3H,EAAKvhE,EAAW,GAChBwhE,EAAKxhE,EAAW,GAChBlV,EAAQ8lH,EAAQ,GAChBvqH,EAAMuqH,EAAQ,GACd1uC,EAAKp3E,EAAM,GACXq3E,EAAKr3E,EAAM,GACX26G,EAAKp/G,EAAI,GACTq/G,EAAKr/G,EAAI,GACTjnB,EAAKqmI,EAAKvjC,EACV7iG,EAAKqmI,EAAKvjC,EACV0uC,EACG,IAAPzxI,GAAmB,IAAPC,EACR,GACCD,GAAMmiG,EAAKW,GAAM7iG,GAAMmiG,EAAKW,KAAQ/iG,EAAKA,EAAKC,EAAKA,GAAM,GAYhE,OAVIwxI,GAAS,GACX3mK,EAAIg4H,EACJ/3H,EAAIg4H,GACK0uC,GAAS,GAClB3mK,EAAIu7J,EACJt7J,EAAIu7J,IAEJx7J,EAAIg4H,EAAK2uC,EAAQzxI,EACjBj1B,EAAIg4H,EAAK0uC,EAAQxxI,GAEZ,CAACn1B,EAAGC,GAkIN,SAAS,GAAO2mK,EAAaC,GAElC,IADA,IAAIhyI,GAAS,EACJtgD,EAAIqyL,EAAYlxL,OAAS,EAAGnB,GAAK,IAAKA,EAC7C,GAAIqyL,EAAYryL,IAAMsyL,EAAYtyL,GAAI,CACpCsgD,GAAS,EACT,MAGJ,OAAOA,EAqBF,SAAS,GAAOihC,EAAYxhF,GACjC,IAAMwyL,EAAWlzL,KAAKY,IAAIF,GACpByyL,EAAWnzL,KAAKa,IAAIH,GACpB0rB,EAAI81D,EAAW,GAAKgxG,EAAWhxG,EAAW,GAAKixG,EAC/C9mK,EAAI61D,EAAW,GAAKgxG,EAAWhxG,EAAW,GAAKixG,EAGrD,OAFAjxG,EAAW,GAAK91D,EAChB81D,EAAW,GAAK71D,EACT61D,EAoBF,SAAS,GAAMA,EAAYl5C,GAGhC,OAFAk5C,EAAW,IAAMl5C,EACjBk5C,EAAW,IAAMl5C,EACVk5C,EAQF,SAAS,GAAgBo+C,EAAQC,GACtC,IAAMj/E,EAAKg/E,EAAO,GAAKC,EAAO,GACxBh/E,EAAK++E,EAAO,GAAKC,EAAO,GAC9B,OAAOj/E,EAAKA,EAAKC,EAAKA,EAQjB,SAASuB,GAASw9E,EAAQC,GAC/B,OAAOvgI,KAAKkrC,KAAK,GAAgBo1F,EAAQC,IA2FpC,SAAS,GAAMr+C,EAAY8mG,GAChC,GAAIA,EAAWE,WAAY,CACzB,IAAMC,EAAa9B,GAAS2B,EAAWxjK,aACjC4tK,EAAaC,GAAcnxG,EAAY8mG,EAAYG,GACrDiK,IACFlxG,EAAW,IAAMkxG,EAAajK,GAGlC,OAAOjnG,EAQF,SAASmxG,GAAcnxG,EAAY8mG,EAAYsK,GACpD,IAAMrK,EAAmBD,EAAWxjK,YAChC4tK,EAAa,EACjB,GACEpK,EAAWE,aACVhnG,EAAW,GAAK+mG,EAAiB,IAAM/mG,EAAW,GAAK+mG,EAAiB,IACzE,CACA,IAAMsK,EACJD,GAAyBjM,GAAS4B,GACpCmK,EAAapzL,KAAKonD,OACf86B,EAAW,GAAK+mG,EAAiB,IAAMsK,GAG5C,OAAOH,E,+dC/ZT,eAIE,WAAYr2L,GAAZ,MACE,cAAO,K,OAMP,EAAKy2L,KAAOz2L,E,EAsNhB,OAjO0B,QAmBxB,YAAA02L,oBAAA,SAAoB7qL,EAAMkpL,GACxB,KAOF,YAAA4B,oBAAA,SAAoB5B,GAClB,IAAMb,EAAYa,EAAWb,UACvB0C,EAA6B7B,EAAW6B,2BACxCC,EAA6B9B,EAAW8B,2BAE9C3O,EACE0O,EACA7B,EAAWx+J,KAAK,GAAK,EACrBw+J,EAAWx+J,KAAK,GAAK,EACrB,EAAI29J,EAAUruI,YACb,EAAIquI,EAAUruI,YACdquI,EAAUn+H,UACVm+H,EAAU7xL,OAAO,IACjB6xL,EAAU7xL,OAAO,IAGpBomL,EAAYoO,EAA4BD,IAkB1C,YAAAE,2BAAA,SACE3xG,EACA4vG,EACAgC,EACAC,EACA/8J,EACAg9J,EACAC,EACAC,GAEA,IAAI7wL,EACE4tL,EAAYa,EAAWb,UAS7B,SAAS4C,EAA2BtE,EAASrtL,EAASe,EAAOlE,GAC3D,OAAOi4B,EAAS73B,KAAK60L,EAAS9xL,EAASqtL,EAAUtsL,EAAQ,KAAMlE,GAGjE,IAAMiqL,EAAaiI,EAAUjI,WAEvBmL,EAAuB,GAAMjyG,EAAW94E,QAAS4/K,GACjDoL,EAAU,CAAC,CAAC,EAAG,IACrB,GAAIpL,EAAWE,YAAc6K,EAAc,CACzC,IACM5K,EAAa9B,GADM2B,EAAWxjK,aAEpC4uK,EAAQvtL,KAAK,EAAEsiL,EAAY,GAAI,CAACA,EAAY,IAQ9C,IALA,IAAMkL,EAAcvC,EAAWQ,iBACzBgC,EAAYD,EAAYvyL,OAExBkmB,EAA4C,GAC5CusK,EAAW,GACR5zL,EAAI,EAAGA,EAAIyzL,EAAQtyL,OAAQnB,IAClC,IAAK,IAAIoV,EAAIu+K,EAAY,EAAGv+K,GAAK,IAAKA,EAAG,CACvC,IAAMq4F,EAAaimF,EAAYt+K,GACzB9S,EAAQmrG,EAAWnrG,MACzB,GACEA,EAAMwvL,eACNzB,GAAO5iF,EAAY6iF,IACnBgD,EAAY90L,KAAK+0L,EAAUjxL,GAC3B,CACA,IAAM8uL,EAAgB9uL,EAAM+uL,cACtB54K,EAASnW,EAAM2d,YACrB,GAAImxK,GAAiB34K,EAAQ,CAC3B,IAAMvQ,EAAcuQ,EAAOo7K,WACvBL,EACAjyG,EACE,EAAW2xG,EAA2Bl1I,KAC1C,KACAyvD,EAAWmhF,SAEbgF,EAAS,GAAK1rL,EAAY,GAAKurL,EAAQzzL,GAAG,GAC1C4zL,EAAS,GAAK1rL,EAAY,GAAKurL,EAAQzzL,GAAG,GAC1C0C,EAAS0uL,EAAc8B,2BACrBU,EACAzC,EACAgC,EACA,EACA9rK,GAGJ,GAAI3kB,EACF,OAAOA,GAKf,GAAuB,IAAnB2kB,EAAQlmB,OAAZ,CAGA,IAAMijJ,EAAQ,EAAI/8H,EAAQlmB,OAM1B,OALAkmB,EAAQhiB,SAAQ,SAAC49C,EAAGjjD,GAAM,OAACijD,EAAE6wI,YAAc9zL,EAAIokJ,KAC/C/8H,EAAQY,MAAK,SAACrP,EAAGsP,GAAM,OAAAtP,EAAEk7K,WAAa5rK,EAAE4rK,cACxCzsK,EAAQpO,MAAK,SAACgqC,GACZ,OAAQvgD,EAASugD,EAAE5sB,SAAS4sB,EAAE1hD,QAAS0hD,EAAE3gD,MAAO2gD,EAAE7kD,aAE7CsE,IAiBT,YAAAqxL,oBAAA,SAAoB7C,EAAOC,EAAYgC,EAAc98J,EAAUi9J,GAC7D,OAAO,KAgBT,YAAAU,uBAAA,SACEzyG,EACA4vG,EACAgC,EACAC,EACAE,EACAD,GAaA,YAAsBnxL,IAXHpE,KAAKo1L,2BACtB3xG,EACA4vG,EACAgC,EACAC,EACA3Q,EACA3kL,KACAw1L,EACAD,IASJ,YAAA/jI,OAAA,WACE,OAAOxxD,KAAK+0L,MAQd,YAAAtB,YAAA,SAAYJ,GACV,KAOF,YAAA8C,wBAAA,SAAwB9C,GAClB,qBACFA,EAAW+C,oBAAoBhuL,KAAKiuL,KAG1C,EAjOA,CAA0B,GAuO1B,SAASA,GAAgB/3L,EAAK+0L,GAC5B,YAGF,Y,+dCzNA,SArCA,YAQE,WAAYlpL,EAAMmsL,EAA2BC,EAAgBC,GAA7D,MACE,YAAMrsL,IAAK,K,OAQX,EAAKssL,sBAAwBH,EAO7B,EAAKjD,WAAakD,EASlB,EAAKjkH,QAAUkkH,E,EAEnB,OAnC0B,QAmC1B,EAnCA,CAA0B12J,ICenB,IAAM42J,GAAe,YAgBfC,GAAqB,kBAgBrBC,GAAgB,aAShBC,GAAkB,eAMzBC,GAAY,IAAIxtK,OACpB,CACE,qDACA,4CACA,8DACA,gDACA,8EACA,gEACA,mCACAhf,KAAK,IACP,KAEIysL,GAAsB,CAC1B,QACA,UACA,SACA,OACA,aACA,UASWC,GAAoB,SAAUC,GACzC,IAAMztL,EAAQytL,EAASztL,MAAMstL,IAC7B,IAAKttL,EACH,OAAO,KAST,IAPA,IAAM7D,EAAsC,CAC1CuxL,WAAY,SACZriK,KAAM,QACNlvB,MAAO,SACPw8H,OAAQ,SACRjlG,QAAS,UAEFh7B,EAAI,EAAGgiB,EAAK6yK,GAAoB1zL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC5D,IAAMW,EAAQ2G,EAAMtH,EAAI,QACVkC,IAAVvB,IACF8C,EAAMoxL,GAAoB70L,IAAMW,GAIpC,OADA8C,EAAMwxL,SAAWxxL,EAAMyxL,OAAOjlL,MAAM,QAC7BxM,GCnGF,SAAS0xL,GACdC,EACAC,EACAC,EACAC,GAGA,IAAIp6H,EAeJ,OAbEA,EADEm6H,GAAkBA,EAAen0L,OAC1Bm0L,EAAejvJ,QACf28I,EACA,IAAIE,gBAAgBkS,GAAa,IAAKC,GAAc,KAEpD5qL,SAASC,cAAc,UAE9B0qL,IACFj6H,EAAO/qC,MAAQglK,GAEbC,IACFl6H,EAAO9qC,OAASglK,GAIhBl6H,EAAOkV,WAAW,KAAMklH,GASrB,SAASC,GAAcplH,GAC5B,IAAMjV,EAASiV,EAAQjV,OACvBA,EAAO/qC,MAAQ,EACf+qC,EAAO9qC,OAAS,EAChB+/C,EAAQQ,UAAU,EAAG,EAAG,EAAG,GAUtB,SAAS,GAAW3xB,GACzB,IAAI7uB,EAAQ6uB,EAAQvzC,YACdjI,EAAQohE,iBAAiB5lB,GAG/B,OAFA7uB,GAASha,SAAS3S,EAAMgyL,WAAY,IAAMr/K,SAAS3S,EAAMiyL,YAAa,IAYjE,SAAS,GAAYz2I,GAC1B,IAAI5uB,EAAS4uB,EAAQmmE,aACf3hH,EAAQohE,iBAAiB5lB,GAG/B,OAFA5uB,GAAUja,SAAS3S,EAAMkyL,UAAW,IAAMv/K,SAAS3S,EAAMmyL,aAAc,IASlE,SAASC,GAAYC,EAASC,GACnC,IAAMz0L,EAASy0L,EAAQz2I,WACnBh+C,GACFA,EAAOy2H,aAAa+9D,EAASC,GAQ1B,SAASC,GAAWzjL,GACzB,OAAOA,GAAQA,EAAK+sC,WAAa/sC,EAAK+sC,WAAWib,YAAYhoD,GAAQ,KAMhE,SAAS0jL,GAAe1jL,GAC7B,KAAOA,EAAK2jL,WACV3jL,EAAKgoD,YAAYhoD,EAAK2jL,WCjBnB,IAAMC,GAAc,kBAMdC,GAAmB,OAMnBC,GAAiB,QAMjBC,GAAkB,GAYlBC,GAAkB,QAYlBC,GAAqB,OAMrBC,GAAmB,SAMnBC,GAAsB,SAMtBC,GAAiB,CAAC,EAAG,EAAG,EAAG,GAW3BC,GAAe,IAAI,IAUN,IAAI,IACnB35D,QAAU,WACnBz3H,QAAQgS,KAAK,8BAMf,IAKIq/K,GA8GEC,GAnHFC,GAAiB,KAURC,GAAc,GAMdC,GAAe,WAC1B,IAKIrjC,EAAUsjC,EAJRvkK,EAAO,QACPwkK,EAAiB,CAAC,YAAa,SAC/BpuL,EAAMouL,EAAeh2L,OACrB+V,EAAO,2BASb,SAASkgL,EAAYC,EAAWxkC,EAAYp3B,GAE1C,IADA,IAAI67D,GAAY,EACPt3L,EAAI,EAAGA,EAAI+I,IAAO/I,EAAG,CAC5B,IAAMu3L,EAAgBJ,EAAen3L,GAKrC,GAJAk3L,EAAiBM,GACfH,EAAY,IAAMxkC,EAAa,IAAMlgI,EAAO4kK,EAC5CrgL,GAEEukH,GAAc87D,EAAe,CAC/B,IAAMnnK,EAAQonK,GACZH,EACE,IACAxkC,EACA,IACAlgI,EACA8oG,EACA,IACA87D,EACFrgL,GAIFogL,EAAYA,GAAalnK,GAAS8mK,GAGtC,QAAII,EAMN,SAAS19B,IAGP,IAFA,IAAI76C,GAAO,EACL04E,EAAQb,GAAarJ,UAClBvtL,EAAI,EAAGgiB,EAAKy1K,EAAMt2L,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAMy9H,EAAOg6D,EAAMz3L,GACf42L,GAAat6K,IAAImhH,GAjDT,MAkDN25D,EAAYlpL,MAAMpQ,KAAM2/H,EAAKxtH,MAAM,QACrC0uC,GAAMq4I,IAEND,GAAiB,KACjBF,QAAc30L,EACd00L,GAAah6K,IAAI6gH,EAvDT,OAyDRm5D,GAAah6K,IAAI6gH,EAAMm5D,GAAat6K,IAAImhH,GAAQ,GAAG,GACnD1e,GAAO,IAITA,IACF24E,cAAc9jC,GACdA,OAAW1xJ,GAIf,OAAO,SAAU6yL,GACf,IAAMt3D,EAAOq3D,GAAkBC,GAC/B,GAAKt3D,EAIL,IADA,IAAMw3D,EAAWx3D,EAAKw3D,SACbj1L,EAAI,EAAGgiB,EAAKizK,EAAS9zL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACjD,IAAMk1L,EAASD,EAASj1L,GAClBuG,EAAMk3H,EAAKh6H,MAAQ,KAAOg6H,EAAKwC,OAAS,KAAOi1D,OACvBhzL,IAA1B00L,GAAat6K,IAAI/V,KACnBqwL,GAAah6K,IAAIrW,EA9EP,KA8EqB,GAC1B6wL,EAAY35D,EAAKh6H,MAAOg6H,EAAKwC,OAAQi1D,KACxC0B,GAAah6K,IAAIrW,EAAK,GAAG,QACRrE,IAAb0xJ,IACFA,EAAW+jC,YAAY/9B,EAAO,SAnFd,GA+Ffg+B,GAKJ,SAAU7C,GACf,IAAI1kK,EAAS2mK,GAAYjC,GACzB,GAAc7yL,MAAVmuB,EAAqB,CACvB,GAAI2yJ,EAAyB,CAC3B,IAAMvlD,EAAOq3D,GAAkBC,GACzB8C,EAAUC,GAAY/C,EAAU,MAItC1kK,GAHmBvxB,MAAM2mB,OAAOg4G,EAAKu3D,aACjC,IACAvvK,OAAOg4G,EAAKu3D,cAGb6C,EAAQE,wBAA0BF,EAAQG,+BAExClB,MACHA,GAAiBrsL,SAASC,cAAc,QACzBO,UAAY,IAC3B6rL,GAAerzL,MAAMsiJ,UAAY,IACjC+wC,GAAerzL,MAAMivE,UAAY,OACjCokH,GAAerzL,MAAM4sB,OAAS,OAC9BymK,GAAerzL,MAAMg9I,QAAU,IAC/Bq2C,GAAerzL,MAAMo2I,OAAS,OAC9Bi9C,GAAerzL,MAAM2G,SAAW,WAChC0sL,GAAerzL,MAAMg3C,QAAU,QAC/Bq8I,GAAerzL,MAAMyuE,KAAO,YAE9B4kH,GAAerzL,MAAMg6H,KAAOs3D,EAC5BtqL,SAAS+0B,KAAK70B,YAAYmsL,IAC1BzmK,EAASymK,GAAe1xE,aACxB36G,SAAS+0B,KAAK+6B,YAAYu8H,IAE5BE,GAAYjC,GAAY1kK,EAE1B,OAAOA,GASX,SAASynK,GAAYr6D,EAAMvmH,GAQzB,OAPK6/K,KACHA,GAAiB5B,GAAsB,EAAG,IAExC13D,GAAQo5D,KACVE,GAAet5D,KAAOA,EACtBo5D,GAAcE,GAAet5D,MAExBs5D,GAAee,YAAY5gL,GAQ7B,SAASsgL,GAAiB/5D,EAAMvmH,GACrC,OAAO4gL,GAAYr6D,EAAMvmH,GAAMkZ,MAU1B,SAAS6nK,GAAyBx6D,EAAMvmH,EAAM0T,GACnD,GAAI1T,KAAQ0T,EACV,OAAOA,EAAM1T,GAEf,IAAMkZ,EAAQlZ,EACXjH,MAAM,MACNlK,QAAO,SAAC+Z,EAAMkhB,GAAS,OAAA3hC,KAAK4K,IAAI6V,EAAM03K,GAAiB/5D,EAAMz8F,MAAQ,GAExE,OADApW,EAAM1T,GAAQkZ,EACPA,EA+DF,SAAS8nK,GACd9nH,EACA0mE,EACAxlI,EACA6mL,EACAC,EACAC,EACA15B,EACA73G,EACAr7B,EACAC,EACA2c,GAEA+nC,EAAQi/B,OAEQ,IAAZ/9F,IACF8+D,EAAQktD,aAAehsH,GAErBwlI,GACF1mE,EAAQkoH,aAAapqL,MAAMkiE,EAAS0mE,GAGjB,EAAeyhD,qBAElCnoH,EAAQkD,UAAU7nD,EAAGC,GACrB0kD,EAAQ/nC,MAAMA,EAAM,GAAIA,EAAM,IA2ClC,SAAkCgC,EAAO+lC,GAEvC,IADA,IAAMmoH,EAAsBluJ,EAAMkuJ,oBACzBv4L,EAAI,EAAGgiB,EAAKu2K,EAAoBp3L,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EACxDpB,MAAMC,QAAQ05L,EAAoBv4L,EAAI,IACxCowE,EAAQmoH,EAAoBv4L,IAAIkO,MAC9BkiE,EACAmoH,EAAoBv4L,EAAI,IAG1BowE,EAAQmoH,EAAoBv4L,IAAMu4L,EAAoBv4L,EAAI,GAnD5Dw4L,CAA8C,EAAgBpoH,IACrD/nC,EAAM,GAAK,GAAKA,EAAM,GAAK,GAEpC+nC,EAAQkD,UAAU7nD,EAAGC,GACrB0kD,EAAQ/nC,MAAMA,EAAM,GAAIA,EAAM,IAC9B+nC,EAAQa,UAC6D,EAGnEmnH,EACAC,EACA15B,EACA73G,EACA,EACA,EACA63G,EACA73G,IAIFspB,EAAQa,UAC6D,EAGnEmnH,EACAC,EACA15B,EACA73G,EACAr7B,EACAC,EACAizI,EAAIt2H,EAAM,GACVye,EAAIze,EAAM,IAId+nC,EAAQqoH,U,+dC9dV,eAIE,WAAYr8L,GAAZ,MACE,YAAMA,IAAI,KAKV,EAAKs8L,uBAAyBrM,GAC5BuK,GACAhJ,GACAxxL,EAAIu8L,WAAW36I,KAAK5hD,IAOtB,EAAKw8L,SAAWnuL,SAASC,cAAc,OACvC,IAAMjH,EAAQ,EAAKm1L,SAASn1L,MAC5BA,EAAM2G,SAAW,WACjB3G,EAAM2sB,MAAQ,OACd3sB,EAAM4sB,OAAS,OACf5sB,EAAM+mC,OAAS,IAEf,EAAKouJ,SAASh/J,UAAY66J,4BAE1B,IAAM1iI,EAAY31D,EAAIk2D,c,OACtBP,EAAU1xB,aAAa,EAAKu4J,SAAU7mI,EAAU/8C,YAAc,MAM9D,EAAK6jL,UAAY,GAMjB,EAAKC,kBAAmB,E,EAuI5B,OAjLmC,QAiDjC,YAAAhG,oBAAA,SAAoB7qL,EAAMkpL,GACxB,IAAM/0L,EAAM0B,KAAKwxD,SACjB,GAAIlzD,EAAI8tL,YAAYjiL,GAAO,CACzB,IAAM,EAAQ,IAAI,GAAYA,OAAM/F,EAAWivL,GAC/C/0L,EAAI0hC,cAAc,KAItB,YAAAikJ,gBAAA,WACE2K,GAAc5uL,KAAK46L,wBACnB56L,KAAK86L,SAASt5I,WAAWib,YAAYz8D,KAAK86L,UAC1C,YAAM7W,gBAAe,YAOvB,YAAAwP,YAAA,SAAYJ,GACV,GAAKA,EAAL,CAQArzL,KAAKi1L,oBAAoB5B,GACzBrzL,KAAKg1L,oBAAoB,cAA4B3B,GAErD,IAAMQ,EAAmBR,EAAWQ,iBAAiB1pK,MAAK,SAAUrP,EAAGsP,GACrE,OAAOtP,EAAE4xB,OAAStiB,EAAEsiB,UAEhB8lJ,EAAYa,EAAWb,UAE7BxyL,KAAK+6L,UAAU13L,OAAS,EAMxB,IAFA,IAAM43L,EAAkB,GACpBC,EAAkB,KACbh5L,EAAI,EAAGgiB,EAAK2vK,EAAiBxwL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACzD,IAAMytG,EAAakkF,EAAiB3xL,GACpCmxL,EAAW8H,WAAaj5L,EAExB,IAAMsC,EAAQmrG,EAAWnrG,MACnB42L,EAAc52L,EAAMitL,iBAC1B,IACGc,GAAO5iF,EAAY6iF,IACJ,SAAf4I,GAAyC,aAAfA,EAE3B52L,EAAMkvL,eAJR,CAQA,IAAMvyI,EAAU38C,EAAMq4C,OAAOw2I,EAAY6H,GACpC/5I,IAGDA,IAAY+5I,IACdl7L,KAAK+6L,UAAU3yL,KAAK+4C,GACpB+5I,EAAkB/5I,GAEhB,iBAAkB38C,GACpBy2L,EAAgB7yL,KAC0C,KAI9D,IAASlG,EAAI+4L,EAAgB53L,OAAS,EAAGnB,GAAK,IAAKA,EACjD+4L,EAAgB/4L,GAAGm5L,gBAAgBhI,IFjBlC,SAAyB5+K,EAAMJ,GAGpC,IAFA,IAAMinL,EAAc7mL,EAAK3G,WAEhB5L,EAAI,KAAWA,EAAG,CACzB,IAAM83H,EAAWshE,EAAYp5L,GACvB63H,EAAW1lH,EAASnS,GAG1B,IAAK83H,IAAaD,EAChB,MAIEC,IAAaD,IAKZC,EAMAD,EAOLtlH,EAAK8tB,aAAaw3F,EAAUC,IAN1BvlH,EAAKgoD,YAAYu9D,KACf93H,GAPFuS,EAAK5H,YAAYktH,KECnB5hB,CAAgBn4G,KAAK86L,SAAU96L,KAAK+6L,WAEpC/6L,KAAKg1L,oBAAoB,eAA6B3B,GAEjDrzL,KAAKg7L,mBACRh7L,KAAK86L,SAASn1L,MAAMg3C,QAAU,GAC9B38C,KAAKg7L,kBAAmB,GAG1Bh7L,KAAKm2L,wBAAwB9C,QA9DvBrzL,KAAKg7L,mBACPh7L,KAAK86L,SAASn1L,MAAMg3C,QAAU,OAC9B38C,KAAKg7L,kBAAmB,IA4E9B,YAAA/E,oBAAA,SAAoB7C,EAAOC,EAAYgC,EAAc98J,EAAUi9J,GAM7D,IALA,IAAMhD,EAAYa,EAAWb,UAEvBoD,EAAcvC,EAAWQ,iBAGtB3xL,EAFS0zL,EAAYvyL,OAEL,EAAGnB,GAAK,IAAKA,EAAG,CACvC,IAAMytG,EAAaimF,EAAY1zL,GACzBsC,EAAQmrG,EAAWnrG,MACzB,GACEA,EAAMwvL,eACNzB,GAAO5iF,EAAY6iF,IACnBgD,EAAYhxL,GACZ,CACA,IACML,EADgBK,EAAM+uL,cACDgI,eACzBnI,EACAC,EACAgC,GAEF,GAAIlxL,EAAM,CACR,IAAMS,EAAS2zB,EAAS/zB,EAAOL,GAC/B,GAAIS,EACF,OAAOA,MAOnB,EAjLA,CAAmC,IAmLnC,YC9LA,GAMO,MANP,GAYU,S,+dCPJ,GACI,SAQV,eAME,WAAYuF,EAAMqxL,EAAaC,GAA/B,MACE,YAAMtxL,IAAK,K,OAOX,EAAKg3C,QAAUq6I,EAOf,EAAK1xK,MAAQ2xK,E,EAEjB,OAvBqC,QAuBrC,EAvBA,CAAqC37J,IAqSrC,SAhPA,YAKE,WAAYwxJ,EAAWoK,GAAvB,MACE,cAAO,KAKP,EAAKrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,IAAMlvL,EAAU+7L,GAAe,GAc/B,GARA,EAAKC,UAAYh8L,EAAQi8L,OAMzB,EAAKC,OAASvK,GAAwB,GAElC,EAAKqK,QACP,IAAK,IAAIz5L,EAAI,EAAGgiB,EAAK,EAAK23K,OAAOx4L,OAAQnB,EAAIgiB,IAAMhiB,EACjD,EAAK45L,cAAc,EAAKD,OAAO35L,GAAIA,G,OAIvC,EAAK65L,gB,EAmMT,OA9OyB,QAkDvB,YAAAl7I,MAAA,WACE,KAAO7gD,KAAK0Q,YAAc,GACxB1Q,KAAK+hE,OAWT,YAAAt8B,OAAA,SAAOn+B,GACL,IAAK,IAAIpF,EAAI,EAAGgiB,EAAK5c,EAAIjE,OAAQnB,EAAIgiB,IAAMhiB,EACzClC,KAAKoI,KAAKd,EAAIpF,IAEhB,OAAOlC,MAUT,YAAAuH,QAAA,SAAQwH,GAEN,IADA,IAAMgmD,EAAQ/0D,KAAK67L,OACV35L,EAAI,EAAGgiB,EAAK6wC,EAAM1xD,OAAQnB,EAAIgiB,IAAMhiB,EAC3C6M,EAAEgmD,EAAM7yD,GAAIA,EAAG6yD,IAYnB,YAAAinI,SAAA,WACE,OAAOh8L,KAAK67L,QASd,YAAA7xL,KAAA,SAAK8f,GACH,OAAO9pB,KAAK67L,OAAO/xK,IASrB,YAAApZ,UAAA,WACE,OAAO1Q,KAAKwe,IAAI,KASlB,YAAAy9K,SAAA,SAASnyK,EAAOonC,GACVlxD,KAAK27L,SACP37L,KAAK87L,cAAc5qI,GAErBlxD,KAAK67L,OAAO9yL,OAAO+gB,EAAO,EAAGonC,GAC7BlxD,KAAK+7L,gBACL/7L,KAAKggC,cACH,IAAIk8J,GAAgBC,GAAyBjrI,EAAMpnC,KAUvD,YAAAi4C,IAAA,WACE,OAAO/hE,KAAKo8L,SAASp8L,KAAK0Q,YAAc,IAS1C,YAAAtI,KAAA,SAAK8oD,GACClxD,KAAK27L,SACP37L,KAAK87L,cAAc5qI,GAErB,IAAMt8C,EAAI5U,KAAK0Q,YAEf,OADA1Q,KAAKi8L,SAASrnL,EAAGs8C,GACVlxD,KAAK0Q,aASd,YAAAstB,OAAA,SAAOkzB,GAEL,IADA,IAAM5pD,EAAMtH,KAAK67L,OACR35L,EAAI,EAAGgiB,EAAK5c,EAAIjE,OAAQnB,EAAIgiB,IAAMhiB,EACzC,GAAIoF,EAAIpF,KAAOgvD,EACb,OAAOlxD,KAAKo8L,SAASl6L,IAa3B,YAAAk6L,SAAA,SAAStyK,GACP,IAAM9H,EAAOhiB,KAAK67L,OAAO/xK,GAMzB,OALA9pB,KAAK67L,OAAO9yL,OAAO+gB,EAAO,GAC1B9pB,KAAK+7L,gBACL/7L,KAAKggC,cACH,IAAIk8J,GAAgBC,GAA4Bn6K,EAAM8H,IAEjD9H,GAST,YAAAq6K,MAAA,SAAMvyK,EAAOonC,GACX,IAAMt8C,EAAI5U,KAAK0Q,YACf,GAAIoZ,EAAQlV,EAAG,CACT5U,KAAK27L,SACP37L,KAAK87L,cAAc5qI,EAAMpnC,GAE3B,IAAM9H,EAAOhiB,KAAK67L,OAAO/xK,GACzB9pB,KAAK67L,OAAO/xK,GAASonC,EACrBlxD,KAAKggC,cACH,IAAIk8J,GAAgBC,GAA4Bn6K,EAAM8H,IAExD9pB,KAAKggC,cACH,IAAIk8J,GAAgBC,GAAyBjrI,EAAMpnC,QAEhD,CACL,IAAK,IAAIxS,EAAI1C,EAAG0C,EAAIwS,IAASxS,EAC3BtX,KAAKi8L,SAAS3kL,OAAGlT,GAEnBpE,KAAKi8L,SAASnyK,EAAOonC,KAOzB,YAAA6qI,cAAA,WACE/7L,KAAK8e,IAAI,GAAiB9e,KAAK67L,OAAOx4L,SAQxC,YAAAy4L,cAAA,SAAc5qI,EAAMorI,GAClB,IAAK,IAAIp6L,EAAI,EAAGgiB,EAAKlkB,KAAK67L,OAAOx4L,OAAQnB,EAAIgiB,IAAMhiB,EACjD,GAAIlC,KAAK67L,OAAO35L,KAAOgvD,GAAQhvD,IAAMo6L,EACnC,MAAM,IAAI,EAAe,KAIjC,EA9OA,CAAyB,I,+dCjDzB,eAKE,WAAYnyL,EAAM3F,GAAlB,MACE,YAAM2F,IAAK,K,OAOX,EAAK3F,MAAQA,E,EAEjB,OAfgC,QAehC,EAfA,CAAgCs7B,IAmD1B,GACI,SAkRV,SAvQA,YAIE,WAAY47J,GAAZ,WACQ/7L,EAAU+7L,GAAe,GACzBjJ,EAAsC,GAAO,GAAI9yL,UAChD8yL,EAAY1vK,OAEnB,IAAIA,EAASpjB,EAAQojB,O,SAErB,YAAM0vK,IAAY,MAKbpkL,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAK0N,oBAAsB,GAM3B,EAAKC,cAAgB,GAErB,EAAKzM,kBAAkB,GAAiB,EAAK0M,sBAEzC15K,EACEjiB,MAAMC,QAAQgiB,GAChBA,EAAS,IAAI,GAAWA,EAAOpY,QAAS,CAACixL,QAAQ,IAEjD,EAAuD,mBAAvB,EAAiB,SAAkB,IAGrE74K,EAAS,IAAI,QAAW3e,EAAW,CAACw3L,QAAQ,IAG9C,EAAKc,UAAU35K,G,EAiNnB,OArQyB,QA0DvB,YAAA45K,mBAAA,WACE38L,KAAK2zF,WAMP,YAAA8oG,qBAAA,WACEz8L,KAAKu8L,oBAAoBh1L,QAAQqnL,IACjC5uL,KAAKu8L,oBAAoBl5L,OAAS,EAElC,IAAM0f,EAAS/iB,KAAK61G,YAMpB,IAAK,IAAMz2G,KALXY,KAAKu8L,oBAAoBn0L,KACvBmmL,GAAOxrK,EAAQo5K,GAAyBn8L,KAAK48L,iBAAkB58L,MAC/DuuL,GAAOxrK,EAAQo5K,GAA4Bn8L,KAAK68L,oBAAqB78L,OAGtDA,KAAKw8L,cACpBx8L,KAAKw8L,cAAcp9L,GAAImI,QAAQqnL,IAEjC/tI,GAAM7gD,KAAKw8L,eAGX,IADA,IAAMM,EAAc/5K,EAAOi5K,WAClB95L,EAAI,EAAGgiB,EAAK44K,EAAYz5L,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACpD,IAAMsC,EAAQs4L,EAAY56L,GAC1BlC,KAAK+8L,wBAAwBv4L,GAC7BxE,KAAKggC,cAAc,IAAIg9J,GAAW,WAAYx4L,IAEhDxE,KAAK2zF,WAMP,YAAAopG,wBAAA,SAAwBv4L,GACtB,IAAMy4L,EAAe,CACnB1O,GACE/pL,EACAsrL,GACA9vL,KAAK28L,mBACL38L,MAEFuuL,GAAO/pL,EAAOuqL,GAAUhyC,OAAQ/8I,KAAK28L,mBAAoB38L,OAGvDwE,aAAiB04L,GACnBD,EAAa70L,KACXmmL,GAAO/pL,EAAO,WAAYxE,KAAKm9L,qBAAsBn9L,MACrDuuL,GAAO/pL,EAAO,cAAexE,KAAKo9L,wBAAyBp9L,OAI/DA,KAAKw8L,cAAc3Y,EAAOr/K,IAAUy4L,GAMtC,YAAAE,qBAAA,SAAqBt9J,GACnB7/B,KAAKggC,cAAc,IAAIg9J,GAAW,WAAYn9J,EAAMr7B,SAMtD,YAAA44L,wBAAA,SAAwBv9J,GACtB7/B,KAAKggC,cAAc,IAAIg9J,GAAW,cAAen9J,EAAMr7B,SAOzD,YAAAo4L,iBAAA,SAAiBS,GACf,IAAM74L,EACJ64L,EAAuB,QAEzBr9L,KAAK+8L,wBAAwBv4L,GAC7BxE,KAAKggC,cAAc,IAAIg9J,GAAW,WAAYx4L,IAC9CxE,KAAK2zF,WAOP,YAAAkpG,oBAAA,SAAoBQ,GAClB,IAAM74L,EACJ64L,EAAuB,QAEnB50L,EAAMo7K,EAAOr/K,GACnBxE,KAAKw8L,cAAc/zL,GAAKlB,QAAQqnL,WACzB5uL,KAAKw8L,cAAc/zL,GAC1BzI,KAAKggC,cAAc,IAAIg9J,GAAW,cAAex4L,IACjDxE,KAAK2zF,WAWP,YAAAkiB,UAAA,WACE,OACE71G,KAAKwe,IAAI,KAYb,YAAAk+K,UAAA,SAAU35K,GACR,IAAMsW,EAAar5B,KAAK61G,YACxB,GAAIx8E,EAEF,IADA,IAAMikK,EAAgBjkK,EAAW2iK,WACxB95L,EAAI,EAAGgiB,EAAKo5K,EAAcj6L,OAAQnB,EAAIgiB,IAAMhiB,EACnDlC,KAAKggC,cAAc,IAAIg9J,GAAW,cAAeM,EAAcp7L,KAInElC,KAAK8e,IAAI,GAAiBiE,IAO5B,YAAAsuK,eAAA,SAAeC,GACb,IAAMv8H,OAAsB3wD,IAAdktL,EAA0BA,EAAY,GAIpD,OAHAtxL,KAAK61G,YAAYtuG,SAAQ,SAAU/C,GACjCA,EAAM6sL,eAAet8H,MAEhBA,GAYT,YAAAw8H,oBAAA,SAAoBC,GAClB,IAAMwB,OAAwB5uL,IAAfotL,EAA2BA,EAAa,GACjDltI,EAAM0uI,EAAO3vL,OAEnBrD,KAAK61G,YAAYtuG,SAAQ,SAAU/C,GACjCA,EAAM+sL,oBAAoByB,MAG5B,IAAMuK,EAAgBv9L,KAAK4wL,gBACvB4M,EAAgBD,EAAc7wJ,OAC7B8kJ,QAAuCptL,IAAzBm5L,EAAc7wJ,SAC/B8wJ,EAAgB,GAElB,IAAK,IAAIt7L,EAAIoiD,EAAKpgC,EAAK8uK,EAAO3vL,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACjD,IAAMytG,EAAaqjF,EAAO9wL,GAC1BytG,EAAWn8F,SAAW+pL,EAAc/pL,QACpCm8F,EAAW5qG,QAAU4qG,EAAW5qG,SAAWw4L,EAAcx4L,QACzD4qG,EAAW2gF,cAAgB/uL,KAAKqa,IAC9B+zF,EAAW2gF,cACXiN,EAAcjN,eAEhB3gF,EAAW26B,cAAgB/oI,KAAK4K,IAC9BwjG,EAAW26B,cACXizD,EAAcjzD,eAEhB36B,EAAW4gF,QAAUhvL,KAAK4K,IAAIwjG,EAAW4gF,QAASgN,EAAchN,SAChE5gF,EAAW6gF,QAAUjvL,KAAKqa,IAAI+zF,EAAW6gF,QAAS+M,EAAc/M,cACnCpsL,IAAzBm5L,EAAcjiL,cACUlX,IAAtBurG,EAAWr0F,OACbq0F,EAAWr0F,OAASsuK,GAClBj6E,EAAWr0F,OACXiiL,EAAcjiL,QAGhBq0F,EAAWr0F,OAASiiL,EAAcjiL,aAGZlX,IAAtBurG,EAAWjjE,SACbijE,EAAWjjE,OAAS8wJ,GAIxB,OAAOxK,GAMT,YAAAvB,eAAA,WACE,MAAO,SAEX,EArQA,CAAyBwC,I,+dCrDzB,SAzBA,YAME,WAAY9pL,EAAM7L,EAAKi4L,GAAvB,MACE,YAAMpsL,IAAK,K,OAOX,EAAK7L,IAAMA,EAOX,EAAK+0L,gBAAgCjvL,IAAnBmyL,EAA+BA,EAAiB,K,EAEtE,OAvBuB,QAuBvB,EAvBA,CAAuBz2J,I,+dC+GvB,SA9GA,YASE,WACE31B,EACA7L,EACAm/L,EACAC,EACAnH,EACAoH,GANF,MAQE,YAAMxzL,EAAM7L,EAAKi4L,IAAe,K,OAQhC,EAAKkH,cAAgBA,EAMrB,EAAKG,OAAS,KAMd,EAAKC,YAAc,KASnB,EAAK9nD,cAA4B3xI,IAAjBs5L,GAA6BA,EAK7C,EAAKI,eAAiBH,E,EAyD1B,OA5G8B,QA2D5B,sBAAI,oBAAK,C,IAAT,WAIE,OAHK39L,KAAK49L,SACR59L,KAAK49L,OAAS59L,KAAK1B,IAAIy/L,cAAc/9L,KAAKy9L,gBAErCz9L,KAAK49L,Q,IAEd,SAAUxK,GACRpzL,KAAK49L,OAASxK,G,gCAShB,sBAAI,yBAAU,C,IAAd,WAIE,OAHKpzL,KAAK69L,cACR79L,KAAK69L,YAAc79L,KAAK1B,IAAIs3D,uBAAuB51D,KAAKozL,QAEnDpzL,KAAK69L,a,IAEd,SAAep6G,GACbzjF,KAAK69L,YAAcp6G,G,gCAQrB,YAAA0sB,eAAA,WACE,YAAMA,eAAc,WAChB,mBAAoBnwG,KAAKy9L,eACHz9L,KAAkB,cAAEmwG,kBAShD,YAAAriC,gBAAA,WACE,YAAMA,gBAAe,WACjB,oBAAqB9tE,KAAKy9L,eACJz9L,KAAkB,cAAE8tE,mBAGlD,EA5GA,CAA8B,ICF9B,IAOEkwH,YAAa,cAOb3rJ,MAAO08I,GAAU18I,MAOjBw7I,SAAUkB,GAAUlB,SAOpBoQ,YAAa,cAQbC,YAAa,cAEbC,YAAa,cACbC,UAAW,YACXC,YAAa,cACbC,WAAY,aACZC,aAAc,eACdC,aAAc,eACdC,cAAe,iBC7CjB,GACe,cADf,GAEe,cAFf,GAGa,Y,+dCyZb,SAtZA,YAKE,WAAYngM,EAAKogM,GAAjB,MACE,YAAMpgM,IAAI,KAOV,EAAKy2L,KAAOz2L,EAMZ,EAAKqgM,gBAML,EAAKC,gBAAiB,EAMtB,EAAKC,WAAY,EAMjB,EAAKC,kBAAoB,GAMzB,EAAKC,oBAAmC36L,IAAlBs6L,EAA8B,EAAIA,EAQxD,EAAKM,MAAQ,KAEb,IAAM79I,EAAU,EAAK4zI,KAAKvgI,c,OAM1B,EAAKyqI,gBAAkB,GAMvB,EAAKC,gBAAkB,GAEvB,EAAKpE,SAAW35I,EAMhB,EAAKg+I,wBAA0B5Q,GAC7BptI,EACA,GACA,EAAKi+I,mBACL,GAOF,EAAKC,0BAML,EAAKC,oBAAsB/Q,GACzBptI,EACA,GACA,EAAKo+I,gBACL,GAMF,EAAKC,sBAAwB,EAAKC,iBAAiBv/I,KAAK,GAExD,EAAK46I,SAASlvL,iBACZmjL,GAAUV,UACV,EAAKmR,wBACLla,GAA0B,CAACt3K,SAAS,I,EA2S1C,OApZqC,QAkHnC,YAAA0xL,cAAA,SAAcC,GACZ,IAAIC,EAAW,IAAI,GACjB,SACA5/L,KAAK+0L,KACL4K,GAEF3/L,KAAKggC,cAAc4/J,QACUx7L,IAAzBpE,KAAK2+L,iBAEP33I,aAAahnD,KAAK2+L,iBAClB3+L,KAAK2+L,qBAAkBv6L,EACvBw7L,EAAW,IAAI,GACb,YACA5/L,KAAK+0L,KACL4K,GAEF3/L,KAAKggC,cAAc4/J,IAGnB5/L,KAAK2+L,gBAAkB13I,WAErB,WACEjnD,KAAK2+L,qBAAkBv6L,EACvB,IAAMw7L,EAAW,IAAI,GACnB,eACA5/L,KAAK+0L,KACL4K,GAEF3/L,KAAKggC,cAAc4/J,IACnB1/I,KAAKlgD,MACP,MAYN,YAAA6/L,sBAAA,SAAsBF,GACpB,IAAM9/J,EAAQ8/J,EACRvgM,EAAKygC,EAAMigK,UAEjB,GACEjgK,EAAM11B,MAAQ,cACd01B,EAAM11B,MAAQ,kBAGd,IAAK,IAAM21L,YADJ9/L,KAAKk/L,gBAAgB9/L,GACJY,KAAKk/L,gBAC3B,GAAIl/L,KAAKk/L,gBAAgBY,GAAWryL,SAAWoyB,EAAMpyB,OAAQ,QAKpDzN,KAAKk/L,gBAAgBY,GAC5B,YAIJjgK,EAAM11B,MAAQ,gBACd01B,EAAM11B,MAAQ,iBAEdnK,KAAKk/L,gBAAgB9/L,GAAMygC,GAE7B7/B,KAAKi/L,gBAAkBpS,GAAU7sL,KAAKk/L,kBAQxC,YAAAa,iBAAA,SAAiBJ,GACf3/L,KAAK6/L,sBAAsBF,GAC3B,IAAMC,EAAW,IAAI,GACnB,aACA5/L,KAAK+0L,KACL4K,OACAv7L,OACAA,EACApE,KAAKi/L,iBAEPj/L,KAAKggC,cAAc4/J,GASjB5/L,KAAK4+L,iBACJgB,EAASlT,mBACT1sL,KAAK6+L,WACN7+L,KAAKggM,qBAAqBL,IAE1B3/L,KAAK0/L,cAAc1/L,KAAKg/L,OAGU,IAAhCh/L,KAAKi/L,gBAAgB57L,SACvBrD,KAAK8+L,kBAAkBv3L,QAAQqnL,IAC/B5uL,KAAK8+L,kBAAkBz7L,OAAS,EAChCrD,KAAK6+L,WAAY,EACjB7+L,KAAKg/L,MAAQ,OAUjB,YAAAgB,qBAAA,SAAqBL,GACnB,OAA+B,IAAxBA,EAAa/yI,QAQtB,YAAAwyI,mBAAA,SAAmBO,GACjB3/L,KAAK4+L,eAAiD,IAAhC5+L,KAAKi/L,gBAAgB57L,OAC3CrD,KAAK6/L,sBAAsBF,GAC3B,IAAMC,EAAW,IAAI,GACnB,eACA5/L,KAAK+0L,KACL4K,OACAv7L,OACAA,EACApE,KAAKi/L,iBAMP,IAAK,IAAMzqK,KAJXx0B,KAAKggC,cAAc4/J,GAGnB5/L,KAAKg/L,MAAoC,GAClBW,EAAc,CACnC,IAAM98L,EAAQ88L,EAAanrK,GAC3Bx0B,KAAKg/L,MAAMxqK,GAA6B,mBAAV3xB,EAAuBgiL,EAAOhiL,EAG9D,GAAsC,IAAlC7C,KAAK8+L,kBAAkBz7L,OAAc,CACvC,IAAMggL,EAAMrjL,KAAK+0L,KAAKkL,mBACtBjgM,KAAK8+L,kBAAkB12L,KACrBmmL,GACElL,EACA,eACArjL,KAAKkgM,mBACLlgM,MAEFuuL,GAAOlL,EAAK,aAA+BrjL,KAAK+/L,iBAAkB//L,MAclEuuL,GACEvuL,KAAK86L,SACL,iBACA96L,KAAK+/L,iBACL//L,OAGAA,KAAK86L,SAASqF,aAAengM,KAAK86L,SAASqF,gBAAkB9c,GAC/DrjL,KAAK8+L,kBAAkB12L,KACrBmmL,GACEvuL,KAAK86L,SAASqF,cACd,aACAngM,KAAK+/L,iBACL//L,SAYV,YAAAkgM,mBAAA,SAAmBP,GAIjB,GAAI3/L,KAAKogM,UAAUT,GAAe,CAChC3/L,KAAK6/L,sBAAsBF,GAC3B3/L,KAAK6+L,WAAY,EACjB,IAAMe,EAAW,IAAI,GACnB,eACA5/L,KAAK+0L,KACL4K,EACA3/L,KAAK6+L,eACLz6L,EACApE,KAAKi/L,iBAEPj/L,KAAKggC,cAAc4/J,KAUvB,YAAAL,gBAAA,SAAgBI,GACd3/L,KAAKq/L,0BAA4BM,EACjC,IAAM5pD,KAAc/1I,KAAKg/L,QAASh/L,KAAKogM,UAAUT,IACjD3/L,KAAKggC,cACH,IAAI,GACF,eACAhgC,KAAK+0L,KACL4K,EACA5pD,KAaN,YAAA0pD,iBAAA,SAAiB5/J,GAGf,IAAM49J,EAAgBz9L,KAAKq/L,0BAEvB5B,IAAiBA,EAAc/Q,kBACJ,kBAArB7sJ,EAAMkmB,aAAiD,IAArBlmB,EAAMkmB,YAEhDlmB,EAAMswE,kBAUV,YAAAiwF,UAAA,SAAUT,GACR,OACE3/L,KAAK6+L,WACLt9L,KAAKyoB,IAAI21K,EAAax7G,QAAUnkF,KAAKg/L,MAAM76G,SACzCnkF,KAAK++L,gBACPx9L,KAAKyoB,IAAI21K,EAAav7G,QAAUpkF,KAAKg/L,MAAM56G,SAAWpkF,KAAK++L,gBAO/D,YAAA9a,gBAAA,WACMjkL,KAAKs/L,sBACP1Q,GAAc5uL,KAAKs/L,qBACnBt/L,KAAKs/L,oBAAsB,MAE7Bt/L,KAAK86L,SAASn6I,oBACZouI,GAAUV,UACVruL,KAAKw/L,uBAGHx/L,KAAKm/L,0BACPvQ,GAAc5uL,KAAKm/L,yBACnBn/L,KAAKm/L,wBAA0B,MAGjCn/L,KAAK8+L,kBAAkBv3L,QAAQqnL,IAC/B5uL,KAAK8+L,kBAAkBz7L,OAAS,EAEhCrD,KAAK86L,SAAW,KAChB,YAAM7W,gBAAe,YAEzB,EApZA,CAAqC,ICPrC,IAMEkO,WAAY,aAOZkO,UAAW,YAOXC,QAAS,UAOTC,UAAW,YAOXC,QAAS,WClCX,GACc,aADd,GAEQ,OAFR,GAGU,SAHV,GAIQ,OCFD,IAAM5yJ,GAAOooB,EAAAA,EA4PpB,SA9OA,WAKE,WAAYyqI,EAAkBC,GAK5B1gM,KAAK2gM,kBAAoBF,EAMzBzgM,KAAK4gM,aAAeF,EAMpB1gM,KAAK6gM,UAAY,GAMjB7gM,KAAK8gM,YAAc,GAMnB9gM,KAAK+gM,gBAAkB,GA0M3B,OApME,YAAAlgJ,MAAA,WACE7gD,KAAK6gM,UAAUx9L,OAAS,EACxBrD,KAAK8gM,YAAYz9L,OAAS,EAC1Bw9C,GAAM7gD,KAAK+gM,kBAOb,YAAAC,QAAA,WACE,IAAMC,EAAWjhM,KAAK6gM,UAChBK,EAAalhM,KAAK8gM,YAClB3/I,EAAU8/I,EAAS,GACF,GAAnBA,EAAS59L,QACX49L,EAAS59L,OAAS,EAClB69L,EAAW79L,OAAS,IAEpB49L,EAAS,GAAKA,EAASl/H,MACvBm/H,EAAW,GAAKA,EAAWn/H,MAC3B/hE,KAAKmhM,QAAQ,IAEf,IAAMC,EAAaphM,KAAK4gM,aAAaz/I,GAErC,cADOnhD,KAAK+gM,gBAAgBK,GACrBjgJ,GAQT,YAAAkgJ,QAAA,SAAQlgJ,GACN,IAASnhD,KAAK4gM,aAAaz/I,KAAYnhD,KAAK+gM,iBAAkB,IAC9D,IAAMO,EAAWthM,KAAK2gM,kBAAkBx/I,GACxC,OAAImgJ,GAAY1zJ,KACd5tC,KAAK6gM,UAAUz4L,KAAK+4C,GACpBnhD,KAAK8gM,YAAY14L,KAAKk5L,GACtBthM,KAAK+gM,gBAAgB/gM,KAAK4gM,aAAaz/I,KAAY,EACnDnhD,KAAKuhM,UAAU,EAAGvhM,KAAK6gM,UAAUx9L,OAAS,IACnC,IAQX,YAAAm+L,SAAA,WACE,OAAOxhM,KAAK6gM,UAAUx9L,QASxB,YAAAo+L,mBAAA,SAAmB33K,GACjB,OAAe,EAARA,EAAY,GASrB,YAAA43K,oBAAA,SAAoB53K,GAClB,OAAe,EAARA,EAAY,GASrB,YAAA63K,gBAAA,SAAgB73K,GACd,OAAQA,EAAQ,GAAM,GAOxB,YAAA83K,SAAA,WACE,IAAI1/L,EACJ,IAAKA,GAAKlC,KAAK6gM,UAAUx9L,QAAU,GAAK,EAAGnB,GAAK,EAAGA,IACjDlC,KAAKmhM,QAAQj/L,IAOjB,YAAA2/L,QAAA,WACE,OAAiC,IAA1B7hM,KAAK6gM,UAAUx9L,QAOxB,YAAAy+L,YAAA,SAAYr5L,GACV,OAAOA,KAAOzI,KAAK+gM,iBAOrB,YAAAgB,SAAA,SAAS5gJ,GACP,OAAOnhD,KAAK8hM,YAAY9hM,KAAK4gM,aAAaz/I,KAO5C,YAAAggJ,QAAA,SAAQr3K,GAQN,IAPA,IAAMm3K,EAAWjhM,KAAK6gM,UAChBK,EAAalhM,KAAK8gM,YAClBxmL,EAAQ2mL,EAAS59L,OACjB89C,EAAU8/I,EAASn3K,GACnBw3K,EAAWJ,EAAWp3K,GACtBk4K,EAAal4K,EAEZA,EAAQxP,GAAS,GAAG,CACzB,IAAM2nL,EAASjiM,KAAKyhM,mBAAmB33K,GACjCo4K,EAASliM,KAAK0hM,oBAAoB53K,GAElCq4K,EACJD,EAAS5nL,GAAS4mL,EAAWgB,GAAUhB,EAAWe,GAC9CC,EACAD,EAENhB,EAASn3K,GAASm3K,EAASkB,GAC3BjB,EAAWp3K,GAASo3K,EAAWiB,GAC/Br4K,EAAQq4K,EAGVlB,EAASn3K,GAASq3B,EAClB+/I,EAAWp3K,GAASw3K,EACpBthM,KAAKuhM,UAAUS,EAAYl4K,IAQ7B,YAAAy3K,UAAA,SAAUS,EAAYl4K,GAMpB,IALA,IAAMm3K,EAAWjhM,KAAK6gM,UAChBK,EAAalhM,KAAK8gM,YAClB3/I,EAAU8/I,EAASn3K,GACnBw3K,EAAWJ,EAAWp3K,GAErBA,EAAQk4K,GAAY,CACzB,IAAMI,EAAcpiM,KAAK2hM,gBAAgB73K,GACzC,KAAIo3K,EAAWkB,GAAed,GAK5B,MAJAL,EAASn3K,GAASm3K,EAASmB,GAC3BlB,EAAWp3K,GAASo3K,EAAWkB,GAC/Bt4K,EAAQs4K,EAKZnB,EAASn3K,GAASq3B,EAClB+/I,EAAWp3K,GAASw3K,GAMtB,YAAAe,aAAA,WACE,IAKIlhJ,EAASj/C,EAAGo/L,EALVb,EAAmBzgM,KAAK2gM,kBACxBM,EAAWjhM,KAAK6gM,UAChBK,EAAalhM,KAAK8gM,YACpBh3K,EAAQ,EACNlV,EAAIqsL,EAAS59L,OAEnB,IAAKnB,EAAI,EAAGA,EAAI0S,IAAK1S,GAEnBo/L,EAAWb,EADXt/I,EAAU8/I,EAAS/+L,MAEH0rC,UACP5tC,KAAK+gM,gBAAgB/gM,KAAK4gM,aAAaz/I,KAE9C+/I,EAAWp3K,GAASw3K,EACpBL,EAASn3K,KAAWq3B,GAGxB8/I,EAAS59L,OAASymB,EAClBo3K,EAAW79L,OAASymB,EACpB9pB,KAAK4hM,YAET,EA5OA,GChBA,GACQ,EADR,GAEW,EAFX,GAGU,EAHV,GAQS,EART,GASS,E,+dCLT,eAKE,WAAYU,EAAsBC,GAAlC,MACE,aAKE,SAAUphJ,GACR,OAAOmhJ,EAAqBlyL,MAAM,KAAM+wC,MAM1C,SAAUA,GACR,OAAmDA,EAAQ,GAAIkrI,aAElE,K,OAGD,EAAKmW,uBAAyB,EAAKC,iBAAiBviJ,KAAK,GAMzD,EAAKwiJ,oBAAsBH,EAM3B,EAAKI,cAAgB,EAMrB,EAAKC,kBAAoB,G,EAoE7B,OA9GwB,QAiDtB,YAAAvB,QAAA,SAAQlgJ,GACN,IAAM0hJ,EAAQ,YAAMxB,QAAO,UAAClgJ,GACxB0hJ,GACW1hJ,EAAQ,GAChBv1C,iBAAiBmjL,GAAUhyC,OAAQ/8I,KAAKwiM,wBAE/C,OAAOK,GAMT,YAAAC,gBAAA,WACE,OAAO9iM,KAAK2iM,eAOd,YAAAF,iBAAA,SAAiB5iK,GACf,IAAMvS,EAAmDuS,EAAY,OAC/DhrB,EAAQyY,EAAK4lK,WACnB,GACEr+K,IAAUkuL,IACVluL,IAAUkuL,IACVluL,IAAUkuL,GACV,CACAz1K,EAAKqzB,oBAAoBouI,GAAUhyC,OAAQ/8I,KAAKwiM,wBAChD,IAAMQ,EAAU11K,EAAK++J,SACjB2W,KAAWhjM,KAAK4iM,2BACX5iM,KAAK4iM,kBAAkBI,KAC5BhjM,KAAK2iM,eAET3iM,KAAK0iM,wBAQT,YAAAO,cAAA,SAAcC,EAAiBC,GAG7B,IAFA,IACW71K,EAAM01K,EADbI,EAAW,EAGbpjM,KAAK2iM,cAAgBO,GACrBE,EAAWD,GACXnjM,KAAKwhM,WAAa,GAGlBwB,GADA11K,EAAmDttB,KAAKghM,UAAU,IACnD3U,SACP/+J,EAAK4lK,aACC6P,IAAoBC,KAAWhjM,KAAK4iM,oBAChD5iM,KAAK4iM,kBAAkBI,IAAW,IAChChjM,KAAK2iM,gBACLS,EACF91K,EAAK8oG,SAIb,EA9GA,CAAwB,IAgHxB,YClHA,IAAMitE,GAAQ,CAKZC,QAAS,UAKT1nJ,QAAS,UAKT2nJ,KAAM,KAKN1nJ,OAAQ,IAKR2nJ,OAAQ,SAKRC,YAAa,cAKbC,OAAQ,SA6BH,IAAM,GAAkB,GAE/B,GAAgBL,GAAMC,SAAW,SAAW,EAAI/hM,KAAKS,IACrD,GAAgBqhM,GAAMznJ,SAAY,EAAIr6C,KAAKS,GAAK,QAAW,IAC3D,GAAgBqhM,GAAME,MAAQ,MAC9B,GAAgBF,GAAMxnJ,QAAU,EAChC,GAAgBwnJ,GAAMK,QAAU,KAAO,KAEvC,YC1EA,GACa,EADb,GAEe,ECFf,IACEC,OAAQ,SACRC,WAAY,aACZC,SAAU,YCFL,IAMMC,GAAoB,ICgQjC,SA3NA,WAIE,WAAYnkM,GAKVK,KAAK+jM,MAAQpkM,EAAQV,KASrBe,KAAKgkM,OAAsDrkM,EAAa,MASxEK,KAAKikM,aAA6B7/L,IAAnBzE,EAAQ2b,OAAuB3b,EAAQ2b,OAAS,KAS/Dtb,KAAKkkM,kBACqB9/L,IAAxBzE,EAAQwkM,YAA4BxkM,EAAQwkM,YAAc,KAM5DnkM,KAAKwjL,sBACyBp/K,IAA5BzE,EAAQykM,gBAAgCzkM,EAAQykM,gBAAkB,MAMpEpkM,KAAKqkM,aAA6BjgM,IAAnBzE,EAAQ2kM,QAAuB3kM,EAAQ2kM,OAMtDtkM,KAAKukM,aAAevkM,KAAKqkM,UAAWrkM,KAAKikM,SAMzCjkM,KAAKwkM,wBAA0B7kM,EAAQ8kM,mBAMvCzkM,KAAK0kM,iBAAmB,KAMxB1kM,KAAK2kM,eAAiBhlM,EAAQilM,cA+IlC,OAzIE,YAAAna,SAAA,WACE,OAAOzqL,KAAKukM,WAQd,YAAAniL,QAAA,WACE,OAAOpiB,KAAK+jM,OAQd,YAAAh9K,UAAA,WACE,OAAO/mB,KAAKikM,SAQd,YAAAY,SAAA,WACE,OAAO7kM,KAAKgkM,QAUd,YAAAthL,iBAAA,WACE,OAAO1iB,KAAK2kM,gBAAkB,GAAgB3kM,KAAKgkM,SAQrD,YAAAc,eAAA,WACE,OAAO9kM,KAAKkkM,cAcd,YAAAzgB,mBAAA,WACE,OAAOzjL,KAAKwjL,kBAQd,YAAAuhB,SAAA,WACE,OAAO/kM,KAAKqkM,SAQd,YAAAW,UAAA,SAAUV,GACRtkM,KAAKqkM,QAAUC,EACftkM,KAAKukM,aAAeD,IAAUtkM,KAAKikM,UAMrC,YAAAgB,mBAAA,WACE,OAAOjlM,KAAK0kM,kBAMd,YAAAQ,mBAAA,SAAmBC,GACjBnlM,KAAK0kM,iBAAmBS,GAQ1B,YAAA76I,UAAA,SAAUhvC,GACRtb,KAAKikM,QAAU3oL,EACftb,KAAKukM,aAAevkM,KAAKqkM,UAAW/oL,IAStC,YAAA8pL,eAAA,SAAejB,GACbnkM,KAAKkkM,aAAeC,GAStB,YAAAkB,sBAAA,SAAsB/qD,GACpBt6I,KAAKwkM,wBAA0BlqD,GAQjC,YAAAgrD,uBAAA,WACE,OAAOtlM,KAAKwkM,yBAEhB,EAzNA,G,+dCtCae,GAAS,QAMTC,GAAYjkM,KAAKS,GAAKujM,GAMtBE,GAAS,EAAED,IAAYA,GAAWA,GAAWA,IAM7CE,GAAe,EAAE,KAAM,GAAI,IAAK,IAOhCC,GAAaJ,GAAShkM,KAAKoG,IAAIpG,KAAKqkM,IAAIrkM,KAAKS,GAAK,IAM/D,eAIE,WAAY/C,G,OACV,YAAM,CACJA,KAAMA,EACN08C,MAAO,UACPrgC,OAAQmqL,GACRnB,QAAQ,EACRH,YAAauB,GACbjB,mBAAoB,SAAUtgJ,EAAY9uB,GACxC,OAAO8uB,EAAaymI,GAAKv1J,EAAM,GAAKkwK,QAEtC,KAEN,OAhBiC,QAgBjC,EAhBA,CAAiC,IAwBpBM,GAAc,CACzB,IAAIC,GAAmB,aACvB,IAAIA,GAAmB,eACvB,IAAIA,GAAmB,eACvB,IAAIA,GAAmB,eACvB,IAAIA,GAAmB,8CACvB,IAAIA,GAAmB,iDAWlB,SAASC,GAAa/wG,EAAOgxG,EAAYC,GAC9C,IAAM5iM,EAAS2xF,EAAM3xF,OACf6iM,EAAYD,EAAgB,EAAIA,EAAgB,EAClDrZ,EAASoZ,OACE5hM,IAAXwoL,IAGAA,EAFEsZ,EAAY,EAELlxG,EAAMrqF,QAEN,IAAI7J,MAAMuC,IAGvB,IAAK,IAAInB,EAAI,EAAGA,EAAImB,EAAQnB,GAAKgkM,EAAW,CAC1CtZ,EAAO1qL,GAAMsjM,GAAYxwG,EAAM9yF,GAAM,IACrC,IAAI0rB,EAAI23K,GAAShkM,KAAKoG,IAAIpG,KAAKqkM,IAAKrkM,KAAKS,KAAOgzF,EAAM9yF,EAAI,GAAK,IAAO,MAClE0rB,EAAI+3K,GACN/3K,EAAI+3K,GACK/3K,GAAK+3K,KACd/3K,GAAK+3K,IAEP/Y,EAAO1qL,EAAI,GAAK0rB,EAElB,OAAOg/J,EAWF,SAASuZ,GAAWnxG,EAAOgxG,EAAYC,GAC5C,IAAM5iM,EAAS2xF,EAAM3xF,OACf6iM,EAAYD,EAAgB,EAAIA,EAAgB,EAClDrZ,EAASoZ,OACE5hM,IAAXwoL,IAGAA,EAFEsZ,EAAY,EAELlxG,EAAMrqF,QAEN,IAAI7J,MAAMuC,IAGvB,IAAK,IAAInB,EAAI,EAAGA,EAAImB,EAAQnB,GAAKgkM,EAC/BtZ,EAAO1qL,GAAM,IAAM8yF,EAAM9yF,GAAMsjM,GAC/B5Y,EAAO1qL,EAAI,GACR,IAAMX,KAAK6kM,KAAK7kM,KAAKspL,IAAI71F,EAAM9yF,EAAI,GAAKqjM,KAAYhkM,KAAKS,GAAK,GAEnE,OAAO4qL,E,+dCnHI,GAAS,EAAE,KAAM,GAAI,IAAK,IAM1B,GAdS,QAcUrrL,KAAKS,GAAe,IAUpD,eAKE,WAAY/C,EAAMonM,G,OAChB,YAAM,CACJpnM,KAAMA,EACN08C,MAAO,WACPrgC,OAAQ,GACR8oL,gBAAiBiC,EACjB/B,QAAQ,EACRM,cAAe,GACfT,YAAa,MACb,KAEN,OAhBiC,QAgBjC,EAhBA,CAAiC,IAwBpB,GAAc,CACzB,IAAImC,GAAmB,UACvB,IAAIA,GAAmB,YAAa,OACpC,IAAIA,GAAmB,iCACvB,IAAIA,GAAmB,4BACvB,IAAIA,GAAmB,gDACvB,IAAIA,GAAmB,+CAAgD,OACvE,IAAIA,GAAmB,6CAA8C,QC5DnEx5K,GAAQ,GCEZ,IAAIy5K,GAAa,GAiBV,SAAS,GAAI5rL,EAAQ6rL,EAAavc,GACvC,IAAMwc,EAAa9rL,EAAOyH,UACpBskL,EAAkBF,EAAYpkL,UAC9BqkL,KAAcF,KAClBA,GAAWE,GAAc,IAE3BF,GAAWE,GAAYC,GAAmBzc,EA6BrC,SAAS,GAAIwc,EAAYC,GAC9B,IAAI1tD,EAIJ,OAHIytD,KAAcF,IAAcG,KAAmBH,GAAWE,KAC5DztD,EAAYutD,GAAWE,GAAYC,IAE9B1tD,EC5CF,IAAM2tD,GAAiB,UAWvB,SAAS5jJ,GAAYgjI,EAAIK,EAAIwgB,GAClC,IAAMhmM,EAASgmM,GAAcD,GACvBE,EAAO,GAAU9gB,EAAG,IACpB+gB,EAAO,GAAU1gB,EAAG,IACpB2gB,GAAeD,EAAOD,GAAQ,EAC9BG,EAAc,GAAU5gB,EAAG,GAAKL,EAAG,IAAM,EACzCjrK,EACJvZ,KAAKa,IAAI2kM,GAAexlM,KAAKa,IAAI2kM,GACjCxlM,KAAKa,IAAI4kM,GACPzlM,KAAKa,IAAI4kM,GACTzlM,KAAKY,IAAI0kM,GACTtlM,KAAKY,IAAI2kM,GACb,OAAO,EAAIlmM,EAASW,KAAKqnE,MAAMrnE,KAAKkrC,KAAK3xB,GAAIvZ,KAAKkrC,KAAK,EAAI3xB,ICsD7D,IAAImsL,IAAwB,EAKrB,SAASC,GAAyBC,GAEvCF,UAD6B7iM,IAAhB+iM,GAAmCA,GAW3C,SAASC,GAAepyG,EAAOgxG,EAAYC,GAChD,IAAIrZ,EACJ,QAAmBxoL,IAAf4hM,EAA0B,CAC5B,IAAK,IAAI9jM,EAAI,EAAGgiB,EAAK8wE,EAAM3xF,OAAQnB,EAAIgiB,IAAMhiB,EAC3C8jM,EAAW9jM,GAAK8yF,EAAM9yF,GAExB0qL,EAASoZ,OAETpZ,EAAS53F,EAAMrqF,QAEjB,OAAOiiL,EASF,SAASya,GAAkBryG,EAAOgxG,EAAYC,GACnD,QAAmB7hM,IAAf4hM,GAA4BhxG,IAAUgxG,EAAY,CACpD,IAAK,IAAI9jM,EAAI,EAAGgiB,EAAK8wE,EAAM3xF,OAAQnB,EAAIgiB,IAAMhiB,EAC3C8jM,EAAW9jM,GAAK8yF,EAAM9yF,GAExB8yF,EAAQgxG,EAEV,OAAOhxG,EAUF,SAASsyG,GAAc/c,IHtHvB,SAAatrL,EAAMsrL,GACxBz9J,GAAM7tB,GAAQsrL,EGsHd,CAAQA,EAAWnoK,UAAWmoK,GAC9B,GAAiBA,EAAYA,EAAY6c,IAmBpC,SAAS,GAAIG,GAClB,MAAiC,iBAAnBA,EHvJZz6K,GAFgB7tB,EG0JgB,IHvJhC6tB,GAAM7tB,EAAKsK,QAAQ,yCAA0C,aAC7D,KGuJ4B,GAAoB,KH3J7C,IAAatK,EGkLb,SAASwlM,GAAmBla,EAAYpmI,EAAY9uB,EAAOmyK,GAEhE,IAAIC,EACEC,GAFNnd,EAAa,GAAIA,IAES+a,yBAC1B,GAAIoC,EAAQ,CAEV,GADAD,EAAkBC,EAAOvjJ,EAAY9uB,GACjCmyK,GAAaA,IAAcjd,EAAWsa,YAClCD,EAAgBra,EAAW7nK,sBAE/B+kL,EACGA,EAAkB7C,EAAiB,GAAgB4C,QAGrD,CACL,IAAM7rJ,EAAQ4uI,EAAWsa,WACzB,GAAKlpJ,GAAS,aAAkB6rJ,GAAcA,GAAa,WACzDC,EAAkBtjJ,MACb,CAIL,IAuBMygJ,EAvBA,EAAa+C,GACjBpd,EACA,GAAI,cAEN,GAAI,IAAe8c,IAAqB1rJ,IAAU,WAEhD8rJ,EAAkBtjJ,EAAaomI,EAAW7nK,uBACrC,CACL,IAAIklL,EAAW,CACbvyK,EAAM,GAAK8uB,EAAa,EACxB9uB,EAAM,GACNA,EAAM,GAAK8uB,EAAa,EACxB9uB,EAAM,GACNA,EAAM,GACNA,EAAM,GAAK8uB,EAAa,EACxB9uB,EAAM,GACNA,EAAM,GAAK8uB,EAAa,GAK1BsjJ,GAFc1kJ,IADd6kJ,EAAW,EAAWA,EAAUA,EAAU,IACPj9L,MAAM,EAAG,GAAIi9L,EAASj9L,MAAM,EAAG,IACnDo4C,GAAY6kJ,EAASj9L,MAAM,EAAG,GAAIi9L,EAASj9L,MAAM,EAAG,KAC9B,OAKjBvG,KAHhBwgM,EAAgB4C,EAClB,GAAgBA,GAChBjd,EAAW7nK,sBAEb+kL,GAAmB7C,IAIzB,OAAO6C,EAUF,SAASI,GAAyBC,IArGlC,SAAwBA,GAC7BA,EAAYvgM,QAAQ+/L,IAqGpBS,CAAeD,GACfA,EAAYvgM,SAAQ,SAAUoT,GAC5BmtL,EAAYvgM,SAAQ,SAAUi/L,GACxB7rL,IAAW6rL,GACb,GAAiB7rL,EAAQ6rL,EAAaY,UA8CvC,SAASY,GAAiBzd,EAAY0d,GAC3C,OAAK1d,EAE4B,iBAAfA,EACT,GAAIA,GAEsB,EAJ1B,GAAI0d,GAeR,SAASC,GAAuCC,GACrD,OAAO,SAOKnzG,EAAOgxG,EAAYC,GAI3B,IAHA,IAAM5iM,EAAS2xF,EAAM3xF,OACf6iM,OAA8B9hM,IAAlB6hM,EAA8BA,EAAgB,EAC1DrZ,OAAwBxoL,IAAf4hM,EAA2BA,EAAa,IAAIllM,MAAMuC,GACxDnB,EAAI,EAAGA,EAAImB,EAAQnB,GAAKgkM,EAG/B,IAFA,IAAM7wK,EAAQ8yK,EAAenzG,EAAMrqF,MAAMzI,EAAGA,EAAIgkM,IAC1CkC,EAAc/yK,EAAMhyB,OACjBiU,EAAI,EAAGypF,EAAKmlG,EAAW5uL,EAAIypF,IAAMzpF,EACxCs1K,EAAO1qL,EAAIoV,GAAKA,GAAK8wL,EAAcpzG,EAAM9yF,EAAIoV,GAAK+d,EAAM/d,GAG5D,OAAOs1K,GA4FN,SAASyb,GAAWC,EAAaC,GACtC,GAAID,IAAgBC,EAClB,OAAO,EAET,IAAMC,EAAaF,EAAYzD,aAAe0D,EAAY1D,WAC1D,OAAIyD,EAAYlmL,YAAcmmL,EAAYnmL,WAGlBulL,GAA4BW,EAAaC,KACtCnB,KAHlBoB,EAgBJ,SAASb,GACdc,EACAC,GAEA,IAEIC,EAAgB,GAFDF,EAAiBrmL,UACZsmL,EAAsBtmL,WAK9C,OAHKumL,IACHA,EAAgBtB,IAEXsB,EAaF,SAASC,GAAajuL,EAAQ6rL,GAGnC,OAAOmB,GAFkB,GAAIhtL,GACC,GAAI6rL,IAkB7B,SAASxtD,GAAUv1D,EAAY9oE,EAAQ6rL,GAE5C,OADsBoC,GAAajuL,EAAQ6rL,EACpCmC,CAAcllH,OAAYr/E,EAAWq/E,EAAWpgF,QAelD,SAASwlM,GAAgBvtL,EAAQX,EAAQ6rL,EAAatc,GAE3D,OAAO,GAAe5uK,EADAstL,GAAajuL,EAAQ6rL,QACEpiM,EAAW8lL,GA0B1D,IAvQE4e,GACAC,GACAC,GAqQEC,GAAiB,KA2Bd,SAAS,KACd,OAAOA,GAmBF,SAASC,GAAiBzlH,EAAYglH,GAC3C,OAAKQ,GAGEjwD,GAAUv1D,EAAYglH,EAAkBQ,IAFtCxlH,EAYJ,SAAS,GAAmBA,EAAY0lH,GAC7C,OAAKF,GAiBEjwD,GAAUv1D,EAAYwlH,GAAgBE,IAfzClC,KACC,GAAOxjH,EAAY,CAAC,EAAG,KACxBA,EAAW,KAAO,KAClBA,EAAW,IAAM,KACjBA,EAAW,KAAO,IAClBA,EAAW,IAAM,KAEjBwjH,IAAwB,EAExBv/L,QAAQgS,KACN,2FAGG+pE,GAYJ,SAAS,GAAanoE,EAAQmtL,GACnC,OAAKQ,GAGEJ,GAAgBvtL,EAAQmtL,EAAkBQ,IAFxC3tL,EAYJ,SAAS,GAAeA,EAAQ6tL,GACrC,OAAKF,GAGEJ,GAAgBvtL,EAAQ2tL,GAAgBE,GAFtC7tL,EAaJ,SAAS8tL,GAAiBjlJ,EAAYskJ,GAC3C,IAAKQ,GACH,OAAO9kJ,EAET,IAAMklJ,EAAc,GAAIZ,GAAkB5D,WACpCyE,EAAYL,GAAepE,WACjC,OAAOwE,GAAeC,EACjBnlJ,EAAa,GAAgBklJ,GAAgB,GAAgBC,GAC9DnlJ,EAgCC,SAASolJ,GAA8BC,EAAYC,EAAUzwD,GAClE,OAAO,SAAU/iH,GACf,IAAIyzK,EAAa/U,EACjB,GAAI6U,EAAW/e,WAAY,CACzB,IAAMkf,EAAeH,EAAWziL,YAC1B+tK,EAAoBlM,GAAS+gB,IAEnChV,EAAaC,GADb3+J,EAAQA,EAAMtrB,MAAM,GACc6+L,EAAY1U,MAG5C7+J,EAAM,GAAKA,EAAM,GAAK0+J,EAAaG,GAErC7+J,EAAM,GAAK00J,GAAM10J,EAAM,GAAI0zK,EAAa,GAAIA,EAAa,IACzD1zK,EAAM,GAAK00J,GAAM10J,EAAM,GAAI0zK,EAAa,GAAIA,EAAa,IACzDD,EAAc1wD,EAAU/iH,QAExByzK,EAAc1wD,EAAU/iH,GAM1B,OAJI0+J,GAAc8U,EAAShf,aAEzBif,EAAY,IAAM/U,EAAa/L,GAAS6gB,EAAS1iL,cAE5C2iL,GC1sBJ,SAASE,GAAatuL,EAAQuuL,EAAYC,GAC/C,OAAO,SASKnpM,EAAQwjD,EAAYtvB,EAAMk1K,EAAcC,GAChD,GAAKrpM,EAAL,CAGA,IAAKwjD,IAAe0lJ,EAClB,OAAOlpM,EAET,IAAMspM,EAAYJ,EAAa,EAAIh1K,EAAK,GAAKsvB,EACvC+lJ,EAAaL,EAAa,EAAIh1K,EAAK,GAAKsvB,EACxCgmJ,EAASH,EAAkBA,EAAgB,GAAK,EAChDI,EAASJ,EAAkBA,EAAgB,GAAK,EAClDniB,EAAOvsK,EAAO,GAAK2uL,EAAY,EAAIE,EACnCpiB,EAAOzsK,EAAO,GAAK2uL,EAAY,EAAIE,EACnCriB,EAAOxsK,EAAO,GAAK4uL,EAAa,EAAIE,EACpCpiB,EAAO1sK,EAAO,GAAK4uL,EAAa,EAAIE,EAIpCviB,EAAOE,IAETA,EADAF,GAAQE,EAAOF,GAAQ,GAGrBC,EAAOE,IAETA,EADAF,GAAQE,EAAOF,GAAQ,GAIzB,IAAIn6J,EAAIg9J,GAAMhqL,EAAO,GAAIknL,EAAME,GAC3Bn6J,EAAI+8J,GAAMhqL,EAAO,GAAImnL,EAAME,GAG/B,GAAI+hB,GAAgBD,GAAU3lJ,EAAY,CACxC,IAAM0wB,EAAQ,GAAK1wB,EACnBx2B,IACGknD,EAAQtzE,KAAKoG,IAAI,EAAIpG,KAAK4K,IAAI,EAAG07K,EAAOlnL,EAAO,IAAMk0E,GACtDA,EAAQtzE,KAAKoG,IAAI,EAAIpG,KAAK4K,IAAI,EAAGxL,EAAO,GAAKonL,GAAQlzG,GACvDjnD,IACGinD,EAAQtzE,KAAKoG,IAAI,EAAIpG,KAAK4K,IAAI,EAAG27K,EAAOnnL,EAAO,IAAMk0E,GACtDA,EAAQtzE,KAAKoG,IAAI,EAAIpG,KAAK4K,IAAI,EAAGxL,EAAO,GAAKqnL,GAAQnzG,GAGzD,MAAO,CAAClnD,EAAGC,KASV,SAASy8K,GAAK1pM,GACnB,OAAOA,ECzDT,SAAS2pM,GACPnmJ,EACApb,EACAwhK,EACAC,GAEA,IAAMC,EAAc7hB,GAAS7/I,GAAawhK,EAAa,GACjDG,EAAc7hB,GAAU9/I,GAAawhK,EAAa,GAExD,OAAIC,EACKjpM,KAAKqa,IAAIuoC,EAAY5iD,KAAK4K,IAAIs+L,EAAaC,IAE7CnpM,KAAKqa,IAAIuoC,EAAY5iD,KAAKqa,IAAI6uL,EAAaC,IAepD,SAASC,GAA2BxmJ,EAAYmsI,EAAehmD,GAC7D,IAAI1lI,EAASrD,KAAKqa,IAAIuoC,EAAYmsI,GAalC,OAVA1rL,GACErD,KAAKoG,IAAI,EAHG,GAGSpG,KAAK4K,IAAI,EAAGg4C,EAAamsI,EAAgB,IAHlD,GAIZ,EACEhmD,IACF1lI,EAASrD,KAAK4K,IAAIvH,EAAQ0lI,GAC1B1lI,GACErD,KAAKoG,IAAI,EARC,GAQWpG,KAAK4K,IAAI,EAAGm+H,EAAgBnmF,EAAa,IARpD,GAUV,GAEGwmI,GAAM/lL,EAAQ0lI,EAAgB,EAAmB,EAAhBgmD,GA6InC,SAASsa,GACdta,EACAhmD,EACAugE,EACAC,EACAC,GAEA,OAAO,SAQK5mJ,EAAYigI,EAAWvvJ,EAAMk1K,GACrC,QAAmB3lM,IAAf+/C,EAA0B,CAC5B,IAAM6mJ,EAAeF,EACjBR,GACEha,EACAwa,EACAj2K,EACAk2K,GAEFza,EAGJ,YAF8BlsL,IAAfymM,GAA2BA,IAE1Bd,EAGTY,GACLxmJ,EACA6mJ,EACA1gE,GALOqgD,GAAMxmI,EAAYmmF,EAAe0gE,KCzN3C,SAASvsJ,GAAQ4V,GACtB,YAAiBjwD,IAAbiwD,EACK,OAEP,EAQG,SAAS,GAAKA,GACnB,YAAiBjwD,IAAbiwD,EACKA,OAEP,ECnBG,SAAS42I,GAAOljK,GACrB,OAAOxmC,KAAKs5B,IAAIkN,EAAG,GASd,SAASmjK,GAAQnjK,GACtB,OAAO,EAAIkjK,GAAO,EAAIljK,GASjB,SAASojK,GAASpjK,GACvB,OAAO,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAIA,EAS1B,SAASqjK,GAAOrjK,GACrB,OAAOA,EJ6rBP8/J,GAAyB,IACzBA,GAAyB,IAxczBiB,GA6cE,GA5cFC,GA6cEhD,GA5cFiD,GA6cE7C,GAHA,GAxcW5+L,SAAQ,SAAU+gM,GAC7BQ,GAAavhM,SAAQ,SAAUghM,GAC7B,GAAiBD,EAAaC,EAAaQ,IAC3C,GAAiBR,EAAaD,EAAaU,UK5RjD,UACEnmH,GAAI,KACJwoH,IAAK,MACLj/E,IAAK,MACLD,KAAM,QCDD,SAASm/E,GACd/iB,EACAt2J,EACA63C,EACA0+G,EACAxvC,EACAuyD,GAIA,IAFA,IAAMC,EAAOD,GAAsB,GAC/BrpM,EAAI,EACCoV,EAAI2a,EAAQ3a,EAAIwyD,EAAKxyD,GAAKkxK,EAAQ,CACzC,IAAM76J,EAAI46J,EAAgBjxK,GACpBsW,EAAI26J,EAAgBjxK,EAAI,GAC9Bk0L,EAAKtpM,KAAO82I,EAAU,GAAKrrH,EAAIqrH,EAAU,GAAKprH,EAAIorH,EAAU,GAC5DwyD,EAAKtpM,KAAO82I,EAAU,GAAKrrH,EAAIqrH,EAAU,GAAKprH,EAAIorH,EAAU,GAK9D,OAHIuyD,GAAYC,EAAKnoM,QAAUnB,IAC7BspM,EAAKnoM,OAASnB,GAETspM,EAaF,SAAS,GACdjjB,EACAt2J,EACA63C,EACA0+G,EACAvmL,EACA2P,EACA25L,GAQA,IANA,IAAMC,EAAOD,GAAsB,GAC7BppM,EAAMZ,KAAKY,IAAIF,GACfG,EAAMb,KAAKa,IAAIH,GACfwpM,EAAU75L,EAAO,GACjB85L,EAAU95L,EAAO,GACnB1P,EAAI,EACCoV,EAAI2a,EAAQ3a,EAAIwyD,EAAKxyD,GAAKkxK,EAAQ,CACzC,IAAMuB,EAASxB,EAAgBjxK,GAAKm0L,EAC9BzhB,EAASzB,EAAgBjxK,EAAI,GAAKo0L,EACxCF,EAAKtpM,KAAOupM,EAAU1hB,EAAS5nL,EAAM6nL,EAAS5nL,EAC9CopM,EAAKtpM,KAAOwpM,EAAU3hB,EAAS3nL,EAAM4nL,EAAS7nL,EAC9C,IAAK,IAAI0V,EAAIP,EAAI,EAAGO,EAAIP,EAAIkxK,IAAU3wK,EACpC2zL,EAAKtpM,KAAOqmL,EAAgB1wK,GAMhC,OAHI0zL,GAAYC,EAAKnoM,QAAUnB,IAC7BspM,EAAKnoM,OAASnB,GAETspM,EAsDF,SAAS,GACdjjB,EACAt2J,EACA63C,EACA0+G,EACAuB,EACAC,EACAuhB,GAIA,IAFA,IAAMC,EAAOD,GAAsB,GAC/BrpM,EAAI,EACCoV,EAAI2a,EAAQ3a,EAAIwyD,EAAKxyD,GAAKkxK,EAAQ,CACzCgjB,EAAKtpM,KAAOqmL,EAAgBjxK,GAAKyyK,EACjCyhB,EAAKtpM,KAAOqmL,EAAgBjxK,EAAI,GAAK0yK,EACrC,IAAK,IAAInyK,EAAIP,EAAI,EAAGO,EAAIP,EAAIkxK,IAAU3wK,EACpC2zL,EAAKtpM,KAAOqmL,EAAgB1wK,GAMhC,OAHI0zL,GAAYC,EAAKnoM,QAAUnB,IAC7BspM,EAAKnoM,OAASnB,GAETspM,E,+dCrHHG,GvDMG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GuDQzB,eACE,iB3DPyBxiJ,EAIrByiJ,EAGAC,EAEAC,EARAC,E2DMJ,EACE,cAAO,K,OAMP,EAAK9H,QrDmJA,CAACjuI,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KqD7IrC,EAAKg2I,iBAAmB,EAMxB,EAAKC,yCAA2C,EAMhD,EAAKC,2BAA6B,EAUlC,EAAKC,6B3D1CkBhjJ,E2D0CuB,SAC5CijJ,EACAC,EACAC,GAEA,IAAKA,EACH,OAAOtsM,KAAKusM,sBAAsBF,GAEpC,IAAM7hM,EAAQxK,KAAKwK,QAEnB,OADAA,EAAMgiM,eAAeF,GACd9hM,EAAM+hM,sBAAsBF,I3DnDnCN,GAAS,EAUN,WACL,IAAMU,EAAW3rM,MAAMN,UAAUmK,MAAMjK,KAAKsc,WAO5C,OANK+uL,GAAU/rM,OAAS8rM,GAAa,EAAYW,EAAUZ,KACzDE,GAAS,EACTD,EAAW9rM,KACX6rM,EAAWY,EACXb,EAAaziJ,EAAG/4C,MAAMpQ,KAAMgd,YAEvB4uL,I,E2D0RX,OAvSuB,QAyDrB,YAAAc,oBAAA,SAAoBL,EAAkBC,GACpC,OAAOtsM,KAAKmsM,4BACVnsM,KAAKgvL,cACLqd,EACAC,IASJ,YAAA9hM,MAAA,WACE,OAAO,KAWT,YAAAmiM,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAO,KAQT,YAAArlB,WAAA,SAAW75J,EAAGC,GACZ,IAAMqI,EAAQj2B,KAAK8sM,gBAAgB,CAACn/K,EAAGC,IACvC,OAAOqI,EAAM,KAAOtI,GAAKsI,EAAM,KAAOrI,GAWxC,YAAAk/K,gBAAA,SAAgBz3K,EAAO03K,GACrB,IAAMH,EAAeG,GAAsC,CAACz1I,IAAKA,KAEjE,OADAt3D,KAAK2sM,eAAet3K,EAAM,GAAIA,EAAM,GAAIu3K,EAAc52I,EAAAA,GAC/C42I,GAUT,YAAAI,qBAAA,SAAqBvpH,GACnB,OAAOzjF,KAAKwnL,WAAW/jG,EAAW,GAAIA,EAAW,KASnD,YAAAwpH,cAAA,SAAc3xL,GACZ,OAAO,KAST,YAAAyL,UAAA,SAAUsgK,GACR,GAAIrnL,KAAKgsM,iBAAmBhsM,KAAKgvL,cAAe,CAC9C,IAAM1zK,EAAStb,KAAKitM,cAAcjtM,KAAKikM,UACnCjjM,MAAMsa,EAAO,KAAOta,MAAMsa,EAAO,MACnC8sK,GAAoB9sK,GAEtBtb,KAAKgsM,gBAAkBhsM,KAAKgvL,cAE9B,OrDmhBG,SAAwB1zK,EAAQ+rK,GACrC,OAAIA,GACFA,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GACvB+rK,EAAW,GAAK/rK,EAAO,GAChB+rK,GAEA/rK,EqD3hBA4xL,CAAeltM,KAAKikM,QAAS5c,IAWtC,YAAA8lB,OAAA,SAAOlrM,EAAO2P,GACZ,KAaF,YAAA24B,MAAA,SAAMo8I,EAAIymB,EAAQC,GAChB,KAYF,YAAAC,SAAA,SAASjzK,GACP,OAAOr6B,KAAKusM,sBAAsBlyK,EAAYA,IAWhD,YAAAkyK,sBAAA,SAAsBF,GACpB,OAAO,KAQT,YAAApiM,QAAA,WACE,OAAO,KAYT,YAAAuiM,eAAA,SAAeviB,GACb,KASF,YAAAsjB,iBAAA,SAAiBjyL,GACf,OAAO,KAWT,YAAAk6D,UAAA,SAAUu0G,EAAQC,GAChB,KAkBF,YAAAhxC,UAAA,SAAUr+H,EAAQ6rL,GAEhB,IAAMgD,EAAa,GAAc7uL,GAC3BsvK,EACJuf,EAAW3E,YAAc,eACrB,SAAU2I,EAAeC,EAAgBjlB,GACvC,IAAMklB,EAAclE,EAAWziL,YACzB4mL,EAAkBnE,EAAW1E,iBAC7Bv6J,EAAQs+I,GAAU8kB,GAAmB9kB,GAAU6kB,GAmBrD,OAlBAlnB,EACEmlB,GACAgC,EAAgB,GAChBA,EAAgB,GAChBpjK,GACCA,EACD,EACA,EACA,GAEF+gK,GACEkC,EACA,EACAA,EAAcnqM,OACdmlL,EACAmjB,GACA8B,GAEK7E,GAAaY,EAAYhD,EAAzBoC,CACL4E,EACAC,EACAjlB,IAGJogB,GAAaY,EAAYhD,GAE/B,OADAxmM,KAAKwsM,eAAeviB,GACbjqL,MAEX,EAvSA,CAAuB,IAySvB,Y,+dCpUA,eACE,mBACE,cAAO,K,OAMP,EAAK2rC,OAAS,MAMd,EAAK68I,OAAS,EAMd,EAAKD,gBAAkB,K,EAoQ3B,OAxR6B,QA4B3B,YAAA0kB,cAAA,SAAc3xL,GACZ,OAAOgtK,GACLtoL,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLltK,IAQJ,YAAAha,eAAA,WACE,OAAO,KAQT,YAAAssM,mBAAA,WACE,OAAO5tM,KAAKuoL,gBAAgB59K,MAAM,EAAG3K,KAAKwoL,SAM5C,YAAAxlI,mBAAA,WACE,OAAOhjD,KAAKuoL,iBAQd,YAAAslB,kBAAA,WACE,OAAO7tM,KAAKuoL,gBAAgB59K,MAC1B3K,KAAKuoL,gBAAgBllL,OAASrD,KAAKwoL,SASvC,YAAAjxC,UAAA,WACE,OAAOv3I,KAAK2rC,QAQd,YAAA4gK,sBAAA,SAAsBF,GAOpB,GANIrsM,KAAKksM,6BAA+BlsM,KAAKgvL,gBAC3ChvL,KAAKisM,yCAA2C,EAChDjsM,KAAKksM,2BAA6BlsM,KAAKgvL,eAKvCqd,EAAmB,GACgC,IAAlDrsM,KAAKisM,0CACJI,GAAoBrsM,KAAKisM,yCAE3B,OAAOjsM,KAGT,IAAM8tM,EACJ9tM,KAAK+tM,8BAA8B1B,GAErC,OADkCyB,EAAmB9qJ,qBACvB3/C,OAASrD,KAAKuoL,gBAAgBllL,OACnDyqM,GAQP9tM,KAAKisM,yCAA2CI,EACzCrsM,OASX,YAAA+tM,8BAAA,SAA8B1B,GAC5B,OAAOrsM,MAMT,YAAAguM,UAAA,WACE,OAAOhuM,KAAKwoL,QAOd,YAAAylB,mBAAA,SAAmBtiK,EAAQ48I,GACzBvoL,KAAKwoL,OAAS0lB,GAAmBviK,GACjC3rC,KAAK2rC,OAASA,EACd3rC,KAAKuoL,gBAAkBA,GAQzB,YAAAtnL,eAAA,SAAemJ,EAAa+jM,GAC1B,KASF,YAAAC,UAAA,SAAUziK,EAAQvhC,EAAaikM,GAE7B,IAAI7lB,EACJ,GAAI78I,EACF68I,EAAS0lB,GAAmBviK,OACvB,CACL,IAAK,IAAIzpC,EAAI,EAAGA,EAAImsM,IAAWnsM,EAAG,CAChC,GAA2B,IAAvBkI,EAAY/G,OAGd,OAFArD,KAAK2rC,OAAS,WACd3rC,KAAKwoL,OAAS,GAGdp+K,EAAoCA,EAAY,GAIpDuhC,EA8GN,SAA4B68I,GAC1B,IAAI78I,EACU,GAAV68I,EACF78I,EAAS,MACU,GAAV68I,EACT78I,EAAS,OACU,GAAV68I,IACT78I,EAAS,SAEX,OAA4D,EAvH/C2iK,CADT9lB,EAASp+K,EAAY/G,QAGvBrD,KAAK2rC,OAASA,EACd3rC,KAAKwoL,OAASA,GAYhB,YAAAgkB,eAAA,SAAeviB,GACTjqL,KAAKuoL,kBACP0B,EAAYjqL,KAAKuoL,gBAAiBvoL,KAAKuoL,gBAAiBvoL,KAAKwoL,QAC7DxoL,KAAK2zF,YAWT,YAAAw5G,OAAA,SAAOlrM,EAAO2P,GACZ,IAAM22K,EAAkBvoL,KAAKgjD,qBAC7B,GAAIulI,EAAiB,CACnB,IAAMC,EAASxoL,KAAKguM,YACpB,GACEzlB,EACA,EACAA,EAAgBllL,OAChBmlL,EACAvmL,EACA2P,EACA22K,GAEFvoL,KAAK2zF,YAaT,YAAAppD,MAAA,SAAMo8I,EAAIymB,EAAQC,GAChB,IAAIzmB,EAAKwmB,OACEhpM,IAAPwiL,IACFA,EAAKD,GAEP,IAAI/0K,EAASy7L,EACRz7L,IACHA,EAAS1Q,GAAUlB,KAAK+mB,cAE1B,IAAMwhK,EAAkBvoL,KAAKgjD,qBAC7B,GAAIulI,EAAiB,CACnB,IAAMC,EAASxoL,KAAKguM,aF5KnB,SACLzlB,EACAt2J,EACA63C,EACA0+G,EACA7B,EACAC,EACAh1K,EACA25L,GAMA,IAJA,IAAMC,EAAOD,GAAsB,GAC7BE,EAAU75L,EAAO,GACjB85L,EAAU95L,EAAO,GACnB1P,EAAI,EACCoV,EAAI2a,EAAQ3a,EAAIwyD,EAAKxyD,GAAKkxK,EAAQ,CACzC,IAAMuB,EAASxB,EAAgBjxK,GAAKm0L,EAC9BzhB,EAASzB,EAAgBjxK,EAAI,GAAKo0L,EACxCF,EAAKtpM,KAAOupM,EAAU9kB,EAAKoD,EAC3ByhB,EAAKtpM,KAAOwpM,EAAU9kB,EAAKoD,EAC3B,IAAK,IAAInyK,EAAIP,EAAI,EAAGO,EAAIP,EAAIkxK,IAAU3wK,EACpC2zL,EAAKtpM,KAAOqmL,EAAgB1wK,GAG5B0zL,GAAYC,EAAKnoM,QAAUnB,IAC7BspM,EAAKnoM,OAASnB,GEqJZ,CACEqmL,EACA,EACAA,EAAgBllL,OAChBmlL,EACA7B,EACAC,EACAh1K,EACA22K,GAEFvoL,KAAK2zF,YAWT,YAAAne,UAAA,SAAUu0G,EAAQC,GAChB,IAAMzB,EAAkBvoL,KAAKgjD,qBAC7B,GAAIulI,EAAiB,CACnB,IAAMC,EAASxoL,KAAKguM,YACpB,GACEzlB,EACA,EACAA,EAAgBllL,OAChBmlL,EACAuB,EACAC,EACAzB,GAEFvoL,KAAK2zF,YAGX,EAxRA,CAA6B,IA8StB,SAASu6G,GAAmBviK,GACjC,IAAI68I,EAQJ,OAPI78I,GAAU,MACZ68I,EAAS,EACA78I,GAAU,QAAsBA,GAAU,OACnD68I,EAAS,EACA78I,GAAU,UACnB68I,EAAS,GAEkB,EA0B/B,YCjVA,SAAS+lB,GACPhmB,EACAimB,EACAC,EACAjmB,EACA76J,EACAC,EACAg/K,GAEA,IAII36K,EAJE0zH,EAAK4iC,EAAgBimB,GACrB5oD,EAAK2iC,EAAgBimB,EAAU,GAC/B3rJ,EAAK0lI,EAAgBkmB,GAAW9oD,EAChC7iG,EAAKylI,EAAgBkmB,EAAU,GAAK7oD,EAE1C,GAAW,IAAP/iG,GAAmB,IAAPC,EACd7wB,EAASu8K,MACJ,CACL,IAAMzmK,IAAMpa,EAAIg4H,GAAM9iG,GAAMj1B,EAAIg4H,GAAM9iG,IAAOD,EAAKA,EAAKC,EAAKA,GAC5D,GAAI/a,EAAI,EACN9V,EAASw8K,MACJ,IAAI1mK,EAAI,EAAG,CAChB,IAAK,IAAI7lC,EAAI,EAAGA,EAAIsmL,IAAUtmL,EAC5B0qM,EAAa1qM,GAAKgpL,GAChB3C,EAAgBimB,EAAUtsM,GAC1BqmL,EAAgBkmB,EAAUvsM,GAC1B6lC,GAIJ,YADA6kK,EAAavpM,OAASmlL,GAGtBv2J,EAASu8K,GAGb,IAAStsM,EAAI,EAAGA,EAAIsmL,IAAUtmL,EAC5B0qM,EAAa1qM,GAAKqmL,EAAgBt2J,EAAS/vB,GAE7C0qM,EAAavpM,OAASmlL,EAajB,SAASkmB,GAAgBnmB,EAAiBt2J,EAAQ63C,EAAK0+G,EAAQr8K,GACpE,IAAIw5I,EAAK4iC,EAAgBt2J,GACrB2zH,EAAK2iC,EAAgBt2J,EAAS,GAClC,IAAKA,GAAUu2J,EAAQv2J,EAAS63C,EAAK73C,GAAUu2J,EAAQ,CACrD,IAAMU,EAAKX,EAAgBt2J,GACrBk3J,EAAKZ,EAAgBt2J,EAAS,GAC9B08K,EAAe,GAAUhpD,EAAIC,EAAIsjC,EAAIC,GACvCwlB,EAAexiM,IACjBA,EAAMwiM,GAERhpD,EAAKujC,EACLtjC,EAAKujC,EAEP,OAAOh9K,EAWF,SAASyiM,GACdrmB,EACAt2J,EACA2gJ,EACA4V,EACAr8K,GAEA,IAAK,IAAIjK,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjBiK,EAAMuiM,GAAgBnmB,EAAiBt2J,EAAQ63C,EAAK0+G,EAAQr8K,GAC5D8lB,EAAS63C,EAEX,OAAO39D,EAwCF,SAAS0iM,GACdtmB,EACAt2J,EACA63C,EACA0+G,EACAsmB,EACAjtJ,EACAl0B,EACAC,EACAg/K,EACAC,EACAkC,GAEA,GAAI98K,GAAU63C,EACZ,OAAO+iI,EAET,IAAI3qM,EAAG8sM,EACP,GAAiB,IAAbF,EAAgB,CAQlB,IANAE,EAAkB,GAChBrhL,EACAC,EACA26J,EAAgBt2J,GAChBs2J,EAAgBt2J,EAAS,KAEL46K,EAAoB,CACxC,IAAK3qM,EAAI,EAAGA,EAAIsmL,IAAUtmL,EACxB0qM,EAAa1qM,GAAKqmL,EAAgBt2J,EAAS/vB,GAG7C,OADA0qM,EAAavpM,OAASmlL,EACfwmB,EAEP,OAAOnC,EAKX,IAFA,IAAMoC,EAAWF,GAA8B,CAACz3I,IAAKA,KACjDxtC,EAAQmI,EAASu2J,EACd1+J,EAAQggD,GAWb,GAVAykI,GACEhmB,EACAz+J,EAAQ0+J,EACR1+J,EACA0+J,EACA76J,EACAC,EACAqhL,IAEFD,EAAkB,GAAUrhL,EAAGC,EAAGqhL,EAAS,GAAIA,EAAS,KAClCpC,EAAoB,CAExC,IADAA,EAAqBmC,EAChB9sM,EAAI,EAAGA,EAAIsmL,IAAUtmL,EACxB0qM,EAAa1qM,GAAK+sM,EAAS/sM,GAE7B0qM,EAAavpM,OAASmlL,EACtB1+J,GAAS0+J,OAYT1+J,GACE0+J,EACAjnL,KAAK4K,KACD5K,KAAKkrC,KAAKuiK,GAAmBztM,KAAKkrC,KAAKogK,IACvCiC,EACA,EACF,GAIR,GAAIjtJ,IAEF0sJ,GACEhmB,EACAz+G,EAAM0+G,EACNv2J,EACAu2J,EACA76J,EACAC,EACAqhL,IAEFD,EAAkB,GAAUrhL,EAAGC,EAAGqhL,EAAS,GAAIA,EAAS,KAClCpC,GAAoB,CAExC,IADAA,EAAqBmC,EAChB9sM,EAAI,EAAGA,EAAIsmL,IAAUtmL,EACxB0qM,EAAa1qM,GAAK+sM,EAAS/sM,GAE7B0qM,EAAavpM,OAASmlL,EAG1B,OAAOqkB,EAiBF,SAASqC,GACd3mB,EACAt2J,EACA2gJ,EACA4V,EACAsmB,EACAjtJ,EACAl0B,EACAC,EACAg/K,EACAC,EACAkC,GAGA,IADA,IAAME,EAAWF,GAA8B,CAACz3I,IAAKA,KAC5Cp1D,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjB2qM,EAAqBgC,GACnBtmB,EACAt2J,EACA63C,EACA0+G,EACAsmB,EACAjtJ,EACAl0B,EACAC,EACAg/K,EACAC,EACAoC,GAEFh9K,EAAS63C,EAEX,OAAO+iI,ECpRF,SAASsC,GAAkB5mB,EAAiBt2J,EAAQwxD,EAAY+kG,GACrE,IAAK,IAAItmL,EAAI,EAAGgiB,EAAKu/D,EAAWpgF,OAAQnB,EAAIgiB,IAAMhiB,EAChDqmL,EAAgBt2J,KAAYwxD,EAAWvhF,GAEzC,OAAO+vB,EAUF,SAASm9K,GACd7mB,EACAt2J,EACA7nB,EACAo+K,GAEA,IAAK,IAAItmL,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EAEjD,IADA,IAAMuhF,EAAar5E,EAAYlI,GACtBoV,EAAI,EAAGA,EAAIkxK,IAAUlxK,EAC5BixK,EAAgBt2J,KAAYwxD,EAAWnsE,GAG3C,OAAO2a,EAWF,SAASo9K,GACd9mB,EACAt2J,EACAq9K,EACA9mB,EACA+mB,GAIA,IAFA,IAAM38B,EAAO28B,GAAsB,GAC/BrtM,EAAI,EACCoV,EAAI,EAAGypF,EAAKuuG,EAAajsM,OAAQiU,EAAIypF,IAAMzpF,EAAG,CACrD,IAAMwyD,EAAMslI,GACV7mB,EACAt2J,EACAq9K,EAAah4L,GACbkxK,GAEF5V,EAAK1wK,KAAO4nE,EACZ73C,EAAS63C,EAGX,OADA8oG,EAAKvvK,OAASnB,EACP0wK,ECwBF,SAAS48B,GACdjnB,EACAt2J,EACA63C,EACA0+G,EACA6jB,EACAoD,EACAC,GAEA,IAAM96L,GAAKk1D,EAAM73C,GAAUu2J,EAC3B,GAAI5zK,EAAI,EAAG,CACT,KAAOqd,EAAS63C,EAAK73C,GAAUu2J,EAC7BinB,EAA0BC,KAAsBnnB,EAAgBt2J,GAChEw9K,EAA0BC,KACxBnnB,EAAgBt2J,EAAS,GAE7B,OAAOy9K,EAGT,IAAMn5I,EAAU,IAAIz1D,MAAM8T,GAC1B2hD,EAAQ,GAAK,EACbA,EAAQ3hD,EAAI,GAAK,EAIjB,IAFA,IAAM2sB,EAAQ,CAACtP,EAAQ63C,EAAM0+G,GACzB1+J,EAAQ,EACLyX,EAAMl+B,OAAS,GAAG,CAQvB,IAPA,IAAMurH,EAAOrtF,EAAMwgC,MACb4sD,EAAQptF,EAAMwgC,MAChB4tI,EAAqB,EACnBhqD,EAAK4iC,EAAgB55D,GACrBi3B,EAAK2iC,EAAgB55D,EAAQ,GAC7Bu6D,EAAKX,EAAgB35D,GACrBu6D,EAAKZ,EAAgB35D,EAAO,GACzB1sH,EAAIysH,EAAQ65D,EAAQtmL,EAAI0sH,EAAM1sH,GAAKsmL,EAAQ,CAClD,IAEM,EAAkBwC,GAFdzC,EAAgBrmL,GAChBqmL,EAAgBrmL,EAAI,GACuByjJ,EAAIC,EAAIsjC,EAAIC,GAC7D,EAAkBwmB,IACpB7lL,EAAQ5nB,EACRytM,EAAqB,GAGrBA,EAAqBtD,IACvB91I,GAASzsC,EAAQmI,GAAUu2J,GAAU,EACjC75D,EAAQ65D,EAAS1+J,GACnByX,EAAMn5B,KAAKumH,EAAO7kG,GAEhBA,EAAQ0+J,EAAS55D,GACnBrtF,EAAMn5B,KAAK0hB,EAAO8kG,IAIxB,IAAS1sH,EAAI,EAAGA,EAAI0S,IAAK1S,EACnBq0D,EAAQr0D,KACVutM,EAA0BC,KACxBnnB,EAAgBt2J,EAAS/vB,EAAIsmL,GAC/BinB,EAA0BC,KACxBnnB,EAAgBt2J,EAAS/vB,EAAIsmL,EAAS,IAG5C,OAAOknB,EAeF,SAASE,GACdrnB,EACAt2J,EACA2gJ,EACA4V,EACA6jB,EACAoD,EACAC,EACAG,GAEA,IAAK,IAAI3tM,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjBwtM,EAAmBF,GACjBjnB,EACAt2J,EACA63C,EACA0+G,EACA6jB,EACAoD,EACAC,GAEFG,EAAeznM,KAAKsnM,GACpBz9K,EAAS63C,EAEX,OAAO4lI,EAwGF,SAASI,GAAKjtM,EAAOw3B,GAC1B,OAAOA,EAAY94B,KAAKirC,MAAM3pC,EAAQw3B,GAsBjC,SAAS01K,GACdxnB,EACAt2J,EACA63C,EACA0+G,EACAnuJ,EACAo1K,EACAC,GAGA,GAAIz9K,GAAU63C,EACZ,OAAO4lI,EAGT,IAQIxmB,EAAIC,EARJxjC,EAAKmqD,GAAKvnB,EAAgBt2J,GAASoI,GACnCurH,EAAKkqD,GAAKvnB,EAAgBt2J,EAAS,GAAIoI,GAC3CpI,GAAUu2J,EAEVinB,EAA0BC,KAAsB/pD,EAChD8pD,EAA0BC,KAAsB9pD,EAIhD,GAIE,GAHAsjC,EAAK4mB,GAAKvnB,EAAgBt2J,GAASoI,GACnC8uJ,EAAK2mB,GAAKvnB,EAAgBt2J,EAAS,GAAIoI,IACvCpI,GAAUu2J,IACI1+G,EAOZ,OAFA2lI,EAA0BC,KAAsBxmB,EAChDumB,EAA0BC,KAAsBvmB,EACzCumB,QAEFxmB,GAAMvjC,GAAMwjC,GAAMvjC,GAC3B,KAAO3zH,EAAS63C,GAAK,CAEnB,IAAMs/G,EAAK0mB,GAAKvnB,EAAgBt2J,GAASoI,GACnCgvJ,EAAKymB,GAAKvnB,EAAgBt2J,EAAS,GAAIoI,GAG7C,GAFApI,GAAUu2J,EAENY,GAAMF,GAAMG,GAAMF,EAAtB,CAIA,IAAM1C,EAAMyC,EAAKvjC,EACX+gC,EAAMyC,EAAKvjC,EAEXihC,EAAMuC,EAAKzjC,EACXmhC,EAAMuC,EAAKzjC,EAKf6gC,EAAMK,GAAOJ,EAAMG,IACjBJ,EAAM,GAAKI,EAAMJ,GAAQA,GAAOI,GAAQJ,EAAM,GAAKI,EAAMJ,KACzDC,EAAM,GAAKI,EAAMJ,GAAQA,GAAOI,GAAQJ,EAAM,GAAKI,EAAMJ,IAG3DwC,EAAKE,EACLD,EAAKE,IAMPomB,EAA0BC,KAAsBxmB,EAChDumB,EAA0BC,KAAsBvmB,EAChDxjC,EAAKujC,EACLtjC,EAAKujC,EACLD,EAAKE,EACLD,EAAKE,IAKP,OAFAomB,EAA0BC,KAAsBxmB,EAChDumB,EAA0BC,KAAsBvmB,EACzCumB,EAeF,SAASM,GACdznB,EACAt2J,EACA2gJ,EACA4V,EACAnuJ,EACAo1K,EACAC,EACAG,GAEA,IAAK,IAAI3tM,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjBwtM,EAAmBK,GACjBxnB,EACAt2J,EACA63C,EACA0+G,EACAnuJ,EACAo1K,EACAC,GAEFG,EAAeznM,KAAKsnM,GACpBz9K,EAAS63C,EAEX,OAAO4lI,ECvaF,SAASO,GACd1nB,EACAt2J,EACA63C,EACA0+G,EACA0nB,GAIA,IAFA,IAAM9lM,OAAkChG,IAApB8rM,EAAgCA,EAAkB,GAClEhuM,EAAI,EACCoV,EAAI2a,EAAQ3a,EAAIwyD,EAAKxyD,GAAKkxK,EACjCp+K,EAAYlI,KAAOqmL,EAAgB59K,MAAM2M,EAAGA,EAAIkxK,GAGlD,OADAp+K,EAAY/G,OAASnB,EACdkI,EAWF,SAAS+lM,GACd5nB,EACAt2J,EACA2gJ,EACA4V,EACA4nB,GAIA,IAFA,IAAMd,OAAoClrM,IAArBgsM,EAAiCA,EAAmB,GACrEluM,EAAI,EACCoV,EAAI,EAAGypF,EAAK6xE,EAAKvvK,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC7C,IAAMwyD,EAAM8oG,EAAKt7J,GACjBg4L,EAAaptM,KAAO+tM,GAClB1nB,EACAt2J,EACA63C,EACA0+G,EACA8mB,EAAaptM,IAEf+vB,EAAS63C,EAGX,OADAwlI,EAAajsM,OAASnB,EACfotM,EAYF,SAASe,GACd9nB,EACAt2J,EACAq+K,EACA9nB,EACA+nB,GAKA,IAHA,IAAMC,OACkBpsM,IAAtBmsM,EAAkCA,EAAoB,GACpDruM,EAAI,EACCoV,EAAI,EAAGypF,EAAKuvG,EAAMjtM,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC9C,IAAMs7J,EAAO09B,EAAMh5L,GACnBk5L,EAActuM,KAAOiuM,GACnB5nB,EACAt2J,EACA2gJ,EACA4V,EACAgoB,EAActuM,IAEhB+vB,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAG9B,OADAmtM,EAAcntM,OAASnB,EAChBsuM,EChFF,SAASC,GAAWloB,EAAiBt2J,EAAQ63C,EAAK0+G,GAIvD,IAHA,IAAIkoB,EAAY,EACZ/qD,EAAK4iC,EAAgBz+G,EAAM0+G,GAC3B5iC,EAAK2iC,EAAgBz+G,EAAM0+G,EAAS,GACjCv2J,EAAS63C,EAAK73C,GAAUu2J,EAAQ,CACrC,IAAMU,EAAKX,EAAgBt2J,GACrBk3J,EAAKZ,EAAgBt2J,EAAS,GACpCy+K,GAAa9qD,EAAKsjC,EAAKvjC,EAAKwjC,EAC5BxjC,EAAKujC,EACLtjC,EAAKujC,EAEP,OAAOunB,EAAY,EAUd,SAASC,GAAYpoB,EAAiBt2J,EAAQ2gJ,EAAM4V,GAEzD,IADA,IAAIx4F,EAAO,EACF9tF,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjB8tF,GAAQygH,GAAWloB,EAAiBt2J,EAAQ63C,EAAK0+G,GACjDv2J,EAAS63C,EAEX,OAAOkmB,E,+dCpBT,eAME,WAAY5lF,EAAa+jM,GAAzB,MACE,cAAO,K,OAMP,EAAKyC,WAAa,EAMlB,EAAKC,mBAAqB,OAEPzsM,IAAf+pM,GAA6BrtM,MAAMC,QAAQqJ,EAAY,IAMzD,EAAKnJ,eACyD,EAG5DktM,GATF,EAAKF,mBACHE,EAC6B,G,EA+IrC,OAvKyB,QAyCvB,YAAA3jM,MAAA,WACE,OAAO,IAAIsmM,EAAW9wM,KAAKuoL,gBAAgB59K,QAAS3K,KAAK2rC,SAU3D,YAAAghK,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GAC9Di/K,GAEL7sM,KAAK6wM,mBAAqB7wM,KAAKgvL,gBACjChvL,KAAK4wM,UAAYrvM,KAAKkrC,KACpBiiK,GACE1uM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACL,IAGJxoL,KAAK6wM,kBAAoB7wM,KAAKgvL,eAEzB6f,GACL7uM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLxoL,KAAK4wM,WACL,EACAjjL,EACAC,EACAg/K,EACAC,KASJ,YAAAl8L,QAAA,WACE,OAAO8/L,GACLzwM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,SAST,YAAAlnL,eAAA,WACE,OAAO2uM,GACLjwM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,SAST,YAAAulB,8BAAA,SAA8B1B,GAC5B,IAAMoD,EAA4B,GAUlC,OATAA,EAA0BpsM,OAASmsM,GACjCxvM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACL6jB,EACAoD,EACA,GAEK,IAAIqB,EAAWrB,EAA2B,QAQnD,YAAAxlM,QAAA,WACE,MAAO,cAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,OAAO,GAST,YAAAra,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzBvoL,KAAKuoL,gBAAgBllL,OAAS+rM,GAC5BpvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,QAEPxoL,KAAK2zF,WAET,EAvKA,CAAyB,IAyKzB,Y,+dC9KA,eAKE,WAAYvpF,EAAa+jM,GAAzB,MACE,cAAO,K,OACP,EAAKltM,eAAemJ,EAAa+jM,G,EAgGrC,OAvGoB,QAelB,YAAA3jM,MAAA,WACE,IAAM6qB,EAAQ,IAAI3lB,EAAM1P,KAAKuoL,gBAAgB59K,QAAS3K,KAAK2rC,QAE3D,OADAtW,EAAM66J,gBAAgBlwL,MACfq1B,GAUT,YAAAs3K,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,IAAMtkB,EAAkBvoL,KAAKuoL,gBACvBymB,EAAkB,GACtBrhL,EACAC,EACA26J,EAAgB,GAChBA,EAAgB,IAElB,GAAIymB,EAAkBnC,EAAoB,CAExC,IADA,IAAMrkB,EAASxoL,KAAKwoL,OACXtmL,EAAI,EAAGA,EAAIsmL,IAAUtmL,EAC5B0qM,EAAa1qM,GAAKqmL,EAAgBrmL,GAGpC,OADA0qM,EAAavpM,OAASmlL,EACfwmB,EAEP,OAAOnC,GASX,YAAAvrM,eAAA,WACE,OAAQtB,KAAKuoL,gBAAuBvoL,KAAKuoL,gBAAgB59K,QAA1B,IAQjC,YAAAsiM,cAAA,SAAc3xL,GACZ,OAAO+sK,GAA6BroL,KAAKuoL,gBAAiBjtK,IAQ5D,YAAArR,QAAA,WACE,MAAO,SAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,OAAOksK,GAAWlsK,EAAQtb,KAAKuoL,gBAAgB,GAAIvoL,KAAKuoL,gBAAgB,KAQ1E,YAAAtnL,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzBvoL,KAAKuoL,gBAAgBllL,OAAS8rM,GAC5BnvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,QAEPxoL,KAAK2zF,WAET,EAvGA,CAAoB,IAyGpB,YC1GO,SAASo9G,GACdxoB,EACAt2J,EACA63C,EACA0+G,EACAltK,GAmBA,OAjBgBqtK,GACdrtK,GAKA,SAAUmoE,GACR,OAAQutH,GACNzoB,EACAt2J,EACA63C,EACA0+G,EACA/kG,EAAW,GACXA,EAAW,OAgBZ,SAASutH,GACdzoB,EACAt2J,EACA63C,EACA0+G,EACA76J,EACAC,GAYA,IAHA,IAAIqjL,EAAK,EACLtrD,EAAK4iC,EAAgBz+G,EAAM0+G,GAC3B5iC,EAAK2iC,EAAgBz+G,EAAM0+G,EAAS,GACjCv2J,EAAS63C,EAAK73C,GAAUu2J,EAAQ,CACrC,IAAMU,EAAKX,EAAgBt2J,GACrBk3J,EAAKZ,EAAgBt2J,EAAS,GAChC2zH,GAAMh4H,EACJu7J,EAAKv7J,IAAMs7J,EAAKvjC,IAAO/3H,EAAIg4H,IAAOj4H,EAAIg4H,IAAOwjC,EAAKvjC,GAAM,GAC1DqrD,IAEO9nB,GAAMv7J,IAAMs7J,EAAKvjC,IAAO/3H,EAAIg4H,IAAOj4H,EAAIg4H,IAAOwjC,EAAKvjC,GAAM,GAClEqrD,IAEFtrD,EAAKujC,EACLtjC,EAAKujC,EAEP,OAAc,IAAP8nB,EAYF,SAASC,GACd3oB,EACAt2J,EACA2gJ,EACA4V,EACA76J,EACAC,GAEA,GAAoB,IAAhBglJ,EAAKvvK,OACP,OAAO,EAET,IAAK2tM,GAAqBzoB,EAAiBt2J,EAAQ2gJ,EAAK,GAAI4V,EAAQ76J,EAAGC,GACrE,OAAO,EAET,IAAK,IAAI1rB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C,GACE8uM,GAAqBzoB,EAAiB3V,EAAK1wK,EAAI,GAAI0wK,EAAK1wK,GAAIsmL,EAAQ76J,EAAGC,GAEvE,OAAO,EAGX,OAAO,EC9FF,SAASujL,GACd5oB,EACAt2J,EACA2gJ,EACA4V,EACA4oB,EACAC,EACA9F,GAOA,IALA,IAAIrpM,EAAGgiB,EAAIyJ,EAAGg4H,EAAIujC,EAAItjC,EAAIujC,EACpBv7J,EAAIwjL,EAAYC,EAAoB,GAEpCC,EAAgB,GAEbh9L,EAAI,EAAG+zD,EAAKuqG,EAAKvvK,OAAQiR,EAAI+zD,IAAM/zD,EAAG,CAC7C,IAAMw1D,EAAM8oG,EAAKt+J,GAGjB,IAFAqxI,EAAK4iC,EAAgBz+G,EAAM0+G,GAC3B5iC,EAAK2iC,EAAgBz+G,EAAM0+G,EAAS,GAC/BtmL,EAAI+vB,EAAQ/vB,EAAI4nE,EAAK5nE,GAAKsmL,EAC7BU,EAAKX,EAAgBrmL,GACrBinL,EAAKZ,EAAgBrmL,EAAI,IACpB0rB,GAAKg4H,GAAMujC,GAAMv7J,GAAOg4H,GAAMh4H,GAAKA,GAAKu7J,KAC3Cx7J,GAAMC,EAAIg4H,IAAOujC,EAAKvjC,IAAQsjC,EAAKvjC,GAAMA,EACzC2rD,EAAclpM,KAAKulB,IAErBg4H,EAAKujC,EACLtjC,EAAKujC,EAKT,IAAIooB,EAASj6I,IACTk6I,GAAoBx7I,EAAAA,EAGxB,IAFAs7I,EAAcnnL,KAAK+5J,GACnBv+B,EAAK2rD,EAAc,GACdpvM,EAAI,EAAGgiB,EAAKotL,EAAcjuM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAClDgnL,EAAKooB,EAAcpvM,GACnB,IAAMuvM,EAAgBlwM,KAAKyoB,IAAIk/J,EAAKvjC,GAChC8rD,EAAgBD,GAEdN,GAAsB3oB,EAAiBt2J,EAAQ2gJ,EAAM4V,EADzD76J,GAAKg4H,EAAKujC,GAAM,EACoDt7J,KAClE2jL,EAAS5jL,EACT6jL,EAAmBC,GAGvB9rD,EAAKujC,EAOP,OALIloL,MAAMuwM,KAGRA,EAASH,EAAYC,IAEnB9F,GACFA,EAASnjM,KAAKmpM,EAAQ3jL,EAAG4jL,GAClBjG,GAEA,CAACgG,EAAQ3jL,EAAG4jL,GC1DhB,SAASjqM,GAAQghL,EAAiBt2J,EAAQ63C,EAAK0+G,EAAQjwJ,GAC5D,IAAIhZ,EAEJ,IADA0S,GAAUu2J,EACHv2J,EAAS63C,EAAK73C,GAAUu2J,EAK7B,GAJAjpK,EAAMgZ,EACJgwJ,EAAgB59K,MAAMsnB,EAASu2J,EAAQv2J,GACvCs2J,EAAgB59K,MAAMsnB,EAAQA,EAASu2J,IAGvC,OAAOjpK,EAGX,OAAO,ECRF,SAASmyL,GACdnpB,EACAt2J,EACA63C,EACA0+G,EACAltK,GAEA,IAAMq2L,EAAoBlpB,GjE2KnB,CAACzyH,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KiEzKrCuyH,EACAt2J,EACA63C,EACA0+G,GAEF,QAAKplI,GAAW9nC,EAAQq2L,OAGpBlqB,GAAensK,EAAQq2L,KAGvBA,EAAkB,IAAMr2L,EAAO,IAAMq2L,EAAkB,IAAMr2L,EAAO,KAGpEq2L,EAAkB,IAAMr2L,EAAO,IAAMq2L,EAAkB,IAAMr2L,EAAO,IAGjE/T,GACLghL,EACAt2J,EACA63C,EACA0+G,GAOA,SAAUopB,EAAQC,GAChB,OjEsrBC,SAA2Bv2L,EAAQizD,EAAOzE,GAC/C,IAAI1mB,GAAa,EACX0uJ,EAAWlqB,GAAuBtsK,EAAQizD,GAC1CwjI,EAASnqB,GAAuBtsK,EAAQwuD,GAC9C,GACEgoI,IAAa5pB,GACb6pB,IAAW7pB,EAEX9kI,GAAa,MACR,CACL,IAAMykI,EAAOvsK,EAAO,GACdwsK,EAAOxsK,EAAO,GACdysK,EAAOzsK,EAAO,GACd0sK,EAAO1sK,EAAO,GACd02L,EAASzjI,EAAM,GACf0jI,EAAS1jI,EAAM,GACf2jI,EAAOpoI,EAAI,GACXqoI,EAAOroI,EAAI,GACXsoI,GAASD,EAAOF,IAAWC,EAAOF,GACpCrkL,OAAC,EAAEC,OAAC,EACDmkL,EAAS7pB,KAAyB4pB,EAAW5pB,KAGlD9kI,GADAz1B,EAAIukL,GAAQC,EAAOnqB,GAAQoqB,IACTvqB,GAAQl6J,GAAKo6J,GAG9B3kI,KACE2uJ,EAAS7pB,IACV4pB,EAAW5pB,IAIb9kI,GADAx1B,EAAIukL,GAAQD,EAAOnqB,GAAQqqB,IACTtqB,GAAQl6J,GAAKo6J,GAG9B5kI,KACE2uJ,EAAS7pB,IACV4pB,EAAW5pB,IAIb9kI,GADAz1B,EAAIukL,GAAQC,EAAOrqB,GAAQsqB,IACTvqB,GAAQl6J,GAAKo6J,GAG9B3kI,KACE2uJ,EAAS7pB,IACV4pB,EAAW5pB,IAIb9kI,GADAx1B,EAAIukL,GAAQD,EAAOrqB,GAAQuqB,IACTtqB,GAAQl6J,GAAKo6J,GAGnC,OAAO5kI,EiE3uBIivJ,CAAkB/2L,EAAQs2L,EAAQC,SAuCxC,SAASS,GACd/pB,EACAt2J,EACA63C,EACA0+G,EACAltK,GAEA,QAAIo2L,GAAqBnpB,EAAiBt2J,EAAQ63C,EAAK0+G,EAAQltK,OAI7D01L,GACEzoB,EACAt2J,EACA63C,EACA0+G,EACAltK,EAAO,GACPA,EAAO,QAMT01L,GACEzoB,EACAt2J,EACA63C,EACA0+G,EACAltK,EAAO,GACPA,EAAO,QAMT01L,GACEzoB,EACAt2J,EACA63C,EACA0+G,EACAltK,EAAO,GACPA,EAAO,OAMT01L,GACEzoB,EACAt2J,EACA63C,EACA0+G,EACAltK,EAAO,GACPA,EAAO,OAgBN,SAASi3L,GACdhqB,EACAt2J,EACA2gJ,EACA4V,EACAltK,GAEA,IAAKg3L,GAAqB/pB,EAAiBt2J,EAAQ2gJ,EAAK,GAAI4V,EAAQltK,GAClE,OAAO,EAET,GAAoB,IAAhBs3J,EAAKvvK,OACP,OAAO,EAET,IAAK,IAAInB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C,GACE6uM,GACExoB,EACA3V,EAAK1wK,EAAI,GACT0wK,EAAK1wK,GACLsmL,EACAltK,KAICo2L,GACCnpB,EACA3V,EAAK1wK,EAAI,GACT0wK,EAAK1wK,GACLsmL,EACAltK,GAGF,OAAO,EAIb,OAAO,ECjMF,SAASlR,GAAYm+K,EAAiBt2J,EAAQ63C,EAAK0+G,GACxD,KAAOv2J,EAAS63C,EAAM0+G,GAAQ,CAC5B,IAAK,IAAItmL,EAAI,EAAGA,EAAIsmL,IAAUtmL,EAAG,CAC/B,IAAMqiL,EAAMgE,EAAgBt2J,EAAS/vB,GACrCqmL,EAAgBt2J,EAAS/vB,GAAKqmL,EAAgBz+G,EAAM0+G,EAAStmL,GAC7DqmL,EAAgBz+G,EAAM0+G,EAAStmL,GAAKqiL,EAEtCtyJ,GAAUu2J,EACV1+G,GAAO0+G,GCHJ,SAASgqB,GAAsBjqB,EAAiBt2J,EAAQ63C,EAAK0+G,GAMlE,IAHA,IAAI9mI,EAAO,EACPikG,EAAK4iC,EAAgBz+G,EAAM0+G,GAC3B5iC,EAAK2iC,EAAgBz+G,EAAM0+G,EAAS,GACjCv2J,EAAS63C,EAAK73C,GAAUu2J,EAAQ,CACrC,IAAMU,EAAKX,EAAgBt2J,GACrBk3J,EAAKZ,EAAgBt2J,EAAS,GACpCyvB,IAASwnI,EAAKvjC,IAAOwjC,EAAKvjC,GAC1BD,EAAKujC,EACLtjC,EAAKujC,EAEP,OAAgB,IAATznI,OAAat9C,EAAYs9C,EAAO,EAgBlC,SAAS+wJ,GACdlqB,EACAt2J,EACA2gJ,EACA4V,EACAkqB,GAGA,IADA,IAAMp+H,OAAsBlwE,IAAdsuM,GAA0BA,EAC/BxwM,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACXywM,EAAcH,GAClBjqB,EACAt2J,EACA63C,EACA0+G,GAEF,GAAU,IAANtmL,GACF,GAAKoyE,GAASq+H,IAAkBr+H,IAAUq+H,EACxC,OAAO,OAGT,GAAKr+H,IAAUq+H,IAAkBr+H,GAASq+H,EACxC,OAAO,EAGX1gL,EAAS63C,EAEX,OAAO,EAkDF,SAAS8oI,GACdrqB,EACAt2J,EACA2gJ,EACA4V,EACAkqB,GAGA,IADA,IAAMp+H,OAAsBlwE,IAAdsuM,GAA0BA,EAC/BxwM,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACXywM,EAAcH,GAClBjqB,EACAt2J,EACA63C,EACA0+G,IAGM,IAANtmL,EACKoyE,GAASq+H,IAAkBr+H,IAAUq+H,EACrCr+H,IAAUq+H,IAAkBr+H,GAASq+H,IAE1C,GAAmBpqB,EAAiBt2J,EAAQ63C,EAAK0+G,GAEnDv2J,EAAS63C,EAEX,OAAO73C,EAgBF,SAAS4gL,GACdtqB,EACAt2J,EACAq+K,EACA9nB,EACAkqB,GAEA,IAAK,IAAIxwM,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAC3C+vB,EAAS2gL,GACPrqB,EACAt2J,EACAq+K,EAAMpuM,GACNsmL,EACAkqB,GAGJ,OAAOzgL,E,+dCvJT,eAYE,WAAY7nB,EAAa+jM,EAAYoB,GAArC,MACE,cAAO,K,OAMP,EAAKuD,MAAQ,GAMb,EAAKC,4BAA8B,EAMnC,EAAKC,mBAAqB,KAM1B,EAAKpC,WAAa,EAMlB,EAAKC,mBAAqB,EAM1B,EAAKoC,mBAAqB,EAM1B,EAAKC,yBAA2B,UAEb9uM,IAAf+pM,GAA4BoB,GAC9B,EAAKtB,mBACHE,EAC6B,GAE/B,EAAK2E,MAAQvD,GAEb,EAAKtuM,eACgE,EAGnEktM,G,EAyTR,OA7XsB,QA8EpB,YAAAgF,iBAAA,SAAiB1C,GACVzwM,KAAKuoL,gBAGR,EAAOvoL,KAAKuoL,gBAAiBkoB,EAAWztJ,sBAFxChjD,KAAKuoL,gBAAkBkoB,EAAWztJ,qBAAqBr4C,QAIzD3K,KAAK8yM,MAAM1qM,KAAKpI,KAAKuoL,gBAAgBllL,QACrCrD,KAAK2zF,WAQP,YAAAnpF,MAAA,WACE,IAAM6F,EAAU,IAAIhO,EAClBrC,KAAKuoL,gBAAgB59K,QACrB3K,KAAK2rC,OACL3rC,KAAK8yM,MAAMnoM,SAGb,OADA0F,EAAQ6/K,gBAAgBlwL,MACjBqQ,GAUT,YAAAs8L,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GAC9Di/K,GAEL7sM,KAAK6wM,mBAAqB7wM,KAAKgvL,gBACjChvL,KAAK4wM,UAAYrvM,KAAKkrC,KACpBmiK,GACE5uM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACL,IAGJxoL,KAAK6wM,kBAAoB7wM,KAAKgvL,eAEzBkgB,GACLlvM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACLxoL,KAAK4wM,WACL,EACAjjL,EACAC,EACAg/K,EACAC,KASJ,YAAArlB,WAAA,SAAW75J,EAAGC,GACZ,OAAOsjL,GACLlxM,KAAKozM,6BACL,EACApzM,KAAK8yM,MACL9yM,KAAKwoL,OACL76J,EACAC,IASJ,YAAAjd,QAAA,WACE,OAAOggM,GACL3wM,KAAKozM,6BACL,EACApzM,KAAK8yM,MACL9yM,KAAKwoL,SAiBT,YAAAlnL,eAAA,SAAeoxM,GACb,IAAInqB,EAQJ,YAPkBnkL,IAAdsuM,EAEFE,GADArqB,EAAkBvoL,KAAKozM,6BAA6BzoM,QACjB,EAAG3K,KAAK8yM,MAAO9yM,KAAKwoL,OAAQkqB,GAE/DnqB,EAAkBvoL,KAAKuoL,gBAGlB4nB,GAAwB5nB,EAAiB,EAAGvoL,KAAK8yM,MAAO9yM,KAAKwoL,SAMtE,YAAA6qB,QAAA,WACE,OAAOrzM,KAAK8yM,OAMd,YAAAQ,qBAAA,WACE,GAAItzM,KAAK+yM,4BAA8B/yM,KAAKgvL,cAAe,CACzD,IAAMukB,EAAaryM,GAAUlB,KAAK+mB,aAClC/mB,KAAKgzM,mBAAqB7B,GACxBnxM,KAAKozM,6BACL,EACApzM,KAAK8yM,MACL9yM,KAAKwoL,OACL+qB,EACA,GAEFvzM,KAAK+yM,2BAA6B/yM,KAAKgvL,cAEzC,OAAOhvL,KAAKgzM,oBASd,YAAAQ,iBAAA,WACE,OAAO,IAAI,GAAMxzM,KAAKszM,uBAAwB,SAUhD,YAAAG,mBAAA,WACE,OAAOzzM,KAAK8yM,MAAMzvM,QAapB,YAAAqwM,cAAA,SAAc5pL,GACZ,OAAIA,EAAQ,GAAK9pB,KAAK8yM,MAAMzvM,QAAUymB,EAC7B,KAEF,IAAI,GACT9pB,KAAKuoL,gBAAgB59K,MACT,IAAVmf,EAAc,EAAI9pB,KAAK8yM,MAAMhpL,EAAQ,GACrC9pB,KAAK8yM,MAAMhpL,IAEb9pB,KAAK2rC,SAST,YAAAgoK,eAAA,WAME,IALA,IAAMhoK,EAAS3rC,KAAK2rC,OACd48I,EAAkBvoL,KAAKuoL,gBACvB3V,EAAO5yK,KAAK8yM,MACZnC,EAAc,GAChB1+K,EAAS,EACJ/vB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACXuuM,EAAa,IAAI,GACrBloB,EAAgB59K,MAAMsnB,EAAQ63C,GAC9Bn+B,GAEFglK,EAAYvoM,KAAKqoM,GACjBx+K,EAAS63C,EAEX,OAAO6mI,GAMT,YAAAyC,2BAAA,WACE,GAAIpzM,KAAKizM,mBAAqBjzM,KAAKgvL,cAAe,CAChD,IAAMzG,EAAkBvoL,KAAKuoL,gBACzBkqB,GAAuBlqB,EAAiB,EAAGvoL,KAAK8yM,MAAO9yM,KAAKwoL,QAC9DxoL,KAAKkzM,yBAA2B3qB,GAEhCvoL,KAAKkzM,yBAA2B3qB,EAAgB59K,QAChD3K,KAAKkzM,yBAAyB7vM,OAASuvM,GACrC5yM,KAAKkzM,yBACL,EACAlzM,KAAK8yM,MACL9yM,KAAKwoL,SAGTxoL,KAAKizM,kBAAoBjzM,KAAKgvL,cAEhC,OAAOhvL,KAAKkzM,0BAQd,YAAAnF,8BAAA,SAA8B1B,GAC5B,IAAMoD,EAA4B,GAC5BI,EAAiB,GAWvB,OAVAJ,EAA0BpsM,OAAS2sM,GACjChwM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACLjnL,KAAKkrC,KAAK4/J,GACVoD,EACA,EACAI,GAEK,IAAIxtM,EACTotM,EACA,MACAI,IASJ,YAAA5lM,QAAA,WACE,MAAO,WAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,OAAOi3L,GACLvyM,KAAKozM,6BACL,EACApzM,KAAK8yM,MACL9yM,KAAKwoL,OACLltK,IAUJ,YAAAra,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzB,IAAM3V,EAAOy8B,GACXrvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,OACLxoL,KAAK8yM,OAEP9yM,KAAKuoL,gBAAgBllL,OAAyB,IAAhBuvK,EAAKvvK,OAAe,EAAIuvK,EAAKA,EAAKvvK,OAAS,GACzErD,KAAK2zF,WAET,EA7XA,CAAsB,IA+XtB,YAoCO,SAASigH,GAAWt4L,GACzB,IAAMusK,EAAOvsK,EAAO,GACdwsK,EAAOxsK,EAAO,GACdysK,EAAOzsK,EAAO,GACd0sK,EAAO1sK,EAAO,GACditK,EAAkB,CACtBV,EACAC,EACAD,EACAG,EACAD,EACAC,EACAD,EACAD,EACAD,EACAC,GAEF,OAAO,IAAI,GAAQS,EAAiB,MAAmB,CACrDA,EAAgBllL,SAab,SAAS,GAAW8wL,EAAQ0f,EAAWC,GAO5C,IANA,IAAMC,EAAQF,GAAwB,GAChCrrB,EAAS2L,EAAO6Z,YAChBriK,EAASwoJ,EAAO58C,YAChB52I,EAASwzL,EAAOjzL,YAChB8yM,EAAcxrB,GAAUurB,EAAQ,GAChCxrB,EAAkB,IAAIznL,MAAMkzM,GACzB9xM,EAAI,EAAGA,EAAI8xM,EAAa9xM,GAAKsmL,EAAQ,CAC5CD,EAAgBrmL,GAAK,EACrBqmL,EAAgBrmL,EAAI,GAAK,EACzB,IAAK,IAAIoV,EAAI,EAAGA,EAAIkxK,EAAQlxK,IAC1BixK,EAAgBrmL,EAAIoV,GAAK3W,EAAO2W,GAGpC,IAAMs7J,EAAO,CAAC2V,EAAgBllL,QACxBgN,EAAU,IAAI,GAAQk4K,EAAiB58I,EAAQinI,GAErD,OAWK,SAAqBviK,EAAS1P,EAAQC,EAAQkzM,GAKnD,IAJA,IAAMvrB,EAAkBl4K,EAAQ2yC,qBAC1BwlI,EAASn4K,EAAQ29L,YACjB+F,EAAQxrB,EAAgBllL,OAASmlL,EAAS,EAC1CyrB,EAAaH,GAAwB,EAClC5xM,EAAI,EAAGA,GAAK6xM,IAAS7xM,EAAG,CAC/B,IAAM+vB,EAAS/vB,EAAIsmL,EACbvmL,EAAQgyM,EAAiC,EAAnB,GAAO/xM,EAAG6xM,GAAaxyM,KAAKS,GAAM+xM,EAC9DxrB,EAAgBt2J,GAAUtxB,EAAO,GAAKC,EAASW,KAAKY,IAAIF,GACxDsmL,EAAgBt2J,EAAS,GAAKtxB,EAAO,GAAKC,EAASW,KAAKa,IAAIH,GAE9DoO,EAAQsjF,UAvBR,CAAYtjF,EAAS1P,EAAQwzL,EAAO/yL,YAAa0yM,GAC1CzjM,E,+dC7LT,eAIE,WAAYqrL,GAAZ,MACE,cAAO,KAKP,EAAKrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,IAAMlvL,EAAU,GAAO,GAAI+7L,G,OAM3B,EAAKwY,OAAS,CAAC,EAAG,GAMlB,EAAKC,YAAc,GAMnB,EAAKC,oBAOL,EAAKC,YAAcrM,GAAiBroM,EAAQ4qL,WAAY,aAMxD,EAAK+pB,cAAgB,CAAC,IAAK,KAM3B,EAAKC,cAAgB,KAMrB,EAAKC,kBAML,EAAKC,gBAML,EAAKC,YAAc,KAMnB,EAAKC,gBAML,EAAKC,cAML,EAAKC,mBAAgBzwM,EAEjBzE,EAAQ4qL,YACV2c,KAEEvnM,EAAQgB,SACVhB,EAAQgB,OAAS,GAAmBhB,EAAQgB,OAAQ,EAAK0zM,cAEvD10M,EAAQ2b,SACV3b,EAAQ2b,OAAS,GAAe3b,EAAQ2b,OAAQ,EAAK+4L,cAGvD,EAAKS,cAAcn1M,G,EAm9CvB,OA9jDmB,QAkHjB,YAAAm1M,cAAA,SAAcn1M,GACZ,IAAM40B,EAAa,GAAO,GAAI50B,GAC9B,IAAK,IAAM8I,KAAOssM,UACTxgL,EAAW9rB,GAEpBzI,KAAKwvL,cAAcj7J,GAAY,GAE/B,IAAMygL,EA8+CH,SAAoCr1M,GACzC,IAAIs1M,EACA3kB,EACAhmD,EAIE4qE,EAAiB,GACjBC,EAAoB,EAEtB5kB,OACkBnsL,IAApBzE,EAAQ4wL,QAAwB5wL,EAAQ4wL,QAvsDnB,EAysDnBC,OACkBpsL,IAApBzE,EAAQ6wL,QAAwB7wL,EAAQ6wL,QAAU0kB,EAE9CE,OACmBhxM,IAAvBzE,EAAQy1M,WAA2Bz1M,EAAQy1M,WAAaD,EAEpDE,OACmBjxM,IAAvBzE,EAAQ01M,YAA2B11M,EAAQ01M,WAEvCvL,OACmC1lM,IAAvCzE,EAAQ21M,4BACJ31M,EAAQ21M,2BAGR9K,OACuBpmM,IAA3BzE,EAAQ6qM,gBAA+B7qM,EAAQ6qM,eAE3CjgB,EAAayd,GAAiBroM,EAAQ4qL,WAAY,aAClDgrB,EAAahrB,EAAWxjK,YAC1ByuL,EAAsB71M,EAAQ61M,oBAC9Bl6L,EAAS3b,EAAQ2b,OAChB+5L,GAAe/5L,IAAUivK,EAAWwa,aACvCyQ,GAAsB,EACtBl6L,EAASi6L,GAGX,QAA4BnxM,IAAxBzE,EAAQmnB,YAA2B,CACrC,IAAMA,EAAcnnB,EAAQmnB,YAC5BwpK,EAAgBxpK,EAAYypK,GAC5BjmD,OAC2BlmI,IAAzB0iB,EAAY0pK,GACR1pK,EAAY0pK,GACZ1pK,EAAYA,EAAYzjB,OAAS,GAGrC4xM,EADEt1M,EAAQ81M,oBrBh4DT,SACL3uL,EACA+jL,EACAC,EACAC,GAEA,OAAO,SAQK5mJ,EAAYigI,EAAWvvJ,EAAMk1K,GACrC,QAAmB3lM,IAAf+/C,EAA0B,CAC5B,IAAMmsI,EAAgBxpK,EAAY,GAC5BwjH,EAAgBxjH,EAAYA,EAAYzjB,OAAS,GACjD2nM,EAAeF,EACjBR,GACEha,EACAwa,EACAj2K,EACAk2K,GAEFza,EAGJ,GAAIyZ,EAEF,YAD8B3lM,IAAfymM,GAA2BA,EAInCF,GACLxmJ,EACA6mJ,EACA1gE,GALOqgD,GAAMxmI,EAAYmmF,EAAe0gE,GAS5C,IAAM0K,EAASn0M,KAAKqa,IAAIovL,EAAc7mJ,GAChCz2B,EAAInsB,KAAKonD,MAAMw7H,EAAkBr9J,EAAa4uL,EAAQtxB,IAC5D,OAAIt9J,EAAY4G,GAAKs9K,GAAgBt9K,EAAI5G,EAAYzjB,OAAS,EACrDyjB,EAAY4G,EAAI,GAElB5G,EAAY4G,KqBo1DEioL,CACrB7uL,EACAgjL,GACC0L,GAAuBl6L,EACxBkvL,GAGqBI,GACrBta,EACAhmD,EACAw/D,GACC0L,GAAuBl6L,EACxBkvL,OAGC,CAEL,IAKMoL,GALQL,EAGVh0M,KAAK4K,IAAIy8K,GAAS2sB,GAAa1sB,GAAU0sB,IADxC,IAAM,GAAgB,YAAkBhrB,EAAW7nK,oBAI/CohL,GAAoBviM,KAAKs5B,IAAIs6K,EAnwDjB,GAqwDfU,EACJD,EACAr0M,KAAKs5B,IAAIs6K,EAAmBD,EAvwDT,QA2wDC9wM,KADtBksL,EAAgB3wL,EAAQ2wL,eAEtBC,EAAU,EAEVD,EAAgBslB,EAAuBr0M,KAAKs5B,IAAIu6K,EAAY7kB,QAKxCnsL,KADtBkmI,EAAgB3qI,EAAQ2qI,iBAIlBA,OAFoBlmI,IAApBzE,EAAQ6wL,aACoBpsL,IAA1BzE,EAAQ2wL,cACMA,EAAgB/uL,KAAKs5B,IAAIu6K,EAAY5kB,GAErColB,EAAuBr0M,KAAKs5B,IAAIu6K,EAAY5kB,GAG9CqlB,GAKpBrlB,EACED,EACAhvL,KAAKonD,MACHpnD,KAAKoG,IAAI2oL,EAAgBhmD,GAAiB/oI,KAAKoG,IAAIytM,IAEvD9qE,EAAgBgmD,EAAgB/uL,KAAKs5B,IAAIu6K,EAAY5kB,EAAUD,GAG7D0kB,EADEt1M,EAAQ81M,oBrB93DT,SACLK,EACAxlB,EACAylB,EACAlL,EACAC,EACAC,GAEA,OAAO,SAQK5mJ,EAAYigI,EAAWvvJ,EAAMk1K,GACrC,QAAmB3lM,IAAf+/C,EAA0B,CAC5B,IAAM6mJ,EAAeF,EACjBR,GACEha,EACAwa,EACAj2K,EACAk2K,GAEFza,EACEhmD,OACkBlmI,IAAtB2xM,EAAkCA,EAAoB,EAGxD,GAAIhM,EAEF,YAD8B3lM,IAAfymM,GAA2BA,EAInCF,GACLxmJ,EACA6mJ,EACA1gE,GALOqgD,GAAMxmI,EAAYmmF,EAAe0gE,GAS5C,IACMgL,EAAez0M,KAAKgjD,KACxBhjD,KAAKoG,IAAI2oL,EAAgB0a,GAAgBzpM,KAAKoG,IAAImuM,GAFlC,MAIZ7jL,GAAUmyJ,GAAa,GAJX,MAI8B,GAC1CsxB,EAASn0M,KAAKqa,IAAIovL,EAAc7mJ,GAChC8xJ,EAAkB10M,KAAKonD,MAC3BpnD,KAAKoG,IAAI2oL,EAAgBolB,GAAUn0M,KAAKoG,IAAImuM,GAAS7jL,GAEjDikL,EAAY30M,KAAK4K,IAAI6pM,EAAcC,GAEzC,OAAOtrB,GADe2F,EAAgB/uL,KAAKs5B,IAAIi7K,EAAOI,GAC1B5rE,EAAe0gE,KqB00DtBmL,CACrBf,EACA9kB,EACAhmD,EACAw/D,GACC0L,GAAuBl6L,EACxBkvL,GAGqBI,GACrBta,EACAhmD,EACAw/D,GACC0L,GAAuBl6L,EACxBkvL,GAIN,MAAO,CACL4L,WAAYnB,EACZ3kB,cAAeA,EACfhmD,cAAeA,EACfimD,QAASA,EACT6kB,WAAYA,GAjnDqBiB,CAA2B12M,GAM5DK,KAAKs2M,eAAiBtB,EAAyB1kB,cAM/CtwL,KAAKu2M,eAAiBvB,EAAyB1qE,cAM/CtqI,KAAKw2M,YAAcxB,EAAyBI,WAM5Cp1M,KAAKy2M,aAAe92M,EAAQmnB,YAM5B9mB,KAAK02M,SAAW/2M,EAAQgjJ,QAMxB3iJ,KAAK22M,SAAW3B,EAAyBzkB,QAEzC,IAAMqmB,EA+6CH,SAAgCj3M,GACrC,QAAuByE,IAAnBzE,EAAQ2b,OAAsB,CAChC,IAAMwuL,OAC+B1lM,IAAnCzE,EAAQk3M,wBACJl3M,EAAQk3M,uBAEd,OAAOjN,GAAajqM,EAAQ2b,OAAQ3b,EAAQ61M,oBAAqB1L,GAGnE,IAAMvf,EAAayd,GAAiBroM,EAAQ4qL,WAAY,aACxD,IAA2B,IAAvB5qL,EAAQ01M,YAAuB9qB,EAAWwa,WAAY,CACxD,IAAMzpL,EAASivK,EAAWxjK,YAAYpc,QAGtC,OAFA2Q,EAAO,IAAM06C,EAAAA,EACb16C,EAAO,GAAK06C,EAAAA,EACL4zI,GAAatuL,GAAQ,GAAO,GAGrC,OAAO,GAh8CoBw7L,CAAuBn3M,GAC1Cs1M,EAAuBD,EAAyBoB,WAChDW,EAilDH,SAAkCp3M,GAGvC,QAD6ByE,IAA3BzE,EAAQq3M,gBAA+Br3M,EAAQq3M,eAC7B,CAClB,IAAMC,EAAoBt3M,EAAQs3M,kBAClC,YAA0B7yM,IAAtB6yM,IAAyD,IAAtBA,GpBv+DnC58K,EAAY68K,GAAiB,GAAU,GACtC,SAMK7iJ,EAAU01I,GAClB,OAAIA,EACK11I,OAGQjwD,IAAbiwD,EACE9yD,KAAKyoB,IAAIqqC,IAAah6B,EACjB,EAEAg6B,OAGT,KoBs9D6B,IAAtB4iJ,EACF,GAC+B,iBAAtBA,GpBvgEQriM,EoBwgEHqiM,EpBvgEnBE,EAAS,EAAI51M,KAAKS,GAAM4S,EACvB,SAMKy/C,EAAU01I,GAClB,OAAIA,EACK11I,OAGQjwD,IAAbiwD,EACFA,EAAW9yD,KAAKonD,MAAM0L,EAAW8iJ,EAAQ,IAAOA,OAGhD,IoBy/DK,GAGT,OAAO14J,GpB7gEJ,IAAuB7pC,EACtBuiM,EA0BD,IAA0BD,EACzB78K,EoBiZuB+8K,CAAyBz3M,GAMpDK,KAAKq3M,aAAe,CAClB12M,OAAQi2M,EACRzyJ,WAAY8wJ,EACZ5gJ,SAAU0iJ,GAGZ/2M,KAAKo0D,iBAAiChwD,IAArBzE,EAAQ00D,SAAyB10D,EAAQ00D,SAAW,GACrEr0D,KAAKs3M,uBACgBlzM,IAAnBzE,EAAQgB,OAAuBhB,EAAQgB,OAAS,WAEvByD,IAAvBzE,EAAQwkD,WACVnkD,KAAK+2D,cAAcp3D,EAAQwkD,iBACD//C,IAAjBzE,EAAQgmK,MACjB3lK,KAAKu3M,QAAQ53M,EAAQgmK,OAazB,sBAAI,sBAAO,C,IAAX,WACE,OAAO3lK,KAAK02M,U,IAEd,SAAY/zD,GACV,IAAI60D,EAAax3M,KAAK02M,SACtB12M,KAAK02M,SAAW/zD,EAChB,IAAMhiJ,EAASX,KAAKkB,YACpB,GAAIP,EAAQ,CACV,IAAM82M,EAAa90D,GAAW,CAAC,EAAG,EAAG,EAAG,GACxC60D,EAAaA,GAAc,CAAC,EAAG,EAAG,EAAG,GACrC,IAAMrzJ,EAAankD,KAAKyiB,gBAClBi1L,EACHvzJ,EAAa,GACbszJ,EAAW,GAAKD,EAAW,GAAKA,EAAW,GAAKC,EAAW,IACxDE,EACHxzJ,EAAa,GACbszJ,EAAW,GAAKD,EAAW,GAAKA,EAAW,GAAKC,EAAW,IAC9Dz3M,KAAKs3M,kBAAkB,CAAC32M,EAAO,GAAK+2M,EAAS/2M,EAAO,GAAKg3M,M,gCAY7D,YAAAC,mBAAA,SAAmBC,GACjB,IAAMl4M,EAAUK,KAAK0vL,gBAerB,YAZ2BtrL,IAAvBzE,EAAQwkD,WACVxkD,EAAQwkD,WAAankD,KAAKyiB,gBAE1B9iB,EAAQgmK,KAAO3lK,KAAK83M,UAItBn4M,EAAQgB,OAASX,KAAK+3M,oBAGtBp4M,EAAQ00D,SAAWr0D,KAAKs0D,cAEjB,GAAO,GAAI30D,EAASk4M,IAoC7B,YAAAttJ,QAAA,SAAQytJ,GACFh4M,KAAKi4M,UAAYj4M,KAAKk4M,gBACxBl4M,KAAKm4M,mBAAmB,GAG1B,IADA,IAAMn/H,EAAO,IAAIl4E,MAAMkc,UAAU3Z,QACxBnB,EAAI,EAAGA,EAAI82E,EAAK31E,SAAUnB,EAAG,CACpC,IAAIvC,EAAUqd,UAAU9a,GACpBvC,EAAQgB,UACVhB,EAAU,GAAO,GAAIA,IACbgB,OAAS,GACfhB,EAAQgB,OACRX,KAAKkiB,kBAGLviB,EAAQiS,UACVjS,EAAU,GAAO,GAAIA,IACbiS,OAAS,GACfjS,EAAQiS,OACR5R,KAAKkiB,kBAGT82D,EAAK92E,GAAKvC,EAEZK,KAAKo4M,gBAAgBhoM,MAAMpQ,KAAMg5E,IAMnC,YAAAo/H,gBAAA,SAAgBJ,GACd,IACIz/K,EADA8/K,EAAiBr7L,UAAU3Z,OAG7Bg1M,EAAiB,GACwB,mBAAlCr7L,UAAUq7L,EAAiB,KAElC9/K,EAAWvb,UAAUq7L,EAAiB,KACpCA,GAIJ,IADA,IAAIn2M,EAAI,EACDA,EAAIm2M,IAAmBr4M,KAAKi4M,UAAW/1M,EAAG,CAE/C,IAAM2S,EAAQmI,UAAU9a,GACpB2S,EAAMlU,QACRX,KAAKs3M,kBAAkBziM,EAAMlU,aAEZyD,IAAfyQ,EAAM8wJ,KACR3lK,KAAKu3M,QAAQ1iM,EAAM8wJ,MACV9wJ,EAAMsvC,YACfnkD,KAAK+2D,cAAcliD,EAAMsvC,iBAEJ//C,IAAnByQ,EAAMw/C,UACRr0D,KAAKo0D,YAAYv/C,EAAMw/C,UAG3B,GAAInyD,IAAMm2M,EAAV,CAYA,IALA,IAAI9pI,EAAQ1qC,KAAKC,MACbnjC,EAASX,KAAKu0M,cAAc5pM,QAC5Bw5C,EAAankD,KAAKw0M,kBAClBngJ,EAAWr0D,KAAKy0M,gBACd6D,EAAS,GACRp2M,EAAIm2M,IAAkBn2M,EAAG,CAC9B,IAAMvC,EAA2Cqd,UAAU9a,GAErD67K,EAAY,CAChBxvG,MAAOA,EACPiF,UAAU,EACV5hE,OAAQjS,EAAQiS,OAChBy+C,cAA+BjsD,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAC9DkoJ,OAAQ54M,EAAQ44M,QAAUpN,GAC1B5yK,SAAUA,GAmBZ,GAhBI54B,EAAQgB,SACVo9K,EAAUy6B,aAAe73M,EACzBo9K,EAAU06B,aAAe94M,EAAQgB,OAAOgK,QACxChK,EAASo9K,EAAU06B,mBAGAr0M,IAAjBzE,EAAQgmK,MACVoY,EAAU26B,iBAAmBv0J,EAC7B45H,EAAU46B,iBAAmB34M,KAAK44M,qBAAqBj5M,EAAQgmK,MAC/DxhH,EAAa45H,EAAU46B,kBACdh5M,EAAQwkD,aACjB45H,EAAU26B,iBAAmBv0J,EAC7B45H,EAAU46B,iBAAmBh5M,EAAQwkD,WACrCA,EAAa45H,EAAU46B,uBAGAv0M,IAArBzE,EAAQ00D,SAAwB,CAClC0pH,EAAU86B,eAAiBxkJ,EAC3B,IAAMmQ,EACJ,GAAO7kE,EAAQ00D,SAAWA,EAAW9yD,KAAKS,GAAI,EAAIT,KAAKS,IAAMT,KAAKS,GACpE+7K,EAAU+6B,eAAiBzkJ,EAAWmQ,EACtCnQ,EAAW0pH,EAAU+6B,eAInBC,GAAgBh7B,GAClBA,EAAUvqG,UAAW,EAGrBjF,GAASwvG,EAAU1tH,SAErBioJ,EAAOlwM,KAAK21K,GAEd/9K,KAAKm0M,YAAY/rM,KAAKkwM,GACtBt4M,KAAKg5M,QAAQC,GAAoB,GACjCj5M,KAAKk5M,yBA1DC3gL,GACF4gL,GAAkB5gL,GAAU,IAiElC,YAAA2/K,aAAA,WACE,OAAOl4M,KAAKk0M,OAAO+E,IAAsB,GAQ3C,YAAAG,eAAA,WACE,OAAOp5M,KAAKk0M,OAAO+E,IAAwB,GAO7C,YAAAI,iBAAA,WAEE,IAAIznM,EADJ5R,KAAKg5M,QAAQC,IAAqBj5M,KAAKk0M,OAAO+E,KAE9C,IAAK,IAAI/2M,EAAI,EAAGgiB,EAAKlkB,KAAKm0M,YAAY9wM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACzD,IAAMo2M,EAASt4M,KAAKm0M,YAAYjyM,GAIhC,GAHIo2M,EAAO,GAAG//K,UACZ4gL,GAAkBb,EAAO,GAAG//K,UAAU,IAEnC3mB,EACH,IAAK,IAAI0F,EAAI,EAAGypF,EAAKu3G,EAAOj1M,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC/C,IAAMymK,EAAYu6B,EAAOhhM,GACzB,IAAKymK,EAAUvqG,SAAU,CACvB5hE,EAASmsK,EAAUnsK,OACnB,QAKR5R,KAAKm0M,YAAY9wM,OAAS,EAC1BrD,KAAK60M,cAAgBjjM,EACrB5R,KAAK00M,YAAc,KACnB10M,KAAK20M,gBAAkBr9I,IACvBt3D,KAAK40M,cAAgBt9I,KAMvB,YAAA4hJ,kBAAA,WAKE,QAJiC90M,IAA7BpE,KAAKo0M,sBACP7sD,qBAAqBvnJ,KAAKo0M,qBAC1Bp0M,KAAKo0M,yBAAsBhwM,GAExBpE,KAAKk4M,eAAV,CAKA,IAFA,IAAMp0K,EAAMD,KAAKC,MACbw1K,GAAO,EACFp3M,EAAIlC,KAAKm0M,YAAY9wM,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CAGrD,IAFA,IAAMo2M,EAASt4M,KAAKm0M,YAAYjyM,GAC5Bq3M,GAAiB,EACZjiM,EAAI,EAAGypF,EAAKu3G,EAAOj1M,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC/C,IAAMymK,EAAYu6B,EAAOhhM,GACzB,IAAIymK,EAAUvqG,SAAd,CAGA,IAAMgmI,EAAU11K,EAAMi6I,EAAUxvG,MAC5BkrI,EACF17B,EAAU1tH,SAAW,EAAImpJ,EAAUz7B,EAAU1tH,SAAW,EACtDopJ,GAAY,GACd17B,EAAUvqG,UAAW,EACrBimI,EAAW,GAEXF,GAAiB,EAEnB,IAAMG,EAAW37B,EAAUw6B,OAAOkB,GAClC,GAAI17B,EAAUy6B,aAAc,CAC1B,IAAMxzD,EAAK+4B,EAAUy6B,aAAa,GAC5BvzD,EAAK84B,EAAUy6B,aAAa,GAC5B7yD,EAAKo4B,EAAU06B,aAAa,GAC5B7yD,EAAKm4B,EAAU06B,aAAa,GAClCz4M,KAAK00M,YAAc32B,EAAU06B,aAC7B,IAAM9qL,EAAIq3H,EAAK00D,GAAY/zD,EAAKX,GAC1Bp3H,EAAIq3H,EAAKy0D,GAAY9zD,EAAKX,GAChCjlJ,KAAKu0M,cAAgB,CAAC5mL,EAAGC,GAE3B,GAAImwJ,EAAU26B,kBAAoB36B,EAAU46B,iBAAkB,CAC5D,IAAMx0J,EACS,IAAbu1J,EACI37B,EAAU46B,iBACV56B,EAAU26B,iBACVgB,GACG37B,EAAU46B,iBAAmB56B,EAAU26B,kBAChD,GAAI36B,EAAUnsK,OAAQ,CACpB,IAAMijB,EAAO70B,KAAK25M,iBAAiB35M,KAAKs0D,eAClCslJ,EAAwB55M,KAAKq3M,aAAalzJ,WAC9CA,EACA,EACAtvB,GACA,GAEF70B,KAAKu0M,cAAgBv0M,KAAK65M,oBACxBD,EACA77B,EAAUnsK,QAGd5R,KAAK20M,gBAAkB52B,EAAU46B,iBACjC34M,KAAKw0M,kBAAoBrwJ,EACzBnkD,KAAK85M,mBAAkB,GAEzB,QAC+B11M,IAA7B25K,EAAU86B,qBACmBz0M,IAA7B25K,EAAU+6B,eACV,CACA,IAAMzkJ,EACS,IAAbqlJ,EACI,GAAO37B,EAAU+6B,eAAiBv3M,KAAKS,GAAI,EAAIT,KAAKS,IACpDT,KAAKS,GACL+7K,EAAU86B,eACVa,GACG37B,EAAU+6B,eAAiB/6B,EAAU86B,gBAC9C,GAAI96B,EAAUnsK,OAAQ,CACpB,IAAMmoM,EAAsB/5M,KAAKq3M,aAAahjJ,SAC5CA,GACA,GAEFr0D,KAAKu0M,cAAgBv0M,KAAKg6M,sBACxBD,EACAh8B,EAAUnsK,QAGd5R,KAAK40M,cAAgB72B,EAAU+6B,eAC/B94M,KAAKy0M,gBAAkBpgJ,EAIzB,GAFAr0D,KAAK85M,mBAAkB,GACvBR,GAAO,GACFv7B,EAAUvqG,SACb,OAGJ,GAAI+lI,EAAgB,CAClBv5M,KAAKm0M,YAAYjyM,GAAK,KACtBlC,KAAKg5M,QAAQC,IAAqB,GAClCj5M,KAAK00M,YAAc,KACnB10M,KAAK20M,gBAAkBr9I,IACvBt3D,KAAK40M,cAAgBt9I,IACrB,IAAM/+B,EAAW+/K,EAAO,GAAG//K,SACvBA,GACF4gL,GAAkB5gL,GAAU,IAKlCv4B,KAAKm0M,YAAcn0M,KAAKm0M,YAAYjvM,OAAO00G,SACvC0/F,QAAqCl1M,IAA7BpE,KAAKo0M,sBACfp0M,KAAKo0M,oBAAsB9sD,sBACzBtnJ,KAAKk5M,kBAAkBh5J,KAAKlgD,UAUlC,YAAAg6M,sBAAA,SAAsB3lJ,EAAUziD,GAC9B,IAAIjR,EACEs5M,EAAgBj6M,KAAK+3M,oBAM3B,YALsB3zM,IAAlB61M,IAEF,GADAt5M,EAAS,CAACs5M,EAAc,GAAKroM,EAAO,GAAIqoM,EAAc,GAAKroM,EAAO,IACzCyiD,EAAWr0D,KAAKs0D,eACzC15C,GAAcja,EAAQiR,IAEjBjR,GAQT,YAAAk5M,oBAAA,SAAoB11J,EAAYvyC,GAC9B,IAAIjR,EACEs5M,EAAgBj6M,KAAK+3M,oBACrB/rE,EAAoBhsI,KAAKyiB,qBACTre,IAAlB61M,QAAqD71M,IAAtB4nI,IAOjCrrI,EAAS,CALPiR,EAAO,GACNuyC,GAAcvyC,EAAO,GAAKqoM,EAAc,IAAOjuE,EAEhDp6H,EAAO,GACNuyC,GAAcvyC,EAAO,GAAKqoM,EAAc,IAAOjuE,IAGpD,OAAOrrI,GAST,YAAAg5M,iBAAA,SAAiBO,GACf,IAAMrlL,EAAO70B,KAAKs0M,cAClB,GAAI4F,EAAc,CAChB,IAAMr5C,EAAIhsI,EAAK,GACTm0B,EAAIn0B,EAAK,GACf,MAAO,CACLtzB,KAAKyoB,IAAI62I,EAAIt/J,KAAKY,IAAI+3M,IACpB34M,KAAKyoB,IAAIg/B,EAAIznD,KAAKa,IAAI83M,IACxB34M,KAAKyoB,IAAI62I,EAAIt/J,KAAKa,IAAI83M,IACpB34M,KAAKyoB,IAAIg/B,EAAIznD,KAAKY,IAAI+3M,KAG1B,OAAOrlL,GAWX,YAAAslL,gBAAA,SAAgBC,GACdp6M,KAAKs0M,cAAgBxzM,MAAMC,QAAQq5M,GAC/BA,EAASzvM,QACT,CAAC,IAAK,KACL3K,KAAKk4M,gBACRl4M,KAAKm4M,mBAAmB,IAU5B,YAAAj3M,UAAA,WACE,IAAMP,EAASX,KAAK+3M,oBACpB,OAAKp3M,EAGEuoM,GAAiBvoM,EAAQX,KAAKkiB,iBAF5BvhB,GASX,YAAAo3M,kBAAA,WACE,OACE/3M,KAAKwe,IAAIu2L,GAAapR,SAO1B,YAAA0W,eAAA,WACE,OAAOr6M,KAAKq3M,cAMd,YAAAiD,uBAAA,WACE,OAAOt6M,KAAKwe,IAAI,wBAOlB,YAAA+7L,SAAA,SAASC,GACP,YAAkBp2M,IAAdo2M,GACFA,EAAU,GAAKx6M,KAAKk0M,OAAO,GAC3BsG,EAAU,GAAKx6M,KAAKk0M,OAAO,GACpBsG,GAEAx6M,KAAKk0M,OAAOvpM,SAcvB,YAAA8vM,gBAAA,SAAgBL,GAEd,OAAO,GADQp6M,KAAK06M,wBAAwBN,GAChBp6M,KAAKkiB,kBAQnC,YAAAw4L,wBAAA,SAAwBN,GACtB,IAAMvlL,EAAOulL,GAAYp6M,KAAK26M,+BACxBh6M,EACJX,KAAK+3M,oBAEP,EAAOp3M,EAAQ,GACf,IAAMwjD,EAAqCnkD,KAAKyiB,gBAChD,OAAsBre,IAAf+/C,EAA0B,GACjC,IAAMkQ,EAAmCr0D,KAAKs0D,cAG9C,OAFA,OAAoBlwD,IAAbiwD,EAAwB,GAExB20H,GAAkBroL,EAAQwjD,EAAYkQ,EAAUx/B,IAQzD,YAAAo8J,iBAAA,WACE,OAAOjxL,KAAKs2M,gBAQd,YAAAplB,iBAAA,WACE,OAAOlxL,KAAKu2M,gBAQd,YAAAnlB,WAAA,WACE,OACEpxL,KAAK46M,qBAAqB56M,KAAKu2M,iBASnC,YAAAzkB,WAAA,SAAWnsB,GACT3lK,KAAK80M,cAAc90M,KAAK43M,mBAAmB,CAACpnB,QAAS7qB,MAQvD,YAAAwrB,WAAA,WACE,OACEnxL,KAAK46M,qBAAqB56M,KAAKs2M,iBASnC,YAAAvkB,WAAA,SAAWpsB,GACT3lK,KAAK80M,cAAc90M,KAAK43M,mBAAmB,CAACrnB,QAAS5qB,MAQvD,YAAAk1C,uBAAA,SAAuB3zE,GACrBlnI,KAAK80M,cAAc90M,KAAK43M,mBAAmB,CAACnC,oBAAqBvuE,MAQnE,YAAAhlH,cAAA,WACE,OAAOliB,KAAKq0M,aASd,YAAA5xL,cAAA,WACE,OAAwCziB,KAAKwe,IAAIu2L,GAAanR,aAShE,YAAA1uL,eAAA,WACE,OAAOlV,KAAKy2M,cAWd,YAAAqE,uBAAA,SAAuBx/L,EAAQ8+L,GAC7B,OAAOp6M,KAAK+6M,+BACV,GAAez/L,EAAQtb,KAAKkiB,iBAC5Bk4L,IAWJ,YAAAW,+BAAA,SAA+Bz/L,EAAQ8+L,GACrC,IAAMvlL,EAAOulL,GAAYp6M,KAAK26M,+BACxBlQ,EAAc7hB,GAASttK,GAAUuZ,EAAK,GACtC61K,EAAc7hB,GAAUvtK,GAAUuZ,EAAK,GAC7C,OAAOtzB,KAAK4K,IAAIs+L,EAAaC,IAS/B,YAAAsQ,8BAAA,SAA8BC,GAC5B,IAAMnF,EAAQmF,GAAa,EACrB3qB,EAAgBtwL,KAAKk7M,yBAAyBl7M,KAAKs2M,gBACnDhsE,EAAgBtqI,KAAKu2M,eACrBpqM,EAAM5K,KAAKoG,IAAI2oL,EAAgBhmD,GAAiB/oI,KAAKoG,IAAImuM,GAC/D,OAAO,SAKKjzM,GAER,OADmBytL,EAAgB/uL,KAAKs5B,IAAIi7K,EAAOjzM,EAAQsJ,KAYjE,YAAAmoD,YAAA,WACE,OAA8Bt0D,KAAKwe,IAAIu2L,GAAalR,WAStD,YAAAsX,8BAAA,SAA8BF,GAC5B,IAAMG,EAAW75M,KAAKoG,IAAIszM,GAAa,GACjC3qB,EAAgBtwL,KAAKk7M,yBAAyBl7M,KAAKs2M,gBACnDhsE,EAAgBtqI,KAAKu2M,eACrBpqM,EAAM5K,KAAKoG,IAAI2oL,EAAgBhmD,GAAiB8wE,EACtD,OAAO,SAKKj3J,GAER,OADc5iD,KAAKoG,IAAI2oL,EAAgBnsI,GAAci3J,EAAWjvM,IAYtE,YAAAwuM,6BAAA,SAA6BT,GAC3B,IAAIrlL,EAAO70B,KAAK25M,iBAAiBO,GAC3Bv3D,EAAU3iJ,KAAK02M,SAOrB,OANI/zD,IACF9tH,EAAO,CACLA,EAAK,GAAK8tH,EAAQ,GAAKA,EAAQ,GAC/B9tH,EAAK,GAAK8tH,EAAQ,GAAKA,EAAQ,KAG5B9tH,GAMT,YAAAq+J,SAAA,WACE,IAAM3I,EAAavqL,KAAKkiB,gBAClBiiC,EAAankD,KAAKyiB,gBAClB4xC,EAAWr0D,KAAKs0D,cAClB3zD,EACFX,KAAK+3M,oBAEDp1D,EAAU3iJ,KAAK02M,SACrB,GAAI/zD,EAAS,CACX,IAAM04D,EAAcr7M,KAAK26M,+BACzBh6M,EAAS26M,GACP36M,EACAX,KAAK25M,mBACL,CAAC0B,EAAY,GAAK,EAAI14D,EAAQ,GAAI04D,EAAY,GAAK,EAAI14D,EAAQ,IAC/Dx+F,EACAkQ,GAGJ,MAAO,CACL1zD,OAAQA,EAAOgK,MAAM,GACrB4/K,gBAA2BnmL,IAAfmmL,EAA2BA,EAAa,KACpDpmI,WAAYA,EACZo3J,WAAYv7M,KAAK00M,YACjB8G,eAAgBx7M,KAAK20M,gBACrB8G,aAAcz7M,KAAK40M,cACnBvgJ,SAAUA,EACVsxG,KAAM3lK,KAAK83M,YAWf,YAAAA,QAAA,WACE,IAAInyC,EACExhH,EAAankD,KAAKyiB,gBAIxB,YAHmBre,IAAf+/C,IACFwhH,EAAO3lK,KAAK46M,qBAAqBz2J,IAE5BwhH,GAST,YAAAi1C,qBAAA,SAAqBz2J,GACnB,IACIh4C,EAAKipM,EADLnjL,EAASjyB,KAAK22M,UAAY,EAE9B,GAAI32M,KAAKy2M,aAAc,CACrB,IAAMiF,EAAUv3B,EAAkBnkL,KAAKy2M,aAActyJ,EAAY,GACjElyB,EAASypL,EACTvvM,EAAMnM,KAAKy2M,aAAaiF,GAEtBtG,EADEsG,GAAW17M,KAAKy2M,aAAapzM,OAAS,EAC3B,EAEA8I,EAAMnM,KAAKy2M,aAAaiF,EAAU,QAGjDvvM,EAAMnM,KAAKs2M,eACXlB,EAAap1M,KAAKw2M,YAEpB,OAAOvkL,EAAS1wB,KAAKoG,IAAIwE,EAAMg4C,GAAc5iD,KAAKoG,IAAIytM,IASxD,YAAAwD,qBAAA,SAAqBjzC,GACnB,GAAI3lK,KAAKy2M,aAAc,CACrB,GAAIz2M,KAAKy2M,aAAapzM,QAAU,EAC9B,OAAO,EAET,IAAMs4M,EAAYhxB,GAChBppL,KAAKonD,MAAMg9G,GACX,EACA3lK,KAAKy2M,aAAapzM,OAAS,GAEvB+xM,EACJp1M,KAAKy2M,aAAakF,GAAa37M,KAAKy2M,aAAakF,EAAY,GAC/D,OACE37M,KAAKy2M,aAAakF,GAClBp6M,KAAKs5B,IAAIu6K,EAAYzqB,GAAMhlB,EAAOg2C,EAAW,EAAG,IAGlD,OACE37M,KAAKs2M,eAAiB/0M,KAAKs5B,IAAI76B,KAAKw2M,YAAa7wC,EAAO3lK,KAAK22M,WAenE,YAAA3kJ,IAAA,SAAI4pJ,EAAkBlgB,GAEpB,IAAIp7L,EAOJ,GANA,EACEQ,MAAMC,QAAQ66M,IAEV,mBADuB,EAAwC,sBAEnE,IAEE96M,MAAMC,QAAQ66M,GAChB,GAAQ,GAAQA,GAAmB,IAEnCt7M,EAAW,GADLgb,EAAS,GAAesgM,EAAkB57M,KAAKkiB,uBAEhD,GAAmC,WAA/B05L,EAAiB3xM,UAAwB,CAClD,IAAMqR,GAINhb,EAAW,GAJLgb,EAAS,GACbsgM,EAAiB70L,YACjB/mB,KAAKkiB,mBAGEirL,OAAOntM,KAAKs0D,cAAepzD,GAAUoa,QACzC,CACL,IAAM2tL,EAAiB,KAErB3oM,EADE2oM,EAEA2S,EACGpxM,QACAwuI,UAAUiwD,EAAgBjpM,KAAKkiB,iBAGzB05L,EAIf57M,KAAK67M,YAAYv7M,EAAUo7L,IAQ7B,YAAAogB,yBAAA,SAAyBx7M,GAUvB,IATA,IAAM+zD,EAAWr0D,KAAKs0D,cAChBmgI,EAAWlzL,KAAKY,IAAIkyD,GACpBqgI,EAAWnzL,KAAKa,KAAKiyD,GACrB30D,EAASY,EAAS0iD,qBAClBwlI,EAASloL,EAAS0tM,YACpB+N,EAAW/lJ,EAAAA,EACXgmJ,EAAWhmJ,EAAAA,EACXimJ,GAAWjmJ,EAAAA,EACXkmJ,GAAWlmJ,EAAAA,EACN9zD,EAAI,EAAGgiB,EAAKxkB,EAAO2D,OAAQnB,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CACvD,IAAM2zB,EAAOz8M,EAAOwC,GAAKuyL,EAAW/0L,EAAOwC,EAAI,GAAKwyL,EAC9C0nB,EAAO18M,EAAOwC,GAAKwyL,EAAWh1L,EAAOwC,EAAI,GAAKuyL,EACpDsnB,EAAUx6M,KAAKqa,IAAImgM,EAASI,GAC5BH,EAAUz6M,KAAKqa,IAAIogM,EAASI,GAC5BH,EAAU16M,KAAK4K,IAAI8vM,EAASE,GAC5BD,EAAU36M,KAAK4K,IAAI+vM,EAASE,GAE9B,MAAO,CAACL,EAASC,EAASC,EAASC,IAOrC,YAAAL,YAAA,SAAYv7M,EAAUo7L,GACpB,IAAM/7L,EAAU+7L,GAAe,GAC3B7mK,EAAOl1B,EAAQk1B,KACdA,IACHA,EAAO70B,KAAK26M,gCAEd,IAGIrwE,EAHEqY,OACgBv+I,IAApBzE,EAAQgjJ,QAAwBhjJ,EAAQgjJ,QAAU,CAAC,EAAG,EAAG,EAAG,GACxD+4D,OAA8Bt3M,IAApBzE,EAAQ+7M,SAAwB/7M,EAAQ+7M,QAGtDpxE,OAD4BlmI,IAA1BzE,EAAQ2qI,cACM3qI,EAAQ2qI,mBACKlmI,IAApBzE,EAAQ6wL,QACDxwL,KAAK44M,qBAAqBj5M,EAAQ6wL,SAElC,EAGlB,IAAM6rB,EAAgBr8M,KAAK87M,yBAAyBx7M,GAGhD6jD,EAAankD,KAAK+6M,+BAA+BsB,EAAe,CAClExnL,EAAK,GAAK8tH,EAAQ,GAAKA,EAAQ,GAC/B9tH,EAAK,GAAK8tH,EAAQ,GAAKA,EAAQ,KAEjCx+F,EAAanjD,MAAMmjD,GACfmmF,EACA/oI,KAAK4K,IAAIg4C,EAAYmmF,GACzBnmF,EAAankD,KAAKk7M,yBAAyB/2J,EAAYu3J,EAAU,EAAI,GAGrE,IAAMrnJ,EAAWr0D,KAAKs0D,cAChBogI,EAAWnzL,KAAKa,IAAIiyD,GACpBogI,EAAWlzL,KAAKY,IAAIkyD,GACpBioJ,EAAYp7M,GAAUm7M,GAC5BC,EAAU,KAAQ35D,EAAQ,GAAKA,EAAQ,IAAM,EAAKx+F,EAClDm4J,EAAU,KAAQ35D,EAAQ,GAAKA,EAAQ,IAAM,EAAKx+F,EAClD,IAAMo4J,EAAUD,EAAU,GAAK7nB,EAAW6nB,EAAU,GAAK5nB,EACnD8nB,EAAUF,EAAU,GAAK7nB,EAAW6nB,EAAU,GAAK5nB,EACnD/zL,EAASX,KAAKy8M,qBAAqB,CAACF,EAASC,GAAUr4J,GACvD5rB,EAAW54B,EAAQ44B,SAAW54B,EAAQ44B,SAAWssJ,OAE9BzgL,IAArBzE,EAAQ0wD,SACVrwD,KAAKo4M,gBACH,CACEj0J,WAAYA,EACZxjD,OAAQA,EACR0vD,SAAU1wD,EAAQ0wD,SAClBkoJ,OAAQ54M,EAAQ44M,QAElBhgL,IAGFv4B,KAAKw0M,kBAAoBrwJ,EACzBnkD,KAAKu0M,cAAgB5zM,EACrBX,KAAK85M,mBAAkB,GAAO,GAC9BX,GAAkB5gL,GAAU,KAWhC,YAAAmkL,SAAA,SAASj5H,EAAY5uD,EAAMvoB,GACzBtM,KAAK28M,iBACH,GAAmBl5H,EAAYzjF,KAAKkiB,iBACpC2S,EACAvoB,IASJ,YAAAqwM,iBAAA,SAAiBl5H,EAAY5uD,EAAMvoB,GACjCtM,KAAKs3M,kBACHgE,GACE73H,EACA5uD,EACAvoB,EACAtM,KAAKyiB,gBACLziB,KAAKs0D,iBAaX,YAAAsoJ,qBAAA,SAAqBj8M,EAAQwjD,EAAYkQ,EAAUx/B,GACjD,IAAIgoL,EACEl6D,EAAU3iJ,KAAK02M,SACrB,GAAI/zD,GAAWhiJ,EAAQ,CACrB,IAAM06M,EAAcr7M,KAAK26M,8BAA8BtmJ,GACjDyoJ,EAAgBxB,GACpB36M,EACAk0B,EACA,CAACwmL,EAAY,GAAK,EAAI14D,EAAQ,GAAI04D,EAAY,GAAK,EAAI14D,EAAQ,IAC/Dx+F,EACAkQ,GAEFwoJ,EAAc,CACZl8M,EAAO,GAAKm8M,EAAc,GAC1Bn8M,EAAO,GAAKm8M,EAAc,IAG9B,OAAOD,GAMT,YAAA5E,MAAA,WACE,QAASj4M,KAAK+3M,0BAAgD3zM,IAAzBpE,KAAKyiB,iBAQ5C,YAAAs6L,aAAA,SAAaC,GACX,IAAMr8M,EAASuoM,GAAiBlpM,KAAKu0M,cAAev0M,KAAKkiB,iBACzDliB,KAAKm0D,UAAU,CACbxzD,EAAO,GAAKq8M,EAAiB,GAC7Br8M,EAAO,GAAKq8M,EAAiB,MAQjC,YAAAC,qBAAA,SAAqBD,GACnB,IAAMr8M,EAASX,KAAKu0M,cACpBv0M,KAAKs3M,kBAAkB,CACrB32M,EAAO,GAAKq8M,EAAiB,GAC7Br8M,EAAO,GAAKq8M,EAAiB,MAWjC,YAAAE,iBAAA,SAAiBroI,EAAOw4H,GACtB,IAAMz7L,EACJy7L,GAAc,GAAmBA,EAAYrtM,KAAKkiB,iBACpDliB,KAAKm9M,yBAAyBtoI,EAAOjjE,IASvC,YAAAurM,yBAAA,SAAyBtoI,EAAOw4H,GAC9B,IAAM+P,EAAWp9M,KAAKk4M,gBAAkBl4M,KAAKo5M,iBACvCvkL,EAAO70B,KAAK25M,iBAAiB35M,KAAKs0D,eAClC+oJ,EAAgBr9M,KAAKq3M,aAAalzJ,WACtCnkD,KAAKw0M,kBAAoB3/H,EACzB,EACAhgD,EACAuoL,GAGE/P,IACFrtM,KAAKu0M,cAAgBv0M,KAAK65M,oBAAoBwD,EAAehQ,IAG/DrtM,KAAKw0M,mBAAqB3/H,EAC1B70E,KAAK85M,qBAUP,YAAAwD,WAAA,SAAW94I,EAAO6oI,GAChBrtM,KAAKk9M,iBAAiB37M,KAAKs5B,IAAI76B,KAAKw2M,aAAchyI,GAAQ6oI,IAU5D,YAAAkQ,eAAA,SAAe/4I,EAAO6oI,GAChBA,IACFA,EAAa,GAAmBA,EAAYrtM,KAAKkiB,kBAEnDliB,KAAKw9M,uBAAuBh5I,EAAO6oI,IAOrC,YAAAmQ,uBAAA,SAAuBh5I,EAAO6oI,GAC5B,IAAM+P,EAAWp9M,KAAKk4M,gBAAkBl4M,KAAKo5M,iBACvCqE,EAAcz9M,KAAKq3M,aAAahjJ,SACpCr0D,KAAKy0M,gBAAkBjwI,EACvB44I,GAEE/P,IACFrtM,KAAKu0M,cAAgBv0M,KAAKg6M,sBAAsByD,EAAapQ,IAE/DrtM,KAAKy0M,iBAAmBjwI,EACxBxkE,KAAK85M,qBASP,YAAA3lJ,UAAA,SAAUxzD,GACRX,KAAKs3M,kBACH32M,EAAS,GAAmBA,EAAQX,KAAKkiB,iBAAmBvhB,IAQhE,YAAA22M,kBAAA,SAAkB32M,GAChBX,KAAKu0M,cAAgB5zM,EACrBX,KAAK85M,qBAQP,YAAAd,QAAA,SAAQ0E,EAAMl5I,GAGZ,OAFAxkE,KAAKk0M,OAAOwJ,IAASl5I,EACrBxkE,KAAK2zF,UACE3zF,KAAKk0M,OAAOwJ,IASrB,YAAA3mJ,cAAA,SAAc5S,GACZnkD,KAAKw0M,kBAAoBrwJ,EACzBnkD,KAAK85M,qBASP,YAAA1lJ,YAAA,SAAYC,GACVr0D,KAAKy0M,gBAAkBpgJ,EACvBr0D,KAAK85M,qBAQP,YAAAvC,QAAA,SAAQ5xC,GACN3lK,KAAK+2D,cAAc/2D,KAAK44M,qBAAqBjzC,KAW/C,YAAAm0C,kBAAA,SAAkB6D,EAAsBC,GACtC,IAAMR,EACJp9M,KAAKk4M,gBAAkBl4M,KAAKo5M,kBAAoBwE,EAG5CH,EAAcz9M,KAAKq3M,aAAahjJ,SACpCr0D,KAAKy0M,gBACL2I,GAEIvoL,EAAO70B,KAAK25M,iBAAiB8D,GAC7BJ,EAAgBr9M,KAAKq3M,aAAalzJ,WACtCnkD,KAAKw0M,kBACL,EACA3/K,EACAuoL,GAEIS,EAAY79M,KAAKq3M,aAAa12M,OAClCX,KAAKu0M,cACL8I,EACAxoL,EACAuoL,EACAp9M,KAAK48M,qBACH58M,KAAKu0M,cACL8I,EACAI,EACA5oL,IAIA70B,KAAKwe,IAAIu2L,GAAalR,YAAc4Z,GACtCz9M,KAAK8e,IAAIi2L,GAAalR,SAAU4Z,GAE9Bz9M,KAAKwe,IAAIu2L,GAAanR,cAAgByZ,IACxCr9M,KAAK8e,IAAIi2L,GAAanR,WAAYyZ,GAClCr9M,KAAK8e,IAAI,OAAQ9e,KAAK83M,WAAW,IAGhC+F,GACA79M,KAAKwe,IAAIu2L,GAAapR,SACtB,GAAO3jM,KAAKwe,IAAIu2L,GAAapR,QAASka,IAEvC79M,KAAK8e,IAAIi2L,GAAapR,OAAQka,GAG5B79M,KAAKk4M,iBAAmByF,GAC1B39M,KAAKq5M,mBAEPr5M,KAAK60M,mBAAgBzwM,GAYvB,YAAA+zM,mBAAA,SAAmB2F,EAAcC,EAAyB1Q,GACxD,IAAMh9I,OAA4BjsD,IAAjB05M,EAA6BA,EAAe,IACvD15B,EAAY25B,GAA2B,EAEvCN,EAAcz9M,KAAKq3M,aAAahjJ,SAASr0D,KAAKy0M,iBAC9C5/K,EAAO70B,KAAK25M,iBAAiB8D,GAC7BJ,EAAgBr9M,KAAKq3M,aAAalzJ,WACtCnkD,KAAKw0M,kBACLpwB,EACAvvJ,GAEIgpL,EAAY79M,KAAKq3M,aAAa12M,OAClCX,KAAKu0M,cACL8I,EACAxoL,GACA,EACA70B,KAAK48M,qBACH58M,KAAKu0M,cACL8I,EACAI,EACA5oL,IAIJ,GAAiB,IAAbw7B,IAAmBrwD,KAAK60M,cAK1B,OAJA70M,KAAKw0M,kBAAoB6I,EACzBr9M,KAAKy0M,gBAAkBgJ,EACvBz9M,KAAKu0M,cAAgBsJ,OACrB79M,KAAK85M,oBAIP,IAAMloM,EACJy7L,IAA4B,IAAbh9I,EAAiBrwD,KAAK60M,mBAAgBzwM,GACvDpE,KAAK60M,mBAAgBzwM,EAGnBpE,KAAKyiB,kBAAoB46L,GACzBr9M,KAAKs0D,gBAAkBmpJ,GACtBz9M,KAAK+3M,qBACL,GAAO/3M,KAAK+3M,oBAAqB8F,KAE9B79M,KAAKk4M,gBACPl4M,KAAKq5M,mBAGPr5M,KAAKo4M,gBAAgB,CACnB/jJ,SAAUopJ,EACV98M,OAAQk9M,EACR15J,WAAYk5J,EACZhtJ,SAAUA,EACVkoJ,OAAQrN,GACRt5L,OAAQA,MAWd,YAAAosM,iBAAA,WACEh+M,KAAKm4M,mBAAmB,GAExBn4M,KAAKg5M,QAAQC,GAAsB,IAWrC,YAAAgF,eAAA,SAAeH,EAAcC,EAAyB1Q,GACpD,IAAMz7L,EACJy7L,GAAc,GAAmBA,EAAYrtM,KAAKkiB,iBACpDliB,KAAKk+M,uBAAuBJ,EAAcC,EAAyBnsM,IAUrE,YAAAssM,uBAAA,SAAuBJ,EAAcC,EAAyB1Q,GAC5DrtM,KAAKg5M,QAAQC,IAAuB,GAEpCj5M,KAAKm4M,mBAAmB2F,EAAcC,EAAyB1Q,IAUjE,YAAAoP,qBAAA,SAAqBhE,EAAc0F,GACjC,IAAMtpL,EAAO70B,KAAK25M,iBAAiB35M,KAAKs0D,eACxC,OAAOt0D,KAAKq3M,aAAa12M,OACvB83M,EACA0F,GAAwBn+M,KAAKyiB,gBAC7BoS,IAaJ,YAAAupL,mBAAA,SAAmBC,EAAYC,GAC7B,IAAMC,EAAYv+M,KAAK44M,qBAAqByF,GAC5C,OAAOr+M,KAAK46M,qBACV56M,KAAKk7M,yBAAyBqD,EAAWD,KAa7C,YAAApD,yBAAA,SAAyBvC,EAAkB2F,GACzC,IAAMl6B,EAAYk6B,GAAiB,EAC7BzpL,EAAO70B,KAAK25M,iBAAiB35M,KAAKs0D,eAExC,OAAOt0D,KAAKq3M,aAAalzJ,WAAWw0J,EAAkBv0B,EAAWvvJ,IAErE,EA9jDA,CAAmB,IAokDnB,SAASskL,GAAkB5gL,EAAU63E,GACnCnpD,YAAW,WACT1uB,EAAS63E,KACR,GAmME,SAAS2oG,GAAgBh7B,GAC9B,QAAIA,EAAUy6B,cAAgBz6B,EAAU06B,eACjC,GAAiB16B,EAAUy6B,aAAcz6B,EAAU06B,iBAItD16B,EAAU26B,mBAAqB36B,EAAU46B,kBAGzC56B,EAAU86B,iBAAmB96B,EAAU+6B,gBAc7C,SAASwC,GAAkB73H,EAAY5uD,EAAMvoB,EAAU63C,EAAYkQ,GAEjE,IAAMogI,EAAWlzL,KAAKY,KAAKkyD,GACvBqgI,EAAWnzL,KAAKa,KAAKiyD,GACrB8nJ,EAAO14H,EAAW,GAAKgxG,EAAWhxG,EAAW,GAAKixG,EAClD0nB,EAAO34H,EAAW,GAAKgxG,EAAWhxG,EAAW,GAAKixG,EAStD,MAAO,EARPynB,IAAStnL,EAAK,GAAK,EAAIvoB,EAAS,IAAM63C,GAKfswI,GAJvB2nB,IAAS9vM,EAAS,GAAKuoB,EAAK,GAAK,GAAKsvB,IAGtCuwI,GAAYA,GAEI0nB,EAAO3nB,EAAW0nB,EAAOznB,GAK3C,YCpkEO,SAAS8pB,GAAQ3pL,GACtB,OAAOA,EAAK,GAAK,GAAKA,EAAK,GAAK,EA4B3B,SAAS4pL,GAAO5pL,EAAMulL,GAC3B,OAAIt5M,MAAMC,QAAQ8zB,GACTA,QAEUzwB,IAAbg2M,EACFA,EAAW,CAACvlL,EAAMA,IAElBulL,EAAS,GAAKvlL,EACdulL,EAAS,GAAKvlL,GAETulL,G,+dCkFX,SAASsE,GAAuBl6M,GAC1BA,aAAiB,GACnBA,EAAMmvL,eAAe,MAGnBnvL,aAAiB,IACnBA,EAAMqxG,YAAYtuG,QAAQm3M,IAQ9B,SAASC,GAAoBn6M,EAAOlG,GAClC,GAAIkG,aAAiB,GACnBA,EAAMmvL,eAAer1L,QAGvB,GAAIkG,aAAiB,GAEnB,IADA,IAAMue,EAASve,EAAMqxG,YAAYmmF,WACxB95L,EAAI,EAAGgiB,EAAKnB,EAAO1f,OAAQnB,EAAIgiB,IAAMhiB,EAC5Cy8M,GAAoB57L,EAAO7gB,GAAI5D,GAarC,mBAIE,WAAYqB,GAAZ,MACE,cAAO,KAKP,EAAK0O,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,IAAM+vB,EAs/CV,SAA+Bj/M,GAI7B,IAAIk/M,EAAsB,UACUz6M,IAAhCzE,EAAQk/M,sBACVA,EACyC,iBAAhCl/M,EAAQk/M,oBACXlyM,SAAS85D,eAAe9mE,EAAQk/M,qBAChCl/M,EAAQk/M,qBAMhB,IAcI10K,EAaA20K,EAcAC,EAzCE5wL,EAAS,GAET6wL,EACJr/M,EAAQojB,QACiD,mBAA/BpjB,EAAc,OAAW,UACpBA,EAAc,OACzC,IAAI,GAAW,CAACojB,OAAmCpjB,EAAc,SACvEwuB,EAAO8wL,IAA0BD,EAEjC7wL,EAAO8wL,IAAsBt/M,EAAQ8N,OAErC0gB,EAAO8wL,IACLt/M,EAAQ8pC,gBAAgB,GAAO9pC,EAAQ8pC,KAAO,IAAI,QAG3BrlC,IAArBzE,EAAQwqC,WACNrpC,MAAMC,QAAQpB,EAAQwqC,UACxBA,EAAW,IAAI,GAAWxqC,EAAQwqC,SAASx/B,UAE3C,EAC4D,mBAAhChL,EAAgB,SAAU,SACpD,IAEFwqC,EAAsCxqC,EAAgB,gBAK7ByE,IAAzBzE,EAAQm/M,eACNh+M,MAAMC,QAAQpB,EAAQm/M,cACxBA,EAAe,IAAI,GAAWn/M,EAAQm/M,aAAan0M,UAEnD,EAEI,mBADwBhL,EAAoB,aAAU,SAExD,IAEFm/M,EAA0Cn/M,EAAoB,oBAKzCyE,IAArBzE,EAAQo/M,SACNj+M,MAAMC,QAAQpB,EAAQo/M,UACxBA,EAAW,IAAI,GAAWp/M,EAAQo/M,SAASp0M,UAE3C,EAC4D,mBAAhChL,EAAgB,SAAU,SACpD,IAEFo/M,EAAWp/M,EAAQo/M,UAGrBA,EAAW,IAAI,GAGjB,MAAO,CACL50K,SAAUA,EACV20K,aAAcA,EACdD,oBAAqBA,EACrBE,SAAUA,EACV5wL,OAAQA,GAlkDgB+wL,CAAsBv/M,GAM9C,EAAKw/M,gBAML,EAAKC,SAAU,EAGf,EAAKC,yBAA2B,EAAKC,mBAAmBp/J,KAAK,GAM7D,EAAKq/J,sBACyBn7M,IAA5BzE,EAAQ6/M,gBAAgC7/M,EAAQ6/M,gBAAkB,GAMpE,EAAKC,iBACoBr7M,IAAvBzE,EAAQ+/M,WACJ//M,EAAQ+/M,WACRz6B,EAMN,EAAK06B,yBAML,EAAKC,mBAKL,EAAKC,gBAA8C,WACjD7/M,KAAK4/M,wBAAqBx7M,EAC1BpE,KAAK8/M,aAAaj8K,KAAKC,QACvBoc,KAAK,GAMP,EAAK6/J,4BzEtOA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GyE4OrB,EAAKC,4BzE5OA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GyEkPrB,EAAKC,YAAc,EAMnB,EAAKC,YAAc,KAOnB,EAAKC,gBAAkB,KAMvB,EAAKC,yBAA2B,KAMhC,EAAKC,uBAAyB,KAM9B,EAAKC,gCAAkC,KAMvC,EAAKC,UAAY5zM,SAASC,cAAc,OACxC,EAAK2zM,UAAUzkL,UACb,eAAiB,iBAAkBrqB,OAAS,YAAc,IAC5D,EAAK8uM,UAAU56M,MAAM2G,SAAW,WAChC,EAAKi0M,UAAU56M,MAAM66M,SAAW,SAChC,EAAKD,UAAU56M,MAAM2sB,MAAQ,OAC7B,EAAKiuL,UAAU56M,MAAM4sB,OAAS,OAM9B,EAAKkuL,kBAAoB9zM,SAASC,cAAc,OAChD,EAAK6zM,kBAAkB96M,MAAM2G,SAAW,WACxC,EAAKm0M,kBAAkB96M,MAAM+mC,OAAS,IACtC,EAAK+zK,kBAAkB96M,MAAM2sB,MAAQ,OACrC,EAAKmuL,kBAAkB96M,MAAM4sB,OAAS,OACtC,EAAKkuL,kBAAkB96M,MAAM+6M,cAAgB,OAC7C,EAAKD,kBAAkB3kL,UAAY,sBACnC,EAAKykL,UAAU1zM,YAAY,EAAK4zM,mBAMhC,EAAKE,2BAA6Bh0M,SAASC,cAAc,OACzD,EAAK+zM,2BAA2Bh7M,MAAM2G,SAAW,WACjD,EAAKq0M,2BAA2Bh7M,MAAM+mC,OAAS,IAC/C,EAAKi0K,2BAA2Bh7M,MAAM2sB,MAAQ,OAC9C,EAAKquL,2BAA2Bh7M,MAAM4sB,OAAS,OAC/C,EAAKouL,2BAA2Bh7M,MAAM+6M,cAAgB,OACtD,EAAKC,2BAA2B7kL,UAAY,gCAC5C,EAAKykL,UAAU1zM,YAAY,EAAK8zM,4BAMhC,EAAKC,wBAA0B,KAM/B,EAAK7hB,eAAiBp/L,EAAQ++L,cAM9B,EAAKmiB,qBAAuBjC,EAAgBC,oBAM5C,EAAKiC,yBAA2B,KAMhC,EAAK32K,SAAWy0K,EAAgBz0K,UAAY,IAAI,GAMhD,EAAK20K,aAAeF,EAAgBE,cAAgB,IAAI,GAMxD,EAAKiC,UAAYnC,EAAgBG,SAOjC,EAAKiC,gBAAkB,GAMvB,EAAKnuB,UAAY,KAMjB,EAAKouB,qBAAuB,GAM5B,EAAKC,WAAa,IAAI,GACpB,EAAKC,gBAAgBjhK,KAAK,GAC1B,EAAKkhK,kBAAkBlhK,KAAK,IAG9B,EAAK6vI,kBACHkvB,GACA,EAAKoC,0BAEP,EAAKtxB,kBAAkBkvB,GAAkB,EAAKqC,oBAC9C,EAAKvxB,kBAAkBkvB,GAAkB,EAAKsC,oBAC9C,EAAKxxB,kBAAkBkvB,GAAoB,EAAKuC,sBAIhD,EAAKhyB,cAAcovB,EAAgBzwL,QAEnC,IAAM7vB,EAAM,E,OACRqB,EAAQ8pC,MAAU9pC,EAAQ8pC,gBAAgB,IAC5C9pC,EAAQ8pC,KAAK/qC,MAAK,SAAU+iN,GAC1BnjN,EAAI60D,QAAQ,IAAI,GAAKsuJ,OAIzB,EAAKt3K,SAASv+B,iBACZuwL,GAIA,SAAUt8J,GACRA,EAAMshB,QAAQoM,OAAOvtD,OACrBkgD,KAAK,IAGT,EAAK/V,SAASv+B,iBACZuwL,GAIA,SAAUt8J,GACRA,EAAMshB,QAAQoM,OAAO,OACrBrN,KAAK,IAGT,EAAK4+J,aAAalzM,iBAChBuwL,GAIA,SAAUt8J,GACRA,EAAMshB,QAAQoM,OAAOvtD,OACrBkgD,KAAK,IAGT,EAAK4+J,aAAalzM,iBAChBuwL,GAIA,SAAUt8J,GACRA,EAAMshB,QAAQoM,OAAO,OACrBrN,KAAK,IAGT,EAAK6gK,UAAUn1M,iBACbuwL,GAIA,SAAUt8J,GACR7/B,KAAK0hN,oBAC4C7hL,EAAa,UAE9DqgB,KAAK,IAGT,EAAK6gK,UAAUn1M,iBACbuwL,GAIA,SAAUt8J,GACR,IAGMzgC,EAFJygC,EAAa,QAEIl8B,aACRS,IAAPhF,UACKY,KAAKghN,gBAAgB5hN,EAAG6jB,YAEjC4c,EAAMshB,QAAQoM,OAAO,OACrBrN,KAAK,IAGT,EAAK/V,SAAS5iC,QAKZ,SAAUuD,GACRA,EAAQyiD,OAAOvtD,OACfkgD,KAAK,IAGT,EAAK4+J,aAAav3M,QAKhB,SAAUo6M,GACRA,EAAYp0J,OAAOvtD,OACnBkgD,KAAK,IAGT,EAAK6gK,UAAUx5M,QAAQ,EAAKm6M,oBAAoBxhK,KAAK,I,EAkrCzD,OAtgD2B,QA2VzB,YAAA6zI,eAAA,WACE,MAAM,IAAI/0L,MAAM,oDAQlB,YAAAmM,WAAA,SAAWL,GACT9K,KAAKyhF,cAAcr5E,KAAK0C,IAY1B,YAAA82M,eAAA,SAAeD,GACb3hN,KAAK6hN,kBAAkBz5M,KAAKu5M,IAU9B,YAAAv3J,SAAA,SAAS5lD,GACQxE,KAAK8hN,gBAAgBjsG,YAC7BztG,KAAK5D,IAOd,YAAAu9M,gBAAA,SAAgBliL,GACd8+K,GAAoB9+K,EAAMr7B,MAAOxE,OAQnC,YAAAgiN,WAAA,SAAWC,GACTjiN,KAAKkiN,cAAc95M,KAAK65M,IAQ1B,YAAAP,oBAAA,SAAoBO,GAClB,IAAM7iN,EAAK6iN,EAAQt+M,aACRS,IAAPhF,IACFY,KAAKghN,gBAAgB5hN,EAAG6jB,YAAcg/L,GAExCA,EAAQ10J,OAAOvtD,OAOjB,YAAAikL,gBAAA,WACEjkL,KAAKmqC,SAAS0W,QACd7gD,KAAK8+M,aAAaj+J,QAClB7gD,KAAK+gN,UAAUlgK,QACf7gD,KAAKmiN,UAAU,MACf,YAAMl+B,gBAAe,YAqBvB,YAAAm+B,sBAAA,SAAsBhvB,EAAO76J,EAAUmjK,GACrC,GAAK17L,KAAKkgN,aAAgBlgN,KAAK6yL,UAA/B,CAGA,IAAMpvG,EAAazjF,KAAKqiN,+BAA+BjvB,GAEjDiC,OACyBjxL,KAF/Bs3L,OAA8Bt3L,IAAhBs3L,EAA4BA,EAAc,IAE1CrG,aAA6BqG,EAAYrG,aAAe,EAChEG,OACwBpxL,IAA5Bs3L,EAAYlG,YAA4BkG,EAAYlG,YAAc7Q,EAC9D2Q,GAA4C,IAA7BoG,EAAYpG,aACjC,OAAOt1L,KAAK6yL,UAAUuC,2BACpB3xG,EACAzjF,KAAKkgN,YACL7qB,EACAC,EACA/8J,EACA,KACAi9J,EACA,QAYJ,YAAA8sB,mBAAA,SAAmBlvB,EAAOsI,GACxB,IAAM5sL,EAAW,GAQjB,OAPA9O,KAAKoiN,sBACHhvB,GACA,SAAU3vL,GACRqL,EAAS1G,KAAK3E,KAEhBi4L,GAEK5sL,GAQT,YAAAyzM,aAAA,WACE,IAAMx/L,EAAS,GAWf,OAVA,SAASy/L,EAAcxD,GACrBA,EAAWz3M,SAAQ,SAAU/C,GACvBA,aAAiB,GACnBg+M,EAAch+M,EAAMqxG,aAEpB9yF,EAAO3a,KAAK5D,MAIlBg+M,CAAcxiN,KAAK61G,aACZ9yF,GA+BT,YAAAkzK,oBAAA,SAAoB7C,EAAO76J,EAAUmjK,GACnC,GAAK17L,KAAKkgN,aAAgBlgN,KAAK6yL,UAA/B,CAGA,IAAMlzL,EAAU+7L,GAAe,GACzBrG,OACqBjxL,IAAzBzE,EAAQ01L,aAA6B11L,EAAQ01L,aAAe,EACxDG,EAAc71L,EAAQ61L,aAAe7Q,EAC3C,OAAO3kL,KAAK6yL,UAAUoD,oBACpB7C,EACApzL,KAAKkgN,YACL7qB,EACA98J,EACAi9J,KAYJ,YAAAitB,kBAAA,SAAkBrvB,EAAOsI,GACvB,IAAK17L,KAAKkgN,cAAgBlgN,KAAK6yL,UAC7B,OAAO,EAET,IAAMpvG,EAAazjF,KAAKqiN,+BAA+BjvB,GAEjDoC,OACwBpxL,KAF9Bs3L,OAA8Bt3L,IAAhBs3L,EAA4BA,EAAc,IAE1ClG,YAA4BkG,EAAYlG,YAAc7Q,EAC9D0Q,OACyBjxL,IAA7Bs3L,EAAYrG,aAA6BqG,EAAYrG,aAAe,EAChEC,GAA4C,IAA7BoG,EAAYpG,aACjC,OAAOt1L,KAAK6yL,UAAUqD,uBACpBzyG,EACAzjF,KAAKkgN,YACL7qB,EACAC,EACAE,EACA,OAUJ,YAAAktB,mBAAA,SAAmB7iL,GACjB,OAAO7/B,KAAK41D,uBAAuB51D,KAAK+9L,cAAcl+J,KAQxD,YAAA8iL,2BAAA,SAA2B9iL,GACzB,OAAO7/B,KAAKqiN,+BAA+BriN,KAAK+9L,cAAcl+J,KAShE,YAAAk+J,cAAA,SAAcl+J,GACZ,IAAM+iL,EAAmB5iN,KAAKugN,UAAUzxJ,wBAClC+zJ,EAEJ,mBAAoBhjL,EACU,EAAQmvC,eAAe,GACvB,EAEhC,MAAO,CACL6zI,EAAc1+H,QAAUy+H,EAAiBxuI,KACzCyuI,EAAcz+H,QAAUw+H,EAAiBzuI,MAa7C,YAAA2uI,UAAA,WACE,OACE9iN,KAAKwe,IAAIygM,KAWb,YAAA8D,iBAAA,WACE,IAAMt1M,EAASzN,KAAK8iN,YACpB,YAAe1+M,IAAXqJ,EACuB,iBAAXA,EACVd,SAAS85D,eAAeh5D,GACxBA,EAEG,MAWX,YAAAmoD,uBAAA,SAAuBw9H,GACrB,OAAO8V,GACLlpM,KAAKqiN,+BAA+BjvB,GACpCpzL,KAAKgjN,UAAU9gM,kBAUnB,YAAAmgM,+BAAA,SAA+BjvB,GAC7B,IAAMC,EAAarzL,KAAKkgN,YACxB,OAAK7sB,EAGIjjL,EACLijL,EAAW8B,2BACX/B,EAAMzoL,SAJD,MAeX,YAAA82E,YAAA,WACE,OAAOzhF,KAAKmqC,UASd,YAAA+3K,YAAA,WACE,OAAOliN,KAAK+gN,WAWd,YAAAkC,eAAA,SAAe7jN,GACb,IAAM6iN,EAAUjiN,KAAKghN,gBAAgB5hN,EAAG6jB,YACxC,YAAmB7e,IAAZ69M,EAAwBA,EAAU,MAW3C,YAAAJ,gBAAA,WACE,OAAO7hN,KAAK8+M,cASd,YAAAgD,cAAA,WACE,OAAkC9hN,KAAKwe,IAAIygM,KAQ7C,YAAAviB,UAAA,SAAU35K,GACR,IAAMle,EAAQ7E,KAAK8hN,gBACnB,GAAI/+L,aAAkB,GACpBle,EAAM63L,UAAU35K,OADlB,CAKA,IAAMsW,EAAax0B,EAAMgxG,YACzBx8E,EAAWwnB,QACXxnB,EAAWoM,OAAO1iB,KAQpB,YAAA8yF,UAAA,WAEE,OADe71G,KAAK8hN,gBAAgBjsG,aAOtC,YAAAqtG,qBAAA,WAEE,IADA,IAAMrvB,EAAmB7zL,KAAK8hN,gBAAgBvwB,sBACrCrvL,EAAI,EAAGgiB,EAAK2vK,EAAiBxwL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACzD,IAAM2S,EAAQg/K,EAAiB3xL,GAC/B,GAAK2S,EAAM9P,QAAX,CAGA,IAAMo+M,EAAWtuM,EAAMrQ,MAAM+uL,cAC7B,GAAI4vB,IAAaA,EAASx2J,MACxB,OAAO,EAET,IAAMhyC,EACJ9F,EAAW,MACXsN,YACF,GAAIxH,GAAUA,EAAOulF,QACnB,OAAO,GAGX,OAAO,GAUT,YAAApqC,uBAAA,SAAuB2tB,GACrB,IAAM2/H,EAAiB,GACrB3/H,EACAzjF,KAAKgjN,UAAU9gM,iBAEjB,OAAOliB,KAAKqjN,+BAA+BD,IAS7C,YAAAC,+BAAA,SAA+B5/H,GAC7B,IAAM4vG,EAAarzL,KAAKkgN,YACxB,OAAK7sB,EAGIjjL,EACLijL,EAAW6B,2BACXzxG,EAAW94E,MAAM,EAAG,IAJf,MAaX,YAAA4oL,YAAA,WACE,OAAOvzL,KAAK6yL,WASd,YAAAywB,QAAA,WACE,OACEtjN,KAAKwe,IAAIygM,KAWb,YAAA+D,QAAA,WACE,OAA4BhjN,KAAKwe,IAAIygM,KAQvC,YAAAzqJ,YAAA,WACE,OAAOx0D,KAAKugN,WAUd,YAAAgD,oBAAA,WACE,OAAOvjN,KAAKygN,mBAUd,YAAA+C,6BAAA,WACE,OAAOxjN,KAAK2gN,4BAMd,YAAA1gB,iBAAA,WACE,IAAMwjB,EAAgBzjN,KAAK+iN,mBAC3B,OAAOU,EAAgBA,EAAcC,cAAgB/2M,UAUvD,YAAAw0M,gBAAA,SAAgB7zL,EAAMq2L,EAAeC,EAAYC,GAC/C,OpC77BG,SACLxwB,EACA/lK,EACAq2L,EACAC,EACAC,GAIA,IAAKxwB,KAAgBswB,KAAiBtwB,EAAWywB,aAC/C,OAAOl2K,GAET,IAAKylJ,EAAWywB,YAAYH,GAAer2L,EAAK++J,UAC9C,OAAOz+I,GAQT,IAAMjtC,EAAS0yL,EAAWb,UAAU7xL,OAC9BopL,EAAS65B,EAAW,GAAKjjN,EAAO,GAChCqpL,EAAS45B,EAAW,GAAKjjN,EAAO,GACtC,OACE,MAAQY,KAAKoG,IAAIk8M,GACjBtiN,KAAKkrC,KAAKs9I,EAASA,EAASC,EAASA,GAAU65B,EoCm6BxC1C,CACLnhN,KAAKkgN,YACL5yL,EACAq2L,EACAC,EACAC,IAQJ,YAAAvE,mBAAA,SAAmByE,EAAct2B,GAC/B,IAAMtjL,EAAOsjL,GAAYs2B,EAAa55M,KAChC65M,EAAkB,IAAI,GAAgB75M,EAAMnK,KAAM+jN,GACxD/jN,KAAKikN,sBAAsBD,IAM7B,YAAAC,sBAAA,SAAsBD,GACpB,GAAKhkN,KAAKkgN,YAAV,CAKA,IAAMziB,EACJumB,EAA6B,cAEzB5iK,EAAYq8I,EAActzL,KAChC,GACEi3C,IAAc,IACdA,IAAc2tI,GAAUT,OACxBltI,IAAc2tI,GAAUd,QACxB,CACA,IAAM5K,EAAMrjL,KAAKigM,mBACXz7K,EAAWxkB,KAAKugN,UAAUpgB,YAC5BngM,KAAKugN,UAAUpgB,cACf9c,EACE51K,EAA8BgwL,EAAoB,OACxD,GAGEz9L,KAAK2gN,2BAA2B9hK,SAASpxC,MAKvC+W,IAAa6+J,EAAMA,EAAI5sK,gBAAkB+N,GAAUq6B,SAASpxC,GAE9D,OAIJ,GADAu2M,EAAgB3wB,WAAarzL,KAAKkgN,aACU,IAAxClgN,KAAKggC,cAAcgkL,GAErB,IADA,IAAME,EAAoBlkN,KAAK6hN,kBAAkB7lB,WAAWrxL,QACnDzI,EAAIgiN,EAAkB7gN,OAAS,EAAGnB,GAAK,EAAGA,IAAK,CACtD,IAAMy/M,EAAcuC,EAAkBhiN,GACtC,GACEy/M,EAAYnwJ,WAAaxxD,MACxB2hN,EAAYwC,aACZnkN,KAAK+iN,mBAKR,IADapB,EAAYp0B,YAAYy2B,IACxBA,EAAgBv3B,mBAC3B,SASR,YAAA23B,iBAAA,WACE,IAAM/wB,EAAarzL,KAAKkgN,YAWlBmE,EAAYrkN,KAAKkhN,WACvB,IAAKmD,EAAUxiB,UAAW,CACxB,IAAIqB,EAAkBljM,KAAKu/M,iBACvBpc,EAAcD,EAClB,GAAI7P,EAAY,CACd,IAAMixB,EAAQjxB,EAAWkxB,UACzB,GAAID,EAAMrL,KAAuBqL,EAAMrL,IAAuB,CAC5D,IAAMuL,EAAmB3gL,KAAKC,MAAQuvJ,EAAW/mE,KAAO,EACxD42E,EAAkBshB,EAAmB,EAAI,EACzCrhB,EAAcqhB,EAAmB,EAAI,GAGrCH,EAAUvhB,kBAAoBI,IAChCmhB,EAAUhiB,eACVgiB,EAAUphB,cAAcC,EAAiBC,IAIzC9P,GAAcrzL,KAAK6yL,YAAcQ,EAAW9oI,WACjB,IAAzBvqD,KAAKm/M,iBACHn/M,KAAKosL,YAAY,oBACnBpsL,KAAK6yL,UAAUmC,oBACb,kBACA3B,IAGiB,IAAjBrzL,KAAKo/M,UACPp/M,KAAKo/M,SAAU,EACfp/M,KAAKggC,cACH,IAAI,GAASykL,GAAajkB,QAASxgM,KAAMqzL,OAGnB,IAAjBrzL,KAAKo/M,UACdp/M,KAAKo/M,SAAU,EACfp/M,KAAKggC,cACH,IAAI,GAASykL,GAAalkB,UAAWvgM,KAAMqzL,MAMjD,IADA,IAAM+C,EAAsBp2L,KAAKihN,qBACxB/+M,EAAI,EAAGgiB,EAAKkyK,EAAoB/yL,OAAQnB,EAAIgiB,IAAMhiB,EACzDk0L,EAAoBl0L,GAAGlC,KAAMqzL,GAE/B+C,EAAoB/yL,OAAS,GAM/B,YAAAk+M,mBAAA,WACMvhN,KAAKgjN,YAAchjN,KAAKgjN,UAAU9K,gBACpCl4M,KAAKgjN,UAAU7K,mBAAmB,GAGpCn4M,KAAK68C,UAMP,YAAA2kK,qBAAA,WACE,GAAIxhN,KAAK4gN,wBAAyB,CAChC,IAAK,IAAI1+M,EAAI,EAAGgiB,EAAKlkB,KAAK8gN,yBAAyBz9M,OAAQnB,EAAIgiB,IAAMhiB,EACnE0sL,GAAc5uL,KAAK8gN,yBAAyB5+M,IAE9ClC,KAAK8gN,yBAA2B,KAChC9gN,KAAKugN,UAAU5/J,oBACbouI,GAAUnB,YACV5tL,KAAKq/M,0BAEPr/M,KAAKugN,UAAU5/J,oBACbouI,GAAUT,MACVtuL,KAAKq/M,0BAEPr/M,KAAK4gN,wBAAwB58B,UAC7BhkL,KAAK4gN,wBAA0B,KAC/B1oB,GAAWl4L,KAAKugN,WAQlB,IAAMkD,EAAgBzjN,KAAK+iN,mBAC3B,GAAKU,EAYE,CAUL,IAAK,IAAMh7M,KATXg7M,EAAc52M,YAAY7M,KAAKugN,WAC1BvgN,KAAK6yL,YACR7yL,KAAK6yL,UAAY7yL,KAAK+zL,kBAGxB/zL,KAAK4gN,wBAA0B,IAAI,GACjC5gN,KACAA,KAAK++L,gBAEW,GAChB/+L,KAAK4gN,wBAAwBh1M,iBAC3B,GAAoBnD,GACpBzI,KAAKikN,sBAAsB/jK,KAAKlgD,OAGpCA,KAAKugN,UAAU30M,iBACbmjL,GAAUnB,YACV5tL,KAAKq/M,0BACL,GAEFr/M,KAAKugN,UAAU30M,iBACbmjL,GAAUT,MACVtuL,KAAKq/M,2BACL/5B,GAA0B,CAACt3K,SAAS,IAGtC,IAAM02M,EAAc1kN,KAAKigM,mBAAmBykB,YACtC7F,EAAuB7+M,KAAK6gN,qBAE9B7gN,KAAK6gN,qBADL4C,EAEJzjN,KAAK8gN,yBAA2B,CAC9BvyB,GACEswB,EACA9vB,GAAUd,QACVjuL,KAAKs/M,mBACLt/M,MAEFuuL,GACEswB,EACA9vB,GAAUb,SACVluL,KAAKs/M,mBACLt/M,MAEFuuL,GAAOm2B,EAAa31B,GAAUX,OAAQpuL,KAAK+gE,WAAY/gE,YAvDrDA,KAAK6yL,YACP7rI,aAAahnD,KAAK2/M,0BAClB3/M,KAAK2/M,8BAA2Bv7M,EAChCpE,KAAKihN,qBAAqB59M,OAAS,EACnCrD,KAAK6yL,UAAU7O,UACfhkL,KAAK6yL,UAAY,MAEf7yL,KAAK4/M,qBACPr4D,qBAAqBvnJ,KAAK4/M,oBAC1B5/M,KAAK4/M,wBAAqBx7M,GAkD9BpE,KAAK+gE,cAQP,YAAAqgJ,kBAAA,WACEphN,KAAK68C,UAMP,YAAA8nK,2BAAA,WACE3kN,KAAK68C,UAMP,YAAAykK,mBAAA,WACMthN,KAAKogN,2BACPxxB,GAAc5uL,KAAKogN,0BACnBpgN,KAAKogN,yBAA2B,MAE9BpgN,KAAKqgN,yBACPzxB,GAAc5uL,KAAKqgN,wBACnBrgN,KAAKqgN,uBAAyB,MAEhC,IAAM52K,EAAOzpC,KAAKgjN,UACdv5K,IACFzpC,KAAK4kN,sBAEL5kN,KAAKogN,yBAA2B7xB,GAC9B9kJ,EACAqmJ,GACA9vL,KAAK2kN,2BACL3kN,MAEFA,KAAKqgN,uBAAyB9xB,GAC5B9kJ,EACAslJ,GAAUhyC,OACV/8I,KAAK2kN,2BACL3kN,MAGFypC,EAAK0uK,mBAAmB,IAE1Bn4M,KAAK68C,UAMP,YAAAwkK,yBAAA,WACMrhN,KAAKsgN,kCACPtgN,KAAKsgN,gCAAgC/4M,QAAQqnL,IAC7C5uL,KAAKsgN,gCAAkC,MAEzC,IAAMtB,EAAah/M,KAAK8hN,gBACpB9C,IACFh/M,KAAK+hN,gBAAgB,IAAI/kB,GAAW,WAAYgiB,IAChDh/M,KAAKsgN,gCAAkC,CACrC/xB,GAAOywB,EAAYlvB,GAAgC9vL,KAAK68C,OAAQ78C,MAChEuuL,GAAOywB,EAAYjwB,GAAUhyC,OAAQ/8I,KAAK68C,OAAQ78C,MAClDuuL,GAAOywB,EAAY,WAAYh/M,KAAK+hN,gBAAiB/hN,MACrDuuL,GAAOywB,EAAY,cAAeh/M,KAAK6kN,mBAAoB7kN,QAG/DA,KAAK68C,UAMP,YAAAioK,WAAA,WACE,QAAS9kN,KAAKkgN,aAOhB,YAAA6E,WAAA,WACM/kN,KAAK4/M,oBACPr4D,qBAAqBvnJ,KAAK4/M,oBAE5B5/M,KAAK6/M,mBAMP,YAAAhlB,WAAA,WAEE,IADA,IAAMjF,EAAc51L,KAAK8hN,gBAAgBvwB,sBAChCrvL,EAAI,EAAGgiB,EAAK0xK,EAAYvyL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACpD,IAAMsC,EAAQoxL,EAAY1zL,GAAGsC,MACzBA,EAAMwvL,eACRxvL,EAAM+uL,cAAcyxB,uBAS1B,YAAAnoK,OAAA,WACM78C,KAAK6yL,gBAAyCzuL,IAA5BpE,KAAK4/M,qBACzB5/M,KAAK4/M,mBAAqBt4D,sBAAsBtnJ,KAAK6/M,mBAWzD,YAAAoF,cAAA,SAAcn6M,GACZ,OAAO9K,KAAKyhF,cAAczjD,OAAOlzB,IAUnC,YAAAo6M,kBAAA,SAAkBvD,GAChB,OAAO3hN,KAAK6hN,kBAAkB7jL,OAAO2jL,IAUvC,YAAA72J,YAAA,SAAYtmD,GAEV,OADexE,KAAK8hN,gBAAgBjsG,YACtB73E,OAAOx5B,IAOvB,YAAAqgN,mBAAA,SAAmBhlL,GACjB6+K,GAAuB7+K,EAAMr7B,QAU/B,YAAA2gN,cAAA,SAAclD,GACZ,OAAOjiN,KAAKkiN,cAAclkL,OAAOikL,IAOnC,YAAAnC,aAAA,SAAaxzF,GAAb,WACQz3F,EAAO70B,KAAKsjN,UACZ75K,EAAOzpC,KAAKgjN,UACZoC,EAAqBplN,KAAKkgN,YAE5B7sB,EAAa,KACjB,QAAajvL,IAATywB,GAAsB2pL,GAAQ3pL,IAAS4U,GAAQA,EAAKwuK,QAAS,CAC/D,IAAMsM,EAAY96K,EAAK8wK,SACrBv6M,KAAKkgN,YAAclgN,KAAKkgN,YAAYqE,eAAYngN,GAE5CouL,EAAY/oJ,EAAKypJ,WA2BvB,GA1BAG,EAAa,CACX9oI,SAAS,EACT2qI,2BAA4Bl1L,KAAK+/M,4BACjCsF,cAAe,KACf/pM,OAAQ0tK,GACNwJ,EAAU7xL,OACV6xL,EAAUruI,WACVquI,EAAUn+H,SACVx/B,GAEF/K,MAAO9pB,KAAKigN,cACZ9kB,WAAY,EACZtH,iBAAkB7zL,KAAK8hN,gBAAgBvwB,sBACvCmuB,WAAY1/M,KAAKy/M,YACjBtqB,2BAA4Bn1L,KAAKggN,4BACjC5pB,oBAAqB,GACrBvhK,KAAMA,EACNwvL,UAAWrkN,KAAKkhN,WAChB50F,KAAMA,EACNg5F,UAAW,GACX9yB,UAAWA,EACX+xB,UAAWA,EACXT,YAAa,GACbyB,MAAO1hC,EAAO7jL,MACdwlN,cAAe,IAEbhzB,EAAU+oB,YAAc/oB,EAAUgpB,eAAgB,CACpD,IAAMnnJ,EAAWrzD,MAAMwxL,EAAUipB,cAC7BjpB,EAAUn+H,SACVm+H,EAAUipB,aAEdpoB,EAAWoyB,WAAaz8B,GACtBwJ,EAAU+oB,WACV/oB,EAAUgpB,eACVnnJ,EACAx/B,IAUN,GALA70B,KAAKkgN,YAAc7sB,EAEjBrzL,KAAc,UACdyzL,YAAYJ,GAEVA,EAAY,CASd,GARIA,EAAW9oI,SACbvqD,KAAK68C,SAEP/7C,MAAMN,UAAU4H,KAAKgI,MACnBpQ,KAAKihN,qBACL5tB,EAAW+C,qBAGTgvB,IAECplN,KAAKmgN,kBACJ,GAAQngN,KAAKmgN,mBACZ,GAAO9sB,EAAW/3K,OAAQtb,KAAKmgN,oBAElCngN,KAAKggC,cACH,IAAI,GAASykL,GAAapkB,UAAWrgM,KAAMolN,IAE7CplN,KAAKmgN,gBAAkB/3B,GAAoBpoL,KAAKmgN,kBAKlDngN,KAAKmgN,kBACJ9sB,EAAWkxB,UAAUtL,MACrB5lB,EAAWkxB,UAAUtL,MACrB,GAAO5lB,EAAW/3K,OAAQtb,KAAKmgN,mBAGhCngN,KAAKggC,cACH,IAAI,GAASykL,GAAankB,QAAStgM,KAAMqzL,IAE3C7oL,EAAM6oL,EAAW/3K,OAAQtb,KAAKmgN,kBAIlCngN,KAAKggC,cAAc,IAAI,GAASykL,GAAatyB,WAAYnyL,KAAMqzL,IAE/DrzL,KAAKm/M,gBACHn/M,KAAKosL,YAAYq4B,GAAalkB,YAC9BvgM,KAAKosL,YAAYq4B,GAAajkB,UAC9BxgM,KAAKosL,YAAY,oBACZpsL,KAAKkhN,WAAWpe,oBAChB9iM,KAAKkhN,WAAW1f,aAChBxhM,KAAKkjN,4BACN9+M,EAEDpE,KAAK2/M,2BACR3/M,KAAK2/M,yBAA2B14J,YAAW,WACzC,EAAK04J,8BAA2Bv7M,EAChC,EAAKggN,qBACJ,KAUP,YAAAsB,cAAA,SAAc1G,GACZ,IAAM2G,EAAgB3lN,KAAK8hN,gBACvB6D,GACF3lN,KAAK6kN,mBAAmB,IAAI7nB,GAAW,cAAe2oB,IAExD3lN,KAAK8e,IAAImgM,GAAwBD,IASnC,YAAA7/E,QAAA,SAAQtqG,GACN70B,KAAK8e,IAAImgM,GAAkBpqL,IAU7B,YAAAstL,UAAA,SAAU10M,GACRzN,KAAK8e,IAAImgM,GAAoBxxM,IAY/B,YAAA0lD,QAAA,SAAQ1pB,GACN,IAAKA,GAAQA,aAAgB,GAC3BzpC,KAAK8e,IAAImgM,GAAkBx1K,OAD7B,CAIAzpC,KAAK8e,IAAImgM,GAAkB,IAAI,IAE/B,IAAM3gN,EAAM0B,KACZypC,EAAK/qC,MAAK,SAAU+iN,GAClBnjN,EAAI60D,QAAQ,IAAI,GAAKsuJ,SASzB,YAAA1gJ,WAAA,WACE,IAAM0iJ,EAAgBzjN,KAAK+iN,mBAEvBluL,OAAOzwB,EACX,GAAIq/M,EAAe,CACjB,IAAMnlE,EAAgBv3E,iBAAiB08I,GACjCnxL,EACJmxL,EAAc71M,YACdhG,WAAW02I,EAA+B,iBAC1C12I,WAAW02I,EAA2B,aACtC12I,WAAW02I,EAA4B,cACvC12I,WAAW02I,EAAgC,kBACvC/rH,EACJkxL,EAAcn8F,aACd1/G,WAAW02I,EAA8B,gBACzC12I,WAAW02I,EAA0B,YACrC12I,WAAW02I,EAA6B,eACxC12I,WAAW02I,EAAiC,mBACzCt9I,MAAMsxB,IAAWtxB,MAAMuxB,KAGvBisL,GAFH3pL,EAAO,CAACvC,EAAOC,MAIXkxL,EAAc71M,aACd61M,EAAcn8F,cACdm8F,EAAcmC,iBAAiBviN,SAIjCqE,QAAQgS,KACN,qEAMR1Z,KAAKm/H,QAAQtqG,GACb70B,KAAK4kN,uBAOP,YAAAA,oBAAA,WACE,IAAMn7K,EAAOzpC,KAAKgjN,UAClB,GAAIv5K,EAAM,CACR,IAAI5U,OAAOzwB,EACLk6I,EAAgBv3E,iBAAiB/mE,KAAKugN,WACxCjiE,EAAchsH,OAASgsH,EAAc/rH,SACvCsC,EAAO,CACLvc,SAASgmI,EAAchsH,MAAO,IAC9Bha,SAASgmI,EAAc/rH,OAAQ,MAGnCkX,EAAK0wK,gBAAgBtlL,KAG3B,EAtgDA,CAA2B,IA2lD3B,Y,+dCtnDA,SAnHA,YAIE,WAAYl1B,GAAZ,MACE,cAAO,KAEDwhD,EAAUxhD,EAAQwhD,Q,OACpBA,GAAYxhD,EAAQ8N,QAAW0zC,EAAQx7C,MAAM+6M,gBAC/Cv/J,EAAQx7C,MAAM+6M,cAAgB,QAOhC,EAAKv/J,QAAUA,GAAoB,KAMnC,EAAK0kK,QAAU,KAMf,EAAK9wB,KAAO,KAMZ,EAAKkI,aAAe,GAEhBt9L,EAAQk9C,SACV,EAAKA,OAASl9C,EAAQk9C,QAGpBl9C,EAAQ8N,QACV,EAAK00M,UAAUxiN,EAAQ8N,Q,EAwE7B,OAjHsB,QAgDpB,YAAAw2K,gBAAA,WACEiU,GAAWl4L,KAAKmhD,SAChB,YAAM8iI,gBAAe,YAQvB,YAAAzyH,OAAA,WACE,OAAOxxD,KAAK+0L,MAWd,YAAAxnI,OAAA,SAAOjvD,GACD0B,KAAK+0L,MACPmD,GAAWl4L,KAAKmhD,SAElB,IAAK,IAAIj/C,EAAI,EAAGgiB,EAAKlkB,KAAKi9L,aAAa55L,OAAQnB,EAAIgiB,IAAMhiB,EACvD0sL,GAAc5uL,KAAKi9L,aAAa/6L,KAElClC,KAAKi9L,aAAa55L,OAAS,EAC3BrD,KAAK+0L,KAAOz2L,EACRA,MACa0B,KAAK6lN,QAChB7lN,KAAK6lN,QACLvnN,EAAIklN,gCACD32M,YAAY7M,KAAKmhD,SACpBnhD,KAAK68C,SAAWgoI,GAClB7kL,KAAKi9L,aAAa70L,KAChBmmL,GAAOjwL,EAAKmmN,GAAatyB,WAAYnyL,KAAK68C,OAAQ78C,OAGtD1B,EAAIu+C,WASR,YAAAA,OAAA,SAAOipK,KAWP,YAAA3D,UAAA,SAAU10M,GACRzN,KAAK6lN,QACe,iBAAXp4M,EAAsBd,SAAS85D,eAAeh5D,GAAUA,GAErE,EAjHA,CAAsB,I,+dCyUtB,SAxUA,YAIE,WAAYiuL,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCiwC,OAAQl9C,EAAQk9C,OAChBpvC,OAAQ9N,EAAQ8N,UAChB,MAMGs4M,WAAap5M,SAASC,cAAc,MAMzC,EAAKo5M,gBACmB5hN,IAAtBzE,EAAQopH,WAA0BppH,EAAQopH,UAM5C,EAAKk9F,eAAiB,EAAKD,WAM3B,EAAKE,0BAA+C9hN,IAAxBzE,EAAQwmN,YAMpC,EAAKC,kBACqBhiN,IAAxBzE,EAAQwmN,aAA4BxmN,EAAQwmN,YAEzC,EAAKC,eACR,EAAKJ,YAAa,GAGpB,IAAMlqL,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,iBAElDuqL,OACiBjiN,IAArBzE,EAAQ0mN,SAAyB1mN,EAAQ0mN,SAAW,eAEhDC,OACwBliN,IAA5BzE,EAAQ2mN,gBACJ3mN,EAAQ2mN,gBACRxqL,EAAY,UAEZyqL,OACsBniN,IAA1BzE,EAAQ4mN,cAA8B5mN,EAAQ4mN,cAAgB,IAE1DC,OAC0BpiN,IAA9BzE,EAAQ6mN,kBACJ7mN,EAAQ6mN,kBACR1qL,EAAY,YAEW,iBAAlByqL,GAKT,EAAKE,eAAiB95M,SAASC,cAAc,QAC7C,EAAK65M,eAAe14M,YAAcw4M,EAClC,EAAKE,eAAe3qL,UAAY0qL,GAEhC,EAAKC,eAAiBF,EAGxB,IAAMh6K,OAA0BnoC,IAAlBzE,EAAQ4sC,MAAsB5sC,EAAQ4sC,MAAQ,IAEvC,iBAAVA,GAKT,EAAKm6K,OAAS/5M,SAASC,cAAc,QACrC,EAAK85M,OAAO34M,YAAcw+B,EAC1B,EAAKm6K,OAAO5qL,UAAYwqL,GAExB,EAAKI,OAASn6K,EAGhB,IAAMo6K,EACJ,EAAKP,eAAiB,EAAKJ,WAAa,EAAKS,eAAiB,EAAKC,OAMrE,EAAKE,cAAgBj6M,SAASC,cAAc,UAC5C,EAAKg6M,cAAcx5L,aAAa,OAAQ,UACxC,EAAKw5L,cAAcx5L,aAAa,gBAAiB9b,QAAQ,EAAK00M,aAC9D,EAAKY,cAAcr8M,MAAQ87M,EAC3B,EAAKO,cAAc/5M,YAAY85M,GAE/B,EAAKC,cAAch7M,iBACjBmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,IACvB,GAGF,IAAM4mK,EACJhrL,EACA,IADAA,mBAIA86J,IACC,EAAKovB,YAAc,EAAKI,aAAe,gBAAwB,KAC/D,EAAKA,aAAe,GAAK,qBACtBjlK,EAAU,EAAKA,Q,OACrBA,EAAQrlB,UAAYgrL,EACpB3lK,EAAQt0C,YAAY,EAAK+5M,eACzBzlK,EAAQt0C,YAAY,EAAKk5M,YAOzB,EAAKgB,sBAAwB,GAM7B,EAAK/rB,kBAAmB,E,EA6L5B,OAtU0B,QAkJxB,YAAAgsB,2BAAA,SAA2B3zB,GAezB,IAVA,IAAM4zB,EAAS,GAMTC,EAAsB,GAExBf,GAAc,EACZtyB,EAAmBR,EAAWQ,iBAC3B3xL,EAAI,EAAGgiB,EAAK2vK,EAAiBxwL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACzD,IAAMytG,EAAakkF,EAAiB3xL,GACpC,GAAKqwL,GAAO5iF,EAAY0jF,EAAWb,WAAnC,CAIA,IAAM73K,EACJg1F,EAAgB,MAChBxtF,YACF,GAAKxH,EAAL,CAIA,IAAMwsM,EAAoBxsM,EAAOysM,kBACjC,GAAKD,EAAL,CAIA,IAAME,EAAeF,EAAkB9zB,GACvC,GAAKg0B,EAOL,GAHAlB,EACEA,IAAuD,IAAxCxrM,EAAO2sM,6BAEpBxmN,MAAMC,QAAQsmN,GAChB,IAAK,IAAI/vM,EAAI,EAAGypF,EAAKsmH,EAAahkN,OAAQiU,EAAIypF,IAAMzpF,EAC5C+vM,EAAa/vM,KAAM2vM,IACvBC,EAAoB9+M,KAAKi/M,EAAa/vM,IACtC2vM,EAAOI,EAAa/vM,KAAM,QAIxB+vM,KAAgBJ,IACpBC,EAAoB9+M,KAAKi/M,GACzBJ,EAAOI,IAAgB,MAO7B,OAHKrnN,KAAKkmN,sBACRlmN,KAAKunN,eAAepB,GAEfe,GAOT,YAAAM,eAAA,SAAen0B,GACb,GAAKA,EAAL,CAQA,IAAMg0B,EAAernN,KAAKgnN,2BAA2B3zB,GAE/CtuL,EAAUsiN,EAAahkN,OAAS,EAMtC,GALIrD,KAAKg7L,kBAAoBj2L,IAC3B/E,KAAKmhD,QAAQx7C,MAAMg3C,QAAU53C,EAAU,GAAK,OAC5C/E,KAAKg7L,iBAAmBj2L,IAGtBy9C,EAAO6kK,EAAcrnN,KAAK+mN,uBAA9B,CAIA5uB,GAAen4L,KAAK+lN,YAGpB,IAAK,IAAI7jN,EAAI,EAAGgiB,EAAKmjM,EAAahkN,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACrD,IAAMi/C,EAAUx0C,SAASC,cAAc,MACvCu0C,EAAQh0C,UAAYk6M,EAAanlN,GACjClC,KAAK+lN,WAAWl5M,YAAYs0C,GAG9BnhD,KAAK+mN,sBAAwBM,QA5BvBrnN,KAAKg7L,mBACPh7L,KAAKmhD,QAAQx7C,MAAMg3C,QAAU,OAC7B38C,KAAKg7L,kBAAmB,IAiC9B,YAAA6rB,aAAA,SAAahnL,GACXA,EAAMswE,iBACNnwG,KAAKynN,gBACLznN,KAAKimN,eAAiBjmN,KAAKgmN,YAM7B,YAAAyB,cAAA,WACEznN,KAAKmhD,QAAQpjB,UAAUS,OAAOq4J,IAC1B72L,KAAKgmN,WACPjuB,GAAY/3L,KAAKymN,eAAgBzmN,KAAK0mN,QAEtC3uB,GAAY/3L,KAAK0mN,OAAQ1mN,KAAKymN,gBAEhCzmN,KAAKgmN,YAAchmN,KAAKgmN,WACxBhmN,KAAK4mN,cAAcx5L,aAAa,gBAAiB9b,QAAQtR,KAAKgmN,cAQhE,YAAA0B,eAAA,WACE,OAAO1nN,KAAKomN,cAQd,YAAAmB,eAAA,SAAepB,GACTnmN,KAAKomN,eAAiBD,IAG1BnmN,KAAKomN,aAAeD,EACpBnmN,KAAKmhD,QAAQpjB,UAAUS,OAAO,oBAC1Bx+B,KAAKimN,gBACPjmN,KAAKynN,kBAWT,YAAAE,aAAA,SAAa5+F,GACX/oH,KAAKimN,eAAiBl9F,EACjB/oH,KAAKomN,cAAgBpmN,KAAKgmN,aAAej9F,GAG9C/oH,KAAKynN,iBASP,YAAAG,aAAA,WACE,OAAO5nN,KAAKgmN,YAQd,YAAAnpK,OAAA,SAAOipK,GACL9lN,KAAKwnN,eAAe1B,EAASzyB,aAEjC,EAtUA,CAA0B,I,+dCb1B,eAIE,WAAYqI,GAAZ,WACQ/7L,EAAU+7L,GAA4B,G,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCiwC,OAAQl9C,EAAQk9C,OAChBpvC,OAAQ9N,EAAQ8N,UAChB,KAEF,IAAMquB,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,YAElDyQ,OAA0BnoC,IAAlBzE,EAAQ4sC,MAAsB5sC,EAAQ4sC,MAAQ,IAEtDs7K,OACyBzjN,IAA7BzE,EAAQkoN,iBACJloN,EAAQkoN,iBACR,aAMN,EAAKnB,OAAS,KAEO,iBAAVn6K,GACT,EAAKm6K,OAAS/5M,SAASC,cAAc,QACrC,EAAK85M,OAAO5qL,UAAY+rL,EACxB,EAAKnB,OAAO34M,YAAcw+B,IAE1B,EAAKm6K,OAASn6K,EACd,EAAKm6K,OAAO3oL,UAAUnjB,IAAIitM,IAG5B,IAAMxB,EAAW1mN,EAAQ0mN,SAAW1mN,EAAQ0mN,SAAW,iBAEjDz5J,EAASjgD,SAASC,cAAc,UACtCggD,EAAO9wB,UAAYA,EAAY,SAC/B8wB,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAOriD,MAAQ87M,EACfz5J,EAAO//C,YAAY,EAAK65M,QAExB95J,EAAOhhD,iBACLmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,IACvB,GAGF,IAAM4mK,EACJhrL,EAAY,IAAZA,mBAA6C86J,GACzCz1I,EAAU,EAAKA,Q,OACrBA,EAAQrlB,UAAYgrL,EACpB3lK,EAAQt0C,YAAY+/C,GAEpB,EAAKk7J,gBAAkBnoN,EAAQooN,WAAapoN,EAAQooN,gBAAa3jN,EAMjE,EAAK4jN,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAMrE,EAAK43J,eAAiC7jN,IAArBzE,EAAQuoN,UAAyBvoN,EAAQuoN,SAM1D,EAAKC,eAAY/jN,EAEb,EAAK6jN,WACP,EAAK9mK,QAAQpjB,UAAUnjB,IAAI87K,I,EAmEjC,OAlJqB,QAuFnB,YAAAmwB,aAAA,SAAahnL,GACXA,EAAMswE,sBACuB/rG,IAAzBpE,KAAK8nN,gBACP9nN,KAAK8nN,kBAEL9nN,KAAKooN,eAOT,YAAAA,YAAA,WACE,IACM3+K,EADMzpC,KAAKwxD,SACAwxJ,UACjB,GAAKv5K,EAAL,CAKA,IAAM4qB,EAAW5qB,EAAK6qB,mBACLlwD,IAAbiwD,IACEr0D,KAAKgoN,UAAY,GAAK3zJ,GAAY,EAAI9yD,KAAKS,KAAQ,EACrDynC,EAAK8gB,QAAQ,CACX8J,SAAU,EACVhE,SAAUrwD,KAAKgoN,UACfzP,OAAQrN,KAGVzhK,EAAK2qB,YAAY,MAUvB,YAAAvX,OAAA,SAAOipK,GACL,IAAMzyB,EAAayyB,EAASzyB,WAC5B,GAAKA,EAAL,CAGA,IAAMh/H,EAAWg/H,EAAWb,UAAUn+H,SACtC,GAAIA,GAAYr0D,KAAKmoN,UAAW,CAC9B,IAAMnvE,EAAY,UAAY3kF,EAAW,OACzC,GAAIr0D,KAAKioN,UAAW,CAClB,IAAMppK,EAAW7+C,KAAKmhD,QAAQpjB,UAAU8gB,SAAS63I,IAC5C73I,GAAyB,IAAbwV,EAENxV,GAAyB,IAAbwV,GACrBr0D,KAAKmhD,QAAQpjB,UAAUC,OAAO04J,IAF9B12L,KAAKmhD,QAAQpjB,UAAUnjB,IAAI87K,IAK/B12L,KAAK0mN,OAAO/gN,MAAMqzI,UAAYA,EAEhCh5I,KAAKmoN,UAAY9zJ,IAErB,EAlJA,CAAqB,IAoJrB,Y,+dCtBA,SA9HA,YAIE,WAAYqnI,GAAZ,WACQ/7L,EAAU+7L,GAA4B,G,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCa,OAAQ9N,EAAQ8N,UAChB,KAEF,IAAMquB,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,UAElD0oC,OAA0BpgE,IAAlBzE,EAAQ6kE,MAAsB7kE,EAAQ6kE,MAAQ,EAEtD6jJ,OACwBjkN,IAA5BzE,EAAQ0oN,gBACJ1oN,EAAQ0oN,gBACRvsL,EAAY,MAEZwsL,OACyBlkN,IAA7BzE,EAAQ2oN,iBACJ3oN,EAAQ2oN,iBACRxsL,EAAY,OAEZysL,OACoBnkN,IAAxBzE,EAAQ4oN,YAA4B5oN,EAAQ4oN,YAAc,IACtDC,OACqBpkN,IAAzBzE,EAAQ6oN,aAA6B7oN,EAAQ6oN,aAAe,IAExDC,OACuBrkN,IAA3BzE,EAAQ8oN,eAA+B9oN,EAAQ8oN,eAAiB,UAC5DC,OACwBtkN,IAA5BzE,EAAQ+oN,gBACJ/oN,EAAQ+oN,gBACR,WAEAC,EAAYh8M,SAASC,cAAc,UACzC+7M,EAAU7sL,UAAYusL,EACtBM,EAAUv7L,aAAa,OAAQ,UAC/Bu7L,EAAUp+M,MAAQk+M,EAClBE,EAAU97M,YACe,iBAAhB07M,EACH57M,SAASi8M,eAAeL,GACxBA,GAGNI,EAAU/8M,iBACRmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,EAAMskB,IAC7B,GAGF,IAAMqkJ,EAAal8M,SAASC,cAAc,UAC1Ci8M,EAAW/sL,UAAYwsL,EACvBO,EAAWz7L,aAAa,OAAQ,UAChCy7L,EAAWt+M,MAAQm+M,EACnBG,EAAWh8M,YACe,iBAAjB27M,EACH77M,SAASi8M,eAAeJ,GACxBA,GAGNK,EAAWj9M,iBACTmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,GAAOskB,IAC9B,GAGF,IAAMsiJ,EACJhrL,EAAY,IAAZA,mBAA6C86J,GACzCz1I,EAAU,EAAKA,Q,OACrBA,EAAQrlB,UAAYgrL,EACpB3lK,EAAQt0C,YAAY87M,GACpBxnK,EAAQt0C,YAAYg8M,GAMpB,EAAKb,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,I,EA0CzE,OA5HmB,QA0FjB,YAAAw2J,aAAA,SAAariJ,EAAO3kC,GAClBA,EAAMswE,iBACNnwG,KAAK8oN,aAAatkJ,IAOpB,YAAAskJ,aAAA,SAAatkJ,GACX,IACM/6B,EADMzpC,KAAKwxD,SACAwxJ,UACjB,GAAKv5K,EAAL,CAKA,IAAMs/K,EAAct/K,EAAKquK,UACzB,QAAoB1zM,IAAhB2kN,EAA2B,CAC7B,IAAMC,EAAUv/K,EAAK20K,mBAAmB2K,EAAcvkJ,GAClDxkE,KAAKgoN,UAAY,GACfv+K,EAAKyuK,gBACPzuK,EAAK4vK,mBAEP5vK,EAAK8gB,QAAQ,CACXo7G,KAAMqjD,EACN34J,SAAUrwD,KAAKgoN,UACfzP,OAAQrN,MAGVzhK,EAAK8tK,QAAQyR,MAIrB,EA5HA,CAAmB,IC1BnB,SACU,S,+dC4IH,SAASC,GAAYx/K,EAAM+6B,EAAO6oI,EAAYyQ,GACnD,IAAMiL,EAAct/K,EAAKquK,UAEzB,QAAoB1zM,IAAhB2kN,EAAJ,CAIA,IAAMC,EAAUv/K,EAAK20K,mBAAmB2K,EAAcvkJ,GAChD64I,EAAgB5zK,EAAKmvK,qBAAqBoQ,GAE5Cv/K,EAAKyuK,gBACPzuK,EAAK4vK,mBAEP5vK,EAAK8gB,QAAQ,CACXpG,WAAYk5J,EACZzrM,OAAQy7L,EACRh9I,cAA2BjsD,IAAjB05M,EAA6BA,EAAe,IACtDvF,OAAQrN,MAIZ,SAjIA,YAIE,WAAYxP,GAAZ,MACE,cAAO,K,OAKP,EAAKrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAED6M,GAAeA,EAAYnO,cAC7B,EAAKA,YAAcmO,EAAYnO,aAOjC,EAAKwH,KAAO,KAEZ,EAAKm0B,WAAU,G,EAmDnB,OAnF0B,QAyCxB,YAAA/E,UAAA,WACE,OAA+BnkN,KAAKwe,IAAI,KAQ1C,YAAAgzC,OAAA,WACE,OAAOxxD,KAAK+0L,MASd,YAAAxH,YAAA,SAAYy2B,GACV,OAAO,GAST,YAAAkF,UAAA,SAAU/rL,GACRn9B,KAAK8e,IAAI,GAA4Bqe,IASvC,YAAAowB,OAAA,SAAOjvD,GACL0B,KAAK+0L,KAAOz2L,GAEhB,EAnFA,CAA0B,I,+dCuB1B,SA9CA,YAIE,WAAYo9L,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAM5C,EAAKytB,OAASxpN,EAAQ6kE,MAAQ7kE,EAAQ6kE,MAAQ,EAM9C,EAAKwjJ,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,I,EAyBzE,OA5C8B,QA4B5B,YAAAk9H,YAAA,SAAYy2B,GACV,IAAIoF,GAAY,EAChB,GAAIpF,EAAgB75M,MAAQ,YAA8B,CACxD,IAAM45M,EACJC,EAA6B,cAEzB1lN,EAAM0lN,EAAgB1lN,IACtBsT,EAASoyM,EAAgBvgI,WACzBjf,EAAQu/I,EAAa/qD,UAAYh5J,KAAKmpN,OAASnpN,KAAKmpN,OAE1DF,GADa3qN,EAAI0kN,UACCx+I,EAAO5yD,EAAQ5R,KAAKgoN,WACtCjE,EAAa5zG,iBACbi5G,GAAY,EAEd,OAAQA,GAEZ,EA5CA,CAA8B,I,+dCiLvB,SAAS,GAAS1I,GAIvB,IAHA,IAAMr9M,EAASq9M,EAAcr9M,OACzB8gF,EAAU,EACVC,EAAU,EACLliF,EAAI,EAAGA,EAAImB,EAAQnB,IAC1BiiF,GAAWu8H,EAAcx+M,GAAGiiF,QAC5BC,GAAWs8H,EAAcx+M,GAAGkiF,QAE9B,MAAO,CAACD,EAAU9gF,EAAQ+gF,EAAU/gF,GAGtC,SAjKA,YAIE,WAAYq4L,GAAZ,WACQ/7L,EAAU+7L,GAA4B,G,SAE5C,YAC+D,IAC9D,KAEG/7L,EAAQ0pN,kBACV,EAAKA,gBAAkB1pN,EAAQ0pN,iBAG7B1pN,EAAQ2pN,kBACV,EAAKA,gBAAkB3pN,EAAQ2pN,iBAG7B3pN,EAAQ4pN,kBACV,EAAKA,gBAAkB5pN,EAAQ4pN,iBAG7B5pN,EAAQ6pN,gBACV,EAAKA,cAAgB7pN,EAAQ6pN,eAG3B7pN,EAAQ8pN,WACV,EAAKA,SAAW9pN,EAAQ8pN,UAO1B,EAAKC,wBAAyB,EAM9B,EAAKC,eAAiB,G,EAuG1B,OAhJiC,QAkD/B,YAAAC,gBAAA,WACE,OAAO5pN,KAAK2pN,eAAetmN,QAS7B,YAAAgmN,gBAAA,SAAgBrF,GACd,OAAO,GAQT,YAAAsF,gBAAA,SAAgBtF,KAUhB,YAAAz2B,YAAA,SAAYy2B,GACV,IAAKA,EAAgBvmB,cACnB,OAAO,EAGT,IAAI2rB,GAAY,EAEhB,GADAppN,KAAK6pN,uBAAuB7F,GACxBhkN,KAAK0pN,wBACP,GAAI1F,EAAgB75M,MAAQ,eAC1BnK,KAAKspN,gBAAgBtF,GAErBA,EAAgBvmB,cAActtF,sBACzB,GAAI6zG,EAAgB75M,MAAQ,aAA+B,CAChE,IAAM2/M,EAAY9pN,KAAKwpN,cAAcxF,GACrChkN,KAAK0pN,uBACHI,GAAa9pN,KAAK2pN,eAAetmN,OAAS,QAG9C,GAAI2gN,EAAgB75M,MAAQ,eAAiC,CAC3D,IAAM4/M,EAAU/pN,KAAKqpN,gBAAgBrF,GACrChkN,KAAK0pN,uBAAyBK,EAC9BX,EAAYppN,KAAKypN,SAASM,QACjB/F,EAAgB75M,MAAQ,gBACjCnK,KAAKupN,gBAAgBvF,GAGzB,OAAQoF,GAQV,YAAAG,gBAAA,SAAgBvF,KAQhB,YAAAwF,cAAA,SAAcxF,GACZ,OAAO,GAST,YAAAyF,SAAA,SAASM,GACP,OAAOA,GAOT,YAAAF,uBAAA,SAAuB7F,GACjBA,EAAgBlmB,iBAClB99L,KAAK2pN,eAAiB3F,EAAgBlmB,iBAG5C,EAhJA,CAAiC,ICxB1B,SAAS,GAAIka,GAClB,IAAMx5I,EAAaxhD,UAKnB,OAAO,SAAU6iB,GAEf,IADA,IAAImqL,GAAO,EACF9nN,EAAI,EAAGgiB,EAAKs6C,EAAWn7D,OAAQnB,EAAIgiB,IAC1C8lM,EAAOA,GAAQxrJ,EAAWt8D,GAAG29B,MADmB39B,GAMlD,OAAO8nN,GAYJ,IAmBMC,GAAmB,SAAUjG,GACxC,IAAMvmB,EACJumB,EAA6B,cAE/B,OACEvmB,EAAc1kC,UACZ0kC,EAAcysB,SAAWzsB,EAAc3kC,UACzC2kC,EAAczkC,UAwBLmxD,GAAoB,SAAUtqL,GACzC,OAAOA,EAAMvhC,IAAIykN,mBAAmBplL,aAAa,aAb9B,SAAUkC,GAC7B,IAAM4jL,EAAgB5jL,EAAMvhC,IAAIykN,mBAC1B7pD,EAAgBr5H,EAAMvhC,IAAI2hM,mBAAmB/mC,cACnD,OAAOuqD,EAAc5kK,SAASq6G,GAW1B,CAAMr5H,IAWCuqL,GAASzlC,EASTr5I,GAAQ,SAAU04K,GAC7B,OAAOA,EAAgB75M,MAAQ,UAYpBkgN,GAAoB,SAAUrG,GACzC,IAAMvmB,EACJumB,EAA6B,cAE/B,OAA+B,GAAxBvmB,EAAc7wI,UAAiBo4H,GAAU,GAAOyY,EAAc3kC,UAU1DwxD,GAAQ1lC,EAqBR2lC,GAAc,SAAUvG,GACnC,OAAOA,EAAgB75M,MAAQ,gBAsBpBqgN,GAAiB,SAAUxG,GACtC,IAAMvmB,EACJumB,EAA6B,cAE/B,OACGvmB,EAAc1kC,UACb0kC,EAAcysB,SAAWzsB,EAAc3kC,WACxC2kC,EAAczkC,UAgCNyxD,GAAe,SAAUzG,GACpC,IAAMvmB,EACJumB,EAA6B,cAE/B,OACGvmB,EAAc1kC,UACb0kC,EAAcysB,SAAWzsB,EAAc3kC,UACzC2kC,EAAczkC,UAaL0xD,GAAoB,SAAU1G,GACzC,IAAMvmB,EACJumB,EAA6B,cAEzB9tI,EAAkCunH,EAAoB,OAAEvnH,QAC9D,MACc,UAAZA,GACY,WAAZA,GACY,aAAZA,IAICunH,EAAchwL,OAAOk9M,mBAWbC,GAAY,SAAU5G,GACjC,IAAMrkB,EAAmE,EAEvElC,cAGF,OAFA,OAAwBr5L,IAAjBu7L,EAA4B,IAEA,SAA5BA,EAAakrB,aA4CTC,GAAgB,SAAU9G,GACrC,IAAMrkB,EAAmE,EAEvElC,cAEF,OADA,OAAwBr5L,IAAjBu7L,EAA4B,IAC5BA,EAAaorB,WAAqC,IAAxBprB,EAAa/yI,Q,2dCpShD,eAIE,WAAY8uI,GAAZ,MACE,YAAM,CACJ+tB,SAAU7kC,KACV,KAEIjlL,EAAU+7L,GAA4B,GAM5C,EAAKsvB,SAAWrrN,EAAQsrN,QAKxB,EAAKC,aAAe,KAKpB,EAAKC,mBAKL,EAAKC,UAAW,EAEhB,IAAMtoN,EAAYnD,EAAQmD,UACtBnD,EAAQmD,UACR,GAAI0nN,GAAgBM,I,OAMxB,EAAKO,WAAa1rN,EAAQ2rN,YACtB,GAAInB,GAAmBrnN,GACvBA,EAMJ,EAAKyoN,YAAa,E,EAwGtB,OAxJsB,QAuDpB,YAAAjC,gBAAA,SAAgBtF,GACThkN,KAAKorN,WACRprN,KAAKorN,UAAW,EAChBprN,KAAKwxD,SAASwxJ,UAAUhF,oBAE1B,IAAM2L,EAAiB3pN,KAAK2pN,eACtB6B,EAAW,GAAqB7B,GACtC,GAAIA,EAAetmN,QAAUrD,KAAKmrN,oBAIhC,GAHInrN,KAAKgrN,UACPhrN,KAAKgrN,SAASttI,OAAO8tI,EAAS,GAAIA,EAAS,IAEzCxrN,KAAKkrN,aAAc,CACrB,IAAM1mJ,EAAQ,CACZxkE,KAAKkrN,aAAa,GAAKM,EAAS,GAChCA,EAAS,GAAKxrN,KAAKkrN,aAAa,IAG5BzhL,EADMu6K,EAAgB1lN,IACX0kN,UACjB,GAAgBx+I,EAAO/6B,EAAKhnB,iBAC5B,GAAiB+hD,EAAO/6B,EAAK6qB,eAC7B7qB,EAAKwzK,qBAAqBz4I,SAEnBxkE,KAAKgrN,UAGdhrN,KAAKgrN,SAAS1mC,QAEhBtkL,KAAKkrN,aAAeM,EACpBxrN,KAAKmrN,mBAAqBxB,EAAetmN,OACzC2gN,EAAgBvmB,cAActtF,kBAQhC,YAAAq5G,cAAA,SAAcxF,GACZ,IAAM1lN,EAAM0lN,EAAgB1lN,IACtBmrC,EAAOnrC,EAAI0kN,UACjB,GAAmC,IAA/BhjN,KAAK2pN,eAAetmN,OAAc,CACpC,IAAKrD,KAAKurN,YAAcvrN,KAAKgrN,UAAYhrN,KAAKgrN,SAASlhJ,MAAO,CAC5D,IAAMzlB,EAAWrkD,KAAKgrN,SAASjoK,cACzB9gD,EAAQjC,KAAKgrN,SAASS,WACtB9qN,EAAS8oC,EAAKsuK,oBACd2T,EAAWptN,EAAI+kN,+BAA+B1iN,GAC9C6qM,EAAOltM,EAAI+jN,+BAA+B,CAC9CqJ,EAAS,GAAKrnK,EAAW9iD,KAAKY,IAAIF,GAClCypN,EAAS,GAAKrnK,EAAW9iD,KAAKa,IAAIH,KAEpCwnC,EAAK2uK,gBAAgB,CACnBz3M,OAAQ8oC,EAAKgzK,qBAAqBjR,GAClCn7I,SAAU,IACVkoJ,OAAQrN,KAOZ,OAJIlrM,KAAKorN,WACPprN,KAAKorN,UAAW,EAChB3hL,EAAKw0K,mBAEA,EAQP,OANIj+M,KAAKgrN,UAGPhrN,KAAKgrN,SAAS1mC,QAEhBtkL,KAAKkrN,aAAe,MACb,GASX,YAAA7B,gBAAA,SAAgBrF,GACd,GAAIhkN,KAAK2pN,eAAetmN,OAAS,GAAKrD,KAAKqrN,WAAWrH,GAAkB,CACtE,IACMv6K,EADMu6K,EAAgB1lN,IACX0kN,UAYjB,OAXAhjN,KAAKkrN,aAAe,KAEhBzhL,EAAKyuK,gBACPzuK,EAAK4vK,mBAEHr5M,KAAKgrN,UACPhrN,KAAKgrN,SAAS1mC,QAIhBtkL,KAAKurN,WAAavrN,KAAK2pN,eAAetmN,OAAS,GACxC,EAEP,OAAO,GAGb,EAxJA,CAAsBsoN,IA0JtB,Y,+dC9JA,eAIE,WAAYjwB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,G,SAE5C,YAAM,CACJ+tB,SAAU7kC,KACV,MAMGymC,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAYmnN,GAM1D,EAAK2B,gBAAaxnN,EAMlB,EAAK4jN,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,I,EAiEzE,OA5FyB,QAkCvB,YAAAi5J,gBAAA,SAAgBtF,GACd,GAAK4G,GAAU5G,GAAf,CAIA,IAAM1lN,EAAM0lN,EAAgB1lN,IACtBmrC,EAAOnrC,EAAI0kN,UACjB,GAAIv5K,EAAK4wK,iBAAiBhmJ,WAAa5V,GAAvC,CAGA,IAAM5pB,EAAOv2B,EAAIglN,UACXrxL,EAAS+xL,EAAgB5wB,MACzB+jB,EAAQ51M,KAAKqnE,MAAM/zC,EAAK,GAAK,EAAI5C,EAAO,GAAIA,EAAO,GAAK4C,EAAK,GAAK,GACxE,QAAwBzwB,IAApBpE,KAAK4rN,WAA0B,CACjC,IAAMpnJ,EAAQ2yI,EAAQn3M,KAAK4rN,WAC3BniL,EAAK+zK,wBAAwBh5I,GAE/BxkE,KAAK4rN,WAAazU,KAQpB,YAAAqS,cAAA,SAAcxF,GACZ,OAAK4G,GAAU5G,KAIHA,EAAgB1lN,IACX0kN,UACZ/E,eAAej+M,KAAKgoN,YAClB,IAQT,YAAAqB,gBAAA,SAAgBrF,GACd,QAAK4G,GAAU5G,QAKbqG,GAAkBrG,KAClBhkN,KAAKqrN,WAAWrH,MAEJA,EAAgB1lN,IACxB0kN,UAAUhF,mBACdh+M,KAAK4rN,gBAAaxnN,GACX,KAKb,EA5FA,CAAyBunN,IA8FzB,Y,+dCrHA,eAIE,WAAY7vL,GAAZ,MACE,cAAO,K,OAMP,EAAK+vL,UAAY,KAMjB,EAAK/wB,SAAWnuL,SAASC,cAAc,OACvC,EAAKkuL,SAASn1L,MAAM2G,SAAW,WAC/B,EAAKwuL,SAASn1L,MAAM+6M,cAAgB,OACpC,EAAK5lB,SAASh/J,UAAY,UAAYA,EAMtC,EAAKi5J,KAAO,KAMZ,EAAK+2B,YAAc,KAMnB,EAAKC,UAAY,K,EAoFrB,OA1HwB,QA4CtB,YAAA9nC,gBAAA,WACEjkL,KAAKutD,OAAO,OAMd,YAAAy+J,QAAA,WACE,IAAMC,EAAajsN,KAAK8rN,YAClBI,EAAWlsN,KAAK+rN,UAChBI,EAAK,KACLxmN,EAAQ3F,KAAK86L,SAASn1L,MAC5BA,EAAMyuE,KAAO7yE,KAAKqa,IAAIqwM,EAAW,GAAIC,EAAS,IAAMC,EACpDxmN,EAAMwuE,IAAM5yE,KAAKqa,IAAIqwM,EAAW,GAAIC,EAAS,IAAMC,EACnDxmN,EAAM2sB,MAAQ/wB,KAAKyoB,IAAIkiM,EAAS,GAAKD,EAAW,IAAME,EACtDxmN,EAAM4sB,OAAShxB,KAAKyoB,IAAIkiM,EAAS,GAAKD,EAAW,IAAME,GAMzD,YAAA5+J,OAAA,SAAOjvD,GACL,GAAI0B,KAAK+0L,KAAM,CACb/0L,KAAK+0L,KAAKwuB,sBAAsB9mJ,YAAYz8D,KAAK86L,UACjD,IAAMn1L,EAAQ3F,KAAK86L,SAASn1L,MAC5BA,EAAMyuE,KAAO,UACbzuE,EAAMwuE,IAAM,UACZxuE,EAAM2sB,MAAQ,UACd3sB,EAAM4sB,OAAS,UAEjBvyB,KAAK+0L,KAAOz2L,EACR0B,KAAK+0L,MACP/0L,KAAK+0L,KAAKwuB,sBAAsB12M,YAAY7M,KAAK86L,WAQrD,YAAAsxB,UAAA,SAAUH,EAAYC,GACpBlsN,KAAK8rN,YAAcG,EACnBjsN,KAAK+rN,UAAYG,EACjBlsN,KAAKqsN,yBACLrsN,KAAKgsN,WAMP,YAAAK,uBAAA,WACE,IAAMJ,EAAajsN,KAAK8rN,YAClBI,EAAWlsN,KAAK+rN,UAOhB3hN,EANS,CACb6hN,EACA,CAACA,EAAW,GAAIC,EAAS,IACzBA,EACA,CAACA,EAAS,GAAID,EAAW,KAEA3tN,IACzB0B,KAAK+0L,KAAKstB,+BACVriN,KAAK+0L,MAGP3qL,EAAY,GAAKA,EAAY,GAAGO,QAC3B3K,KAAK6rN,UAGR7rN,KAAK6rN,UAAU5qN,eAAe,CAACmJ,IAF/BpK,KAAK6rN,UAAY,IAAI,GAAQ,CAACzhN,KASlC,YAAAjJ,YAAA,WACE,OAAOnB,KAAK6rN,WAEhB,EA1HA,CAAwB,GA4HxB,Y,+dCjGMS,GAMM,WANNA,GAaK,UAbLA,GAoBI,SApBJA,GA2BO,YAQb,eAME,WAAYniN,EAAMs5E,EAAYugI,GAA9B,MACE,YAAM75M,IAAK,K,OAQX,EAAKs5E,WAAaA,EAOlB,EAAKugI,gBAAkBA,E,EAE3B,OAxBkC,QAwBlC,EAxBA,CAAkClkL,IA6MlC,SA7JA,YAIE,WAAY47J,GAAZ,MACE,cAAO,KAKP,EAAKrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,IAAMlvL,EAAU+7L,GAA4B,G,OAM5C,EAAK6wB,KAAO,IAAI,GAAU5sN,EAAQm8B,WAAa,cAM/C,EAAK0wL,cAA+BpoN,IAApBzE,EAAQ8sN,QAAwB9sN,EAAQ8sN,QAAU,GAE9D9sN,EAAQ+sN,WACV,EAAKA,SAAW/sN,EAAQ+sN,UAO1B,EAAKZ,YAAc,KAMnB,EAAKT,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAYunN,GAM1D,EAAKsC,iBAAmBhtN,EAAQitN,gBAC5BjtN,EAAQitN,gBACR,EAAKC,uB,EAiGb,OA3JsB,QAsEpB,YAAAA,uBAAA,SAAuB7I,EAAiBiI,EAAYC,GAClD,IAAM55L,EAAQ45L,EAAS,GAAKD,EAAW,GACjC15L,EAAS25L,EAAS,GAAKD,EAAW,GACxC,OAAO35L,EAAQA,EAAQC,EAASA,GAAUvyB,KAAKwsN,UAQjD,YAAArrN,YAAA,WACE,OAAOnB,KAAKusN,KAAKprN,eAOnB,YAAAmoN,gBAAA,SAAgBtF,GACdhkN,KAAKusN,KAAKH,UAAUpsN,KAAK8rN,YAAa9H,EAAgB5wB,OAEtDpzL,KAAKggC,cACH,IAAI8sL,GACFR,GACAtI,EAAgBvgI,WAChBugI,KAUN,YAAAwF,cAAA,SAAcxF,GACZhkN,KAAKusN,KAAKh/J,OAAO,MAEjB,IAAMw/J,EAAc/sN,KAAK2sN,iBACvB3I,EACAhkN,KAAK8rN,YACL9H,EAAgB5wB,OAYlB,OAVI25B,GACF/sN,KAAK0sN,SAAS1I,GAEhBhkN,KAAKggC,cACH,IAAI8sL,GACFC,EAAcT,GAA0BA,GACxCtI,EAAgBvgI,WAChBugI,KAGG,GAQT,YAAAqF,gBAAA,SAAgBrF,GACd,QAAIhkN,KAAKqrN,WAAWrH,KAClBhkN,KAAK8rN,YAAc9H,EAAgB5wB,MACnCpzL,KAAKusN,KAAKh/J,OAAOy2J,EAAgB1lN,KACjC0B,KAAKusN,KAAKH,UAAUpsN,KAAK8rN,YAAa9rN,KAAK8rN,aAC3C9rN,KAAKggC,cACH,IAAI8sL,GACFR,GACAtI,EAAgBvgI,WAChBugI,KAGG,IAUX,YAAA0I,SAAA,SAAS7sL,KACX,EA3JA,CAAsB8rL,I,+dClCtB,SApDA,YAIE,WAAYjwB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtC54L,EAAYnD,EAAQmD,UAAYnD,EAAQmD,UAAY2nN,G,SAE1D,YAAM,CACJ3nN,UAAWA,EACXg5B,UAAWn8B,EAAQm8B,WAAa,cAChC2wL,QAAS9sN,EAAQ8sN,WACjB,MAMGzE,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAMrE,EAAK28J,UAAuB5oN,IAAhBzE,EAAQ++E,KAAoB/+E,EAAQ++E,I,EAyBpD,OAlDuB,QAgCrB,YAAAguI,SAAA,SAAS7sL,GACP,IACM4J,EADMzpC,KAAKwxD,SAC8CwxJ,UAC3D1iN,EAAWN,KAAKmB,cAEpB,GAAInB,KAAKgtN,KAAM,CACb,IAAM3Q,EAAgB5yK,EAAKqyK,yBAAyBx7M,GAC9C6jD,EAAa1a,EAAKsxK,+BAA+BsB,GACjDr6E,EAASv4F,EAAKhnB,gBAAkB0hC,GACtC7jD,EAAWA,EAASkK,SACX+/B,MAAMy3F,EAASA,GAG1Bv4F,EAAKoyK,YAAYv7M,EAAU,CACzB+vD,SAAUrwD,KAAKgoN,UACfzP,OAAQrN,MAGd,EAlDA,CAAuB,ICvBvB,GACQ,GADR,GAEM,GAFN,GAGS,GAHT,GAIQ,G,+dCgHR,SA1FA,YAIE,WAAYxP,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAAe,G,OAO/B,EAAKuxB,kBAAoB,SAAUjJ,GACjC,OACEwG,GAAexG,IAAoB0G,GAAkB1G,IAQzD,EAAKqH,gBACmBjnN,IAAtBzE,EAAQmD,UACJnD,EAAQmD,UACR,EAAKmqN,kBAMX,EAAKjF,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAMrE,EAAK68J,iBACoB9oN,IAAvBzE,EAAQwtN,WAA2BxtN,EAAQwtN,WAAa,I,EAgD9D,OAxF0B,QAmDxB,YAAA5/B,YAAA,SAAYy2B,GACV,IAAIoF,GAAY,EAChB,GAAIpF,EAAgB75M,MAAQ4kL,GAAUd,QAAS,CAC7C,IAAMm/B,EACJpJ,EAA6B,cAEzB/qD,EAAUm0D,EAASn0D,QACzB,GACEj5J,KAAKqrN,WAAWrH,KACf/qD,GAAWo0D,IACVp0D,GAAWo0D,IACXp0D,GAAWo0D,IACXp0D,GAAWo0D,IACb,CACA,IACM5jL,EADMu6K,EAAgB1lN,IACX0kN,UACXsK,EAAgB7jL,EAAKhnB,gBAAkBziB,KAAKktN,YAC9CnjC,EAAS,EACXC,EAAS,EACP/wB,GAAWo0D,GACbrjC,GAAUsjC,EACDr0D,GAAWo0D,GACpBtjC,GAAUujC,EACDr0D,GAAWo0D,GACpBtjC,EAASujC,EAETtjC,EAASsjC,EAEX,IAAM9oJ,EAAQ,CAACulH,EAAQC,GACvB,GAAiBxlH,EAAO/6B,EAAK6qB,eVgB9B,SAAa7qB,EAAM+6B,EAAOs5I,GAC/B,IAAM7D,EAAgBxwK,EAAKsuK,oBAC3B,GAAIkC,EAAe,CACjB,IAAMt5M,EAAS,CAACs5M,EAAc,GAAKz1I,EAAM,GAAIy1I,EAAc,GAAKz1I,EAAM,IACtE/6B,EAAK2uK,gBAAgB,CACnB/nJ,cAA2BjsD,IAAjB05M,EAA6BA,EAAe,IACtDvF,OAAQnN,GACRzqM,OAAQ8oC,EAAKgzK,qBAAqB97M,MUtBhC4sN,CAAI9jL,EAAM+6B,EAAOxkE,KAAKgoN,WACtBoF,EAASj9G,iBACTi5G,GAAY,GAGhB,OAAQA,GAEZ,EAxFA,CAA0B,I,+dC2D1B,SA/DA,YAIE,WAAY1tB,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAM5C,EAAK2vB,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAY4nN,GAM1D,EAAKvB,OAASxpN,EAAQ6kE,MAAQ7kE,EAAQ6kE,MAAQ,EAM9C,EAAKwjJ,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,I,EAoCzE,OA7D2B,QAoCzB,YAAAk9H,YAAA,SAAYy2B,GACV,IAAIoF,GAAY,EAChB,GACEpF,EAAgB75M,MAAQ4kL,GAAUd,SAClC+1B,EAAgB75M,MAAQ4kL,GAAUb,SAClC,CACA,IAAMk/B,EACJpJ,EAA6B,cAEzBwJ,EAAWJ,EAASI,SAC1B,GACExtN,KAAKqrN,WAAWrH,KACfwJ,GAAY,IAAI18I,WAAW,IAAM08I,GAAY,IAAI18I,WAAW,IAC7D,CACA,IAAMxyE,EAAM0lN,EAAgB1lN,IACtBkmE,EACJgpJ,GAAY,IAAI18I,WAAW,GAAK9wE,KAAKmpN,QAAUnpN,KAAKmpN,OAEtDF,GADa3qN,EAAI0kN,UACCx+I,OAAOpgE,EAAWpE,KAAKgoN,WACzCoF,EAASj9G,iBACTi5G,GAAY,GAGhB,OAAQA,GAEZ,EA7DA,CAA2B,ICpB3B,kBAOE,WAAYqE,EAAOC,EAAaC,GAK9B3tN,KAAK4tN,OAASH,EAMdztN,KAAK6tN,aAAeH,EAMpB1tN,KAAK8tN,OAASH,EAMd3tN,KAAK+tN,QAAU,GAMf/tN,KAAKguN,OAAS,EAMdhuN,KAAKiuN,iBAAmB,EAuE5B,OAjEE,YAAA3pC,MAAA,WACEtkL,KAAK+tN,QAAQ1qN,OAAS,EACtBrD,KAAKguN,OAAS,EACdhuN,KAAKiuN,iBAAmB,GAO1B,YAAAvwI,OAAA,SAAO/vD,EAAGC,GACR5tB,KAAK+tN,QAAQ3lN,KAAKulB,EAAGC,EAAGiW,KAAKC,QAM/B,YAAAgmC,IAAA,WACE,GAAI9pE,KAAK+tN,QAAQ1qN,OAAS,EAGxB,OAAO,EAET,IAAMsqN,EAAQ9pL,KAAKC,MAAQ9jC,KAAK8tN,OAC1BjuD,EAAY7/J,KAAK+tN,QAAQ1qN,OAAS,EACxC,GAAIrD,KAAK+tN,QAAQluD,EAAY,GAAK8tD,EAGhC,OAAO,EAKT,IADA,IAAIO,EAAaruD,EAAY,EACtBquD,EAAa,GAAKluN,KAAK+tN,QAAQG,EAAa,GAAKP,GACtDO,GAAc,EAGhB,IAAM79J,EAAWrwD,KAAK+tN,QAAQluD,EAAY,GAAK7/J,KAAK+tN,QAAQG,EAAa,GAIzE,GAAI79J,EAAW,IAAO,GACpB,OAAO,EAGT,IAAMxN,EAAK7iD,KAAK+tN,QAAQluD,GAAa7/J,KAAK+tN,QAAQG,GAC5CprK,EAAK9iD,KAAK+tN,QAAQluD,EAAY,GAAK7/J,KAAK+tN,QAAQG,EAAa,GAGnE,OAFAluN,KAAKguN,OAASzsN,KAAKqnE,MAAM9lB,EAAID,GAC7B7iD,KAAKiuN,iBAAmB1sN,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,GAAMuN,EAChDrwD,KAAKiuN,iBAAmBjuN,KAAK6tN,cAMtC,YAAA9qK,YAAA,WACE,OAAQ/iD,KAAK6tN,aAAe7tN,KAAKiuN,kBAAoBjuN,KAAK4tN,QAM5D,YAAAnC,SAAA,WACE,OAAOzrN,KAAKguN,QAEhB,EAjHA,GAmHA,Y,+dCjHaG,GACD,WADCA,GAEJ,QA8RT,SAnQA,YAIE,WAAYzyB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAC+D,IAC9D,MAMI0yB,YAAc,EAMnB,EAAKC,WAAa,EAMlB,EAAKzd,eAAiCxsM,IAArBzE,EAAQmvM,SAAyBnvM,EAAQmvM,SAAW,EAMrE,EAAKkZ,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAMrE,EAAKi+J,cAA+BlqN,IAApBzE,EAAQg9D,QAAwBh9D,EAAQg9D,QAAU,GAMlE,EAAK4xJ,gBACmBnqN,IAAtBzE,EAAQ6uN,WAA0B7uN,EAAQ6uN,UAM5C,EAAKC,0BAC6BrqN,IAAhCzE,EAAQ81M,qBACJ91M,EAAQ81M,oBAGd,IAAM3yM,EAAYnD,EAAQmD,UAAYnD,EAAQmD,UAAYsnN,G,OAM1D,EAAKiB,WAAa1rN,EAAQ2rN,YACtB,GAAInB,GAAmBrnN,GACvBA,EAMJ,EAAK4rN,YAAc,KAMnB,EAAKC,gBAAavqN,EAMlB,EAAKwqN,WAML,EAAKC,WAAQzqN,EAOb,EAAK0qN,kBAAoB,IAKzB,EAAKC,mBAOL,EAAKC,cAAgB,I,EAqJzB,OAjQ6B,QAkH3B,YAAAC,gBAAA,WACEjvN,KAAK+uN,wBAAqB3qN,EAC1B,IAAM9F,EAAM0B,KAAKwxD,SACZlzD,GAGQA,EAAI0kN,UACZ/E,oBACH75M,EACApE,KAAKquN,WAAcruN,KAAKquN,WAAa,EAAI,GAAK,EAAK,EACnDruN,KAAK0uN,cAUT,YAAAnhC,YAAA,SAAYy2B,GACV,IAAKhkN,KAAKqrN,WAAWrH,GACnB,OAAO,EAGT,GADaA,EAAgB75M,OAChB4kL,GAAUT,MACrB,OAAO,EAGT,IAYI9pH,EAZElmE,EAAM0lN,EAAgB1lN,IACtB4wN,EACJlL,EAA6B,cAqB/B,GAnBAkL,EAAW/+G,iBAEPnwG,KAAKuuN,aACPvuN,KAAK0uN,YAAc1K,EAAgBvgI,YAMjCugI,EAAgB75M,MAAQ4kL,GAAUT,QACpC9pH,EAAQ0qJ,EAAWllC,OACflF,GAAWoqC,EAAWC,YAAcC,WAAWC,kBACjD7qJ,GAASygH,GAEPiqC,EAAWC,YAAcC,WAAWE,iBACtC9qJ,GAAS,KAIC,IAAVA,EACF,OAAO,EAEPxkE,KAAKquN,WAAa7pJ,EAGpB,IAAM1gC,EAAMD,KAAKC,WAEO1/B,IAApBpE,KAAK2uN,aACP3uN,KAAK2uN,WAAa7qL,KAGf9jC,KAAK6uN,OAAS/qL,EAAM9jC,KAAK2uN,WAAa3uN,KAAK8uN,qBAC9C9uN,KAAK6uN,MAAQttN,KAAKyoB,IAAIw6C,GAAS,EAAI2pJ,GAAgBA,IAGrD,IAAM1kL,EAAOnrC,EAAI0kN,UACjB,GACEhjN,KAAK6uN,QAAUV,KACb1kL,EAAK6wK,2BAA4Bt6M,KAAKyuN,qBAgBxC,OAdIzuN,KAAK+uN,mBACP/nK,aAAahnD,KAAK+uN,qBAEdtlL,EAAKyuK,gBACPzuK,EAAK4vK,mBAEP5vK,EAAKu0K,oBAEPh+M,KAAK+uN,mBAAqB9nK,WACxBjnD,KAAKivN,gBAAgB/uK,KAAKlgD,MAC1BA,KAAKsuN,UAEP7kL,EAAK6zK,YAAY94I,EAAQxkE,KAAKgvN,cAAehvN,KAAK0uN,aAClD1uN,KAAK2uN,WAAa7qL,GACX,EAGT9jC,KAAKouN,aAAe5pJ,EAEpB,IAAM+qJ,EAAWhuN,KAAK4K,IAAInM,KAAKsuN,UAAYxqL,EAAM9jC,KAAK2uN,YAAa,GAQnE,OANA3nK,aAAahnD,KAAK4uN,YAClB5uN,KAAK4uN,WAAa3nK,WAChBjnD,KAAKwvN,iBAAiBtvK,KAAKlgD,KAAM1B,GACjCixN,IAGK,GAOT,YAAAC,iBAAA,SAAiBlxN,GACf,IAAMmrC,EAAOnrC,EAAI0kN,UACbv5K,EAAKyuK,gBACPzuK,EAAK4vK,mBAEP,IAAI70I,GACDmmH,GACC3qL,KAAKouN,aACJpuN,KAAK4wM,UAAY5wM,KAAKgvN,cACvBhvN,KAAK4wM,UAAY5wM,KAAKgvN,eACpBhvN,KAAKgvN,eACPvlL,EAAK6wK,0BAA4Bt6M,KAAKyuN,wBAExCjqJ,EAAQA,EAASA,EAAQ,EAAI,GAAK,EAAK,GAEzCykJ,GAAYx/K,EAAM+6B,EAAOxkE,KAAK0uN,YAAa1uN,KAAKgoN,WAEhDhoN,KAAK6uN,WAAQzqN,EACbpE,KAAKouN,YAAc,EACnBpuN,KAAK0uN,YAAc,KACnB1uN,KAAK2uN,gBAAavqN,EAClBpE,KAAK4uN,gBAAaxqN,GASpB,YAAAqrN,eAAA,SAAejB,GACbxuN,KAAKuuN,WAAaC,EACbA,IACHxuN,KAAK0uN,YAAc,OAGzB,EAjQA,CAA6B,I,+dCyH7B,SA5IA,YAIE,WAAYhzB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCg0B,EAA+D,E,OAIhEA,EAAejG,WAClBiG,EAAejG,SAAW7kC,I,EAG5B,YAAM8qC,IAAe,MAMhBC,QAAU,KAMf,EAAK/D,gBAAaxnN,EAMlB,EAAKwrN,WAAY,EAMjB,EAAKC,eAAiB,EAMtB,EAAKC,gBAAmC1rN,IAAtBzE,EAAQowN,UAA0BpwN,EAAQowN,UAAY,GAMxE,EAAK/H,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,I,EAuFzE,OA1I0B,QA0DxB,YAAAi5J,gBAAA,SAAgBtF,GACd,IAAIgM,EAAgB,EAEdC,EAASjwN,KAAK2pN,eAAe,GAC7BuG,EAASlwN,KAAK2pN,eAAe,GAG7B1nN,EAAQV,KAAKqnE,MACjBsnJ,EAAO9rI,QAAU6rI,EAAO7rI,QACxB8rI,EAAO/rI,QAAU8rI,EAAO9rI,SAG1B,QAAwB//E,IAApBpE,KAAK4rN,WAA0B,CACjC,IAAMpnJ,EAAQviE,EAAQjC,KAAK4rN,WAC3B5rN,KAAK6vN,gBAAkBrrJ,GAClBxkE,KAAK4vN,WAAaruN,KAAKyoB,IAAIhqB,KAAK6vN,gBAAkB7vN,KAAK8vN,aAC1D9vN,KAAK4vN,WAAY,GAEnBI,EAAgBxrJ,EAElBxkE,KAAK4rN,WAAa3pN,EAElB,IAAM3D,EAAM0lN,EAAgB1lN,IACtBmrC,EAAOnrC,EAAI0kN,UACjB,GAAIv5K,EAAK4wK,iBAAiBhmJ,WAAa5V,GAAvC,CAOA,IAAMmkK,EAAmBtkN,EAAIk2D,cAAc1F,wBACrC08J,EAAW,GAAqBxrN,KAAK2pN,gBAC3C6B,EAAS,IAAM5I,EAAiBxuI,KAChCo3I,EAAS,IAAM5I,EAAiBzuI,IAChCn0E,KAAK2vN,QAAUrxN,EAAI+jN,+BAA+BmJ,GAG9CxrN,KAAK4vN,YACPtxN,EAAIu+C,SACJpT,EAAK+zK,uBAAuBwS,EAAehwN,KAAK2vN,YASpD,YAAAnG,cAAA,SAAcxF,GACZ,QAAIhkN,KAAK2pN,eAAetmN,OAAS,KACnB2gN,EAAgB1lN,IACX0kN,UACZ/E,eAAej+M,KAAKgoN,YAClB,IAWX,YAAAqB,gBAAA,SAAgBrF,GACd,GAAIhkN,KAAK2pN,eAAetmN,QAAU,EAAG,CACnC,IAAM/E,EAAM0lN,EAAgB1lN,IAQ5B,OAPA0B,KAAK2vN,QAAU,KACf3vN,KAAK4rN,gBAAaxnN,EAClBpE,KAAK4vN,WAAY,EACjB5vN,KAAK6vN,eAAiB,EACjB7vN,KAAK0pN,wBACRprN,EAAI0kN,UAAUhF,oBAET,EAEP,OAAO,GAGb,EA1IA,CAA0B2N,I,+dCH1B,eAIE,WAAYjwB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCg0B,EAA+D,E,OAIhEA,EAAejG,WAClBiG,EAAejG,SAAW7kC,I,EAG5B,YAAM8qC,IAAe,MAMhBC,QAAU,KAMf,EAAK3H,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAMrE,EAAK8/J,mBAAgB/rN,EAMrB,EAAKgsN,gBAAkB,E,EA8E3B,OArHwB,QA8CtB,YAAA9G,gBAAA,SAAgBtF,GACd,IAAIqM,EAAa,EAEXJ,EAASjwN,KAAK2pN,eAAe,GAC7BuG,EAASlwN,KAAK2pN,eAAe,GAC7B9mK,EAAKotK,EAAO9rI,QAAU+rI,EAAO/rI,QAC7BrhC,EAAKmtK,EAAO7rI,QAAU8rI,EAAO9rI,QAG7B//B,EAAW9iD,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,QAEf1+C,IAAvBpE,KAAKmwN,gBACPE,EAAarwN,KAAKmwN,cAAgB9rK,GAEpCrkD,KAAKmwN,cAAgB9rK,EAErB,IAAM/lD,EAAM0lN,EAAgB1lN,IACtBmrC,EAAOnrC,EAAI0kN,UAEC,GAAdqN,IACFrwN,KAAKowN,gBAAkBC,GAIzB,IAAMzN,EAAmBtkN,EAAIk2D,cAAc1F,wBACrC08J,EAAW,GAAqBxrN,KAAK2pN,gBAC3C6B,EAAS,IAAM5I,EAAiBxuI,KAChCo3I,EAAS,IAAM5I,EAAiBzuI,IAChCn0E,KAAK2vN,QAAUrxN,EAAI+jN,+BAA+BmJ,GAGlDltN,EAAIu+C,SACJpT,EAAK0zK,yBAAyBkT,EAAYrwN,KAAK2vN,UAQjD,YAAAnG,cAAA,SAAcxF,GACZ,GAAIhkN,KAAK2pN,eAAetmN,OAAS,EAAG,CAClC,IACMomC,EADMu6K,EAAgB1lN,IACX0kN,UACX5+B,EAAYpkL,KAAKowN,gBAAkB,EAAI,GAAK,EAElD,OADA3mL,EAAKw0K,eAAej+M,KAAKgoN,UAAW5jC,IAC7B,EAEP,OAAO,GASX,YAAAilC,gBAAA,SAAgBrF,GACd,GAAIhkN,KAAK2pN,eAAetmN,QAAU,EAAG,CACnC,IAAM/E,EAAM0lN,EAAgB1lN,IAO5B,OANA0B,KAAK2vN,QAAU,KACf3vN,KAAKmwN,mBAAgB/rN,EACrBpE,KAAKowN,gBAAkB,EAClBpwN,KAAK0pN,wBACRprN,EAAI0kN,UAAUhF,oBAET,EAEP,OAAO,GAGb,EArHA,CAAwB2N,IAuHxB,YCvDO,SAAS,GAASjwB,GACvB,IAAM/7L,EAAU+7L,GAA4B,GAEtCojB,EAAe,IAAI,GAEnBmM,EAAU,IAAI,IAAS,KAAO,IAAM,KA8E1C,YA3EiC7mN,IAA/BzE,EAAQ2wN,oBACJ3wN,EAAQ2wN,qBAGZxR,EAAa12M,KAAK,IAAI,UAIMhE,IAA5BzE,EAAQ4wN,iBAAgC5wN,EAAQ4wN,kBAEhDzR,EAAa12M,KACX,IAAI,GAAgB,CAClBo8D,MAAO7kE,EAAQ6wN,UACfngK,SAAU1wD,EAAQ8wN,sBAKYrsN,IAApBzE,EAAQ+wN,SAAwB/wN,EAAQ+wN,UAEtD5R,EAAa12M,KACX,IAAI,GAAQ,CACVkjN,YAAa3rN,EAAQ2rN,YACrBL,QAASA,WAMW7mN,IAAxBzE,EAAQgxN,aAA4BhxN,EAAQgxN,cAE5C7R,EAAa12M,KAAK,IAAI,UAGgBhE,IAAtBzE,EAAQixN,WAA0BjxN,EAAQixN,YAE1D9R,EAAa12M,KACX,IAAI,GAAU,CACZioD,SAAU1wD,EAAQ8wN,sBAKcrsN,IAArBzE,EAAQkxN,UAAyBlxN,EAAQkxN,YAExD/R,EAAa12M,KAAK,IAAI,IACtB02M,EAAa12M,KACX,IAAI,GAAa,CACfo8D,MAAO7kE,EAAQ6wN,UACfngK,SAAU1wD,EAAQ8wN,uBAMKrsN,IAA3BzE,EAAQwpC,gBAA+BxpC,EAAQwpC,iBAE/C21K,EAAa12M,KACX,IAAI,GAAe,CACjBkjN,YAAa3rN,EAAQ2rN,YACrBj7J,SAAU1wD,EAAQ8wN,sBAMIrsN,IAA1BzE,EAAQmxN,eAA8BnxN,EAAQmxN,gBAE9ChS,EAAa12M,KACX,IAAI,GAAS,CACXioD,SAAU1wD,EAAQ8wN,gBAKjB3R,E,+dCvFT,SAvBA,YAIE,WAAYn/M,G,OACVA,EAAU,GAAO,GAAIA,IACRwqC,WACXxqC,EAAQwqC,SCdP,SAAkBuxJ,GACvB,IAAM/7L,EAAU+7L,GAA4B,GAEtCvxJ,EAAW,IAAI,GAkBrB,YAhBqC/lC,IAAjBzE,EAAQgmK,MAAqBhmK,EAAQgmK,OAEvDx7H,EAAS/hC,KAAK,IAAI,GAAKzI,EAAQoxN,oBAGQ3sN,IAAnBzE,EAAQwtM,QAAuBxtM,EAAQwtM,SAE3DhjK,EAAS/hC,KAAK,IAAI,GAAOzI,EAAQqxN,sBAIT5sN,IAAxBzE,EAAQypC,aAA4BzpC,EAAQypC,cAE5Ce,EAAS/hC,KAAK,IAAI,GAAYzI,EAAQsxN,qBAGjC9mL,EDPgB,IAEhBxqC,EAAQm/M,eACXn/M,EAAQm/M,aAAe,GAAoB,CACzCwM,aAAa,KAIjB,YAAM3rN,IAAQ,KAMlB,OArBkB,QAkBhB,YAAAo0L,eAAA,WACE,OAAO,IAAIm9B,GAAqBlxN,OAEpC,EArBA,CAAkB,I,+dE2BZ,GACK,UADL,GAEC,MAFD,GAGI,SAHJ,GAIM,WAJN,GAKS,cAmCf,eAIE,WAAYL,GAAZ,MACE,cAAO,KAKP,EAAK0O,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKlvL,QAAUA,EAMf,EAAKP,GAAKO,EAAQP,GAMlB,EAAK+xN,iBACqB/sN,IAAxBzE,EAAQwxN,aAA4BxxN,EAAQwxN,YAM9C,EAAK/H,eAAkChlN,IAAtBzE,EAAQypN,WAA0BzpN,EAAQypN,UAM3D,EAAKjoK,QAAUx0C,SAASC,cAAc,OACtC,EAAKu0C,QAAQrlB,eACW13B,IAAtBzE,EAAQm8B,UACJn8B,EAAQm8B,UACR,qCACN,EAAKqlB,QAAQx7C,MAAM2G,SAAW,WAC9B,EAAK60C,QAAQx7C,MAAM+6M,cAAgB,OAEnC,IAAI0Q,EAAUzxN,EAAQyxN,Q,OAClBA,GAAW,iBAAoBA,IACjCA,EAAU,CACRrzC,UAAWp+K,EAAQ0xN,iBACnBzyF,OAAQj/H,EAAQ2xN,gBAOpB,EAAKF,QAA4C,IAAa,EAO9D,EAAKtoE,SAAW,CACdyoE,WAAY,GACZxsN,SAAS,GAOX,EAAKysN,yBAA2B,KAEhC,EAAKzhC,kBAAkB,GAAkB,EAAK0hC,sBAC9C,EAAK1hC,kBAAkB,GAAc,EAAK2hC,kBAC1C,EAAK3hC,kBAAkB,GAAiB,EAAK4hC,qBAC7C,EAAK5hC,kBAAkB,GAAmB,EAAK6hC,uBAC/C,EAAK7hC,kBAAkB,GAAsB,EAAK8hC,+BAE1BztN,IAApBzE,EAAQwhD,SACV,EAAK2wK,WAAWnyN,EAAQwhD,SAG1B,EAAK4wK,eAA6B3tN,IAAnBzE,EAAQsyB,OAAuBtyB,EAAQsyB,OAAS,CAAC,EAAG,IAEnE,EAAK+/L,eAAeryN,EAAQsyN,aAAe,iBAElB7tN,IAArBzE,EAAQ2M,UACV,EAAKo3J,YAAY/jK,EAAQ2M,U,EAsX/B,OA7dsB,QAiHpB,YAAA4lN,WAAA,WACE,OAA6ClyN,KAAKwe,IAAI,KAQxD,YAAA7a,MAAA,WACE,OAAO3D,KAAKZ,IAUd,YAAAoyD,OAAA,WACE,OACExxD,KAAKwe,IAAI,KAAiB,MAU9B,YAAA2zM,UAAA,WACE,OAAqCnyN,KAAKwe,IAAI,KAUhD,YAAAumE,YAAA,WACE,OACE/kF,KAAKwe,IAAI,KAWb,YAAA4zM,eAAA,WACE,OAAmCpyN,KAAKwe,IAAI,KAM9C,YAAAizM,qBAAA,WACEt5B,GAAen4L,KAAKmhD,SACpB,IAAMA,EAAUnhD,KAAKkyN,aACjB/wK,GACFnhD,KAAKmhD,QAAQt0C,YAAYs0C,IAO7B,YAAAuwK,iBAAA,WACM1xN,KAAKwxN,2BACPt5B,GAAWl4L,KAAKmhD,SAChBytI,GAAc5uL,KAAKwxN,0BACnBxxN,KAAKwxN,yBAA2B,MAElC,IAAMlzN,EAAM0B,KAAKwxD,SACjB,GAAIlzD,EAAK,CACP0B,KAAKwxN,yBAA2BjjC,GAC9BjwL,EACAmmN,GAAatyB,WACbnyL,KAAK68C,OACL78C,MAEFA,KAAKqyN,sBACL,IAAMp+J,EAAYj0D,KAAKopN,UACnB9qN,EAAIklN,+BACJllN,EAAIilN,sBACJvjN,KAAKmxN,YACPl9J,EAAU1xB,aAAaviC,KAAKmhD,QAAS8S,EAAUnmD,WAAW,IAAM,MAEhEmmD,EAAUpnD,YAAY7M,KAAKmhD,SAE7BnhD,KAAKsyN,mBAOT,YAAAz1K,OAAA,WACE78C,KAAKqyN,uBAMP,YAAAV,oBAAA,WACE3xN,KAAKqyN,uBAMP,YAAAT,sBAAA,WACE5xN,KAAKqyN,sBACLryN,KAAKsyN,kBAMP,YAAAT,yBAAA,WACE7xN,KAAKqyN,uBASP,YAAAP,WAAA,SAAW3wK,GACTnhD,KAAK8e,IAAI,GAAkBqiC,IAU7B,YAAAoM,OAAA,SAAOjvD,GACL0B,KAAK8e,IAAI,GAAcxgB,IASzB,YAAAyzN,UAAA,SAAU9/L,GACRjyB,KAAK8e,IAAI,GAAiBmT,IAW5B,YAAAyxI,YAAA,SAAYp3J,GACVtM,KAAK8e,IAAI,GAAmBxS,IAQ9B,YAAAgmN,eAAA,WACMtyN,KAAKoxN,SACPpxN,KAAKuyN,YAAYvyN,KAAKoxN,UAU1B,YAAAmB,YAAA,SAAYC,GACV,IAAMl0N,EAAM0B,KAAKwxD,SAEjB,GAAKlzD,GAAQA,EAAIykN,oBAAuB/iN,KAAKwe,IAAI,IAAjD,CAIA,IAAMilJ,EAAUzjK,KAAKyyN,QAAQn0N,EAAIykN,mBAAoBzkN,EAAIglN,WACnDniK,EAAUnhD,KAAKkyN,aACfQ,EAAc1yN,KAAKyyN,QAAQtxK,EAAS,CACxC,GAAWA,GACX,GAAYA,KAGRwxK,EAAqBH,GAA0B,GAE/CI,OAC0BxuN,IAA9BuuN,EAAmB/zF,OAAuB,GAAK+zF,EAAmB/zF,OACpE,IAAK6oD,GAAehkB,EAASivD,GAAc,CAEzC,IAAMnzC,EAAamzC,EAAY,GAAKjvD,EAAQ,GACtCovD,EAAcpvD,EAAQ,GAAKivD,EAAY,GACvCn+C,EAAYm+C,EAAY,GAAKjvD,EAAQ,GACrCqvD,EAAervD,EAAQ,GAAKivD,EAAY,GAExCluJ,EAAQ,CAAC,EAAG,GAgBlB,GAfI+6G,EAAa,EAEf/6G,EAAM,GAAK+6G,EAAaqzC,EACfC,EAAc,IAEvBruJ,EAAM,GAAKjjE,KAAKyoB,IAAI6oM,GAAeD,GAEjCr+C,EAAY,EAEd/vG,EAAM,GAAK+vG,EAAYq+C,EACdE,EAAe,IAExBtuJ,EAAM,GAAKjjE,KAAKyoB,IAAI8oM,GAAgBF,GAGrB,IAAbpuJ,EAAM,IAAyB,IAAbA,EAAM,GAAU,CACpC,IAAM7jE,EACJrC,EAAI0kN,UAAUjL,oBAEVgb,EAAWz0N,EAAI+kN,+BAA+B1iN,GACpD,IAAKoyN,EACH,OAEF,IAAMC,EAAc,CAACD,EAAS,GAAKvuJ,EAAM,GAAIuuJ,EAAS,GAAKvuJ,EAAM,IAE3DyuJ,EAAaN,EAAmB50C,WAAa,GACnDz/K,EAAI0kN,UAAU5K,gBAAgB,CAC5Bz3M,OAAQrC,EAAI+jN,+BAA+B2Q,GAC3C3iK,SAAU4iK,EAAW5iK,SACrBkoJ,OAAQ0a,EAAW1a,aAa3B,YAAAka,QAAA,SAAQtxK,EAAStsB,GACf,IAAMq+L,EAAM/xK,EAAQ2N,wBACd4oJ,EAAUwb,EAAI9+I,KAAO3iE,OAAO0hN,YAC5Bxb,EAAUub,EAAI/+I,IAAM1iE,OAAO2hN,YACjC,MAAO,CAAC1b,EAASC,EAASD,EAAU7iL,EAAK,GAAI8iL,EAAU9iL,EAAK,KAU9D,YAAAm9L,eAAA,SAAeC,GACbjyN,KAAK8e,IAAI,GAAsBmzM,IAQjC,YAAA/rD,WAAA,SAAWnhK,GACL/E,KAAK8oJ,SAAS/jJ,UAAYA,IAC5B/E,KAAKmhD,QAAQx7C,MAAMg3C,QAAU53C,EAAU,GAAK,OAC5C/E,KAAK8oJ,SAAS/jJ,QAAUA,IAQ5B,YAAAstN,oBAAA,WACE,IAAM/zN,EAAM0B,KAAKwxD,SACXllD,EAAWtM,KAAK+kF,cACtB,GAAKzmF,GAAQA,EAAIwmN,cAAiBx4M,EAAlC,CAKA,IAAM8mL,EAAQ90L,EAAIw3D,uBAAuBxpD,GACnCwmI,EAAUx0I,EAAIglN,UACpBtjN,KAAKqzN,uBAAuBjgC,EAAOtgD,QANjC9yI,KAAKkmK,YAAW,IAcpB,YAAAmtD,uBAAA,SAAuBjgC,EAAOtgD,GAC5B,IAAMntI,EAAQ3F,KAAKmhD,QAAQx7C,MACrBssB,EAASjyB,KAAKmyN,YAEdF,EAAcjyN,KAAKoyN,iBAEzBpyN,KAAKkmK,YAAW,GAEhB,IAAMv4I,EAAIpsB,KAAKirC,MAAM4mJ,EAAM,GAAKnhK,EAAO,IAAM,KACvCrE,EAAIrsB,KAAKirC,MAAM4mJ,EAAM,GAAKnhK,EAAO,IAAM,KACzCqhM,EAAO,KACPC,EAAO,KAEM,gBAAftB,GACe,gBAAfA,GACe,aAAfA,EAEAqB,EAAO,QAEQ,iBAAfrB,GACe,iBAAfA,GACe,cAAfA,IAEAqB,EAAO,QAGQ,eAAfrB,GACe,iBAAfA,GACe,gBAAfA,EAEAsB,EAAO,QAEQ,eAAftB,GACe,iBAAfA,GACe,gBAAfA,IAEAsB,EAAO,QAET,IAAMv6E,EAAY,oBAAas6E,EAAI,aAAKC,EAAI,uBAAe5lM,EAAC,aAAKC,EAAC,KAC9D5tB,KAAK8oJ,SAASyoE,YAAcv4E,IAC9Bh5I,KAAK8oJ,SAASyoE,WAAav4E,EAC3BrzI,EAAMqzI,UAAYA,EAElBrzI,EAAM6tN,YAAcx6E,IAQxB,YAAAn6C,WAAA,WACE,OAAO7+F,KAAKL,SAEhB,EA7dA,CAAsB,IA+dtB,YChlBO,SAAS,GAAUurC,EAAQ5Y,EAAOmhM,GACvC,IAAMC,OACctvN,IAAlBqvN,EAA8BvoL,EAAOk7C,QAAQqtI,GAAiB,GAAKvoL,EACjEyoL,EAAUD,EAAa1qN,QAAQ,KAEnC,OADA2qN,GAAuB,IAAbA,EAAiBD,EAAarwN,OAASswN,GAChCrhM,EACbohM,EACA,IAAI5yN,MAAM,EAAIwxB,EAAQqhM,GAASrpN,KAAK,KAAOopN,E,+dCa3CE,GAAY,IAOZC,GAAY,GAElB,4B,+CAIA,OAJ4B,QAC1B,YAAA9/B,eAAA,WACE,OAAO,IAAIm9B,GAAqBlxN,OAEpC,EAJA,CAA4B,IAiC5B,eAIE,WAAY07L,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCiwC,OAAQl9C,EAAQk9C,OAChBpvC,OAAQ9N,EAAQ8N,UAChB,MAKGqmN,4BAA8B,EAAKC,uBAAuB7zK,KAAK,GAMpE,EAAK8lK,gBACmB5hN,IAAtBzE,EAAQopH,WAA0BppH,EAAQopH,UAM5C,EAAKq9F,kBACqBhiN,IAAxBzE,EAAQwmN,aAA4BxmN,EAAQwmN,YAEzC,EAAKC,eACR,EAAKJ,YAAa,GAOpB,EAAKgO,qBACwB5vN,IAA3BzE,EAAQs0N,gBAA+Bt0N,EAAQs0N,eAMjD,EAAKC,iBAAc9vN,EAEnB,IAAM03B,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,iBAElDuqL,OACiBjiN,IAArBzE,EAAQ0mN,SAAyB1mN,EAAQ0mN,SAAW,eAEhDE,OACsBniN,IAA1BzE,EAAQ4mN,cAA8B5mN,EAAQ4mN,cAAgB,IAEnC,iBAAlBA,GAKT,EAAKE,eAAiB95M,SAASC,cAAc,QAC7C,EAAK65M,eAAe14M,YAAcw4M,GAElC,EAAKE,eAAiBF,EAGxB,IAAMh6K,OAA0BnoC,IAAlBzE,EAAQ4sC,MAAsB5sC,EAAQ4sC,MAAQ,IAEvC,iBAAVA,GAKT,EAAKm6K,OAAS/5M,SAASC,cAAc,QACrC,EAAK85M,OAAO34M,YAAcw+B,GAE1B,EAAKm6K,OAASn6K,EAGhB,IAAMo6K,EACJ,EAAKP,eAAiB,EAAKJ,WAAa,EAAKS,eAAiB,EAAKC,OAC/D95J,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAOriD,MAAQ87M,EACfz5J,EAAO//C,YAAY85M,GAEnB/5J,EAAOhhD,iBACLmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,IACvB,GAOF,EAAKi0K,UAAYxnN,SAASC,cAAc,OACxC,EAAKunN,UAAUr4L,UAAY,qBAO3B,EAAKs4L,MAAQz0N,EAAQ8pC,KAMrB,EAAK4qL,OAAS,IAAIC,GAAc,CAC9B7qL,KAAM9pC,EAAQ8pC,OAEhB,IAAM8qL,EAAQ,EAAKF,OAEf10N,EAAQojB,QACVpjB,EAAQojB,OAAOxb,SAAQ,SAAU/C,GAC/B+vN,EAAMnqK,SAAS5lD,MAInB,IAAM0uN,EAAMvmN,SAASC,cAAc,OACnCsmN,EAAIp3L,UAAY,qBAChBo3L,EAAIvtN,MAAM6uN,UAAY,aAMtB,EAAKC,YAAc,IAAI,GAAQ,CAC7BnoN,SAAU,CAAC,EAAG,GACd2lN,YAAa,gBACb9wK,QAAS+xK,IAEX,EAAKmB,OAAOrS,WAAW,EAAKyS,aAE5B,IAAM3N,EACJhrL,EACA,IADAA,mBAIA86J,IACC,EAAKovB,YAAc,EAAKI,aAAe,gBAAwB,KAC/D,EAAKA,aAAe,GAAK,qBACtBjlK,EAAU,EAAKA,QACrBA,EAAQrlB,UAAYgrL,EACpB3lK,EAAQt0C,YAAY,EAAKsnN,WACzBhzK,EAAQt0C,YAAY+/C,GAIpB,IAAMgZ,EAAQ,EAERq8I,EAAU,EAAKwS,YACfC,EAAa,EAAKD,YAAYvC,aAW9BlxE,EAAO,SAAUnhH,GACrB,IAR4C80L,EAQtCroN,EAPC,CACL63E,SAF0CwwI,EAQmB90L,GANtCskD,QACvBC,QAASuwI,EAAcvwI,SAMnBh6E,EAAcmqN,EAAM5R,2BACE,GAG5BV,EAAQv+C,YAAYt5J,IAGhBwqN,EAAY,SAAU/0L,GAC1B,IAAMz1B,EAAcmqN,EAAM5R,2BAA2B9iL,GAErD+lC,EAAMpU,SAASwxJ,UAAU1L,kBAAkBltM,GAE3CqH,OAAOkvC,oBAAoB,YAAaqgG,GACxCvvI,OAAOkvC,oBAAoB,UAAWi0K,I,OAKxCF,EAAW9oN,iBAAiB,aAAa,WACvC6F,OAAO7F,iBAAiB,YAAao1I,GACrCvvI,OAAO7F,iBAAiB,UAAWgpN,M,EAiazC,OA/lB0B,QA0MxB,YAAArnK,OAAA,SAAOjvD,GACL,IAAMu2N,EAAS70N,KAAKwxD,SACpB,GAAIlzD,IAAQu2N,EAAZ,CAGA,GAAIA,EAAQ,CACV,IAAMC,EAAUD,EAAO7R,UACnB8R,GACF90N,KAAK+0N,YAAYD,GAEnB90N,KAAKq0N,OAAOlS,UAAU,MAIxB,GAFA,YAAM50J,OAAM,UAACjvD,GAETA,EAAK,CACP0B,KAAKq0N,OAAOlS,UAAUniN,KAAKm0N,WAC3Bn0N,KAAKi9L,aAAa70L,KAChBmmL,GACEjwL,EACAwxL,GACA9vL,KAAKg1N,yBACLh1N,OAIJ,IAAMypC,EAAOnrC,EAAI0kN,UACbv5K,IACFzpC,KAAKi1N,UAAUxrL,GACXA,EAAKwuK,UACPj4M,KAAKq0N,OAAOtzJ,aACZ/gE,KAAKk1N,iBAIJl1N,KAAKq0N,OAAOvP,cACf9kN,KAAKm1N,oCAUX,YAAAH,yBAAA,SAAyBn1L,GACvB,GAAIA,EAAMp3B,MAAQw2M,GAAkB,CAClC,IAAM6V,EACJj1L,EAAc,SAEZi1L,GACF90N,KAAK+0N,YAAYD,GAEnB,IAAMM,EAAUp1N,KAAKwxD,SAASwxJ,UAC9BhjN,KAAKi1N,UAAUG,QAEdp1N,KAAKq0N,OAAOvP,cACZjlL,EAAMp3B,MAAQw2M,IAAsBp/K,EAAMp3B,MAAQw2M,IAEnDj/M,KAAKq0N,OAAOtzJ,cAShB,YAAAk0J,UAAA,SAAUxrL,GACR,IAAKzpC,KAAKo0N,MAAO,CAEf,IAAMgB,EAAU,IAAI,GAAK,CACvB7qC,WAAY9gJ,EAAKvnB,kBAEnBliB,KAAKq0N,OAAOlhK,QAAQiiK,GAGtB3rL,EAAKsmJ,kBACHglB,GAAalR,SACb7jM,KAAK8zN,6BAGP9zN,KAAK+zN,0BAQP,YAAAgB,YAAA,SAAYtrL,GACVA,EAAKumJ,qBACH+kB,GAAalR,SACb7jM,KAAK8zN,8BAQT,YAAAC,uBAAA,WACM/zN,KAAKg0N,iBACPh0N,KAAKq0N,OAAOrR,UAAU5uJ,YAAYp0D,KAAKwxD,SAASwxJ,UAAU1uJ,gBAe9D,YAAA+gK,gBAAA,WACE,IAAM/2N,EAAM0B,KAAKwxD,SACX+iK,EAAQv0N,KAAKq0N,OAEnB,GAAK/1N,EAAIwmN,cAAiByP,EAAMzP,aAAhC,CAIA,IAAMhyE,EAAoDx0I,EAAIglN,UAGxDhoM,EADOhd,EAAI0kN,UACGtI,wBAAwB5nE,GAE5C,IAAI9yI,KAAKk0N,cAAe,GAAa54M,EAAQtb,KAAKk0N,aAAlD,CAIAl0N,KAAKk0N,YAAc54M,EAEnB,IAAMg6M,EACJf,EAAMjR,UAIFiS,EADShB,EAAMvR,UACGtI,wBAAwB4a,GAE1CE,EAAejB,EAAMlR,+BACzB,GAAW/nM,IAEPm6M,EAAmBlB,EAAMlR,+BAC7B,GAAe/nM,IAGXo6M,EAAWn0N,KAAKyoB,IAAIwrM,EAAa,GAAKC,EAAiB,IACvDE,EAAYp0N,KAAKyoB,IAAIwrM,EAAa,GAAKC,EAAiB,IAExDG,EAAaN,EAAU,GACvBO,EAAcP,EAAU,GAG5BI,EAAWE,EAAa/B,IACxB8B,EAAYE,EAAchC,IAC1B6B,EAAWE,EAAahC,IACxB+B,EAAYE,EAAcjC,GAE1B5zN,KAAKk1N,eACKztC,GAAe8tC,EAAUj6M,IACnCtb,KAAK81N,eAST,YAAAZ,aAAA,WAKE,IAAM52N,EAAM0B,KAAKwxD,SACX+iK,EAAQv0N,KAAKq0N,OAEbvhF,EAAoDx0I,EAAIglN,UAGxDhoM,EADOhd,EAAI0kN,UACGtI,wBAAwB5nE,GAEtCijF,EAASxB,EAAMvR,UAKfgT,EAAQz0N,KAAKoG,IAAIisN,KAAyBryN,KAAK00N,IAErDnsC,GAAgBxuK,EADF,GAAK/Z,KAAKs5B,IAAI,EAAGm7L,EAAQ,GAAKnC,KAE5CkC,EAAOla,YAAY,GAAkBvgM,KAQvC,YAAAw6M,UAAA,WACE,IAAMx3N,EAAM0B,KAAKwxD,SACX+iK,EAAQv0N,KAAKq0N,OAEb5qL,EAAOnrC,EAAI0kN,UAEFuR,EAAMvR,UAEd1L,kBAAkB7tK,EAAKsuK,sBAOhC,YAAAme,WAAA,WACE,IAAM53N,EAAM0B,KAAKwxD,SACX+iK,EAAQv0N,KAAKq0N,OAEnB,GAAK/1N,EAAIwmN,cAAiByP,EAAMzP,aAAhC,CAIA,IAAMhyE,EAAoDx0I,EAAIglN,UAExD75K,EAAOnrC,EAAI0kN,UAEX+S,EAASxB,EAAMvR,UAEf3uJ,EAAWr0D,KAAKg0N,gBAAkB,GAAKvqL,EAAK6qB,cAE5C2tJ,EAAUjiN,KAAKy0N,YACfvB,EAAMlzN,KAAKy0N,YAAYvC,aACvBvxN,EAAS8oC,EAAKsuK,oBACd5zJ,EAAa1a,EAAKhnB,gBAClB0zM,EAAeJ,EAAOtzM,gBACtB6P,EAASwgH,EAAQ,GAAK3uF,EAAcgyK,EACpC5jM,EAAUugH,EAAQ,GAAK3uF,EAAcgyK,EAM3C,GAHAlU,EAAQv+C,YAAY/iK,GAGhBuyN,EAAK,CACPA,EAAIvtN,MAAM2sB,MAAQA,EAAQ,KAC1B4gM,EAAIvtN,MAAM4sB,OAASA,EAAS,KAC5B,IAAMymH,EAAY,UAAY3kF,EAAW,OACzC6+J,EAAIvtN,MAAMqzI,UAAYA,KAO1B,YAAAm8E,+BAAA,WACMn1N,KAAKo2N,sBAGTp2N,KAAKo2N,oBAAsBznC,GACzB3uL,KAAKq0N,OACL5P,GAAatyB,YACb,SAAUtyJ,UACD7/B,KAAKo2N,oBACZp2N,KAAKk2N,eAEPl2N,QAQJ,YAAA6mN,aAAA,SAAahnL,GACXA,EAAMswE,iBACNnwG,KAAKynN,iBAMP,YAAAA,cAAA,WACEznN,KAAKmhD,QAAQpjB,UAAUS,OAAOq4J,IAC1B72L,KAAKgmN,WACPjuB,GAAY/3L,KAAKymN,eAAgBzmN,KAAK0mN,QAEtC3uB,GAAY/3L,KAAK0mN,OAAQ1mN,KAAKymN,gBAEhCzmN,KAAKgmN,YAAchmN,KAAKgmN,WAIxB,IAAMuO,EAAQv0N,KAAKq0N,OACnB,IAAKr0N,KAAKgmN,WAAY,CACpB,GAAIuO,EAAMzP,aAGR,OAFA9kN,KAAKk0N,iBAAc9vN,OACnBmwN,EAAM13K,SAGR03K,EAAMxzJ,aACN/gE,KAAKk1N,eACLl1N,KAAKm1N,mCAST,YAAAzN,eAAA,WACE,OAAO1nN,KAAKomN,cAQd,YAAAmB,eAAA,SAAepB,GACTnmN,KAAKomN,eAAiBD,IAG1BnmN,KAAKomN,aAAeD,EACpBnmN,KAAKmhD,QAAQpjB,UAAUS,OAAO,qBACzB2nL,GAAenmN,KAAKgmN,YACvBhmN,KAAKynN,kBAWT,YAAAE,aAAA,SAAa5+F,GACN/oH,KAAKomN,cAAgBpmN,KAAKgmN,aAAej9F,GAG9C/oH,KAAKynN,iBAQP,YAAAG,aAAA,WACE,OAAO5nN,KAAKgmN,YAQd,YAAAqQ,kBAAA,WACE,OAAOr2N,KAAKg0N,iBAQd,YAAAsC,kBAAA,SAAkBrC,GACZj0N,KAAKg0N,kBAAoBC,IAG7Bj0N,KAAKg0N,gBAAkBC,EACuB,IAA1Cj0N,KAAKwxD,SAASwxJ,UAAU1uJ,gBACtBt0D,KAAKg0N,gBACPh0N,KAAK+zN,yBAEL/zN,KAAKq0N,OAAOrR,UAAU5uJ,YAAY,GAEpCp0D,KAAKk0N,iBAAc9vN,EACnBpE,KAAKq1N,kBACLr1N,KAAKk2N,gBAST,YAAAK,eAAA,WACE,OAAOv2N,KAAKq0N,QAQd,YAAAx3K,OAAA,SAAOipK,GACL9lN,KAAKq1N,kBACLr1N,KAAKk2N,cAET,EA/lBA,CAA0B,IAimB1B,Y,+dC7pBMM,GAAa,QAON,GACF,UADE,GAED,WAFC,GAGD,WAHC,GAIH,SAJG,GAKP,KAOAC,GAAiB,CAAC,EAAG,EAAG,GAMxBC,GAAc,KAAO,IA8C3B,eAIE,WAAYh7B,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtC5/J,OACkB13B,IAAtBzE,EAAQm8B,UACJn8B,EAAQm8B,UACRn8B,EAAQg3N,IACR,eACA,gB,SAEN,YAAM,CACJx1K,QAASx0C,SAASC,cAAc,OAChCiwC,OAAQl9C,EAAQk9C,OAChBpvC,OAAQ9N,EAAQ8N,UAChB,MAKGY,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAK+nC,cAAgBjqN,SAASC,cAAc,OAC5C,EAAKgqN,cAAc96L,UAAYA,EAAY,SAE3C,EAAKqlB,QAAQrlB,UAAYA,EAAY,IAAM66J,GAC3C,EAAKx1I,QAAQt0C,YAAY,EAAK+pN,eAM9B,EAAKC,WAAa,KAMlB,EAAKC,eAAiC1yN,IAArBzE,EAAQwoJ,SAAyBxoJ,EAAQwoJ,SAAW,GAMrE,EAAK4uE,UAAYp3N,EAAQg1E,SAMzB,EAAKqmH,kBAAmB,EAMxB,EAAKg8B,oBAAiB5yN,EAMtB,EAAK6yN,cAAgB,GAErB,EAAKlnC,kBAAkBymC,GAAY,EAAKU,qBAExC,EAAKC,SAASx3N,EAAQg8C,OAAS,IAM/B,EAAKy7K,UAAYz3N,EAAQg3N,MAAO,EAMhC,EAAKU,eAAiB13N,EAAQq2N,OAAS,EAMvC,EAAKsB,cAAgB33N,EAAQyZ,OAAQ,EAMrC,EAAKm+M,KAAO53N,EAAQotJ,UAAO3oJ,E,EAmV/B,OA9bwB,QAqHtB,YAAAygM,SAAA,WACE,OAAO7kM,KAAKwe,IAAIg4M,KAMlB,YAAAU,oBAAA,WACEl3N,KAAKwnN,kBASP,YAAA2P,SAAA,SAASx7K,GACP37C,KAAK8e,IAAI03M,GAAY76K,IAQvB,YAAA67K,OAAA,SAAOzqE,GACL/sJ,KAAKu3N,KAAOxqE,GAMd,YAAAy6D,eAAA,WACE,IAAMh1B,EAAYxyL,KAAK62N,WAEvB,GAAKrkC,EAAL,CAQA,IAAM7xL,EAAS6xL,EAAU7xL,OACnB4pL,EAAaiI,EAAUjI,WACvB5uI,EAAQ37C,KAAK6kM,WACb4yB,EACJ97K,GAAS,GAAgB,WAAoB,UAC3C8rJ,EAAkBhD,GACpBla,EACAiI,EAAUruI,WACVxjD,EACA82N,GAGItvE,EACHnoJ,KAAK82N,WAAa92N,KAAKu3N,MAAQb,IAAgBA,GAE5C/hJ,OACevwE,IAAnBpE,KAAK+2N,UACA/2N,KAAK+2N,WAAa/2N,KAAKu3N,MAAQb,IAAgBA,QAChDtyN,EAEFszN,EAAevvE,EAAWs/C,EAC1Bh9K,EAAS,GACb,GAAIkxB,GAAS,GAAe,CAC1B,IAAMkxG,EAAkB,GAAgB,aACxC6qE,GAAgB7qE,GACGA,EAAkB,IACnCpiI,EAAS,IACTg9K,GAAmB,MACViwB,EAAe7qE,GACxBpiI,EAAS,IACTg9K,GAAmB,IAEnBh9K,EAAS,SAEFkxB,GAAS,GACd+7K,EAAe,OACjBjtM,EAAS,KACTg9K,GAAmB,OACViwB,EAAe,UACxBjtM,EAAS,KACTg9K,GAAmB,QAEnBh9K,EAAS,KACTg9K,GAAmB,UAEZ9rJ,GAAS,IAClB8rJ,GAAmB,KACnBh9K,EAAS,MACAkxB,GAAS,GACd+7K,EAAe,MACjBjtM,EAAS,KACTg9K,GAAmB,KACViwB,EAAe,GACxBjtM,EAAS,KACTg9K,GAAmB,KACViwB,EAAe,IACxBjtM,EAAS,KAETA,EAAS,KACTg9K,GAAmB,KAEZ9rJ,GAAS,GACd+7K,EAAe,OACjBjtM,EAAS,KACTg9K,GAAmB,OACViwB,EAAe,UACxBjtM,EAAS,KACTg9K,GAAmB,YAEnBh9K,EAAS,KACTg9K,GAAmB,WAGrB,GAAO,EAAO,IAMhB,IAHA,IACIntL,EAAOgY,EAAOqlM,EACdC,EAAeC,EAAeC,EAwB9BpuN,EA1BAxH,EAAI,EAAIX,KAAKonD,MAAMpnD,KAAKoG,IAAIwgJ,EAAWs/C,GAAmBlmM,KAAKoG,IAAI,OAG1D,CACXgwN,EAAep2N,KAAKonD,MAAMzmD,EAAI,GAC9B,IAAMyxN,EAAUpyN,KAAKs5B,IAAI,GAAI88L,GAG7B,GAFAr9M,EAAQm8M,IAAiBv0N,EAAI,EAAK,GAAK,GAAKyxN,EAC5CrhM,EAAQ/wB,KAAKirC,MAAMlyB,EAAQmtL,GACvBzmM,MAAMsxB,GAGR,OAFAtyB,KAAKmhD,QAAQx7C,MAAMg3C,QAAU,YAC7B38C,KAAKg7L,kBAAmB,GAG1B,QAAiB52L,IAAbuwE,GAA0BriD,GAASqiD,EAAU,CAC/Cr6D,EAAQs9M,EACRtlM,EAAQulM,EACRF,EAAeG,EACf,MACK,GAAIxlM,GAAS61H,EAClB,MAEFyvE,EAAgBt9M,EAChBu9M,EAAgBvlM,EAChBwlM,EAAuBH,IACrBz1N,EAIFwH,EADE1J,KAAKo3N,UACAp3N,KAAK+3N,eAAezlM,EAAOhY,EAAOmQ,GAElCnQ,EAAM8rE,QAAQuxI,EAAe,GAAKA,EAAe,GAAK,IAAMltM,EAGjEzqB,KAAKi3N,eAAiBvtN,IACxB1J,KAAK42N,cAAczpN,UAAYzD,EAC/B1J,KAAKi3N,cAAgBvtN,GAGnB1J,KAAKg3N,gBAAkB1kM,IACzBtyB,KAAK42N,cAAcjxN,MAAM2sB,MAAQA,EAAQ,KACzCtyB,KAAKg3N,eAAiB1kM,GAGnBtyB,KAAKg7L,mBACRh7L,KAAKmhD,QAAQx7C,MAAMg3C,QAAU,GAC7B38C,KAAKg7L,kBAAmB,QAhIpBh7L,KAAKg7L,mBACPh7L,KAAKmhD,QAAQx7C,MAAMg3C,QAAU,OAC7B38C,KAAKg7L,kBAAmB,IAyI9B,YAAA+8B,eAAA,SAAezlM,EAAOiY,EAAO9f,GAM3B,IALA,IAAMutM,EACJ,OAASz2N,KAAKirC,MAAMxsC,KAAKi4N,yBAAyBh1J,iBAC9Ci1J,EAAa,GACbC,EAAY7lM,EAAQtyB,KAAKq3N,eAC3BzqH,EAAkB,yBACb1qG,EAAI,EAAGA,EAAIlC,KAAKq3N,eAAgBn1N,IAC7B,IAANA,GAEFg2N,EAAW9vN,KAAKpI,KAAK2P,aAAa,WAAYzN,IAEhDg2N,EAAW9vN,KACT,uCAGEwkG,EAHF,mBAOEurH,EAPF,cAWEn4N,KAAK2P,aAAa,WAAYzN,IAE7BA,EAAI,GAAM,GAA6B,IAAxBlC,KAAKq3N,eACjBr3N,KAAKo4N,eAAel2N,EAAGowB,GAAO,EAAOiY,EAAO9f,GAC5C,IACJ,UAEAvoB,IAAMlC,KAAKq3N,eAAiB,GAI9Ba,EAAW9vN,KAAKpI,KAAKo4N,eAAel2N,EAAI,EAAGowB,GAAO,EAAMiY,EAAO9f,IAGjEmiF,EACsB,2BAApBA,EACI,0BACA,yBAsBR,MALE,gCAbE5sG,KAAKs3N,cAEL,4CAGAhlM,EACA,QACA0lM,EACA,SAEa,IAMfE,EAAW5tN,KAAK,IAChB,UAUJ,YAAAqF,aAAA,SAAarD,EAAUpK,GAErB,MACE,sDAGAoK,EAHA,UAFuB,aAAbA,EAA0B,GAAK,IACpC,eAsBT,YAAA8rN,eAAA,SAAel2N,EAAGowB,EAAO+lM,EAAQ9tL,EAAO9f,GACtC,IAEM6tM,GADE,IAANp2N,EAAU,EAAIX,KAAKirC,MAAOjC,EAAQvqC,KAAKq3N,eAAkBn1N,EAAI,KAAO,MACjC,IAANA,EAAU,GAAK,IAAMuoB,GAGpD,MACE,wDAHmB,IAANvoB,GAAW,EAAKowB,EAAQtyB,KAAKq3N,gBAAmB,GAG7D,mBAOO,IAANn1N,EAAU,OAAS,UAPpB,iBAFqB,IAANA,EAAU,EAAKowB,EAAQtyB,KAAKq3N,eAAkB,GAE7D,aAaCgB,EAAS/lM,EAAQ,KAAO,SAbzB,MAgBAgmM,EACA,UAQJ,YAAAL,sBAAA,WACE,IAAM9zK,EAAasgJ,GACjBzkM,KAAK62N,WAAWtsC,WAChBvqL,KAAK62N,WAAW1yK,WAChBnkD,KAAK62N,WAAWl2N,OAChB,WAEIosJ,EAAM/sJ,KAAKu3N,MAAQb,GAEzB,OAAO9uN,WAAWu8C,EAAWlhC,aADN,IAAO,MAC8B8pI,GAQ9D,YAAAlwG,OAAA,SAAOipK,GACL,IAAMzyB,EAAayyB,EAASzyB,WAI1BrzL,KAAK62N,WAHFxjC,EAGeA,EAAWb,UAFX,KAIpBxyL,KAAKwnN,kBAET,EA9bA,CAAwB,IAgcxB,Y,+dCtbA,SAlEA,YAIE,WAAY9rB,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCa,OAAQ9N,EAAQ8N,UAChB,MAMG6N,OAAS3b,EAAQ2b,OAAS3b,EAAQ2b,OAAS,KAEhD,IAAMwgB,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,iBAElDyQ,OAA0BnoC,IAAlBzE,EAAQ4sC,MAAsB5sC,EAAQ4sC,MAAQ,IACtD85K,OACiBjiN,IAArBzE,EAAQ0mN,SAAyB1mN,EAAQ0mN,SAAW,gBAChDz5J,EAASjgD,SAASC,cAAc,UACtCggD,EAAOx/B,aAAa,OAAQ,UAC5Bw/B,EAAOriD,MAAQ87M,EACfz5J,EAAO//C,YACY,iBAAV0/B,EAAqB5/B,SAASi8M,eAAer8K,GAASA,GAG/DqgB,EAAOhhD,iBACLmjL,GAAU18I,MACV,EAAKw0K,aAAa3mK,KAAK,IACvB,GAGF,IAAM4mK,EACJhrL,EAAY,IAAZA,mBAA6C86J,GACzCz1I,EAAU,EAAKA,Q,OACrBA,EAAQrlB,UAAYgrL,EACpB3lK,EAAQt0C,YAAY+/C,G,EAuBxB,OAhE2B,QAgDzB,YAAAi6J,aAAA,SAAahnL,GACXA,EAAMswE,iBACNnwG,KAAKu4N,sBAMP,YAAAA,mBAAA,WACE,IACM9uL,EADMzpC,KAAKwxD,SACAwxJ,UACX1nM,EAAUtb,KAAKsb,OAEjBtb,KAAKsb,OADLmuB,EAAKvnB,gBAAgB6E,YAEzB0iB,EAAKoyK,YAAY,GAAkBvgM,KAEvC,EAhEA,CAA2B,I,+dCTrBk9M,GACM,EADNA,GAEQ,EAqBd,eAIE,WAAY98B,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAAM,CACJv6I,QAASx0C,SAASC,cAAc,OAChCiwC,OAAQl9C,EAAQk9C,UAChB,MAMGiiJ,kBAAoB,GAQzB,EAAK25B,wBAAqBr0N,EAS1B,EAAKs0N,WAAaF,GAMlB,EAAK35B,UAML,EAAK85B,aAAe,EAMpB,EAAKC,YAAc,EAMnB,EAAKC,QAML,EAAKC,QAQL,EAAKC,WAAa,KAOlB,EAAKC,oBAAqB,EAM1B,EAAKhR,eAAiC5jN,IAArBzE,EAAQ0wD,SAAyB1wD,EAAQ0wD,SAAW,IAErE,IAAMv0B,OACkB13B,IAAtBzE,EAAQm8B,UAA0Bn8B,EAAQm8B,UAAY,gBAClDm9L,EAAetsN,SAASC,cAAc,UAC5CqsN,EAAa7rM,aAAa,OAAQ,UAClC6rM,EAAan9L,UAAYA,EAAY,UAAY66J,GACjD,IAAMuiC,EAAmB,EAAK/3K,Q,OAC9B+3K,EAAiBp9L,UACfA,EAAY,IAAZA,mBAA6C86J,GAC/CsiC,EAAiBrsN,YAAYosN,GAE7BC,EAAiBttN,iBACf,GACA,EAAKutN,oBAAoBj5K,KAAK,IAC9B,GAEFg5K,EAAiBttN,iBACf,GACA,EAAKwtN,mBAAmBl5K,KAAK,IAC7B,GAEFg5K,EAAiBttN,iBACf,GACA,EAAKytN,kBAAkBn5K,KAAK,IAC5B,GAGFg5K,EAAiBttN,iBACfmjL,GAAU18I,MACV,EAAKinL,sBAAsBp5K,KAAK,IAChC,GAEF+4K,EAAartN,iBAAiBmjL,GAAU18I,MAAOy7B,IAAiB,G,EAmOpE,OAxVyB,QAgIvB,YAAAvgB,OAAA,SAAOjvD,GACL,YAAMivD,OAAM,UAACjvD,GACTA,GACFA,EAAIu+C,UAYR,YAAA08K,YAAA,WACE,IAAMtlK,EAAYj0D,KAAKmhD,QACnBq4K,EAAiBvlK,EAAUrmD,YAC3B6rN,EAAkBxlK,EAAUqzD,aAChC,GAAuB,IAAnBkyG,GAA4C,IAApBC,EAC1B,OAAQz5N,KAAKg5N,oBAAqB,EAGpC,IAAMU,EAAiB3yJ,iBAAiB9S,GACxCulK,GACE5xN,WAAW8xN,EAA6B,cACxC9xN,WAAW8xN,EAA4B,aACzCD,GACE7xN,WAAW8xN,EAA2B,YACtC9xN,WAAW8xN,EAA8B,eAC3C,IAAMC,EAAoC1lK,EAA2B,kBAC/D2lK,EAAa7yJ,iBAAiB4yJ,GAC9BE,EACJF,EAAM/rN,YACNhG,WAAWgyN,EAAwB,aACnChyN,WAAWgyN,EAAuB,YAC9BE,EACJH,EAAMryG,aACN1/G,WAAWgyN,EAAsB,WACjChyN,WAAWgyN,EAAyB,cAUtC,OATA55N,KAAK+4N,WAAa,CAACc,EAAYC,GAE3BN,EAAiBC,GACnBz5N,KAAK04N,WAAaF,GAClBx4N,KAAK44N,YAAcY,EAAiBK,IAEpC75N,KAAK04N,WAAaF,GAClBx4N,KAAK24N,aAAec,EAAkBK,GAEhC95N,KAAKg5N,oBAAqB,GAOpC,YAAAM,sBAAA,SAAsBz5L,GACpB,IAAM4J,EAAOzpC,KAAKwxD,SAASwxJ,UAErB+W,EAAmB/5N,KAAKg6N,qBAC5Bn6L,EAAM63K,QAAU13M,KAAK+4N,WAAW,GAAK,EACrCl5L,EAAM83K,QAAU33M,KAAK+4N,WAAW,GAAK,GAGjC50K,EAAankD,KAAKi6N,0BAA0BF,GAC5Cp0D,EAAOl8H,EAAK20K,mBAAmB30K,EAAKmxK,qBAAqBz2J,IAE/D1a,EAAK2uK,gBAAgB,CACnBzyC,KAAMA,EACNt1G,SAAUrwD,KAAKgoN,UACfzP,OAAQrN,MASZ,YAAAiuB,oBAAA,SAAoBt5L,GAClB,IAAK7/B,KAAK6+L,WAAah/J,EAAMpyB,SAAWzN,KAAKmhD,QAAQizH,kBAAmB,CACtE,IAAMjzH,EACJnhD,KAAKmhD,QAAyB,kBAOhC,GALAnhD,KAAKwxD,SAASwxJ,UAAUhF,mBACxBh+M,KAAK64N,QAAUh5L,EAAMskD,QAAUv8E,WAAWu5C,EAAQx7C,MAAMyuE,MACxDp0E,KAAK84N,QAAUj5L,EAAMukD,QAAUx8E,WAAWu5C,EAAQx7C,MAAMwuE,KACxDn0E,KAAK6+L,WAAY,EAEqB,IAAlC7+L,KAAK8+L,kBAAkBz7L,OAAc,CACvC,IAAM8/J,EAAOnjK,KAAKo5N,mBACZtvJ,EAAM9pE,KAAKq5N,kBACXh2C,EAAMrjL,KAAKwxD,SAASyuI,mBAC1BjgM,KAAK8+L,kBAAkB12L,KACrBmmL,GAAOlL,EAAK,GAA8BlgB,EAAMnjK,MAChDuuL,GAAOlL,EAAK,GAA4Bv5G,EAAK9pE,UAYrD,YAAAo5N,mBAAA,SAAmBv5L,GACjB,GAAI7/B,KAAK6+L,UAAW,CAClB,IAAM9U,EAASlqJ,EAAMskD,QAAUnkF,KAAK64N,QAC9B7uC,EAASnqJ,EAAMukD,QAAUpkF,KAAK84N,QAC9BiB,EAAmB/5N,KAAKg6N,qBAAqBjwC,EAAQC,GAC3DhqL,KAAKy4N,mBACHz4N,KAAKi6N,0BAA0BF,GACjC/5N,KAAKwxD,SAASwxJ,UAAUjsJ,cAAc/2D,KAAKy4N,sBAS/C,YAAAY,kBAAA,SAAkBx5L,GACZ7/B,KAAK6+L,YACM7+L,KAAKwxD,SAASwxJ,UACtB/E,iBAELj+M,KAAK6+L,WAAY,EACjB7+L,KAAK64N,aAAUz0N,EACfpE,KAAK84N,aAAU10N,EACfpE,KAAK8+L,kBAAkBv3L,QAAQqnL,IAC/B5uL,KAAK8+L,kBAAkBz7L,OAAS,IAUpC,YAAA62N,kBAAA,SAAkBz7M,GAChB,IAAMnS,EAAWtM,KAAKm6N,0BAA0B17M,GAC1Ck7M,EAAoC35N,KAAKmhD,QAAyB,kBAEpEnhD,KAAK04N,YAAcF,GACrBmB,EAAMh0N,MAAMyuE,KAAOp0E,KAAK44N,YAActsN,EAAW,KAEjDqtN,EAAMh0N,MAAMwuE,IAAMn0E,KAAK24N,aAAersN,EAAW,MAcrD,YAAA0tN,qBAAA,SAAqBrsM,EAAGC,GAOtB,OAAO+8J,GALH3qL,KAAK04N,aAAeF,GACb7qM,EAAI3tB,KAAK44N,YAEThrM,EAAI5tB,KAAK24N,aAEC,EAAG,IAW1B,YAAAsB,0BAAA,SAA0B3tN,GAExB,OADWtM,KAAKwxD,SAASwxJ,UAAUhI,+BAC5B7xJ,CAAG,EAAI78C,IAYhB,YAAA6tN,0BAAA,SAA0B17M,GAExB,OAAOksK,GAAM,EADF3qL,KAAKwxD,SAASwxJ,UAAU7H,+BAClBhyJ,CAAG1qC,GAAM,EAAG,IAQ/B,YAAAo+B,OAAA,SAAOipK,GACL,GAAKA,EAASzyB,aAGTrzL,KAAKg5N,oBAAuBh5N,KAAKu5N,eAAtC,CAGA,IAAM96M,EAAMqnM,EAASzyB,WAAWb,UAAUruI,WAC1CnkD,KAAKy4N,mBAAqBh6M,EAC1Bze,KAAKk6N,kBAAkBz7M,KAE3B,EAxVA,CAAyB,IA0VzB,Y,+dCzTA,eAOE,WAAY27M,GAAZ,MACE,cAAO,KAkDP,GA7CA,EAAK/rN,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKwrC,SAAMj2N,EAMX,EAAKk2N,cAAgB,WAOrB,EAAKC,OAAS,KAMd,EAAKC,oBAAiBp2N,EAMtB,EAAKq2N,mBAAqB,KAE1B,EAAK1qC,kBAAkB,EAAKuqC,cAAe,EAAKI,wBAE5CN,EACF,GAGQ,mBADa,EAAgD,sBAEnE,CACA,IAAM95N,EAAmC,EACzC,EAAKuH,YAAYvH,OACZ,CAEL,IAAMi0B,EAAa6lM,EACnB,EAAK5qC,cAAcj7J,G,SAmK3B,OAxOsB,QAgFpB,YAAA/pB,MAAA,WACE,IAAMA,EAAyC,IACzChL,EAAQQ,KAAK2vL,gBAAkB3vL,KAAK0vL,gBAAkB,MAE5DllL,EAAMmwN,gBAAgB36N,KAAK46N,mBAC3B,IAAMt6N,EAAWN,KAAKmB,cAClBb,GACFkK,EAAM3C,YAAqCvH,EAASkK,SAEtD,IAAM7E,EAAQ3F,KAAKmG,WAInB,OAHIR,GACF6E,EAAM9E,SAASC,GAEV6E,GAWT,YAAArJ,YAAA,WACE,OAA0CnB,KAAKwe,IAAIxe,KAAKs6N,gBAU1D,YAAA32N,MAAA,WACE,OAAO3D,KAAKq6N,KAUd,YAAAO,gBAAA,WACE,OAAO56N,KAAKs6N,eASd,YAAAn0N,SAAA,WACE,OAAOnG,KAAKu6N,QASd,YAAAM,iBAAA,WACE,OAAO76N,KAAKw6N,gBAMd,YAAAM,sBAAA,WACE96N,KAAK2zF,WAMP,YAAA+mI,uBAAA,WACM16N,KAAKy6N,qBACP7rC,GAAc5uL,KAAKy6N,oBACnBz6N,KAAKy6N,mBAAqB,MAE5B,IAAMn6N,EAAWN,KAAKmB,cAClBb,IACFN,KAAKy6N,mBAAqBlsC,GACxBjuL,EACAyuL,GAAUhyC,OACV/8I,KAAK86N,sBACL96N,OAGJA,KAAK2zF,WAUP,YAAA9rF,YAAA,SAAYvH,GACVN,KAAK8e,IAAI9e,KAAKs6N,cAAeh6N,IAY/B,YAAAoF,SAAA,SAASq1N,GACP/6N,KAAKu6N,OAASQ,EACd/6N,KAAKw6N,eAAkBO,EAEnBC,GAAoBD,QADpB32N,EAEJpE,KAAK2zF,WAYP,YAAAzvF,MAAA,SAAM9E,GACJY,KAAKq6N,IAAMj7N,EACXY,KAAK2zF,WAUP,YAAAgnI,gBAAA,SAAgB9xN,GACd7I,KAAKgwL,qBAAqBhwL,KAAKs6N,cAAet6N,KAAK06N,wBACnD16N,KAAKs6N,cAAgBzxN,EACrB7I,KAAK+vL,kBAAkB/vL,KAAKs6N,cAAet6N,KAAK06N,wBAChD16N,KAAK06N,0BAET,EAxOA,CAAsB,IAkPf,SAASM,GAAoBr/L,GAClC,MAAmB,mBAARA,EACFA,GAMH76B,MAAMC,QAAQ46B,GAChB,EAASA,GAET,EAAqD,mBAArB,EAAe,UAAkB,IAEjE,EAAS,CADuD,IAG3D,WACL,OAAO,IATT,IAAI,EAaR,Y,+dC/TA,eAME,WAAYvxB,EAAa+jM,GAAzB,MACE,cAAO,K,OACHA,IAAertM,MAAMC,QAAQqJ,EAAY,IAC3C,EAAK6jM,mBACHE,EAC6B,GAG/B,EAAKltM,eACyD,EAG5DktM,G,EAqKR,OAvLyB,QA4BvB,YAAA8sB,YAAA,SAAY5lM,GACLr1B,KAAKuoL,gBAGR,EAAOvoL,KAAKuoL,gBAAiBlzJ,EAAM2tB,sBAFnChjD,KAAKuoL,gBAAkBlzJ,EAAM2tB,qBAAqBr4C,QAIpD3K,KAAK2zF,WAQP,YAAAnpF,MAAA,WACE,IAAM0wN,EAAa,IAAIrrN,EACrB7P,KAAKuoL,gBAAgB59K,QACrB3K,KAAK2rC,QAGP,OADAuvL,EAAWhrC,gBAAgBlwL,MACpBk7N,GAUT,YAAAvuB,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,GAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GACrE,OAAOi/K,EAIT,IAFA,IAAMtkB,EAAkBvoL,KAAKuoL,gBACvBC,EAASxoL,KAAKwoL,OACXtmL,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAQnB,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CAChE,IAAMwmB,EAAkB,GACtBrhL,EACAC,EACA26J,EAAgBrmL,GAChBqmL,EAAgBrmL,EAAI,IAEtB,GAAI8sM,EAAkBnC,EAAoB,CACxCA,EAAqBmC,EACrB,IAAK,IAAI13L,EAAI,EAAGA,EAAIkxK,IAAUlxK,EAC5Bs1L,EAAat1L,GAAKixK,EAAgBrmL,EAAIoV,GAExCs1L,EAAavpM,OAASmlL,GAG1B,OAAOqkB,GAQT,YAAAvrM,eAAA,WACE,OAAO2uM,GACLjwM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,SAUT,YAAAzuB,SAAA,SAASjwI,GACP,IAAMlV,EAAK5U,KAAKuoL,gBAEZvoL,KAAKuoL,gBAAgBllL,OAASrD,KAAKwoL,OADnC,EAEJ,OAAI1+J,EAAQ,GAAKlV,GAAKkV,EACb,KAEF,IAAI,GACT9pB,KAAKuoL,gBAAgB59K,MACnBmf,EAAQ9pB,KAAKwoL,QACZ1+J,EAAQ,GAAK9pB,KAAKwoL,QAErBxoL,KAAK2rC,SAST,YAAAs4G,UAAA,WAME,IALA,IAAMskC,EAAkBvoL,KAAKuoL,gBACvB58I,EAAS3rC,KAAK2rC,OACd68I,EAASxoL,KAAKwoL,OAEd1mL,EAAS,GACNI,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAQnB,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CAChE,IAAMnzJ,EAAQ,IAAI,GAAMkzJ,EAAgB59K,MAAMzI,EAAGA,EAAIsmL,GAAS78I,GAC9D7pC,EAAOsG,KAAKitB,GAEd,OAAOvzB,GAQT,YAAAmI,QAAA,WACE,MAAO,cAST,YAAAsjM,iBAAA,SAAiBjyL,GAGf,IAFA,IAAMitK,EAAkBvoL,KAAKuoL,gBACvBC,EAASxoL,KAAKwoL,OACXtmL,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAQnB,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CAGhE,GAAIhB,GAAWlsK,EAFLitK,EAAgBrmL,GAChBqmL,EAAgBrmL,EAAI,IAE5B,OAAO,EAGX,OAAO,GAST,YAAAjB,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzBvoL,KAAKuoL,gBAAgBllL,OAAS+rM,GAC5BpvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,QAEPxoL,KAAK2zF,WAET,EAvLA,CAAyB,IAyLzB,YC1LO,SAASwnI,GACd5yC,EACAt2J,EACA63C,EACA0+G,EACAixB,EACAlO,EACAtF,GAEA,IAAInnM,EAAGipC,EACDnzB,GAAKk1D,EAAM73C,GAAUu2J,EAC3B,GAAU,IAAN5zK,EACF9V,EAAImzB,OACC,GAAU,IAANrd,EACT9V,EAAImzB,EACJ8V,EAAI0xK,OACC,GAAU,IAAN7kM,EAAS,CAKlB,IAJA,IAAI+wI,EAAK4iC,EAAgBt2J,GACrB2zH,EAAK2iC,EAAgBt2J,EAAS,GAC9B,EAAS,EACPmpM,EAAoB,CAAC,GAClBl5N,EAAI+vB,EAASu2J,EAAQtmL,EAAI4nE,EAAK5nE,GAAKsmL,EAAQ,CAClD,IAAMU,EAAKX,EAAgBrmL,GACrBinL,EAAKZ,EAAgBrmL,EAAI,GAC/B,GAAUX,KAAKkrC,MAAMy8I,EAAKvjC,IAAOujC,EAAKvjC,IAAOwjC,EAAKvjC,IAAOujC,EAAKvjC,IAC9Dw1E,EAAkBhzN,KAAK,GACvBu9I,EAAKujC,EACLtjC,EAAKujC,EAEP,IAAM17K,EAASgsM,EAAW,EACpB3vL,E/GjCH,SAAsBuxM,EAAUC,EAAQC,GAO7C,IANA,IAAIC,EAAKC,EACHC,EAAaH,GAAkBr3C,EACjCy3C,EAAM,EACNC,EAAOP,EAASh4N,OAChBo2B,GAAQ,EAELkiM,EAAMC,IAIXH,GAAOC,EAAWL,EADlBG,EAAMG,GAAQC,EAAOD,GAAQ,IACIL,IAEvB,EAERK,EAAMH,EAAM,GAGZI,EAAOJ,EACP/hM,GAASgiM,GAKb,OAAOhiM,EAAQkiM,GAAOA,E+GSNE,CAAaT,EAAmB3tN,GAC1Cqc,EAAQ,GACVie,GACGt6B,EAAS2tN,GAAmBtxM,EAAQ,KACpCsxM,GAAmBtxM,EAAQ,GAAKsxM,GAAmBtxM,EAAQ,IAC9DhrB,EAAImzB,IAAWnI,EAAQ,GAAK0+J,GAE5B1pL,EAAImzB,EAASnI,EAAQ0+J,EAGzB,IAAM0d,EAAYD,EAAgB,EAAIA,EAAgB,EAChDuF,EAAOD,GAAsB,IAAIzqM,MAAMolM,GAC7C,IAAShkM,EAAI,EAAGA,EAAIgkM,IAAahkM,EAC/BspM,EAAKtpM,QACGkC,IAANtF,EACIw4D,SACMlzD,IAAN2jC,EACAwgJ,EAAgBzpL,EAAIoD,GACpBgpL,GAAK3C,EAAgBzpL,EAAIoD,GAAIqmL,EAAgBzpL,EAAI0pL,EAAStmL,GAAI6lC,GAEtE,OAAOyjK,EAYF,SAASswB,GACdvzC,EACAt2J,EACA63C,EACA0+G,EACArjI,EACA42K,GAEA,GAAIjyJ,GAAO73C,EACT,OAAO,KAET,IAAIwxD,EACJ,GAAIt+B,EAAIojI,EAAgBt2J,EAASu2J,EAAS,GACxC,OAAIuzC,IACFt4I,EAAa8kG,EAAgB59K,MAAMsnB,EAAQA,EAASu2J,IACzCA,EAAS,GAAKrjI,EAClBs+B,GAEA,KAEJ,GAAI8kG,EAAgBz+G,EAAM,GAAK3kB,EACpC,OAAI42K,IACFt4I,EAAa8kG,EAAgB59K,MAAMm/D,EAAM0+G,EAAQ1+G,IACtC0+G,EAAS,GAAKrjI,EAClBs+B,GAEA,KAIX,GAAIt+B,GAAKojI,EAAgBt2J,EAASu2J,EAAS,GACzC,OAAOD,EAAgB59K,MAAMsnB,EAAQA,EAASu2J,GAIhD,IAFA,IAAIwzC,EAAK/pM,EAASu2J,EACdyzC,EAAKnyJ,EAAM0+G,EACRwzC,EAAKC,GAAI,CACd,IAAMT,EAAOQ,EAAKC,GAAO,EACrB92K,EAAIojI,GAAiBizC,EAAM,GAAKhzC,EAAS,GAC3CyzC,EAAKT,EAELQ,EAAKR,EAAM,EAGf,IAAMU,EAAK3zC,EAAgByzC,EAAKxzC,EAAS,GACzC,GAAIrjI,GAAK+2K,EACP,OAAO3zC,EAAgB59K,OAAOqxN,EAAK,GAAKxzC,GAASwzC,EAAK,GAAKxzC,EAASA,GAEtE,IACMzgJ,GAAKod,EAAI+2K,IADJ3zC,GAAiByzC,EAAK,GAAKxzC,EAAS,GACpB0zC,GAC3Bz4I,EAAa,GACb,IAAK,IAAIvhF,EAAI,EAAGA,EAAIsmL,EAAS,IAAKtmL,EAChCuhF,EAAWr7E,KACT8iL,GACE3C,GAAiByzC,EAAK,GAAKxzC,EAAStmL,GACpCqmL,EAAgByzC,EAAKxzC,EAAStmL,GAC9B6lC,IAKN,OADA07C,EAAWr7E,KAAK+8C,GACTs+B,EC/HF,SAAS04I,GAAiB5zC,EAAiBt2J,EAAQ63C,EAAK0+G,GAI7D,IAHA,IAAI7iC,EAAK4iC,EAAgBt2J,GACrB2zH,EAAK2iC,EAAgBt2J,EAAS,GAC9B5uB,EAAS,EACJnB,EAAI+vB,EAASu2J,EAAQtmL,EAAI4nE,EAAK5nE,GAAKsmL,EAAQ,CAClD,IAAMU,EAAKX,EAAgBrmL,GACrBinL,EAAKZ,EAAgBrmL,EAAI,GAC/BmB,GAAU9B,KAAKkrC,MAAMy8I,EAAKvjC,IAAOujC,EAAKvjC,IAAOwjC,EAAKvjC,IAAOujC,EAAKvjC,IAC9DD,EAAKujC,EACLtjC,EAAKujC,EAEP,OAAO9lL,E,+dCAT,eAME,WAAY+G,EAAa+jM,GAAzB,MACE,cAAO,K,OAMP,EAAKiuB,cAAgB,KAMrB,EAAKC,uBAAyB,EAM9B,EAAKzrB,WAAa,EAMlB,EAAKC,mBAAqB,OAEPzsM,IAAf+pM,GAA6BrtM,MAAMC,QAAQqJ,EAAY,IAMzD,EAAKnJ,eACyD,EAG5DktM,GATF,EAAKF,mBACHE,EAC6B,G,EA8PrC,OAlSyB,QAqDvB,YAAAmuB,iBAAA,SAAiB74I,GACVzjF,KAAKuoL,gBAGR,EAAOvoL,KAAKuoL,gBAAiB9kG,GAF7BzjF,KAAKuoL,gBAAkB9kG,EAAW94E,QAIpC3K,KAAK2zF,WAQP,YAAAnpF,MAAA,WACE,IAAM+xN,EAAa,IAAIC,EACrBx8N,KAAKuoL,gBAAgB59K,QACrB3K,KAAK2rC,QAGP,OADA4wL,EAAWrsC,gBAAgBlwL,MACpBu8N,GAUT,YAAA5vB,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GAC9Di/K,GAEL7sM,KAAK6wM,mBAAqB7wM,KAAKgvL,gBACjChvL,KAAK4wM,UAAYrvM,KAAKkrC,KACpBiiK,GACE1uM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACL,IAGJxoL,KAAK6wM,kBAAoB7wM,KAAKgvL,eAEzB6f,GACL7uM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLxoL,KAAK4wM,WACL,EACAjjL,EACAC,EACAg/K,EACAC,KAeJ,YAAA4vB,eAAA,SAAelkM,GACb,OAAOhxB,GACLvH,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLjwJ,IAkBJ,YAAAmkM,iBAAA,SAAiBv3K,EAAGw3K,GAClB,GACE38N,KAAK2rC,QAAU,QACf3rC,KAAK2rC,QAAU,QAEf,OAAO,KAET,IAAMowL,OAAkC33N,IAApBu4N,GAAgCA,EACpD,OAAOb,GACL97N,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLrjI,EACA42K,IASJ,YAAAz6N,eAAA,WACE,OAAO2uM,GACLjwM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,SAcT,YAAAo0C,gBAAA,SAAgBnjB,EAAUlO,GACxB,OAAO4vB,GACLn7N,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLixB,EACAlO,EACAvrM,KAAKwoL,SAST,YAAA93K,UAAA,WACE,OAAOyrN,GACLn8N,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,SAOT,YAAAq0C,gBAAA,WAKE,OAJI78N,KAAKq8N,uBAAyBr8N,KAAKgvL,gBACrChvL,KAAKo8N,cAAgBp8N,KAAK48N,gBAAgB,GAAK58N,KAAKo8N,eACpDp8N,KAAKq8N,sBAAwBr8N,KAAKgvL,eAE7BhvL,KAAKo8N,eAQd,YAAAruB,8BAAA,SAA8B1B,GAC5B,IAAMoD,EAA4B,GAUlC,OATAA,EAA0BpsM,OAASmsM,GACjCxvM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACL6jB,EACAoD,EACA,GAEK,IAAI+sB,EAAW/sB,EAA2B,QAQnD,YAAAxlM,QAAA,WACE,MAAO,cAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,OAAOo2L,GACL1xM,KAAKuoL,gBACL,EACAvoL,KAAKuoL,gBAAgBllL,OACrBrD,KAAKwoL,OACLltK,IAUJ,YAAAra,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzBvoL,KAAKuoL,gBAAgBllL,OAAS+rM,GAC5BpvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,QAEPxoL,KAAK2zF,WAET,EAlSA,CAAyB,IAoSzB,Y,+dClSA,eAQE,WAAYvpF,EAAa+jM,EAAYoB,GAArC,MACE,cAAO,KAoBP,GAdA,EAAKuD,MAAQ,GAMb,EAAKlC,WAAa,EAMlB,EAAKC,mBAAqB,EAEtB/vM,MAAMC,QAAQqJ,EAAY,IAC5B,EAAKnJ,eACgE,EAGnEktM,QAEG,QAAmB/pM,IAAf+pM,GAA4BoB,EACrC,EAAKtB,mBACHE,EAC6B,GAE/B,EAAK2E,MAAQvD,MACR,CAKL,IAJA,IAAI5jK,EAAS,EAAK4rG,YACZulF,EAA+C,EAC/Cv0C,EAAkB,GAClB3V,EAAO,GACJ1wK,EAAI,EAAGgiB,EAAK44M,EAAYz5N,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACpD,IAAMq6N,EAAaO,EAAY56N,GACrB,IAANA,IACFypC,EAAS4wL,EAAWhlF,aAEtB,EAAOgxC,EAAiBg0C,EAAWv5K,sBACnC4vH,EAAKxqK,KAAKmgL,EAAgBllL,QAE5B,EAAK4qM,mBAAmBtiK,EAAQ48I,GAChC,EAAKuqB,MAAQlgC,E,SAiRnB,OAzU8B,QAiE5B,YAAAmqD,iBAAA,SAAiBR,GACVv8N,KAAKuoL,gBAGR,EAAOvoL,KAAKuoL,gBAAiBg0C,EAAWv5K,qBAAqBr4C,SAF7D3K,KAAKuoL,gBAAkBg0C,EAAWv5K,qBAAqBr4C,QAIzD3K,KAAK8yM,MAAM1qM,KAAKpI,KAAKuoL,gBAAgBllL,QACrCrD,KAAK2zF,WAQP,YAAAnpF,MAAA,WACE,IAAMwyN,EAAkB,IAAIC,EAC1Bj9N,KAAKuoL,gBAAgB59K,QACrB3K,KAAK2rC,OACL3rC,KAAK8yM,MAAMnoM,SAGb,OADAqyN,EAAgB9sC,gBAAgBlwL,MACzBg9N,GAUT,YAAArwB,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GAC9Di/K,GAEL7sM,KAAK6wM,mBAAqB7wM,KAAKgvL,gBACjChvL,KAAK4wM,UAAYrvM,KAAKkrC,KACpBmiK,GACE5uM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACL,IAGJxoL,KAAK6wM,kBAAoB7wM,KAAKgvL,eAEzBkgB,GACLlvM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACLxoL,KAAK4wM,WACL,EACAjjL,EACAC,EACAg/K,EACAC,KA0BJ,YAAA6vB,iBAAA,SAAiBv3K,EAAGw3K,EAAiBO,GACnC,GACGl9N,KAAK2rC,QAAU,QACd3rC,KAAK2rC,QAAU,SACe,IAAhC3rC,KAAKuoL,gBAAgBllL,OAErB,OAAO,KAET,IAAM04N,OAAkC33N,IAApBu4N,GAAgCA,EAC9C14K,OAAkC7/C,IAApB84N,GAAgCA,EACpD,OHhCG,SACL30C,EACAt2J,EACA2gJ,EACA4V,EACArjI,EACA42K,EACA93K,GAEA,GAAIA,EACF,OAAO63K,GACLvzC,EACAt2J,EACA2gJ,EAAKA,EAAKvvK,OAAS,GACnBmlL,EACArjI,EACA42K,GAGJ,IAAIt4I,EACJ,GAAIt+B,EAAIojI,EAAgBC,EAAS,GAC/B,OAAIuzC,IACFt4I,EAAa8kG,EAAgB59K,MAAM,EAAG69K,IAC3BA,EAAS,GAAKrjI,EAClBs+B,GAEA,KAGX,GAAI8kG,EAAgBA,EAAgBllL,OAAS,GAAK8hD,EAChD,OAAI42K,IACFt4I,EAAa8kG,EAAgB59K,MAAM49K,EAAgBllL,OAASmlL,IACjDA,EAAS,GAAKrjI,EAClBs+B,GAEA,KAGX,IAAK,IAAIvhF,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACjB,GAAI+vB,GAAU63C,EAAd,CAGA,GAAI3kB,EAAIojI,EAAgBt2J,EAASu2J,EAAS,GACxC,OAAO,KACF,GAAIrjI,GAAKojI,EAAgBz+G,EAAM,GACpC,OAAOgyJ,GACLvzC,EACAt2J,EACA63C,EACA0+G,EACArjI,GACA,GAGJlzB,EAAS63C,GAEX,OAAO,KGzBEqzJ,CACLn9N,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACLrjI,EACA42K,EACA93K,IASJ,YAAA3iD,eAAA,WACE,OAAO6uM,GACLnwM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,SAOT,YAAA6qB,QAAA,WACE,OAAOrzM,KAAK8yM,OASd,YAAAsqB,cAAA,SAActzM,GACZ,OAAIA,EAAQ,GAAK9pB,KAAK8yM,MAAMzvM,QAAUymB,EAC7B,KAEF,IAAI,GACT9pB,KAAKuoL,gBAAgB59K,MACT,IAAVmf,EAAc,EAAI9pB,KAAK8yM,MAAMhpL,EAAQ,GACrC9pB,KAAK8yM,MAAMhpL,IAEb9pB,KAAK2rC,SAST,YAAA0xL,eAAA,WAOE,IANA,IAAM90C,EAAkBvoL,KAAKuoL,gBACvB3V,EAAO5yK,KAAK8yM,MACZnnK,EAAS3rC,KAAK2rC,OAEdmxL,EAAc,GAChB7qM,EAAS,EACJ/vB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACXq6N,EAAa,IAAI,GACrBh0C,EAAgB59K,MAAMsnB,EAAQ63C,GAC9Bn+B,GAEFmxL,EAAY10N,KAAKm0N,GACjBtqM,EAAS63C,EAEX,OAAOgzJ,GAMT,YAAAQ,iBAAA,WAME,IALA,IAAMC,EAAY,GACZh1C,EAAkBvoL,KAAKuoL,gBACzBt2J,EAAS,EACP2gJ,EAAO5yK,KAAK8yM,MACZtqB,EAASxoL,KAAKwoL,OACXtmL,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GAQjB,EAAOq7N,EAPUpC,GACf5yC,EACAt2J,EACA63C,EACA0+G,EACA,KAGFv2J,EAAS63C,EAEX,OAAOyzJ,GAQT,YAAAxvB,8BAAA,SAA8B1B,GAC5B,IAAMoD,EAA4B,GAC5BI,EAAiB,GAWvB,OAVAJ,EAA0BpsM,OAASusM,GACjC5vM,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACL6jB,EACAoD,EACA,EACAI,GAEK,IAAIotB,EACTxtB,EACA,MACAI,IASJ,YAAA5lM,QAAA,WACE,MAAO,mBAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,O1C3PG,SACLitK,EACAt2J,EACA2gJ,EACA4V,EACAltK,GAEA,IAAK,IAAIpZ,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,GACEwvM,GAAqBnpB,EAAiBt2J,EAAQ2gJ,EAAK1wK,GAAIsmL,EAAQltK,GAE/D,OAAO,EAET2W,EAAS2gJ,EAAK1wK,GAEhB,OAAO,E0C4OEs7N,CACLx9N,KAAKuoL,gBACL,EACAvoL,KAAK8yM,MACL9yM,KAAKwoL,OACLltK,IAUJ,YAAAra,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzB,IAAM3V,EAAOy8B,GACXrvM,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,OACLxoL,KAAK8yM,OAEP9yM,KAAKuoL,gBAAgBllL,OAAyB,IAAhBuvK,EAAKvvK,OAAe,EAAIuvK,EAAKA,EAAKvvK,OAAS,GACzErD,KAAK2zF,WAET,EAzUA,CAA8B,IA2U9B,Y,+dCnUA,eAOE,WAAYvpF,EAAa+jM,EAAYsvB,GAArC,MACE,cAAO,KA4CP,GAtCA,EAAKC,OAAS,GAMd,EAAKC,6BAA+B,EAMpC,EAAKC,oBAAsB,KAM3B,EAAKhtB,WAAa,EAMlB,EAAKC,mBAAqB,EAM1B,EAAKoC,mBAAqB,EAM1B,EAAKC,yBAA2B,MAE3BuqB,IAAc38N,MAAMC,QAAQqJ,EAAY,IAAK,CAKhD,IAJA,IAAIuhC,EAAS,EAAK4rG,YACZsmF,EAAyC,EACzCt1C,EAAkB,GAClB+nB,EAAQ,GACLpuM,EAAI,EAAGgiB,EAAK25M,EAASx6N,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACjD,IAAMmO,EAAUwtN,EAAS37N,GACf,IAANA,IACFypC,EAASt7B,EAAQknI,aAInB,IAFA,IAAMtlH,EAASs2J,EAAgBllL,OACzBuvK,EAAOviK,EAAQgjM,UACZ/7L,EAAI,EAAGypF,EAAK6xE,EAAKvvK,OAAQiU,EAAIypF,IAAMzpF,EAC1Cs7J,EAAKt7J,IAAM2a,EAEb,EAAOs2J,EAAiBl4K,EAAQ2yC,sBAChCstJ,EAAMloM,KAAKwqK,GAEbu7B,EAAaxiK,EACbvhC,EAAcm+K,EACdk1C,EAAYntB,E,YAEKlsM,IAAf+pM,GAA4BsvB,GAC9B,EAAKxvB,mBACHE,EAC6B,GAE/B,EAAKuvB,OAASD,GAEd,EAAKx8N,eACuE,EAG1EktM,G,EAuWR,OA5b2B,QA+FzB,YAAA2vB,cAAA,SAAcztN,GAEZ,IAAIuiK,EACJ,GAAK5yK,KAAKuoL,gBAIH,CACL,IAAMt2J,EAASjyB,KAAKuoL,gBAAgBllL,OACpC,EAAOrD,KAAKuoL,gBAAiBl4K,EAAQ2yC,sBAErC,IAAK,IAAI9gD,EAAI,EAAGgiB,GADhB0uJ,EAAOviK,EAAQgjM,UAAU1oM,SACCtH,OAAQnB,EAAIgiB,IAAMhiB,EAC1C0wK,EAAK1wK,IAAM+vB,OARbjyB,KAAKuoL,gBAAkBl4K,EAAQ2yC,qBAAqBr4C,QACpDioK,EAAOviK,EAAQgjM,UAAU1oM,QACzB3K,KAAK09N,OAAOt1N,OASdpI,KAAK09N,OAAOt1N,KAAKwqK,GACjB5yK,KAAK2zF,WAQP,YAAAnpF,MAAA,WAGE,IAFA,IAAMS,EAAMjL,KAAK09N,OAAOr6N,OAClB06N,EAAW,IAAIj9N,MAAMmK,GAClB/I,EAAI,EAAGA,EAAI+I,IAAO/I,EACzB67N,EAAS77N,GAAKlC,KAAK09N,OAAOx7N,GAAGyI,QAG/B,IAAMqzN,EAAe,IAAI/tN,EACvBjQ,KAAKuoL,gBAAgB59K,QACrB3K,KAAK2rC,OACLoyL,GAIF,OAFAC,EAAa9tC,gBAAgBlwL,MAEtBg+N,GAUT,YAAArxB,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,OAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GAC9Di/K,GAEL7sM,KAAK6wM,mBAAqB7wM,KAAKgvL,gBACjChvL,KAAK4wM,UAAYrvM,KAAKkrC,KrDlErB,SACL87I,EACAt2J,EACAq+K,EACA9nB,EACAr8K,GAEA,IAAK,IAAIjK,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnBiK,EAAMyiM,GAAqBrmB,EAAiBt2J,EAAQ2gJ,EAAM4V,EAAQr8K,GAClE8lB,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAO8I,EqDuDD8xN,CACEj+N,KAAKuoL,gBACL,EACAvoL,KAAK09N,OACL19N,KAAKwoL,OACL,IAGJxoL,KAAK6wM,kBAAoB7wM,KAAKgvL,erDmH7B,SACLzG,EACAt2J,EACAq+K,EACA9nB,EACAsmB,EACAjtJ,EACAl0B,EACAC,EACAg/K,EACAC,EACAkC,GAGA,IADA,IAAME,EAAWF,GAA8B,CAACz3I,IAAKA,KAC5Cp1D,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB2qM,EAAqBqC,GACnB3mB,EACAt2J,EACA2gJ,EACA4V,EACAsmB,EACAjtJ,EACAl0B,EACAC,EACAg/K,EACAC,EACAoC,GAEFh9K,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAOwpM,EqDhJEqxB,CACLl+N,KAAKozM,6BACL,EACApzM,KAAK09N,OACL19N,KAAKwoL,OACLxoL,KAAK4wM,WACL,EACAjjL,EACAC,EACAg/K,EACAC,KASJ,YAAArlB,WAAA,SAAW75J,EAAGC,GACZ,O9CtFG,SACL26J,EACAt2J,EACAq+K,EACA9nB,EACA76J,EACAC,GAEA,GAAqB,IAAjB0iL,EAAMjtM,OACR,OAAO,EAET,IAAK,IAAInB,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB,GAAIgvM,GAAsB3oB,EAAiBt2J,EAAQ2gJ,EAAM4V,EAAQ76J,EAAGC,GAClE,OAAO,EAETqE,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAO,E8CoEE86N,CACLn+N,KAAKozM,6BACL,EACApzM,KAAK09N,OACL19N,KAAKwoL,OACL76J,EACAC,IASJ,YAAAjd,QAAA,WACE,OjDlLG,SAAsB43K,EAAiBt2J,EAAQq+K,EAAO9nB,GAE3D,IADA,IAAIx4F,EAAO,EACF9tF,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB8tF,GAAQ2gH,GAAYpoB,EAAiBt2J,EAAQ2gJ,EAAM4V,GACnDv2J,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAO2sF,EiD2KEouI,CACLp+N,KAAKozM,6BACL,EACApzM,KAAK09N,OACL19N,KAAKwoL,SAiBT,YAAAlnL,eAAA,SAAeoxM,GACb,IAAInqB,EAcJ,YAbkBnkL,IAAdsuM,EAEFG,GADAtqB,EAAkBvoL,KAAKozM,6BAA6BzoM,QAGlD,EACA3K,KAAK09N,OACL19N,KAAKwoL,OACLkqB,GAGFnqB,EAAkBvoL,KAAKuoL,gBAGlB8nB,GACL9nB,EACA,EACAvoL,KAAK09N,OACL19N,KAAKwoL,SAOT,YAAA61C,SAAA,WACE,OAAOr+N,KAAK09N,QAMd,YAAAY,sBAAA,WACE,GAAIt+N,KAAK29N,6BAA+B39N,KAAKgvL,cAAe,CAC1D,IAAMoiB,EC/QL,SAAsB7oB,EAAiBt2J,EAAQq+K,EAAO9nB,GAG3D,IAFA,IAAM4oB,EAAc,GAChB91L,E7GyLG,CAAC06C,EAAAA,EAAUA,EAAAA,GAAU,KAAW,K6GxL9B9zD,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnBoZ,EAASgtK,GACPC,EACAt2J,EACA2gJ,EAAK,GACL4V,GAEF4oB,EAAYhpM,MAAMkT,EAAO,GAAKA,EAAO,IAAM,GAAIA,EAAO,GAAKA,EAAO,IAAM,GACxE2W,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAO+tM,EDiQiB,CAClBpxM,KAAKuoL,gBACL,EACAvoL,KAAK09N,OACL19N,KAAKwoL,QAEPxoL,KAAK49N,oB7CzMJ,SACLr1C,EACAt2J,EACAq+K,EACA9nB,EACA4oB,GAGA,IADA,IAAImtB,EAAiB,GACZr8N,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnBq8N,EAAiBptB,GACf5oB,EACAt2J,EACA2gJ,EACA4V,EACA4oB,EACA,EAAIlvM,EACJq8N,GAEFtsM,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAOk7N,E6CoLwBC,CACzBx+N,KAAKozM,6BACL,EACApzM,KAAK09N,OACL19N,KAAKwoL,OACL4oB,GAEFpxM,KAAK29N,4BAA8B39N,KAAKgvL,cAE1C,OAAOhvL,KAAK49N,qBASd,YAAAa,kBAAA,WACE,OAAO,IAAI,GACTz+N,KAAKs+N,wBAAwB3zN,QAC7B,SAOJ,YAAAyoM,2BAAA,WACE,GAAIpzM,KAAKizM,mBAAqBjzM,KAAKgvL,cAAe,CAChD,IAAMzG,EAAkBvoL,KAAKuoL,iBzCxO5B,SACLA,EACAt2J,EACAq+K,EACA9nB,EACAkqB,GAEA,IAAK,IAAIxwM,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB,IACGuwM,GAAuBlqB,EAAiBt2J,EAAQ2gJ,EAAM4V,EAAQkqB,GAE/D,OAAO,EAEL9/B,EAAKvvK,SACP4uB,EAAS2gJ,EAAKA,EAAKvvK,OAAS,IAGhC,OAAO,EyCwNDq7N,CAAwBn2C,EAAiB,EAAGvoL,KAAK09N,OAAQ19N,KAAKwoL,SAI9DxoL,KAAKkzM,yBAA2B3qB,EAAgB59K,QAChD3K,KAAKkzM,yBAAyB7vM,OAASwvM,GACrC7yM,KAAKkzM,yBACL,EACAlzM,KAAK09N,OACL19N,KAAKwoL,SAPPxoL,KAAKkzM,yBAA2B3qB,EAUlCvoL,KAAKizM,kBAAoBjzM,KAAKgvL,cAEhC,OAAOhvL,KAAKkzM,0BAQd,YAAAnF,8BAAA,SAA8B1B,GAC5B,IAAMoD,EAA4B,GAC5BkvB,EAAkB,GAWxB,OAVAlvB,EAA0BpsM,OnDwGvB,SACLklL,EACAt2J,EACAq+K,EACA9nB,EACAnuJ,EACAo1K,EACAC,EACAivB,GAEA,IAAK,IAAIz8N,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACb2tM,EAAiB,GACvBH,EAAmBM,GACjBznB,EACAt2J,EACA2gJ,EACA4V,EACAnuJ,EACAo1K,EACAC,EACAG,GAEF8uB,EAAgBv2N,KAAKynM,GACrB59K,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAOqsM,EmDlI8BkvB,CACjC5+N,KAAKuoL,gBACL,EACAvoL,KAAK09N,OACL19N,KAAKwoL,OACLjnL,KAAKkrC,KAAK4/J,GACVoD,EACA,EACAkvB,GAEK,IAAI1uN,EACTw/L,EACA,MACAkvB,IAUJ,YAAAE,WAAA,SAAW/0M,GACT,GAAIA,EAAQ,GAAK9pB,KAAK09N,OAAOr6N,QAAUymB,EACrC,OAAO,KAET,IAAImI,EACJ,GAAc,IAAVnI,EACFmI,EAAS,MACJ,CACL,IAAM6sM,EAAW9+N,KAAK09N,OAAO5zM,EAAQ,GACrCmI,EAAS6sM,EAASA,EAASz7N,OAAS,GAEtC,IAAMuvK,EAAO5yK,KAAK09N,OAAO5zM,GAAOnf,QAC1Bm/D,EAAM8oG,EAAKA,EAAKvvK,OAAS,GAC/B,GAAe,IAAX4uB,EACF,IAAK,IAAI/vB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C0wK,EAAK1wK,IAAM+vB,EAGf,OAAO,IAAI,GACTjyB,KAAKuoL,gBAAgB59K,MAAMsnB,EAAQ63C,GACnC9pE,KAAK2rC,OACLinI,IASJ,YAAAmsD,YAAA,WAME,IALA,IAAMpzL,EAAS3rC,KAAK2rC,OACd48I,EAAkBvoL,KAAKuoL,gBACvB+nB,EAAQtwM,KAAK09N,OACbG,EAAW,GACb5rM,EAAS,EACJ/vB,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GAAGyI,QAChBm/D,EAAM8oG,EAAKA,EAAKvvK,OAAS,GAC/B,GAAe,IAAX4uB,EACF,IAAK,IAAI3a,EAAI,EAAGypF,EAAK6xE,EAAKvvK,OAAQiU,EAAIypF,IAAMzpF,EAC1Cs7J,EAAKt7J,IAAM2a,EAGf,IAAM5hB,EAAU,IAAI,GAClBk4K,EAAgB59K,MAAMsnB,EAAQ63C,GAC9Bn+B,EACAinI,GAEFirD,EAASz1N,KAAKiI,GACd4hB,EAAS63C,EAEX,OAAO+zJ,GAQT,YAAA5zN,QAAA,WACE,MAAO,gBAST,YAAAsjM,iBAAA,SAAiBjyL,GACf,O3ClOG,SACLitK,EACAt2J,EACAq+K,EACA9nB,EACAltK,GAEA,IAAK,IAAIpZ,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB,GACEqwM,GAA0BhqB,EAAiBt2J,EAAQ2gJ,EAAM4V,EAAQltK,GAEjE,OAAO,EAET2W,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAE9B,OAAO,E2CkNE27N,CACLh/N,KAAKozM,6BACL,EACApzM,KAAK09N,OACL19N,KAAKwoL,OACLltK,IAUJ,YAAAra,eAAA,SAAemJ,EAAa+jM,GAC1BnuM,KAAKouM,UAAUD,EAAY/jM,EAAa,GACnCpK,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAEzB,IAAM+nB,EpD7XH,SACL/nB,EACAt2J,EACAu+K,EACAhoB,EACAi1C,GAIA,IAFA,IAAMntB,EAAQmtB,GAAwB,GAClCv7N,EAAI,EACCoV,EAAI,EAAGypF,EAAKyvG,EAAcntM,OAAQiU,EAAIypF,IAAMzpF,EAAG,CACtD,IAAMs7J,EAAOy8B,GACX9mB,EACAt2J,EACAu+K,EAAcl5L,GACdkxK,EACA8nB,EAAMpuM,IAERouM,EAAMpuM,KAAO0wK,EACb3gJ,EAAS2gJ,EAAKA,EAAKvvK,OAAS,GAG9B,OADAitM,EAAMjtM,OAASnB,EACRouM,EoDwWS2uB,CACZj/N,KAAKuoL,gBACL,EACAn+K,EACApK,KAAKwoL,OACLxoL,KAAK09N,QAEP,GAAqB,IAAjBptB,EAAMjtM,OACRrD,KAAKuoL,gBAAgBllL,OAAS,MACzB,CACL,IAAM67N,EAAW5uB,EAAMA,EAAMjtM,OAAS,GACtCrD,KAAKuoL,gBAAgBllL,OACC,IAApB67N,EAAS77N,OAAe,EAAI67N,EAASA,EAAS77N,OAAS,GAE3DrD,KAAK2zF,WAET,EA5bA,CAA2B,IA8b3B,Y,+dEhdA,eAQE,WAAYhzF,EAAQimM,EAAYuH,GAAhC,MACE,cAAO,KACP,QAAmB/pM,IAAf+pM,QAA2C/pM,IAAfwiM,EAC9B,EAAKqH,mBAAmBE,EAAYxtM,OAC/B,CACL,IAAMC,EAASgmM,GAA0B,EACzC,EAAKu4B,mBAAmBx+N,EAAQC,EAAQutM,G,SAoO9C,OAlPqB,QAuBnB,YAAA3jM,MAAA,WACE,IAAM2pL,EAAS,IAAI50L,EACjBS,KAAKuoL,gBAAgB59K,aACrBvG,EACApE,KAAK2rC,QAGP,OADAwoJ,EAAOjE,gBAAgBlwL,MAChBm0L,GAUT,YAAAwY,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,IAAMtkB,EAAkBvoL,KAAKuoL,gBACvB1lI,EAAKl1B,EAAI46J,EAAgB,GACzBzlI,EAAKl1B,EAAI26J,EAAgB,GACzBymB,EAAkBnsJ,EAAKA,EAAKC,EAAKA,EACvC,GAAIksJ,EAAkBnC,EAAoB,CACxC,GAAwB,IAApBmC,EACF,IAAK,IAAI9sM,EAAI,EAAGA,EAAIlC,KAAKwoL,SAAUtmL,EACjC0qM,EAAa1qM,GAAKqmL,EAAgBrmL,OAE/B,CACL,IAAMsiE,EAAQxkE,KAAKoB,YAAcG,KAAKkrC,KAAKuiK,GAC3CpC,EAAa,GAAKrkB,EAAgB,GAAK/jH,EAAQ3hB,EAC/C+pJ,EAAa,GAAKrkB,EAAgB,GAAK/jH,EAAQ1hB,EAC/C,IAAS5gD,EAAI,EAAGA,EAAIlC,KAAKwoL,SAAUtmL,EACjC0qM,EAAa1qM,GAAKqmL,EAAgBrmL,GAItC,OADA0qM,EAAavpM,OAASrD,KAAKwoL,OACpBwmB,EAEP,OAAOnC,GASX,YAAArlB,WAAA,SAAW75J,EAAGC,GACZ,IAAM26J,EAAkBvoL,KAAKuoL,gBACvB1lI,EAAKl1B,EAAI46J,EAAgB,GACzBzlI,EAAKl1B,EAAI26J,EAAgB,GAC/B,OAAO1lI,EAAKA,EAAKC,EAAKA,GAAM9iD,KAAKo/N,qBAQnC,YAAAl+N,UAAA,WACE,OAAOlB,KAAKuoL,gBAAgB59K,MAAM,EAAG3K,KAAKwoL,SAQ5C,YAAAykB,cAAA,SAAc3xL,GACZ,IAAMitK,EAAkBvoL,KAAKuoL,gBACvB3nL,EAAS2nL,EAAgBvoL,KAAKwoL,QAAUD,EAAgB,GAC9D,OAAOJ,GACLI,EAAgB,GAAK3nL,EACrB2nL,EAAgB,GAAK3nL,EACrB2nL,EAAgB,GAAK3nL,EACrB2nL,EAAgB,GAAK3nL,EACrB0a,IASJ,YAAAla,UAAA,WACE,OAAOG,KAAKkrC,KAAKzsC,KAAKo/N,sBAOxB,YAAAA,kBAAA,WACE,IAAMv8K,EAAK7iD,KAAKuoL,gBAAgBvoL,KAAKwoL,QAAUxoL,KAAKuoL,gBAAgB,GAC9DzlI,EAAK9iD,KAAKuoL,gBAAgBvoL,KAAKwoL,OAAS,GAAKxoL,KAAKuoL,gBAAgB,GACxE,OAAO1lI,EAAKA,EAAKC,EAAKA,GAQxB,YAAA74C,QAAA,WACE,MAAO,UAST,YAAAsjM,iBAAA,SAAiBjyL,GAEf,GAAI8nC,GAAW9nC,EADMtb,KAAK+mB,aACY,CACpC,IAAMpmB,EAASX,KAAKkB,YAEpB,OAAIoa,EAAO,IAAM3a,EAAO,IAAM2a,EAAO,IAAM3a,EAAO,KAG9C2a,EAAO,IAAM3a,EAAO,IAAM2a,EAAO,IAAM3a,EAAO,IAI3CgoL,GAAcrtK,EAAQtb,KAAKgtM,qBAAqB9sJ,KAAKlgD,QAE9D,OAAO,GAQT,YAAAm0D,UAAA,SAAUxzD,GACR,IAAM6nL,EAASxoL,KAAKwoL,OACd5nL,EAASZ,KAAKuoL,gBAAgBC,GAAUxoL,KAAKuoL,gBAAgB,GAC7DA,EAAkB5nL,EAAOgK,QAC/B49K,EAAgBC,GAAUD,EAAgB,GAAK3nL,EAC/C,IAAK,IAAIsB,EAAI,EAAGA,EAAIsmL,IAAUtmL,EAC5BqmL,EAAgBC,EAAStmL,GAAKvB,EAAOuB,GAEvClC,KAAKiuM,mBAAmBjuM,KAAK2rC,OAAQ48I,GACrCvoL,KAAK2zF,WAWP,YAAAwrI,mBAAA,SAAmBx+N,EAAQC,EAAQutM,GACjCnuM,KAAKouM,UAAUD,EAAYxtM,EAAQ,GAC9BX,KAAKuoL,kBACRvoL,KAAKuoL,gBAAkB,IAGzB,IAAMA,EAAkBvoL,KAAKuoL,gBACzBt2J,EAASk9K,GAAkB5mB,EAAiB,EAAG5nL,EAAQX,KAAKwoL,QAChED,EAAgBt2J,KAAYs2J,EAAgB,GAAK3nL,EACjD,IAAK,IAAIsB,EAAI,EAAGgiB,EAAKlkB,KAAKwoL,OAAQtmL,EAAIgiB,IAAMhiB,EAC1CqmL,EAAgBt2J,KAAYs2J,EAAgBrmL,GAE9CqmL,EAAgBllL,OAAS4uB,EACzBjyB,KAAK2zF,WAGP,YAAAryF,eAAA,WACE,OAAO,MAGT,YAAAL,eAAA,SAAemJ,EAAa+jM,KAO5B,YAAA7iG,UAAA,SAAU1qG,GACRZ,KAAKuoL,gBAAgBvoL,KAAKwoL,QAAUxoL,KAAKuoL,gBAAgB,GAAK3nL,EAC9DZ,KAAK2zF,WAUP,YAAAw5G,OAAA,SAAOlrM,EAAO2P,GACZ,IAAMjR,EAASX,KAAKkB,YACdsnL,EAASxoL,KAAKguM,YACpBhuM,KAAKm0D,UACH,GAAOxzD,EAAQ,EAAGA,EAAO0C,OAAQmlL,EAAQvmL,EAAO2P,EAAQjR,IAE1DX,KAAK2zF,WAUP,YAAAne,UAAA,SAAUu0G,EAAQC,GAChB,IAAMrpL,EAASX,KAAKkB,YACdsnL,EAASxoL,KAAKguM,YACpBhuM,KAAKm0D,UACH,GAAUxzD,EAAQ,EAAGA,EAAO0C,OAAQmlL,EAAQuB,EAAQC,EAAQrpL,IAE9DX,KAAK2zF,WAET,EAlPA,CAAqB,IA0QrB,GAAOnzF,UAAUw4I,UACjB,Y,+dCtQA,eAIE,WAAYqmF,GAAZ,MACE,cAAO,K,OAMP,EAAKC,YAAcD,GAAkC,KAKrD,EAAKE,kBAAoB,GAEzB,EAAKC,0B,EAqST,OAvTiC,QAwB/B,YAAAC,0BAAA,WACEz/N,KAAKu/N,kBAAkBh4N,QAAQqnL,IAC/B5uL,KAAKu/N,kBAAkBl8N,OAAS,GAMlC,YAAAm8N,wBAAA,WACE,GAAKx/N,KAAKs/N,YAGV,IAAK,IAAIp9N,EAAI,EAAGgiB,EAAKlkB,KAAKs/N,YAAYj8N,OAAQnB,EAAIgiB,IAAMhiB,EACtDlC,KAAKu/N,kBAAkBn3N,KACrBmmL,GAAOvuL,KAAKs/N,YAAYp9N,GAAI6sL,GAAUhyC,OAAQ/8I,KAAK2zF,QAAS3zF,QAUlE,YAAAwK,MAAA,WACE,IAAMk1N,EAAqB,IAAIC,EAAmB,MAGlD,OAFAD,EAAmBE,cAAc5/N,KAAKs/N,aACtCI,EAAmBxvC,gBAAgBlwL,MAC5B0/N,GAUT,YAAA/yB,eAAA,SAAeh/K,EAAGC,EAAGg/K,EAAcC,GACjC,GAAIA,EAAqBvlB,EAAyBtnL,KAAK+mB,YAAa4G,EAAGC,GACrE,OAAOi/K,EAGT,IADA,IAAMz0I,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD2qM,EAAqBz0I,EAAWl2D,GAAGyqM,eACjCh/K,EACAC,EACAg/K,EACAC,GAGJ,OAAOA,GAQT,YAAArlB,WAAA,SAAW75J,EAAGC,GAEZ,IADA,IAAMwqC,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD,GAAIk2D,EAAWl2D,GAAGslL,WAAW75J,EAAGC,GAC9B,OAAO,EAGX,OAAO,GAQT,YAAAq/K,cAAA,SAAc3xL,GACZ8sK,GAAoB9sK,GAEpB,IADA,IAAM88C,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD,GAAOoZ,EAAQ88C,EAAWl2D,GAAG6kB,aAE/B,OAAOzL,GAQT,YAAAukN,cAAA,WACE,OAAOC,GAAgB9/N,KAAKs/N,cAM9B,YAAAS,mBAAA,WACE,OAAO//N,KAAKs/N,aAMd,YAAAU,4BAAA,WAIE,IAFA,IAAIC,EAAkB,GAChB7nK,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAC5Ck2D,EAAWl2D,GAAG+H,YAAcjK,KAAKiK,UACnCg2N,EAAkBA,EAAgB53N,OAE9B+vD,EAAWl2D,GACX89N,+BAGJC,EAAgB73N,KAAKgwD,EAAWl2D,IAGpC,OAAO+9N,GAQT,YAAA1zB,sBAAA,SAAsBF,GAKpB,GAJIrsM,KAAKksM,6BAA+BlsM,KAAKgvL,gBAC3ChvL,KAAKisM,yCAA2C,EAChDjsM,KAAKksM,2BAA6BlsM,KAAKgvL,eAGvCqd,EAAmB,GACgC,IAAlDrsM,KAAKisM,0CACJI,EAAmBrsM,KAAKisM,yCAE1B,OAAOjsM,KAMT,IAHA,IAAMkgO,EAAuB,GACvB9nK,EAAap4D,KAAKs/N,YACpBa,GAAa,EACRj+N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACnD,IAAM5B,EAAW83D,EAAWl2D,GACtB4rM,EACJxtM,EAASisM,sBAAsBF,GACjC6zB,EAAqB93N,KAAK0lM,GACtBA,IAAuBxtM,IACzB6/N,GAAa,GAGjB,GAAIA,EAAY,CACd,IAAMC,EAA+B,IAAIT,EAAmB,MAE5D,OADAS,EAA6BC,mBAAmBH,GACzCE,EAGP,OADApgO,KAAKisM,yCAA2CI,EACzCrsM,MASX,YAAAiK,QAAA,WACE,MAAO,sBAST,YAAAsjM,iBAAA,SAAiBjyL,GAEf,IADA,IAAM88C,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD,GAAIk2D,EAAWl2D,GAAGqrM,iBAAiBjyL,GACjC,OAAO,EAGX,OAAO,GAMT,YAAAumL,QAAA,WACE,OAAmC,IAA5B7hM,KAAKs/N,YAAYj8N,QAU1B,YAAA8pM,OAAA,SAAOlrM,EAAO2P,GAEZ,IADA,IAAMwmD,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDk2D,EAAWl2D,GAAGirM,OAAOlrM,EAAO2P,GAE9B5R,KAAK2zF,WAaP,YAAAppD,MAAA,SAAMo8I,EAAIymB,EAAQC,GAChB,IAAIz7L,EAASy7L,EACRz7L,IACHA,EAAS1Q,GAAUlB,KAAK+mB,cAG1B,IADA,IAAMqxC,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDk2D,EAAWl2D,GAAGqoC,MAAMo8I,EAAIymB,EAAQx7L,GAElC5R,KAAK2zF,WAQP,YAAAisI,cAAA,SAAcxnK,GACZp4D,KAAKqgO,mBAAmBP,GAAgB1nK,KAM1C,YAAAioK,mBAAA,SAAmBjoK,GACjBp4D,KAAKy/N,4BACLz/N,KAAKs/N,YAAclnK,EACnBp4D,KAAKw/N,0BACLx/N,KAAK2zF,WAYP,YAAA64G,eAAA,SAAeviB,GAEb,IADA,IAAM7xH,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDk2D,EAAWl2D,GAAGsqM,eAAeviB,GAE/BjqL,KAAK2zF,WAUP,YAAAne,UAAA,SAAUu0G,EAAQC,GAEhB,IADA,IAAM5xH,EAAap4D,KAAKs/N,YACfp9N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDk2D,EAAWl2D,GAAGszE,UAAUu0G,EAAQC,GAElChqL,KAAK2zF,WAMP,YAAAswF,gBAAA,WACEjkL,KAAKy/N,4BACL,YAAMx7C,gBAAe,YAEzB,EAvTA,CAAiC,IA6TjC,SAAS67C,GAAgB1nK,GAEvB,IADA,IAAMkoK,EAAmB,GAChBp+N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDo+N,EAAiBl4N,KAAKgwD,EAAWl2D,GAAGsI,SAEtC,OAAO81N,EAGT,YC9UA,IAAIC,IAAkB,EA4Hf,SAASl1M,GAAIhW,EAAKrC,GAWvB,OAAO,SAAUsI,EAAQ6oC,EAAYomI,EAAYjnJ,EAASszD,GACxD,IAAMj8E,EAA0D,MAxF7D,SACLtF,EACArC,EACAsI,EACA6oC,EACAomI,EACAjnJ,EACAszD,GAEA,IAAMvrE,EAAM,IAAIC,eAChBD,EAAIje,KACF,MACe,mBAARiI,EAAqBA,EAAIiG,EAAQ6oC,EAAYomI,GAAcl1K,GAClE,GAEsB,eAApBrC,EAAO/I,YACTohB,EAAIM,aAAe,eAErBN,EAAIk1M,gBAAkBA,GAKtBl1M,EAAIO,OAAS,SAAUiU,GAErB,IAAKxU,EAAIQ,QAAWR,EAAIQ,QAAU,KAAOR,EAAIQ,OAAS,IAAM,CAC1D,IAAM1hB,EAAO6I,EAAO/I,UAEhB0Q,OAAM,EACE,QAARxQ,GAA0B,QAARA,EACpBwQ,EAAS0Q,EAAItV,aACI,OAAR5L,GACTwQ,EAAS0Q,EAAIm1M,eAEX7lN,GAAS,IAAI6C,WAAYE,gBACvB2N,EAAItV,aACJ,oBAGa,eAAR5L,IACTwQ,EAAqC0Q,EAAY,UAE/C1Q,EACF2oB,EAGItwB,EAAO86G,aAAanzG,EAAQ,CAC1BW,OAAQA,EACRmlN,kBAAmBl2C,IAGvBv3K,EAAO0tN,eAAe/lN,IAGxBi8E,SAGFA,KAMJvrE,EAAIkC,QAAUqpE,EACdvrE,EAAIgB,OAyBFs0M,CACEtrN,EACArC,EACAsI,EACA6oC,EACAomI,GAMA,SAAUz7K,EAAU8xN,GAClBjmN,EAAOkd,YAAY/oB,QACH1K,IAAZk/B,GACFA,EAAQx0B,KAGa8nF,GAAoBiuF,ICkEnD,SAjKA,WACE,aAKE7kL,KAAK4gO,oBAAiBx8N,EAMtBpE,KAAK6gO,8BAA2Bz8N,EAMhCpE,KAAK8gO,oBAAsB,KA6I/B,OAnIE,YAAAC,eAAA,SAAepmN,EAAQ+gL,GACrB,IAAI/7L,EACJ,GAAI+7L,EAAa,CACf,IAAIklC,EAAiBllC,EAAYklC,eAC7B,GAAcllC,EAAYklC,gBAC1B5gO,KAAK0gO,eAAe/lN,GAEtB+gL,EAAYpgL,QACZslN,GACAA,EAAe/7B,aAAe,iBAE9B+7B,EAAiB,GAAcA,IAChBx7B,eAAe1J,EAAYpgL,QAE5C3b,EAAU,CACRihO,eAAgBA,EAChBH,kBAAmB/kC,EAAY+kC,mBAGnC,OAAOzgO,KAAKghO,aAAarhO,IAY3B,YAAAqhO,aAAA,SAAarhO,GACX,OAAO,GACL,CACEihO,eAAgB5gO,KAAK4gO,eACrBH,kBAAmBzgO,KAAK6gO,0BAE1BlhO,IAQJ,YAAAsK,QAAA,WACE,OAAO,KAWT,YAAAumK,YAAA,SAAY71J,EAAQ+gL,GAClB,OAAO,KAWT,YAAA5tE,aAAA,SAAanzG,EAAQ+gL,GACnB,OAAO,KAWT,YAAAulC,aAAA,SAAatmN,EAAQ+gL,GACnB,OAAO,KAUT,YAAAglC,eAAA,SAAe/lN,GACb,OAAO,KAWT,YAAAohD,aAAA,SAAat4D,EAASi4L,GACpB,OAAO,KAWT,YAAA9tE,cAAA,SAAc9+G,EAAU4sL,GACtB,OAAO,KAWT,YAAAwlC,cAAA,SAAc5gO,EAAUo7L,GACtB,OAAO,KAEX,EA/JA,GAyKO,SAAS,GAA6Bp7L,EAAU+3D,EAAOqjI,GAC5D,IAOIgO,EAPE+2B,EAAoB/kC,EACtB,GAAcA,EAAY+kC,mBAC1B,KACEG,EAAiBllC,EACnB,GAAcA,EAAYklC,gBAC1B,KAeJ,GAPEl3B,EAJA+2B,GACAG,IACCv4B,GAAqBo4B,EAAmBG,IAE1BvoK,EAAQ/3D,EAASkK,QAAUlK,GAAU04I,UAClD3gF,EAAQooK,EAAoBG,EAC5BvoK,EAAQuoK,EAAiBH,GAGbngO,EAGd+3D,GACAqjI,QACuDt3L,IAA3B,EAAc+mL,SAC1C,CACA,IAAM,EAAQ5pL,KAAKs5B,IACjB,GAC4B,EAAcswJ,UAaxCue,IAAgBppM,IAClBopM,EAAcppM,EAASkK,SAEzBk/L,EAAY8C,gBATM,SAAUpiM,GAC1B,IAAK,IAAIlI,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EACjDkI,EAAYlI,GAAKX,KAAKirC,MAAMpiC,EAAYlI,GAAK,GAAS,EAExD,OAAOkI,KAOX,OAAOs/L,EAQF,SAASy3B,GAA2B7lN,EAAQogL,GACjD,IAAM+kC,EAAoB/kC,EACtB,GAAcA,EAAY+kC,mBAC1B,KACEG,EAAiBllC,EACnB,GAAcA,EAAYklC,gBAC1B,KAEJ,OACEH,GACAG,IACCv4B,GAAqBo4B,EAAmBG,GAElC/3B,GAAgBvtL,EAAQslN,EAAgBH,GAExCnlN,EC3RJ,IAAM8lN,GACX,4CAOK,SAAS,GAAgBC,EAAcC,GAC5C,OAAOC,KAAcx4E,gBAAgBs4E,EAAcC,GAW9C,SAASE,GAAkB/sN,EAAMgtN,GACtC,OAAOC,GAAmBjtN,EAAMgtN,EAAqB,IAAIn3N,KAAK,IAYzD,SAASo3N,GAAmBjtN,EAAMgtN,EAAqBE,GAC5D,GACEltN,EAAKmwD,UAAYg9J,KAAKC,oBACtBptN,EAAKmwD,UAAYg9J,KAAKE,UAElBL,EACFE,EAAYv5N,KAAKkJ,OAAOmD,EAAKstN,WAAWx4N,QAAQ,gBAAiB,KAEjEo4N,EAAYv5N,KAAKqM,EAAKstN,eAEnB,CACL,IAAIntN,OAAC,EACL,IAAKA,EAAIH,EAAKyC,WAAYtC,EAAGA,EAAIA,EAAEu/J,YACjCutD,GAAmB9sN,EAAG6sN,EAAqBE,GAG/C,OAAOA,EAOF,SAASK,GAAWj6K,GACzB,MAAO,oBAAqBA,EAmBvB,SAASv2B,GAAMsH,GACpB,OAAO,IAAItb,WAAYE,gBAAgBob,EAAK,mBAWvC,SAASmpM,GAAkBC,EAAa1zC,GAC7C,OAAO,SAKK/5K,EAAM0tN,GACd,IAAMt/N,EAAQq/N,EAAYxhO,UACX0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA0tN,QAEY/9N,IAAVvB,GAIF,EAFEs/N,EAAYA,EAAY9+N,OAAS,GAErBR,IAcf,SAASu/N,GAAgBF,EAAa1zC,GAC3C,OAAO,SAKK/5K,EAAM0tN,GACd,IAAMt/N,EAAQq/N,EAAYxhO,UACX0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA0tN,QAEY/9N,IAAVvB,GAEAs/N,EAAYA,EAAY9+N,OAAS,GAE7B+E,KAAKvF,IAcZ,SAASw/N,GAAaH,EAAa1zC,GACxC,OAAO,SAKK/5K,EAAM0tN,GACd,IAAMt/N,EAAQq/N,EAAYxhO,UACX0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA0tN,QAEY/9N,IAAVvB,IACFs/N,EAAYA,EAAY9+N,OAAS,GAAKR,IAevC,SAASy/N,GAAyBJ,EAAaK,EAAc/zC,GAClE,OAAO,SAKK/5K,EAAM0tN,GACd,IAAMt/N,EAAQq/N,EAAYxhO,UACX0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA0tN,GAEF,QAAc/9N,IAAVvB,EAAqB,CACvB,IAAMklD,EACJo6K,EAAYA,EAAY9+N,OAAS,GAE7BmxB,OACapwB,IAAjBm+N,EAA6BA,EAAe9tN,EAAK+tN,UAC/CztK,OAAK,EACLvgC,KAAYuzB,EACdgN,EAAQhN,EAAOvzB,IAEfugC,EAAQ,GACRhN,EAAOvzB,GAAYugC,GAErBA,EAAM3sD,KAAKvF,KAcZ,SAAS4/N,GAAyBP,EAAaK,EAAc/zC,GAClE,OAAO,SAKK/5K,EAAM0tN,GACd,IAAMt/N,EAAQq/N,EAAYxhO,UACX0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA0tN,QAEY/9N,IAAVvB,IAEAs/N,EAAYA,EAAY9+N,OAAS,QAGhBe,IAAjBm+N,EAA6BA,EAAe9tN,EAAK+tN,WAChC3/N,IAepB,SAAS6/N,GAAkBC,EAAYn0C,GAC5C,OAAO,SAAU/5K,EAAM5R,EAAOs/N,GAC5BQ,EAAWjiO,UACI0D,IAAboqL,EAAyBA,EAAWxuL,KACpCyU,EACA5R,EACAs/N,GAGAA,EAAYA,EAAY9+N,OAAS,GAEToR,KACf5H,YAAY4H,IAgBpB,SAASmuN,GAAoBD,EAAYn0C,GAC9C,IAAIq0C,EAAeC,EACnB,OAAO,SAAUruN,EAAM5R,EAAOs/N,GAC5B,QAAsB/9N,IAAlBy+N,EAA6B,CAC/BA,EAAgB,GAChB,IAAME,EAAc,GACpBA,EAAYtuN,EAAK+tN,WAAaG,EAC9BE,EAAcpuN,EAAK4sN,cAAgB0B,EACnCD,EAAcE,GAAsBvuN,EAAK+tN,WAE3CS,GAAUJ,EAAeC,EAAajgO,EAAOs/N,IAiB1C,SAASa,GAAsBE,EAAcC,GAClD,IAAMC,EAAgBF,EACtB,OAAO,SAOKrgO,EAAOs/N,EAAae,GAC5B,IAGMzuN,EAFJ0tN,EAAYA,EAAY9+N,OAAS,GAEdoR,KACjByR,EAAWk9M,EAOf,YANiBh/N,IAAb8hB,IACFA,EAAWg9M,GAKN,QADgB9+N,IAArB++N,EAAiCA,EAAmB1uN,EAAK4sN,aACA,IAY1D,IAAMgC,GAA+BL,KAarC,SAASM,GAAav7K,EAAQw7K,GAGnC,IAFA,IAAMlgO,EAASkgO,EAAYlgO,OACrBmgO,EAAW,IAAI1iO,MAAMuC,GAClBnB,EAAI,EAAGA,EAAImB,IAAUnB,EAC5BshO,EAASthO,GAAK6lD,EAAOw7K,EAAYrhO,IAEnC,OAAOshO,EAaF,SAASC,GAAgBC,EAAeC,EAAWC,GAIxD,IACI1hO,EAAGgiB,EADD2/M,OAAkCz/N,IAApBw/N,EAAgCA,EAAkB,GAEtE,IAAK1hO,EAAI,EAAGgiB,EAAKw/M,EAAcrgO,OAAQnB,EAAIgiB,IAAMhiB,EAC/C2hO,EAAYH,EAAcxhO,IAAMyhO,EAElC,OAAOE,EAWF,SAASC,GAAUC,EAAWtvN,EAAM0tN,EAAa3zC,GACtD,IAAI55K,EACJ,IAAKA,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAC5D,IAAM4qE,EAAUD,EAAUnvN,EAAEysN,cAC5B,QAAgBj9N,IAAZ4/N,EAAuB,CACzB,IAAMzmN,EAASymN,EAAQpvN,EAAE4tN,gBACVp+N,IAAXmZ,GACFA,EAAO7c,KAAK8tL,EAAU55K,EAAGutN,KAiB1B,SAAS8B,GACdl8K,EACAg8K,EACAtvN,EACA0tN,EACA3zC,GAIA,OAFA2zC,EAAY/5N,KAAK2/C,GACjB+7K,GAAUC,EAAWtvN,EAAM0tN,EAAa3zC,GACf2zC,EAAYpgK,MAyBhC,SAASkhK,GACdJ,EACAC,EACA30M,EACAg0M,EACA+B,EACA11C,GAIA,IAFA,IACI3rL,EAAO4R,EADLpR,QAAuBe,IAAb8/N,EAAyBA,EAAW/1M,GAAQ9qB,OAEnDnB,EAAI,EAAGA,EAAImB,IAAUnB,OAEdkC,KADdvB,EAAQsrB,EAAOjsB,UAQAkC,KANbqQ,EAAOquN,EAAYpiO,UACJ0D,IAAboqL,EAAyBA,EAAWxuL,KACpC6C,EACAs/N,OACa/9N,IAAb8/N,EAAyBA,EAAShiO,QAAKkC,KAGvCy+N,EAAcpuN,EAAK4sN,cAAc5sN,EAAK+tN,WAAW9hO,KAC/C8tL,EACA/5K,EACA5R,EACAs/N,GA8BH,SAASgC,GACdp8K,EACA86K,EACAC,EACA30M,EACAg0M,EACA+B,EACA11C,GAWA,OATA2zC,EAAY/5N,KAAK2/C,GACjBk7K,GACEJ,EACAC,EACA30M,EACAg0M,EACA+B,EACA11C,GAEiC2zC,EAAYpgK,MAGjD,IAAIqiK,QAAiBhgO,EAuBrB,IAAIigO,QAAYjgO,EAiBT,SAASm9N,KAId,YAHkBn9N,IAAdigO,IAA+C,oBAAb13N,WACpC03N,GAAY13N,SAAS23N,eAAeC,eAAe,GAAI,GAAI,OAEtDF,G,+dCzST,SApRA,YACE,mBACE,cAAO,K,OAMP,EAAKD,qBD0hBgBhgO,IAAnBggO,IAAyD,oBAAlBI,gBACzCJ,GAAiB,IAAII,eAEhBJ,I,ECnRT,OAlRyB,QAcvB,YAAAn6N,QAAA,WACE,MAAO,OAWT,YAAAumK,YAAA,SAAY71J,EAAQ+gL,GAClB,GAAK/gL,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKykO,wBAAwBphD,EAAKqY,GACpC,OAAIsmC,GAAWrnN,GACb3a,KAAKykO,wBACc,EACxB/oC,GAGK17L,KAAK0kO,oBACa,EACvBhpC,GAZF,OAAO,MAsBX,YAAA+oC,wBAAA,SAAwBphD,EAAKqY,GAC3B,IAAM5sL,EAAW9O,KAAK2kO,yBAAyBthD,EAAKqY,GACpD,OAAI5sL,EAASzL,OAAS,EACbyL,EAAS,GAET,MASX,YAAA41N,oBAAA,SAAoBjwN,EAAMinL,GACxB,OAAO,MAWT,YAAA5tE,aAAA,SAAanzG,EAAQ+gL,GACnB,GAAK/gL,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAK2kO,yBAAyBthD,EAAKqY,GACrC,OAAIsmC,GAAWrnN,GACb3a,KAAK2kO,yBACc,EACxBjpC,GAGK17L,KAAK4kO,qBACa,EACvBlpC,GAZF,MAAO,IAuBX,YAAAipC,yBAAA,SAAyBthD,EAAKqY,GAG5B,IADA,IAAM5sL,EAAW,GACR8F,EAAIyuK,EAAInsK,WAAYtC,EAAGA,EAAIA,EAAEu/J,YAChCv/J,EAAEgwD,UAAYg9J,KAAKiD,cACrB,EACE/1N,EACA9O,KAAK4kO,qBAA4C,EAAKlpC,IAI5D,OAAO5sL,GAUT,YAAA81N,qBAAA,SAAqBnwN,EAAMinL,GACzB,OAAO,KAUT,YAAAulC,aAAA,SAAatmN,EAAQ+gL,GACnB,GAAK/gL,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAK8kO,yBAAyBzhD,EAAKqY,GACrC,OAAIsmC,GAAWrnN,GACb3a,KAAK8kO,yBACc,EACxBppC,GAGK17L,KAAK+kO,qBACa,EACvBrpC,GAZF,OAAO,MAuBX,YAAAopC,yBAAA,SAAyBzhD,EAAKqY,GAC5B,OAAO,MAST,YAAAqpC,qBAAA,SAAqBtwN,EAAMinL,GACzB,OAAO,MAUT,YAAAglC,eAAA,SAAe/lN,GACb,GAAKA,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKglO,2BAA2B3hD,GAClC,OAAI2+C,GAAWrnN,GACb3a,KAAKglO,2BAAmD,GAExDhlO,KAAKilO,uBAA8C,GAP1D,OAAO,MAgBX,YAAAD,2BAAA,SAA2B3hD,GACzB,OAAOrjL,KAAK4gO,gBAQd,YAAAqE,uBAAA,SAAuBxwN,GACrB,OAAOzU,KAAK4gO,gBAUd,YAAA7kK,aAAA,SAAat4D,EAASi4L,GACpB,IAAMjnL,EAAOzU,KAAKklO,iBAAiBzhO,EAASi4L,GAC5C,OAAO17L,KAAKokO,eAAee,kBAAkB1wN,IAS/C,YAAAywN,iBAAA,SAAiBzhO,EAASi4L,GACxB,OAAO,MAWT,YAAA9tE,cAAA,SAAc9+G,EAAU4sL,GACtB,IAAMjnL,EAAOzU,KAAKolO,kBAAkBt2N,EAAU4sL,GAC9C,OAAO17L,KAAKokO,eAAee,kBAAkB1wN,IAQ/C,YAAA2wN,kBAAA,SAAkBt2N,EAAU4sL,GAC1B,OAAO,MAUT,YAAAwlC,cAAA,SAAc5gO,EAAUo7L,GACtB,IAAMjnL,EAAOzU,KAAKqlO,kBAAkB/kO,EAAUo7L,GAC9C,OAAO17L,KAAKokO,eAAee,kBAAkB1wN,IAQ/C,YAAA4wN,kBAAA,SAAkB/kO,EAAUo7L,GAC1B,OAAO,MAEX,EAlRA,CAAyB,I,+dCoBZ4pC,GAAQ,6BAafC,GAAqB,cA6C3B,eAIE,WAAY7pC,GAAZ,MACE,cAAO,KAED/7L,EAAkC+7L,GAA4B,G,OAMpE,EAAK/pK,YAAchyB,EAAQgyB,YAM3B,EAAK+9H,UAAY/vJ,EAAQ+vJ,UAMzB,EAAKngJ,QAAU5P,EAAQ4P,QAMvB,EAAKi2N,eAAiB,GAKtB,EAAKC,2BAA6B,GAClC,EAAKA,2BAA2B,EAAKC,WAAa,CAChD,cAAiBtD,GAAgB,EAAKuD,sBACtC,eAAkBtD,GAAa,EAAKsD,uBAGtC,EAAK7E,oBAAsB,CAAC,uB,EAschC,OAhfsB,QAkDpB,YAAA6E,qBAAA,SAAqBlxN,EAAM0tN,GACzB,IAAMK,EAAY/tN,EAAK+tN,UACnB1zN,EAAW,KACf,GAAiB,qBAAb0zN,EACF1zN,EAAWm1N,GACT,GACAjkO,KAAKylO,2BACLhxN,EACA0tN,EACAniO,WAEG,GACQ,kBAAbwiO,GACa,iBAAbA,GACa,UAAbA,EACA,CACA,IAAMlwJ,EAAU6vJ,EAAY,GACxBxwM,EAAc2gD,EAAqB,YACnCo9E,EAAYp9E,EAAmB,UAGnC,IAAK3gD,GAAeld,EAAK3G,WAAY,CAClC6jB,EAAc,GAAM+9H,EAAY,GACjC,IAAK,IAAIxtJ,EAAI,EAAGgiB,EAAKzP,EAAK3G,WAAWzK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACxD,IAAM+hB,EAAgCxP,EAAK3G,WAAW5L,GACtD,GAAuB,IAAnB+hB,EAAM2gD,SAAgB,CACxB,IAAMgwC,EAAK3wF,EAAMiC,SAAS/T,MAAM,KAAK4vD,MACrC,IAAiC,IAA7BpwC,EAAY3oB,QAAQ4rG,GAAY,CAClC,IAAInsG,EAAM,GACN6R,EAAQ,EACN0rD,EAAM/hD,EAAMo9M,aAClB,IAAK,IAAM1tK,KAAa+7F,EAAW,CACjC,GAAIA,EAAU/7F,KAAeqS,EAAK,CAChCv9D,EAAMkrD,EACN,QAEAr5C,EAEC7R,IAEHinJ,EADAjnJ,EApBK,IAoBU6R,GACE0rD,GAEnBr0C,EAAYvpB,KAAKK,EAAM,IAAMmsG,KAIlB,iBAAb4tH,IAEFlwJ,EAAqB,YAAI3gD,EACzB2gD,EAAmB,UAAIo9E,GAG3B,GAAyB,iBAAdA,EAAwB,CACjC,IAAMk2E,EAAKl2E,GACXA,EAAY,IACW,GAAIk2E,EAG7B,IAAM7B,EAAY,GACZz1E,EAAextJ,MAAMC,QAAQ4wB,GAC/BA,EACA,CAACA,GACL,IAAK,IAAMvsB,KAAKsqJ,EAAW,CAEzB,IAAMs0E,EAAU,GAChB,IAAS9hO,EAAI,EAAGgiB,EAAKoqI,EAAajrJ,OAAQnB,EAAIgiB,IAAMhiB,EAAG,GAEjB,IAAlCosJ,EAAapsJ,GAAG8G,QAAQ,KA/CR,KAiDZslJ,EAAapsJ,GAAGiQ,MAAM,KAAK,MACX/M,IACpB4+N,EAAQ11E,EAAapsJ,GAAGiQ,MAAM,KAAK4vD,OACpB,kBAAbygK,EACIJ,GAAgBpiO,KAAK6lO,mBAAoB7lO,MACzCqiO,GAAariO,KAAK6lO,mBAAoB7lO,OAGhD+jO,EAAUr0E,EAAUtqJ,IAAM4+N,EAG1Bl1N,EAAWm1N,GADI,iBAAbzB,GAA6C,UAAbA,OACPp+N,EAEA,GAFW2/N,EAAWtvN,EAAM0tN,GAQ3D,OAHiB,OAAbrzN,IACFA,EAAW,IAENA,GAQT,YAAAg3N,qBAAA,SAAqBrxN,EAAM0tN,GACzB,IAAM7vJ,EAAiC6vJ,EAAY,GAInD,OAHA7vJ,EAAiB,QAAI79D,EAAK2/J,kBAAkBx2I,aAAa,WACzD00C,EAAsB,aACpB79D,EAAK2/J,kBAAkBx2I,aAAa,gBAC/BqmM,GACL,KACAjkO,KAAK+lO,iBACLtxN,EACA0tN,EACAniO,OASJ,YAAAgmO,kBAAA,SAAkBvxN,EAAM0tN,GACtB,IAAM7vJ,EAAiC6vJ,EAAY,GAC7C7mN,EACJtb,KAAK8lO,qBAAqBrxN,EAAM0tN,GAElC,OAAO7mN,EAAS6lN,GAA2B7lN,EAAQg3D,QAAWluE,GAQhE,YAAA6hO,oBAAA,SAAoBxxN,EAAM0tN,GACxB,IAAM7vJ,EAAiC6vJ,EAAY,GAC7C7hO,EACJN,KAAK8lO,qBAAqBrxN,EAAM0tN,GAElC,OAAO7hO,EACH,GAA6BA,GAAU,EAAOgyE,QAC9CluE,GASN,YAAA8hO,2BAAA,SAA2BzxN,EAAM0tN,EAAagE,GAG5C,IAFA,IAAI1nK,EACEtwC,EAAS,GACNvZ,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAChE,IAAIv2J,OAAK,EACH2/N,EAAY5tN,EAAE4tN,UAGM,IAAxB5tN,EAAE9G,WAAWzK,QACY,IAAxBuR,EAAE9G,WAAWzK,SACe,IAA1BuR,EAAEsC,WAAW0tD,UAA4C,IAA1BhwD,EAAEsC,WAAW0tD,WAE/C/hE,EAAQ2+N,GAAkB5sN,GAAG,GACzB2wN,GAAmBtjM,KAAKp/B,KAC1BA,OAAQuB,KAGN+hO,IAEFtjO,EACgB,cAAd2/N,EACIxiO,KAAKgmO,kBAAkBpxN,EAAGutN,GAC1BniO,KAAKimO,oBAAoBrxN,EAAGutN,IAE/Bt/N,EAGoB,cAAd2/N,IAET/jK,EAAe+jK,GAHf3/N,EAAQ7C,KAAKkmO,2BAA2BtxN,EAAGutN,GAAa,IAO5D,IAAMl3N,EAAM2J,EAAElM,WAAWrF,OACzB,GAAI4H,EAAM,EAAG,CACXpI,EAAQ,CAACujO,UAAWvjO,GACpB,IAAK,IAAIX,EAAI,EAAGA,EAAI+I,EAAK/I,IAAK,CAE5BW,EADgB+R,EAAElM,WAAWxG,GAAG2G,MACf+L,EAAElM,WAAWxG,GAAGW,OAIjCsrB,EAAOq0M,IACHr0M,EAAOq0M,aAAsB1hO,QACjCqtB,EAAOq0M,GAAa,CAACr0M,EAAOq0M,KAE9Br0M,EAAOq0M,GAAWp6N,KAAKvF,IAEvBsrB,EAAOq0M,GAAa3/N,EAGxB,GAAKsjO,EAEE,CACL,IAAM1iO,EAAU,IAAI,GAAQ0qB,GACxBswC,GACFh7D,EAAQk3N,gBAAgBl8J,GAE1B,IAAMytG,EACJz3J,EAAKmpB,aAAa,QFjQnB,SAAwBnpB,EAAM4sN,EAAcx4N,GACjD,OAAO4L,EAAK4xN,eAAehF,EAAcx4N,IAAS,GEgQhBw9N,CAAe5xN,EAAMzU,KAAK0lO,UAAW,MAInE,OAHIx5D,GACFzoK,EAAQS,MAAMgoK,GAETzoK,EAXP,OAAO0qB,GAoBX,YAAA03M,mBAAA,SAAmBpxN,EAAM0tN,GACvB,OAAOniO,KAAKkmO,2BAA2BzxN,EAAM0tN,GAAa,IAQ5D,YAAAmE,UAAA,SAAU7xN,EAAM0tN,GACd,IAAM55C,EAAkBvoL,KAAKumO,4BAA4B9xN,EAAM0tN,GAC/D,GAAI55C,EACF,OAAO,IAAI,GAAMA,EAAiB,SAStC,YAAAi+C,eAAA,SAAe/xN,EAAM0tN,GAEnB,IAAM/3N,EAAc65N,GAClB,GACAjkO,KAAKymO,mBACLhyN,EACA0tN,EACAniO,MAEF,OAAIoK,EACK,IAAI,GAAWA,QAEtB,GASJ,YAAAs8N,oBAAA,SAAoBjyN,EAAM0tN,GAExB,IAAMrF,EAAcmH,GAClB,GACAjkO,KAAK2mO,wBACLlyN,EACA0tN,EACAniO,MAEF,GAAI88N,EACF,OAAO,IAAI,GAAgBA,IAS/B,YAAA8J,iBAAA,SAAiBnyN,EAAM0tN,GAErB,IAAMtE,EAAWoG,GACf,GACAjkO,KAAK6mO,qBACLpyN,EACA0tN,EACAniO,MAEF,GAAI69N,EACF,OAAO,IAAI,GAAaA,IAQ5B,YAAAiJ,kBAAA,SAAkBryN,EAAM0tN,GACtB2B,GAAU9jO,KAAK+mO,oBAAqBtyN,EAAM0tN,EAAaniO,OAOzD,YAAAgnO,uBAAA,SAAuBvyN,EAAM0tN,GAC3B2B,GAAU9jO,KAAKinO,yBAA0BxyN,EAAM0tN,EAAaniO,OAO9D,YAAAknO,oBAAA,SAAoBzyN,EAAM0tN,GACxB2B,GAAU9jO,KAAKmnO,sBAAuB1yN,EAAM0tN,EAAaniO,OAQ3D,YAAAonO,eAAA,SAAe3yN,EAAM0tN,GACnB,IAAM55C,EAAkBvoL,KAAKumO,4BAA4B9xN,EAAM0tN,GAC/D,OAAI55C,EACiB,IAAI,GAAWA,EAAiB,aAGnD,GASJ,YAAA8+C,mBAAA,SAAmB5yN,EAAM0tN,GACvB,IAAM7xN,EAAO2zN,GACX,KACAjkO,KAAKsnO,kCACL7yN,EACA0tN,EACAniO,MAEF,OAAIsQ,QAGF,GASJ,YAAAi3N,eAAA,SAAe9yN,EAAM0tN,GACnB,IAAM55C,EAAkBvoL,KAAKumO,4BAA4B9xN,EAAM0tN,GAC/D,GAAI55C,EACF,OAAO,IAAI,GAAWA,EAAiB,SAS3C,YAAAi/C,YAAA,SAAY/yN,EAAM0tN,GAEhB,IAAMsF,EAAkBxD,GACtB,CAAC,MACDjkO,KAAK0nO,0BACLjzN,EACA0tN,EACAniO,MAEF,GAAIynO,GAAmBA,EAAgB,GAAI,CACzC,IAEOvjN,EAFDqkK,EAAkBk/C,EAAgB,GAClC70D,EAAO,CAAC2V,EAAgBllL,QAC1BnB,OAAC,EACL,IAAKA,EAAI,EAAGgiB,EAAKujN,EAAgBpkO,OAAQnB,EAAIgiB,IAAMhiB,EACjD,EAAOqmL,EAAiBk/C,EAAgBvlO,IACxC0wK,EAAKxqK,KAAKmgL,EAAgBllL,QAE5B,OAAO,IAAI,GAAQklL,EAAiB,OAAoB3V,KAW5D,YAAA2zD,4BAAA,SAA4B9xN,EAAM0tN,GAChC,OAAO8B,GACL,KACAjkO,KAAKsnO,kCACL7yN,EACA0tN,EACAniO,OAUJ,YAAA+kO,qBAAA,SAAqBtwN,EAAMinL,GACzB,IAAMp7L,EAAWN,KAAKimO,oBAAoBxxN,EAAM,CAC9CzU,KAAK+gO,eAAetsN,EAAMinL,GAA4B,MAExD,OAAOp7L,GAAsB,MAQ/B,YAAAskO,qBAAA,SAAqBnwN,EAAMinL,GACzB,IAAM/7L,EAAU,CACdgyB,YAAa3xB,KAAK2xB,YAClB+9H,UAAW1vJ,KAAK0vJ,WAMlB,OAJIgsC,GACF,GAAO/7L,EAASK,KAAK+gO,eAAetsN,EAAMinL,IAE3B17L,KAAK2lO,qBAAqBlxN,EAAM,CAAC9U,KAC/B,IAOrB,YAAAslO,uBAAA,SAAuBxwN,GACrB,OAAO,GACLzU,KAAKuP,QACDvP,KAAKuP,QACLkF,EAAK2/J,kBAAkBx2I,aAAa,aAG9C,EAhfA,CAAsB,IAkftB+pM,GAAQnnO,UAAUklO,UAAYJ,GAM9BqC,GAAQnnO,UAAUknO,0BAA4B,CAC5C,6BAA8B,IAOhCC,GAAQnnO,UAAU8mO,kCAAoC,CACpD,6BAA8B,IAOhCK,GAAQnnO,UAAUulO,iBAAmB,CACnC,6BAA8B,IAOhC4B,GAAQnnO,UAAUimO,mBAAqB,CACrC,6BAA8B,CAC5B,YAAerE,GAAgBuF,GAAQnnO,UAAUsmO,mBACjD,aAAgB1E,GAAgBuF,GAAQnnO,UAAUsmO,qBAQtDa,GAAQnnO,UAAUmmO,wBAA0B,CAC1C,6BAA8B,CAC5B,iBAAoBvE,GAClBuF,GAAQnnO,UAAUwmO,wBAEpB,kBAAqB5E,GACnBuF,GAAQnnO,UAAUwmO,0BASxBW,GAAQnnO,UAAUqmO,qBAAuB,CACvC,6BAA8B,CAC5B,cAAiBzE,GAAgBuF,GAAQnnO,UAAU0mO,qBACnD,eAAkB9E,GAAgBuF,GAAQnnO,UAAU0mO,uBAQxDS,GAAQnnO,UAAUumO,oBAAsB,CACtC,6BAA8B,CAC5B,MAAS3E,GAAgBuF,GAAQnnO,UAAU+lO,+BAQ/CoB,GAAQnnO,UAAUymO,yBAA2B,CAC3C,6BAA8B,CAC5B,WAAc7E,GAAgBuF,GAAQnnO,UAAU4mO,kBAQpDO,GAAQnnO,UAAU2mO,sBAAwB,CACxC,6BAA8B,CAC5B,QAAW/E,GAAgBuF,GAAQnnO,UAAUgnO,eAQjDG,GAAQnnO,UAAUonO,aAAe,CAC/B,6BAA8B,CAC5B,WAAcvF,GAAasF,GAAQnnO,UAAU6mO,sBAIjD,YCpqBMQ,GAAe,6BACfC,GAAiB,iCACvB,gCAAqCA,IAAkB,gCAAqCD,IAC5F,qCAA0CC,IAAkB,qCAA0CD,IACtG,kCAAuCC,IAAkB,kCAAuCD,IAChG,iCAAsCC,IAAkB,iCAAsCD,IAC9F,sCAA2CC,IAAkB,sCAA2CD,IACxG,mCAAwCC,IAAkB,mCAAwCD,IAClG,0BAA+BC,IAAkB,0BAA+BD,IAuBhF,kCAAyC,SAAUpzN,EAAM0tN,GACrD,MAAMK,EAAY/tN,EAAK+tN,UACvB,IAAI1zN,EAAW,KACf,GAAiB,qBAAb0zN,EAAkC,CAGlC,IAAIuF,EAAwB/nO,KAAKylO,2BAA2B9/L,GAAG3yB,OAAO20N,QAAQnnO,UAAUklO,YAAc1lO,KAAKylO,2BAA2BzlO,KAAK0lO,WACtIqC,EAAsBC,SACvBD,EAAsBC,OAASriM,GAAG7M,IAAIspM,gBAClCz8L,GAAG3yB,OAAO20N,QAAQnnO,UAAUmlO,uBAOV,+BAAtBlxN,EAAK4sN,eAKLrhO,KAAKylO,2BAA2BhxN,EAAK4sN,cACjCrhO,KAAKylO,2BAA2BhxN,EAAK4sN,eAAiBrhO,KAAKylO,2BAA2B9/L,GAAG3yB,OAAO20N,QAAQnnO,UAAUklO,YAAc1lO,KAAKylO,2BAA2BzlO,KAAK0lO,YALzK52N,EAAW62B,GAAG7M,IAAImrM,gBAAgB,GAC9BjkO,KAAKylO,2BAA4BhxN,EACjC0tN,EAAaniO,WASlB,GAAiB,kBAAbwiO,GAA8C,iBAAbA,GAA6C,UAAbA,EAAuB,CAC/F,MAAMlwJ,EAAU6vJ,EAAY,GAC5B,IAAIxwM,EAAc2gD,EAAQ3gD,YACtB+9H,EAAYp9E,EAAQo9E,UACxB,MAAM9oH,EAAS,IACTqhM,EAAgB,KACtB,uBAAwBxzN,EAAK3G,WAAY,CACrC6jB,EAAc,GAAI+9H,EAAY,GAC9B,IAAK,IAAIxtJ,EAAI,EAAGgiB,EAAKzP,EAAK3G,WAAWzK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACtD,MAAM+hB,EAAQxP,EAAK3G,WAAW5L,GAC9B,GAAuB,IAAnB+hB,EAAM2gD,SAAgB,CACtB,MAAMhlD,EAAKqE,EAAMiC,SAAS/T,MAAM,KAAK4vD,MACrC,GAAU,qBAANniD,EACA,OAAOqkN,GAAgB,GAAIjkO,KAAKylO,2BAA4BxhN,EAAOk+M,EAAaniO,MAM/E,IAAiC,IAA7B2xB,EAAY3oB,QAAQ4W,GAAY,CACrC,IAAInX,EAAM,GACN6R,EAAQ,EACZ,MAAM0rD,EAAM/hD,EAAMo9M,aAClB,IAAK,IAAI1tK,KAAa+7F,EAAW,CAC7B,GAAIA,EAAU/7F,KAAeqS,EAAK,CAC9Bv9D,EAAMkrD,EACN,QAEFr5C,EAED7R,IACDA,EAAMm+B,EAAStsB,EACfo1I,EAAUjnJ,GAAOu9D,GAErBr0C,EAAYvpB,KAAKK,EAAM,IAAMmX,KAIxB,iBAAb4iN,IAEAlwJ,EAAQ3gD,YAAcA,EACtB2gD,EAAQo9E,UAAYA,GAG5B,GAAyB,iBAAdA,EAAwB,CAC/B,MAAMk2E,EAAKl2E,EACXA,EAAY,GACZA,EAAUu4E,GAAiBrC,EAG/B,MAAM7B,EAAY,GACZz1E,EAAextJ,MAAMC,QAAQ4wB,GAAeA,EAAc,CAACA,GACjE,IAAK,IAAIvsB,KAAKsqJ,EAAW,CAErB,MAAMs0E,EAAU,GAChB,IAAK,IAAI9hO,EAAI,EAAGgiB,EAAKoqI,EAAajrJ,OAAQnB,EAAIgiB,IAAMhiB,EAAG,GACK,IAAlCosJ,EAAapsJ,GAAG8G,QAAQ,KAC1Ci/N,EAAgB35E,EAAapsJ,GAAGiQ,MAAM,KAAK,MACzB/M,IAClB4+N,EAAQ11E,EAAapsJ,GAAGiQ,MAAM,KAAK4vD,OACjB,kBAAbygK,EACG78L,GAAG7M,IAAIspM,gBAAgBpiO,KAAK6lO,mBAAoB7lO,MAChD2lC,GAAG7M,IAAIupM,aAAariO,KAAK6lO,mBAAoB7lO,OAG7D+jO,EAAUr0E,EAAUtqJ,IAAM4+N,EAG1Bl1N,EADa,iBAAb0zN,EACW78L,GAAG7M,IAAImrM,qBAAgB7/N,EAAW2/N,EAAWtvN,EAAM0tN,GAEnDx8L,GAAG7M,IAAImrM,gBAAgB,GAAIF,EAAWtvN,EAAM0tN,GAM/D,OAHiB,OAAbrzN,IACAA,EAAW,IAERA,GAKX,iCAAwC,SAAU2F,EAAM0tN,GACpD,IAAI7vJ,EAAiC6vJ,EAAY,GAMjD,GALA7vJ,EAAQ/iE,QAAUkF,EAAK2/J,kBAAkBx2I,aAAa,WACtD00C,EAAQ41J,aAAezzN,EAAK2/J,kBAAkBx2I,aAAa,iBAIvD59B,gBAAgB2lC,GAAG3yB,OAAOm1N,WAAanoO,gBAAgB2lC,GAAG3yB,OAAOo1N,aACzC,cAApB91J,EAAQ/iE,UAA4B+iE,EAAQ/iE,SAC5C,MAAM,IAAIvQ,MAAM,oBAGnBszE,EAAQ/iE,UACT+iE,EAAQ/iE,QAAUvP,KAAKuP,SAE3B+iE,EAAQsuJ,eAAiBj7L,GAAGC,KAAKpnB,IAAI8zD,EAAQ/iE,SAC7C,MAAMjP,EAAWqlC,GAAG7M,IAAImrM,gBAAgB,KACpCjkO,KAAK+lO,iBAAkBtxN,EAAM0tN,EAAaniO,MAC9C,OAAIM,EACIQ,MAAMC,QAAQT,GACP6gO,GACqC,EAAY7uJ,GAGjD,GAC6C,GAAY,EAAOA,QAI3E,GAKR,MAAM,GAAqB,cAI3B,wCAA+C,SAAU79D,EAAM0tN,EAAagE,GACxE,IAAI1nK,EACJ,MAAMtwC,EAAS,GACf,IAAK,IAAIvZ,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAC9D,IAAIv2J,EACJ,MAAM2/N,EAAY5tN,EAAE4tN,UAEQ,IAAxB5tN,EAAE9G,WAAWzK,QACe,IAAxBuR,EAAE9G,WAAWzK,SAA2C,IAA1BuR,EAAEsC,WAAW0tD,UAA4C,IAA1BhwD,EAAEsC,WAAW0tD,WAC9E/hE,EAAQ8iC,GAAG7M,IAAI0oM,kBAAkB5sN,GAAG,GAChC,GAAmBqtB,KAAKp/B,KACxBA,OAAQuB,KAGR+hO,IAEAtjO,EAAQ7C,KAAKimO,oBAAoBrxN,EAAGutN,IAEnCt/N,EAEoB,cAAd2/N,GAA2C,mBAAdA,IAGpC/jK,EAAe+jK,GAJf3/N,EAAQ7C,KAAKkmO,2BAA2BtxN,EAAGutN,GAAa,IAQ5Dh0M,EAAOq0M,IACDr0M,EAAOq0M,aAAsB1hO,QAC/BqtB,EAAOq0M,GAAa,CAACr0M,EAAOq0M,KAEhCr0M,EAAOq0M,GAAWp6N,KAAKvF,IAEvBsrB,EAAOq0M,GAAa3/N,EAGxB,MAAMoI,EAAM2J,EAAElM,WAAWrF,OACzB,GAAI4H,EAAM,EAAG,CACTkjB,EAAOq0M,GAAa,CAAE4D,UAAWj4M,EAAOq0M,IACxC,IAAK,IAAItgO,EAAI,EAAGA,EAAI+I,EAAK/I,IAAK,CAC1B,MAAMmmO,EAAUzzN,EAAElM,WAAWxG,GAAG2G,KAChCslB,EAAOq0M,GAAW6F,GAAWzzN,EAAElM,WAAWxG,GAAGW,QAIzD,GAAKsjO,EAEE,CACH,MAAM1iO,EAAU,IAAIkiC,GAAGnmC,QAAQ2uB,GAC3BswC,GACAh7D,EAAQk3N,gBAAgBl8J,GAE5B,MAAMytG,EAAMz3J,EAAKmpB,aAAa,QAC1BnpB,EAAK4xN,eAAermO,KAAK0lO,UAAW,MAIxC,OAHIx5D,GACAzoK,EAAQS,MAAMgoK,GAEXzoK,EAXP,OAAO0qB,GAef,YCxPO,SAASm6M,GAAY7zN,GAE1B,OAAO8zN,GADG/G,GAAkB/sN,GAAM,IAQ7B,SAAS8zN,GAAkBC,GAChC,IAAMrjL,EAAI,6BAA6BjzC,KAAKs2N,GAC5C,OAAIrjL,OACc/gD,IAAT+gD,EAAE,KAAoB,OAE7B,EAQG,SAASsjL,GAAah0N,GAC3B,IAAMizB,EAAI85L,GAAkB/sN,GAAM,GAC5Bi0N,EAAW7kM,KAAKrS,MAAMkW,GAC5B,OAAO1mC,MAAM0nO,QAAYtkO,EAAYskO,EAAW,IAO3C,SAASC,GAAYl0N,GAE1B,OAAOm0N,GADGpH,GAAkB/sN,GAAM,IAQ7B,SAASm0N,GAAkBJ,GAEhC,IAAMrjL,EAAI,4CAA4CjzC,KAAKs2N,GAC3D,OAAIrjL,EACKv9C,WAAWu9C,EAAE,SAEpB,EAQG,SAAS0jL,GAAoBp0N,GAElC,OAAOq0N,GADGtH,GAAkB/sN,GAAM,IAQ7B,SAASq0N,GAA6BN,GAC3C,IAAMrjL,EAAI,gBAAgBjzC,KAAKs2N,GAC/B,OAAIrjL,EACK7sC,SAAS6sC,EAAE,GAAI,SAEtB,EAQG,SAAS4jL,GAAWt0N,GACzB,OAAO+sN,GAAkB/sN,GAAM,GAAOmV,OAOjC,SAASo/M,GAAqBv0N,EAAMw0N,GACzCC,GAAoBz0N,EAAMw0N,EAAO,IAAM,KAOlC,SAASE,GAAkB10N,EAAM+zN,GACtC/zN,EAAK5H,YAAY00N,KAAc6H,mBAAmBZ,IA6B7C,SAASa,GAAqB50N,EAAMk/M,GACzC,IAAM6U,EAAS7U,EAAQ2V,cACvB70N,EAAK5H,YAAY00N,KAAc3Y,eAAe4f,IAOzC,SAASe,GAAgC90N,EAAM+0N,GACpD,IAAMhB,EAASgB,EAAmBvmN,WAClCxO,EAAK5H,YAAY00N,KAAc3Y,eAAe4f,IAOzC,SAASU,GAAoBz0N,EAAM+zN,GACxC/zN,EAAK5H,YAAY00N,KAAc3Y,eAAe4f,I,+dCrH1CiB,GAAmC,CACvC,gBAAmB,mBACnB,WAAc,cACd,aAAgB,gBAChB,aAAgB,iBAUlB,eAIE,WAAY/tC,GAAZ,WACQ/7L,EAEH+7L,GAA4B,G,SAE/B,YAAM/7L,IAAQ,MAET8lO,2BAA2BH,IAAsB,cAAIlD,GACxD,EAAKuD,sBAMP,EAAKH,eAAiB7lO,EAAQ6lO,eAC1B7lO,EAAQ6lO,eAvCdF,8E,EA+mBF,OA3lBmB,QA4BjB,YAAAoE,oBAAA,SAAoBj1N,EAAM0tN,GACxB,IAAMz6L,EAAI85L,GAAkB/sN,GAAM,GAAOlL,QAAQ,aAAc,IAIzDogO,EAFJxH,EAAY,GAEwB,QAClC/9B,EAAkB,MACtB,GAAIulC,EAAc,CAChB,IAAM/jM,EAAO,GAAc+jM,GACvB/jM,IACFw+J,EAAkBx+J,EAAK69I,sBAK3B,IAFA,IAAMmmD,EAAeliM,EAAE9d,OAAOzX,MAAM,OAC9Bo2K,EAAkB,GACfrmL,EAAI,EAAGgiB,EAAK0lN,EAAavmO,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACrD,IAAMxC,EAASkqO,EAAa1nO,GAAGiQ,MAAM,MAC/Bwb,EAAI/lB,WAAWlI,EAAO,IACtBkuB,EAAIhmB,WAAWlI,EAAO,IACtBguB,EAAsB,IAAlBhuB,EAAO2D,OAAeuE,WAAWlI,EAAO,IAAM,EACnB,OAAjC0kM,EAAgBx9K,OAAO,EAAG,GAC5B2hK,EAAgBngL,KAAKulB,EAAGC,EAAGF,GAE3B66J,EAAgBngL,KAAKwlB,EAAGD,EAAGD,GAG/B,OAAO66J,GAQT,YAAAshD,QAAA,SAAQp1N,EAAM0tN,GAEZ,IAAM55C,EAAkB07C,GACtB,CAAC,MACDjkO,KAAK8pO,aACLr1N,EACA0tN,EACAniO,MAEF,OAAOmoL,GACLI,EAAgB,GAAG,GACnBA,EAAgB,GAAG,GACnBA,EAAgB,GAAG,GACnBA,EAAgB,GAAG,KAQvB,YAAAwhD,sBAAA,SAAsBt1N,EAAM0tN,GAE1B,IAAM6H,EAAiB/F,QACrB7/N,EACApE,KAAK4nO,aACLnzN,EACA0tN,EACAniO,MAEEgqO,GAGC7H,EAAYA,EAAY9+N,OAAS,GACpB+E,KAAK4hO,IAQzB,YAAAC,sBAAA,SAAsBx1N,EAAM0tN,GAE1B,IAAM6H,EAAiB/F,QACrB7/N,EACApE,KAAK4nO,aACLnzN,EACA0tN,EACAniO,MAEEgqO,IAGC7H,EAAYA,EAAY9+N,OAAS,GACpB,GAAK2mO,IAYzB,YAAAE,uBAAA,SAAuBrnO,EAAOs/N,EAAae,GACzC,IAIIh9M,EAJEosD,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C8mO,EAAe73J,EAAsB,aACrC83J,EAAU93J,EAAiB,QAC3B+3J,EAAa/3J,EAAoB,WAgBvC,OAdKxxE,MAAMC,QAAQ8B,GAYjBqjB,EAAW,WARM,kBAHjBA,EAAgE,EAE9Djc,aACkD,IAAjBkgO,EACjCjkN,EAAW,eACW,YAAbA,IAAsC,IAAZkkN,EACnClkN,EAAW,UACW,oBAAbA,IAAiD,IAAfmkN,IAC3CnkN,EAAW,cAKR,GAAgB,6BAA8BA,IAQvD,YAAAokN,oBAAA,SAAoB71N,EAAMhR,EAAS0+N,GACjC,IAAMj2D,EAAMzoK,EAAQE,QAChBuoK,GACFz3J,EAAK2Y,aAAa,MAA6B,GAEjD,IAAMklD,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAClEqsJ,EAAYp9E,EAAmB,UAC/B7T,EAAeh7D,EAAQm3N,kBACxBtoJ,EAAQywJ,cACXzwJ,EAAQywJ,YAAc,GACtBzwJ,EAAQywJ,YAAYrzE,GAAa,IAEnC,IAAMxwJ,EAAO,GACPivB,EAAS,GACf,GAAI1qB,EAAQksL,gBAAiB,CAC3B,IAAMp7J,EAAa9wB,EAAQisL,gBAC3B,IAAK,IAAMjnL,KAAO8rB,EAAY,CAC5B,IAAM1xB,EAAQ0xB,EAAW9rB,GACX,OAAV5F,IACF3D,EAAKkJ,KAAKK,GACV0lB,EAAO/lB,KAAKvF,GAEV4F,GAAOg2D,GAEL,mBADuB,EAA6B,sBAGhDh2D,KAAO6pE,EAAQywJ,YAAYrzE,KAC/Bp9E,EAAQywJ,YAAYrzE,GAAWjnJ,GAAOi6N,GACpC1iO,KAAKuqO,qBACLvqO,OAIEyI,KAAO6pE,EAAQywJ,YAAYrzE,KAC/Bp9E,EAAQywJ,YAAYrzE,GAAWjnJ,GAC7Bi6N,GAAkBwG,OAM9B,IAAMl/N,EAAO,GAAO,GAAIsoE,GACxBtoE,EAAKyK,KAAOA,EACZ0vN,GAEE,EACA7xJ,EAAQywJ,YACRC,QAAsB5+N,EAAWsrJ,GACjCvhI,EACAg0M,EACAjjO,IASJ,YAAAsrO,uBAAA,SAAuB/1N,EAAMnU,EAAU6hO,GACrC,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAIjC,GAHsB,sBAAlBoR,EAAKyR,UAAoC3W,GAC3CkF,EAAK2Y,aAAa,UAAW7d,GAGX,eAAlBkF,EAAKyR,UACa,sBAAlBzR,EAAKyR,SACL,CACA,IAAM9b,EAAcpK,KAAKyqO,uBAAuBh2N,EAAK4sN,cACrD5sN,EAAK5H,YAAYzC,GACjBpK,KAAK0qO,kBAAkBtgO,EAAa9J,EAAU6hO,QACzC,GAAsB,UAAlB1tN,EAAKyR,SAAsB,CACpC,IAAMykN,EAAW,GAAgBl2N,EAAK4sN,aAAc,YACpD5sN,EAAK5H,YAAY89N,GACjB3qO,KAAK4qO,oBAAoBD,EAAUrqO,EAAU6hO,KASjD,YAAA0I,6BAAA,SAA6Bp2N,EAAM8gB,EAAM4sM,GACvC,IAAMl+M,EAAQjkB,KAAKkqO,uBAAuB30M,EAAM4sM,GAC5Cl+M,IACFxP,EAAK5H,YAAYoX,GACjBjkB,KAAKwqO,uBAAuBvmN,EAAOsR,EAAM4sM,KAS7C,YAAA2I,4BAAA,SAA4Br2N,EAAMnU,EAAU6hO,GAC1C,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC3B04J,EAAQ14J,EAAe,MACzB/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMwpF,EAAQz4F,EAAS+8N,iBACvB8G,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,EAASy7N,MAAOA,GAClDhrO,KAAKirO,oCACLjrO,KAAKkrO,mCACLnyI,EACAopI,OACA/9N,EACApE,OASJ,YAAAuqO,qBAAA,SAAqB91N,EAAMnU,EAAU6hO,GACnC,IAKIt/N,EALEyvE,EACJ6vJ,EAAYA,EAAY9+N,OAAS,GAE7B2G,EAAO,GAAO,GAAIsoE,GACxBtoE,EAAW,KAAIyK,EAGb5R,EADE/B,MAAMC,QAAQT,GACR6gO,GACuC,EAC7C7uJ,GAGM,GAC+C,GACrD,EACAA,GAGJ6xJ,GAEE,EACAnkO,KAAKmrO,qBACLnrO,KAAKkqO,uBACL,CAACrnO,GACDs/N,OACA/9N,EACApE,OASJ,YAAAyqO,uBAAA,SAAuBpJ,GACrB,IAAMj3N,EAAc,GAAgBi3N,EAAc,eAKlD,OAJAj3N,EAAYgjB,aAAa,UAAW,KACpChjB,EAAYgjB,aAAa,KAAM,KAC/BhjB,EAAYgjB,aAAa,KAAM,KAExBhjB,GAST,YAAAsgO,kBAAA,SAAkBj2N,EAAM5R,EAAOs/N,GAQ7B,IAPA,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAE3BxwE,EAASe,EAAMvB,iBACf2J,EAAMnJ,EAAOuB,OACbyqB,EAAQ,IAAIhtB,MAAMmK,GACf/I,EAAI,EAAGA,EAAI+I,IAAO/I,EAAG,CAC5B,IAAMmzB,EAAQvzB,EAAOI,GACrB4rB,EAAM5rB,GAAKlC,KAAKorO,WAAW/1M,EAAO9lB,EAASw7N,GAE7C7B,GAAoBz0N,EAAMqZ,EAAMxjB,KAAK,OASvC,YAAAsgO,oBAAA,SAAoBn2N,EAAM8gB,EAAM4sM,GAC9B,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,qBACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAKwqO,uBAAuBvmN,EAAOsR,EAAM4sM,IAQ3C,YAAAkJ,sBAAA,SAAsB52N,EAAMnU,EAAU6hO,GACpC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAIjC,GAHsB,iBAAlB79D,EAAKyR,UAA+B3W,GACtCkF,EAAK2Y,aAAa,UAAW7d,GAET,YAAlBkF,EAAKyR,UAA4C,iBAAlBzR,EAAKyR,SAA6B,CACnE,IAAMolN,EAAQhrO,EAASqzM,iBACvBwwB,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,GAClCvP,KAAKurO,iBACLvrO,KAAKwrO,mBACLF,EACAnJ,OACA/9N,EACApE,WAEG,GAAsB,YAAlByU,EAAKyR,SAAwB,CACtC,IAAMulN,EAAU,GAAgBh3N,EAAK4sN,aAAc,WACnD5sN,EAAK5H,YAAY4+N,GACjBzrO,KAAK0rO,qBAAqBD,EAASnrO,EAAU6hO,KAWjD,YAAAqJ,mBAAA,SAAmB3oO,EAAOs/N,EAAae,GACrC,IAAM5wJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3Cm+C,EAAa8wB,EAAQ79D,KACrBk3N,EAAkBr5J,EAAyB,gBAIjD,YAHwBluE,IAApBunO,IACFr5J,EAAyB,iBAAI,GAExB,GACL9wB,EAAW6/K,kBACSj9N,IAApBunO,EAAgC,kBAAoB,oBAUxD,YAAAD,qBAAA,SAAqBj3N,EAAMpE,EAAS8xN,GAClC,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,gBACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAKqrO,sBAAsBpnN,EAAO5T,EAAS8xN,IAQ7C,YAAAyJ,UAAA,SAAUn3N,EAAMnE,EAAM6xN,GACpB,IAAM1xB,EAAa,GAAgBh8L,EAAK4sN,aAAc,cACtD5sN,EAAK5H,YAAY4jM,GACjBzwM,KAAK6rO,gBAAgBp7B,EAAYngM,EAAM6xN,IAUzC,YAAAiJ,WAAA,SAAW/1M,EAAOkuJ,EAAauoD,GAC7B,IAAI1nC,EAAkB,MAClB7gB,IACF6gB,EAAkB,GAAc7gB,GAAaE,sBAE/C,IAAI/jL,EAC+B,OAAjC0kM,EAAgBx9K,OAAO,EAAG,GACtByO,EAAM,GAAK,IAAMA,EAAM,GACvBA,EAAM,GAAK,IAAMA,EAAM,GACzBy2M,IAGFpsO,GAAU,KADA21B,EAAM,IAAM,IAIxB,OAAO31B,GAQT,YAAAqsO,WAAA,SAAWt3N,EAAMnU,EAAU6hO,GACzB,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC7B/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMnF,EAAcpK,KAAKyqO,uBAAuBh2N,EAAK4sN,cACrD5sN,EAAK5H,YAAYzC,GACjB,IAAMirB,EAAQ/0B,EAASgB,iBAEvB4nO,GAAoB9+N,EADNpK,KAAKorO,WAAW/1M,EAAO9lB,EAASw7N,KAShD,YAAAiB,gBAAA,SAAgBv3N,EAAMnU,EAAU6hO,GAC9B,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC7B/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMzN,EAASxB,EAAS2jJ,YACxBkgF,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,GAClCvP,KAAKisO,wBACLjJ,GAAsB,eACtBlhO,EACAqgO,OACA/9N,EACApE,OASJ,YAAAksO,iBAAA,SAAiBz3N,EAAM4gB,EAAO8sM,GAC5B,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,SACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAK+rO,WAAW9nN,EAAOoR,EAAO8sM,IAQhC,YAAA0J,gBAAA,SAAgBp3N,EAAMnU,EAAU6hO,GAC9B,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC7BkM,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMnF,EAAcpK,KAAKyqO,uBAAuBh2N,EAAK4sN,cACrD5sN,EAAK5H,YAAYzC,GACjBpK,KAAK0qO,kBAAkBtgO,EAAa9J,EAAU6hO,IAQhD,YAAAgK,2BAAA,SAA2B13N,EAAMnU,EAAU6hO,GACzC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC3B83J,EAAU93J,EAAiB,QAC7B/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMsuN,EAAWv9N,EAASy+N,cAC1BoF,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,EAAS66N,QAASA,GACpDpqO,KAAKosO,mCACLpsO,KAAKkrO,mCACLrN,EACAsE,OACA/9N,EACApE,OASJ,YAAAqsO,4BAAA,SAA4B53N,EAAMpE,EAAS8xN,GACzC,IAAMl+M,EAAQjkB,KAAKkqO,uBAAuB75N,EAAS8xN,GAC/Cl+M,IACFxP,EAAK5H,YAAYoX,GACjBjkB,KAAKqrO,sBAAsBpnN,EAAO5T,EAAS8xN,KAS/C,YAAAmK,cAAA,SAAc73N,EAAM6G,EAAQ6mN,GAC1B,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC7BkM,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IACM4e,EAAS,CAAC7S,EAAO,GAAK,IAAMA,EAAO,GAAIA,EAAO,GAAK,IAAMA,EAAO,IACtE6oN,GAEE,CAAE1vN,KAAMA,GACRzU,KAAKusO,qBACLlJ,GACAl1M,EACAg0M,EARW,CAAC,cAAe,eAU3BniO,OAYJ,YAAAkrO,mCAAA,SAAmCroO,EAAOs/N,EAAae,GACrD,IAAM1hL,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACvD,OAAO,GACL,6BACAg1N,GAAiCjoL,EAAWt7B,YAGlD,EA3lBA,CAAmB,IAimBnBo0B,GAAK95C,UAAU8mO,kCAAoC,CACjD,6BAA8B,CAC5B,YAAejF,GAAa/nL,GAAK95C,UAAUkpO,uBAQ/CpvL,GAAK95C,UAAUknO,0BAA4B,CACzC,6BAA8B,CAC5B,gBAAmBptL,GAAK95C,UAAUupO,sBAClC,gBAAmBzvL,GAAK95C,UAAUypO,wBAQtC3vL,GAAK95C,UAAUspO,aAAe,CAC5B,6BAA8B,CAC5B,YAAe1H,GAAgB9nL,GAAK95C,UAAUkpO,uBAQlDpvL,GAAK95C,UAAUulO,iBAAmB,CAChC,6BAA8B,CAC5B,MAAS1D,GAAa,wBACtB,WAAcA,GAAa,6BAC3B,WAAcA,GAAa,6BAC3B,gBAAmBA,GAAa,kCAChC,WAAcA,GAAa,6BAC3B,QAAWA,GAAa,0BACxB,aAAgBA,GAAa,+BAC7B,IAAOA,GAAa/nL,GAAK95C,UAAUqpO,WAQvCvvL,GAAK95C,UAAU2qO,qBAAuB,CACpC,6BAA8B,CAC5B,MAASzI,GAAkBpoL,GAAK95C,UAAUgqO,wBAC1C,WAAc9H,GAAkBpoL,GAAK95C,UAAUsqO,6BAC/C,MAASpI,GAAkBpoL,GAAK95C,UAAUurO,YAC1C,WAAcrJ,GAAkBpoL,GAAK95C,UAAUwrO,iBAC/C,WAActJ,GAAkBpoL,GAAK95C,UAAUgqO,wBAC/C,gBAAmB9H,GACjBpoL,GAAK95C,UAAUsqO,6BAEjB,WAAcpI,GAAkBpoL,GAAK95C,UAAUqrO,iBAC/C,QAAWnJ,GAAkBpoL,GAAK95C,UAAU6qO,uBAC5C,aAAgB3I,GACdpoL,GAAK95C,UAAU2rO,4BAEjB,QAAWzJ,GAAkBpoL,GAAK95C,UAAU6qO,uBAC5C,aAAgB3I,GACdpoL,GAAK95C,UAAU2rO,4BAEjB,SAAYzJ,GAAkBpoL,GAAK95C,UAAU8rO,iBAOjDhyL,GAAK95C,UAAUyqO,oCAAsC,CACnD,6BAA8B,CAC5B,iBAAoBvI,GAClBpoL,GAAK95C,UAAUqqO,8BAEjB,YAAenI,GACbpoL,GAAK95C,UAAUqqO,gCAQrBvwL,GAAK95C,UAAU+qO,iBAAmB,CAChC,6BAA8B,CAC5B,gBAAmB7I,GAAkBpoL,GAAK95C,UAAUorO,WACpD,gBAAmBlJ,GAAkBpoL,GAAK95C,UAAUorO,aAOxDtxL,GAAK95C,UAAUyrO,wBAA0B,CACvC,6BAA8B,CAC5B,YAAevJ,GAAkBpoL,GAAK95C,UAAU0rO,oBAQpD5xL,GAAK95C,UAAU4rO,mCAAqC,CAClD,6BAA8B,CAC5B,cAAiB1J,GACfpoL,GAAK95C,UAAU6rO,6BAEjB,cAAiB3J,GACfpoL,GAAK95C,UAAU6rO,+BAQrB/xL,GAAK95C,UAAU+rO,qBAAuB,CACpC,6BAA8B,CAC5B,YAAe7J,GAAkBwG,IACjC,YAAexG,GAAkBwG,MAIrC,Y,+dCnuBM,GAAmC,CACvC,gBAAmB,mBACnB,WAAc,cACd,aAAgB,gBAChB,aAAgB,iBAWlB,eAIE,WAAYxtC,GAAZ,WACQ/7L,EAEH+7L,GAA4B,G,SAE/B,YAAM/7L,IAAQ,MAMT6sO,cAA+BpoO,IAApBzE,EAAQyqO,SAAwBzqO,EAAQyqO,QAMxD,EAAKqC,YAA2BroO,IAAlBzE,EAAQqrO,OAAsBrrO,EAAQqrO,MAMpD,EAAK0B,iBACoBtoO,IAAvBzE,EAAQ0qO,YAA2B1qO,EAAQ0qO,WAM7C,EAAKsC,mBACsBvoO,IAAzBzE,EAAQwqO,cAA6BxqO,EAAQwqO,aAK/C,EAAK3E,eAAiB7lO,EAAQ6lO,eAC1B7lO,EAAQ6lO,eAhEdF,wGAuEE,EAAKyF,UAAwB3mO,IAAjBzE,EAAQorO,MAAqBprO,EAAQorO,K,EAm6BrD,OAn9BmB,QAwDjB,YAAA6B,eAAA,SAAen4N,EAAM0tN,GAEnB,IAAMrF,EAAcmH,GAClB,GACAjkO,KAAK6sO,mBACLp4N,EACA0tN,EACAniO,MAEF,OAAI88N,EACsB,IAAI,GAAgBA,QAG5C,GASJ,YAAAgQ,kBAAA,SAAkBr4N,EAAM0tN,GAUtB,IARA,IAAMrF,EAAcmH,GAClB,GACAjkO,KAAK6sO,mBACLp4N,EACA0tN,EACAniO,MAEIuoL,EAAkB,GACfrmL,EAAI,EAAGgiB,EAAK44M,EAAYz5N,OAAQnB,EAAIgiB,IAAMhiB,EACjD,EAAOqmL,EAAiBu0C,EAAY56N,GAAG8gD,sBAEzC,OAAOulI,GAQT,YAAAwkD,iBAAA,SAAiBt4N,EAAM0tN,GAErB,IAAMtE,EAAWoG,GACf,GACAjkO,KAAKgtO,qBACLv4N,EACA0tN,EACAniO,MAEF,GAAI69N,EACF,OAAO,IAAI,GAAaA,IAQ5B,YAAAoP,kBAAA,SAAkBx4N,EAAM0tN,GACtB2B,GAAU9jO,KAAKktO,oBAAqBz4N,EAAM0tN,EAAaniO,OAOzD,YAAAmtO,oBAAA,SAAoB14N,EAAM0tN,GACxB2B,GAAU9jO,KAAKotO,sBAAuB34N,EAAM0tN,EAAaniO,OAQ3D,YAAAqtO,UAAA,SAAU54N,EAAM0tN,GACd,OAAO8B,GACL,CAAC,MACDjkO,KAAKstO,gBACL74N,EACA0tN,EACAniO,OASJ,YAAAutO,YAAA,SAAY94N,EAAM0tN,GAChB,OAAO8B,GAAgB,GAAIjkO,KAAKwtO,iBAAkB/4N,EAAM0tN,EAAaniO,OAQvE,YAAAytO,iBAAA,SAAiBh5N,EAAM0tN,GACrB,OAAO8B,GACL,CAAC,MACDjkO,KAAK0nO,0BACLjzN,EACA0tN,EACAniO,OASJ,YAAA0tO,sBAAA,SAAsBj5N,EAAM0tN,GAC1B,OAAO8B,GACL,CAAC,MACDjkO,KAAKsnO,kCACL7yN,EACA0tN,EACAniO,OAQJ,YAAA2tO,eAAA,SAAel5N,EAAM0tN,GAEnB,IAAM6H,EAAiB/F,QACrB7/N,EACApE,KAAK4nO,aACLnzN,EACA0tN,EACAniO,MAEEgqO,GAGC7H,EAAYA,EAAY9+N,OAAS,GACpB+E,KAAK4hO,IAQzB,YAAA4D,eAAA,SAAen5N,EAAM0tN,GAEnB,IAAM6H,EAAiB/F,QACrB7/N,EACApE,KAAK4nO,aACLnzN,EACA0tN,EACAniO,MAEEgqO,IAGC7H,EAAYA,EAAY9+N,OAAS,GACpB,GAAK2mO,IASzB,YAAA6D,YAAA,SAAYp5N,EAAM0tN,GAEhB,IAAMsF,EAAkBxD,GACtB,CAAC,MACDjkO,KAAK8tO,gBACLr5N,EACA0tN,EACAniO,MAEF,GAAIynO,GAAmBA,EAAgB,GAAI,CACzC,IAEOvjN,EAFDqkK,EAAkBk/C,EAAgB,GAClC70D,EAAO,CAAC2V,EAAgBllL,QAC1BnB,OAAC,EACL,IAAKA,EAAI,EAAGgiB,EAAKujN,EAAgBpkO,OAAQnB,EAAIgiB,IAAMhiB,EACjD,EAAOqmL,EAAiBk/C,EAAgBvlO,IACxC0wK,EAAKxqK,KAAKmgL,EAAgBllL,QAE5B,OAAO,IAAI,GAAQklL,EAAiB,OAAoB3V,KAW5D,YAAAm7D,UAAA,SAAUt5N,EAAM0tN,GAEd,IAAM55C,EAAkB07C,GACtB,CAAC,MACDjkO,KAAKguO,cACLv5N,EACA0tN,EACAniO,MAEF,OAAIuoL,EACiB,IAAI,GAAWA,EAAiB,aAGnD,GASJ,YAAA0lD,aAAA,SAAax5N,EAAM0tN,GAEjB,IAAM55C,EAAkB07C,GACtB,CAAC,MACDjkO,KAAKkuO,iBACLz5N,EACA0tN,EACAniO,MAEF,OAAOmoL,GACLI,EAAgB,GAAG,GACnBA,EAAgB,GAAG,GACnBA,EAAgB,GAAG,GACnBA,EAAgB,GAAG,KASvB,YAAA4lD,YAAA,SAAY15N,EAAM0tN,GAMhB,IALA,IAIIh9K,EAJAzd,EAAI85L,GAAkB/sN,GAAM,GAC1B4U,EAAK,6CAELk/J,EAAkB,GAEhBpjI,EAAI97B,EAAGnX,KAAKw1B,IAClB6gJ,EAAgBngL,KAAKR,WAAWu9C,EAAE,KAClCzd,EAAIA,EAAE9gB,OAAOu+B,EAAE,GAAG9hD,QAEpB,GAAU,KAANqkC,EAAJ,CAGA,IACMiiM,EADUxH,EAAY,GACU,QAClC/9B,EAAkB,MACtB,GAAIulC,EAEFvlC,EADa,GAAculC,GACJlmD,qBAEzB,GAAwB,QAApB2gB,EAA2B,CAC7B,IAAOlgL,EAAHhiB,OAAC,EACL,IAAKA,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EAAG,CACvD,IAAM0rB,EAAI26J,EAAgBrmL,GACpByrB,EAAI46J,EAAgBrmL,EAAI,GAC9BqmL,EAAgBrmL,GAAKyrB,EACrB46J,EAAgBrmL,EAAI,GAAK0rB,GAG7B,IAAM3iB,EAAMs9K,EAAgBllL,OAI5B,GAHW,GAAP4H,GACFs9K,EAAgBngL,KAAK,GAEX,IAAR6C,EAGJ,OAAOs9K,IAQT,YAAA6lD,gBAAA,SAAgB35N,EAAM0tN,GACpB,IAAMz6L,EAAI85L,GAAkB/sN,GAAM,GAAOlL,QAAQ,aAAc,IACzD+oE,EAAU6vJ,EAAY,GACtBwH,EAAer3J,EAAiB,QAChC+7J,EAAmB/7J,EAAsB,aAC3C8xH,EAAkB,MAClBulC,IAEFvlC,EADa,GAAculC,GACJlmD,sBAEzB,IAgBI91J,EAAGC,EAAGF,EAhBJhuB,EAASgoC,EAAEv1B,MAAM,OAEnBm8N,EAAM,EACN75N,EAAKmpB,aAAa,gBACpB0wM,EAAMxF,GAA6Br0N,EAAKmpB,aAAa,iBAC5CnpB,EAAKmpB,aAAa,aAC3B0wM,EAAMxF,GAA6Br0N,EAAKmpB,aAAa,cAE7BnpB,EAAe,WAAEmpB,aAAa,gBAEtD0wM,EAAMxF,GACoBr0N,EAAe,WAAEmpB,aAAa,iBAE/CywM,IACTC,EAAMxF,GAA6BuF,IAIrC,IADA,IAAM9lD,EAAkB,GACfrmL,EAAI,EAAGgiB,EAAKxkB,EAAO2D,OAAQnB,EAAIgiB,EAAIhiB,GAAKosO,EAC/C3gN,EAAI/lB,WAAWlI,EAAOwC,IACtB0rB,EAAIhmB,WAAWlI,EAAOwC,EAAI,IAC1BwrB,EAAY,IAAR4gN,EAAY1mO,WAAWlI,EAAOwC,EAAI,IAAM,EACP,OAAjCkiM,EAAgBx9K,OAAO,EAAG,GAC5B2hK,EAAgBngL,KAAKulB,EAAGC,EAAGF,GAE3B66J,EAAgBngL,KAAKwlB,EAAGD,EAAGD,GAG/B,OAAO66J,GAST,YAAAgmD,UAAA,SAAU95N,EAAM5R,EAAOs/N,GACrB,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB41J,EAAe6C,EAAO,IAAM,IAClCt2N,EAAK2Y,aAAa,eAAgB86M,GAClC,IAAM34N,EAAU+iE,EAAiB,QAC7B8xH,EAAkB,MAClB70L,IACF60L,EAAkB,GAAc70L,GAASk0K,sBAE3C,IACI/jL,EADE21B,EAAQxyB,EAAMvB,kBAIlB5B,EADmC,OAAjC0kM,EAAgBx9K,OAAO,EAAG,GACnByO,EAAM,GAAK,IAAMA,EAAM,GAEvBA,EAAM,GAAK,IAAMA,EAAM,GAE9B01M,KAGFrrO,GAAU,KADA21B,EAAM,IAAM,IAGxB6zM,GAAoBz0N,EAAM/U,IAU5B,YAAA0rO,WAAA,SAAW/1M,EAAOkuJ,EAAauoD,GAC7B,IAAI1nC,EAAkB,MAClB7gB,IACF6gB,EAAkB,GAAc7gB,GAAaE,sBAE/C,IAAI/jL,EAC+B,OAAjC0kM,EAAgBx9K,OAAO,EAAG,GACtByO,EAAM,GAAK,IAAMA,EAAM,GACvBA,EAAM,GAAK,IAAMA,EAAM,GACzBy2M,IAGFpsO,GAAU,KADA21B,EAAM,IAAM,IAIxB,OAAO31B,GAST,YAAA8uO,cAAA,SAAc/5N,EAAM5R,EAAOs/N,GACzB,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB41J,EAAe6C,EAAO,IAAM,IAClCt2N,EAAK2Y,aAAa,eAAgB86M,GAOlC,IANA,IAKI7yM,EALE9lB,EAAU+iE,EAAiB,QAE3BxwE,EAASe,EAAMvB,iBACf2J,EAAMnJ,EAAOuB,OACbyqB,EAAQ,IAAIhtB,MAAMmK,GAEf/I,EAAI,EAAGA,EAAI+I,IAAO/I,EACzBmzB,EAAQvzB,EAAOI,GACf4rB,EAAM5rB,GAAKlC,KAAKorO,WAAW/1M,EAAO9lB,EAASw7N,GAE7C7B,GAAoBz0N,EAAMqZ,EAAMxjB,KAAK,OAQvC,YAAAyhO,WAAA,SAAWt3N,EAAMnU,EAAU6hO,GACzB,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC7BkM,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAM+0C,EAAM,GAAgB7vC,EAAK4sN,aAAc,OAC/C5sN,EAAK5H,YAAYy3C,GACjBtkD,KAAKuuO,UAAUjqL,EAAKhkD,EAAU6hO,IAQhC,YAAAmK,cAAA,SAAc73N,EAAM6G,EAAQ6mN,GAC1B,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC7BkM,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IACM4e,EAAS,CAAC7S,EAAO,GAAK,IAAMA,EAAO,GAAIA,EAAO,GAAK,IAAMA,EAAO,IACtE6oN,GAEE,CAAE1vN,KAAMA,GACRzU,KAAKusO,qBACLlJ,GACAl1M,EACAg0M,EARW,CAAC,cAAe,eAU3BniO,OASJ,YAAA6rO,gBAAA,SAAgBp3N,EAAMnU,EAAU6hO,GAC9B,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC7BkM,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMk/N,EAAU,GAAgBh6N,EAAK4sN,aAAc,WACnD5sN,EAAK5H,YAAY4hO,GACjBzuO,KAAKwuO,cAAcC,EAASnuO,EAAU6hO,IAUxC,YAAAqJ,mBAAA,SAAmB3oO,EAAOs/N,EAAae,GACrC,IAAM5wJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3Cm+C,EAAa8wB,EAAQ79D,KACrBk3N,EAAkBr5J,EAAyB,gBAIjD,YAHwBluE,IAApBunO,IACFr5J,EAAyB,iBAAI,GAExB,GACL9wB,EAAW6/K,kBACSj9N,IAApBunO,EAAgC,WAAa,aASjD,YAAAN,sBAAA,SAAsB52N,EAAMnU,EAAU6hO,GACpC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAIjC,GAHsB,iBAAlB79D,EAAKyR,UAA+B3W,GACtCkF,EAAK2Y,aAAa,UAAW7d,GAET,YAAlBkF,EAAKyR,UAA4C,iBAAlBzR,EAAKyR,SAA6B,CACnE,IAAMolN,EAAQhrO,EAASqzM,iBACvBwwB,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,GAClCvP,KAAKurO,iBACLvrO,KAAKwrO,mBACLF,EACAnJ,OACA/9N,EACApE,WAEG,GAAsB,YAAlByU,EAAKyR,SAAwB,CACtC,IAAMulN,EAAU,GAAgBh3N,EAAK4sN,aAAc,WACnD5sN,EAAK5H,YAAY4+N,GACjBzrO,KAAK0rO,qBAAqBD,EAASnrO,EAAU6hO,KASjD,YAAAqI,uBAAA,SAAuB/1N,EAAMnU,EAAU6hO,GACrC,IACM5yN,EADU4yN,EAAYA,EAAY9+N,OAAS,GAChB,QAIjC,GAHsB,sBAAlBoR,EAAKyR,UAAoC3W,GAC3CkF,EAAK2Y,aAAa,UAAW7d,GAGX,eAAlBkF,EAAKyR,UACa,sBAAlBzR,EAAKyR,SACL,CACA,IAAMuoN,EAAU,GAAgBh6N,EAAK4sN,aAAc,WACnD5sN,EAAK5H,YAAY4hO,GACjBzuO,KAAKwuO,cAAcC,EAASnuO,EAAU6hO,QACjC,GAAsB,UAAlB1tN,EAAKyR,SAAsB,CACpC,IAAMykN,EAAW,GAAgBl2N,EAAK4sN,aAAc,YACpD5sN,EAAK5H,YAAY89N,GACjB3qO,KAAK4qO,oBAAoBD,EAAUrqO,EAAU6hO,KASjD,YAAAgK,2BAAA,SAA2B13N,EAAMnU,EAAU6hO,GACzC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC3B83J,EAAU93J,EAAiB,QAC7B/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMsuN,EAAWv9N,EAASy+N,cAC1BoF,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,EAAS66N,QAASA,GACpDpqO,KAAKosO,mCACLpsO,KAAKkrO,mCACLrN,EACAsE,OACA/9N,EACApE,OASJ,YAAAgsO,gBAAA,SAAgBv3N,EAAMnU,EAAU6hO,GAC9B,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3CkM,EAAU+iE,EAAiB,QAC3By4J,EAAOz4J,EAAc,KACvB/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMzN,EAASxB,EAAS2jJ,YACxBkgF,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,GAClCvP,KAAKisO,wBACLjJ,GAAsB,eACtBlhO,EACAqgO,OACA/9N,EACApE,OASJ,YAAA8qO,4BAAA,SAA4Br2N,EAAMnU,EAAU6hO,GAC1C,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C0nO,EAAOz4J,EAAc,KACrB/iE,EAAU+iE,EAAiB,QAC3B04J,EAAQ14J,EAAe,MACzB/iE,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE/B,IAAMwpF,EAAQz4F,EAAS+8N,iBACvB8G,GACE,CAAC1vN,KAAMA,EAAMs2N,KAAMA,EAAMx7N,QAASA,EAASy7N,MAAOA,GAClDhrO,KAAKirO,oCACLjrO,KAAKkrO,mCACLnyI,EACAopI,OACA/9N,EACApE,OASJ,YAAA4rO,UAAA,SAAUn3N,EAAMnE,EAAM6xN,GACpB,IAAM1xB,EAAa,GAAgBh8L,EAAK4sN,aAAc,cACtD5sN,EAAK5H,YAAY4jM,GACjBzwM,KAAK6rO,gBAAgBp7B,EAAYngM,EAAM6xN,IAQzC,YAAAkK,4BAAA,SAA4B53N,EAAMpE,EAAS8xN,GACzC,IAAMl+M,EAAQjkB,KAAKkqO,uBAAuB75N,EAAS8xN,GAC/Cl+M,IACFxP,EAAK5H,YAAYoX,GACjBjkB,KAAKqrO,sBAAsBpnN,EAAO5T,EAAS8xN,KAS/C,YAAA+J,iBAAA,SAAiBz3N,EAAM4gB,EAAO8sM,GAC5B,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,SACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAK+rO,WAAW9nN,EAAOoR,EAAO8sM,IAQhC,YAAA0I,6BAAA,SAA6Bp2N,EAAM8gB,EAAM4sM,GACvC,IAAMl+M,EAAQjkB,KAAKkqO,uBAAuB30M,EAAM4sM,GAC5Cl+M,IACFxP,EAAK5H,YAAYoX,GACjBjkB,KAAKwqO,uBAAuBvmN,EAAOsR,EAAM4sM,KAU7C,YAAAuJ,qBAAA,SAAqBj3N,EAAMpE,EAAS8xN,GAClC,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,gBACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAKqrO,sBAAsBpnN,EAAO5T,EAAS8xN,IAS7C,YAAAyI,oBAAA,SAAoBn2N,EAAM8gB,EAAM4sM,GAC9B,IAAMl+M,EAAQ,GAAgBxP,EAAK4sN,aAAc,qBACjD5sN,EAAK5H,YAAYoX,GACjBjkB,KAAKwqO,uBAAuBvmN,EAAOsR,EAAM4sM,IAQ3C,YAAAoI,qBAAA,SAAqB91N,EAAMnU,EAAU6hO,GACnC,IAKIt/N,EALEyvE,EACJ6vJ,EAAYA,EAAY9+N,OAAS,GAE7B2G,EAAO,GAAO,GAAIsoE,GACxBtoE,EAAW,KAAIyK,EAGb5R,EADE/B,MAAMC,QAAQT,GACR6gO,GACuC,EAC7C7uJ,GAGM,GAC+C,GACrD,EACAA,GAGJ6xJ,GAEE,EACAnkO,KAAKmrO,qBACLnrO,KAAKkqO,uBACL,CAACrnO,GACDs/N,OACA/9N,EACApE,OASJ,YAAAsqO,oBAAA,SAAoB71N,EAAMhR,EAAS0+N,GACjC,IAAMj2D,EAAMzoK,EAAQE,QAChBuoK,GACFz3J,EAAK2Y,aAAa,MAA6B,GAEjD,IAAMklD,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAClEqsJ,EAAYp9E,EAAmB,UAC/B7T,EAAeh7D,EAAQm3N,kBACxBtoJ,EAAQywJ,cACXzwJ,EAAQywJ,YAAc,GACtBzwJ,EAAQywJ,YAAYrzE,GAAa,IAEnC,IAAMxwJ,EAAO,GACPivB,EAAS,GACf,GAAI1qB,EAAQksL,gBAAiB,CAC3B,IAAMp7J,EAAa9wB,EAAQisL,gBAC3B,IAAK,IAAMjnL,KAAO8rB,EAAY,CAC5B,IAAM1xB,EAAQ0xB,EAAW9rB,GACX,OAAV5F,IACF3D,EAAKkJ,KAAKK,GACV0lB,EAAO/lB,KAAKvF,GAEV4F,GAAOg2D,GAEL,mBADuB,EAA6B,sBAGhDh2D,KAAO6pE,EAAQywJ,YAAYrzE,KAC/Bp9E,EAAQywJ,YAAYrzE,GAAWjnJ,GAAOi6N,GACpC1iO,KAAKuqO,qBACLvqO,OAIEyI,KAAO6pE,EAAQywJ,YAAYrzE,KAC/Bp9E,EAAQywJ,YAAYrzE,GAAWjnJ,GAC7Bi6N,GAAkBwG,OAM9B,IAAMl/N,EAAO,GAAO,GAAIsoE,GACxBtoE,EAAKyK,KAAOA,EACZ0vN,GAEE,EACA7xJ,EAAQywJ,YACRC,QAAsB5+N,EAAWsrJ,GACjCvhI,EACAg0M,EACAjjO,IAUJ,YAAAwvO,qBAAA,SAAqBj6N,EAAM3F,EAAUqzN,GACnC,IAAM7vJ,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAClEsuB,EAAc2gD,EAAqB,YACnCo9E,EAAYp9E,EAAmB,UAE/BywJ,EAAc,GACpBA,EAAYrzE,GAAa,GACzBqzE,EAAYrzE,GAAW/9H,GAAe+wM,GACpC1iO,KAAKsqO,oBACLtqO,MAEF,IAAMgK,EAAO,GAAO,GAAIsoE,GACxBtoE,EAAKyK,KAAOA,EACZ0vN,GAEE,EACApB,EACAC,GAAsBrxM,EAAa+9H,GACnC5gJ,EACAqzN,IAYJ,YAAA+I,mCAAA,SAAmCroO,EAAOs/N,EAAae,GACrD,IAAM1hL,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACvD,OAAO,GACLzU,KAAK0lO,UACL,GAAiClkL,EAAWt7B,YAYhD,YAAAgkN,uBAAA,SAAuBrnO,EAAOs/N,EAAae,GACzC,IAKIh9M,EALEosD,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3C8mO,EAAe73J,EAAsB,aACrC83J,EAAU93J,EAAiB,QAC3B04J,EAAQ14J,EAAe,MACvB+3J,EAAa/3J,EAAoB,WAkBvC,OAhBKxxE,MAAMC,QAAQ8B,GAcjBqjB,EAAW,WAVM,kBAHjBA,EAAgE,EAE9Djc,aACkD,IAAjBkgO,EACjCjkN,EAAW,eACW,YAAbA,IAAsC,IAAZkkN,EACnClkN,EAAW,UACW,eAAbA,IAAuC,IAAV8kN,EACtC9kN,EAAW,QACW,oBAAbA,IAAiD,IAAfmkN,IAC3CnkN,EAAW,cAKR,GAAgBlmB,KAAK0lO,UAAWx/M,IAWzC,YAAAm/M,kBAAA,SAAkB/kO,EAAUo7L,GAC1BA,EAAc17L,KAAKghO,aAAatlC,GAChC,IAAMn7L,EAAO,GAAgBP,KAAK0lO,UAAW,QACvCpzJ,EAAU,CACd79D,KAAMlU,EACNwqO,KAAM/qO,KAAK+qO,KACXx7N,QAASvP,KAAKuP,QACdy7N,MAAOhrO,KAAKysO,OACZrC,QAASpqO,KAAKwsO,SACdrC,aAAcnqO,KAAK2sO,cACnBtC,WAAYrqO,KAAK0sO,aAMnB,OAJIhxC,GACF,GAAOppH,EAASopH,GAElB17L,KAAKuqO,qBAAqBhqO,EAAMD,EAAU,CAACgyE,IACpC/xE,GAWT,YAAA6kO,kBAAA,SAAkBt2N,EAAU4sL,GAC1BA,EAAc17L,KAAKghO,aAAatlC,GAChC,IAAMjnL,EAAO,GAAgBzU,KAAK0lO,UAAW,kBAC7CjxN,EAAK20I,eACHg4E,GACA,qBACAphO,KAAKwlO,gBAEP,IAAMlzJ,EAAU,CACd/iE,QAASvP,KAAKuP,QACdw7N,KAAM/qO,KAAK+qO,KACXC,MAAOhrO,KAAKysO,OACZrC,QAASpqO,KAAKwsO,SACdrC,aAAcnqO,KAAK2sO,cACnBtC,WAAYrqO,KAAK0sO,YACjBh9E,UAAW1vJ,KAAK0vJ,UAChB/9H,YAAa3xB,KAAK2xB,aAMpB,OAJI+pK,GACF,GAAOppH,EAASopH,GAElB17L,KAAK0uO,qBAAqBj6N,EAAM3F,EAAU,CAACwjE,IACpC79D,GAEX,EAn9BA,CAAmB,IAy9BnB8lC,GAAK/5C,UAAU8mO,kCAAoC,CACjD,6BAA8B,CAC5B,IAAOjF,GAAa9nL,GAAK/5C,UAAU2tO,aACnC,QAAW9L,GAAa9nL,GAAK/5C,UAAU4tO,iBACvC,YAAe/L,GAAa,oCAQhC9nL,GAAK/5C,UAAUknO,0BAA4B,CACzC,6BAA8B,CAC5B,SAAYntL,GAAK/5C,UAAUmtO,eAC3B,SAAYpzL,GAAK/5C,UAAUotO,iBAQ/BrzL,GAAK/5C,UAAUulO,iBAAmB,CAChC,6BAA8B,CAC5B,MAAS1D,GAAa,wBACtB,WAAcA,GAAa,6BAC3B,WAAcA,GAAa,6BAC3B,gBAAmBA,GAAa,kCAChC,WAAcA,GAAa,6BAC3B,QAAWA,GAAa,0BACxB,aAAgBA,GAAa,+BAC7B,QAAWA,GAAa9nL,GAAK/5C,UAAUqtO,aACvC,aAAgBxL,GAAa9nL,GAAK/5C,UAAUusO,kBAC5C,MAAS1K,GAAa9nL,GAAK/5C,UAAUutO,WACrC,WAAc1L,GAAa9nL,GAAK/5C,UAAUosO,gBAC1C,SAAYvK,GAAa9nL,GAAK/5C,UAAUytO,gBAQ5C1zL,GAAK/5C,UAAUqsO,mBAAqB,CAClC,6BAA8B,CAC5B,YAAezK,GAAgB7nL,GAAK/5C,UAAUysO,mBAC9C,aAAgB7K,GAAgB7nL,GAAK/5C,UAAUysO,qBAQnD1yL,GAAK/5C,UAAUwsO,qBAAuB,CACpC,6BAA8B,CAC5B,cAAiB5K,GAAgB7nL,GAAK/5C,UAAU2sO,qBAChD,eAAkB/K,GAAgB7nL,GAAK/5C,UAAU2sO,uBAQrD5yL,GAAK/5C,UAAU0sO,oBAAsB,CACnC,6BAA8B,CAC5B,WAAc9K,GAAgB,6BAC9B,MAASA,GAAgB7nL,GAAK/5C,UAAUutO,aAQ5CxzL,GAAK/5C,UAAU4sO,sBAAwB,CACrC,6BAA8B,CAC5B,QAAWhL,GAAgB,0BAC3B,QAAWA,GAAgB7nL,GAAK/5C,UAAUqtO,eAQ9CtzL,GAAK/5C,UAAUstO,gBAAkB,CAC/B,6BAA8B,CAC5B,QAAWzL,GAAa9nL,GAAK/5C,UAAU6sO,aAQ3C9yL,GAAK/5C,UAAUwtO,cAAgB,CAC7B,6BAA8B,CAC5B,SAAY3L,GAAa9nL,GAAK/5C,UAAU+sO,eAQ5ChzL,GAAK/5C,UAAU0tO,iBAAmB,CAChC,6BAA8B,CAC5B,YAAe9L,GAAgB7nL,GAAK/5C,UAAU4tO,iBAC9C,YAAehM,GAAgB7nL,GAAK/5C,UAAU4tO,mBAQlD7zL,GAAK/5C,UAAU8sO,gBAAkB,CAC/B,6BAA8B,CAC5B,aAAgBjL,GAAa9nL,GAAK/5C,UAAUitO,oBAQhDlzL,GAAK/5C,UAAUgtO,iBAAmB,CAChC,6BAA8B,CAC5B,kBAAqBvL,GACnB1nL,GAAK/5C,UAAUktO,yBASrB,0BAAiC,CAC/B,6BAA8B,CAC5B,WAAcrL,GAAa,iCAC3B,KAAQA,GAAa9nL,GAAK/5C,UAAUssO,qBAaxCvyL,GAAK/5C,UAAUotH,cAKfrzE,GAAK/5C,UAAU+qO,iBAAmB,CAChC,6BAA8B,CAC5B,SAAY7I,GAAkBnoL,GAAK/5C,UAAUorO,WAC7C,SAAYlJ,GAAkBnoL,GAAK/5C,UAAUorO,aAOjDrxL,GAAK/5C,UAAU+rO,qBAAuB,CACpC,6BAA8B,CAC5B,YAAe7J,GAAkBwG,IACjC,YAAexG,GAAkBwG,MAOrC3uL,GAAK/5C,UAAU4rO,mCAAqC,CAClD,6BAA8B,CAC5B,cAAiB1J,GACfnoL,GAAK/5C,UAAU6rO,6BAEjB,cAAiB3J,GACfnoL,GAAK/5C,UAAU6rO,+BAQrB9xL,GAAK/5C,UAAUyrO,wBAA0B,CACvC,6BAA8B,CAC5B,YAAevJ,GAAkBnoL,GAAK/5C,UAAU0rO,oBAOpD3xL,GAAK/5C,UAAUyqO,oCAAsC,CACnD,6BAA8B,CAC5B,iBAAoBvI,GAClBnoL,GAAK/5C,UAAUqqO,8BAEjB,YAAenI,GACbnoL,GAAK/5C,UAAUqqO,gCAQrBtwL,GAAK/5C,UAAU2qO,qBAAuB,CACpC,6BAA8B,CAC5B,MAASzI,GAAkBnoL,GAAK/5C,UAAUgqO,wBAC1C,WAAc9H,GAAkBnoL,GAAK/5C,UAAUsqO,6BAC/C,MAASpI,GAAkBnoL,GAAK/5C,UAAUurO,YAC1C,WAAcrJ,GAAkBnoL,GAAK/5C,UAAUwrO,iBAC/C,WAActJ,GAAkBnoL,GAAK/5C,UAAUgqO,wBAC/C,gBAAmB9H,GACjBnoL,GAAK/5C,UAAUsqO,6BAEjB,WAAcpI,GAAkBnoL,GAAK/5C,UAAUqrO,iBAC/C,QAAWnJ,GAAkBnoL,GAAK/5C,UAAU6qO,uBAC5C,aAAgB3I,GACdnoL,GAAK/5C,UAAU2rO,4BAEjB,QAAWzJ,GAAkBnoL,GAAK/5C,UAAU6qO,uBAC5C,aAAgB3I,GACdnoL,GAAK/5C,UAAU2rO,4BAEjB,SAAYzJ,GAAkBnoL,GAAK/5C,UAAU8rO,iBAIjD,YC3vCA,IAAM/0L,GAAM,GAWZA,GAAI/2C,UAAUotH,cAWdr2E,GAAI/2C,UAAU4kO,kBAEd,Y,+dCpBA,eAIE,WAAY1pC,GAAZ,WACQ/7L,EACJ+7L,GAA4B,G,SAG9B,YAAM/7L,IAAQ,MAKT6lO,eAAiB7lO,EAAQ6lO,eAC1B7lO,EAAQ6lO,eACR,EAAKE,UAAY,gD,EAEzB,OAlBoB,QAkBpB,EAlBA,CAAoB,IAoBpBlrL,GAAMh6C,UAAUklO,UAAY,iCAM5BlrL,GAAMh6C,UAAU8mO,kCAAoC,CAClD,iCAAkC,CAChC,IAAOjF,GAAa,0BACpB,QAAWA,GAAa,8BACxB,YAAeA,GAAa,oCAQhC7nL,GAAMh6C,UAAUknO,0BAA4B,CAC1C,iCAAkC,CAChC,SAAY,4BACZ,SAAY,8BAQhBltL,GAAMh6C,UAAUulO,iBAAmB,CACjC,iCAAkC,CAChC,MAAS1D,GAAa,wBACtB,WAAcA,GAAa,6BAC3B,WAAcA,GAAa,6BAC3B,gBAAmBA,GAAa,kCAChC,WAAcA,GAAa,6BAC3B,QAAWA,GAAa,0BACxB,aAAgBA,GAAa,+BAC7B,QAAWA,GAAa7nL,GAAMh6C,UAAUqtO,aACxC,aAAgBxL,GAAa,+BAC7B,MAASA,GAAa7nL,GAAMh6C,UAAUutO,WACtC,WAAc1L,GAAa,6BAC3B,SAAYA,GAAa7nL,GAAMh6C,UAAUytO,gBAQ7CzzL,GAAMh6C,UAAUqsO,mBAAqB,CACnC,iCAAkC,CAChC,YAAezK,GAAgB,gCAC/B,aAAgBA,GAAgB,kCAQpC5nL,GAAMh6C,UAAUwsO,qBAAuB,CACrC,iCAAkC,CAChC,cAAiB5K,GAAgB,kCACjC,eAAkBA,GAAgB,oCAQtC5nL,GAAMh6C,UAAU0sO,oBAAsB,CACpC,iCAAkC,CAChC,WAAc9K,GAAgB,6BAC9B,MAASA,GAAgB,0BAQ7B5nL,GAAMh6C,UAAU4sO,sBAAwB,CACtC,iCAAkC,CAChC,QAAWhL,GAAgB,0BAC3B,QAAWA,GAAgB,4BAQ/B5nL,GAAMh6C,UAAUstO,gBAAkB,CAChC,iCAAkC,CAChC,QAAWzL,GAAa,0BAQ5B7nL,GAAMh6C,UAAUwtO,cAAgB,CAC9B,iCAAkC,CAChC,SAAY3L,GAAa,4BAQ7B7nL,GAAMh6C,UAAU0tO,iBAAmB,CACjC,iCAAkC,CAChC,YAAe9L,GAAgB,8BAC/B,YAAeA,GAAgB,gCAQnC5nL,GAAMh6C,UAAU8sO,gBAAkB,CAChC,iCAAkC,CAChC,aAAgBjL,GAAa,iCAQjC7nL,GAAMh6C,UAAUgtO,iBAAmB,CACjC,iCAAkC,CAChC,kBAAqBvL,GACnB,sCASNznL,GAAMh6C,UAAUimO,mBAAqB,CACnC,iCAAkC,CAChC,YAAerE,GAAgB,gCAC/B,aAAgBA,GAAgB,kCAQpC5nL,GAAMh6C,UAAUmmO,wBAA0B,CACxC,iCAAkC,CAChC,iBAAoBvE,GAClB,qCAEF,kBAAqBA,GACnB,uCASN5nL,GAAMh6C,UAAUqmO,qBAAuB,CACrC,iCAAkC,CAChC,cAAiBzE,GAAgB,kCACjC,eAAkBA,GAAgB,oCAQtC5nL,GAAMh6C,UAAUumO,oBAAsB,CACpC,iCAAkC,CAChC,MAAS3E,GAAgB,4CAQ7B5nL,GAAMh6C,UAAUymO,yBAA2B,CACzC,iCAAkC,CAChC,WAAc7E,GAAgB,+BAQlC5nL,GAAMh6C,UAAU2mO,sBAAwB,CACtC,iCAAkC,CAChC,QAAW/E,GAAgB,4BAQ/B5nL,GAAMh6C,UAAUonO,aAAe,CAC7B,iCAAkC,CAChC,WAAcvF,GAAa,iCAC3B,KAAQA,GAAa7nL,GAAMh6C,UAAUssO,qBAOzCtyL,GAAMh6C,UAAU+qO,iBAAmB,CACjC,iCAAkC,CAChC,SAAY7I,GAAkB,wBAC9B,SAAYA,GAAkB,0BAOlCloL,GAAMh6C,UAAU+rO,qBAAuB,CACrC,iCAAkC,CAChC,YAAe7J,GAAkBwG,IACjC,YAAexG,GAAkBwG,MAOrC1uL,GAAMh6C,UAAU4rO,mCAAqC,CACnD,iCAAkC,CAChC,cAAiB1J,GACf,0CAEF,cAAiBA,GACf,4CAQNloL,GAAMh6C,UAAUyrO,wBAA0B,CACxC,iCAAkC,CAChC,YAAevJ,GAAkB,iCAOrCloL,GAAMh6C,UAAUyqO,oCAAsC,CACpD,iCAAkC,CAChC,iBAAoBvI,GAClB,2CAEF,YAAeA,GACb,6CAQNloL,GAAMh6C,UAAU2qO,qBAAuB,CACrC,iCAAkC,CAChC,MAASzI,GAAkB,qCAC3B,WAAcA,GAAkB,0CAChC,MAASA,GAAkBloL,GAAMh6C,UAAUurO,YAC3C,WAAcrJ,GAAkB,8BAChC,WAAcA,GAAkB,qCAChC,gBAAmBA,GACjB,0CAEF,WAAcA,GAAkB,8BAChC,QAAWA,GAAkB,oCAC7B,aAAgBA,GACd,yCAEF,QAAWA,GAAkB,oCAC7B,aAAgBA,GACd,yCAEF,SAAYA,GAAkB,8BAIlC,YCvTA,SArBA,WAIE,WAAYxsJ,GAKVl2E,KAAK4gL,SAAW1qG,EAUpB,OAHE,YAAAvX,WAAA,WACE,OAAO3+D,KAAK4gL,UAEhB,EAnBA,G,+dCkBA,SAhBA,YAKE,WAAY1qG,EAAS1X,GAArB,MACE,YAAM0X,IAAQ,K,OAKd,EAAK1X,WAAaA,EAClB,EAAO,EAAKA,WAAWn7D,QAAU,EAAG,I,EAExC,OAd0B,QAc1B,EAdA,CAA0B,I,+dCO1B,SATA,YAIE,WAAYm7D,G,OACV,YAAM,MAAO19D,MAAMN,UAAUmK,MAAMjK,KAAKsc,aAAW,KAEvD,OAPkB,QAOlB,EAPA,CAAkB,I,+dCiClB,SAhCA,YAOE,WAAYyhD,EAAcnjD,EAAQioK,GAAlC,MACE,YAAM,SAAO,KAWb,GANA,EAAK9kH,aAAeA,EAKpB,EAAKnjD,OAASA,EACQ,IAAlBA,EAAOjY,OACT,MAAM,IAAIrE,MACR,kE,OAOJ,EAAKuQ,QAAUg0K,E,EAEnB,OA9BmB,QA8BnB,EA9BA,CAAmB,I,+dCuBbkiD,GAA6B,CACjC,6BAA8B,CAC5B,UAAahD,GACX,+BACA,WAGJ,iCAAkC,CAChC,OAAUL,GAAgB,qCAQxBuM,GAA8B,CAClC,6BAA8B,CAC5B,cAAiBlM,GAAyBoG,IAC1C,aAAgBpG,GAAyBoG,IACzC,aAAgBpG,GAAyBoG,KAE3C,iCAAkC,CAChC,cAAiBpG,GAAyBoG,IAC1C,aAAgBpG,GAAyBoG,IACzC,aAAgBpG,GAAyBoG,MAQvC+F,GAA+B,CACnC,6BAA8B,CAC5B,mBAAsBnM,GACpBoM,GACA,sBAEF,cAAiBpM,GAAyBqM,GAAmB,cAE/D,iCAAkC,CAChC,mBAAsBrM,GACpBoM,GACA,sBAEF,cAAiBpM,GAAyBqM,GAAmB,eAO3DC,GAAoB,CACxB,6BAA8B,CAC5B,aAAgBrM,GAAkBwG,KAEpC,iCAAkC,CAChC,aAAgBxG,GAAkBwG,MAOhC8F,GAA0B,CAC9B,6BAA8B,CAC5B,OAAUtM,GAAkB3mK,IAC5B,OAAU2mK,GAAkBuM,IAC5B,OAAUvM,GAAkBwM,IAC5B,SAAYxM,GAAkByM,IAC9B,OAAUzM,GAAkB0M,KAE9B,iCAAkC,CAChC,OAAU1M,GAAkB3mK,IAC5B,OAAU2mK,GAAkBuM,IAC5B,OAAUvM,GAAkBwM,IAC5B,SAAYxM,GAAkByM,IAC9B,OAAUzM,GAAkB0M,MAmF1BC,GAAiB,UAKjBC,GAAQ,gCAKRC,GAAQ,CACZ,QAAS,iCACT,QAAS,6BACT,QAAS,8BAMLC,GAAQ,CACZ,QAAS,iCACT,QAAS,6BACT,QAAS,8BAMLC,GAAQ,CACZ,QAAS,iCACT,QAAS,6BACT,QAAS,8BAMLC,GAAmB,CACvB,QACE,4EACF,QACE,0EACF,QACE,2EAMEC,GAAc,CAClB,QAAS,GACT,QAAS,GACT,QAAS,IAkBX,eAIE,WAAYj0C,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAM5C,EAAKk0C,SAAWjwO,EAAQ2P,QAAU3P,EAAQ2P,QAxBtB,QA8BpB,EAAKugO,aAAelwO,EAAQgyB,YAM5B,EAAKm+M,WAAanwO,EAAQ+vJ,UAM1B,EAAKqgF,WAAapwO,EAAQqwO,UACtBrwO,EAAQqwO,UACR,IAAIL,GAAY,EAAKC,UAMzB,EAAKK,gBAAkBtwO,EAAQ6lO,eAC3B7lO,EAAQ6lO,eACRkK,GAAiB,EAAKE,U,EAwW9B,OAjZkB,QA+ChB,YAAA53E,eAAA,WACE,OAAOh4J,KAAK6vO,cAMd,YAAAK,eAAA,SAAev+M,GACb3xB,KAAK6vO,aAAel+M,GAStB,YAAAizM,qBAAA,SAAqBnwN,EAAMinL,GAEzB,IAAMppH,EAAU,CACd79D,KAAI,GAEN,GAAO69D,EAAS,CACd,YAAetyE,KAAK6vO,aACpB,UAAa7vO,KAAK8vO,aAGpB,GAAOx9J,EAAStyE,KAAK+gO,eAAetsN,EAAMinL,GAA4B,KACtE,IAAMymC,EAAc,CAAC7vJ,GAOjBxjE,EAAWm1N,GACb,GANoB,UAAlBjkO,KAAK4vO,SACMnK,GAEAzlO,KAAK+vO,WAAWtK,2BAK7BhxN,EACA0tN,EACAniO,KAAK+vO,YAKP,OAHKjhO,IACHA,EAAW,IAENA,GAUT,YAAAqhO,wBAAA,SAAwBx1N,GACtB,GAAKA,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKowO,oCAAoC/sD,GAC3C,OAAI2+C,GAAWrnN,GACb3a,KAAKowO,oCACc,GAGnBpwO,KAAKqwO,gCACa,KAa7B,YAAAC,8BAAA,SAA8B31N,GAC5B,GAAKA,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKuwO,0CAA0CltD,GACjD,OAAI2+C,GAAWrnN,GACb3a,KAAKuwO,0CACc,GAGnBvwO,KAAKwwO,sCACa,KAU7B,YAAAD,0CAAA,SAA0CltD,GACxC,IAAK,IAAIzuK,EAAyByuK,EAAc,WAAGzuK,EAAGA,EAAIA,EAAEu/J,YAC1D,GAAIv/J,EAAEgwD,UAAYg9J,KAAKiD,aACrB,OAAO7kO,KAAKwwO,sCACa,IAY/B,YAAAA,sCAAA,SAAsC/7N,GACpC,IAAM7P,EAAS,GACT/B,EAAQimO,GACZr0N,EAAKmpB,aAAa,qBAGpB,OADAh5B,EAAyB,iBAAI/B,EACtBohO,GACoC,EACzCwB,GACAhxN,EACA,GACAzU,KAAK+vO,aAQT,YAAAK,oCAAA,SAAoC/sD,GAClC,IAAK,IAAIzuK,EAAyByuK,EAAc,WAAGzuK,EAAGA,EAAIA,EAAEu/J,YAC1D,GAAIv/J,EAAEgwD,UAAYg9J,KAAKiD,aACrB,OAAO7kO,KAAKqwO,gCAAuD,IAUzE,YAAAA,gCAAA,SAAgC57N,GAC9B,OAAOwvN,GAC8B,GACnC2K,GACAn6N,EACA,KAWJ,YAAAg8N,gBAAA,SAAgB9wO,GAAhB,WACQ8U,EAAO,GAAgB+6N,GAAMxvO,KAAK4vO,UAAW,cACnDn7N,EAAK2Y,aAAa,UAAW,OAC7B3Y,EAAK2Y,aAAa,UAAWptB,KAAK4vO,UAC9BjwO,EAAQyiE,QACV3tD,EAAK2Y,aAAa,SAAUztB,EAAQyiE,QAElCziE,EAAQwxB,cACV1c,EAAK2Y,aAAa,eAAgBztB,EAAQwxB,mBAEhB/sB,IAAxBzE,EAAQm2E,aACVrhE,EAAK2Y,aAAa,cAAe9b,OAAO3R,EAAQm2E,cAE9Cn2E,EAAQ02E,YACV5hE,EAAK2Y,aAAa,aAAcztB,EAAQ02E,iBAEfjyE,IAAvBzE,EAAQqiM,YACVvtL,EAAK2Y,aAAa,aAAc9b,OAAO3R,EAAQqiM,kBAE3B59L,IAAlBzE,EAAQ2a,OACV7F,EAAK2Y,aAAa,QAAS9b,OAAO3R,EAAQ2a,aAEjBlW,IAAvBzE,EAAQ+wO,YACVj8N,EAAK2Y,aAAa,aAAcztB,EAAQ+wO,YAE1Cj8N,EAAK20I,eACHg4E,GACA,qBACAphO,KAAKiwO,iBAGP,IAAM39J,EAAU,CACd79D,KAAI,GAUN,GARA,GAAO69D,EAAS,CACd,QAAWtyE,KAAK4vO,SAChB,QAAWjwO,EAAQ4P,QACnB,UAAa5P,EAAQ+vJ,UAAY/vJ,EAAQ+vJ,UAAY1vJ,KAAK8vO,WAC1D,cAAiBnwO,EAAQgwJ,cACzB,cAAiBhwJ,EAAQgxO,cAAgBhxO,EAAQgxO,cAAgB,KAEnE,EAAO7vO,MAAMC,QAAQpB,EAAQ2uJ,cAAe,IACL,iBAA5B3uJ,EAAQ2uJ,aAAa,GAAiB,CAC/C,IAAIppJ,EAASvF,EAAQuF,OACjBvF,EAAQ4nB,OACV,EAAO5nB,EAAQ8+D,aAAc,IAC7Bv5D,EAASlF,KAAK4wO,qBACZjxO,EAAQ8+D,aACR9+D,EAAQ4nB,KACR5nB,EAAQ4P,QACRrK,IAGJ,GAAOotE,EAAS,CACd,aAAgB3yE,EAAQ8+D,aACxB,OAAUv5D,IAEZurO,GACEh8N,EAC+B9U,EAAoB,aACnD,CAAC2yE,SAIH3yE,EAAQ2uJ,aAAa/mJ,SAAQ,SAA4BoqB,GACvD,IAAMk/M,EAAiB,EAAKD,qBAC1Bj/M,EAAY8sC,aACZ9sC,EAAYpK,KACZ5nB,EAAQ4P,QACR5P,EAAQuF,QAEV,GAAOotE,EAAS,CACd,aAAgB3gD,EAAY8sC,aAC5B,OAAUoyK,IAEZJ,GAAgBh8N,EAAM,CAACkd,EAAY9oB,MAAO,CAACypE,OAG/C,OAAO79D,GAaT,YAAAm8N,qBAAA,SAAqBnyK,EAAcnjD,EAAQioK,EAAautD,GACtD,IAAMC,ECrfH,SAActyK,EAAcnjD,EAAQioK,GACzC,OAAO,IAAI,GAAK9kH,EAAcnjD,EAAQioK,GDofjBh8J,CAAak3C,EAAcnjD,EAAQioK,GACtD,OAAIutD,EC7hBD,SAAatyK,GAClB,IAAMthD,EAAS,CAAC,MAAM7U,OAAOvH,MAAMN,UAAUmK,MAAMjK,KAAKsc,YACxD,OAAO,IAAK+kK,SAASvhL,UAAU0/C,KAAK9vC,MAAM,GAAK8M,ID6hBpC8zN,CAAYF,EAAYC,GAE1BA,GAaT,YAAAE,iBAAA,SAAiBj3M,EAASC,EAASC,EAASv6B,GAC1C,IAMIuxO,EANE/O,EAAc,GACd7yN,EAAU3P,EAAQ2P,QAAU3P,EAAQ2P,QAAUtP,KAAK4vO,SACnDn7N,EAAO,GAAgB+6N,GAAMlgO,GAAU,eAE7CmF,EAAK2Y,aAAa,UAAW,OAC7B3Y,EAAK2Y,aAAa,UAAW9d,GAGzB3P,IACFuxO,EAAUvxO,EAAQwxO,WAAaxxO,EAAQwxO,WAAa,GAChDxxO,EAAQyiE,QACV3tD,EAAK2Y,aAAa,SAAUztB,EAAQyiE,SAGxC3tD,EAAK20I,eACHg4E,GACA,qBACAsO,GAAiBpgO,IAGnB,IAAM0hB,EAkEV,SAAkCvc,EAAMy8N,EAAS5hO,EAAS3P,GACxD,IAGIq3E,EAHE24E,EAAgBhwJ,EAAQgwJ,cAC1BhwJ,EAAQgwJ,cACR0/E,GAEY,UAAZ//N,EACF0nE,EAAa,EACQ,UAAZ1nE,EACT0nE,EAAa,EACQ,UAAZ1nE,IACT0nE,EAAa,KAef,OAbY,GACV,CAACviE,KAAI,GACL,CACEnF,QAAO,EACP,UAAa3P,EAAQ+vJ,UACrB,YAAe/vJ,EAAQgyB,YACvB,cAAiBg+H,EACjB,WAAc34E,EACd,KAAQr3E,EAAQorO,KAChB,QAAWprO,EAAQ4P,SAErB2hO,GAzFgBE,CAAyB38N,EAAMy8N,EAAS5hO,EAAS3P,GAkBjE,OAjBIq6B,GACFq3M,GAA4B,SAAUr3M,EAASmoM,EAAanxM,GAE1DiJ,GACFo3M,GAA4B,SAAUp3M,EAASkoM,EAAanxM,GAE1DkJ,GACFm3M,GAA4B,SAAUn3M,EAASioM,EAAanxM,GAE1DrxB,EAAQ2xO,gBACVD,GACE,SACA1xO,EAAQ2xO,eACRnP,EACAnxM,GAGGvc,GAOT,YAAAuwN,2BAAA,SAA2B3hD,GACzB,IAAK,IAAIzuK,EAAIyuK,EAAInsK,WAAYtC,EAAGA,EAAIA,EAAEu/J,YACpC,GAAIv/J,EAAEgwD,UAAYg9J,KAAKiD,aACrB,OAAO7kO,KAAKilO,uBAA8C,GAG9D,OAAO,MAOT,YAAAA,uBAAA,SAAuBxwN,GACrB,GAAIA,EAAK2/J,mBAAqB3/J,EAAK2/J,kBAAkBA,kBAEnD,IAAK,IAAIx/J,GADTH,EAAOA,EAAK2/J,kBAAkBA,mBACZA,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAC5C,GAE4B,IAAxBxkJ,EAAE9G,WAAWzK,SACY,IAAxBuR,EAAE9G,WAAWzK,QAA0C,IAA1BuR,EAAEsC,WAAW0tD,UAE7C,CACA,IAAMu9J,EAAc,CAAC,IAErB,OADAniO,KAAK+vO,WAAW9J,oBAAoBrxN,EAAGutN,GAChC,GAAcA,EAAYpgK,MAAMxyD,SAK7C,OAAO,MAEX,EAjZA,CAAkB,IA4blB,SAAS8hO,GAA4BlnO,EAAM2E,EAAUqzN,EAAanxM,GAChEmzM,GACEnzM,EACAg+M,GACAhM,GAAsB74N,GACtB2E,EACAqzN,GASJ,SAAS0M,GAAuBp6N,EAAM0tN,GACpC,OAAO8B,GAAgB,GAAI0K,GAA6Bl6N,EAAM0tN,GAOhE,IAAMoP,GAAkB,CACtB,6BAA8B,CAC5B,UAAanP,IAAgB,SAAU3tN,EAAM0tN,GAC3C,OAAO1tN,EAAKmpB,aAAa,WAG7B,iCAAkC,CAChC,UAAawkM,IAAgB,SAAU3tN,EAAM0tN,GAC3C,OAAO1tN,EAAKmpB,aAAa,YAS/B,SAAS4zM,GAAU/8N,EAAM0tN,GACvB2B,GAAUyN,GAAiB98N,EAAM0tN,GAOnC,IAAMsP,GAAyB,CAC7B,6BAA8B,CAC5B,QAAWD,IAEb,iCAAkC,CAChC,QAAWA,KASf,SAAS1C,GAAkBr6N,EAAM0tN,GAC/B,OAAO8B,GAAgB,GAAIwN,GAAwBh9N,EAAM0tN,GAQ3D,SAASpmK,GAAatnD,EAAMhR,EAAS0+N,GACnC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3CsuB,EAAc2gD,EAAqB,YACnCo9E,EAAYp9E,EAAmB,UAC/B0E,EAAa1E,EAAoB,WACjCruD,EAAQ,GAAgByrI,EAAW/9H,GACzCld,EAAK5H,YAAYoX,GACE,IAAf+yD,EACF,iCAAmC/yD,EAAOxgB,EAAS0+N,GAC3B,IAAfnrJ,EACT,iCAAmC/yD,EAAOxgB,EAAS0+N,GAEnD,iCAAoCl+M,EAAOxgB,EAAS0+N,GASxD,SAASuP,GAAkBj9N,EAAMy3J,EAAKi2D,GACpC,IACM7yN,EADU6yN,EAAYA,EAAY9+N,OAAS,GAChB,QAC3BuiO,EAAK2J,GAAMjgO,GACXpK,EAAS,GAAgB0gO,EAAI,UAC7B3hN,EAAQ,GAAgB2hN,EAAI,aAClC1gO,EAAO2H,YAAYoX,GACnBA,EAAMmJ,aAAa,MAA6B,GAChD3Y,EAAK5H,YAAY3H,GAQnB,SAASysO,GAAYhiF,EAAeh+H,GAElC,IAAMiV,GADN+oH,EAAgBA,GAAgC0/E,IACjB,IAE/B,OAAoC,IAAhC19M,EAAY3oB,QAAQ49B,GACfjV,EAEAiV,EAASjV,EASpB,SAASu9M,GAAYz6N,EAAMhR,EAAS0+N,GAClC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GACjD,OAA2Be,IAApBX,EAAQE,QAAuB,IACtC,IAAMguB,EAAc2gD,EAAqB,YACnCq9E,EAAgBr9E,EAAuB,cACvCo9E,EAAYp9E,EAAmB,UAC/BvjD,EAAW4iN,GAAYhiF,EAAeh+H,GAC5Cld,EAAK2Y,aAAa,WAAY2B,GAC9Bta,EAAK20I,eAAekmF,GAAO,SAAW3/E,EAAeD,GACrD,IAAMwc,EAAMzoK,EAAQE,aACRS,IAAR8nK,GACFwlE,GAAkBj9N,EAAMy3J,EAAKi2D,GASjC,SAAS8M,GAAYx6N,EAAMhR,EAAS0+N,GAClC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GACjD,OAA2Be,IAApBX,EAAQE,QAAuB,IACtC,IAAM2L,EAAUgjE,EAAiB,QAC3B3gD,EAAc2gD,EAAqB,YACnCq9E,EAAgBr9E,EAAuB,cACvCo9E,EAAYp9E,EAAmB,UAC/BvjD,EAAW4iN,GAAYhiF,EAAeh+H,GACtC8sC,EAAeh7D,EAAQm3N,kBAC7BnmN,EAAK2Y,aAAa,WAAY2B,GAC9Bta,EAAK20I,eAAekmF,GAAO,SAAW3/E,EAAeD,GACrD,IAAMwc,EAAMzoK,EAAQE,QACpB,QAAYS,IAAR8nK,EAAmB,CAGrB,IAFA,IAAMhtK,EAAOuE,EAAQgsL,UACfthK,EAAS,GACNjsB,EAAI,EAAGgiB,EAAKhlB,EAAKmE,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC7C,IAAMW,EAAQY,EAAQ+a,IAAItf,EAAKgD,IAC/B,QAAckC,IAAVvB,EAAqB,CACvB,IAAI,EAAO3D,EAAKgD,GAEdW,GAC4D,mBAAnC,EAA6B,wBAEtD,EAAO47D,GAETtwC,EAAO/lB,KAAK,CAACS,KAAM,EAAMhG,MAAOA,KAGpCshO,GACmD,CAC/C70N,QAAO,EACP,WAAcgjE,EAAoB,WAClC79D,KAAI,EACJ,KAAQ69D,EAAc,KACtB,QAAWA,EAAiB,SAE9B08J,GACAhM,GAAsB,YACtB70M,EACAg0M,GAEFuP,GAAkBj9N,EAAMy3J,EAAKi2D,IASjC,SAASgN,GAAc16N,EAAMm9N,EAAMzP,GACjC,IAAM7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3CiM,EAAUgjE,EAAiB,QAC3BszJ,EAAK4J,GAAMlgO,GACXzG,EAAO,GAAgB+8N,EAAI,QAC3B5uJ,EAAa1E,EAAoB,WAGvC,GAFA79D,EAAK5H,YAAYhE,GACjBqgO,GAAoBrgO,EAAM+oO,EAAK/oO,WACZzE,IAAfwtO,EAAK/uO,OAAsC,OAAf+uO,EAAK/uO,MAAgB,CACnD,IAAMA,EAAQ,GAAgB+iO,EAAI,SAClCnxN,EAAK5H,YAAYhK,GAEf+uO,EAAK/uO,OAEH,mBADwB+uO,EAAU,MAAuB,sBAGxC,IAAf56J,EACF,kCAAoCn0E,EAAO+uO,EAAK/uO,MAAOs/N,GAC/B,IAAfnrJ,EACT,kCAAoCn0E,EAAO+uO,EAAK/uO,MAAOs/N,GAEvD,kCAAqCt/N,EAAO+uO,EAAK/uO,MAAOs/N,GAG1D+G,GAAoBrmO,EAAO+uO,EAAK/uO,QAUtC,SAASusO,GAAY36N,EAAMo9N,EAAe1P,GACpC0P,EAAcC,UAChBr9N,EAAK2Y,aAAa,WAAYykN,EAAcC,eAEX1tO,IAA/BytO,EAAcE,cAChBt9N,EAAK2Y,aAAa,eAAgB9b,OAAOugO,EAAcE,oBAE7B3tO,IAAxBytO,EAAchvO,OAChBqmO,GAAoBz0N,EAAMo9N,EAAchvO,OAO5C,IAAMmvO,GAAyB,CAC7B,6BAA8B,CAC5B,MAAStP,GAAkBuP,KAE7B,iCAAkC,CAChC,MAASvP,GAAkBuP,KAE7B,6BAA8B,CAC5B,OAAUvP,GAAkBwP,IAC5B,IAAOxP,GAAkByP,IACzB,GAAMzP,GAAkByP,IACxB,IAAOzP,GAAkB0P,IACzB,KAAQ1P,GAAkB2P,IAC1B,SAAY3P,GAAkB4P,IAC9B,WAAc5P,GAAkB4P,IAChC,OAAU5P,GAAkB4P,IAC5B,QAAW5P,GAAkB6P,IAC7B,kBAAqB7P,GAAkB8P,IACvC,qBAAwB9P,GAAkB8P,IAC1C,mBAAsB9P,GAAkB8P,IACxC,4BAA+B9P,GAAkB8P,IACjD,sBAAyB9P,GAAkB8P,IAC3C,+BAAkC9P,GAAkB8P,IACpD,eAAkB9P,GAAkB+P,IACpC,kBAAqB/P,GAAkBgQ,IACvC,eAAkBhQ,GAAkBiQ,KAEtC,iCAAkC,CAChC,OAAUjQ,GAAkBwP,IAC5B,IAAOxP,GAAkByP,IACzB,GAAMzP,GAAkByP,IACxB,IAAOzP,GAAkB0P,IACzB,KAAQ1P,GAAkB2P,IAC1B,SAAY3P,GAAkB4P,IAC9B,SAAY5P,GAAkB4P,IAC9B,WAAc5P,GAAkB4P,IAChC,WAAc5P,IA0GlB,SAA+BjuN,EAAMvP,EAAQi9N,GAC3C1tN,EAAK2Y,aAAa,MAA8BloB,EAAU,QA1GxD,OAAUw9N,GAAkB4P,IAC5B,QAAW5P,GAAkB6P,IAC7B,kBAAqB7P,GAAkB8P,IACvC,qBAAwB9P,GAAkB8P,IAC1C,mBAAsB9P,GAAkB8P,IACxC,4BAA+B9P,GAAkB8P,IACjD,sBAAyB9P,GAAkB8P,IAC3C,+BAAkC9P,GAAkB8P,IACpD,eAAkB9P,GAAkB+P,IACpC,kBAAqB/P,GAAkBgQ,IACvC,eAAkBhQ,GAAkBiQ,MASxC,SAASV,GAAWx9N,EAAMkd,EAAawwM,GACrC,IAMIpzM,EAOA6jN,EAbEtgK,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAClEiM,EAAUgjE,EAAiB,QAC3Bq9E,EAAgBr9E,EAAuB,cACvCo9E,EAAYp9E,EAAmB,UAC/Bq+J,EAAgBr+J,EAAuB,cACvC/iE,EAAU+iE,EAAiB,QAI/BvjD,EADE4gI,EACSgiF,GAAYhiF,EAAeh+H,GAE3BA,EAIXihN,EADc,UAAZtjO,EACa,YAEA,WAEjBmF,EAAK2Y,aAAawlN,EAAc7jN,GAC5Bxf,GACFkF,EAAK2Y,aAAa,UAAW7d,GAE3BmgJ,GACFj7I,EAAK20I,eAAekmF,GAAO,SAAW3/E,EAAeD,GAEvD,IAAM1lJ,EACJ,GAAO,GAAIsoE,GAEbtoE,EAAKyK,KAAOA,EACZ0vN,GACEn6N,EACA+kO,GACA/L,GAAsB,gBACtB2N,EACAxO,GAEF,IAAMj9N,EAASotE,EAAgB,OAC/B,GAAIptE,EAAQ,CACV,IAAM+e,EAAQ,GAAgB4uN,GAAYvjO,GAAU,UACpDmF,EAAK5H,YAAYoX,GACjB6uN,GAAqB7uN,EAAO/e,EAAQi9N,IASxC,SAAS2Q,GAAqBr+N,EAAMvP,EAAQi9N,GAC1C,IAAM7vJ,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAElE2G,EAAO,CAACyK,KAAI,GAClB,GAAOzK,EAAM,CAACsoE,QAAO,IACrB6xJ,GACEn6N,EACAgoO,GACAhP,GAAsB99N,EAAOy5D,cAC7B,CAACz5D,GACDi9N,GASJ,SAASkQ,GAAgB59N,EAAMvP,EAAQi9N,GACrC,IAAM3+N,EAAgC2+N,EAAYA,EAAY9+N,OAAS,GAEjEiM,EADU9L,EAAgB,QACC,QACjCA,EAAgB,QAAI0B,EAAOqK,QAC3B,IAAMyD,EAAS28N,GAAYrgO,GAE3ByjO,GAAkBzjO,EAASmF,EAAMvP,EAAOu5D,cACxCzrD,EAAOxS,UAAU+pO,qBAAqB91N,EAAMvP,EAAOoW,OAAQ6mN,GAiB7D,SAASmQ,GAAmB79N,EAAMvP,EAAQi9N,GACxC,IAAM3+N,EAAgC2+N,EAAYA,EAAY9+N,OAAS,GAEjEiM,EADU9L,EAAgB,QACC,QACjCA,EAAgB,QAAI0B,EAAOqK,QAC3B,IAAMyD,EAAS28N,GAAYrgO,GAE3ByjO,GAAkBzjO,EAASmF,EAAMvP,EAAOu5D,cACxCzrD,EAAOxS,UAAU+pO,qBAAqB91N,EAAMvP,EAAO5E,SAAU6hO,GAQ/D,SAASoQ,GAAmB99N,EAAMvP,EAAQi9N,GACxC,IAEM7yN,EAFgC6yN,EAAYA,EAAY9+N,OAAS,GACvC,QACC,QACjCivO,GAAmB79N,EAAMvP,EAAQi9N,GACjC,IAAM99K,EAAW,GAAgBwuL,GAAYvjO,GAAU,YACvD45N,GAAoB7kL,EAAUn/C,EAAOm/C,SAASphC,YAC9B,UAAZ3T,EACF+0C,EAASj3B,aAAa,MAAOloB,EAAO8vD,MAEpC3Q,EAASj3B,aAAa,QAASloB,EAAO8vD,MAExCvgD,EAAK5H,YAAYw3C,GAQnB,SAAS6tL,GAAkBz9N,EAAMvP,EAAQi9N,GACvC,IAEM7yN,EAFgC6yN,EAAYA,EAAY9+N,OAAS,GACvC,QACC,QAEjC2vO,GAAgBvD,GAAMngO,GAAU,iBAAkBmF,EAAMvP,EAAOyrD,cAC/D,IAAMsiL,EAAa,GAAgB3N,GAAO,cAE1C7wN,EAAK5H,YAAYomO,GAEjB,IAAM3uD,EAAQ,GAAgBghD,GAAO,SACrC2N,EAAWpmO,YAAYy3K,GACvB4uD,GAAiB5uD,EAAOp/K,EAAOo/K,OAE/B,IAAMx6G,EAAM,GAAgBw7J,GAAO,OACnC2N,EAAWpmO,YAAYi9D,GACvBopK,GAAiBppK,EAAK5kE,EAAO4kE,KAQ/B,SAASqoK,GAAmB19N,EAAMvP,EAAQi9N,GACxC,IACM7vJ,EADgC6vJ,EAAYA,EAAY9+N,OAAS,GACvC,QAE1B2G,EAAO,CAACyK,KAAI,GAClB,GAAOzK,EAAM,CAACsoE,QAAO,IAErB,IADA,IAAM9T,EAAat5D,EAAOs5D,WACjBt8D,EAAI,EAAGgiB,EAAKs6C,EAAWn7D,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACnD,IAAMY,EAAY07D,EAAWt8D,GAC7BiiO,GACEn6N,EACAgoO,GACAhP,GAAsBlgO,EAAU67D,cAChC,CAAC77D,GACDq/N,IAUN,SAASiQ,GAAe39N,EAAMvP,EAAQi9N,GACpC,IACM7vJ,EADgC6vJ,EAAYA,EAAY9+N,OAAS,GACvC,QAE1B2G,EAAO,CAACyK,KAAI,GAClB,GAAOzK,EAAM,CAACsoE,QAAO,IACrB,IAAMxvE,EAAYoC,EAAOpC,UACzBqhO,GACEn6N,EACAgoO,GACAhP,GAAsBlgO,EAAU67D,cAChC,CAAC77D,GACDq/N,GASJ,SAASqQ,GAAsB/9N,EAAMvP,EAAQi9N,GAC3C,IAEM7yN,EAFgC6yN,EAAYA,EAAY9+N,OAAS,GACvC,QACC,aACRe,IAArBc,EAAOw1K,WACTjmK,EAAK2Y,aAAa,YAAaloB,EAAOw1K,UAAUz3J,YAElD8vN,GAAkBzjO,EAASmF,EAAMvP,EAAOyrD,cACxCwiL,GAAa7jO,EAASmF,EAAM,GAAKvP,EAAO+2K,YAQ1C,SAASw2D,GAAkBh+N,EAAMvP,EAAQi9N,GAIvC4Q,GAHsC5Q,EAAYA,EAAY9+N,OAAS,GACvC,QACC,QACNoR,EAAMvP,EAAOyrD,cAQ1C,SAAS+hL,GAAqBj+N,EAAMvP,EAAQi9N,GAC1C,IAEM7yN,EAFgC6yN,EAAYA,EAAY9+N,OAAS,GACvC,QACC,QAC3BuiO,EAAKiN,GAAYvjO,GAEvByjO,GAAkBzjO,EAASmF,EAAMvP,EAAOyrD,cAExC,IAAMsxH,EAAgB,GAAgB2jD,EAAI,iBAC1CnxN,EAAK5H,YAAYo1K,GACjBkxD,GAAa7jO,EAAS2yK,EAAe,GAAK/8K,EAAO+8K,eAEjD,IAAMC,EAAgB,GAAgB0jD,EAAI,iBAC1CnxN,EAAK5H,YAAYq1K,GACjBixD,GAAa7jO,EAAS4yK,EAAe,GAAKh9K,EAAOg9K,eAQnD,SAASywD,GAAkBl+N,EAAMvP,EAAQi9N,GACvC,IAEM7yN,EAFgC6yN,EAAYA,EAAY9+N,OAAS,GACvC,QACC,QACjCoR,EAAK2Y,aAAa,WAAYloB,EAAO29K,UACrCpuK,EAAK2Y,aAAa,aAAcloB,EAAO09K,YACvCnuK,EAAK2Y,aAAa,aAAcloB,EAAOy9K,iBACdv+K,IAArBc,EAAOw1K,WACTjmK,EAAK2Y,aAAa,YAAaloB,EAAOw1K,UAAUz3J,YAElD8vN,GAAkBzjO,EAASmF,EAAMvP,EAAOyrD,cACxCwiL,GAAa7jO,EAASmF,EAAM,GAAKvP,EAAOykJ,SAS1C,SAASqpF,GAAgBpN,EAAI1vJ,EAASzhE,EAAM5R,GAC1C,IAAM2xB,EAAW,GAAgBoxM,EAAI1vJ,GACrCgzJ,GAAoB10M,EAAU3xB,GAC9B4R,EAAK5H,YAAY2nB,GAQnB,SAAS2+M,GAAa7jO,EAASmF,EAAM5R,GACnCmwO,GAAgBH,GAAYvjO,GAAU,UAAWmF,EAAM5R,GAQzD,SAASkwO,GAAkBzjO,EAASmF,EAAM5R,GACxB,UAAZyM,EACF0jO,GAAgBvD,GAAMngO,GAAU,iBAAkBmF,EAAM5R,GAExDmwO,GAAgBzD,GAAMjgO,GAAU,eAAgBmF,EAAM5R,GAQ1D,SAASqwO,GAAiBz+N,EAAM63G,GAC9B,IAAM8mH,EAAc,GAAgB9N,GAAO,eAC3C7wN,EAAK5H,YAAYumO,GAEjB,IAAMC,EAAe,GAAgB/N,GAAO,gBAC5C8N,EAAYvmO,YAAYwmO,GACxBnK,GAAoBmK,EAAc/mH,GA8BpC,SAASmkH,GAAgBh8N,EAAM65I,EAAc6zE,GAC3C,IAAM7vJ,EAAiC6vJ,EAAYA,EAAY9+N,OAAS,GAClE2G,EACJ,GAAO,GAAIsoE,GAEbtoE,EAAKyK,KAAOA,EACZ0vN,GACEn6N,EACAgoO,GACAhP,GAAsB,SACtB10E,EACA6zE,GAIJ,SAAS0Q,GAAYvjO,GAOnB,MALgB,UAAZA,EACGmgO,GAAMngO,GAENigO,GAAMjgO,GAKf,Y,+dEtpCA,SAASgR,GAAQ3F,GACf,MAAsB,iBAAXA,EACFA,EAEA,GAIX,SAhMA,YACE,a,OACE,cAAO,KAgLX,OAlL0B,QAQxB,YAAA1Q,QAAA,WACE,MAAO,QAWT,YAAAumK,YAAA,SAAY71J,EAAQ+gL,GAClB,OAAO17L,KAAKszO,oBACVhzN,GAAQ3F,GACR3a,KAAKghO,aAAatlC,KAWtB,YAAA43C,oBAAA,SAAoBl6N,EAAMsiL,GACxB,OAAO,KAWT,YAAA5tE,aAAA,SAAanzG,EAAQ+gL,GACnB,OAAO17L,KAAKuzO,qBACVjzN,GAAQ3F,GACR3a,KAAKghO,aAAatlC,KAWtB,YAAA63C,qBAAA,SAAqBn6N,EAAMsiL,GACzB,OAAO,KAWT,YAAAulC,aAAA,SAAatmN,EAAQ+gL,GACnB,OAAO17L,KAAKwzO,qBACVlzN,GAAQ3F,GACR3a,KAAKghO,aAAatlC,KAWtB,YAAA83C,qBAAA,SAAqBp6N,EAAMsiL,GACzB,OAAO,KAUT,YAAAglC,eAAA,SAAe/lN,GACb,OAAO3a,KAAKyzO,uBAAuBnzN,GAAQ3F,KAQ7C,YAAA84N,uBAAA,SAAuBr6N,GACrB,OAAOpZ,KAAK4gO,gBAWd,YAAA7kK,aAAA,SAAat4D,EAASi4L,GACpB,OAAO17L,KAAK0zO,iBAAiBjwO,EAASzD,KAAKghO,aAAatlC,KAU1D,YAAAg4C,iBAAA,SAAiBjwO,EAASi4L,GACxB,OAAO,KAWT,YAAA9tE,cAAA,SAAc9+G,EAAU4sL,GACtB,OAAO17L,KAAK2zO,kBAAkB7kO,EAAU9O,KAAKghO,aAAatlC,KAU5D,YAAAi4C,kBAAA,SAAkB7kO,EAAU4sL,GAC1B,OAAO,KAWT,YAAAwlC,cAAA,SAAc5gO,EAAUo7L,GACtB,OAAO17L,KAAK4zO,kBAAkBtzO,EAAUN,KAAKghO,aAAatlC,KAU5D,YAAAk4C,kBAAA,SAAkBtzO,EAAUo7L,GAC1B,OAAO,KAEX,EAlLA,CAA0B,I,+dCKpBm4C,GAAsB,CAC1B,MAAS,GACT,WAAc,GACd,QAAW,GACX,WAAc,GACd,gBAAmB,GACnB,aAAgB,IAoBZC,GAAQ,QAwBRC,GACG,EADHA,GAEE,EAFFA,GAGQ,EAHRA,GAIS,EAJTA,GAKI,EALJA,GAMG,EANHA,GAOC,EAMDC,GAAgB,CACpBtkO,MAAO,QACP8sN,WAAY,aACZn6N,QAAS,UACTwN,WAAY,aACZotN,gBAAiB,kBACjBhtN,aAAc,eACd0vN,mBAAoB,qBACpBpgO,OAAQ,UAMV,cAIE,WAAYw5D,GAIV/4D,KAAK+4D,IAAMA,EAMX/4D,KAAKi0O,QAAU,EAmHnB,OA3GE,YAAAC,SAAA,SAAS1rO,GACP,OAAQA,GAAK,KAAOA,GAAK,KAASA,GAAK,KAAOA,GAAK,KAUrD,YAAA2rO,WAAA,SAAW3rO,EAAG4rO,GAEZ,OAAQ5rO,GAAK,KAAOA,GAAK,KAAc,KAALA,UADFpE,IAAhBgwO,GAA4BA,IAS9C,YAAAC,cAAA,SAAc7rO,GACZ,MAAY,KAALA,GAAiB,MAALA,GAAkB,MAALA,GAAkB,MAALA,GAO/C,YAAA8rO,UAAA,WACE,OAAOt0O,KAAK+4D,IAAIgf,SAAS/3E,KAAKi0O,SAOhC,YAAAM,UAAA,WACE,IAIIpqO,EAJE3B,EAAIxI,KAAKs0O,YACThoO,EAAWtM,KAAKi0O,OAElBpxO,EAAQ2F,EAGZ,GAAS,KAALA,EACF2B,EAAO4pO,QACF,GAAS,KAALvrO,EACT2B,EAAO4pO,QACF,GAAS,KAALvrO,EACT2B,EAAO4pO,QACF,GAAI/zO,KAAKm0O,WAAW3rO,IAAW,KAALA,EAC/B2B,EAAO4pO,GACPlxO,EAAQ7C,KAAKw0O,mBACR,GAAIx0O,KAAKk0O,SAAS1rO,GACvB2B,EAAO4pO,GACPlxO,EAAQ7C,KAAKy0O,gBACR,IAAIz0O,KAAKq0O,cAAc7rO,GAC5B,OAAOxI,KAAKu0O,YACP,GAAU,KAAN/rO,EAGT,MAAM,IAAIxJ,MAAM,yBAA2BwJ,GAF3C2B,EAAO4pO,GAKT,MAAO,CAACznO,SAAUA,EAAUzJ,MAAOA,EAAOsH,KAAMA,IAOlD,YAAAqqO,YAAA,WACE,IAAIhsO,EACEshB,EAAQ9pB,KAAKi0O,OACftgB,GAAU,EACV+gB,GAAqB,EACzB,GACW,KAALlsO,EACFmrN,GAAU,EACI,KAALnrN,GAAiB,KAALA,IACrBksO,GAAqB,GAEvBlsO,EAAIxI,KAAKs0O,kBAETt0O,KAAKm0O,WAAW3rO,EAAGmrN,KAGjB+gB,IAA4B,KAALlsO,GAAiB,KAALA,IAGpCksO,IAA4B,KAALlsO,GAAiB,KAALA,IAEtC,OAAOZ,WAAW5H,KAAK+4D,IAAI5/B,UAAUrP,EAAO9pB,KAAKi0O,YAOnD,YAAAQ,UAAA,WACE,IAAIjsO,EACEshB,EAAQ9pB,KAAKi0O,OACnB,GACEzrO,EAAIxI,KAAKs0O,kBACFt0O,KAAKk0O,SAAS1rO,IACvB,OAAOxI,KAAK+4D,IAAI5/B,UAAUrP,EAAO9pB,KAAKi0O,UAAUr0L,eAEpD,EAjIA,GAsIA,cAIE,WAAY+0L,GAKV30O,KAAK40O,OAASD,EAMd30O,KAAK60O,OAAS,CACZvoO,SAAU,EACVnC,KAAM4pO,IAOR/zO,KAAK80O,QAAU,MAkVnB,OA3UE,YAAAC,SAAA,WACE/0O,KAAK60O,OAAS70O,KAAK40O,OAAOL,aAQ5B,YAAAS,YAAA,SAAY7qO,GACV,OAAOnK,KAAK60O,OAAO1qO,MAAQA,GAQ7B,YAAAX,MAAA,SAAMW,GACJ,IAAM8qO,EAAUj1O,KAAKg1O,YAAY7qO,GAIjC,OAHI8qO,GACFj1O,KAAK+0O,WAEAE,GAOT,YAAAzjN,MAAA,WAEE,OADAxxB,KAAK+0O,WACE/0O,KAAKk1O,kBAQd,YAAAC,qBAAA,WACE,IAAIxpM,EAAS,MACPypM,EAAWp1O,KAAK60O,OACtB,GAAI70O,KAAKg1O,YAAYjB,IAAiB,CACpC,IAAMsB,EAAUD,EAASvyO,MA9PrB,MA+PAwyO,EACF1pM,EAAS,OA1PP,MA2PO0pM,EACT1pM,EAAS,OAtPN,OAuPM0pM,IACT1pM,EAAS,SAEPA,IAAW,OACb3rC,KAAK+0O,WAGT,OAAOppM,GAOT,YAAA2pM,6BAAA,WACE,GAAIt1O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM37K,EAAa,GACnB,GACEA,EAAWhwD,KAAKpI,KAAKk1O,wBACdl1O,KAAKwJ,MAAMuqO,KACpB,GAAI/zO,KAAKwJ,MAAMuqO,IACb,OAAO37K,EAGX,MAAM,IAAIp5D,MAAMgB,KAAKu1O,wBAOvB,YAAAC,gBAAA,WACE,GAAIx1O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM3pO,EAAcpK,KAAKy1O,cACzB,GAAIz1O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAG,qBAAA,WACE,GAAI11O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM3pO,EAAcpK,KAAK21O,kBACzB,GAAI31O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAK,kBAAA,WACE,GAAI51O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM3pO,EAAcpK,KAAK61O,2BACzB,GAAI71O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAO,qBAAA,WACE,GAAI91O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAI3pO,OAAW,EAMf,GAJEA,EADEpK,KAAK60O,OAAO1qO,MAAQ4pO,GACR/zO,KAAK+1O,sBAEL/1O,KAAK21O,kBAEjB31O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAQvB,YAAAS,0BAAA,WACE,GAAIh2O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM3pO,EAAcpK,KAAK61O,2BACzB,GAAI71O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAU,uBAAA,WACE,GAAIj2O,KAAKwJ,MAAMuqO,IAAuB,CACpC,IAAM3pO,EAAcpK,KAAKk2O,wBACzB,GAAIl2O,KAAKwJ,MAAMuqO,IACb,OAAO3pO,EAGX,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAE,YAAA,WAGE,IAFA,IAAMrrO,EAAc,GACd+rO,EAAan2O,KAAK80O,QAAQzxO,OACvBnB,EAAI,EAAGA,EAAIi0O,IAAcj0O,EAAG,CACnC,IAAMk0O,EAAQp2O,KAAK60O,OACnB,IAAI70O,KAAKwJ,MAAMuqO,IAGb,MAFA3pO,EAAYhC,KAA4BguO,EAAW,OAKvD,GAAIhsO,EAAY/G,QAAU8yO,EACxB,OAAO/rO,EAET,MAAM,IAAIpL,MAAMgB,KAAKu1O,wBAOvB,YAAAI,gBAAA,WAEE,IADA,IAAMvrO,EAAc,CAACpK,KAAKy1O,eACnBz1O,KAAKwJ,MAAMuqO,KAChB3pO,EAAYhC,KAAKpI,KAAKy1O,eAExB,OAAOrrO,GAOT,YAAA2rO,oBAAA,WAEE,IADA,IAAM3rO,EAAc,CAACpK,KAAKw1O,mBACnBx1O,KAAKwJ,MAAMuqO,KAChB3pO,EAAYhC,KAAKpI,KAAKw1O,mBAExB,OAAOprO,GAOT,YAAAyrO,yBAAA,WAEE,IADA,IAAMzrO,EAAc,CAACpK,KAAK01O,wBACnB11O,KAAKwJ,MAAMuqO,KAChB3pO,EAAYhC,KAAKpI,KAAK01O,wBAExB,OAAOtrO,GAOT,YAAA8rO,sBAAA,WAEE,IADA,IAAM9rO,EAAc,CAACpK,KAAK41O,qBACnB51O,KAAKwJ,MAAMuqO,KAChB3pO,EAAYhC,KAAKpI,KAAK41O,qBAExB,OAAOxrO,GAOT,YAAAisO,iBAAA,WACE,IAAMx0C,EACJ7hM,KAAKg1O,YAAYjB,KAAmB/zO,KAAK60O,OAAOhyO,OAASixO,GAI3D,OAHIjyC,GACF7hM,KAAK+0O,WAEAlzC,GAQT,YAAA0zC,oBAAA,WACE,MACE,eACAv1O,KAAK60O,OAAOhyO,MACZ,iBACA7C,KAAK60O,OAAOvoO,SACZ,QACAtM,KAAK40O,OAAO77K,IACZ,KAQJ,YAAAm8K,eAAA,WACE,IAAMkB,EAAQp2O,KAAK60O,OACnB,GAAI70O,KAAKwJ,MAAMuqO,IAAiB,CAC9B,IAAM/lF,EAAkCooF,EAAW,MACnDp2O,KAAK80O,QAAU90O,KAAKm1O,uBACpB,IAAMtzC,EAAU7hM,KAAKq2O,mBACrB,GAAgB,sBAAZroF,EAAkC,CACpC,GAAI6zC,EACF,OAAO,IAAI,GAAmB,IAEhC,IAAMzpI,EAAap4D,KAAKs1O,+BACxB,OAAO,IAAI,GAAmBl9K,GAE9B,IAAMP,EAAOg8K,GAAoB7lF,GACjC,IAAKn2F,EACH,MAAM,IAAI74D,MAAM,0BAA4BgvJ,GAG9C,IAAI5jJ,OAAW,EAEf,GAAIy3L,EAEAz3L,EADc,SAAZ4jJ,EACY,CAAC12F,IAAKA,KAEN,QAGhB,OAAQ02F,GACN,IAAK,QACH5jJ,EAAcpK,KAAKw1O,kBACnB,MAEF,IAAK,aACHprO,EAAcpK,KAAK01O,uBACnB,MAEF,IAAK,UACHtrO,EAAcpK,KAAK41O,oBACnB,MAEF,IAAK,aACHxrO,EAAcpK,KAAK81O,uBACnB,MAEF,IAAK,kBACH1rO,EAAcpK,KAAKg2O,4BACnB,MAEF,IAAK,eACH5rO,EAAcpK,KAAKi2O,yBAQzB,OAAO,IAAIp+K,EAAKztD,EAAapK,KAAK80O,SAGtC,MAAM,IAAI91O,MAAMgB,KAAKu1O,wBAEzB,EA1WA,GAmXA,eAIE,WAAY75C,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAO5C,EAAK46C,sBACyBlyO,IAA5BzE,EAAQ42O,iBAAgC52O,EAAQ42O,gB,EA0GtD,OAzHkB,QAyBhB,YAAAC,OAAA,SAAOz9K,GACL,IAAM47K,EAAQ,IAAI8B,GAAM19K,GAExB,OADe,IAAI29K,GAAO/B,GACZnjN,SAShB,YAAA8hN,oBAAA,SAAoBl6N,EAAMsiL,GACxB,IAAMn7L,EAAOP,KAAKwzO,qBAAqBp6N,EAAMsiL,GACvCj4L,EAAU,IAAI,GAEpB,OADAA,EAAQoE,YAAYtH,GACbkD,GAST,YAAA8vO,qBAAA,SAAqBn6N,EAAMsiL,GAWzB,IAVA,IAAItjI,EAAa,GACX93D,EAAWN,KAAKwzO,qBAAqBp6N,EAAMsiL,GAQ3C5sL,EAAW,GACR5M,EAAI,EAAGgiB,GAPdk0C,EADEp4D,KAAKs2O,kBAA0C,sBAAtBh2O,EAAS2J,UACW,EAE7C81N,qBAEW,CAACz/N,IAGgB+C,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACnD,IAAMuB,EAAU,IAAI,GACpBA,EAAQoE,YAAYuwD,EAAWl2D,IAC/B4M,EAAS1G,KAAK3E,GAEhB,OAAOqL,GAST,YAAA0kO,qBAAA,SAAqBp6N,EAAMsiL,GAEzB,OAAO,GADU17L,KAAKw2O,OAAOp9N,IACiB,EAAOsiL,IASvD,YAAAg4C,iBAAA,SAAiBjwO,EAASi4L,GACxB,IAAMp7L,EAAWmD,EAAQtC,cACzB,OAAIb,EACKN,KAAK4zO,kBAAkBtzO,EAAUo7L,GAEnC,IAST,YAAAi4C,kBAAA,SAAkB7kO,EAAU4sL,GAC1B,GAAuB,GAAnB5sL,EAASzL,OACX,OAAOrD,KAAK0zO,iBAAiB5kO,EAAS,GAAI4sL,GAG5C,IADA,IAAMtjI,EAAa,GACVl2D,EAAI,EAAGgiB,EAAKpV,EAASzL,OAAQnB,EAAIgiB,IAAMhiB,EAC9Ck2D,EAAWhwD,KAAK0G,EAAS5M,GAAGf,eAE9B,IAAMk4B,EAAa,IAAI,GAAmB++B,GAC1C,OAAOp4D,KAAK4zO,kBAAkBv6M,EAAYqiK,IAS5C,YAAAk4C,kBAAA,SAAkBtzO,EAAUo7L,GAC1B,OAAOi7C,GAAO,GAA6Br2O,GAAU,EAAMo7L,KAE/D,EAzHA,CAAkB,IA+HlB,SAASk7C,GAAoBr2O,GAC3B,IAAM6J,EAAc7J,EAAKe,iBACzB,OAA2B,IAAvB8I,EAAY/G,OACP,GAEF+G,EAAYE,KAAK,KAiC1B,SAASusO,GAAyBt2O,GAGhC,IAFA,IAAM6J,EAAc7J,EAAKe,iBACnByzD,EAAQ,GACL7yD,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EACjD6yD,EAAM3sD,KAAKgC,EAAYlI,GAAGoI,KAAK,MAEjC,OAAOyqD,EAAMzqD,KAAK,KAoBpB,SAASwsO,GAAsBv2O,GAG7B,IAFA,IAAMw0D,EAAQ,GACRu2K,EAAQ/qO,EAAKozM,iBACVzxM,EAAI,EAAGgiB,EAAKonN,EAAMjoO,OAAQnB,EAAIgiB,IAAMhiB,EAC3C6yD,EAAM3sD,KAAK,IAAMyuO,GAAyBvL,EAAMppO,IAAM,KAExD,OAAO6yD,EAAMzqD,KAAK,KAoCpB,IAAMysO,GAAkB,CACtB,MAASH,GACT,WAAcC,GACd,QAAWC,GACX,WAlGF,SAAkCv2O,GAGhC,IAFA,IAAMw0D,EAAQ,GACRiiL,EAAaz2O,EAAK0jJ,YACf/hJ,EAAI,EAAGgiB,EAAK8yN,EAAW3zO,OAAQnB,EAAIgiB,IAAMhiB,EAChD6yD,EAAM3sD,KAAK,IAAMwuO,GAAoBI,EAAW90O,IAAM,KAExD,OAAO6yD,EAAMzqD,KAAK,MA6FlB,gBA5DF,SAAuC/J,GAGrC,IAFA,IAAMw0D,EAAQ,GACRiiL,EAAaz2O,EAAK88N,iBACfn7N,EAAI,EAAGgiB,EAAK8yN,EAAW3zO,OAAQnB,EAAIgiB,IAAMhiB,EAChD6yD,EAAM3sD,KAAK,IAAMyuO,GAAyBG,EAAW90O,IAAM,KAE7D,OAAO6yD,EAAMzqD,KAAK,MAuDlB,aAnCF,SAAoC/J,GAGlC,IAFA,IAAMw0D,EAAQ,GACRiiL,EAAaz2O,EAAKw+N,cACf78N,EAAI,EAAGgiB,EAAK8yN,EAAW3zO,OAAQnB,EAAIgiB,IAAMhiB,EAChD6yD,EAAM3sD,KAAK,IAAM0uO,GAAsBE,EAAW90O,IAAM,KAE1D,OAAO6yD,EAAMzqD,KAAK,MA8BlB,mBAxFF,SAA0C/J,GAGxC,IAFA,IAAMw0D,EAAQ,GACRkiL,EAAQ12O,EAAKs/N,gBACV39N,EAAI,EAAGgiB,EAAK+yN,EAAM5zO,OAAQnB,EAAIgiB,IAAMhiB,EAC3C6yD,EAAM3sD,KAAKuuO,GAAOM,EAAM/0O,KAE1B,OAAO6yD,EAAMzqD,KAAK,OA0FpB,SAASqsO,GAAOp2O,GACd,IAAM4J,EAAO5J,EAAK0J,UAEZitO,GAAMC,EADYJ,GAAgB5sO,IACZ5J,GACxB62O,EAAUpD,GAAc7pO,GAC5B,GAA4D,mBAA/B,EAAyB,mBAAkB,CACtE,IAAMkrO,EArCV,SAA8B90O,GAC5B,IAAMorC,EAASprC,EAAKg3I,YAChB89F,EAAU,GAOd,OANI1pM,IAAW,QAAsBA,IAAW,UAC9C0pM,GAnwBM,KAqwBJ1pM,IAAW,QAAsBA,IAAW,UAC9C0pM,GAhwBM,KAkwBDA,EA4BWgC,CAC6C,GAEzDhC,EAAQhyO,OAAS,IACnB+zO,GAAW,IAAM/B,GAGrB,OAAmB,IAAf6B,EAAI7zO,OACC+zO,EAAU,IAAMtD,GAElBsD,EAAU,IAAMF,EAAM,IAG/B,Y,+dC30BMI,GACG,EADHA,GAES,EAFTA,GAGK,EAHLA,GAIS,EAJTA,GAKe,EALfA,GAMW,EANXA,GAOiB,EAPjBA,GAoBgB,GApBhBA,GAqBC,GArBDA,GAsBM,GAGZ,cAIE,WAAY7tM,GACVzpC,KAAKo0N,MAAQ3qL,EACbzpC,KAAKu3O,KAAO,EAEZv3O,KAAKw3O,cAAe,EACpBx3O,KAAKy3O,iBAAkB,EACvBz3O,KAAK03O,OAAQ,EACb13O,KAAK23O,OAAQ,EAEb33O,KAAK43O,MAAQ,KAEb53O,KAAK80O,QAAU,MAwSnB,OAlSE,YAAA+C,UAAA,WACE,OAAO73O,KAAKo0N,MAAM0jB,SAAS93O,KAAKu3O,SAOlC,YAAAQ,WAAA,SAAWC,GACT,OAAOh4O,KAAKo0N,MAAM6jB,WACfj4O,KAAKu3O,MAAQ,GAAK,OACAnzO,IAAnB4zO,EAA+BA,EAAiBh4O,KAAKy3O,kBAQzD,YAAAS,WAAA,SAAWF,GACT,OAAOh4O,KAAKo0N,MAAM+jB,YACfn4O,KAAKu3O,MAAQ,GAAK,OACAnzO,IAAnB4zO,EAA+BA,EAAiBh4O,KAAKy3O,kBAOzD,YAAAnR,UAAA,WAEE,IAAM5mO,EAAS,GAWf,OATAA,EAAO0I,KAAKpI,KAAKk4O,cACjBx4O,EAAO0I,KAAKpI,KAAKk4O,cACbl4O,KAAK03O,OACPh4O,EAAO0I,KAAKpI,KAAKk4O,cAEfl4O,KAAK23O,OACPj4O,EAAO0I,KAAKpI,KAAKk4O,cAGZx4O,GAMT,YAAA0nO,eAAA,WAKE,IAJA,IAAMvlO,EAAY7B,KAAK+3O,aAGjBr4O,EAAS,GACNwC,EAAI,EAAGA,EAAIL,EAAWK,IAC7BxC,EAAO0I,KAAKpI,KAAKsmO,aAGnB,OAAO5mO,GAMT,YAAA8nO,YAAA,WAKE,IAJA,IAAM4Q,EAAWp4O,KAAK+3O,aAGhBzM,EAAQ,GACLppO,EAAI,EAAGA,EAAIk2O,EAAUl2O,IAC5BopO,EAAMljO,KAAKpI,KAAKonO,kBAGlB,OAAOkE,GAOT,YAAA+M,cAAA,SAAcC,GACZ,IACMN,EADYh4O,KAAK63O,YACY,EAE7BU,EAAUv4O,KAAK+3O,WAAWC,GAC1BQ,EAAoBj3O,KAAKonD,OAAiB,UAAV4vL,GAAwB,KACxDxN,EACJnxH,QAAkB,WAAV2+H,IACc,IAAtBC,GACsB,IAAtBA,EACIC,EACJ7+H,QAAkB,WAAV2+H,IACc,IAAtBC,GACsB,IAAtBA,EACIE,EAAU9+H,QAAkB,UAAV2+H,GAClBI,GAAoB,UAAVJ,GAAwB,IAClC5sM,EAAS,CAAC,KAAMo/L,EAAO,IAAM,GAAI0N,EAAO,IAAM,IAAInuO,KAAK,IAEvDsuO,EAAOF,EAAU14O,KAAK+3O,WAAWC,GAAkB,KAEzD,QAAuB5zO,IAAnBk0O,GAAgCA,IAAmBK,EACrD,MAAM,IAAI35O,MAAM,gCAAkC25O,GAGpD,GAAI34O,KAAKw3O,aAAc,CAErB,GAAIx3O,KAAKy3O,kBAAoBO,EAC3B,MAAM,IAAIh5O,MAAM,uBAElB,GAAIgB,KAAK80O,UAAYnpM,EACnB,MAAM,IAAI3sC,MAAM,gCAElB,GAAI45O,GAAQ54O,KAAK43O,QAAUgB,EACzB,MAAM,IAAI55O,MAAM,8CAGlBgB,KAAKy3O,gBAAkBO,EACvBh4O,KAAK03O,MAAQ3M,EACb/qO,KAAK23O,MAAQc,EACbz4O,KAAK80O,QAAUnpM,EACf3rC,KAAK43O,MAAQgB,EACb54O,KAAKw3O,cAAe,EAGtB,OAAOmB,GAOT,YAAAE,eAAA,SAAeF,GACb,OAAQA,GACN,KAAKrB,GACH,OAAOt3O,KAAKsmO,YAEd,KAAKgR,GACH,OAAOt3O,KAAKonO,iBAEd,KAAKkQ,GACL,KAAKA,GACH,OAAOt3O,KAAKwnO,cAEd,KAAK8P,GACH,OAAOt3O,KAAKwmO,iBAEd,KAAK8Q,GACH,OAAOt3O,KAAK0mO,sBAEd,KAAK4Q,GACL,KAAKA,GACL,KAAKA,GACH,OAAOt3O,KAAK4mO,mBAEd,KAAK0Q,GACH,OAAOt3O,KAAK84O,yBAEd,QACE,MAAM,IAAI95O,MACR,iCAAmC25O,EAAS,eASpD,YAAAI,aAAA,SAAaT,GACX,OAAOt4O,KAAK64O,eAAe74O,KAAKq4O,cAAcC,KAQhD,YAAAU,kBAAA,SAAkBC,EAAQX,GAIxB,IAHA,IAAMY,EAAMl5O,KAAK+3O,aAEXt7I,EAAQ,GACLv6F,EAAI,EAAGA,EAAIg3O,EAAKh3O,IAAK,CAC5B,IAAM0C,EAASq0O,EAAOv4O,KAAKV,KAAMs4O,GAC7B1zO,GACF63F,EAAMr0F,KAAKxD,GAIf,OAAO63F,GAMT,YAAA+pI,eAAA,WACE,OAAOxmO,KAAKg5O,kBAAkBh5O,KAAK+4O,aAAczB,KAMnD,YAAA5Q,oBAAA,WACE,OAAO1mO,KAAKg5O,kBACVh5O,KAAK+4O,aACLzB,KAOJ,YAAA1Q,iBAAA,WACE,OAAO5mO,KAAKg5O,kBAAkBh5O,KAAK+4O,aAAczB,KAMnD,YAAAwB,uBAAA,WACE,OAAO94O,KAAKg5O,kBAAkBh5O,KAAKihO,eAMrC,YAAAA,aAAA,WACE,IAAM0X,EAAS34O,KAAKq4O,gBACdzzO,EAAS5E,KAAK64O,eAAeF,GAEnC,OAAQA,GACN,KAAKrB,GACH,OAAO,IAAI,GAC4C,EACrDt3O,KAAK80O,SAGT,KAAKwC,GACH,OAAO,IAAI,GACmD,EAC5Dt3O,KAAK80O,SAGT,KAAKwC,GACL,KAAKA,GACH,OAAO,IAAI,GAC0D,EAGnEt3O,KAAK80O,SAGT,KAAKwC,GACH,OAAO,IAAI,GACmD,EAC5Dt3O,KAAK80O,SAGT,KAAKwC,GACH,OAAO,IAAI,GAC0D,EAGnEt3O,KAAK80O,SAGT,KAAKwC,GACL,KAAKA,GACL,KAAKA,GACH,OAAO,IAAI,GACiE,EAG1Et3O,KAAK80O,SAGT,KAAKwC,GACH,OAAO,IAAI,GACmD,GAGhE,QACE,OAAO,OAOb,YAAA6B,QAAA,WACE,OAAOn5O,KAAK43O,OAEhB,EAvTA,GAyTA,cASE,WAAY5zO,GACVA,EAAOA,GAAQ,GAGfhE,KAAK80O,QAAU9wO,EAAK2nC,OACpB3rC,KAAKy3O,iBAAwC,IAAtBzzO,EAAKo1O,aAE5Bp5O,KAAKq5O,SAAwB,IAAdr1O,EAAKs1O,KAGpBt5O,KAAKu5O,YAAc,GASnBv5O,KAAKw5O,QAAU,GAAO,CAAC12J,EAAG,EAAGC,EAAG,EAAG02J,EAAG,EAAGC,EAAG,GAAI11O,EAAK21O,QA+PzD,OAzPE,YAAAC,WAAA,SAAW/2O,GACT7C,KAAKu5O,YAAYnxO,KAAK,CAAC,EAAGvF,KAM5B,YAAAg3O,YAAA,SAAYh3O,GACV7C,KAAKu5O,YAAYnxO,KAAK,CAAC,EAAGvF,KAM5B,YAAAi3O,YAAA,SAAYj3O,GACV7C,KAAKu5O,YAAYnxO,KAAK,CAAC,EAAGvF,KAO5B,YAAAkpO,WAAA,SAAWrsO,EAAQisC,GAajB,IALA,IAAMouM,EAAY,SAChB,KACApuM,EAAOx5B,MAAM,IAAI7T,KAAI,SAAConC,EAAMj+B,G,MAAQ,aAAGi+B,GAAOhmC,EAAO+H,GAAI,MAGxC,MAAAzH,KAAK80O,QAAL,eAAc,CAA5B,IAAMpvM,EAAI,KACb1lC,KAAK85O,YACHp0M,KAAQq0M,EAAYA,EAAUr0M,GAAQ1lC,KAAKw5O,QAAQ9zM,MASzD,YAAAs0M,gBAAA,SAAgBt6O,EAAQisC,GACtB3rC,KAAK65O,YAAYn6O,EAAO2D,QACxB,IAAK,IAAInB,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IACjClC,KAAK+rO,WAAWrsO,EAAOwC,GAAIypC,IAQ/B,YAAAsuM,aAAA,SAAa3O,EAAO3/L,GAClB3rC,KAAK65O,YAAYvO,EAAMjoO,QACvB,IAAK,IAAInB,EAAI,EAAGA,EAAIopO,EAAMjoO,OAAQnB,IAChClC,KAAKg6O,gBAAgB1O,EAAMppO,GAAIypC,IAQnC,YAAAuuM,eAAA,SAAe3B,EAASK,GACtBL,GAAW,IACPv4O,KAAK80O,QAAQ9rO,QAAQ,MAAQ,IAC/BuvO,GAAWv4O,KAAKq5O,QAAU,WAAa,KAErCr5O,KAAK80O,QAAQ9rO,QAAQ,MAAQ,IAC/BuvO,GAAWv4O,KAAKq5O,QAAU,WAAa,KAErCr5O,KAAKq5O,SAAW1xN,OAAOy7C,UAAUw1K,KACnCL,GAAW,WAGbv4O,KAAK45O,WAAW55O,KAAKy3O,gBAAkB,EAAI,GAC3Cz3O,KAAK65O,YAAYtB,GACbv4O,KAAKq5O,SAAW1xN,OAAOy7C,UAAUw1K,IACnC54O,KAAK65O,YAAYjB,IAQrB,YAAA5M,gBAAA,SAAgBtsO,EAAQisC,GACtB3rC,KAAK65O,YAAYn6O,EAAO2D,QACxB,IAAK,IAAInB,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IACjClC,KAAKk6O,eAAe,GACpBl6O,KAAK+rO,WAAWrsO,EAAOwC,GAAIypC,IAQ/B,YAAAwuM,qBAAA,SAAqBz6O,EAAQisC,GAC3B3rC,KAAK65O,YAAYn6O,EAAO2D,QACxB,IAAK,IAAInB,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IACjClC,KAAKk6O,eAAe,GACpBl6O,KAAKg6O,gBAAgBt6O,EAAOwC,GAAIypC,IAQpC,YAAAyuM,kBAAA,SAAkB16O,EAAQisC,GACxB3rC,KAAK65O,YAAYn6O,EAAO2D,QACxB,IAAK,IAAInB,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IACjClC,KAAKk6O,eAAe,GACpBl6O,KAAKi6O,aAAav6O,EAAOwC,GAAIypC,IAOjC,YAAA0uM,wBAAA,SAAwBjiL,GACtBp4D,KAAK65O,YAAYzhL,EAAW/0D,QAE5B,IAAK,IAAInB,EAAI,EAAGA,EAAIk2D,EAAW/0D,OAAQnB,IACrClC,KAAKkhO,cAAc9oK,EAAWl2D,KASlC,YAAAo4O,kBAAA,SAAkB/5O,EAAMorC,QAAA,IAAAA,IAAAA,EAAS,SAM/B,IAA4B7wB,EAAGsP,EAkB/B,GAAI7pB,aAAgB,GAClB,OAnB0Bua,EAmBAva,EAAKg3I,gBAnBFntH,EAmBeuhB,GAjBnC7wB,EAGLA,IAAM,QAEDsP,EAELA,IAAM,QAEDtP,EAIF,MAOT,GAAIva,aAAgB,GAElB,IADA,IAAM02O,EAAQ12O,EAAKw/N,qBACV79N,EAAI,EAAGA,EAAI+0O,EAAM5zO,QAAUsoC,IAAW,MAAmBzpC,IAChEypC,EAAS3rC,KAAKs6O,kBAAkBrD,EAAM/0O,GAAIypC,GAI9C,OAAOA,GAOT,YAAAu1L,cAAA,SAAc3gO,EAAMq4O,GAIlB,IAAM2B,EAAS,CACb7qO,MAAO4nO,GACP9a,WAAY8a,GACZj1O,QAASi1O,GACTznO,WAAYynO,GACZra,gBAAiBqa,GACjBrnO,aAAcqnO,GACd3X,mBAAoB2X,IAEhBtpF,EAAWztJ,EAAK0J,UAChB0uO,EAAS4B,EAAOvsF,GAEtB,IAAK2qF,EACH,MAAM,IAAI35O,MAAM,gBAAkBgvJ,EAAW,sBAI1ChuJ,KAAK80O,UACR90O,KAAK80O,QAAU90O,KAAKs6O,kBAAkB/5O,IAGxCP,KAAKk6O,eAAevB,EAAQC,GAExBr4O,aAAgB,IACA,CAChBmP,MAAO1P,KAAK+rO,WACZvP,WAAYx8N,KAAKg6O,gBACjB33O,QAASrC,KAAKi6O,aACdpqO,WAAY7P,KAAKgsO,gBACjB/O,gBAAiBj9N,KAAKm6O,qBACtBlqO,aAAcjQ,KAAKo6O,mBAEXpsF,GAAUttJ,KAAKV,KAAMO,EAAKe,iBAAkBf,EAAKg3I,aAClDh3I,aAAgB,IACzBP,KAAKq6O,wBAAwB95O,EAAKw/N,uBAItC,YAAAya,UAAA,sBACQC,EAAaz6O,KAAKu5O,YAAYtxO,QAAO,SAACE,EAAK6B,GAAS,OAAA7B,EAAM6B,EAAK,KAAI,GACnE4uD,EAAS,IAAI8hL,YAAYD,GACzBhxM,EAAO,IAAIkxM,SAAS/hL,GAEtBtU,EAAM,EAmBV,OAlBAtkD,KAAKu5O,YAAYhyO,SAAQ,SAACyC,GACxB,OAAQA,EAAK,IACX,KAAK,EACHy/B,EAAKmxM,SAASt2L,EAAKt6C,EAAK,IACxB,MACF,KAAK,EACHy/B,EAAKoxM,UAAUv2L,EAAKt6C,EAAK,GAAI,EAAKytO,iBAClC,MACF,KAAK,EACHhuM,EAAKqxM,WAAWx2L,EAAKt6C,EAAK,GAAI,EAAKytO,iBAMvCnzL,GAAOt6C,EAAK,MAGP4uD,GAEX,EA3RA,GAgTA,eAIE,WAAY8iI,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAE5C,EAAK66C,gBAAkB38H,QAAQj6G,EAAQ42O,iBAEvC,EAAKwE,WAAa,KAElB,EAAKC,MAAuB,IAAhBr7O,EAAQs7O,IACpB,EAAKC,eAAyC,IAAzBv7O,EAAQy5O,aAC7B,EAAK+B,OAAyB,IAAjBx7O,EAAQ25O,KAErB,EAAKxE,QAAUn1O,EAAQy7O,eACvB,EAAKC,SAAW17O,EAAQ27O,SAAW,EACnC,EAAKC,SAAW57O,EAAQ67O,SAAW,EAEnC,EAAK5D,MAAQj4O,EAAQi5O,K,EA+JzB,OApLkB,QA2BhB,YAAA3uO,QAAA,WACE,OAAOjK,KAAKg7O,KAAO,OAAS,eAW9B,YAAAxqE,YAAA,SAAY71J,EAAQ+gL,GAClB,OAAO,IAAI,GAAQ,CACjBp7L,SAAUN,KAAKihO,aAAatmN,EAAQ+gL,MAYxC,YAAA5tE,aAAA,SAAanzG,EAAQ+gL,GACnB,IACMp7L,EAAWN,KAAKihO,aAAatmN,EAAQ+gL,GAM3C,OALI17L,KAAKu2O,iBAAmBj2O,aAAoB,GACjCA,EAASy/N,qBAET,CAACz/N,IAEEhC,KAAI,SAACgC,GAAa,WAAI,GAAQ,CAACA,SAAQ,QAW3D,YAAA2gO,aAAA,SAAatmN,EAAQ+gL,GACnB,IAAMjyJ,EAAOgyM,GAAY9gO,GACzB,IAAK8uB,EACH,OAAO,KAGT,IACMnpC,EADS,IAAIo7O,GAAUjyM,GACLw3L,eAExBjhO,KAAK+6O,WAAatxM,EAClB,IAAM9pC,EAAUK,KAAK+gO,eAAepmN,EAAQ+gL,GAG5C,OAFA17L,KAAK+6O,WAAa,KAEX,GAA6Bz6O,GAAU,EAAOX,IAUvD,YAAA+gO,eAAA,SAAe/lN,GACb,IAAM8uB,EAAOzpC,KAAK+6O,YAAcU,GAAY9gO,GAC5C,GAAK8uB,EAAL,CAIA,IAAMwvM,EAAS,IAAIyC,GAAUjyM,GAG7B,OAFAwvM,EAAOZ,gBAGJY,EAAOE,WAAa,GAAc,QAAUF,EAAOE,iBACpD/0O,IAYJ,YAAA23D,aAAA,SAAat4D,EAASi4L,GACpB,OAAO17L,KAAKkhO,cAAcz9N,EAAQtC,cAAeu6L,IAWnD,YAAA9tE,cAAA,SAAc9+G,EAAU4sL,GACtB,OAAO17L,KAAKkhO,cACV,IAAI,GAAmBpyN,EAASxQ,KAAI,SAACyQ,GAAM,OAAAA,EAAE5N,kBAC7Cu6L,IAYJ,YAAAwlC,cAAA,SAAc5gO,EAAUo7L,GACtB,IAAM/7L,EAAUK,KAAKghO,aAAatlC,GAE5BigD,EAAS,IAAIC,GAAU,CAC3BjwM,OAAQ3rC,KAAK80O,QACbsE,aAAcp5O,KAAKk7O,cACnB5B,KAAMt5O,KAAKm7O,MAEXxB,OAAQ,CACNF,EAAGz5O,KAAKq7O,SACR3B,EAAG15O,KAAKu7O,YAKR3C,EAAOjxN,OAAOy7C,UAAUpjE,KAAK43O,OAASjwN,OAAO3nB,KAAK43O,OAAS,KAC/D,IAAmB,IAAf53O,KAAK43O,QAAoBjwN,OAAOy7C,UAAUpjE,KAAK43O,OAAQ,CACzD,IAAMhX,EACJjhO,EAAQihO,gBAAkB,GAAcjhO,EAAQihO,gBAClD,GAAIA,EAAgB,CAClB,IAAM3hO,EAAO2hO,EAAex+M,UACE,IAA1BnjB,EAAK+J,QAAQ,WACf4vO,EAAOjxN,OAAO1oB,EAAKk6B,UAAU,MAKnCwiN,EAAOza,cACL,GAA6B5gO,GAAU,EAAMX,GAC7Ci5O,GAEF,IAAMhgL,EAAS+iL,EAAOnB,YAEtB,OAAOx6O,KAAKg7O,KAQhB,SAAyBpiL,GACvB,IAAMnvB,EAAO,IAAI1d,WAAW6sC,GAC5B,OAAO93D,MAAMoX,KAAKuxB,EAAKtb,UACpB7vB,KAAI,SAACqvB,GAAM,OAACA,EAAI,GAAK,IAAM,IAAMhG,OAAOgG,GAAG1K,SAAS,IAAI28B,iBACxDt1C,KAAK,IAZauxO,CAAgBjjL,GAAUA,GAEjD,EApLA,CAAkB,IAiNlB,SAAS6iL,GAAY9gO,GACnB,MAAsB,iBAAXA,EAbb,SAAyBvB,GAEvB,IADA,IAAMw/C,EAAS,IAAI7sC,WAAW3S,EAAK/V,OAAS,GACnCnB,EAAI,EAAGA,EAAIkX,EAAK/V,OAAS,EAAGnB,IACnC02D,EAAO12D,GAAKoW,SAASc,EAAKwN,OAAW,EAAJ1kB,EAAO,GAAI,IAE9C,OAAO,IAAIy4O,SAAS/hL,EAAOA,QASlBkjL,CAAgBnhO,GACd+/N,YAAYqB,OAAOphO,GACxBA,aAAkBggO,SACbhgO,EAEF,IAAIggO,SAAShgO,EAAOi+C,OAAQj+C,EAAOqhO,WAAYrhO,EAAO8/N,YACpD9/N,aAAkB+/N,YACpB,IAAIC,SAAShgO,GAEb,KAIX,YCt0BA,SA1CA,yBAwCA,OAhCE,YAAA7D,KAAA,SAAK6D,GACH,GAAKA,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKi8O,iBAAiB54D,GACxB,OAAI2+C,GAAWrnN,GACb3a,KAAKi8O,iBAAyC,GAE9Cj8O,KAAKk8O,aAAoC,GAPhD,OAAO,MAeX,YAAAD,iBAAA,SAAiB54D,GACf,IAAK,IAAIzuK,EAAIyuK,EAAInsK,WAAYtC,EAAGA,EAAIA,EAAEu/J,YACpC,GAAIv/J,EAAEgwD,UAAYg9J,KAAKiD,aACrB,OAAO7kO,KAAKk8O,aAAoC,GAGpD,OAAO,MAQT,YAAAA,aAAA,SAAaznO,KACf,EAxCA,GCGO,SAAS0nO,GAAS1nO,GACvB,OAAOA,EAAK4xN,eAPQ,+BAOsB,Q,+dCUtC+V,GAAiB,CAAC,KAAM,8BAOxBC,GAAU5Y,GAAgB2Y,GAAgB,CAC9C,QAAW3Z,IA0Ub,SAAqBhuN,EAAM0tN,GACzB,OAAO8B,GAAgB,GAAIqY,GAAiB7nO,EAAM0tN,MA1UlD,WAAcM,IAgUhB,SAAwBhuN,EAAM0tN,GAC5B,OAAO8B,GAAgB,GAAIsY,GAAoB9nO,EAAM0tN,QAzTjDoa,GAAqB9Y,GAAgB2Y,GAAgB,CACzD,QAAW3Z,IAseb,SAAqBhuN,EAAM0tN,GACzB,OAAO8B,GAAgB,GAAIuY,GAAiB/nO,EAAM0tN,MAtelD,UAAaM,IAmWf,SAAuBhuN,EAAM0tN,GAC3B,OAAO8B,GAAgB,GAAIwY,GAAmBhoO,EAAM0tN,MAnWpD,MAASM,IA2WX,SAA6BhuN,EAAM0tN,GACjC,IAAMua,EAAczY,GAAgB,GAAI0Y,GAAeloO,EAAM0tN,GAE7D,QAA6B/9N,IAAzBs4O,EAAmB,MACrB,OAAOv9O,OAAOmD,OAAOo6O,EAAaE,GAAUnoO,EAAM0tN,IAGpD,OAAOua,OAzWT,eACE,mBACE,cAAO,K,OAKP,EAAKptO,aAAUlL,E,EAmBnB,OA1B8B,QAc5B,YAAA83O,aAAA,SAAaznO,GACXzU,KAAKsP,QAAUmF,EAAKmpB,aAAa,WAAWhU,OAC5C,IAAMizN,EAAsB5Y,GAC1B,CACE,QAAWjkO,KAAKsP,SAElB+sO,GACA5nO,EACA,IAEF,OAAOooO,GAA4C,MAEvD,EA1BA,CAA8B,IAiCxBP,GAAkB7Y,GAAgB2Y,GAAgB,CACtD,KAAQ3Z,GAAyBsG,IACjC,MAAStG,GAAyBsG,IAClC,SAAYtG,GAAyBsG,IACrC,YAAetG,GAAyBqa,IACxC,eAAkBra,GAAyB0Z,IAC3C,mBAAsB1Z,IAuRxB,SAAgChuN,EAAM0tN,GACpC,OAAO8B,GAAgB,GAAI8Y,GAA6BtoO,EAAM0tN,MAvR9D,KAAQM,GAAyBsG,IACjC,kBAAqBtG,GAAyBsG,IAC9C,WAActG,GAAyBoG,IACvC,SAAYpG,GAAyBoG,IACrC,UAAapG,GAAyBoG,MAQlCkU,GAA8BtZ,GAAgB2Y,GAAgB,CAClE,qBAAwB3Z,IAkR1B,SAAkChuN,EAAM0tN,GACtC,OAAO8B,GAAgB,GAAI+Y,GAAwBvoO,EAAM0tN,MAlRzD,gBAAmBM,GAAyBsG,IAC5C,eAAkBtG,IAyRpB,SAA4BhuN,EAAM0tN,GAChC,OAAO8B,GAAgB,GAAIgZ,GAAyBxoO,EAAM0tN,MAzR1D,sBAAyBM,GAAyBsG,IAClD,0BAA6BtG,GAAyBsG,IACtD,6BAAgCtG,GAAyBsG,MAQrDiU,GAAyBvZ,GAAgB2Y,GAAgB,CAC7D,cAAiB3Z,GAAyBsG,IAC1C,oBAAuBtG,GAAyBsG,MAQ5CkU,GAA0BxZ,GAAgB2Y,GAAgB,CAC9D,YAAe3Z,GAAyBsG,IACxC,QAAWtG,GAAyBsG,IACpC,KAAQtG,GAAyBsG,IACjC,gBAAmBtG,GAAyBsG,IAC5C,SAAYtG,GAAyBsG,IACrC,QAAWtG,GAAyBsG,MAQhC0T,GAAoBhZ,GAAgB2Y,GAAgB,CACxD,OAAUha,GAAgB2G,MAQtB4T,GAAgBlZ,GAAgB2Y,GAAgB,CACpD,KAAQ3Z,GAAyBsG,IACjC,MAAStG,GAAyBsG,IAClC,SAAYtG,GAAyBsG,IACrC,YAAetG,GAAyBqa,IACxC,IAAOxa,GAAyByG,IAChC,yBAA4BtG,IAwJ9B,SAAqChuN,EAAM0tN,GACzC,IAAM+a,EAAwBjZ,GAC5B,GACAkZ,GACA1oO,EACA0tN,GAEF,IAAK+a,EACH,OAEF,IAAME,EAEHF,EAA2C,mBACxCG,EAEHH,EAA2C,mBACxCI,EAEHJ,EAA2C,mBACxCK,EAEHL,EAA2C,mBAC9C,QACyB94O,IAAvBg5O,QACuBh5O,IAAvBi5O,QACuBj5O,IAAvBk5O,QACuBl5O,IAAvBm5O,EAEA,OAEF,MAAO,CACLH,EACAC,EACAC,EACAC,MAvLF,YAAejb,IA4HjB,SAAyB7tN,EAAM0tN,GAC7B,IAAM7mN,EAAS,CACbstN,GAAkBn0N,EAAKmpB,aAAa,SACpCgrM,GAAkBn0N,EAAKmpB,aAAa,SACpCgrM,GAAkBn0N,EAAKmpB,aAAa,SACpCgrM,GAAkBn0N,EAAKmpB,aAAa,UAGhC9W,EAAc,CAClB8hN,GAAkBn0N,EAAKmpB,aAAa,SACpCgrM,GAAkBn0N,EAAKmpB,aAAa,UAGtC,MAAO,CACL,IAAOnpB,EAAKmpB,aAAa,OACzB,OAAUtiB,EACV,IAAOwL,MA3IT,UAAaw7M,IAkVf,SAAuB7tN,EAAM0tN,GAW3B,MAVwB,CACtB,KAAQ1tN,EAAKmpB,aAAa,QAC1B,MAASnpB,EAAKmpB,aAAa,SAC3B,WAAcnpB,EAAKmpB,aAAa,cAChC,QAAWnpB,EAAKmpB,aAAa,WAC7B,eAAkB2qM,GAAkB9zN,EAAKmpB,aAAa,mBACtD,aAAgB2qM,GAAkB9zN,EAAKmpB,aAAa,iBACpD,QAAW2qM,GAAkB9zN,EAAKmpB,aAAa,YAC/C,OAAUmrM,GAAWt0N,OA1VvB,YAAeguN,IAiHjB,SAAyBhuN,EAAM0tN,GAC7B,OAAO8B,GAAgB,GAAIuZ,GAAqB/oO,EAAM0tN,MAjHtD,aAAgBG,IAkalB,SAA0B7tN,EAAM0tN,GAC9B,IAAMsb,EAAkBC,GAAyBjpO,EAAM0tN,GACvD,GAAIsb,EAEF,OADAA,EAAsB,KAAIhpO,EAAKmpB,aAAa,QACrC6/M,EAET,UAvaA,WAAcnb,GAAyByG,IACvC,YAAezG,IA8ajB,SAAyB7tN,EAAM0tN,GAC7B,IAAMwb,EAAiBD,GAAyBjpO,EAAM0tN,GACtD,GAAIwb,EAEF,OADAA,EAAqB,KAAIlpO,EAAKmpB,aAAa,QACpC+/M,EAET,UAnbA,QAAWrb,GAAyBob,IACpC,eAAkBpb,GAAyBob,IAC3C,MAASpb,IAybX,SAAmB7tN,EAAM0tN,GACvB,OAAO8B,GAAgB,GAAI2Z,GAAenpO,EAAM0tN,MAzbhD,oBAAuBM,GAAyBkG,IAChD,oBAAuBlG,GAAyBkG,IAChD,MAASrG,GAAyBsa,MAQ9BY,GAAsB/Z,GAAgB2Y,GAAgB,CAC1D,MAAS3Z,GAAyBsG,IAClC,eAAkBtG,GAAyB0Z,IAC3C,QAAW1Z,GAAyBob,MAQhCV,GAAqC1Z,GAAgB2Y,GAAgB,CACzE,mBAAsB3Z,GAAyBkG,IAC/C,mBAAsBlG,GAAyBkG,IAC/C,mBAAsBlG,GAAyBkG,IAC/C,mBAAsBlG,GAAyBkG,MAQ3C6T,GAAkB/Y,GAAgB2Y,GAAgB,CACtD,gBAAmB3Z,GAAyBqb,IAC5C,OAAUrb,GAAyBqb,IACnC,eAAkBrb,GAAyBqb,MAQvCC,GAAwBta,GAAgB2Y,GAAgB,CAC5D,OAAU9Z,GAAyByG,IACnC,QAAWzG,IAiUb,SAAqB7tN,EAAM0tN,GACzB,OAAO8B,GAAgB,GAAI+Z,GAAiBvpO,EAAM0tN,QA1T9C6b,GAAkBva,GAAgB2Y,GAAgB,CACtD,KAAQ3Z,IAiUV,SAAkBhuN,EAAM0tN,GACtB,OAAO8B,GAAgB,GAAIga,GAAcxpO,EAAM0tN,QA1T3C8b,GAAexa,GAAgB2Y,GAAgB,CACnD,IAAO3Z,GAAyBib,IAChC,KAAQjb,GAAyBib,MAQ7BE,GAAgBna,GAAgB2Y,GAAgB,CACpD,KAAQ3Z,GAAyBsG,IACjC,MAAStG,GAAyBsG,IAClC,SAAYtG,GAAyBsG,IACrC,UAAazG,GAAyBub,IACtC,cAAiBpb,GAAyBib,IAC1C,SAAYjb,GAAyBib,MAQjCQ,GAAgCza,GAAgB2Y,GAAgB,CACpE,OAAU3Z,GAAyBsG,IACnC,eAAkBtG,GAAyB0Z,MAQvCgC,GAAsB1a,GAAgB2Y,GAAgB,CAC1D,QAAWha,GAAgB2G,MA0J7B,SAAS6T,GAAUnoO,EAAM0tN,GACvB,IAAMic,EACJjc,EAAYA,EAAY9+N,OAAS,GAG7Bq5O,EAAczY,GAAgB,GAAI0Y,GAAeloO,EAAM0tN,GAE7D,GAAKua,EAAL,CAGA,IAAI78K,EAAY0oK,GAAkB9zN,EAAKmpB,aAAa,mBAClCx5B,IAAdy7D,IACFA,EAAYu+K,EAA6B,WAE3C1B,EAAuB,eAAkBt4O,IAAdy7D,GAA0BA,EAErD,IAAIw+K,EAAWvV,GAA6Br0N,EAAKmpB,aAAa,kBAC7Cx5B,IAAbi6O,IACFA,EAAWD,EAA4B,UAEzC1B,EAAsB,SAAI2B,EAE1B,IAAIC,EAAS/V,GAAkB9zN,EAAKmpB,aAAa,gBAClCx5B,IAAXk6O,IACFA,EAASF,EAA0B,QAErC1B,EAAoB,YAAet4O,IAAXk6O,GAAuBA,EAE/C,IAAIC,EAAYhW,GAAkB9zN,EAAKmpB,aAAa,mBAClCx5B,IAAdm6O,IACFA,EAAYH,EAA6B,WAE3C1B,EAAuB,eAAkBt4O,IAAdm6O,GAA0BA,EAErD,IAAIC,EAAa5V,GAAkBn0N,EAAKmpB,aAAa,eAChD4gN,IACHA,EAAaJ,EAA8B,YAE7C1B,EAAwB,WAAI8B,EAE5B,IAAIC,EAAc7V,GAAkBn0N,EAAKmpB,aAAa,gBACjD6gN,IACHA,EAAcL,EAA+B,aAE/C1B,EAAyB,YAAI+B,EAGb,CAAC,QAAS,MAAO,gBACzBl3O,SAAQ,SAAUkB,GACxB,GAAIA,KAAO21O,EAAmB,CAC5B,IAAMM,EAAahC,EAAYj0O,IAAQ,GACvCi0O,EAAYj0O,GAAOi2O,EAAWr2O,OAAO+1O,EAAkB31O,QAmB3D,MAfoB,CAClB,2BACA,cACA,YACA,cACA,sBACA,uBAEUlB,SAAQ,SAAUkB,GAC5B,KAAMA,KAAOi0O,GAAc,CACzB,IAAMiC,EAAcP,EAAkB31O,GACtCi0O,EAAYj0O,GAAOk2O,MAIhBjC,GA2BT,SAASgB,GAAyBjpO,EAAM0tN,GACtC,OAAO8B,GAAgB,GAAIia,GAA+BzpO,EAAM0tN,GAmClE,SAAS2b,GAAkBrpO,EAAM0tN,GAC/B,OAAO8B,GAAgB,GAAI8Z,GAAuBtpO,EAAM0tN,GAQ1D,SAAS0b,GAA8BppO,EAAM0tN,GAC3C,IAAMyc,EAAuBlB,GAAyBjpO,EAAM0tN,GAC5D,GAAIyc,EAAsB,CACxB,IAAM/pN,EAAO,CACXi0M,GAA6Br0N,EAAKmpB,aAAa,UAC/CkrM,GAA6Br0N,EAAKmpB,aAAa,YAGjD,OADAghN,EAA2B,KAAI/pN,EACxB+pN,GA+CX,SAAS9B,GAAgBroO,EAAM0tN,GAC7B,OAAO8B,GAAgB,GAAIka,GAAqB1pO,EAAM0tN,GAGxD,Y,+dC3cA,SApIA,YAIE,WAAYzmC,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAM5C,EAAKo0C,WAAa,yCAMlB,EAAKC,WAAa,IAAI,GAMtB,EAAK8O,QAAUl/O,EAAQojB,OAASpjB,EAAQojB,OAAS,K,EAyGrD,OAlIgC,QA+B9B,YAAA8yF,UAAA,WACE,OAAO71G,KAAK6+O,SAMd,YAAAniD,UAAA,SAAU35K,GACR/iB,KAAK6+O,QAAU97N,GASjB,YAAA+7N,cAAA,SAAcrqO,EAAM0tN,GAClB1tN,EAAK2Y,aAAa,eAAgBptB,KAAK8vO,YACvC,IAAMtN,EAAY/tN,EAAK+tN,UAEnB1zN,EAAW,GACf,GAA+B,IAA3B2F,EAAK3G,WAAWzK,OAClB,OAAOyL,EAET,GAAiB,eAAb0zN,EACF,IAAK,IAAItgO,EAAI,EAAGgiB,EAAKzP,EAAK3G,WAAWzK,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACxD,IAAMsC,EAAQiQ,EAAK3G,WAAW5L,GAC9B,GAAIsC,EAAMogE,WAAag9J,KAAKiD,aAA5B,CAIA,IAAMka,EAAsC,EACtCzsK,EAAU6vJ,EAAY,GAGtBp8M,EAAYg5N,EAAavc,UAAUj5N,QA5EzB,SA4E2C,IAE3D,IAAIvJ,KAAK6+O,SAAY7mN,EAASh4B,KAAK6+O,QAAS94N,GAA5C,CAIA,IAAM4L,EAAc5L,EAxFF,WA0FlBusD,EAAqB,YAAI3gD,EACzB2gD,EAAmB,UAAItyE,KAAK8vO,WAG5B,IAAM9L,EAAU,GAChBA,EAAQryM,GAAeywM,GACrBpiO,KAAK+vO,WAAWlK,mBAChB7lO,KAAK+vO,YAEP,IAAMhM,EAAYN,GAChB,CAACnxJ,EAAmB,UAAG,MACvB0xJ,GAEF+a,EAAa3xN,aAAa,eAAgBptB,KAAK8vO,YAC/C,IAAMkP,EAAgB/a,GACpB,GAEAF,EACAgb,EACA5c,EACAniO,KAAK+vO,YAEHiP,GACF,EAAOlwO,EAAUkwO,KAIvB,GAAiB,qBAAbxc,EAAkC,CACpC,IAAMyc,EAAchb,GAClB,GACAjkO,KAAK+vO,WAAWtK,2BAChBhxN,EACA,CAAC,IACDzU,KAAK+vO,YAEHkP,IACFnwO,EAAWmwO,GAGf,OAAOnwO,GAST,YAAA81N,qBAAA,SAAqBnwN,EAAMinL,GACzB,IAAM/7L,EAAU,GAIhB,OAHI+7L,GACF,GAAO/7L,EAASK,KAAK+gO,eAAetsN,EAAMinL,IAErC17L,KAAK8+O,cAAcrqO,EAAM,CAAC9U,KAErC,EAlIA,CAAgC,I,+dChB1B,GAAiB,CAAC,KAAM,kCAOxB,GAAU8jO,GAAgB,GAAgB,CAC9C,sBAAyBhB,IA4Q3B,SAAmChuN,EAAM0tN,GACvC,OAAO8B,GAAgB,GAAIib,GAAgCzqO,EAAM0tN,MA5QjE,gBAAmBM,IA6RrB,SAA6BhuN,EAAM0tN,GACjC,OAAO8B,GAAgB,GAAIkb,GAA0B1qO,EAAM0tN,MA7R3D,mBAAsBM,IAwPxB,SAAgChuN,EAAM0tN,GACpC,OAAO8B,GAAgB,GAAImb,GAA6B3qO,EAAM0tN,QAtPhE,eACE,a,OACE,cAAO,KAWX,OAbkB,QAShB,YAAA+Z,aAAA,SAAaznO,GACX,IAAM4qO,EAAYpb,GAAgB,GAAI,GAASxvN,EAAM,IACrD,OAAO4qO,GAAwB,MAEnC,EAbA,CAAkB,IAoBZC,GAAkB7b,GAAgB,GAAgB,CACtD,cAAiBhB,GAAyBsG,IAC1C,KAAQtG,GAAyBsG,IACjC,mBAAsBtG,GAAyBsG,IAC/C,WAActG,GAAyBsG,IACvC,QAAWtG,GAAyBsG,IACpC,sBAAyBtG,GAAyBsG,MAQ9CwW,GAAyB9b,GAAgB,GAAgB,CAC7D,MAASnB,IA+PX,SAAmB7tN,EAAM0tN,GACvB,OAAO4G,GAAWt0N,QAxPd+qO,GAAqB/b,GAAgB,GAAgB,CACzD,cAAiBhB,IAuHnB,SAA2BhuN,EAAM0tN,GAC/B,OAAO8B,GAAgB,GAAIsb,GAAwB9qO,EAAM0tN,QAhHrDsd,GAAuBhc,GAAgB,GAAgB,CAC3D,MAAShB,IAyMX,SAAmBhuN,EAAM0tN,GACvB,OAAO8B,GAAgB,GAAIyb,GAAejrO,EAAM0tN,MAzMhD,QAAWM,IAoGb,SAAqBhuN,EAAM0tN,GACzB,OAAO8B,GAAgB,GAAIqb,GAAiB7qO,EAAM0tN,QA7F9Cwd,GAAclc,GAAgB,GAAgB,CAClD,KAAQhB,IA8JV,SAAkBhuN,EAAM0tN,GACtB,OAAO8B,GAAgB,GAAI,GAAcxvN,EAAM0tN,QAvJ3C,GAAesB,GAAgB,GAAgB,CACnD,IAAOnB,IAmIT,SAAiB7tN,EAAM0tN,GACrB,IAAMtwN,EAAOsqO,GAAS1nO,GACtB,IAAK5C,EACH,OAEF,OAAOoyN,GACL,CAAC,KAAQpyN,GACT+tO,GACAnrO,EACA0tN,MA3IF,UAAQ/9N,IAQJy7O,GAAoBpc,GAAgB,GAAgB,CACxD,IAAOhB,IAgHT,SAAiBhuN,EAAM0tN,GACrB,OAAO8B,GAAgB,GAAI0b,GAAalrO,EAAM0tN,QAzG1Cid,GAA8B3b,GAAgB,GAAgB,CAClE,UA2IF,SAAuBhvN,EAAM0tN,GAC3B,IAAMt5N,EAAO4L,EAAKmpB,aAAa,QACzB/6B,EAAQohO,GAAgB,GAAI4b,GAAmBprO,EAAM0tN,GAC3D,IAAKt/N,EACH,OAEoCs/N,EAAYA,EAAY9+N,OAAS,GAChEwF,GAAQhG,KA1IX68O,GAAgBjc,GAAgB,GAAgB,CACpD,MAAShB,GAAyBsG,IAClC,UAAatG,GAAyBsG,MAQlC6W,GAAyBnc,GAAgB,GAAgB,CAC7D,WAAcnB,IA8DhB,SAAwB7tN,EAAM0tN,GAC5B,IAAMt5N,EAAO4L,EAAKmpB,aAAa,QAC/B,IAAK/0B,EACH,OAEF,OAAOo7N,GAAgB,CAAC,KAAQp7N,GAAO22O,GAAoB/qO,EAAM0tN,QA3D7D2d,GAA0Brc,GAAgB,GAAgB,CAC9D,eAAkBhB,GAAyBsG,IAC3C,aAAgBtG,GAAyBsG,IACzC,YAAetG,IAgEjB,SAAyBhuN,EAAM0tN,GAC7B,OAAO8B,GAAgB,GAAIwb,GAAsBhrO,EAAM0tN,QAzDnD+c,GAAiCzb,GAAgB,GAAgB,CACrE,SAAYhB,GAAyBsG,IACrC,kBAAqBtG,GAAyBsG,IAC9C,KAAQtG,GAAyBsG,IACjC,MAAStG,GAAyBsG,IAClC,mBAAsBtG,GAAyBsG,IAC/C,YAAetG,GAAyBsG,MAQpCoW,GAA2B1b,GAAgB,GAAgB,CAC/D,aAAgBhB,GAAyBsG,IACzC,aAAgBtG,GAAyB0Z,IACzC,eAAkB1Z,IA8HpB,SAA4BhuN,EAAM0tN,GAChC,OAAO8B,GAAgB,GAAI6b,GAAyBrrO,EAAM0tN,QAqB5D,Y,+dChTM,GAAiB,CAAC,KAAM,mCAMxB,GAAqB,CAAC,KAAM,kCAO5B,GAAUsB,GAAgB,GAAgB,CAC9C,SAAYhB,IAiMd,SAAsBhuN,EAAM0tN,GAC1B,OAAO8B,GAAgB,GAAI8b,GAAkBtrO,EAAM0tN,QAzLrD,eACE,mBACE,cAAO,K,OAMP,EAAK6d,WAAa,IAAI,G,EAyB1B,OAjC+B,QAe7B,YAAA9D,aAAA,SAAaznO,GACX,IAAInF,EAAUmF,EAAKmpB,aAAa,WAC5BtuB,IACFA,EAAUA,EAAQsa,QAEpB,IAAIq2N,EAAuBjgP,KAAKggP,WAAW9D,aAAaznO,GACxD,OAAKwrO,GAGLA,EAA8B,QAAI3wO,GAClC2wO,EAAuBhc,GACrBgc,EACA,GACAxrO,EACA,MAEmD,MAT5C,MAWb,EAjCA,CAA+B,IAwCzBsrO,GAAmBtc,GAAgB,GAAgB,CACvD,MAASnB,IAwJX,SAAmB7tN,EAAM0tN,GACvB,OAAO8B,GAAgB,GAAI,GAAexvN,EAAM0tN,MAxJhD,cAAiBG,IAgKnB,SAA2B7tN,EAAM0tN,GAC/B,OAAO8B,GAAgB,GAAIic,GAAazrO,EAAM0tN,QAzJ1C,GAAgBsB,GACpB,GACA,CACE,MAASnB,IA8Jb,SAAmB7tN,EAAM0tN,GACvB,IAAMx8N,EAAQs+N,GAAgB,GAAI,GAAexvN,EAAM0tN,GACvD,IAAKx8N,EACH,OAEF,IAAMwf,EAA+C,SAAnC1Q,EAAKmpB,aAAa,aAEpC,OADAj4B,EAAiB,UAAIwf,EACdxf,KApKL,OAAU28N,GAAyByG,IACnC,kBAAqBzG,IA2KzB,SAA+B7tN,EAAM0tN,GACnC,OAAO8B,GAAgB,GAAIkc,GAAmB1rO,EAAM0tN,MA3KlD,UAAaG,IAmLjB,SAAwB7tN,EAAM0tN,GAC5B,OAAO8B,GAAgB,GAAImc,GAAmB3rO,EAAM0tN,MAnLlD,YAAeG,IA2LnB,SAAyB7tN,EAAM0tN,GAC7B,IAAMnvN,EAASyB,EAAKmpB,aAAa,UAC3Bv0B,EAAWoL,EAAKmpB,aAAa,YAC7ByiN,EAAe5rO,EAAKmpB,aAAa,gBACjC0iN,EAAW,GACbttO,IACFstO,EAAiB,OAAIttO,GAEnB3J,IACFi3O,EAAmB,SAAIj3O,GAErBg3O,IACFC,EAAuB,aAAID,GAE7B,OAAOC,MAvMP7c,GAAgB,GAAoB,CAClC,MAAShB,GAAyBsG,IAClC,SAAYtG,GAAyBsG,IACrC,iBAAoBtG,GAAyB,IAC7C,WAAcA,GAAyBsG,OASrC,GAAgBtF,GACpB,GACA,CACE,UAAanB,IAiNjB,SAAuB7tN,EAAM0tN,GAC3B,IAAM98M,EAAS,GAGf,OAFAA,EAAe,OAAI5Q,EAAKmpB,aAAa,UACrCvY,EAAa,KAAI82N,GAAS1nO,GACnB4Q,MAnNPo+M,GAAgB,GAAoB,CAClC,MAAShB,GAAyBsG,IAClC,WAActG,GAAyBsG,OASrCoX,GAAoB1c,GAAgB,GAAgB,CACxD,cAAiBhB,GAAyBsG,IAC1C,oBAAuBtG,IAyOzB,SAAkChuN,EAAM0tN,GACtC,OAAO8B,GAAgB,GAAIsc,GAAyB9rO,EAAM0tN,QAlOtDoe,GAA0B9c,GAAgB,GAAgB,CAC9D,iBAAoBrB,IAyOtB,SAA8B3tN,EAAM0tN,GAClC,OAAO8B,GAAgB,GAAIuc,GAAoB/rO,EAAM0tN,QAlOjDqe,GAAqB/c,GAAgB,GAAgB,CACzD,WAAchB,GAAyBsG,IACvC,WAActG,GAAyBoG,IACvC,WAAcpG,GAAyBoG,IACvC,WAAcpG,GAAyBoG,IACvC,WAAcpG,GAAyBoG,MAQnCuX,GAAoB3c,GACxB,GACA,CACE,QAAWhB,GAAyBsG,IACpC,MAASzG,GAAyByG,KAEpCtF,GAAgB,GAAoB,CAClC,WAAchB,GAAyBsG,OASrC0X,GAAqBhd,GAAgB,GAAoB,CAC7D,YAAerB,GAAgBse,IAC/B,YAAete,GAAgBse,MAQ3BR,GAAczc,GAClB,GACA,CACE,kBAAqBhB,GAAyBsG,IAC9C,WAAczG,IAoKlB,SAAwB7tN,EAAM0tN,GAC5B,OAAO8B,GAAgB,GAAI0c,GAAYlsO,EAAM0tN,OAnK7CsB,GAAgB,GAAoB,CAClC,aAAgBhB,GAAyBsG,IACzC,WAActG,GAAyBsG,IACvC,YAAetG,GAAyB,OAStCke,GAAald,GACjB,GACA,CACE,cAAiBhB,GAAyBie,IAC1C,iBAAoBje,GAAyBkG,IAC7C,UAAalG,GAAyBoG,IACtC,WAAcpG,GAAyBoG,IACvC,YAAepG,GAAyBoG,IACxC,aAAgBpG,GAAyBoG,KAE3CpF,GAAgB,GAAoB,CAClC,WAAchB,GAAyBsG,OA2F3C,SAAS,GAAgBt0N,EAAM0tN,GAC7B,IAAM/3N,EAAc65N,GAClB,GACAwc,GACAhsO,EACA0tN,GAEF,GAA0B,GAAtB/3N,EAAY/G,OAGhB,OAAO,EAAe+G,GAoBxB,SAASs2O,GAAgBjsO,EAAM0tN,GAC7B,IAAM/3N,EAAc2+N,GAAWt0N,GAAMtC,MAAM,OAC3C,GAAK/H,GAAqC,GAAtBA,EAAY/G,OAAhC,CAGA,IAAMsqB,GAAKvjB,EAAY,GACjBwjB,GAAKxjB,EAAY,GACvB,IAAIpJ,MAAM2sB,KAAM3sB,MAAM4sB,GAGtB,MAAO,CAACD,EAAGC,IA8Bb,Y,+dCrLA,SAASgzN,GAAUjmO,GACjB,GAAsB,iBAAXA,EAAqB,CAC9B,IAAMotC,EAASx2B,KAAKC,MAAM7W,GAC1B,OAAOotC,GAA0C,KAC5C,OAAe,OAAXptC,EACFA,EAEA,KAIX,SAnMA,YACE,a,OACE,cAAO,KAgLX,OAlL0B,QAQxB,YAAA1Q,QAAA,WACE,MAAO,QAYT,YAAAumK,YAAA,SAAY71J,EAAQ+gL,GAClB,OAAO17L,KAAK6gP,sBACVD,GAAUjmO,GACV3a,KAAK+gO,eAAepmN,EAAQ+gL,KAahC,YAAA5tE,aAAA,SAAanzG,EAAQ+gL,GACnB,OAAO17L,KAAK8gP,uBACVF,GAAUjmO,GACV3a,KAAK+gO,eAAepmN,EAAQ+gL,KAWhC,YAAAmlD,sBAAA,SAAsB94L,EAAQ2zI,GAC5B,OAAO,KAUT,YAAAolD,uBAAA,SAAuB/4L,EAAQ2zI,GAC7B,OAAO,KAWT,YAAAulC,aAAA,SAAatmN,EAAQ+gL,GACnB,OAAO17L,KAAK+gP,uBACVH,GAAUjmO,GACV3a,KAAK+gO,eAAepmN,EAAQ+gL,KAWhC,YAAAqlD,uBAAA,SAAuBh5L,EAAQ2zI,GAC7B,OAAO,KAUT,YAAAglC,eAAA,SAAe/lN,GACb,OAAO3a,KAAKghP,yBAAyBJ,GAAUjmO,KASjD,YAAAqmO,yBAAA,SAAyBj5L,GACvB,OAAO,KAWT,YAAAgU,aAAA,SAAat4D,EAASi4L,GACpB,OAAOnqK,KAAK0vE,UAAUjhG,KAAKihP,mBAAmBx9O,EAASi4L,KASzD,YAAAulD,mBAAA,SAAmBx9O,EAASi4L,GAC1B,OAAO,KAWT,YAAA9tE,cAAA,SAAc9+G,EAAU4sL,GACtB,OAAOnqK,KAAK0vE,UAAUjhG,KAAKkhP,oBAAoBpyO,EAAU4sL,KAS3D,YAAAwlD,oBAAA,SAAoBpyO,EAAU4sL,GAC5B,OAAO,KAWT,YAAAwlC,cAAA,SAAc5gO,EAAUo7L,GACtB,OAAOnqK,KAAK0vE,UAAUjhG,KAAKmhP,oBAAoB7gP,EAAUo7L,KAS3D,YAAAylD,oBAAA,SAAoB7gP,EAAUo7L,GAC5B,OAAO,KAEX,EAlLA,CAA0B,I,+dC0C1B,eAIE,WAAYA,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAM5C,EAAK0lD,WAAazhP,EAAQomB,UAM1B,EAAK84N,QAAUl/O,EAAQojB,OAASpjB,EAAQojB,OAAS,KAKjD,EAAK69M,eAAiB,GACpBjhO,EAAQihO,eAAiBjhO,EAAQihO,eAAiB,a,EAiFxD,OA1GuB,QAmCrB,YAAAkgB,uBAAA,SAAuB/4L,EAAQ2zI,GAC7B,GAAmB,YAAf3zI,EAAO59C,KAAoB,CAC7B,IAAMk3O,EAAmD,EACrDroG,OAAS,EACXzuG,EAAQ,KACRirC,EAAY,KACV6rK,EAA4B,YAE9B92M,GADAyuG,EAAYqoG,EAA4B,WACf,MACzB7rK,EAAYwjE,EAAqB,WAEnC,IAAMsoG,EAAOD,EAAuB,KAChCroG,GAgTV,SAAuBsoG,EAAM/2M,EAAOirC,GAClC,IAAK,IAAItzE,EAAI,EAAGgiB,EAAKo9N,EAAKj+O,OAAQnB,EAAIgiB,IAAMhiB,EAC1Cq/O,GAAaD,EAAKp/O,GAAIqoC,EAAOirC,GAjTzBgsK,CAAcF,EAAM/2M,EAAOirC,GAG7B,IAAM1mE,EAAW,GACX2yO,EAAmBJ,EAA0B,QAC7C7sN,EAAWx0B,KAAKohP,WAClB39O,OAAO,EACX,IAAK,IAAMi+O,KAAcD,EACnBzhP,KAAK6+O,UAAgD,GAArC7+O,KAAK6+O,QAAQ71O,QAAQ04O,KAGC,uBAAtCD,EAAiBC,GAAYv3O,MAC/B1G,EACEg+O,EAAiBC,GAEnB5yO,EAAS1G,KAAKgI,MACZtB,EACA6yO,GACEl+O,EACA69O,EACA/2M,EACAirC,EACAhhD,EACAktN,EACAhmD,MAIJj4L,EACEg+O,EAAiBC,GAEnB5yO,EAAS1G,KACPw5O,GACEn+O,EACA69O,EACA/2M,EACAirC,EACAhhD,EACAktN,EACAhmD,MAKR,OAAO5sL,EAEP,MAAO,IASX,YAAAkyO,yBAAA,SAAyBj5L,GACvB,OAAO/nD,KAAK4gO,gBAEhB,EA1GA,CAAuB,IAgHjBihB,GAAmB,CACvB,MAmDF,SAA2B95L,EAAQxd,EAAOirC,GACxC,IAAMprE,EAAc29C,EAAoB,YACpCxd,GAASirC,GACXssK,GAAgB13O,EAAamgC,EAAOirC,GAEtC,OAAO,IAAI,GAAMprE,IAvDjB,WAmFF,SAAgC29C,EAAQu5L,GACtC,IAAMl3O,EAAc23O,GAAgBh6L,EAAa,KAAGu5L,GACpD,OAAO,IAAI,GAAWl3O,IApFtB,QA6GF,SAA6B29C,EAAQu5L,GAEnC,IADA,IAAMl3O,EAAc,GACXlI,EAAI,EAAGgiB,EAAK6jC,EAAa,KAAE1kD,OAAQnB,EAAIgiB,IAAMhiB,EACpDkI,EAAYlI,GAAK6/O,GAAgBh6L,EAAa,KAAE7lD,GAAIo/O,GAEtD,OAAO,IAAI,GAAQl3O,IAjHnB,WAgEF,SAAgC29C,EAAQxd,EAAOirC,GAC7C,IAAMprE,EAAc29C,EAAoB,YACxC,GAAIxd,GAASirC,EACX,IAAK,IAAItzE,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EACjD4/O,GAAgB13O,EAAYlI,GAAIqoC,EAAOirC,GAG3C,OAAO,IAAI,GAAWprE,IAtEtB,gBA4FF,SAAqC29C,EAAQu5L,GAE3C,IADA,IAAMl3O,EAAc,GACXlI,EAAI,EAAGgiB,EAAK6jC,EAAa,KAAE1kD,OAAQnB,EAAIgiB,IAAMhiB,EACpDkI,EAAYlI,GAAK6/O,GAAgBh6L,EAAa,KAAE7lD,GAAIo/O,GAEtD,OAAO,IAAI,GAAgBl3O,IAhG3B,aAyHF,SAAkC29C,EAAQu5L,GAExC,IADA,IAAMl3O,EAAc,GACXlI,EAAI,EAAGgiB,EAAK6jC,EAAa,KAAE1kD,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAIvD,IAFA,IAAM8/O,EAAYj6L,EAAa,KAAE7lD,GAC3B+/O,EAAa,GACV3qO,EAAI,EAAGypF,EAAKihJ,EAAU3+O,OAAQiU,EAAIypF,IAAMzpF,EAE/C2qO,EAAW3qO,GAAKyqO,GAAgBC,EAAU1qO,GAAIgqO,GAEhDl3O,EAAYlI,GAAK+/O,EAEnB,OAAO,IAAI,GAAa73O,KA1H1B,SAAS23O,GAAgBG,EAASZ,GAIhC,IAFA,IACIx3N,EADE1f,EAAc,GAEXlI,EAAI,EAAGgiB,EAAKg+N,EAAQ7+O,OAAQnB,EAAIgiB,IAAMhiB,EAM7C,GALA4nB,EAAQo4N,EAAQhgP,GACZA,EAAI,GAENkI,EAAY23D,MAEVj4C,GAAS,EAGX,IADA,IACSxS,EAAI,EAAGypF,GADVohJ,EAAMb,EAAKx3N,IACQzmB,OAAQiU,EAAIypF,IAAMzpF,EACzClN,EAAYhC,KAAK+5O,EAAI7qO,GAAG3M,MAAM,QAIhC,KAAMw3O,EACN,IAAS7qO,GADH6qO,EAAMb,GAAMx3N,IACDzmB,OAAS,EAAGiU,GAAK,IAAKA,EACrClN,EAAYhC,KAAK+5O,EAAI7qO,GAAG3M,MAAM,IAIpC,OAAOP,EAmHT,SAASu3O,GACPtoN,EACAioN,EACA/2M,EACAirC,EACAhhD,EACA3rB,EACA6yL,GAIA,IAFA,IAAMtjI,EAAa/+B,EAAuB,WACpCvqB,EAAW,GACR5M,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD4M,EAAS5M,GAAK0/O,GACZxpL,EAAWl2D,GACXo/O,EACA/2M,EACAirC,EACAhhD,EACA3rB,EACA6yL,GAGJ,OAAO5sL,EAgBT,SAAS8yO,GACP75L,EACAu5L,EACA/2M,EACAirC,EACAhhD,EACA3rB,EACA6yL,GAEA,IAAIp7L,EAAW,KACT6J,EAAO49C,EAAO59C,KACpB,GAAIA,EAAM,CACR,IAAMi4O,EAAiBP,GAAiB13O,GAMxC7J,EAAW,GAJTA,EADW,UAAT6J,GAA6B,eAATA,EACXi4O,EAAer6L,EAAQxd,EAAOirC,GAE9B4sK,EAAer6L,EAAQu5L,IAEc,EAAO5lD,GAE3D,IAAMj4L,EAAU,IAAI,GAAQ,CAACnD,SAAUA,SACrB8D,IAAd2jD,EAAO3oD,IACTqE,EAAQS,MAAM6jD,EAAO3oD,IAEvB,IAAIm1B,EAAawzB,EAAOxzB,WAUxB,OATIC,IACGD,IACHA,EAAa,IAEfA,EAAWC,GAAY3rB,GAErB0rB,GACF9wB,EAAQ+rL,cAAcj7J,GAAY,GAE7B9wB,EAwBT,SAAS89O,GAAaY,EAAK53M,EAAOirC,GAGhC,IAFA,IAAI7nD,EAAI,EACJC,EAAI,EACC1rB,EAAI,EAAGgiB,EAAKi+N,EAAI9+O,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC5C,IAAMmgP,EAASF,EAAIjgP,GACnByrB,GAAK00N,EAAO,GACZz0N,GAAKy0N,EAAO,GACZA,EAAO,GAAK10N,EACZ00N,EAAO,GAAKz0N,EACZk0N,GAAgBO,EAAQ93M,EAAOirC,IAYnC,SAASssK,GAAgBO,EAAQ93M,EAAOirC,GACtC6sK,EAAO,GAAKA,EAAO,GAAK93M,EAAM,GAAKirC,EAAU,GAC7C6sK,EAAO,GAAKA,EAAO,GAAK93M,EAAM,GAAKirC,EAAU,GAG/C,Y,+dC3KA,SAASyrJ,GAAal5K,EAAQ2zI,GAC5B,IAAK3zI,EACH,OAAO,KAMT,IAAIznD,EACJ,OAAQynD,EAAa,MACnB,IAAK,QACHznD,EAkEN,SAA2BynD,GACzB,OAAO,IAAI,GAAMA,EAAoB,aAnEtB,CAA8C,GACzD,MAEF,IAAK,aACHznD,EAsEN,SAAgCynD,GAC9B,OAAO,IAAI,GAAWA,EAAoB,aAvE3B,CACwB,GAEnC,MAEF,IAAK,UACHznD,EAgGN,SAA6BynD,GAC3B,OAAO,IAAI,GAAQA,EAAoB,aAjGxB,CAAkD,GAC7D,MAEF,IAAK,aACHznD,EA4EN,SAAgCynD,GAC9B,OAAO,IAAI,GAAWA,EAAoB,aA7E3B,CACwB,GAEnC,MAEF,IAAK,kBACHznD,EA8DN,SAAqCynD,GACnC,OAAO,IAAI,GAAgBA,EAAoB,aA/DhC,CAC6B,GAExC,MAEF,IAAK,eACHznD,EAwEN,SAAkCynD,GAChC,OAAO,IAAI,GAAaA,EAAoB,aAzE7B,CAC0B,GAErC,MAEF,IAAK,qBACHznD,EAiBN,SAAwCynD,EAAQ2zI,GAC9C,IAAMtjI,EAAarQ,EAAmB,WAAEzpD,KAKtC,SAAUgC,GACR,OAAO2gO,GAAa3gO,EAAUo7L,MAGlC,OAAO,IAAI,GAAmBtjI,GA3BfkqL,CACgC,GAE3C,MAEF,QACE,MAAM,IAAItjP,MAAM,6BAA+B+oD,EAAa,MAGhE,OAAO,GAA6BznD,GAAU,EAAOo7L,GA0EvD,SAASwlC,GAAc5gO,EAAUo7L,GAE/B,IAGI6mD,EAHEp4O,GADN7J,EAAW,GAA6BA,GAAU,EAAMo7L,IAClCzxL,UAItB,OAAQE,GACN,IAAK,QACHo4O,EAwIN,SAA4BjiP,EAAUo7L,GACpC,MAAO,CACLvxL,KAAM,QACNC,YAAa9J,EAASgB,kBA3IVkhP,CACa,GAGvB,MAEF,IAAK,aACHD,EA6EN,SAAiCjiP,EAAUo7L,GACzC,MAAO,CACLvxL,KAAM,aACNC,YAAa9J,EAASgB,kBAhFVmhP,CACkB,GAG5B,MAEF,IAAK,UACHF,EAsIN,SAA8BjiP,EAAUo7L,GACtC,IAAIpnH,EACAonH,IACFpnH,EAAQonH,EAAYgnD,aAEtB,MAAO,CACLv4O,KAAM,UACNC,YAAa9J,EAASgB,eAAegzE,IA7IzBquK,CACe,EACvBjnD,GAEF,MAEF,IAAK,aACH6mD,EAuFN,SAAiCjiP,EAAUo7L,GACzC,MAAO,CACLvxL,KAAM,aACNC,YAAa9J,EAASgB,kBA1FVshP,CACkB,GAG5B,MAEF,IAAK,kBACHL,EAoEN,SAAsCjiP,EAAUo7L,GAC9C,MAAO,CACLvxL,KAAM,kBACNC,YAAa9J,EAASgB,kBAvEVuhP,CACuB,GAGjC,MAEF,IAAK,eACHN,EAqFN,SAAmCjiP,EAAUo7L,GAC3C,IAAIpnH,EACAonH,IACFpnH,EAAQonH,EAAYgnD,aAEtB,MAAO,CACLv4O,KAAM,eACNC,YAAa9J,EAASgB,eAAegzE,IA5FzBwuK,CACoB,EAC5BpnD,GAEF,MAEF,IAAK,qBACH6mD,EAyBN,SAAyCjiP,EAAUo7L,GAMjD,MAAO,CACLvxL,KAAM,qBACNiuD,WAPiB93D,EAASy/N,qBAAqBzhO,KAAI,SAAUgC,GAC7D,IAAMX,EAAU,GAAO,GAAI+7L,GAE3B,cADO/7L,EAAQ8gO,kBACRS,GAAc5gO,EAAUX,OA7BnBojP,CAC0B,EAClCrnD,GAEF,MAEF,IAAK,SACH6mD,EAAU,CACRp4O,KAAM,qBACNiuD,WAAY,IAEd,MAEF,QACE,MAAM,IAAIp5D,MAAM,8BAAgCmL,GAGpD,OAAOo4O,EAoGT,SAtgBA,YAIE,WAAY7mD,GAAZ,WACQ/7L,EAAU+7L,GAA4B,G,SAE5C,cAAO,MAKFklC,eAAiB,GACpBjhO,EAAQihO,eAAiBjhO,EAAQihO,eAAiB,aAGhDjhO,EAAQ8gO,oBAIV,EAAKI,yBAA2B,GAAclhO,EAAQ8gO,oBAQxD,EAAKnG,cAAgB36N,EAAQ8+D,aAO7B,EAAKukL,qBAAuBrjP,EAAQsjP,oBAEpC,EAAKniB,oBAAsB,CACzB,uBACA,4B,EAmLN,OA1NsB,QAiDpB,YAAA+f,sBAAA,SAAsB94L,EAAQ2zI,GAI5B,IAAIwnD,EAAiB,KAWf5iP,EAAW2gO,IATfiiB,EADqB,YAAnBn7L,EAAa,KACgC,EAE9B,CACf,KAAQ,UACR,SAA2C,EAC3C,WAAc,OAIqC,SAAG2zI,GACpDj4L,EAAU,IAAI,GAkBpB,OAjBIzD,KAAKs6N,cACP72N,EAAQk3N,gBAAgB36N,KAAKs6N,eAE7Bt6N,KAAKgjP,sBACL,kBAAmBE,SAAmB9+O,GAEtCX,EAAQk3N,gBAAgBuoB,EAA8B,eAExDz/O,EAAQoE,YAAYvH,GAEhB,OAAQ4iP,GACVz/O,EAAQS,MAAMg/O,EAAmB,IAG/BA,EAA2B,YAC7Bz/O,EAAQ+rL,cAAc0zD,EAA2B,YAAG,GAE/Cz/O,GAST,YAAAq9O,uBAAA,SAAuB/4L,EAAQ2zI,GAC7B,IAEI5sL,EAAW,KACf,GAA8B,sBAHqB,EAG3B,KAA2B,CAIjDA,EAAW,GAEX,IADA,IAAMq0O,EAJmE,EAId,SAClDjhP,EAAI,EAAGgiB,EAAKi/N,EAAgB9/O,OAAQnB,EAAIgiB,IAAMhiB,EACrD4M,EAAS1G,KACPpI,KAAK6gP,sBAAsBsC,EAAgBjhP,GAAIw5L,SAInD5sL,EAAW,CAAC9O,KAAK6gP,sBAAsB94L,EAAQ2zI,IAEjD,OAAO5sL,GAST,YAAAiyO,uBAAA,SAAuBh5L,EAAQ2zI,GAC7B,OAAOulC,GAAal5K,EAAQ2zI,IAQ9B,YAAAslD,yBAAA,SAAyBj5L,GACvB,IACIwiI,EADErjL,EAAM6gD,EAAY,IAaxB,OAXI7gD,EACiB,QAAfA,EAAU,KACZqjL,EAAa,GAAcrjL,EAAgB,WAAQ,MAC1B,SAAhBA,EAAU,KACnBqjL,EAAa,GAAc,QAAUrjL,EAAgB,WAAQ,MAE7D,GAAO,EAAO,IAGhBqjL,EAAavqL,KAAK4gO,eAE0C,GAWhE,YAAAqgB,mBAAA,SAAmBx9O,EAASi4L,GAC1BA,EAAc17L,KAAKghO,aAAatlC,GAGhC,IAAM3zI,EAAS,CACb,KAAQ,UACRznD,SAAU,KACVi0B,WAAY,MAGRn1B,EAAKqE,EAAQE,QAKnB,QAJWS,IAAPhF,IACF2oD,EAAO3oD,GAAKA,IAGTqE,EAAQksL,gBACX,OAAO5nI,EAGT,IAAMxzB,EAAa9wB,EAAQisL,gBACrBpvL,EAAWmD,EAAQtC,cAWzB,OAVIb,IACFynD,EAAOznD,SAAW4gO,GAAc5gO,EAAUo7L,UAEnCnnK,EAAW9wB,EAAQm3N,oBAGvB,GAAQrmM,KACXwzB,EAAOxzB,WAAaA,GAGfwzB,GAWT,YAAAm5L,oBAAA,SAAoBpyO,EAAU4sL,GAC5BA,EAAc17L,KAAKghO,aAAatlC,GAEhC,IADA,IAAMluG,EAAU,GACPtrF,EAAI,EAAGgiB,EAAKpV,EAASzL,OAAQnB,EAAIgiB,IAAMhiB,EAC9CsrF,EAAQplF,KAAKpI,KAAKihP,mBAAmBnyO,EAAS5M,GAAIw5L,IAEpD,MAAO,CACLvxL,KAAM,oBACN2E,SAAU0+E,IAYd,YAAA2zJ,oBAAA,SAAoB7gP,EAAUo7L,GAC5B,OAAOwlC,GAAc5gO,EAAUN,KAAKghO,aAAatlC,KAErD,EA1NA,CAAsB,ICQtB,SAAS,GAAa3zI,EAAQ2zI,GAC1B,IAAK3zI,EACD,OAAO,KAKX,IAAIznD,EACJ,OAAQynD,EAAa,MACjB,IAAK,QACDznD,EA0DZ,SAA2BynD,GACvB,OAAO,IAAI,GAAMA,EAAoB,aA3DlB,CAA6C,GACxD,MAEJ,IAAK,aACDznD,EA6DZ,SAAgCynD,GAC5B,OAAO,IAAI,GAAWA,EAAoB,aA9DvB,CACqB,GAChC,MAEJ,IAAK,UACDznD,EAoFZ,SAA6BynD,GACzB,OAAO,IAAI,GAAQA,EAAoB,aArFpB,CAAiD,GAC5D,MAEJ,IAAK,aACDznD,EAkEZ,SAAgCynD,GAC5B,OAAO,IAAI,GAAWA,EAAoB,aAnEvB,CACqB,GAChC,MAEJ,IAAK,kBACDznD,EAsDZ,SAAqCynD,GACjC,OAAO,IAAI,GAAgBA,EAAoB,aAvD5B,CAC0B,GACrC,MAEJ,IAAK,eACDznD,EA+DZ,SAAkCynD,GAC9B,OAAO,IAAI,GAAaA,EAAoB,aAhEzB,CACuB,GAClC,MAEJ,IAAK,qBACDznD,EAeZ,SAAwCynD,EAAQ2zI,GAC5C,IAAItjI,EAAarQ,EAAmB,WAAEzpD,KAKlC,SAAUgC,GACN,OAAO,GAAaA,EAAUo7L,MAEtC,OAAO,IAAI,GAAmBtjI,GAxBX,CAC6B,GACxC,MAEJ,QACI,MAAM,IAAIp5D,MAAM,6BAA+B+oD,EAAO59C,MAG9D,OAAO,GAA6B7J,GAAU,EAAOo7L,GAjFzD,mCAA0C,SAAU3zI,EAAQ2zI,GAIxD,IAAIwnD,EAAiB,KAYrB,MAAM5iP,GAVF4iP,EADmB,YAAnBn7L,EAAa,KACkC,EAG9B,CACb,KAAQ,UACR,SAA2C,EAC3C,WAAc,OAIqB,UAAKm7L,EAAyB,SAAe,aAAKA,EAAyB,SAAe,YAAE7/O,OAAU,GAAa6/O,EAAyB,SAAGxnD,GAAe,KACzM,IAAIj4L,EAAU,IAAI,GAelB,OAdIzD,KAAKs6N,cACL72N,EAAQk3N,gBAAgB36N,KAAKs6N,eAExBt6N,KAAKgjP,sBACV,kBAAmBE,SAAmB9+O,GACtCX,EAAQk3N,gBAAgBuoB,EAA8B,eAE1Dz/O,EAAQoE,YAAYvH,GAChB,OAAQ4iP,GACRz/O,EAAQS,MAAMg/O,EAAmB,IAEjCA,EAA2B,YAC3Bz/O,EAAQ+rL,cAAc0zD,EAA2B,YAAG,GAEjDz/O,GAmQX,YC1TA,IAAI,GAAwC,WACxC,IAAI2/O,EAAgB,SAAUlhN,EAAG9X,GAI7B,OAHAg5N,EAAgBjkP,OAAOkkP,gBAClB,CAAEC,UAAW,cAAgBxiP,OAAS,SAAUohC,EAAG9X,GAAK8X,EAAEohN,UAAYl5N,IACvE,SAAU8X,EAAG9X,GAAK,IAAK,IAAIhlB,KAAKglB,EAAOjrB,OAAOqB,UAAUC,eAAeC,KAAK0pB,EAAGhlB,KAAI88B,EAAE98B,GAAKglB,EAAEhlB,KACzFg+O,EAAclhN,EAAG9X,IAE5B,OAAO,SAAU8X,EAAG9X,GAChB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIra,UAAU,uBAAyBuB,OAAO8Y,GAAK,iCAE7D,SAASm5N,IAAOvjP,KAAKP,YAAcyiC,EADnCkhN,EAAclhN,EAAG9X,GAEjB8X,EAAE1hC,UAAkB,OAAN4pB,EAAajrB,OAAOknC,OAAOjc,IAAMm5N,EAAG/iP,UAAY4pB,EAAE5pB,UAAW,IAAI+iP,IAZ3C,GAiCxC,GAAiB,CACjB,KACA,oCACA,qCAIJ,MAmCMC,GAnCqB,SAAUzuL,GAMjC,IALA,IAAI0uL,EAAQ,GACRrqN,EAAO,GAEPnuB,EAAM1J,KAAKs5B,IAAI,EAAGk6B,EAAM1xD,QAEnBnB,EAAI,EAAGA,EAAI+I,EAAK/I,IAAK,CAC1Bk3B,EAAO,GACP,IAAK,IAAI9hB,EAAI,EAAGA,EAAIy9C,EAAM1xD,OAAQiU,IACzBpV,EAAIX,KAAKs5B,IAAI,EAAGvjB,KACc,GAA3B8hB,EAAKpwB,QAAQ+rD,EAAMz9C,KACnB8hB,EAAKhxB,KAAK2sD,EAAMz9C,IAGxB8hB,EAAK/1B,OAAS,IACwB,GAAlCogP,EAAMz6O,QAAQowB,EAAK9uB,KAAK,OACxBm5O,EAAMr7O,KAAKgxB,EAAK9uB,KAAK,MAIjC,OAAOm5O,EAemBC,CAAmB,GAAe/4O,QAAQA,MAAM,KAX5C,SAAUg5O,EAAYC,GACpD,GAAID,GAAcA,EAAWtgP,OAAS,EAClC,IAAK,IAAInB,EAAI,EAAGA,EAAI0hP,EAAWvgP,OAAQnB,IAAK,CACxC,IAAI4nB,EAAQ65N,EAAW36O,QAAQ46O,EAAW1hP,IACtC4nB,GAAS,GACT65N,EAAW56O,OAAO+gB,EAAO,IAQzC+5N,CAA0BL,GAAuB,IACjD,GAAiB,GAAen7O,OAAOm7O,IAGvC,MAAMM,GAAmB,SAAUrvO,GAC/B,OAA4B,IAArBg0N,GAAah0N,IAOxB,IAMIsvO,GAAiB,CACjB,IAAOC,GACP,IAAOC,GACP,IAAOC,IAOPC,GAAc1gB,GAAgB,GAAgB,CAC9C,IAAOrB,GAAgB4hB,IACvB,IAAO5hB,GAAgB6hB,IACvB,IAAO7hB,GAAgB8hB,MAOvBE,GAAe3gB,GAAgB,GAAgB,CAC/C,KAAQhB,GAAyBsG,GAAY,YAC7C,KAAQtG,GAAyBsG,GAAY,cAO7Csb,GAAkB5gB,GAAgB,GAAgB,CAClD,IAAOf,IAopBX,SAAkBjuN,EAAMhR,EAAS0+N,GAC7B,IAAIxiO,EAA8DwiO,EAAY,GAC1E5tM,EAAa9wB,EAAQisL,gBACrBp9G,EAAU,CAAE79D,KAAMA,GACtB69D,EAAoB,WAAI/9C,EACxB,IAAIj0B,EAAWmD,EAAQtC,cACvB,GAA0B,cAAtBb,EAAS2J,UAA2B,CACpC,IAAIsyN,EAAwC,GAA6Bj8N,GAAU,EAAMX,GACzF2yE,EAAwB,eAAIiqJ,EAAWhlF,YACvChjH,EAAkB,MAAIgoM,EAAWj7N,iBAErC,IAAIkgD,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc+gB,GAAa9iM,EAAW6/K,cACtClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAASiyK,GAAiBlhB,GAA8Bl1M,EAAQg0M,EAAaoB,MAjqBjG,IAAOb,IAwqBX,SAAkBjuN,EAAMhR,EAAS0+N,GAC7B,IAAIxiO,EAA8DwiO,EAAY,GAC1E5tM,EAAa9wB,EAAQisL,gBAErBp9G,EAAU,CAAE79D,KAAMA,GACtB69D,EAAoB,WAAI/9C,EACxB,IAAIj0B,EAAWmD,EAAQtC,cACvB,GAA0B,mBAAtBb,EAAS2J,UAAgC,CACzC,IAAI+yN,EAAkD,GAA6B18N,GAAU,EAAMX,GACnG40B,EAAmB,OAAIyoM,EAAgBK,iBAE3C,IAAI77K,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAcihB,GAAahjM,EAAW6/K,cACtClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAASmyK,GAAiBphB,GAA8Bl1M,EAAQg0M,EAAaoB,MArrBjG,IAAOb,IAwsBX,SAAkBjuN,EAAMhR,EAAS0+N,GAC7B,IAAIxiO,EAA8DwiO,EAAY,GAC1E7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC/CivE,EAAoB,WAAI7uE,EAAQisL,gBAChC,IAAIpvL,EAAWmD,EAAQtC,cACvB,GAA0B,SAAtBb,EAAS2J,UAAsB,CAC/B,IAAIorB,EAA8B,GAA6B/0B,GAAU,EAAMX,GAC/E2yE,EAAwB,eAAIj9C,EAAMkiH,YAClCmtG,GAAajwO,EAAM4gB,EAAM/zB,iBAAkB6gO,SAhrB/C7qL,GAAqB,SAAUhR,GAK/B,SAASgR,EAAIokJ,GACT,IAAIipD,EAAQr+M,EAAO5lC,KAAKV,OAASA,KAC7BL,EAAU+7L,GAA4B,GAU1C,OANAipD,EAAM/jB,eAAiB,GAAc,aAKrC+jB,EAAMC,gBAAkBjlP,EAAQklP,eACzBF,EAyFX,OAzGA,GAAUrtM,EAAKhR,GAsBfgR,EAAI92C,UAAUskP,sBAAwB,SAAUh2O,GACvCA,IACDA,EAAW,IAEf,IAAK,IAAI5M,EAAI,EAAGgiB,EAAKpV,EAASzL,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC/C,IAAIuB,EAAUqL,EAAS5M,GACvB,GAAIlC,KAAK4kP,gBAAiB,CACtB,IAAIG,EAAiBthP,EAAQ+a,IAAI,oBAAsB,KACvDxe,KAAK4kP,gBAAgBnhP,EAASshP,GAElCthP,EAAQqb,IAAI,uBAAmB1a,KAQvCkzC,EAAI92C,UAAUkkO,oBAAsB,SAAUjwN,EAAMinL,GAChD,IAAK1jK,EAAS,GAAgBvjB,EAAK4sN,cAC/B,OAAO,KAEX,IAAI2jB,EAAgBjB,GAAetvO,EAAK+tN,WACxC,IAAKwiB,EACD,OAAO,KAEX,IAAIvhP,EAAUuhP,EAAcvwO,EAAM,CAC9BzU,KAAK+gO,eAAetsN,EAAMinL,KAE9B,OAAKj4L,GAGLzD,KAAK8kP,sBAAsB,CAACrhP,IACrBA,GAHI,MAUf6zC,EAAI92C,UAAUokO,qBAAuB,SAAUnwN,EAAMinL,GACjD,IAAK1jK,EAAS,GAAgBvjB,EAAK4sN,cAC/B,MAAO,GAEX,GAAsB,OAAlB5sN,EAAK+tN,UAAoB,CAEzB,IAAI1zN,EAAWm1N,GAAgB,GAAIkgB,GAAa1vO,EAAM,CAClDzU,KAAK+gO,eAAetsN,EAAMinL,KAE9B,OAAI5sL,GACA9O,KAAK8kP,sBAAsBh2O,GACpBA,GAGA,GAGf,MAAO,IAYXwoC,EAAI92C,UAAU4kO,kBAAoB,SAAUt2N,EAAU4sL,GAClDA,EAAc17L,KAAKghO,aAAatlC,GAEhC,IAAIupD,EAAM,GAAgB,oCAAqC,OAS/D,OAPAA,EAAI77F,eADW,gCACc,YAAag4E,IAC1C6jB,EAAI77F,eAAeg4E,GAAyB,qBAxK9B,+EAyKd6jB,EAAI73N,aAAa,UAAW,OAC5B63N,EAAI73N,aAAa,UAAW,cAC5B+2M,GAEA,CAAG1vN,KAAMwwO,GAAQZ,GAAiBa,GAAkBp2O,EAAU,CAAC4sL,IACxDupD,GAEJ3tM,EA1Ga,CA2GtB,IAME6tM,GAAc1hB,GAAgB,GAAgB,CAC9C,KAAQhB,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQtG,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQqc,GACR,OAAU3iB,GAAyBoG,IACnC,WAAcwc,GACd,KAAQ5iB,GAAyBsG,IACjC,MA6UJ,SAAoBt0N,EAAM0tN,GACtB,IAAIh0M,EAAS81M,GAAgB,GAAIqhB,GAAe7wO,EAAM0tN,GACtD,GAAIh0M,EAAQ,CACR,IAAIo3N,EAAoCpjB,EAAYA,EAAY9+N,OAAS,GACrEklL,EAAgDg9D,EAA4B,gBAC5EC,EAA8CD,EAA0B,cAC5EjpB,GAAiB/zC,EAAiBi9D,EAAe/wO,EAAM0Z,OA5U3Dm3N,GAAgB7hB,GAAgB,GAAgB,CAChD,IAAOhB,GAAyBkG,IAChC,KAAQlG,GAAyBqhB,MAOjC2B,GAAchiB,GAAgB,GAAgB,CAC9C,KAAQhB,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQtG,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQqc,GACR,OAAU3iB,GAAyBoG,IACnC,KAAQpG,GAAyBsG,IACjC,WAAcsc,GACd,OA8UJ,SAAqB5wO,EAAM0tN,GACvB,IAAIh0M,EAAgCg0M,EAAYA,EAAY9+N,OAAS,GACrEygO,GAAU4hB,GAAgBjxO,EAAM0tN,GAChC,IAAI55C,EAEHp6J,EAAyB,gBACeA,EAAc,KAClD/lB,KAAKmgL,EAAgBllL,WA9U1BqiP,GAAiBjiB,GAAgB,GAAgB,CACjD,MAyTJ,SAAoBhvN,EAAM0tN,GACtB,IAAIh0M,EAAS81M,GAAgB,GAAI0hB,GAAelxO,EAAM0tN,GACtD,GAAIh0M,EAAQ,CACR,IAAIy3N,EAAoCzjB,EAAYA,EAAY9+N,OAAS,GACrEklL,EAAgDq9D,EAA4B,gBAC5EJ,EAA8CI,EAA0B,cAC5EtpB,GAAiB/zC,EAAiBi9D,EAAe/wO,EAAM0Z,OAxT3Dw3N,GAAgBliB,GAAgB,GAAgB,CAChD,IAAOhB,GAAyBkG,IAChC,KAAQlG,GAAyBqhB,MAOjC+B,GAAcpiB,GAAgB,GAAgB,CAC9C,IAAOhB,GAAyBkG,IAChC,KAAQlG,GAAyBqhB,IACjC,OAAUrhB,GAAyBkG,IACnC,YAAelG,GAAyBkG,IACxC,KAAQlG,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQtG,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,KAAQqc,GACR,IAAO3iB,GAAyBsG,IAChC,KAAQtG,GAAyBsG,IACjC,IAAOtG,GAAyBsG,IAChC,IAAOtG,GAAyBoG,IAChC,KAAQpG,GAAyBkG,IACjC,KAAQlG,GAAyBkG,IACjC,KAAQlG,GAAyBkG,IACjC,cAAiBlG,GAAyBkG,IAC1C,OAAUlG,GAAyBoG,IACnC,WAAcwc,KAMdS,GAAgB,CAAC,OAAQ,QAMzBC,GAAmBtiB,GAAgB,GAAgB,CACnD,KAAQf,GAAkBwG,IAC1B,KAAQxG,GAAkBwG,MAO1Bob,GAAe7gB,GAAgB,GAAgB,CAC/C,OACA,MACA,OACA,MACA,OACA,SACA,OACA,UAOA8gB,GAAkB9gB,GAAgB,GAAgB,CAClD,KAAQf,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBsjB,IAC1B,OAAUtjB,GAAkB6G,IAC5B,KAAQ7G,GAAkBwG,IAC1B,MAAStG,GAAoBF,GAAkBgiB,OAO/CuB,GAAsBxiB,GAAgB,GAAgB,CAAC,MAAO,SAM9D+gB,GAAe/gB,GAAgB,GAAgB,CAC/C,OACA,MACA,OACA,MACA,OACA,SACA,OACA,WAOAghB,GAAkBhhB,GAAgB,GAAgB,CAClD,KAAQf,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBsjB,IAC1B,OAAUtjB,GAAkB6G,IAC5B,KAAQ7G,GAAkBwG,IAC1B,OAAUtG,GAAoBF,IA8YlC,SAAqBjuN,EAAM8nN,EAAY4F,GAEnC,IAAI7vJ,EAAU,CAAE79D,KAAMA,GACtB69D,EAAwB,eAAIiqJ,EAAWhlF,YACvCjlE,EAAoB,WAAI,GACxB6xJ,GAAoB7xJ,EAAS4zK,GAAoBC,GAAqB5pB,EAAWj7N,iBAAkB6gO,SA7YnGgkB,GAAsBnjB,GAAsB,SAM5CkjB,GAAqBziB,GAAgB,GAAgB,CACrD,MAASf,GAAkBgiB,MAO3B0B,GAAoB3iB,GAAgB,GAAgB,CACpD,MACA,OACA,SACA,cACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,gBACA,WAOA4iB,GAAuB5iB,GAAgB,GAAgB,CACvD,IAAOf,GAAkB2G,IACzB,KAAQ3G,IxB7WL,SAA+BjuN,EAAMi0N,GAC1C,IAAM3zJ,EAAO,IAAIlxC,KAAgB,IAAX6kM,GAChBF,EACJzzJ,EAAKuxK,iBACL,IACA,GAAUvxK,EAAKwxK,cAAgB,EAAG,GAClC,IACA,GAAUxxK,EAAKyxK,aAAc,GAC7B,IACA,GAAUzxK,EAAK0xK,cAAe,GAC9B,IACA,GAAU1xK,EAAK2xK,gBAAiB,GAChC,IACA,GAAU3xK,EAAK4xK,gBAAiB,GAChC,IACFlyO,EAAK5H,YAAY00N,KAAc3Y,eAAe4f,OwB+V5C,OAAU9F,GAAkB2G,IAC5B,YAAe3G,GAAkB2G,IACjC,KAAQ3G,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,KAAQxG,GAAkBsjB,IAC1B,IAAOtjB,GAAkBwG,IACzB,KAAQxG,GAAkBwG,IAC1B,IAAOxG,GAAkBwG,IACzB,IAAOxG,GAAkB6G,IACzB,KAAQ7G,GAAkB2G,IAC1B,KAAQ3G,GAAkB2G,IAC1B,KAAQ3G,GAAkB2G,IAC1B,cAAiB3G,GAAkB2G,IACnC,OAAU3G,GAAkB6G,MAM5Bqd,GAA4B,CAC5B,MAAS,MACT,WAAc,MACd,gBAAmB,OAQvB,SAAS1B,GAAiBriP,EAAOs/N,EAAae,GAC1C,IAAI5iO,EAAkC,EAAQa,cAC9C,GAAIb,EAAU,CACV,IAAI4lB,EAAW0gO,GAA0BtmP,EAAS2J,WAClD,GAAIic,EAEA,OAAO,GADUi8M,EAAYA,EAAY9+N,OAAS,GAAGoR,KACnB4sN,aAAcn7M,IAW5D,SAASo2M,GAAiB/zC,EAAiBi9D,EAAe/wO,EAAM0Z,GAkB5D,OAjBAo6J,EAAgBngL,KAAKR,WAAW6M,EAAKmpB,aAAa,QAASh2B,WAAW6M,EAAKmpB,aAAa,SACpF,QAASzP,GACTo6J,EAAgBngL,KAA4B+lB,EAAa,YAClDA,EAAY,IACnBq3N,EAAcza,MAAO,GAGrBxiD,EAAgBngL,KAAK,GAErB,SAAU+lB,GACVo6J,EAAgBngL,KAA4B+lB,EAAc,aACnDA,EAAa,KACpBq3N,EAAc/M,MAAO,GAGrBlwD,EAAgBngL,KAAK,GAElBmgL,EAWX,SAASs+D,GAAmBrB,EAAej9D,EAAiB3V,GACxD,IAAIjnI,EAAS,MACT68I,EAAS,EAab,GAZIg9D,EAAcza,MAAQya,EAAc/M,MACpC9sM,EAAS,QACT68I,EAAS,GAEJg9D,EAAcza,MACnBp/L,EAAS,OACT68I,EAAS,GAEJg9D,EAAc/M,OACnB9sM,EAAS,OACT68I,EAAS,GAEE,IAAXA,EAAc,CACd,IAAK,IAAItmL,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAS,EAAGnB,EAAIgiB,EAAIhiB,IACrDqmL,EAAgBrmL,EAAIsmL,GAAUD,EAAoB,EAAJrmL,GAC9CqmL,EAAgBrmL,EAAIsmL,EAAS,GAAKD,EAAoB,EAAJrmL,EAAQ,GACtDsjP,EAAcza,OACdxiD,EAAgBrmL,EAAIsmL,EAAS,GAAKD,EAAoB,EAAJrmL,EAAQ,IAE1DsjP,EAAc/M,OACdlwD,EAAgBrmL,EAAIsmL,EAAS,GAAKD,EAAoB,EAAJrmL,EAAQ,IAIlE,GADAqmL,EAAgBllL,OAAUklL,EAAgBllL,OAAS,EAAKmlL,EACpD5V,EACA,IAAS1wK,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,EAAIhiB,IACtC0wK,EAAK1wK,GAAM0wK,EAAK1wK,GAAK,EAAKsmL,EAItC,OAAO78I,EAMX,SAASy5M,GAAU3wO,EAAM0tN,GACrB,IAAIh0M,EAAgCg0M,EAAYA,EAAY9+N,OAAS,GACjEwO,EAAO4C,EAAKmpB,aAAa,QAChB,OAAT/rB,IACAsc,EAAa,KAAItc,GAErBiyN,GAAUsgB,GAAc3vO,EAAM0tN,GAMlC,SAASkjB,GAAgB5wO,EAAM0tN,GACSA,EAAYA,EAAY9+N,OAAS,GAC7C,gBAAIoR,EA8ChC,SAASuvO,GAAQvvO,EAAM0tN,GACnB,IAAIxiO,EAA6DwiO,EAAY,GACzEh0M,EAAS81M,GAAgB,CACzB,gBAAmB,GACnB,cAAiB,IAClBkhB,GAAa1wO,EAAM0tN,GACtB,GAAKh0M,EAAL,CAGA,IAAIo6J,EAEHp6J,EAAyB,uBACnBA,EAAwB,gBAC/B,IAAIq3N,EAA8Cr3N,EAAuB,qBAClEA,EAAsB,cAC7B,IAAIwd,EAASk7M,GAAmBrB,EAAej9D,GAC3CjoL,EAAW,IAAI,GAAWioL,EAAiB58I,GAC/C,GAA6BrrC,GAAU,EAAOX,GAC9C,IAAI8D,EAAU,IAAI,GAAQnD,GAE1B,OADAmD,EAAQ+rL,cAAcrhK,GAAQ,GACvB1qB,GAOX,SAASwgP,GAAQxvO,EAAM0tN,GACnB,IAAIxiO,EAA6DwiO,EAAY,GACzEh0M,EAAS81M,GAAgB,CACzB,gBAAmB,GACnB,KAAQ,GACR,cAAiB,IAClBwhB,GAAahxO,EAAM0tN,GACtB,GAAKh0M,EAAL,CAGA,IAAIo6J,EAEHp6J,EAAyB,uBACnBA,EAAwB,gBAC/B,IAAIykJ,EAAqCzkJ,EAAc,YAChDA,EAAa,KACpB,IAAIq3N,EAA8Cr3N,EAAuB,qBAClEA,EAAsB,cAC7B,IAAIwd,EAASk7M,GAAmBrB,EAAej9D,EAAiB3V,GAC5DtyK,EAAW,IAAI,GAAgBioL,EAAiB58I,EAAQinI,GAC5D,GAA6BtyK,GAAU,EAAOX,GAC9C,IAAI8D,EAAU,IAAI,GAAQnD,GAE1B,OADAmD,EAAQ+rL,cAAcrhK,GAAQ,GACvB1qB,GAOX,SAASygP,GAAQzvO,EAAM0tN,GACnB,IAAIxiO,EAA6DwiO,EAAY,GACzEh0M,EAAS81M,GAAgB,GAAI4hB,GAAapxO,EAAM0tN,GACpD,GAAKh0M,EAAL,CAGA,IAAIq3N,EAA6C,GAC7Cp7O,EAAckyN,GAAiB,GAAIkpB,EAAe/wO,EAAM0Z,GACxDwd,EAASk7M,GAAmBrB,EAAep7O,GAC3C9J,EAAW,IAAI,GAAM8J,EAAauhC,GACtC,GAA6BrrC,GAAU,EAAOX,GAC9C,IAAI8D,EAAU,IAAI,GAAQnD,GAE1B,OADAmD,EAAQ+rL,cAAcrhK,GAAQ,GACvB1qB,GAOX,SAASuiP,GAAUvxO,EAAM5R,EAAOs/N,GAC5B1tN,EAAK2Y,aAAa,OAAQvqB,GAC1B,IACI0xB,EADU4tM,EAAYA,EAAY9+N,OAAS,GACV,WACjC+7B,EAAO,CAAC7K,EAAqB,SAAGA,EAAqB,UACzD4vM,GACiD,CAAG1vN,KAAMA,GAASsxO,GAAkB1iB,GAA8BjkM,EAAM+iM,EAAa2jB,IAO1I,SAASpB,GAAajwO,EAAMgvE,EAAY0+I,GACpC,IAAI7vJ,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAE3Cg+N,EADa/uJ,EAAQ79D,KACK4sN,aAC1B9sM,EAAa+9C,EAAoB,WAKrC,OAHA79D,EAAK20I,eAAe,KAAM,MAAO93I,OAAOmyE,EAAW,KACnDhvE,EAAK20I,eAAe,KAAM,MAAO93I,OAAOmyE,EAAW,KAC9BnR,EAAwB,gBAEzC,KAAK,QACqB,IAAlBmR,EAAW,KACXlvD,EAAiB,KAAIkvD,EAAW,IAGxC,KAAK,OACqB,IAAlBA,EAAW,KACXlvD,EAAgB,IAAIkvD,EAAW,IAEnC,MACJ,KAAK,OACqB,IAAlBA,EAAW,KACXlvD,EAAiB,KAAIkvD,EAAW,IAM5C,IAAI8/I,EAA+B,SAAjB9uN,EAAKyR,SACjB+/N,GAAoB5kB,GACpB+kB,GAAkB/kB,GACpBlzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAEA,CAAG1vN,KAAMA,EAAM,WAAc8f,GAAe8xN,GAAsBhjB,GAA8Bl1M,EAAQg0M,EAAaoB,GAwEzH,YCpxBA,SA9CA,WAIE,WAAY7nC,GACV,IAAM/7L,EAAU+7L,GAAe,GAM/B17L,KAAK8mP,YAA2B1iP,IAAlBzE,EAAQ4xE,MAAsB5xE,EAAQ4xE,MAAQ,KAiChE,OAzBE,YAAA/mE,MAAA,WACE,IAAM+mE,EAAQvxE,KAAK+tJ,WACnB,OAAO,IAAIg5F,EAAK,CACdx1K,MAAOzwE,MAAMC,QAAQwwE,GAASA,EAAM5mE,QAAU4mE,QAASntE,KAS3D,YAAA2pJ,SAAA,WACE,OAAO/tJ,KAAK8mP,QASd,YAAAE,SAAA,SAASz1K,GACPvxE,KAAK8mP,OAASv1K,GAElB,EA5CA,GCRA,IAKE01K,SAAU,WAKVzjD,OAAQ,UCVV,IAKE0jD,YAAa,cAKbC,aAAc,eAKdC,SAAU,WAKVC,UAAW,aCrBb,GACQ,EADR,GAEW,EAFX,GAGU,EAHV,GAIS,EAJT,GAKS,ECWT,kBAIE,WAAY1nP,GAKVK,KAAKsnP,SAAW3nP,EAAQ6T,QAMxBxT,KAAKg0N,gBAAkBr0N,EAAQs0N,eAM/Bj0N,KAAKmoN,UAAYxoN,EAAQ00D,SAMzBr0D,KAAKunP,OAAS5nP,EAAQ4qC,MAMtBvqC,KAAKwnP,YAAc/oC,GAAO9+M,EAAQ4qC,OAMlCvqC,KAAKynP,cAAgB9nP,EAAQ+nP,aAM7B1nP,KAAK2nP,eAAiBhoP,EAAQioP,cAkOlC,OA1NE,YAAAp9O,MAAA,WACE,IAAM+/B,EAAQvqC,KAAK2sJ,WACnB,OAAO,IAAIk7F,EAAW,CACpBr0O,QAASxT,KAAKuT,aACdg3B,MAAOzpC,MAAMC,QAAQwpC,GAASA,EAAM5/B,QAAU4/B,EAC9C8pB,SAAUr0D,KAAKs0D,cACf2/J,eAAgBj0N,KAAKq2N,oBACrBqxB,aAAc1nP,KAAK8nP,kBAAkBn9O,QACrCi9O,cAAe5nP,KAAK+nP,sBASxB,YAAAx0O,WAAA,WACE,OAAOvT,KAAKsnP,UAQd,YAAAjxB,kBAAA,WACE,OAAOr2N,KAAKg0N,iBAQd,YAAA1/J,YAAA,WACE,OAAOt0D,KAAKmoN,WAQd,YAAAx7D,SAAA,WACE,OAAO3sJ,KAAKunP,QAOd,YAAAS,cAAA,WACE,OAAOhoP,KAAKwnP,aAQd,YAAAM,gBAAA,WACE,OAAO9nP,KAAKynP,eAQd,YAAAM,iBAAA,WACE,OAAO/nP,KAAK2nP,gBASd,YAAAM,UAAA,WACE,OAAO,KAST,YAAA/6N,SAAA,SAASwyL,GACP,OAAO,KAOT,YAAAwoC,qBAAA,WACE,OAAO,KAQT,YAAAC,cAAA,SAAczoC,GACZ,OAAO,GAOT,YAAA0oC,cAAA,WACE,OAAO,KAOT,YAAAC,aAAA,WACE,OAAO,KAQT,YAAAC,UAAA,WACE,OAAO,KAQT,YAAAhlC,QAAA,WACE,OAAO,KAST,YAAAilC,gBAAA,SAAgBb,GACd1nP,KAAKynP,cAAgBC,GASvB,YAAAh0O,WAAA,SAAWF,GACTxT,KAAKsnP,SAAW9zO,GASlB,YAAA8iN,kBAAA,SAAkBrC,GAChBj0N,KAAKg0N,gBAAkBC,GASzB,YAAA7/J,YAAA,SAAYC,GACVr0D,KAAKmoN,UAAY9zJ,GAQnB,YAAA84F,SAAA,SAAS5iH,GACPvqC,KAAKunP,OAASh9M,EACdvqC,KAAKwnP,YAAc/oC,GAAOl0K,IAO5B,YAAAi+M,kBAAA,SAAkBxpM,GAChB,KAOF,YAAAo3E,KAAA,WACE,KAOF,YAAAqyH,oBAAA,SAAoBzpM,GAClB,KAEJ,EA/QA,GAiRA,Y,+dCvMA,SAvFA,YAOE,WAAY1jC,EAAQ6oC,EAAYu7J,EAAY7qM,GAA5C,MACE,cAAO,K,OAMP,EAAKyG,OAASA,EAMd,EAAKmkM,YAAcC,EAMnB,EAAKv7J,WAAaA,EAMlB,EAAKtvC,MAAQA,E,EAqDjB,OArFwB,QAsCtB,YAAA8+E,QAAA,WACE3zF,KAAKggC,cAAc+uJ,GAAUhyC,SAM/B,YAAAh2H,UAAA,WACE,OAAO/mB,KAAKsb,QAOd,YAAA4R,SAAA,WACE,OAAO,KAMT,YAAAi7N,cAAA,WACE,OAAOnoP,KAAKy/M,aAMd,YAAAh9L,cAAA,WACE,OAA8BziB,KAAe,YAM/C,YAAAkzL,SAAA,WACE,OAAOlzL,KAAK6U,OAOd,YAAAuhH,KAAA,WACE,KAEJ,EArFA,CAAwB,I,+dCsJjB,SAASsyH,GAAY37N,EAAO47N,EAAaC,GAC9C,IAAMj9O,EAAsC,EACxCk9O,GAAY,EACZC,GAAW,EACXnvO,GAAS,EAEPsjL,EAAe,CACnBtO,GAAWhjL,EAAKojL,GAAUZ,MAAM,WAC9Bx0K,GAAS,EACJmvO,GACHH,QA2BN,OAtBIh9O,EAAIgG,KAAO0zK,GACbyjE,GAAW,EACXn9O,EACG08B,SACA3pC,MAAK,WACAmqP,GACFF,OAGHxyO,OAAM,SAAUF,GACX4yO,IACElvO,EACFgvO,IAEAC,SAKR3rD,EAAa70L,KAAKumL,GAAWhjL,EAAKojL,GAAU/gJ,MAAO46M,IAG9C,WACLC,GAAY,EACZ5rD,EAAa11L,QAAQqnL,KAIzB,SA/KA,YASE,WACEtzK,EACA6oC,EACAu7J,EACA/tM,EACAwb,EACA47N,GANF,MAQE,YAAMztO,EAAQ6oC,EAAYu7J,EAAYspC,KAAgB,K,OAMtD,EAAKC,KAAOt3O,EAMZ,EAAKu3O,OAAS,IAAI91K,MACE,OAAhBjmD,IACF,EAAK+7N,OAAO/7N,YAAcA,GAO5B,EAAKg8N,UAAY,KAMjB,EAAKt0O,MAAQm0O,GAMb,EAAKI,mBAAqBL,E,EA0E9B,OA5H2B,QAyDzB,YAAA77N,SAAA,WACE,OAAOltB,KAAKkpP,QAQd,YAAAG,kBAAA,WACErpP,KAAK6U,MAAQm0O,GACbhpP,KAAKspP,iBACLtpP,KAAK2zF,WAQP,YAAA41J,iBAAA,gBAC0BnlP,IAApBpE,KAAKmkD,aACPnkD,KAAKmkD,WAAa0kI,GAAU7oL,KAAKsb,QAAUtb,KAAKkpP,OAAO32N,QAEzDvyB,KAAK6U,MAAQm0O,GACbhpP,KAAKspP,iBACLtpP,KAAK2zF,WASP,YAAAyiC,KAAA,WACMp2H,KAAK6U,OAASm0O,IAAmBhpP,KAAK6U,OAASm0O,KACjDhpP,KAAK6U,MAAQm0O,GACbhpP,KAAK2zF,UACL3zF,KAAKopP,mBAAmBppP,KAAMA,KAAKipP,MACnCjpP,KAAKmpP,UAAYT,GACf1oP,KAAKkpP,OACLlpP,KAAKupP,iBAAiBrpM,KAAKlgD,MAC3BA,KAAKqpP,kBAAkBnpM,KAAKlgD,SAQlC,YAAAwmK,SAAA,SAASz5I,GACP/sB,KAAKkpP,OAASn8N,EACd/sB,KAAKmkD,WAAa0kI,GAAU7oL,KAAKsb,QAAUtb,KAAKkpP,OAAO32N,QAQzD,YAAA+2N,eAAA,WACMtpP,KAAKmpP,YACPnpP,KAAKmpP,YACLnpP,KAAKmpP,UAAY,OAGvB,EA5HA,CAA2B,I,+dCbvBK,GAAqB,KAEzB,eASE,WAAYz8N,EAAOpb,EAAKkjB,EAAM1H,EAAas8N,EAAYl4K,GAAvD,MACE,cAAO,K,OAMP,EAAKm4K,mBAAqB,KAM1B,EAAKR,OAAUn8N,GAAQ,IAAIqmD,MAEP,OAAhBjmD,IAC+B,EAAW,OAAEA,YAAcA,GAO9D,EAAKw8N,QAAU,GAMf,EAAK7C,OAASv1K,EAMd,EAAK43K,UAAY,KAMjB,EAAKS,YAAcH,EAMnB,EAAKI,MAAQh1N,EAMb,EAAKo0N,KAAOt3O,EAKZ,EAAKm4O,S,EAkMT,OArQwB,QA0EtB,YAAAC,WAAA,WACE,QAAsB3lP,IAAlBpE,KAAK8pP,UAA0B9pP,KAAK4pP,cAAgBZ,GAAmB,CACpEQ,KACHA,GAAqBnyD,GAAsB,EAAG,IAEhDmyD,GAAmBr2K,UAAUnzE,KAAKkpP,OAAQ,EAAG,GAC7C,IACEM,GAAmBh3K,aAAa,EAAG,EAAG,EAAG,GACzCxyE,KAAK8pP,UAAW,EAChB,MAAO/qP,GACPyqP,GAAqB,KACrBxpP,KAAK8pP,UAAW,GAGpB,OAAyB,IAAlB9pP,KAAK8pP,UAMd,YAAAE,qBAAA,WACEhqP,KAAKggC,cAAc+uJ,GAAUhyC,SAM/B,YAAAssG,kBAAA,WACErpP,KAAK4pP,YAAcZ,GACnBhpP,KAAKspP,iBACLtpP,KAAKgqP,wBAMP,YAAAT,iBAAA,WACEvpP,KAAK4pP,YAAcZ,GACfhpP,KAAK6pP,OACP7pP,KAAKkpP,OAAO52N,MAAQtyB,KAAK6pP,MAAM,GAC/B7pP,KAAKkpP,OAAO32N,OAASvyB,KAAK6pP,MAAM,IAEhC7pP,KAAK6pP,MAAQ,CAAC7pP,KAAKkpP,OAAO52N,MAAOtyB,KAAKkpP,OAAO32N,QAE/CvyB,KAAKspP,iBACLtpP,KAAKgqP,wBAOP,YAAA98N,SAAA,SAASwyL,GAEP,OADA1/M,KAAKiqP,cAAcvqC,GACZ1/M,KAAK2pP,QAAQjqC,GAAc1/M,KAAK2pP,QAAQjqC,GAAc1/M,KAAKkpP,QAOpE,YAAAf,cAAA,SAAczoC,GAEZ,OADA1/M,KAAKiqP,cAAcvqC,GACZ1/M,KAAK2pP,QAAQjqC,GAAcA,EAAa,GAMjD,YAAA0oC,cAAA,WACE,OAAOpoP,KAAK4pP,aAMd,YAAA1B,qBAAA,WACE,IAAKloP,KAAK0pP,mBACR,GAAI1pP,KAAK+pP,aAAc,CACrB,IAAMz3N,EAAQtyB,KAAK6pP,MAAM,GACnBt3N,EAASvyB,KAAK6pP,MAAM,GACpBv3K,EAAU+kH,GAAsB/kK,EAAOC,GAC7C+/C,EAAQM,SAAS,EAAG,EAAGtgD,EAAOC,GAC9BvyB,KAAK0pP,mBAAqBp3K,EAAQjV,YAElCr9D,KAAK0pP,mBAAqB1pP,KAAKkpP,OAGnC,OAAOlpP,KAAK0pP,oBAOd,YAAApmC,QAAA,WACE,OAAOtjN,KAAK6pP,OAMd,YAAAK,OAAA,WACE,OAAOlqP,KAAKipP,MAMd,YAAA7yH,KAAA,WACE,GAAIp2H,KAAK4pP,aAAeZ,GAAiB,CACvChpP,KAAK4pP,YAAcZ,GACnB,IACmChpP,KAAW,OAAE2R,IAAM3R,KAAKipP,KACzD,MAAOlqP,GACPiB,KAAKqpP,oBAEPrpP,KAAKmpP,UAAYT,GACf1oP,KAAKkpP,OACLlpP,KAAKupP,iBAAiBrpM,KAAKlgD,MAC3BA,KAAKqpP,kBAAkBnpM,KAAKlgD,SASlC,YAAAiqP,cAAA,SAAcvqC,GACZ,GACG1/M,KAAK8mP,SACN9mP,KAAK2pP,QAAQjqC,IACb1/M,KAAK4pP,cAAgBZ,GAHvB,CAQA,IAAM3rL,EAAS1wD,SAASC,cAAc,UACtC5M,KAAK2pP,QAAQjqC,GAAcriJ,EAE3BA,EAAO/qC,MAAQ/wB,KAAKgjD,KAAKvkD,KAAKkpP,OAAO52N,MAAQotL,GAC7CriJ,EAAO9qC,OAAShxB,KAAKgjD,KAAKvkD,KAAKkpP,OAAO32N,OAASmtL,GAE/C,IAAMxsI,EAAM7V,EAAOkV,WAAW,MAQ9B,GAPAW,EAAI3oC,MAAMm1K,EAAYA,GACtBxsI,EAAIC,UAAUnzE,KAAKkpP,OAAQ,EAAG,GAE9Bh2K,EAAIR,yBAA2B,WAIM,aAAjCQ,EAAIR,0BAA2C1yE,KAAK+pP,aACtD72K,EAAIP,UAAY24G,GAAStrL,KAAK8mP,QAC9B5zK,EAAIN,SAAS,EAAG,EAAGvV,EAAO/qC,MAAQotL,EAAYriJ,EAAO9qC,OAASmtL,GAE9DxsI,EAAIR,yBAA2B,iBAC/BQ,EAAIC,UAAUnzE,KAAKkpP,OAAQ,EAAG,OACzB,CAQL,IAPA,IAAMiB,EAAUj3K,EAAIV,aAAa,EAAG,EAAGnV,EAAO/qC,MAAO+qC,EAAO9qC,QACtDpuB,EAAOgmP,EAAQhmP,KACfmQ,EAAItU,KAAK8mP,OAAO,GAAK,IACrBjkL,EAAI7iE,KAAK8mP,OAAO,GAAK,IACrB18N,EAAIpqB,KAAK8mP,OAAO,GAAK,IACrBhsO,EAAI9a,KAAK8mP,OAAO,GAEb5kP,EAAI,EAAGgiB,EAAK/f,EAAKd,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EAC7CiC,EAAKjC,IAAMoS,EACXnQ,EAAKjC,EAAI,IAAM2gE,EACf1+D,EAAKjC,EAAI,IAAMkoB,EACfjmB,EAAKjC,EAAI,IAAM4Y,EAEjBo4D,EAAIH,aAAao3K,EAAS,EAAG,MASjC,YAAAb,eAAA,WACMtpP,KAAKmpP,YACPnpP,KAAKmpP,YACLnpP,KAAKmpP,UAAY,OAGvB,EArQA,CAAwB,I,+dCqCxB,eAIE,WAAYztD,GAAZ,WACQ/7L,EAAU+7L,GAAe,GAKzBloL,OAA8BpP,IAApBzE,EAAQ6T,QAAwB7T,EAAQ6T,QAAU,EAK5D6gD,OAAgCjwD,IAArBzE,EAAQ00D,SAAyB10D,EAAQ00D,SAAW,EAK/D9pB,OAA0BnmC,IAAlBzE,EAAQ4qC,MAAsB5qC,EAAQ4qC,MAAQ,EAKtD0pL,OACuB7vN,IAA3BzE,EAAQs0N,gBAA+Bt0N,EAAQs0N,gB,EAEjD,YAAM,CACJzgN,QAASA,EACT6gD,SAAUA,EACV9pB,MAAOA,EACPm9M,kBAC2BtjP,IAAzBzE,EAAQ+nP,aAA6B/nP,EAAQ+nP,aAAe,CAAC,EAAG,GAClEzzB,eAAgBA,EAChB2zB,cAAejoP,EAAQioP,iBACvB,MAMGj4B,aAA6BvrN,IAAnBzE,EAAQiS,OAAuBjS,EAAQiS,OAAS,CAAC,GAAK,IAMrE,EAAKw4O,kBAAoB,KAMzB,EAAKC,mBACsBjmP,IAAzBzE,EAAQ2qP,aACJ3qP,EAAQ2qP,aACRC,GAAWnD,SAMjB,EAAKoD,mBACsBpmP,IAAzBzE,EAAQ8qP,aACJ9qP,EAAQ8qP,aACRC,GAAgBzD,SAMtB,EAAK0D,mBACsBvmP,IAAzBzE,EAAQirP,aACJjrP,EAAQirP,aACRF,GAAgBzD,SAMtB,EAAK4D,kBACqBzmP,IAAxBzE,EAAQwtB,YAA4BxtB,EAAQwtB,YAAc,KAK5D,IAAMJ,OAAwB3oB,IAAhBzE,EAAQgM,IAAoBhM,EAAQgM,IAAM,KAMxD,EAAKm/O,SAAWnrP,EAAQorP,QAKxB,IAAIp5O,EAAMhS,EAAQgS,IAElB,SAAiBvN,IAARuN,GAAqBob,GAAQ,GACtC,GAAQA,GAAUA,GAAS,EAAK+9N,SAAW,QAE9B1mP,IAARuN,GAAoC,IAAfA,EAAItO,SAAiB0pB,IAC7Cpb,EAAsC,EAAQA,KAAOkyK,EAAO92J,IAE9D,OAAe3oB,IAARuN,GAAqBA,EAAItO,OAAS,EAAG,GAK5C,IAAMomP,OACYrlP,IAAhBzE,EAAQgS,IAAoBq3O,GAAkBA,G,OAMhD,EAAKlC,YAA2B1iP,IAAlBzE,EAAQ4xE,MAAsBs6G,GAAQlsL,EAAQ4xE,OAAS,KAMrE,EAAKy5K,WD+GF,SAAaj+N,EAAOpb,EAAKkjB,EAAM1H,EAAas8N,EAAYl4K,GAC7D,IAAI46G,EAAY,OAAmBx6K,EAAKwb,EAAaokD,GAKrD,OAJK46G,IACHA,EAAY,IAAI8+D,GAAUl+N,EAAOpb,EAAKkjB,EAAM1H,EAAas8N,EAAYl4K,GACrE,OAAmB5/D,EAAKwb,EAAaokD,EAAO46G,IAEvCA,ECrHa,CAChBp/J,EACsB,OACJ3oB,IAAlB,EAAK0mP,SAAyB,EAAKA,SAAW,KAC9C,EAAKD,aACLpB,EACA,EAAK3C,QAOP,EAAKoE,aAA6B9mP,IAAnBzE,EAAQsyB,OAAuBtyB,EAAQsyB,OAAS,CAAC,EAAG,GAKnE,EAAKk5N,mBACsB/mP,IAAzBzE,EAAQyrP,aACJzrP,EAAQyrP,aACRb,GAAWnD,SAMjB,EAAKiE,QAAU,KAMf,EAAKxB,WAAyBzlP,IAAjBzE,EAAQk1B,KAAqBl1B,EAAQk1B,KAAO,K,EAkO7D,OA/XmB,QAqKjB,YAAArqB,MAAA,WACE,IAAM+/B,EAAQvqC,KAAK2sJ,WACnB,OAAO,IAAI2+F,EAAK,CACd15O,OAAQ5R,KAAK2vN,QAAQhlN,QACrB2/O,aAActqP,KAAKqqP,cACnBI,aAAczqP,KAAKwqP,cACnBI,aAAc5qP,KAAK2qP,cACnBp5K,MACEvxE,KAAK8mP,QAAU9mP,KAAK8mP,OAAOn8O,MACvB3K,KAAK8mP,OAAOn8O,QACZ3K,KAAK8mP,aAAU1iP,EACrB+oB,YAAantB,KAAK6qP,aAClBE,QAAS/qP,KAAK8qP,SACd74N,OAAQjyB,KAAKkrP,QAAQvgP,QACrBygP,aAAcprP,KAAKmrP,cACnB33O,QAASxT,KAAKuT,aACd0gN,eAAgBj0N,KAAKq2N,oBACrBhiK,SAAUr0D,KAAKs0D,cACf/pB,MAAOzpC,MAAMC,QAAQwpC,GAASA,EAAM5/B,QAAU4/B,EAC9C1V,KAAqB,OAAf70B,KAAK6pP,MAAiB7pP,KAAK6pP,MAAMl/O,aAAUvG,EACjDuN,IAAK3R,KAAKkqP,SACVxC,aAAc1nP,KAAK8nP,kBAAkBn9O,QACrCi9O,cAAe5nP,KAAK+nP,sBAUxB,YAAAE,UAAA,WACE,IAAIr2O,EAAS5R,KAAKoqP,kBAClB,IAAKx4O,EAAQ,CACXA,EAAS5R,KAAK2vN,QACd,IAAM96L,EAAO70B,KAAKsjN,UAClB,GACEtjN,KAAKwqP,eAAiBE,GAAgBzD,UACtCjnP,KAAK2qP,eAAiBD,GAAgBzD,SACtC,CACA,IAAKpyN,EACH,OAAO,KAETjjB,EAAS5R,KAAK2vN,QAAQhlN,QAClB3K,KAAKwqP,eAAiBE,GAAgBzD,WACxCr1O,EAAO,IAAMijB,EAAK,IAEhB70B,KAAK2qP,eAAiBD,GAAgBzD,WACxCr1O,EAAO,IAAMijB,EAAK,IAItB,GAAI70B,KAAKqqP,eAAiBE,GAAWnD,SAAU,CAC7C,IAAKvyN,EACH,OAAO,KAELjjB,IAAW5R,KAAK2vN,UAClB/9M,EAAS5R,KAAK2vN,QAAQhlN,SAGtB3K,KAAKqqP,eAAiBE,GAAWlD,WACjCrnP,KAAKqqP,eAAiBE,GAAWpD,eAEjCv1O,EAAO,IAAMA,EAAO,GAAKijB,EAAK,IAG9B70B,KAAKqqP,eAAiBE,GAAWrD,aACjClnP,KAAKqqP,eAAiBE,GAAWpD,eAEjCv1O,EAAO,IAAMA,EAAO,GAAKijB,EAAK,IAGlC70B,KAAKoqP,kBAAoBx4O,EAE3B,IAAM81O,EAAe1nP,KAAK8nP,kBAC1B,MAAO,CAACl2O,EAAO,GAAK81O,EAAa,GAAI91O,EAAO,GAAK81O,EAAa,KAUhE,YAAA6D,UAAA,SAAU35O,GACR5R,KAAK2vN,QAAU/9M,EACf5R,KAAKoqP,kBAAoB,MAQ3B,YAAAr8F,SAAA,WACE,OAAO/tJ,KAAK8mP,QASd,YAAA55N,SAAA,SAASwyL,GACP,OAAO1/M,KAAKgrP,WAAW99N,SAASwyL,IASlC,YAAAyoC,cAAA,SAAczoC,GACZ,OAAO1/M,KAAKgrP,WAAW7C,cAAczoC,IAMvC,YAAA2oC,aAAA,WACE,OAAOroP,KAAKgrP,WAAW1nC,WAMzB,YAAA8kC,cAAA,WACE,OAAOpoP,KAAKgrP,WAAW5C,iBAMzB,YAAAF,qBAAA,WACE,OAAOloP,KAAKgrP,WAAW9C,wBAQzB,YAAAI,UAAA,WACE,GAAItoP,KAAKqrP,QACP,OAAOrrP,KAAKqrP,QAEd,IAAIp5N,EAASjyB,KAAKkrP,QAElB,GAAIlrP,KAAKmrP,eAAiBZ,GAAWnD,SAAU,CAC7C,IAAMvyN,EAAO70B,KAAKsjN,UACZkoC,EAAgBxrP,KAAKgrP,WAAW1nC,UACtC,IAAKzuL,IAAS22N,EACZ,OAAO,KAETv5N,EAASA,EAAOtnB,QAEd3K,KAAKmrP,eAAiBZ,GAAWlD,WACjCrnP,KAAKmrP,eAAiBZ,GAAWpD,eAEjCl1N,EAAO,GAAKu5N,EAAc,GAAK32N,EAAK,GAAK5C,EAAO,IAGhDjyB,KAAKmrP,eAAiBZ,GAAWrD,aACjClnP,KAAKmrP,eAAiBZ,GAAWpD,eAEjCl1N,EAAO,GAAKu5N,EAAc,GAAK32N,EAAK,GAAK5C,EAAO,IAIpD,OADAjyB,KAAKqrP,QAAUp5N,EACRjyB,KAAKqrP,SAQd,YAAAnB,OAAA,WACE,OAAOlqP,KAAKgrP,WAAWd,UAQzB,YAAA5mC,QAAA,WACE,OAAQtjN,KAAK6pP,MAAoC7pP,KAAK6pP,MAAjC7pP,KAAKgrP,WAAW1nC,WAMvC,YAAAklC,kBAAA,SAAkBxpM,GAChBh/C,KAAKgrP,WAAWp/O,iBAAiBmjL,GAAUhyC,OAAQ/9F,IAUrD,YAAAo3E,KAAA,WACEp2H,KAAKgrP,WAAW50H,QAMlB,YAAAqyH,oBAAA,SAAoBzpM,GAClBh/C,KAAKgrP,WAAWrqM,oBAAoBouI,GAAUhyC,OAAQ/9F,IAE1D,EA/XA,CAAmB,IAiYnB,YC5MA,SAhNA,WAIE,WAAY08I,GACV,IAAM/7L,EAAU+7L,GAAe,GAM/B17L,KAAK8mP,YAA2B1iP,IAAlBzE,EAAQ4xE,MAAsB5xE,EAAQ4xE,MAAQ,KAM5DvxE,KAAKyrP,SAAW9rP,EAAQ+rP,QAMxB1rP,KAAK2rP,eAAiCvnP,IAArBzE,EAAQ2nE,SAAyB3nE,EAAQ2nE,SAAW,KAMrEtnE,KAAK4rP,gBAAkBjsP,EAAQksP,eAM/B7rP,KAAK8rP,UAAYnsP,EAAQosP,SAMzB/rP,KAAKgsP,YAAcrsP,EAAQssP,WAM3BjsP,KAAKksP,OAASvsP,EAAQ2yB,MA+J1B,OAvJE,YAAA9nB,MAAA,WACE,IAAM+mE,EAAQvxE,KAAK+tJ,WACnB,OAAO,IAAIo+F,EAAO,CAChB56K,MAAOzwE,MAAMC,QAAQwwE,GAASA,EAAM5mE,QAAU4mE,QAASntE,EACvDsnP,QAAS1rP,KAAKosP,aACd9kL,SAAUtnE,KAAKqsP,cAAgBrsP,KAAKqsP,cAAc1hP,aAAUvG,EAC5DynP,eAAgB7rP,KAAKssP,oBACrBP,SAAU/rP,KAAKusP,cACfN,WAAYjsP,KAAKwsP,gBACjBl6N,MAAOtyB,KAAK4oL,cAShB,YAAA76B,SAAA,WACE,OAAO/tJ,KAAK8mP,QAQd,YAAAsF,WAAA,WACE,OAAOpsP,KAAKyrP,UAQd,YAAAY,YAAA,WACE,OAAOrsP,KAAK2rP,WAQd,YAAAW,kBAAA,WACE,OAAOtsP,KAAK4rP,iBAQd,YAAAW,YAAA,WACE,OAAOvsP,KAAK8rP,WAQd,YAAAU,cAAA,WACE,OAAOxsP,KAAKgsP,aAQd,YAAApjE,SAAA,WACE,OAAO5oL,KAAKksP,QASd,YAAAlF,SAAA,SAASz1K,GACPvxE,KAAK8mP,OAASv1K,GAShB,YAAAk7K,WAAA,SAAWf,GACT1rP,KAAKyrP,SAAWC,GAelB,YAAAgB,YAAA,SAAYplL,GACVtnE,KAAK2rP,UAAYrkL,GASnB,YAAAqlL,kBAAA,SAAkBd,GAChB7rP,KAAK4rP,gBAAkBC,GASzB,YAAAe,YAAA,SAAYb,GACV/rP,KAAK8rP,UAAYC,GASnB,YAAAc,cAAA,SAAcZ,GACZjsP,KAAKgsP,YAAcC,GASrB,YAAAa,SAAA,SAASx6N,GACPtyB,KAAKksP,OAAS55N,GAElB,EA9MA,GCLO,SAASy6N,GAAYx7K,GAC1B,OAAIzwE,MAAMC,QAAQwwE,GACT,GAASA,GAETA,E,+dC4BX,eAIE,WAAY5xE,GAAZ,WAIQs0N,OACuB7vN,IAA3BzE,EAAQs0N,gBAA+Bt0N,EAAQs0N,e,SAEjD,YAAM,CACJzgN,QAAS,EACTygN,eAAgBA,EAChB5/J,cAA+BjwD,IAArBzE,EAAQ00D,SAAyB10D,EAAQ00D,SAAW,EAC9D9pB,WAAyBnmC,IAAlBzE,EAAQ4qC,MAAsB5qC,EAAQ4qC,MAAQ,EACrDm9M,kBAC2BtjP,IAAzBzE,EAAQ+nP,aAA6B/nP,EAAQ+nP,aAAe,CAAC,EAAG,GAClEE,cAAejoP,EAAQioP,iBACvB,MAMG+B,aAAUvlP,EAMf,EAAK4oP,oBAAsB,KAM3B,EAAKC,WAAyB7oP,IAAjBzE,EAAQ8mF,KAAqB9mF,EAAQ8mF,KAAO,KAMzD,EAAK4kK,QAAU,CAAC,EAAG,GAMnB,EAAKt9B,QAAUpuN,EAAQmC,OAMvB,EAAKorP,aACgB9oP,IAAnBzE,EAAQiB,OAAuBjB,EAAQiB,OAASjB,EAAQwtP,QAM1D,EAAKC,SAAWztP,EAAQ0tP,QAMxB,EAAKr/B,YAA2B5pN,IAAlBzE,EAAQsC,MAAsBtC,EAAQsC,MAAQ,EAM5D,EAAKqrP,aAA6BlpP,IAAnBzE,EAAQ4V,OAAuB5V,EAAQ4V,OAAS,KAM/D,EAAKs0O,MAAQ,KAMb,EAAK0D,eAAiB,KAEtB,EAAK1wM,S,EAwdT,OAhjB2B,QAgGzB,YAAAryC,MAAA,WACE,IAAM+/B,EAAQvqC,KAAK2sJ,WACbhnJ,EAAQ,IAAI6nP,EAAa,CAC7B/mK,KAAMzmF,KAAKytP,UAAYztP,KAAKytP,UAAUjjP,aAAUpG,EAChDtC,OAAQ9B,KAAKikJ,YACbrjJ,OAAQZ,KAAKoB,YACbisP,QAASrtP,KAAK0tP,aACdzrP,MAAOjC,KAAKyrN,WACZl2M,OAAQvV,KAAK2tP,YAAc3tP,KAAK2tP,YAAYnjP,aAAUpG,EACtDiwD,SAAUr0D,KAAKs0D,cACf2/J,eAAgBj0N,KAAKq2N,oBACrB9rL,MAAOzpC,MAAMC,QAAQwpC,GAASA,EAAM5/B,QAAU4/B,EAC9Cm9M,aAAc1nP,KAAK8nP,kBAAkBn9O,QACrCi9O,cAAe5nP,KAAK+nP,qBAGtB,OADApiP,EAAM+N,WAAW1T,KAAKuT,cACf5N,GAST,YAAAsiP,UAAA,WACE,IAAMpzN,EAAO70B,KAAK6pP,MAClB,IAAKh1N,EACH,OAAO,KAET,IAAM6yN,EAAe1nP,KAAK8nP,kBAC1B,MAAO,CAACjzN,EAAK,GAAK,EAAI6yN,EAAa,GAAI7yN,EAAK,GAAK,EAAI6yN,EAAa,KAQpE,YAAAj8B,SAAA,WACE,OAAOzrN,KAAKguN,QAQd,YAAAy/B,QAAA,WACE,OAAOztP,KAAKitP,OAQd,YAAAW,QAAA,SAAQnnK,GACNzmF,KAAKitP,MAAQxmK,EACbzmF,KAAK68C,UAMP,YAAAqrM,qBAAA,WAIE,OAHKloP,KAAKgtP,qBACRhtP,KAAK6tP,0BAA0B7tP,KAAKutP,gBAE/BvtP,KAAKgtP,qBASd,YAAA9/N,SAAA,SAASwyL,GACP,IAAI3yL,EAAQ/sB,KAAK2pP,QAAQjqC,GACzB,IAAK3yL,EAAO,CACV,IAAM69B,EAAgB5qD,KAAKutP,eACrBj7K,EAAU+kH,GACdzsI,EAAc/1B,KAAO6qL,EACrB90J,EAAc/1B,KAAO6qL,GAEvB1/M,KAAK8tP,MAAMljM,EAAe0nB,EAASotI,GAEnC3yL,EAAQulD,EAAQjV,OAChBr9D,KAAK2pP,QAAQjqC,GAAc3yL,EAE7B,OAAOA,GAQT,YAAAo7N,cAAA,SAAczoC,GACZ,OAAOA,GAMT,YAAA2oC,aAAA,WACE,OAAOroP,KAAK6pP,OAMd,YAAAzB,cAAA,WACE,OAAOY,IAQT,YAAAV,UAAA,WACE,OAAOtoP,KAAKqrP,SAQd,YAAApnG,UAAA,WACE,OAAOjkJ,KAAK+tN,SAQd,YAAA3sN,UAAA,WACE,OAAOpB,KAAKktP,SAQd,YAAAQ,WAAA,WACE,OAAO1tP,KAAKotP,UAQd,YAAA9pC,QAAA,WACE,OAAOtjN,KAAK6pP,OAQd,YAAA8D,UAAA,WACE,OAAO3tP,KAAKstP,SAQd,YAAAS,UAAA,SAAUx4O,GACRvV,KAAKstP,QAAU/3O,EACfvV,KAAK68C,UAMP,YAAA2rM,kBAAA,SAAkBxpM,KAKlB,YAAAo3E,KAAA,aAKA,YAAAqyH,oBAAA,SAAoBzpM,KAUpB,YAAAgvM,uBAAA,SAAuBjC,EAAUhgN,EAAakgN,GAC5C,GACkB,IAAhBlgN,GACA/rC,KAAK+tN,UAAY/3J,EAAAA,GACH,UAAb+1L,GAAqC,UAAbA,EAEzB,OAAOhgN,EAwBT,IAAIkiN,EAAKjuP,KAAKktP,QACVgB,OAAuB9pP,IAAlBpE,KAAKotP,SAAyBa,EAAKjuP,KAAKotP,SACjD,GAAIa,EAAKC,EAAI,CACX,IAAM3pE,EAAM0pE,EACZA,EAAKC,EACLA,EAAK3pE,EAEP,IAAMziL,OACcsC,IAAlBpE,KAAKotP,SAAyBptP,KAAK+tN,QAAyB,EAAf/tN,KAAK+tN,QAC9CviI,EAAS,EAAIjqF,KAAKS,GAAMF,EACxBgZ,EAAIozO,EAAK3sP,KAAKa,IAAIopF,GAElBtpD,EAAI+rN,EADA1sP,KAAKkrC,KAAKyhN,EAAKA,EAAKpzO,EAAIA,GAE5B/b,EAAIwC,KAAKkrC,KAAK3xB,EAAIA,EAAIonB,EAAIA,GAC1BisN,EAAapvP,EAAI+b,EACvB,GAAiB,UAAbixO,GAAwBoC,GAAclC,EACxC,OAAOkC,EAAapiN,EAetB,IAAMl0B,EAAIk0B,EAAc,EAAIoiN,EACtBptO,EAAKgrB,EAAc,GAAM7J,EAAInjC,GAE7BqvP,EADO7sP,KAAKkrC,MAAMwhN,EAAKp2O,IAAMo2O,EAAKp2O,GAAKkJ,EAAIA,GACzBktO,EACxB,QAAsB7pP,IAAlBpE,KAAKotP,UAAuC,UAAbrB,EACjC,OAAkB,EAAXqC,EAIT,IAAMC,EAAKJ,EAAK1sP,KAAKa,IAAIopF,GAEnBxmC,EAAKkpM,EADA3sP,KAAKkrC,KAAKwhN,EAAKA,EAAKI,EAAKA,GAG9BC,EADK/sP,KAAKkrC,KAAK4hN,EAAKA,EAAKrpM,EAAKA,GACPqpM,EAC7B,GAAIC,GAAmBrC,EAAY,CACjC,IAAMsC,EAAeD,EAAkBviN,EAAe,EAAImiN,EAAKD,EAC/D,OAAO,EAAI1sP,KAAK4K,IAAIiiP,EAAUG,GAEhC,OAAkB,EAAXH,GAOT,YAAAI,oBAAA,WACE,IAIIvvH,EAJA8sH,EAAWtzD,GACXwzD,EAAa,EACb3kL,EAAW,KACXukL,EAAiB,EAEjB9/M,EAAc,EAEd/rC,KAAKstP,UAEa,QADpBruH,EAAcj/H,KAAKstP,QAAQv/F,cAEzB9uB,EAAcy5D,IAEhBz5D,EAAc8tH,GAAY9tH,QAEN76H,KADpB2nC,EAAc/rC,KAAKstP,QAAQ1kE,cAEzB78I,ErI3SwB,GqI6S1Bu7B,EAAWtnE,KAAKstP,QAAQjB,cACxBR,EAAiB7rP,KAAKstP,QAAQhB,yBAEbloP,KADjB2nP,EAAW/rP,KAAKstP,QAAQf,iBAEtBR,EAAWtzD,SAGMr0L,KADnB6nP,EAAajsP,KAAKstP,QAAQd,mBAExBP,ErInVyB,KqIuV7B,IAAMrxO,EAAM5a,KAAKguP,uBAAuBjC,EAAUhgN,EAAakgN,GACzDwC,EAAYltP,KAAK4K,IAAInM,KAAKktP,QAASltP,KAAKotP,UAAY,GAG1D,MAAO,CACLnuH,YAAaA,EACblzF,YAAaA,EACblX,KALWtzB,KAAKgjD,KAAK,EAAIkqM,EAAY7zO,GAMrC0sD,SAAUA,EACVukL,eAAgBA,EAChBE,SAAUA,EACVE,WAAYA,IAOhB,YAAApvM,OAAA,WACE78C,KAAKutP,eAAiBvtP,KAAKwuP,sBAC3B,IAAM35N,EAAO70B,KAAKutP,eAAe14N,KACjC70B,KAAK2pP,QAAU,GACf3pP,KAAK6pP,MAAQ,CAACh1N,EAAMA,IAStB,YAAAi5N,MAAA,SAAMljM,EAAe0nB,EAASotI,GAO5B,GANAptI,EAAQ/nC,MAAMm1K,EAAYA,GAE1BptI,EAAQkD,UAAU5qB,EAAc/1B,KAAO,EAAG+1B,EAAc/1B,KAAO,GAE/D70B,KAAK0uP,YAAYp8K,GAEbtyE,KAAKitP,MAAO,CACd,IAAI17K,EAAQvxE,KAAKitP,MAAMl/F,WACT,OAAVx8E,IACFA,EAAQ+mH,IAEVhmH,EAAQK,UAAYo6K,GAAYx7K,GAChCe,EAAQmU,OAENzmF,KAAKstP,UACPh7K,EAAQ2sD,YAAcr0E,EAAcq0E,YACpC3sD,EAAQq8K,UAAY/jM,EAAc7e,YAC9BumC,EAAQo6K,aAAe9hM,EAAc0c,WACvCgL,EAAQo6K,YAAY9hM,EAAc0c,UAClCgL,EAAQu5K,eAAiBjhM,EAAcihM,gBAEzCv5K,EAAQy5K,SAAWnhM,EAAcmhM,SACjCz5K,EAAQ25K,WAAarhM,EAAcqhM,WACnC35K,EAAQ/8D,WAQZ,YAAAs4O,0BAAA,SAA0BjjM,GACxB,GAAI5qD,KAAKitP,MAAO,CACd,IAAI17K,EAAQvxE,KAAKitP,MAAMl/F,WAGnBv6I,EAAU,EASd,GARqB,iBAAV+9D,IACTA,EAAQs6G,GAAQt6G,IAEJ,OAAVA,EACF/9D,EAAU,EACD1S,MAAMC,QAAQwwE,KACvB/9D,EAA2B,IAAjB+9D,EAAMluE,OAAekuE,EAAM,GAAK,GAE5B,IAAZ/9D,EAAe,CAGjB,IAAM8+D,EAAU+kH,GACdzsI,EAAc/1B,KACd+1B,EAAc/1B,MAEhB70B,KAAKgtP,oBAAsB16K,EAAQjV,OAEnCr9D,KAAK4uP,wBAAwBhkM,EAAe0nB,IAG3CtyE,KAAKgtP,sBACRhtP,KAAKgtP,oBAAsBhtP,KAAKktB,SAAS,KAQ7C,YAAAwhO,YAAA,SAAYp8K,GACV,IAAIxwE,EAAS9B,KAAK+tN,QACZntN,EAASZ,KAAKktP,QACpB,GAAIprP,IAAWk0D,EAAAA,EACbsc,EAAQ6vK,IAAI,EAAG,EAAGvhP,EAAQ,EAAG,EAAIW,KAAKS,QACjC,CACL,IAAMqrP,OAA4BjpP,IAAlBpE,KAAKotP,SAAyBxsP,EAASZ,KAAKotP,cACtChpP,IAAlBpE,KAAKotP,WACPtrP,GAAU,GAIZ,IAFA,IAAMmyM,EAAaj0M,KAAKguN,OAASzsN,KAAKS,GAAK,EACrC2uB,EAAQ,EAAIpvB,KAAKS,GAAMF,EACpBI,EAAI,EAAGA,EAAIJ,EAAQI,IAAK,CAC/B,IAAM2sP,EAAS56C,EAAa/xM,EAAIyuB,EAC1Bm+N,EAAU5sP,EAAI,GAAM,EAAItB,EAASysP,EACvC/6K,EAAQ8sD,OAAO0vH,EAAUvtP,KAAKY,IAAI0sP,GAASC,EAAUvtP,KAAKa,IAAIysP,IAEhEv8K,EAAQy8K,cASZ,YAAAH,wBAAA,SAAwBhkM,EAAe0nB,GAErCA,EAAQkD,UAAU5qB,EAAc/1B,KAAO,EAAG+1B,EAAc/1B,KAAO,GAE/D70B,KAAK0uP,YAAYp8K,GAEjBA,EAAQK,UAAY2lH,GACpBhmH,EAAQmU,OACJzmF,KAAKstP,UACPh7K,EAAQ2sD,YAAcr0E,EAAcq0E,YACpC3sD,EAAQq8K,UAAY/jM,EAAc7e,YAC9B6e,EAAc0c,WAChBgL,EAAQo6K,YAAY9hM,EAAc0c,UAClCgL,EAAQu5K,eAAiBjhM,EAAcihM,gBAEzCv5K,EAAQy5K,SAAWnhM,EAAcmhM,SACjCz5K,EAAQ25K,WAAarhM,EAAcqhM,WACnC35K,EAAQ/8D,WAGd,EAhjBA,CAA2B,IAkjB3B,Y,+dC9kBA,eAIE,WAAYmmL,GACV,IAAM/7L,EAAU+7L,GAA4B,G,OAE5C,YAAM,CACJ55L,OAAQk0D,EAAAA,EACRywB,KAAM9mF,EAAQ8mF,KACd7lF,OAAQjB,EAAQiB,OAChB2U,OAAQ5V,EAAQ4V,OAChBg1B,WAAyBnmC,IAAlBzE,EAAQ4qC,MAAsB5qC,EAAQ4qC,MAAQ,EACrD8pB,cAA+BjwD,IAArBzE,EAAQ00D,SAAyB10D,EAAQ00D,SAAW,EAC9D4/J,oBAC6B7vN,IAA3BzE,EAAQs0N,gBAA+Bt0N,EAAQs0N,eACjDyzB,kBAC2BtjP,IAAzBzE,EAAQ+nP,aAA6B/nP,EAAQ+nP,aAAe,CAAC,EAAG,GAClEE,cAAejoP,EAAQioP,iBACvB,KAkCN,OArD0B,QA2BxB,YAAAp9O,MAAA,WACE,IAAM+/B,EAAQvqC,KAAK2sJ,WACbhnJ,EAAQ,IAAIqpP,EAAY,CAC5BvoK,KAAMzmF,KAAKytP,UAAYztP,KAAKytP,UAAUjjP,aAAUpG,EAChDmR,OAAQvV,KAAK2tP,YAAc3tP,KAAK2tP,YAAYnjP,aAAUpG,EACtDxD,OAAQZ,KAAKoB,YACbmpC,MAAOzpC,MAAMC,QAAQwpC,GAASA,EAAM5/B,QAAU4/B,EAC9C8pB,SAAUr0D,KAAKs0D,cACf2/J,eAAgBj0N,KAAKq2N,oBACrBqxB,aAAc1nP,KAAK8nP,kBAAkBn9O,QACrCi9O,cAAe5nP,KAAK+nP,qBAGtB,OADApiP,EAAM+N,WAAW1T,KAAKuT,cACf5N,GAST,YAAA2lG,UAAA,SAAU1qG,GACRZ,KAAKktP,QAAUtsP,EACfZ,KAAK68C,UAET,EArDA,CAA0B,IAuD1B,YCsEA,kBAIE,WAAY6+I,GACV,IAAM/7L,EAAU+7L,GAAe,GAM/B17L,KAAK6rN,UAAY,KAMjB7rN,KAAKivP,kBAAoBC,QAEA9qP,IAArBzE,EAAQW,UACVN,KAAK6H,YAAYlI,EAAQW,UAO3BN,KAAKitP,WAAyB7oP,IAAjBzE,EAAQ8mF,KAAqB9mF,EAAQ8mF,KAAO,KAMzDzmF,KAAKkpP,YAA2B9kP,IAAlBzE,EAAQotB,MAAsBptB,EAAQotB,MAAQ,KAM5D/sB,KAAK6yL,eAAiCzuL,IAArBzE,EAAQwjN,SAAyBxjN,EAAQwjN,SAAW,KAMrEnjN,KAAKmvP,2BAC8B/qP,IAAjCzE,EAAQyvP,qBACJzvP,EAAQyvP,qBACR,KAMNpvP,KAAKstP,aAA6BlpP,IAAnBzE,EAAQ4V,OAAuB5V,EAAQ4V,OAAS,KAM/DvV,KAAKqvP,WAAyBjrP,IAAjBzE,EAAQyZ,KAAqBzZ,EAAQyZ,KAAO,KAMzDpZ,KAAKsvP,QAAU3vP,EAAQ+sC,OA4M3B,OApME,YAAAliC,MAAA,WACE,IAAIlK,EAAWN,KAAKmB,cAMpB,OALIb,GAAgC,iBAAbA,IACrBA,EAAgE,EAE9DkK,SAEG,IAAI+kP,EAAM,CACfjvP,SAAUA,EACVmmF,KAAMzmF,KAAKytP,UAAYztP,KAAKytP,UAAUjjP,aAAUpG,EAChD2oB,MAAO/sB,KAAKktB,WAAaltB,KAAKktB,WAAW1iB,aAAUpG,EACnD++M,SAAUnjN,KAAKuzL,cACfh+K,OAAQvV,KAAK2tP,YAAc3tP,KAAK2tP,YAAYnjP,aAAUpG,EACtDgV,KAAMpZ,KAAKsgB,UAAYtgB,KAAKsgB,UAAU9V,aAAUpG,EAChDsoC,OAAQ1sC,KAAK+wL,eAUjB,YAAAwC,YAAA,WACE,OAAOvzL,KAAK6yL,WASd,YAAA28D,YAAA,SAAYrsC,GACVnjN,KAAK6yL,UAAYswB,GASnB,YAAAssC,wBAAA,SAAwBtsC,GACtBnjN,KAAKmvP,sBAAwBhsC,GAS/B,YAAAusC,wBAAA,WACE,OAAO1vP,KAAKmvP,uBAUd,YAAAhuP,YAAA,WACE,OAAOnB,KAAK6rN,WASd,YAAA8jC,oBAAA,WACE,OAAO3vP,KAAKivP,mBAQd,YAAAxB,QAAA,WACE,OAAOztP,KAAKitP,OAQd,YAAAW,QAAA,SAAQnnK,GACNzmF,KAAKitP,MAAQxmK,GAQf,YAAAv5D,SAAA,WACE,OAAOltB,KAAKkpP,QAQd,YAAA1iF,SAAA,SAASz5I,GACP/sB,KAAKkpP,OAASn8N,GAQhB,YAAA4gO,UAAA,WACE,OAAO3tP,KAAKstP,SAQd,YAAAS,UAAA,SAAUx4O,GACRvV,KAAKstP,QAAU/3O,GAQjB,YAAA+K,QAAA,WACE,OAAOtgB,KAAKqvP,OAQd,YAAAO,QAAA,SAAQx2O,GACNpZ,KAAKqvP,MAAQj2O,GAQf,YAAA23K,UAAA,WACE,OAAO/wL,KAAKsvP,SAWd,YAAAznP,YAAA,SAAYvH,GACc,mBAAbA,EACTN,KAAKivP,kBAAoB3uP,EACI,iBAAbA,EAChBN,KAAKivP,kBAAoB,SAAUxrP,GACjC,OACEA,EAAQ+a,IAAIle,IAGNA,OAEY8D,IAAb9D,IACTN,KAAKivP,kBAAoB,WACvB,OAA4D,IAH9DjvP,KAAKivP,kBAAoBC,GAM3BlvP,KAAK6rN,UAAYvrN,GASnB,YAAA0xL,UAAA,SAAUtlJ,GACR1sC,KAAKsvP,QAAU5iN,GAEnB,EA9QA,GAmTA,IAAImjN,GAAgB,KAOb,SAASC,GAAmBrsP,EAAS0gD,GAM1C,IAAK0rM,GAAe,CAClB,IAAMppK,EAAO,IAAI,GAAK,CACpBlV,MAAO,0BAEHh8D,EAAS,IAAI,GAAO,CACxBg8D,MAAO,UACPj/C,MAAO,OAETu9N,GAAgB,CACd,IAAIN,GAAM,CACRxiO,MAAO,IAAI,GAAY,CACrB05D,KAAMA,EACNlxE,OAAQA,EACR3U,OAAQ,IAEV6lF,KAAMA,EACNlxE,OAAQA,KAId,OAAOs6O,GAOF,SAASE,KAEd,IAAM3pP,EAAS,GACT4pP,EAAQ,CAAC,IAAK,IAAK,IAAK,GACxBC,EAAO,CAAC,EAAG,IAAK,IAAK,GAmD3B,OAjDA7pP,EAAgB,QAAI,CAClB,IAAImpP,GAAM,CACR9oK,KAAM,IAAI,GAAK,CACblV,MAAO,CAAC,IAAK,IAAK,IAAK,SAI7BnrE,EAAqB,aAAIA,EAAgB,QAEzCA,EAAmB,WAAI,CACrB,IAAImpP,GAAM,CACRh6O,OAAQ,IAAI,GAAO,CACjBg8D,MAAOy+K,EACP19N,MAAOA,MAGX,IAAIi9N,GAAM,CACRh6O,OAAQ,IAAI,GAAO,CACjBg8D,MAAO0+K,EACP39N,MApBQ,OAwBdlsB,EAAwB,gBAAIA,EAAmB,WAE/CA,EAAe,OAAIA,EAAgB,QAAEiC,OAAOjC,EAAmB,YAE/DA,EAAc,MAAI,CAChB,IAAImpP,GAAM,CACRxiO,MAAO,IAAI,GAAY,CACrBnsB,OAAQ0xB,EACRm0D,KAAM,IAAI,GAAK,CACblV,MAAO0+K,IAET16O,OAAQ,IAAI,GAAO,CACjBg8D,MAAOy+K,EACP19N,MAAOA,QAGXoa,OAAQspB,EAAAA,KAGZ5vD,EAAmB,WAAIA,EAAc,MAErCA,EAA2B,mBAAIA,EAAgB,QAAEiC,OAC/CjC,EAAmB,WACnBA,EAAc,OAGTA,EAQT,SAAS8oP,GAAwBzrP,GAC/B,OAAOA,EAAQtC,cAGjB,YC1iBA,GACS,QADT,GAEQ,OCAR,IA6CA,cAIE,WAAYu6L,GACV,IAAM/7L,EAAU+7L,GAAe,GAM/B17L,KAAKkwP,MAAQvwP,EAAQggI,KAMrB3/H,KAAKmoN,UAAYxoN,EAAQ00D,SAMzBr0D,KAAKg0N,gBAAkBr0N,EAAQs0N,eAM/Bj0N,KAAKunP,OAAS5nP,EAAQ4qC,MAMtBvqC,KAAKwnP,YAAc/oC,QAAyBr6M,IAAlBzE,EAAQ4qC,MAAsB5qC,EAAQ4qC,MAAQ,GAMxEvqC,KAAKqvP,MAAQ1vP,EAAQyZ,KAMrBpZ,KAAKmwP,WAAaxwP,EAAQigI,UAM1B5/H,KAAKowP,SAAWzwP,EAAQ0wP,QAMxBrwP,KAAKswP,cAAgB3wP,EAAQkgI,aAM7B7/H,KAAKitP,WACc7oP,IAAjBzE,EAAQ8mF,KACJ9mF,EAAQ8mF,KACR,IAAI,GAAK,CAAClV,MAjHO,SAuHvBvxE,KAAKuwP,eACkBnsP,IAArBzE,EAAQ6wP,SAAyB7wP,EAAQ6wP,SAAWjvP,KAAKS,GAAK,EAMhEhC,KAAKywP,gBACmBrsP,IAAtBzE,EAAQ+wP,UAA0B/wP,EAAQ+wP,UAAYC,GAMxD3wP,KAAK4wP,YAAcjxP,EAAQ6gN,SAM3BxgN,KAAKstP,aAA6BlpP,IAAnBzE,EAAQ4V,OAAuB5V,EAAQ4V,OAAS,KAM/DvV,KAAK6wP,cAA+BzsP,IAApBzE,EAAQ+3M,QAAwB/3M,EAAQ+3M,QAAU,EAMlE13M,KAAK8wP,cAA+B1sP,IAApBzE,EAAQg4M,QAAwBh4M,EAAQg4M,QAAU,EAMlE33M,KAAK+wP,gBAAkBpxP,EAAQqxP,eAC3BrxP,EAAQqxP,eACR,KAMJhxP,KAAKixP,kBAAoBtxP,EAAQuxP,iBAC7BvxP,EAAQuxP,iBACR,KAMJlxP,KAAK02M,cAA+BtyM,IAApBzE,EAAQgjJ,QAAwB,KAAOhjJ,EAAQgjJ,QAkYnE,OA1XE,YAAAn4I,MAAA,WACE,IAAM+/B,EAAQvqC,KAAK2sJ,WACnB,OAAO,IAAIwkG,EAAK,CACdxxH,KAAM3/H,KAAKoxP,UACXV,UAAW1wP,KAAKqxP,eAChBb,SAAUxwP,KAAKsxP,cACf9wC,SAAUxgN,KAAKuxP,cACfl9L,SAAUr0D,KAAKs0D,cACf2/J,eAAgBj0N,KAAKq2N,oBACrB9rL,MAAOzpC,MAAMC,QAAQwpC,GAASA,EAAM5/B,QAAU4/B,EAC9CnxB,KAAMpZ,KAAKsgB,UACXs/G,UAAW5/H,KAAKwxP,eAChBnB,QAASrwP,KAAKyxP,aACd5xH,aAAc7/H,KAAK0xP,kBACnBjrK,KAAMzmF,KAAKytP,UAAYztP,KAAKytP,UAAUjjP,aAAUpG,EAChDmR,OAAQvV,KAAK2tP,YAAc3tP,KAAK2tP,YAAYnjP,aAAUpG,EACtDszM,QAAS13M,KAAK2xP,aACdh6C,QAAS33M,KAAK4xP,aACdZ,eAAgBhxP,KAAK6xP,oBACjB7xP,KAAK6xP,oBAAoBrnP,aACzBpG,EACJ8sP,iBAAkBlxP,KAAK8xP,sBACnB9xP,KAAK8xP,sBAAsBtnP,aAC3BpG,EACJu+I,QAAS3iJ,KAAK+xP,mBAAgB3tP,KASlC,YAAAmtP,YAAA,WACE,OAAOvxP,KAAK4wP,WAQd,YAAAQ,QAAA,WACE,OAAOpxP,KAAKkwP,OAQd,YAAAoB,YAAA,WACE,OAAOtxP,KAAKuwP,WAQd,YAAAc,aAAA,WACE,OAAOrxP,KAAKywP,YAQd,YAAAkB,WAAA,WACE,OAAO3xP,KAAK6wP,UAQd,YAAAe,WAAA,WACE,OAAO5xP,KAAK8wP,UAQd,YAAArD,QAAA,WACE,OAAOztP,KAAKitP,OAQd,YAAA52B,kBAAA,WACE,OAAOr2N,KAAKg0N,iBAQd,YAAA1/J,YAAA,WACE,OAAOt0D,KAAKmoN,WAQd,YAAAx7D,SAAA,WACE,OAAO3sJ,KAAKunP,QAOd,YAAAS,cAAA,WACE,OAAOhoP,KAAKwnP,aAQd,YAAAmG,UAAA,WACE,OAAO3tP,KAAKstP,SAQd,YAAAhtO,QAAA,WACE,OAAOtgB,KAAKqvP,OAQd,YAAAmC,aAAA,WACE,OAAOxxP,KAAKmwP,YAQd,YAAAsB,WAAA,WACE,OAAOzxP,KAAKowP,UAQd,YAAAsB,gBAAA,WACE,OAAO1xP,KAAKswP,eAQd,YAAAuB,kBAAA,WACE,OAAO7xP,KAAK+wP,iBAQd,YAAAe,oBAAA,WACE,OAAO9xP,KAAKixP,mBAQd,YAAAc,WAAA,WACE,OAAO/xP,KAAK02M,UASd,YAAAs7C,YAAA,SAAYxxC,GACVxgN,KAAK4wP,UAAYpwC,GASnB,YAAAyxC,QAAA,SAAQtyH,GACN3/H,KAAKkwP,MAAQvwH,GASf,YAAAuyH,YAAA,SAAY1B,GACVxwP,KAAKuwP,UAAYC,GASnB,YAAA2B,WAAA,SAAWz6C,GACT13M,KAAK6wP,SAAWn5C,GASlB,YAAA06C,WAAA,SAAWz6C,GACT33M,KAAK8wP,SAAWn5C,GASlB,YAAA06C,aAAA,SAAa3B,GACX1wP,KAAKywP,WAAaC,GASpB,YAAAp6B,kBAAA,SAAkBrC,GAChBj0N,KAAKg0N,gBAAkBC,GASzB,YAAA25B,QAAA,SAAQnnK,GACNzmF,KAAKitP,MAAQxmK,GASf,YAAAryB,YAAA,SAAYC,GACVr0D,KAAKmoN,UAAY9zJ,GASnB,YAAA84F,SAAA,SAAS5iH,GACPvqC,KAAKunP,OAASh9M,EACdvqC,KAAKwnP,YAAc/oC,QAAiBr6M,IAAVmmC,EAAsBA,EAAQ,IAS1D,YAAAwjN,UAAA,SAAUx4O,GACRvV,KAAKstP,QAAU/3O,GASjB,YAAAq6O,QAAA,SAAQx2O,GACNpZ,KAAKqvP,MAAQj2O,GASf,YAAAk5O,aAAA,SAAa1yH,GACX5/H,KAAKmwP,WAAavwH,GASpB,YAAA2yH,WAAA,SAAWlC,GACTrwP,KAAKowP,SAAWC,GASlB,YAAAmC,gBAAA,SAAgB3yH,GACd7/H,KAAKswP,cAAgBzwH,GASvB,YAAA4yH,kBAAA,SAAkBhsK,GAChBzmF,KAAK+wP,gBAAkBtqK,GASzB,YAAAisK,oBAAA,SAAoBn9O,GAClBvV,KAAKixP,kBAAoB17O,GAS3B,YAAAo9O,WAAA,SAAWhwG,GACT3iJ,KAAK02M,SAAW/zD,GAEpB,EAlgBA,GAogBA,Y,IC7XIiwG,GAkBAC,GAKAC,GAKAC,GAKAC,GAKAC,G,2dA5JEC,GAAoB,CAAC,qCAMrB,GAAiB,CACrB,KACA,kCACA,kCACA,kCACA,kCAcIC,GAAwB,CAC5B,SAAYzI,GAAgBzD,SAC5B,OAAUyD,GAAgBlnD,OAC1B,YAAeknD,GAAgBlnD,QAQ3B4vD,GAAoB3vB,GACxB,GACA,CACE,aAAgB4vB,GAChB,OAAUC,GACV,cAAiB7wB,GAAyB8wB,GAAmB,YAC7D,WAAc9wB,GAAyB2E,GAAgB,YACvD,WAAc3E,GAAyB8E,GAAgB,YACvD,MAAS9E,GAAyB6D,GAAW,YAC7C,QAAW7D,GAAyB+E,GAAa,YACjD,MAAS/E,GAAyB,IAClC,SAs8DJ,SAAiChuN,EAAM0tN,GACrC,IAAMqxB,EAAgBC,GAAkB/yP,KAAKV,KAAMyU,EAAM0tN,GACzD,IAAKqxB,EACH,OAEF,IAAME,EAAkBvxB,EAAYA,EAAY9+N,OAAS,GACrDvC,MAAMC,QAAQyyP,GAChBE,EAAuB,MAAIF,EACO,iBAAlBA,EAChBE,EAA0B,SAAIF,EAE9B,GAAO,EAAO,KAh9Dd,QAAW/wB,GAAyBsG,IACpC,YAAetG,GAAyBsG,IACxC,KAAQtG,GAAyBsG,IACjC,KAAQtG,GAAyB6F,IACjC,YAAe7F,GAAyBsG,IACxC,SAAYtG,GAAyBkxB,IACrC,WAAclxB,GAAyB6F,KAEzC7E,GAAgByvB,GAAmB,CACjC,WAAczwB,IAy3ClB,SAA0BhuN,EAAM0tN,GAC9B,IAAMrF,EAAcmH,GAClB,GACA2vB,GACAn/O,EACA0tN,GAEF,IAAKrF,EACH,OAEF,OAAO,IAAI,GAAgBA,KAn4CgC,YACzD,MAAS2F,GAAyBoxB,GAAa,eAS7CC,GAAuBrwB,GAAgB,GAAgB,CAC3D,aAAgB4vB,GAChB,OAAUC,GACV,KAqmEF,SAAoB7+O,EAAM0tN,GACxB2B,GAAU,GAAcrvN,EAAM0tN,IArmE9B,QAAWM,GAAyBsG,IACpC,YAAetG,GAAyBsG,IACxC,KAAQtG,GAAyBsG,IACjC,KAAQtG,GAAyB6F,IACjC,YAAe7F,GAAyBsG,IACxC,WAActG,GAAyB6F,MAQnC,GAAe7E,GAAgB,GAAgB,CACnD,KAAQhB,GAAyBsxB,MAQ7BC,GAAiBvwB,GAAgB,GAAgB,CACrD,aAy9DF,SAA4BhvN,EAAM0tN,GAChC,IAAMp6K,EAASk8K,GACb,GACAgwB,GACAx/O,EACA0tN,GAEF,IAAKp6K,EACH,OAEF,IAAMmsM,EACJ/xB,EAAYA,EAAY9+N,OAAS,GAE7BiY,EAAS,CACb1T,WAAWmgD,EAAa,MACxBngD,WAAWmgD,EAAc,OACzBngD,WAAWmgD,EAAa,MACxBngD,WAAWmgD,EAAc,QAE3BmsM,EAAqB,OAAI54O,EACzB44O,EAA2B,aAAInsM,EAAqB,aACpDmsM,EAA0B,YAAItsP,WAAWmgD,EAAoB,aAC7DmsM,EAA0B,YAAItsP,WAAWmgD,EAAoB,cA9+D7D,IAigEF,SAAmBtzC,EAAM0tN,GACvB,IAAMp6K,EAASk8K,GAAgB,GAAIkwB,GAAa1/O,EAAM0tN,GACtD,IAAKp6K,EACH,OAEF,IAAMqsM,EAAmCjyB,EAAYA,EAAY9+N,OAAS,GAC1E+wP,EAAwB,aAAIxsP,WAAWmgD,EAAqB,cAC5DqsM,EAAwB,aAAIxsP,WAAWmgD,EAAqB,cAC5DqsM,EAAyB,cAAIxsP,WAAWmgD,EAAsB,eAC9DqsM,EAAyB,cAAIxsP,WAAWmgD,EAAsB,kBAlgE1DssM,GAAe5wB,GAAgB,GAAgB,CAAC,WAAY,cAO5D6wB,GAAkB7wB,GAAgB,GAAgB,CACtD,SAAYf,IAquEd,SAAuBjuN,EAAM3F,EAAUqzN,GAErCgC,GADiE,CAAC1vN,KAAMA,GAGtE8/O,GACAC,GACA1lP,EACAqzN,OACA/9N,EACApE,SA7uEF,UAAa0iO,GAAkB+xB,MAW7BC,GAAqB,KAsCzB,IAaIC,GAbAC,GAAsB,KAkB1B,IAaIC,GAbAC,GAAuB,KAkB3B,IAAIC,GAAqB,KAazB,IAAIC,GAAgB,KAapB,IAkFIC,GAlFAC,GAAsB,KAe1B,SAASC,GAAatgO,GACpB,OAAO,GAAKtzB,KAAKqa,IAAIiZ,EAAK,GAAIA,EAAK,IAkFrC,SAASugO,GAAuBvjP,GAC9B,OAAOA,EAgCT,mBAIE,WAAY6pL,GAAZ,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAEvCw5D,KAtHPR,GAAqB,IAAI,GAAK,CAC5BnjL,MAHFqhL,GAAgB,CAAC,IAAK,IAAK,IAAK,KAchCK,GACE,+DAEF2B,GAAsB,IAAI,GAAK,CAC7BhjP,OAZFihP,GAA6B,CAAC,GAAI,GAahCvI,aAAcC,GAAWrD,YACzBuD,aAZFqI,GAAqCpI,GAAgBlnD,OAanDonD,aAXFmI,GAAqCrI,GAAgBlnD,OAYnDr2K,YAAa,YACbknC,SAAU,EACV9pB,MAAO4qN,GAZTnC,GAA2B,CAAC,GAAI,KAa9Bn+N,KAAMm+N,GACNrhP,IAAKshP,KAGP0B,GAAyB,WAEzBG,GAAuB,IAAI,GAAO,CAChCvjL,MAAOqhL,GACPtgO,MAAO,IAGTuiO,GAA4B,IAAI,GAAO,CACrCtjL,MAAO,CAAC,GAAI,GAAI,GAAI,GACpBj/C,MAAO,IAGTyiO,GAAqB,IAAI,GAAK,CAC5Bp1H,KAAM,sBACNl5C,KAAMiuK,GACNn/O,OAAQs/O,GACRtqN,MAAO,KAGTyqN,GAAgB,IAAI,GAAM,CACxBvuK,KAAMiuK,GACN3nO,MAAO6nO,GACPx7O,KAAM27O,GACNx/O,OAAQu/O,GACRpoN,OAAQ,IAGVwoN,GAAsB,CAACF,KAuErB,EAAKp0B,eAAiB,GAAc,aAMpC,EAAKy0B,cAAgB11P,EAAQk9I,aACzBl9I,EAAQk9I,aACRq4G,GAMJ,EAAKI,oBACuBlxP,IAA1BzE,EAAQ41P,eAA8B51P,EAAQ41P,cAKhD,EAAKC,kBACqBpxP,IAAxBzE,EAAQ81P,aAA4B91P,EAAQ81P,YAM9C,EAAKC,cAAgB,GAMrB,EAAKC,qBACwBvxP,IAA3BzE,EAAQi2P,gBAA+Bj2P,EAAQi2P,eAKjD,EAAK/K,kBACqBzmP,IAAxBzE,EAAQwtB,YAA4BxtB,EAAQwtB,YAAc,YAK5D,EAAK0oO,iBAAmBl2P,EAAQm2P,gBAC5Bn2P,EAAQm2P,gBACRV,GAEJ,EAAKt0B,oBAAsB,CAAC,wC,EAubhC,OAxfkB,QA0EhB,YAAAi1B,sBAAA,SAAsBthP,EAAM0tN,GAE1B,IASMrzN,EAAWm1N,GAAgB,GATfR,GAAgB,GAAgB,CAChD,SAAYxB,GAAkBjiO,KAAK+1P,sBAAuB/1P,MAC1D,OAAUiiO,GAAkBjiO,KAAK+1P,sBAAuB/1P,MACxD,UAAaoiO,GAAgBpiO,KAAKg2P,eAAgBh2P,MAClD,MAASA,KAAKi2P,iBAAiB/1M,KAAKlgD,MACpC,SAAYA,KAAKk2P,oBAAoBh2M,KAAKlgD,QAIIyU,EAAM0tN,EAAaniO,MACnE,OAAI8O,QAGF,GAUJ,YAAAknP,eAAA,SAAevhP,EAAM0tN,GACnB,IAAMp6K,EAASk8K,GACb,CAAC,SAAY,MACbmvB,GACA3+O,EACA0tN,EACAniO,MAEF,GAAK+nD,EAAL,CAGA,IAAMtkD,EAAU,IAAI,GACdrE,EAAKqV,EAAKmpB,aAAa,MAClB,OAAPx+B,GACFqE,EAAQS,MAAM9E,GAEhB,IAAMO,EACJwiO,EAAY,GAGR7hO,EAAWynD,EAAiB,SAOlC,GANIznD,GACF,GAA6BA,GAAU,EAAOX,GAEhD8D,EAAQoE,YAAYvH,UACbynD,EAAiB,SAEpB/nD,KAAKs1P,eAAgB,CACvB,IAEMtwH,EA8aZ,SACEr/H,EACAwwP,EACAt5G,EACAu5G,EACAR,GAEA,OAAO,SAMKnyP,EAAS0gD,GACjB,IAAIkyM,EAAWT,EACX/sP,EAAO,GACPytP,EAAsB,GAC1B,GAAID,EAAU,CACZ,IAAM/1P,EAAWmD,EAAQtC,cACzB,GAAIb,EACF,GAAIA,aAAoB,GACtBg2P,EAAsBh2P,EACnB0/N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,UAATE,GAA6B,eAATA,KAE/BksP,EAAWC,EAAoBjzP,OAAS,MACnC,CACL,IAAM8G,EAAO7J,EAAS2J,UACtBosP,EAAoB,UAATlsP,GAA6B,eAATA,GAKjCksP,IACFxtP,EAA8BpF,EAAQ+a,IAAI,SAC1C63O,EAAWA,KAAcxtP,IAETA,EAAKioB,OAAO,YAAc,IACnCmkO,KACHA,GAAWtoP,SAASC,cAAc,aAEpCqoP,GAAS9nP,UAAYtE,EACrBA,EAAOosP,GAASpyP,QAIpB,IAAI0zP,EAAe15G,EAMnB,GALIl3I,EACF4wP,EAAe5wP,EACNwwP,IACTI,EAAeC,GAAUL,EAAUt5G,EAAcu5G,IAE/CC,EAAU,CACZ,IAAMI,EAvGd,SAAiCC,EAAY7tP,GAC3C,IAAM8tP,EAAa,CAAC,EAAG,GACnB/2H,EAAY,QACVg3H,EAAaF,EAAWxpO,WAC9B,GAAI0pO,EAAY,CACd,IAAMC,EAAYD,EAAWtzC,UAC7B,GAAIuzC,GAAiC,GAApBA,EAAUxzP,OAAa,CACtC,IAAMyzP,EAAaF,EAAW5O,gBACxBp2O,EAASglP,EAAW3O,YAG1B0O,EAAW,GAAKG,EAAW,IAAMD,EAAU,GAAKjlP,EAAO,IACvD+kP,EAAW,GAAKG,EAAW,IAAMD,EAAU,GAAK,EAAIjlP,EAAO,IAC3DguH,EAAY,QAGhB,IAAI+F,EAAY+wH,EAAWp2O,UACvBqlH,IAGFA,EAAYA,EAAUn7H,SACZynP,QAAQtsH,EAAUyrH,WAAa2D,GAAmB3D,WAC5DzrH,EAAUwnB,SAASxnB,EAAUgnB,YAAcooG,GAAmBpoG,YAC9DhnB,EAAUioH,QAAQjoH,EAAU8nH,WAAasH,GAAmBtH,WAC5D9nH,EAAUooH,UAAUpoH,EAAUgoH,aAAekH,KAE7ClvH,EAAYovH,GAAmBvqP,QAWjC,OATAm7H,EAAUiqH,QAAQ/mP,GAClB88H,EAAUwsH,WAAWwE,EAAW,IAChChxH,EAAUysH,WAAWuE,EAAW,IAChChxH,EAAU2sH,aAAa1yH,GAEL,IAAI,GAAM,CAC1B7yG,MAAO6pO,EACPx9O,KAAMusH,IAoEgBoxH,CAAwBR,EAAa,GAAI1tP,GAC3D,OAAIytP,EAAoBjzP,OAAS,GAI/BozP,EAAU5uP,YAAY,IAAI,GAAmByuP,IAQtC,CAACG,EAPU,IAAI,GAAM,CAC1Bn2P,SAAUi2P,EAAa,GAAGp1P,cAC1B4rB,MAAO,KACP05D,KAAM8vK,EAAa,GAAG9I,UACtBl4O,OAAQghP,EAAa,GAAG5I,YACxBv0O,KAAM,QAEsB/Q,OAAOkuP,EAAa5rP,MAAM,KAEnD8rP,EAET,OAAOF,GAtfeS,CAFRjvM,EAAc,MACXA,EAAiB,SAIhC/nD,KAAKq1P,cACLr1P,KAAK01P,cACL11P,KAAK21P,iBAEPlyP,EAAQiC,SAASs/H,GAQnB,cANOj9E,EAAc,MAIrBtkD,EAAQ+rL,cAAcznI,GAAQ,GAEvBtkD,IAQT,YAAAwyP,iBAAA,SAAiBxhP,EAAM0tN,GACrB,IAAM/iO,EAAKqV,EAAKmpB,aAAa,MAC7B,GAAW,OAAPx+B,EAAa,CACf,IAAMuG,EAAQ,GAAUjF,KAAKV,KAAMyU,EAAM0tN,GACzC,GAAIx8N,EAAO,CACT,IAAIsxP,OAAQ,EACRC,EAAUziP,EAAKyiP,QAInB,GAHKA,GAAsB,eAAXA,IACdA,EAAUzlP,OAAOY,SAASR,MAExBqlP,EAEFD,EADY,IAAIr+O,IAAI,IAAMxZ,EAAI83P,GACfrlP,UAEfolP,EAAW,IAAM73P,EAEnBY,KAAK01P,cAAcuB,GAAYtxP,KAUrC,YAAAuwP,oBAAA,SAAoBzhP,EAAM0tN,GACxB,IAAM/iO,EAAKqV,EAAKmpB,aAAa,MAC7B,GAAW,OAAPx+B,EAAJ,CAGA,IAAMo0P,EAAgBC,GAAkB/yP,KAAKV,KAAMyU,EAAM0tN,GACzD,GAAKqxB,EAAL,CAGA,IAAIyD,EACAC,EAAUziP,EAAKyiP,QAInB,GAHKA,GAAsB,eAAXA,IACdA,EAAUzlP,OAAOY,SAASR,MAExBqlP,EAEFD,EADY,IAAIr+O,IAAI,IAAMxZ,EAAI83P,GACfrlP,UAEfolP,EAAW,IAAM73P,EAEnBY,KAAK01P,cAAcuB,GAAYzD,KAQjC,YAAA9uB,oBAAA,SAAoBjwN,EAAMinL,GACxB,IAAK1jK,EAAS,GAAgBvjB,EAAK4sN,cACjC,OAAO,KAET,IAAM59N,EAAUzD,KAAKg2P,eAAevhP,EAAM,CACxCzU,KAAK+gO,eAAetsN,EAAMinL,KAE5B,OAAIj4L,GAGK,MAUX,YAAAmhO,qBAAA,SAAqBnwN,EAAMinL,GACzB,IAAK1jK,EAAS,GAAgBvjB,EAAK4sN,cACjC,MAAO,GAET,IAAIvyN,EACE0zN,EAAY/tN,EAAK+tN,UACvB,GAAiB,YAAbA,GAAwC,UAAbA,EAI7B,OAHA1zN,EAAW9O,KAAK+1P,sBAAsBthP,EAAM,CAC1CzU,KAAK+gO,eAAetsN,EAAMinL,OAKnB,GAEJ,GAAiB,aAAb8mC,EAA0B,CACnC,IAAM/+N,EAAUzD,KAAKg2P,eAAevhP,EAAM,CACxCzU,KAAK+gO,eAAetsN,EAAMinL,KAE5B,OAAIj4L,EACK,CAACA,GAED,GAEJ,GAAiB,OAAb++N,EAAoB,CAC7B1zN,EAAW,GACX,IAAK,IAAI8F,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAChE,IAAM6B,EAAKj7J,KAAK4kO,qBAAqBhwN,EAAG8mL,GACpCzgC,GACF,EAAOnsJ,EAAUmsJ,GAGrB,OAAOnsJ,EAEP,MAAO,IAWX,YAAAqoP,SAAA,SAASx8O,GACP,GAAKA,EAEE,IAAsB,iBAAXA,EAAqB,CACrC,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,OAAO3a,KAAKo3P,qBAAqB/zE,GAC5B,OAAI2+C,GAAWrnN,GACb3a,KAAKo3P,qBAA6C,GAElDp3P,KAAKq3P,iBAAwC,KAQxD,YAAAD,qBAAA,SAAqB/zE,GACnB,IAAK,IAAIzuK,EAAyByuK,EAAc,WAAGzuK,EAAGA,EAAIA,EAAEu/J,YAC1D,GAAIv/J,EAAEgwD,UAAYg9J,KAAKiD,aAAc,CACnC,IAAM,EAAO7kO,KAAKq3P,iBAAwC,GAC1D,GAAI,EACF,OAAO,IAWf,YAAAA,iBAAA,SAAiB5iP,GACf,IAAK,IAAIG,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAC5C,GAAIphI,EAAS,GAAgBpjB,EAAEysN,eAAgC,QAAfzsN,EAAE4tN,UAChD,OAAOuG,GAAWn0N,GAGtB,IAASA,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAChE,IAAMopE,EAAY5tN,EAAE4tN,UACpB,GACExqM,EAAS,GAAgBpjB,EAAEysN,gBACb,YAAbmB,GACc,UAAbA,GACa,aAAbA,GACa,OAAbA,GACF,CACA,IAAM,EAAOxiO,KAAKq3P,iBAAiBziP,GACnC,GAAI,EACF,OAAO,KAcf,YAAA0iP,iBAAA,SAAiB38O,GACf,IAAM48O,EAAe,GACrB,GAAsB,iBAAX58O,EAAqB,CAC9B,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,EAAO48O,EAAcv3P,KAAKw3P,6BAA6Bn0E,SAC9C2+C,GAAWrnN,GACpB,EACE48O,EACAv3P,KAAKw3P,6BAAqD,IAG5D,EACED,EACAv3P,KAAKy3P,yBAAgD,IAGzD,OAAOF,GAOT,YAAAC,6BAAA,SAA6Bn0E,GAE3B,IADA,IAAMk0E,EAAe,GACZ3iP,EAAyByuK,EAAc,WAAGzuK,EAAGA,EAAIA,EAAEu/J,YACtDv/J,EAAEgwD,UAAYg9J,KAAKiD,cACrB,EACE0yB,EACAv3P,KAAKy3P,yBAAgD,IAI3D,OAAOF,GAOT,YAAAE,yBAAA,SAAyBhjP,GAEvB,IADA,IAAM8iP,EAAe,GACZ3iP,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAC5C,GACEphI,EAAS,GAAgBpjB,EAAEysN,eACZ,eAAfzsN,EAAE4tN,UACF,CACA,IAAM7mM,EAAMsoM,GAAgB,GAAI6vB,GAAsBl/O,EAAG,IACzD2iP,EAAanvP,KAAKuzB,GAGtB,IAAS/mB,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAChE,IAAMopE,EAAY5tN,EAAE4tN,WAElBxqM,EAAS,GAAgBpjB,EAAEysN,eACb,YAAbmB,GAAwC,UAAbA,GAAsC,OAAbA,GAErD,EAAO+0B,EAAcv3P,KAAKy3P,yBAAyB7iP,IAGvD,OAAO2iP,GAUT,YAAAG,WAAA,SAAW/8O,GACT,IAAMg9O,EAAU,GAChB,GAAsB,iBAAXh9O,EAAqB,CAC9B,IAAM0oK,EAAM7xJ,GAAM7W,GAClB,EAAOg9O,EAAS33P,KAAK43P,uBAAuBv0E,SACnC2+C,GAAWrnN,GACpB,EACEg9O,EACA33P,KAAK43P,uBAA+C,IAGtD,EAAOD,EAAS33P,KAAK63P,mBAA0C,IAEjE,OAAOF,GAOT,YAAAC,uBAAA,SAAuBv0E,GAErB,IADA,IAAMs0E,EAAU,GACP/iP,EAAyByuK,EAAc,WAAGzuK,EAAGA,EAAIA,EAAEu/J,YACtDv/J,EAAEgwD,UAAYg9J,KAAKiD,cACrB,EAAO8yB,EAAS33P,KAAK63P,mBAA0C,IAGnE,OAAOF,GAQT,YAAAE,mBAAA,SAAmBpjP,GAEjB,IADA,IAAMkjP,EAAU,GACP/iP,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAC5C,GAAIphI,EAAS,GAAgBpjB,EAAEysN,eAAgC,UAAfzsN,EAAE4tN,UAAuB,CACvE,IAAM7mM,EAAMsoM,GAAgB,GAAI+vB,GAAgBp/O,EAAG,IACnD+iP,EAAQvvP,KAAKuzB,GAGjB,IAAS/mB,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAChE,IAAMopE,EAAY5tN,EAAE4tN,WAElBxqM,EAAS,GAAgBpjB,EAAEysN,eACb,YAAbmB,GAAwC,UAAbA,GAAsC,OAAbA,GAErD,EAAOm1B,EAAS33P,KAAK63P,mBAAmBjjP,IAG5C,OAAO+iP,GAYT,YAAAvyB,kBAAA,SAAkBt2N,EAAU4sL,GAC1BA,EAAc17L,KAAKghO,aAAatlC,GAChC,IAAMo8D,EAAM,GAAgB,GAAe,GAAI,OACzCC,EAAW,gCACjBD,EAAI1uG,eAAe2uG,EAAU,WAAY7E,GAAkB,IAC3D4E,EAAI1uG,eAAe2uG,EAAU,YAAa32B,IAC1C02B,EAAI1uG,eACFg4E,GACA,qBA5yBJ,uFAgzBE,IAAuD9uJ,EAAU,CAC7D79D,KAAMqjP,GAGJvjO,EAAa,GACfzlB,EAASzL,OAAS,EACpBkxB,EAAqB,SAAIzlB,EACG,GAAnBA,EAASzL,SAClBkxB,EAAsB,UAAIzlB,EAAS,IAErC,IAAMy0N,EAAc8wB,GAAayD,EAAIz2B,cAC/BlzM,EAASm1M,GAAa/uM,EAAYgvM,GAUxC,OATAY,GACE7xJ,EACAgiL,GACAjxB,GACAl1M,EACA,CAACutK,GACD6nC,EACAvjO,MAEK83P,GAEX,EAxfA,CAAkB,IAmoBlB,SAAStB,GAAUwB,EAAYn7G,EAAcu5G,GAC3C,OAAIt1P,MAAMC,QAAQi3P,GACTA,EACwB,iBAAfA,EACTxB,GAAUJ,EAAa4B,GAAan7G,EAAcu5G,GAElDv5G,EAQX,SAASo7G,GAAUxjP,GACjB,IAAMizB,EAAI85L,GAAkB/sN,GAAM,GAG5B0wC,EAAI,gCAAgCjzC,KAAKw1B,GAC/C,GAAIyd,EAAG,CACL,IAAM+yM,EAAW/yM,EAAE,GACnB,MAAO,CACL7sC,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAAM,MAWrC,SAAS8iN,GAAoBj1N,GAClC,IAAIizB,EAAI85L,GAAkB/sN,GAAM,GAC1B8zK,EAAkB,GAGxB7gJ,EAAIA,EAAEn+B,QAAQ,WAAY,KAI1B,IAHA,IAEI47C,EAFE97B,EACJ,qIAEM87B,EAAI97B,EAAGnX,KAAKw1B,IAAK,CACvB,IAAM/Z,EAAI/lB,WAAWu9C,EAAE,IACjBv3B,EAAIhmB,WAAWu9C,EAAE,IACjBz3B,EAAIy3B,EAAE,GAAKv9C,WAAWu9C,EAAE,IAAM,EACpCojI,EAAgBngL,KAAKulB,EAAGC,EAAGF,GAC3Bga,EAAIA,EAAE9gB,OAAOu+B,EAAE,GAAG9hD,QAEpB,GAAU,KAANqkC,EAGJ,OAAO6gJ,EAOT,SAASwrE,GAAQt/O,GACf,IAAMizB,EAAI85L,GAAkB/sN,GAAM,GAAOmV,OACrCstO,EAAUziP,EAAKyiP,QAInB,OAHKA,GAAsB,eAAXA,IACdA,EAAUzlP,OAAOY,SAASR,MAExBqlP,EACU,IAAIt+O,IAAI8uB,EAAGwvN,GACZrlP,KAEJ61B,EAQX,SAASisN,GAAal/O,GAGpB,IAAMizB,EAAI85L,GAAkB/sN,GAAM,GAC/BmV,OACArgB,QAAQ,WAAY,KACnB2tP,EAAUziP,EAAKyiP,QAInB,OAHKA,GAAsB,eAAXA,IACdA,EAAUzlP,OAAOY,SAASR,MAExBqlP,EACU,IAAIt+O,IAAI8uB,EAAGwvN,GACZrlP,KAEJ61B,EAsCX,SAASywN,GAAU1jP,GACjB,OAAOk0N,GAAYl0N,GAQrB,IAAM2jP,GAAoB30B,GAAgB,GAAgB,CACxD,KA22BF,SAAwBhvN,EAAM0tN,GAC5B,IAAMk2B,EAAap0B,GAAgB,GAAIq0B,GAAc7jP,EAAM0tN,EAAaniO,MACxE,IAAKq4P,EACH,OAEF,IAAM5vP,EAAuC4vP,EAAiB,IAC9D,GAAI5vP,GAAc,UAAPA,EAAiB,CAC1B,IAAM0tP,EAA4CkC,EAAsB,SACpElC,IACFh0B,EAAYA,EAAY9+N,OAAS,GAAK8yP,GAExC,IAAMxwP,EAA8B0yP,EAAmB,MACnD1yP,IACFw8N,EAAYA,EAAY9+N,OAAS,GAAKsC,OA/2B5C,SAAS8tP,GAAkBh/O,EAAM0tN,GAC/B,OAAO8B,QAAgB7/N,EAAWg0P,GAAmB3jP,EAAM0tN,EAAaniO,MAQ1E,IAAMu4P,GAAqB90B,GAAgB,GAAgB,CACzD,KAAQhB,IAqYV,SAAkBhuN,EAAM0tN,GACtB,IAAMq2B,EAAav0B,GAAgB,GAAIw0B,GAAchkP,EAAM0tN,GAC3D,OAAIq2B,GAGK,QAzYT,MAAS/1B,GAAyBw1B,IAClC,QAAWx1B,GAAyBkG,IACpC,QAAWlG,IA9Db,SAAkBhuN,GAChB,IAEI3C,EAFE4mP,EAASjkP,EAAKmpB,aAAa,UAC3B+6N,EAASlkP,EAAKmpB,aAAa,UAejC,OAXI9rB,EAFW,gBAAX4mP,EACa,gBAAXC,EACOpO,GAAWrD,YAEXqD,GAAWnD,SAGP,gBAAXuR,EACOpO,GAAWpD,aAEXoD,GAAWlD,UAGjB,CACL15N,EAAG/lB,WAAW6M,EAAKmpB,aAAa,MAChC86N,OAAQvF,GAAsBuF,GAC9B9qO,EAAGhmB,WAAW6M,EAAKmpB,aAAa,MAChC+6N,OAAQxF,GAAsBwF,GAC9B7mP,OAAQA,MAyCV,MAAS2wN,GAAyB01B,MA8IpC,IAAMS,GAAsBn1B,GAAgB,GAAgB,CAC1D,MAAShB,GAAyBw1B,IAClC,MAASx1B,GAAyB01B,MA8BpC,IAAMU,GAAqBp1B,GAAgB,GAAgB,CACzD,MAAShB,GAAyBw1B,IAClC,MAASx1B,GAAyBkG,MAgCpC,IAAMmwB,GAAqBr1B,GAAgB,GAAgB,CACzD,MAAShB,GAAyBw1B,IAClC,KAAQx1B,GAAyB6F,IACjC,QAAW7F,GAAyB6F,MAmCtC,IAAMywB,GAA2Bt1B,GAAgB,GAAgB,CAC/D,YAAepB,GAAaqH,MAQ9B,SAASrC,GAAmB5yN,EAAM0tN,GAChC,OAAO8B,GAAgB,KAAM80B,GAA0BtkP,EAAM0tN,GA+B/D,IAAMyxB,GAAiCnwB,GAAgByvB,GAAmB,CACxE,MAAS9wB,GAAgByxB,MA0B3B,IAAMmF,GAAmBv1B,GACvB,GACA,CACE,KA4uBJ,SAAoBhvN,EAAM0tN,GACxB,IAGM82B,EADH92B,EAAYA,EAAY9+N,OAAS,GACR41P,MACtBvxN,EAAI85L,GAAkB/sN,GAAM,GAC5BykP,EAAOr1N,KAAKrS,MAAMkW,GACxBuxN,EAAM7wP,KAAKpH,MAAMk4P,GAAQ,EAAIA,KAjvB7Bz1B,GAAgByvB,GAAmB,CACjC,MAzDJ,SAAuBz+O,EAAM0tN,GAC3B,IAGM/3N,EADH+3N,EAAYA,EAAY9+N,OAAS,GACF+G,YAC5Bs9B,EAAI85L,GAAkB/sN,GAAM,GAG5B0wC,EADJ,8HACWjzC,KAAKw1B,GAClB,GAAIyd,EAAG,CACL,IAAMx3B,EAAI/lB,WAAWu9C,EAAE,IACjBv3B,EAAIhmB,WAAWu9C,EAAE,IACjBz3B,EAAI9lB,WAAWu9C,EAAE,IACvB/6C,EAAYhC,KAAK,CAACulB,EAAGC,EAAGF,SAExBtjB,EAAYhC,KAAK,QAmDrB,SAASyrP,GAAYp/O,EAAM0tN,GACzB,IAAMg3B,EAAgBl1B,GACS,CAC3B75N,YAAa,GACb6uP,MAAO,IAETD,GACAvkP,EACA0tN,GAEF,GAAKg3B,EAAL,CAMA,IAHA,IAAM5wE,EAAkB,GAClBn+K,EAAc+uP,EAAc/uP,YAC5B6uP,EAAQE,EAAcF,MAEtB/2P,EAAI,EAAGgiB,EAAK3iB,KAAKqa,IAAIxR,EAAY/G,OAAQ41P,EAAM51P,QACnDnB,EAAIgiB,IACFhiB,EAE2B,GAAzBkI,EAAYlI,GAAGmB,QACjBklL,EAAgBngL,KACdgC,EAAYlI,GAAG,GACfkI,EAAYlI,GAAG,GACfkI,EAAYlI,GAAG,GACf+2P,EAAM/2P,IAIZ,OAAO,IAAI,GAAWqmL,EAAiB,UAQzC,IAAMkwE,GAAeh1B,GACnB,GACA,CACE,KAAQhB,GAAyBsxB,KAEnCtwB,GAAgByvB,GAAmB,CACjC,EAAKzwB,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,OAuBlC,IAAMrB,GAAoC7D,GAAgB,GAAgB,CACxE,YAAepB,GAAaqH,MAQ9B,SAASnD,GAA4B9xN,EAAM0tN,GACzC,OAAO8B,GACL,KACAqD,GACA7yN,EACA0tN,GASJ,IAAMi3B,GAAoC31B,GAAgB,GAAgB,CACxE,QAAWhB,GAAyB6F,IACpC,WAAc7F,GAAyB6F,IACvC,aAAgB7F,GAAyBsG,MAQ3C,SAAS3B,GAAe3yN,EAAM0tN,GAC5B,IAAM5tM,EAAa0vM,GACjB,GACAm1B,GACA3kP,EACA0tN,GAEI55C,EAAkBg+C,GAA4B9xN,EAAM0tN,GAC1D,GAAI55C,EAAiB,CACnB,IAAMg0C,EAAa,IAAI,GAAWh0C,EAAiB,QAEnD,OADAg0C,EAAW/sC,cAAcj7J,GAAY,GAC9BgoM,GAWX,SAASgL,GAAe9yN,EAAM0tN,GAC5B,IAAM5tM,EAAa0vM,GACjB,GACAm1B,GACA3kP,EACA0tN,GAEI55C,EAAkBg+C,GAA4B9xN,EAAM0tN,GAC1D,GAAI55C,EAAiB,CACnB,IAAMl4K,EAAU,IAAI,GAAQk4K,EAAiB,OAAoB,CAC/DA,EAAgBllL,SAGlB,OADAgN,EAAQm/K,cAAcj7J,GAAY,GAC3BlkB,GAWX,IAAMgpP,GAAyB51B,GAAgB,GAAgB,CAC7D,WAAcrB,GAAgBgF,IAC9B,WAAchF,GAAgBmF,IAC9B,cAAiBnF,GAAgBmxB,IACjC,MAASnxB,GAAgBkE,IACzB,QAAWlE,GAAgBoF,MAQ7B,SAAS+rB,GAAkB9+O,EAAM0tN,GAC/B,IAYIm3B,EAZElhM,EAAa6rK,GACjB,GACAo1B,GACA5kP,EACA0tN,GAEF,IAAK/pK,EACH,OAAO,KAET,GAA0B,IAAtBA,EAAW/0D,OACb,OAAO,IAAI,GAAmB+0D,GAMhC,IAHA,IAAImhM,GAAc,EACZpvP,EAAOiuD,EAAW,GAAGnuD,UAElB/H,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAEhD,GADWk2D,EAAWl2D,GACT+H,WAAaE,EAAM,CAC9BovP,GAAc,EACd,MAGJ,GAAIA,EAAa,CACf,IAAI5tN,OAAM,EACN48I,OAAe,EACnB,GAAY,SAARp+K,EAAiB,CACnB,IAAMkrB,EAAQ+iC,EAAW,GACzBzsB,EAAStW,EAAMkiH,YACfgxC,EAAkBlzJ,EAAM2tB,qBACxB,IAAS9gD,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAEhD,EAAOqmL,EADInwH,EAAWl2D,GACW8gD,sBAGnCw2M,GADAF,EAAgB,IAAI,GAAW/wE,EAAiB58I,GACLysB,OAC1B,cAARjuD,EAETqvP,GADAF,EAAgB,IAAI,GAAgBlhM,GACOA,GAC1B,WAARjuD,EAETqvP,GADAF,EAAgB,IAAI,GAAalhM,GACUA,GAC1B,sBAARjuD,EACTmvP,EAAgB,IAAI,GAAmBlhM,GAEvC,GAAO,EAAO,SAGhBkhM,EAAgB,IAAI,GAAmBlhM,GAEzC,OAA4D,EAQ9D,SAASkuK,GAAU7xN,EAAM0tN,GACvB,IAAM5tM,EAAa0vM,GACjB,GACAm1B,GACA3kP,EACA0tN,GAEI55C,EAAkBg+C,GAA4B9xN,EAAM0tN,GAC1D,GAAI55C,EAAiB,CACnB,IAAMlzJ,EAAQ,IAAI,GAAMkzJ,EAAiB,QAEzC,OADAlzJ,EAAMm6J,cAAcj7J,GAAY,GACzBc,GAWX,IAAMqyM,GAA4BjE,GAAgB,GAAgB,CAChE,gBAmbF,SAA+BhvN,EAAM0tN,GACnC,IAAMs3B,EAA+Bx1B,GACC,GACpCy1B,GACAjlP,EACA0tN,GAEF,GAAIs3B,EAA6Bp2P,OAAS,EAAG,CAC3C,IAAMokO,EAEHtF,EAAYA,EAAY9+N,OAAS,GACpCokO,EAAgBr/N,KAAI,MAApBq/N,EAAwBgyB,KA7b1B,gBA8cF,SAA+BhlP,EAAM0tN,GAEnC,IAAM6H,EAAiB/F,QACrB7/N,EACAu1P,GACAllP,EACA0tN,GAEF,GAAI6H,EAAgB,CAGf7H,EAAYA,EAAY9+N,OAAS,GACpB,GAAK2mO,MAldzB,SAASxC,GAAY/yN,EAAM0tN,GACzB,IAAM5tM,EAAa0vM,GACe,GAChCm1B,GACA3kP,EACA0tN,GAEIsF,EAAkBxD,GACtB,CAAC,MACDyD,GACAjzN,EACA0tN,GAEF,GAAIsF,GAAmBA,EAAgB,GAAI,CAGzC,IAFA,IAAMl/C,EAAkBk/C,EAAgB,GAClC70D,EAAO,CAAC2V,EAAgBllL,QACrBnB,EAAI,EAAGgiB,EAAKujN,EAAgBpkO,OAAQnB,EAAIgiB,IAAMhiB,EACrD,EAAOqmL,EAAiBk/C,EAAgBvlO,IACxC0wK,EAAKxqK,KAAKmgL,EAAgBllL,QAE5B,IAAMgN,EAAU,IAAI,GAAQk4K,EAAiB,OAAoB3V,GAEjE,OADAviK,EAAQm/K,cAAcj7J,GAAY,GAC3BlkB,GAWX,IAAM,GAAgBozN,GAAgB,GAAgB,CACpD,UAjmBF,SAAyBhvN,EAAM0tN,GAO7B,IAAMp6K,EAASk8K,GAAgB,GAAIs0B,GAAoB9jP,EAAM0tN,GAC7D,GAAKp6K,EAAL,CAGA,IAKIp2C,EAOAC,EAAQ64O,EAAcG,EAZpBgP,EACJz3B,EAAYA,EAAY9+N,OAAS,GAE7Bw2P,EAAa,SAAU9xM,EAASA,EAAa,KAAI,GACjD+xM,IAAa,SAAU/xM,IAAW5oD,OAAOD,KAAK26P,GAAYx2P,OAAS,EAEnEwO,EAAwCgoP,EAAkB,KAC5DhoP,EACFF,EAAME,EACGioP,IACTnoP,EAAMshP,IAGR,IAwBIhhO,EAxBAq4N,EAAeC,GAAWrD,YACxB6S,EAAyChyM,EAAiB,QAC5DgyM,GACFnoP,EAAS,CAACmoP,EAAQpsO,EAAGosO,EAAQnsO,GAC7B68N,EAAesP,EAAQrB,OACvB9N,EAAemP,EAAQpB,OACvBrO,EAAeyP,EAAQjoP,QACd,4CAA4CmwB,KAAKtwB,KAEtD,UAAUswB,KAAKtwB,IACjBC,EAASihP,GACTpI,EAAeqI,GACflI,EAAemI,IACN,gBAAgB9wN,KAAKtwB,IAC9BC,EAAS,CAAC,GAAI,IACd64O,EAAeqI,GACflI,EAAemI,IACN,SAAS9wN,KAAKtwB,KACvBC,EAAS,CAAC,GAAI,GACd64O,EAAeqI,GACflI,EAAemI,KAKnB,IAMIl+N,EANElH,EAAqCksO,EAAe,EACpDjsO,EAAqCisO,EAAe,OAChDz1P,IAANupB,QAAyBvpB,IAANwpB,IACrBqE,EAAS,CAACtE,EAAGC,IAIf,IAMIymC,EANEwsG,EAAqCg5F,EAAe,EACpD7wM,EAAqC6wM,EAAe,OAChDz1P,IAANy8J,QAAyBz8J,IAAN4kD,IACrBn0B,EAAO,CAACgsI,EAAG73G,IAIb,IAAMmlE,EAAiCpmE,EAAiB,aACxC3jD,IAAZ+pH,IACF95D,EAAW,GAAU85D,IAGvB,IAAM5jF,EAAyCwd,EAAe,MAExDwpB,EAAgDxpB,EAAe,MAErE,GAAI+xM,EAAU,CACRnoP,GAAOshP,KACTp+N,EAAOm+N,IAGT,IAAM,EAAa,IAAI,GAAK,CAC1BphP,OAAQA,EACR04O,aAAcA,EACdG,aAAcA,EACdG,aAAcA,EACdz9N,YAAantB,KAAK6qP,aAClB54N,OAAQA,EACRm5N,aAAcb,GAAWrD,YACzB7yL,SAAUA,EACV9pB,MAAOA,EACP1V,KAAMA,EACNljB,IAAK3R,KAAK61P,iBAAiBlkP,GAC3B4/D,MAAOA,IAGH,EAAa,EAAWy2K,gBAAgB,GACxC6O,EAAY,EAAWvzC,UAC7B,GAAkB,OAAduzC,EAAoB,CACtB,IAAMpN,EAAa,EAAWrB,gBAC9B,GAAIqB,IAAeT,IAAmBS,IAAeT,GAAoB,CACvE,IAAM,EAAW,WACf,IAAMS,EAAa,EAAWrB,gBAC9B,GAEIqB,IAAeT,IACfS,IAAeT,GAEjB,CACA,IAAM,EAAY,EAAW1lC,UAC7B,GAAI,GAAiC,GAApB,EAAUjgN,OAAa,CACtC,IAAM22P,EAAc7E,GAAa,GACjC,EAAWhoG,SAAS,EAAa6sG,GAEnC,EAAWvR,oBAAoB,KAGnC,EAAWD,kBAAkB,GACzBiB,IAAeT,IACjB,EAAW5yH,aAGV,GAAwB,GAApBygI,EAAUxzP,OAAa,CAChC,IAAM22P,EAAc7E,GAAa0B,GACjC,EAAW1pG,SAAS,EAAa6sG,GAEnCJ,EAAwB,WAAI,OAG5BA,EAAwB,WAAIjF,KAqe9B,WAndF,SAA0BlgP,EAAM0tN,GAE9B,IAAMp6K,EAASk8K,GAAgB,GAAI20B,GAAqBnkP,EAAM0tN,GAC9D,GAAKp6K,EAAL,CAGA,IAAM6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/CsiI,EAAY,IAAI,GAAK,CACzBl/C,KAAM,IAAI,GAAK,CACblV,MAEG,UAAWxpB,EAASA,EAAc,MAAI6qM,KAE3CroN,MAAwCwd,EAAe,QAEzD6xM,EAAuB,UAAIj0H,IAqc3B,UApbF,SAAyBlxH,EAAM0tN,GAM7B,IAAMp6K,EAASk8K,GAAgB,GAAI40B,GAAoBpkP,EAAM0tN,GAC7D,GAAKp6K,EAAL,CAGA,IAAM6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/C47H,EAAc,IAAI,GAAO,CAC7B1tD,MAEG,UAAWxpB,EAASA,EAAc,MAAI6qM,GACzCtgO,MAA8B,UAAWy1B,EAASA,EAAc,MAAI,IAEtE6xM,EAAyB,YAAI36H,IAoa7B,UAlZF,SAAyBxqH,EAAM0tN,GAE7B,IAAMp6K,EAASk8K,GAAgB,GAAI60B,GAAoBrkP,EAAM0tN,GAC7D,GAAKp6K,EAAL,CAGA,IAAM6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/CsvE,EAAY,IAAI,GAAK,CACzBpB,MAEG,UAAWxpB,EAASA,EAAc,MAAI6qM,KAE3CgH,EAAuB,UAAIjnL,EAC3B,IAAM8T,EAAyC1+B,EAAc,UAChD3jD,IAATqiF,IACFmzK,EAAkB,KAAInzK,GAExB,IAAMwzK,EAA4ClyM,EAAiB,aACnD3jD,IAAZ61P,IACFL,EAAqB,QAAIK,OAwY7B,SAAS,GAAUxlP,EAAM0tN,GACvB,IAAMy3B,EAAc31B,GAClB,GACA,GACAxvN,EACA0tN,EACAniO,MAEF,IAAK45P,EACH,OAAO,KAET,IASIhD,EATAjkL,EAGA,cAAeinL,EAAcA,EAAuB,UAAIlF,GAEtDjuK,EAAyCmzK,EAAmB,UACrDx1P,IAATqiF,GAAuBA,IACzB9T,EAAY,MAGV,eAAgBinL,EACdA,EAAwB,YAAKjF,KAC/BiC,EAAagD,EAAwB,YAGvChD,EAAahC,GAEf,IAAMjvH,EAGF,cAAei0H,EAAcA,EAAuB,UAAI7E,GAEtD91H,EAGF,gBAAiB26H,EACbA,EAAyB,YACzB9E,GAEFmF,EAA4CL,EAAsB,QACxE,YAAgBx1P,IAAZ61P,GAA0BA,EA2DvB,CACL,IAAI,GAAM,CACRxzK,KAAM9T,EACN5lD,MAAO6pO,EACPrhP,OAAQ0pH,EACR7lH,KAAMusH,EACNj5F,YAAQtoC,KA7DH,CACL,IAAI,GAAM,CACR9D,SAAU,SAAUmD,GAClB,IAAMnD,EAAWmD,EAAQtC,cACnBgJ,EAAO7J,EAAS2J,UACtB,MAAa,uBAATE,EAKK,IAAI,GAHmD,EAKzD61N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,YAATE,GAA+B,iBAATA,MAGjB,YAATA,GAA+B,iBAATA,EACxB7J,OADF,GAITmmF,KAAM9T,EACN5lD,MAAO6pO,EACPrhP,OAAQ0pH,EACR7lH,KAAMusH,EACNj5F,YAAQtoC,IAEV,IAAI,GAAM,CACR9D,SAAU,SAAUmD,GAClB,IAAMnD,EAAWmD,EAAQtC,cACnBgJ,EAAO7J,EAAS2J,UACtB,MAAa,uBAATE,EAKK,IAAI,GAHmD,EAKzD61N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,YAATE,GAA+B,iBAATA,MAGjB,YAATA,GAA+B,iBAATA,EACxB7J,OADF,GAITmmF,KAAM9T,EACNp9D,OAAQ,KACRm3B,YAAQtoC,KAqBhB,SAASo1P,GAA4BF,EAAelhM,GAClD,IAII8hM,EAAYC,EAAeC,EAJzBl2O,EAAKk0C,EAAW/0D,OAChBg3P,EAAW,IAAIv5P,MAAMs3D,EAAW/0D,QAChCi3P,EAAc,IAAIx5P,MAAMs3D,EAAW/0D,QACnCk3P,EAAgB,IAAIz5P,MAAMs3D,EAAW/0D,QAE3C62P,GAAa,EACbC,GAAgB,EAChBC,GAAkB,EAClB,IAAK,IAAIl4P,EAAI,EAAGA,EAAIgiB,IAAMhiB,EAAG,CAC3B,IAAM5B,EAAW83D,EAAWl2D,GAC5Bm4P,EAASn4P,GAAK5B,EAASke,IAAI,WAC3B87O,EAAYp4P,GAAK5B,EAASke,IAAI,cAC9B+7O,EAAcr4P,GAAK5B,EAASke,IAAI,gBAChC07O,EAAaA,QAA8B91P,IAAhBi2P,EAASn4P,GACpCi4P,EAAgBA,QAAoC/1P,IAAnBk2P,EAAYp4P,GAC7Ck4P,EAAkBA,GAAmBG,EAAcr4P,GAEjDg4P,GACFZ,EAAcx6O,IAAI,UAAWu7O,GAE3BF,GACFb,EAAcx6O,IAAI,aAAcw7O,GAE9BF,GACFd,EAAcx6O,IAAI,eAAgBy7O,GAStC,IAAMC,GAAe/2B,GAAgB,GAAgB,CACnD,YAAehB,GAAyBsG,IACxC,MAAStG,GAAyBsG,MAkCpC,IAAM0xB,GAAwBh3B,GAAgB,GAAgB,CAC5D,KA5BF,SAAoBhvN,EAAM0tN,GACxB,IAAMt5N,EAAO4L,EAAKmpB,aAAa,QAC/BkmM,GAAU02B,GAAc/lP,EAAM0tN,GAC9B,IAAMu4B,EACJv4B,EAAYA,EAAY9+N,OAAS,GAE/BwF,GAAQ6xP,EAAchmO,YACxBgmO,EAAc7xP,GAAQ,CACpBhG,MAAO63P,EAAc73P,MACrB6xB,YAAagmO,EAAchmO,YAC3BzR,SAAU,WACR,OAAOy3O,EAAc73P,QAGP,OAATgG,EACT6xP,EAAc7xP,GAAQ6xP,EAAc73P,MACG,OAA9B63P,EAAchmO,cACvBgmO,EAAcA,EAAchmO,aAAegmO,EAAc73P,cAEpD63P,EAAqB,OAU5B,WAqFF,SAA0BjmP,EAAM0tN,GAC9B2B,GAAU62B,GAAqBlmP,EAAM0tN,MA/EvC,SAASkxB,GAAmB5+O,EAAM0tN,GAChC2B,GAAU22B,GAAuBhmP,EAAM0tN,GAOzC,SAASmxB,GAAa7+O,EAAM0tN,GAC1B2B,GAAUkwB,GAAgBv/O,EAAM0tN,GAQlC,IAAMm2B,GAAe70B,GAAgB,GAAgB,CACnD,MAAShB,GAAyB,IAClC,IAAOA,GAAyBsG,IAChC,SAAYtG,GAAyBkxB,MAkDvC,IAAMgH,GAAsBl3B,GAAgB,GAAgB,CAC1D,WAeF,SAA0BhvN,EAAM0tN,GAC9B,IAAMt5N,EAAO4L,EAAKmpB,aAAa,QAC/B,GAAa,OAAT/0B,EAAe,CACjB,IAAM1E,EAAO4kO,GAAWt0N,GAEtB0tN,EAAYA,EAAY9+N,OAAS,GAErBwF,GAAQ1E,MAS1B,IAAM8vP,GAA0BxwB,GAAgB,GAAgB,CAC9D,aAAgBhB,GAAyBsG,IACzC,YAAetG,GAAyBkG,IACxC,YAAelG,GAAyBkG,IACxC,MAASlG,GAAyBkG,IAClC,MAASlG,GAAyBkG,IAClC,KAAQlG,GAAyBkG,IACjC,KAAQlG,GAAyBkG,MAqCnC,IAAMwrB,GAAc1wB,GAAgB,GAAgB,CAClD,aAAgBhB,GAAyBkG,IACzC,aAAgBlG,GAAyBkG,IACzC,cAAiBlG,GAAyBkG,IAC1C,cAAiBlG,GAAyBkG,MAwB5C,IAAM+wB,GAA4Bj2B,GAAgB,GAAgB,CAGhE,WAAcrB,GAAgBiF,MA2BhC,IAAMsyB,GAA4Bl2B,GAAgB,GAAgB,CAChE,WAAcpB,GAAagF,MAiD7B,SAASuzB,GAAmBnmP,EAAM88D,GAKhC,IAJA,IAAM2/F,EAAO2a,GAAQt6G,GAGfspL,EAAO,CAAW,KAFO,GAAf3pF,EAAK7tK,OAAc6tK,EAAK,GAAK,GAEhBA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC3ChvK,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,IAAM+4O,EAAM15O,KAAKonD,MAA6BkyM,EAAK34P,IAAK+gB,SAAS,IACjE43O,EAAK34P,GAAmB,GAAd+4O,EAAI53O,OAAc,IAAM43O,EAAMA,EAE1C/R,GAAoBz0N,EAAMomP,EAAKvwP,KAAK,KA6CtC,IAAMwwP,GAAgCr3B,GAAgB,GAAgB,CACpE,KAAQf,IAUV,SAAuBjuN,EAAMm9N,EAAMzP,GACjC1tN,EAAK2Y,aAAa,OAAQwkN,EAAK/oO,MAC/B,IAAuDypE,EAAU,CAAC79D,KAAMA,GAClE5R,EAAQ+uO,EAAK/uO,MAEC,iBAATA,GACK,OAAVA,GAAkBA,EAAM6xB,aAC1ByvM,GACE7xJ,EACAwoL,GACAz3B,GACA,CAACxgO,EAAM6xB,aACPytM,EACA,CAAC,gBAIS,OAAVt/N,GAAkBA,EAAMA,OAC1BshO,GACE7xJ,EACAwoL,GACAz3B,GACA,CAACxgO,EAAMA,OACPs/N,EACA,CAAC,WAILgC,GACE7xJ,EACAwoL,GACAz3B,GACA,CAACxgO,GACDs/N,EACA,CAAC,aA3CL,MAASO,IA4DX,SAA4BjuN,EAAM5R,GAChCqmO,GAAoBz0N,EAAM5R,MA5D1B,YAAe6/N,IAmDjB,SAA2BjuN,EAAM5L,GAC/BsgO,GAAkB10N,EAAM5L,QAgB1B,IAAM0rP,GAAuB9wB,GAAgB,GAAgB,CAC3D,UAAaf,GAAkB+xB,MAU3BD,GAAwB,SAAU3xP,EAAOs/N,EAAae,GAE1D,OAAO,GADYf,EAAYA,EAAY9+N,OAAS,GAAGoR,KACrB4sN,aAAc,cA2BlD,IAAM05B,GAAoB/3B,GAAsB,QA6BhD,IAAMg4B,GAAgBv3B,GACpB,GACA,CAAC,QACDA,GAAgByvB,GAAmB,CAAC,IAAK,IAAK,IAAK,OAQ/C+H,GAAmBx3B,GACvB,GACA,CACE,KAAQf,GAAkBwG,KAE5BzF,GAAgByvB,GAAmB,CACjC,EAAKxwB,GAAkB2G,IACvB,EAAK3G,GAAkB2G,IACvB,EAAK3G,GAAkB2G,IACvB,EAAK3G,GAAkB2G,OAWrB6xB,GAAkB,SAAUr4P,EAAOs/N,EAAae,GACpD,OAAO,GAAgBgwB,GAAkB,GAAI,MAAQhwB,IAsCvD,IAAMi4B,GAAsB13B,GAAgB,GAAgB,CAC1D,QACA,UACA,OACA,QACA,YAQI23B,GAAyB33B,GAAgB,GAAgB,CAC7D,KAAQf,IA5CV,SAAmBjuN,EAAM4oB,EAAM8kM,GAC7B,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClE+sC,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACnD8uN,EAAcy3B,GAAcx5M,EAAW6/K,cACvClzM,EAASm1M,GAAajmM,EAAMkmM,GAChCY,GACE7xJ,EACA2oL,GACA53B,GACAl1M,EACAg0M,EACAoB,GAGFp1M,EAASm1M,GAAajmM,EADtBkmM,EAAcy3B,GAAc9H,GAAkB,KAE9C/uB,GACE7xJ,EACA2oL,GACAC,GACA/sO,EACAg0M,EACAoB,MAwBF,MAASb,GAAkBk4B,IAC3B,QAAWl4B,GAAkB2G,IAC7B,QAAW3G,IA2vBb,SAAmBjuN,EAAM4mP,GACvB5mP,EAAK2Y,aAAa,IAAK9b,OAAO+pP,EAAK1tO,IACnClZ,EAAK2Y,aAAa,IAAK9b,OAAO+pP,EAAKztO,IACnCnZ,EAAK2Y,aAAa,SAAUiuO,EAAK3C,QACjCjkP,EAAK2Y,aAAa,SAAUiuO,EAAK1C,WA9vBjC,MAASj2B,GAAkB44B,MAmF7B,IAAMC,GAAuB93B,GAAgB,GAAgB,CAC3D,QACA,UAQI+3B,GAA0B/3B,GAAgB,GAAgB,CAC9D,MAASf,GAAkBk4B,IAC3B,MAASl4B,GAAkB44B,MAqC7B,IAAMG,GAAsBh4B,GAAgB,GAAgB,CAAC,QAAS,UAOhEi4B,GAAyBj4B,GAAgB,GAAgB,CAC7D,MAASf,GAAkBk4B,IAC3B,MAASl4B,GAAkB2G,MA+B7B,IAAM,GAA4B,CAChC,MAAS,QACT,WAAc,aACd,WAAc,aACd,QAAW,UACX,WAAc,gBACd,gBAAmB,gBACnB,aAAgB,gBAChB,mBAAsB,iBAUlBsyB,GAAwB,SAAU94P,EAAOs/N,EAAae,GAC1D,GAAIrgO,EAEF,OAAO,GADYs/N,EAAYA,EAAY9+N,OAAS,GAAGoR,KAE1C4sN,aACX,GACuD,EAAQp3N,aAW/D2xP,GAAqB54B,GAAsB,SAO3C64B,GAA2B74B,GAAsB,cAOjD84B,GAA2B94B,GAAsB,cAOjD+4B,GAAuB/4B,GAAsB,WAO7Cg5B,GAA6Bv4B,GAAgB,GAAgB,CACjE,WAAcf,GAAkBu5B,IAChC,MAASv5B,GAAkBu5B,IAC3B,QAAWv5B,GAAkBuX,IAC7B,mBAAsBvX,GAAkBw5B,MAQ1C,SAASA,GAAmBznP,EAAMnU,EAAU6hO,GAE1C,IAKIg6B,EALE7pL,EAAU,CAAC79D,KAAMA,GACjBtK,EAAO7J,EAAS2J,UAElBmuD,EAAa,GAGJ,uBAATjuD,GACgC,EAC/B61N,8BACAz4N,SAAQ,SAAUjH,GACjB,IAAM6J,EAAO7J,EAAS2J,UACT,eAATE,EACFiuD,EAAaA,EAAW/vD,OACI,EAAW47I,aAErB,oBAAT95I,EACTiuD,EAAaA,EAAW/vD,OACS,EAAWg1N,kBAE1B,iBAATlzN,EACTiuD,EAAaA,EAAW/vD,OACM,EAAW02N,eAGhC,UAAT50N,GACS,eAATA,GACS,YAATA,EAEAiuD,EAAWhwD,KAAK9H,GAEhB,GAAO,EAAO,OAGpB67P,EAAUR,IACQ,eAATxxP,GACTiuD,EAAuC,EAAW6rF,YAClDk4G,EAAUP,IACQ,oBAATzxP,GACTiuD,EAA4C,EAAWilK,iBACvD8+B,EAAUN,IACQ,iBAAT1xP,GACTiuD,EAAyC,EAAW2mK,cACpDo9B,EAAUJ,IAEV,GAAO,EAAO,IAEhB53B,GACE7xJ,EACA0pL,GACAG,EACA/jM,EACA+pK,GASJ,IAAMi6B,GAA0B34B,GAAgB,GAAgB,CAC9D,WAAcf,GAAkBu5B,MAQlC,SAASI,GAAgB5nP,EAAMg8L,EAAY0xB,GAEzCgC,GADiE,CAAC1vN,KAAMA,GAGtE2nP,GACAN,GACA,CAACrrD,GACD0xB,GASJ,IAAMm6B,GAAwB74B,GAAgB,GAAgB,CAC5D,aAAgBf,IA7blB,SAA2BjuN,EAAM8nP,EAAgBp6B,GAM/C,IALA,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClEwG,EAAQshP,EAAethP,MACvBkT,EAASouO,EAAepuO,OACxB9qB,EAAS4X,EAAM5X,OAEZnB,EAAI,EAAGA,EAAImB,EAAQnB,IAC1BiiO,GACE7xJ,EACAwoL,GACAC,GACA,CAAC,CAAClyP,KAAMoS,EAAM/Y,GAAIW,MAAOsrB,EAAOjsB,KAChCigO,MAkbJ,cAAiBO,GAAkBw5B,IACnC,WAAcx5B,GAAkBu5B,IAChC,WAAcv5B,GAAkBu5B,IAChC,MAASv5B,GAAkBu5B,IAC3B,QAAWv5B,GAAkBuX,IAC7B,MAASvX,IAuXX,SAAoBjuN,EAAMrO,EAAQ+7N,GAChC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClE8f,EAAa,GACnB,GAAInuB,EAAOo2P,YAAYn5P,OAAQ,CAC7B,IAAMsiI,EAAYv/H,EAAOo2P,YAAY,GAAGl8O,UACpCqlH,IACFpxG,EAAuB,WAAIoxG,GAE7B,IAAMixH,EAAaxwP,EAAOo2P,YAAY,GAAGtvO,WAEvC0pO,GACkD,mBAAzB,EAAmB,SAE5CriO,EAAsB,UAAIqiO,GAG9B,GAAIxwP,EAAOq2P,WAAWp5P,OAAQ,EACtB47H,EAAc74H,EAAOq2P,WAAW,GAAG9O,eAEvCp5N,EAAsB,UAAI0qG,GAG9B,GAAI74H,EAAOs2P,WAAWr5P,OAAQ,CAC5B,IAAM47H,GAAAA,EAAc74H,EAAOs2P,WAAW,GAAG/O,eACrBp5N,EAAsB,YACxCA,EAAsB,UAAI0qG,GAE5B1qG,EAAsB,UAAInuB,EAAOs2P,WAAW,GAE9C,IAAMl7M,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAco5B,GAAen7M,EAAW6/K,cACxClzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACAsqL,GACAv5B,GACAl1M,EACAg0M,EACAoB,MA5ZF,QAAWb,GAAkBwG,IAC7B,YAAexG,GAAkBwG,IACjC,KAAQxG,GAAkBwG,IAC1B,KAAQxG,GAAkBsG,IAC1B,YAAetG,GAAkBwG,IACjC,SAAYxG,GAAkBwG,IAC9B,WAAcxG,GAAkBsG,MAQ5B6zB,GAAqBp5B,GAAgB,GAAgB,CACzD,OACA,OACA,aACA,UACA,cACA,cACA,WACA,UAQIq5B,GAA4B95B,GAAsB,gBAUxD,SAASyxB,GAAehgP,EAAMhR,EAAS0+N,GACrC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAGpEhR,EAAQE,SACV8Q,EAAK2Y,aAAa,KAA6B3pB,EAAQE,SAIzD,IAAM4wB,EAAa9wB,EAAQisL,gBAGrBxqL,EAAS,CACb,QAAW,EACX,YAAe,EACf,KAAQ,EACR,KAAQ,EACR,YAAe,EACf,SAAY,EACZ,WAAc,GAEhBA,EAAOzB,EAAQm3N,mBAAqB,EACpC,IAAM17N,EAAOC,OAAOD,KAAKq1B,GAAc,IACpCpK,OACAjlB,QAAO,SAAU0jB,GAChB,OAAQ1jB,EAAO0jB,MAGbo8G,EAAgBvhI,EAAQo3N,mBAC9B,GAAI71F,EAAe,CAGjB,IAAM5+H,EAAS4+H,EAAcvhI,EAAS,GACtC,GAAI2C,EAAQ,CACV,IAAM22P,EAAaj8P,MAAMC,QAAQqF,GAAUA,EAAS,CAACA,GACjDo2P,EAAcO,EAmBlB,GAlBIt5P,EAAQtC,gBACVq7P,EAAcO,EAAW73P,QAAO,SAAUS,GACxC,IAAMrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC7C,GAAInD,EAAU,CACZ,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAa,uBAATE,EACuC,EACtC61N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,UAATE,GAA6B,eAATA,KAC1B9G,OAES,UAAT8G,GAA6B,eAATA,OAK7BnK,KAAKw1P,aAAc,CACrB,IAAIiH,EAAaM,EACbL,EAAaK,EACbt5P,EAAQtC,gBACVs7P,EAAaM,EAAW73P,QAAO,SAAUS,GACvC,IAAMrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC7C,GAAInD,EAAU,CACZ,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAa,uBAATE,EACuC,EACtC61N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,eAATE,GAAkC,oBAATA,KAC/B9G,OAES,eAAT8G,GAAkC,oBAATA,MAGpCuyP,EAAaK,EAAW73P,QAAO,SAAUS,GACvC,IAAMrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC7C,GAAInD,EAAU,CACZ,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAa,uBAATE,EACuC,EACtC61N,8BACA96N,QAAO,SAAU5E,GAChB,IAAM6J,EAAO7J,EAAS2J,UACtB,MAAgB,YAATE,GAA+B,iBAATA,KAC5B9G,OAES,YAAT8G,GAA+B,iBAATA,OAInCoqB,EAAkB,MAAI,CACpBioO,YAAaA,EACbC,WAAYA,EACZC,WAAYA,GAGhB,GAAIF,EAAYn5P,aAAiCe,IAAvBmwB,EAAiB,KAAiB,CAC1D,IAAMoxG,EAAY62H,EAAY,GAAGl8O,UAC7BqlH,IACFpxG,EAAiB,KAAIoxG,EAAUrlH,aAKvC,IAAMkhC,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAcs5B,GAAmBr7M,EAAW6/K,cAC5ClzM,EAASm1M,GAAa/uM,EAAYgvM,GAUxC,GATAY,GACE7xJ,EACAgqL,GACAj5B,GACAl1M,EACAg0M,EACAoB,GAGErkO,EAAKmE,OAAS,EAAG,CACnB,IAAMmgO,EAAWF,GAAa/uM,EAAYr1B,GAE1CilO,GACE7xJ,EACAgqL,GACAQ,GACA,CALqB,CAAC7hP,MAAO/b,EAAMivB,OAAQq1M,IAM3CrB,GAKJ,IAAMxiO,EACJwiO,EAAY,GAEV7hO,EAAWmD,EAAQtC,cACnBb,IACFA,EAAW,GAA6BA,GAAU,EAAMX,IAE1DwkO,GACE7xJ,EACAgqL,GACAX,GACA,CAACr7P,GACD6hO,GASJ,IAAM66B,GAA8Bv5B,GAAgB,GAAgB,CAClE,UACA,aACA,eACA,gBAQIw5B,GAAiCx5B,GAAgB,GAAgB,CACrE,QAAWf,GAAkBsG,IAC7B,WAActG,GAAkBsG,IAChC,aAAgBtG,GAAkBwG,IAClC,YAAexG,IA5yBjB,SAAkCjuN,EAAMrK,EAAa+3N,GACnD,IAKIj8B,EALE5zH,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAE3CsoC,EAAS2mC,EAAgB,OACzBk2G,EAASl2G,EAAgB,OAG3B3mC,GAAU,OAAqBA,GAAU,OAC3Cu6J,EAAY,EACHv6J,GAAU,QAAsBA,GAAU,QACnDu6J,EAAY,EAEZ,GAAO,EAAO,IAGhB,IAAMhiL,EAAK9Z,EAAY/G,OACnB+V,EAAO,GACX,GAAI8K,EAAK,EAAG,CACV9K,GAAQhP,EAAY,GACpB,IAAK,IAAI83B,EAAI,EAAGA,EAAIgkK,IAAahkK,EAC/B9oB,GAAQ,IAAMhP,EAAY83B,GAE5B,IAAK,IAAIhgC,EAAIsmL,EAAQtmL,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CACxCpvK,GAAQ,IAAMhP,EAAYlI,GAC1B,IAASggC,EAAI,EAAGA,EAAIgkK,IAAahkK,EAC/B9oB,GAAQ,IAAMhP,EAAYlI,EAAIggC,IAIpCgnM,GAAoBz0N,EAAM2E,QAuxB5B,SAAS6iP,GAAuBxnP,EAAMnU,EAAU6hO,GAC9C,IAAM55C,EAAkBjoL,EAAS0iD,qBACsBsvB,EAAU,CAAC79D,KAAMA,GACxE69D,EAAgB,OAAIhyE,EAASi3I,YAC7BjlE,EAAgB,OAAIhyE,EAAS0tM,YAG7B,IAAMz5K,EAAaj0B,EAASovL,gBAC5Bn7J,EAAWnqB,YAAcm+K,EAEzB,IAAM/mI,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAcy5B,GAA4Bx7M,EAAW6/K,cACrDlzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACA2qL,GACA55B,GACAl1M,EACAg0M,EACAoB,GASJ,IAAM25B,GAAsBz5B,GAAgB,GAAgB,CAC1D,QACA,OACA,YAQI05B,GAAsB15B,GAAgB,GAAgB,CAC1D,gBAAmBf,GAAkB25B,IACrC,gBAAmB35B,GAAkB25B,MAQjCe,GAA8Bp6B,GAAsB,mBAOpDq6B,GAA8Br6B,GAAsB,mBAO1D,SAASiX,GAAaxlO,EAAMpE,EAAS8xN,GACnC,IAAMxxB,EAActgM,EAAQsjM,iBACtB2pD,EAAY3sD,EAAYpoK,QACyB+pC,EAAU,CAAC79D,KAAMA,GAExE0vN,GACE7xJ,EACA6qL,GACAC,GACAzsD,EACAwxB,GAGFgC,GACE7xJ,EACA6qL,GACAE,GACA,CAACC,GACDn7B,GASJ,IAAMo7B,GAAyB95B,GAAgB,GAAgB,CAC7D,MAASf,GAAkBk4B,IAC3B,KAAQl4B,GAAkBsG,IAC1B,QAAWtG,GAAkBsG,MAkC/B,SAASsyB,GAAmB7mP,EAAM81B,GAEhC8+L,GAAqB50N,EAAMlT,KAAKirC,MAAc,IAARjC,GAAe,KAQvD,IAAMoyN,GAAiBl5B,GAAgB,GAAgB,CACrD,YACA,aACA,YACA,cAQIm5B,GAAoBn5B,GAAgB,GAAgB,CACxD,UAAaf,IAzrBf,SAAwBjuN,EAAM9O,EAAOw8N,GACnC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAC/B8f,EAAa,GAChD5iB,EAAMhM,EAAMukP,SACZr1N,EAAOlvB,EAAM29M,UACbkoC,EAAgB7lP,EAAM0iP,eACtBmV,EAAiB,CACrB,KAAQ7rP,GAGV,GAAIkjB,EAAM,CACR2oO,EAAkB,EAAI3oO,EAAK,GAC3B2oO,EAAkB,EAAI3oO,EAAK,GAC3B,IAAMjjB,EAASjM,EAAMsiP,YACf,EAAStiP,EAAM2iP,YAOrB,GALI,GAAUkD,GAA+B,IAAd,EAAO,IAAY,EAAO,KAAO32N,EAAK,KACnE2oO,EAAkB,EAAI,EAAO,GAC7BA,EAAkB,EAAIhS,EAAc,IAAM,EAAO,GAAK32N,EAAK,KAGzDjjB,IAAWA,EAAO,KAAOijB,EAAK,GAAK,GAAKjjB,EAAO,KAAOijB,EAAK,GAAK,GAAI,CACtE,IAA0BklO,EAAU,CAChCpsO,EAAG/b,EAAO,GACV8mP,OAAQhO,GAAgBlnD,OACxB51K,EAAGiH,EAAK,GAAKjjB,EAAO,GACpB+mP,OAAQjO,GAAgBlnD,QAE5BjvK,EAAoB,QAAIwlO,GAI5BxlO,EAAiB,KAAIipO,EAErB,IAAIjzN,EAAQ5kC,EAAMqiP,gBAAgB,GAC9B6O,EAAYhiO,EACE,OAAdgiO,IACFA,EAAY7D,IAEU,GAApB6D,EAAUxzP,SAEZknC,GADoB4qN,GAAa0B,IAGrB,IAAVtsN,IACFhW,EAAkB,MAAIgW,GAGxB,IAAM8pB,EAAW1uD,EAAM2uD,cACN,IAAbD,IACF9/B,EAAoB,QAAI8/B,GAG1B,IAAMkd,EAAQ5rE,EAAMooJ,WAChBx8E,IACFh9C,EAAkB,MAAIg9C,GAGxB,IAAM/vB,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc43B,GAAoB35M,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACA8oL,GACA/3B,GACAl1M,EACAg0M,EACAoB,MAwnBF,WAAcb,IA3lBhB,SAAyBjuN,EAAM9O,EAAOw8N,GACpC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClE8f,EAAa,GACbkyD,EAAO9gF,EAAM8nP,UACfhnK,IACFlyD,EAAkB,MAAIkyD,EAAKsnE,YAE7B,IAAMxjH,EAAQ5kC,EAAMgnJ,WAChBpiH,GAAmB,IAAVA,IACXhW,EAAkB,MAAIgW,GAExB,IAAMiX,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAcg4B,GAAqB/5M,EAAW6/K,cAC9ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACAkpL,GACAn4B,GACAl1M,EACAg0M,EACAoB,MAwkBF,UAAab,IA9iBf,SAAwBjuN,EAAM9O,EAAOw8N,GACnC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClE8f,EAAa,CACjB,MAAS5uB,EAAMooJ,WACf,MAASpmI,OAAOhiB,EAAMijL,aAAe,GAEjCpnI,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAck4B,GAAoBj6M,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACAopL,GACAr4B,GACAl1M,EACAg0M,EACAoB,MAgiBF,UAAab,IApDf,SAAwBjuN,EAAM9O,EAAOw8N,GACnC,IAAuD7vJ,EAAU,CAAC79D,KAAMA,GAClEgyE,EAAO9gF,EAAM8nP,UACbl4O,EAAS5P,EAAMgoP,YACfp5N,EAAa,CACjB,MAASkyD,EAAOA,EAAKsnE,gBAAa3pJ,EAClC,OAAQqiF,QAAOriF,EACf,UAAWmR,QAASnR,GAEhBo9C,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc25B,GAAoB17M,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACxCY,GACE7xJ,EACAirL,GACAl6B,GACAl1M,EACAg0M,EACAoB,QA+FJ,YCzwGMk6B,GACK,QADLA,GAEW,aAFXA,GAIO,UAJPA,GAKW,aALXA,GAMiB,kBANjBA,GAOa,eAPbA,GAQmB,qBAqBzB,IAAI,GAAoB,CAAC,qCAKrB,GAAiB,CACjB,KACA,kCACA,kCACA,kCACA,kCAIJ,MAmCM,GAnCqB,SAAU1oM,GAMjC,IALA,IAAI0uL,EAAQ,GACRrqN,EAAO,GAEPnuB,EAAM1J,KAAKs5B,IAAI,EAAGk6B,EAAM1xD,QAEnBnB,EAAI,EAAGA,EAAI+I,EAAK/I,IAAK,CAC1Bk3B,EAAO,GACP,IAAK,IAAI9hB,EAAI,EAAGA,EAAIy9C,EAAM1xD,OAAQiU,IACzBpV,EAAIX,KAAKs5B,IAAI,EAAGvjB,KACc,GAA3B8hB,EAAKpwB,QAAQ+rD,EAAMz9C,KACnB8hB,EAAKhxB,KAAK2sD,EAAMz9C,IAGxB8hB,EAAK/1B,OAAS,IACwB,GAAlCogP,EAAMz6O,QAAQowB,EAAK9uB,KAAK,OACxBm5O,EAAMr7O,KAAKgxB,EAAK9uB,KAAK,MAIjC,OAAOm5O,EAemB,CAAmB,GAAe94O,QAAQA,MAAM,KAX5C,SAAUg5O,EAAYC,GACpD,GAAID,GAAcA,EAAWtgP,OAAS,EAClC,IAAK,IAAInB,EAAI,EAAGA,EAAI0hP,EAAWvgP,OAAQnB,IAAK,CACxC,IAAI4nB,EAAQ65N,EAAW36O,QAAQ46O,EAAW1hP,IACtC4nB,GAAS,GACT65N,EAAW56O,OAAO+gB,EAAO,IAQzC,CAA0B,GAAuB,IACjD,GAAiB,GAAezhB,OAAO,IAMvC,IAuFI,GAeA,GAIA,GAIA,GAIA,GAIA,GAjHA,GAAwB,CACxB,SAAYqiP,GAAgBzD,SAC5B,OAAUyD,GAAgBlnD,OAC1B,YAAeknD,GAAgBlnD,QAO/B,GAAoBigC,GAAgB,GAAgB,CACpD,aAAgB,GAChB,OAAU,GACV,cAAiBhB,GAAyB,GAAmB,YAC7D,WAAcA,GAAyB,GAAgB,YACvD,WAAcA,GAAyB,GAAgB,YACvD,MAASA,GAAyB,GAAW,YAC7C,QAAWA,GAAyB,GAAa,YACjD,MAASA,GAAyB,IAClC,SAqjDJ,SAAiChuN,EAAM0tN,GACnC,IAAIqxB,EAAgB,GAAkB9yP,KAAKV,KAAMyU,EAAM0tN,GACvD,IAAKqxB,EACD,OAEJ,IAAIE,EAAkBvxB,EAAYA,EAAY9+N,OAAS,GACnDvC,MAAMC,QAAQyyP,GACdE,EAAuB,MAAIF,EAEG,iBAAlBA,EACZE,EAA0B,SAAIF,EAG9B,GAAO,EAAO,KAjkDlB,QAAW/wB,GAAyBsG,IACpC,YAAetG,GAAyBsG,IACxC,KAAQtG,GAAyBsG,IACjC,KAAQtG,GAAyB6F,IACjC,YAAe7F,GAAyBsG,IACxC,SAAYtG,GAAyB,IACrC,WAAcA,GAAyB6F,KACxC7E,GAAgB,GAAmB,CAClC,WAAchB,IAujClB,SAA0BhuN,EAAM0tN,GAC5B,IAAIrF,EAAcmH,GAAgB,GAAI,GAAgCxvN,EAAM0tN,GAC5E,IAAKrF,EACD,OAEJ,OAAO,IAAI,GAAgBA,KA5jC8B,YACzD,MAAS2F,GAAyB,GAAa,eAuB/C,IAhBuBgB,GAAgB,GAAgB,CACvD,aAAgB,GAChB,OAAU,GACV,KA2rDJ,SAAoBhvN,EAAM0tN,GACtB2B,GAAU,GAAcrvN,EAAM0tN,IA3rD9B,QAAWM,GAAyBsG,IACpC,YAAetG,GAAyBsG,IACxC,KAAQtG,GAAyBsG,IACjC,KAAQtG,GAAyB6F,IACjC,YAAe7F,GAAyBsG,IACxC,WAActG,GAAyB6F,MAOxB7E,GAAgB,GAAgB,CAC/C,KAAQhB,GAAyB,OAOjC,GAAiBgB,GAAgB,GAAgB,CACjD,aAwkDJ,SAA4BhvN,EAAM0tN,GAC9B,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAyBxvN,EAAM0tN,GAChE,IAAKp6K,EACD,OAEJ,IAAImsM,EAAsC/xB,EAAYA,EAAY9+N,OAAS,GACvEiY,EAAS,CACT1T,WAAWmgD,EAAa,MACxBngD,WAAWmgD,EAAc,OACzBngD,WAAWmgD,EAAa,MACxBngD,WAAWmgD,EAAc,QAE7BmsM,EAAqB,OAAI54O,EACzB44O,EAA2B,aAAInsM,EAAqB,aACpDmsM,EAA0B,YAAItsP,WAAWmgD,EAAoB,aAC7DmsM,EAA0B,YAAItsP,WAAWmgD,EAAoB,cAtlD7D,IAumDJ,SAAmBtzC,EAAM0tN,GACrB,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAaxvN,EAAM0tN,GACpD,IAAKp6K,EACD,OAEJ,IAAIqsM,EAAmCjyB,EAAYA,EAAY9+N,OAAS,GACxE+wP,EAAwB,aAAIxsP,WAAWmgD,EAAqB,cAC5DqsM,EAAwB,aAAIxsP,WAAWmgD,EAAqB,cAC5DqsM,EAAyB,cAAIxsP,WAAWmgD,EAAsB,eAC9DqsM,EAAyB,cAAIxsP,WAAWmgD,EAAsB,kBAzmD9D,GAAe07K,GAAgB,GAAgB,CAAC,WAAY,cAM5D,GAAkBA,GAAgB,GAAgB,CAClD,SAAYf,GAAkB,IAC9B,UAAaA,GAAkB,MAS/B,GAAqB,KA+BzB,IAWI,GAXA,GAAsB,KAe1B,IAWI,GAXA,GAAuB,KAe3B,IAAI,GAAqB,KAWzB,IAAI,GAAgB,KAWpB,IAAI,GAAsB,KAS1B,MAAMvxD,GAAU,SAAU5/F,EAAO/9D,GAC7B,IAAI5O,EAWJ,OAVI2sE,GAEA3sE,GADAA,EAASinL,GAAQt6G,IACD5mE,aACAvG,IAAZoP,IACA5O,EAAO,GAAK4O,IAIhB5O,EAAS,CAAC,EAAG,EAAG,EAAG,GAEhBA,GAQX,SAAS,GAAaiwB,GAClB,OAAO,GAAKtzB,KAAKqa,IAAIiZ,EAAK,GAAIA,EAAK,IAEvC,SAAS,KAEL,GAAgB,CAAC,IAAK,IAAK,IAAK,GAChC,GAAqB,IAAI,GAAK,CAC1B08C,MAAO4/F,GAAQ5tK,GAAGgD,IAAIH,OAAOiK,QAAQu7B,UAAWroC,GAAGgD,IAAIH,OAAOiK,QAAQw7B,eAM1E,GACI,+DACJ,GAAsB,IAAI,GAAK,CAC3Bj6B,OAPJ,GAA6B,CAAC,GAAI,GAQ9B04O,aAAcC,GAAWrD,YACzBuD,aARJ,GAAqCC,GAAgBlnD,OASjDonD,aARJ,GAAqCF,GAAgBlnD,OASjDr2K,YAAa,YACbknC,SAAU,EACV9pB,MAAO,GAVX,GAA2B,CAAC,GAAI,KAW5B1V,KAAM,GACNljB,IAAK,KAET,GAAyB,WACzB,GAAuB,IAAI,GAAO,CAC9B4/D,MAAO,GACPj/C,MAAO,IAEX,GAA4B,IAAI,GAAO,CACnCi/C,MAAO4/F,GAAQ5tK,GAAGgD,IAAIH,OAAOmmC,MAAMT,YAAa,GAChDxZ,MAAO/uB,GAAGgD,IAAIH,OAAOmmC,MAAMR,aAAe,IAE9C,GAAqB,IAAI,GAAK,CAC1B4zF,KAAM,sBACNl5C,KAAM,IAAI,GAAK,CACXlV,MAAO4/F,GAAQ5tK,GAAGgD,IAAIH,OAAOmmC,MAAMX,UAAW,KAElDr2B,OAAQ,GACRg1B,MAAO,KAEX,GAAgB,IAAI,GAAM,CACtBk8C,KAAM,GACN15D,MAAO,GACP3T,KAAM,GACN7D,OAAQ,GACRm3B,OAAQ,IAEZ,GAAsB,CAAC,IAK3B,IAAI,GA8CJ,MAAM,WAAY,GACdjtC,YAAYi8L,GACR97L,QAEK,IACD,MAoUZ,SAAS,GAAUo4P,EAAYn7G,EAAcu5G,GACzC,OAAIt1P,MAAMC,QAAQi3P,GACPA,EAEoB,iBAAfA,EACL,GAAU5B,EAAa4B,GAAan7G,EAAcu5G,GAGlDv5G,EAOf,SAAS,GAAUpoI,GACf,IAAIizB,EAAI85L,GAAkB/sN,GAAM,GAG5B0wC,EAAI,gCAAgCjzC,KAAKw1B,GAC7C,GAAIyd,EAAG,CACH,IAAI+yM,EAAW/yM,EAAE,GACjB,MAAO,CACH7sC,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAChCtO,SAAS4/O,EAAStxO,OAAO,EAAG,GAAI,IAAM,MAW3C,SAAS,GAAoBnS,GAChC,IAAIizB,EAAI85L,GAAkB/sN,GAAM,GAC5B8zK,EAAkB,GAGtB7gJ,EAAIA,EAAEn+B,QAAQ,WAAY,KAG1B,IAFA,IACI47C,EADA97B,EAAK,qIAED87B,EAAI97B,EAAGnX,KAAKw1B,IAAK,CACrB,IAAI/Z,EAAI/lB,WAAWu9C,EAAE,IACjBv3B,EAAIhmB,WAAWu9C,EAAE,IACjBz3B,EAAIy3B,EAAE,GAAKv9C,WAAWu9C,EAAE,IAAM,EAClCojI,EAAgBngL,KAAKulB,EAAGC,EAAGF,GAC3Bga,EAAIA,EAAE9gB,OAAOu+B,EAAE,GAAG9hD,QAEtB,GAAU,KAANqkC,EAGJ,OAAO6gJ,EAMX,SAAS,GAAQ9zK,GACb,IAAIizB,EAAI85L,GAAkB/sN,GAAM,GAAOmV,OACnCstO,EAAUziP,EAAKyiP,QAInB,OAHKA,GAAsB,eAAXA,IACZA,EAAUzlP,OAAOY,SAASR,MAE1BqlP,GAE0B,WAAtB7kP,SAASN,UAAwD,IAA/BmlP,EAAQluP,QAAQ,aAClDkuP,EAAUA,EAAQtwO,OAAO,IAEnB,IAAIhO,IAAI8uB,EAAGwvN,GACVrlP,MAGJ61B,EAOf,SAAS,GAAajzB,GAGlB,IAAIizB,EAAI85L,GAAkB/sN,GAAM,GAC3BmV,OACArgB,QAAQ,WAAY,KACrB2tP,EAAUziP,EAAKyiP,QAInB,OAHKA,GAAsB,eAAXA,IACZA,EAAUzlP,OAAOY,SAASR,MAE1BqlP,EACU,IAAIt+O,IAAI8uB,EAAGwvN,GACVrlP,KAGJ61B,EAuCf,SAAS,GAAUjzB,GACf,OAAOk0N,GAAYl0N,GAzcvB,GAAIjU,UAAUu1P,sBAAwB,SAAUthP,EAAM0tN,GAElD,IASIrzN,EAAWm1N,GAAgB,GATfR,GAAgB,GAAgB,CAC5C,SAAYxB,GAAkBjiO,KAAK+1P,sBAAuB/1P,MAC1D,OAAUiiO,GAAkBjiO,KAAK+1P,sBAAuB/1P,MACxD,UAAaoiO,GAAgBpiO,KAAKg2P,eAAgBh2P,MAClD,MAASA,KAAKi2P,iBAAiB/1M,KAAKlgD,MACpC,SAAYA,KAAKk2P,oBAAoBh2M,KAAKlgD,QAIAyU,EAAM0tN,EAAaniO,MACjE,GAAI8O,EAAU,CAEV,MAAM4uP,EAAUjpP,EAAKkC,qBAAqB,QAAQ,GAClD,IAAIgnP,EAAkBD,IAAYA,EAAQvwP,WAAauwP,EAAQ3vP,aAU/D,OATAe,EAASvH,SAAQ9D,IACR3C,MAAMC,QAAQ0C,EAAQG,YACvBH,EAAQG,SAAW,IAEnB+5P,GACAl6P,EAAQG,SAAS0C,QAAQq3P,MAI1B7uP,IAOf,GAAItO,UAAUw1P,eAAiB,SAAUvhP,EAAM0tN,GAC3C,IAAIp6K,EAASk8K,GAAgB,CAAE,SAAY,MAAQ,GAAmBxvN,EAAM0tN,EAAaniO,MACzF,GAAK+nD,EAAL,CAGA,IAAItkD,EAAU,IAAI,GACdrE,EAAKqV,EAAKmpB,aAAa,MAChB,OAAPx+B,GACAqE,EAAQS,MAAM9E,GAElB,IAAIO,EAA6DwiO,EAAY,GACzE7hO,EAAWynD,EAAiB,SAMhC,GALIznD,GACA,GAA6BA,GAAU,EAAOX,GAElD8D,EAAQoE,YAAYvH,UACbynD,EAAiB,SACpB/nD,KAAKs1P,eAAgB,CACrB,IAEItwH,EA6LZ,SAAoCr/H,EAAOwwP,EAAUt5G,EAAcu5G,EAAcR,GAC7E,OAAO,SAMOnyP,EAAS0gD,GACf,IAAIkyM,EAAWT,EACX/sP,EAAO,GACPytP,EAAsB,GAC1B,GAAID,EAAU,CACV,IAAI/1P,EAAWmD,EAAQtC,cACvB,GAAIb,EAAU,CACV,IAAI6J,EAAO7J,EAAS2J,UAChBE,IAASszP,IACTnH,EAAsBh2P,EACjB0/N,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,MAErBpH,EAAWC,EAAoBjzP,OAAS,GAGxCgzP,EACIlsP,IAASszP,IAAsBtzP,IAASszP,IAIpDpH,IACAxtP,EAA8BpF,EAAQ+a,IAAI,SAC1C63O,EAAWA,KAAcxtP,IAETA,EAAKioB,OAAO,YAAc,IACjC,KACD,GAAWnkB,SAASC,cAAc,aAEtC,GAASO,UAAYtE,EACrBA,EAAO,GAAShG,QAGxB,IAAI0zP,EAAe15G,EAOnB,GANIl3I,EACA4wP,EAAe5wP,EAEVwwP,IACLI,EAAe,GAAUJ,EAAUt5G,EAAcu5G,IAEjDC,EAAU,CACV,IAAII,EArGpB,SAAiCC,EAAY7tP,GACpC,IAAoB,KACzB,IAAI8tP,EAAa,CAAC,EAAG,GACjB/2H,EAAY,QACZg3H,EAAaF,EAAWxpO,WAC5B,GAAI0pO,EAAY,CACZ,IAAIC,EAAYD,EAAWtzC,UAC3B,GAAIuzC,GAAiC,GAApBA,EAAUxzP,OAAa,CACpC,IAAIyzP,EAAaF,EAAW5O,gBACxBp2O,EAASglP,EAAW3O,YAGxB0O,EAAW,GAAKG,EAAW,IAAMD,EAAU,GAAKjlP,EAAO,IACvD+kP,EAAW,GAAKG,EAAW,IAAMD,EAAU,GAAK,EAAIjlP,EAAO,IAC3DguH,EAAY,QAGpB,IAAI+F,EAAY+wH,EAAWp2O,UACvBqlH,IAGAA,EAAYA,EAAUn7H,SACZynP,QAAQtsH,EAAUyrH,WAAa,GAAmBA,WAC5DzrH,EAAUwnB,SAASxnB,EAAUgnB,YAAc,GAAmBA,YAC9DhnB,EAAUioH,QAAQjoH,EAAU8nH,WAAa,GAAmBA,WAC5D9nH,EAAUooH,UAAUpoH,EAAUgoH,aAAe,KAG7ChoH,EAAY,GAAmBn7H,QAEnCm7H,EAAUiqH,QAAQ/mP,GAClB88H,EAAUwsH,WAAWwE,EAAW,IAChChxH,EAAUysH,WAAWuE,EAAW,IAChChxH,EAAU2sH,aAAa1yH,GACvB,IAAI62H,EAAY,IAAI,GAAM,CACtB1pO,MAAO6pO,EACPx9O,KAAMusH,IAEN+wH,EAAWkH,WACXnH,EAAUmH,SAAWlH,EAAWkH,UACpC,OAAOnH,EA6DqB,CAAwBF,EAAa,GAAI1tP,GACzD,OAAIytP,EAAoBjzP,OAAS,GAI7BozP,EAAU5uP,YAAY,IAAI,GAAmByuP,IAQtC,CAACG,EAPQ,IAAI,GAAM,CACtBn2P,SAAUi2P,EAAa,GAAGp1P,cAC1B4rB,MAAO,KACP05D,KAAM8vK,EAAa,GAAG9I,UACtBl4O,OAAQghP,EAAa,GAAG5I,YACxBv0O,KAAM,QAEoB/Q,OAAOkuP,EAAa5rP,MAAM,KAErD8rP,EAEX,OAAOF,GAjQS,CAFRxuM,EAAc,MACXA,EAAiB,SACgC/nD,KAAKq1P,cAAer1P,KAAK01P,cAAe11P,KAAK21P,iBAC7GlyP,EAAQiC,SAASs/H,GAQrB,cANOj9E,EAAc,aAGdA,EAAOouM,SAEd1yP,EAAQ+rL,cAAcznI,GAAQ,GACvBtkD,IAGX,GAAIjD,UAAUy1P,iBAAmB,SAAUxhP,EAAM0tN,GAC7C,IAAI/iO,EAAKqV,EAAKmpB,aAAa,MAC3B,GAAW,OAAPx+B,EAAa,CACb,IAAIuG,EAAQ,GAAUjF,KAAKV,KAAMyU,EAAM0tN,GACvC,GAAIx8N,EAAO,CACP,IAAIsxP,OAAW,EACXC,EAAUziP,EAAKyiP,QAInB,GAHKA,GAAsB,eAAXA,IACZA,EAAUzlP,OAAOY,SAASR,MAE1BqlP,EAEAD,EADU,IAAIr+O,IAAI,IAAMxZ,EAAI83P,GACbrlP,UAGfolP,EAAW,IAAM73P,EAErBY,KAAK01P,cAAcuB,GAAYtxP,KAK3C,GAAInF,UAAUokO,qBAAuB,SAAUnwN,EAAMinL,GACjD,IAAK1jK,EAAS,GAAgBvjB,EAAK4sN,cAC/B,MAAO,GAEX,IAAIvyN,EACA0zN,EAAY/tN,EAAK+tN,UACrB,GAAiB,YAAbA,GAAwC,UAAbA,EAI3B,OAHA1zN,EAAW9O,KAAK+1P,sBAAsBthP,EAAM,CACxCzU,KAAK+gO,eAAetsN,EAAMinL,OAMnB,GAGV,GAAiB,aAAb8mC,EAA0B,CAC/B,IAAI/+N,EAAUzD,KAAKg2P,eAAevhP,EAAM,CACpCzU,KAAK+gO,eAAetsN,EAAMinL,KAE9B,OAAIj4L,EACO,CAACA,GAGD,GAGV,GAAiB,OAAb++N,EAAoB,CACzB1zN,EAAW,GACX,IAAK,IAAI8F,EAAIH,EAAK2/J,kBAAmBx/J,EAAGA,EAAIA,EAAEwkJ,mBAAoB,CAC9D,IAAI6B,EAAKj7J,KAAK4kO,qBAAqBhwN,EAAG8mL,GAClCzgC,GACA,EAAOnsJ,EAAUmsJ,GAUzB,OANAnsJ,EAASvH,SAAQ,SAAUwH,GAClBA,EAAEpL,SACHoL,EAAE7K,MAAMX,GAAGojC,aAIZ73B,EAGP,MAAO,IAIf,GAAItO,UAAU4kO,kBAAoB,SAAUt2N,EAAU4sL,GAClDA,EAAc17L,KAAKghO,aAAatlC,GAChC,IAAIo8D,EAAM,GAAgB,GAAe,GAAI,OACzCC,EAAW,gCACfD,EAAI1uG,eAAe2uG,EAAU,WAAY,GAAkB,IAC3DD,EAAI1uG,eAAe2uG,EAAU,YAAa32B,IAC1C02B,EAAI1uG,eAAeg4E,GAAyB,qBAxc1B,uFAyclB,IAAqD9uJ,EAAU,CAC3D79D,KAAMqjP,GAGNvjO,EAAa,GAEjB,MAAMspO,EAAwB,GAC9B,IAAIC,EAAa,GACjB,MAAMC,EAAY,SAAUz2P,EAAK7D,EAASgE,GACtC,GAAIA,GAAOhE,EAAQG,SAASP,OACxBiE,EAAIc,KAAK3E,OAER,CACD,IAAIwgB,EAAQ3c,EAAIsB,MAAKpB,GAAOA,EAAIyM,QAAUxQ,EAAQG,SAAS6D,KACtDwc,IACDA,EAAQ,GACRA,EAAMhQ,MAAQxQ,EAAQG,SAAS6D,GAC/BH,EAAIc,KAAK6b,IAEb85O,EAAU95O,EAAOxgB,EAASgE,EAAM,KAGxCqH,EAASvH,SAAQ,SAAU9D,GACnBA,EAAQG,SACRm6P,EAAUD,EAAYr6P,EAAS,GAG/Bo6P,EAAsBz1P,KAAK3E,MAIT,IAAtBq6P,EAAWz6P,SACXy6P,EAAaA,EAAW,IAE5B,MAAME,EAAeF,EAAW7pP,MAC3BnT,MAAMC,QAAQ+8P,KACfA,EAAa,CAACA,IAElBA,EAAaA,EAAWz1P,OAAOw1P,GAC/BC,EAAW7pP,MAAQ+pP,EACnBzpO,EAAqB,SAAIupO,EAEzB,IAAIv6B,EAAc,GAAau0B,EAAIz2B,cAC/BlzM,EAASm1M,GAAa/uM,EAAYgvM,GAEtC,OADAY,GAAoB7xJ,EAAS,GAAiB+wJ,GAA8Bl1M,EAAQ,CAACutK,GAAc6nC,EAAavjO,MACzG83P,GAoRX,IAAI,GAAoBr0B,GAAgB,GAAgB,CACpD,KA4yBJ,SAAwBhvN,EAAM0tN,GAC1B,IAAIk2B,EAAap0B,GAAgB,GAAI,GAAcxvN,EAAM0tN,EAAaniO,MACtE,IAAKq4P,EACD,OAEJ,IAAI5vP,EAAuC4vP,EAAiB,IAC5D,GAAI5vP,GAAc,UAAPA,EAAiB,CACxB,IAAI0tP,EAA4CkC,EAAsB,SAClElC,IACAh0B,EAAYA,EAAY9+N,OAAS,GAAK8yP,GAE1C,IAAIxwP,EAA8B0yP,EAAmB,MACjD1yP,IACAw8N,EAAYA,EAAY9+N,OAAS,GAAKsC,OAjzBlD,SAAS,GAAkB8O,EAAM0tN,GAC7B,OAAO8B,QAAgB7/N,EAAW,GAAmBqQ,EAAM0tN,EAAaniO,MAO5E,IAAI,GAAqByjO,GAAgB,GAAgB,CACrD,KAAQhB,IAuXZ,SAAkBhuN,EAAM0tN,GACpB,IAAIq2B,EAAav0B,GAAgB,GAAI,GAAcxvN,EAAM0tN,GACzD,OAAIq2B,GAIO,QA5XX,MAAS/1B,GAAyB,IAClC,QAAWA,GAAyBkG,IACpC,QAAWlG,IA7Df,SAAkBhuN,GACd,IAEI3C,EAFA4mP,EAASjkP,EAAKmpB,aAAa,UAC3B+6N,EAASlkP,EAAKmpB,aAAa,UAkB/B,OAdQ9rB,EAFO,gBAAX4mP,EACe,gBAAXC,EACSpO,GAAWrD,YAGXqD,GAAWnD,SAIT,gBAAXuR,EACSpO,GAAWpD,aAGXoD,GAAWlD,UAGrB,CACH15N,EAAG/lB,WAAW6M,EAAKmpB,aAAa,MAChC86N,OAAQ,GAAsBA,GAC9B9qO,EAAGhmB,WAAW6M,EAAKmpB,aAAa,MAChC+6N,OAAQ,GAAsBA,GAC9B7mP,OAAQA,MAqCZ,MAAS2wN,GAAyB,MAItC,MAyBMw7B,GAAwBx6B,GAC1B,GAAgB,CAChB,KAAQhB,IA3BK,SAAUhuN,EAAM0tN,GAI7B,OAHAx8L,GAAGu4N,QAAQC,OAAO1pP,EAAKmwD,UAAYg9J,KAAKiD,cACxCl/L,GAAGu4N,QAAQC,OAAyB,QAAlB1pP,EAAK+tN,WACf78L,GAAG3yB,OAAOorP,IAAIr1B,WAAWt0N,GACxBmV,YAgKb,IAAI,GAAsB65M,GAAgB,GAAgB,CACtD,MAAShB,GAAyB,IAClC,MAASA,GAAyB,MA4BtC,IAAI,GAAqBgB,GAAgB,GAAgB,CACrD,MAAShB,GAAyB,IAClC,MAASA,GAAyBkG,MA8BtC,IAAI,GAAqBlF,GAAgB,GAAgB,CACrD,MAAShB,GAAyB,IAClC,KAAQA,GAAyB6F,IACjC,QAAW7F,GAAyB6F,MAiCxC,IAAI,GAA2B7E,GAAgB,GAAgB,CAC3D,YAAepB,GAAa,MAOhC,SAAS,GAAmB5tN,EAAM0tN,GAC9B,OAAO8B,GAAgB,KAAM,GAA0BxvN,EAAM0tN,GA6BjE,IAAI,GAAiCsB,GAAgB,GAAmB,CACpE,MAASrB,GAAgB,MAmB7B,IAAI,GAAmBqB,GAAgB,GAAgB,CACnD,KAyoBJ,SAAoBhvN,EAAM0tN,GACtB,IAGI82B,EADC92B,EAAYA,EAAY9+N,OAAS,GACZ41P,MACtBvxN,EAAI85L,GAAkB/sN,GAAM,GAC5BykP,EAAOr1N,KAAKrS,MAAMkW,GACtBuxN,EAAM7wP,KAAKpH,MAAMk4P,GAAQ,EAAIA,KA/oB9Bz1B,GAAgB,GAAmB,CAClC,MA9CJ,SAAuBhvN,EAAM0tN,GACzB,IAGI/3N,EADC+3N,EAAYA,EAAY9+N,OAAS,GACN+G,YAC5Bs9B,EAAI85L,GAAkB/sN,GAAM,GAE5B0wC,EADK,8HACEjzC,KAAKw1B,GAChB,GAAIyd,EAAG,CACH,IAAIx3B,EAAI/lB,WAAWu9C,EAAE,IACjBv3B,EAAIhmB,WAAWu9C,EAAE,IACjBz3B,EAAI9lB,WAAWu9C,EAAE,IACrB/6C,EAAYhC,KAAK,CAACulB,EAAGC,EAAGF,SAGxBtjB,EAAYhC,KAAK,QAsCzB,SAAS,GAAYqM,EAAM0tN,GACvB,IAAIg3B,EAAgBl1B,GACQ,CACpB75N,YAAa,GACb6uP,MAAO,IACP,GAAkBxkP,EAAM0tN,GAChC,GAAKg3B,EAAL,CAMA,IAHA,IAAI5wE,EAAkB,GAClBn+K,EAAc+uP,EAAc/uP,YAC5B6uP,EAAQE,EAAcF,MACjB/2P,EAAI,EAAGgiB,EAAK3iB,KAAKqa,IAAIxR,EAAY/G,OAAQ41P,EAAM51P,QAASnB,EAAIgiB,IAAMhiB,EAC1C,GAAzBkI,EAAYlI,GAAGmB,QACfklL,EAAgBngL,KAAKgC,EAAYlI,GAAG,GAAIkI,EAAYlI,GAAG,GAAIkI,EAAYlI,GAAG,GAAI+2P,EAAM/2P,IAG5F,OAAO,IAAI,GAAWqmL,EAAiB,UAO3C,IAAI,GAAek7C,GAAgB,GAAgB,CAC/C,KAAQhB,GAAyB,KAClCgB,GAAgB,GAAmB,CAClC,EAAKhB,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,IAC9B,EAAKlG,GAAyBkG,OAqBlC,IAAI,GAAoClF,GAAgB,GAAgB,CACpE,YAAepB,GAAa,MAOhC,SAAS,GAA4B5tN,EAAM0tN,GACvC,OAAO8B,GAAgB,KAAM,GAAmCxvN,EAAM0tN,GAO1E,IAAI,GAAoCsB,GAAgB,GAAgB,CACpE,QAAWhB,GAAyB6F,IACpC,WAAc7F,GAAyB6F,IACvC,aAAgB7F,GAAyBsG,MAO7C,SAAS,GAAet0N,EAAM0tN,GAC1B,IAAI5tM,EAAa0vM,GAAgB,GAAI,GAAmCxvN,EAAM0tN,GAC1E55C,EAAkB,GAA4B9zK,EAAM0tN,GACxD,GAAI55C,EAAiB,CACjB,IAAIg0C,EAAa,IAAI,GAAWh0C,EAAiB,QAEjD,OADAg0C,EAAW/sC,cAAcj7J,GAAY,GAC9BgoM,GAWf,SAAS,GAAe9nN,EAAM0tN,GAC1B,IAAI5tM,EAAa0vM,GAAgB,GAAI,GAAmCxvN,EAAM0tN,GAC1E55C,EAAkB,GAA4B9zK,EAAM0tN,GACxD,GAAI55C,EAAiB,CACjB,IAAIl4K,EAAU,IAAI,GAAQk4K,EAAiB,OAAoB,CAC3DA,EAAgBllL,SAGpB,OADAgN,EAAQm/K,cAAcj7J,GAAY,GAC3BlkB,GAWf,IAAI,GAAyBozN,GAAgB,GAAgB,CACzD,WAAcrB,GAAgB,IAC9B,WAAcA,GAAgB,IAC9B,cAAiBA,GAAgB,IACjC,MAASA,GAAgB,IACzB,QAAWA,GAAgB,MAO/B,SAAS,GAAkB3tN,EAAM0tN,GAC7B,IAOIm3B,EAPAlhM,EAAa6rK,GAAgB,GAAI,GAAwBxvN,EAAM0tN,GACnE,IAAK/pK,EACD,OAAO,KAEX,GAA0B,IAAtBA,EAAW/0D,OACX,OAAO,IAAI,GAAmB+0D,GAMlC,IAHA,IAAImhM,GAAc,EACdpvP,EAAOiuD,EAAW,GAAGnuD,UAEhB/H,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAE9C,GADWk2D,EAAWl2D,GACT+H,WAAaE,EAAM,CAC5BovP,GAAc,EACd,MAGR,GAAIA,EAAa,CACb,IAAI5tN,OAAS,EACT48I,OAAkB,EACtB,GAAIp+K,GAAQszP,GAAoB,CAC5B,IAAIpoO,EAAQ+iC,EAAW,GACvBzsB,EAAStW,EAAMkiH,YACfgxC,EAAkBlzJ,EAAM2tB,qBACxB,IAAS9gD,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAE9C,EAAOqmL,EADInwH,EAAWl2D,GACW8gD,sBAGrC,GADAs2M,EAAgB,IAAI,GAAW/wE,EAAiB58I,GACLysB,QAEtCjuD,GAAQszP,GAEb,GADAnE,EAAgB,IAAI,GAAgBlhM,GACOA,GAEtCjuD,GAAQszP,GAEb,GADAnE,EAAgB,IAAI,GAAalhM,GACUA,GAEtCjuD,GAAQszP,GACbnE,EAAgB,IAAI,GAAmBlhM,GAGvC,GAAO,EAAO,SAIlBkhM,EAAgB,IAAI,GAAmBlhM,GAE3C,OAA4D,EAOhE,SAAS,GAAU3jD,EAAM0tN,GACrB,IAAI5tM,EAAa0vM,GAAgB,GAAI,GAAmCxvN,EAAM0tN,GAC1E55C,EAAkB,GAA4B9zK,EAAM0tN,GACxD,GAAI55C,EAAiB,CACjB,IAAIlzJ,EAAQ,IAAI,GAAMkzJ,EAAiB,QAEvC,OADAlzJ,EAAMm6J,cAAcj7J,GAAY,GACzBc,GAWf,IAAI,GAA4BouM,GAAgB,GAAgB,CAC5D,gBA4YJ,SAA+BhvN,EAAM0tN,GACjC,IAAIs3B,EAA+Bx1B,GACA,GAAM,GAA2BxvN,EAAM0tN,GAC1E,GAAIs3B,EAA6Bp2P,OAAS,EAAG,CACzC,IAAIokO,EAECtF,EAAYA,EAAY9+N,OAAS,GACtCokO,EAAgBr/N,KAAKgI,MAAMq3N,EAAiBgyB,KAlZhD,gBAiaJ,SAA+BhlP,EAAM0tN,GAEjC,IAAI6H,EAAiB/F,QAAgB7/N,EAAW,GAA2BqQ,EAAM0tN,GACjF,GAAI6H,EAAgB,CAGX7H,EAAYA,EAAY9+N,OAAS,GACtB,GAAK2mO,MAja7B,SAAS,GAAYv1N,EAAM0tN,GACvB,IAAI5tM,EAAa0vM,GACc,GAAM,GAAmCxvN,EAAM0tN,GAC1EsF,EAAkBxD,GAAgB,CAAC,MAAO,GAA2BxvN,EAAM0tN,GAC/E,GAAIsF,GAAmBA,EAAgB,GAAI,CAGvC,IAFA,IAAIl/C,EAAkBk/C,EAAgB,GAClC70D,EAAO,CAAC2V,EAAgBllL,QACnBnB,EAAI,EAAGgiB,EAAKujN,EAAgBpkO,OAAQnB,EAAIgiB,IAAMhiB,EACnD,EAAOqmL,EAAiBk/C,EAAgBvlO,IACxC0wK,EAAKxqK,KAAKmgL,EAAgBllL,QAE9B,IAAIgN,EAAU,IAAI,GAAQk4K,EAAiB,OAAoB3V,GAE/D,OADAviK,EAAQm/K,cAAcj7J,GAAY,GAC3BlkB,GAWf,IAAI,GAAgBozN,GAAgB,GAAgB,CAChD,UAjhBJ,SAAyBhvN,EAAM0tN,GAO3B,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAoBxvN,EAAM0tN,GAC3D,GAAKp6K,EAAL,CAGA,IAGIp2C,EAQAC,EAAQ64O,EAAcG,EAXtBgP,EAAqCz3B,EAAYA,EAAY9+N,OAAS,GACtEw2P,EAAa,SAAU9xM,EAASA,EAAa,KAAI,GACjD+xM,IAAa,SAAU/xM,IAAW5oD,OAAOD,KAAK26P,GAAYx2P,OAAS,EAEnEwO,EAAwCgoP,EAAkB,KAC1DhoP,EACAF,EAAME,EAEDioP,IACLnoP,EAAM,IAGV,IA8BIsgB,EA9BAq4N,EAAeC,GAAWrD,YAC1B6S,EAAyChyM,EAAiB,QAC1DgyM,GACAnoP,EAAS,CAACmoP,EAAQpsO,EAAGosO,EAAQnsO,GAC7B68N,EAAesP,EAAQrB,OACvB9N,EAAemP,EAAQpB,OACvBrO,EAAeyP,EAAQjoP,QAElB,4CAA4CmwB,KAAKtwB,KAElD,UAAUswB,KAAKtwB,IACfC,EAAS,GACT64O,EAAe,GACfG,EAAe,IAEV,gBAAgB3oN,KAAKtwB,IAC1BC,EAAS,CAAC,GAAI,IACd64O,EAAe,GACfG,EAAe,IAEV,SAAS3oN,KAAKtwB,KACnBC,EAAS,CAAC,GAAI,GACd64O,EAAe,GACfG,EAAe,KAInBkP,GAAY,UAAU73N,KAAK66B,UAAUC,YAAoC,WAAtB1qD,SAASN,UAAyBJ,EAAI2f,WAAW,WACpG3f,EAAMA,EAAIpI,QAAQ,QAAS,WAG/B,IAKIsrB,EALAlH,EAAqCksO,EAAe,EACpDjsO,EAAqCisO,EAAe,OAC9Cz1P,IAANupB,QAAyBvpB,IAANwpB,IACnBqE,EAAS,CAACtE,EAAGC,IAGjB,IAKIymC,EALAwsG,EAAqCg5F,EAAe,EACpD7wM,EAAqC6wM,EAAe,OAC9Cz1P,IAANy8J,QAAyBz8J,IAAN4kD,IACnBn0B,EAAO,CAACgsI,EAAG73G,IAGf,IAAImlE,EAAiCpmE,EAAiB,aACtC3jD,IAAZ+pH,IACA95D,EAAW,GAAU85D,IAEzB,IAAI5jF,EAAyCwd,EAAe,MACxDwpB,EAAgDxpB,EAAe,MACnE,GAAI+xM,EAAU,CACNnoP,GAAO,KACPkjB,EAAO,IAEX,IAAIwpO,EAAe,IAAI,GAAK,CACxBzsP,OAAQA,EACR04O,aAAcA,EACdG,aAAcA,EACdG,aAAcA,EACdz9N,YAAantB,KAAK6qP,aAClB54N,OAAQA,EACRm5N,aAAcb,GAAWrD,YACzB7yL,SAAUA,EACV9pB,MAAOA,EACP1V,KAAMA,EACNljB,IAAK3R,KAAK61P,iBAAiBlkP,GAC3B4/D,MAAOA,IAEP+sL,EAAeD,EAAarW,gBAAgB,GAC5C6O,EAAYwH,EAAa/6C,UAC7B,GAAkB,OAAduzC,EAAoB,CACpB,IAAIpN,EAAa4U,EAAajW,gBAC9B,GAAIqB,IAAeT,IAAmBS,IAAeT,GAAoB,CACrE,IAAIuV,EAAa,WACb,IAAI9U,EAAa4U,EAAajW,gBAC9B,GAAMqB,IAAeT,IACjBS,IAAeT,GAAqB,CACpC,IAAIwV,EAAcH,EAAa/6C,UAC/B,GAAIk7C,GAAqC,GAAtBA,EAAYn7P,OAAa,CACxC,IAAI22P,EAAc,GAAawE,GAC/BH,EAAalxG,SAASmxG,EAAetE,GAEzCqE,EAAa5V,oBAAoB8V,KAGzCF,EAAa7V,kBAAkB+V,GAC3B9U,IAAeT,IACfqV,EAAajoI,aAIpB,GAAwB,GAApBygI,EAAUxzP,OAAa,CAC5B,IAAI22P,EAAc,GAAanD,GAC/BwH,EAAalxG,SAASmxG,EAAetE,GAEzCJ,EAAwB,WAAIyE,OAI5BzE,EAAwB,WAAI,KAyZhC,WAzYJ,SAA0BnlP,EAAM0tN,GAE5B,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAqBxvN,EAAM0tN,GAC5D,GAAKp6K,EAAL,CAGA,IAAI6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/CsiI,EAAY,IAAI,GAAK,CACrBl/C,KAAM,IAAI,GAAK,CACXlV,MAEK,UAAWxpB,EAASA,EAAc,MAAI,KAE/Cxd,MAAwCwd,EAAe,QAE3D6xM,EAAuB,UAAIj0H,IA2X3B,UA5WJ,SAAyBlxH,EAAM0tN,GAM3B,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAoBxvN,EAAM0tN,GAC3D,GAAKp6K,EAAL,CAGA,IAAI6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/C47H,EAAc,IAAI,GAAO,CACzB1tD,MAEK,UAAWxpB,EAASA,EAAc,MAAI,GAC3Cz1B,MAA8B,UAAWy1B,EAASA,EAAc,MAAI,IAExE6xM,EAAyB,YAAI36H,IA4V7B,UA5UJ,SAAyBxqH,EAAM0tN,GAE3B,IAAIp6K,EAASk8K,GAAgB,GAAI,GAAoBxvN,EAAM0tN,GAC3D,GAAKp6K,EAAL,CAGA,IAAI6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/CsvE,EAAY,IAAI,GAAK,CACrBpB,MAEK,UAAWxpB,EAASA,EAAc,MAAI,KAE/C6xM,EAAuB,UAAIjnL,EAC3B,IAAI8T,EAAyC1+B,EAAc,UAC9C3jD,IAATqiF,IACAmzK,EAAkB,KAAInzK,GAE1B,IAAIwzK,EAA4ClyM,EAAiB,aACjD3jD,IAAZ61P,IACAL,EAAqB,QAAIK,KA0T7B,aAjjBuB,SAAUxlP,EAAM0tN,GACvCx8L,GAAGu4N,QAAQC,OAAO1pP,EAAKmwD,UAAYg9J,KAAKiD,cACxCl/L,GAAGu4N,QAAQC,OAAyB,gBAAlB1pP,EAAK+tN,WAEvB,IAAIz6K,EAASpiB,GAAG7M,IAAImrM,gBAChB,GAAIg6B,GAAuBxpP,EAAM0tN,GACrC,IAAKp6K,EACD,OAEJ,MAAM6xM,EAAcz3B,EAAYA,EAAY9+N,OAAS,GAC/C8G,SAAcyvP,EACpBj0N,GAAGu4N,QAAQC,OAAe,UAARh0P,GAAmC,MAAfyvP,GAA+B,YAARzvP,GAC7D,IAAIw7H,EAAY,IAAIhgG,GAAGhgC,MAAMwrP,KAAK,CAC9B/3O,KAAO2uC,EAAc,OAEzB6xM,EAA0B,aAAIj0H,KA0iBlC,SAAS,GAAUlxH,EAAM0tN,GACrB,IAAIy3B,EAAc31B,GAAgB,GAAI,GAAexvN,EAAM0tN,EAAaniO,MACxE,IAAK45P,EACD,OAAO,KAEX,IAOIhD,EAPAjkL,EAEC,cAAeinL,EAAcA,EAAuB,UAAI,GACzDnzK,EAAyCmzK,EAAmB,UACnDx1P,IAATqiF,GAAuBA,IACvB9T,EAAY,MAGZ,eAAgBinL,EACZA,EAAwB,YAAK,KAC7BhD,EAAagD,EAAwB,YAIzChD,EAAa,GAEjB,IAAIjxH,EAEC,cAAei0H,EAAcA,EAAuB,UAAI,GACzD36H,EAEC,gBAAiB26H,EACZA,EAAyB,YACzB,GACV,IAAI6E,EACJ,IAAIxE,EAA4CL,EAAsB,QA2DlE6E,OA1DYr6P,IAAZ61P,GAA0BA,EA0DZ,CACV,IAAI,GAAM,CACNxzK,KAAM9T,EACN5lD,MAAO6pO,EACPrhP,OAAQ0pH,EACR7lH,KAAMusH,EACNj5F,YAAQtoC,KA5DF,CACV,IAAI,GAAM,CACN9D,SAAU,SAAUmD,GAChB,IAAInD,EAAWmD,EAAQtC,cACnBgJ,EAAO7J,EAAS2J,UACpB,OAAIE,IAASszP,GAGF,IAAI,GADiD,EAEvDz9B,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,OAGhBtzP,IAASszP,IACdtzP,IAASszP,GACFn9P,OAFN,GAKTmmF,KAAM9T,EACN5lD,MAAO6pO,EACPrhP,OAAQ0pH,EACR7lH,KAAMusH,EACNj5F,YAAQtoC,IAEZ,IAAI,GAAM,CACN9D,SAAU,SAAUmD,GAChB,IAAInD,EAAWmD,EAAQtC,cACnBgJ,EAAO7J,EAAS2J,UACpB,OAAIE,IAASszP,GAGF,IAAI,GADiD,EAEvDz9B,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,OAGhBtzP,IAASszP,IACdtzP,IAASszP,GACFn9P,OAFN,GAKTmmF,KAAM9T,EACNp9D,OAAQ,KACRm3B,YAAQtoC,KAepB,MAAMs6P,EAAe9E,EAA0B,aAI/C,OAHI8E,GACAD,EAAYl3P,SAAQmgC,GAAKA,EAAEk2N,SAAWc,IAEnCD,EAQX,SAAS,GAA4BnF,EAAelhM,GAChD,IAII8hM,EAAYC,EAAeC,EAJ3Bl2O,EAAKk0C,EAAW/0D,OAChBg3P,EAAW,IAAIv5P,MAAMs3D,EAAW/0D,QAChCi3P,EAAc,IAAIx5P,MAAMs3D,EAAW/0D,QACnCk3P,EAAgB,IAAIz5P,MAAMs3D,EAAW/0D,QAEzC62P,GAAa,EACbC,GAAgB,EAChBC,GAAkB,EAClB,IAAK,IAAIl4P,EAAI,EAAGA,EAAIgiB,IAAMhiB,EAAG,CACzB,IAAI5B,EAAW83D,EAAWl2D,GAC1Bm4P,EAASn4P,GAAK5B,EAASke,IAAI,WAC3B87O,EAAYp4P,GAAK5B,EAASke,IAAI,cAC9B+7O,EAAcr4P,GAAK5B,EAASke,IAAI,gBAChC07O,EAAaA,QAA8B91P,IAAhBi2P,EAASn4P,GACpCi4P,EAAgBA,QAAoC/1P,IAAnBk2P,EAAYp4P,GAC7Ck4P,EAAkBA,GAAmBG,EAAcr4P,GAEnDg4P,GACAZ,EAAcx6O,IAAI,UAAWu7O,GAE7BF,GACAb,EAAcx6O,IAAI,aAAcw7O,GAEhCF,GACAd,EAAcx6O,IAAI,eAAgBy7O,GAQ1C,IAAI,GAAe92B,GAAgB,GAAgB,CAC/C,YAAehB,GAAyBsG,IACxC,MAAStG,GAAyBsG,MAiCtC,IAAI,GAAwBtF,GAAgB,GAAgB,CACxD,KA5BJ,SAAoBhvN,EAAM0tN,GACtB,IAAIt5N,EAAO4L,EAAKmpB,aAAa,QAC7BkmM,GAAU,GAAcrvN,EAAM0tN,GAC9B,IAAIu4B,EAAuCv4B,EAAYA,EAAY9+N,OAAS,GACxEwF,GAAQ6xP,EAAchmO,aACtBgmO,EAAc7xP,GAAQ,CAClBhG,MAAO63P,EAAc73P,MACrB6xB,YAAagmO,EAAchmO,YAC3BzR,SAAU,WACN,OAAOy3O,EAAc73P,eAGtB63P,EAA2B,aAEpB,OAAT7xP,EACL6xP,EAAc7xP,GAAQ6xP,EAAc73P,MAED,OAA9B63P,EAAchmO,cACnBgmO,EAAcA,EAAchmO,aAAegmO,EAAc73P,cAEtD63P,EAAqB,OAS5B,WAgFJ,SAA0BjmP,EAAM0tN,GAC5B2B,GAAU,GAAqBrvN,EAAM0tN,MA3EzC,SAAS,GAAmB1tN,EAAM0tN,GAC9B2B,GAAU,GAAuBrvN,EAAM0tN,GAM3C,SAAS,GAAa1tN,EAAM0tN,GACxB2B,GAAU,GAAgBrvN,EAAM0tN,GAOpC,IAAI,GAAesB,GAAgB,GAAgB,CAC/C,MAAShB,GAAyB,IAClC,IAAOA,GAAyBsG,IAChC,SAAYtG,GAAyB,MAiDzC,IAAI,GAAsBgB,GAAgB,GAAgB,CACtD,WAaJ,SAA0BhvN,EAAM0tN,GAC5B,IAAIt5N,EAAO4L,EAAKmpB,aAAa,QAC7B,GAAa,OAAT/0B,EAAe,CACf,IAAI1E,EAAO4kO,GAAWt0N,GACqB0tN,EAAYA,EAAY9+N,OAAS,GAC9DwF,GAAQ1E,MAQ9B,IAAI,GAA0Bs/N,GAAgB,GAAgB,CAC1D,aAAgBhB,GAAyBsG,IACzC,YAAetG,GAAyBkG,IACxC,YAAelG,GAAyBkG,IACxC,MAASlG,GAAyBkG,IAClC,MAASlG,GAAyBkG,IAClC,KAAQlG,GAAyBkG,IACjC,KAAQlG,GAAyBkG,MA4BrC,IAAI,GAAclF,GAAgB,GAAgB,CAC9C,aAAgBhB,GAAyBkG,IACzC,aAAgBlG,GAAyBkG,IACzC,cAAiBlG,GAAyBkG,IAC1C,cAAiBlG,GAAyBkG,MAsB9C,IAAI,GAA4BlF,GAAgB,GAAgB,CAG5D,WAAcrB,GAAgB,MAqBlC,IAAI,GAA4BqB,GAAgB,GAAgB,CAC5D,WAAcpB,GAAa,MAwC/B,SAAS,GAAmB5tN,EAAM88D,GAK9B,IAJA,IAAI2/F,EAAO2a,GAAQt6G,GAGfspL,EAAO,CAAW,KAFO,GAAf3pF,EAAK7tK,OAAc6tK,EAAK,GAAK,GAEhBA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzChvK,EAAI,EAAGA,EAAI,IAAKA,EAAG,CACxB,IAAI+4O,EAAM15O,KAAKonD,MAA4BkyM,EAAK34P,IAAK+gB,SAAS,IAC9D43O,EAAK34P,GAAmB,GAAd+4O,EAAI53O,OAAc,IAAM43O,EAAMA,EAE5C/R,GAAoBz0N,EAAMomP,EAAKvwP,KAAK,KA0CxC,IAAI,GAAgCm5N,GAAgB,GAAgB,CAChE,KAAQf,IASZ,SAAuBjuN,EAAMm9N,EAAMzP,GAC/B1tN,EAAK2Y,aAAa,OAAQwkN,EAAK/oO,MAC/B,IAAqDypE,EAAU,CAAE79D,KAAMA,GACnE5R,EAAQ+uO,EAAK/uO,MACG,iBAATA,GACO,OAAVA,GAAkBA,EAAM6xB,aACxByvM,GAAoB7xJ,EAAS,GAA+B+wJ,GAA8B,CAACxgO,EAAM6xB,aAAcytM,EAAa,CAAC,gBAEnH,OAAVt/N,GAAkBA,EAAMA,OACxBshO,GAAoB7xJ,EAAS,GAA+B+wJ,GAA8B,CAACxgO,EAAMA,OAAQs/N,EAAa,CAAC,WAI3HgC,GAAoB7xJ,EAAS,GAA+B+wJ,GAA8B,CAACxgO,GAAQs/N,EAAa,CAAC,aArBrH,MAASO,IAmCb,SAA4BjuN,EAAM5R,GAC9BqmO,GAAoBz0N,EAAM5R,MAnC1B,YAAe6/N,IA2BnB,SAA2BjuN,EAAM5L,GAC7BsgO,GAAkB10N,EAAM5L,QAc5B,IAAI81P,GAAoBl7B,GAAgB,GAAgB,CAAC,SAMrD,GAAuBA,GAAgB,GAAgB,CACvD,UAAaf,GAAkB,IAC/B,SAAYA,GAAkB,IAC9B,OAAUA,GAAkB,IAC5B,KAAQA,GAAkBwG,MAS1B,GAAwB,SAAUrmO,EAAOs/N,EAAae,GACtD,IAAI1hL,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACrD,OAAI3T,MAAMC,QAAQ8B,GACP,GAAgB2+C,EAAW6/K,aAAc,UAIrC,GAAgB7/K,EAAW6/K,aADjB,iBAAVx+N,EACyC,OAGA,cAU5D,SAAS,GAAc4R,EAAMmqP,EAAmBz8B,GAC5C,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACvE,GAAImqP,EAAkB3qP,MAAO,CACzB,IAAIsgB,EAAa,CAAE1rB,KAAM+1P,EAAkB3qP,OACvCutC,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAco7B,GAAkBn9M,EAAW6/K,cAC3ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAsB,GAAuBnkD,EAAQg0M,EAAaoB,GAEnGY,GAAoB7xJ,EAAS,GAAsB,GAAuBssL,EAAmBz8B,OAAa/9N,EAAWpE,MAOzH,IAAI,GAAoBgjO,GAAsB,QAoB9C,IAAI,GAAgBS,GAAgB,GAAgB,CAAC,QAASA,GAAgB,GAAmB,CAAC,IAAK,IAAK,IAAK,OAM7G,GAAmBA,GAAgB,GAAgB,CACnD,KAAQf,GAAkBwG,KAC3BzF,GAAgB,GAAmB,CAClC,EAAKf,GAAkB2G,IACvB,EAAK3G,GAAkB2G,IACvB,EAAK3G,GAAkB2G,IACvB,EAAK3G,GAAkB2G,OASvB,GAAkB,SAAUxmO,EAAOs/N,EAAae,GAChD,OAAO,GAAgB,GAAkB,GAAI,MAAQA,IAsBzD,IAAI,GAAsBO,GAAgB,GAAgB,CACtD,QACA,UACA,OACA,QACA,YAOA,GAAyBA,GAAgB,GAAgB,CACzD,KAAQf,IA5BZ,SAAmBjuN,EAAM4oB,EAAM8kM,GAC3B,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnE+sC,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAc/hL,EAAW6/K,cACvClzM,EAASm1M,GAAajmM,EAAMkmM,GAChCY,GAAoB7xJ,EAAS,GAAkB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,GAElGp1M,EAASm1M,GAAajmM,EADtBkmM,EAAc,GAAc,GAAkB,KAE9CY,GAAoB7xJ,EAAS,GAAkB,GAAiBnkD,EAAQg0M,EAAaoB,MAqBrF,MAASb,GAAkB,IAC3B,QAAWA,GAAkB2G,IAC7B,QAAW3G,IAgoBf,SAAmBjuN,EAAM4mP,GACrB5mP,EAAK2Y,aAAa,IAAK9b,OAAO+pP,EAAK1tO,IACnClZ,EAAK2Y,aAAa,IAAK9b,OAAO+pP,EAAKztO,IACnCnZ,EAAK2Y,aAAa,SAAUiuO,EAAK3C,QACjCjkP,EAAK2Y,aAAa,SAAUiuO,EAAK1C,WAnoBjC,MAASj2B,GAAkB,MAqE/B,IAAI,GAAuBe,GAAgB,GAAgB,CACvD,QACA,UAOA,GAA0BA,GAAgB,GAAgB,CAC1D,MAASf,GAAkB,IAC3B,MAASA,GAAkB,MA6B/B,IAAI,GAAsBe,GAAgB,GAAgB,CAAC,QAAS,UAMhE,GAAyBA,GAAgB,GAAgB,CACzD,MAASf,GAAkB,IAC3B,MAASA,GAAkB2G,MAsB/B,IAAI,GAA4B,CAC5B,MAAS,QACT,WAAc,aACd,WAAc,aACd,QAAW,UACX,WAAc,gBACd,gBAAmB,gBACnB,aAAgB,gBAChB,mBAAsB,iBAStB,GAAwB,SAAUxmO,EAAOs/N,EAAae,GACtD,GAAIrgO,EAEA,OAAO,GADUs/N,EAAYA,EAAY9+N,OAAS,GAAGoR,KACnB4sN,aAAc,GACK,EAAQp3N,aAQjE,GAAqB+4N,GAAsB,SAM3C,GAA2BA,GAAsB,cAMjD,GAA2BA,GAAsB,cAMjD,GAAuBA,GAAsB,WAM7C,GAA6BS,GAAgB,GAAgB,CAC7D,WAAcf,GAAkB,IAChC,MAASA,GAAkB,IAC3B,QAAWA,GAAkB,IAC7B,mBAAsBA,GAAkB,MAO5C,SAAS,GAAmBjuN,EAAMnU,EAAU6hO,GAExC,IAKIg6B,EALA7pL,EAAU,CAAE79D,KAAMA,GAClBtK,EAAO7J,EAAS2J,UAEhBmuD,EAAa,GAGbjuD,IAASszP,IACyB,EAC7Bz9B,8BACAz4N,SAAQ,SAAUjH,GACf,IAAI6J,EAAO7J,EAAS2J,UAChBE,IAASszP,GACTrlM,EAAaA,EAAW/vD,OACH,EAAW47I,aAE3B95I,IAASszP,GACdrlM,EAAaA,EAAW/vD,OACE,EAAWg1N,kBAEhClzN,IAASszP,GACdrlM,EAAaA,EAAW/vD,OACD,EAAW02N,eAE7B50N,IAASszP,IACdtzP,IAASszP,IACTtzP,IAASszP,GACTrlM,EAAWhwD,KAAK9H,GAGhB,GAAO,EAAO,OAG1B67P,EAAU,IAELhyP,IAASszP,IACdrlM,EAAuC,EAAW6rF,YAClDk4G,EAAU,IAELhyP,IAASszP,IACdrlM,EAA4C,EAAWilK,iBACvD8+B,EAAU,IAELhyP,IAASszP,IACdrlM,EAAyC,EAAW2mK,cACpDo9B,EAAU,IAGV,GAAO,EAAO,IAElBh4B,GAAoB7xJ,EAAS,GAA4B6pL,EAAS/jM,EAAY+pK,GAOlF,IAAI,GAA0BsB,GAAgB,GAAgB,CAC1D,WAAcf,GAAkB,MAOpC,SAAS,GAAgBjuN,EAAMg8L,EAAY0xB,GAEvCgC,GAD+D,CAAE1vN,KAAMA,GAC1C,GAAyB,GAA0B,CAACg8L,GAAa0xB,GAOlG,IAAI,GAAwBsB,GAAgB,GAAgB,CACxD,aAAgBf,IAlWpB,SAA2BjuN,EAAM8nP,EAAgBp6B,GAK7C,IAJA,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnEwG,EAAQshP,EAAethP,MACvBkT,EAASouO,EAAepuO,OACxB9qB,EAAS4X,EAAM5X,OACVnB,EAAI,EAAGA,EAAImB,EAAQnB,IACxBiiO,GAAoB7xJ,EAAS,GAA+B,GAAmB,CAAC,CAAEzpE,KAAMoS,EAAM/Y,GAAIW,MAAOsrB,EAAOjsB,KAAOigO,MA6V3H,cAAiBO,GAAkB,IACnC,WAAcA,GAAkB,IAChC,WAAcA,GAAkB,IAChC,MAASA,GAAkB,IAC3B,QAAWA,GAAkB,IAC7B,MAASA,IA0Tb,SAAoBjuN,EAAMrO,EAAQ+7N,GAC9B,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnE8f,EAAa,GACjB,GAAInuB,EAAOo2P,YAAYn5P,OAAQ,CAC3B,IAAIsiI,EAAYv/H,EAAOo2P,YAAY,GAAGl8O,UAClCqlH,IACApxG,EAAuB,WAAIoxG,GAE/B,IAAIixH,EAAaxwP,EAAOo2P,YAAY,GAAGtvO,WACnC0pO,GACkD,mBAAzB,EAAmB,SAC5CriO,EAAsB,UAAIqiO,GAE9B,IAAI8H,EAAet4P,EAAOo2P,YAAY,GAAGoB,SACrCc,IACAnqO,EAAyB,aAAImqO,GAGrC,GAAIt4P,EAAOq2P,WAAWp5P,OAAQ,EACtB47H,EAAc74H,EAAOq2P,WAAW,GAAG9O,eAEnCp5N,EAAsB,UAAI0qG,GAGlC,GAAI74H,EAAOs2P,WAAWr5P,OAAQ,CAC1B,IAAI47H,GAAAA,EAAc74H,EAAOs2P,WAAW,GAAG/O,eACnBp5N,EAAsB,YACtCA,EAAsB,UAAI0qG,GAE9B1qG,EAAsB,UAAInuB,EAAOs2P,WAAW,GAEhD,IAAIl7M,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAe/hL,EAAW6/K,cACxClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAmB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,MA3VnG,QAAWb,GAAkBwG,IAC7B,YAAexG,GAAkBwG,IACjC,KAAQxG,GAAkBwG,IAC1B,KAAQxG,GAAkBsG,IAC1B,YAAetG,GAAkBwG,IACjC,SAAYxG,GAAkBwG,IAC9B,WAAcxG,GAAkBsG,MAOhC,GAAqBvF,GAAgB,GAAgB,CACrD,OACA,OACA,aACA,UACA,cACA,cACA,WACA,UAOA,GAA4BT,GAAsB,gBAStD,SAAS,GAAevuN,EAAMhR,EAAS0+N,GACnC,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GAEnEhR,EAAQE,SACR8Q,EAAK2Y,aAAa,KAA4B3pB,EAAQE,SAG1D,IAAI4wB,EAAa9wB,EAAQisL,gBAErBxqL,EAAS,CACT,QAAW,EACX,YAAe,EACf,KAAQ,EACR,KAAQ,EACR,YAAe,EACf,SAAY,EACZ,WAAc,GAElBA,EAAOzB,EAAQm3N,mBAAqB,EACpC,IAAI17N,EAAOC,OAAOD,KAAKq1B,GAAc,IAEhCrvB,QAAO,SAAU0jB,GACd,OAAQ1jB,EAAO0jB,MAEnBo8G,EAAgBvhI,EAAQo3N,mBAC5B,GAAI71F,EAAe,CAGf,IAAI5+H,EAAS4+H,EAAcvhI,EAAS,GACpC,GAAI2C,EAAQ,CACR,IAAI22P,EAAaj8P,MAAMC,QAAQqF,GAAUA,EAAS,CAACA,GAC/Co2P,EAAcO,EAmBlB,GAlBIt5P,EAAQtC,gBACRq7P,EAAcO,EAAW73P,QAAO,SAAUS,GACtC,IAAIrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC3C,GAAInD,EAAU,CACV,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAIE,IAASszP,GACgC,EACpCz9B,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,MACdp6P,OAEH8G,IAASszP,IAAsBtzP,IAASszP,QAIxDz9P,KAAKw1P,aAAc,CACnB,IAAIiH,EAAaM,EACbL,EAAaK,EACbt5P,EAAQtC,gBACRs7P,EAAaM,EAAW73P,QAAO,SAAUS,GACrC,IAAIrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC3C,GAAInD,EAAU,CACV,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAIE,IAASszP,GACgC,EACpCz9B,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,MACdp6P,OAEH8G,IAASszP,IACbtzP,IAASszP,OAGrBf,EAAaK,EAAW73P,QAAO,SAAUS,GACrC,IAAIrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC3C,GAAInD,EAAU,CACV,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAIE,IAASszP,GACgC,EACpCz9B,8BACA96N,QAAO,SAAU5E,GACd,IAAI6J,EAAO7J,EAAS2J,UACpB,OAAQE,IAASszP,IACbtzP,IAASszP,MACdp6P,OAEH8G,IAASszP,IACbtzP,IAASszP,QAIzBlpO,EAAkB,MAAI,CAClBioO,YAAaA,EACbC,WAAYA,EACZC,WAAYA,GAGpB,GAAIF,EAAYn5P,aAAiCe,IAAvBmwB,EAAiB,KAAiB,CACxD,IAAIoxG,EAAY62H,EAAY,GAAGl8O,UAC3BqlH,IACApxG,EAAiB,KAAIoxG,EAAUrlH,aAK/C,IAAIkhC,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAmB/hL,EAAW6/K,cAC5ClzM,EAASm1M,GAAa/uM,EAAYgvM,GAEtC,GADAY,GAAoB7xJ,EAAS,GAAuB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,GACnGrkO,EAAKmE,OAAS,EAAG,CACjB,IAAImgO,EAAWF,GAAa/uM,EAAYr1B,GAExCilO,GAAoB7xJ,EAAS,GAAuB,GAA2B,CAD1D,CAAEr3D,MAAO/b,EAAMivB,OAAQq1M,IACqDrB,GAGrG,IAAIxiO,EAA8DwiO,EAAY,GAC1E7hO,EAAWmD,EAAQtC,cACnBb,IACAA,EAAW,GAA6BA,GAAU,EAAMX,IAE5DwkO,GAAoB7xJ,EAAS,GAAuB,GAAuB,CAAChyE,GAAW6hO,GAO3F,IAAI,GAA8BsB,GAAgB,GAAgB,CAC9D,UACA,aACA,eACA,gBAOA,GAAiCA,GAAgB,GAAgB,CACjE,QAAWf,GAAkBsG,IAC7B,WAActG,GAAkBsG,IAChC,aAAgBtG,GAAkBwG,IAClC,YAAexG,IAvqBnB,SAAkCjuN,EAAMrK,EAAa+3N,GACjD,IAGIj8B,EAHA5zH,EAAU6vJ,EAAYA,EAAY9+N,OAAS,GAC3CsoC,EAAS2mC,EAAgB,OACzBk2G,EAASl2G,EAAgB,OAEzB3mC,GAAU,OAAqBA,GAAU,OACzCu6J,EAAY,EAEPv6J,GAAU,QAAsBA,GAAU,QAC/Cu6J,EAAY,EAGZ,GAAO,EAAO,IAElB,IAAIhiL,EAAK9Z,EAAY/G,OACjB+V,EAAO,GACX,GAAI8K,EAAK,EAAG,CACR9K,GAAQhP,EAAY,GACpB,IAAK,IAAI83B,EAAI,EAAGA,EAAIgkK,IAAahkK,EAC7B9oB,GAAQ,IAAMhP,EAAY83B,GAE9B,IAAK,IAAIhgC,EAAIsmL,EAAQtmL,EAAIgiB,EAAIhiB,GAAKsmL,EAAQ,CACtCpvK,GAAQ,IAAMhP,EAAYlI,GAC1B,IAASggC,EAAI,EAAGA,EAAIgkK,IAAahkK,EAC7B9oB,GAAQ,IAAMhP,EAAYlI,EAAIggC,IAI1CgnM,GAAoBz0N,EAAM2E,QAkpB9B,SAAS,GAAuB3E,EAAMnU,EAAU6hO,GAC5C,IAAI55C,EAAkBjoL,EAAS0iD,qBACsBsvB,EAAU,CAAE79D,KAAMA,GACvE69D,EAAgB,OAAIhyE,EAASi3I,YAC7BjlE,EAAgB,OAAIhyE,EAAS0tM,YAE7B,IAAIz5K,EAAaj0B,EAASovL,gBAC1Bn7J,EAAWnqB,YAAcm+K,EACzB,IAAI/mI,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAA4B/hL,EAAW6/K,cACrDlzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAgC+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,GAOpH,IAAI,GAAsBE,GAAgB,GAAgB,CACtD,QACA,OACA,YAOA,GAAsBA,GAAgB,GAAgB,CACtD,gBAAmBf,GAAkB,IACrC,gBAAmBA,GAAkB,MAOrC,GAA8BM,GAAsB,mBAMpD,GAA8BA,GAAsB,mBAMxD,SAAS,GAAavuN,EAAMpE,EAAS8xN,GACjC,IAAIxxB,EAActgM,EAAQsjM,iBACtB2pD,EAAY3sD,EAAYpoK,QACyB+pC,EAAU,CAAE79D,KAAMA,GAEvE0vN,GAAoB7xJ,EAAS,GAAqB,GAA6Bq+H,EAAawxB,GAE5FgC,GAAoB7xJ,EAAS,GAAqB,GAA6B,CAACgrL,GAAYn7B,GAOhG,IAAI,GAAyBsB,GAAgB,GAAgB,CACzD,MAASf,GAAkB,IAC3B,KAAQA,GAAkBsG,IAC1B,QAAWtG,GAAkBsG,MAyBjC,SAAS,GAAmBv0N,EAAM81B,GAE9B8+L,GAAqB50N,EAAMlT,KAAKirC,MAAc,IAARjC,GAAe,KAOzD,IAAI,GAAiBk5L,GAAgB,GAAgB,CACjD,YACA,aACA,YACA,YACA,iBAOA,GAAoBA,GAAgB,GAAgB,CACpD,UAAaf,IAhkBjB,SAAwBjuN,EAAM9O,EAAOw8N,GACjC,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GAChC8f,EAAa,GAChD5iB,EAAMhM,EAAMukP,SACZr1N,EAAOlvB,EAAM29M,UACbkoC,EAAgB7lP,EAAM0iP,eACtBmV,EAAiB,CACjB,KAAQ7rP,GAEZ,GAAIkjB,EAAM,CACN2oO,EAAkB,EAAI3oO,EAAK,GAC3B2oO,EAAkB,EAAI3oO,EAAK,GAC3B,IAAIjjB,EAASjM,EAAMsiP,YACf4W,EAAWl5P,EAAM2iP,YAKrB,GAJIuW,GAAYrT,GAAiC,IAAhBqT,EAAS,IAAYA,EAAS,KAAOhqO,EAAK,KACvE2oO,EAAkB,EAAIqB,EAAS,GAC/BrB,EAAkB,EAAIhS,EAAc,IAAMqT,EAAS,GAAKhqO,EAAK,KAE7DjjB,IAAWA,EAAO,KAAOijB,EAAK,GAAK,GAAKjjB,EAAO,KAAOijB,EAAK,GAAK,GAAI,CACpE,IAAwBklO,EAAU,CAC9BpsO,EAAG/b,EAAO,GACV8mP,OAAQhO,GAAgBlnD,OACxB51K,EAAGiH,EAAK,GAAKjjB,EAAO,GACpB+mP,OAAQjO,GAAgBlnD,QAE5BjvK,EAAoB,QAAIwlO,GAGhCxlO,EAAiB,KAAIipO,EACrB,IAAIjzN,EAAQ5kC,EAAMqiP,gBAAgB,GAC9B6O,EAAYhiO,EACE,OAAdgiO,IACK,IAA0B,KAC/BA,EAAY,IAEQ,GAApBA,EAAUxzP,SAEVknC,GADkB,GAAassN,IAGrB,IAAVtsN,IACAhW,EAAkB,MAAIgW,GAE1B,IAAI8pB,EAAW1uD,EAAM2uD,cACJ,IAAbD,IAEA9/B,EAAoB,QAAI8/B,GAAY,IAAM9yD,KAAKS,KAGnD,IAAIuvE,EAAQ5rE,EAAMooJ,WACdx8E,IACAh9C,EAAkB,MAAIg9C,GAE1B,IAAI/vB,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAoB/hL,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAwB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,MA0gBxG,WAAcb,IAjflB,SAAyBjuN,EAAM9O,EAAOw8N,GAClC,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnE8f,EAAa,GACbkyD,EAAO9gF,EAAM8nP,UACbhnK,IACAlyD,EAAkB,MAAIkyD,EAAKsnE,YAE/B,IAAIxjH,EAAQ5kC,EAAMgnJ,WACdpiH,GAAmB,IAAVA,IACThW,EAAkB,MAAIgW,GAE1B,IAAIiX,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAqB/hL,EAAW6/K,cAC9ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAyB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,MAoezG,UAAab,IA7cjB,SAAwBjuN,EAAM9O,EAAOw8N,GACjC,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnE8f,EAAa,CACb,MAAS5uB,EAAMooJ,WACf,MAASpmI,OAAOhiB,EAAMijL,aAAe,GAErCpnI,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAoB/hL,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAwB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,MAqcxG,UAAab,IA3CjB,SAAwBjuN,EAAM9O,EAAOw8N,GACjC,IAAqD7vJ,EAAU,CAAE79D,KAAMA,GACnEgyE,EAAO9gF,EAAM8nP,UACbl4O,EAAS5P,EAAMgoP,YACfp5N,EAAa,CACb,MAASkyD,EAAOA,EAAKsnE,gBAAa3pJ,EAClC,OAAQqiF,QAAOriF,EACf,UAAWmR,QAASnR,GAEpBo9C,EAAa2gL,EAAYA,EAAY9+N,OAAS,GAAGoR,KACjD8uN,EAAc,GAAoB/hL,EAAW6/K,cAC7ClzM,EAASm1M,GAAa/uM,EAAYgvM,GACtCY,GAAoB7xJ,EAAS,GAAwB+wJ,GAA8Bl1M,EAAQg0M,EAAaoB,MAgCxG,aAAgBb,IAAkB,CAACjuN,EAAM9O,KACrC,MAAMm5P,EAAYv9B,KAAc6H,mBAAmBzjO,EAAM2a,WACnD2pI,EAAWs3E,KAAc30N,cAAc,QAC7Cq9I,EAASp9I,YAAYiyP,GACrBrqP,EAAK5H,YAAYo9I,QAsDzB,Y,0eCvpFM,GACU,cAiMhB,SAlLA,YAIE,WAAYyxC,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCjJ,EAAc,GAAO,GAAI9yL,G,cAExB8yL,EAAY9sL,aACZ8sL,EAAYssE,oBACZtsE,EAAYusE,4BACZvsE,EAAYwsE,wB,EACnB,YAAMxsE,IAAY,MAMbysE,gBACmB96P,IAAtBzE,EAAQy4J,WAA0Bz4J,EAAQy4J,UAM5C,EAAK+mG,mBACsB/6P,IAAzBzE,EAAQo/P,aAA6Bp/P,EAAQo/P,aAAe,IAO9D,EAAKxkC,OAAS,KAOd,EAAKC,oBAAiBp2N,EAEtB,EAAKsB,SAAS/F,EAAQgG,OAMtB,EAAKy5P,2BAC8Bh7P,IAAjCzE,EAAQq/P,sBACJr/P,EAAQq/P,qBAOd,EAAKK,6BACgCj7P,IAAnCzE,EAAQs/P,wBACJt/P,EAAQs/P,uB,EAoHlB,OAhL8B,QAmE5B,YAAAK,aAAA,WACE,OAAOt/P,KAAKk/P,YAiBd,YAAAtgK,YAAA,SAAYw0F,GACV,OAAO,YAAMx0F,YAAW,UAACw0F,IAM3B,YAAAmsE,gBAAA,WACE,OAAOv/P,KAAKm/P,eAOd,YAAAK,eAAA,WACE,OACEx/P,KAAKwe,IAAI,KAUb,YAAArY,SAAA,WACE,OAAOnG,KAAKu6N,QAQd,YAAAM,iBAAA,WACE,OAAO76N,KAAKw6N,gBAOd,YAAAilC,wBAAA,WACE,OAAOz/P,KAAKo/P,uBAOd,YAAAM,0BAAA,WACE,OAAO1/P,KAAKq/P,yBAOd,YAAAhkE,gBAAA,SAAgBhI,GACTA,EAAWgyB,gBACdhyB,EAAWgyB,cAAgB,IAAI,GAAM,IAErBrlN,KAAKuzL,cAAe8H,gBAAgBhI,IAOxD,YAAAssE,eAAA,SAAeC,GACb5/P,KAAK8e,IAAI,GAAuB8gP,IAalC,YAAAl6P,SAAA,SAASq1N,GACP/6N,KAAKu6N,YAAuBn2N,IAAd22N,EAA0BA,EAAY+0B,GACpD9vP,KAAKw6N,eACW,OAAdO,OAAqB32N,EL4KpB,SAAoBu3B,GACzB,IAAIqpG,EAEJ,GAAmB,mBAARrpG,EACTqpG,EAAgBrpG,MACX,CAIL,IAAI,EACA76B,MAAMC,QAAQ46B,GAChB,EAASA,GAET,EAAqD,mBAArB,EAAe,UAAkB,IAEjE,EAAS,CAD0B,IAGrCqpG,EAAgB,WACd,OAAO,GAGX,OAAOA,EKjM8B,CAAgBhlI,KAAKu6N,QACxDv6N,KAAK2zF,WAET,EAhLA,CAA8B,IC/E9B,IAAMksK,GAAc,CAClBC,eAAgB,EAChBC,WAAY,EACZhoN,OAAQ,EACRioN,WAAY,EACZC,OAAQ,EACRC,WAAY,EACZC,WAAY,EACZC,aAAc,EACdC,KAAM,EACNC,gBAAiB,EACjBC,eAAgB,GAChBC,iBAAkB,GAClBC,OAAQ,IAMGC,GAAkB,CAACb,GAAYQ,MAK/BM,GAAoB,CAACd,GAAYY,QAKjCG,GAAuB,CAACf,GAAYE,YAKpCc,GAAuB,CAAChB,GAAYG,YAEjD,YCuEA,SAxGA,yBAsGA,OA7FE,YAAAc,WAAA,SAAWxgQ,EAAUmD,EAAS0/M,EAAUisC,KAOxC,YAAA2R,aAAA,SAAazgQ,KAOb,YAAAoF,SAAA,SAASC,KAMT,YAAAq7P,WAAA,SAAWC,EAAgBx9P,KAM3B,YAAAy9P,YAAA,SAAYz9P,EAASkC,KAMrB,YAAAw7P,uBAAA,SAAuBC,EAA4B39P,KAMnD,YAAA49P,eAAA,SAAeC,EAAoB79P,KAMnC,YAAA89P,oBAAA,SAAoBC,EAAyB/9P,KAM7C,YAAAg+P,eAAA,SAAeC,EAAoBj+P,KAMnC,YAAAk+P,iBAAA,SAAiBC,EAAsBn+P,KAMvC,YAAAk7J,UAAA,SAAUkjG,EAAep+P,KAMzB,YAAAq+P,YAAA,SAAYC,EAAiBt+P,KAM7B,YAAAu+P,SAAA,SAAS1hQ,EAAUmD,KAMnB,YAAAw+P,mBAAA,SAAmBtvL,EAAWssD,KAM9B,YAAAijI,cAAA,SAActL,EAAYuL,KAM1B,YAAAC,aAAA,SAAaz8H,EAAWw8H,KAC1B,EAtGA,G,+dCoBA,eAOE,WAAY9nO,EAAW0O,EAAWob,EAAYu7J,GAA9C,MACE,cAAO,K,OAMP,EAAKrlL,UAAYA,EAOjB,EAAK0O,UAAYA,EAMjB,EAAK22K,WAAaA,EAMlB,EAAK2iD,aAAe,EAOpB,EAAKl+M,WAAaA,EAMlB,EAAKm+M,2BAA6B,KAMlC,EAAKC,2BAA6B,KAMlC,EAAKC,mBAAqB,KAM1B,EAAKhqG,aAAe,GAMpB,EAAKpuJ,YAAc,GAMnB,EAAKq4P,eAAiB,GAMtB,EAAKC,yBAA2B,GAMhC,EAAK7tP,MAA8D,G,EAkhBvE,OA1mB4B,QAgG1B,YAAA8tP,gBAAA,SAAgBC,GACd,IAAMljD,EAAa1/M,KAAK0/M,WACxB,OAAqB,GAAdA,EACHkjD,EACAA,EAAUtkQ,KAAI,SAAU8yK,GACtB,OAAOA,EAAOsuC,MAUtB,YAAAmjD,2BAAA,SAA2Bt6E,EAAiBC,GAK1C,IAJA,IAAMltK,EAAStb,KAAK8iQ,uBACdhtE,EAAW91L,KAAKyiQ,eAChBr4P,EAAcpK,KAAKoK,YACrB24P,EAAQ34P,EAAY/G,OACfnB,EAAI,EAAGgiB,EAAKqkK,EAAgBllL,OAAQnB,EAAIgiB,EAAIhiB,GAAKsmL,EACxDsN,EAAS,GAAKvN,EAAgBrmL,GAC9B4zL,EAAS,GAAKvN,EAAgBrmL,EAAI,GAC9BqlL,EAAmBjsK,EAAQw6K,KAC7B1rL,EAAY24P,KAAWjtE,EAAS,GAChC1rL,EAAY24P,KAAWjtE,EAAS,IAGpC,OAAOitE,GAaT,YAAAC,0BAAA,SACEz6E,EACAt2J,EACA63C,EACA0+G,EACAy6E,EACAC,GAEA,IAAM94P,EAAcpK,KAAKoK,YACrB24P,EAAQ34P,EAAY/G,OAClBiY,EAAStb,KAAK8iQ,uBAChBI,IACFjxO,GAAUu2J,GAEZ,IAKItmL,EAAGihQ,EAASC,EALZC,EAAa96E,EAAgBt2J,GAC7BqxO,EAAa/6E,EAAgBt2J,EAAS,GACpCsxO,EAAYvjQ,KAAKyiQ,eACnBe,GAAU,EAGd,IAAKthQ,EAAI+vB,EAASu2J,EAAQtmL,EAAI4nE,EAAK5nE,GAAKsmL,EACtC+6E,EAAU,GAAKh7E,EAAgBrmL,GAC/BqhQ,EAAU,GAAKh7E,EAAgBrmL,EAAI,IACnCkhQ,EAAUx7E,GAAuBtsK,EAAQioP,MACzBJ,GACVK,IACFp5P,EAAY24P,KAAWM,EACvBj5P,EAAY24P,KAAWO,EACvBE,GAAU,GAEZp5P,EAAY24P,KAAWQ,EAAU,GACjCn5P,EAAY24P,KAAWQ,EAAU,IACxBH,IAAYl7E,GACrB99K,EAAY24P,KAAWQ,EAAU,GACjCn5P,EAAY24P,KAAWQ,EAAU,GACjCC,GAAU,GAEVA,GAAU,EAEZH,EAAaE,EAAU,GACvBD,EAAaC,EAAU,GACvBJ,EAAUC,EAQZ,OAJKH,GAAUO,GAAYthQ,IAAM+vB,EAASu2J,KACxCp+K,EAAY24P,KAAWM,EACvBj5P,EAAY24P,KAAWO,GAElBP,GAWT,YAAAU,uBAAA,SAAuBl7E,EAAiBt2J,EAAQ2gJ,EAAM4V,EAAQk7E,GAC5D,IAAK,IAAIxhQ,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC7C,IAAM4nE,EAAM8oG,EAAK1wK,GACXyhQ,EAAa3jQ,KAAKgjQ,0BACtBz6E,EACAt2J,EACA63C,EACA0+G,GACA,GACA,GAEFk7E,EAAYt7P,KAAKu7P,GACjB1xO,EAAS63C,EAEX,OAAO73C,GAST,YAAA6uO,WAAA,SAAWxgQ,EAAUmD,EAAS0/M,EAAUisC,GACtCpvP,KAAK4jQ,cAActjQ,EAAUmD,GAE7B,IAII8kL,EAAiBo7E,EAAYD,EAAaG,EAC1C5xO,EALE9nB,EAAO7J,EAAS2J,UAChBu+K,EAASloL,EAAS0tM,YAClB81D,EAAe9jQ,KAAKoK,YAAY/G,OAKtC,OAAQ8G,GACN,IAAK,eACHo+K,EAC8D,EAE1D6qB,6BACJywD,EAAe,GACf,IAAMvzD,EACwD,EAE1D+tB,WACJpsM,EAAS,EACT,IAAK,IAAI/vB,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM6hQ,EAAS,GACf9xO,EAASjyB,KAAKyjQ,uBACZl7E,EACAt2J,EACAq+K,EAAMpuM,GACNsmL,EACAu7E,GAEFF,EAAaz7P,KAAK27P,GAEpB/jQ,KAAKw4J,aAAapwJ,KAAK,CACrB,UACA07P,EACAD,EACAvjQ,EACA6iN,EACA9S,KAEFrwM,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,UACA07P,EACAD,EACAvjQ,EACA8uP,GAAwBjsC,EACxB9S,KAEF,MACF,IAAK,UACL,IAAK,kBACHqzD,EAAc,GACdn7E,EACU,WAARp+K,EAC2D,EAErDipM,6BACF9yM,EAAS0iD,qBACf/wB,EAASjyB,KAAKyjQ,uBACZl7E,EACA,EACuG,EAErG8qB,UACF7qB,EACAk7E,GAEF1jQ,KAAKw4J,aAAapwJ,KAAK,CACrB,UACA07P,EACAJ,EACApjQ,EACA6iN,EACAhT,KAEFnwM,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,UACA07P,EACAJ,EACApjQ,EACA8uP,GAAwBjsC,EACxBhT,KAEF,MACF,IAAK,aACL,IAAK,SACH5nB,EAAkBjoL,EAAS0iD,qBAC3B2gN,EAAa3jQ,KAAKgjQ,0BAChBz6E,EACA,EACAA,EAAgBllL,OAChBmlL,GACA,GACA,GAEFxoL,KAAKw4J,aAAapwJ,KAAK,CACrB,UACA07P,EACAH,EACArjQ,EACA6iN,EACAlT,KAEFjwM,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,UACA07P,EACAH,EACArjQ,EACA8uP,GAAwBjsC,EACxBlT,KAEF,MACF,IAAK,aACH1nB,EAAkBjoL,EAAS0iD,sBAC3B2gN,EAAa3jQ,KAAK6iQ,2BAA2Bt6E,EAAiBC,IAE7Cs7E,IACf9jQ,KAAKw4J,aAAapwJ,KAAK,CACrB,UACA07P,EACAH,EACArjQ,EACA6iN,EACAlT,KAEFjwM,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,UACA07P,EACAH,EACArjQ,EACA8uP,GAAwBjsC,EACxBlT,MAGJ,MACF,IAAK,QACH1nB,EAAkBjoL,EAAS0iD,qBAC3BhjD,KAAKoK,YAAYhC,KAAKmgL,EAAgB,GAAIA,EAAgB,IAC1Do7E,EAAa3jQ,KAAKoK,YAAY/G,OAE9BrD,KAAKw4J,aAAapwJ,KAAK,CACrB,UACA07P,EACAH,EACArjQ,EACA6iN,IAEFnjN,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,UACA07P,EACAH,EACArjQ,EACA8uP,GAAwBjsC,IAK9BnjN,KAAKgkQ,YAAYvgQ,IAQnB,YAAAmgQ,cAAA,SAActjQ,EAAUmD,GACtBzD,KAAKsiQ,2BAA6B,CAChC,kBACA7+P,EACA,EACAnD,GAEFN,KAAKw4J,aAAapwJ,KAAKpI,KAAKsiQ,4BAC5BtiQ,KAAKuiQ,2BAA6B,CAChC,kBACA9+P,EACA,EACAnD,GAEFN,KAAK0iQ,yBAAyBt6P,KAAKpI,KAAKuiQ,6BAM1C,YAAA0B,OAAA,WACE,MAAO,CACLzrG,aAAcx4J,KAAKw4J,aACnBkqG,yBAA0B1iQ,KAAK0iQ,yBAC/Bt4P,YAAapK,KAAKoK,cAOtB,YAAA85P,gCAAA,WACE,IAIIhiQ,EAJEwgQ,EAA2B1iQ,KAAK0iQ,yBAEtCA,EAAyBxyO,UAGzB,IACIi0O,EACAh6P,EAFEyK,EAAI8tP,EAAyBr/P,OAG/BihL,GAAS,EACb,IAAKpiL,EAAI,EAAGA,EAAI0S,IAAK1S,GAEnBiI,GADAg6P,EAAczB,EAAyBxgQ,IAC+B,KAC1D,gBACVoiL,EAAQpiL,EACCiI,GAAQ,oBACjBg6P,EAAY,GAAKjiQ,EACjBmiL,EAAgBrkL,KAAK0iQ,yBAA0Bp+E,EAAOpiL,GACtDoiL,GAAS,IASf,YAAA29E,mBAAA,SAAmBtvL,EAAWssD,GAC5B,IAAMpqH,EAAQ7U,KAAK6U,MACnB,GAAI89D,EAAW,CACb,IAAMyxL,EAAiBzxL,EAAUo7E,WACjCl5I,EAAM89D,UAAYo6K,GAChBqX,GAAkC9rE,SAGpCzjL,EAAM89D,eAAYvuE,EAEpB,GAAI66H,EAAa,CACf,IAAMolI,EAAmBplI,EAAY8uB,WACrCl5I,EAAMoqH,YAAc8tH,GAClBsX,GAAsC3rE,IAExC,IAAM4rE,EAAqBrlI,EAAYmtH,aACvCv3O,EAAM62O,aACmBtnP,IAAvBkgQ,EAAmCA,EAAqB/rE,GAC1D,IAAMgsE,EAAsBtlI,EAAYotH,cACxCx3O,EAAMyyD,SAAWi9L,EACbA,EAAoB55P,QACpB6tL,GACJ,IAAMgsE,EAA4BvlI,EAAYqtH,oBAC9Cz3O,EAAMg3O,eAAiB2Y,G/I9XQ,E+IiY/B,IAAMC,EAAsBxlI,EAAYstH,cACxC13O,EAAMk3O,cACoB3nP,IAAxBqgQ,EACIA,EACAhsE,GACN,IAAMisE,EAAmBzlI,EAAY2pD,WACrC/zK,EAAM85O,eACiBvqP,IAArBsgQ,EAAiCA,E/I9VT,E+I+V1B,IAAMC,EAAwB1lI,EAAYutH,gBAC1C33O,EAAMo3O,gBACsB7nP,IAA1BugQ,EACIA,E/IhYqB,G+ImYvB9vP,EAAM85O,UAAY3uP,KAAKqiQ,eACzBriQ,KAAKqiQ,aAAextP,EAAM85O,UAE1B3uP,KAAKwiQ,mBAAqB,WAG5B3tP,EAAMoqH,iBAAc76H,EACpByQ,EAAM62O,aAAUtnP,EAChByQ,EAAMyyD,SAAW,KACjBzyD,EAAMg3O,oBAAiBznP,EACvByQ,EAAMk3O,cAAW3nP,EACjByQ,EAAM85O,eAAYvqP,EAClByQ,EAAMo3O,gBAAa7nP,GAQvB,YAAAwgQ,WAAA,SAAW/vP,GACT,IAAM89D,EAAY99D,EAAM89D,UAElB+tL,EAAkB,CAAC,kBAAkC/tL,GAK3D,MAJyB,iBAAdA,GAET+tL,EAAgBt4P,MAAK,GAEhBs4P,GAMT,YAAAmE,YAAA,SAAYhwP,GACV7U,KAAKw4J,aAAapwJ,KAAKpI,KAAK8kQ,aAAajwP,KAO3C,YAAAiwP,aAAA,SAAajwP,GACX,MAAO,CACL,oBACAA,EAAMoqH,YACNpqH,EAAM85O,UAAY3uP,KAAK0/M,WACvB7qM,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNjsP,KAAK2iQ,gBAAgB9tP,EAAMyyD,UAC3BzyD,EAAMg3O,eAAiB7rP,KAAK0/M,aAQhC,YAAAqlD,gBAAA,SAAgBlwP,EAAO+vP,GACrB,IAAMjyL,EAAY99D,EAAM89D,UACC,iBAAdA,GAA0B99D,EAAMmwP,kBAAoBryL,SAC3CvuE,IAAduuE,GACF3yE,KAAKw4J,aAAapwJ,KAAKw8P,EAAWlkQ,KAAKV,KAAM6U,IAE/CA,EAAMmwP,iBAAmBryL,IAQ7B,YAAAsyL,kBAAA,SAAkBpwP,EAAOgwP,GACvB,IAAM5lI,EAAcpqH,EAAMoqH,YACpBysH,EAAU72O,EAAM62O,QAChBpkL,EAAWzyD,EAAMyyD,SACjBukL,EAAiBh3O,EAAMg3O,eACvBE,EAAWl3O,EAAMk3O,SACjB4C,EAAY95O,EAAM85O,UAClB1C,EAAap3O,EAAMo3O,YAEvBp3O,EAAMqwP,oBAAsBjmI,GAC5BpqH,EAAMswP,gBAAkBzZ,GACvBpkL,GAAYzyD,EAAMuwP,kBAChB5iN,EAAO3tC,EAAMuwP,gBAAiB99L,IACjCzyD,EAAMwwP,uBAAyBxZ,GAC/Bh3O,EAAMywP,iBAAmBvZ,GACzBl3O,EAAM0wP,kBAAoB5W,GAC1B95O,EAAM2wP,mBAAqBvZ,UAEP7nP,IAAhB66H,GACF4lI,EAAYnkQ,KAAKV,KAAM6U,GAEzBA,EAAMqwP,mBAAqBjmI,EAC3BpqH,EAAMswP,eAAiBzZ,EACvB72O,EAAMuwP,gBAAkB99L,EACxBzyD,EAAMwwP,sBAAwBxZ,EAC9Bh3O,EAAMywP,gBAAkBvZ,EACxBl3O,EAAM0wP,iBAAmB5W,EACzB95O,EAAM2wP,kBAAoBvZ,IAO9B,YAAA+X,YAAA,SAAYvgQ,GACVzD,KAAKsiQ,2BAA2B,GAAKtiQ,KAAKw4J,aAAan1J,OACvDrD,KAAKsiQ,2BAA6B,KAClCtiQ,KAAKuiQ,2BAA2B,GAAKviQ,KAAK0iQ,yBAAyBr/P,OACnErD,KAAKuiQ,2BAA6B,KAClC,IAAMkD,EAAyB,CAAC,gBAAgChiQ,GAChEzD,KAAKw4J,aAAapwJ,KAAKq9P,GACvBzlQ,KAAK0iQ,yBAAyBt6P,KAAKq9P,IAUrC,YAAA3C,qBAAA,WACE,IAAK9iQ,KAAKwiQ,qBACRxiQ,KAAKwiQ,mBAAqBh4P,EAAMxK,KAAK+oC,WACjC/oC,KAAKqiQ,aAAe,GAAG,CACzB,IAAM/vO,EAAStyB,KAAKmkD,YAAcnkD,KAAKqiQ,aAAe,GAAM,EAC5D,EAAOriQ,KAAKwiQ,mBAAoBlwO,EAAOtyB,KAAKwiQ,oBAGhD,OAAOxiQ,KAAKwiQ,oBAEhB,EA1mBA,CAA4B,IA4mB5B,Y,+dC5XA,SAxQA,YAOE,WAAYnoO,EAAW0O,EAAWob,EAAYu7J,GAA9C,MACE,YAAMrlL,EAAW0O,EAAWob,EAAYu7J,IAAW,K,OAMnD,EAAKgqC,mBAAqB,KAM1B,EAAKR,OAAS,KAMd,EAAKwc,sBAAmBthQ,EAMxB,EAAKuhQ,cAAWvhQ,EAMhB,EAAKwhQ,cAAWxhQ,EAMhB,EAAKyhQ,aAAUzhQ,EAMf,EAAKkjP,cAAWljP,EAMhB,EAAK0hQ,cAAW1hQ,EAMhB,EAAK2hQ,cAAW3hQ,EAMhB,EAAK4vN,qBAAkB5vN,EAMvB,EAAK+jN,eAAY/jN,EAMjB,EAAKmjP,YAASnjP,EAMd,EAAK8nP,YAAS9nP,EAMd,EAAKujP,oBAAiBvjP,EAOtB,EAAK4hQ,6BAA0B5hQ,E,EAmKnC,OAtQiC,QA0G/B,YAAAu6J,UAAA,SAAUkjG,EAAep+P,GACvB,GAAKzD,KAAKkpP,OAAV,CAGAlpP,KAAK4jQ,cAAc/B,EAAep+P,GAClC,IAAM8kL,EAAkBs5E,EAAc7+M,qBAChCwlI,EAASq5E,EAAc7zD,YACvBi4D,EAAUjmQ,KAAKoK,YAAY/G,OAC3B0/P,EAAQ/iQ,KAAK6iQ,2BAA2Bt6E,EAAiBC,GAC/DxoL,KAAKw4J,aAAapwJ,KAAK,CACrB,cACA69P,EACAlD,EACA/iQ,KAAKkpP,OAELlpP,KAAK2lQ,SAAW3lQ,KAAK0lQ,iBACrB1lQ,KAAK4lQ,SAAW5lQ,KAAK0lQ,iBACrBnkQ,KAAKgjD,KAAKvkD,KAAK6lQ,QAAU7lQ,KAAK0lQ,kBAC9B1lQ,KAAKsnP,SACLtnP,KAAK8lQ,SAAW9lQ,KAAK0lQ,iBACrB1lQ,KAAK+lQ,SAAW/lQ,KAAK0lQ,iBACrB1lQ,KAAKg0N,gBACLh0N,KAAKmoN,UACL,CACGnoN,KAAKunP,OAAO,GAAKvnP,KAAK0/M,WAAc1/M,KAAK0lQ,iBACzC1lQ,KAAKunP,OAAO,GAAKvnP,KAAK0/M,WAAc1/M,KAAK0lQ,kBAE5CnkQ,KAAKgjD,KAAKvkD,KAAKksP,OAASlsP,KAAK0lQ,kBAC7B1lQ,KAAK2nP,eACL3nP,KAAKgmQ,0BAEPhmQ,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,cACA69P,EACAlD,EACA/iQ,KAAK0pP,mBAEL1pP,KAAK2lQ,SACL3lQ,KAAK4lQ,SACL5lQ,KAAK6lQ,QACL7lQ,KAAKsnP,SACLtnP,KAAK8lQ,SACL9lQ,KAAK+lQ,SACL/lQ,KAAKg0N,gBACLh0N,KAAKmoN,UACLnoN,KAAKunP,OACLvnP,KAAKksP,OACLlsP,KAAK2nP,eACL3nP,KAAKgmQ,0BAEPhmQ,KAAKgkQ,YAAYvgQ,KAOnB,YAAAg+P,eAAA,SAAeC,EAAoBj+P,GACjC,GAAKzD,KAAKkpP,OAAV,CAGAlpP,KAAK4jQ,cAAclC,EAAoBj+P,GACvC,IAAM8kL,EAAkBm5E,EAAmB1+M,qBACrCwlI,EAASk5E,EAAmB1zD,YAC5Bi4D,EAAUjmQ,KAAKoK,YAAY/G,OAC3B0/P,EAAQ/iQ,KAAK6iQ,2BAA2Bt6E,EAAiBC,GAC/DxoL,KAAKw4J,aAAapwJ,KAAK,CACrB,cACA69P,EACAlD,EACA/iQ,KAAKkpP,OAELlpP,KAAK2lQ,SAAW3lQ,KAAK0lQ,iBACrB1lQ,KAAK4lQ,SAAW5lQ,KAAK0lQ,iBACrBnkQ,KAAKgjD,KAAKvkD,KAAK6lQ,QAAU7lQ,KAAK0lQ,kBAC9B1lQ,KAAKsnP,SACLtnP,KAAK8lQ,SAAW9lQ,KAAK0lQ,iBACrB1lQ,KAAK+lQ,SAAW/lQ,KAAK0lQ,iBACrB1lQ,KAAKg0N,gBACLh0N,KAAKmoN,UACL,CACGnoN,KAAKunP,OAAO,GAAKvnP,KAAK0/M,WAAc1/M,KAAK0lQ,iBACzC1lQ,KAAKunP,OAAO,GAAKvnP,KAAK0/M,WAAc1/M,KAAK0lQ,kBAE5CnkQ,KAAKgjD,KAAKvkD,KAAKksP,OAASlsP,KAAK0lQ,kBAC7B1lQ,KAAK2nP,eACL3nP,KAAKgmQ,0BAEPhmQ,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,cACA69P,EACAlD,EACA/iQ,KAAK0pP,mBAEL1pP,KAAK2lQ,SACL3lQ,KAAK4lQ,SACL5lQ,KAAK6lQ,QACL7lQ,KAAKsnP,SACLtnP,KAAK8lQ,SACL9lQ,KAAK+lQ,SACL/lQ,KAAKg0N,gBACLh0N,KAAKmoN,UACLnoN,KAAKunP,OACLvnP,KAAKksP,OACLlsP,KAAK2nP,eACL3nP,KAAKgmQ,0BAEPhmQ,KAAKgkQ,YAAYvgQ,KAMnB,YAAAwgQ,OAAA,WAgBE,OAfAjkQ,KAAKkkQ,kCAELlkQ,KAAK2lQ,cAAWvhQ,EAChBpE,KAAK4lQ,cAAWxhQ,EAChBpE,KAAK0pP,mBAAqB,KAC1B1pP,KAAKkpP,OAAS,KACdlpP,KAAK0lQ,sBAAmBthQ,EACxBpE,KAAK6lQ,aAAUzhQ,EACfpE,KAAKunP,YAASnjP,EACdpE,KAAKsnP,cAAWljP,EAChBpE,KAAK8lQ,cAAW1hQ,EAChBpE,KAAK+lQ,cAAW3hQ,EAChBpE,KAAKg0N,qBAAkB5vN,EACvBpE,KAAKmoN,eAAY/jN,EACjBpE,KAAKksP,YAAS9nP,EACP,YAAM6/P,OAAM,YAOrB,YAAA/B,cAAA,SAActL,EAAYsP,GACxB,IAAMt0P,EAASglP,EAAW3O,YACpBpzN,EAAO+hO,EAAWtzC,UAClBxxM,EAAS8kP,EAAWtO,YAC1BtoP,KAAK0lQ,iBAAmB9O,EAAWzO,cAAcnoP,KAAK0/M,YACtD1/M,KAAK2lQ,SAAW/zP,EAAO,GACvB5R,KAAK4lQ,SAAWh0P,EAAO,GACvB5R,KAAK0pP,mBAAqBkN,EAAW1O,uBACrCloP,KAAKkpP,OAAS0N,EAAW1pO,SAASltB,KAAK0/M,YACvC1/M,KAAK6lQ,QAAUhxO,EAAK,GACpB70B,KAAKsnP,SAAWsP,EAAWrjP,aAC3BvT,KAAK8lQ,SAAWh0P,EAAO,GACvB9R,KAAK+lQ,SAAWj0P,EAAO,GACvB9R,KAAKg0N,gBAAkB4iC,EAAWvgC,oBAClCr2N,KAAKmoN,UAAYyuC,EAAWtiM,cAC5Bt0D,KAAKunP,OAASqP,EAAW5O,gBACzBhoP,KAAKksP,OAASr3N,EAAK,GACnB70B,KAAK2nP,eAAiBiP,EAAW7O,mBACjC/nP,KAAKgmQ,wBAA0BE,GAEnC,EAtQA,CAAiC,I,+dCIjC,eAOE,WAAY7rO,EAAW0O,EAAWob,EAAYu7J,G,OAC5C,YAAMrlL,EAAW0O,EAAWob,EAAYu7J,IAAW,KA8IvD,OAtJsC,QAmBpC,YAAAymD,qBAAA,SAAqB59E,EAAiBt2J,EAAQ63C,EAAK0+G,GACjD,IAAMy9E,EAAUjmQ,KAAKoK,YAAY/G,OAC3B0/P,EAAQ/iQ,KAAKgjQ,0BACjBz6E,EACAt2J,EACA63C,EACA0+G,GACA,GACA,GAEI49E,EAA0B,CAC9B,mBACAH,EACAlD,GAIF,OAFA/iQ,KAAKw4J,aAAapwJ,KAAKg+P,GACvBpmQ,KAAK0iQ,yBAAyBt6P,KAAKg+P,GAC5Bt8L,GAOT,YAAAu3L,eAAA,SAAeC,EAAoB79P,GACjC,IAAMoR,EAAQ7U,KAAK6U,MACboqH,EAAcpqH,EAAMoqH,YACpB0vH,EAAY95O,EAAM85O,UACxB,QAAoBvqP,IAAhB66H,QAA2C76H,IAAduqP,EAAjC,CAGA3uP,KAAKilQ,kBAAkBpwP,EAAO7U,KAAK6kQ,aACnC7kQ,KAAK4jQ,cAActC,EAAoB79P,GACvCzD,KAAK0iQ,yBAAyBt6P,KAC5B,CACE,oBACAyM,EAAMoqH,YACNpqH,EAAM85O,UACN95O,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNzzD,GjJ6C6B,GiJ1C/BooE,IAEF,IAAMr4E,EAAkB+4E,EAAmBt+M,qBACrCwlI,EAAS84E,EAAmBtzD,YAClChuM,KAAKmmQ,qBACH59E,EACA,EACAA,EAAgBllL,OAChBmlL,GAEFxoL,KAAK0iQ,yBAAyBt6P,KAAKu4P,IACnC3gQ,KAAKgkQ,YAAYvgQ,KAOnB,YAAA89P,oBAAA,SAAoBC,EAAyB/9P,GAC3C,IAAMoR,EAAQ7U,KAAK6U,MACboqH,EAAcpqH,EAAMoqH,YACpB0vH,EAAY95O,EAAM85O,UACxB,QAAoBvqP,IAAhB66H,QAA2C76H,IAAduqP,EAAjC,CAGA3uP,KAAKilQ,kBAAkBpwP,EAAO7U,KAAK6kQ,aACnC7kQ,KAAK4jQ,cAAcpC,EAAyB/9P,GAC5CzD,KAAK0iQ,yBAAyBt6P,KAC5B,CACE,oBACAyM,EAAMoqH,YACNpqH,EAAM85O,UACN95O,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNp3O,EAAMyyD,SACNzyD,EAAMg3O,gBAER+U,IAMF,IAJA,IAAMhuF,EAAO4uF,EAAwBnuD,UAC/B9qB,EAAkBi5E,EAAwBx+M,qBAC1CwlI,EAASg5E,EAAwBxzD,YACnC/7K,EAAS,EACJ/vB,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C+vB,EAASjyB,KAAKmmQ,qBACZ59E,EACAt2J,EACuB2gJ,EAAK1wK,GAC5BsmL,GAGJxoL,KAAK0iQ,yBAAyBt6P,KAAKu4P,IACnC3gQ,KAAKgkQ,YAAYvgQ,KAMnB,YAAAwgQ,OAAA,WACE,IAAMpvP,EAAQ7U,KAAK6U,MASnB,OAPsBzQ,MAApByQ,EAAMwxP,YACNxxP,EAAMwxP,YAAcrmQ,KAAKoK,YAAY/G,QAErCrD,KAAKw4J,aAAapwJ,KAAKu4P,IAEzB3gQ,KAAKkkQ,kCACLlkQ,KAAK6U,MAAQ,KACN,YAAMovP,OAAM,YAMrB,YAAAY,YAAA,SAAYhwP,GAEYzQ,MAApByQ,EAAMwxP,YACNxxP,EAAMwxP,YAAcrmQ,KAAKoK,YAAY/G,SAErCrD,KAAKw4J,aAAapwJ,KAAKu4P,IACvB9rP,EAAMwxP,WAAarmQ,KAAKoK,YAAY/G,QAEtCwR,EAAMwxP,WAAa,EACnB,YAAMxB,YAAW,UAAChwP,GAClB7U,KAAKw4J,aAAapwJ,KAAKw4P,KAE3B,EAtJA,CAAsC,IAwJtC,Y,+dCrJA,eAOE,WAAYvmO,EAAW0O,EAAWob,EAAYu7J,G,OAC5C,YAAMrlL,EAAW0O,EAAWob,EAAYu7J,IAAW,KAyOvD,OAjPmC,QAmBjC,YAAA4mD,sBAAA,SAAsB/9E,EAAiBt2J,EAAQ2gJ,EAAM4V,GACnD,IAAM3zK,EAAQ7U,KAAK6U,MACb4xE,OAA2BriF,IAApByQ,EAAM89D,UACbp9D,OAA+BnR,IAAtByQ,EAAMoqH,YACfsnI,EAAU3zF,EAAKvvK,OACrBrD,KAAKw4J,aAAapwJ,KAAKw4P,IACvB5gQ,KAAK0iQ,yBAAyBt6P,KAAKw4P,IACnC,IAAK,IAAI1+P,EAAI,EAAGA,EAAIqkQ,IAAWrkQ,EAAG,CAChC,IAAM4nE,EAAM8oG,EAAK1wK,GACX+jQ,EAAUjmQ,KAAKoK,YAAY/G,OAC3B0/P,EAAQ/iQ,KAAKgjQ,0BACjBz6E,EACAt2J,EACA63C,EACA0+G,GACA,GACCjzK,GAEG6wP,EAA0B,CAC9B,mBACAH,EACAlD,GAEF/iQ,KAAKw4J,aAAapwJ,KAAKg+P,GACvBpmQ,KAAK0iQ,yBAAyBt6P,KAAKg+P,GAC/B7wP,IAGFvV,KAAKw4J,aAAapwJ,KAAKy4P,IACvB7gQ,KAAK0iQ,yBAAyBt6P,KAAKy4P,KAErC5uO,EAAS63C,EAUX,OARI2c,IACFzmF,KAAKw4J,aAAapwJ,KAAKs4P,IACvB1gQ,KAAK0iQ,yBAAyBt6P,KAAKs4P,KAEjCnrP,IACFvV,KAAKw4J,aAAapwJ,KAAKu4P,IACvB3gQ,KAAK0iQ,yBAAyBt6P,KAAKu4P,KAE9B1uO,GAOT,YAAA+uO,WAAA,SAAWC,EAAgBx9P,GACzB,IAAMoR,EAAQ7U,KAAK6U,MACb89D,EAAY99D,EAAM89D,UAClBssD,EAAcpqH,EAAMoqH,YAC1B,QAAkB76H,IAAduuE,QAA2CvuE,IAAhB66H,EAA/B,CAGAj/H,KAAKwmQ,uBACLxmQ,KAAK4jQ,cAAc3C,EAAgBx9P,QACXW,IAApByQ,EAAM89D,WACR3yE,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,kBACAkwL,UAGsBl0L,IAAtByQ,EAAMoqH,aACRj/H,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,oBACAyM,EAAMoqH,YACNpqH,EAAM85O,UACN95O,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNp3O,EAAMyyD,SACNzyD,EAAMg3O,iBAGV,IAAMtjE,EAAkB04E,EAAej+M,qBACjCwlI,EAASy4E,EAAejzD,YACxBi4D,EAAUjmQ,KAAKoK,YAAY/G,OACjCrD,KAAKgjQ,0BACHz6E,EACA,EACAA,EAAgBllL,OAChBmlL,GACA,GACA,GAEF,IAAMi+E,EAAoB,CAAC,UAA0BR,GACrDjmQ,KAAKw4J,aAAapwJ,KAAKw4P,GAAsB6F,GAC7CzmQ,KAAK0iQ,yBAAyBt6P,KAAKw4P,GAAsB6F,QACjCriQ,IAApByQ,EAAM89D,YACR3yE,KAAKw4J,aAAapwJ,KAAKs4P,IACvB1gQ,KAAK0iQ,yBAAyBt6P,KAAKs4P,UAEXt8P,IAAtByQ,EAAMoqH,cACRj/H,KAAKw4J,aAAapwJ,KAAKu4P,IACvB3gQ,KAAK0iQ,yBAAyBt6P,KAAKu4P,KAErC3gQ,KAAKgkQ,YAAYvgQ,KAOnB,YAAAq+P,YAAA,SAAYC,EAAiBt+P,GAC3B,IAAMoR,EAAQ7U,KAAK6U,MACb89D,EAAY99D,EAAM89D,UAClBssD,EAAcpqH,EAAMoqH,YAC1B,QAAkB76H,IAAduuE,QAA2CvuE,IAAhB66H,EAA/B,CAGAj/H,KAAKwmQ,uBACLxmQ,KAAK4jQ,cAAc7B,EAAiBt+P,QACZW,IAApByQ,EAAM89D,WACR3yE,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,kBACAkwL,UAGsBl0L,IAAtByQ,EAAMoqH,aACRj/H,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,oBACAyM,EAAMoqH,YACNpqH,EAAM85O,UACN95O,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNp3O,EAAMyyD,SACNzyD,EAAMg3O,iBAGV,IAAMj5E,EAAOmvF,EAAgB1uD,UACvB9qB,EAAkBw5E,EAAgB3uD,6BAClC5qB,EAASu5E,EAAgB/zD,YAC/BhuM,KAAKsmQ,sBACH/9E,EACA,EAC6B,EAC7BC,GAEFxoL,KAAKgkQ,YAAYvgQ,KAOnB,YAAAk+P,iBAAA,SAAiBC,EAAsBn+P,GACrC,IAAMoR,EAAQ7U,KAAK6U,MACb89D,EAAY99D,EAAM89D,UAClBssD,EAAcpqH,EAAMoqH,YAC1B,QAAkB76H,IAAduuE,QAA2CvuE,IAAhB66H,EAA/B,CAGAj/H,KAAKwmQ,uBACLxmQ,KAAK4jQ,cAAchC,EAAsBn+P,QACjBW,IAApByQ,EAAM89D,WACR3yE,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,kBACAkwL,UAGsBl0L,IAAtByQ,EAAMoqH,aACRj/H,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,oBACAyM,EAAMoqH,YACNpqH,EAAM85O,UACN95O,EAAM62O,QACN72O,EAAMk3O,SACNl3O,EAAMo3O,WACNp3O,EAAMyyD,SACNzyD,EAAMg3O,iBAOV,IAJA,IAAMv7C,EAAQsxD,EAAqBvjC,WAC7B91C,EAAkBq5E,EAAqBxuD,6BACvC5qB,EAASo5E,EAAqB5zD,YAChC/7K,EAAS,EACJ/vB,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAC3C+vB,EAASjyB,KAAKsmQ,sBACZ/9E,EACAt2J,EACAq+K,EAAMpuM,GACNsmL,GAGJxoL,KAAKgkQ,YAAYvgQ,KAMnB,YAAAwgQ,OAAA,WACEjkQ,KAAKkkQ,kCACLlkQ,KAAK6U,MAAQ,KAKb,IAAMwlB,EAAYr6B,KAAKq6B,UACvB,GAAkB,IAAdA,EAEF,IADA,IAAMjwB,EAAcpK,KAAKoK,YAChBlI,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAQnB,EAAIgiB,IAAMhiB,EACjDkI,EAAYlI,GAAK4tM,GAAK1lM,EAAYlI,GAAIm4B,GAG1C,OAAO,YAAM4pO,OAAM,YAMrB,YAAAuC,qBAAA,WACE,IAAM3xP,EAAQ7U,KAAK6U,WAEDzQ,IADAyQ,EAAM89D,WAEtB3yE,KAAK+kQ,gBAAgBlwP,EAAO7U,KAAK4kQ,iBAETxgQ,IAAtByQ,EAAMoqH,aACRj/H,KAAKilQ,kBAAkBpwP,EAAO7U,KAAK6kQ,cAGzC,EAjPA,CAAmC,IAmPnC,YCnPO,SAAS6B,GAAclW,EAAUjoE,EAAiBt2J,EAAQ63C,EAAK0+G,GACpE,IAKUtmL,EAAGykQ,EAAKC,EAAKjhH,EAAIC,EAAIihH,EAAKC,EAAKC,EAAKC,EAL1CC,EAAah1O,EACbi1O,EAAWj1O,EACXk1O,EAAS,EACThiN,EAAI,EACJopB,EAAQt8C,EAEZ,IAAK/vB,EAAI+vB,EAAQ/vB,EAAI4nE,EAAK5nE,GAAKsmL,EAAQ,CACrC,IAAMU,EAAKX,EAAgBrmL,GACrBinL,EAAKZ,EAAgBrmL,EAAI,QACpBkC,IAAPuhJ,IACFohH,EAAM79E,EAAKvjC,EACXqhH,EAAM79E,EAAKvjC,EACXghH,EAAMrlQ,KAAKkrC,KAAKs6N,EAAMA,EAAMC,EAAMA,QACtB5iQ,IAARyiQ,IACF1hN,GAAKwhN,EACEplQ,KAAK6lQ,MAAMP,EAAME,EAAMD,EAAME,IAAQL,EAAMC,IACvCpW,IACLrrM,EAAIgiN,IACNA,EAAShiN,EACT8hN,EAAa14L,EACb24L,EAAWhlQ,GAEbijD,EAAI,EACJopB,EAAQrsE,EAAIsmL,IAGhBm+E,EAAMC,EACNC,EAAME,EACND,EAAME,GAERrhH,EAAKujC,EACLtjC,EAAKujC,EAGP,OADAhkI,GAAKyhN,GACMO,EAAS,CAAC54L,EAAOrsE,GAAK,CAAC+kQ,EAAYC,G,+dCnBnCG,GAAa,CACxB,KAAQ,EACR,IAAO,EACP,OAAU,GACV,MAAS,EACT,MAAS,EACT,IAAO,EACP,OAAU,GACV,QAAW,GACX,WAAc,GACd,YAAe,GACf,OAAU,GAGZ,eAOE,WAAYhtO,EAAW0O,EAAWob,EAAYu7J,GAA9C,MACE,YAAMrlL,EAAW0O,EAAWob,EAAYu7J,IAAW,K,OAMnD,EAAK4nD,QAAU,KAMf,EAAKjY,MAAQ,GAMb,EAAKkY,aAAe,EAMpB,EAAKC,aAAe,EAMpB,EAAKC,yBAAsBrjQ,EAM3B,EAAKsjQ,cAAgB,EAMrB,EAAKC,eAAiB,KAKtB,EAAKC,WAAa,GAMlB,EAAKC,iBAAmB,KAKxB,EAAKC,aAAe,GAMpB,EAAKC,WAA6D,GAKlE,EAAKC,WAAa,GAMlB,EAAKC,SAAW,GAMhB,EAAKC,SAAW,GAMhB,EAAKC,WAAa,GAOlB,EAAKnC,6BAA0B5hQ,E,EAwenC,OA9kBgC,QA4G9B,YAAA6/P,OAAA,WACE,IAAMzrG,EAAe,YAAMyrG,OAAM,WAIjC,OAHAzrG,EAAawvG,WAAahoQ,KAAKgoQ,WAC/BxvG,EAAaovG,WAAa5nQ,KAAK4nQ,WAC/BpvG,EAAasvG,aAAe9nQ,KAAK8nQ,aAC1BtvG,GAOT,YAAAwpG,SAAA,SAAS1hQ,EAAUmD,GACjB,IAAM2kQ,EAAYpoQ,KAAK2nQ,eACjBU,EAAcroQ,KAAK6nQ,iBACnBS,EAAYtoQ,KAAK+nQ,WACvB,GAAmB,KAAf/nQ,KAAKqvP,OAAiBiZ,IAAeF,GAAcC,GAAvD,CAIA,IAAMj+P,EAAcpK,KAAKoK,YACrBk6K,EAAQl6K,EAAY/G,OAElBiyB,EAAeh1B,EAAS2J,UAC1Bs+K,EAAkB,KAClBC,EAASloL,EAAS0tM,YAEtB,GACEs6D,EAAU5X,YAAcC,IACP,cAAhBr7N,GACiB,mBAAhBA,GACgB,WAAhBA,GACgB,gBAAhBA,EAuDG,CACL,IAAIizO,EAAiBD,EAAU9nD,SAAW,KAAO,GACjD,OAAQlrL,GACN,IAAK,QACL,IAAK,aACHizJ,EAC4D,EAExDvlI,qBACJ,MACF,IAAK,aACHulI,EAC4D,EAExDs0C,kBACJ,MACF,IAAK,SACHt0C,EACwD,EAEpDrnL,YACJ,MACF,IAAK,kBACHqnL,EACiE,EAE7D+0C,mBACJ90C,EAAS,EACT,MACF,IAAK,UACHD,EACyD,EAErD+qB,uBACCg1D,EAAU9nD,UACb+nD,EAAengQ,KAAKmgL,EAAgB,GAAKvoL,KAAKmkD,YAEhDqkI,EAAS,EACT,MACF,IAAK,eACH,IAAM+1C,EACwD,EAE1DD,wBACJ/1C,EAAkB,GAClB,IAASrmL,EAAI,EAAGgiB,EAAKq6M,EAAel7N,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EAClDomQ,EAAU9nD,UACb+nD,EAAengQ,KAAKm2N,EAAer8N,EAAI,GAAKlC,KAAKmkD,YAEnDokI,EAAgBngL,KAAKm2N,EAAer8N,GAAIq8N,EAAer8N,EAAI,IAE7D,GAA+B,IAA3BqmL,EAAgBllL,OAClB,OAEFmlL,EAAS,EAKb,IADM1+G,EAAM9pE,KAAK6iQ,2BAA2Bt6E,EAAiBC,MACjDlE,EACV,OAEF,GACEikF,IACCz+L,EAAMw6G,GAAS,GAAMiE,EAAgBllL,OAASmlL,EAC/C,CACA,IAAI,EAAMlE,EAAQ,EAClBikF,EAAiBA,EAAerjQ,QAAO,SAAC27J,EAAG3+J,GACzC,IAAMsmQ,EACJp+P,EAAwB,GAAX,EAAMlI,MAAYqmL,EAAgBrmL,EAAIsmL,IACnDp+K,EAAwB,GAAX,EAAMlI,GAAS,KAAOqmL,EAAgBrmL,EAAIsmL,EAAS,GAIlE,OAHKggF,KACD,EAEGA,KAIXxoQ,KAAKyoQ,mBAEDH,EAAUtX,gBAAkBsX,EAAUpX,oBACxClxP,KAAKiiQ,mBACHqG,EAAUtX,eACVsX,EAAUpX,kBAERoX,EAAUtX,iBACZhxP,KAAK+kQ,gBAAgB/kQ,KAAK6U,MAAO7U,KAAK4kQ,YACtC5kQ,KAAK0iQ,yBAAyBt6P,KAAKpI,KAAK4kQ,WAAW5kQ,KAAK6U,SAEtDyzP,EAAUpX,mBACZlxP,KAAKilQ,kBAAkBjlQ,KAAK6U,MAAO7U,KAAK6kQ,aACxC7kQ,KAAK0iQ,yBAAyBt6P,KAAKpI,KAAK8kQ,aAAa9kQ,KAAK6U,UAI9D7U,KAAK4jQ,cAActjQ,EAAUmD,GAG7B,IAAIk/I,EAAU2lH,EAAU3lH,QACxB,GACEA,GAAWk2C,KACVyvE,EAAU/9N,MAAM,GAAK,GAAK+9N,EAAU/9N,MAAM,GAAK,GAChD,CACA,IAAIm+N,EAAKJ,EAAU3lH,QAAQ,GACvBl5I,EAAK6+P,EAAU3lH,QAAQ,GACvB//F,EAAK0lN,EAAU3lH,QAAQ,GACvBgmH,EAAKL,EAAU3lH,QAAQ,GACvB2lH,EAAU/9N,MAAM,GAAK,IACvB9gC,GAAMA,EACNk/P,GAAMA,GAEJL,EAAU/9N,MAAM,GAAK,IACvBm+N,GAAMA,EACN9lN,GAAMA,GAER+/F,EAAU,CAAC+lH,EAAIj/P,EAAIm5C,EAAI+lN,GAMzB,IAAM,EAAa3oQ,KAAK0/M,WACxB1/M,KAAKw4J,aAAapwJ,KAAK,CACrB,cACAk8K,EACAx6G,EACA,KACAxS,IACAA,IACAA,IACA,EACA,EACA,EACAt3D,KAAKynQ,oBACLznQ,KAAK0nQ,cACL,CAAC,EAAG,GACJpwM,SACAlzD,EACApE,KAAKgmQ,wBACLrjH,GAAWk2C,GACPA,GACAl2C,EAAQrkJ,KAAI,SAAU8G,GACpB,OAAOA,EAAI,OAEfkjQ,EAAUtX,iBACVsX,EAAUpX,iBACZlxP,KAAKqvP,MACLrvP,KAAKioQ,SACLjoQ,KAAKmoQ,WACLnoQ,KAAKkoQ,SACLloQ,KAAKunQ,aACLvnQ,KAAKwnQ,aACLe,IAEF,IAAMh+N,EAAQ,EAAI,EAClBvqC,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,cACAk8K,EACAx6G,EACA,KACAxS,IACAA,IACAA,IACA,EACA,EACA,EACAt3D,KAAKynQ,oBACLznQ,KAAK0nQ,cACL,CAACn9N,EAAOA,GACR+sB,SACAlzD,EACApE,KAAKgmQ,wBACLrjH,IACE2lH,EAAUtX,iBACVsX,EAAUpX,iBACZlxP,KAAKqvP,MACLrvP,KAAKioQ,SACLjoQ,KAAKmoQ,WACLnoQ,KAAKkoQ,SACLloQ,KAAKunQ,aACLvnQ,KAAKwnQ,aACLe,IAGFvoQ,KAAKgkQ,YAAYvgQ,OA9OjB,CACA,IAAK2/C,GAAWpjD,KAAK8iQ,uBAAwBxiQ,EAASymB,aACpD,OAEF,IAAI6rJ,OAAI,EAER,GADA2V,EAAkBjoL,EAAS0iD,qBACP,cAAhB1tB,EACFs9I,EAAO,CAAC2V,EAAgBllL,aACnB,GAAoB,mBAAhBiyB,EACTs9I,EAAsE,EAEpEygC,eACG,GAAoB,WAAhB/9K,EACTs9I,EAA8D,EAC3DygC,UACA1oM,MAAM,EAAG,QACP,GAAoB,gBAAhB2qB,EAAgC,CACzC,IAAMg7K,EACwD,EAE1D+tB,WACJzrD,EAAO,GACP,IAAK,IAAI1wK,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAC3C0wK,EAAKxqK,KAAKkoM,EAAMpuM,GAAG,IAGvBlC,KAAK4jQ,cAActjQ,EAAUmD,GAK7B,IAJA,IAAMm8H,EAAY0oI,EAAU1oI,UAExBgpI,EAAa,EACbC,OAAO,EACF/pQ,EAAI,EAAGgqQ,EAAKl2F,EAAKvvK,OAAQvE,EAAIgqQ,IAAMhqQ,EAAG,CAC7C,GAAiBsF,MAAbw7H,EAAwB,CAC1B,IAAM+L,EAAQ+6H,GACZ4B,EAAU9X,SACVjoE,EACAqgF,EACAh2F,EAAK9zK,GACL0pL,GAEFogF,EAAaj9H,EAAM,GACnBk9H,EAAUl9H,EAAM,QAEhBk9H,EAAUj2F,EAAK9zK,GAEjB,IAAK,IAAIoD,EAAI0mQ,EAAY1mQ,EAAI2mQ,EAAS3mQ,GAAKsmL,EACzCp+K,EAAYhC,KAAKmgL,EAAgBrmL,GAAIqmL,EAAgBrmL,EAAI,IAE3D,IAAM4nE,EAAM1/D,EAAY/G,OACxBulQ,EAAah2F,EAAK9zK,GAClBkB,KAAK+oQ,WAAWzkF,EAAOx6G,GACvBw6G,EAAQx6G,EAEV9pE,KAAKgkQ,YAAYvgQ,MAgMrB,YAAAglQ,gBAAA,WACE,IAAMJ,EAAcroQ,KAAK6nQ,iBACnBS,EAAYtoQ,KAAK+nQ,WACjBK,EAAYpoQ,KAAK2nQ,eAEjBqB,EAAYhpQ,KAAKmoQ,WACnBE,IACIW,KAAahpQ,KAAK8nQ,eACtB9nQ,KAAK8nQ,aAAakB,GAAa,CAC7B/pI,YAAaopI,EAAYppI,YACzBysH,QAAS2c,EAAY3c,QACrBG,eAAgBwc,EAAYxc,eAC5B8C,UAAW0Z,EAAY1Z,UACvB5C,SAAUsc,EAAYtc,SACtBE,WAAYoc,EAAYpc,WACxB3kL,SAAU+gM,EAAY/gM,YAI5B,IAAM2hM,EAAUjpQ,KAAKioQ,SACfgB,KAAWjpQ,KAAKgoQ,aACpBhoQ,KAAKgoQ,WAAWiB,GAAW,CACzBtpI,KAAM2oI,EAAU3oI,KAChBC,UAAW0oI,EAAU1oI,WAAa+4D,GAClC03D,QAASiY,EAAUjY,QACnBxwH,aAAcyoI,EAAUzoI,cAAgB+4D,GACxCruJ,MAAO+9N,EAAU/9N,QAGrB,IAAM2+N,EAAUlpQ,KAAKkoQ,SACjBE,IACIc,KAAWlpQ,KAAK4nQ,aACpB5nQ,KAAK4nQ,WAAWsB,GAAW,CACzBv2L,UAAWy1L,EAAUz1L,cAW7B,YAAAo2L,WAAA,SAAWzkF,EAAOx6G,GAChB,IAAMu+L,EAAcroQ,KAAK6nQ,iBACnBS,EAAYtoQ,KAAK+nQ,WAEjBiB,EAAYhpQ,KAAKmoQ,WACjBc,EAAUjpQ,KAAKioQ,SACfiB,EAAUlpQ,KAAKkoQ,SACrBloQ,KAAKyoQ,kBAEL,IAAM/oD,EAAa1/M,KAAK0/M,WAClBypD,EAAW9B,GAAWiB,EAAUzoI,cAEhC83E,EAAU33M,KAAKwnQ,aAAe9nD,EAC9BtmM,EAAOpZ,KAAKqvP,MACZtjN,EAAcs8N,EACfA,EAAY1Z,UAAYptP,KAAKyoB,IAAIs+O,EAAU/9N,MAAM,IAAO,EACzD,EAEJvqC,KAAKw4J,aAAapwJ,KAAK,CACrB,cACAk8K,EACAx6G,EACAq/L,EACAb,EAAU9nD,SACV0oD,EACAZ,EAAU9X,SACV9wC,EACA/H,EACAqxD,EACAj9N,EAAc2zK,EACdtmM,EACA6vP,EACA,IAEFjpQ,KAAK0iQ,yBAAyBt6P,KAAK,CACjC,cACAk8K,EACAx6G,EACAq/L,EACAb,EAAU9nD,SACV0oD,EACAZ,EAAU9X,SACV,EACA74C,EACAqxD,EACAj9N,EACA3yB,EACA6vP,EACA,EAAIvpD,KAQR,YAAA0iD,aAAA,SAAaz8H,EAAWugI,GACtB,IAAIoC,EAAWF,EAAWC,EAC1B,GAAK1iI,EAEE,CACL,IAAMyjI,EAAgBzjI,EAAU8nH,UAC3B2b,IAIHhB,EAAYpoQ,KAAK2nQ,kBAEfS,EAA4D,GAC5DpoQ,KAAK2nQ,eAAiBS,GAExBA,EAAUz1L,UAAYo6K,GACpBqc,EAAcr7G,YAAcuqC,MAT9B8vE,EAAY,KACZpoQ,KAAK2nQ,eAAiBS,GAYxB,IAAMiB,EAAkB1jI,EAAUgoH,YAClC,GAAK0b,EAGE,EACLhB,EAAcroQ,KAAK6nQ,oBAEjBQ,EAAgE,GAChEroQ,KAAK6nQ,iBAAmBQ,GAE1B,IAAM/gM,EAAW+hM,EAAgBhd,cAC3BR,EAAiBwd,EAAgB/c,oBACjCqC,EAAY0a,EAAgBzgF,WAC5BqjE,EAAaod,EAAgB7c,gBACnC6b,EAAY3c,QAAU2d,EAAgBjd,cAAgB7zD,GACtD8vE,EAAY/gM,SAAWA,EAAWA,EAAS38D,QAAU6tL,GACrD6vE,EAAYxc,oBACSznP,IAAnBynP,EpJnc2B,EoJmc4BA,EACzDwc,EAAYtc,SAAWsd,EAAgB9c,eAAiB9zD,GACxD4vE,EAAY1Z,eACIvqP,IAAduqP,EpJ5ZsB,EoJ4ZuBA,EAC/C0Z,EAAYpc,gBACK7nP,IAAf6nP,EpJ5buB,GoJ4bwBA,EACjDoc,EAAYppI,YAAc8tH,GACxBsc,EAAgBt7G,YAAc2qC,SAtBhC2vE,EAAc,KACdroQ,KAAK6nQ,iBAAmBQ,EAyB1BC,EAAYtoQ,KAAK+nQ,WACjB,IAAMpoI,EAAOgG,EAAUyrH,WAAa/4D,GACpCc,GAAax5D,GACb,IAAM2pI,EAAY3jI,EAAUqiH,gBAC5BsgB,EAAU9nD,SAAW76E,EAAU4rH,cAC/B+W,EAAU3oI,KAAOA,EACjB2oI,EAAU9X,SAAW7qH,EAAU2rH,cAC/BgX,EAAU5X,UAAY/qH,EAAU0rH,eAChCiX,EAAU1oI,UAAY+F,EAAU6rH,eAChC8W,EAAUjY,QAAU1qH,EAAU8rH,aAC9B6W,EAAUzoI,aACR8F,EAAU+rH,mBAAqB94D,GACjC0vE,EAAUtX,eAAiBrrH,EAAUksH,oBACrCyW,EAAUpX,iBAAmBvrH,EAAUmsH,sBACvCwW,EAAU3lH,QAAUhd,EAAUosH,cAAgBl5D,GAC9CyvE,EAAU/9N,WAAsBnmC,IAAdklQ,EAA0B,CAAC,EAAG,GAAKA,EAErD,IAAMC,EAAc5jI,EAAUgsH,aACxB6X,EAAc7jI,EAAUisH,aACxB6X,EAAqB9jI,EAAU0wF,oBAC/BqzC,EAAe/jI,EAAUrxE,cAC/Bt0D,KAAKqvP,MAAQ1pH,EAAUrlH,WAAa,GACpCtgB,KAAKunQ,kBAA+BnjQ,IAAhBmlQ,EAA4B,EAAIA,EACpDvpQ,KAAKwnQ,kBAA+BpjQ,IAAhBolQ,EAA4B,EAAIA,EACpDxpQ,KAAKynQ,yBACoBrjQ,IAAvBqlQ,GAA2CA,EAC7CzpQ,KAAK0nQ,mBAAiCtjQ,IAAjBslQ,EAA6B,EAAIA,EAEtD1pQ,KAAKmoQ,WAAaE,GACqB,iBAA3BA,EAAYppI,YAChBopI,EAAYppI,YACZ4kD,EAAOwkF,EAAYppI,cACvBopI,EAAY3c,QACZ2c,EAAYxc,eACZ,IACAwc,EAAY1Z,UACZ0Z,EAAYtc,SACZsc,EAAYpc,WACZ,IACAoc,EAAY/gM,SAASh9D,OACrB,IACA,GACJtK,KAAKioQ,SACHK,EAAU3oI,KACV2oI,EAAU/9N,OACT+9N,EAAU1oI,WAAa,MACvB0oI,EAAUjY,SAAW,MACrBiY,EAAUzoI,cAAgB,KAC7B7/H,KAAKkoQ,SAAWE,EACkB,iBAAvBA,EAAUz1L,UACfy1L,EAAUz1L,UACV,IAAMkxG,EAAOukF,EAAUz1L,WACzB,QAjGJ3yE,KAAKqvP,MAAQ,GAmGfrvP,KAAKgmQ,wBAA0BE,GAEnC,EA9kBA,CAAgC,IC9BhC,IAAMyD,GAAqB,CACzB,OAAUC,GACV,QAAWC,GACX,MAASC,GACT,WAAcC,GACd,QAAWH,GACX,KDwmBF,ICnhBA,SAlFA,WAOE,WAAYvvO,EAAW0O,EAAWob,EAAYu7J,GAK5C1/M,KAAKgqQ,WAAa3vO,EAMlBr6B,KAAKiqQ,WAAalhO,EAMlB/oC,KAAKy/M,YAAcC,EAMnB1/M,KAAKkqQ,YAAc/lN,EAMnBnkD,KAAKmqQ,kBAAoB,GA4C7B,OAtCE,YAAAlG,OAAA,WACE,IAAMmG,EAAsB,GAC5B,IAAK,IAAMC,KAAQrqQ,KAAKmqQ,kBAAmB,CACzCC,EAAoBC,GAAQD,EAAoBC,IAAS,GACzD,IAAMC,EAAWtqQ,KAAKmqQ,kBAAkBE,GACxC,IAAK,IAAME,KAAcD,EAAU,CACjC,IAAME,EAAqBF,EAASC,GAAYtG,SAChDmG,EAAoBC,GAAME,GAAcC,GAG5C,OAAOJ,GAQT,YAAAK,WAAA,SAAW/9N,EAAQg+N,GACjB,IAAMC,OAAuBvmQ,IAAXsoC,EAAuBA,EAAOzpB,WAAa,IACzD2nP,EAAU5qQ,KAAKmqQ,kBAAkBQ,QACrBvmQ,IAAZwmQ,IACFA,EAAU,GACV5qQ,KAAKmqQ,kBAAkBQ,GAAaC,GAEtC,IAAIC,EAASD,EAAQF,QACNtmQ,IAAXymQ,IAEFA,EAAS,IAAIC,EADOnB,GAAmBe,IAErC1qQ,KAAKgqQ,WACLhqQ,KAAKiqQ,WACLjqQ,KAAKkqQ,YACLlqQ,KAAKy/M,aAEPmrD,EAAQF,GAAeG,GAEzB,OAAOA,GAEX,EAhFA,G,+dCXA,eAIE,WAAYrmQ,GAAZ,MACE,cAAO,K,OAMP,EAAKmoD,OAAQ,EAGb,EAAKo+M,wBAA0B,EAAKC,mBAAmB9qN,KAAK,GAM5D,EAAK+qN,OAASzmQ,EAKd,EAAK0mQ,uBAAyB,K,EA6KlC,OAtM4B,QAkC1B,YAAAtsK,YAAA,SAAYw0F,GACV,OAAO,KAOT,YAAArvL,QAAA,SAAQqvL,GACN,OAAO,MAST,YAAAI,aAAA,SAAaH,GACX,OAAO,KAUT,YAAAI,YAAA,SAAYJ,EAAY5lL,GACtB,OAAO,KAST,YAAA09P,mBAAA,SAAmBC,EAAOzlG,EAAMr4I,GACzB89O,EAAMzlG,KACTylG,EAAMzlG,GAAQ,IAEhBylG,EAAMzlG,GAAMr4I,EAAK+9O,UAAUpoP,YAAcqK,GAa3C,YAAAg+O,uBAAA,SAAuB3wP,EAAQ4vK,EAAY6gF,GACzC,OAOE,SAAUzlG,EAAM4lG,GACd,IAAMhzO,EAAWv4B,KAAKmrQ,mBAAmBjrN,KAAKlgD,KAAMorQ,EAAOzlG,GAC3D,OAAOhrJ,EAAO6wP,kBAAkBjhF,EAAY5kB,EAAM4lG,EAAWhzO,IAC7D2nB,KAAKlgD,OAaX,YAAAo1L,2BAAA,SACE3xG,EACA4vG,EACAgC,EACA98J,EACAhP,KAcF,YAAAgyK,eAAA,SAAenI,EAAOC,EAAYgC,GAChC,OAAO,MAMT,YAAA11K,SAAA,WACE,OAAO3f,KAAKirQ,QAOd,YAAAjmD,mBAAA,aAOA,YAAAgmD,mBAAA,SAAmBnrO,GAC2CA,EAAY,OAC9DqzJ,aAAe81D,IACvBhpP,KAAKyrQ,2BAWT,YAAAC,UAAA,SAAU3+O,GACR,IAAI08N,EAAa18N,EAAMmmK,WAQvB,OAPIu2D,GAAcT,IAAqBS,GAAcT,IACnDj8N,EAAMnhB,iBAAiBmjL,GAAUhyC,OAAQ/8I,KAAK+qQ,yBAE5CthB,GAAcT,KAChBj8N,EAAMqpG,OACNqzH,EAAa18N,EAAMmmK,YAEdu2D,GAAcT,IAMvB,YAAAyiB,wBAAA,WACE,IAAMjnQ,EAAQxE,KAAK2f,WACfnb,GAASA,EAAMwsL,cAA2C,UAA3BxsL,EAAMitL,kBACvCjtL,EAAMmvF,WAOV,YAAAswF,gBAAA,kBACSjkL,KAAKirQ,OACZ,YAAMhnF,gBAAe,YAEzB,EAtMA,CAA4B,IAwM5B,Y,+dC1La0nF,GAAa,GAKtBC,GAAe,KAcnB,mBAIE,WAAYpnQ,GAAZ,MACE,YAAMA,IAAM,K,OAMZ,EAAKyvD,UAAY,KAMjB,EAAK43M,mBAQL,EAAKC,c9KjCA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G8KyCrB,EAAKC,e9KzCA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G8KiDrB,EAAKt1E,sB9KjDA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G8KsDrB,EAAKnkH,QAAU,KAKf,EAAK05L,iBAAkB,EAMvB,EAAKC,cAAgB,KAMrB,EAAK54E,WAAa,K,EAoRtB,OAnVkC,QAwEhC,YAAA7gH,aAAA,SAAazlD,EAAOusJ,EAAKhuB,GApF3B,IACQjuF,EAyFAl5D,EALCynQ,MApFDvuM,EAAS1wD,SAASC,cAAc,WAC/B0lB,MAAQ,EACf+qC,EAAO9qC,OAAS,EAChBq5O,GAAevuM,EAAOkV,WAAW,OAoF/Bq5L,GAAa94L,UAAU,EAAG,EAAG,EAAG,GAGhC,IACE84L,GAAaz4L,UAAUpmD,EAAOusJ,EAAKhuB,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GACvDnnJ,EAAOynQ,GAAap5L,aAAa,EAAG,EAAG,EAAG,GAAGruE,KAC7C,MAAOsV,GAEP,OADAmyP,GAAe,KACR,KAET,OAAOznQ,GAOT,YAAAwsL,cAAA,SAAc0C,GACZ,IACIhD,EADUrwL,KAAK2f,WACIgxK,gBAIvB,MAH0B,mBAAfN,IACTA,EAAaA,EAAWgD,EAAWb,UAAUruI,aAExCksI,QAAcjsL,GASvB,YAAA8nQ,aAAA,SAAaz+P,EAAQurI,EAAWmzH,GAC9B,IACIl4M,EAAWqe,EADT85L,EAAiBpsQ,KAAK2f,WAAW48B,eAGrC9uC,GACAA,EAAOquB,YAAcswO,KACnBD,GACC1+P,GACCA,EAAO9H,MAAMinG,iBACbpqD,EACEqpI,GAAQp+K,EAAO9H,MAAMinG,iBACrBi/E,GAAQsgF,QAGR9uM,EAAS5vD,EAAO2mK,6BACAi4F,oBACpB/5L,EAAUjV,EAAOkV,WAAW,QAchC,GAXID,GAAWA,EAAQjV,OAAO13D,MAAMqzI,YAAcA,GAEhDh5I,KAAKi0D,UAAYxmD,EACjBzN,KAAKsyE,QAAUA,EACftyE,KAAKgsQ,iBAAkB,GACdhsQ,KAAKgsQ,kBAEdhsQ,KAAKi0D,UAAY,KACjBj0D,KAAKsyE,QAAU,KACftyE,KAAKgsQ,iBAAkB,IAEpBhsQ,KAAKi0D,UAAW,EACnBA,EAAYtnD,SAASC,cAAc,QACzBkvB,UAAYswO,EACtB,IAAIzmQ,EAAQsuD,EAAUtuD,MACtBA,EAAM2G,SAAW,WACjB3G,EAAM2sB,MAAQ,OACd3sB,EAAM4sB,OAAS,OAEf,IAAM8qC,GADNiV,EAAU+kH,MACah6H,OACvBpJ,EAAUpnD,YAAYwwD,IACtB13D,EAAQ03D,EAAO13D,OACT2G,SAAW,WACjB3G,EAAMyuE,KAAO,IACbzuE,EAAMuzI,gBAAkB,WACxBl5I,KAAKi0D,UAAYA,EACjBj0D,KAAKsyE,QAAUA,EAGdtyE,KAAKgsQ,kBACNG,GACCnsQ,KAAKi0D,UAAUtuD,MAAMinG,kBAEtB5sG,KAAKi0D,UAAUtuD,MAAMinG,gBAAkBu/J,IAU3C,YAAAG,cAAA,SAAch6L,EAAS+gH,EAAY/3K,GACjC,IAAME,EAAU,GAAWF,GACrBI,EAAW,GAAYJ,GACvBK,EAAc,GAAeL,GAC7BG,EAAa,GAAcH,GAEjClL,EAAeijL,EAAW6B,2BAA4B15K,GACtDpL,EAAeijL,EAAW6B,2BAA4Bx5K,GACtDtL,EAAeijL,EAAW6B,2BAA4Bv5K,GACtDvL,EAAeijL,EAAW6B,2BAA4Bz5K,GAEtD,IAAM8wP,EAAWvsQ,KAAKy2L,sBACtBrmL,EAAem8P,EAAU/wP,GACzBpL,EAAem8P,EAAU7wP,GACzBtL,EAAem8P,EAAU5wP,GACzBvL,EAAem8P,EAAU9wP,GAEzB62D,EAAQi/B,OACRj/B,EAAQ0sD,YACR1sD,EAAQg3C,OAAO/nH,KAAKirC,MAAMhxB,EAAQ,IAAKja,KAAKirC,MAAMhxB,EAAQ,KAC1D82D,EAAQ8sD,OAAO79H,KAAKirC,MAAM9wB,EAAS,IAAKna,KAAKirC,MAAM9wB,EAAS,KAC5D42D,EAAQ8sD,OAAO79H,KAAKirC,MAAM7wB,EAAY,IAAKpa,KAAKirC,MAAM7wB,EAAY,KAClE22D,EAAQ8sD,OAAO79H,KAAKirC,MAAM/wB,EAAW,IAAKla,KAAKirC,MAAM/wB,EAAW,KAChE62D,EAAQh9D,QASV,YAAAk3P,qBAAA,SAAqBriQ,EAAMmoE,EAAS+gH,GAClC,IAAM7uL,EAAQxE,KAAK2f,WACnB,GAAInb,EAAM4nL,YAAYjiL,GAAO,CAC3B,IAAM,EAAQ,IAAI,GAChBA,EACAnK,KAAKy2L,sBACLpD,EACA/gH,GAEF9tE,EAAMw7B,cAAc,KASxB,YAAAysO,UAAA,SAAUn6L,EAAS+gH,GACjBrzL,KAAKqzL,WAAaA,EAClBrzL,KAAKwsQ,qBAAqB,aAA2Bl6L,EAAS+gH,IAQhE,YAAAq5E,WAAA,SAAWp6L,EAAS+gH,GAClBrzL,KAAKwsQ,qBAAqB,cAA4Bl6L,EAAS+gH,IAejE,YAAAs5E,mBAAA,SACEhsQ,EACAwjD,EACAkQ,EACAqrJ,EACAptL,EACAC,EACAmlL,GAEA,IAAMjxB,EAAMn0J,EAAQ,EACdo0J,EAAMn0J,EAAS,EACfo0J,EAAK+4B,EAAav7J,EAClByiI,GAAMD,EACNE,GAAOlmL,EAAO,GAAK+2M,EACnB5wB,GAAOnmL,EAAO,GACpB,OAAO6lL,EACLxmL,KAAK8rQ,cACLrlF,EACAC,EACAC,EACAC,GACCvyH,EACDwyH,EACAC,IAYJ,YAAAyU,eAAA,SAAenI,EAAOC,EAAYgC,GAChC,IAAMu3E,EAAcx8P,EAClBpQ,KAAKy2L,sBACLrD,EAAMzoL,SAEF2nE,EAAUtyE,KAAKsyE,QAGfu6L,EADQ7sQ,KAAK2f,WACOoH,YAC1B,GAAI8lP,IAOGtlF,EAAmBslF,EANCz8P,EACvBijL,EAAW8B,2BACX/B,EAAMzoL,UAKN,OAAO,KAIX,IAWIxG,EAXEwpB,EAAIpsB,KAAKirC,MAAMogO,EAAY,IAC3Bh/O,EAAIrsB,KAAKirC,MAAMogO,EAAY,IAC7BhB,EAAe5rQ,KAAKisQ,cACxB,IAAKL,EAAc,CACjB,IAAMkB,EAAcngQ,SAASC,cAAc,UAC3CkgQ,EAAYx6O,MAAQ,EACpBw6O,EAAYv6O,OAAS,EACrBq5O,EAAekB,EAAYv6L,WAAW,MACtCvyE,KAAKisQ,cAAgBL,EAEvBA,EAAa94L,UAAU,EAAG,EAAG,EAAG,GAEhC,IACE84L,EAAaz4L,UAAUb,EAAQjV,OAAQ1vC,EAAGC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5DzpB,EAAOynQ,EAAap5L,aAAa,EAAG,EAAG,EAAG,GAAGruE,KAC7C,MAAOsV,GACP,MAAiB,kBAAbA,EAAI5Q,MAEN7I,KAAKisQ,cAAgB,KACd,IAAIlgP,YAEN5nB,EAGT,OAAgB,IAAZA,EAAK,GACA,KAEFA,GAMT,YAAA8/K,gBAAA,kBACSjkL,KAAKqzL,WACZ,YAAMpP,gBAAe,YAEzB,EAnVA,CAAkC,IAqVlC,YC3WO,SAAS8oF,GACdxkF,EACAt2J,EACA63C,EACA0+G,EACApvK,EACA4zP,EACAxc,EACAjmN,EACA4vJ,EACAx6D,EACA7yG,EACAunC,GAEA,IAAI60H,EAAKX,EAAgBt2J,GACrBk3J,EAAKZ,EAAgBt2J,EAAS,GAC9B0zH,EAAK,EACLC,EAAK,EACL6rD,EAAgB,EAChBw7D,EAAW,EAEf,SAASC,IACPvnH,EAAKujC,EACLtjC,EAAKujC,EAELD,EAAKX,EADLt2J,GAAUu2J,GAEVW,EAAKZ,EAAgBt2J,EAAS,GAC9Bg7O,GAAYx7D,EACZA,EAAgBlwM,KAAKkrC,MAAMy8I,EAAKvjC,IAAOujC,EAAKvjC,IAAOwjC,EAAKvjC,IAAOujC,EAAKvjC,IAEtE,GACEsnH,UACOj7O,EAAS63C,EAAM0+G,GAAUykF,EAAWx7D,EAAgBu7D,GAU7D,IARA,IAAI/oN,EACgB,IAAlBwtJ,EAAsB,GAAKu7D,EAASC,GAAYx7D,EAC5C07D,EAASjiF,GAAKvlC,EAAIujC,EAAIjlI,GACtBmpN,EAASliF,GAAKtlC,EAAIujC,EAAIllI,GAEtBopN,EAAcp7O,EAASu2J,EACvB8kF,EAAcL,EACdM,EAAOP,EAASziO,EAAQ4vJ,EAAyBx6D,EAAMvmH,EAAM0T,GAC5DmF,EAAS63C,EAAM0+G,GAAUykF,EAAWx7D,EAAgB87D,GACzDL,IAGF,IAIIh9O,EAJEgiL,EAAOhnB,GAAKvlC,EAAIujC,EADtBjlI,EAAgC,IAAlBwtJ,EAAsB,GAAK87D,EAAON,GAAYx7D,GAEtDU,EAAOjnB,GAAKtlC,EAAIujC,EAAIllI,GAI1B,GAAIoQ,EAAU,CACZ,IAAM5jD,EAAO,CAAC08P,EAAQC,EAAQl7D,EAAMC,GACpC,GAAO1hM,EAAM,EAAG,EAAG,EAAG4jD,EAAU5jD,EAAMA,GACtCyf,EAAUzf,EAAK,GAAKA,EAAK,QAEzByf,EAAUi9O,EAASj7D,EAGrB,IAUIs7D,EAVExrQ,EAAKT,KAAKS,GACV4C,EAAS,GACT6oQ,EAAgBJ,EAAc7kF,IAAWv2J,EAU/C,GAPAw/K,EAAgB,EAChBw7D,EAAWK,EACXpkF,EAAKX,EAHLt2J,EAASo7O,GAITlkF,EAAKZ,EAAgBt2J,EAAS,GAI1Bw7O,EAAe,CACjBP,IAEAM,EAAgBjsQ,KAAKqnE,MAAMugH,EAAKvjC,EAAIsjC,EAAKvjC,GACrCz1H,IACFs9O,GAAiBA,EAAgB,GAAKxrQ,EAAKA,GAE7C,IAAM2rB,GAAKukL,EAAOi7D,GAAU,EACtBv/O,GAAKukL,EAAOi7D,GAAU,EAE5B,OADAxoQ,EAAO,GAAK,CAAC+oB,EAAGC,GAAI2/O,EAAOP,GAAU,EAAGQ,EAAep0P,GAChDxU,EAMT,IAAK,IAAI1C,EAAI,EAAGgiB,GAFhB9K,EAAOA,EAAK7P,QAAQ,MAAO,MAEDlG,OAAQnB,EAAIgiB,GAAM,CAC1CgpP,IACA,IAAIjrQ,EAAQV,KAAKqnE,MAAMugH,EAAKvjC,EAAIsjC,EAAKvjC,GAIrC,GAHIz1H,IACFjuB,GAASA,EAAQ,GAAKD,EAAKA,QAEPoC,IAAlBopQ,EAA6B,CAC/B,IAAIhpM,EAAQviE,EAAQurQ,EAEpB,GADAhpM,GAASA,EAAQxiE,GAAM,EAAIA,EAAKwiE,GAASxiE,EAAK,EAAIA,EAAK,EACnDT,KAAKyoB,IAAIw6C,GAASgsL,EACpB,OAAO,KAGXgd,EAAgBvrQ,EAIhB,IAFA,IAAMyrQ,EAASxrQ,EACXyrQ,EAAa,EACVzrQ,EAAIgiB,IAAMhiB,EAAG,CAClB,IACM+I,EAAMs/B,EAAQ4vJ,EAAyBx6D,EAAMvmH,EADrC8W,EAAUhM,EAAKhiB,EAAI,EAAIA,GAC2B4qB,GAChE,GACEmF,EAASu2J,EAAS1+G,GAClBmjM,EAAWx7D,EAAgBu7D,EAASW,EAAa1iQ,EAAM,EAEvD,MAEF0iQ,GAAc1iQ,EAEhB,GAAI/I,IAAMwrQ,EAAV,CAGA,IAAME,EAAQ19O,EACV9W,EAAK+f,UAAUjV,EAAKwpP,EAAQxpP,EAAKhiB,GACjCkX,EAAK+f,UAAUu0O,EAAQxrQ,GAKrByrB,EAAIu9J,GAAKvlC,EAAIujC,EAJnBjlI,EACoB,IAAlBwtJ,EACI,GACCu7D,EAASW,EAAa,EAAIV,GAAYx7D,GAEvC7jL,EAAIs9J,GAAKtlC,EAAIujC,EAAIllI,GACvBr/C,EAAOwD,KAAK,CAACulB,EAAGC,EAAG+/O,EAAa,EAAG1rQ,EAAO2rQ,IAC1CZ,GAAUW,GAEZ,OAAO/oQ,EC5FT,IAAMipQ,G9K2IG,CAAC73M,EAAAA,EAAUA,EAAAA,GAAU,KAAW,K8KxInCvsD,GAAK,GAELm5C,GAAK,GAEL+lN,GAAK,GAELmF,GAAK,GAMX,SAASC,GAAgBC,GACvB,OAAOA,EAAuB,GAAGC,aAGnC,IAAMC,GAAW,IAAI5kP,OAEnB,IACEhY,OAAO4a,aAAa,MAAW,IAAM5a,OAAO4a,aAAa,MACzD5a,OAAO4a,aAAa,OAAW,IAAM5a,OAAO4a,aAAa,OACzD5a,OAAO4a,aAAa,OAAW,IAAM5a,OAAO4a,aAAa,OACzD5a,OAAO4a,aAAa,OAAW,IAAM5a,OAAO4a,aAAa,OACzD5a,OAAO4a,aAAa,QAAW,IAAM5a,OAAO4a,aAAa,QAC3D,KASF,SAASiiP,GAAoB/0P,EAAMg1P,GAIjC,MAHe,UAAVA,GAA+B,QAAVA,GAAqBF,GAASjsO,KAAK7oB,KAC3Dg1P,EAAkB,UAAVA,EAAoB,OAAS,SAEhC/G,GAAW+G,GASpB,SAASC,GAAiBlmQ,EAAKotB,EAAMrzB,GAKnC,OAJIA,EAAI,GACNiG,EAAIC,KAAK,KAAM,IAEjBD,EAAIC,KAAKmtB,EAAM,IACRptB,EAGT,kBAOE,WAAYg8C,EAAYu7J,EAAY4uD,EAAU91G,GAK5Cx4J,KAAKsuQ,SAAWA,EAMhBtuQ,KAAK0/M,WAAaA,EAOlB1/M,KAAKmkD,WAAaA,EAMlBnkD,KAAKuuQ,WAMLvuQ,KAAKw4J,aAAeA,EAAaA,aAMjCx4J,KAAKoK,YAAcouJ,EAAapuJ,YAMhCpK,KAAKwuQ,iBAAmB,GAMxBxuQ,KAAKyuQ,mBhLxIA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GgL8IrBzuQ,KAAK0iQ,yBAA2BlqG,EAAakqG,yBAM7C1iQ,KAAK0uQ,kBAAoB,KAMzB1uQ,KAAK2uQ,cAAgB,EAKrB3uQ,KAAK4nQ,WAAapvG,EAAaovG,YAAc,GAK7C5nQ,KAAK8nQ,aAAetvG,EAAasvG,cAAgB,GAKjD9nQ,KAAKgoQ,WAAaxvG,EAAawvG,YAAc,GAM7ChoQ,KAAK4uQ,QAAU,GAMf5uQ,KAAKsnQ,QAAU,GAqhCnB,OA3gCE,YAAAuH,YAAA,SAAYz1P,EAAM6vP,EAASC,EAASF,GAClC,IAAMvgQ,EAAM2Q,EAAO6vP,EAAUC,EAAUF,EACvC,GAAIhpQ,KAAKsnQ,QAAQ7+P,GACf,OAAOzI,KAAKsnQ,QAAQ7+P,GAEtB,IAAM4/P,EAAcW,EAAYhpQ,KAAK8nQ,aAAakB,GAAa,KACzDZ,EAAYc,EAAUlpQ,KAAK4nQ,WAAWsB,GAAW,KACjDZ,EAAYtoQ,KAAKgoQ,WAAWiB,GAC5BvpD,EAAa1/M,KAAK0/M,WAClBn1K,EAAQ,CACZ+9N,EAAU/9N,MAAM,GAAKm1K,EACrB4oD,EAAU/9N,MAAM,GAAKm1K,GAEjBovD,EAAchuQ,MAAMC,QAAQqY,GAC5Bg1P,EAAQ9F,EAAUjY,QACpBgX,GAAWiB,EAAUjY,SACrB8d,GACErtQ,MAAMC,QAAQqY,GAAQA,EAAK,GAAKA,EAChCkvP,EAAU1oI,WAAa+4D,IAEvB5sJ,EACJi9N,GAAaX,EAAY1Z,UAAY0Z,EAAY1Z,UAAY,EAEzDnjO,EAASsjP,EACX11P,EACAA,EAAKjH,MAAM,MAAMlK,OAAOomQ,GAAkB,IAExC,EzJ8HH,SAA2BU,EAAWvjP,GAQ3C,IAPA,IAAM4G,EAAS,GACTC,EAAU,GACV28O,EAAa,GACf18O,EAAQ,EACRq8N,EAAY,EACZp8N,EAAS,EACT2kK,EAAa,EACRh1L,EAAI,EAAGgiB,EAAKsH,EAAOnoB,OAAQnB,GAAKgiB,EAAIhiB,GAAK,EAAG,CACnD,IAAMkX,EAAOoS,EAAOtpB,GACpB,GAAa,OAATkX,GAAiBlX,IAAMgiB,EAA3B,CAOA,IAAMy7G,EAAOn0G,EAAOtpB,EAAI,IAAM6sQ,EAAUpvI,KAClCsvI,EAAev1E,GAAiB/5D,EAAMvmH,GAC5CgZ,EAAOhqB,KAAK6mQ,GACZtgB,GAAasgB,EACb,IAAMC,EAAgBp1E,GAAkBn6D,GACxCttG,EAAQjqB,KAAK8mQ,GACbh4E,EAAa31L,KAAK4K,IAAI+qL,EAAYg4E,QAZhC58O,EAAQ/wB,KAAK4K,IAAImmB,EAAOq8N,GACxBqgB,EAAW5mQ,KAAKumP,GAChBA,EAAY,EACZp8N,GAAU2kK,EAWd,MAAO,CAAC5kK,MAAK,EAAEC,OAAM,EAAEH,OAAM,EAAEC,QAAO,EAAE28O,WAAU,GyJvJKG,CACnD7G,EACA98O,GAFK8G,EAAK,QAAEC,EAAM,SAAEH,EAAM,SAAEC,EAAO,UAAE28O,EAAU,aAI3CI,EAAc98O,EAAQyZ,EACtB0uJ,EAAsB,GAEtB55B,GAAKuuG,EAAc,GAAK7kO,EAAM,GAC9Bye,GAAKz2B,EAASwZ,GAAexB,EAAM,GAEnCgC,EAAQ,CACZja,MAAOuuI,EAAI,EAAIt/J,KAAKonD,MAAMk4G,GAAKt/J,KAAKgjD,KAAKs8G,GACzCtuI,OAAQy2B,EAAI,EAAIznD,KAAKonD,MAAMK,GAAKznD,KAAKgjD,KAAKyE,GAC1CyxI,oBAAqBA,IAEP,GAAZlwJ,EAAM,IAAuB,GAAZA,EAAM,IACzBkwJ,EAAoBryL,KAAK,QAASmiC,GAEhCy+N,KACFvuE,EAAoBryL,KAAK,cAAeigQ,EAAYppI,aACpDw7D,EAAoBryL,KAAK,YAAa2jC,GACtC0uJ,EAAoBryL,KAAK,UAAWigQ,EAAY3c,SAChDjxD,EAAoBryL,KAAK,WAAYigQ,EAAYtc,UACjDtxD,EAAoBryL,KAAK,aAAcigQ,EAAYpc,aAEnC/mE,EAA0BmqF,kCAAoCC,0BAClE9uQ,UAAUksP,cACpBjyD,EAAoBryL,KAAK,cAAe,CAACigQ,EAAY/gM,WACrDmzH,EAAoBryL,KAAK,iBAAkBigQ,EAAYxc,kBAGvDqd,GACFzuE,EAAoBryL,KAAK,YAAaggQ,EAAUz1L,WAElD8nH,EAAoBryL,KAAK,eAAgB,UACzCqyL,EAAoBryL,KAAK,YAAa,UAUtC,IATA,IAQImnQ,EAREC,EAAY,GAAMpB,EACpBzgP,EAAIygP,EAAQgB,EAAcI,EAAYzjO,EACpC0jO,EAAqB,GACrBC,EAAmB,GACrBx4E,EAAa,EACby4E,EAAa,EACbC,EAAmB,EACnBC,EAAiB,EAEZ3tQ,EAAI,EAAGgiB,EAAKsH,EAAOnoB,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EAAG,CAClD,IAAM,EAAOspB,EAAOtpB,GACpB,GAAa,OAAT,EAAJ,CAOA,IAAMy9H,EAAOn0G,EAAOtpB,EAAI,IAAMomQ,EAAU3oI,KACpCA,IAAS4vI,IACPvG,GACFyG,EAAmBrnQ,KAAK,OAAQu3H,GAE9BupI,GACFwG,EAAiBtnQ,KAAK,OAAQu3H,GAEhC4vI,EAAe5vI,GAEjBu3D,EAAa31L,KAAK4K,IAAI+qL,EAAY7kK,EAAQu9O,IAC1C,IAAME,EAAiB,CACrB,EACAniP,EACE6hP,EAAYp9O,EAAOw9O,GACnBxB,GAASh8O,EAAOw9O,GAAoBZ,EAAWa,IACjD,IAAO9jO,EAAcmrJ,GAAcy4E,GAErChiP,GAAKyE,EAAOw9O,GACR5G,GACFyG,EAAmBrnQ,KAAK,aAAc0nQ,GAEpC5G,GACFwG,EAAiBtnQ,KAAK,WAAY0nQ,KAElCF,OA/BAD,GAAcz4E,EACdA,EAAa,EACbvpK,EAAIygP,EAAQgB,EAAcI,EAAYzjO,IACpC8jO,EAiCN,OAHA/uQ,MAAMN,UAAU4H,KAAKgI,MAAMqqL,EAAqBg1E,GAChD3uQ,MAAMN,UAAU4H,KAAKgI,MAAMqqL,EAAqBi1E,GAChD1vQ,KAAKsnQ,QAAQ7+P,GAAO8jC,EACbA,GAYT,YAAAwjO,sBAAA,SACEz9L,EACA7oE,EACAm5C,EACA+lN,EACAmF,EACApN,EACAC,GAEAruL,EAAQ0sD,YACR1sD,EAAQg3C,OAAOl5G,MAAMkiE,EAAS7oE,GAC9B6oE,EAAQ8sD,OAAOhvH,MAAMkiE,EAAS1vB,GAC9B0vB,EAAQ8sD,OAAOhvH,MAAMkiE,EAASq2L,GAC9Br2L,EAAQ8sD,OAAOhvH,MAAMkiE,EAASw7L,GAC9Bx7L,EAAQ8sD,OAAOhvH,MAAMkiE,EAAS7oE,GAC1Bi3P,IACF1gQ,KAAKuuQ,WAAqC7N,EAAgB,GAC1D1gQ,KAAKitP,MAAM36K,IAETquL,IACF3gQ,KAAKgwQ,gBACH19L,EACwB,GAE1BA,EAAQ/8D,WAwBZ,YAAA06P,iCAAA,SACEC,EACAC,EACA5zD,EACAC,EACAlqL,EACAC,EACAk5K,EACAC,EACApR,EACAC,EACAlmI,EACA9pB,EACA6lO,EACAztH,EACA0tH,EACA5sQ,GAIA,IAqBIu1I,EArBArrH,EAAI4uL,GAFR9Q,GAAWlhK,EAAM,IAGb3c,EAAI4uL,GAFR9Q,GAAWnhK,EAAM,IAIXs2H,EAAIvuI,EAAQgoK,EAAU41E,EAAaA,EAAa51E,EAAUhoK,EAC1D02B,EAAIz2B,EAASgoK,EAAU41E,EAAcA,EAAc51E,EAAUhoK,EAC7D+9O,EAAO3tH,EAAQ,GAAKke,EAAIt2H,EAAM,GAAKo4G,EAAQ,GAC3C4tH,EAAO5tH,EAAQ,GAAK35F,EAAIze,EAAM,GAAKo4G,EAAQ,GAC3C6tH,EAAO7iP,EAAIg1H,EAAQ,GACnB8tH,EAAO7iP,EAAI+0H,EAAQ,GAkDzB,OAhDI0tH,GAA2B,IAAbh8M,KAChB5qD,GAAG,GAAK+mQ,EACR1C,GAAG,GAAK0C,EACR/mQ,GAAG,GAAKgnQ,EACR7tN,GAAG,GAAK6tN,EACR7tN,GAAG,GAAK4tN,EAAOF,EACf3H,GAAG,GAAK/lN,GAAG,GACX+lN,GAAG,GAAK8H,EAAOF,EACfzC,GAAG,GAAKnF,GAAG,IAII,IAAbt0M,GAYFjkD,EAXA4oI,EAAYwtC,EhLrZT,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GgLuZjB+1B,EACAC,EACA,EACA,EACAnoJ,GACCkoJ,GACAC,GAGuB/yM,IAC1B2G,EAAe4oI,EAAWp2F,IAC1BxyC,EAAe4oI,EAAW2vH,IAC1Bv4P,EAAe4oI,EAAW80H,IAC1B3lF,GACE5mL,KAAKqa,IAAInS,GAAG,GAAIm5C,GAAG,GAAI+lN,GAAG,GAAImF,GAAG,IACjCvsQ,KAAKqa,IAAInS,GAAG,GAAIm5C,GAAG,GAAI+lN,GAAG,GAAImF,GAAG,IACjCvsQ,KAAK4K,IAAI1C,GAAG,GAAIm5C,GAAG,GAAI+lN,GAAG,GAAImF,GAAG,IACjCvsQ,KAAK4K,IAAI1C,GAAG,GAAIm5C,GAAG,GAAI+lN,GAAG,GAAImF,GAAG,IACjCD,KAGF1lF,GACE5mL,KAAKqa,IAAI40P,EAAMA,EAAOF,GACtB/uQ,KAAKqa,IAAI60P,EAAMA,EAAOF,GACtBhvQ,KAAK4K,IAAIqkQ,EAAMA,EAAOF,GACtB/uQ,KAAK4K,IAAIskQ,EAAMA,EAAOF,GACtB1C,IAGAuC,IACFziP,EAAIpsB,KAAKirC,MAAM7e,GACfC,EAAIrsB,KAAKirC,MAAM5e,IAEV,CACL8iP,WAAY/iP,EACZgjP,WAAY/iP,EACZgjP,WAAY/vG,EACZgwG,WAAY7nN,EACZsxI,QAASA,EACTC,QAASA,EACT0zE,aAAc,CACZpmF,KAAMgmF,GAAU,GAChB/lF,KAAM+lF,GAAU,GAChB9lF,KAAM8lF,GAAU,GAChB7lF,KAAM6lF,GAAU,GAChBhrQ,MAAOY,GAETqtQ,gBAAiB93H,EACjBzuG,MAAOA,IAeX,YAAAwmO,oBAAA,SACEz+L,EACA0+L,EACAC,EACA96B,EACA3iO,EACAktP,EACAC,GAEA,IAAM0P,KAAgB3P,IAAmBC,GAEnCztC,EAAMijB,EAAW83B,aACjB5wM,EAASiV,EAAQjV,OACjB6zM,EAAgBvQ,EACjBA,EAAkB,GAAKxqB,EAAW5rM,MAAM,GAAM,EAC/C,EAiCJ,OA/BE2oL,EAAIrrC,KAAOqpF,GAAiB7zM,EAAO/qC,MAAQ0+O,GAC3C99C,EAAInrC,KAAOmpF,GAAiB,GAC5Bh+C,EAAIprC,KAAOopF,GAAiB7zM,EAAO9qC,OAASy+O,GAC5C99C,EAAIlrC,KAAOkpF,GAAiB,IAGxBb,GACFrwQ,KAAK+vQ,sBACHz9L,EACA7oE,GACAm5C,GACA+lN,GACAmF,GACwB,EACA,GAG5B1zE,GACE9nH,EACA6jK,EAAW26B,gBACXt9P,EACAy9P,EACA96B,EAAW77C,QACX67C,EAAW57C,QACX47C,EAAWy6B,WACXz6B,EAAW06B,WACX16B,EAAWu6B,WACXv6B,EAAWw6B,WACXx6B,EAAW5rM,SAGR,GAOT,YAAA0iN,MAAA,SAAM36K,GACJ,GAAItyE,KAAKuuQ,WAAY,CACnB,IAAM,EAASn+P,EAAepQ,KAAKyuQ,mBAAoB,CAAC,EAAG,IACrD0C,EAAa,IAAMnxQ,KAAK0/M,WAC9BptI,EAAQi/B,OACRj/B,EAAQkD,UAAU,EAAO,GAAK27L,EAAY,EAAO,GAAKA,GACtD7+L,EAAQ66H,OAAOntM,KAAK2uQ,eAEtBr8L,EAAQmU,OACJzmF,KAAKuuQ,YACPj8L,EAAQqoH,WASZ,YAAAq1E,gBAAA,SAAgB19L,EAAS6xL,GACvB7xL,EAAqB,YACoC6xL,EAAY,GACrE7xL,EAAQq8K,UAAmCwV,EAAY,GACvD7xL,EAAQo5K,QAAwCyY,EAAY,GAC5D7xL,EAAQy5K,SAA0CoY,EAAY,GAC9D7xL,EAAQ25K,WAAoCkY,EAAY,GACpD7xL,EAAQo6K,cACVp6K,EAAQu5K,eAAwCsY,EAAY,GAC5D7xL,EAAQo6K,YAA0CyX,EAAY,MAYlE,YAAAiN,6BAAA,SAA6Bh4P,EAAM6vP,EAASD,EAAWE,GACrD,IAAMZ,EAAYtoQ,KAAKgoQ,WAAWiB,GAE5B18N,EAAQvsC,KAAK6uQ,YAAYz1P,EAAM6vP,EAASC,EAASF,GAEjDX,EAAcroQ,KAAK8nQ,aAAakB,GAChCtpD,EAAa1/M,KAAK0/M,WAClB0uD,EAAQD,GACZrtQ,MAAMC,QAAQqY,GAAQA,EAAK,GAAKA,EAChCkvP,EAAU1oI,WAAa+4D,IAEnBwwE,EAAW9B,GAAWiB,EAAUzoI,cAAgB+4D,IAChD7sJ,EACJs8N,GAAeA,EAAY1Z,UAAY0Z,EAAY1Z,UAAY,EASjE,MAAO,CACLpiN,MAAOA,EACPk/J,QAPc2iE,GADF7hO,EAAMja,MAAQotL,EAAa,EAAI4oD,EAAU/9N,MAAM,IAC7B,GAAK,GAAM6jO,GAASriO,EAQlD2/J,QANCy9D,EAAW58N,EAAMha,OAAUmtL,EAC5B,GAAK,GAAMypD,GAAYp9N,IAuB3B,YAAAslO,SAAA,SACE/+L,EACA0+L,EACAh4H,EACAwf,EACA43G,EACAkB,EACAC,EACAC,GAGA,IAAIC,EhLriBqB7rF,EAAYC,EgLsiBjC7lL,KAAK0uQ,mBAAqBlsN,EAAOw2F,EAAWh5I,KAAKyuQ,oBACnDgD,EAAmBzxQ,KAAK0uQ,mBAEnB1uQ,KAAK0uQ,oBACR1uQ,KAAK0uQ,kBAAoB,IAE3B+C,EAAmBnmE,GACjBtrM,KAAKoK,YACL,EACApK,KAAKoK,YAAY/G,OACjB,EACA21I,EACAh5I,KAAK0uQ,mBhLljBgB9oF,EgLojBD5lL,KAAKyuQ,mBhLpjBQ5oF,EgLojBY7sC,EhLnjBnD4sC,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,GAC3BD,EAAW,GAAKC,EAAW,IgLqlBzB,IArCA,IAGI7gI,EACAymJ,EACFC,EACAgmE,EACAC,EACAC,EACAC,EACA9kP,EACA3T,EACA6vP,EACAD,EACAE,EAqBwDzlQ,EACtDkqB,EAAGC,EAAGkkP,EApCN5vQ,EAAI,EACFgiB,EAAKs0I,EAAan1J,OACpB6+B,EAAI,EAaJ6vO,EAAc,EACdC,EAAgB,EAChBC,EAAsB,KACtBC,EAAwB,KACtBC,EAAkBnyQ,KAAKwuQ,iBACvB4D,EAAepyQ,KAAK2uQ,cACpB0D,EACJ9wQ,KAAKirC,MAAgD,KAA1CjrC,KAAKqnE,OAAOowE,EAAU,GAAIA,EAAU,KAAc,KAEzDnkI,EAAuD,CAC3Dy9D,QAASA,EACTotI,WAAY1/M,KAAK0/M,WACjBv7J,WAAYnkD,KAAKmkD,WACjBkQ,SAAU+9M,GAKNE,EACJtyQ,KAAKw4J,cAAgBA,GAAgBx4J,KAAKsuQ,SAAW,EAAI,IAGpDpsQ,EAAIgiB,GAAI,CACb,IAAMigP,EAAc3rG,EAAat2J,GAIjC,OAFEiiQ,EAAY,IAGZ,KAAK,kBACH1gQ,EACE0gQ,EAAY,GAEd2N,EAAkB3N,EAAY,GACzB1gQ,EAAQtC,mBAGOiD,IAAlBmtQ,GACCnuN,GAAWmuN,EAAeO,EAAgB/qP,eAIzC7kB,EAFFA,EAA2BiiQ,EAAY,GAAM,EAL7CjiQ,EAA2BiiQ,EAAY,GASzC,MACF,KAAK,cACC4N,EAAcO,IAChBtyQ,KAAKitP,MAAM36K,GACXy/L,EAAc,GAEZC,EAAgBM,IAClBhgM,EAAQ/8D,SACRy8P,EAAgB,GAEbD,GAAgBC,IACnB1/L,EAAQ0sD,YACR0yI,EAAQp6M,IACRq6M,EAAQr6M,OAERp1D,EACF,MACF,KAAK,UAEH,IAAMyjJ,EAAK8rH,EADXvvO,EAA2BiiO,EAAY,IAEjCv+G,EAAK6rH,EAAiBvvO,EAAI,GAG1B2gB,EAFK4uN,EAAiBvvO,EAAI,GAEhByjH,EACV7iG,EAFK2uN,EAAiBvvO,EAAI,GAEhB0jH,EACVtxI,EAAI/S,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,GACnCwvB,EAAQg3C,OAAOq8B,EAAKrxI,EAAGsxI,GACvBtzE,EAAQ6vK,IAAIx8F,EAAIC,EAAItxI,EAAG,EAAG,EAAI/S,KAAKS,IAAI,KACrCE,EACF,MACF,KAAK,cACHowE,EAAQy8K,cACN7sP,EACF,MACF,KAAK,UACHggC,EAA2BiiO,EAAY,GACvCn/M,EAAKm/M,EAAY,GACjB,IAAM7jQ,EAEF6jQ,EAAY,GAEVhhD,EAAWghD,EAAY,GACvBh7M,EAA2B,GAAtBg7M,EAAY9gQ,OAAc8gQ,EAAY,QAAK//P,EACtDyQ,EAAMvU,SAAWA,EACjBuU,EAAMpR,QAAUA,EACVvB,KAAKiwQ,IACTA,EAAgBjwQ,GAAK,IAEvB,IAAMxC,EAASyyQ,EAAgBjwQ,GAC3BinD,EACFA,EAAGsoN,EAAkBvvO,EAAG8iB,EAAI,EAAGtlD,IAE/BA,EAAO,GAAK+xQ,EAAiBvvO,GAC7BxiC,EAAO,GAAK+xQ,EAAiBvvO,EAAI,GACjCxiC,EAAO2D,OAAS,GAElB8/M,EAASzjN,EAAQmV,KACf3S,EACF,MACF,KAAK,cACHggC,EAA2BiiO,EAAY,GACvCn/M,EAA4Bm/M,EAAY,GACxCp3O,EAEIo3O,EAAY,GAIhB14D,EAAiC04D,EAAY,GAC7Cz4D,EAAiCy4D,EAAY,GAC7C,IAAI5xO,EAAgC4xO,EAAY,GAC1C3wP,EAAiC2wP,EAAY,GAC7C7pE,EAAiC6pE,EAAY,GAC7C5pE,EAAiC4pE,EAAY,GAC7ClwC,GAAyCkwC,EAAY,IACvD9vM,GAAkC8vM,EAAY,IAC5C55N,GACJ45N,EAAY,IAEV7xO,GAA+B6xO,EAAY,IACzCvc,GAEFuc,EAAY,IAEVoO,GAEFpO,EAAY,IAGhB,IAAKp3O,GAASo3O,EAAY9gQ,QAAU,GAAI,CAEtC+V,EAA8B+qP,EAAY,IAC1C8E,EAAiC9E,EAAY,IAC7C6E,EAAmC7E,EAAY,IAC/C+E,EAAiC/E,EAAY,IAC7C,IAAMqO,GAAkBxyQ,KAAKoxQ,6BAC3Bh4P,EACA6vP,EACAD,EACAE,GAEFn8O,EAAQylP,GAAgBjmO,MACxB43N,EAAY,GAAKp3O,EACjB,IAAMw8O,GAAqCpF,EAAY,IACvD14D,GAAW+mE,GAAgB/mE,QAAU89D,IAAevpQ,KAAK0/M,WACzDykD,EAAY,GAAK14D,EACjB,IAAM+9D,GAAqCrF,EAAY,IACvDz4D,GAAW8mE,GAAgB9mE,QAAU89D,IAAexpQ,KAAK0/M,WACzDykD,EAAY,GAAKz4D,EACjBn5K,EAASxF,EAAMwF,OACf4xO,EAAY,GAAK5xO,EACjBD,GAAQvF,EAAMuF,MACd6xO,EAAY,IAAM7xO,GAGpB,IAAIi2O,QAAc,EACdpE,EAAY9gQ,OAAS,KACvBklQ,GAAwCpE,EAAY,KAGtD,IAAIxhH,QAAO,EAAEquG,QAAc,EAAEE,QAAgB,EACzCiT,EAAY9gQ,OAAS,IACvBs/I,GAAwCwhH,EAAY,IACpDnT,GAAyCmT,EAAY,IACrDjT,GAA2CiT,EAAY,MAEvDxhH,GAAUk2C,GACVm4D,IAAiB,EACjBE,IAAmB,GAGjBj9B,IAAkBo+C,EAEpBh+M,IAAY+9M,EACFn+C,IAAmBo+C,IAE7Bh+M,IAAY+9M,GAGd,IADA,IAAIK,GAAa,EACVvwO,EAAI8iB,EAAI9iB,GAAK,EAClB,KACEqmO,IACAA,GAAekK,MAAgBngP,GAAQtyB,KAAK0/M,YAF9C,CAMA,IAmBM1mI,GAAO,CACX1G,EACA0+L,EACAjkP,EAtBIopN,GAAan2O,KAAKiwQ,iCACtBljP,EAAMuF,MACNvF,EAAMwF,OACNk/O,EAAiBvvO,GACjBuvO,EAAiBvvO,EAAI,GACrB5P,GACAC,EACAk5K,EACAC,EACApR,EACAC,EACAlmI,GACA9pB,GACA6lO,EACAztH,GACAquG,IAAkBE,GAClBztP,GAQA+P,EACAw9O,GAC4B,EACxB,KACJE,GAC4B,EACxB,MAEN,GAAIsgB,EAAmB,CACrB,GAAsB,SAAlB5pB,GAEF,SACK,GAAsB,aAAlBA,GAA8B,CAEvC4pB,EAAkBkB,OAAOv8B,GAAW83B,cACpC,SAEA,IAAI0E,QAAS,EACTC,QAAiB,EACrB,GAAIL,GAAwB,CAC1B,IAAMzoP,GAAQk7B,EAAK9iB,EACnB,IAAKqwO,GAAuBzoP,IAAQ,CAElCyoP,GAAuBzoP,IAASkvD,GAEhC,SAKF,GAHA25L,GAAYJ,GAAuBzoP,WAC5ByoP,GAAuBzoP,IAC9B8oP,GAAoB7E,GAAgB4E,IAChCnB,EAAkBqB,SAASD,IAC7B,SAGJ,GAAIpB,EAAkBqB,SAAS18B,GAAW83B,cACxC,SAEE0E,KAEFnB,EAAkBkB,OAAOE,IAEzB5yQ,KAAK+wQ,oBAAoB3gQ,MAAMpQ,KAAM2yQ,KAEvCnB,EAAkBkB,OAAOv8B,GAAW83B,cAGxCjuQ,KAAK+wQ,oBAAoB3gQ,MAAMpQ,KAAMg5E,MAErC92E,EACF,MACF,KAAK,cACH,IAAMoiL,GAA+B6/E,EAAY,GAC3Cr6L,GAA6Bq6L,EAAY,GACzCgF,GAAkChF,EAAY,GAC9C3jD,GAAkC2jD,EAAY,GACpD+E,EAAiC/E,EAAY,GAC7C,IAAM3T,GAAkC2T,EAAY,GAC9C2O,GAA2C3O,EAAY,GACvDxsD,GAAiCwsD,EAAY,GACnD6E,EAAmC7E,EAAY,GAC/C,IAAMp4N,GAAqCo4N,EAAY,IACvD/qP,EAA8B+qP,EAAY,IAC1C8E,EAAiC9E,EAAY,IAC7C,IAAM4O,GAAkB,CACC5O,EAAY,IACZA,EAAY,KAG/BmE,GAAYtoQ,KAAKgoQ,WAAWiB,GAC5BtpI,GAAO2oI,GAAU3oI,KACjB2pI,GAAY,CAChBhB,GAAU/9N,MAAM,GAAKuoO,GACrBxK,GAAU/9N,MAAM,GAAKuoO,IAGnBE,QAAY,EACZrzI,MAAQ3/H,KAAK4uQ,QACfoE,GAAehzQ,KAAK4uQ,QAAQjvI,KAE5BqzI,GAAe,GACfhzQ,KAAK4uQ,QAAQjvI,IAAQqzI,IAGvB,IAAMC,GAAa92C,GAAiBs1C,EAAkBntF,GAAOx6G,GAAK,GAC5DopM,GACJ3xQ,KAAKyoB,IAAIs/O,GAAU,IACnBnvE,GAAyBx6D,GAAMvmH,EAAM45P,IACvC,GAAIxyD,IAAY0yD,IAAcD,GAAY,CACxC,IAAMrzI,GAAY5/H,KAAKgoQ,WAAWiB,GAASrpI,UAErC9xG,GAAQi/O,GACZ0E,EACAntF,GACAx6G,GACA,EACA1wD,GANc65P,GAAaC,IAAc7L,GAAWznI,IAQpD4wH,GACAjvP,KAAKyoB,IAAIs/O,GAAU,IACnBnvE,GACAx6D,GACAqzI,GACAX,EAA4B,EAAIryQ,KAAK2uQ,eAEvCwE,EAAW,GAAIrlP,GAAO,CAEpB,IAAMkgP,GAAyB,GAC3BxlQ,QAAC,EAAE4qQ,QAAE,EAAExF,QAAK,EAAErhO,QAAK,EAAEyX,QAAI,EAC7B,GAAIglN,EACF,IAAKxgQ,GAAI,EAAG4qQ,GAAKtlP,GAAMzqB,OAAQmF,GAAI4qQ,KAAM5qQ,GAAG,CAE1ColQ,IADA5pN,GAAOl2B,GAAMtlB,KACuB,GACpC+jC,GAAQvsC,KAAK6uQ,YAAYjB,GAAO3E,EAAS,GAAID,GAC7Cv9D,EACyBznJ,GAAK,IAC3BslN,GAAU,GAAK,GAAKv9N,GAAcA,IACrC2/J,EACEy9D,GAAW58N,GAAMha,OACG,GAAlB,GAAM42O,IAAgBp9N,GAAcu9N,GAAU,GAC9CA,GAAU,GACZ3xD,GACF,IAAMw+B,GAAan2O,KAAKiwQ,iCACtB1jO,GAAMja,MACNia,GAAMha,OACNyxB,GAAK,GACLA,GAAK,GACLzX,GAAMja,MACNia,GAAMha,OACNk5K,EACAC,EACA,EACA,EACA1nJ,GAAK,GACL+uN,IACA,EACAl6E,IACA,EACAp1L,GAEF,GACE+tQ,GACAA,EAAkBqB,SAAS18B,GAAW83B,cAEtC,MAAMkF,EAERnF,GAAuB5lQ,KAAK,CAC1BkqE,EACA0+L,EACAzkO,GACA4pM,GACA,EACA,KACA,OAIN,GAAI+yB,EACF,IAAK1gQ,GAAI,EAAG4qQ,GAAKtlP,GAAMzqB,OAAQmF,GAAI4qQ,KAAM5qQ,GAAG,CAE1ColQ,IADA5pN,GAAOl2B,GAAMtlB,KACuB,GACpC+jC,GAAQvsC,KAAK6uQ,YAAYjB,GAAO3E,EAASC,EAAS,IAClDz9D,EAAiCznJ,GAAK,GACtC0nJ,EAAUy9D,GAAW58N,GAAMha,OAASolL,GAC9Bw+B,GAAan2O,KAAKiwQ,iCACtB1jO,GAAMja,MACNia,GAAMha,OACNyxB,GAAK,GACLA,GAAK,GACLzX,GAAMja,MACNia,GAAMha,OACNk5K,EACAC,EACA,EACA,EACA1nJ,GAAK,GACL+uN,IACA,EACAl6E,IACA,EACAp1L,GAEF,GACE+tQ,GACAA,EAAkBqB,SAAS18B,GAAW83B,cAEtC,MAAMkF,EAERnF,GAAuB5lQ,KAAK,CAC1BkqE,EACA0+L,EACAzkO,GACA4pM,GACA,EACA,KACA,OAIFq7B,GACFA,EAAkBp7I,KAChB43I,GAAuB1vQ,IAAIyvQ,KAG/B,IAAK,IAAI,GAAI,EAAG,GAAKC,GAAuB3qQ,OAAQ,GAAI,KAAM,GAC5DrD,KAAK+wQ,oBAAoB3gQ,MAAMpQ,KAAMguQ,GAAuB,QAIhE9rQ,EACF,MACF,KAAK,gBACH,QAA4BkC,IAAxBktQ,EAAmC,CAIrC,IAAM1sQ,GAAS0sQ,EAHf7tQ,EACE0gQ,EAAY,GAE8B2N,GAC5C,GAAIltQ,GACF,OAAOA,KAGT1C,EACF,MACF,KAAK,QACCowQ,EACFP,IAEA/xQ,KAAKitP,MAAM36K,KAEXpwE,EACF,MACF,KAAK,mBAYH,IAXAggC,EAA2BiiO,EAAY,GACvCn/M,EAA4Bm/M,EAAY,GACxCx2O,EAAI8jP,EAAiBvvO,GAGrB2vO,GAFAjkP,EAAI6jP,EAAiBvvO,EAAI,IAEX,GAAO,GADrB0vO,EAAUjkP,EAAI,GAAO,KAEN+jP,GAASG,IAAWF,IACjCr/L,EAAQg3C,OAAO37F,EAAGC,GAClB8jP,EAAQE,EACRD,EAAQE,GAEL3vO,GAAK,EAAGA,EAAI8iB,EAAI9iB,GAAK,EAGxB0vO,GAFAjkP,EAAI8jP,EAAiBvvO,IAEP,GAAO,EACrB2vO,GAFAjkP,EAAI6jP,EAAiBvvO,EAAI,IAEX,GAAO,EACjBA,GAAK8iB,EAAK,GAAK4sN,IAAWF,GAASG,IAAWF,IAChDr/L,EAAQ8sD,OAAOzxG,EAAGC,GAClB8jP,EAAQE,EACRD,EAAQE,KAGV3vQ,EACF,MACF,KAAK,kBACH+vQ,EAAsB9N,EACtBnkQ,KAAKuuQ,WAAapK,EAAY,GAE1B4N,IACF/xQ,KAAKitP,MAAM36K,GACXy/L,EAAc,EACVC,IACF1/L,EAAQ/8D,SACRy8P,EAAgB,IAIpB1/L,EAAQK,UAEJwxL,EAAY,KAEdjiQ,EACF,MACF,KAAK,oBACHgwQ,EAAwB/N,EACpB6N,IACF1/L,EAAQ/8D,SACRy8P,EAAgB,GAElBhyQ,KAAKgwQ,gBAAgB19L,EAAiC,KACpDpwE,EACF,MACF,KAAK,UACCowQ,EACFN,IAEA1/L,EAAQ/8D,WAERrT,EACF,MACF,UACIA,GAIJ6vQ,GACF/xQ,KAAKitP,MAAM36K,GAET0/L,GACF1/L,EAAQ/8D,UAaZ,YAAA89P,QAAA,SACE/gM,EACA0+L,EACAh4H,EACAo5H,EACAhC,EACAoB,GAEAxxQ,KAAK2uQ,cAAgByD,EACrBpyQ,KAAKqxQ,SACH/+L,EACA0+L,EACAh4H,EACAh5I,KAAKw4J,aACL43G,OACAhsQ,OACAA,EACAotQ,IAcJ,YAAA8B,oBAAA,SACEhhM,EACA0mE,EACAo5H,EACAd,EACAC,GAGA,OADAvxQ,KAAK2uQ,cAAgByD,EACdpyQ,KAAKqxQ,SACV/+L,EACA,EACA0mE,EACAh5I,KAAK0iQ,0BACL,EACA4O,EACAC,IAGN,EAznCA,GA2nCA,YC7tCA,IAAMgC,GAAQ,CAAC,UAAW,SAAU,aAAc,QAAS,OAAQ,WAEnE,cAaE,WACExqO,EACAob,EACAu7J,EACA4uD,EACAkF,EACAC,GAMAzzQ,KAAKiqQ,WAAalhO,EAMlB/oC,KAAK0zQ,UAAYpF,EAMjBtuQ,KAAKy/M,YAAcC,EAMnB1/M,KAAKkqQ,YAAc/lN,EAMnBnkD,KAAKm/P,cAAgBsU,EAMrBzzQ,KAAK2zQ,mBAAqB,GAM1B3zQ,KAAK4zQ,qBAAuB,KAM5B5zQ,KAAK6zQ,uBjLpDA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GiLsDrB7zQ,KAAK8zQ,iBAAiBN,GA+Q1B,OAxQE,YAAAl+P,KAAA,SAAKg9D,EAAS0mE,GACZ,IAAM+6H,EAAiB/zQ,KAAKg0Q,cAAch7H,GAC1C1mE,EAAQ0sD,YACR1sD,EAAQg3C,OAAOyqJ,EAAe,GAAIA,EAAe,IACjDzhM,EAAQ8sD,OAAO20I,EAAe,GAAIA,EAAe,IACjDzhM,EAAQ8sD,OAAO20I,EAAe,GAAIA,EAAe,IACjDzhM,EAAQ8sD,OAAO20I,EAAe,GAAIA,EAAe,IACjDzhM,EAAQh9D,QAQV,YAAAw+P,iBAAA,SAAiBN,GACf,IAAK,IAAM9mO,KAAU8mO,EAAiB,CACpC,IAAIS,EAAYj0Q,KAAK2zQ,mBAAmBjnO,QACtBtoC,IAAd6vQ,IACFA,EAAY,GACZj0Q,KAAK2zQ,mBAAmBjnO,GAAUunO,GAEpC,IAAMC,EAAsBV,EAAgB9mO,GAC5C,IAAK,IAAMg+N,KAAewJ,EAAqB,CAC7C,IAAM17G,EAAe07G,EAAoBxJ,GACzCuJ,EAAUvJ,GAAe,IAAI,GAC3B1qQ,KAAKkqQ,YACLlqQ,KAAKy/M,YACLz/M,KAAK0zQ,UACLl7G,MAUR,YAAA27G,aAAA,SAAaF,GACX,IAAK,IAAMvnO,KAAU1sC,KAAK2zQ,mBAExB,IADA,IAAM1xN,EAAajiD,KAAK2zQ,mBAAmBjnO,GAClCxqC,EAAI,EAAGgiB,EAAK+vP,EAAU5wQ,OAAQnB,EAAIgiB,IAAMhiB,EAC/C,GAAI+xQ,EAAU/xQ,KAAM+/C,EAClB,OAAO,EAIb,OAAO,GAaT,YAAAmzI,2BAAA,SACE3xG,EACAt/B,EACAkQ,EACAghI,EACA98J,EACA67O,GAGA,IAAMC,EAA6B,GADnCh/E,EAAe9zL,KAAKirC,MAAM6oJ,IACa,EACjCr8C,EAAYwtC,EAChBxmL,KAAK6zQ,uBACLx+E,EAAe,GACfA,EAAe,GACf,EAAIlxI,GACH,EAAIA,GACJkQ,GACAovB,EAAW,IACXA,EAAW,IAGR6wL,GAAct0Q,KAAK4zQ,qBACrBU,IACFt0Q,KAAK4zQ,qBAAuBv8E,GAC1Bg9E,EACAA,IAGJ,IAeIE,EAfEjiM,EAAUtyE,KAAK4zQ,qBAGnBthM,EAAQjV,OAAO/qC,QAAU+hP,GACzB/hM,EAAQjV,OAAO9qC,SAAW8hP,GAE1B/hM,EAAQjV,OAAO/qC,MAAQ+hP,EACvB/hM,EAAQjV,OAAO9qC,OAAS8hP,GACdC,GACVhiM,EAAQQ,UAAU,EAAG,EAAGuhM,EAAaA,QAOZjwQ,IAAvBpE,KAAKm/P,gBAEP/3E,GADAmtF,E/KJG,CAACv+M,EAAAA,EAAUA,EAAAA,GAAU,KAAW,K+KKPytB,GAC5B,EACE8wL,EACApwN,GAAcnkD,KAAKm/P,cAAgB9pE,GACnCk/E,IAIJ,IAEI7J,EAFE8J,EAsKH,SAA4B5zQ,GACjC,QAA2CwD,IAAvCqwQ,GAA2B7zQ,GAC7B,OAAO6zQ,GAA2B7zQ,GAMpC,IAHA,IAAMi0B,EAAgB,EAATj0B,EAAa,EACpB8zQ,EAAgB9zQ,EAASA,EACzB0kD,EAAY,IAAIxkD,MAAM4zQ,EAAgB,GACnCxyQ,EAAI,EAAGA,GAAKtB,IAAUsB,EAC7B,IAAK,IAAIoV,EAAI,EAAGA,GAAK1W,IAAU0W,EAAG,CAChC,IAAM0+K,EAAa9zL,EAAIA,EAAIoV,EAAIA,EAC/B,GAAI0+K,EAAa0+E,EACf,MAEF,IAAIrwN,EAAWiB,EAAU0wI,GACpB3xI,IACHA,EAAW,GACXiB,EAAU0wI,GAAc3xI,GAE1BA,EAASj8C,KAA4C,IAArCxH,EAASsB,GAAK2yB,GAAQj0B,EAAS0W,IAAU,GACrDpV,EAAI,GACNmiD,EAASj8C,KAA4C,IAArCxH,EAASsB,GAAK2yB,GAAQj0B,EAAS0W,IAAU,GAEvDA,EAAI,IACN+sC,EAASj8C,KAA4C,IAArCxH,EAASsB,GAAK2yB,GAAQj0B,EAAS0W,IAAU,GACrDpV,EAAI,GACNmiD,EAASj8C,KAA4C,IAArCxH,EAASsB,GAAK2yB,GAAQj0B,EAAS0W,IAAU,IAOjE,IADA,IAAMq9P,EAAa,GACHzwP,GAAPhiB,EAAI,EAAQojD,EAAUjiD,QAAQnB,EAAIgiB,IAAMhiB,EAC3CojD,EAAUpjD,IACZyyQ,EAAWvsQ,KAAI,MAAfusQ,EAAmBrvN,EAAUpjD,IAKjC,OADAuyQ,GAA2B7zQ,GAAU+zQ,EAC9BA,EA9MWC,CAAmBv/E,GASnC,SAASw/E,EAAgBpxQ,EAASnD,GAOhC,IANA,IAAMuyE,EAAYP,EAAQE,aACxB,EACA,EACA6hM,EACAA,GACAlwQ,KACO,EAAI,EAAG+f,EAAKswP,EAAQnxQ,OAAQ,EAAI6gB,EAAI,IAC3C,GAAI2uD,EAAU2hM,EAAQ,IAAM,EAAG,CAC7B,IACGJ,GACgB,UAAhB1J,GAA2C,SAAhBA,IACc,IAA1C0J,EAAoBprQ,QAAQvF,GAC5B,CACA,IAAMgE,GAAO+sQ,EAAQ,GAAK,GAAK,EACzB7mP,EAAI0nK,EAAgB5tL,EAAM4sQ,EAC1BzmP,EAAIynK,GAAiB5tL,EAAM4sQ,EAAe,GAC1C,EAAS97O,EAAS90B,EAASnD,EAAUqtB,EAAIA,EAAIC,EAAIA,GACvD,GAAI,EACF,OAAO,EAGX0kD,EAAQQ,UAAU,EAAG,EAAGuhM,EAAaA,GACrC,OAON,IAGInyQ,EAAGoV,EAAG28P,EAAWa,EAAUlwQ,EAHzBmwQ,EAAK51Q,OAAOD,KAAKc,KAAK2zQ,oBAAoBr1Q,IAAIqpB,QAIpD,IAHAotP,EAAG5qP,KAAK+5J,GAGHhiL,EAAI6yQ,EAAG1xQ,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CACnC,IAAMyoQ,EAAYoK,EAAG7yQ,GAAG+gB,WAExB,IADAgxP,EAAYj0Q,KAAK2zQ,mBAAmBhJ,GAC/BrzP,EAAIi8P,GAAMlwQ,OAAS,EAAGiU,GAAK,IAAKA,EAGnC,QAAiBlT,KADjB0wQ,EAAWb,EADXvJ,EAAc6I,GAAMj8P,OAGlB1S,EAASkwQ,EAASxB,oBAChBhhM,EACA0mE,EACA3kF,EACAwgN,EACAN,IAGA,OAAO3vQ,IAYjB,YAAAovQ,cAAA,SAAch7H,GACZ,IAAMjwG,EAAY/oC,KAAKiqQ,WACvB,IAAKlhO,EACH,OAAO,KAET,IAAM8+I,EAAO9+I,EAAU,GACjB++I,EAAO/+I,EAAU,GACjBg/I,EAAOh/I,EAAU,GACjBi/I,EAAOj/I,EAAU,GACjBgrO,EAAiB,CAAClsF,EAAMC,EAAMD,EAAMG,EAAMD,EAAMC,EAAMD,EAAMD,GAElE,OADAwjB,GAAYyoE,EAAgB,EAAG,EAAG,EAAG/6H,EAAW+6H,GACzCA,GAMT,YAAAlyE,QAAA,WACE,OAAO,GAAQ7hM,KAAK2zQ,qBAatB,YAAAN,QAAA,SACE/gM,EACA0+L,EACAh4H,EACAo5H,EACAhC,EACA4E,EACAxD,GAGA,IAAMuD,EAAK51Q,OAAOD,KAAKc,KAAK2zQ,oBAAoBr1Q,IAAIqpB,QACpDotP,EAAG5qP,KAAK+5J,GAIJlkL,KAAKiqQ,aACP33L,EAAQi/B,OACRvxG,KAAKsV,KAAKg9D,EAAS0mE,IAGrB,IACI92I,EAAGgiB,EAAI5M,EAAGypF,EAAI6pK,EAASC,EADrBoK,EAAeD,GAAsCzB,GAK3D,IAHI/B,GACFuD,EAAG7kP,UAEAhuB,EAAI,EAAGgiB,EAAK6wP,EAAG1xQ,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACvC,IAAMyoQ,EAAYoK,EAAG7yQ,GAAG+gB,WAExB,IADA2nP,EAAU5qQ,KAAK2zQ,mBAAmBhJ,GAC7BrzP,EAAI,EAAGypF,EAAKk0K,EAAa5xQ,OAAQiU,EAAIypF,IAAMzpF,EAAG,MAGlClT,KADfymQ,EAASD,EADWqK,EAAa39P,MAG/BuzP,EAAOwI,QACL/gM,EACA0+L,EACAh4H,EACAo5H,EACAhC,EACAoB,IAMJxxQ,KAAKiqQ,YACP33L,EAAQqoH,WAGd,EApVA,GA4VM85E,GAA6B,GAoDnC,Y,+dC7XA,eAUE,WACEniM,EACAotI,EACApkM,EACA09H,EACAo5H,EACA8C,EACAC,GAPF,MASE,cAAO,K,OAMP,EAAKC,SAAW9iM,EAMhB,EAAKmtI,YAAcC,EAMnB,EAAKzb,QAAU3oL,EAMf,EAAKi2M,WAAav4E,EAMlB,EAAK21H,cAAgByD,EAMrB,EAAKiD,kBAAoBH,EAMzB,EAAKI,eAAiBH,EAMtB,EAAKI,kBAAoB,KAMzB,EAAKC,oBAAsB,KAM3B,EAAKC,kBAAoB,KAMzB,EAAKC,WAAa,KAMlB,EAAKC,aAAe,KAMpB,EAAKzsB,OAAS,KAMd,EAAK0sB,cAAgB,EAMrB,EAAKC,cAAgB,EAMrB,EAAKC,aAAe,EAMpB,EAAKC,cAAgB,EAMrB,EAAKC,cAAgB,EAMrB,EAAKC,cAAgB,EAMrB,EAAKC,sBAAuB,EAM5B,EAAKC,eAAiB,EAMtB,EAAKC,YAAc,CAAC,EAAG,GAMvB,EAAKC,YAAc,EAMnB,EAAKhnB,MAAQ,GAMb,EAAKkY,aAAe,EAMpB,EAAKC,aAAe,EAMpB,EAAKC,qBAAsB,EAM3B,EAAKC,cAAgB,EAMrB,EAAK4O,WAAa,CAAC,EAAG,GAMtB,EAAK3O,eAAiB,KAMtB,EAAKE,iBAAmB,KAMxB,EAAKE,WAAa,KAMlB,EAAK2G,kBAAoB,GAMzB,EAAK6H,mBlLnOA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G,EkL0mCzB,OAtmCsC,QAyOpC,YAAAC,YAAA,SAAYjuF,EAAiBt2J,EAAQ63C,EAAK0+G,GACxC,GAAKxoL,KAAKkpP,OAAV,CAGA,IAAMuoB,EAAmBnmE,GACvB/iB,EACAt2J,EACA63C,EACA0+G,EACAxoL,KAAKuxN,WACLvxN,KAAK0uQ,mBAEDp8L,EAAUtyE,KAAKo1Q,SACfqB,EAAiBz2Q,KAAKu2Q,mBACtB/qL,EAAQlZ,EAAQktD,YACI,GAAtBx/H,KAAK+1Q,gBACPzjM,EAAQktD,YAAch0C,EAAQxrF,KAAK+1Q,eAErC,IAAI1hN,EAAWr0D,KAAKm2Q,eAChBn2Q,KAAKk2Q,uBACP7hN,GAAYr0D,KAAK2uQ,eAEnB,IAAK,IAAIzsQ,EAAI,EAAGgiB,EAAKutP,EAAiBpuQ,OAAQnB,EAAIgiB,EAAIhiB,GAAK,EAAG,CAC5D,IAAMyrB,EAAI8jP,EAAiBvvQ,GAAKlC,KAAK41Q,cAC/BhoP,EAAI6jP,EAAiBvvQ,EAAI,GAAKlC,KAAK61Q,cACzC,GACe,IAAbxhN,GACuB,GAAvBr0D,KAAKo2Q,YAAY,IACM,GAAvBp2Q,KAAKo2Q,YAAY,GACjB,CACA,IAAM75D,EAAU5uL,EAAI3tB,KAAK41Q,cACnBp5D,EAAU5uL,EAAI5tB,KAAK61Q,cACzBrvF,EACEiwF,EACAl6D,EACAC,EACA,EACA,EACAnoJ,GACCkoJ,GACAC,GAEHlqI,EAAQkoH,aAAapqL,MAAMkiE,EAASmkM,GACpCnkM,EAAQkD,UAAU+mI,EAASC,GAC3BlqI,EAAQ/nC,MAAMvqC,KAAKo2Q,YAAY,GAAIp2Q,KAAKo2Q,YAAY,IACpD9jM,EAAQa,UACNnzE,KAAKkpP,OACLlpP,KAAKg2Q,cACLh2Q,KAAKi2Q,cACLj2Q,KAAKq2Q,YACLr2Q,KAAK81Q,cACJ91Q,KAAK41Q,eACL51Q,KAAK61Q,cACN71Q,KAAKq2Q,YACLr2Q,KAAK81Q,cAEPxjM,EAAQkoH,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAEpCloH,EAAQa,UACNnzE,KAAKkpP,OACLlpP,KAAKg2Q,cACLh2Q,KAAKi2Q,cACLj2Q,KAAKq2Q,YACLr2Q,KAAK81Q,aACLnoP,EACAC,EACA5tB,KAAKq2Q,YACLr2Q,KAAK81Q,cAIe,GAAtB91Q,KAAK+1Q,gBACPzjM,EAAQktD,YAAch0C,KAW1B,YAAAkrL,UAAA,SAAUnuF,EAAiBt2J,EAAQ63C,EAAK0+G,GACtC,GAAKxoL,KAAK+nQ,YAA6B,KAAf/nQ,KAAKqvP,MAA7B,CAGIrvP,KAAK2nQ,gBACP3nQ,KAAK22Q,qBAAqB32Q,KAAK2nQ,gBAE7B3nQ,KAAK6nQ,kBACP7nQ,KAAK42Q,uBAAuB52Q,KAAK6nQ,kBAEnC7nQ,KAAK62Q,qBAAqB72Q,KAAK+nQ,YAC/B,IAAM0J,EAAmBnmE,GACvB/iB,EACAt2J,EACA63C,EACA0+G,EACAxoL,KAAKuxN,WACLvxN,KAAK0uQ,mBAEDp8L,EAAUtyE,KAAKo1Q,SACjB/gN,EAAWr0D,KAAK0nQ,cAIpB,IAHI1nQ,KAAKynQ,sBACPpzM,GAAYr0D,KAAK2uQ,eAEZ18O,EAAS63C,EAAK73C,GAAUu2J,EAAQ,CACrC,IAAM76J,EAAI8jP,EAAiBx/O,GAAUjyB,KAAKunQ,aACpC35O,EAAI6jP,EAAiBx/O,EAAS,GAAKjyB,KAAKwnQ,aAC9C,GACe,IAAbnzM,GACsB,GAAtBr0D,KAAKs2Q,WAAW,IACM,GAAtBt2Q,KAAKs2Q,WAAW,GAChB,CACA,IAAMG,EAAiBjwF,EACrBxmL,KAAKu2Q,mBACL5oP,EACAC,EACA,EACA,EACAymC,GACC1mC,GACAC,GAEH0kD,EAAQkoH,aAAapqL,MAAMkiE,EAASmkM,GACpCnkM,EAAQkD,UAAU7nD,EAAGC,GACrB0kD,EAAQ/nC,MAAMvqC,KAAKs2Q,WAAW,GAAIt2Q,KAAKs2Q,WAAW,IAC9Ct2Q,KAAK6nQ,kBACPv1L,EAAQwkM,WAAW92Q,KAAKqvP,MAAO,EAAG,GAEhCrvP,KAAK2nQ,gBACPr1L,EAAQwtD,SAAS9/H,KAAKqvP,MAAO,EAAG,GAElC/8K,EAAQkoH,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAEhCx6L,KAAK6nQ,kBACPv1L,EAAQwkM,WAAW92Q,KAAKqvP,MAAO1hO,EAAGC,GAEhC5tB,KAAK2nQ,gBACPr1L,EAAQwtD,SAAS9/H,KAAKqvP,MAAO1hO,EAAGC,MAexC,YAAAmpP,cAAA,SAAcxuF,EAAiBt2J,EAAQ63C,EAAK0+G,EAAQx7K,GAClD,IAAMslE,EAAUtyE,KAAKo1Q,SACf3D,EAAmBnmE,GACvB/iB,EACAt2J,EACA63C,EACA0+G,EACAxoL,KAAKuxN,WACLvxN,KAAK0uQ,mBAEPp8L,EAAQg3C,OAAOmoJ,EAAiB,GAAIA,EAAiB,IACrD,IAAIpuQ,EAASouQ,EAAiBpuQ,OAC1B2J,IACF3J,GAAU,GAEZ,IAAK,IAAInB,EAAI,EAAGA,EAAImB,EAAQnB,GAAK,EAC/BowE,EAAQ8sD,OAAOqyI,EAAiBvvQ,GAAIuvQ,EAAiBvvQ,EAAI,IAK3D,OAHI8K,GACFslE,EAAQy8K,YAEHjlL,GAWT,YAAAktM,WAAA,SAAWzuF,EAAiBt2J,EAAQ2gJ,EAAM4V,GACxC,IAAK,IAAItmL,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C+vB,EAASjyB,KAAK+2Q,cACZxuF,EACAt2J,EACA2gJ,EAAK1wK,GACLsmL,GACA,GAGJ,OAAOv2J,GAUT,YAAA+uO,WAAA,SAAW1gQ,GACT,GAAK8iD,GAAWpjD,KAAKikM,QAAS3jM,EAASymB,aAAvC,CAGA,GAAI/mB,KAAK01Q,YAAc11Q,KAAK21Q,aAAc,CACpC31Q,KAAK01Q,YACP11Q,KAAK22Q,qBAAqB32Q,KAAK01Q,YAE7B11Q,KAAK21Q,cACP31Q,KAAK42Q,uBAAuB52Q,KAAK21Q,cAEnC,IAAMlE,E1H1JL,SAAyBwF,EAAgBj+H,EAAWuyD,GACzD,IAAMhjB,EAAkB0uF,EAAej0N,qBACvC,GAAKulI,EAEE,CACL,IAAMC,EAASyuF,EAAejpE,YAC9B,OAAO1C,GACL/iB,EACA,EACAA,EAAgBllL,OAChBmlL,EACAxvC,EACAuyD,GATF,OAAO,K0HuJoB2rE,CACvB52Q,EACAN,KAAKuxN,WACLvxN,KAAK0uQ,mBAED7rN,EAAK4uN,EAAiB,GAAKA,EAAiB,GAC5C3uN,EAAK2uN,EAAiB,GAAKA,EAAiB,GAC5C7wQ,EAASW,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,GAClCwvB,EAAUtyE,KAAKo1Q,SACrB9iM,EAAQ0sD,YACR1sD,EAAQ6vK,IACNsvB,EAAiB,GACjBA,EAAiB,GACjB7wQ,EACA,EACA,EAAIW,KAAKS,IAEPhC,KAAK01Q,YACPpjM,EAAQmU,OAENzmF,KAAK21Q,cACPrjM,EAAQ/8D,SAGO,KAAfvV,KAAKqvP,OACPrvP,KAAK02Q,UAAUp2Q,EAASY,YAAa,EAAG,EAAG,KAW/C,YAAAwE,SAAA,SAASC,GACP3F,KAAKiiQ,mBAAmBt8P,EAAM8nP,UAAW9nP,EAAMgoP,aAC/C3tP,KAAKkiQ,cAAcv8P,EAAMunB,YACzBltB,KAAKoiQ,aAAaz8P,EAAM2a,YAM1B,YAAAk6K,aAAA,SAAaxhD,GACXh5I,KAAKuxN,WAAav4E,GAUpB,YAAA+nH,aAAA,SAAazgQ,GAEX,OADaA,EAAS2J,WAEpB,IAAK,QACHjK,KAAK2+J,UACkD,GAEvD,MACF,IAAK,aACH3+J,KAAKqhQ,eACuD,GAE5D,MACF,IAAK,UACHrhQ,KAAK8hQ,YACoD,GAEzD,MACF,IAAK,aACH9hQ,KAAKyhQ,eACuD,GAE5D,MACF,IAAK,kBACHzhQ,KAAKuhQ,oBAC4D,GAIjE,MACF,IAAK,eACHvhQ,KAAK2hQ,iBACyD,GAE9D,MACF,IAAK,qBACH3hQ,KAAKmhQ,uBAC+D,GAIpE,MACF,IAAK,SACHnhQ,KAAKghQ,WACmD,KAiB9D,YAAAE,YAAA,SAAYz9P,EAASkC,GACnB,IAAMrF,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GACxCnD,GAAa8iD,GAAWpjD,KAAKikM,QAAS3jM,EAASymB,eAGpD/mB,KAAK0F,SAASC,GACd3F,KAAK+gQ,aAAazgQ,KASpB,YAAA6gQ,uBAAA,SAAuB7gQ,GAErB,IADA,IAAM83D,EAAa93D,EAASy/N,qBACnB79N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChDlC,KAAK+gQ,aAAa3oM,EAAWl2D,KAUjC,YAAAy8J,UAAA,SAAUr+J,GACJN,KAAKq1Q,oBACP/0Q,EACEA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAIX,IAAM/sF,EAAkBjoL,EAAS0iD,qBAC3BwlI,EAASloL,EAAS0tM,YACpBhuM,KAAKkpP,QACPlpP,KAAKw2Q,YAAYjuF,EAAiB,EAAGA,EAAgBllL,OAAQmlL,GAE5C,KAAfxoL,KAAKqvP,OACPrvP,KAAK02Q,UAAUnuF,EAAiB,EAAGA,EAAgBllL,OAAQmlL,IAU/D,YAAAi5E,eAAA,SAAenhQ,GACTN,KAAKq1Q,oBACP/0Q,EACEA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAIX,IAAM/sF,EAAkBjoL,EAAS0iD,qBAC3BwlI,EAASloL,EAAS0tM,YACpBhuM,KAAKkpP,QACPlpP,KAAKw2Q,YAAYjuF,EAAiB,EAAGA,EAAgBllL,OAAQmlL,GAE5C,KAAfxoL,KAAKqvP,OACPrvP,KAAK02Q,UAAUnuF,EAAiB,EAAGA,EAAgBllL,OAAQmlL,IAU/D,YAAA64E,eAAA,SAAe/gQ,GASb,GARIN,KAAKq1Q,oBACP/0Q,EACEA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAINlyN,GAAWpjD,KAAKikM,QAAS3jM,EAASymB,aAAvC,CAGA,GAAI/mB,KAAK21Q,aAAc,CACrB31Q,KAAK42Q,uBAAuB52Q,KAAK21Q,cACjC,IAAMrjM,EAAUtyE,KAAKo1Q,SACf7sF,EAAkBjoL,EAAS0iD,qBACjCsvB,EAAQ0sD,YACRh/H,KAAK+2Q,cACHxuF,EACA,EACAA,EAAgBllL,OAChB/C,EAAS0tM,aACT,GAEF17H,EAAQ/8D,SAEV,GAAmB,KAAfvV,KAAKqvP,MAAc,CACrB,IAAM8nB,EAAe72Q,EAASu8N,kBAC9B78N,KAAK02Q,UAAUS,EAAc,EAAG,EAAG,MAUvC,YAAA5V,oBAAA,SAAoBjhQ,GACdN,KAAKq1Q,oBACP/0Q,EAEIA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAIb,IAAM8B,EAAiB92Q,EAASymB,YAChC,GAAKq8B,GAAWpjD,KAAKikM,QAASmzE,GAA9B,CAGA,GAAIp3Q,KAAK21Q,aAAc,CACrB31Q,KAAK42Q,uBAAuB52Q,KAAK21Q,cACjC,IAAMrjM,EAAUtyE,KAAKo1Q,SACf7sF,EAAkBjoL,EAAS0iD,qBAC7B/wB,EAAS,EACP2gJ,EAAqCtyK,EAAS+yM,UAC9C7qB,EAASloL,EAAS0tM,YACxB17H,EAAQ0sD,YACR,IAAK,IAAI98H,EAAI,EAAGgiB,EAAK0uJ,EAAKvvK,OAAQnB,EAAIgiB,IAAMhiB,EAC1C+vB,EAASjyB,KAAK+2Q,cACZxuF,EACAt2J,EACA2gJ,EAAK1wK,GACLsmL,GACA,GAGJl2G,EAAQ/8D,SAEV,GAAmB,KAAfvV,KAAKqvP,MAAc,CACrB,IAAMgoB,EAAgB/2Q,EAASg9N,mBAC/Bt9N,KAAK02Q,UAAUW,EAAe,EAAGA,EAAch0Q,OAAQ,MAU3D,YAAAy+P,YAAA,SAAYxhQ,GASV,GARIN,KAAKq1Q,oBACP/0Q,EACEA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAINlyN,GAAWpjD,KAAKikM,QAAS3jM,EAASymB,aAAvC,CAGA,GAAI/mB,KAAK21Q,cAAgB31Q,KAAK01Q,WAAY,CACpC11Q,KAAK01Q,YACP11Q,KAAK22Q,qBAAqB32Q,KAAK01Q,YAE7B11Q,KAAK21Q,cACP31Q,KAAK42Q,uBAAuB52Q,KAAK21Q,cAEnC,IAAMrjM,EAAUtyE,KAAKo1Q,SACrB9iM,EAAQ0sD,YACRh/H,KAAKg3Q,WACH12Q,EAAS8yM,6BACT,EAC8B9yM,EAAS+yM,UACvC/yM,EAAS0tM,aAEPhuM,KAAK01Q,YACPpjM,EAAQmU,OAENzmF,KAAK21Q,cACPrjM,EAAQ/8D,SAGZ,GAAmB,KAAfvV,KAAKqvP,MAAc,CACrB,IAAMioB,EAAoBh3Q,EAASgzM,uBACnCtzM,KAAK02Q,UAAUY,EAAmB,EAAG,EAAG,MAS5C,YAAA3V,iBAAA,SAAiBrhQ,GASf,GARIN,KAAKq1Q,oBACP/0Q,EACEA,EAASosM,oBACP1sM,KAAKq1Q,kBACLr1Q,KAAKs1Q,iBAINlyN,GAAWpjD,KAAKikM,QAAS3jM,EAASymB,aAAvC,CAGA,GAAI/mB,KAAK21Q,cAAgB31Q,KAAK01Q,WAAY,CACpC11Q,KAAK01Q,YACP11Q,KAAK22Q,qBAAqB32Q,KAAK01Q,YAE7B11Q,KAAK21Q,cACP31Q,KAAK42Q,uBAAuB52Q,KAAK21Q,cAEnC,IAAMrjM,EAAUtyE,KAAKo1Q,SACf7sF,EAAkBjoL,EAAS8yM,6BAC7BnhL,EAAS,EACPq+K,EAAQhwM,EAAS+9N,WACjB71C,EAASloL,EAAS0tM,YACxB17H,EAAQ0sD,YACR,IAAK,IAAI98H,EAAI,EAAGgiB,EAAKosL,EAAMjtM,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAM0wK,EAAO09B,EAAMpuM,GACnB+vB,EAASjyB,KAAKg3Q,WAAWzuF,EAAiBt2J,EAAQ2gJ,EAAM4V,GAEtDxoL,KAAK01Q,YACPpjM,EAAQmU,OAENzmF,KAAK21Q,cACPrjM,EAAQ/8D,SAGZ,GAAmB,KAAfvV,KAAKqvP,MAAc,CACrB,IAAMkoB,EAAqBj3Q,EAASg+N,wBACpCt+N,KAAK02Q,UAAUa,EAAoB,EAAGA,EAAmBl0Q,OAAQ,MAQrE,YAAAszQ,qBAAA,SAAqBvO,GACnB,IAAM91L,EAAUtyE,KAAKo1Q,SACfoC,EAAmBx3Q,KAAKu1Q,kBACzBiC,EAMCA,EAAiB7kM,WAAay1L,EAAUz1L,YAC1C6kM,EAAiB7kM,UAAYy1L,EAAUz1L,UACvCL,EAAQK,UAAYy1L,EAAUz1L,YAPhCL,EAAQK,UAAYy1L,EAAUz1L,UAC9B3yE,KAAKu1Q,kBAAoB,CACvB5iM,UAAWy1L,EAAUz1L,aAc3B,YAAAikM,uBAAA,SAAuBvO,GACrB,IAAM/1L,EAAUtyE,KAAKo1Q,SACfqC,EAAqBz3Q,KAAKw1Q,oBAC3BiC,GAoBCA,EAAmB/rB,SAAW2c,EAAY3c,UAC5C+rB,EAAmB/rB,QAAU2c,EAAY3c,QACzCp5K,EAAQo5K,QAAU2c,EAAY3c,SAE5Bp5K,EAAQo6K,cACLlqM,EAAOi1N,EAAmBnwM,SAAU+gM,EAAY/gM,WACnDgL,EAAQo6K,YACL+qB,EAAmBnwM,SAAW+gM,EAAY/gM,UAG3CmwM,EAAmB5rB,gBAAkBwc,EAAYxc,iBACnD4rB,EAAmB5rB,eAAiBwc,EAAYxc,eAChDv5K,EAAQu5K,eAAiBwc,EAAYxc,iBAGrC4rB,EAAmB1rB,UAAYsc,EAAYtc,WAC7C0rB,EAAmB1rB,SAAWsc,EAAYtc,SAC1Cz5K,EAAQy5K,SAAWsc,EAAYtc,UAE7B0rB,EAAmB9oB,WAAa0Z,EAAY1Z,YAC9C8oB,EAAmB9oB,UAAY0Z,EAAY1Z,UAC3Cr8K,EAAQq8K,UAAY0Z,EAAY1Z,WAE9B8oB,EAAmBxrB,YAAcoc,EAAYpc,aAC/CwrB,EAAmBxrB,WAAaoc,EAAYpc,WAC5C35K,EAAQ25K,WAAaoc,EAAYpc,YAE/BwrB,EAAmBx4I,aAAeopI,EAAYppI,cAChDw4I,EAAmBx4I,YAAcopI,EAAYppI,YAC7C3sD,EAAQ2sD,YAAcopI,EAAYppI,eAhDpC3sD,EAAQo5K,QAAU2c,EAAY3c,QAC1Bp5K,EAAQo6K,cACVp6K,EAAQo6K,YAAY2b,EAAY/gM,UAChCgL,EAAQu5K,eAAiBwc,EAAYxc,gBAEvCv5K,EAAQy5K,SAAWsc,EAAYtc,SAC/Bz5K,EAAQq8K,UAAY0Z,EAAY1Z,UAChCr8K,EAAQ25K,WAAaoc,EAAYpc,WACjC35K,EAAQ2sD,YAAcopI,EAAYppI,YAClCj/H,KAAKw1Q,oBAAsB,CACzB9pB,QAAS2c,EAAY3c,QACrBpkL,SAAU+gM,EAAY/gM,SACtBukL,eAAgBwc,EAAYxc,eAC5BE,SAAUsc,EAAYtc,SACtB4C,UAAW0Z,EAAY1Z,UACvB1C,WAAYoc,EAAYpc,WACxBhtH,YAAaopI,EAAYppI,eAyC/B,YAAA43I,qBAAA,SAAqBvO,GACnB,IAAMh2L,EAAUtyE,KAAKo1Q,SACfsC,EAAmB13Q,KAAKy1Q,kBACxB71I,EAAY0oI,EAAU1oI,UACxB0oI,EAAU1oI,UACV+4D,GACC++E,GAYCA,EAAiB/3I,MAAQ2oI,EAAU3oI,OACrC+3I,EAAiB/3I,KAAO2oI,EAAU3oI,KAClCrtD,EAAQqtD,KAAO2oI,EAAU3oI,MAEvB+3I,EAAiB93I,WAAaA,IAChC83I,EAAiB93I,UAA2C,EAC5DttD,EAAQstD,UAA2C,GAEjD83I,EAAiB73I,cAAgByoI,EAAUzoI,eAC7C63I,EAAiB73I,aACfyoI,EAAsB,aAExBh2L,EAAQutD,aACNyoI,EAAsB,gBAxB1Bh2L,EAAQqtD,KAAO2oI,EAAU3oI,KACzBrtD,EAAQstD,UAA2C,EACnDttD,EAAQutD,aACNyoI,EAAsB,aAExBtoQ,KAAKy1Q,kBAAoB,CACvB91I,KAAM2oI,EAAU3oI,KAChBC,UAAWA,EACXC,aAAcyoI,EAAUzoI,gBA6B9B,YAAAoiI,mBAAA,SAAmBtvL,EAAWssD,GAA9B,WACE,GAAKtsD,EAEE,CACL,IAAMyxL,EAAiBzxL,EAAUo7E,WACjC/tJ,KAAK01Q,WAAa,CAChB/iM,UAAWo6K,GACTqX,GAAkC9rE,UALtCt4L,KAAK01Q,WAAa,KASpB,GAAKz2I,EAEE,CACL,IAAMolI,EAAmBplI,EAAY8uB,WAC/Bu2G,EAAqBrlI,EAAYmtH,aACjCmY,EAAsBtlI,EAAYotH,cAClCmY,EAA4BvlI,EAAYqtH,oBACxCmY,EAAsBxlI,EAAYstH,cAClCmY,EAAmBzlI,EAAY2pD,WAC/B+7E,EAAwB1lI,EAAYutH,gBACpCllL,EAAWi9L,GAEb/rE,GACJx4L,KAAK21Q,aAAe,CAClBjqB,aACyBtnP,IAAvBkgQ,EACIA,EACA/rE,GACNjxH,SACuB,IAArBtnE,KAAKy/M,YACDn4I,EACAA,EAAShpE,KAAI,SAACsW,GAAM,OAAAA,EAAI,EAAK6qM,eACnCosC,gBACG2Y,G3Jx4B0B,G2J04BExkQ,KAAKy/M,YACpCssC,cAC0B3nP,IAAxBqgQ,EACIA,EACAhsE,GACNk2D,gBACwBvqP,IAArBsgQ,EACGA,E3Jv2BkB,G2Jw2BE1kQ,KAAKy/M,YAC/BwsC,gBAC4B7nP,IAA1BugQ,EACIA,E3Jz4BmB,G2J24BzB1lI,YAAa8tH,GACXsX,GAAsC3rE,UAtC1C14L,KAAK21Q,aAAe,MAkDxB,YAAAzT,cAAA,SAActL,GACZ,IAAIC,EACJ,GAAKD,IAAgBC,EAAYD,EAAWtzC,WAA5C,CAIA,IAAMq0D,EAAc/gB,EAAW3O,YACzB2vB,EAAchhB,EAAWtO,YAC/BtoP,KAAKkpP,OAAS0N,EAAW1pO,SAASltB,KAAKy/M,aACvCz/M,KAAK41Q,cAAgB+B,EAAY,GAAK33Q,KAAKy/M,YAC3Cz/M,KAAK61Q,cAAgB8B,EAAY,GAAK33Q,KAAKy/M,YAC3Cz/M,KAAK81Q,aAAejf,EAAU,GAAK72P,KAAKy/M,YACxCz/M,KAAK+1Q,cAAgBnf,EAAWrjP,aAChCvT,KAAKg2Q,cAAgB4B,EAAY,GACjC53Q,KAAKi2Q,cAAgB2B,EAAY,GACjC53Q,KAAKk2Q,qBAAuBtf,EAAWvgC,oBACvCr2N,KAAKm2Q,eAAiBvf,EAAWtiM,cACjCt0D,KAAKo2Q,YAAcxf,EAAW5O,gBAC9BhoP,KAAKq2Q,YAAcxf,EAAU,GAAK72P,KAAKy/M,iBAfrCz/M,KAAKkpP,OAAS,MAwBlB,YAAAkZ,aAAA,SAAaz8H,GACX,GAAKA,EAEE,CACL,IAAMyjI,EAAgBzjI,EAAU8nH,UAChC,GAAK2b,EAEE,CACL,IAAMyO,EAAqBzO,EAAcr7G,WACzC/tJ,KAAK2nQ,eAAiB,CACpBh1L,UAAWo6K,GACT8qB,GAA0Cv/E,UAL9Ct4L,KAAK2nQ,eAAiB,KASxB,IAAM0B,EAAkB1jI,EAAUgoH,YAClC,GAAK0b,EAEE,CACL,IAAMyO,EAAuBzO,EAAgBt7G,WACvCgqH,EAAyB1O,EAAgBjd,aACzC4rB,EAA0B3O,EAAgBhd,cAC1C4rB,EACJ5O,EAAgB/c,oBACZ4rB,EAA0B7O,EAAgB9c,cAC1C4rB,EAAuB9O,EAAgBzgF,WACvCwvF,EAA4B/O,EAAgB7c,gBAClDxsP,KAAK6nQ,iBAAmB,CACtBnc,aAC6BtnP,IAA3B2zQ,EACIA,EACAx/E,GACNjxH,SAAU0wM,GAENx/E,GACJqzD,eAAgBosB,G3Jl+BW,E2Jq+B3BlsB,cAC8B3nP,IAA5B8zQ,EACIA,EACAz/E,GACNk2D,eAC2BvqP,IAAzB+zQ,EACIA,E3Jj8BgB,E2Jm8BtBlsB,gBACgC7nP,IAA9Bg0Q,EACIA,E3Jn+BiB,G2Jq+BvBn5I,YAAa8tH,GACX+qB,GAA8Cp/E,UAlClD14L,KAAK6nQ,iBAAmB,KAsC1B,IAAMwQ,EAAW1yI,EAAUyrH,UACrBmY,EAAc5jI,EAAUgsH,aACxB6X,EAAc7jI,EAAUisH,aACxB6X,EAAqB9jI,EAAU0wF,oBAC/BqzC,EAAe/jI,EAAUrxE,cACzBg1M,EAAY3jI,EAAUqiH,gBACtBswB,EAAW3yI,EAAUrlH,UACrBi4P,EAAgB5yI,EAAU6rH,eAC1BgnB,EAAmB7yI,EAAU+rH,kBACnC1xP,KAAK+nQ,WAAa,CAChBpoI,UAAmBv7H,IAAbi0Q,EAAyBA,EAAWhgF,GAC1Cz4D,eACoBx7H,IAAlBm0Q,EAA8BA,EAAgB5/E,GAChD94D,kBACuBz7H,IAArBo0Q,EACIA,EACA5/E,IAER54L,KAAKqvP,WACUjrP,IAAbk0Q,EACIx3Q,MAAMC,QAAQu3Q,GACZA,EAASrwQ,QAAO,SAACE,EAAK4/B,EAAG7lC,GAAM,OAACiG,GAAOjG,EAAI,EAAI,IAAM6lC,KAAI,IACzDuwO,EACF,GACNt4Q,KAAKunQ,kBACanjQ,IAAhBmlQ,EAA4BvpQ,KAAKy/M,YAAc8pD,EAAc,EAC/DvpQ,KAAKwnQ,kBACapjQ,IAAhBolQ,EAA4BxpQ,KAAKy/M,YAAc+pD,EAAc,EAC/DxpQ,KAAKynQ,yBACoBrjQ,IAAvBqlQ,GAAmCA,EACrCzpQ,KAAK0nQ,mBAAiCtjQ,IAAjBslQ,EAA6BA,EAAe,EACjE1pQ,KAAKs2Q,WAAa,CAChBt2Q,KAAKy/M,YAAc6pD,EAAU,GAC7BtpQ,KAAKy/M,YAAc6pD,EAAU,SAtF/BtpQ,KAAKqvP,MAAQ,IA0FnB,EAtmCA,CAAsC,IAwmCtC,YCpoCO,IAAMopB,GAAwB,GCQrC,IAQMC,GAAqB,CACzB,MA2TF,SACEC,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAGIrG,EAHE3b,EAAajxP,EAAMunB,WACnBy4G,EAAYhgI,EAAM2a,UAGxB,GAAIs2O,EAAY,CACd,GAAIA,EAAWxO,iBAAmBY,GAChC,OAEF,IAAI6vB,EAAoBF,EACxB,GAAIC,EAA2B,CAC7B,IAAMhxB,EAAgBgP,EAAW7O,mBACjC,GAAsB,SAAlBH,EAEF,GADAixB,EAAoBD,EACE,aAAlBhxB,EAA8B,CAEhC,IAAM,EAAc+wB,EAAalO,WAC/B9kQ,EAAMorL,YACN,SAEF,EAAYmxE,cAActL,EAAY2b,GACtC,EAAY5zG,UAAUr+J,EAAUmD,QACvBkiI,GAAaA,EAAUrlH,YAChCiyP,EAAyB,IAI/B,IAAMuG,EAAcD,EAAkBpO,WACpC9kQ,EAAMorL,YACN,SAEF+nF,EAAY5W,cAActL,EAAY2b,GACtCuG,EAAYn6G,UAAUr+J,EAAUmD,GAElC,GAAIkiI,GAAaA,EAAUrlH,UAAW,CACpC,IAAIy4P,EAAmBJ,EACnBC,IACFG,EAAmBH,GAErB,IAAMI,EAAaD,EAAiBtO,WAAW9kQ,EAAMorL,YAAa,QAClEioF,EAAW5W,aAAaz8H,EAAW4sI,GACnCyG,EAAWhX,SAAS1hQ,EAAUmD,KAzWhC,WAsNF,SACEk1Q,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAAM35I,EAAct5H,EAAMgoP,YAC1B,GAAI1uH,EAAa,CACf,IAAMg6I,EAAmBN,EAAalO,WACpC9kQ,EAAMorL,YACN,cAEFkoF,EAAiBhX,mBAAmB,KAAMhjI,GAC1Cg6I,EAAiB5X,eAAe/gQ,EAAUmD,GAE5C,IAAMkiI,EAAYhgI,EAAM2a,UACxB,GAAIqlH,GAAaA,EAAUrlH,UAAW,CACpC,IAAM04P,GAAcJ,GAA6BD,GAAclO,WAC7D9kQ,EAAMorL,YACN,QAEFioF,EAAW5W,aAAaz8H,GACxBqzI,EAAWhX,SAAS1hQ,EAAUmD,KA5OhC,QA6aF,SACEk1Q,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAAMjmM,EAAYhtE,EAAM8nP,UAClBxuH,EAAct5H,EAAMgoP,YAC1B,GAAIh7K,GAAassD,EAAa,CAC5B,IAAMi6I,EAAgBP,EAAalO,WAAW9kQ,EAAMorL,YAAa,WACjEmoF,EAAcjX,mBAAmBtvL,EAAWssD,GAC5Ci6I,EAAcpX,YAAYxhQ,EAAUmD,GAEtC,IAAMkiI,EAAYhgI,EAAM2a,UACxB,GAAIqlH,GAAaA,EAAUrlH,UAAW,CACpC,IAAM04P,GAAcJ,GAA6BD,GAAclO,WAC7D9kQ,EAAMorL,YACN,QAEFioF,EAAW5W,aAAaz8H,GACxBqzI,EAAWhX,SAAS1hQ,EAAUmD,KAjchC,WAkXF,SACEk1Q,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAGIrG,EAHE3b,EAAajxP,EAAMunB,WACnBy4G,EAAYhgI,EAAM2a,UAGxB,GAAIs2O,EAAY,CACd,GAAIA,EAAWxO,iBAAmBY,GAChC,OAEF,IAAI6vB,EAAoBF,EACxB,GAAIC,EAA2B,CAC7B,IAAMhxB,EAAgBgP,EAAW7O,mBACjC,GAAsB,SAAlBH,EAEF,GADAixB,EAAoBD,EACE,aAAlBhxB,EAA8B,CAEhC,IAAM,EAAc+wB,EAAalO,WAC/B9kQ,EAAMorL,YACN,SAEF,EAAYmxE,cAActL,EAAY2b,GACtC,EAAY9Q,eAAenhQ,EAAUmD,QAC5BkiI,GAAaA,EAAUrlH,YAChCiyP,EAAyB,IAI/B,IAAMuG,EAAcD,EAAkBpO,WACpC9kQ,EAAMorL,YACN,SAEF+nF,EAAY5W,cAActL,EAAY2b,GACtCuG,EAAYrX,eAAenhQ,EAAUmD,GAEvC,GAAIkiI,GAAaA,EAAUrlH,UAAW,CACpC,IAAIy4P,EAAmBJ,EACnBC,IACFG,EAAmBH,GAErB,IAAMI,EAAaD,EAAiBtO,WAAW9kQ,EAAMorL,YAAa,QAClEioF,EAAW5W,aAAaz8H,EAAW4sI,GACnCyG,EAAWhX,SAAS1hQ,EAAUmD,KAhahC,gBAqPF,SACEk1Q,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAAM35I,EAAct5H,EAAMgoP,YAC1B,GAAI1uH,EAAa,CACf,IAAMg6I,EAAmBN,EAAalO,WACpC9kQ,EAAMorL,YACN,cAEFkoF,EAAiBhX,mBAAmB,KAAMhjI,GAC1Cg6I,EAAiB1X,oBAAoBjhQ,EAAUmD,GAEjD,IAAMkiI,EAAYhgI,EAAM2a,UACxB,GAAIqlH,GAAaA,EAAUrlH,UAAW,CACpC,IAAM04P,GAAcJ,GAA6BD,GAAclO,WAC7D9kQ,EAAMorL,YACN,QAEFioF,EAAW5W,aAAaz8H,GACxBqzI,EAAWhX,SAAS1hQ,EAAUmD,KA3QhC,aAsRF,SACEk1Q,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAAMjmM,EAAYhtE,EAAM8nP,UAClBxuH,EAAct5H,EAAMgoP,YAC1B,GAAI1uH,GAAetsD,EAAW,CAC5B,IAAMumM,EAAgBP,EAAalO,WAAW9kQ,EAAMorL,YAAa,WACjEmoF,EAAcjX,mBAAmBtvL,EAAWssD,GAC5Ci6I,EAAcvX,iBAAiBrhQ,EAAUmD,GAE3C,IAAMkiI,EAAYhgI,EAAM2a,UACxB,GAAIqlH,GAAaA,EAAUrlH,UAAW,CACpC,IAAM04P,GAAcJ,GAA6BD,GAAclO,WAC7D9kQ,EAAMorL,YACN,QAEFioF,EAAW5W,aAAaz8H,GACxBqzI,EAAWhX,SAAS1hQ,EAAUmD,KA1ShC,mBAqLF,SACE01Q,EACA74Q,EACAqF,EACAlC,EACAm1Q,GAEA,IACI12Q,EAAGgiB,EADDk0C,EAAa93D,EAASy/N,qBAE5B,IAAK79N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAAG,EAE/Ck3Q,EADyBV,GAAmBtgN,EAAWl2D,GAAG+H,YAExDkvQ,EACA/gN,EAAWl2D,GACXyD,EACAlC,EACAm1Q,KApMJ,OAsCF,SACED,EACAr4Q,EACAqF,EACAlC,EACAm1Q,GAEA,IAAMjmM,EAAYhtE,EAAM8nP,UAClBxuH,EAAct5H,EAAMgoP,YAC1B,GAAIh7K,GAAassD,EAAa,CAC5B,IAAMo6I,EAAeV,EAAalO,WAAW9kQ,EAAMorL,YAAa,UAChEsoF,EAAapX,mBAAmBtvL,EAAWssD,GAC3Co6I,EAAarY,WAAW1gQ,EAAUmD,GAEpC,IAAMkiI,EAAYhgI,EAAM2a,UACxB,GAAIqlH,GAAaA,EAAUrlH,UAAW,CACpC,IAAM04P,GAAcJ,GAA6BD,GAAclO,WAC7D9kQ,EAAMorL,YACN,QAEFioF,EAAW5W,aAAaz8H,GACxBqzI,EAAWhX,SAAS1hQ,EAAUmD,MAnD3B,SAAS61Q,GAAaC,EAAUC,GACrC,OAAOlhQ,SAASurK,EAAO01F,GAAW,IAAMjhQ,SAASurK,EAAO21F,GAAW,IAQ9D,SAASC,GAAoBt1N,EAAYu7J,GAC9C,IAAMrlL,EAAYq/O,GAAav1N,EAAYu7J,GAC3C,OAAOrlL,EAAYA,EAQd,SAASq/O,GAAav1N,EAAYu7J,GACvC,MA5CyB,GA4CIv7J,EAAcu7J,EA6CtC,SAASi6D,GACdR,EACA11Q,EACAkC,EACA0mM,EACArtJ,EACAstJ,EACAssE,GAEA,IAAI14K,GAAU,EACR02J,EAAajxP,EAAMunB,WACzB,GAAI0pO,EAAY,CACd,IAAMnN,EAAamN,EAAWxO,gBAC1BqB,GAAcT,IAAqBS,GAAcT,GACnD4N,EAAWnO,oBAAoBzpM,IAE3ByqM,GAAcT,IAChB4N,EAAWxgI,OAEbwgI,EAAWpO,kBAAkBxpM,GAC7BkhD,GAAU,GAYd,OAWF,SACEi5K,EACA11Q,EACAkC,EACA0mM,EACAC,EACAssE,GAEA,IAAMt4Q,EAAWqF,EAAMgqP,qBAANhqP,CAA4BlC,GAC7C,IAAKnD,EACH,OAEF,IAAMwtM,EAAqBxtM,EAASosM,oBAClCL,EACAC,GAGF,GADiB3mM,EAAM4tL,cAErBqmF,GAAeT,EAAarrE,EAAoBnoM,EAAOlC,OAClD,EAEL21Q,EADyBV,GAAmB5qE,EAAmB7jM,YAE7DkvQ,EACArrE,EACAnoM,EACAlC,EACAm1Q,IA9CJiB,CACEV,EACA11Q,EACAkC,EACA0mM,EACAC,EACAssE,GAGK14K,EAgDT,SAAS05K,GAAeT,EAAa74Q,EAAUqF,EAAOlC,GACpD,GAA0B,sBAAtBnD,EAAS2J,UAUEkvQ,EAAY1O,WAAW9kQ,EAAMorL,YAAa,WAClD+vE,WACsD,EAC3Dr9P,EACAkC,EAAM4tL,cACN5tL,EAAM+pP,gCAVN,IAJA,IAAMt3L,EAC2D,EAE7DynK,gBACK39N,EAAI,EAAGgiB,EAAKk0C,EAAW/0D,OAAQnB,EAAIgiB,IAAMhiB,EAChD03Q,GAAeT,EAAa/gN,EAAWl2D,GAAIyD,EAAOlC,G,+dCnJxD,eAIE,WAAYizD,GAAZ,MACE,YAAMA,IAAY,K,OAGlB,EAAKojN,6BAA+B,EAAKC,wBAAwB75N,KAAK,GAKtE,EAAK85N,wBAKL,EAAKC,uBAAyB,KAK9B,EAAKC,kBAAoB,KAMzB,EAAKC,mBAAqB,EAM1B,EAAKC,oBAAsB9iN,IAM3B,EAAK+iN,gBnL6GA,CAACrkN,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KmLvGrC,EAAKskN,uBnLuGA,CAACtkN,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KmLjGrC,EAAKukN,kBAML,EAAKC,gBAAkB,KAMvB,EAAKC,oBAAsB,KAM3B,EAAKC,qBAAuB,KAM5B,EAAKC,aAAe,KAMpB,EAAKC,oBAAqB,EAK1B,EAAK1P,uBAAyB,KAM9B,EAAK2P,UAAW,EAMhB,EAAKC,oBAAsB,KAM3B,EAAKxzB,SAAW,E,EAkoBpB,OA5uBwC,QAkHtC,YAAAyzB,aAAA,SAAaC,EAAe3nF,EAAYm+E,GACtC,IAAMl2P,EAAS+3K,EAAW/3K,OACpBk3K,EAAYa,EAAWb,UACvB7xL,EAAS6xL,EAAU7xL,OACnBwjD,EAAaquI,EAAUruI,WACvBomI,EAAaiI,EAAUjI,WACvBl2H,EAAWm+H,EAAUn+H,SACrBm2H,EAAmBD,EAAWxjK,YAC9Bk0P,EAAej7Q,KAAK2f,WAAWwC,YAC/Bu9L,EAAarsB,EAAWqsB,WACxB6E,EAAYlxB,EAAWkxB,UACvB6rD,IACJ7rD,EAAUtL,KAAuBsL,EAAUtL,KAEvC3mI,EAAUtyE,KAAK86Q,oBACfxoP,EAAQ/wB,KAAKirC,MAAM6mJ,EAAWx+J,KAAK,GAAK6qL,GACxCntL,EAAShxB,KAAKirC,MAAM6mJ,EAAWx+J,KAAK,GAAK6qL,GAEzCrK,EAAa4lE,EAAallF,YAAcxL,EAAWE,WACnDC,EAAa2qB,EAAazsB,GAAS4B,GAAoB,KACvD0wF,EAAW7lE,EACb9zM,KAAKgjD,MAAMjpC,EAAO,GAAKkvK,EAAiB,IAAME,GAAc,EAC5D,EACAywF,EAAQ9lE,EACR9zM,KAAKonD,OAAOrtC,EAAO,GAAKkvK,EAAiB,IAAME,GAC/C,EACJ,EAAG,CACD,IAAM1xC,EAAYh5I,KAAK2sQ,mBACrBhsQ,EACAwjD,EACAkQ,EACAqrJ,EACAptL,EACAC,EACA4oP,EAAQzwF,GAEVswF,EAAc3H,QACZ/gM,EACA,EACA0mE,EACA3kF,EACA+7M,OACAhsQ,EACAotQ,WAEO2J,EAAQD,IAGrB,YAAAE,yBAAA,WACE,GAAsB,IAAlBp7Q,KAAKsnP,SAAgB,CACvB,IAAM+zB,EAAqBhkF,GACzBr3L,KAAKsyE,QAAQjV,OAAO/qC,MACpBtyB,KAAKsyE,QAAQjV,OAAO9qC,OACpBo5O,IAEF3rQ,KAAK86Q,oBAAsBO,OAE3Br7Q,KAAK86Q,oBAAsB96Q,KAAKsyE,SAIpC,YAAAgpM,2BAAA,WACE,GAAsB,IAAlBt7Q,KAAKsnP,SAAgB,CACvB,IAAM97J,EAAQxrF,KAAKsyE,QAAQktD,YAC3Bx/H,KAAKsyE,QAAQktD,YAAcx/H,KAAKsnP,SAChCtnP,KAAKsyE,QAAQa,UAAUnzE,KAAK86Q,oBAAoBz9M,OAAQ,EAAG,GAC3Dr9D,KAAKsyE,QAAQktD,YAAch0C,EAC3BksG,GAAc13L,KAAK86Q,qBACnBnP,GAAWvjQ,KAAKpI,KAAK86Q,oBAAoBz9M,QACzCr9D,KAAK86Q,oBAAsB,OAQ/B,YAAAz/E,gBAAA,SAAgBhI,GACVrzL,KAAKkrQ,yBACPlrQ,KAAKo7Q,2BACLp7Q,KAAK+6Q,aACH/6Q,KAAKkrQ,uBACL73E,EACAA,EAAWgyB,eAEbrlN,KAAKs7Q,+BAUT,YAAA7nF,YAAA,SAAYJ,EAAY5lL,GACtB,IAAMiyM,EAAarsB,EAAWqsB,WACxB/vG,EAAa0jF,EAAWQ,iBAAiBR,EAAW8H,arLjGvD,SAAmB1tL,EAAQkgB,EAAGC,GAC5B9O,EAAIrR,EAAQkgB,EAAG,EAAG,EAAGC,EAAG,EAAG,GqLmGhC2tP,CAAUv7Q,KAAK+rQ,eAAgB,EAAIrsD,EAAY,EAAIA,GACnD34B,EAAY/mL,KAAKy2L,sBAAuBz2L,KAAK+rQ,gBAE7C,IAAM+E,EAAkB,EAAkB9wQ,KAAK+rQ,gBAE/C/rQ,KAAKksQ,aAAaz+P,EAAQqjQ,EAAiB9wQ,KAAK2wL,cAAc0C,IAC9D,IAAM/gH,EAAUtyE,KAAKsyE,QACfjV,EAASiV,EAAQjV,OAEjB87M,EAAcn5Q,KAAK26Q,aACnBzP,EAAyBlrQ,KAAKkrQ,uBACpC,KACIiO,GAAeA,EAAYt3E,cAC3BqpE,GAA0BA,EAAuBrpE,WAEnD,OAAO,KAIT,IAAMvvK,EAAQ/wB,KAAKirC,MAAM6mJ,EAAWx+J,KAAK,GAAK6qL,GACxCntL,EAAShxB,KAAKirC,MAAM6mJ,EAAWx+J,KAAK,GAAK6qL,GAC3CriJ,EAAO/qC,OAASA,GAAS+qC,EAAO9qC,QAAUA,GAC5C8qC,EAAO/qC,MAAQA,EACf+qC,EAAO9qC,OAASA,EACZ8qC,EAAO13D,MAAMqzI,YAAc83H,IAC7BzzM,EAAO13D,MAAMqzI,UAAY83H,IAEjB9wQ,KAAKgsQ,iBACf15L,EAAQQ,UAAU,EAAG,EAAGxgD,EAAOC,GAGjCvyB,KAAKysQ,UAAUn6L,EAAS+gH,GAExB,IAAMb,EAAYa,EAAWb,UACvBjI,EAAaiI,EAAUjI,WAE7BvqL,KAAKsnP,SAAW33I,EAAWn8F,QAC3BxT,KAAKo7Q,2BAGL,IAAII,GAAU,EACV3+N,GAAS,EACb,GAAI8yD,EAAWr0F,QAAUtb,KAAK66Q,SAAU,CACtC,IAAMhO,EAAc,GAAel9J,EAAWr0F,OAAQivK,IAEtDixF,GADA3+N,EAASuG,GAAiBypN,EAAax5E,EAAW/3K,WAC7BmsK,GAAeolF,EAAax5E,EAAW/3K,UAE1Dtb,KAAKssQ,cAActsQ,KAAK86Q,oBAAqBznF,EAAYw5E,GAoB7D,OAhBIhwN,GACF78C,KAAK+6Q,aAAa5B,EAAa9lF,GAG7BmoF,GACFx7Q,KAAK86Q,oBAAoBngF,UAG3B36L,KAAKs7Q,6BAELt7Q,KAAK0sQ,WAAWp6L,EAAS+gH,GAErBrzL,KAAKu6Q,oBAAsB/nF,EAAUn+H,WACvCr0D,KAAKu6Q,kBAAoB/nF,EAAUn+H,SACnCr0D,KAAKi6Q,uBAAyB,MAEzBj6Q,KAAKi0D,WAQd,YAAA2qC,YAAA,SAAYw0F,GACV,OAAO,IAAIx0L,QAKT,SAAUC,GACR,IAAKmB,KAAKi6Q,yBAA2Bj6Q,KAAKg6Q,wBAAyB,CACjE,IAAMnlP,EAAO,CAAC70B,KAAKsyE,QAAQjV,OAAO/qC,MAAOtyB,KAAKsyE,QAAQjV,OAAO9qC,QAC7DniB,EAAMpQ,KAAK+rQ,eAAgBl3O,GAC3B,IAAMl0B,EAASX,KAAKw6Q,gBACdr2N,EAAankD,KAAKo6Q,oBAClB/lN,EAAWr0D,KAAKu6Q,kBAChBhwF,EAAavqL,KAAKy6Q,oBAClBn/P,EAAStb,KAAKs6Q,uBACd91Q,EAAQxE,KAAK2f,WACb4mL,EAAa,GACbj0K,EAAQuC,EAAK,GAAK4jP,GAClBlmP,EAASsC,EAAK,GAAK4jP,GACzBlyE,EAAWn+L,KACTpI,KAAK2sQ,mBACHhsQ,EACAwjD,EACAkQ,EACAokN,GACAnmP,EACAC,EACA,GACA5nB,SAEJ,IAAMgQ,EAASnW,EAAM2d,YACfqoK,EAAmBD,EAAWxjK,YACpC,GACEpM,EAAOo7K,YACPxL,EAAWE,aACVhD,GAAe+C,EAAkBlvK,GAClC,CAKA,IAJA,IAAI02L,EAAS12L,EAAO,GACdovK,EAAa9B,GAAS4B,GACxB2wF,EAAQ,EACRzjE,OAAO,EACJ1F,EAASxnB,EAAiB,IAE/BktB,EAAUhtB,IADRywF,EAEF50E,EAAWn+L,KACTpI,KAAK2sQ,mBACHhsQ,EACAwjD,EACAkQ,EACAokN,GACAnmP,EACAC,EACAmlL,GACA/sM,SAEJqnM,GAAUtnB,EAIZ,IAFAywF,EAAQ,EACRnpE,EAAS12L,EAAO,GACT02L,EAASxnB,EAAiB,IAE/BktB,EAAUhtB,IADRywF,EAEF50E,EAAWn+L,KACTpI,KAAK2sQ,mBACHhsQ,EACAwjD,EACAkQ,EACAokN,GACAnmP,EACAC,EACAmlL,GACA/sM,SAEJqnM,GAAUtnB,EAId1qL,KAAKi6Q,uBFnYR,SACLplP,EACA0xK,EACAz3L,EACAk2H,EACA1pH,EACA6oC,EACAkQ,GAEA,IAEMie,EAAU+kH,GAFFxiK,EAAK,GAAK4jP,GACT5jP,EAAK,GAAK4jP,IAEzBnmM,EAAQmpM,uBAAwB,EAahC,IAZA,IAAMp+M,EAASiV,EAAQjV,OACjB8lJ,EAAW,IAAI,GACnB7wI,EACAmmM,GACAn9P,EACA,KACA+4C,GAEIuwC,EAAe91F,EAASzL,OAExBq4Q,EAAcn6Q,KAAKonD,MAAM,SAAwBi8C,GACjD+2K,EAAmB,GAChBz5Q,EAAI,EAAGA,GAAK0iG,IAAgB1iG,EAAG,CACtC,IAAMuB,EAAUqL,EAAS5M,EAAI,GACvB05Q,EAAuBn4Q,EAAQo3N,oBAAsB71F,EAC3D,GAAKA,EAAL,CAGA,IAAI5+H,EAASw1Q,EAAqBn4Q,EAAS0gD,GAC3C,GAAK/9C,EAAL,CAGKtF,MAAMC,QAAQqF,KACjBA,EAAS,CAACA,IAIZ,IAFA,IACMmrE,EAAQ,KAAO,UADPrvE,EAAIw5Q,GACoBz4P,SAAS,KAAKtY,OAAO,GAClD2M,EAAI,EAAGypF,EAAK36F,EAAO/C,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC/C,IAAMukQ,EAAgBz1Q,EAAOkR,GACvBhX,EAAWu7Q,EAAclsB,qBAAdksB,CAAoCp4Q,GACrD,GAAKnD,GAAa8iD,GAAW9nC,EAAQhb,EAASymB,aAA9C,CAGA,IAAMphB,EAAQk2Q,EAAcrxQ,QACtBi8E,EAAO9gF,EAAM8nP,UACfhnK,GACFA,EAAKugK,SAASz1K,GAEhB,IAAMh8D,EAAS5P,EAAMgoP,YACjBp4O,IACFA,EAAOyxO,SAASz1K,GAChBh8D,EAAOm3O,YAAY,OAErB/mP,EAAMiqP,aAAQxrP,GACd,IAAM2oB,EAAQ8uP,EAAc3uP,WAC5B,GAAIH,GAAgC,IAAvBA,EAAMxZ,aAAoB,CACrC,IAAMw3O,EAAUh+N,EAAMs7N,eACtB,IAAK0C,EACH,SAGF,IAAM+wB,EAAazkF,GACjB0zD,EAAQ,GACRA,EAAQ,QACR3mP,EACA,CAAConF,OAAO,IAEJ7/E,EAAMmwQ,EAAWz+M,OACvBy+M,EAAWnpM,UAAYpB,EACvBuqM,EAAWlpM,SAAS,EAAG,EAAGjnE,EAAI2mB,MAAO3mB,EAAI4mB,QACzC5sB,EAAM6gK,SACJ,IAAI,GAAK,CACP76J,IAAKA,EACLo/O,QAASA,EACTn5O,OAAQmb,EAAMk7N,YACdwC,aAAcC,GAAgBlnD,OAC9BonD,aAAcF,GAAgBlnD,OAC9BvxK,OAAQlF,EAAMu7N,YACd90O,QAAS,EACTqhB,KAAM9H,EAAMu2L,UACZ/4K,MAAOxd,EAAM4/H,WACbt4F,SAAUtnC,EAAMunC,cAChB2/J,eAAgBlnM,EAAMspM,uBAI5B,IAAM3pL,EAAS/mC,EAAMorL,aAAe,GAChCgrF,EAAiBJ,EAAiBjvO,MAEpCqvO,EAAiB,GACjBJ,EAAiBjvO,GAAUqvO,EAC3BA,EAAwB,QAAI,GAC5BA,EAAuB,OAAI,GAC3BA,EAA2B,WAAI,GAC/BA,EAAsB,MAAI,IAE5BA,EAAez7Q,EAAS2J,UAAUV,QAAQ,QAAS,KAAKnB,KACtD9H,EACAqF,OAQN,IAHA,IAAMq2Q,EAAa78Q,OAAOD,KAAKy8Q,GAC5Br9Q,IAAIqpB,QACJwC,KAAK+5J,GACQhgK,GAAPhiB,EAAI,EAAQ85Q,EAAW34Q,QAAQnB,EAAIgiB,IAAMhiB,EAAG,CACnD,IAAM65Q,EAAiBJ,EAAiBK,EAAW95Q,IACnD,IAAK,IAAMiI,KAAQ4xQ,EACjB,KAAME,EAAeF,EAAe5xQ,GACpC,IAASmN,EAAI,EAAGypF,EAAKk7K,EAAa54Q,OAAQiU,EAAIypF,EAAIzpF,GAAK,EAAG,CACxD6rM,EAASz9M,SAASu2Q,EAAa3kQ,EAAI,IACnC,IAAK,IAAIO,EAAI,EAAGC,EAAKyuL,EAAWljM,OAAQwU,EAAIC,IAAMD,EAChDsrM,EAAS3oB,aAAa+L,EAAW1uL,IACjCsrM,EAAS49C,aAAakb,EAAa3kQ,MAK3C,OAAOg7D,EAAQE,aAAa,EAAG,EAAGnV,EAAO/qC,MAAO+qC,EAAO9qC,QEyQjB2pP,CAC5BrnP,EACA0xK,EACAvmM,KAAKk6Q,kBACL11Q,EAAMq2N,mBACNv/M,EACA6oC,EACAkQ,GAGJx1D,EFvQD,SAAmBu0L,EAAOtkL,EAAU+jE,GACzC,IAAMspM,EAAiB,GACvB,GAAItpM,EAAW,CACb,IAAMllD,EAAIpsB,KAAKonD,MAAMpnD,KAAKirC,MAAM4mJ,EAAM,IAAMqlF,IACtC7qP,EAAIrsB,KAAKonD,MAAMpnD,KAAKirC,MAAM4mJ,EAAM,IAAMqlF,IAItC3uP,EAGJ,GAFC6gK,GAAMh9J,EAAG,EAAGklD,EAAUvgD,MAAQ,GAC7Bq4J,GAAM/8J,EAAG,EAAGilD,EAAUtgD,OAAS,GAAKsgD,EAAUvgD,OAE5Che,EAAIu+D,EAAU1uE,KAAK2lB,GACnB+4C,EAAIgQ,EAAU1uE,KAAK2lB,EAAQ,GAE3B5nB,EADI2wE,EAAU1uE,KAAK2lB,EAAQ,GACnB,KAAO+4C,EAAI,IAAMvuD,GACzBonQ,EAAcn6Q,KAAKonD,MAAM,SAAwB75C,EAASzL,QAC5DnB,GAAKA,EAAIw5Q,GAAgB,GAC3BS,EAAe/zQ,KAAK0G,EAAS5M,EAAIw5Q,EAAc,IAGnD,OAAOS,EEmPCC,CAAUhpF,EAAOpzL,KAAKk6Q,kBAAmBl6Q,KAAKi6Q,0BAEhD/5N,KAAKlgD,QAaX,YAAAo1L,2BAAA,SACE3xG,EACA4vG,EACAgC,EACA98J,EACAhP,GALF,WAOE,GAAKvpB,KAAK26Q,aAAV,CAGA,IA0CI/1Q,EA1CEu/C,EAAakvI,EAAWb,UAAUruI,WAClCkQ,EAAWg/H,EAAWb,UAAUn+H,SAChC7vD,EAAQxE,KAAK2f,WAGb7Q,EAAW,GAQX+lQ,EAAkB,SAAUpxQ,EAASnD,EAAU01L,GACnD,IAAMvtL,EAAMo7K,EAAOpgL,GACb+F,EAAQsF,EAASrG,GACvB,GAAKe,GAcE,IAAc,IAAVA,GAAkBwsL,EAAaxsL,EAAMwsL,WAAY,CAC1D,GAAmB,IAAfA,EAGF,OAFAlnL,EAASrG,IAAO,EAChB8gB,EAAQxgB,OAAOwgB,EAAQmK,YAAYlqB,GAAQ,GACpC+uB,EAAS90B,EAASe,EAAOlE,GAElCkJ,EAAMlJ,SAAWA,EACjBkJ,EAAMwsL,WAAaA,OArBT,CACV,GAAmB,IAAfA,EAEF,OADAlnL,EAASrG,IAAO,EACT8vB,EAAS90B,EAASe,EAAOlE,GAElCipB,EAAQnhB,KACL0G,EAASrG,GAAO,CACfhF,QAASA,EACTe,MAAOA,EACPlE,SAAUA,EACV01L,WAAYA,EACZz9J,SAAUA,MAgBZ8jP,EAAiB,CAACr8Q,KAAK26Q,cAkB7B,OAjBI36Q,KAAKkrQ,wBACPmR,EAAej0Q,KAAKpI,KAAKkrQ,wBAE3BmR,EAAelhQ,MAAK,SAAC6/P,GACnB,OAAQp2Q,EAASo2Q,EAAc5lF,2BAC7B3xG,EACAt/B,EACAkQ,EACAghI,EACAw/E,EACAmG,IAAkB,EAAK9P,wBACrB73E,EAAWgyB,cACThyB,EAAWgyB,cAAcjkM,MAAM9iB,KAAI,SAAC0L,GAAS,OAAAA,EAAKnH,SAClD,SAID+B,IAMT,YAAAogN,mBAAA,WACE,IAAMxgN,EAAQxE,KAAK2f,WACfnb,EAAMwsL,cAAgBhxL,KAAK26Q,cAC7Bn2Q,EAAMmvF,WASV,YAAAomL,wBAAA,SAAwBl6O,GACtB7/B,KAAKyrQ,2BAQP,YAAAj4E,aAAA,SAAaH,GACX,IAAM38H,EAAc12D,KAAK2f,WACnBs7P,EAAevkN,EAAYv0C,YACjC,IAAK84P,EACH,OAAO,EAGT,IAAMqB,EAAYjpF,EAAWkxB,UAAUtL,IACjCsjE,EAAclpF,EAAWkxB,UAAUtL,IACnC+lD,EAAuBtoM,EAAY+oM,0BACnCR,EAAyBvoM,EAAYgpM,4BAE3C,GACG1/P,KAAK2sD,QAAUqyM,GAAwBsd,IACtCrd,GAA0Bsd,EAG5B,OADAv8Q,KAAKg6Q,yBAA0B,GACxB,EAETh6Q,KAAKg6Q,yBAA0B,EAE/B,IAAMwC,EAAmBnpF,EAAW/3K,OAC9Bk3K,EAAYa,EAAWb,UACvBjI,EAAaiI,EAAUjI,WACvBpmI,EAAaquI,EAAUruI,WACvBu7J,EAAarsB,EAAWqsB,WACxB+8D,EAAsB/lN,EAAYs4H,cAClC0tF,EAA0BhmN,EAAY6oM,kBACxCod,EAAyBjmN,EAAY8oM,sBAEVp7P,IAA3Bu4Q,IACFA,EAAyB,IAG3B,IAAMh8Q,EAAS6xL,EAAU7xL,OAAOgK,QAC1B2Q,EAAS,EACbkhQ,EACAE,EAA0Bv4N,GAEtBy4N,EAAiBthQ,EAAO3Q,QACxBkyQ,EAAc,CAACvhQ,EAAO3Q,SACtB6/K,EAAmBD,EAAWxjK,YAEpC,GACEk0P,EAAallF,YACbxL,EAAWE,aACVhD,GAAe+C,EAAkB6I,EAAW/3K,QAC7C,CAMA,IAAMovK,EAAa9B,GAAS4B,GACtBsyF,EAASv7Q,KAAK4K,IAAIy8K,GAASttK,GAAU,EAAGovK,GAC9CpvK,EAAO,GAAKkvK,EAAiB,GAAKsyF,EAClCxhQ,EAAO,GAAKkvK,EAAiB,GAAKsyF,EAClC,GAAgBn8Q,EAAQ4pL,GACxB,IAAMwyF,EAAa,GAAYF,EAAY,GAAItyF,GAG7CwyF,EAAW,GAAKvyF,EAAiB,IACjCuyF,EAAW,GAAKvyF,EAAiB,GAEjCqyF,EAAYz0Q,KAAK,CACf20Q,EAAW,GAAKryF,EAChBqyF,EAAW,GACXA,EAAW,GAAKryF,EAChBqyF,EAAW,KAGbA,EAAW,GAAKvyF,EAAiB,IACjCuyF,EAAW,GAAKvyF,EAAiB,IAEjCqyF,EAAYz0Q,KAAK,CACf20Q,EAAW,GAAKryF,EAChBqyF,EAAW,GACXA,EAAW,GAAKryF,EAChBqyF,EAAW,KAKjB,GACE/8Q,KAAK2sD,OACL3sD,KAAKo6Q,qBAAuBj2N,GAC5BnkD,KAAKm6Q,mBAAqBsC,GAC1Bz8Q,KAAK06Q,sBAAwBiC,GAC7Bl1F,GAAeznL,KAAKs6Q,uBAAwBh/P,GAQ5C,OANKknC,EAAOxiD,KAAKq6Q,gBAAiBuC,KAChC58Q,KAAKi6Q,uBAAyB,KAC9Bj6Q,KAAKq6Q,gBAAkBuC,GAEzB58Q,KAAKw6Q,gBAAkB75Q,EACvBX,KAAK46Q,oBAAqB,GACnB,EAGT56Q,KAAK26Q,aAAe,KAEpB,IAOIqC,EAPE7D,EAAc,IAAI,GACtB,GAAmBh1N,EAAYu7J,GAC/BpkM,EACA6oC,EACAu7J,GAIE1/M,KAAK2f,WAAW2/O,iBAClB0d,EAAwB,IAAI,GAC1B,GAAmB74N,EAAYu7J,GAC/BpkM,EACA6oC,EACAu7J,IAIJ,IACIu9D,EADEh0E,EAAiB,KAEvB,GAAIA,EAAgB,CAClB,IAAK,IAAI/mM,EAAI,EAAGgiB,EAAK24P,EAAYx5Q,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CACpD,IACM,EAAa,GADJ26Q,EAAY36Q,GACaqoL,GACxC0wF,EAAaiC,aACX,EACA9zE,GAAiBjlJ,EAAYomI,GAC7B0e,GAGJg0E,EAAgBt1E,GAA4BsB,EAAgB1e,QAE5D,IAASroL,EAAI,EAAGgiB,EAAK24P,EAAYx5Q,OAAQnB,EAAIgiB,IAAMhiB,EACjD+4Q,EAAaiC,aAAaL,EAAY36Q,GAAIiiD,EAAYomI,GAI1D,IAAM8hB,EAAmB,GAA0BloJ,EAAYu7J,GAC3D/yJ,GAAQ,EACN9P,EAKJ,SAAUp5C,GACR,IAAI2C,EACE4+H,EACJvhI,EAAQo3N,oBAAsBnkK,EAAYmkK,mBAI5C,GAHI71F,IACF5+H,EAAS4+H,EAAcvhI,EAAS0gD,IAE9B/9C,EAAQ,CACV,IAAM+2Q,EAAQn9Q,KAAK25Q,cACjBl2Q,EACA4oM,EACAjmM,EACA+yQ,EACA8D,EACAD,GAEFrwN,EAAQA,IAAUwwN,IAEpBj9N,KAAKlgD,MAEHo9Q,EAAa,GAAa9hQ,EAAQivK,GAElCz7K,EAAWmsQ,EAAa3gP,oBAAoB8iP,GAC9CT,GACF7tQ,EAASqb,KAAKwyP,GAEhB,IAASz6Q,EAAI,EAAGgiB,EAAKpV,EAASzL,OAAQnB,EAAIgiB,IAAMhiB,EAC9C26C,EAAO/tC,EAAS5M,IAElBlC,KAAKk6Q,kBAAoBprQ,EACzB9O,KAAK2sD,MAAQA,EAEb,IAAM0wN,EAA0BlE,EAAYlV,SACtC+W,EAAgB,IAAI,GACxB1/P,EACA6oC,EACAu7J,EACAu7D,EAAaqC,cACbD,EACA3mN,EAAY6oM,mBAyBd,OAtBIyd,IACFh9Q,KAAKkrQ,uBAAyB,IAAI,GAChC5vP,EACA6oC,EACAu7J,EACAu7D,EAAaqC,cACbN,EAAsB/Y,SACtBvtM,EAAY6oM,oBAIhBv/P,KAAKo6Q,oBAAsBj2N,EAC3BnkD,KAAKm6Q,kBAAoBsC,EACzBz8Q,KAAK06Q,qBAAuBiC,EAC5B38Q,KAAKq6Q,gBAAkBuC,EACvB58Q,KAAKs6Q,uBAAyBh/P,EAC9Btb,KAAKw6Q,gBAAkB75Q,EACvBX,KAAKy6Q,oBAAsBlwF,EAC3BvqL,KAAK26Q,aAAeK,EACpBh7Q,KAAKi6Q,uBAAyB,KAE9Bj6Q,KAAK46Q,oBAAqB,GACnB,GAYT,YAAAjB,cAAA,SACEl2Q,EACA4oM,EACAjmM,EACAuyQ,EACArsE,EACAssE,GAEA,IAAKxyQ,EACH,OAAO,EAET,IAAI85F,GAAU,EACd,GAAIp/F,MAAMC,QAAQqF,GAChB,IAAK,IAAIlE,EAAI,EAAGgiB,EAAK9d,EAAO/C,OAAQnB,EAAIgiB,IAAMhiB,EAC5Cg+F,EACEy5K,GACEhB,EACAl1Q,EACA2C,EAAOlE,GACPmqM,EACArsM,KAAK85Q,6BACLxtE,EACAssE,IACG14K,OAGTA,EAAUy5K,GACRhB,EACAl1Q,EACA2C,EACAimM,EACArsM,KAAK85Q,6BACLxtE,EACAssE,GAGJ,OAAO14K,GAEX,EA5uBA,CAAwC,IA8uBxC,Y,+dC7vBA,SAbA,YAIE,WAAYw7F,G,OACV,YAAMA,IAAY,KAMtB,OAX0B,QAQxB,YAAA3H,eAAA,WACE,OAAO,IAAI,GAA0B/zL,OAEzC,EAXA,CAA0Bu9Q,ICG1B,kBAIE,WAAYC,GAIVx9Q,KAAKy9Q,OAAS,IAAI,GAAOD,GAQzBx9Q,KAAK09Q,OAAS,GAuLlB,OA/KE,YAAAhL,OAAA,SAAOp3P,EAAQzY,GAEb,IAAMmH,EAAO,CACX69K,KAAMvsK,EAAO,GACbwsK,KAAMxsK,EAAO,GACbysK,KAAMzsK,EAAO,GACb0sK,KAAM1sK,EAAO,GACbzY,MAAOA,GAGT7C,KAAKy9Q,OAAO/K,OAAO1oQ,GACnBhK,KAAK09Q,OAAO75F,EAAOhhL,IAAUmH,GAQ/B,YAAAosH,KAAA,SAAKunJ,EAASxvP,GAEZ,IADA,IAAMsuE,EAAQ,IAAI37F,MAAMqtB,EAAO9qB,QACtBnB,EAAI,EAAG6e,EAAIoN,EAAO9qB,OAAQnB,EAAI6e,EAAG7e,IAAK,CAC7C,IAAMoZ,EAASqiQ,EAAQz7Q,GACjBW,EAAQsrB,EAAOjsB,GAGf8H,EAAO,CACX69K,KAAMvsK,EAAO,GACbwsK,KAAMxsK,EAAO,GACbysK,KAAMzsK,EAAO,GACb0sK,KAAM1sK,EAAO,GACbzY,MAAOA,GAET45F,EAAMv6F,GAAK8H,EACXhK,KAAK09Q,OAAO75F,EAAOhhL,IAAUmH,EAE/BhK,KAAKy9Q,OAAOrnJ,KAAK35B,IAQnB,YAAAz+D,OAAA,SAAOn7B,GACL,IAAMuR,EAAMyvK,EAAOhhL,GAIbmH,EAAOhK,KAAK09Q,OAAOtpQ,GAEzB,cADOpU,KAAK09Q,OAAOtpQ,GACiB,OAA7BpU,KAAKy9Q,OAAOz/O,OAAOh0B,IAQ5B,YAAA0zE,OAAA,SAAOpiE,EAAQzY,GACb,IAAMmH,EAAOhK,KAAK09Q,OAAO75F,EAAOhhL,IAE3B,GADQ,CAACmH,EAAK69K,KAAM79K,EAAK89K,KAAM99K,EAAK+9K,KAAM/9K,EAAKg+K,MAClC1sK,KAChBtb,KAAKg+B,OAAOn7B,GACZ7C,KAAK0yQ,OAAOp3P,EAAQzY,KAQxB,YAAA+6Q,OAAA,WAEE,OADc59Q,KAAKy9Q,OAAOr8P,MACb9iB,KAAI,SAAU0L,GACzB,OAAOA,EAAKnH,UAShB,YAAAg7Q,YAAA,SAAYviQ,GAEV,IAAMiM,EAAO,CACXsgK,KAAMvsK,EAAO,GACbwsK,KAAMxsK,EAAO,GACbysK,KAAMzsK,EAAO,GACb0sK,KAAM1sK,EAAO,IAGf,OADctb,KAAKy9Q,OAAO3sP,OAAOvJ,GACpBjpB,KAAI,SAAU0L,GACzB,OAAOA,EAAKnH,UAWhB,YAAA0E,QAAA,SAAQgxB,GACN,OAAOv4B,KAAK89Q,SAAS99Q,KAAK49Q,SAAUrlP,IAStC,YAAAwlP,gBAAA,SAAgBziQ,EAAQid,GACtB,OAAOv4B,KAAK89Q,SAAS99Q,KAAK69Q,YAAYviQ,GAASid,IASjD,YAAAulP,SAAA,SAAS3vP,EAAQoK,GAEf,IADA,IAAI3zB,EACK1C,EAAI,EAAG6e,EAAIoN,EAAO9qB,OAAQnB,EAAI6e,EAAG7e,IAExC,GADA0C,EAAS2zB,EAASpK,EAAOjsB,IAEvB,OAAO0C,EAGX,OAAOA,GAMT,YAAAi9L,QAAA,WACE,OAAO,GAAQ7hM,KAAK09Q,SAMtB,YAAA78N,MAAA,WACE7gD,KAAKy9Q,OAAO58N,QACZ7gD,KAAK09Q,OAAS,IAOhB,YAAA32P,UAAA,SAAUsgK,GACR,IAAMljL,EAAOnE,KAAKy9Q,OAAOO,SACzB,OAAO71F,GACLhkL,EAAK0jL,KACL1jL,EAAK2jL,KACL3jL,EAAK4jL,KACL5jL,EAAK6jL,KACLX,IAOJ,YAAAh/K,OAAA,SAAO41Q,GAEL,IAAK,IAAM/7Q,KADXlC,KAAKy9Q,OAAOrnJ,KAAK6nJ,EAAMR,OAAOr8P,OACd68P,EAAMP,OACpB19Q,KAAK09Q,OAAOx7Q,GAAK+7Q,EAAMP,OAAOx7Q,IAGpC,EAvMA,GAyMA,Y,+dCCA,SAASg8Q,GAAkBC,GACzB,OAAKA,EAGDr9Q,MAAMC,QAAQo9Q,GACT,SAAU9qF,GACf,OAAO8qF,GAIoB,mBAApBA,EACFA,EAGF,SAAU9qF,GACf,MAAO,CAAC8qF,IAbD,KAiBX,SAlMA,YAIE,WAAYx+Q,GAAZ,MACE,cAAO,KAMP,EAAK4qL,WAAa,GAAc5qL,EAAQ4qL,YAMxC,EAAK6zF,cAAgBF,GAAkBv+Q,EAAQ0nN,cAM/C,EAAKg3D,8BACiCj6Q,IAApCzE,EAAQ2+Q,yBACJ3+Q,EAAQ2+Q,wBAQd,EAAKp+K,SAAU,EAMf,EAAKwwF,YAA2BtsL,IAAlBzE,EAAQkV,MAAsBlV,EAAQkV,MAAQ,QAM5D,EAAK0pQ,YAA2Bn6Q,IAAlBzE,EAAQ2qL,OAAsB3qL,EAAQ2qL,MAMpD,EAAKk0F,eAAiB7+Q,EAAQskD,YAM9B,EAAKw6N,aAAe,KAMpB,EAAKC,aAAe,KAEpB,IAAM3+Q,EAAO,E,OAKb,EAAK4+Q,aAAe,IAAI//Q,SAAQ,SAAUC,EAAS4W,GACjD1V,EAAK0+Q,aAAe5/Q,EACpBkB,EAAK2+Q,aAAejpQ,K,EAgG1B,OAxKqB,QAiFnB,YAAA2xM,gBAAA,WACE,OAAOpnN,KAAKo+Q,eAOd,YAAA92D,2BAAA,WACE,OAAOtnN,KAAKq+Q,0BAQd,YAAAn8P,cAAA,WACE,OAAOliB,KAAKuqL,YAOd,YAAAr1K,eAAA,WACE,OAAO,KAMT,YAAA8tM,QAAA,WACE,OAAOhjN,KAAK2+Q,cAQd,YAAAzrF,SAAA,WACE,OAAOlzL,KAAK0wL,QAMd,YAAAqF,SAAA,WACE,OAAO/1L,KAAKu+Q,QAMd,YAAAK,eAAA,WACE,OAAO5+Q,KAAKw+Q,cAOd,YAAAhvP,QAAA,WACExvB,KAAK2zF,WAUP,YAAAkrL,gBAAA,SAAgBx3D,GACdrnN,KAAKo+Q,cAAgBF,GAAkB72D,GACvCrnN,KAAK2zF,WAOP,YAAAh/E,SAAA,SAASE,GACP7U,KAAK0wL,OAAS77K,EACd7U,KAAK2zF,WAET,EAxKA,CAAqB,IC5CrB,IAMEmrL,WAAY,aAOZC,cAAe,gBAOfpxF,MAAO,QAQPqxF,cAAe,gBAOfC,kBAAmB,oBAOnBC,gBAAiB,kBAOjBC,kBAAmB,qBC3Cd,SAAS,GAAI7jQ,EAAQ6oC,GAC1B,MAAO,CAAC,EAAE6R,EAAAA,GAAWA,EAAAA,EAAUA,EAAAA,EAAUA,EAAAA,I,+dCuB3C,eAME,WAAY7rD,EAAMi1Q,EAAaC,GAA/B,MACE,YAAMl1Q,IAAK,K,OAOX,EAAK1G,QAAU27Q,EAOf,EAAKtwQ,SAAWuwQ,E,EAEpB,OAvBuC,QAuBvC,EAvBA,CAAuCv/O,IAwIvC,eAIE,WAAY47J,GAAZ,WACQ/7L,EAAU+7L,GAAe,I,EAE/B,YAAM,CACJ2rB,aAAc1nN,EAAQ0nN,aACtBpjK,aAAa,EACbsmI,gBAAYnmL,EACZyQ,MAAO,QACPy1K,WAAyBlmL,IAAlBzE,EAAQ2qL,OAAsB3qL,EAAQ2qL,SAC7C,MAKGj8K,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKywF,QAAUz6F,EAMf,EAAK06F,QAAU5/Q,EAAQqT,OAMvB,EAAK0gQ,eAAiCtvQ,IAArBzE,EAAQ2uQ,UAAgC3uQ,EAAQ2uQ,SAMjE,EAAKkR,KAAO7/Q,EAAQ0V,SAEGjR,IAAnBzE,EAAQ8/Q,OACV,EAAKH,QAAU3/Q,EAAQ8/Q,YACAr7Q,IAAd,EAAKo7Q,OACd,EAAO,EAAKD,QAAS,GAErB,EAAKD,QAAUj0P,GACb,EAAKm0P,KACkD,EAAY,UAQvE,EAAKE,eACkBt7Q,IAArBzE,EAAQggR,SAAyBhgR,EAAQggR,SAAW,GAEtD,IAqDItmP,EAAYvqB,EArDV8wQ,OACwBx7Q,IAA5BzE,EAAQigR,iBAAgCjgR,EAAQigR,gB,OAMlD,EAAKC,eAAiBD,EAAkB,IAAI,GAAU,KAMtD,EAAKE,oBAAsB,IAAI,GAM/B,EAAKC,qBAAuB,EAM5B,EAAKC,sBAAwB,GAO7B,EAAKC,SAAW,GAOhB,EAAKC,UAAY,GAMjB,EAAKC,mBAAqB,GAM1B,EAAKC,oBAAsB,KAGvBt/Q,MAAMC,QAAQpB,EAAQmP,UACxBA,EAEInP,EAAgB,SAEXA,EAAQmP,WAKjBA,GAJAuqB,EAEI15B,EAAgB,UAEEq8L,YAEnB4jF,QAAkCx7Q,IAAfi1B,IACtBA,EAAa,IAAI,GAAWvqB,SAEb1K,IAAb0K,GACF,EAAKuxQ,oBAAoBvxQ,QAER1K,IAAfi1B,GACF,EAAKinP,wBAAwBjnP,G,EAizBnC,OAl8B2B,QAiKzB,YAAAzB,WAAA,SAAWn0B,GACTzD,KAAKugR,mBAAmB98Q,GACxBzD,KAAK2zF,WAQP,YAAA4sL,mBAAA,SAAmB98Q,GACjB,IAAM+8Q,EAAa38F,EAAOpgL,GAE1B,GAAKzD,KAAKygR,YAAYD,EAAY/8Q,GAAlC,CAOAzD,KAAK0gR,mBAAmBF,EAAY/8Q,GAEpC,IAAMnD,EAAWmD,EAAQtC,cACzB,GAAIb,EAAU,CACZ,IAAMgb,EAAShb,EAASymB,YACpB/mB,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAenN,OAAOp3P,EAAQ7X,QAGrCzD,KAAKggR,sBAAsBQ,GAAc/8Q,EAG3CzD,KAAKggC,cACH,IAAI2gP,GAAkBC,GAAgB9B,WAAYr7Q,SAnB9CzD,KAAKogR,qBACPpgR,KAAKogR,oBAAoBpiP,OAAOv6B,IA2BtC,YAAAi9Q,mBAAA,SAAmBF,EAAY/8Q,GAC7BzD,KAAKmgR,mBAAmBK,GAAc,CACpCjyF,GAAO9qL,EAASsrL,GAAUhyC,OAAQ/8I,KAAK6gR,qBAAsB7gR,MAC7DuuL,GACE9qL,EACAqsL,GACA9vL,KAAK6gR,qBACL7gR,QAYN,YAAAygR,YAAA,SAAYD,EAAY/8Q,GACtB,IAAIq9Q,GAAQ,EACN1hR,EAAKqE,EAAQE,QAYnB,YAXWS,IAAPhF,IACIA,EAAG6jB,aAAcjjB,KAAKigR,SAG1Ba,GAAQ,EAFR9gR,KAAKigR,SAAS7gR,EAAG6jB,YAAcxf,GAK/Bq9Q,IACF,IAASN,KAAcxgR,KAAKkgR,WAAY,IACxClgR,KAAKkgR,UAAUM,GAAc/8Q,GAExBq9Q,GAQT,YAAAjpP,YAAA,SAAY/oB,GACV9O,KAAKqgR,oBAAoBvxQ,GACzB9O,KAAK2zF,WAQP,YAAA0sL,oBAAA,SAAoBvxQ,GAKlB,IAJA,IAAM6uQ,EAAU,GACV5xG,EAAc,GACdg1G,EAAmB,GAEhB7+Q,EAAI,EAAG,EAAS4M,EAASzL,OAAQnB,EAAI,EAAQA,IAAK,CACzD,IACMs+Q,EAAa38F,EADbpgL,EAAUqL,EAAS5M,IAErBlC,KAAKygR,YAAYD,EAAY/8Q,IAC/BsoK,EAAY3jK,KAAK3E,GAIZvB,EAAI,EAAb,IAAK,IAAW,EAAS6pK,EAAY1oK,OAAQnB,EAAI,EAAQA,IAAK,CAC5D,IAAMuB,EACA+8Q,EAAa38F,EADbpgL,EAAUsoK,EAAY7pK,IAE5BlC,KAAK0gR,mBAAmBF,EAAY/8Q,GAEpC,IAAMnD,EAAWmD,EAAQtC,cACzB,GAAIb,EAAU,CACZ,IAAMgb,EAAShb,EAASymB,YACxB42P,EAAQv1Q,KAAKkT,GACbylQ,EAAiB34Q,KAAK3E,QAEtBzD,KAAKggR,sBAAsBQ,GAAc/8Q,EAO7C,GAJIzD,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAezpJ,KAAKunJ,EAASoD,GAGhC/gR,KAAKosL,YAAYw0F,GAAgB9B,YAC9B,CAAI58Q,EAAI,EAAb,IAAK,IAAW,EAAS6pK,EAAY1oK,OAAQnB,EAAI,EAAQA,IACvDlC,KAAKggC,cACH,IAAI2gP,GAAkBC,GAAgB9B,WAAY/yG,EAAY7pK,OAUtE,YAAAo+Q,wBAAA,SAAwBjnP,GACtB,IAAI2nP,GAAsB,EAC1BhhR,KAAK4L,iBACHg1Q,GAAgB9B,YAIhB,SAAUh/N,GACHkhO,IACHA,GAAsB,EACtB3nP,EAAWjxB,KAAK03C,EAAIr8C,SACpBu9Q,GAAsB,MAI5BhhR,KAAK4L,iBACHg1Q,GAAgB5B,eAIhB,SAAUl/N,GACHkhO,IACHA,GAAsB,EACtB3nP,EAAW2E,OAAO8hB,EAAIr8C,SACtBu9Q,GAAsB,MAI5B3nP,EAAWztB,iBACTuwL,GAIA,SAAUr8I,GACHkhO,IACHA,GAAsB,EACtBhhR,KAAK43B,WAEDkoB,EAAW,SAGfkhO,GAAsB,IAExB9gO,KAAKlgD,OAETq5B,EAAWztB,iBACTuwL,GAIA,SAAUr8I,GACHkhO,IACHA,GAAsB,EACtBhhR,KAAK83B,cAEDgoB,EAAW,SAGfkhO,GAAsB,IAExB9gO,KAAKlgD,OAETA,KAAKogR,oBAAsB/mP,GAQ7B,YAAAwnB,MAAA,SAAMogO,GACJ,GAAIA,EAAU,CACZ,IAAK,IAAM/2L,KAAalqF,KAAKmgR,mBAAoB,CAClCngR,KAAKmgR,mBAAmBj2L,GAChC3iF,QAAQqnL,IAEV5uL,KAAKogR,sBACRpgR,KAAKmgR,mBAAqB,GAC1BngR,KAAKigR,SAAW,GAChBjgR,KAAKkgR,UAAY,SAGnB,GAAIlgR,KAAK6/Q,eAAgB,CACvB,IAAMqB,EAAwB,SAAUz9Q,GACtCzD,KAAKmhR,sBAAsB19Q,IAC3By8C,KAAKlgD,MAEP,IAAK,IAAMZ,KADXY,KAAK6/Q,eAAet4Q,QAAQ25Q,GACXlhR,KAAKggR,sBACpBhgR,KAAKmhR,sBAAsBnhR,KAAKggR,sBAAsB5gR,IAIxDY,KAAKogR,qBACPpgR,KAAKogR,oBAAoBv/N,QAGvB7gD,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAeh/N,QAEtB7gD,KAAKggR,sBAAwB,GAE7B,IAAMoB,EAAa,IAAIT,GAAkBC,GAAgBjzF,OACzD3tL,KAAKggC,cAAcohP,GACnBphR,KAAK2zF,WAeP,YAAA0tL,eAAA,SAAe9oP,GACb,GAAIv4B,KAAK6/Q,eACP,OAAO7/Q,KAAK6/Q,eAAet4Q,QAAQgxB,GAC1Bv4B,KAAKogR,qBACdpgR,KAAKogR,oBAAoB74Q,QAAQgxB,IAgBrC,YAAA+oP,iCAAA,SAAiC79L,EAAYlrD,GAC3C,IAAMjd,EAAS,CAACmoE,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,IACxE,OAAOzjF,KAAKuhR,uBAAuBjmQ,GAAQ,SAAU7X,GAEnD,OADiBA,EAAQtC,cACZ6rM,qBAAqBvpH,GACzBlrD,EAAS90B,QAEhB,MAwBN,YAAA89Q,uBAAA,SAAuBjmQ,EAAQid,GAC7B,GAAIv4B,KAAK6/Q,eACP,OAAO7/Q,KAAK6/Q,eAAe9B,gBAAgBziQ,EAAQid,GAC1Cv4B,KAAKogR,qBACdpgR,KAAKogR,oBAAoB74Q,QAAQgxB,IAmBrC,YAAAipP,iCAAA,SAAiClmQ,EAAQid,GACvC,OAAOv4B,KAAKuhR,uBACVjmQ,GAKA,SAAU7X,GAER,GADiBA,EAAQtC,cACZosM,iBAAiBjyL,GAAS,CACrC,IAAM1W,EAAS2zB,EAAS90B,GACxB,GAAImB,EACF,OAAOA,OAcjB,YAAA68Q,sBAAA,WACE,OAAOzhR,KAAKogR,qBASd,YAAAxhL,YAAA,WACE,IAAI9vF,EASJ,OARI9O,KAAKogR,oBACPtxQ,EAAW9O,KAAKogR,oBAAoBpkF,WAAWrxL,MAAM,GAC5C3K,KAAK6/Q,iBACd/wQ,EAAW9O,KAAK6/Q,eAAejC,SAC1B,GAAQ59Q,KAAKggR,wBAChB,EAAOlxQ,EAAU+9K,GAAU7sL,KAAKggR,yBAGmC,GAWzE,YAAA0B,wBAAA,SAAwBj+L,GACtB,IAAM30E,EAAW,GAIjB,OAHA9O,KAAKshR,iCAAiC79L,GAAY,SAAUhgF,GAC1DqL,EAAS1G,KAAK3E,MAETqL,GAiBT,YAAAwrB,oBAAA,SAAoBhf,EAAQqmQ,GAA5B,WACE,GAAI3hR,KAAK6/Q,eAAgB,CAIvB,KAFE8B,GAAkBA,EAAel3F,YAAczqL,KAAK+1L,YAGpD,OAAO/1L,KAAK6/Q,eAAehC,YAAYviQ,GAGzC,IAAMqiQ,EzLkJL,SAAuBriQ,EAAQivK,GACpC,GAAIA,EAAWE,WAAY,CACzB,IAAMD,EAAmBD,EAAWxjK,YAEpC,IAAK64I,SAAStkJ,EAAO,MAAQskJ,SAAStkJ,EAAO,IAC3C,MAAO,CAAC,CAACkvK,EAAiB,GAAIlvK,EAAO,GAAIkvK,EAAiB,GAAIlvK,EAAO,KAGvEgvK,GAAMhvK,EAAQivK,GACd,IAAMG,EAAa9B,GAAS4B,GAE5B,GAAI5B,GAASttK,GAAUovK,EAErB,MAAO,CAAC,CAACF,EAAiB,GAAIlvK,EAAO,GAAIkvK,EAAiB,GAAIlvK,EAAO,KAChE,GAAIA,EAAO,GAAKkvK,EAAiB,GAEtC,MAAO,CACL,CAAClvK,EAAO,GAAKovK,EAAYpvK,EAAO,GAAIkvK,EAAiB,GAAIlvK,EAAO,IAChE,CAACkvK,EAAiB,GAAIlvK,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAEhD,GAAIA,EAAO,GAAKkvK,EAAiB,GAEtC,MAAO,CACL,CAAClvK,EAAO,GAAIA,EAAO,GAAIkvK,EAAiB,GAAIlvK,EAAO,IACnD,CAACkvK,EAAiB,GAAIlvK,EAAO,GAAIA,EAAO,GAAKovK,EAAYpvK,EAAO,KAKtE,MAAO,CAACA,GyL/KYsmQ,CAActmQ,EAAQqmQ,GAEtC,MAAO,GAAGt5Q,OAAM,MAAT,GACFs1Q,EAAQr/Q,KAAI,SAACujR,GAAa,SAAKhC,eAAehC,YAAYgE,OAE1D,OAAI7hR,KAAKogR,oBACPpgR,KAAKogR,oBAAoBpkF,WAAWrxL,MAAM,GAE1C,IAgBX,YAAAm3Q,8BAAA,SAA8Br+L,EAAYqtJ,GAQxC,IAAMnjN,EAAI81D,EAAW,GACf71D,EAAI61D,EAAW,GACjBs+L,EAAiB,KACfn1E,EAAe,CAACt1I,IAAKA,KACvBu1I,EAAqB72I,EAAAA,EACnB16C,EAAS,EAAE06C,EAAAA,GAAWA,EAAAA,EAAUA,EAAAA,EAAUA,EAAAA,GAC1C9wD,EAAS4rO,GAA0BnsD,EA+BzC,OA9BA3kL,KAAK6/Q,eAAe9B,gBAClBziQ,GAIA,SAAU7X,GACR,GAAIyB,EAAOzB,GAAU,CACnB,IAAMnD,EAAWmD,EAAQtC,cACnB6gR,EAA6Bn1E,EAOnC,IANAA,EAAqBvsM,EAASqsM,eAC5Bh/K,EACAC,EACAg/K,EACAC,IAEuBm1E,EAA4B,CACnDD,EAAiBt+Q,EAKjB,IAAM+qE,EAAcjtE,KAAKkrC,KAAKogK,GAC9BvxL,EAAO,GAAKqS,EAAI6gD,EAChBlzD,EAAO,GAAKsS,EAAI4gD,EAChBlzD,EAAO,GAAKqS,EAAI6gD,EAChBlzD,EAAO,GAAKsS,EAAI4gD,OAKjBuzM,GAaT,YAAAh7P,UAAA,SAAUsgK,GACR,OAAOrnL,KAAK6/Q,eAAe94P,UAAUsgK,IAYvC,YAAApvJ,eAAA,SAAe74B,GACb,IAAMqE,EAAUzD,KAAKigR,SAAS7gR,EAAG6jB,YACjC,YAAmB7e,IAAZX,EAAwBA,EAAU,MAS3C,YAAAw+Q,gBAAA,SAAgB7tQ,GACd,IAAM3Q,EAAUzD,KAAKkgR,UAAU9rQ,GAC/B,YAAmBhQ,IAAZX,EAAwBA,EAAU,MAS3C,YAAAy+Q,UAAA,WACE,OAAOliR,KAAKu/Q,SAMd,YAAAjC,YAAA,WACE,OAAOt9Q,KAAK0zQ,WASd,YAAA13O,OAAA,WACE,OAAOh8B,KAAKw/Q,MAOd,YAAAqB,qBAAA,SAAqBhhP,GACnB,IAAMp8B,EACJo8B,EAAY,OAER2gP,EAAa38F,EAAOpgL,GACpBnD,EAAWmD,EAAQtC,cACzB,GAAKb,EAOE,CACL,IAAMgb,EAAShb,EAASymB,YACpBy5P,KAAcxgR,KAAKggR,8BACdhgR,KAAKggR,sBAAsBQ,GAC9BxgR,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAenN,OAAOp3P,EAAQ7X,IAGjCzD,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAeniM,OAAOpiE,EAAQ7X,QAfjC+8Q,KAAcxgR,KAAKggR,wBACnBhgR,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAe7hP,OAAOv6B,GAE7BzD,KAAKggR,sBAAsBQ,GAAc/8Q,GAe7C,IAAMrE,EAAKqE,EAAQE,QACnB,QAAWS,IAAPhF,EAAkB,CACpB,IAAM+iR,EAAM/iR,EAAG6jB,WACXjjB,KAAKigR,SAASkC,KAAS1+Q,IACzBzD,KAAKoiR,mBAAmB3+Q,GACxBzD,KAAKigR,SAASkC,GAAO1+Q,QAGvBzD,KAAKoiR,mBAAmB3+Q,GACxBzD,KAAKkgR,UAAUM,GAAc/8Q,EAE/BzD,KAAK2zF,UACL3zF,KAAKggC,cACH,IAAI2gP,GAAkBC,GAAgB7B,cAAet7Q,KAUzD,YAAA4+Q,WAAA,SAAW5+Q,GACT,IAAMrE,EAAKqE,EAAQE,QACnB,YAAWS,IAAPhF,EACKA,KAAMY,KAAKigR,SAEXp8F,EAAOpgL,KAAYzD,KAAKkgR,WAOnC,YAAAr+E,QAAA,WACE,OAAI7hM,KAAK6/Q,eAEL7/Q,KAAK6/Q,eAAeh+E,WAAa,GAAQ7hM,KAAKggR,wBAG9ChgR,KAAKogR,qBACyC,IAAzCpgR,KAAKogR,oBAAoB1vQ,aAUpC,YAAAwsQ,aAAA,SAAa5hQ,EAAQ6oC,EAAYomI,GAG/B,IAFA,IAAM+3F,EAAqBtiR,KAAK8/Q,oBAC1ByC,EAAgBviR,KAAK0/Q,UAAUpkQ,EAAQ6oC,EAAYomI,G,WAChDroL,EAAOgiB,GACd,IAAMs+P,EAAeD,EAAcrgR,GACbogR,EAAmBvE,gBACvCyE,GAKA,SAAUz6N,GACR,OAAO0/H,GAAe1/H,EAAOzsC,OAAQknQ,UAIrC,EAAKzC,qBACP,EAAK//O,cACH,IAAI2gP,GAAkBC,GAAgB3B,oBAExC,EAAKK,QAAQ5+Q,KAAK,EAEhB8hR,EACAr+N,EACAomI,EACA,SAAUz7K,KACN9O,KAAK+/Q,qBACP//Q,KAAKggC,cACH,IAAI2gP,GACFC,GAAgB1B,qBAChB96Q,EACA0K,KAGJoxC,KAAK,GACP,aACIlgD,KAAK+/Q,qBACP//Q,KAAKggC,cACH,IAAI2gP,GAAkBC,GAAgBzB,qBAExCj/N,KAAK,IAEToiO,EAAmB5P,OAAO8P,EAAc,CAAClnQ,OAAQknQ,EAAa73Q,Y,OAvCzDzI,EAAI,EAAGgiB,EAAKq+P,EAAcl/Q,OAAQnB,EAAIgiB,IAAMhiB,E,EAA5CA,GA0CTlC,KAAKkgG,UACHlgG,KAAKs/Q,QAAQj8Q,OAAS,IAAYrD,KAAK+/Q,qBAAuB,GAGlE,YAAAvwP,QAAA,WACExvB,KAAK6gD,OAAM,GACX7gD,KAAK8/Q,oBAAoBj/N,QACzB,YAAMrxB,QAAO,YAQf,YAAAizP,mBAAA,SAAmBnnQ,GACjB,IACIqgB,EADE2mP,EAAqBtiR,KAAK8/Q,oBAEhCwC,EAAmBvE,gBAAgBziQ,GAAQ,SAAUysC,GACnD,GAAI,GAAOA,EAAOzsC,OAAQA,GAExB,OADAqgB,EAAMosB,GACC,KAGPpsB,GACF2mP,EAAmBtkP,OAAOrC,IAW9B,YAAA7D,cAAA,SAAcr0B,GACZ,GAAKA,EAAL,CAGA,IAAM+8Q,EAAa38F,EAAOpgL,GACtB+8Q,KAAcxgR,KAAKggR,6BACdhgR,KAAKggR,sBAAsBQ,GAE9BxgR,KAAK6/Q,gBACP7/Q,KAAK6/Q,eAAe7hP,OAAOv6B,GAGhBzD,KAAKmhR,sBAAsB19Q,IAExCzD,KAAK2zF,YAWT,YAAAwtL,sBAAA,SAAsB19Q,GACpB,IAAM+8Q,EAAa38F,EAAOpgL,GACpBi/Q,EAAoB1iR,KAAKmgR,mBAAmBK,GAClD,GAAKkC,EAAL,CAGAA,EAAkBn7Q,QAAQqnL,WACnB5uL,KAAKmgR,mBAAmBK,GAC/B,IAAMphR,EAAKqE,EAAQE,QAQnB,YAPWS,IAAPhF,UACKY,KAAKigR,SAAS7gR,EAAG6jB,mBAEnBjjB,KAAKkgR,UAAUM,GACtBxgR,KAAKggC,cACH,IAAI2gP,GAAkBC,GAAgB5B,cAAev7Q,IAEhDA,IAUT,YAAA2+Q,mBAAA,SAAmB3+Q,GACjB,IAAIk/Q,GAAU,EACd,IAAK,IAAMvjR,KAAMY,KAAKigR,SACpB,GAAIjgR,KAAKigR,SAAS7gR,KAAQqE,EAAS,QAC1BzD,KAAKigR,SAAS7gR,GACrBujR,GAAU,EACV,MAGJ,OAAOA,GAST,YAAAC,UAAA,SAAUnD,GACRz/Q,KAAKs/Q,QAAUG,GAQjB,YAAAoD,OAAA,SAAOxtQ,GACL,EAAOrV,KAAKu/Q,QAAS,GACrBv/Q,KAAKw/Q,KAAOnqQ,EACZrV,KAAK4iR,UAAUv3P,GAAIhW,EAAKrV,KAAKu/Q,WAEjC,EAl8BA,CAA2B,IAo8B3B,Y,+dCr/BM,GACG,QADH,GAES,aAFT,GAGK,UAHL,GAII,SAMJuD,GAMO,YANPA,GAYK,UAZLA,GAkBO,YAQb,eAKE,WAAY34Q,EAAM1G,GAAlB,MACE,YAAM0G,IAAK,K,OAOX,EAAK1G,QAAUA,E,EAEnB,OAf+B,QAe/B,EAfA,CAA+Bq8B,IAkC/B,eAIE,WAAYngC,GAAZ,WACQ+vN,EAA+D,EAGhEA,EAAejG,WAClBiG,EAAejG,SAAW7kC,I,EAG5B,YAAM8qC,IAAe,MAKhBrhN,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKk0F,eAAgB,EAMrB,EAAKC,QAAU,KAMf,EAAKC,aAML,EAAKC,cAOL,EAAKC,aAML,EAAKC,WAAY,EAOjB,EAAKC,QAAU1jR,EAAQgb,OAAShb,EAAQgb,OAAS,KAOjD,EAAK2oQ,UAAY3jR,EAAQmP,SAAWnP,EAAQmP,SAAW,KAOvD,EAAKy0Q,eAAiB5jR,EAAQ6jR,cAAgB7jR,EAAQ6jR,cAAgB,GAOtE,EAAKC,MACH9jR,EAAY,KAQd,EAAKkvN,MAo9BT,SAAiB1kN,GACf,OAAQA,GACN,IAAK,QACL,IAAK,aACH,OAAO,GACT,IAAK,aACL,IAAK,kBACH,OAAO,GACT,IAAK,UACL,IAAK,eACH,OAAO,GACT,IAAK,SACH,OAAO,GACT,QACE,MAAM,IAAInL,MAAM,iBAAmBmL,IAl+BxBu5Q,CAAQ,EAAKD,OAQ1B,EAAKE,aAAehkR,EAAQikR,UAS5B,EAAKC,WAAalkR,EAAQmkR,UACtBnkR,EAAQmkR,UACR,EAAKj1D,QAAU,GACf,EACA,EAQJ,EAAKk1D,WACH,EAAKl1D,QAAU,GACX,EACAlvN,EAAQqkR,UACRrkR,EAAQqkR,UACRhuN,EAAAA,EAON,EAAKiuN,iBAAmBtkR,EAAQukR,gBAC5BvkR,EAAQukR,gBACRv/F,EAMJ,EAAKw/F,gBAAkBxkR,EAAQy7O,eAC3Bz7O,EAAQy7O,eACR,MAEJ,IAAIgpC,EAAmBzkR,EAAQykR,iBAC/B,IAAKA,EAAkB,CACrB,IA6BM,EA7BA,EAAO,EAAKv1D,MAClB,GAAI,IAAS,GAOXu1D,EAAmB,SAAUh6Q,EAAa9J,EAAUiqL,GAClD,IAAM4J,EAAS7zL,GAEX,IAAI,GAAO,CAACg3D,IAAKA,MACf32D,EAAS,GAAmByJ,EAAY,GAAImgL,GAC5C85F,EAAgB,GACpB1jR,EACA,GAAmByJ,EAAYA,EAAY/G,OAAS,GAAIknL,IAE1D4J,EAAOgrC,mBACLx+N,EACAY,KAAKkrC,KAAK43O,GACVrkR,KAAKmkR,iBAEP,IAAMl7E,EAAiB,KAIvB,OAHIA,GACF9U,EAAOn7C,UAAUuxC,EAAY0e,GAExB9U,QAIL,IAAS,GACX,EAAc,GACL,IAAS,GAClB,EAAc,GACL,IAAS,KAClB,EAAc,IAQhBiwF,EAAmB,SAAUh6Q,EAAa9J,EAAUiqL,GAkBlD,OAjBIjqL,EACE,IAAS,GACP8J,EAAY,GAAG/G,OAEjB/C,EAASW,eACP,CAACmJ,EAAY,GAAG/B,OAAO,CAAC+B,EAAY,GAAG,MACvCpK,KAAKmkR,iBAGP7jR,EAASW,eAAe,GAAIjB,KAAKmkR,iBAGnC7jR,EAASW,eAAemJ,EAAapK,KAAKmkR,iBAG5C7jR,EAAW,IAAI,EAAY8J,EAAapK,KAAKmkR,iBAExC7jR,G,OASb,EAAK2uP,kBAAoBm1B,EAMzB,EAAKE,sBACyBlgR,IAA5BzE,EAAQ4kR,gBAAgC5kR,EAAQ4kR,gBAAkB,IAQpE,EAAKC,kBAAoB,KAOzB,EAAKC,eAAiB,KAOtB,EAAKC,aAAe,KAOpB,EAAKC,cAAgB,KAOrB,EAAKC,YAAc,KAOnB,EAAKC,kBAAoB,KASzB,EAAKC,uBAAyBnlR,EAAQolR,eAClCplR,EAAQolR,eAAiBplR,EAAQolR,eACjC,GAOJ,EAAKC,SAAW,IAAIpzP,GAAY,CAC9BjX,OAAQ,IAAI,GAAa,CACvBilQ,iBAAiB,EACjBt1F,QAAO3qL,EAAQ2qL,OAAQ3qL,EAAQ2qL,QAEjC3kL,MAAOhG,EAAQgG,MAAQhG,EAAQgG,MAAQs/Q,KACvChmB,wBAAwB,IAQ1B,EAAK3kC,cAAgB36N,EAAQ8+D,aAM7B,EAAK4sJ,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAY0nN,GAM1D,EAAK06D,mBACDvlR,EAAQwlR,SACV,EAAKD,mBAAqB96D,GAE1B,EAAK86D,mBAAqBvlR,EAAQylR,kBAC9BzlR,EAAQylR,kBACR36D,GAGN,EAAK16B,kBAAkB,GAA4B,EAAKs1F,c,EA0oB5D,OAn9BmB,QAkVjB,YAAA93N,OAAA,SAAOjvD,GACL,YAAMivD,OAAM,UAACjvD,GACb0B,KAAKqlR,gBAQP,YAAAC,WAAA,WACE,OAAOtlR,KAAKglR,UASd,YAAAz3F,YAAA,SAAY1tJ,GACNA,EAAM49J,cAActzL,OAAS4kL,GAAUnB,aAEzC/tJ,EAAM49J,cAActtF,iBAEtBnwG,KAAKojR,UACHpjR,KAAK6uN,QAAU,IAAc7uN,KAAKklR,mBAAmBrlP,GACvD,IAAImhH,EAAOnhH,EAAM11B,OAAS,eACtB6/M,GAAO,GAERhqN,KAAKojR,WACNpjR,KAAKkjR,eACLrjP,EAAM11B,OAAS,iBAEH05B,KAAKC,MACP9jC,KAAKkjR,eAAiBljR,KAAKskR,kBACnCtkR,KAAKgjR,QAAUnjP,EAAMuzJ,MACrBpzL,KAAK+iR,eAAiB/iR,KAAKojR,UAC3BpiI,GAAO,GAEPhhJ,KAAKkjR,mBAAgB9+Q,EAEnBpE,KAAK+iR,oBAAuC3+Q,IAAtBpE,KAAKijR,eAC7Bj8N,aAAahnD,KAAKijR,cAClBjjR,KAAKijR,kBAAe7+Q,IAkCxB,OA9BEpE,KAAKojR,WACLvjP,EAAM11B,OAAS,gBACS,OAAxBnK,KAAKykR,gBAELzkR,KAAKulR,cAAc1lP,EAAM4jD,YACzBumI,GAAO,GAEPhqN,KAAKojR,WACLvjP,EAAM11B,OAAS,eAEf6/M,GAAO,EACEhpE,GAAQhhJ,KAAK4pN,kBAAoB,GAC1CI,EAAOnqL,EAAM11B,OAAS,iBACVnK,KAAKojR,WACfpjR,KAAKkgM,mBAAmBrgK,GACpB7/B,KAAK+iR,eAEPljP,EAAM49J,cAActtF,mBAGc,UAApCtwE,EAAM49J,cAAcotB,aACnBhrL,EAAM11B,OAAS,qBACQ/F,IAAtBpE,KAAKijR,eAEPjjR,KAAKkgM,mBAAmBrgK,GAEjBA,EAAM11B,OAAS,cACxB6/M,GAAO,GAGF,YAAMz8B,YAAW,UAAC1tJ,IAAUmqL,GAQrC,YAAAX,gBAAA,SAAgBxpL,GAGd,OAFA7/B,KAAK+iR,eAAiB/iR,KAAKojR,UAEvBpjR,KAAKojR,WACPpjR,KAAKgjR,QAAUnjP,EAAMuzJ,MAChBpzL,KAAKwkR,mBACRxkR,KAAKwlR,cAAc3lP,EAAM4jD,aAEpB,GACEzjF,KAAKqrN,WAAWxrL,IACzB7/B,KAAKkjR,cAAgBr/O,KAAKC,MAC1B9jC,KAAKijR,aAAeh8N,WAClB,WACEjnD,KAAKkgM,mBACH,IAAI,GACF,eACArgK,EAAMvhC,IACNuhC,EAAM49J,eACN,EACA59J,EAAMwzJ,cAGVnzI,KAAKlgD,MACPA,KAAKskR,kBAEPtkR,KAAKgjR,QAAUnjP,EAAMuzJ,OACd,IAEPpzL,KAAKkjR,mBAAgB9+Q,GACd,IASX,YAAAolN,cAAA,SAAc3pL,GACZ,IAAImqL,GAAO,EAEX,GAA+B,IAA3BhqN,KAAK4pN,kBAQP,GAPI5pN,KAAKijR,eACPj8N,aAAahnD,KAAKijR,cAClBjjR,KAAKijR,kBAAe7+Q,GAGtBpE,KAAKkgM,mBAAmBrgK,GAEpB7/B,KAAK+iR,cAAe,CACtB,IAAM0C,GAAkBzlR,KAAKwkR,kBACzBiB,GACFzlR,KAAKwlR,cAAc3lP,EAAM4jD,aAEtBgiM,GAAkBzlR,KAAKojR,UAC1BpjR,KAAK0lR,gBAEJ1lR,KAAKojR,WACJqC,GAAkBzlR,KAAK6uN,QAAU,KAE/B7uN,KAAK2lR,UAAU9lP,EAAMuzJ,OACnBpzL,KAAKikR,iBAAiBpkP,IACxB7/B,KAAK0lR,gBAGP1lR,KAAKulR,cAAc1lP,EAAM4jD,aAG7BumI,GAAO,OACEhqN,KAAKojR,WACdpjR,KAAK4lR,eAOT,OAHK57D,GAAQhqN,KAAK2jR,YAChB9jP,EAAMswE,iBAED65G,GAQT,YAAA9pB,mBAAA,SAAmBrgK,GAEjB,GADA7/B,KAAKmjR,aAAetjP,EAAM49J,cAAcotB,YAEtC7qN,KAAKgjR,WACFhjR,KAAKojR,WAAapjR,KAAK+iR,eACvB/iR,KAAKojR,YAAcpjR,KAAK+iR,eAC3B,CACA,IAAM8C,EAAS7lR,KAAKgjR,QACd8C,EAAUjmP,EAAMuzJ,MAChBvwI,EAAKgjO,EAAO,GAAKC,EAAQ,GACzBhjO,EAAK+iO,EAAO,GAAKC,EAAQ,GACzB92E,EAAkBnsJ,EAAKA,EAAKC,EAAKA,EAIvC,GAHA9iD,KAAK+iR,cAAgB/iR,KAAKojR,UACtBp0E,EAAkBhvM,KAAK8kR,uBACvB91E,GAAmBhvM,KAAK8kR,wBACvB9kR,KAAK+iR,cACR,OAIA/iR,KAAKwkR,kBACPxkR,KAAK+lR,eAAelmP,EAAM4jD,YAE1BzjF,KAAKgmR,2BAA2BnmP,EAAM4jD,WAAW94E,UAUrD,YAAAg7Q,UAAA,SAAUvyF,GACR,IAAI6yF,GAAK,EACT,GAAIjmR,KAAKykR,eAAgB,CACvB,IAAIyB,GAAkB,EAClBC,EAA+B,CAACnmR,KAAKwkR,mBACnCvxP,EAAOjzB,KAAK6uN,MAClB,GAAI57L,IAAS,GACXgzP,GAAK,OACA,GAAIhzP,IAAS,GAClBgzP,EAAmC,IAA9BjmR,KAAK2kR,cAActhR,YACnB,GAAI4vB,IAAS,GAClBizP,EAAkBlmR,KAAK2kR,cAActhR,OAASrD,KAAK6jR,gBAC9C,GAAI5wP,IAAS,GAAc,CAChC,IAAMmzP,EAA6CpmR,KAAkB,cACrEkmR,EAAkBE,EAAa,GAAG/iR,OAASrD,KAAK6jR,WAChDsC,EAA+B,CAC7BC,EAAa,GAAG,GAChBA,EAAa,GAAGA,EAAa,GAAG/iR,OAAS,IAG7C,GAAI6iR,EAEF,IADA,IAAM5nR,EAAM0B,KAAKwxD,SACRtvD,EAAI,EAAGgiB,EAAKiiQ,EAA6B9iR,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACrE,IAAMmkR,EAAmBF,EAA6BjkR,GAChDokR,EAAchoR,EAAIw3D,uBAAuBuwN,GACzCxjO,EAAKuwI,EAAM,GAAKkzF,EAAY,GAC5BxjO,EAAKswI,EAAM,GAAKkzF,EAAY,GAC5B9C,EAAgBxjR,KAAKojR,UAAY,EAAIpjR,KAAKujR,eAEhD,GADA0C,EAAK1kR,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,IAAO0gO,EAC7B,CACNxjR,KAAKwkR,kBAAoB6B,EACzB,QAKR,OAAOJ,GAOT,YAAAD,2BAAA,SAA2B57Q,GACpBpK,KAAK0kR,aAIgB1kR,KAAK0kR,aAAavjR,cAC1BF,eAAemJ,IAJ/BpK,KAAK0kR,aAAe,IAAI,GAAQ,IAAI,GAAMt6Q,IAC1CpK,KAAKumR,0BAWT,YAAAC,gCAAA,SAAgClmR,GACzBN,KAAK4kR,cACR5kR,KAAK4kR,YAAc,IAAI,IAEzB,IAAMt0Q,EAAOhQ,EAASozM,cAAc,GAChC+yE,EAAiBzmR,KAAK4kR,YAAYzjR,cACjCslR,GAOHA,EAAex4E,mBACb39L,EAAKinI,YACLjnI,EAAK0yC,sBAEPyjO,EAAe9yL,YAVf8yL,EAAiB,IAAI,GACnBn2Q,EAAK0yC,qBACL1yC,EAAKinI,aAEPv3I,KAAK4kR,YAAY/8Q,YAAY4+Q,KAejC,YAAAjB,cAAA,SAAcj3M,GAGZ,IAFA,IAAMg8G,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBACrCsmK,EAAS0lB,GAAmBluM,KAAKmkR,iBAChC51M,EAAMlrE,OAASmlL,GACpBj6G,EAAMnmE,KAAK,GAEbpI,KAAKwkR,kBAAoBj2M,EACrBvuE,KAAK6uN,QAAU,GACjB7uN,KAAK2kR,cAAgBp2M,EAAM5jE,QAClB3K,KAAK6uN,QAAU,IACxB7uN,KAAK2kR,cAAgB,CAAC,CAACp2M,EAAM5jE,QAAS4jE,EAAM5jE,UAC5C3K,KAAK6kR,kBAAoB7kR,KAAK2kR,cAAc,IAE5C3kR,KAAK2kR,cAAgB,CAACp2M,EAAM5jE,QAAS4jE,EAAM5jE,SAEzC3K,KAAK6kR,oBACP7kR,KAAK4kR,YAAc,IAAI,GAAQ,IAAI,GAAW5kR,KAAK6kR,qBAErD,IAAMvkR,EAAWN,KAAKivP,kBACpBjvP,KAAK2kR,mBACLvgR,EACAmmL,GAEFvqL,KAAKykR,eAAiB,IAAI,GACtBzkR,KAAKs6N,eACPt6N,KAAKykR,eAAe9pD,gBAAgB36N,KAAKs6N,eAE3Ct6N,KAAKykR,eAAe58Q,YAAYvH,GAChCN,KAAKumR,wBACLvmR,KAAKggC,cACH,IAAI0mP,GAAU5D,GAAyB9iR,KAAKykR,kBAShD,YAAAsB,eAAA,SAAetiM,GAMb,IALA,IAIIr5E,EAAawkH,EAJXtwH,EAAM0B,KAAKwxD,SACXlxD,EAAWN,KAAKykR,eAAetjR,cAC/BopL,EAAajsL,EAAI0kN,UAAU9gM,gBAC3BsmK,EAAS0lB,GAAmBluM,KAAKmkR,iBAEhC1gM,EAAWpgF,OAASmlL,GACzB/kG,EAAWr7E,KAAK,IAEdpI,KAAK6uN,QAAU,GACjBjgG,EAAO5uH,KAAK2kR,cACH3kR,KAAK6uN,QAAU,IAExBjgG,GADAxkH,EAA4CpK,KAAkB,cAAE,IAC7CoK,EAAY/G,OAAS,GACpCrD,KAAK2lR,UAAUrnR,EAAIw3D,uBAAuB2tB,MAE5CA,EAAazjF,KAAKwkR,kBAAkB75Q,UAItCikH,GADAxkH,EAAcpK,KAAK2kR,eACAv6Q,EAAY/G,OAAS,GAE1CurH,EAAK,GAAKnrC,EAAW,GACrBmrC,EAAK,GAAKnrC,EAAW,GACrBzjF,KAAKivP,kBAC4BjvP,KAAkB,cACjDM,EACAiqL,GAEEvqL,KAAK0kR,eACiB1kR,KAAK0kR,aAAavjR,cAC1BF,eAAewiF,GAEjC,GAA2B,YAAvBnjF,EAAS2J,WAA2BjK,KAAK6uN,QAAU,GACrD7uN,KAAKwmR,gCAAuD,QACvD,GAAIxmR,KAAK6kR,kBAAmB,CACV7kR,KAAK4kR,YAAYzjR,cACzBF,eAAejB,KAAK6kR,mBAErC7kR,KAAKumR,yBAQP,YAAAhB,cAAA,SAAc9hM,GACZ,IAEIw9B,EACA72G,EAHE9J,EAAWN,KAAKykR,eAAetjR,cAC/BopL,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBAGrC+Q,EAAOjzB,KAAK6uN,MACd57L,IAAS,IAAoBA,IAAS,IACxCjzB,KAAKwkR,kBAAoB/gM,EAAW94E,SACpCP,EAA4CpK,KAAkB,eAC9CqD,QAAUrD,KAAK+jR,aACzB/jR,KAAKojR,UACPh5Q,EAAY23D,MAEZk/C,GAAO,GAGX72G,EAAYhC,KAAKq7E,EAAW94E,SAC5B3K,KAAKivP,kBAAkB7kP,EAAa9J,EAAUiqL,IACrCt3J,IAAS,MAClB7oB,EAA4CpK,KAAkB,cAAE,IAChDqD,QAAUrD,KAAK+jR,aACzB/jR,KAAKojR,UACPh5Q,EAAY23D,MAEZk/C,GAAO,GAGX72G,EAAYhC,KAAKq7E,EAAW94E,SACxBs2G,IACFjhH,KAAKwkR,kBAAoBp6Q,EAAY,IAEvCpK,KAAKivP,kBAAkBjvP,KAAK2kR,cAAerkR,EAAUiqL,IAEvDvqL,KAAKgmR,2BAA2BviM,EAAW94E,SAC3C3K,KAAKumR,wBACDtlK,GACFjhH,KAAK0lR,iBAST,YAAAiB,gBAAA,WACE,GAAK3mR,KAAKykR,eAAV,CAGA,IAEIr6Q,EAFE9J,EAAWN,KAAKykR,eAAetjR,cAC/BopL,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBAErC+Q,EAAOjzB,KAAK6uN,MAClB,GAAI57L,IAAS,IAAoBA,IAAS,GAAa,CAGrD,IAFA7oB,EAA4CpK,KAAkB,eAClD+I,QAAQ,EAAG,GACnBqB,EAAY/G,QAAU,EAAG,CAC3BrD,KAAKwkR,kBAAoBp6Q,EAAYA,EAAY/G,OAAS,GAAGsH,QAC7D,IAAM07Q,EAAmBrmR,KAAKwkR,kBAAkB75Q,QAChDP,EAAYA,EAAY/G,OAAS,GAAKgjR,EACtCrmR,KAAKgmR,2BAA2BK,GAElCrmR,KAAKivP,kBAAkB7kP,EAAa9J,EAAUiqL,GACnB,YAAvBjqL,EAAS2J,WAA2BjK,KAAK4kR,aAC3C5kR,KAAKwmR,gCAAuD,QAEzD,GAAIvzP,IAAS,GAAc,EAChC7oB,EAA4CpK,KAAkB,cAAE,IACpD+I,QAAQ,EAAG,GACvB,IAAM09Q,EAAiBzmR,KAAK4kR,YAAYzjR,cACxC,GAAIiJ,EAAY/G,QAAU,EAAG,CACrBgjR,EAAmBj8Q,EAAYA,EAAY/G,OAAS,GAAGsH,QAC7DP,EAAYA,EAAY/G,OAAS,GAAKgjR,EACtCrmR,KAAKgmR,2BAA2BK,GAElCI,EAAexlR,eAAemJ,GAC9BpK,KAAKivP,kBAAkBjvP,KAAK2kR,cAAerkR,EAAUiqL,GAG5B,IAAvBngL,EAAY/G,QACdrD,KAAK4lR,eAGP5lR,KAAKumR,0BASP,YAAAb,cAAA,WACE,IAAMkB,EAAgB5mR,KAAK6mR,gBAC3B,GAAKD,EAAL,CAGA,IAAIx8Q,EAAcpK,KAAK2kR,cACjBrkR,EAAWsmR,EAAczlR,cACzBopL,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBACvCliB,KAAK6uN,QAAU,IAEjBzkN,EAAY23D,MACZ/hE,KAAKivP,kBAAkB7kP,EAAa9J,EAAUiqL,IACrCvqL,KAAK6uN,QAAU,KAEK,EAAc,GAAG9sJ,MAC9C/hE,KAAKivP,kBAAkB7kP,EAAa9J,EAAUiqL,GAC9CngL,EAAc9J,EAASgB,kBAIN,eAAftB,KAAKyjR,MACPmD,EAAc/+Q,YACZ,IAAI,GAAW,CAA+B,KAExB,oBAAf7H,KAAKyjR,MACdmD,EAAc/+Q,YACZ,IAAI,GAAgB,CAA8B,KAE5B,iBAAf7H,KAAKyjR,OACdmD,EAAc/+Q,YACZ,IAAI,GAAa,CAA8B,KAKnD7H,KAAKggC,cAAc,IAAI0mP,GAAU5D,GAAuB8D,IAGpD5mR,KAAKsjR,WACPtjR,KAAKsjR,UAAUl7Q,KAAKw+Q,GAElB5mR,KAAKqjR,SACPrjR,KAAKqjR,QAAQzrP,WAAWgvP,KAS5B,YAAAC,cAAA,WACE7mR,KAAKwkR,kBAAoB,KACzB,IAAMoC,EAAgB5mR,KAAKykR,eAK3B,OAJAzkR,KAAKykR,eAAiB,KACtBzkR,KAAK0kR,aAAe,KACpB1kR,KAAK4kR,YAAc,KACnB5kR,KAAKglR,SAAS7iQ,YAAY0+B,OAAM,GACzB+lO,GAOT,YAAAhB,aAAA,WACE,IAAMgB,EAAgB5mR,KAAK6mR,gBACvBD,GACF5mR,KAAKggC,cAAc,IAAI0mP,GAAU5D,GAAyB8D,KAa9D,YAAAE,kBAAA,SAAkB18Q,GAChB,IAMIg8Q,EANEnzP,EAAOjzB,KAAK6uN,MACZk4D,GAAc/mR,KAAKykR,eAMzB,GALIsC,GACF/mR,KAAKwlR,cAAcp7Q,EAAY,IAI7B6oB,IAAS,IAAoBA,IAAS,GACxCmzP,EAA6CpmR,KAAkB,kBAC1D,IAAIizB,IAAS,GAMlB,OALAmzP,EACEpmR,KAAK2kR,eAAiB3kR,KAAK2kR,cAActhR,OACPrD,KAAkB,cAAE,GAClD,GAKJ+mR,GACFX,EAAa79O,QAIf69O,EAAarkN,MAGb,IAAK,IAAI7/D,EAAI,EAAGA,EAAIkI,EAAY/G,OAAQnB,IACtClC,KAAKulR,cAAcn7Q,EAAYlI,IAGjC,IAAM8kR,EAAS58Q,EAAYA,EAAY/G,OAAS,GAEhDrD,KAAKulR,cAAcyB,GACnBhnR,KAAK+lR,eAAeiB,IAetB,YAAAvhP,OAAA,SAAOhiC,GACL,IACM84N,EADW94N,EAAQtC,cAEzBnB,KAAKykR,eAAiBhhR,EACtBzD,KAAK2kR,cAAgBpoD,EAAWj7N,iBAChC,IAAMstH,EAAO5uH,KAAK2kR,cAAc3kR,KAAK2kR,cAActhR,OAAS,GAC5DrD,KAAKwkR,kBAAoB51J,EAAKjkH,QAC9B3K,KAAK2kR,cAAcv8Q,KAAKwmH,EAAKjkH,SAC7B3K,KAAK0kR,aAAe,IAAI,GAAQ,IAAI,GAAM91J,IAC1C5uH,KAAKumR,wBACLvmR,KAAKggC,cACH,IAAI0mP,GAAU5D,GAAyB9iR,KAAKykR,kBAQhD,YAAA8B,sBAAA,WACE,IAAMU,EAAiB,GACnBjnR,KAAKykR,gBACPwC,EAAe7+Q,KAAKpI,KAAKykR,gBAEvBzkR,KAAK4kR,aACPqC,EAAe7+Q,KAAKpI,KAAK4kR,aAEvB5kR,KAAK0kR,cACPuC,EAAe7+Q,KAAKpI,KAAK0kR,cAE3B,IAAMwC,EAAgBlnR,KAAKglR,SAAS7iQ,YACpC+kQ,EAAcrmO,OAAM,GACpBqmO,EAAcrvP,YAAYovP,IAM5B,YAAA5B,aAAA,WACE,IAAM/mR,EAAM0B,KAAKwxD,SACXr0B,EAASn9B,KAAKmkN,YACf7lN,GAAQ6+B,GACXn9B,KAAK4lR,eAEP5lR,KAAKglR,SAASz3N,OAAOpwB,EAAS7+B,EAAM,OAExC,EAn9BA,CAAmBqtN,IAw9BnB,SAASs5D,KACP,IAAM7+Q,EAAS2pP,KACf,OAAO,SAAUtsP,EAAS0gD,GACxB,OAAO/9C,EAAO3C,EAAQtC,cAAc8I,YAgHxC,Y,+dC/vCMk9Q,GAMY,iBANZA,GAYS,cAZTA,GAkBU,eAqChB,eAQE,WAAYh9Q,EAAM2E,EAAU20E,EAAY2jM,EAAiBpjE,GAAzD,MACE,YAAM75M,IAAK,K,OAOX,EAAK2E,SAAWA,EAQhB,EAAK20E,WAAaA,EAQlB,EAAK2jM,gBAAkBA,EAOvB,EAAKpjE,gBAAkBA,E,EAE3B,OAzCoC,QAyCpC,EAzCA,CAAoClkL,IA+DpC,eAIE,WAAY47J,GAAZ,IAyCMlG,EAzCN,OACQ71L,EAAU+7L,GAA4B,GAyC5C,I,EAvCA,YAAoD,IAAU,MAKzDrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAOL,EAAKw4F,gBAAkB,KAOvB,EAAKC,iBAAmB,KAMxB,EAAKhE,eAAiCl/Q,IAArBzE,EAAQmP,SAAyBnP,EAAQmP,SAAW,KAIjEnP,EAAQojB,SAAW,EAAKugQ,UAC1B,GAA8B,mBAAnB3jR,EAAQojB,OACjByyK,EAAc71L,EAAQojB,WACjB,CACL,IAAM,EAASpjB,EAAQojB,OACvByyK,EAAc,SAAUhxL,GACtB,OAAOwzB,EAAS,EAAQxzB,SAI5BgxL,EAAc7Q,E,OAOhB,EAAK4iG,aAAe/xF,EAMpB,EAAKgyF,QAAU7nR,EAAQuF,SAAW,EAAKo+Q,UAAY3jR,EAAQuF,OAASy/K,EAMpE,EAAK8iG,cAAgB9nR,EAAQ01L,aAAe11L,EAAQ01L,aAAe,EAMnE,EAAKg2B,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAYsnN,GAM1D,EAAKs9D,aAAe,KAEpB,EAAK33F,kBACH,GACA,EAAK43F,sB,EA+LX,OA1RwB,QAoGtB,YAAAt+D,gBAAA,SAAgBxpL,GACd,IAAKA,EAAM49J,gBAAkBz9L,KAAKqrN,WAAWxrL,GAC3C,OAAO,EAGT,GADA7/B,KAAK0nR,aAAe1nR,KAAK4nR,iBAAiB/nP,EAAMuzJ,MAAOvzJ,EAAMvhC,MACxD0B,KAAKqnR,iBAAmBrnR,KAAK0nR,aAAc,CAC9C1nR,KAAKsnR,iBAAmBznP,EAAM4jD,WAC9BzjF,KAAKqnR,gBAAkBxnP,EAAM4jD,WAC7BzjF,KAAKupN,gBAAgB1pL,GAErB,IAAM/wB,EAAW9O,KAAKsjR,WAAa,IAAI,GAAW,CAACtjR,KAAK0nR,eAWxD,OATA1nR,KAAKggC,cACH,IAAI6nP,GACFV,GACAr4Q,EACA+wB,EAAM4jD,WACNzjF,KAAKsnR,iBACLznP,KAGG,EAET,OAAO,GAQT,YAAA2pL,cAAA,SAAc3pL,GACZ,GAAI7/B,KAAKqnR,gBAAiB,CACxBrnR,KAAKqnR,gBAAkB,KACvBrnR,KAAKupN,gBAAgB1pL,GAErB,IAAM/wB,EAAW9O,KAAKsjR,WAAa,IAAI,GAAW,CAACtjR,KAAK0nR,eAaxD,OAXA1nR,KAAKggC,cACH,IAAI6nP,GACFV,GACAr4Q,EACA+wB,EAAM4jD,WACNzjF,KAAKsnR,iBACLznP,IAIJ7/B,KAAKsnR,iBAAmB,MACjB,EAET,OAAO,GAOT,YAAAh+D,gBAAA,SAAgBzpL,GACd,GAAI7/B,KAAKqnR,gBAAiB,CACxB,IAAMS,EAAgBjoP,EAAM4jD,WACtB,EAASqkM,EAAc,GAAK9nR,KAAKqnR,gBAAgB,GACjD,EAASS,EAAc,GAAK9nR,KAAKqnR,gBAAgB,GAEjDv4Q,EAAW9O,KAAKsjR,WAAa,IAAI,GAAW,CAACtjR,KAAK0nR,eAExD54Q,EAASvH,SAAQ,SAAU9D,GACzB,IAAMlD,EAAOkD,EAAQtC,cACrBZ,EAAKi1E,UAAU,EAAQ,GACvB/xE,EAAQoE,YAAYtH,MAGtBP,KAAKqnR,gBAAkBS,EAEvB9nR,KAAKggC,cACH,IAAI6nP,GACFV,GACAr4Q,EACAg5Q,EACA9nR,KAAKsnR,iBACLznP,MAUR,YAAA0pL,gBAAA,SAAgB1pL,GACd,IAAMqxB,EAAOrxB,EAAMvhC,IAAIk2D,cAInBx0D,KAAK4nR,iBAAiB/nP,EAAMuzJ,MAAOvzJ,EAAMvhC,MAC3C4yD,EAAKnzB,UAAUC,OAAOh+B,KAAKqnR,gBAAkB,UAAY,eACzDn2N,EAAKnzB,UAAUnjB,IAAI5a,KAAKqnR,gBAAkB,cAAgB,YAE1Dn2N,EAAKnzB,UAAUC,OAAO,UAAW,gBAarC,YAAA4pP,iBAAA,SAAiBx0F,EAAO90L,GACtB,OAAOA,EAAI8jN,sBACThvB,EACA,SAAU3vL,EAASe,GACjB,GAAIxE,KAAKwnR,QAAQ/jR,EAASe,MACnBxE,KAAKsjR,WAAatrP,EAASh4B,KAAKsjR,UAAUtnF,WAAYv4L,IACzD,OAAOA,GAGXy8C,KAAKlgD,MACP,CACEw1L,YAAax1L,KAAKunR,aAClBlyF,aAAcr1L,KAAKynR,iBAUzB,YAAAM,gBAAA,WACE,OAAO/nR,KAAKynR,eASd,YAAAO,gBAAA,SAAgB3yF,GACdr1L,KAAKynR,cAAgBpyF,GASvB,YAAA9nI,OAAA,SAAOjvD,GACL,IAAMu2N,EAAS70N,KAAKwxD,SACpB,YAAMjE,OAAM,UAACjvD,GACb0B,KAAKqlR,aAAaxwD,IAMpB,YAAA8yD,qBAAA,WACE3nR,KAAKqlR,aAAa,OAOpB,YAAAA,aAAA,SAAaxwD,GACX,IAAIv2N,EAAM0B,KAAKwxD,SACTr0B,EAASn9B,KAAKmkN,YACf7lN,GAAQ6+B,IACX7+B,EAAMA,GAAOu2N,IAEEv2N,EAAIk2D,cACZz2B,UAAUC,OAAO,UAAW,gBAIzC,EA1RA,CAAwB2tL,IA4RxB,Y,+dC7WA,SAASs8D,GAAoBnoO,GAC3B,OACiE,EAAMr8C,QAEC,EACnEA,QAEuD,EAAM09C,QAGJ,EAAa,aAJpE,EAST,IAAM+mO,GAAc,GAyBpB,eAIE,WAAYxsF,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCg0B,EAA+D,E,OAIhEA,EAAerG,kBAClBqG,EAAerG,gBAAkB1kC,GAG9B+qC,EAAejG,WAClBiG,EAAejG,SAAW7kC,I,EAG5B,YAAM8qC,IAAe,MAMhB2zD,QAAU1jR,EAAQgb,OAAShb,EAAQgb,OAAS,KAMjD,EAAKwtQ,aAA6B/jR,IAAnBzE,EAAQ0iP,QAAuB1iP,EAAQ0iP,OAMtD,EAAK+lC,WAAyBhkR,IAAjBzE,EAAQ+hD,MAAqB/hD,EAAQ+hD,KAMlD,EAAK4hO,UAAY3jR,EAAQmP,SAAWnP,EAAQmP,SAAW,KAMvD,EAAKu5Q,sBAAwB,GAM7B,EAAKC,2BAA6B,GAQlC,EAAKC,wBAA0B,GAS/B,EAAKC,iBAAmB,GAMxB,EAAKC,qBACwBrkR,IAA3BzE,EAAQgqC,eAA+BhqC,EAAQgqC,eAAiB,GAOlE,EAAK++O,OAAS,IAAI,GAOlB,EAAKC,qBAAuB,CAC1B,MAAS,EAAKC,sBAAsB1oO,KAAK,GACzC,WAAc,EAAK2oO,2BAA2B3oO,KAAK,GACnD,WAAc,EAAK2oO,2BAA2B3oO,KAAK,GACnD,QAAW,EAAK4oO,wBAAwB5oO,KAAK,GAC7C,WAAc,EAAK6oO,2BAA2B7oO,KAAK,GACnD,gBAAmB,EAAK8oO,gCAAgC9oO,KAAK,GAC7D,aAAgB,EAAK+oO,6BAA6B/oO,KAAK,GACvD,mBAAsB,EAAKgpO,mCAAmChpO,KAAK,GACnE,OAAU,EAAKipO,uBAAuBjpO,KAAK,I,EAsdjD,OA5jBmB,QAiHjB,YAAAtoB,WAAA,SAAWn0B,EAAS2lR,GAClB,IAAMvjP,OAA0BzhC,IAAfglR,GAA2BA,EACtCC,EAAcxlG,EAAOpgL,GACrBnD,EAAWmD,EAAQtC,cACzB,GAAIb,EAAU,CACZ,IAAMgpR,EAAYtpR,KAAK2oR,qBAAqBroR,EAAS2J,WACrD,GAAIq/Q,EAAW,CACbtpR,KAAKuoR,wBAAwBc,GAAe/oR,EAASymB,U5LZpD,CAACivC,EAAAA,EAAUA,EAAAA,GAAU,KAAW,M4LejC,IAAM20K,EAC+D,GAErE,GADA2+C,EAAU3+C,EAAUrqO,GACI,IAApBqqO,EAAStnO,OACXrD,KAAK0oR,OAAOhW,OAAO,EAAe/nC,EAAS,IAAK,CAC9ClnO,QAASA,EACT4wL,QAASs2C,EAAS,UAEf,GAAIA,EAAStnO,OAAS,EAAG,CAC9B,IAAMs6Q,EAAUhzC,EAASrsO,KAAI,SAACopC,GAAM,SAAeA,MAC7C6hP,EAAe5+C,EAASrsO,KAAI,SAAC+1L,GAAY,OAC7C5wL,QAASA,EACT4wL,QAASA,MAEXr0L,KAAK0oR,OAAOtyJ,KAAKunJ,EAAS4L,KAK5B1jP,IACF7lC,KAAKsoR,2BAA2Be,GAAe96F,GAC7C9qL,EACAsrL,GAAUhyC,OACV/8I,KAAK6gR,qBACL7gR,QASN,YAAAwpR,mBAAA,SAAmB/lR,GACjBzD,KAAK43B,WAAWn0B,IAOlB,YAAAgmR,sBAAA,SAAsBhmR,GACpBzD,KAAK83B,cAAcr0B,IAOrB,YAAAimR,aAAA,WACE,IAAI56Q,EAMJ,OALI9O,KAAKsjR,UACPx0Q,EAAW9O,KAAKsjR,UACPtjR,KAAKqjR,UACdv0Q,EAAW9O,KAAKqjR,QAAQzkL,eAEnB9vF,GAOT,YAAAy+K,YAAA,SAAYztI,GACV,IAAMl7C,EAAS5E,KAAK2pR,OAAO7pO,EAAIszI,MAAOtzI,EAAI2jC,WAAY3jC,EAAIxhD,KAK1D,OAJIsG,IACFk7C,EAAI2jC,WAAa7+E,EAAOy9O,OAAO13O,MAAM,EAAG,GACxCm1C,EAAIszI,MAAQxuL,EAAOglR,aAEd,YAAMr8F,YAAW,UAACztI,IAO3B,YAAA+pO,kBAAA,SAAkB/pO,GAChB,IAAMr8C,EAAUwkR,GAAoBnoO,GACpC9/C,KAAK43B,WAAWn0B,IAOlB,YAAAqmR,qBAAA,SAAqBhqO,GACnB,IAAMr8C,EAAUwkR,GAAoBnoO,GACpC9/C,KAAK83B,cAAcr0B,IAOrB,YAAAo9Q,qBAAA,SAAqB/gO,GACnB,IAAMr8C,EAA0Dq8C,EAAU,OAC1E,GAAI9/C,KAAK0pN,uBAAwB,CAC/B,IAAMt1M,EAAMyvK,EAAOpgL,GACb2Q,KAAOpU,KAAKwoR,mBAChBxoR,KAAKwoR,iBAAiBp0Q,GAAO3Q,QAG/BzD,KAAK+pR,eAAetmR,IASxB,YAAA+lN,cAAA,SAAc1pK,GACZ,IAAMkqO,EAAmBn9F,GAAU7sL,KAAKwoR,kBAKxC,OAJIwB,EAAiB3mR,SACnB2mR,EAAiBziR,QAAQvH,KAAK+pR,eAAe7pO,KAAKlgD,OAClDA,KAAKwoR,iBAAmB,KAEnB,GAUT,YAAA1wP,cAAA,SAAcr0B,EAASwmR,GACrB,IAAMltG,OAA8B34K,IAAjB6lR,GAA6BA,EAC1CZ,EAAcxlG,EAAOpgL,GACrB6X,EAAStb,KAAKuoR,wBAAwBc,GAC5C,GAAI/tQ,EAAQ,CACV,IAAM4uQ,EAAQlqR,KAAK0oR,OACb,EAAgB,GACtBwB,EAAMnM,gBAAgBziQ,GAAQ,SAAU7G,GAClChR,IAAYgR,EAAKhR,SACnB,EAAc2E,KAAKqM,MAGvB,IAAK,IAAIvS,EAAI,EAAcmB,OAAS,EAAGnB,GAAK,IAAKA,EAC/CgoR,EAAMlsP,OAAO,EAAc97B,IAI3B66K,IACF6R,GAAc5uL,KAAKsoR,2BAA2Be,WACvCrpR,KAAKsoR,2BAA2Be,KAU3C,YAAA97N,OAAA,SAAOjvD,GACL,IAAMisI,EAAavqI,KAAKwxD,SAClBtyD,EAAOc,KAAKqoR,sBACZv5Q,EACJ9O,KAAK0pR,eAGHn/I,IACFrrI,EAAKqI,QAAQqnL,IACb1vL,EAAKmE,OAAS,EACdyL,EAASvH,QAAQvH,KAAKypR,sBAAsBvpO,KAAKlgD,QAEnD,YAAMutD,OAAM,UAACjvD,GAETA,IACE0B,KAAKsjR,UACPpkR,EAAKkJ,KACHmmL,GACEvuL,KAAKsjR,UACLnnF,GACAn8L,KAAK6pR,kBACL7pR,MAEFuuL,GACEvuL,KAAKsjR,UACLnnF,GACAn8L,KAAK8pR,qBACL9pR,OAGKA,KAAKqjR,SACdnkR,EAAKkJ,KACHmmL,GACEvuL,KAAKqjR,QACLzC,GAAgB9B,WAChB9+Q,KAAK6pR,kBACL7pR,MAEFuuL,GACEvuL,KAAKqjR,QACLzC,GAAgB5B,cAChBh/Q,KAAK8pR,qBACL9pR,OAIN8O,EAASvH,QAAQvH,KAAKwpR,mBAAmBtpO,KAAKlgD,SAUlD,YAAA2pR,OAAA,SAAOv2F,EAAO+2F,EAAiB7rR,GAC7B,IAQM40N,EAAM,EAAe,CART50N,EAAIs3D,uBAAuB,CAC3Cw9H,EAAM,GAAKpzL,KAAKyoR,gBAChBr1F,EAAM,GAAKpzL,KAAKyoR,kBAECnqR,EAAIs3D,uBAAuB,CAC5Cw9H,EAAM,GAAKpzL,KAAKyoR,gBAChBr1F,EAAM,GAAKpzL,KAAKyoR,oBAIZ99C,EAAW3qO,KAAK0oR,OAAO7K,YAAY3qD,GAEnCk3D,EAAiBz/C,EAAStnO,OAChC,GAAuB,IAAnB+mR,EACF,OAAO,KAGT,IAGIC,EAHE9/F,EAAajsL,EAAI0kN,UAAU9gM,gBAC3BooQ,EAAsB,GAAmBH,EAAiB5/F,GAG5DsiB,EAAqB72I,EAAAA,EAEnBu0N,EAAwBvqR,KAAKyoR,gBAAkBzoR,KAAKyoR,gBACpD+B,EAAY,WAChB,GAAIH,EAAe,CACjB,IAAMT,EAActrR,EAAIw3D,uBAAuBu0N,GAE/C,GAD6B,GAAgBj3F,EAAOw2F,IACxBW,EAC1B,MAAO,CACLloC,OAAQgoC,EACRT,YAAa,CACXroR,KAAKirC,MAAMo9O,EAAY,IACvBroR,KAAKirC,MAAMo9O,EAAY,MAK/B,OAAO,MAGT,GAAI5pR,KAAKmoR,QAAS,CAChB,IAAK,IAAIjmR,EAAI,EAAGA,EAAIkoR,IAAkBloR,EAAG,CAEa,YAD9CuoR,EAAc9/C,EAASzoO,IACbuB,QAAQtC,cAAc8I,WACpCwgR,EAAYp2F,QAAQ9sL,SAAQ,SAAC86O,GAC3B,IAAMqoC,EAAkB,GAAmBroC,EAAQ93D,GAC7C/lH,EAAQ,GAAgB8lN,EAAqBI,GAC/ClmN,EAAQqoI,IACVw9E,EAAgBhoC,EAChBx1C,EAAqBroI,MAM7B,GADM5/D,EAAS4lR,IAEb,OAAO5lR,EAIX,GAAI5E,KAAKooR,MAAO,CACd,IAASlmR,EAAI,EAAGA,EAAIkoR,IAAkBloR,EAAG,CACvC,IACMuoR,EADFpoC,EAAS,KAEb,GAAoD,YAD9CooC,EAAc9/C,EAASzoO,IACbuB,QAAQtC,cAAc8I,UAAwB,CAC5D,IAAIg3P,EAAiBwpB,EAAYhnR,QAAQtC,cACnC8nM,EAAiB,KACnBA,IACFg4D,EAAiBA,EACdz2P,QACAwuI,UAAUiwD,EAAgB1e,IAE/B83D,EAASn5C,GACPhV,GACEo2F,EACmD,GAIrD//F,OAEG,CACC,MAA6BkgG,EAAYp2F,QAAxCs2F,EAAY,KAAEC,EAAU,KAE3BA,IACF1C,GAAY,GAAK,GAAmByC,EAAcpgG,GAClD29F,GAAY,GAAK,GAAmB0C,EAAYrgG,GAChD83D,EAASjuD,GAAiBk2F,EAAqBpC,KAGnD,GAAI7lC,EAAQ,CACV,IAAM79K,EAAQ,GAAgB8lN,EAAqBjoC,GAC/C79K,EAAQqoI,IACVw9E,EAAgBhoC,EAChBx1C,EAAqBroI,IAK3B,IAAM5/D,EACN,GADMA,EAAS4lR,IAEb,OAAO5lR,EAIX,OAAO,MAOT,YAAAmlR,eAAA,SAAetmR,GACbzD,KAAK83B,cAAcr0B,GAAS,GAC5BzD,KAAK43B,WAAWn0B,GAAS,IAQ3B,YAAA0lR,uBAAA,SAAuBx+C,EAAUrqO,GAC/B,IAAMiqL,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBACvC++O,EAAiB3gQ,EACf2oM,EAAiB,KACnBA,IACFg4D,EACEA,EAAez2P,QAAQwuI,UAAUiwD,EAAgB1e,IAGrD,IAAMl6K,EAAU,GAAW4wP,GACvBh4D,GACF54L,EAAQ2oI,UAAUuxC,EAAY0e,GAGhC,IADA,IAAM7+L,EAAciG,EAAQ/O,iBAAiB,GACpCY,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EACrDyoO,EAASviO,KAAKgC,EAAYO,MAAMzI,EAAGA,EAAI,KAS3C,YAAAgnR,mCAAA,SAAmCv+C,EAAUrqO,GAE3C,IADA,IAAM83D,EAAa93D,EAASy/N,qBACnB79N,EAAI,EAAGA,EAAIk2D,EAAW/0D,SAAUnB,EAAG,CAC1C,IAAMonR,EAAYtpR,KAAK2oR,qBAAqBvwN,EAAWl2D,GAAG+H,WACtDq/Q,GACFA,EAAU3+C,EAAUvyK,EAAWl2D,MAUrC,YAAA2mR,2BAAA,SAA2Bl+C,EAAUrqO,GAEnC,IADA,IAAM8J,EAAc9J,EAASgB,iBACpBY,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EACrDyoO,EAASviO,KAAKgC,EAAYO,MAAMzI,EAAGA,EAAI,KAS3C,YAAA8mR,gCAAA,SAAgCr+C,EAAUrqO,GAExC,IADA,IAAMy4F,EAAQz4F,EAASgB,iBACdgW,EAAI,EAAGypF,EAAKhI,EAAM11F,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAc2uF,EAAMzhF,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EACrDyoO,EAASviO,KAAKgC,EAAYO,MAAMzI,EAAGA,EAAI,KAU7C,YAAA6mR,2BAAA,SAA2Bp+C,EAAUrqO,GACnCA,EAASgB,iBAAiBiG,SAAQ,SAAC8tB,GACjCs1M,EAASviO,KAAK,CAACitB,QASnB,YAAA4zP,6BAAA,SAA6Bt+C,EAAUrqO,GAErC,IADA,IAAMu9N,EAAWv9N,EAASgB,iBACjBuW,EAAI,EAAGC,EAAK+lN,EAASx6N,OAAQwU,EAAIC,IAAMD,EAE9C,IADA,IAAMyzN,EAAQzN,EAAShmN,GACdP,EAAI,EAAGypF,EAAKuqI,EAAMjoO,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAckhO,EAAMh0N,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EACrDyoO,EAASviO,KAAKgC,EAAYO,MAAMzI,EAAGA,EAAI,KAW/C,YAAA0mR,sBAAA,SAAsBj+C,EAAUrqO,GAC9BqqO,EAASviO,KAAK,CAAC9H,EAASgB,oBAQ1B,YAAAwnR,wBAAA,SAAwBn+C,EAAUrqO,GAEhC,IADA,IAAMgrO,EAAQhrO,EAASgB,iBACdgW,EAAI,EAAGypF,EAAKuqI,EAAMjoO,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAckhO,EAAMh0N,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EACrDyoO,EAASviO,KAAKgC,EAAYO,MAAMzI,EAAGA,EAAI,KAI/C,EA5jBA,CAAmBypN,IA8jBnB,Y,+dCvoBMk/D,GAMI,SAwEV,eAQE,WAAY1gR,EAAM1F,EAAUqmR,EAAY9mE,GAAxC,MACE,YAAM75M,IAAK,K,OAOX,EAAK1F,SAAWA,EAOhB,EAAKqmR,WAAaA,EAOlB,EAAK9mE,gBAAkBA,E,EAE3B,OAhCiC,QAgCjC,EAhCA,CAAiClkL,IAsC3BirP,GAAwB,GAyB9B,eAIE,WAAYrvF,GAAZ,MACE,cAAO,KAKP,EAAKrtL,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,IAwEI2G,EAxEE71L,EAAU+7L,GAA4B,GAyE5C,GApEA,EAAKsvF,iBAAmB,EAAKC,YAAY/qO,KAAK,GAK9C,EAAKgrO,oBAAsB,EAAKC,eAAejrO,KAAK,GAMpD,EAAKmrK,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAYynN,GAM1D,EAAK6gE,cAAgBzrR,EAAQ0rR,aAAe1rR,EAAQ0rR,aAAe/gE,GAMnE,EAAKghE,iBAAmB3rR,EAAQ4rR,gBAC5B5rR,EAAQ4rR,gBACRjhE,GAMJ,EAAKkhE,iBAAmB7rR,EAAQ8rR,gBAC5B9rR,EAAQ8rR,gBACRhhE,GAMJ,EAAKihE,SAAS/rR,EAAQgsR,OAAQhsR,EAAQgsR,MAMtC,EAAKnE,QAAU7nR,EAAQuF,OAASvF,EAAQuF,OAASy/K,EAMjD,EAAK8iG,cAAgB9nR,EAAQ01L,aAAe11L,EAAQ01L,aAAe,EAMnE,EAAKklC,YACen2N,IAAlBzE,EAAQgG,MAAsBhG,EAAQgG,MAoU5C,WACE,IAAMS,EAAS2pP,KAIf,OAHA,EAAO3pP,EAAgB,QAAGA,EAAmB,YAC7C,EAAOA,EAA2B,mBAAGA,EAAmB,YAEjD,SAAU3C,GACf,OAAKA,EAAQtC,cAGNiF,EAAO3C,EAAQtC,cAAc8I,WAF3B,MA3UuC,GAMhD,EAAKq5Q,UAAY3jR,EAAQmP,UAAY,IAAI,GAIrCnP,EAAQojB,OACV,GAA8B,mBAAnBpjB,EAAQojB,OACjByyK,EAAc71L,EAAQojB,WACjB,CACL,IAAM,EAASpjB,EAAQojB,OACvByyK,EAAc,SAAUhxL,GACtB,OAAOwzB,EAAS,EAAQxzB,SAI5BgxL,EAAc7Q,E,OAOhB,EAAK4iG,aAAe/xF,EAQpB,EAAKo2F,yBAA2B,G,EA4RpC,OApZqB,QAgInB,YAAAC,4BAAA,SAA4BpoR,EAASe,GACnCxE,KAAK4rR,yBAAyB/nG,EAAOpgL,IAAYe,GAQnD,YAAAo6F,YAAA,WACE,OAAO5+F,KAAKsjR,WAQd,YAAAyE,gBAAA,WACE,OAAO/nR,KAAKynR,eAUd,YAAA9nQ,SAAA,SAASlc,GACP,OACEzD,KAAK4rR,yBAAyB/nG,EAAOpgL,KAUzC,YAAAukR,gBAAA,SAAgB3yF,GACdr1L,KAAKynR,cAAgBpyF,GASvB,YAAA9nI,OAAA,SAAOjvD,GACc0B,KAAKwxD,UACNxxD,KAAKu6N,QACrBv6N,KAAKsjR,UAAU/7Q,QAAQvH,KAAK8rR,sBAAsB5rO,KAAKlgD,OAEzD,YAAMutD,OAAM,UAACjvD,GACTA,GACF0B,KAAKsjR,UAAU13Q,iBACbuwL,GACAn8L,KAAKgrR,kBAEPhrR,KAAKsjR,UAAU13Q,iBACbuwL,GACAn8L,KAAKkrR,qBAGHlrR,KAAKu6N,QACPv6N,KAAKsjR,UAAU/7Q,QAAQvH,KAAK+rR,oBAAoB7rO,KAAKlgD,SAGvDA,KAAKsjR,UAAU3iO,oBACbw7I,GACAn8L,KAAKgrR,kBAEPhrR,KAAKsjR,UAAU3iO,oBACbw7I,GACAn8L,KAAKkrR,uBASX,YAAAD,YAAA,SAAYnrO,GACV,IAAMr8C,EAAUq8C,EAAIqB,QAIpB,GAHInhD,KAAKu6N,QACPv6N,KAAK+rR,oBAAoBtoR,IAEtBzD,KAAK2f,SAASlc,GAAU,CAC3B,IAAMe,EACJxE,KAAKwxD,SACF+wJ,eACA35M,MAAK,SAAUpE,GACd,GACEA,aAAiBotB,IACjBptB,EAAM2d,aACN3d,EAAM2d,YAAYkgQ,WAAW5+Q,GAE7B,OAAOe,KAIXA,GACFxE,KAAK6rR,4BAA4BpoR,EAASe,KAShD,YAAA2mR,eAAA,SAAerrO,GACb,IAAMr8C,EAAUq8C,EAAIqB,QAChBnhD,KAAKu6N,QACPv6N,KAAK8rR,sBAAsBroR,IAO/B,YAAA0C,SAAA,WACE,OAAOnG,KAAKu6N,QAOd,YAAAwxD,oBAAA,SAAoBtoR,GAClB,IAAMgF,EAAMo7K,EAAOpgL,GACbgF,KAAOsiR,KACXA,GAAsBtiR,GAAOhF,EAAQ0C,YAEvC1C,EAAQiC,SAAS1F,KAAKu6N,SAOxB,YAAAuxD,sBAAA,SAAsBroR,GAEpB,IADA,IAAMq7M,EAAe9+M,KAAKwxD,SAASqwJ,kBAAkB7lB,WAC5C95L,EAAI48M,EAAaz7M,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CACjD,IAAMy/M,EAAc7C,EAAa58M,GACjC,GACEy/M,IAAgB3hN,MAChB2hN,aAAuBqqE,GACvBrqE,EAAYx7M,aACmD,IAA/Dw7M,EAAY/iH,cAAco9F,WAAWtoK,YAAYjwB,GAGjD,YADAA,EAAQiC,SAASi8M,EAAYx7M,YAKjC,IAAMsC,EAAMo7K,EAAOpgL,GACnBA,EAAQiC,SAASqlR,GAAsBtiR,WAChCsiR,GAAsBtiR,IAO/B,YAAAwjR,+BAAA,SAA+BxoR,UACtBzD,KAAK4rR,yBAAyB/nG,EAAOpgL,KAU9C,YAAA8pL,YAAA,SAAYy2B,GACV,IAAKhkN,KAAKqrN,WAAWrH,GACnB,OAAO,EAET,IAAMppM,EAAM5a,KAAKorR,cAAcpnE,GACzBhmL,EAASh+B,KAAKsrR,iBAAiBtnE,GAC/BxlL,EAASx+B,KAAKwrR,iBAAiBxnE,GAC/BllM,GAAOlE,IAAQojB,IAAWQ,EAC1BlgC,EAAM0lN,EAAgB1lN,IACtBwQ,EAAW9O,KAAK4+F,cAChBksL,EAAa,GACbrmR,EAAW,GACjB,GAAIqa,EAAK,CAIP+hC,GAAM7gD,KAAK4rR,0BACXttR,EAAI8jN,sBACF4B,EAAgB5wB,MAMhB,SAAU3vL,EAASe,GACjB,GAAIxE,KAAKwnR,QAAQ/jR,EAASe,GAGxB,OAFAxE,KAAK6rR,4BAA4BpoR,EAASe,GAC1CC,EAAS2D,KAAK3E,IACNzD,KAAK0rR,QAEfxrO,KAAKlgD,MACP,CACEw1L,YAAax1L,KAAKunR,aAClBlyF,aAAcr1L,KAAKynR,gBAGvB,IAAK,IAAIvlR,EAAI4M,EAAS4B,YAAc,EAAGxO,GAAK,IAAKA,EAAG,CAClD,IAAMuB,EAAUqL,EAAS9E,KAAK9H,GACxB4nB,EAAQrlB,EAASuE,QAAQvF,GAC3BqmB,GAAS,EAEXrlB,EAASsE,OAAO+gB,EAAO,IAEvBhb,EAASkvB,OAAOv6B,GAChBqnR,EAAW1iR,KAAK3E,IAGI,IAApBgB,EAASpB,QACXyL,EAAS22B,OAAOhhC,OAEb,CAELnG,EAAI8jN,sBACF4B,EAAgB5wB,MAMhB,SAAU3vL,EAASe,GACjB,GAAIxE,KAAKwnR,QAAQ/jR,EAASe,GAWxB,OAVKoW,IAAO4jB,GAAYxG,EAASlpB,EAASktL,WAAYv4L,IAInDu6B,GAAUQ,IACXxG,EAASlpB,EAASktL,WAAYv4L,KAE9BqnR,EAAW1iR,KAAK3E,GAChBzD,KAAKisR,+BAA+BxoR,KAPpCzD,KAAK6rR,4BAA4BpoR,EAASe,GAC1CC,EAAS2D,KAAK3E,KAQRzD,KAAK0rR,QAEfxrO,KAAKlgD,MACP,CACEw1L,YAAax1L,KAAKunR,aAClBlyF,aAAcr1L,KAAKynR,gBAGvB,IAAK,IAAInwQ,EAAIwzQ,EAAWznR,OAAS,EAAGiU,GAAK,IAAKA,EAC5CxI,EAASkvB,OAAO8sP,EAAWxzQ,IAE7BxI,EAAS22B,OAAOhhC,GAYlB,OAVIA,EAASpB,OAAS,GAAKynR,EAAWznR,OAAS,IAC7CrD,KAAKggC,cACH,IAAIksP,GACFrB,GACApmR,EACAqmR,EACA9mE,KAIC,GAEX,EApZA,CAAqB,IAsarB,Y,+dC1gBMmoE,GAAa,CAAC,EAAG,EAAG,EAAG,GACvB,GAAc,GAKdC,GAMS,cANTA,GAYO,YA6Db,eAQE,WAAYjiR,EAAM2E,EAAUk1M,GAA5B,MACE,YAAM75M,IAAK,K,OAOX,EAAK2E,SAAWA,EAOhB,EAAKk1M,gBAAkBA,E,EAE3B,OAzBiC,QAyBjC,EAzBA,CAAiClkL,IA0DjC,eAIE,WAAYngC,GAAZ,IA06CMgG,EAvwCAmJ,EAnKN,EACE,YAAoD,IAAU,KAiL9D,GA5KA,EAAKT,GAKL,EAAKoyC,KAKL,EAAKouI,GAGL,EAAKw9F,0BAA4B,EAAKxL,qBAAqB3gO,KAAK,GAMhE,EAAKmrK,WAAa1rN,EAAQmD,UAAYnD,EAAQmD,UAAYgoN,GAO1D,EAAKwhE,wBAA0B,SAAUtoE,GACvC,O9G3LoB,SAAUA,GAClC,IAAMvmB,EACJumB,EAA6B,cAE/B,OACEvmB,EAAc1kC,UACZ0kC,EAAcysB,SAAWzsB,EAAc3kC,WACxC2kC,EAAczkC,S8GoLNuzH,CAAWvoE,IAAoBuG,GAAYvG,IAOpD,EAAKwoE,iBAAmB7sR,EAAQ8sR,gBAC5B9sR,EAAQ8sR,gBACR,EAAKH,wBAMT,EAAKI,uBAAyB/sR,EAAQgtR,sBAClChtR,EAAQgtR,sBACRviE,GAOJ,EAAKwiE,eAAiB,KAOtB,EAAKC,gBAAkB,KAMvB,EAAKC,WAAa,CAAC,EAAG,GAQtB,EAAKC,wBAAyB,EAM9B,EAAKC,uBAAyB,KAO9B,EAAKtE,OAAS,IAAI,GAMlB,EAAKD,qBACwBrkR,IAA3BzE,EAAQgqC,eAA+BhqC,EAAQgqC,eAAiB,GAMlE,EAAKsjP,kBAAmB,EAQxB,EAAKC,kBAAmB,EAMxB,EAAKC,cAAgB,GAOrB,EAAKnI,SAAW,IAAIpzP,GAAY,CAC9BjX,OAAQ,IAAI,GAAa,CACvBilQ,iBAAiB,EACjBt1F,QAAS3qL,EAAQ2qL,QAEnB3kL,MAAOhG,EAAQgG,MAAQhG,EAAQgG,OAwyC7BA,EAAQoqP,KACP,SAAUtsP,EAAS0gD,GACxB,OAAOx+C,EAAa,QAzyClBq5P,sBAAsB,EACtBC,wBAAwB,IAQ1B,EAAKmuB,iBAAmB,CACtB,MAAS,EAAKC,oBAAoBntO,KAAK,GACvC,WAAc,EAAKotO,yBAAyBptO,KAAK,GACjD,WAAc,EAAKotO,yBAAyBptO,KAAK,GACjD,QAAW,EAAKqtO,sBAAsBrtO,KAAK,GAC3C,WAAc,EAAKstO,yBAAyBttO,KAAK,GACjD,gBAAmB,EAAKutO,8BAA8BvtO,KAAK,GAC3D,aAAgB,EAAKwtO,2BAA2BxtO,KAAK,GACrD,OAAU,EAAKytO,qBAAqBztO,KAAK,GACzC,mBAAsB,EAAK0tO,iCAAiC1tO,KAAK,IAOnE,EAAKmjO,QAAU,KAKf,EAAKwK,cAAgB,KAGjBluR,EAAQmP,SACVA,EAAWnP,EAAQmP,SACVnP,EAAQgb,SACjB,EAAK0oQ,QAAU1jR,EAAQgb,OACvB7L,EAAW,IAAI,GAAW,EAAKu0Q,QAAQzkL,eACvC,EAAKykL,QAAQz3Q,iBACXg1Q,GAAgB9B,WAChB,EAAKgP,iBAAiB5tO,KAAK,IAE7B,EAAKmjO,QAAQz3Q,iBACXg1Q,GAAgB5B,cAChB,EAAK+O,oBAAoB7tO,KAAK,MAG7BpxC,EACH,MAAM,IAAI9P,MACR,iE,OAGAW,EAAQquR,eACV,EAAKH,cAAgBluR,EAAQquR,cAO/B,EAAK1K,UAAYx0Q,EAEjB,EAAKw0Q,UAAU/7Q,QAAQ,EAAK0jR,YAAY/qO,KAAK,IAC7C,EAAKojO,UAAU13Q,iBACbuwL,GACA,EAAK0tF,kBAAkB3pO,KAAK,IAE9B,EAAKojO,UAAU13Q,iBACbuwL,GACA,EAAK2tF,qBAAqB5pO,KAAK,IAOjC,EAAK+tO,kBAAoB,KAMzB,EAAK9kE,OAAS,CAAC,EAAG,GAKlB,EAAK+kE,oBACuB9pR,IAA1BzE,EAAQwuR,eACH,EAAKN,cACNluR,EAAQwuR,c,EAumClB,OAx0CqB,QAwOnB,YAAAlD,YAAA,SAAYxnR,GACV,IAAMnD,EAAWmD,EAAQtC,cACzB,GAAIb,EAAU,CACZ,IAAMq7O,EAAS37O,KAAKotR,iBAAiB9sR,EAAS2J,WAC1C0xO,GACFA,EAAOl4O,EAASnD,GAGpB,IAAMhC,EAAM0B,KAAKwxD,SACblzD,GAAOA,EAAIwmN,cAAgB9kN,KAAKmkN,aAClCnkN,KAAKouR,sBAAsBpuR,KAAK8sR,WAAYxuR,GAE9CmF,EAAQmI,iBAAiBmjL,GAAUhyC,OAAQ/8I,KAAKqsR,4BAQlD,YAAAgC,oBAAA,SAAoBvuO,EAAK6qL,GACvB,IAAK3qO,KAAKgtR,uBAAwB,CAChChtR,KAAKgtR,uBAAyB,IAAI,GAElC,IADA,IAAMl+Q,EAAW9O,KAAKgtR,uBAAuBhxF,WACpC95L,EAAI,EAAGgiB,EAAKymN,EAAStnO,OAAQnB,EAAIgiB,IAAMhiB,EAE9C,IADA,IAAMmyL,EAAUs2C,EAASzoO,GAChBwlC,EAAI,EAAG4mP,EAAKj6F,EAAQhxL,OAAQqkC,EAAI4mP,IAAM5mP,EAAG,CAChD,IAAMjkC,EAAU4wL,EAAQ3sJ,GAAGjkC,QACvBA,IAA0C,IAA/BqL,EAAS9F,QAAQvF,IAC9BzD,KAAKgtR,uBAAuB5kR,KAAK3E,GAIS,IAA5CzD,KAAKgtR,uBAAuBt8Q,YAC9B1Q,KAAKgtR,uBAAyB,KAE9BhtR,KAAKggC,cACH,IAAIuuP,GACFnC,GACApsR,KAAKgtR,uBACLltO,MAWV,YAAAqrO,eAAA,SAAe1nR,GACbzD,KAAKwuR,0BAA0B/qR,GAE3BzD,KAAK4sR,gBAAiD,IAA/B5sR,KAAKsjR,UAAU5yQ,cACxC1Q,KAAKglR,SAAS7iQ,YAAY2V,cAAc93B,KAAK4sR,gBAC7C5sR,KAAK4sR,eAAiB,MAExBnpR,EAAQk9C,oBACNouI,GAAUhyC,OACV/8I,KAAKqsR,4BAQT,YAAAmC,0BAAA,SAA0B/qR,GACxB,IAAMymR,EAAQlqR,KAAK0oR,OAEb+F,EAAgB,GACtBvE,EAAM3iR,SAIJ,SAAUkN,GACJhR,IAAYgR,EAAKhR,SACnBgrR,EAAcrmR,KAAKqM,MAIzB,IAAK,IAAIvS,EAAIusR,EAAcprR,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CAElD,IADA,IAAMwsR,EAAeD,EAAcvsR,GAC1BoV,EAAItX,KAAKmtR,cAAc9pR,OAAS,EAAGiU,GAAK,IAAKA,EAChDtX,KAAKmtR,cAAc71Q,GAAG,KAAOo3Q,GAC/B1uR,KAAKmtR,cAAcpkR,OAAOuO,EAAG,GAGjC4yQ,EAAMlsP,OAAO0wP,KAUjB,YAAAxlE,UAAA,SAAU/rL,GACJn9B,KAAK4sR,iBAAmBzvP,IAC1Bn9B,KAAKglR,SAAS7iQ,YAAY2V,cAAc93B,KAAK4sR,gBAC7C5sR,KAAK4sR,eAAiB,MAExB,YAAM1jE,UAAS,UAAC/rL,IASlB,YAAAowB,OAAA,SAAOjvD,GACL0B,KAAKglR,SAASz3N,OAAOjvD,GACrB,YAAMivD,OAAM,UAACjvD,IAQf,YAAAgnR,WAAA,WACE,OAAOtlR,KAAKglR,UAOd,YAAA8I,iBAAA,SAAiBjuP,GACXA,EAAMp8B,SACRzD,KAAKsjR,UAAUl7Q,KAAKy3B,EAAMp8B,UAQ9B,YAAAsqR,oBAAA,SAAoBluP,GACdA,EAAMp8B,SACRzD,KAAKsjR,UAAUtlP,OAAO6B,EAAMp8B,UAQhC,YAAAomR,kBAAA,SAAkB/pO,GAChB9/C,KAAKirR,YAAoCnrO,EAAW,UAOtD,YAAA+gO,qBAAA,SAAqB/gO,GACnB,IAAK9/C,KAAKktR,iBAAkB,CAC1B,IAAMzpR,EAAkCq8C,EAAU,OAClD9/C,KAAKmrR,eAAe1nR,GACpBzD,KAAKirR,YAAYxnR,KAQrB,YAAAqmR,qBAAA,SAAqBhqO,GACnB,IAAMr8C,EAAkCq8C,EAAW,QACnD9/C,KAAKmrR,eAAe1nR,IAQtB,YAAA4pR,oBAAA,SAAoB5pR,EAASnD,GAC3B,IAAM8J,EAAc9J,EAASgB,iBAGvBmpR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACV+zL,QAAS,CAACjqL,EAAaA,IAGzBpK,KAAK0oR,OAAOhW,OAAOpyQ,EAASymB,YAAa0jQ,IAQ3C,YAAA+C,yBAAA,SAAyB/pR,EAASnD,GAEhC,IADA,IAAMwB,EAASxB,EAASgB,iBACfY,EAAI,EAAGgiB,EAAKpiB,EAAOuB,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC/C,IAAMkI,EAActI,EAAOI,GAGrBuoR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACVquR,MAAO,CAACzsR,GACR4nB,MAAO5nB,EACPmyL,QAAS,CAACjqL,EAAaA,IAGzBpK,KAAK0oR,OAAOhW,OAAOpyQ,EAASymB,YAAa0jQ,KAS7C,YAAA6C,yBAAA,SAAyB7pR,EAASnD,GAEhC,IADA,IAAM8J,EAAc9J,EAASgB,iBACpBY,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EAAG,CACxD,IAAMmyL,EAAUjqL,EAAYO,MAAMzI,EAAGA,EAAI,GAGnCuoR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACVwpB,MAAO5nB,EACPmyL,QAASA,GAGXr0L,KAAK0oR,OAAOhW,OAAO,EAAer+E,GAAUo2F,KAShD,YAAAgD,8BAAA,SAA8BhqR,EAASnD,GAErC,IADA,IAAMy4F,EAAQz4F,EAASgB,iBACdgW,EAAI,EAAGypF,EAAKhI,EAAM11F,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAc2uF,EAAMzhF,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EAAG,CACxD,IAAMmyL,EAAUjqL,EAAYO,MAAMzI,EAAGA,EAAI,GAGnCuoR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACVquR,MAAO,CAACr3Q,GACRwS,MAAO5nB,EACPmyL,QAASA,GAGXr0L,KAAK0oR,OAAOhW,OAAO,EAAer+E,GAAUo2F,KAUlD,YAAA8C,sBAAA,SAAsB9pR,EAASnD,GAE7B,IADA,IAAMgrO,EAAQhrO,EAASgB,iBACdgW,EAAI,EAAGypF,EAAKuqI,EAAMjoO,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAckhO,EAAMh0N,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EAAG,CACxD,IAAMmyL,EAAUjqL,EAAYO,MAAMzI,EAAGA,EAAI,GAGnCuoR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACVquR,MAAO,CAACr3Q,GACRwS,MAAO5nB,EACPmyL,QAASA,GAGXr0L,KAAK0oR,OAAOhW,OAAO,EAAer+E,GAAUo2F,KAUlD,YAAAiD,2BAAA,SAA2BjqR,EAASnD,GAElC,IADA,IAAMu9N,EAAWv9N,EAASgB,iBACjBuW,EAAI,EAAGC,EAAK+lN,EAASx6N,OAAQwU,EAAIC,IAAMD,EAE9C,IADA,IAAMyzN,EAAQzN,EAAShmN,GACdP,EAAI,EAAGypF,EAAKuqI,EAAMjoO,OAAQiU,EAAIypF,IAAMzpF,EAE3C,IADA,IAAMlN,EAAckhO,EAAMh0N,GACjBpV,EAAI,EAAGgiB,EAAK9Z,EAAY/G,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EAAG,CACxD,IAAMmyL,EAAUjqL,EAAYO,MAAMzI,EAAGA,EAAI,GAGnCuoR,EAAc,CAClBhnR,QAASA,EACTnD,SAAUA,EACVquR,MAAO,CAACr3Q,EAAGO,GACXiS,MAAO5nB,EACPmyL,QAASA,GAGXr0L,KAAK0oR,OAAOhW,OAAO,EAAer+E,GAAUo2F,KAiBpD,YAAAkD,qBAAA,SAAqBlqR,EAASnD,GAC5B,IAAM8J,EAAc9J,EAASY,YAGvB0tR,EAAoB,CACxBnrR,QAASA,EACTnD,SAAUA,EACVwpB,MA5sBsB,EA6sBtBuqK,QAAS,CAACjqL,EAAaA,IAInBykR,EAA2B,CAC/BprR,QAASA,EACTnD,SAAUA,EACVwpB,MA7sB6B,EA8sB7BuqK,QAAS,CAACjqL,EAAaA,IAGnB0kR,EAAkB,CAACF,EAAmBC,GAC5CD,EAAkBE,gBAAkBA,EACpCD,EAAyBC,gBAAkBA,EAC3C9uR,KAAK0oR,OAAOhW,OAAO,GAAatoQ,GAAcwkR,GAC9C,IAAI3tB,EAAsE,EAGpEh4D,EAAiB,KACvB,GAAIA,GAAkBjpM,KAAKwxD,SAAU,CACnC,IAAM+4H,EAAavqL,KAAKwxD,SAASwxJ,UAAU9gM,gBAI3C++O,EAAiB,GAHjBA,EAAiBA,EACdz2P,QACAwuI,UAAUiwD,EAAgB1e,IAG3BvxC,UAAUuxC,EAAY0e,GAE1BjpM,KAAK0oR,OAAOhW,OAAOzR,EAAel6O,YAAa8nQ,IAQjD,YAAAjB,iCAAA,SAAiCnqR,EAASnD,GAExC,IADA,IAAM83D,EAAa93D,EAASy/N,qBACnB79N,EAAI,EAAGA,EAAIk2D,EAAW/0D,SAAUnB,EAAG,CAC1C,IAAM,EAAWk2D,EAAWl2D,IAE5By5O,EADe37O,KAAKotR,iBAAiB,EAASnjR,YACvCxG,EAAS,KAWpB,YAAAsrR,6BAAA,SAA6B3kR,EAAa0E,EAAUspD,GAClD,IAAI42N,EAAgBhvR,KAAK4sR,eACpBoC,EAKcA,EAAc7tR,cACtBF,eAAemJ,IALxB4kR,EAAgB,IAAI,GAAQ,IAAI,GAAM5kR,IACtCpK,KAAK4sR,eAAiBoC,EACtBhvR,KAAKglR,SAAS7iQ,YAAYyV,WAAWo3P,IAOvC,OAFAA,EAAclwQ,IAAI,WAAYhQ,GAC9BkgR,EAAclwQ,IAAI,aAAcs5C,GACzB42N,GAQT,YAAAzhG,YAAA,SAAYy2B,GACV,OAAKA,EAAgBvmB,gBAGrBz9L,KAAKiuR,kBAAoBjqE,EAItBA,EAAgB1lN,IAAI0kN,UAAU5J,kBAC/B4K,EAAgB75M,MAAQ,gBACvBnK,KAAK0pN,wBAEN1pN,KAAKkgM,mBAAmB8jB,GAEtBhkN,KAAK4sR,gBAAkB5sR,KAAKwsR,iBAAiBxoE,KAO7C+F,IALA/F,EAAgB75M,MAAQ,iBACvBnK,KAAK+sR,yBAEI/sR,KAAKivR,eAMfjrE,EAAgB75M,MAAQ,iBAC1BnK,KAAK+sR,wBAAyB,GAGzB,YAAMx/F,YAAW,UAACy2B,KAAqB+F,GAvB9C,IAAIA,GA8BN,YAAAT,gBAAA,SAAgBxpK,GACd9/C,KAAK+sR,wBAAyB,EAC9B/sR,KAAKquR,oBAAoBvuO,EAAK9/C,KAAKmtR,eAQnC,IANA,IAAM9qC,EAAS,CACbviM,EAAI2jC,WAAW,GAAKzjF,KAAKmpN,OAAO,GAChCrpK,EAAI2jC,WAAW,GAAKzjF,KAAKmpN,OAAO,IAE5Br6M,EAAW,GACXspD,EAAa,GACVl2D,EAAI,EAAGgiB,EAAKlkB,KAAKmtR,cAAc9pR,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC3D,IAAMgtR,EAAclvR,KAAKmtR,cAAcjrR,GACjCuoR,EAAcyE,EAAY,GAC1BzrR,EAAUgnR,EAAYhnR,SACO,IAA/BqL,EAAS9F,QAAQvF,IACnBqL,EAAS1G,KAAK3E,GAEhB,IAAMnD,EAAWmqR,EAAYnqR,UACS,IAAlC83D,EAAWpvD,QAAQ1I,IACrB83D,EAAWhwD,KAAK9H,GAOlB,IALA,IAAMquR,EAAQlE,EAAYkE,MACtBvkR,OAAW,EACTiqL,EAAUo2F,EAAYp2F,QACtBvqK,EAAQolQ,EAAY,GAEnB7sC,EAAOh/O,OAAS/C,EAAS0tM,aAC9Bq0C,EAAOj6O,KAAKisL,EAAQvqK,GAAOu4N,EAAOh/O,SAGpC,OAAQ/C,EAAS2J,WACf,IAAK,QACHG,EAAci4O,EACdhuD,EAAQ,GAAKguD,EACbhuD,EAAQ,GAAKguD,EACb,MACF,IAAK,cACHj4O,EAAc9J,EAASgB,kBACXmpR,EAAY3gQ,OAASu4N,EACjChuD,EAAQ,GAAKguD,EACbhuD,EAAQ,GAAKguD,EACb,MACF,IAAK,cACHj4O,EAAc9J,EAASgB,kBACXmpR,EAAY3gQ,MAAQA,GAASu4N,EACzChuD,EAAQvqK,GAASu4N,EACjB,MACF,IAAK,kBAKL,IAAK,WACHj4O,EAAc9J,EAASgB,kBACXqtR,EAAM,IAAIlE,EAAY3gQ,MAAQA,GAASu4N,EACnDhuD,EAAQvqK,GAASu4N,EACjB,MACF,IAAK,gBACHj4O,EAAc9J,EAASgB,kBACXqtR,EAAM,IAAIA,EAAM,IAAIlE,EAAY3gQ,MAAQA,GAASu4N,EAC7DhuD,EAAQvqK,GAASu4N,EACjB,MACF,IAAK,SAGH,GAFAhuD,EAAQ,GAAKguD,EACbhuD,EAAQ,GAAKguD,EAz3BK,IA03BdooC,EAAY3gQ,MACd9pB,KAAKktR,kBAAmB,EACxB5sR,EAAS6zD,UAAUkuL,GACnBriP,KAAKktR,kBAAmB,MACnB,CAELltR,KAAKktR,kBAAmB,EACxB,IAAM3iG,EAAazqI,EAAIxhD,IAAI0kN,UAAU9gM,gBACjCthB,EAAS,GACX,GAAmBN,EAASY,YAAaqpL,GACzC,GAAmB83D,EAAQ93D,IAEvB0e,EAAiB,KACvB,GAAIA,EAAgB,CAClB,IAAMg4D,EAAiB3gQ,EACpBkK,QACAwuI,UAAUiwD,EAAgB1e,GAC7B02E,EAAe31J,UAAU1qG,GACzBA,EAASqgQ,EACNjoH,UAAUuxC,EAAY0e,GACtB7nM,YAELd,EAASgrG,UAAU1qG,GACnBZ,KAAKktR,kBAAmB,GAO1B9iR,GACFpK,KAAKmvR,wBAAwB7uR,EAAU8J,GAG3CpK,KAAK+uR,6BAA6B1sC,EAAQvzO,EAAUspD,IAQtD,YAAAixJ,gBAAA,SAAgBvpK,GACd,IAAK9/C,KAAKqrN,WAAWvrK,GACnB,OAAO,EAET,IAAMqqO,EAAkBrqO,EAAI2jC,WAC5BzjF,KAAKouR,sBAAsBtuO,EAAIszI,MAAOtzI,EAAIxhD,IAAK6rR,GAC/CnqR,KAAKmtR,cAAc9pR,OAAS,EAC5BrD,KAAKgtR,uBAAyB,KAC9B,IAAMgC,EAAgBhvR,KAAK4sR,eAC3B,GAAIoC,EAAe,CACjB,IAAMzkG,EAAazqI,EAAIxhD,IAAI0kN,UAAU9gM,gBAC/BktQ,EAAiB,GACjB/sC,EAAS2sC,EAAc7tR,cAAcG,iBACrC+tR,EAAe,EAAe,CAAChtC,IAC/BitC,EAAqBtvR,KAAK0oR,OAAO7K,YAAYwR,GAC7CE,EAAoB,GAC1BD,EAAmBnlQ,KAAKqlQ,IACxB,IAAK,IAAIttR,EAAI,EAAGgiB,EAAKorQ,EAAmBjsR,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC3D,IAAMutR,EAAmBH,EAAmBptR,GACtCmyL,EAAUo7F,EAAiBp7F,QAC7BjgL,EAAMyvK,EAAO4rG,EAAiBnvR,UAC5BquR,EAAQc,EAAiBd,MAQ/B,GAPIA,IACFv6Q,GAAO,IAAMu6Q,EAAMrkR,KAAK,MAErBilR,EAAkBn7Q,KACrBm7Q,EAAkBn7Q,GAAO,IAAItT,MAAM,IAIK,WAAxC2uR,EAAiBnvR,SAAS2J,WA37BD,IA47BzBwlR,EAAiB3lQ,MAiBnB,IACE,GAAiBuqK,EAAQ,GAAIguD,IAC5BktC,EAAkBn7Q,GAAK,GAO1B,IACE,GAAiBigL,EAAQ,GAAIguD,IAC5BktC,EAAkBn7Q,GAAK,GAoCxByvK,EAAOwQ,KAAYr0L,KAAK6sR,kBACvB0C,EAAkBn7Q,GAAK,KACvBm7Q,EAAkBn7Q,GAAK,IACxBpU,KAAK0sR,uBAAuB5sO,IAE5BsvO,EAAehnR,KAAKqnR,OA3CtB,CAIE,GACEF,EAAkBn7Q,GAAK,IACa,IAApCm7Q,EAAkBn7Q,GAAK,GAAG0V,MAC1B,CACA,IAAI1f,EAAcqlR,EAAiBnvR,SAASgB,iBAC5C,OAAQmuR,EAAiBnvR,SAAS2J,WAEhC,IAAK,aACL,IAAK,kBACH,SAGF,IAAK,eACHG,EAAcA,EAAYukR,EAAM,IAElC,IAAK,UACH,GACEc,EAAiB3lQ,QACjB1f,EAAYukR,EAAM,IAAItrR,OAAS,EAE/B,UAQRrD,KAAKmtR,cAAc/kR,KAAK,CAACqnR,EAAkB,IAC3CF,EAAkBn7Q,GAAK,GAAKq7Q,OAtC5BzvR,KAAKmtR,cAAc/kR,KAAK,CAACqnR,EAAkB,IAC3CF,EAAkBn7Q,GAAK,GAAKq7Q,OAd1B,GANoBC,GACpBvF,EACAsF,EACAllG,GAGgC83D,KAC/BktC,EAAkBn7Q,GAAK,KAExBpU,KAAKmtR,cAAc/kR,KAAK,CAACqnR,EAAkB,IAC3CF,EAAkBn7Q,GAAK,GAAKq7Q,GA6D9BL,EAAe/rR,QACjBrD,KAAKquR,oBAAoBvuO,EAAK,CAACsvO,IAGjC,IAAK,IAAI93Q,EAAI83Q,EAAe/rR,OAAS,EAAGiU,GAAK,IAAKA,EAChDtX,KAAK2vR,cAAcP,EAAe93Q,GAAI+qO,GAG1C,QAASriP,KAAK4sR,gBAQhB,YAAApjE,cAAA,SAAc1pK,GACZ,IAAK,IAAI59C,EAAIlC,KAAKmtR,cAAc9pR,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CACvD,IAAMuoR,EAAczqR,KAAKmtR,cAAcjrR,GAAG,GACpC5B,EAAWmqR,EAAYnqR,SAC7B,GAA2B,WAAvBA,EAAS2J,UAAwB,CAEnC,IAAMG,EAAc9J,EAASY,YACvB0tR,EAAoBnE,EAAYqE,gBAAgB,GAChDD,EAA2BpE,EAAYqE,gBAAgB,GAC7DF,EAAkBv6F,QAAQ,GAAKjqL,EAC/BwkR,EAAkBv6F,QAAQ,GAAKjqL,EAC/BykR,EAAyBx6F,QAAQ,GAAKjqL,EACtCykR,EAAyBx6F,QAAQ,GAAKjqL,EACtCpK,KAAK0oR,OAAOhrM,OAAO,GAAatzE,GAAcwkR,GAC9C,IAAI3tB,EAAiB3gQ,EACf2oM,EAAiB,KACvB,GAAIA,EAAgB,CAClB,IAAM1e,EAAazqI,EAAIxhD,IAAI0kN,UAAU9gM,gBAIrC++O,EAAiB,GAHjBA,EAAiBA,EACdz2P,QACAwuI,UAAUiwD,EAAgB1e,IACevxC,UAC1CuxC,EACA0e,GAGJjpM,KAAK0oR,OAAOhrM,OACVujL,EAAel6O,YACf8nQ,QAGF7uR,KAAK0oR,OAAOhrM,OAAO,EAAe+sM,EAAYp2F,SAAUo2F,GAa5D,OAVIzqR,KAAKgtR,yBACPhtR,KAAKggC,cACH,IAAIuuP,GACFnC,GACApsR,KAAKgtR,uBACLltO,IAGJ9/C,KAAKgtR,uBAAyB,OAEzB,GAOT,YAAA9sF,mBAAA,SAAmBpgJ,GACjB9/C,KAAK8sR,WAAahtO,EAAIszI,MACtBpzL,KAAKouR,sBAAsBtuO,EAAIszI,MAAOtzI,EAAIxhD,IAAKwhD,EAAI2jC,aASrD,YAAA2qM,sBAAA,SAAsBh7F,EAAO90L,EAAKsxR,GAAlC,IAWMhqQ,EACAiqQ,EAZN,OACQ1F,EAAkByF,GAAkBtxR,EAAIs3D,uBAAuBw9H,GAC/D7I,EAAajsL,EAAI0kN,UAAU9gM,gBAWjC,GAAIliB,KAAK6tR,cAAe,CACtB,IAAMr4F,EAC0B,iBAAvBx1L,KAAK6tR,cACR,SAACrpR,GAAU,OAAAA,IAAU,EAAKqpR,oBAC1BzpR,EACN9F,EAAI8jN,sBACFhvB,GACA,SAAC3vL,EAASe,EAAOlE,GAMf,GACyB,WANzBA,EACEA,GAEEmD,EAAQtC,eAGD8I,WACT+tB,EAAS,EAAKsrP,UAAUtnF,WAAYv4L,GACpC,CACAosR,EAAmBvvR,EACnB,IAAMmjF,EAAanjF,EAAS0iD,qBAAqBr4C,MAAM,EAAG,GAC1Dib,EAAQ,CACN,CACEniB,QAAO,EACPnD,SAAQ,EACR+zL,QAAS,CAAC5wG,EAAYA,KAI5B,OAAO,IAET,CAAC+xG,YAAW,IAGhB,IAAK5vK,EAAO,CACV,IAKMstM,EAAM,GACV,EANiB,GACjB,GAAai3D,EAAiBgC,IAC9B5hG,GAEajsL,EAAI0kN,UAAUvgM,gBAAkBziB,KAAKyoR,gBAEjB0D,IACjC5hG,GAEF3kK,EAAQ5lB,KAAK0oR,OAAO7K,YAAY3qD,GAGlC,GAAIttM,GAASA,EAAMviB,OAAS,EAAG,CAC7B,IAAMoR,EAAOmR,EAAMuE,MAxDE,SAAUrP,EAAGsP,GAClC,OACE0lQ,GAAsC3F,EAAiBrvQ,EAAGyvK,GAC1DulG,GAAsC3F,EAAiB//P,EAAGmgK,MAqDpB,GAClCwlG,EAAiBt7Q,EAAK4/K,QACxBguD,EAASqtC,GAAqBvF,EAAiB11Q,EAAM81K,GACnDq/F,EAActrR,EAAIw3D,uBAAuBusL,GAC3C35F,EAAO,GAAmB0qC,EAAOw2F,GACrC,GAAIiG,GAAoBnnI,GAAQ1oJ,KAAKyoR,gBAAiB,CAEpD,IAAMuH,EAAiB,GAOvB,GANAA,EAAensG,EAAOksG,KAAmB,EAEpC/vR,KAAKkuR,iBACRluR,KAAKmpN,OAAO,GAAKk5B,EAAO,GAAK8nC,EAAgB,GAC7CnqR,KAAKmpN,OAAO,GAAKk5B,EAAO,GAAK8nC,EAAgB,IAGjB,WAA5B11Q,EAAKnU,SAAS2J,WA7pCW,IA8pCzBwK,EAAKqV,MAEL9pB,KAAKitR,kBAAmB,EACxBjtR,KAAK+uR,6BACH1sC,EACA,CAAC5tO,EAAKhR,SACN,CAACgR,EAAKnU,eAEH,CACL,IAAM2vR,EAAS3xR,EAAIw3D,uBAAuBi6N,EAAe,IACnDG,EAAS5xR,EAAIw3D,uBAAuBi6N,EAAe,IACnDI,EAAe,GAA0BvG,EAAaqG,GACtDG,EAAe,GAA0BxG,EAAasG,GAC5DxnI,EAAOnnJ,KAAKkrC,KAAKlrC,KAAKqa,IAAIu0Q,EAAcC,IACxCpwR,KAAKitR,iBAAmBvkI,GAAQ1oJ,KAAKyoR,gBACjCzoR,KAAKitR,mBACP5qC,EACE8tC,EAAeC,EACXL,EAAe,GACfA,EAAe,IAEvB/vR,KAAK+uR,6BACH1sC,EACA,CAAC5tO,EAAKhR,SACN,CAACgR,EAAKnU,WAER,IAAM83D,EAAa,GACnBA,EAAWyrH,EAAOpvK,EAAKnU,YAAa,EACpC,IAAK,IAAI4B,EAAI,EAAGgiB,EAAK0B,EAAMviB,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAMmyL,EAAUzuK,EAAM1jB,GAAGmyL,QACzB,KACG,GAAiB07F,EAAe,GAAI17F,EAAQ,KAC3C,GAAiB07F,EAAe,GAAI17F,EAAQ,KAC7C,GAAiB07F,EAAe,GAAI17F,EAAQ,KAC3C,GAAiB07F,EAAe,GAAI17F,EAAQ,KAQ9C,MANA,IAAMg8F,EAAcxsG,EAAOj+J,EAAM1jB,GAAG5B,UAC9B+vR,KAAej4N,IACnBA,EAAWi4N,IAAe,EAC1BL,EAAensG,EAAOwQ,KAAY,IAS1C,YADAr0L,KAAK6sR,gBAAkBmD,IAIvBhwR,KAAK4sR,iBACP5sR,KAAKglR,SAAS7iQ,YAAY2V,cAAc93B,KAAK4sR,gBAC7C5sR,KAAK4sR,eAAiB,OAS1B,YAAA+C,cAAA,SAAclF,EAAapoC,GAQzB,IAPA,IAKIj4O,EALEiqL,EAAUo2F,EAAYp2F,QACtB5wL,EAAUgnR,EAAYhnR,QACtBnD,EAAWmqR,EAAYnqR,SACvBquR,EAAQlE,EAAYkE,MACpB7kQ,EAAQ2gQ,EAAY3gQ,MAGnBu4N,EAAOh/O,OAAS/C,EAAS0tM,aAC9Bq0C,EAAOj6O,KAAK,GAGd,OAAQ9H,EAAS2J,WACf,IAAK,kBAIL,IAAK,WACHG,EAAc9J,EAASgB,kBACXqtR,EAAM,IAAI5lR,OAAO+gB,EAAQ,EAAG,EAAGu4N,GAC3C,MACF,IAAK,gBACHj4O,EAAc9J,EAASgB,kBACXqtR,EAAM,IAAIA,EAAM,IAAI5lR,OAAO+gB,EAAQ,EAAG,EAAGu4N,GACrD,MACF,IAAK,cACHj4O,EAAc9J,EAASgB,kBACXyH,OAAO+gB,EAAQ,EAAG,EAAGu4N,GACjC,MACF,QACE,OAGJriP,KAAKmvR,wBAAwB7uR,EAAU8J,GACvC,IAAMkmR,EAAQtwR,KAAK0oR,OACnB4H,EAAMtyP,OAAOysP,GACbzqR,KAAKuwR,sBAAsBjwR,EAAUwpB,EAAO6kQ,EAAO,GAGnD,IAAM6B,EAAiB,CACrBn8F,QAAS,CAACA,EAAQ,GAAIguD,GACtB5+O,QAASA,EACTnD,SAAUA,EACVquR,MAAOA,EACP7kQ,MAAOA,GAGTwmQ,EAAM5d,OAAO,EAAe8d,EAAen8F,SAAUm8F,GACrDxwR,KAAKmtR,cAAc/kR,KAAK,CAACooR,EAAgB,IAGzC,IAAMC,EAAkB,CACtBp8F,QAAS,CAACguD,EAAQhuD,EAAQ,IAC1B5wL,QAASA,EACTnD,SAAUA,EACVquR,MAAOA,EACP7kQ,MAAOA,EAAQ,GAGjBwmQ,EAAM5d,OAAO,EAAe+d,EAAgBp8F,SAAUo8F,GACtDzwR,KAAKmtR,cAAc/kR,KAAK,CAACqoR,EAAiB,IAC1CzwR,KAAK+sR,wBAAyB,GAQhC,YAAAkC,YAAA,WACE,GACEjvR,KAAKiuR,mBACLjuR,KAAKiuR,kBAAkB9jR,MAAQ,eAC/B,CACA,IAAM21C,EAAM9/C,KAAKiuR,kBACjBjuR,KAAKquR,oBAAoBvuO,EAAK9/C,KAAKmtR,eACnC,IAAMxK,EAAU3iR,KAAK0wR,gBAYrB,OAXI1wR,KAAKgtR,wBACPhtR,KAAKggC,cACH,IAAIuuP,GACFnC,GACApsR,KAAKgtR,uBACLltO,IAKN9/C,KAAKgtR,uBAAyB,KACvBrK,EAET,OAAO,GAQT,YAAA+N,cAAA,WACE,IAGIhzJ,EAAWtzH,EAAa8kR,EAAa5uR,EAAU4B,EAAG4nB,EAAOsqD,EACzDrhB,EAAUuhB,EAAOm2M,EAAar2Q,EAJ5Bu8Q,EAAe3wR,KAAKmtR,cACpByD,EAAoB,GACtB7oK,GAAU,EAGd,IAAK7lH,EAAIyuR,EAAattR,OAAS,EAAGnB,GAAK,IAAKA,EAG1CkS,EAAMyvK,GADN4mG,GADAyE,EAAcyB,EAAazuR,IACD,IACDuB,SACrBgnR,EAAYkE,QAEdv6Q,GAAO,IAAMq2Q,EAAYkE,MAAMrkR,KAAK,MAEhC8J,KAAOw8Q,IACXA,EAAkBx8Q,GAAO,IAEJ,IAAnB86Q,EAAY,IACd0B,EAAkBx8Q,GAAKkgE,MAAQm2M,EAC/BmG,EAAkBx8Q,GAAK0V,MAAQ2gQ,EAAY3gQ,OAChB,GAAlBolQ,EAAY,KACrB0B,EAAkBx8Q,GAAKggE,KAAOq2M,EAC9BmG,EAAkBx8Q,GAAK0V,MAAQ2gQ,EAAY3gQ,MAAQ,GAGvD,IAAK1V,KAAOw8Q,EAAmB,CAiB7B,OAhBAt8M,EAAQs8M,EAAkBx8Q,GAAKkgE,MAC/BF,EAAOw8M,EAAkBx8Q,GAAKggE,MAE9BrhB,GADAjpC,EAAQ8mQ,EAAkBx8Q,GAAK0V,OACZ,GAMJ,IACbipC,EAAW,GAIb2qE,EADAtzH,GADA9J,GAPEmqR,OADWrmR,IAATgwE,EACYA,EAEAE,GAKOh0E,UACAgB,iBAEvBymH,GAAU,EACFznH,EAAS2J,WACf,IAAK,kBACCG,EAAYqgR,EAAYkE,MAAM,IAAItrR,OAAS,IAC7C+G,EAAYqgR,EAAYkE,MAAM,IAAI5lR,OAAO+gB,EAAO,GAChDi+F,GAAU,GAEZ,MACF,IAAK,aACC39G,EAAY/G,OAAS,IACvB+G,EAAYrB,OAAO+gB,EAAO,GAC1Bi+F,GAAU,GAEZ,MACF,IAAK,eACH2V,EAAYA,EAAU+sJ,EAAYkE,MAAM,IAE1C,IAAK,WACHjxJ,EAAYA,EAAU+sJ,EAAYkE,MAAM,KAC1BtrR,OAAS,IACjBymB,GAAS4zG,EAAUr6H,OAAS,IAC9BymB,EAAQ,GAEV4zG,EAAU30H,OAAO+gB,EAAO,GACxBi+F,GAAU,EACI,IAAVj+F,IAEF4zG,EAAU37D,MACV27D,EAAUt1H,KAAKs1H,EAAU,IACzB3qE,EAAW2qE,EAAUr6H,OAAS,IAQtC,GAAI0kH,EAAS,CACX/nH,KAAKmvR,wBAAwB7uR,EAAU8J,GACvC,IAAMugO,EAAW,GASjB,QARavmO,IAATgwE,IACFp0E,KAAK0oR,OAAO1qP,OAAOo2C,GACnBu2J,EAASviO,KAAKgsE,EAAKigH,QAAQ,UAEfjwL,IAAVkwE,IACFt0E,KAAK0oR,OAAO1qP,OAAOs2C,GACnBq2J,EAASviO,KAAKksE,EAAM+/G,QAAQ,UAEjBjwL,IAATgwE,QAAgChwE,IAAVkwE,EAAqB,CAE7C,IAAMk8M,EAAiB,CACrB7B,MAAOlE,EAAYkE,MACnBlrR,QAASgnR,EAAYhnR,QACrBnD,SAAUmqR,EAAYnqR,SACtBwpB,MAAOipC,EACPshI,QAASs2C,GAGX3qO,KAAK0oR,OAAOhW,OACV,EAAe8d,EAAen8F,SAC9Bm8F,GAGJxwR,KAAKuwR,sBAAsBjwR,EAAUwpB,EAAO2gQ,EAAYkE,OAAQ,GAC5D3uR,KAAK4sR,iBACP5sR,KAAKglR,SAAS7iQ,YAAY2V,cAAc93B,KAAK4sR,gBAC7C5sR,KAAK4sR,eAAiB,MAExB+D,EAAattR,OAAS,GAG1B,OAAO0kH,GAQT,YAAAonK,wBAAA,SAAwB7uR,EAAU8J,GAChCpK,KAAKktR,kBAAmB,EACxB5sR,EAASW,eAAemJ,GACxBpK,KAAKktR,kBAAmB,GAU1B,YAAAqD,sBAAA,SAAsBjwR,EAAUwpB,EAAO6kQ,EAAOnqN,GAC5CxkE,KAAK0oR,OAAO3K,gBACVz9Q,EAASymB,aACT,SAAU0oQ,GAENA,EAAiBnvR,WAAaA,SACnB8D,IAAVuqR,QAC4BvqR,IAA3BqrR,EAAiBd,OACjBnsO,EAAOitO,EAAiBd,MAAOA,KACjCc,EAAiB3lQ,MAAQA,IAEzB2lQ,EAAiB3lQ,OAAS06C,OAKpC,EAx0CA,CAAqBmnJ,IA+0CrB,SAAS6jE,GAAe10Q,EAAGsP,GACzB,OAAOtP,EAAEgP,MAAQM,EAAEN,MAarB,SAASgmQ,GACPe,EACApG,EACAlgG,GAEA,IAAMjqL,EAAWmqR,EAAYnqR,SAE7B,GAA2B,WAAvBA,EAAS2J,UAAwB,CACnC,IAAIg3P,EAAoE,EAIxE,GAp/C+B,IAo/C3BwpB,EAAY3gQ,MAAsC,CACpD,IAAMm/K,EAAiB,KACnBA,IACFg4D,EACEA,EAAez2P,QAAQwuI,UAAUiwD,EAAgB1e,IAGrD,IAAMumG,EAA0B,GAC9B7vB,EAAe//P,YACf,GAAmB2vR,EAAkBtmG,IAEjCwmG,EACJxvR,KAAKkrC,KAAKqkP,GAA2B7vB,EAAe7/P,YACtD,OAAO2vR,EAA0BA,GAIrC,IAAMttM,EAAa,GAAmBotM,EAAkBtmG,GAGxD,OAFA,GAAY,GAAK,GAAmBkgG,EAAYp2F,QAAQ,GAAI9J,GAC5D,GAAY,GAAK,GAAmBkgG,EAAYp2F,QAAQ,GAAI9J,G9KrvCvD,SAAkC9mG,EAAY4wG,GACnD,OAAO,GAAgB5wG,EAAY2wG,GAAiB3wG,EAAY4wG,I8KqvCzD28F,CAAyBvtM,EAAY,IAa9C,SAASisM,GAAqBmB,EAAkBpG,EAAalgG,GAC3D,IAAMjqL,EAAWmqR,EAAYnqR,SAE7B,GACyB,WAAvBA,EAAS2J,WAzhDsB,IA0hD/BwgR,EAAY3gQ,MACZ,CACA,IAAIm3O,EAAoE,EAGlEh4D,EAAiB,KAMvB,OALIA,IACFg4D,EACEA,EAAez2P,QAAQwuI,UAAUiwD,EAAgB1e,IAG9C2e,GACL+3D,EAAen0D,gBACb,GAAmB+jF,EAAkBtmG,IAEvCA,GAGJ,IAAM9mG,EAAa,GAAmBotM,EAAkBtmG,GAGxD,OAFA,GAAY,GAAK,GAAmBkgG,EAAYp2F,QAAQ,GAAI9J,GAC5D,GAAY,GAAK,GAAmBkgG,EAAYp2F,QAAQ,GAAI9J,GACrD2e,GACL9U,GAAiB3wG,EAAY,IAC7B8mG,GAcJ,Y,+dC5lDM0mG,GAMU,cAQhB,eAOE,WAAY9mR,EAAMi+C,EAAMi3N,EAAcsC,GAAtC,MACE,YAAMx3Q,IAAK,K,OAOX,EAAK2E,SAAWuwQ,EAOhB,EAAKj3N,KAAOA,EAOZ,EAAKmiI,WAAao3F,E,EAEtB,OA/BsC,QA+BtC,EA/BA,CAAsC7hP,IAuDtC,eAIE,WAAY47J,GAAZ,WACQ/7L,EAAU+7L,GAA4B,I,EAE5C,YAAM,CACJnO,YAAa5I,KACb,MAKGt2K,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAKqiG,eAAgB,EAMrB,EAAKC,SAAW,GAIhB,IAHA,IAAMC,EAAqBzxR,EAAQyxR,mBAC/BzxR,EAAQyxR,mBACR,GACKlvR,EAAI,EAAGgiB,EAAKktQ,EAAmB/tR,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC3D,IAAI8Q,EAASo+Q,EAAmBlvR,GACV,mBAAX8Q,IACTA,EAAS,IAAIA,GAEf,EAAKm+Q,SAAS/oR,KAAK4K,GACnB,EAAKk+Q,cACH,EAAKA,eAAsC,gBAArBl+Q,EAAO/I,U,OAOjC,EAAKoqM,YAAc10M,EAAQ4qL,WACvB,GAAc5qL,EAAQ4qL,YACtB,KAMJ,EAAK8mG,gBAAkB,KAMvB,EAAKhO,QAAU1jR,EAAQgb,QAAU,KAMjC,EAAKlN,OAAS9N,EAAQ8N,OAAS9N,EAAQ8N,OAAS,K,EAuJpD,OAjO0B,QAkFxB,YAAA6jR,cAAA,SAAclpO,EAAMvoB,GAClB,IAQIzmB,EARExU,EAASi7B,EAAMpyB,OAAO7I,OACtBtG,EAAM0B,KAAKwxD,SACb+4H,EAAavqL,KAAKq0M,YACjB9pB,IAEHA,EADajsL,EAAI0kN,UACC9gM,iBAKpB,IADA,IAAMo8E,EAAUt+F,KAAKmxR,SACZjvR,EAAI,EAAGgiB,EAAKo6E,EAAQj7F,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAChD,IAAM8Q,EAASsrF,EAAQp8F,GACnB8yF,EAAQpwF,EACR5E,KAAKkxR,eAAsC,gBAArBl+Q,EAAO/I,iBAClB7F,IAATgV,IACFA,GAAO,IAAIm4Q,aAAclpP,OAAOzjC,IAElCowF,EAAQ57E,GAEV,IAAMtK,EAAW9O,KAAKwxR,iBAAiBx+Q,EAAQgiF,EAAO,CACpDyrI,kBAAmBl2C,IAErB,GAAIz7K,GAAYA,EAASzL,OAAS,EAAG,CAC/BrD,KAAKqjR,UACPrjR,KAAKqjR,QAAQxiO,QACb7gD,KAAKqjR,QAAQxrP,YAAY/oB,IAE3B9O,KAAKggC,cACH,IAAIyxP,GACFR,GACA7oO,EACAt5C,EACAy7K,IAGJ,SAQN,YAAAmnG,mBAAA,WACE,IAAMpzR,EAAM0B,KAAKwxD,SACjB,GAAIlzD,EAAK,CACP,IAAMqzR,EAAW3xR,KAAKyN,OAASzN,KAAKyN,OAASnP,EAAIk2D,cACjDx0D,KAAKqxR,gBAAkB,CACrB9iG,GAAOojG,EAAU5iG,GAAUnhJ,KAAM5tC,KAAK4xR,WAAY5xR,MAClDuuL,GAAOojG,EAAU5iG,GAAUjB,UAAW9tL,KAAK6xR,WAAY7xR,MACvDuuL,GAAOojG,EAAU5iG,GAAUhB,SAAU/tL,KAAK6xR,WAAY7xR,MACtDuuL,GAAOojG,EAAU5iG,GAAUnhJ,KAAM5tC,KAAK6xR,WAAY7xR,SAWxD,YAAAkpN,UAAA,SAAU/rL,IACHn9B,KAAKmkN,aAAehnL,GACvBn9B,KAAK0xR,qBAEH1xR,KAAKmkN,cAAgBhnL,GACvBn9B,KAAK8xR,uBAEP,YAAM5oE,UAAS,UAAC/rL,IASlB,YAAAowB,OAAA,SAAOjvD,GACL0B,KAAK8xR,uBACL,YAAMvkO,OAAM,UAACjvD,GACT0B,KAAKmkN,aACPnkN,KAAK0xR,sBAWT,YAAAF,iBAAA,SAAiBx+Q,EAAQoG,EAAMzZ,GAC7B,IACE,OAEGqT,EAAO86G,aAAa10G,EAAMzZ,GAE7B,MAAOZ,GACP,OAAO,OAOX,YAAA+yR,qBAAA,WACM9xR,KAAKqxR,kBACPrxR,KAAKqxR,gBAAgB9pR,QAAQqnL,IAC7B5uL,KAAKqxR,gBAAkB,OAO3B,YAAAO,WAAA,SAAW/xP,GAET,IADA,IAAM49B,EAAQ59B,EAAMkyP,aAAat0N,MACxBv7D,EAAI,EAAGgiB,EAAKu5C,EAAMp6D,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAMkmD,EAAOqV,EAAMzzD,KAAK9H,GAClB+2O,EAAS,IAAI7iI,WACnB6iI,EAAOrtO,iBACLmjL,GAAUZ,KACVnuL,KAAKsxR,cAAcpxO,KAAKlgD,KAAMooD,IAE5BpoD,KAAKkxR,cACPj4C,EAAO+4C,kBAAkB5pO,GAEzB6wL,EAAOg5C,WAAW7pO,KAQxB,YAAAypO,WAAA,SAAWhyP,GACTA,EAAMiuC,kBACNjuC,EAAMswE,iBACNtwE,EAAMkyP,aAAaG,WAAa,QAEpC,EAjOA,CAA0B,IAmO1B,Y,0BC9TI,GAMc,cAGlB,MAAMC,GAAsB,SAAU1uR,EAAS2kD,GAC3C,GAAIjpD,OAAOqB,UAAUC,eAAeC,KAAK+C,EAAQisL,gBAAiB,WAC9D,OAAOjsL,EAAQisL,gBAAyB,QAK5C,MAAMn+H,EAAS,4DAA4Dr/C,KAAKzO,EAAQE,SAAWF,EAAQqgL,QAAQvyH,OACnH,OAAOA,EAAc,MACjBA,EAAc,OACbnJ,EAAKv/C,KAAKulB,cAAcU,SAAS,SAAWrrB,EAAQtC,cACjDhC,OAAOD,KAAKymC,GAAGplC,MAAMqI,MAAKuB,GAAQ1G,EAAQtC,wBAAyBwkC,GAAGplC,KAAK4J,KAC3Ei+C,EAAKv/C,MAGjB,2BAAsC,SAAUu/C,EAAMvoB,GAClD,IAAIj7B,EAASi7B,EAAMpyB,OAAO7I,OACtBtG,EAAM0B,KAAKwxD,SACX+4H,EAAavqL,KAAKq0M,YACjB9pB,IAEDA,EADWjsL,EAAI0kN,UACG9gM,iBAGtB,IAAIpT,EAAW,GACXyiD,EAAS,GACT+sC,EAAUt+F,KAAKmxR,SACf54N,EAAWnQ,EAAKv/C,KAIpB,GAAsB,iBAAXjE,EAAqB,CAC5B,IAAK,IAAI1C,EAAI,EAAGgiB,EAAKo6E,EAAQj7F,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC9C,IAAI8Q,EAASsrF,EAAQp8F,GAIrB,IAHA4M,EAAW9O,KAAKwxR,iBAAiBx+Q,EAAQpO,EAAQ,CAC7C67N,kBAAmBl2C,MAEPz7K,EAASzL,OAAS,EAC9B,MAIJyL,GAAYA,EAASzL,OAAS,EAG1BkuD,EADAziD,EAASiG,OAAM+F,GAAKha,MAAMC,QAAQ+Z,KACzBhM,EAAS7G,QAAO,SAAU+vD,EAAIrqC,GACnC,GAAiB,IAAbA,EAAEtqB,OAAc,OAAO20D,EAC3B,MAAM54D,EAAK+yR,GAAoBxkQ,EAAE,GAAIy6B,GAErC,OADA4P,EAAG54D,IAAO44D,EAAG54D,GAAM44D,EAAG54D,IAAO,IAAIiJ,OAAOslB,GACjCqqC,IACR,IAGMlpD,EAAS7G,QAAO,SAAU+vD,EAAIrqC,GACnC,IAAIvuB,EAAKuuB,EAAE/pB,UAAY+pB,EAAE/pB,SAASP,OAASsqB,EAAE/pB,SAAS+pB,EAAE/pB,SAASP,OAAS,GAAK,KAK/E,OAJKjE,IACDA,EAAK+yR,GAAoBxkQ,EAAGy6B,KAE/B4P,EAAG54D,GAAM44D,EAAG54D,IAAO,IAAIgJ,KAAKulB,GACtBqqC,IACR,IAEPzG,EAAOnJ,EAAKv/C,MAAQiG,OAIxBA,EAAWlK,GAAS,IAAI+gC,GAAG3yB,OAAOw6G,SAAUszH,uBAAuBl8O,EAAQ,CACvE67N,kBAAmBl2C,EACnBq2C,gBAAgB,IAAIj7L,GAAG3yB,OAAOw6G,SAAUwzH,yBAAyBp8O,KAChE,KACL2sD,EAAOnJ,EAAKv/C,MAAQiG,EAExB,MAAMmmG,EAAYpxE,KAAKC,MACjBsuP,EAAYjzR,OAAOD,KAAKqyD,GAC1B6gO,EAAU/uR,OAAS,IACnBoO,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB85K,EAAU/uR,OAAS,GAE3E,IAASnB,EAAI,EAAGA,EAAIkwR,EAAU/uR,OAAQnB,IAAK,CAEvC,MAAM2C,EAAQutR,EAAUlwR,GAClBmwR,EAAgB9gO,EAAO1sD,GACf,cAAVA,GAAyBwtR,GACzBA,EAAc9qR,SAASwH,IAAaA,EAAEnL,WAAUmL,EAAEnL,SAAW,CAACiB,OAC9D7E,KAAKqjR,UACLrjR,KAAKqjR,QAAQxiO,QACb7gD,KAAKqjR,QAAQxrP,YAAYw6P,IAG7B,MAAMC,EAAUD,GAAiBA,EAAchvR,QAAUgvR,EAAc,GAAGE,UAEpEjvK,EAAU,IAAI6C,KAAK,CAAC/9D,GADNkqO,EAAUA,EAAU,KAAO/5N,EAAW,IAAMA,EAClB,CAC1Ci6N,aAAcv9K,IAEd7sD,EAAKqqO,kBACLnvK,EAAQmvK,gBAAkBrqO,EAAKqqO,iBAEnC,MAAMxgL,EAAajyG,KAAK0yR,cAActqO,GAClC6pD,GACA0E,GAAY73F,IAAIwkG,EAASrR,GAG7B,MAAM0gL,EAAU,IAAIlB,GAAiB,GAAmCnuK,EAAS/xD,EAAO1sD,GAAQ0lL,GAChGooG,EAAQC,YAAc1wR,EACtBywR,EAAQE,YAAcT,EAAU/uR,OAChCrD,KAAKggC,cAAc2yP,KAK3B,wBAAmC,SAAU9yP,GACzC,MAAM82I,EAAQ32K,KACd,IAAIy9D,EAAQ59B,EAAMkyP,aAAat1L,MAE/B,GAAIx0C,iBAAiBznD,UAAU0nD,sBAAuB,CAElD,MAAM4qO,EAAgB,SAAUC,GACxBA,GACAp8G,EAAMq8G,YAAYD,IAG1B,IAAK,IAAI7wR,EAAI,EAAGgiB,EAAKu5C,EAAMp6D,OAAQnB,EAAIgiB,IAAMhiB,EACzCu7D,EAAMv7D,GAAGgmD,wBAAwBxpD,KAAKo0R,OAGzC,CAED,MAAMG,EAAoBC,IAClBA,EAAUC,YACVD,EAAUE,eAAeC,aAAY,SAAU9lR,GAC3CA,EAAQhG,SAAQ,SAAUiG,GACtBylR,EAAiBzlR,SAKrB0lR,aAAqB/sK,KACrBwwD,EAAMq8G,YAAYE,GAGlBA,EAAU9qO,MAAKx9C,eAAgBw9C,GAC3BuuH,EAAMq8G,YAAY5qO,OAKlC,IAAK,IAAI9wC,EAAI,EAAGypF,EAAKtjC,EAAMp6D,OAAQiU,EAAIypF,IAAMzpF,EAAG,CAC5C,MAAMtN,EAAOyzD,EAAMnmD,GACD,SAAdtN,EAAKspR,MACLL,EAAiBjpR,EAAKupR,oBAAsBvpR,EAAKwpR,gBAOjE,MAAM78K,GAAc,IAAI18F,IAExB,2BAAsC,SAAUmuC,GAC5C,OAAOuuD,GAAYn4F,IAAI4pC,IAG3B,iCAA4C,SAAUv/C,GAClD,MAAM4qR,EAAS5qR,EAAKulB,cACpB,IAAK,MAAMg6B,KAAQuuD,GAAYz3G,OAC3B,GAAIkpD,EAAKv/C,KAAKulB,gBAAkBqlQ,EAC5B,OAAO98K,GAAYn4F,IAAI4pC,GAG/B,OAAO,MAGX,2BAAsC,SAAUA,EAAMga,GAClD,OAAOu0C,GAAY73F,IAAIspC,EAAMga,IAGjC,yBAAoCx3D,eAAgBw9C,GAChD,MAAMuuH,EAAQ32K,KACd,IAAIiyG,EAEJ,GAAIxgG,OAAOiiR,sBAAwBtrO,aAAgB32C,OAAOiiR,qBAAsB,CAC5EzhL,EAAa7pD,EACb,IACIA,QAAa6pD,EAAW0hL,UAE5B,MAAOl6Q,GAGH,OAFA/R,QAAQgS,KAAKD,QACbk9J,EAAM32I,cAAc,IAAIyxP,GAAiB,QAASx/K,IAGtD0kE,EAAMi9G,cAAcxrO,EAAM6pD,GAG9B,GAAkB,oBAAd7pD,EAAKj+C,MACS,iCAAdi+C,EAAKj+C,MACS,qCAAdi+C,EAAKj+C,QACHi+C,EAAKj+C,MAAsB,6BAAdi+C,EAAKj+C,OAAwCi+C,EAAKv/C,KAAKW,MAAM,kBAAmB,CAC/F,IAAIivD,EAAM,IAAI,MACdhnD,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB,EAAI,EAClF,MAAMu7K,QAAmBp7N,EAAIq7N,UAAU1rO,GACvC32C,OAAO6mG,mBAEP,MAAMy7K,EAAkC,qCAAd3rO,EAAKj+C,QACzBi+C,EAAKj+C,MAAsB,6BAAdi+C,EAAKj+C,OAAwCi+C,EAAKv/C,KAAKW,MAAM,YAAe4+C,EAAKv/C,KAAO,KAE3GgrR,EAAWtsR,SAAQ,SAAUgxD,EAAUy7N,GAC/BA,EAAWC,MAGfxiR,OAAO6mG,mBAEP07K,EAAWppR,MAAM,QAAQlM,MAAK,SAAUyF,GACpCsN,OAAO6mG,mBAEP,MAAMgL,EAAUywK,EAAmB,IAAI5tK,KAAK,CAAChiH,GAAO4vR,EAAkB,CAAE5pR,KAAM,yCAA4C,IAAIg8G,KAAK,CAAChiH,GAAOo0D,GAC3I+qD,EAAQmvK,gBAAkBrqO,EAAKqqO,iBAAmBrqO,EAC9C6pD,GACA0kE,EAAMi9G,cAActwK,EAASrR,GAEjC0kE,EAAMq8G,YAAY1vK,eAI1B,GAAI7xG,OAAOyiR,2BAA6B9rO,aAAgB32C,OAAOyiR,0BAC3D,UAAW,MAAMjwQ,KAASmkC,EAAKj6B,SAC3BwoJ,EAAMq8G,YAAY/uQ,OAGrB,CACDxS,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB,EAAI,EAClF,IAAI2gI,EAAS,IAAI7iI,WACjB6iI,EAAOrtO,iBAAiBmjL,GAAUZ,KAAMxX,EAAM26G,cAAcpxO,KAAKy2H,EAAOvuH,IACxE6wL,EAAOg5C,WAAW7pO,KAK9B,8BAAyC,SAA0Bp1C,EAAQoG,EAAMzZ,GAC7E,IAAImP,EACJ,IACIA,EAAWkE,EAAO86G,aAAa10G,EAAMzZ,GACvC,MAAOZ,GACL,OAAO,KAEX,OAAI+P,GAAYA,EAASzL,QAAUyL,EAASqM,MAAKpM,GAAKjO,MAAMC,QAAQgO,GAAKA,EAAEoM,MAAKorK,KAAQA,EAAGplL,kBAAmB4N,EAAE5N,gBACrG2N,EAEJ,MAGX,YCjQA,GACW,UADX,GAE8B,yB,+dCuJ9B,SAnGA,YAIE,WAAY4sL,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCjJ,EAAc,GAAO,GAAI9yL,G,cAExB8yL,EAAY0hG,eACZ1hG,EAAY2hG,wB,EACnB,YAAM3hG,IAAY,MAKbpkL,GAKL,EAAKoyC,KAKL,EAAKouI,GAEL,EAAKwlG,gBAA+BjwR,IAApBzE,EAAQw0R,QAAwBx0R,EAAQw0R,QAAU,GAClE,EAAKG,+BACgClwR,IAAnCzE,EAAQy0R,wBACJz0R,EAAQy0R,wB,EAkElB,OAjG4B,QA0C1B,YAAAG,WAAA,WACE,OAA8Bv0R,KAAKwe,IAAIg2Q,KASzC,YAAAH,WAAA,SAAWF,GACTn0R,KAAK8e,IAAI01Q,GAAsBL,IASjC,YAAAM,0BAAA,WACE,OACEz0R,KAAKwe,IAAIg2Q,KAUb,YAAAF,0BAAA,SAA0BF,GACxBp0R,KAAK8e,IAAI01Q,GAAyCJ,IAmBpD,YAAArwR,QAAA,SAAQqvL,GACN,OAAO,YAAMrvL,QAAO,UAACqvL,IAEzB,EAjGA,CAA4B,I,+dCe5B,eAME,WAAYi4E,EAAWx2P,EAAO6mL,GAA9B,MACE,cAAO,KAED/7L,EAAU+7L,GAA4B,G,OAK5C,EAAK2vE,UAAYA,EAMjB,EAAKx2P,MAAQA,EAQb,EAAK6/Q,YAAc,KAQnB,EAAKjsR,IAAM,GAMX,EAAKksR,iBACoBvwR,IAAvBzE,EAAQi1R,WAA2B,IAAMj1R,EAAQi1R,WAOnD,EAAKC,kBAAoB,GAKzB,EAAK5wO,cAAgBtkD,EAAQskD,Y,EAuLjC,OA9OmB,QA6DjB,YAAA0vC,QAAA,WACE3zF,KAAKggC,cAAc+uJ,GAAUhyC,SAM/B,YAAA/6E,QAAA,aAKA,YAAAqqH,OAAA,WACE,OAAOrsL,KAAKyI,IAAM,IAAMzI,KAAKqrQ,WAS/B,YAAAypB,eAAA,WACE,IAAK90R,KAAK00R,YAER,OAAO10R,KAET,IAAIstB,EAAOttB,KAAK00R,YAMhB,EAAG,CACD,GAAIpnQ,EAAK4lK,YAAc6P,GAIrB,OADA/iM,KAAK20R,YAAc,EACZrnQ,EAETA,EAAOA,EAAKonQ,kBACLpnQ,GAGT,OAAOttB,MAOT,YAAA+0R,oBAAA,WACE,GAAK/0R,KAAK00R,YAAV,CAIA,IAAIpnQ,EAAOttB,KAAK00R,YAKZ1yQ,EAAOhiB,KAEX,EAAG,CACD,GAAIstB,EAAK4lK,YAAc6P,GAAkB,CAIvCz1K,EAAKonQ,YAAc,KACnB,MACSpnQ,EAAK4lK,YAAc6P,GAG5B/gL,EAAOsL,EACEA,EAAK4lK,YAAc6P,GAG5B/gL,EAAK0yQ,YAAcpnQ,EAAKonQ,YAExB1yQ,EAAOsL,EAETA,EAAOtL,EAAK0yQ,kBACLpnQ,KAQX,YAAA0nQ,aAAA,WACE,OAAOh1R,KAAKqrQ,WAMd,YAAAn4E,SAAA,WACE,OAAOlzL,KAAK6U,OAWd,YAAAF,SAAA,SAASE,GACP,GAAI7U,KAAK6U,QAAUkuL,IAAmB/iM,KAAK6U,MAAQA,EACjD,MAAM,IAAI7V,MAAM,gCAElBgB,KAAK6U,MAAQA,EACb7U,KAAK2zF,WAUP,YAAAyiC,KAAA,WACE,KASF,YAAA6+J,SAAA,SAAS71R,EAAIktH,GACX,IAAKtsH,KAAK20R,YACR,OAAO,EAGT,IAAIpmN,EAAQvuE,KAAK60R,kBAAkBz1R,GACnC,GAAKmvE,GAGE,IAAe,IAAXA,EACT,OAAO,OAHPA,EAAQ+9C,EACRtsH,KAAK60R,kBAAkBz1R,GAAMmvE,EAK/B,IAAM/J,EAAQ8nD,EAAO/9C,EAAQ,IAAO,GACpC,OAAI/J,GAASxkE,KAAK20R,YACT,EAEF1pF,GAAOzmI,EAAQxkE,KAAK20R,cAU7B,YAAAO,aAAA,SAAa91R,GACX,QAAKY,KAAK20R,cAG6B,IAAhC30R,KAAK60R,kBAAkBz1R,IAOhC,YAAA+1R,cAAA,SAAc/1R,GACRY,KAAK20R,cACP30R,KAAK60R,kBAAkBz1R,IAAO,IAGpC,EA9OA,CAAmB,IAgPnB,Y,+dC3JA,SAzJA,YASE,WACEisQ,EACAx2P,EACAlD,EACAwb,EACAioQ,EACA15F,GANF,MAQE,YAAM2vE,EAAWx2P,EAAO6mL,IAAY,K,OAMpC,EAAKmvD,aAAe19N,EAQpB,EAAK87N,KAAOt3O,EAEZ,EAAKlJ,IAAMkJ,EAMX,EAAKu3O,OAAS,IAAI91K,MACE,OAAhBjmD,IACF,EAAK+7N,OAAO/7N,YAAcA,GAO5B,EAAKg8N,UAAY,KAMjB,EAAKksC,kBAAoBD,E,EAsF7B,OA5IwB,QA8DtB,YAAAloQ,SAAA,WACE,OAAOltB,KAAKkpP,QAOd,YAAA1iF,SAAA,SAASrlH,GACPnhD,KAAKkpP,OAAS/nM,EACdnhD,KAAK6U,MAAQkuL,GACb/iM,KAAKspP,iBACLtpP,KAAK2zF,WAQP,YAAA01J,kBAAA,WAgEF,IACQn2K,EAhEJlzE,KAAK6U,MAAQkuL,GACb/iM,KAAKspP,iBACLtpP,KAAKkpP,SA8DDh2K,EAAMmkH,GAAsB,EAAG,IACjC1kH,UAAY,gBAChBO,EAAIN,SAAS,EAAG,EAAG,EAAG,GACfM,EAAI7V,QAhETr9D,KAAK2zF,WAQP,YAAA41J,iBAAA,WACE,IAAMx8N,EAAyC/sB,KAAW,OACtD+sB,EAAMuoQ,cAAgBvoQ,EAAMwoQ,cAC9Bv1R,KAAK6U,MAAQkuL,GAEb/iM,KAAK6U,MAAQkuL,GAEf/iM,KAAKspP,iBACLtpP,KAAK2zF,WAOP,YAAAyiC,KAAA,WACMp2H,KAAK6U,OAASkuL,KAChB/iM,KAAK6U,MAAQkuL,GACb/iM,KAAKkpP,OAAS,IAAI91K,MACQ,OAAtBpzE,KAAK6qP,eACP7qP,KAAKkpP,OAAO/7N,YAAcntB,KAAK6qP,eAG/B7qP,KAAK6U,OAASkuL,KAChB/iM,KAAK6U,MAAQkuL,GACb/iM,KAAK2zF,UACL3zF,KAAKq1R,kBAAkBr1R,KAAMA,KAAKipP,MAClCjpP,KAAKmpP,UAAYT,GACf1oP,KAAKkpP,OACLlpP,KAAKupP,iBAAiBrpM,KAAKlgD,MAC3BA,KAAKqpP,kBAAkBnpM,KAAKlgD,SAUlC,YAAAspP,eAAA,WACMtpP,KAAKmpP,YACPnpP,KAAKmpP,YACLnpP,KAAKmpP,UAAY,OAGvB,EA5IA,CAAwB,ICkfxB,SAzcA,WASE,WACE3/C,EACAgsF,EACAC,EACAC,EACAC,EACAC,GAMA51R,KAAK61R,YAAcrsF,EAMnBxpM,KAAK81R,YAAcN,EAGnB,IAAIO,EAAoB,GAClBC,EAAeptF,GAAa5oM,KAAK81R,YAAa91R,KAAK61R,aAOzD71R,KAAKi2R,cAAgB,SAAUztR,GAC7B,IAAMC,EAAMD,EAAE,GAAK,IAAMA,EAAE,GAI3B,OAHKutR,EAAkBttR,KACrBstR,EAAkBttR,GAAOutR,EAAaxtR,IAEjCutR,EAAkBttR,IAO3BzI,KAAKk2R,iBAAmBR,EAMxB11R,KAAKm2R,uBAAyBR,EAAiBA,EAM/C31R,KAAKo2R,WAAa,GAOlBp2R,KAAKq2R,iBAAkB,EAMvBr2R,KAAKs2R,kBACHt2R,KAAK61R,YAAYprG,cACfirG,KACA11R,KAAK61R,YAAY9uQ,aACnB6hK,GAAS8sG,IAAoB9sG,GAAS5oL,KAAK61R,YAAY9uQ,aAMzD/mB,KAAKu2R,kBAAoBv2R,KAAK61R,YAAY9uQ,YACtC6hK,GAAS5oL,KAAK61R,YAAY9uQ,aAC1B,KAMJ/mB,KAAKw2R,kBAAoBx2R,KAAK81R,YAAY/uQ,YACtC6hK,GAAS5oL,KAAK81R,YAAY/uQ,aAC1B,KAEJ,IAAM0vQ,EAAqB,GAAWhB,GAChCiB,EAAsB,GAAYjB,GAClCkB,EAAyB,GAAelB,GACxCmB,EAAwB,GAAcnB,GACtCoB,EAAgB72R,KAAKi2R,cAAcQ,GACnCK,EAAiB92R,KAAKi2R,cAAcS,GACpCK,EAAoB/2R,KAAKi2R,cAAcU,GACvCK,EAAmBh3R,KAAKi2R,cAAcW,GAYtCK,EArIc,IAuIjBrB,EACGr0R,KAAK4K,IACH,EACA5K,KAAKgjD,KACHumI,GACEn6K,GAAQ8kR,IACLG,EACCA,EACA,IACA,QAIV,GAcN,GAZA51R,KAAKk3R,SACHT,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAGEj3R,KAAKq2R,gBAAiB,CACxB,IAAI,EAAYrgO,EAAAA,EAChBh2D,KAAKo2R,WAAW7uR,SAAQ,SAAU4vR,EAAUj1R,EAAGoF,GAC7C,EAAY/F,KAAKqa,IACf,EACAu7Q,EAASx8Q,OAAO,GAAG,GACnBw8Q,EAASx8Q,OAAO,GAAG,GACnBw8Q,EAASx8Q,OAAO,GAAG,OAMvB3a,KAAKo2R,WAAW7uR,QACd,SAAU4vR,GACR,GACE51R,KAAK4K,IACHgrR,EAASx8Q,OAAO,GAAG,GACnBw8Q,EAASx8Q,OAAO,GAAG,GACnBw8Q,EAASx8Q,OAAO,GAAG,IAEnB,EACF3a,KAAKu2R,kBAAoB,EACzB,CACA,IAAMa,EAAc,CAClB,CAACD,EAASx8Q,OAAO,GAAG,GAAIw8Q,EAASx8Q,OAAO,GAAG,IAC3C,CAACw8Q,EAASx8Q,OAAO,GAAG,GAAIw8Q,EAASx8Q,OAAO,GAAG,IAC3C,CAACw8Q,EAASx8Q,OAAO,GAAG,GAAIw8Q,EAASx8Q,OAAO,GAAG,KAEzCy8Q,EAAY,GAAG,GAAK,EAAYp3R,KAAKu2R,kBAAoB,IAC3Da,EAAY,GAAG,IAAMp3R,KAAKu2R,mBAExBa,EAAY,GAAG,GAAK,EAAYp3R,KAAKu2R,kBAAoB,IAC3Da,EAAY,GAAG,IAAMp3R,KAAKu2R,mBAExBa,EAAY,GAAG,GAAK,EAAYp3R,KAAKu2R,kBAAoB,IAC3Da,EAAY,GAAG,IAAMp3R,KAAKu2R,mBAM5B,IAAM1uG,EAAOtmL,KAAKqa,IAChBw7Q,EAAY,GAAG,GACfA,EAAY,GAAG,GACfA,EAAY,GAAG,IAEJ71R,KAAK4K,IAChBirR,EAAY,GAAG,GACfA,EAAY,GAAG,GACfA,EAAY,GAAG,IAENvvG,EAAO7nL,KAAKu2R,kBAAoB,IACzCY,EAASx8Q,OAASy8Q,KAGtBl3O,KAAKlgD,OAIX+1R,EAAoB,GA0PxB,OA7OE,YAAAsB,aAAA,SAAav8Q,EAAGsP,EAAG5hB,EAAG8uR,EAAMC,EAAMC,GAChCx3R,KAAKo2R,WAAWhuR,KAAK,CACnBuS,OAAQ,CAAC28Q,EAAMC,EAAMC,GACrB/pR,OAAQ,CAACqN,EAAGsP,EAAG5hB,MAoBnB,YAAA0uR,SAAA,SAASp8Q,EAAGsP,EAAG5hB,EAAG05B,EAAGo1P,EAAMC,EAAMC,EAAMC,EAAMR,GAC3C,IAAMS,EAAmB,EAAe,CAACJ,EAAMC,EAAMC,EAAMC,IACrDE,EAAkB33R,KAAKu2R,kBACzB3tG,GAAS8uG,GAAoB13R,KAAKu2R,kBAClC,KACEqB,EAA0C53R,KAAsB,kBAIhE63R,EACJ73R,KAAK61R,YAAYprG,YACjBktG,EAAkB,IAClBA,EAAkB,EAEhBG,GAAmB,EAEvB,GAAIb,EAAiB,EAAG,CACtB,GAAIj3R,KAAK81R,YAAY/wF,YAAc/kM,KAAKw2R,kBAItCsB,EADElvG,GAFuB,EAAe,CAAC9tK,EAAGsP,EAAG5hB,EAAG05B,KAEnBliC,KAAKw2R,kBA5QjB,KA8QuBsB,GAEvCD,GAAU73R,KAAK61R,YAAY9wF,YAAc4yF,IAC5CG,EACEH,EAlRiB,KAkRuBG,GAI9C,MAAKA,GAAoB93R,KAAKk2R,kBAE1Bt2H,SAAS83H,EAAiB,KAC1B93H,SAAS83H,EAAiB,KAC1B93H,SAAS83H,EAAiB,KAC1B93H,SAAS83H,EAAiB,MAErBt0O,GAAWs0O,EAAkB13R,KAAKk2R,kBAP3C,CAcA,IAAI6B,EAAc,EAElB,KAAKD,GAEAl4H,SAAS03H,EAAK,KACd13H,SAAS03H,EAAK,KACd13H,SAAS23H,EAAK,KACd33H,SAAS23H,EAAK,KACd33H,SAAS43H,EAAK,KACd53H,SAAS43H,EAAK,KACd53H,SAAS63H,EAAK,KACd73H,SAAS63H,EAAK,KAEf,GAAIR,EAAiB,EACnBa,GAAmB,OASnB,GACiB,IANjBC,GACIn4H,SAAS03H,EAAK,KAAQ13H,SAAS03H,EAAK,IAAU,EAAJ,IAC1C13H,SAAS23H,EAAK,KAAQ33H,SAAS23H,EAAK,IAAU,EAAJ,IAC1C33H,SAAS43H,EAAK,KAAQ53H,SAAS43H,EAAK,IAAU,EAAJ,IAC1C53H,SAAS63H,EAAK,KAAQ73H,SAAS63H,EAAK,IAAU,EAAJ,KAG7B,GAAfM,GACe,GAAfA,GACe,GAAfA,EAEA,OAMR,GAAId,EAAiB,EAAG,CACtB,IAAKa,EAAkB,CACrB,IAAMn3R,EAAS,EAAEma,EAAE,GAAKtS,EAAE,IAAM,GAAIsS,EAAE,GAAKtS,EAAE,IAAM,GAC7CwvR,EAAYh4R,KAAKi2R,cAAct1R,GAEjCkiD,OAAE,EACN,GAAIg1O,EAKFh1O,GAHG,GAAOy0O,EAAK,GAAIM,GACf,GAAOJ,EAAK,GAAII,IAClB,EACqB,GAAOI,EAAU,GAAIJ,QAE5C/0O,GAAMy0O,EAAK,GAAKE,EAAK,IAAM,EAAIQ,EAAU,GAE3C,IAAMl1O,GAAMw0O,EAAK,GAAKE,EAAK,IAAM,EAAIQ,EAAU,GAE/CF,EAD8Bj1O,EAAKA,EAAKC,EAAKA,EACF9iD,KAAKm2R,uBAElD,GAAI2B,EAAkB,CACpB,GAAIv2R,KAAKyoB,IAAIlP,EAAE,GAAKtS,EAAE,KAAOjH,KAAKyoB,IAAIlP,EAAE,GAAKtS,EAAE,IAAK,CAElD,IAAMyvR,EAAK,EAAE7tQ,EAAE,GAAK5hB,EAAE,IAAM,GAAI4hB,EAAE,GAAK5hB,EAAE,IAAM,GACzC0vR,EAAQl4R,KAAKi2R,cAAcgC,GAC3BE,EAAK,EAAEj2P,EAAE,GAAKpnB,EAAE,IAAM,GAAIonB,EAAE,GAAKpnB,EAAE,IAAM,GACzCs9Q,EAAQp4R,KAAKi2R,cAAckC,GAEjCn4R,KAAKk3R,SACHp8Q,EACAsP,EACA6tQ,EACAE,EACAb,EACAC,EACAW,EACAE,EACAnB,EAAiB,GAEnBj3R,KAAKk3R,SACHiB,EACAF,EACAzvR,EACA05B,EACAk2P,EACAF,EACAV,EACAC,EACAR,EAAiB,OAEd,CAEL,IAAMoB,EAAK,EAAEv9Q,EAAE,GAAKsP,EAAE,IAAM,GAAItP,EAAE,GAAKsP,EAAE,IAAM,GACzCkuQ,EAAQt4R,KAAKi2R,cAAcoC,GAC3BE,EAAK,EAAE/vR,EAAE,GAAK05B,EAAE,IAAM,GAAI15B,EAAE,GAAK05B,EAAE,IAAM,GACzCs2P,EAAQx4R,KAAKi2R,cAAcsC,GAEjCv4R,KAAKk3R,SACHp8Q,EACAu9Q,EACAE,EACAr2P,EACAo1P,EACAgB,EACAE,EACAf,EACAR,EAAiB,GAEnBj3R,KAAKk3R,SACHmB,EACAjuQ,EACA5hB,EACA+vR,EACAD,EACAf,EACAC,EACAgB,EACAvB,EAAiB,GAGrB,QAIJ,GAAIY,EAAQ,CACV,IAAK73R,KAAKs2R,kBACR,OAEFt2R,KAAKq2R,iBAAkB,EAOE,IAAR,GAAd0B,IACH/3R,KAAKq3R,aAAav8Q,EAAGtS,EAAG05B,EAAGo1P,EAAME,EAAMC,GAEd,IAAR,GAAdM,IACH/3R,KAAKq3R,aAAav8Q,EAAGtS,EAAG4hB,EAAGktQ,EAAME,EAAMD,GAErCQ,IAEyB,IAAR,GAAdA,IACH/3R,KAAKq3R,aAAajtQ,EAAG8X,EAAGpnB,EAAGy8Q,EAAME,EAAMH,GAEd,IAAR,EAAdS,IACH/3R,KAAKq3R,aAAajtQ,EAAG8X,EAAG15B,EAAG+uR,EAAME,EAAMD,MAU7C,YAAAiB,sBAAA,WACE,IAAMn9Q,ErM/RD,CAAC06C,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KqMwSrC,OAPAh2D,KAAKo2R,WAAW7uR,SAAQ,SAAU4vR,EAAUj1R,EAAGoF,GAC7C,IAAMqK,EAAMwlR,EAASx8Q,OACrBysK,GAAiB9rK,EAAQ3J,EAAI,IAC7By1K,GAAiB9rK,EAAQ3J,EAAI,IAC7By1K,GAAiB9rK,EAAQ3J,EAAI,OAGxB2J,GAMT,YAAAo9Q,aAAA,WACE,OAAO14R,KAAKo2R,YAEhB,EAvcA,GCzCO,ICWHuC,GDXSC,GAA2B,CACtCnd,uBAAuB,EACvBod,yBAAyB,GAOdC,GAA0B,CACrCrd,uBAAuB,EACvBod,yBAAyB,GCKd,GAAa,GAY1B,SAASE,GAAiB7lN,EAAK8lN,EAAIC,EAAIC,EAAIC,GACzCjmN,EAAI8rD,YACJ9rD,EAAIo2C,OAAO,EAAG,GACdp2C,EAAIksD,OAAO45J,EAAIC,GACf/lN,EAAIksD,OAAO85J,EAAIC,GACfjmN,EAAI67K,YACJ77K,EAAIq+B,OACJr+B,EAAI59D,OACJ49D,EAAIN,SAAS,EAAG,EAAGrxE,KAAK4K,IAAI6sR,EAAIE,GAAM,EAAG33R,KAAK4K,IAAI8sR,EAAIE,IACtDjmN,EAAIynH,UAWN,SAASy+F,GAA8Bj1R,EAAM8tB,GAE3C,OACE1wB,KAAKyoB,IAAI7lB,EAAc,EAAT8tB,GAAc,KAAO,GACnC1wB,KAAKyoB,IAAI7lB,EAAc,EAAT8tB,EAAa,GAAK,QAAc,EA2C3C,SAASonQ,GACd7vF,EACAgsF,EACA/8E,EACAE,GAEA,IAAMH,EAAex/D,GAAUy/D,EAAc+8E,EAAYhsF,GAGrDkP,EAAmBjU,GACrB+wF,EACA78E,EACAF,GAGI6gF,EAAsB9D,EAAW9yQ,wBACXte,IAAxBk1R,IACF5gF,GAAoB4gF,GAEtB,IAAMC,EAAsB/vF,EAAW9mL,wBACXte,IAAxBm1R,IACF7gF,GAAoB6gF,GAOtB,IAAM5vF,EAAeH,EAAWziL,YAChC,IAAK4iL,GAAgBpiB,EAAmBoiB,EAAc6O,GAAe,CACnE,IAAMghF,EACJ/0F,GAAmB+E,EAAYkP,EAAkBF,GACjDE,EACE94C,SAAS45H,IAAuBA,EAAqB,IACvD9gF,GAAoB8gF,GAIxB,OAAO9gF,EAmEF,SAAS77J,GACdvqB,EACAC,EACAmtL,EACAhH,EACA/O,EACAgP,EACA88E,EACAgE,EACAC,EACA5c,EACA6c,EACAz8D,GAEA,IAAM5qJ,EAAU+kH,GACd91L,KAAKirC,MAAMkzK,EAAaptL,GACxB/wB,KAAKirC,MAAMkzK,EAAantL,GACxB,IAOF,GAJK2qM,GACH,GAAO5qJ,EAASsmN,IAGK,IAAnBc,EAAQr2R,OACV,OAAOivE,EAAQjV,OAKjB,SAASu8N,EAAW/2R,GAClB,OAAOtB,KAAKirC,MAAM3pC,EAAQ68M,GAAcA,EAH1CptI,EAAQ/nC,MAAMm1K,EAAYA,GAM1BptI,EAAQI,yBAA2B,UAEnC,IAAMmnN,EvM7CC,CAAC7jO,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KuM8CvC0jO,EAAQnyR,SAAQ,SAAUoK,EAAKzP,EAAGoF,GAChC,GAAOuyR,EAAkBloR,EAAI2J,WAG/B,IAAMw+Q,EAAqBlxG,GAASixG,GAC9BE,EAAsBlxG,GAAUgxG,GAChCG,EAAgB3iG,GACpB91L,KAAKirC,MAAOkzK,EAAao6E,EAAsBphF,GAC/Cn3M,KAAKirC,MAAOkzK,EAAaq6E,EAAuBrhF,IAG7CwkB,GACH,GAAO88D,EAAepB,IAGxB,IAAMqB,EAAcv6E,EAAahH,EAEjCghF,EAAQnyR,SAAQ,SAAUoK,EAAKzP,EAAGoF,GAChC,IAAM4yR,EAAOvoR,EAAI2J,OAAO,GAAKu+Q,EAAiB,GACxCM,IAASxoR,EAAI2J,OAAO,GAAKu+Q,EAAiB,IAC1CplN,EAAWm0G,GAASj3K,EAAI2J,QACxBo5D,EAAYm0G,GAAUl3K,EAAI2J,QAG5B3J,EAAIob,MAAMuF,MAAQ,GAAK3gB,EAAIob,MAAMwF,OAAS,GAC5CynQ,EAAc7mN,UACZxhE,EAAIob,MACJ+vP,EACAA,EACAnrQ,EAAIob,MAAMuF,MAAQ,EAAIwqP,EACtBnrQ,EAAIob,MAAMwF,OAAS,EAAIuqP,EACvBod,EAAOD,EACPE,EAAOF,EACPxlN,EAAWwlN,EACXvlN,EAAYulN,MAKlB,IAAMG,EAAgB,GAAW3E,GAuJjC,OArJAgE,EAAcf,eAAenxR,SAAQ,SAAU4vR,EAAUj1R,EAAGoF,GAqB1D,IAAMqT,EAASw8Q,EAASx8Q,OAClBlN,EAAS0pR,EAAS1pR,OACpBu3I,EAAKrqI,EAAO,GAAG,GACjBsqI,EAAKtqI,EAAO,GAAG,GACbgrI,EAAKhrI,EAAO,GAAG,GACjBirI,EAAKjrI,EAAO,GAAG,GACbuuK,EAAKvuK,EAAO,GAAG,GACjBwuK,EAAKxuK,EAAO,GAAG,GAEX0/Q,EAAKT,GAAYnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GACpD2hF,EAAKV,IACPnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GAEjCqgF,EAAKY,GAAYnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GACpDsgF,EAAKW,IACPnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GAEjCugF,EAAKU,GAAYnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GACpDwgF,EAAKS,IACPnsR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,GAMjC4hF,EAAwBv1I,EACxBw1I,EAAwBv1I,EAC9BD,EAAK,EACLC,EAAK,EAML,IAMMw1I,EtMxOH,SAA2BzzG,GAGhC,IAFA,IAAMpyK,EAAIoyK,EAAI3jL,OAELnB,EAAI,EAAGA,EAAI0S,EAAG1S,IAAK,CAI1B,IAFA,IAAIw4R,EAASx4R,EACTy4R,EAAQp5R,KAAKyoB,IAAIg9J,EAAI9kL,GAAGA,IACnBoS,EAAIpS,EAAI,EAAGoS,EAAIM,EAAGN,IAAK,CAC9B,IAAMsmR,EAAWr5R,KAAKyoB,IAAIg9J,EAAI1yK,GAAGpS,IAC7B04R,EAAWD,IACbA,EAAQC,EACRF,EAASpmR,GAIb,GAAc,IAAVqmR,EACF,OAAO,KAIT,IAAMp2G,EAAMyC,EAAI0zG,GAChB1zG,EAAI0zG,GAAU1zG,EAAI9kL,GAClB8kL,EAAI9kL,GAAKqiL,EAGT,IAAK,IAAIjtK,EAAIpV,EAAI,EAAGoV,EAAI1C,EAAG0C,IAEzB,IADA,IAAMqkK,GAAQqL,EAAI1vK,GAAGpV,GAAK8kL,EAAI9kL,GAAGA,GACxB2V,EAAI3V,EAAG2V,EAAIjD,EAAI,EAAGiD,IACrB3V,GAAK2V,EACPmvK,EAAI1vK,GAAGO,GAAK,EAEZmvK,EAAI1vK,GAAGO,IAAM8jK,EAAOqL,EAAI9kL,GAAG2V,GAQnC,IADA,IAAM8V,EAAI,IAAI7sB,MAAM8T,GACXmM,EAAInM,EAAI,EAAGmM,GAAK,EAAGA,IAAK,CAC/B4M,EAAE5M,GAAKimK,EAAIjmK,GAAGnM,GAAKoyK,EAAIjmK,GAAGA,GAC1B,IAAK,IAAIokC,EAAIpkC,EAAI,EAAGokC,GAAK,EAAGA,IAC1B6hI,EAAI7hI,GAAGvwC,IAAMoyK,EAAI7hI,GAAGpkC,GAAK4M,EAAE5M,GAG/B,OAAO4M,EsM2LektQ,CANI,CACtB,CANFl1I,GAAM40I,EACN30I,GAAM40I,EAKK,EAAG,EAAGxB,EAAKqB,GACpB,CALFnxG,GAAMqxG,EACNpxG,GAAMqxG,EAIK,EAAG,EAAGtB,EAAKmB,GACpB,CAAC,EAAG,EAAG10I,EAAIC,EAAIqzI,EAAKqB,GACpB,CAAC,EAAG,EAAGpxG,EAAIC,EAAIgwG,EAAKmB,KAGtB,GAAKG,EAAL,CAOA,GAHAnoN,EAAQi/B,OACRj/B,EAAQ0sD,YAvRZ,WACE,QAAiC56H,IAA7Bu0R,GAAwC,CAC1C,IAAMzlN,EAAMvmE,SAASC,cAAc,UAAU2lE,WAAW,MACxDW,EAAIR,yBAA2B,UAC/BQ,EAAIP,UAAY,wBAChBomN,GAAiB7lN,EAAK,EAAG,EAAG,EAAG,GAC/B6lN,GAAiB7lN,EAAK,EAAG,EAAG,EAAG,GAC/B,IAAM/uE,EAAO+uE,EAAIV,aAAa,EAAG,EAAG,EAAG,GAAGruE,KAC1Cw0R,GACES,GAA8Bj1R,EAAM,IACpCi1R,GAA8Bj1R,EAAM,IACpCi1R,GAA8Bj1R,EAAM,GAGxC,OAAOw0R,GA2QDmC,KAAgC59D,EAAiB,CAEnD5qJ,EAAQg3C,OAAO0vK,EAAIC,GAKnB,IAHA,IACM8B,EAAKV,EAAKrB,EACVgC,EAAKV,EAAKrB,EACPtoQ,EAAO,EAAGA,EAHL,EAGmBA,IAE/B2hD,EAAQ8sD,OACN45J,EAAKY,GAAajpQ,EAAO,GAAKoqQ,EANpB,GAOV9B,EAAKW,EAAYjpQ,EAAOqqQ,EAAM,IAGpBhlE,GAARrlM,GACF2hD,EAAQ8sD,OACN45J,EAAKY,GAAajpQ,EAAO,GAAKoqQ,EAZtB,GAaR9B,EAAKW,GAAajpQ,EAAO,GAAKqqQ,EAAM,IAK1C1oN,EAAQ8sD,OAAO85J,EAAIC,QAEnB7mN,EAAQg3C,OAAO0vK,EAAIC,GACnB3mN,EAAQ8sD,OAAOi7J,EAAIC,GACnBhoN,EAAQ8sD,OAAO85J,EAAIC,GAGrB7mN,EAAQh9D,OAERg9D,EAAQ0mE,UACNyhJ,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,GACZJ,EACAC,GAGFhoN,EAAQkD,UACNqkN,EAAiB,GAAKU,EACtBV,EAAiB,GAAKW,GAGxBloN,EAAQ/nC,MACNmuK,EAAmBgH,GAClBhH,EAAmBgH,GAGtBptI,EAAQa,UAAU6mN,EAAc38N,OAAQ,EAAG,GAC3CiV,EAAQqoH,cAGNg/F,IACFrnN,EAAQi/B,OAERj/B,EAAQI,yBAA2B,cACnCJ,EAAQ2sD,YAAc,QACtB3sD,EAAQq8K,UAAY,EAEpB8qC,EAAcf,eAAenxR,SAAQ,SAAU4vR,EAAUj1R,EAAGoF,GAC1D,IAAMmG,EAAS0pR,EAAS1pR,OAClB4sR,GAAM5sR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EACzC2hF,IAAO7sR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EAC1CqgF,GAAMvrR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EACzCsgF,IAAOxrR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EAC1CugF,GAAMzrR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EACzCwgF,IAAO1rR,EAAO,GAAG,GAAK2sR,EAAc,IAAMzhF,EAEhDrmI,EAAQ0sD,YACR1sD,EAAQg3C,OAAO0vK,EAAIC,GACnB3mN,EAAQ8sD,OAAOi7J,EAAIC,GACnBhoN,EAAQ8sD,OAAO85J,EAAIC,GACnB7mN,EAAQy8K,YACRz8K,EAAQ/8D,YAGV+8D,EAAQqoH,WAEHroH,EAAQjV,O,+dCtZjB,eAgBE,WACEmsI,EACAyxF,EACAzF,EACA0F,EACA7vB,EACA8vB,EACAz7E,EACAo9D,EACAse,EACAC,EACA1B,EACAz8D,GAZF,MAcE,YAAMmuC,EAAWtoE,GAAgB,CAAC9+I,cAAei5K,KAAiB,KAMlE,EAAKo+D,kBAAmCl3R,IAApBu1R,GAAgCA,EAMpD,EAAKl6E,YAAcC,EAMnB,EAAK67E,QAAUze,EAMf,EAAKnzB,QAAU,KAMf,EAAK6xC,gBAAkBP,EAMvB,EAAKQ,gBAAkBP,EAMvB,EAAKQ,kBAAoBP,GAAsC9vB,EAM/D,EAAKswB,aAAe,GAMpB,EAAKC,qBAAuB,KAM5B,EAAKC,SAAW,EAEhB,IAAMpG,EAAeyF,EAAeY,mBAClC,EAAKJ,mBAEDK,EAAkB,EAAKN,gBAAgB10Q,YACzC2uQ,EAAkB,EAAK8F,gBAAgBz0Q,YAErCi1Q,EAAsBD,EACxBnyG,GAAgB6rG,EAAcsG,GAC9BtG,EAEJ,GAAqC,IAAjC9kR,GAAQqrR,G,OAGV,EAAKnnR,MAAQkuL,G,EAIf,IAAMk5F,EAAmBzyF,EAAWziL,YAChCk1Q,IAIAvG,EAHGA,EAGe9rG,GAAgB8rG,EAAiBuG,GAFjCA,GAMtB,IAAMtjF,EAAmBuiF,EAAez4Q,cACtC,EAAKi5Q,kBAAkB,IAGnBhjF,EDKH,SACLlP,EACAgsF,EACAC,EACA98E,GAEA,IAAMF,EAAev3M,GAAUu0R,GAC3B/8E,EAAmB2gF,GACrB7vF,EACAgsF,EACA/8E,EACAE,GAeF,QAZK/4C,SAAS84C,IAAqBA,GAAoB,IACrD/vB,GAAc8sG,GAAc,SAAU1sG,GAOpC,OANA2vB,EAAmB2gF,GACjB7vF,EACAgsF,EACAzsG,EACA4vB,GAEK/4C,SAAS84C,IAAqBA,EAAmB,KAIrDA,EC/BoBwjF,CACvB1yF,EACAgsF,EACAwG,EACArjF,GAGF,IAAK/4C,SAAS84C,IAAqBA,GAAoB,E,OAGrD,EAAK7jM,MAAQkuL,G,EAIf,IAAMo5F,OACmB/3R,IAAvBi3R,EAAmCA,EC7JV,GD4K3B,GATA,EAAKe,eAAiB,IAAI,GACxB5yF,EACAgsF,EACAwG,EACAtG,EACAh9E,EAAmByjF,EACnBxjF,GAGgD,IAA9C,EAAKyjF,eAAe1D,eAAer1R,O,OAErC,EAAKwR,MAAQkuL,G,EAIf,EAAK84F,SAAWZ,EAAeoB,kBAAkB3jF,GACjD,IAAI/O,EAAe,EAAKyyF,eAAe3D,wBAmBvC,GAjBI/C,IACElsF,EAAW/e,YACbkf,EAAa,GAAKhf,GAChBgf,EAAa,GACb+rF,EAAgB,GAChBA,EAAgB,IAElB/rF,EAAa,GAAKhf,GAChBgf,EAAa,GACb+rF,EAAgB,GAChBA,EAAgB,KAGlB/rF,EAAe/f,GAAgB+f,EAAc+rF,IAI5C/kR,GAAQg5L,GAEN,CAML,IALA,IAAM2yF,EAAcrB,EAAesB,0BACjC5yF,EACA,EAAKkyF,UAGEW,EAAOF,EAAYz0G,KAAM20G,GAAQF,EAAYv0G,KAAMy0G,IAC1D,IAAK,IAAIC,EAAOH,EAAYx0G,KAAM20G,GAAQH,EAAYt0G,KAAMy0G,IAAQ,CAClE,IAAMnvQ,EAAO8tQ,EAAgB,EAAKS,SAAUW,EAAMC,EAAM/8E,GACpDpyL,GACF,EAAKquQ,aAAavzR,KAAKklB,GAKI,IAA7B,EAAKquQ,aAAat4R,SACpB,EAAKwR,MAAQkuL,SAjBf,EAAKluL,MAAQkuL,G,SA6JnB,OAhVyB,QA6MvB,YAAA71K,SAAA,WACE,OAAOltB,KAAK2pP,SAMd,YAAA+yC,WAAA,WACE,IAAMhD,EAAU,GAahB,GAZA15R,KAAK27R,aAAap0R,QAChB,SAAU+lB,EAAMprB,EAAGoF,GACbgmB,GAAQA,EAAK4lK,YAAc6P,IAC7B22F,EAAQtxR,KAAK,CACXkT,OAAQtb,KAAKw7R,gBAAgBM,mBAAmBxuQ,EAAK+9O,WACrDt+O,MAAOO,EAAKJ,cAGhBgzB,KAAKlgD,OAETA,KAAK27R,aAAat4R,OAAS,EAEJ,IAAnBq2R,EAAQr2R,OACVrD,KAAK6U,MAAQkuL,OACR,CACL,IAAMr1K,EAAI1tB,KAAK07R,kBAAkB,GAC3B7mQ,EAAO70B,KAAKy7R,gBAAgBkB,YAAYjvQ,GACxC4E,EAAwB,iBAATuC,EAAoBA,EAAOA,EAAK,GAC/CtC,EAAyB,iBAATsC,EAAoBA,EAAOA,EAAK,GAChD8jL,EAAmB34M,KAAKy7R,gBAAgBh5Q,cAAciL,GACtDgrL,EAAmB14M,KAAKw7R,gBAAgB/4Q,cAC5CziB,KAAK67R,UAGDpG,EAAez1R,KAAKy7R,gBAAgBK,mBACxC97R,KAAK07R,mBAGP17R,KAAK2pP,QAAU9sM,GACbvqB,EACAC,EACAvyB,KAAKy/M,YACL/G,EACA14M,KAAKw7R,gBAAgBz0Q,YACrB4xL,EACA88E,EACAz1R,KAAKo8R,eACL1C,EACA15R,KAAKu7R,QACLv7R,KAAKs7R,aACLt7R,KAAKikD,aAGPjkD,KAAK6U,MAAQkuL,GAEf/iM,KAAK2zF,WAMP,YAAAyiC,KAAA,WACE,GAAIp2H,KAAK6U,OAASkuL,GAAgB,CAChC/iM,KAAK6U,MAAQkuL,GACb/iM,KAAK2zF,UAEL,IAAI,EAAa,EAEjB3zF,KAAK47R,qBAAuB,GAC5B57R,KAAK27R,aAAap0R,QAChB,SAAU+lB,EAAMprB,EAAGoF,GACjB,IAAMuN,EAAQyY,EAAK4lK,WACnB,GAAIr+K,GAASkuL,IAAkBluL,GAASkuL,GAAmB,CACzD,IAEA,IAAM,EAAkBxU,GACtBjhK,EACAyhK,GAAUhyC,QACV,SAAUh+I,GACR,IAAM8V,EAAQyY,EAAK4lK,WAEjBr+K,GAASkuL,IACTluL,GAASkuL,IACTluL,GAASkuL,KAETnU,GAAc,GAEK,MADnB,IAEE5uL,KAAK48R,mBACL58R,KAAK08R,iBAIX18R,MAEFA,KAAK47R,qBAAqBxzR,KAAK,KAEjC83C,KAAKlgD,OAGU,IAAf,EACFinD,WAAWjnD,KAAK08R,WAAWx8O,KAAKlgD,MAAO,GAEvCA,KAAK27R,aAAap0R,SAAQ,SAAU+lB,EAAMprB,EAAGoF,GAC7BgmB,EAAK4lK,YACN6P,IACXz1K,EAAK8oG,YAUf,YAAAwmK,iBAAA,WACE58R,KAAK47R,qBAAqBr0R,QAAQqnL,IAClC5uL,KAAK47R,qBAAuB,MAM9B,YAAA55N,QAAA,WACMhiE,KAAK2pP,UACPjyD,GAAc13L,KAAK2pP,QAAQp3K,WAAW,OACtC,QAAgBvyE,KAAK2pP,SACrB3pP,KAAK2pP,QAAU,MAEjB,YAAM3nL,QAAO,YAEjB,EAhVA,CAAyB,IAkVzB,YEvWA,kBAOE,WAAY6lH,EAAME,EAAMD,EAAME,GAI5BhoL,KAAK6nL,KAAOA,EAKZ7nL,KAAK+nL,KAAOA,EAKZ/nL,KAAK8nL,KAAOA,EAKZ9nL,KAAKgoL,KAAOA,EAiGhB,OA1FE,YAAAnpI,SAAA,SAASwsN,GACP,OAAOrrQ,KAAKwnL,WAAW6jF,EAAU,GAAIA,EAAU,KAOjD,YAAAwxB,kBAAA,SAAkBtxB,GAChB,OACEvrQ,KAAK6nL,MAAQ0jF,EAAU1jF,MACvB0jF,EAAUxjF,MAAQ/nL,KAAK+nL,MACvB/nL,KAAK8nL,MAAQyjF,EAAUzjF,MACvByjF,EAAUvjF,MAAQhoL,KAAKgoL,MAS3B,YAAAR,WAAA,SAAW75J,EAAGC,GACZ,OAAO5tB,KAAK6nL,MAAQl6J,GAAKA,GAAK3tB,KAAK+nL,MAAQ/nL,KAAK8nL,MAAQl6J,GAAKA,GAAK5tB,KAAKgoL,MAOzE,YAAAxlI,OAAA,SAAO+oN,GACL,OACEvrQ,KAAK6nL,MAAQ0jF,EAAU1jF,MACvB7nL,KAAK8nL,MAAQyjF,EAAUzjF,MACvB9nL,KAAK+nL,MAAQwjF,EAAUxjF,MACvB/nL,KAAKgoL,MAAQujF,EAAUvjF,MAO3B,YAAAviJ,OAAA,SAAO8lO,GACDA,EAAU1jF,KAAO7nL,KAAK6nL,OACxB7nL,KAAK6nL,KAAO0jF,EAAU1jF,MAEpB0jF,EAAUxjF,KAAO/nL,KAAK+nL,OACxB/nL,KAAK+nL,KAAOwjF,EAAUxjF,MAEpBwjF,EAAUzjF,KAAO9nL,KAAK8nL,OACxB9nL,KAAK8nL,KAAOyjF,EAAUzjF,MAEpByjF,EAAUvjF,KAAOhoL,KAAKgoL,OACxBhoL,KAAKgoL,KAAOujF,EAAUvjF,OAO1B,YAAAa,UAAA,WACE,OAAO7oL,KAAKgoL,KAAOhoL,KAAK8nL,KAAO,GAMjC,YAAAw7B,QAAA,WACE,MAAO,CAACtjN,KAAK4oL,WAAY5oL,KAAK6oL,cAMhC,YAAAD,SAAA,WACE,OAAO5oL,KAAK+nL,KAAO/nL,KAAK6nL,KAAO,GAOjC,YAAAzkI,WAAA,SAAWmoN,GACT,OACEvrQ,KAAK6nL,MAAQ0jF,EAAUxjF,MACvB/nL,KAAK+nL,MAAQwjF,EAAU1jF,MACvB7nL,KAAK8nL,MAAQyjF,EAAUvjF,MACvBhoL,KAAKgoL,MAAQujF,EAAUzjF,MAG7B,EA3HA,GAqIO,SAAS,GAAeD,EAAME,EAAMD,EAAME,EAAMujF,GACrD,YAAkBnnQ,IAAdmnQ,GACFA,EAAU1jF,KAAOA,EACjB0jF,EAAUxjF,KAAOA,EACjBwjF,EAAUzjF,KAAOA,EACjByjF,EAAUvjF,KAAOA,EACVujF,GAEA,IAAIuxB,GAAUj1G,EAAME,EAAMD,EAAME,GAI3C,Y,+dClHA,eAIE,WAAY+0G,GAAZ,MACE,YAAMA,IAAU,K,OAMhB,EAAKC,eAAgB,EAMrB,EAAK3iB,gBAAkB,KAMvB,EAAK4iB,mBAML,EAAKC,mBAAqB,KAM1B,EAAKC,iBAML,EAAKC,cAAgB,GAMrB,EAAKC,WAAY,EAMjB,EAAKxvB,U3M2GA,CAAC73M,EAAAA,EAAUA,EAAAA,GAAU,KAAW,K2MrGrC,EAAKsnO,cAAgB,IAAI,GAAU,EAAG,EAAG,EAAG,G,EA+pBhD,OA1tBsC,QAmEpC,YAAAC,eAAA,SAAejwQ,GACb,IAAMyvQ,EAAY/8R,KAAK2f,WACjB69Q,EAAYlwQ,EAAK4lK,WACjBkhG,EAAyB2I,EAAUtI,4BACzC,OACE+I,GAAaz6F,IACby6F,GAAaz6F,IACZy6F,GAAaz6F,KAAoBqxF,GAWtC,YAAAqJ,QAAA,SAAQ/vQ,EAAGC,EAAGC,EAAGylK,GACf,IAAMqsB,EAAarsB,EAAWqsB,WACxBn1B,EAAa8I,EAAWb,UAAUjI,WAClCwyG,EAAY/8R,KAAK2f,WAEnB2N,EADeyvQ,EAAU56Q,YACPs7Q,QAAQ/vQ,EAAGC,EAAGC,EAAG8xL,EAAYn1B,GAanD,OAZIj9J,EAAK4lK,YAAc6P,KAChBg6F,EAAUtI,4BAGJsI,EAAUxI,aAAe,IAElCv0R,KAAKq9R,WAAY,GAHjB/vQ,EAAK3Y,SAASouL,KAMb/iM,KAAKu9R,eAAejwQ,KACvBA,EAAOA,EAAKwnQ,kBAEPxnQ,GAOT,YAAAvpB,QAAA,SAAQqvL,GACN,IAAMC,EAAarzL,KAAKqzL,WACxB,IAAKA,EACH,OAAO,KAGT,IAAM7uL,EAAQxE,KAAK2f,WACb8jE,EAAarzE,EACjBijL,EAAW8B,2BACX/B,EAAMzoL,SAGFkiQ,EAAcroQ,EAAMuiB,YAC1B,GAAI8lP,IACGtlF,EAAmBslF,EAAappL,GACnC,OAAO,KAWX,IAPA,IAAMi8H,EAAarsB,EAAWqsB,WACxBn1B,EAAa8I,EAAWb,UAAUjI,WAClCiI,EAAYa,EAAWb,UACvB73K,EAASnW,EAAMyuL,kBACfkS,EAAWxqL,EAAO+iR,yBAAyBlrG,EAAUjI,YACrDozG,EAAiBhjR,EAAOijR,kBAAkBvqG,EAAWqsB,YAGrDhyL,EAAIy3K,EAASk3F,kBAAkB7pG,EAAUruI,YAC7Cz2B,GAAKy3K,EAAShU,eACZzjK,EACF,CACA,IAAM29O,EAAYlmE,EAAS04F,yBAAyBp6M,EAAY/1D,GAC1DJ,EAAO3S,EAAO8iR,QAClB/vQ,EACA29O,EAAU,GACVA,EAAU,GACV3rD,EACAn1B,GAEF,KAAMj9J,aAAgB,IAAaA,aAAgB,IACjD,OAAO,KAGT,GAAIA,EAAK4lK,aAAe6P,GAAxB,CAIA,IAAM+6F,EAAa34F,EAASmjD,UAAU56N,GAChCqwQ,EAAWt/E,GAAOtZ,EAASw3F,YAAYjvQ,IACvCm2L,EAAiB1e,EAAS1iL,cAAciL,GAExC4rJ,EAAM/3K,KAAKonD,MACfg1O,IACIl6M,EAAW,GAAKq6M,EAAW,IAAMj6E,EACjCwnD,EAAU,GAAK0yB,EAAS,KAGxBzyI,EAAM/pJ,KAAKonD,MACfg1O,IACIG,EAAW,GAAKr6M,EAAW,IAAMogI,EACjCwnD,EAAU,GAAK0yB,EAAS,KAGxBjhB,EAASv7Q,KAAKirC,MAClBmxP,EAAiBhjR,EAAOqjR,uBAAuBxrG,EAAUjI,aAG3D,OAAOvqL,KAAKwyE,aAAallD,EAAKJ,WAAYosJ,EAAMwjG,EAAQxxH,EAAMwxH,IAGhE,OAAO,MAST,YAAA3R,mBAAA,SAAmBC,EAAOzlG,EAAMr4I,GAC9B,QAAIttB,KAAKu9R,eAAejwQ,IACf,YAAM69O,mBAAkB,UAACC,EAAOzlG,EAAMr4I,IAUjD,YAAAkmK,aAAA,SAAaH,GACX,QAASrzL,KAAK2f,WAAWwC,aAS3B,YAAAsxK,YAAA,SAAYJ,EAAY5lL,GACtB,IAAMkiG,EAAa0jF,EAAWQ,iBAAiBR,EAAW8H,YACpD3I,EAAYa,EAAWb,UACvBjI,EAAaiI,EAAUjI,WACvB0zG,EAAiBzrG,EAAUruI,WAC3B+5O,EAAa1rG,EAAU7xL,OACvB0zD,EAAWm+H,EAAUn+H,SACrBqrJ,EAAarsB,EAAWqsB,WAExBq9E,EAAY/8R,KAAK2f,WACjBw+Q,EAAapB,EAAU56Q,YACvBi8Q,EAAiBD,EAAWnvG,cAC5BmW,EAAWg5F,EAAWT,yBAAyBnzG,GAC/C78J,EAAIy3K,EAASk3F,kBAAkB4B,EAAgBE,EAAWE,YAC1Dx6E,EAAiB1e,EAAS1iL,cAAciL,GAE1CpS,EAAS+3K,EAAW/3K,OAClB6oC,EAAakvI,EAAWb,UAAUruI,WAClCw5O,EAAiBQ,EAAWP,kBAAkBl+E,GAE9CptL,EAAQ/wB,KAAKirC,MAAOo8I,GAASttK,GAAU6oC,EAAcu7J,GACrDntL,EAAShxB,KAAKirC,MAAOq8I,GAAUvtK,GAAU6oC,EAAcu7J,GAEvDmtD,EACJl9J,EAAWr0F,QAAU,GAAeq0F,EAAWr0F,OAAQivK,GACrDsiF,IACFvxP,EAASsuK,GACPtuK,EACA,GAAeq0F,EAAWr0F,OAAQivK,KAItC,IAAM1nI,EAAMghK,EAAiBvxL,EAAS,EAAIqrQ,EACpC76O,EAAM+gK,EAAiBtxL,EAAU,EAAIorQ,EACrCW,EAAe,CACnBJ,EAAW,GAAKr7O,EAChBq7O,EAAW,GAAKp7O,EAChBo7O,EAAW,GAAKr7O,EAChBq7O,EAAW,GAAKp7O,GAGZyoN,EAAYpmE,EAASo3F,0BAA0BjhR,EAAQoS,GAKvD6wQ,EAAiB,GACvBA,EAAe7wQ,GAAK,GAEpB,IAAM8wQ,EAAkBx+R,KAAKsrQ,uBAC3B6yB,EACA5zG,EACAg0G,GAGI1wB,EAAY7tQ,KAAK6tQ,UACjB4wB,EAAez+R,KAAKs9R,cAC1Bt9R,KAAKq9R,WAAY,EASjB,IARA,IAAMz5M,EAAWvvB,EACb40H,GACEuJ,EAAU7xL,OACVwjD,EACAkQ,EACAg/H,EAAWx+J,WAEbzwB,EACKupB,EAAI49O,EAAU1jF,KAAMl6J,GAAK49O,EAAUxjF,OAAQp6J,EAClD,IAAK,IAAIC,EAAI29O,EAAUzjF,KAAMl6J,GAAK29O,EAAUvjF,OAAQp6J,EAClD,IACEymC,GACC8wI,EAASu5F,4BAA4B,CAAChxQ,EAAGC,EAAGC,GAAIg2D,GAFnD,CAMA,IAAMt2D,EAAOttB,KAAKy9R,QAAQ/vQ,EAAGC,EAAGC,EAAGylK,GACnC,GAAIrzL,KAAKu9R,eAAejwQ,GAAO,CAC7B,IAAMlZ,EAAMyvK,EAAO7jL,MACnB,GAAIstB,EAAK4lK,YAAc6P,GACrBw7F,EAAe7wQ,GAAGJ,EAAK+9O,UAAUpoP,YAAcqK,GAC3C4nQ,GAAe5nQ,EAAK4nQ,aAAa9gR,KACM,IAAvBu7F,EAAWn8F,UAE7B8Z,EAAK6nQ,cAAc/gR,GACnB8gR,IAAe,GAGdl1R,KAAKq9R,YACLnI,KAAsD,IAAtCl1R,KAAKo9R,cAAcp0R,QAAQskB,KAE5CttB,KAAKq9R,WAAY,GAGrB,GAA4C,IAAxC/vQ,EAAK2nQ,SAAS7gR,EAAKi/K,EAAW/mE,MAEhC,SAIJ,IAAMqyK,EAAiBx5F,EAASy5F,2BAC9BtxQ,EAAK+9O,UACLozB,EACA5wB,GAGEgxB,GAAU,EACVF,IACFE,EAAUL,EAAgB9wQ,EAAI,EAAGixQ,IAE9BE,GACH15F,EAAS25F,gCACPxxQ,EAAK+9O,UACLmzB,EACAC,EACA5wB,GAMR,IAAMkxB,EACFl7E,EAAiBo6E,EAAkBv+E,EAAci+E,EAGrDn3G,EACExmL,KAAK+rQ,eACL14E,EAAWx+J,KAAK,GAAK,EACrBw+J,EAAWx+J,KAAK,GAAK,EACrB,EAAI6qL,EACJ,EAAIA,EACJrrJ,GACC/hC,EAAQ,GACRC,EAAS,GAGZ,IAAMu+O,EAAkB,EAAkB9wQ,KAAK+rQ,gBAE/C/rQ,KAAKksQ,aAAaz+P,EAAQqjQ,EAAiB9wQ,KAAK2wL,cAAc0C,IAC9D,IAAM/gH,EAAUtyE,KAAKsyE,QACfjV,EAASiV,EAAQjV,OAEvB0pH,EAAY/mL,KAAKy2L,sBAAuBz2L,KAAK+rQ,gBAG7CvlF,EACExmL,KAAK8rQ,cACLx5O,EAAQ,EACRC,EAAS,EACTwsQ,EACAA,EACA,GACCzsQ,EAAQ,GACRC,EAAS,GAGR8qC,EAAO/qC,OAASA,GAAS+qC,EAAO9qC,QAAUA,GAC5C8qC,EAAO/qC,MAAQA,EACf+qC,EAAO9qC,OAASA,GACNvyB,KAAKgsQ,iBACf15L,EAAQQ,UAAU,EAAG,EAAGxgD,EAAOC,GAG7Bs6O,GACF7sQ,KAAKssQ,cAAch6L,EAAS+gH,EAAYw5E,GAGrCsxB,EAAWvf,kBACd,GAAOtsM,EAASsmN,IAGlB54R,KAAKysQ,UAAUn6L,EAAS+gH,GAExBrzL,KAAKo9R,cAAc/5R,OAAS,EAE5B,IAGI27R,EAAOC,EAAQC,EAHfnqB,EAAK51Q,OAAOD,KAAKq/R,GAAgBjgS,IAAIqpB,QACzCotP,EAAG5qP,KAAK+5J,GAIiB,IAAvBv0E,EAAWn8F,SACTxT,KAAKgsQ,kBACLmyB,EAAWgB,UAAU9rG,EAAWb,UAAUjI,aAI5Cy0G,EAAQ,GACRC,EAAS,IAHTlqB,EAAKA,EAAG7kP,UAKV,IAAK,IAAIhuB,EAAI6yQ,EAAG1xQ,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CACvC,IAAMk9R,EAAWrqB,EAAG7yQ,GACdm9R,EAAuBlB,EAAWmB,iBACtCF,EACA1/E,EACAn1B,GAGI5nK,EADoBwiL,EAAS1iL,cAAc28Q,GACRv7E,EACnC,GAAKw7E,EAAqB,GAAK18Q,EAAeo8Q,EAC9C,GAAKM,EAAqB,GAAK18Q,EAAeo8Q,EAC9CQ,GAAkBp6F,EAAS04F,yBAC/B,GAAWS,GACXc,GAEII,GAAmBr6F,EAAS22F,mBAAmByD,IAC/C,GAASnvR,EAAepQ,KAAK8rQ,cAAe,CAC/C6xB,GAAkB6B,GAAiB,GAAKlB,EAAa,IACpDz6E,EACD85E,GAAkBW,EAAa,GAAKkB,GAAiB,IACpD37E,IAEE47E,GACJ9B,EAAiBQ,EAAWH,uBAAuBzzG,GAC/Cm1G,GAAcnB,EAAea,GACnC,IAAK,IAAMO,MAAgBD,GAAa,CACtC,IAgBMxK,GAbA7pB,IAHA/9O,EACJoyQ,GAAYC,KAESt0B,UAGjBu0B,GAASL,GAAgB,GAAKl0B,GAAU,GACxCw0B,GAAQt+R,KAAKirC,MAAM,GAAO,IAAMozP,GAAS,GAAK,IAC9CE,GAASP,GAAgB,GAAKl0B,GAAU,GACxC00B,GAAQx+R,KAAKirC,MAAM,GAAO,IAAMszP,GAAS,GAAK,IAG9Cj/H,GAAIg/H,IAFJlyQ,EAAIpsB,KAAKirC,MAAM,GAAO,GAAKozP,GAAS,KAGpC52O,GAAI+2O,IAFJnyQ,EAAIrsB,KAAKirC,MAAM,GAAO,GAAKszP,GAAS,KAGpClL,GAAalnQ,IAAM0xQ,EAIrBY,IAAe,EACnB,KAHM9K,GACJN,IAA+D,IAAjDtnQ,EAAK2nQ,SAASpxG,EAAO7jL,MAAOqzL,EAAW/mE,OAGrD,GAAI0yK,EAAO,CAETE,EAAc,CAACvxQ,EAAGC,EAAGD,EAAIkzI,GAAGjzI,EAAGD,EAAIkzI,GAAGjzI,EAAIo7B,GAAGr7B,EAAGC,EAAIo7B,IACpD,IAAK,IAAI,GAAI,EAAG9kC,GAAK86Q,EAAM37R,OAAQ,GAAI6gB,KAAM,GAC3C,GAAIwJ,IAAM0xQ,GAAYA,EAAWH,EAAO,IAAI,CAC1C,IAAM3pR,GAAO0pR,EAAM,IAEjB57O,GACE,CAACz1B,EAAGC,EAAGD,EAAIkzI,GAAGjzI,EAAIo7B,IAClB,CAAC1zC,GAAK,GAAIA,GAAK,GAAIA,GAAK,GAAIA,GAAK,OAG9B0qR,KACH1tN,EAAQi/B,OACRyuL,IAAe,GAEjB1tN,EAAQ0sD,YAER1sD,EAAQg3C,OAAO41K,EAAY,GAAIA,EAAY,IAC3C5sN,EAAQ8sD,OAAO8/J,EAAY,GAAIA,EAAY,IAC3C5sN,EAAQ8sD,OAAO8/J,EAAY,GAAIA,EAAY,IAC3C5sN,EAAQ8sD,OAAO8/J,EAAY,GAAIA,EAAY,IAE3C5sN,EAAQg3C,OAAOh0G,GAAK,GAAIA,GAAK,IAC7Bg9D,EAAQ8sD,OAAO9pH,GAAK,GAAIA,GAAK,IAC7Bg9D,EAAQ8sD,OAAO9pH,GAAK,GAAIA,GAAK,IAC7Bg9D,EAAQ8sD,OAAO9pH,GAAK,GAAIA,GAAK,IAC7Bg9D,EAAQh9D,QAId0pR,EAAM52R,KAAK82R,GACXD,EAAO72R,KAAKg3R,QAEZ9sN,EAAQQ,UAAUnlD,EAAGC,EAAGizI,GAAG73G,IAG/BhpD,KAAKigS,cACH3yQ,EACA+lK,EACA1lK,EACAC,EACAizI,GACA73G,GACAy2O,GACA7K,IAEEoK,IAAU9J,IACR8K,IACF1tN,EAAQqoH,UAEV36L,KAAKo9R,cAAc92R,QAAQgnB,IAE3BttB,KAAKo9R,cAAch1R,KAAKklB,GAE1BttB,KAAKkgS,gBAAgB7sG,EAAWiyB,UAAW64E,EAAY7wQ,IAmC3D,OA/BAttB,KAAKm9R,iBAAmBiB,EACxBp+R,KAAK6rQ,mBAAqBhoD,EAC1B7jN,KAAKg9R,eACFh9R,KAAKq6Q,kBAAoB,GAAOr6Q,KAAKq6Q,gBAAiBikB,GACzDt+R,KAAKq6Q,gBAAkBikB,EACvBt+R,KAAKi9R,mBAAqBv9E,EAC1B1/M,KAAKk9R,mBAAqB3yG,EAE1BvqL,KAAKmgS,kBACH9sG,EACA8qG,EACAh5F,EACAua,EACAn1B,EACAjvK,EACAoS,EACAqvQ,EAAUxI,cAEZv0R,KAAKogS,oBAAoB/sG,EAAY8qG,GAErCn+R,KAAK0sQ,WAAWp6L,EAAS+gH,GAErB1jF,EAAWr0F,QACbg3D,EAAQqoH,UAEV,GAAOroH,EAASwmN,IAEZhoB,IAAoBzzM,EAAO13D,MAAMqzI,YACnC37E,EAAO13D,MAAMqzI,UAAY83H,GAGpB9wQ,KAAKi0D,WAad,YAAAgsO,cAAA,SAAc3yQ,EAAM+lK,EAAY1lK,EAAGC,EAAGizI,EAAG73G,EAAG8zN,EAAQ8X,GAClD,IAAM7nQ,EAAQ/sB,KAAKqgS,aAAa/yQ,GAChC,GAAKP,EAAL,CAGA,IAAM3Y,EAAMyvK,EAAO7jL,MACb2vG,EAAa0jF,EAAWQ,iBAAiBR,EAAW8H,YACpD3vG,EACJmkB,EAAWn8F,SACVohR,EAAatnQ,EAAK2nQ,SAAS7gR,EAAKi/K,EAAW/mE,MAAQ,GAChDg0K,EAAe90M,IAAUxrF,KAAKsyE,QAAQktD,YACxC8gK,IACFtgS,KAAKsyE,QAAQi/B,OACbvxG,KAAKsyE,QAAQktD,YAAch0C,GAE7BxrF,KAAKsyE,QAAQa,UACXpmD,EACA+vP,EACAA,EACA/vP,EAAMuF,MAAQ,EAAIwqP,EAClB/vP,EAAMwF,OAAS,EAAIuqP,EACnBnvP,EACAC,EACAizI,EACA73G,GAGEs3O,GACFtgS,KAAKsyE,QAAQqoH,UAEXnvG,IAAUmkB,EAAWn8F,QACvB6/K,EAAW9oI,SAAU,EACZqqO,GACTtnQ,EAAK6nQ,cAAc/gR,KAOvB,YAAA8Y,SAAA,WACE,IAAMolD,EAAUtyE,KAAKsyE,QACrB,OAAOA,EAAUA,EAAQjV,OAAS,MASpC,YAAAgjO,aAAA,SAAa/yQ,GACX,OAAOA,EAAKJ,YAQd,YAAAkzQ,oBAAA,SAAoB/sG,EAAY8qG,GAC9B,GAAIA,EAAWlyG,iBAAkB,CAM/B,IAAMs0G,EAAqB,SAAUpC,EAAY7/R,EAAK+0L,GACpD,IAAMswB,EAAgB9/B,EAAOs6G,GACzBx6E,KAAiBtwB,EAAWiyB,WAC9B64E,EAAWqC,YACTntG,EAAWb,UAAUjI,WACrB8I,EAAWiyB,UAAU3B,KAGzBzjK,KAAK,KAAMi+O,GAEb9qG,EAAW+C,oBAAoBhuL,KACqC,KAaxE,YAAA83R,gBAAA,SAAgB56E,EAAW64E,EAAY7wQ,GAErC,IAAMq2L,EAAgB9/B,EAAOs6G,GACvBx6E,KAAiB2B,IACrBA,EAAU3B,GAAiB,IAE7B2B,EAAU3B,GAAer2L,EAAK++J,WAAY,GAqB5C,YAAA8zG,kBAAA,SACE9sG,EACA8qG,EACAh5F,EACAua,EACAn1B,EACAjvK,EACA8jR,EACAjL,EACAsM,GAEA,IAAM98E,EAAgB9/B,EAAOs6G,GACvBx6E,KAAiBtwB,EAAWywB,cAChCzwB,EAAWywB,YAAYH,GAAiB,IAE1C,IAaIr2L,EAAMi+O,EAAW1nD,EAAgBl2L,EAAGC,EAAGF,EAbrCo2L,EAAczwB,EAAWywB,YAAYH,GACrCU,EAAYhxB,EAAWgxB,UACvB9zB,EAAU4U,EAAShU,aACnB98H,EAAWg/H,EAAWb,UAAUn+H,SAChCuvB,EAAWvvB,EACb40H,GACEoK,EAAWb,UAAU7xL,OACrB0yL,EAAWb,UAAUruI,WACrBkQ,EACAg/H,EAAWx+J,WAEbzwB,EACAipI,EAAY,EAEhB,IAAK3/G,EAAI6iK,EAAS7iK,GAAK0xQ,IAAY1xQ,EAGjC,IAFA69O,EAAYpmE,EAASo3F,0BAA0BjhR,EAAQoS,EAAG69O,GAC1D1nD,EAAiB1e,EAAS1iL,cAAciL,GACnCC,EAAI49O,EAAU1jF,KAAMl6J,GAAK49O,EAAUxjF,OAAQp6J,EAC9C,IAAKC,EAAI29O,EAAUzjF,KAAMl6J,GAAK29O,EAAUvjF,OAAQp6J,EAE5CymC,IACC8wI,EAASu5F,4BAA4B,CAAChxQ,EAAGC,EAAGC,GAAIg2D,KAI/Cw7M,EAAW1xQ,GAAKymQ,KAChB9mJ,GACF//G,EAAO6wQ,EAAWV,QAAQ/vQ,EAAGC,EAAGC,EAAG8xL,EAAYn1B,IACtC2I,YAAc6P,KACrB+gB,EAAYx2L,EAAK++J,WAAY,EACxBg4B,EAAUviB,YAAYx0K,EAAK++J,WAC9Bg4B,EAAUhjB,QAAQ,CAChB/zK,EACAq2L,EACAxe,EAASu7F,mBAAmBpzQ,EAAK+9O,WACjCxnD,UAImBz/M,IAArBq8R,GACFA,EAAiBnzQ,IAGnB6wQ,EAAWwC,QAAQjzQ,EAAGC,EAAGC,EAAG28J,IAKpC4zG,EAAWyC,gBAAgBvzJ,EAAWk9C,IAE1C,EA1tBA,CAAsC,IA4tBtC,Y,+dCpuBA,SAbA,YAIE,WAAYmR,G,OACV,YAAMA,IAAY,KAMtB,OAXwB,QAQtB,YAAA3H,eAAA,WACE,OAAO,IAAI,GAAwB/zL,OAEvC,EAXA,CAAwB6gS,I,+dCsCxB,SAVA,YAIE,WAAYnlG,GACV,IAAM/7L,EAAU+7L,GAA4B,G,OAC5C,YAAM/7L,IAAQ,KAElB,OAR6B,QAQ7B,EARA,CAA6B,I,+dCf7B,eAIE,WAAYmhS,GAAZ,MACE,YAAMA,IAAW,K,OAMjB,EAAK53C,OAAS,K,EAsOlB,OAjPuC,QAiBrC,YAAAh8N,SAAA,WACE,OAAQltB,KAAKkpP,OAAgBlpP,KAAKkpP,OAAOh8N,WAAnB,MAQxB,YAAAsmK,aAAA,SAAaH,GACX,IAAM1jF,EAAa0jF,EAAWQ,iBAAiBR,EAAW8H,YACpDukB,EAAarsB,EAAWqsB,WACxBltB,EAAYa,EAAWb,UACvByrG,EAAiBzrG,EAAUruI,WAE3B48O,EAAc/gS,KAAK2f,WAAWwC,YAE9BmiM,EAAQjxB,EAAWkxB,UAErBq4D,EAAiBvpF,EAAW/3K,OAQhC,QAP0BlX,IAAtBurG,EAAWr0F,SACbshQ,EAAiBhzF,GACfgzF,EACA,GAAejtK,EAAWr0F,OAAQk3K,EAAUjI,eAK7C+5B,EAAMrL,MACNqL,EAAMrL,MACN,GAAQ2jE,GAET,GAAImkB,EAAa,CACf,IAAIx2G,EAAaiI,EAAUjI,WAOrBx9J,EAAQg0Q,EAAY7zQ,SACxB0vP,EACAqhB,EACAv+E,EACAn1B,GAEEx9J,IACE/sB,KAAK0rQ,UAAU3+O,GACjB/sB,KAAKkpP,OAASn8N,EACLA,EAAMmmK,aAAe81D,KAC9BhpP,KAAKkpP,OAAS,YAIlBlpP,KAAKkpP,OAAS,KAIlB,QAASlpP,KAAKkpP,QAOhB,YAAAnlP,QAAA,SAAQqvL,GACN,IAAMC,EAAarzL,KAAKqzL,WACxB,IAAKA,EACH,OAAO,KAGT,IAAM7uL,EAAQxE,KAAK2f,WACb8jE,EAAarzE,EACjBijL,EAAW8B,2BACX/B,EAAMzoL,SAGFkiQ,EAAcroQ,EAAMuiB,YAC1B,GAAI8lP,IACGtlF,EAAmBslF,EAAappL,GACnC,OAAO,KAIX,IAAMu9M,EAAchhS,KAAKkpP,OAAOniO,YAC1Bpb,EAAM3L,KAAKkpP,OAAOh8N,WAElB+zQ,EAAgBr4G,GAASo4G,GACzB1nH,EAAM/3K,KAAKonD,MACfh9C,EAAI2mB,QAAUmxD,EAAW,GAAKu9M,EAAY,IAAMC,IAElD,GAAI3nH,EAAM,GAAKA,GAAO3tK,EAAI2mB,MACxB,OAAO,KAGT,IAAM4uQ,EAAiBr4G,GAAUm4G,GAC3B11I,EAAM/pJ,KAAKonD,MACfh9C,EAAI4mB,SAAWyuQ,EAAY,GAAKv9M,EAAW,IAAMy9M,IAEnD,OAAI51I,EAAM,GAAKA,GAAO3/I,EAAI4mB,OACjB,KAGFvyB,KAAKwyE,aAAa7mE,EAAK2tK,EAAKhuB,IASrC,YAAAmoC,YAAA,SAAYJ,EAAY5lL,GACtB,IAAMsf,EAAQ/sB,KAAKkpP,OACb83C,EAAcj0Q,EAAMhG,YACpBo6Q,EAAkBp0Q,EAAMtK,gBACxB2+Q,EAAkBr0Q,EAAMo7N,gBACxBx4I,EAAa0jF,EAAWQ,iBAAiBR,EAAW8H,YACpDukB,EAAarsB,EAAWqsB,WACxBltB,EAAYa,EAAWb,UACvB0rG,EAAa1rG,EAAU7xL,OAEvB4pC,EACHm1K,EAAayhF,GAFO3uG,EAAUruI,WAEoBi9O,GAE/C9lR,EAAS+3K,EAAW/3K,OACpB6oC,EAAaquI,EAAUruI,WACvBkQ,EAAWm+H,EAAUn+H,SAErB/hC,EAAQ/wB,KAAKirC,MAAOo8I,GAASttK,GAAU6oC,EAAcu7J,GACrDntL,EAAShxB,KAAKirC,MAAOq8I,GAAUvtK,GAAU6oC,EAAcu7J,GAG7Dl5B,EACExmL,KAAK+rQ,eACL14E,EAAWx+J,KAAK,GAAK,EACrBw+J,EAAWx+J,KAAK,GAAK,EACrB,EAAI6qL,EACJ,EAAIA,EACJrrJ,GACC/hC,EAAQ,GACRC,EAAS,GAEZw0J,EAAY/mL,KAAKy2L,sBAAuBz2L,KAAK+rQ,gBAE7C,IAAM+E,EAAkB,EAAkB9wQ,KAAK+rQ,gBAE/C/rQ,KAAKksQ,aAAaz+P,EAAQqjQ,EAAiB9wQ,KAAK2wL,cAAc0C,IAE9D,IAAM/gH,EAAUtyE,KAAKsyE,QACfjV,EAASiV,EAAQjV,OAEnBA,EAAO/qC,OAASA,GAAS+qC,EAAO9qC,QAAUA,GAC5C8qC,EAAO/qC,MAAQA,EACf+qC,EAAO9qC,OAASA,GACNvyB,KAAKgsQ,iBACf15L,EAAQQ,UAAU,EAAG,EAAGxgD,EAAOC,GAIjC,IAAIipP,GAAU,EACV3+N,GAAS,EACb,GAAI8yD,EAAWr0F,OAAQ,CACrB,IAAMuxP,EAAc,GAClBl9J,EAAWr0F,OACXk3K,EAAUjI,aAGZixF,GADA3+N,EAASuG,GAAiBypN,EAAax5E,EAAW/3K,WAC7BmsK,GAAeolF,EAAax5E,EAAW/3K,UAE1Dtb,KAAKssQ,cAAch6L,EAAS+gH,EAAYw5E,GAI5C,IAAMlhQ,EAAMohB,EAAMG,WAEZ8rH,EAAYwtC,EAChBxmL,KAAK8rQ,cACLx5O,EAAQ,EACRC,EAAS,EACTgY,EACAA,EACA,EACC62P,GAAmBJ,EAAY,GAAK9C,EAAW,IAAOiD,EACtDC,GAAmBlD,EAAW,GAAK8C,EAAY,IAAOG,GAGzDnhS,KAAK6rQ,mBAAsBs1B,EAAkBzhF,EAAc0hF,EAE3D,IAAMC,EAAK11R,EAAI2mB,MAAQ0mH,EAAU,GAC3BsoJ,EAAK31R,EAAI4mB,OAASymH,EAAU,GAOlC,GALKh5I,KAAK2f,WAAWwC,YAAYy8P,kBAC/B,GAAOtsM,EAASsmN,IAGlB54R,KAAKysQ,UAAUn6L,EAAS+gH,GACpBx2I,GAAUwkP,GAAM,IAAOC,GAAM,GAAK,CACpC,IAAMz+O,EAAKm2F,EAAU,GACfl2F,EAAKk2F,EAAU,GACfxlI,EAAUm8F,EAAWn8F,QACvB+tR,OAAa,EACD,IAAZ/tR,IACF+tR,EAAgBjvN,EAAQktD,YACxBltD,EAAQktD,YAAchsH,GAExB8+D,EAAQa,UAAUxnE,EAAK,EAAG,GAAIA,EAAI2mB,OAAQ3mB,EAAI4mB,OAAQswB,EAAIC,EAAIu+O,EAAIC,GAClD,IAAZ9tR,IACF8+D,EAAQktD,YAAc+hK,GAc1B,OAXAvhS,KAAK0sQ,WAAWp6L,EAAS+gH,GAErBmoF,GACFlpM,EAAQqoH,UAEV,GAAOroH,EAASwmN,IAEZhoB,IAAoBzzM,EAAO13D,MAAMqzI,YACnC37E,EAAO13D,MAAMqzI,UAAY83H,GAGpB9wQ,KAAKi0D,WAEhB,EAjPA,CAAuC,IAmPvC,Y,+dChOA,SAhCA,YAIE,WAAYynI,G,OACV,YAAMA,IAAY,KAyBtB,OA9ByB,QAQvB,YAAA3H,eAAA,WACE,OAAO,IAAI,GAAyB/zL,OAkBtC,YAAA+D,QAAA,SAAQqvL,GACN,OAAO,YAAMrvL,QAAO,UAACqvL,IAEzB,EA9BA,CAAyBouG,ICClB,IAAMC,GAAe,MAUfC,GAAuB,MAwBvBC,GAAe,MAiCtBC,GAAc,CAAC,qBAAsB,QAAS,YAAa,aAO1D,SAASrvN,GAAWlV,EAAQwkO,GASjC,IARA,IAAMn5R,EAAa,GACjB,CACEo5R,uBAAuB,EACvBC,WAAWh9G,GAEb88G,GAEI39Q,EAAK09Q,GAAYv+R,OACdnB,EAAI,EAAGA,EAAIgiB,IAAMhiB,EACxB,IACE,IAAMowE,EAAUjV,EAAOkV,WAAWqvN,GAAY1/R,GAAIwG,GAClD,GAAI4pE,EACF,OAA6C,EAE/C,MAAOvzE,IAIX,OAAO,KC/FF,IAAMijS,GD4Bc,MCN3B,cAME,WAAY73R,EAAM83R,GAKhBjiS,KAAK+0D,MAAQ,KAMb/0D,KAAKmK,KAAOA,EAEZ,EAAOA,IAASs3R,IAAgBt3R,IAASu3R,GAAsB,IAM/D1hS,KAAK6yI,WAAsBzuI,IAAd69R,EAA0BA,EAAYD,GA4DvD,OArDE,YAAAE,OAAA,SAAOrtQ,GACL70B,KAAK+0D,MAAQ,IAAKotO,GAAqBniS,KAAKmK,MAA/B,CAAsC0qB,IAOrD,YAAAutQ,UAAA,SAAUrtO,GACR,IAAMstO,EAAaF,GAAqBniS,KAAKmK,MAC7CnK,KAAK+0D,MAAQstO,EAAWnqR,KACpBmqR,EAAWnqR,KAAK68C,GAChB,IAAIstO,EAAWttO,IAQrB,YAAAutO,gBAAA,SAAgB1pO,GACd54D,KAAK+0D,MAAQ,IAAKotO,GAAqBniS,KAAKmK,MAA/B,CAAsCyuD,IAMrD,YAAA3uD,QAAA,WACE,OAAOjK,KAAKmK,MAOd,YAAA6xL,SAAA,WACE,OAAOh8L,KAAK+0D,OAMd,YAAAwtO,SAAA,WACE,OAAOviS,KAAK6yI,OAOd,YAAAywE,QAAA,WACE,OAAOtjN,KAAK+0D,MAAQ/0D,KAAK+0D,MAAM1xD,OAAS,GAE5C,EArFA,GA4FO,SAAS8+R,GAAqBh4R,GACnC,OAAQA,GACN,KAAKs3R,GACH,OAAOe,aACT,KAAKd,GACH,OAAOe,YACT,QACE,OAAOD,cAIb,YCvIA,GACQ,mBADR,GAEY,uBCHZ,IAgGA,cAIE,WAAY7iS,GACVK,KAAK0iS,IAAM/iS,EAAQgjS,aACnB,IAAMz5H,EAAKlpK,KAAK0iS,IAEhB1iS,KAAK4iS,YAAcjjS,EAAQkjS,YAAc,EAEzC7iS,KAAK8iS,qBAAuB55H,EAAG65H,gBAC/B/iS,KAAKgjS,yBAA2B,KAEhChjS,KAAKijS,aAAe/5H,EAAGg6H,oBAIvB,IAAMC,EAAej6H,EAAGk6H,aAAal6H,EAAGm6H,eACxCn6H,EAAGo6H,aACDH,EACAxjS,EAAQwjS,cApHgB,qUAsH1Bj6H,EAAGq6H,cAAcJ,GACjB,IAAMK,EAAiBt6H,EAAGk6H,aAAal6H,EAAGu6H,iBAC1Cv6H,EAAGo6H,aACDE,EACA7jS,EAAQ6jS,gBA1GkB,6NA4G5Bt6H,EAAGq6H,cAAcC,GACjBxjS,KAAK0jS,qBAAuBx6H,EAAGy6H,gBAC/Bz6H,EAAG06H,aAAa5jS,KAAK0jS,qBAAsBP,GAC3Cj6H,EAAG06H,aAAa5jS,KAAK0jS,qBAAsBF,GAC3Ct6H,EAAG26H,YAAY7jS,KAAK0jS,sBAGpB1jS,KAAK8jS,4BAA8B56H,EAAG66H,eAEtC76H,EAAG86H,WAAW96H,EAAGu4H,aAAczhS,KAAK8jS,6BACpC56H,EAAG+6H,WACD/6H,EAAGu4H,aACH,IAAIe,aAJgB,EAAE,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,IAK5Dt5H,EAAGg7H,aAGLlkS,KAAKmkS,4BAA8Bj7H,EAAGk7H,kBACpCpkS,KAAK0jS,qBACL,cAEF1jS,KAAKqkS,6BAA+Bn7H,EAAGo7H,mBACrCtkS,KAAK0jS,qBACL,gBAEF1jS,KAAKukS,6BAA+Br7H,EAAGo7H,mBACrCtkS,KAAK0jS,qBACL,aAEF1jS,KAAKwkS,6BAA+Bt7H,EAAGo7H,mBACrCtkS,KAAK0jS,qBACL,WAQF1jS,KAAKykS,UAAY,GACjB9kS,EAAQ+kS,UACNvlS,OAAOD,KAAKS,EAAQ+kS,UAAUn9R,QAC5B,SAAUsB,GACR7I,KAAKykS,UAAUr8R,KAAK,CAClBvF,MAAOlD,EAAQ+kS,SAAS77R,GACxBwJ,SAAU62J,EAAGo7H,mBAAmBtkS,KAAK0jS,qBAAsB76R,MAE7Dq3C,KAAKlgD,OAmOf,OA1NE,YAAA2kS,MAAA,WACE,OAAO3kS,KAAK0iS,KAUd,YAAA98O,KAAA,SAAKytI,GACH,IAAMnqB,EAAKlpK,KAAK2kS,QACVC,EAAc,CAClB17H,EAAG27H,mBAAqB7kS,KAAK4iS,YAC7B15H,EAAG47H,oBAAsB9kS,KAAK4iS,aAQhC,GAJA15H,EAAG67H,gBAAgB77H,EAAG87H,YAAahlS,KAAKilS,kBACxC/7H,EAAGtlF,SAAS,EAAG,EAAGghN,EAAY,GAAIA,EAAY,KAI3C5kS,KAAKgjS,0BACNhjS,KAAKgjS,yBAAyB,KAAO4B,EAAY,IACjD5kS,KAAKgjS,yBAAyB,KAAO4B,EAAY,GACjD,CACA5kS,KAAKgjS,yBAA2B4B,EAGhC,IACMM,EAAiBh8H,EAAGi8H,KAEpBnyR,EAASk2J,EAAGi8H,KACZh7R,EAAO++J,EAAGk8H,cAEhBl8H,EAAGm8H,YAAYn8H,EAAGo8H,WAAYtlS,KAAK8iS,sBACnC55H,EAAGq8H,WACDr8H,EAAGo8H,WARS,EAUZJ,EACAN,EAAY,GACZA,EAAY,GAVC,EAYb5xR,EACA7I,EAVW,MAcb++J,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGu8H,mBAAoBv8H,EAAGw8H,QAC1Dx8H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGy8H,eAAgBz8H,EAAG08H,eACtD18H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAG28H,eAAgB38H,EAAG08H,eAGtD18H,EAAG48H,qBACD58H,EAAG87H,YACH97H,EAAG68H,kBACH78H,EAAGo8H,WACHtlS,KAAK8iS,qBACL,KAaN,YAAA1yR,MAAA,SAAMijL,EAAY2yG,EAAUC,EAAYC,GACtC,IAAMh9H,EAAKlpK,KAAK2kS,QACV9vQ,EAAOw+J,EAAWx+J,KASxB,GAPAq0I,EAAG67H,gBACD77H,EAAG87H,YACHgB,EAAWA,EAASf,iBAAmB,MAEzC/7H,EAAGi9H,cAAcj9H,EAAGk9H,UACpBl9H,EAAGm8H,YAAYn8H,EAAGo8H,WAAYtlS,KAAK8iS,uBAE9BkD,EAAU,CAGb,IAAMK,EAAWxiH,EAAO3a,EAAG7rG,QAC3B,IAAKg2H,EAAWmyB,cAAc6gF,GAAW,CACvC,IAAM39R,EAAawgK,EAAGo9H,uBAClB59R,GAAcA,EAAWo5R,wBAC3B54H,EAAGq9H,WAAW,EAAK,EAAK,EAAK,GAC7Br9H,EAAGroH,MAAMqoH,EAAGs9H,mBAGdnzG,EAAWmyB,cAAc6gF,IAAY,GAIzCn9H,EAAG9qH,OAAO8qH,EAAGu9H,OACbv9H,EAAGw9H,UAAUx9H,EAAGy9H,IAAKz9H,EAAG09H,qBACxB19H,EAAGtlF,SAAS,EAAG,EAAGslF,EAAG27H,mBAAoB37H,EAAG47H,qBAE5C57H,EAAG86H,WAAW96H,EAAGu4H,aAAczhS,KAAK8jS,6BAEpC56H,EAAG29H,WAAW7mS,KAAK0jS,sBACnBx6H,EAAG49H,wBAAwB9mS,KAAKmkS,6BAChCj7H,EAAG69H,oBACD/mS,KAAKmkS,4BACL,EACAj7H,EAAG5vG,OACH,EACA,EACA,GAEF4vG,EAAG89H,UAAUhnS,KAAKqkS,6BAA8BxvQ,EAAK,GAAIA,EAAK,IAC9Dq0I,EAAG+9H,UAAUjnS,KAAKwkS,6BAA8B,GAEhD,IAAMhxR,EAAU6/K,EAAWQ,iBAAiBR,EAAW8H,YAAY3nL,QACnE01J,EAAGg+H,UAAUlnS,KAAKukS,6BAA8B/wR,GAEhDxT,KAAKmnS,cAAc9zG,GAEf4yG,GACFA,EAAW/8H,EAAImqB,GAEjBnqB,EAAGk+H,WAAWl+H,EAAGm+H,UAAW,EAAG,GAC3BnB,GACFA,EAAYh9H,EAAImqB,IAQpB,YAAA4xG,eAAA,WACE,OAAOjlS,KAAKijS,cAQd,YAAAkE,cAAA,SAAc9zG,GACZ,IAEIxwL,EAFEqmK,EAAKlpK,KAAK2kS,QAGZ2C,EAAc,EAClBtnS,KAAKykS,UAAUl9R,SAAQ,SAAUggS,GAO/B,IANA1kS,EAC2B,mBAAlB0kS,EAAQ1kS,MACX0kS,EAAQ1kS,MAAMwwL,GACdk0G,EAAQ1kS,iBAGOwpQ,mBAAqBxpQ,aAAiB2kS,UAEpDD,EAAQE,UACXF,EAAQE,QAAUv+H,EAAG65H,iBAEvB75H,EAAGi9H,cAAcj9H,EAAG,iBAAUo+H,KAC9Bp+H,EAAGm8H,YAAYn8H,EAAGo8H,WAAYiC,EAAQE,SACtCv+H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGu8H,mBAAoBv8H,EAAGw8H,QAC1Dx8H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGy8H,eAAgBz8H,EAAG08H,eACtD18H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAG28H,eAAgB38H,EAAG08H,eAElD/iS,aAAiB2kS,UACnBt+H,EAAGq8H,WACDr8H,EAAGo8H,WACH,EACAp8H,EAAGi8H,KACHj8H,EAAGi8H,KACHtiS,EAAMyvB,MACNzvB,EAAM0vB,OACN,EACA22I,EAAGk8H,cACH,IAAIr5Q,WAAWlpB,EAAMsB,OAGvB+kK,EAAGq8H,WACDr8H,EAAGo8H,WACH,EACAp8H,EAAGi8H,KACHj8H,EAAGi8H,KACHj8H,EAAGk8H,cACHviS,GAKJqmK,EAAG+9H,UAAUM,EAAQl1R,SAAUi1R,UAC1B,GAAIxmS,MAAMC,QAAQ8B,GACvB,OAAQA,EAAMQ,QACZ,KAAK,EAEH,YADA6lK,EAAG89H,UAAUO,EAAQl1R,SAAUxP,EAAM,GAAIA,EAAM,IAEjD,KAAK,EAEH,YADAqmK,EAAGw+H,UAAUH,EAAQl1R,SAAUxP,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAE3D,KAAK,EAQH,YAPAqmK,EAAGy+H,UACDJ,EAAQl1R,SACRxP,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IAGV,QACE,WAEsB,iBAAVA,GAChBqmK,EAAGg+H,UAAUK,EAAQl1R,SAAUxP,OAIvC,EA7SA,GA+SA,YCrYO,SAAS+kS,GAAcC,EAAM7uJ,GAOlC,OANA6uJ,EAAK,GAAK7uJ,EAAU,GACpB6uJ,EAAK,GAAK7uJ,EAAU,GACpB6uJ,EAAK,GAAK7uJ,EAAU,GACpB6uJ,EAAK,GAAK7uJ,EAAU,GACpB6uJ,EAAK,IAAM7uJ,EAAU,GACrB6uJ,EAAK,IAAM7uJ,EAAU,GACd6uJ,E,+dCqBIC,GACQ,qBADRA,GAEU,sBAFVA,GAGa,uBAHbA,GAIL,SAJKA,GAKL,SALKA,GAMC,eAQDC,GAAgB,CAC3B3C,cLA2B,KKC3B4C,eLK4B,KKJ5BC,aLU0B,KKT1B3uO,MLemB,MK0Cf4uO,GAAc,GAMpB,SAASC,GAAwB1/R,GAC/B,MAAO,UAAYA,EAGrB,IAAI2/R,GAA4B,EAkLhC,mBAIE,WAAY1sG,GAAZ,IAhLMjzL,EAgLN,EACE,cAAO,KACD9I,EAAU+7L,GAAe,GAG/B,EAAK2sG,6BAA+B,EAAKC,uBAAuBpoP,KAAK,GAGrE,EAAKqoP,iCACH,EAAKC,2BAA2BtoP,KAAK,GAMvC,EAAKuoP,gBAAkB9oS,EAAQ+oS,eAC3BP,GAAwBxoS,EAAQ+oS,iBAhMhCjgS,EAAM,UAAY2/R,GACxBA,IAA6B,EACtB3/R,GAqML,EAAKkhP,QA9LT,SAAmBlhP,GACjB,IAAIkgS,EAAYT,GAAYz/R,GAC5B,IAAKkgS,EAAW,CACd,IAAMtrO,EAAS1wD,SAASC,cAAc,UACtCywD,EAAO13D,MAAM2G,SAAW,WACxB+wD,EAAO13D,MAAMyuE,KAAO,IACpBu0N,EAAY,CAACC,MAAO,EAAGvrO,OAAM,GAC7B6qO,GAAYz/R,GAAOkgS,EAIrB,OADAA,EAAUC,OAAS,EACZD,EAAUtrO,OAmLAkpB,CAAU,EAAKkiN,iBAM9B,EAAK/F,IAAMnwN,GAAW,EAAKo3K,SAM3B,EAAKk/C,aAAe,GAMpB,EAAKC,gBAAkB,GAMvB,EAAKC,gBAAkB,KAEvB,EAAKp/C,QAAQ/9O,iBACXo9R,GACA,EAAKX,8BAEP,EAAK1+C,QAAQ/9O,iBACXo9R,GACA,EAAKT,kCAOP,EAAKU,oBvNjVA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GuNuVrB,EAAKC,mBvNvVA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GuN6VrB,EAAKC,SDzXA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GC+XnD,EAAKC,kBAAoB,GAMzB,EAAKC,iBAAmB,GAQxB,EAAK5E,UAAY,GACb9kS,EAAQ+kS,UACV,EAAK4E,YAAY3pS,EAAQ+kS,UAG3B,IAAMx7H,EAAK,EAAKy7H,Q,OAShB,EAAK4E,mBAAqB5pS,EAAQ6pS,cAC9B7pS,EAAQ6pS,cAAclrS,KAAI,SAAUqB,GAClC,OAAO,IAAI,GAAwB,CACjCgjS,aAAcz5H,EACd25H,WAAYljS,EAAQkjS,WACpBM,aAAcxjS,EAAQwjS,aACtBK,eAAgB7jS,EAAQ6jS,eACxBkB,SAAU/kS,EAAQ+kS,cAGtB,CAAC,IAAI,GAAwB,CAAC/B,aAAcz5H,KAMhD,EAAKugI,qBAAuB,KAM5B,EAAK96E,WAAa9qL,KAAKC,M,EAkpB3B,OAxxB0B,QA4IxB,YAAAwlQ,YAAA,SAAY5E,GAEV,IAAK,IAAM,KADX1kS,KAAKykS,UAAY,GACEC,EACjB1kS,KAAKykS,UAAUr8R,KAAK,CAClBS,KAAM,EACNhG,MAAO6hS,EAAS,KAGpB1kS,KAAKopS,kBAAoB,IAO3B,YAAAM,sBAAA,SAAsBhB,GACpB,OAAO1oS,KAAKyoS,kBAAoBN,GAAwBO,IAS1D,YAAAiB,aAAA,SAAa9gS,GACX,GAAIA,KAAQ7I,KAAK8oS,gBACf,OAAO9oS,KAAK8oS,gBAAgBjgS,GAE9B,IAAM4qB,EAAYzzB,KAAK0iS,IAAIiH,aAAa9gS,GAExC,OADA7I,KAAK8oS,gBAAgBjgS,GAAQ4qB,EACtBA,GAUT,YAAAuwQ,WAAA,SAAWprO,GACT,IAAMswG,EAAKlpK,KAAK2kS,QACViF,EAAY/lH,EAAOjrH,GACrBixO,EAAc7pS,KAAK6oS,aAAae,GAC/BC,IAEHA,EAAc,CACZjxO,OAAQA,EACRkxO,YAHkB5gI,EAAG66H,gBAKvB/jS,KAAK6oS,aAAae,GAAaC,GAEjC3gI,EAAG86H,WAAWprO,EAAO3uD,UAAW4/R,EAAYC,cAS9C,YAAAC,gBAAA,SAAgBnxO,GACd,IAAMswG,EAAKlpK,KAAK2kS,QAChB3kS,KAAKgkS,WAAWprO,GAChBswG,EAAG+6H,WAAWrrO,EAAO3uD,UAAW2uD,EAAOojI,WAAYpjI,EAAO2pO,aAM5D,YAAAyH,aAAA,SAAaC,GACX,IAAM/gI,EAAKlpK,KAAK2kS,QACViF,EAAY/lH,EAAOomH,GACnBC,EAAmBlqS,KAAK6oS,aAAae,GACvCM,IAAqBhhI,EAAGihI,iBAC1BjhI,EAAG8gI,aAAaE,EAAiBJ,oBAE5B9pS,KAAK6oS,aAAae,IAM3B,YAAA3lH,gBAAA,WACEjkL,KAAK2pP,QAAQhpM,oBACXqoP,GACAhpS,KAAKqoS,8BAEProS,KAAK2pP,QAAQhpM,oBACXqoP,GACAhpS,KAAKuoS,kCAzXX,SAAuB9/R,GACrB,IAAMkgS,EAAYT,GAAYz/R,GAC9B,GAAKkgS,IAILA,EAAUC,OAAS,IACfD,EAAUC,MAAQ,IAAtB,CAIA,IAEMn1Q,EADK8+C,GADIo2N,EAAUtrO,QAEJssO,aAAa,sBAC9Bl2Q,GACFA,EAAU22Q,qBAGLlC,GAAYz/R,IA0WjB,CAAczI,KAAKyoS,wBAEZzoS,KAAK0iS,WACL1iS,KAAK2pP,SAWd,YAAA0gD,YAAA,SAAYh3G,EAAYi3G,GACtB,IAAMphI,EAAKlpK,KAAK2kS,QACVtnO,EAASr9D,KAAKumF,YACd1xD,EAAOw+J,EAAWx+J,KAClB6qL,EAAarsB,EAAWqsB,WAE9BriJ,EAAO/qC,MAAQuC,EAAK,GAAK6qL,EACzBriJ,EAAO9qC,OAASsC,EAAK,GAAK6qL,EAC1BriJ,EAAO13D,MAAM2sB,MAAQuC,EAAK,GAAK,KAC/BwoC,EAAO13D,MAAM4sB,OAASsC,EAAK,GAAK,KAEhCq0I,EAAG29H,WAAW7mS,KAAK+oS,iBAGnB,IAAK,IAAI7mS,EAAIlC,KAAKupS,mBAAmBlmS,OAAS,EAAGnB,GAAK,EAAGA,IACvDlC,KAAKupS,mBAAmBrnS,GAAG0jD,KAAKytI,GAGlCnqB,EAAGm8H,YAAYn8H,EAAGo8H,WAAY,MAE9Bp8H,EAAGq9H,WAAW,EAAK,EAAK,EAAK,GAC7Br9H,EAAGroH,MAAMqoH,EAAGs9H,kBAEZt9H,EAAG9qH,OAAO8qH,EAAGu9H,OACbv9H,EAAGw9H,UACDx9H,EAAGy9H,IACH2D,EAAwBphI,EAAGqhI,KAAOrhI,EAAG09H,qBAGvC19H,EAAG29H,WAAW7mS,KAAK+oS,iBACnB/oS,KAAKwqS,gBAAgBn3G,GACrBrzL,KAAKmnS,cAAc9zG,IAWrB,YAAAo3G,0BAAA,SAA0Bp3G,EAAYq3G,EAAcJ,GAClD,IAAMphI,EAAKlpK,KAAK2kS,QACV9vQ,EAAO61Q,EAAapnF,UAE1Bp6C,EAAG67H,gBAAgB77H,EAAG87H,YAAa0F,EAAaC,kBAChDzhI,EAAGtlF,SAAS,EAAG,EAAG/uD,EAAK,GAAIA,EAAK,IAChCq0I,EAAGm8H,YAAYn8H,EAAGo8H,WAAYoF,EAAaE,cAC3C1hI,EAAGq9H,WAAW,EAAK,EAAK,EAAK,GAC7Br9H,EAAGroH,MAAMqoH,EAAGs9H,kBACZt9H,EAAG9qH,OAAO8qH,EAAGu9H,OACbv9H,EAAGw9H,UACDx9H,EAAGy9H,IACH2D,EAAwBphI,EAAGqhI,KAAOrhI,EAAG09H,qBAGvC19H,EAAG29H,WAAW7mS,KAAK+oS,iBACnB/oS,KAAKwqS,gBAAgBn3G,GACrBrzL,KAAKmnS,cAAc9zG,IASrB,YAAAw3G,aAAA,SAAat8N,EAAOzE,GAClB,IAAMo/F,EAAKlpK,KAAK2kS,QAChB3kS,KAAK2pS,aAAa,0BAElB,IAAMmB,EAAc5hI,EAAG++H,aAGjB8C,EAAWjhO,EAAMyE,EACjBy8N,EAHc,EAGEz8N,EACtB26F,EAAG2hI,aAAa3hI,EAAGm+H,UAAW0D,EAAUD,EAAaE,IASvD,YAAAC,aAAA,SAAa53G,EAAY4yG,EAAYC,GAEnC,IAAK,IAAIhkS,EAAI,EAAGgiB,EAAKlkB,KAAKupS,mBAAmBlmS,OAAQnB,EAAIgiB,EAAIhiB,IACvDA,IAAMgiB,EAAK,EACblkB,KAAKupS,mBAAmBrnS,GAAGkO,MACzBijL,EACA,KACA4yG,EACAC,GAGFlmS,KAAKupS,mBAAmBrnS,GAAGkO,MACzBijL,EACArzL,KAAKupS,mBAAmBrnS,EAAI,KAUpC,YAAAqkF,UAAA,WACE,OAAOvmF,KAAK2pP,SAQd,YAAAg7C,MAAA,WACE,OAAO3kS,KAAK0iS,KAOd,YAAA8H,gBAAA,SAAgBn3G,GACd,IAAMx+J,EAAOw+J,EAAWx+J,KAClBw/B,EAAWg/H,EAAWb,UAAUn+H,SAEhC62O,EAAoB,EAAelrS,KAAKkpS,oBAC9C3+P,EAAe2gQ,EAAmB,EAAIr2Q,EAAK,GAAI,EAAIA,EAAK,IAExD,IAAMs2Q,EAAqB,EAAenrS,KAAKipS,qBAC9B,IAAb50O,GvNtiBD,SAAgB2kF,EAAW/2I,GAChC,IAAME,EAAMZ,KAAKY,IAAIF,GACfG,EAAMb,KAAKa,IAAIH,GACd0jL,EAAS3sC,EAAWl6H,EAAI4mK,EAAMvjL,EAAKC,GAAMA,EAAKD,EAAK,EAAG,IuNoiBzDgrM,CAAgBg+F,GAAqB92O,GAGvCr0D,KAAKorS,sBACHtD,GACAF,GAAc5nS,KAAKmpS,SAAU+B,IAE/BlrS,KAAKorS,sBACHtD,GACAF,GAAc5nS,KAAKmpS,SAAUgC,IAG/BnrS,KAAKqrS,qBACHvD,GACiC,MAAhCjkQ,KAAKC,MAAQ9jC,KAAK2uN,aAErB3uN,KAAKqrS,qBAAqBvD,GAAqBz0G,EAAWb,UAAU7sB,MACpE3lK,KAAKqrS,qBACHvD,GACAz0G,EAAWb,UAAUruI,aAQzB,YAAAgjP,cAAA,SAAc9zG,GACZ,IAEIxwL,EAFEqmK,EAAKlpK,KAAK2kS,QAGZ2C,EAAc,EAClBtnS,KAAKykS,UAAUl9R,QACb,SAAUggS,GAOR,IANA1kS,EAC2B,mBAAlB0kS,EAAQ1kS,MACX0kS,EAAQ1kS,MAAMwwL,GACdk0G,EAAQ1kS,iBAIKwpQ,mBACjBxpQ,aAAiByoS,kBACjBzoS,aAAiB2kS,UAGZD,EAAQE,UACXF,EAAQgE,eAAYnnS,EACpBmjS,EAAQE,QAAUv+H,EAAG65H,iBAEvB75H,EAAGi9H,cAAcj9H,EAAG,iBAAUo+H,KAC9Bp+H,EAAGm8H,YAAYn8H,EAAGo8H,WAAYiC,EAAQE,SACtCv+H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGu8H,mBAAoBv8H,EAAGw8H,QAC1Dx8H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGy8H,eAAgBz8H,EAAG08H,eACtD18H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAG28H,eAAgB38H,EAAG08H,kBAGlD/iS,aAAiByoS,mBACa,EAAQ93N,WACxB+zN,EAAQgE,YAAc1oS,IACtC0kS,EAAQgE,UAAY1oS,EACpBqmK,EAAGq8H,WACDr8H,EAAGo8H,WACH,EACAp8H,EAAGi8H,KACHj8H,EAAGi8H,KACHj8H,EAAGk8H,cACHviS,IAKJqmK,EAAG+9H,UAAUjnS,KAAKskS,mBAAmBiD,EAAQ1+R,MAAOy+R,UAC/C,GAAIxmS,MAAMC,QAAQ8B,IAA2B,IAAjBA,EAAMQ,OACvCrD,KAAKorS,sBACH7D,EAAQ1+R,KACR++R,GAAc5nS,KAAKmpS,SAAUtmS,SAE1B,GAAI/B,MAAMC,QAAQ8B,IAAUA,EAAMQ,QAAU,EACjD,OAAQR,EAAMQ,QACZ,KAAK,EAMH,YALA6lK,EAAG89H,UACDhnS,KAAKskS,mBAAmBiD,EAAQ1+R,MAChChG,EAAM,GACNA,EAAM,IAGV,KAAK,EAOH,YANAqmK,EAAGw+H,UACD1nS,KAAKskS,mBAAmBiD,EAAQ1+R,MAChChG,EAAM,GACNA,EAAM,GACNA,EAAM,IAGV,KAAK,EAQH,YAPAqmK,EAAGy+H,UACD3nS,KAAKskS,mBAAmBiD,EAAQ1+R,MAChChG,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IAGV,QACE,WAEsB,iBAAVA,GAChBqmK,EAAGg+H,UAAUlnS,KAAKskS,mBAAmBiD,EAAQ1+R,MAAOhG,IAEtDq9C,KAAKlgD,QAUX,YAAA6mS,WAAA,SAAW2E,GACT,OAAIA,GAAWxrS,KAAK+oS,kBAGP/oS,KAAK2kS,QACbkC,WAAW2E,GACdxrS,KAAK+oS,gBAAkByC,EACvBxrS,KAAKopS,kBAAoB,GACzBppS,KAAKqpS,iBAAmB,IACjB,IAaX,YAAA9F,cAAA,SAAc5oR,EAAQxQ,GACpB,IAAM++J,EAAKlpK,KAAK2kS,QACV8G,EAASviI,EAAGk6H,aAAaj5R,GAG/B,OAFA++J,EAAGo6H,aAAamI,EAAQ9wR,GACxBuuJ,EAAGq6H,cAAckI,GACVA,GAUT,YAAAC,WAAA,SAAWC,EAAsBC,GAC/B,IAAM1iI,EAAKlpK,KAAK2kS,QAEVnB,EAAiBxjS,KAAKujS,cAC1BoI,EACAziI,EAAGu6H,iBAGCN,EAAenjS,KAAKujS,cACxBqI,EACA1iI,EAAGm6H,eAGCmI,EAAUtiI,EAAGy6H,gBAKnB,GAJAz6H,EAAG06H,aAAa4H,EAAShI,GACzBt6H,EAAG06H,aAAa4H,EAASrI,GACzBj6H,EAAG26H,YAAY2H,IAEVtiI,EAAG2iI,mBAAmBrI,EAAgBt6H,EAAG4iI,gBAAiB,CAC7D,IAAMnuR,EAAU,8CAAuCurJ,EAAG6iI,iBACxDvI,IAEF,MAAM,IAAIxkS,MAAM2e,GAIlB,GAFAurJ,EAAG8iI,aAAaxI,IAEXt6H,EAAG2iI,mBAAmB1I,EAAcj6H,EAAG4iI,gBAAiB,CACrDnuR,EAAU,4CAAqCurJ,EAAG6iI,iBACtD5I,IAEF,MAAM,IAAInkS,MAAM2e,GAIlB,GAFAurJ,EAAG8iI,aAAa7I,IAEXj6H,EAAG+iI,oBAAoBT,EAAStiI,EAAGgjI,aAAc,CAC9CvuR,EAAU,qCAA8BurJ,EAAG6iI,iBAC/C5I,IAEF,MAAM,IAAInkS,MAAM2e,GAGlB,OAAO6tR,GAST,YAAAlH,mBAAA,SAAmBz7R,GAOjB,YANqCzE,IAAjCpE,KAAKopS,kBAAkBvgS,KACzB7I,KAAKopS,kBAAkBvgS,GAAQ7I,KAAK2kS,QAAQL,mBAC1CtkS,KAAK+oS,gBACLlgS,IAGG7I,KAAKopS,kBAAkBvgS,IAShC,YAAAsjS,qBAAA,SAAqBtjS,GAOnB,YANoCzE,IAAhCpE,KAAKqpS,iBAAiBxgS,KACxB7I,KAAKqpS,iBAAiBxgS,GAAQ7I,KAAK2kS,QAAQP,kBACzCpkS,KAAK+oS,gBACLlgS,IAGG7I,KAAKqpS,iBAAiBxgS,IAW/B,YAAAujS,wBAAA,SAAwB/4G,EAAYr6C,GAClC,IAAMnkH,EAAOw+J,EAAWx+J,KAClBw/B,EAAWg/H,EAAWb,UAAUn+H,SAChClQ,EAAakvI,EAAWb,UAAUruI,WAClCxjD,EAAS0yL,EAAWb,UAAU7xL,OAapC,OAXA,EAAeq4I,GACfwtC,EACExtC,EACA,EACA,EACA,GAAK70F,EAAatvB,EAAK,IACvB,GAAKsvB,EAAatvB,EAAK,KACtBw/B,GACA1zD,EAAO,IACPA,EAAO,IAEHq4I,GAST,YAAAqyJ,qBAAA,SAAqB9D,EAAS1kS,GAC5B7C,KAAK2kS,QAAQuC,UAAUlnS,KAAKskS,mBAAmBiD,GAAU1kS,IAQ3D,YAAAwpS,oBAAA,SAAoB9E,EAAS1kS,GAC3B7C,KAAK2kS,QAAQ2H,WAAWtsS,KAAKskS,mBAAmBiD,GAAU1kS,IAS5D,YAAAuoS,sBAAA,SAAsB7D,EAAS1kS,GAC7B7C,KAAK2kS,QAAQ4H,iBACXvsS,KAAKskS,mBAAmBiD,IACxB,EACA1kS,IAcJ,YAAA2pS,sBAAA,SAAsBC,EAAY53Q,EAAM1qB,EAAMq+K,EAAQv2J,GACpD,IAAM5f,EAAWrS,KAAKmsS,qBAAqBM,GAEvCp6R,EAAW,IAGfrS,KAAK2kS,QAAQmC,wBAAwBz0R,GACrCrS,KAAK2kS,QAAQoC,oBACX10R,EACAwiB,EACA1qB,GACA,EACAq+K,EACAv2J,KAWJ,YAAAy6Q,iBAAA,SAAiBhkS,GAGf,IAFA,IAAM8/K,EAwFH,SAAiC9/K,GAEtC,IADA,IAAI8/K,EAAS,EACJtmL,EAAI,EAAGA,EAAIwG,EAAWrF,OAAQnB,IAAK,CAC1C,IAAMyG,EAAOD,EAAWxG,GACxBsmL,GAAU7/K,EAAKksB,KAAO83Q,GAAoBhkS,EAAKwB,MAEjD,OAAOq+K,EA9FUokH,CAAwBlkS,GACnCupB,EAAS,EACJ/vB,EAAI,EAAGA,EAAIwG,EAAWrF,OAAQnB,IAAK,CAC1C,IAAMyG,EAAOD,EAAWxG,GACxBlC,KAAKwsS,sBACH7jS,EAAKE,KACLF,EAAKksB,KACLlsB,EAAKwB,MLr7BQ,KKs7Bbq+K,EACAv2J,GAEFA,GAAUtpB,EAAKksB,KAAO83Q,GAAoBhkS,EAAKwB,QAQnD,YAAAm+R,uBAAA,WACEznP,GAAM7gD,KAAK6oS,cACX7oS,KAAK+oS,gBAAkB,MAOzB,YAAAP,2BAAA,aAaA,YAAAzF,cAAA,SAAcluQ,EAAMg4Q,EAAUC,GAC5B,IAAM5jI,EAAKlpK,KAAK2kS,QACV8C,EAAUqF,GAAe5jI,EAAG65H,gBAI5BmC,EAAiBh8H,EAAGi8H,KAEpBnyR,EAASk2J,EAAGi8H,KACZh7R,EAAO++J,EAAGk8H,cA4BhB,OA3BAl8H,EAAGm8H,YAAYn8H,EAAGo8H,WAAYmC,GAC1BoF,EACF3jI,EAAGq8H,WACDr8H,EAAGo8H,WARO,EAUVJ,EACAlyR,EACA7I,EACA0iS,GAGF3jI,EAAGq8H,WACDr8H,EAAGo8H,WAjBO,EAmBVJ,EACArwQ,EAAK,GACLA,EAAK,GAnBM,EAqBX7hB,EACA7I,EACA,MAGJ++J,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGu8H,mBAAoBv8H,EAAGw8H,QAC1Dx8H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAGy8H,eAAgBz8H,EAAG08H,eACtD18H,EAAGs8H,cAAct8H,EAAGo8H,WAAYp8H,EAAG28H,eAAgB38H,EAAG08H,eAE/C6B,GAEX,EAxxBA,CAA0B,GA8yB1B,SAASkF,GAAoBxiS,GAC3B,OAAQA,GACN,KAAK49R,GAAc3C,cACjB,OAAOr5Q,WAAWghR,kBACpB,KAAKhF,GAAcC,eACjB,OAAOgF,YAAYD,kBACrB,KAAKhF,GAAcE,aACjB,OAAOxF,YAAYsK,kBACrB,KAAKhF,GAAczuO,MACnB,QACE,OAAOkpO,aAAauK,mBAI1B,Y,+dC7lCaE,GACO,mBAsCpB,eAKE,WAAYzoS,EAAOk3L,GAAnB,MACE,YAAMl3L,IAAM,KAEN7E,EAAU+7L,GAAe,G,OAQ/B,EAAKwxG,uBxNrCA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GwN2CrB,EAAKjhC,cAAgB,KAKrB,EAAKkhC,eAAiBxtS,EAAQ6pS,cAK9B,EAAK/E,UAAY9kS,EAAQ+kS,SAMzB,EAAK0I,OAEL5oS,EAAMurL,kBAAkB,GAAmB,EAAKs9G,aAAantP,KAAK,IAElE,EAAKotP,wBAA0B,EAAKA,wBAAwBptP,KAAK,GACjE,EAAKqtP,yBAA2B,EAAKA,yBAAyBrtP,KAAK,G,EAmPvE,OA9RiC,QAmD/B,YAAAotP,wBAAA,SAAwBh7N,EAAS+gH,GAC/B,IAAM7uL,EAAQxE,KAAK2f,WACnB,GAAInb,EAAM4nL,YAAY,eAA6B,CACjD,IAAM,EAAQ,IAAI,GAChB,mBACAhoL,EACAivL,EACA/gH,GAEF9tE,EAAMw7B,cAAc,KASxB,YAAAutQ,yBAAA,SAAyBj7N,EAAS+gH,GAChC,IAAM7uL,EAAQxE,KAAK2f,WACnB,GAAInb,EAAM4nL,YAAY,gBAA8B,CAClD,IAAM,EAAQ,IAAI,GAChB,oBACAhoL,EACAivL,EACA/gH,GAEF9tE,EAAMw7B,cAAc,KAQxB,YAAA7f,MAAA,SAAMxgB,GACJK,KAAKykS,UAAY9kS,EAAQ+kS,SACrB1kS,KAAKotS,QACPptS,KAAKotS,OAAO9D,YAAYtpS,KAAKykS,YAOjC,YAAA4I,aAAA,WACMrtS,KAAKotS,SACPptS,KAAKotS,OAAOppH,iBACLhkL,KAAKotS,SAShB,YAAA55G,aAAA,SAAaH,GACX,GAAIrzL,KAAK2f,WAAWszK,kBAAmB,CAIrC,IAHA,IAAIu6G,GAAiB,EACjBC,GAAe,EACf3xQ,OAAS,EACJ55B,EAAI,EAAGgiB,EAAKmvK,EAAWQ,iBAAiBxwL,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACpE,IAAMsC,EAAQ6uL,EAAWQ,iBAAiB3xL,GAAGsC,MACvC2+M,EAAW3+M,EAAM+uL,cACvB,GAAM4vB,aAAoBuqF,EAA1B,CAIA,IAAMthC,EAAiB5nQ,EAAM+3C,eAM7B,IALIixP,GAAkBphC,IAAmBtwO,KACvC2xQ,GAAe,EACfD,GAAiB,GAEnB1xQ,EAAYswO,EACRjpD,IAAanjN,KACf,WAVAwtS,GAAiB,EAcrB,IAAM9E,EACJ,OAASr1G,EAAWkyB,MAAQ,UAAYkoF,EAErCztS,KAAKotS,QAAWptS,KAAKotS,OAAO1D,sBAAsBhB,KACrD1oS,KAAKqtS,eAELrtS,KAAKotS,OAAS,IAAI,GAAY,CAC5B5D,cAAexpS,KAAKmtS,eACpBzI,SAAU1kS,KAAKykS,UACfiE,eAAgBA,IAGd5sQ,IACF97B,KAAKotS,OAAO7mN,YAAYzqD,UAAYA,GAGtC97B,KAAK2tS,sBAIT,OAAO3tS,KAAK4tS,qBAAqBv6G,IAMnC,YAAAs6G,mBAAA,aAQA,YAAAC,qBAAA,SAAqBv6G,GACnB,OAAO,GAMT,YAAApP,gBAAA,WACEjkL,KAAKqtS,eACL,YAAMppH,gBAAe,YASvB,YAAAuoF,qBAAA,SAAqBriQ,EAAMmoE,EAAS+gH,GAClC,IAAM7uL,EAAQxE,KAAK2f,WACnB,GAAInb,EAAM4nL,YAAYjiL,GAAO,CAC3Bq8K,EACExmL,KAAKktS,uBACL,EACA,EACA75G,EAAWqsB,YACVrsB,EAAWqsB,WACZ,EACA,GACCrsB,EAAWx+J,KAAK,IAGnB,IAAM,EAAQ,IAAI,GAChB1qB,EACAnK,KAAKktS,uBACL75G,EACA/gH,GAEF9tE,EAAMw7B,cAAc,KASxB,YAAAysO,UAAA,SAAUn6L,EAAS+gH,GACjBrzL,KAAKwsQ,qBAAqB,aAA2Bl6L,EAAS+gH,IAQhE,YAAAq5E,WAAA,SAAWp6L,EAAS+gH,GAClBrzL,KAAKwsQ,qBAAqB,cAA4Bl6L,EAAS+gH,IAWjE,YAAAkI,eAAA,SAAenI,EAAOC,EAAYgC,GAChC,IAAMu3E,EAAcx8P,EAClB,CAACijL,EAAWqsB,WAAY,EAAG,EAAGrsB,EAAWqsB,WAAY,EAAG,GACxDtsB,EAAMzoL,SAEFu+J,EAAKlpK,KAAKotS,OAAOzI,QACvB,IAAKz7H,EACH,OAAO,KAET,IACM2jG,EADQ7sQ,KAAK2f,WACOoH,YAC1B,GAAI8lP,IAOGtlF,EAAmBslF,EANCz8P,EACvBijL,EAAW8B,2BACX/B,EAAMzoL,UAKN,OAAO,KAIX,IAAMjC,EAAawgK,EAAGo9H,uBACtB,IAAK59R,IAAeA,EAAWo5R,sBAE7B,OAAO,IAAI/1Q,WAGb,IAWI5nB,EAXEwpB,EAAIpsB,KAAKirC,MAAMogO,EAAY,IAC3Bh/O,EAAIrsB,KAAKirC,MAAMogO,EAAY,IAC7BhB,EAAe5rQ,KAAKisQ,cACxB,IAAKL,EAAc,CACjB,IAAMkB,EAAcngQ,SAASC,cAAc,UAC3CkgQ,EAAYx6O,MAAQ,EACpBw6O,EAAYv6O,OAAS,EACrBq5O,EAAekB,EAAYv6L,WAAW,MACtCvyE,KAAKisQ,cAAgBL,EAEvBA,EAAa94L,UAAU,EAAG,EAAG,EAAG,GAEhC,IACE84L,EAAaz4L,UAAU+1F,EAAG7rG,OAAQ1vC,EAAGC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACvDzpB,EAAOynQ,EAAap5L,aAAa,EAAG,EAAG,EAAG,GAAGruE,KAC7C,MAAOsV,GACP,OAAOtV,EAGT,OAAgB,IAAZA,EAAK,GACA,KAEFA,GAEX,EA9RA,CAAiC,IA4ajC,YC9dA,IAAM0pS,GAAY,IAAI9hR,WAAW,GAQjC,cAKE,WAAYqhR,EAAQhzF,GAKlBp6M,KAAK8tS,QAAUV,EACf,IAAMlkI,EAAKkkI,EAAOzI,QAMlB3kS,KAAK+tS,SAAW7kI,EAAG65H,gBAMnB/iS,KAAKguS,aAAe9kI,EAAGg6H,oBAMvBljS,KAAK6pP,MAAQzvC,GAAY,CAAC,EAAG,GAM7Bp6M,KAAKiuS,MAAQ,IAAIliR,WAAW,GAM5B/rB,KAAKkuS,iBAAkB,EAEvBluS,KAAKmuS,cA8HT,OArHE,YAAAhvK,QAAA,SAAQtqG,GACF2tB,EAAO3tB,EAAM70B,KAAK6pP,SAGtB7pP,KAAK6pP,MAAM,GAAKh1N,EAAK,GACrB70B,KAAK6pP,MAAM,GAAKh1N,EAAK,GACrB70B,KAAKmuS,gBAQP,YAAA7qF,QAAA,WACE,OAAOtjN,KAAK6pP,OASd,YAAAukD,gBAAA,WACEpuS,KAAKkuS,iBAAkB,GASzB,YAAAG,QAAA,WACE,GAAIruS,KAAKkuS,gBAAiB,CACxB,IAAMr5Q,EAAO70B,KAAK6pP,MACZ3gF,EAAKlpK,KAAK8tS,QAAQnJ,QAExBz7H,EAAG67H,gBAAgB77H,EAAG87H,YAAahlS,KAAKguS,cACxC9kI,EAAGolI,WACD,EACA,EACAz5Q,EAAK,GACLA,EAAK,GACLq0I,EAAGi8H,KACHj8H,EAAGk8H,cACHplS,KAAKiuS,OAEPjuS,KAAKkuS,iBAAkB,EAEzB,OAAOluS,KAAKiuS,OAYd,YAAAM,UAAA,SAAU5gR,EAAGC,GACX,GAAID,EAAI,GAAKC,EAAI,GAAKD,EAAI3tB,KAAK6pP,MAAM,IAAMj8N,GAAK5tB,KAAK6pP,MAAM,GAKzD,OAJAgkD,GAAU,GAAK,EACfA,GAAU,GAAK,EACfA,GAAU,GAAK,EACfA,GAAU,GAAK,EACRA,GAGT7tS,KAAKquS,UACL,IAAMvkR,EACJvoB,KAAKonD,MAAMh7B,IAAM3tB,KAAK6pP,MAAM,GAAKtoP,KAAKonD,MAAM/6B,GAAK,GAAK5tB,KAAK6pP,MAAM,GAKnE,OAJAgkD,GAAU,GAAK7tS,KAAKiuS,MAAc,EAARnkR,GAC1B+jR,GAAU,GAAK7tS,KAAKiuS,MAAc,EAARnkR,EAAY,GACtC+jR,GAAU,GAAK7tS,KAAKiuS,MAAc,EAARnkR,EAAY,GACtC+jR,GAAU,GAAK7tS,KAAKiuS,MAAc,EAARnkR,EAAY,GAC/B+jR,IAMT,YAAAjD,WAAA,WACE,OAAO5qS,KAAK+tS,UAMd,YAAApD,eAAA,WACE,OAAO3qS,KAAKguS,cAMd,YAAAG,YAAA,WACE,IAAMt5Q,EAAO70B,KAAK6pP,MACZ3gF,EAAKlpK,KAAK8tS,QAAQnJ,QAExB3kS,KAAK+tS,SAAW/tS,KAAK8tS,QAAQ/K,cAAcluQ,EAAM,KAAM70B,KAAK+tS,UAE5D7kI,EAAG67H,gBAAgB77H,EAAG87H,YAAahlS,KAAKguS,cACxC9kI,EAAGtlF,SAAS,EAAG,EAAG/uD,EAAK,GAAIA,EAAK,IAChCq0I,EAAG48H,qBACD58H,EAAG87H,YACH97H,EAAG68H,kBACH78H,EAAGo8H,WACHtlS,KAAK+tS,SACL,GAGF/tS,KAAKiuS,MAAQ,IAAIliR,WAAW8I,EAAK,GAAKA,EAAK,GAAK,IAEpD,EAzKA,GA2KA,Y,ifCkkBA,SAhoBA,YAKE,WAAYrwB,EAAO7E,GAAnB,WACQ+kS,EAAW/kS,EAAQ+kS,UAAY,GAC/B8J,E1N/FD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G0NgGrB9J,EAASoD,IAAoC0G,G,EAE7C,YAAMhqS,EAAO,CACXkgS,SAAUA,EACV8E,cAAe7pS,EAAQ6pS,iBACvB,MAEG78O,OAAQ,EAEb,EAAK8hP,iBAAmB,EAExB,EAAKC,gBAAkB,IAAI,GAAiBjN,GAAcE,IAC1D,EAAKgN,mBAAqB,IAAI,GAAiBlN,GAAcE,IAC7D,EAAKiN,eAAiB,IAAI,GACxBlN,GACAC,IAMF,EAAKkN,cAAgBlvS,EAAQwjS,aAK7B,EAAK2L,gBAAkBnvS,EAAQ6jS,eAM/B,EAAKuL,SAML,EAAKC,wBACHrvS,EAAQsvS,oBAAqBtvS,EAAQuvS,iBAKvC,EAAKC,iBAAmBxvS,EAAQuvS,gBAKhC,EAAKE,mBAAqBzvS,EAAQsvS,kBAMlC,EAAKI,YAEL,IAAMC,EAAmB3vS,EAAQ+I,WAC7B/I,EAAQ+I,WAAWpK,KAAI,SAAUixS,GAC/B,MAAO,CACL1mS,KAAM,KAAO0mS,EAAU1mS,KACvBgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,UAGxB,GAOJ,EAAK5wD,WAAa,CAChB,CACEG,KAAM,aACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,OAEtB,CACEzwD,KAAM,UACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,QAEtBjxD,OAAOinS,GAMT,EAAKE,uBAAyB,CAC5B,CACE3mS,KAAM,aACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,OAEtB,CACEzwD,KAAM,UACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,OAEtB,CACEzwD,KAAM,aACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,OAEtB,CACEzwD,KAAM,eACNgsB,KAAM,EACN1qB,KAAM49R,GAAczuO,QAEtBjxD,OAAOinS,GAET,EAAKA,iBAAmB3vS,EAAQ+I,WAAa/I,EAAQ+I,WAAa,GAElE,EAAKy3M,gBxN/CA,CAACnqJ,EAAAA,EAAUA,EAAAA,GAAU,KAAW,KwNwDrC,EAAKy5O,kBAAoBjB,EAOzB,EAAKkB,iB1NlOA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G0NwOrB,EAAKC,uB1NxOA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G0N8OrB,EAAKC,oBAAsB,IAAIpN,aAAa,GAO5C,EAAKqN,uBAAyB,IAAIrN,aAAa,GAM/C,EAAKsN,iBAOL,EAAKC,oBAAsB,EAE3B,EAAKC,QCvSM,WACL,IAAMr1R,EAAS,m1DACf,OAAO,IAAI3B,OAAuB,oBAAT3H,KACrB,sCAAwC,GAAO6G,KAAKyC,EAAQ,UAAUsI,SAAS,UAC/ErK,IAAIC,gBAAgB,IAAIxH,KAAK,CAACsJ,GAAS,CAACxQ,KAAM,6BDmSzC,GACf,EAAK6lS,QAAQpkS,iBACX,UAKA,SAAUi0B,GACR,IAAMowQ,EAAWpwQ,EAAM17B,KACvB,GAAI8rS,EAAS9lS,OAAS8iS,GAAyC,CAC7D,IAAMiD,EAAsBD,EAASC,oBACjCD,EAASjiB,cACXhuR,KAAK2uS,mBAAmBrM,gBAAgB2N,EAASE,cACjDnwS,KAAKotS,OAAOrD,gBAAgB/pS,KAAK2uS,sBAEjC3uS,KAAK0uS,gBAAgBpM,gBAAgB2N,EAASE,cAC9CnwS,KAAKotS,OAAOrD,gBAAgB/pS,KAAK0uS,kBAEnC1uS,KAAK4uS,eAAetM,gBAAgB2N,EAASG,aAC7CpwS,KAAKotS,OAAOrD,gBAAgB/pS,KAAK4uS,gBAEjC5uS,KAAK0vS,iBAAmBQ,EACxBnpH,EACE/mL,KAAK2vS,uBACL3vS,KAAK0vS,kBAEHO,EAASjiB,aACXhuR,KAAK6vS,uBAAyB,IAAIrN,aAChC3iQ,EAAM17B,KAAKksS,qBAGbrwS,KAAK4vS,oBAAsB,IAAIpN,aAC7B3iQ,EAAM17B,KAAKksS,oBAETJ,EAASK,qBAAuBtwS,KAAK+vS,sBACvC/vS,KAAK2sD,OAAQ,IAIjB3sD,KAAK2f,WAAWg0E,YAElBzzC,KAAK,IAQT,EAAKqwP,cAAgB,GAOrB,EAAKC,cAAgB,EAErB,IAAM71R,EAAS,EAAKgF,WAAWwC,Y,OAC/B,EAAKsuR,kBAAoB,CACvBliH,GACE5zK,EACAimQ,GAAgB9B,WAChB,EAAK4xB,0BACL,GAEFniH,GACE5zK,EACAimQ,GAAgB7B,cAChB,EAAK4xB,4BACL,GAEFpiH,GACE5zK,EACAimQ,GAAgB5B,cAChB,EAAK4xB,2BACL,GAEFriH,GACE5zK,EACAimQ,GAAgBjzF,MAChB,EAAKkjH,0BACL,IAGJl2R,EAAO0mQ,eACL,SAAU59Q,GACRzD,KAAKuwS,cAAc1sH,EAAOpgL,IAAY,CACpCA,QAASA,EACT8wB,WAAY9wB,EAAQisL,gBACpBpvL,SAAUmD,EAAQtC,eAEpBnB,KAAKwwS,iBACLtwP,KAAK,I,EAqXb,OA9nBuC,QA6QrC,YAAAytP,mBAAA,WACE3tS,KAAK+uS,SAAW/uS,KAAKotS,OAAO1B,WAC1B1rS,KAAK8uS,gBACL9uS,KAAK6uS,eAGH7uS,KAAKgvS,uBACPhvS,KAAKqvS,YAAcrvS,KAAKotS,OAAO1B,WAC7B1rS,KAAKovS,mBACLpvS,KAAKmvS,kBAGPnvS,KAAK8vS,iBAAmB,IAAI,GAAkB9vS,KAAKotS,UAQvD,YAAAsD,0BAAA,SAA0B7wQ,GACxB,IAAMp8B,EAAUo8B,EAAMp8B,QACtBzD,KAAKuwS,cAAc1sH,EAAOpgL,IAAY,CACpCA,QAASA,EACT8wB,WAAY9wB,EAAQisL,gBACpBpvL,SAAUmD,EAAQtC,eAEpBnB,KAAKwwS,iBAOP,YAAAG,4BAAA,SAA4B9wQ,GAC1B,IAAMp8B,EAAUo8B,EAAMp8B,QACtBzD,KAAKuwS,cAAc1sH,EAAOpgL,IAAY,CACpCA,QAASA,EACT8wB,WAAY9wB,EAAQisL,gBACpBpvL,SAAUmD,EAAQtC,gBAQtB,YAAAyvS,2BAAA,SAA2B/wQ,GACzB,IAAMp8B,EAAUo8B,EAAMp8B,eACfzD,KAAKuwS,cAAc1sH,EAAOpgL,IACjCzD,KAAKwwS,iBAMP,YAAAK,0BAAA,WACE7wS,KAAKuwS,cAAgB,GACrBvwS,KAAKwwS,cAAgB,GAQvB,YAAA/8G,YAAA,SAAYJ,GACV,IAAMnqB,EAAKlpK,KAAKotS,OAAOzI,QACvB3kS,KAAKysQ,UAAUvjG,EAAImqB,GAEnB,IAAM9I,EAAa8I,EAAWb,UAAUjI,WAIlC8qB,EAHQr1M,KAAK2f,WACQwC,YAEK4zK,YAAcxL,EAAWE,WACnDD,EAAmBD,EAAWxjK,YAE9BzL,EAAS+3K,EAAW/3K,OACpBovK,EAAa2qB,EAAazsB,GAAS4B,GAAoB,KACvD0wF,EAAW7lE,EACb9zM,KAAKgjD,MAAMjpC,EAAO,GAAKkvK,EAAiB,IAAME,GAAc,EAC5D,EAEEomH,EAAaz7F,EACf9zM,KAAKonD,OAAOrtC,EAAO,GAAKkvK,EAAiB,IAAME,GAC/C,EAEAywF,EAAQ21B,EACNC,EAAc/wS,KAAK4uS,eAAetrF,UAExC,GAEEtjN,KAAKotS,OAAOhB,wBAAwB/4G,EAAYrzL,KAAKyvS,mBACrDj6N,EAAmBx1E,KAAKyvS,kBAAmBt0B,EAAQzwF,EAAY,GAC/D/E,EAAkB3lL,KAAKyvS,kBAAmBzvS,KAAK2vS,wBAC/C3vS,KAAKotS,OAAOjG,cAAc9zG,GAE1BrzL,KAAKotS,OAAOvC,aAAa,EAAGkG,WACnB51B,EAAQD,GAEnBl7Q,KAAKotS,OAAOnC,aACV53G,EACArzL,KAAKstS,wBACLttS,KAAKutS,0BAEP,IAAMlwO,EAASr9D,KAAKotS,OAAO7mN,YAS3B,OAPIvmF,KAAKgvS,uBACPhvS,KAAKgxS,mBAAmB39G,EAAYy9G,EAAY51B,EAAUxwF,GAC1D1qL,KAAK8vS,iBAAiB1B,mBAGxBpuS,KAAK0sQ,WAAWxjG,EAAImqB,GAEbh2H,GAQT,YAAAuwO,qBAAA,SAAqBv6G,GACnB,IAAM7uL,EAAQxE,KAAK2f,WACbs7P,EAAez2Q,EAAM2d,YACrBqwK,EAAYa,EAAWb,UACvBy+G,GACH59G,EAAWkxB,UAAUtL,MACrB5lB,EAAWkxB,UAAUtL,IAClB+jF,GAAiB,GAAOh9R,KAAKmgN,gBAAiB9sB,EAAW/3K,QACzD41R,EAAgBlxS,KAAKyuS,gBAAkBxzB,EAAajsF,cAM1D,GAJIkiH,IACFlxS,KAAKyuS,gBAAkBxzB,EAAajsF,eAGlCiiH,IAAkBjU,GAAiBkU,GAAgB,CACrD,IAAM3mH,EAAaiI,EAAUjI,WACvBpmI,EAAaquI,EAAUruI,WAEvB46M,EACJv6P,aAAiB+4Q,GAAa/4Q,EAAM+6P,kBAAoB,EACpDjkP,EAAS,EAAO+3K,EAAW/3K,OAAQyjP,EAAe56M,GACxD82N,EAAaiC,aAAa5hQ,EAAQ6oC,EAAYomI,GAE9CvqL,KAAKmxS,gBAAgB99G,GACrBrzL,KAAKmgN,gBAAkB9sB,EAAW/3K,OAAO3Q,QAW3C,OARA3K,KAAKotS,OAAOvG,WAAW7mS,KAAK+uS,UAC5B/uS,KAAKotS,OAAO/C,YAAYh3G,GAGxBrzL,KAAKotS,OAAOpJ,WAAWhkS,KAAK0uS,iBAC5B1uS,KAAKotS,OAAOpJ,WAAWhkS,KAAK4uS,gBAC5B5uS,KAAKotS,OAAOV,iBAAiB1sS,KAAK0I,aAE3B,GAQT,YAAAyoS,gBAAA,SAAgB99G,GAEd,IAAM68G,E1N5gBD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,G0N6gBrBlwS,KAAKotS,OAAOhB,wBAAwB/4G,EAAY68G,GAMhD,IAsBIkB,EAAc9wS,EAtBZ+wS,GACH,EAAIrxS,KAAKsvS,iBAAiBjsS,QAAUrD,KAAKwwS,cAO5C,GALGxwS,KAAK4vS,qBACN5vS,KAAK4vS,oBAAoBvsS,SAAWguS,IAEpCrxS,KAAK4vS,oBAAsB,IAAIpN,aAAa6O,IAE1CrxS,KAAKgvS,qBAAsB,CAC7B,IAAMsC,GACH,EAAItxS,KAAKsvS,iBAAiBjsS,QAAUrD,KAAKwwS,cAEzCxwS,KAAK6vS,wBACN7vS,KAAK6vS,uBAAuBxsS,SAAWiuS,IAEvCtxS,KAAK6vS,uBAAyB,IAAIrN,aAChC8O,IAON,IAIIC,EFzIsBnyS,EACtB21D,EACAqgH,EACAo8H,EEkIEC,EAAY,GACZC,EAAW,GACbC,EAAc,EACdC,EAAW,EAEf,IAAK,IAAMC,KAAc7xS,KAAKuwS,cAK5B,IAHAjwS,GADA8wS,EAAepxS,KAAKuwS,cAAcsB,IAEX,WAEiB,UAAvBvxS,EAAS2J,UAA1B,CAIAwnS,EAAU,GAAKnxS,EAAS0iD,qBAAqB,GAC7CyuP,EAAU,GAAKnxS,EAAS0iD,qBAAqB,GAC7C5yC,EAAe8/R,EAAqBuB,GFrJZryS,EEuJCwyS,EAAW,EFtJlC78O,OAAAA,EACAqgH,OAAAA,EACAo8H,OAAAA,EADAp8H,EAAQ,IACRo8H,EAASp8H,KAFTrgH,EEsJqC28O,GFtJhB,IAGrB,GAAKnwS,KAAKonD,MAAMvpD,EAAKg2K,EAAQA,EAAQA,GAASo8H,EACpDz8O,EAAM,GAAMxzD,KAAKonD,MAAMvpD,EAAKg2K,EAAQA,GAASA,EAASo8H,EACtDz8O,EAAM,GAAMxzD,KAAKonD,MAAMvpD,EAAKg2K,GAASA,EAASo8H,EAC9Cz8O,EAAM,GAAM31D,EAAKg2K,EAASo8H,EEgJtBD,EF/IGx8O,EEiJH/0D,KAAK4vS,oBAAoB+B,KAAiBF,EAAU,GACpDzxS,KAAK4vS,oBAAoB+B,KAAiBF,EAAU,GAIhDzxS,KAAKgvS,uBACPhvS,KAAK6vS,uBAAuB+B,KAAcH,EAAU,GACpDzxS,KAAK6vS,uBAAuB+B,KAAcH,EAAU,GACpDzxS,KAAK6vS,uBAAuB+B,KAAcL,EAAS,GACnDvxS,KAAK6vS,uBAAuB+B,KAAcL,EAAS,GACnDvxS,KAAK6vS,uBAAuB+B,KAAcL,EAAS,GACnDvxS,KAAK6vS,uBAAuB+B,KAAcL,EAAS,GACnDvxS,KAAK6vS,uBAAuB+B,KAAcjqR,OAAOkqR,IAKnD,IADA,IAAIhvS,OAAK,EACAyU,EAAI,EAAGA,EAAItX,KAAKsvS,iBAAiBjsS,OAAQiU,IAChDzU,EAAQ7C,KAAKsvS,iBAAiBh4R,GAAGihB,SAC/B64Q,EAAa3tS,QACb2tS,EAAa78Q,YAEfv0B,KAAK4vS,oBAAoB+B,KAAiB9uS,EACtC7C,KAAKgvS,uBACPhvS,KAAK6vS,uBAAuB+B,KAAc/uS,GAMhD,IAAM8a,EAAU,CACdxT,KAAM8iS,GACNoD,mBAAoBrwS,KAAK4vS,oBAAoBh3O,OAC7Ck5O,sBAAuB9xS,KAAKsvS,iBAAiBjsS,QAU/C,GAPAsa,EAA6B,oBAAIuyR,EACjCvyR,EAA4B,qBAAM3d,KAAK+vS,oBACvC/vS,KAAK2sD,OAAQ,EACb3sD,KAAKgwS,QAAQ72R,YAAYwE,EAAS,CAAC3d,KAAK4vS,oBAAoBh3O,SAC5D54D,KAAK4vS,oBAAsB,KAGvB5vS,KAAKgvS,qBAAsB,CAC7B,IAAM+C,EAAa,CACjB5nS,KAAM8iS,GACNoD,mBAAoBrwS,KAAK6vS,uBAAuBj3O,OAChDk5O,sBAAuB,EAAI9xS,KAAKsvS,iBAAiBjsS,QAEnD0uS,EAAgC,oBAAI7B,EACpC6B,EAAyB,cAAI,EAC7B/xS,KAAKgwS,QAAQ72R,YAAY44R,EAAY,CACnC/xS,KAAK6vS,uBAAuBj3O,SAE9B54D,KAAK6vS,uBAAyB,OAalC,YAAAz6G,2BAAA,SACE3xG,EACA4vG,EACAgC,EACA98J,EACAhP,GAGA,GADA,EAAOvpB,KAAKgvS,qBAAsB,IAC7BhvS,KAAK6vS,uBAAV,CAIA,IAAMz8G,EAAQhjL,EACZijL,EAAW6B,2BACXzxG,EAAW94E,SAGPxG,EAAOnE,KAAK8vS,iBAAiBvB,UAAUn7G,EAAM,GAAK,EAAGA,EAAM,GAAK,GAEhEtpK,EF9NH,SAAuBynD,GAC5B,IAAInyE,EAAK,EACHg2K,EAAQ,IACR48H,EAAO58H,IAKb,OAJAh2K,GAAMmC,KAAKirC,MAAM+kC,EAAM,GAAK6jG,EAAQA,EAAQA,EAAQ48H,GACpD5yS,GAAMmC,KAAKirC,MAAM+kC,EAAM,GAAK6jG,EAAQA,EAAQ48H,GAC5C5yS,GAAMmC,KAAKirC,MAAM+kC,EAAM,GAAK6jG,EAAQ48H,GACpC5yS,EAAMmC,KAAKirC,MAAM+kC,EAAM,GAAKygO,GEuNZC,CADA,CAAC9tS,EAAK,GAAK,IAAKA,EAAK,GAAK,IAAKA,EAAK,GAAK,IAAKA,EAAK,GAAK,MAEhEqP,EAAUxT,KAAK6vS,uBAAuB/lR,GACtC1V,EAAM7S,KAAKonD,MAAMn1C,GAASyP,WAG1Bxf,EADSzD,KAAK2f,WAAWwC,YACR8/P,gBAAgB7tQ,GACvC,OAAI3Q,EACK80B,EAAS90B,EAASzD,KAAK2f,WAAY,WAD5C,IAaF,YAAAqxR,mBAAA,SAAmB39G,EAAYy9G,EAAY51B,EAAUxwF,GAEnD,GAAK1qL,KAAK2uS,mBAAmBrrF,UAA7B,CAIA,IAAI63D,EAAQ21B,EAEZ9wS,KAAK8vS,iBAAiB3wK,QAAQ,CAC5B59H,KAAKonD,MAAM0qI,EAAWx+J,KAAK,GAAK,GAChCtzB,KAAKonD,MAAM0qI,EAAWx+J,KAAK,GAAK,KAGlC70B,KAAKotS,OAAOvG,WAAW7mS,KAAKqvS,aAC5BrvS,KAAKotS,OAAO3C,0BACVp3G,EACArzL,KAAK8vS,kBACL,GAGF9vS,KAAKotS,OAAOpJ,WAAWhkS,KAAK2uS,oBAC5B3uS,KAAKotS,OAAOpJ,WAAWhkS,KAAK4uS,gBAC5B5uS,KAAKotS,OAAOV,iBAAiB1sS,KAAKwvS,wBAElC,EAAG,CACDxvS,KAAKotS,OAAOhB,wBAAwB/4G,EAAYrzL,KAAKyvS,mBACrDj6N,EAAmBx1E,KAAKyvS,kBAAmBt0B,EAAQzwF,EAAY,GAC/D/E,EAAkB3lL,KAAKyvS,kBAAmBzvS,KAAK2vS,wBAC/C3vS,KAAKotS,OAAOjG,cAAc9zG,GAE1B,IAAM09G,EAAc/wS,KAAK4uS,eAAetrF,UACxCtjN,KAAKotS,OAAOvC,aAAa,EAAGkG,WACnB51B,EAAQD,KAMrB,YAAAj3F,gBAAA,WACEjkL,KAAKgwS,QAAQ92R,YACblZ,KAAKirQ,OAAS,KACdjrQ,KAAKywS,kBAAkBlpS,SAAQ,SAAUkB,GACvCmmL,GAAcnmL,MAEhBzI,KAAKywS,kBAAoB,KACzB,YAAMxsH,gBAAe,YAEzB,EA9nBA,CAAuC,I,+dEjFjC,GACE,OADF,GAEM,WAFN,GAGI,SAOJiuH,GAAmB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,QAyR1D,SA5QA,YAIE,WAAYx2G,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAEtCjJ,EAAc,GAAO,GAAI9yL,UAExB8yL,EAAY0/G,gBACZ1/G,EAAY7xL,cACZ6xL,EAAYj1G,YACZi1G,EAAYtwD,Q,EACnB,YAAMswD,IAAY,MAMb2/G,UAAY,KAEjB,EAAKriH,kBAAkB,GAAmB,EAAKsiH,wBAE/C,EAAKC,YAAY3yS,EAAQwyS,SAAWxyS,EAAQwyS,SAAWD,IAEvD,EAAKK,aAAyBnuS,IAAjBzE,EAAQ69E,KAAqB79E,EAAQ69E,KAAO,IAEzD,EAAK8tB,eAA6BlnG,IAAnBzE,EAAQiB,OAAuBjB,EAAQiB,OAAS,GAE/D,IAAMuhI,EAASxiI,EAAQwiI,OAASxiI,EAAQwiI,OAAS,S,OAE/C,EAAKqwK,gBADe,iBAAXrwK,EACc,SAAU1+H,GAC/B,OAAOA,EAAQ+a,IAAI2jH,IAGEA,EAKzB,EAAKw9H,eAAe,M,EA6MxB,OArPsB,QAiDpB,YAAA8yC,QAAA,WACE,OAA8BzyS,KAAKwe,IAAI,KASzC,YAAAk0R,YAAA,WACE,OAAqC1yS,KAAKwe,IAAI,KAShD,YAAApd,UAAA,WACE,OAA8BpB,KAAKwe,IAAI,KAMzC,YAAA6zR,uBAAA,WACEryS,KAAKoyS,UA8KT,SAAwB7pJ,GAOtB,IANA,IAAMj2H,EAAQ,EACRC,EAAS,IACT+/C,EAAU+kH,GAAsB/kK,EAAOC,GAEvC4/Q,EAAW7/N,EAAQ42E,qBAAqB,EAAG,EAAG52H,EAAOC,GACrD5B,EAAO,GAAK43H,EAAOllJ,OAAS,GACzBnB,EAAI,EAAGgiB,EAAKqkI,EAAOllJ,OAAQnB,EAAIgiB,IAAMhiB,EAC5CiwS,EAASQ,aAAazwS,EAAIyuB,EAAM43H,EAAOrmJ,IAMzC,OAHAowE,EAAQK,UAAYw/N,EACpB7/N,EAAQM,SAAS,EAAG,EAAGtgD,EAAOC,GAEvB+/C,EAAQjV,OA5LIu1O,CAAe5yS,KAAK0yS,gBASvC,YAAAH,QAAA,SAAQ/0N,GACNx9E,KAAK8e,IAAI,GAAe0+D,IAS1B,YAAA80N,YAAA,SAAY/pJ,GACVvoJ,KAAK8e,IAAI,GAAmBypI,IAS9B,YAAAj9C,UAAA,SAAU1qG,GACRZ,KAAK8e,IAAI,GAAiBle,IAG5B,YAAAmzL,eAAA,WACE,OAAO,IAAI,GAAyB/zL,KAAM,CACxC87B,UAAW97B,KAAKu8C,eAChB7zC,WAAY,CACV,CACEG,KAAM,SACN0vB,SAAU,SAAU90B,GAClB,IAAM0+H,EAASniI,KAAKwyS,gBAAgB/uS,GACpC,YAAkBW,IAAX+9H,EAAuBwoD,GAAMxoD,EAAQ,EAAG,GAAK,GACpDjiF,KAAKlgD,QAGXmjS,aAAc,o8BAuBdK,eAAgB,+fAchB0L,gBAAiB,8iCA0BjBD,kBAAmB,+kBAmBnBvK,SAAU,CACRmO,OAAQ,WACN,OAA+D,GAAvD7yS,KAAKwe,IAAI,IAAmBxe,KAAKwe,IAAI,MAC7C0hC,KAAKlgD,MACP8yS,YAAa,WACX,OACE9yS,KAAKwe,IAAI,IAAmBjd,KAAK4K,IAAI,EAAGnM,KAAKwe,IAAI,MAEnD0hC,KAAKlgD,OAETwpS,cAAe,CACb,CACEhG,eAAgB,2fAehBkB,SAAU,CACRqO,kBAAmB,WACjB,OAAO/yS,KAAKoyS,WACZlyP,KAAKlgD,MACPgzS,UAAW,WACT,OAAOhzS,KAAKuT,cACZ2sC,KAAKlgD,YAOjB,YAAAq7L,gBAAA,aACF,EArPA,CAAsBkiF,IChDf,SAAS,GAAe7vP,EAAGC,EAAGC,EAAGqlR,GACtC,YAAsB7uS,IAAlB6uS,GACFA,EAAc,GAAKvlR,EACnBulR,EAAc,GAAKtlR,EACnBslR,EAAc,GAAKrlR,EACZqlR,GAEA,CAACvlR,EAAGC,EAAGC,GAUX,SAASslR,GAAUxlR,EAAGC,EAAGC,GAC9B,OAAOF,EAAI,IAAMC,EAAI,IAAMC,EAQtB,SAAS,GAAOy9O,GACrB,OAAO6nC,GAAU7nC,EAAU,GAAIA,EAAU,GAAIA,EAAU,IC1BzD,IAAM8nC,GAAe,CAAC,EAAG,EAAG,GA6C5B,cAIE,WAAYxzS,GnOqLP,IAAkB2H,EAAe8rS,EAChCC,EmO9JAj+F,EACJ,GApBAp1M,KAAKuwL,aAA8BnsL,IAApBzE,EAAQ4wL,QAAwB5wL,EAAQ4wL,QAAU,EAMjEvwL,KAAKy2M,aAAe92M,EAAQmnB,YAC5B,GnOyKqBxf,EmOvKjBtH,KAAKy2M,anOuK2B28F,GmOnKhC,EnOoKAC,EmOvKA,SAAUv4R,EAAGsP,GACX,OAAOA,EAAItP,InOsKSopK,EACrB58K,EAAIyN,OAAM,SAAUu+R,EAAYxpR,GACrC,GAAc,IAAVA,EACF,OAAO,EAET,IAAMrL,EAAM40R,EAAQ/rS,EAAIwiB,EAAQ,GAAIwpR,GACpC,QAAS70R,EAAM,GAAM20R,GAAsB,IAAR30R,OmOxKjC,KAKG9e,EAAQ4zS,QACX,IAAK,IAAIrxS,EAAI,EAAGgiB,EAAKlkB,KAAKy2M,aAAapzM,OAAS,EAAGnB,EAAIgiB,IAAMhiB,EAC3D,GAAKkzM,GAGH,GAAIp1M,KAAKy2M,aAAav0M,GAAKlC,KAAKy2M,aAAav0M,EAAI,KAAOkzM,EAAY,CAClEA,OAAahxM,EACb,YAJFgxM,EAAap1M,KAAKy2M,aAAav0M,GAAKlC,KAAKy2M,aAAav0M,EAAI,GAchElC,KAAKw2M,YAAcpB,EAMnBp1M,KAAKwwL,QAAUxwL,KAAKy2M,aAAapzM,OAAS,EAM1CrD,KAAKqrP,aAA6BjnP,IAAnBzE,EAAQmS,OAAuBnS,EAAQmS,OAAS,KAM/D9R,KAAKwzS,SAAW,UACQpvS,IAApBzE,EAAQ4zS,UACVvzS,KAAKwzS,SAAW7zS,EAAQ4zS,QACxB,EAAOvzS,KAAKwzS,SAASnwS,QAAUrD,KAAKy2M,aAAapzM,OAAQ,KAG3D,IAAMiY,EAAS3b,EAAQ2b,YAERlX,IAAXkX,GAAyBtb,KAAKqrP,SAAYrrP,KAAKwzS,WACjDxzS,KAAKqrP,QAAU,GAAW/vO,IAG5B,GACItb,KAAKqrP,SAAWrrP,KAAKwzS,UAAcxzS,KAAKqrP,UAAYrrP,KAAKwzS,SAC3D,IAOFxzS,KAAKyzS,WAAa,UACQrvS,IAAtBzE,EAAQ+zS,YACV1zS,KAAKyzS,WAAa9zS,EAAQ+zS,UAC1B,EAAO1zS,KAAKyzS,WAAWpwS,QAAUrD,KAAKy2M,aAAapzM,OAAQ,KAO7DrD,KAAK2zS,eACkBvvS,IAArBzE,EAAQo+R,SACJp+R,EAAQo+R,SACP/9R,KAAKyzS,WAEN,KADA3vG,GAEN,GACI9jM,KAAK2zS,WAAa3zS,KAAKyzS,YACtBzzS,KAAK2zS,YAAc3zS,KAAKyzS,WAC3B,IAOFzzS,KAAKikM,aAAqB7/L,IAAXkX,EAAuBA,EAAS,KAM/Ctb,KAAK4zS,gBAAkB,KAMvB5zS,KAAK6zS,SAAW,CAAC,EAAG,GAMpB7zS,KAAK8zS,WAAa,CAAC,EAAG,EAAG,EAAG,QAEN1vS,IAAlBzE,EAAQo0S,MACV/zS,KAAK4zS,gBAAkBj0S,EAAQo0S,MAAMz1S,KAAI,SAAUu2B,EAAMnH,GACvD,IAAM69O,EAAY,IAAI,GACpBhqQ,KAAKqa,IAAI,EAAGiZ,EAAK,IACjBtzB,KAAK4K,IAAI0oB,EAAK,GAAK,GAAI,GACvBtzB,KAAKqa,IAAI,EAAGiZ,EAAK,IACjBtzB,KAAK4K,IAAI0oB,EAAK,GAAK,GAAI,IAEzB,GAAIvZ,EAAQ,CACV,IAAM04R,EAAsBh0S,KAAKu8R,0BAA0BjhR,EAAQoS,GACnE69O,EAAU1jF,KAAOtmL,KAAK4K,IAAI6nS,EAAoBnsH,KAAM0jF,EAAU1jF,MAC9D0jF,EAAUxjF,KAAOxmL,KAAKqa,IAAIo4R,EAAoBjsH,KAAMwjF,EAAUxjF,MAC9DwjF,EAAUzjF,KAAOvmL,KAAK4K,IAAI6nS,EAAoBlsH,KAAMyjF,EAAUzjF,MAC9DyjF,EAAUvjF,KAAOzmL,KAAKqa,IAAIo4R,EAAoBhsH,KAAMujF,EAAUvjF,MAEhE,OAAOujF,IACNvrQ,MACMsb,GACTtb,KAAKi0S,qBAAqB34R,GA0dhC,OA9cE,YAAA44R,iBAAA,SAAiB54R,EAAQqqJ,EAAMptI,GAE7B,IADA,IAAMgzO,EAAYvrQ,KAAKu8R,0BAA0BjhR,EAAQqqJ,GAChDzjK,EAAIqpQ,EAAU1jF,KAAM3jK,EAAKqnP,EAAUxjF,KAAM7lL,GAAKgiB,IAAMhiB,EAC3D,IAAK,IAAIoV,EAAIi0P,EAAUzjF,KAAM/mF,EAAKwqK,EAAUvjF,KAAM1wK,GAAKypF,IAAMzpF,EAC3DihB,EAAS,CAACotI,EAAMzjK,EAAGoV,KAYzB,YAAAwnR,gCAAA,SACEzzB,EACA9yO,EACA47Q,EACA9sH,GAEA,IAAe15J,EAAGC,EACdwmR,EAAkB,KAClB1mR,EAAI29O,EAAU,GAAK,EAOvB,IANyB,IAArBrrQ,KAAKw2M,aACP7oL,EAAI09O,EAAU,GACdz9O,EAAIy9O,EAAU,IAEd+oC,EAAkBp0S,KAAK87R,mBAAmBzwB,EAAWhkF,GAEhD35J,GAAK1tB,KAAKuwL,SAAS,CAYxB,GAAIh4J,EAAS7K,EAXY,IAArB1tB,KAAKw2M,YAGK,GAFZ7oL,EAAIpsB,KAAKonD,MAAMh7B,EAAI,GAEoBA,EADvCC,EAAIrsB,KAAKonD,MAAM/6B,EAAI,GAC0BA,EAAGumR,GAEpCn0S,KAAKu8R,0BACf6X,EACA1mR,EACAymR,IAIF,OAAO,IAEPzmR,EAEJ,OAAO,GAQT,YAAA3G,UAAA,WACE,OAAO/mB,KAAKikM,SAQd,YAAA7S,WAAA,WACE,OAAOpxL,KAAKwwL,SAQd,YAAAW,WAAA,WACE,OAAOnxL,KAAKuwL,SASd,YAAA+3D,UAAA,SAAU56N,GACR,OAAI1tB,KAAKqrP,QACArrP,KAAKqrP,QAELrrP,KAAKwzS,SAAS9lR,IAUzB,YAAAjL,cAAA,SAAciL,GACZ,OAAO1tB,KAAKy2M,aAAa/oL,IAQ3B,YAAAxY,eAAA,WACE,OAAOlV,KAAKy2M,cASd,YAAAmoF,2BAAA,SAA2BvzB,EAAW8oC,EAAe9sH,GACnD,GAAIgkF,EAAU,GAAKrrQ,KAAKwwL,QAAS,CAC/B,GAAyB,IAArBxwL,KAAKw2M,YAAmB,CAC1B,IAAM3uB,EAAsB,EAAfwjF,EAAU,GACjBvjF,EAAsB,EAAfujF,EAAU,GACvB,OAAO,GACLxjF,EACAA,EAAO,EACPC,EACAA,EAAO,EACPqsH,GAGJ,IAAMC,EAAkBp0S,KAAK87R,mBAC3BzwB,EACAhkF,GAAcrnL,KAAK8zS,YAErB,OAAO9zS,KAAKu8R,0BACV6X,EACA/oC,EAAU,GAAK,EACf8oC,GAGJ,OAAO,MAST,YAAAE,6BAAA,SAA6BhpC,EAAW39O,EAAGymR,GACzC,GAAIzmR,EAAI1tB,KAAKwwL,SAAW9iK,EAAI1tB,KAAKuwL,QAC/B,OAAO,KAGT,IAAM+jH,EAAajpC,EAAU,GACvBkpC,EAAalpC,EAAU,GACvBmpC,EAAanpC,EAAU,GAE7B,GAAI39O,IAAM4mR,EACR,OAAO,GACLC,EACAC,EACAD,EACAC,EACAL,GAIJ,GAAIn0S,KAAKw2M,YAAa,CACpB,IAAMx0E,EAASzgI,KAAKs5B,IAAI76B,KAAKw2M,YAAa9oL,EAAI4mR,GACxCzsH,EAAOtmL,KAAKonD,MAAM4rP,EAAavyK,GAC/B8lD,EAAOvmL,KAAKonD,MAAM6rP,EAAaxyK,GACrC,OAAIt0G,EAAI4mR,EACC,GAAwBzsH,EAAMA,EAAMC,EAAMA,EAAMqsH,GAKlD,GAAwBtsH,EAFlBtmL,KAAKonD,MAAMq5E,GAAUuyK,EAAa,IAAM,EAEVzsH,EAD9BvmL,KAAKonD,MAAMq5E,GAAUwyK,EAAa,IAAM,EACEL,GAGzD,IAAMC,EAAkBp0S,KAAK87R,mBAAmBzwB,EAAWrrQ,KAAK8zS,YAChE,OAAO9zS,KAAKu8R,0BAA0B6X,EAAiB1mR,EAAGymR,IAU5D,YAAAM,mBAAA,SAAmB/mR,EAAG69O,EAAWlkF,GAC/B,IAAMv1K,EAAS9R,KAAKsoP,UAAU56N,GACxBy2B,EAAankD,KAAKyiB,cAAciL,GAChCqwQ,EAAWt/E,GAAOz+M,KAAK28R,YAAYjvQ,GAAI1tB,KAAK6zS,UAC5ChsH,EAAO/1K,EAAO,GAAKy5P,EAAU1jF,KAAOk2G,EAAS,GAAK55O,EAClD4jI,EAAOj2K,EAAO,IAAMy5P,EAAUxjF,KAAO,GAAKg2G,EAAS,GAAK55O,EAG9D,OAAOgkI,GAAeN,EAFT/1K,EAAO,GAAKy5P,EAAUzjF,KAAOi2G,EAAS,GAAK55O,EAEtB4jI,EADrBj2K,EAAO,IAAMy5P,EAAUvjF,KAAO,GAAK+1G,EAAS,GAAK55O,EAChBkjI,IAUhD,YAAAk1G,0BAAA,SAA0BjhR,EAAQoS,EAAGymR,GACnC,IAAM9oC,EAAY8nC,GAClBnzS,KAAK00S,uBAAuBp5R,EAAO,GAAIA,EAAO,GAAIoS,GAAG,EAAO29O,GAC5D,IAAMxjF,EAAOwjF,EAAU,GACjBvjF,EAAOujF,EAAU,GAEvB,OADArrQ,KAAK00S,uBAAuBp5R,EAAO,GAAIA,EAAO,GAAIoS,GAAG,EAAM29O,GACpD,GACLxjF,EACAwjF,EAAU,GACVvjF,EACAujF,EAAU,GACV8oC,IAQJ,YAAAzT,mBAAA,SAAmBr1B,GACjB,IAAMv5P,EAAS9R,KAAKsoP,UAAU+iB,EAAU,IAClClnN,EAAankD,KAAKyiB,cAAc4oP,EAAU,IAC1C0yB,EAAWt/E,GAAOz+M,KAAK28R,YAAYtxB,EAAU,IAAKrrQ,KAAK6zS,UAC7D,MAAO,CACL/hS,EAAO,IAAMu5P,EAAU,GAAK,IAAO0yB,EAAS,GAAK55O,EACjDryC,EAAO,IAAMu5P,EAAU,GAAK,IAAO0yB,EAAS,GAAK55O,IAYrD,YAAA23O,mBAAA,SAAmBzwB,EAAWhkF,GAC5B,IAAMv1K,EAAS9R,KAAKsoP,UAAU+iB,EAAU,IAClClnN,EAAankD,KAAKyiB,cAAc4oP,EAAU,IAC1C0yB,EAAWt/E,GAAOz+M,KAAK28R,YAAYtxB,EAAU,IAAKrrQ,KAAK6zS,UACvDhsH,EAAO/1K,EAAO,GAAKu5P,EAAU,GAAK0yB,EAAS,GAAK55O,EAChD2jI,EAAOh2K,EAAO,IAAMu5P,EAAU,GAAK,GAAK0yB,EAAS,GAAK55O,EAG5D,OAAOgkI,GAAeN,EAAMC,EAFfD,EAAOk2G,EAAS,GAAK55O,EACrB2jI,EAAOi2G,EAAS,GAAK55O,EACYkjI,IAchD,YAAAstH,kCAAA,SAAkClxN,EAAYt/B,EAAY8uP,GACxD,OAAOjzS,KAAK40S,gCACVnxN,EAAW,GACXA,EAAW,GACXt/B,GACA,EACA8uP,IAiBJ,YAAA2B,gCAAA,SACEjnR,EACAC,EACAu2B,EACA0wP,EACA5B,GAEA,IAAMvlR,EAAI1tB,KAAKq8R,kBAAkBl4O,GAC3B5Z,EAAQ4Z,EAAankD,KAAKyiB,cAAciL,GACxC5b,EAAS9R,KAAKsoP,UAAU56N,GACxBqwQ,EAAWt/E,GAAOz+M,KAAK28R,YAAYjvQ,GAAI1tB,KAAK6zS,UAE9CU,EAAchqQ,GAAS5c,EAAI7b,EAAO,IAAOqyC,EAAa45O,EAAS,GAC/DyW,EAAcjqQ,GAASz4B,EAAO,GAAK8b,GAAMu2B,EAAa45O,EAAS,GAUnE,OARI8W,GACFN,EAAahwP,GAAKgwP,EA5fP,GA4f+B,EAC1CC,EAAajwP,GAAKiwP,EA7fP,GA6f+B,IAE1CD,EAAa5rP,GAAM4rP,EA/fR,GAggBXC,EAAa7rP,GAAM6rP,EAhgBR,IAmgBN,GAAwB9mR,EAAG6mR,EAAYC,EAAYvB,IAkB5D,YAAAyB,uBAAA,SAAuB/mR,EAAGC,EAAGF,EAAGmnR,EAA2B5B,GACzD,IAAMnhS,EAAS9R,KAAKsoP,UAAU56N,GACxBy2B,EAAankD,KAAKyiB,cAAciL,GAChCqwQ,EAAWt/E,GAAOz+M,KAAK28R,YAAYjvQ,GAAI1tB,KAAK6zS,UAE9CU,GAAc5mR,EAAI7b,EAAO,IAAMqyC,EAAa45O,EAAS,GACrDyW,GAAc1iS,EAAO,GAAK8b,GAAKu2B,EAAa45O,EAAS,GAUzD,OARI8W,GACFN,EAAahwP,GAAKgwP,EA9hBP,GA8hB+B,EAC1CC,EAAajwP,GAAKiwP,EA/hBP,GA+hB+B,IAE1CD,EAAa5rP,GAAM4rP,EAjiBR,GAkiBXC,EAAa7rP,GAAM6rP,EAliBR,IAqiBN,GAAwB9mR,EAAG6mR,EAAYC,EAAYvB,IAW5D,YAAApV,yBAAA,SAAyBp6M,EAAY/1D,EAAGulR,GACtC,OAAOjzS,KAAK00S,uBACVjxN,EAAW,GACXA,EAAW,GACX/1D,GACA,EACAulR,IAQJ,YAAA6B,uBAAA,SAAuBzpC,GACrB,OAAOrrQ,KAAKy2M,aAAa40D,EAAU,KAWrC,YAAAsxB,YAAA,SAAYjvQ,GACV,OAAI1tB,KAAK2zS,UACA3zS,KAAK2zS,UAEL3zS,KAAKyzS,WAAW/lR,IAQ3B,YAAAqnR,iBAAA,SAAiBrnR,GACf,OAAK1tB,KAAK4zS,gBAKD5zS,KAAK4zS,gBAAgBlmR,GAJrB1tB,KAAKikM,QACRjkM,KAAKu8R,0BAA0Bv8R,KAAKikM,QAASv2K,GAC7C,MAuBR,YAAA2uQ,kBAAA,SAAkBl4O,EAAYm6J,GAM5B,OAAO3zB,GALGxG,EACRnkL,KAAKy2M,aACLtyJ,EACAm6J,GAAiB,GAEHt+M,KAAKuwL,QAASvwL,KAAKwwL,UASrC,YAAAkuG,4BAAA,SAA4BrzB,EAAWznL,GACrC,OAAO0uH,GACL1uH,EACA,EACAA,EAASvgF,OACT,EACArD,KAAK87R,mBAAmBzwB,KAQ5B,YAAA4oC,qBAAA,SAAqB34R,GAGnB,IAFA,IAAMjY,EAASrD,KAAKy2M,aAAapzM,OAC3B2xS,EAAiB,IAAIl0S,MAAMuC,GACxBqqB,EAAI1tB,KAAKuwL,QAAS7iK,EAAIrqB,IAAUqqB,EACvCsnR,EAAetnR,GAAK1tB,KAAKu8R,0BAA0BjhR,EAAQoS,GAE7D1tB,KAAK4zS,gBAAkBoB,GAE3B,EA/mBA,GAinBA,Y,+dC7mBA,eAIE,WAAYr1S,GAAZ,MACE,YAAM,CACJ0nN,aAAc1nN,EAAQ0nN,aACtB/8B,MAAO3qL,EAAQ2qL,SACf,K,OAMF,EAAKnmI,gBAAa//C,EAMlB,EAAKigD,cAAgCjgD,IAArBzE,EAAQ0kD,SAAyB1kD,EAAQ0kD,SAAW,GAMpE,EAAKmqB,YAAc7uE,EAAQ6uE,aAAe,EAM1C,EAAKymO,mBAAqB,EAM1B,EAAKnmS,SAAW,GAOhB,EAAKs1Q,iBACHzkR,EAAQykR,kBACR,SAAU3gR,GACR,IAAMnD,EAAiCmD,EAAQtC,cAE/C,OADA,EAA6B,SAAtBb,EAAS2J,UAAsB,IAC/B3J,GAOX,EAAK40S,qBAAuBv1S,EAAQw1S,cAMpC,EAAKx6R,OAAS,KAKd,EAAKy6R,cAAgB,EAAK5lR,QAAQ0wB,KAAK,GAEvC,EAAKm1P,eAAe,EAAKhxP,SAAU,EAAKmqB,aACxC,EAAKukH,UAAUpzL,EAAQgb,QAAU,M,EA0LrC,OAjQsB,QA+EpB,YAAAkmC,MAAA,SAAMogO,GACJjhR,KAAK8O,SAASzL,OAAS,EACvB,YAAMw9C,MAAK,UAACogO,IAQd,YAAAl+N,YAAA,WACE,OAAO/iD,KAAKqkD,UAQd,YAAAliC,UAAA,WACE,OAAOniB,KAAK2a,QAQd,YAAAuiQ,aAAA,SAAa5hQ,EAAQ6oC,EAAYomI,GAC/BvqL,KAAK2a,OAAOuiQ,aAAa5hQ,EAAQ6oC,EAAYomI,GACzCpmI,IAAenkD,KAAKmkD,aACtBnkD,KAAKmkD,WAAaA,EAClBnkD,KAAKwvB,YAST,YAAA8lR,YAAA,SAAYjxP,GACVrkD,KAAKq1S,eAAehxP,EAAUrkD,KAAKwuE,cASrC,YAAA+mO,eAAA,SAAe/mO,GACbxuE,KAAKq1S,eAAer1S,KAAKqkD,SAAUmqB,IAQrC,YAAAgnO,eAAA,WACE,OAAOx1S,KAAKwuE,aAQd,YAAAukH,UAAA,SAAUp4K,GACJ3a,KAAK2a,QACP3a,KAAK2a,OAAOgmC,oBAAoBouI,GAAUhyC,OAAQ/8I,KAAKo1S,eAEzDp1S,KAAK2a,OAASA,EACVA,GACFA,EAAO/O,iBAAiBmjL,GAAUhyC,OAAQ/8I,KAAKo1S,eAEjDp1S,KAAKwvB,WAMP,YAAAA,QAAA,WACExvB,KAAK6gD,QACL7gD,KAAKkR,UACLlR,KAAK63B,YAAY73B,KAAK8O,WAQxB,YAAAumS,eAAA,SAAehxP,EAAUmqB,GACvB,IAAMqG,EACS,IAAbxwB,EAAiB,EAAI9iD,KAAKqa,IAAI4yD,EAAanqB,GAAYA,EACnDsvC,EACJtvC,IAAarkD,KAAKqkD,UAAYrkD,KAAKi1S,qBAAuBpgO,EAC5D70E,KAAKqkD,SAAWA,EAChBrkD,KAAKwuE,YAAcA,EACnBxuE,KAAKi1S,mBAAqBpgO,EACtB8e,GACF3zF,KAAKwvB,WAOT,YAAAte,QAAA,WACE,QAAwB9M,IAApBpE,KAAKmkD,YAA6BnkD,KAAK2a,OAU3C,IAPA,IAAMW,E7N9DD,CAAC06C,EAAAA,EAAUA,EAAAA,GAAU,KAAW,K6N+D/By/O,EAAcz1S,KAAKqkD,SAAWrkD,KAAKmkD,WACnCr1C,EAAW9O,KAAK2a,OAAOikF,cAGvB82M,EAAY,GAETxzS,EAAI,EAAGgiB,EAAKpV,EAASzL,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CACjD,IAAMuB,EAAUqL,EAAS5M,GACzB,KAAM2hL,EAAOpgL,KAAYiyS,GAAY,CACnC,IAAMp1S,EAAWN,KAAKokR,iBAAiB3gR,GACvC,GAAInD,EAAU,CAEZ+nL,GADoB/nL,EAASgB,iBACaga,GAC1C,EAAOA,EAAQm6R,EAAan6R,GAE5B,IAAMq6R,EAAY31S,KAAK2a,OACpB2f,oBAAoBhf,GACpBpW,QAAO,SAAU0wS,GAChB,IAAMxhS,EAAMyvK,EAAO+xH,GACnB,QAAIxhS,KAAOshS,KAGXA,EAAUthS,IAAO,GACV,MAEXpU,KAAK8O,SAAS1G,KAAKpI,KAAKm1S,cAAcQ,EAAWr6R,QAYzD,YAAA65R,cAAA,SAAcrmS,EAAUwM,GAEtB,IADA,IAAMkwM,EAAW,CAAC,EAAG,GACZtpN,EAAI4M,EAASzL,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CAC7C,IAAM,EAAWlC,KAAKokR,iBAAiBt1Q,EAAS5M,IAC5C,EACF0Y,GAAc4wM,EAAU,EAASlqN,kBAEjCwN,EAAS/F,OAAO7G,EAAG,GAGvB,GAAgBspN,EAAU,EAAI18M,EAASzL,QACvC,IAAMwyS,EAAe30S,GAAUoa,GACzBu5D,EAAQ70E,KAAKi1S,mBACb30S,EAAW,IAAI,GAAM,CACzBkrN,EAAS,IAAM,EAAI32I,GAASghO,EAAa,GAAKhhO,EAC9C22I,EAAS,IAAM,EAAI32I,GAASghO,EAAa,GAAKhhO,IAEhD,OAAI70E,KAAKk1S,qBACAl1S,KAAKk1S,qBAAqB50S,EAAUwO,GAEpC,IAAI,GAAQ,CACjBxO,SAAQ,EACRwO,SAAQ,KAIhB,EAjQA,CAAsB,IAmQtB,Y,+dCpFA,SA1NA,YAWE,WACE06L,EACAgsF,EACAC,EACA98E,EACA+G,EACAo2F,EACA7xP,GAPF,WASQyxO,EAAkBlsF,EAAWziL,YAC7Bg1Q,EAAkBvG,EAAWzuQ,YAE7Bi1Q,EAAsBD,EACxBnyG,GAAgB6rG,EAAcsG,GAC9BtG,EAGE/8E,EAAmB2gF,GACvB7vF,EACAgsF,EAHmBt0R,GAAU86R,GAK7BrjF,GAKI8gF,EAAgB,IAAI,GACxBjwF,EACAgsF,EACAwG,EACAtG,ErBzDyB,GqB0DzBh9E,EACAC,GAIIo9F,EAAcD,EADCrc,EAAchB,wBAGjC//E,EACAgH,GAEI7qM,EAAQkhS,EAAc/sD,GAAkBA,GACxCgtD,EAAmBD,EAAcA,EAAY5tD,gBAAkB,E,SAErE,YAAMstC,EAAc98E,EAAkBq9F,EAAkBnhS,IAAM,MAMzDihR,YAAcN,EAMnB,EAAKU,iBAAmBR,EAMxB,EAAK0G,eAAiB3C,EAMtB,EAAKjlF,kBAAoBmE,EAMzB,EAAKs9F,cAAgBxgB,EAMrB,EAAKygB,aAAeH,EAMpB,EAAKI,kBAAoBH,EAMzB,EAAKx3B,aAAev6N,EAMpB,EAAK0lM,QAAU,KAMf,EAAKysD,mBAAqB,K,EAqG9B,OAxN0B,QAyHxB,YAAAnyH,gBAAA,WACMjkL,KAAK6U,OAASm0O,IAChBhpP,KAAKq2S,kBAEP,YAAMpyH,gBAAe,YAMvB,YAAA/2J,SAAA,WACE,OAAOltB,KAAK2pP,SAMd,YAAAznO,cAAA,WACE,OAAOliB,KAAK81R,aAMd,YAAA4G,WAAA,WACE,IAAMthG,EAAcp7L,KAAKk2S,aAAahjH,WACtC,GAAIkI,GAAe4tD,GAAmB,CACpC,IAAM12N,EAAQs2J,GAAS5oL,KAAKi2S,eAAiBj2S,KAAKw0M,kBAC5CjiL,EAASs2J,GAAU7oL,KAAKi2S,eAAiBj2S,KAAKw0M,kBAEpDx0M,KAAK2pP,QAAU9sM,GACbvqB,EACAC,EACAvyB,KAAKm2S,kBACLn2S,KAAKk2S,aAAazzR,gBAClBziB,KAAKk2R,iBACLl2R,KAAKw0M,kBACLx0M,KAAKi2S,cACLj2S,KAAKo8R,eACL,CACE,CACE9gR,OAAQtb,KAAKk2S,aAAanvR,YAC1BgG,MAAO/sB,KAAKk2S,aAAahpR,aAG7B,OACA9oB,EACApE,KAAKw+Q,cAGTx+Q,KAAK6U,MAAQumL,EACbp7L,KAAK2zF,WAMP,YAAAyiC,KAAA,WACE,GAAIp2H,KAAK6U,OAASm0O,GAAiB,CACjChpP,KAAK6U,MAAQm0O,GACbhpP,KAAK2zF,UAEL,IAAMynG,EAAcp7L,KAAKk2S,aAAahjH,WAClCkI,GAAe4tD,IAAqB5tD,GAAe4tD,GACrDhpP,KAAK08R,cAEL18R,KAAKo2S,mBAAqB7nH,GACxBvuL,KAAKk2S,aACLnnH,GAAUhyC,QACV,SAAUh+I,GACR,IAAMq8L,EAAcp7L,KAAKk2S,aAAahjH,WAEpCkI,GAAe4tD,IACf5tD,GAAe4tD,KAEfhpP,KAAKq2S,kBACLr2S,KAAK08R,gBAGT18R,MAEFA,KAAKk2S,aAAa9/K,UAQxB,YAAAigL,gBAAA,WACEznH,GACoD5uL,KAAuB,oBAE3EA,KAAKo2S,mBAAqB,MAE9B,EAxNA,CAA0B,I,+dCTbE,GAMK,iBANLA,GAaG,eAbHA,GAoBK,iBAYlB,eAKE,WAAYnsS,EAAM4iB,GAAlB,MACE,YAAM5iB,IAAK,K,OAOX,EAAK4iB,MAAQA,E,EAEjB,OAfsC,QAetC,EAfA,CAAsC+S,IA+N/B,SAASy2Q,GAAyBxpR,EAAOpb,GACIob,EAAMG,WAAYvb,IAAMA,EAG5E,SArLA,YAIE,WAAYhS,GAAZ,WACMskD,OACyB7/C,IAA3BzE,EAAQ62S,gBAA+B72S,EAAQ62S,e,YACrBpyS,IAAxBzE,EAAQskD,cACVA,EAActkD,EAAQskD,c,EAGxB,YAAM,CACJojK,aAAc1nN,EAAQ0nN,aACtB98B,WAAY5qL,EAAQ4qL,WACpB11K,MAAOlV,EAAQkV,MACfovC,YAAaA,KACb,MAKG51C,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAK4nB,kBACqBryM,IAAxBzE,EAAQmnB,YAA4BnnB,EAAQmnB,YAAc,KAM5D,EAAK2vR,kBAAoB,KAMzB,EAAKC,qBAAuB,E,EAuHhC,OAzK0B,QAwDxB,YAAAxhS,eAAA,WACE,OAAOlV,KAAKy2M,cAQd,YAAAkgG,sBAAA,SAAsBxyP,GACpB,GAAInkD,KAAKy2M,aAAc,CACrB,IAAMhvM,EAAM08K,EAAkBnkL,KAAKy2M,aAActyJ,EAAY,GAC7DA,EAAankD,KAAKy2M,aAAahvM,GAEjC,OAAO08C,GAUT,YAAAj3B,SAAA,SAAS5R,EAAQ6oC,EAAYu7J,EAAYn1B,GACvC,IAAMke,EAAmBzoM,KAAKkiB,gBAC9B,GAEGumL,GACAle,IACD8d,GAAWI,EAAkBle,GAMxB,CACL,GAAIvqL,KAAKy2S,kBAAmB,CAC1B,GACEz2S,KAAK02S,sBAAwB12S,KAAKgvL,eAClCqZ,GAAWroM,KAAKy2S,kBAAkBv0R,gBAAiBqoK,IACnDvqL,KAAKy2S,kBAAkBh0R,iBAAmB0hC,GAC1C,GAAOnkD,KAAKy2S,kBAAkB1vR,YAAazL,GAE3C,OAAOtb,KAAKy2S,kBAEdz2S,KAAKy2S,kBAAkBzyH,UACvBhkL,KAAKy2S,kBAAoB,KAqB3B,OAlBAz2S,KAAKy2S,kBAAoB,IAAI,GAC3BhuG,EACAle,EACAjvK,EACA6oC,EACAu7J,EACA,SAAUpkM,EAAQ6oC,EAAYu7J,GAC5B,OAAO1/M,KAAK42S,iBACVt7R,EACA6oC,EACAu7J,EACAjX,IAEFvoJ,KAAKlgD,MACPA,KAAK4+Q,kBAEP5+Q,KAAK02S,qBAAuB12S,KAAKgvL,cAE1BhvL,KAAKy2S,kBAjCZ,OAHIhuG,IACFle,EAAake,GAERzoM,KAAK42S,iBAAiBt7R,EAAQ6oC,EAAYu7J,EAAYn1B,IA8CjE,YAAAqsH,iBAAA,SAAiBt7R,EAAQ6oC,EAAYu7J,EAAYn1B,GAC/C,OAAO,KAQT,YAAAssH,kBAAA,SAAkBh3Q,GAChB,IACI11B,EADE4iB,EAAsD8S,EAAY,OAExE,OAAQ9S,EAAMmmK,YACZ,KAAK81D,GACHhpP,KAAKkgG,SAAU,EACf/1F,EAAOmsS,GACP,MACF,KAAKttD,GACHhpP,KAAKkgG,SAAU,EACf/1F,EAAOmsS,GACP,MACF,KAAKttD,GACHhpP,KAAKkgG,SAAU,EACf/1F,EAAOmsS,GACP,MACF,QACE,OAEAt2S,KAAKosL,YAAYjiL,IACnBnK,KAAKggC,cAAc,IAAI82Q,GAAiB3sS,EAAM4iB,KAGpD,EAzKA,CAA0B,ICtFnB,IAAM,GAAkB,QCIxB,SAASgqR,GAAa/wO,EAAK9oD,GAChC,IAAM85R,EAAY,GAElB73S,OAAOD,KAAKge,GAAQ3V,SAAQ,SAAUsQ,GAClB,OAAdqF,EAAOrF,SAA6BzT,IAAd8Y,EAAOrF,IAC/Bm/R,EAAU5uS,KAAKyP,EAAI,IAAM4a,mBAAmBvV,EAAOrF,QAGvD,IAAMo/R,EAAKD,EAAU1sS,KAAK,KAK1B,OADA07D,GAA4B,KAF5BA,EAAMA,EAAIz8D,QAAQ,QAAS,KAEjBP,QAAQ,KAAcg9D,EAAM,IAAMA,EAAM,KACrCixO,E,+dCQTC,GAA4B,CAAC,IAAK,KAqCxC,eAIE,WAAYx7G,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAExCz3I,OACyB7/C,IAA3BzE,EAAQ62S,gBAA+B72S,EAAQ62S,e,YACrBpyS,IAAxBzE,EAAQskD,cACVA,EAActkD,EAAQskD,c,EAGxB,YAAM,CACJojK,aAAc1nN,EAAQ0nN,aACtBpjK,YAAaA,EACbsmI,WAAY5qL,EAAQ4qL,WACpBzjK,YAAannB,EAAQmnB,eACrB,MAMG+jO,kBACqBzmP,IAAxBzE,EAAQwtB,YAA4BxtB,EAAQwtB,YAAc,KAM5D,EAAKqyP,KAAO7/Q,EAAQ0V,IAMpB,EAAK+zO,wBAC2BhlP,IAA9BzE,EAAQopP,kBACJppP,EAAQopP,kBACRwtD,GAMN,EAAKY,QAAUx3S,EAAQud,QAAU,GAMjC,EAAKk6R,MAAO,EACZ,EAAKC,aAML,EAAKC,YAAc33S,EAAQ43S,WAM3B,EAAKC,YAA2BpzS,IAAlBzE,EAAQ83S,OAAsB93S,EAAQ83S,MAMpD,EAAKvuD,OAAS,KAMd,EAAKwuD,WAAa,CAAC,EAAG,GAMtB,EAAKv9B,kBAAoB,EAMzB,EAAKw9B,YAA2BvzS,IAAlBzE,EAAQk1E,MAAsBl1E,EAAQk1E,MAAQ,I,EAgVhE,OAzauB,QA0GrB,YAAA+iO,kBAAA,SAAkBn0N,EAAYt/B,EAAYomI,EAAYrtK,GACpD,QAAkB9Y,IAAdpE,KAAKw/Q,KAAT,CAGA,IAAMq4B,EAAgB,GAActtH,GAC9ButH,EAAsB93S,KAAKkiB,gBAE7B41R,GAAuBA,IAAwBD,IACjD1zP,EAAak1O,GACXye,EACAD,EACAp0N,EACAt/B,GAEFs/B,EAAau1D,GAAUv1D,EAAYo0N,EAAeC,IAGpD,IAAMx8R,EAAS0tK,GACbvlG,EACAt/B,EACA,EACA+yP,IAGIa,EAAa,CACjB,QAAW,MACX,QAAW,GACX,QAAW,iBACX,OAAU,YACV,aAAe,EACf,aAAgB/3S,KAAKm3S,QAAgB,QAEvC,GAAOY,EAAY/3S,KAAKm3S,QAASj6R,GAEjC,IAAMyQ,EAAIg7B,IAAO86B,EAAW,GAAKnoE,EAAO,IAAM6oC,EAvLjC,GAwLPv2B,EAAI+6B,IAAOrtC,EAAO,GAAKmoE,EAAW,IAAMt/B,EAxLjC,GA4Lb,OAHA4zP,EAAW/3S,KAAKo3S,KAAO,IAAM,KAAOzpR,EACpCoqR,EAAW/3S,KAAKo3S,KAAO,IAAM,KAAOxpR,EAE7B5tB,KAAKg4S,eACV18R,EACA47R,GACA,EACAY,GAAuBD,EACvBE,KAkBJ,YAAAE,aAAA,SAAa9zP,EAAYjnC,GACvB,QAAkB9Y,IAAdpE,KAAKw/Q,KAAT,CAIA,IAAMu4B,EAAa,CACjB,QAAW,MACX,QAAW,GACX,QAAW,mBACX,OAAU,aAGZ,QAAe3zS,IAAX8Y,QAA4C9Y,IAApB8Y,EAAc,MAAiB,CACzD,IAAM6F,EAAS/iB,KAAKm3S,QAAQp3R,OAE5B,MADuBjf,MAAMC,QAAQgiB,IAA6B,IAAlBA,EAAO1f,QAErD,OAEF00S,EAAkB,MAAIh1R,EAGxB,QAAmB3e,IAAf+/C,EAA0B,CAC5B,IAAM+zP,EAAMl4S,KAAKkiB,gBACbliB,KAAKkiB,gBAAgBQ,mBACrB,EAEJq1R,EAAkB,MAAK5zP,EAAa+zP,EADlB,MAMpB,OAFA,GAAOH,EAAY76R,GAEZ65R,GAAoC/2S,KAAS,KAAG+3S,KASzD,YAAA93R,UAAA,WACE,OAAOjgB,KAAKm3S,SAUd,YAAAP,iBAAA,SAAiBt7R,EAAQ6oC,EAAYu7J,EAAYn1B,GAC/C,QAAkBnmL,IAAdpE,KAAKw/Q,KACP,OAAO,KAGTr7N,EAAankD,KAAK22S,sBAAsBxyP,GAEtB,GAAdu7J,GAAqB1/M,KAAKw3S,aAA+BpzS,IAArBpE,KAAKs3S,cAC3C53F,EAAa,GAGf,IAAMyhF,EAAkBh9O,EAAau7J,EAE/B/+M,EAASO,GAAUoa,GAGnB68R,EAAanvH,GAAkBroL,EAAQwgS,EAAiB,EAAG,CAF/C58O,GAAKqkI,GAASttK,GAAU6lR,EApR7B,GAqRM58O,GAAKskI,GAAUvtK,GAAU6lR,EArR/B,KAkSPiX,EAAgBpvH,GAAkBroL,EAAQwgS,EAAiB,EAAG,CAR/C58O,GAClBvkD,KAAK23S,OAAS/uH,GAASttK,GAAW6lR,EA3RxB,GA8RS58O,GACnBvkD,KAAK23S,OAAS9uH,GAAUvtK,GAAW6lR,EA/RzB,KAuSPp0Q,EAAQ/sB,KAAKkpP,OACnB,GACEn8N,GACA/sB,KAAKm6Q,mBAAqBn6Q,KAAKgvL,eAC/BjiK,EAAMtK,iBAAmB0hC,GACzBp3B,EAAMo7N,iBAAmBzoC,GACzBj4B,GAAe16J,EAAMhG,YAAaoxR,GAElC,OAAOprR,EAGT,IAAM7P,EAAS,CACb,QAAW,MACX,QAAW,GACX,QAAW,SACX,OAAU,YACV,aAAe,GAEjB,GAAOA,EAAQld,KAAKm3S,SAEpBn3S,KAAK03S,WAAW,GAAKlrQ,GACnBo8I,GAASwvH,GAAiBjX,EA5Tf,GA+TbnhS,KAAK03S,WAAW,GAAKlrQ,GACnBq8I,GAAUuvH,GAAiBjX,EAhUhB,GAoUb,IAAM9rR,EAAMrV,KAAKg4S,eACfI,EACAp4S,KAAK03S,WACLh4F,EACAn1B,EACArtK,GAmBF,OAhBAld,KAAKkpP,OAAS,IAAI,GAChBkvD,EACAj0P,EACAu7J,EACArqM,EACArV,KAAK6qP,aACL7qP,KAAKopP,oBAGPppP,KAAKm6Q,kBAAoBn6Q,KAAKgvL,cAE9BhvL,KAAKkpP,OAAOt9O,iBACVmjL,GAAUhyC,OACV/8I,KAAK62S,kBAAkB32P,KAAKlgD,OAGvBA,KAAKkpP,QAQd,YAAAmvD,qBAAA,WACE,OAAOr4S,KAAKopP,oBAYd,YAAA4uD,eAAA,SAAe18R,EAAQuZ,EAAM6qL,EAAYn1B,EAAYrtK,GASnD,GARA,OAAqB9Y,IAAdpE,KAAKw/Q,KAAoB,GAEhCtiQ,EAAOld,KAAKo3S,KAAO,MAAQ,OAAS7sH,EAAWnoK,UAEzC,WAAYpiB,KAAKm3S,UACrBj6R,EAAe,OAAI,IAGH,GAAdwiM,EACF,OAAQ1/M,KAAKs3S,aACX,IAAK,YACH,IAAMvqJ,EAAO,GAAK2yD,EAAa,GAAO,EAClC,mBAAoBxiM,EACtBA,EAAuB,gBAAK,QAAU6vI,EAEtC7vI,EAAuB,eAAI,OAAS6vI,EAEtC,MACF,IAAK,YACH7vI,EAAuB,eAAI,GAAKwiM,EAChC,MACF,IAAK,iBACL,IAAK,OACHxiM,EAAY,IAAI,GAAKwiM,EACrB,MACF,QACE,GAAO,EAAO,GAKpBxiM,EAAc,MAAI2X,EAAK,GACvB3X,EAAe,OAAI2X,EAAK,GAExB,IACItN,EADE68K,EAAkB7Z,EAAW9G,qBASnC,OANEl8J,EADEvnB,KAAKo3S,MAAwC,MAAhChzG,EAAgBx9K,OAAO,EAAG,GAClC,CAACtL,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAEzCA,EAET4B,EAAa,KAAIqK,EAAKjd,KAAK,KAEpBysS,GAAoC/2S,KAAS,KAAGkd,IAQzD,YAAA8e,OAAA,WACE,OAAOh8B,KAAKw/Q,MAQd,YAAA84B,qBAAA,SAAqBvvD,GACnB/oP,KAAKkpP,OAAS,KACdlpP,KAAKopP,mBAAqBL,EAC1B/oP,KAAK2zF,WAQP,YAAAkvL,OAAA,SAAOxtQ,GACDA,GAAOrV,KAAKw/Q,OACdx/Q,KAAKw/Q,KAAOnqQ,EACZrV,KAAKkpP,OAAS,KACdlpP,KAAK2zF,YAST,YAAA4kN,aAAA,SAAar7R,GACX,GAAOld,KAAKm3S,QAASj6R,GACrBld,KAAKq3S,aACLr3S,KAAKkpP,OAAS,KACdlpP,KAAK2zF,WAMP,YAAA0jN,WAAA,WACE,IAAM/nS,EAAUtP,KAAKm3S,QAAiB,SAAK,GAC3Cn3S,KAAKo3S,KjIndF,SAAyBne,EAAIE,GAIlC,IAHA,IAAMqf,GAAM,GAAKvf,GAAI9mR,MAAM,KACrBsmS,GAAM,GAAKtf,GAAIhnR,MAAM,KAElBjQ,EAAI,EAAGA,EAAIX,KAAK4K,IAAIqsS,EAAGn1S,OAAQo1S,EAAGp1S,QAASnB,IAAK,CACvD,IAAMqkB,EAAKjO,SAASkgS,EAAGt2S,IAAM,IAAK,IAC5BskB,EAAKlO,SAASmgS,EAAGv2S,IAAM,IAAK,IAElC,GAAIqkB,EAAKC,EACP,OAAO,EAET,GAAIA,EAAKD,EACP,OAAQ,EAIZ,OAAO,EiImcOmyR,CAAgBppS,EAAS,QAAU,GAEnD,EAzaA,CAAuB,IA2avB,YCnNA,SAvQA,WAIE,WAAYqpS,GAMV34S,KAAK44S,mBACmBx0S,IAAtBu0S,EAAkCA,EAAoB,KAMxD34S,KAAK64S,OAAS,EAMd74S,KAAK84S,SAAW,GAMhB94S,KAAK+4S,QAAU,KAMf/4S,KAAKg5S,QAAU,KAkOnB,OA5NE,YAAA/sH,eAAA,WACE,OAAOjsL,KAAK44S,cAAgB,GAAK54S,KAAKwhM,WAAaxhM,KAAK44S,eAO1D,YAAApY,YAAA,SAAYh4B,GACV,KAAOxoQ,KAAKisL,kBACVjsL,KAAK+hE,OAOT,YAAAlhB,MAAA,WACE7gD,KAAK64S,OAAS,EACd74S,KAAK84S,SAAW,GAChB94S,KAAK+4S,QAAU,KACf/4S,KAAKg5S,QAAU,MAOjB,YAAAC,YAAA,SAAYxwS,GACV,OAAOzI,KAAK84S,SAASr4S,eAAegI,IAStC,YAAAlB,QAAA,SAAQwH,GAEN,IADA,IAAIvB,EAAQxN,KAAK+4S,QACVvrS,GACLuB,EAAEvB,EAAM0rS,OAAQ1rS,EAAM2rS,KAAMn5S,MAC5BwN,EAAQA,EAAM4rS,OASlB,YAAA56R,IAAA,SAAI/V,EAAKizL,GACP,IAAMluL,EAAQxN,KAAK84S,SAASrwS,GAE5B,OADA,OAAiBrE,IAAVoJ,EAAqB,IACxBA,IAAUxN,KAAKg5S,UAERxrS,IAAUxN,KAAK+4S,SACxB/4S,KAAK+4S,QAAgC/4S,KAAK+4S,QAAa,MACvD/4S,KAAK+4S,QAAQM,MAAQ,OAErB7rS,EAAM4rS,MAAMC,MAAQ7rS,EAAM6rS,MAC1B7rS,EAAM6rS,MAAMD,MAAQ5rS,EAAM4rS,OAE5B5rS,EAAM4rS,MAAQ,KACd5rS,EAAM6rS,MAAQr5S,KAAKg5S,QACnBh5S,KAAKg5S,QAAQI,MAAQ5rS,EACrBxN,KAAKg5S,QAAUxrS,GAXNA,EAAM0rS,QAoBjB,YAAAl7Q,OAAA,SAAOv1B,GACL,IAAM+E,EAAQxN,KAAK84S,SAASrwS,GAkB5B,OAjBA,OAAiBrE,IAAVoJ,EAAqB,IACxBA,IAAUxN,KAAKg5S,SACjBh5S,KAAKg5S,QAAgCxrS,EAAW,MAC5CxN,KAAKg5S,UACPh5S,KAAKg5S,QAAQI,MAAQ,OAEd5rS,IAAUxN,KAAK+4S,SACxB/4S,KAAK+4S,QAAgCvrS,EAAW,MAC5CxN,KAAK+4S,UACP/4S,KAAK+4S,QAAQM,MAAQ,QAGvB7rS,EAAM4rS,MAAMC,MAAQ7rS,EAAM6rS,MAC1B7rS,EAAM6rS,MAAMD,MAAQ5rS,EAAM4rS,cAErBp5S,KAAK84S,SAASrwS,KACnBzI,KAAK64S,OACArrS,EAAM0rS,QAMf,YAAA13G,SAAA,WACE,OAAOxhM,KAAK64S,QAMd,YAAAppH,QAAA,WACE,IAEIjiL,EAFEtO,EAAO,IAAI4B,MAAMd,KAAK64S,QACxB32S,EAAI,EAER,IAAKsL,EAAQxN,KAAKg5S,QAASxrS,EAAOA,EAAQA,EAAM6rS,MAC9Cn6S,EAAKgD,KAAOsL,EAAM2rS,KAEpB,OAAOj6S,GAMT,YAAA2tL,UAAA,WACE,IAEIr/K,EAFE2gB,EAAS,IAAIrtB,MAAMd,KAAK64S,QAC1B32S,EAAI,EAER,IAAKsL,EAAQxN,KAAKg5S,QAASxrS,EAAOA,EAAQA,EAAM6rS,MAC9ClrR,EAAOjsB,KAAOsL,EAAM0rS,OAEtB,OAAO/qR,GAMT,YAAAmrR,SAAA,WACE,OAAOt5S,KAAK+4S,QAAQG,QAMtB,YAAAK,YAAA,WACE,OAAOv5S,KAAK+4S,QAAQI,MAOtB,YAAAK,aAAA,WACE,OAAOx5S,KAAKg5S,QAAQG,MAQtB,YAAAM,KAAA,SAAKhxS,GACH,GAAKzI,KAAKi5S,YAAYxwS,GAGtB,OAAOzI,KAAK84S,SAASrwS,GAAKywS,QAM5B,YAAAn3O,IAAA,WACE,IAAMv0D,EAAQxN,KAAK+4S,QAUnB,cATO/4S,KAAK84S,SAAStrS,EAAM2rS,MACvB3rS,EAAM4rS,QACR5rS,EAAM4rS,MAAMC,MAAQ,MAEtBr5S,KAAK+4S,QAAgCvrS,EAAW,MAC3CxN,KAAK+4S,UACR/4S,KAAKg5S,QAAU,QAEfh5S,KAAK64S,OACArrS,EAAM0rS,QAOf,YAAA3vS,QAAA,SAAQd,EAAK5F,GACX7C,KAAKwe,IAAI/V,GACTzI,KAAK84S,SAASrwS,GAAKywS,OAASr2S,GAO9B,YAAAic,IAAA,SAAIrW,EAAK5F,GACP,IAAS4F,KAAOzI,KAAK84S,UAAW,IAChC,IAAMtrS,EAAQ,CACZ2rS,KAAM1wS,EACN2wS,MAAO,KACPC,MAAOr5S,KAAKg5S,QACZE,OAAQr2S,GAEL7C,KAAKg5S,QAGRh5S,KAAKg5S,QAAQI,MAAQ5rS,EAFrBxN,KAAK+4S,QAAUvrS,EAIjBxN,KAAKg5S,QAAUxrS,EACfxN,KAAK84S,SAASrwS,GAAO+E,IACnBxN,KAAK64S,QAQT,YAAA15K,QAAA,SAAQtqG,GACN70B,KAAK44S,cAAgB/jR,GAEzB,EArQA,G,+dCjBA,4B,+CAkCA,OAlCwB,QAItB,YAAA2rQ,YAAA,SAAYl7E,GACV,KAAOtlN,KAAKisL,kBAAkB,CAE5B,GADajsL,KAAKs5S,WACTjtH,WAAYi5B,EACnB,MAEAtlN,KAAK+hE,MAAMC,YAQjB,YAAA03O,mBAAA,WACE,GAAwB,IAApB15S,KAAKwhM,WAAT,CAGA,IACM6pE,ETqCH,SAAiB5iQ,GACtB,OAAOA,EAAI0J,MAAM,KAAK7T,IAAIqpB,QStCNgyR,CADN35S,KAAKw5S,gBAEX9rR,EAAI29O,EAAU,GACpBrrQ,KAAKuH,QACH,SAAU+lB,GACJA,EAAK+9O,UAAU,KAAO39O,IACxB1tB,KAAKg+B,OAAO,GAAO1Q,EAAK+9O,YACxB/9O,EAAK00C,YAEP9hB,KAAKlgD,SAGb,EAlCA,CAAwB,IAoCxB,YCnCA,IAME45S,cAAe,gBAQfC,YAAa,cAOb5oQ,cAAe,iBCPV,SAAS6oQ,GAAiBvvH,GAC/B,IAAI4a,EAAW5a,EAAW0a,qBAK1B,OAJKE,IACHA,EAqIG,SACL5a,EACAwvH,EACAC,EACAC,GAGA,OAvGK,SAAyB3+R,EAAQy+R,EAAaC,EAAcC,GACjE,IAAMlxH,OAAwB3kL,IAAf61S,EAA2BA,EAAa,WAEjDnzR,EAAcozR,GAAsB5+R,EAAQy+R,EAAaC,GAE/D,OAAO,IAAI,GAAS,CAClB1+R,OAAQA,EACRxJ,OAAQg3K,GAAUxtK,EAAQytK,GAC1BjiK,YAAaA,EACbi3Q,SAAUic,IA8FLG,CADQC,GAAqB7vH,GACLwvH,EAAaC,EAAcC,GA5I7CI,CAAoB9vH,GAC/BA,EAAW2a,mBAAmBC,IAEzBA,EA8FT,SAAS+0G,GACP5+R,EACAy+R,EACAC,EACAM,GAiBA,IAfA,IAAM9pH,OAA0BpsL,IAAhB21S,EAA4BA,E/LvHd,G+LyHxBxnR,EAASs2J,GAAUvtK,GACnBgX,EAAQs2J,GAASttK,GAEjByiR,EAAWt/E,QACEr6M,IAAjB41S,EAA6BA,EAAel2G,IAExCxT,EACJgqH,EAAoB,EAChBA,EACA/4S,KAAK4K,IAAImmB,EAAQyrQ,EAAS,GAAIxrQ,EAASwrQ,EAAS,IAEhD16R,EAASmtL,EAAU,EACnB1pK,EAAc,IAAIhmB,MAAMuC,GACrBqqB,EAAI,EAAGA,EAAIrqB,IAAUqqB,EAC5B5G,EAAY4G,GAAK4iK,EAAgB/uL,KAAKs5B,IAAI,EAAGnN,GAE/C,OAAO5G,EA4BF,SAASszR,GAAqB7vH,GAEnC,IAAIjvK,GADJivK,EAAa,GAAcA,IACHxjK,YACxB,IAAKzL,EAAQ,CACX,IAAMi/R,EACH,IAAM,GAAgB,YAAkBhwH,EAAW7nK,mBACtDpH,EAAS6sK,IAAgBoyH,GAAOA,EAAMA,EAAMA,GAE9C,OAAOj/R,E,+dCjIT,eAIE,WAAY3b,GAAZ,MACE,YAAM,CACJ0nN,aAAc1nN,EAAQ0nN,aACtBi3D,wBAAyB3+Q,EAAQ2+Q,wBACjC/zF,WAAY5qL,EAAQ4qL,WACpB11K,MAAOlV,EAAQkV,MACfy1K,MAAO3qL,EAAQ2qL,MACfrmI,YAAatkD,EAAQskD,eACrB,KAKF,EAAK51C,GAKL,EAAKoyC,KAKL,EAAKouI,GAML,EAAK2rH,aAA6Bp2S,IAAnBzE,EAAQ2+O,QAAuB3+O,EAAQ2+O,OAMtD,EAAKm8D,qBACwBr2S,IAA3BzE,EAAQg+R,eAA+Bh+R,EAAQg+R,eAAiB,EAKlE,EAAKx4F,cAAgC/gM,IAArBzE,EAAQwlM,SAAyBxlM,EAAQwlM,SAAW,K,OAGhE,EAAKA,UACPsZ,GAAO,EAAKtZ,SAASw3F,YAAY,EAAKx3F,SAAShU,cAFhC,CAAC,IAAK,MASvB,EAAKupH,UAAY,IAAI,GAAU/6S,EAAQ+rL,WAAa,GAMpD,EAAKivH,QAAU,CAAC,EAAG,GAMnB,EAAKxB,KAAOx5S,EAAQ8I,KAAO,GAM3B,EAAKmyS,YAAc,CACjBhmB,WAAYj1R,EAAQi1R,WACpB3wO,YAAatkD,EAAQskD,aAUvB,EAAKo6O,WAAa1+R,EAAQ0+R,WAAa1+R,EAAQ0+R,WAAa,E,EA0OhE,OAhUyB,QA4FvB,YAAApyG,eAAA,WACE,OAAOjsL,KAAK06S,UAAUzuH,kBAOxB,YAAAu0G,YAAA,SAAYj2G,EAAY+6B,GACtB,IAAMo1F,EAAY16S,KAAK66S,0BAA0BtwH,GAC7CmwH,GACFA,EAAUla,YAAYl7E,IAa1B,YAAAkmD,kBAAA,SAAkBjhF,EAAY78J,EAAG69O,EAAWhzO,GAC1C,IAAMmiR,EAAY16S,KAAK66S,0BAA0BtwH,GACjD,IAAKmwH,EACH,OAAO,EAKT,IAFA,IACIptR,EAAMqyQ,EAAchmR,EADpBklR,GAAU,EAELlxQ,EAAI49O,EAAU1jF,KAAMl6J,GAAK49O,EAAUxjF,OAAQp6J,EAClD,IAAK,IAAIC,EAAI29O,EAAUzjF,KAAMl6J,GAAK29O,EAAUvjF,OAAQp6J,EAClD+xQ,EAAeuT,GAAUxlR,EAAGC,EAAGC,GAC/BjU,GAAS,EACL+gS,EAAUzB,YAAYtZ,KAIxBhmR,GAHA2T,EACEotR,EAAUl8R,IAAImhR,IAEFzsG,aAAe6P,MAE3BppL,GAA4B,IAAnB4e,EAASjL,IAGjB3T,IACHklR,GAAU,GAIhB,OAAOA,GAOT,YAAAb,uBAAA,SAAuBzzG,GACrB,OAAO,GAOT,YAAA8B,OAAA,WACE,OAAOrsL,KAAKm5S,MAQd,YAAA2B,OAAA,SAAOryS,GACDzI,KAAKm5S,OAAS1wS,IAChBzI,KAAKm5S,KAAO1wS,EACZzI,KAAK2zF,YAQT,YAAAwrM,UAAA,SAAU50G,GACR,OAAOvqL,KAAKw6S,SAMd,YAAAtlS,eAAA,WACE,OAAKlV,KAAKmlM,SAGHnlM,KAAKmlM,SAASjwL,iBAFZ,MAcX,YAAAuoR,QAAA,SAAQ/vQ,EAAGC,EAAGC,EAAG8xL,EAAYn1B,GAC3B,OAAO,KAQT,YAAAwwH,YAAA,WACE,OAAO/6S,KAAKmlM,UAOd,YAAAu4F,yBAAA,SAAyBnzG,GACvB,OAAKvqL,KAAKmlM,SAGDnlM,KAAKmlM,SAFL,GAAyB5a,IAWpC,YAAAswH,0BAAA,SAA0BtwH,GACxB,IAAMke,EAAmBzoM,KAAKkiB,gBAK9B,OAJA,EACuB,OAArBumL,GAA6BJ,GAAWI,EAAkBle,GAC1D,IAEKvqL,KAAK06S,WAUd,YAAA9c,kBAAA,SAAkBl+E,GAChB,OAAO1/M,KAAKy6S,iBASd,YAAAnb,iBAAA,SAAiB5xQ,EAAGgyL,EAAYn1B,GAC9B,IjK3QkB11J,EAAMggD,EAAOulI,EiK2QzBjV,EAAWnlM,KAAK09R,yBAAyBnzG,GACzCozG,EAAiB39R,KAAK49R,kBAAkBl+E,GACxCq+E,EAAWt/E,GAAOtZ,EAASw3F,YAAYjvQ,GAAI1tB,KAAK26S,SACtD,OAAsB,GAAlBhd,EACKI,GjK/QSlpQ,EiKiRCkpQ,EjKjRKlpN,EiKiRK8oN,OjKhRdv5R,KADgBg2M,EiKiRcp6M,KAAK26S,WjK/QlDvgG,EAAW,CAAC,EAAG,IAEjBA,EAAS,GAAMvlL,EAAK,GAAKggD,EAAQ,GAAO,EACxCulI,EAAS,GAAMvlL,EAAK,GAAKggD,EAAQ,GAAO,EACjCulI,IiKwRP,YAAA4gG,+BAAA,SAA+B3vC,EAAWsW,GACxC,IAAMp3F,OACenmL,IAAnBu9Q,EAA+BA,EAAiB3hR,KAAKkiB,gBACjDijL,EAAWnlM,KAAK09R,yBAAyBnzG,GAI/C,OAHIvqL,KAAK+1L,YAAcxL,EAAWwa,aAChCsmE,EDzSC,SAAelmE,EAAUkmE,EAAW9gF,GACzC,IAAM78J,EAAI29O,EAAU,GACd1qQ,EAASwkM,EAASu7F,mBAAmBr1B,GACrC7gF,EAAmB4vH,GAAqB7vH,GAC9C,GAAKhD,EAAmBiD,EAAkB7pL,GAQxC,OAAO0qQ,EAPP,IAAM3gF,EAAa9B,GAAS4B,GACtBmK,EAAapzL,KAAKgjD,MACrBimI,EAAiB,GAAK7pL,EAAO,IAAM+pL,GAGtC,OADA/pL,EAAO,IAAM+pL,EAAaiK,EACnBwQ,EAAS04F,yBAAyBl9R,EAAQ+sB,GC+RnC,CAAMy3K,EAAUkmE,EAAW9gF,IZ1PtC,SAA0B8gF,EAAWlmE,GAC1C,IAAMz3K,EAAI29O,EAAU,GACd19O,EAAI09O,EAAU,GACdz9O,EAAIy9O,EAAU,GAEpB,GAAIlmE,EAAShU,aAAezjK,GAAKA,EAAIy3K,EAAS/T,aAC5C,OAAO,EAET,IAAMm6E,EAAYpmE,EAAS4vG,iBAAiBrnR,GAC5C,OAAK69O,GAGIA,EAAU/jF,WAAW75J,EAAGC,GYgPxBqtR,CAAiB5vC,EAAWlmE,GAAYkmE,EAAY,MAO7D,YAAAxqN,MAAA,WACE7gD,KAAK06S,UAAU75P,SAGjB,YAAArxB,QAAA,WACExvB,KAAK6gD,QACL,YAAMrxB,QAAO,YAQf,YAAAoxQ,gBAAA,SAAgBvzJ,EAAWk9C,GACzB,IAAMmwH,EAAY16S,KAAK66S,0BAA0BtwH,GAC7Cl9C,EAAYqtK,EAAU9B,gBACxB8B,EAAU9B,cAAgBvrK,IAY9B,YAAAszJ,QAAA,SAAQjzQ,EAAGC,EAAGC,EAAG28J,KACnB,EAhUA,CAAyB,IAuUzB,eAKE,WAAYpgL,EAAMmjB,GAAlB,MACE,YAAMnjB,IAAK,K,OAOX,EAAKmjB,KAAOA,E,EAEhB,OAfqC,QAerC,EAfA,CAAqCwS,IAiBrC,YChYO,SAASo7Q,GAAmB7xS,EAAU87L,GAC3C,IAAMg2G,EAAS,SACTC,EAAS,SACTC,EAAS,SACTC,EAAa,UACnB,OAAO,SAOKjwC,EAAW3rD,EAAYn1B,GAC/B,OAAK8gF,EAGIhiQ,EACJE,QAAQ4xS,EAAQ9vC,EAAU,GAAGpoP,YAC7B1Z,QAAQ6xS,EAAQ/vC,EAAU,GAAGpoP,YAC7B1Z,QAAQ8xS,EAAQhwC,EAAU,GAAGpoP,YAC7B1Z,QAAQ+xS,GAAY,WACnB,IAAM5tR,EAAI29O,EAAU,GACd1/H,EAAQw5D,EAAS4vG,iBAAiBrnR,GAGxC,OAFA,EAAOi+G,EAAO,KACJA,EAAMk9C,YAAcwiF,EAAU,GAAK,GACpCpoP,mBAXb,GAoCD,SAASs4R,GAA2BC,GACzC,OAAgC,IAA5BA,EAAiBn4S,OACZm4S,EAAiB,GAEnB,SAOKnwC,EAAW3rD,EAAYn1B,GAC/B,GAAK8gF,EAEE,CACL,IAAMriN,EbHP,SAAcqiN,GACnB,OAAQA,EAAU,IAAMA,EAAU,IAAMA,EAAU,GaElC,CAAcA,GAClBvhP,EAAQ,GAAOk/B,EAAGwyP,EAAiBn4S,QACzC,OAAOm4S,EAAiB1xR,GAAOuhP,EAAW3rD,EAAYn1B,KAoBvD,SAASkxH,GAAUpmS,GACxB,IAAM0tB,EAAO,GACTv5B,EAAQ,sBAAsB0I,KAAKmD,GACvC,GAAI7L,EAAO,CAET,IAAMkyS,EAAgBlyS,EAAM,GAAGsnE,WAAW,GACpC6qO,EAAenyS,EAAM,GAAGsnE,WAAW,GACrC08I,OAAQ,EACZ,IAAKA,EAAWkuF,EAAeluF,GAAYmuF,IAAgBnuF,EACzDzqL,EAAK36B,KAAKiN,EAAI9L,QAAQC,EAAM,GAAI8H,OAAO4a,aAAashM,KAEtD,OAAOzqL,EAGT,GADAv5B,EAAQ,kBAAkB0I,KAAKmD,GACpB,CAGT,IADA,IAAM,EAAOiD,SAAS9O,EAAM,GAAI,IACvBtH,EAAIoW,SAAS9O,EAAM,GAAI,IAAKtH,GAAK,EAAMA,IAC9C6gC,EAAK36B,KAAKiN,EAAI9L,QAAQC,EAAM,GAAItH,EAAE+gB,aAEpC,OAAO8f,EAGT,OADAA,EAAK36B,KAAKiN,GACH0tB,E,+dCpFT,eAIE,WAAYpjC,GAAZ,MACE,YAAM,CACJ0nN,aAAc1nN,EAAQ0nN,aACtB37B,UAAW/rL,EAAQ+rL,UACnB4yD,OAAQ3+O,EAAQ2+O,OAChB/zD,WAAY5qL,EAAQ4qL,WACpB11K,MAAOlV,EAAQkV,MACfswL,SAAUxlM,EAAQwlM,SAClBw4F,eAAgBh+R,EAAQg+R,eACxBrzG,MAAO3qL,EAAQ2qL,MACfsqG,WAAYj1R,EAAQi1R,WACpB3wO,YAAatkD,EAAQskD,YACrBx7C,IAAK9I,EAAQ8I,IACb61Q,wBAAyB3+Q,EAAQ2+Q,wBACjC+f,WAAY1+R,EAAQ0+R,cACpB,K,OAMF,EAAKud,yBACH,EAAKC,kBAAoBC,EAAQt7S,UAAUq7S,gBAM7C,EAAKzmB,iBAAmBz1R,EAAQy1R,iBAE5Bz1R,EAAQk8S,kBACV,EAAKA,gBAAkBl8S,EAAQk8S,iBAOjC,EAAK94Q,KAAO,KAERpjC,EAAQojC,KACV,EAAKg5Q,QAAQp8S,EAAQojC,MACZpjC,EAAQ0V,KACjB,EAAKwtQ,OAAOljR,EAAQ0V,KAOtB,EAAK2mS,iBAAmB,G,EAwI5B,OA9LsB,QA8DpB,YAAAC,oBAAA,WACE,OAAOj8S,KAAKo1R,kBAQd,YAAA8mB,mBAAA,WACE,OAAO/8S,OAAOusK,eAAe1rK,MAAM67S,kBAAoB77S,KAAK67S,gBACxD77S,KAAK67S,gBAAgB37P,KAAKlgD,MAC1BA,KAAK67S,iBAUX,YAAAM,QAAA,WACE,OAAOn8S,KAAK+iC,MAQd,YAAA0/J,iBAAA,SAAiB5iK,GACf,IAGI11B,EAHEmjB,EAAoDuS,EAAY,OAChEzrB,EAAMyvK,EAAOv2J,GACbkwQ,EAAYlwQ,EAAK4lK,WAEnBsqG,GAAaz6F,IACf/iM,KAAKg8S,iBAAiB5nS,IAAO,EAC7BjK,EAAOiyS,GAAcxC,eACZxlS,KAAOpU,KAAKg8S,0BACdh8S,KAAKg8S,iBAAiB5nS,GAC7BjK,EACEqzR,GAAaz6F,GACTq5G,GAAcnrQ,cACdusP,GAAaz6F,GACbq5G,GAAcvC,iBACdz1S,GAEIA,MAAR+F,GACFnK,KAAKggC,cAAc,IAAIq8Q,GAAgBlyS,EAAMmjB,KASjD,YAAAgvR,oBAAA,SAAoBlnB,GAClBp1R,KAAK06S,UAAU75P,QACf7gD,KAAKo1R,iBAAmBA,EACxBp1R,KAAK2zF,WASP,YAAA4oN,mBAAA,SAAmBV,EAAiBpzS,GAClCzI,KAAK67S,gBAAkBA,EACvB77S,KAAK06S,UAAUhB,0BACI,IAARjxS,EACTzI,KAAK86S,OAAOryS,GAEZzI,KAAK2zF,WAST,YAAAkvL,OAAA,SAAOxtQ,GACL,IAAM0tB,EAAO04Q,GAAUpmS,GACvBrV,KAAK+iC,KAAOA,EACZ/iC,KAAK+7S,QAAQh5Q,IAQf,YAAAg5Q,QAAA,SAAQh5Q,GACN/iC,KAAK+iC,KAAOA,EACZ,IAAMt6B,EAAMs6B,EAAKz4B,KAAK,MAClBtK,KAAK47S,yBACP57S,KAAKu8S,mBDvJJ,SAA6B/+P,EAAW2nJ,GAG7C,IAFA,IAAMl6L,EAAMuyC,EAAUn6C,OAChBm4S,EAAmB,IAAI16S,MAAMmK,GAC1B/I,EAAI,EAAGA,EAAI+I,IAAO/I,EACzBs5S,EAAiBt5S,GAAKg5S,GAAmB19P,EAAUt7C,GAAIijM,GAEzD,OAAOo2G,GAA2BC,GCiJNgB,CAAoBz5Q,EAAM/iC,KAAKmlM,UAAW18L,GAElEzI,KAAK86S,OAAOryS,IAUhB,YAAAozS,gBAAA,SAAgBxwC,EAAW3rD,EAAYn1B,KAUvC,YAAAo2G,QAAA,SAAQjzQ,EAAGC,EAAGC,GACZ,IAAM+xQ,EAAeuT,GAAUxlR,EAAGC,EAAGC,GACjC5tB,KAAK06S,UAAUzB,YAAYtZ,IAC7B3/R,KAAK06S,UAAUl8R,IAAImhR,IAGzB,EA9LA,CAAsB,IAgMtB,Y,+dClKA,eAIE,WAAYhgS,GAAZ,WACMskD,OACyB7/C,IAA3BzE,EAAQ62S,gBAA+B72S,EAAQ62S,e,YACrBpyS,IAAxBzE,EAAQskD,cACVA,EAActkD,EAAQskD,c,EAGxB,YAAM,CACJojK,aAAc1nN,EAAQ0nN,aACtB37B,UAAW/rL,EAAQ+rL,UACnB4yD,OAAQ3+O,EAAQ2+O,OAChB/zD,WAAY5qL,EAAQ4qL,WACpB11K,MAAOlV,EAAQkV,MACfswL,SAAUxlM,EAAQwlM,SAClBiwF,iBAAkBz1R,EAAQy1R,iBACtBz1R,EAAQy1R,iBACRqnB,GACJ9e,eAAgBh+R,EAAQg+R,eACxBke,gBAAiBl8S,EAAQk8S,gBACzBxmS,IAAK1V,EAAQ0V,IACb0tB,KAAMpjC,EAAQojC,KACdunJ,MAAO3qL,EAAQ2qL,MACfsqG,WAAYj1R,EAAQi1R,WACpB3wO,YAAaA,EACbx7C,IAAK9I,EAAQ8I,IACb61Q,wBAAyB3+Q,EAAQ2+Q,wBACjC+f,WAAY1+R,EAAQ0+R,cACpB,MAMGlxQ,iBACqB/oB,IAAxBzE,EAAQwtB,YAA4BxtB,EAAQwtB,YAAc,KAM5D,EAAKuvR,eACmBt4S,IAAtBzE,EAAQ+8S,UAA0B/8S,EAAQ+8S,UAAY,GAMxD,EAAKC,uBAAyB,GAM9B,EAAKC,sBAAwB,GAM7B,EAAKC,4BAA8Bl9S,EAAQm9S,2BAM3C,EAAKC,0BAA2B,E,EAkUpC,OAvYwB,QA2EtB,YAAA9wH,eAAA,WAIE,GAAIjsL,KAAK06S,UAAUzuH,iBACjB,OAAO,EAEP,IAAK,IAAMxjL,KAAOzI,KAAK28S,uBACrB,GAAI38S,KAAK28S,uBAAuBl0S,GAAKwjL,iBACnC,OAAO,EAIb,OAAO,GAOT,YAAAu0G,YAAA,SAAYj2G,EAAY+6B,GAKtB,IAAM03F,EAAgBh9S,KAAK66S,0BAA0BtwH,GAKrD,IAAK,IAAMnrL,KAHXY,KAAK06S,UAAUla,YACbxgS,KAAK06S,WAAasC,EAAgB13F,EAAY,IAE/BtlN,KAAK28S,uBAAwB,CAC5C,IAAMjC,EAAY16S,KAAK28S,uBAAuBv9S,GAC9Cs7S,EAAUla,YAAYka,GAAasC,EAAgB13F,EAAY,MAQnE,YAAA04E,uBAAA,SAAuBzzG,GACrB,OAEEvqL,KAAKkiB,iBACLqoK,IACC8d,GAAWroM,KAAKkiB,gBAAiBqoK,GAE3B,EAEAvqL,KAAKi9S,aAOhB,YAAAA,UAAA,WACE,OAAO,GAOT,YAAA5wH,OAAA,WACE,IAAI5jL,EAAM,YAAM4jL,OAAM,WAItB,OAHKrsL,KAAK4+Q,mBACRn2Q,GAAO,0BAEFA,GAOT,YAAA02R,UAAA,SAAU50G,GACR,QAEEvqL,KAAKkiB,iBACLqoK,IACC8d,GAAWroM,KAAKkiB,gBAAiBqoK,KAI3B,YAAM40G,UAAS,UAAC50G,IAQ3B,YAAAmzG,yBAAA,SAAyBnzG,GAIvB,IAAM2yH,EAAWl9S,KAAKkiB,gBACtB,IAAIliB,KAAKmlM,UAAc+3G,IAAY70G,GAAW60G,EAAU3yH,GAEjD,CACL,IAAM4yH,EAAUt5H,EAAO0G,GAKvB,OAJM4yH,KAAWn9S,KAAK48S,wBACpB58S,KAAK48S,sBAAsBO,GACzB,GAAyB5yH,IAEtBvqL,KAAK48S,sBAAsBO,GAPlC,OAAOn9S,KAAKmlM,UAehB,YAAA01G,0BAAA,SAA0BtwH,GAIxB,IAAM2yH,EAAWl9S,KAAKkiB,gBACtB,IAAKg7R,GAAY70G,GAAW60G,EAAU3yH,GACpC,OAAOvqL,KAAK06S,UAEZ,IAAMyC,EAAUt5H,EAAO0G,GAMvB,OALM4yH,KAAWn9S,KAAK28S,yBACpB38S,KAAK28S,uBAAuBQ,GAAW,IAAI,GACzCn9S,KAAK06S,UAAU9B,gBAGZ54S,KAAK28S,uBAAuBQ,IAcvC,YAAAC,YAAA,SAAY1vR,EAAGC,EAAGC,EAAG8xL,EAAYn1B,EAAY9hL,GAC3C,IAAM4iQ,EAAY,CAAC39O,EAAGC,EAAGC,GACnByvR,EAAer9S,KAAKg7S,+BACxB3vC,EACA9gF,GAEI+yH,EAAUD,EACZr9S,KAAK67S,gBAAgBwB,EAAc39F,EAAYn1B,QAC/CnmL,EACEkpB,EAAO,IAAIttB,KAAK08S,UACpBrxC,OACYjnQ,IAAZk5S,EAAwBv6G,GAAiBA,QAC7B3+L,IAAZk5S,EAAwBA,EAAU,GAClCt9S,KAAKmtB,YACLntB,KAAKo1R,iBACLp1R,KAAK46S,aAIP,OAFAttR,EAAK7kB,IAAMA,EACX6kB,EAAK1hB,iBAAiBmjL,GAAUhyC,OAAQ/8I,KAAKyiM,iBAAiBviJ,KAAKlgD,OAC5DstB,GAWT,YAAAmwQ,QAAA,SAAQ/vQ,EAAGC,EAAGC,EAAG8xL,EAAYn1B,GAC3B,IAAMke,EAAmBzoM,KAAKkiB,gBAC9B,GAEGumL,GACAle,IACD8d,GAAWI,EAAkBle,GASxB,CACL,IAAMz9J,EAAQ9sB,KAAK66S,0BAA0BtwH,GACvC8gF,EAAY,CAAC39O,EAAGC,EAAGC,GACrBN,OAAI,EACFqyQ,EAAe,GAAOt0B,GACxBv+O,EAAMmsR,YAAYtZ,KACpBryQ,EAAOR,EAAMtO,IAAImhR,IAEnB,IAAMl3R,EAAMzI,KAAKqsL,SACjB,GAAI/+J,GAAQA,EAAK7kB,KAAOA,EACtB,OAAO6kB,EAEP,IAAM2tQ,EAAiBj7R,KAAK09R,yBAAyBj1F,GAC/CyyF,EAAiBl7R,KAAK09R,yBAAyBnzG,GAC/C4wG,EAAmBn7R,KAAKg7S,+BAC5B3vC,EACA9gF,GAEIgzH,EAAU,IAAI,GAClB90G,EACAwyF,EACA1wG,EACA2wG,EACA7vB,EACA8vB,EACAn7R,KAAK49R,kBAAkBl+E,GACvB1/M,KAAKi9S,YACL,SAAUvvR,EAAGC,EAAGC,EAAG8xL,GACjB,OAAO1/M,KAAKw9S,gBAAgB9vR,EAAGC,EAAGC,EAAG8xL,EAAYjX,IACjDvoJ,KAAKlgD,MACPA,KAAK68S,4BACL78S,KAAK+8S,yBACL/8S,KAAK4+Q,kBAWP,OATA2+B,EAAQ90S,IAAMA,EAEV6kB,GACFiwR,EAAQ7oB,YAAcpnQ,EACtBiwR,EAAQxoB,sBACRjoQ,EAAMvjB,QAAQo2R,EAAc4d,IAE5BzwR,EAAMhO,IAAI6gR,EAAc4d,GAEnBA,EAlDT,OAAOv9S,KAAKw9S,gBACV9vR,EACAC,EACAC,EACA8xL,EACAjX,GAAoBle,IA2D1B,YAAAizH,gBAAA,SAAgB9vR,EAAGC,EAAGC,EAAG8xL,EAAYn1B,GACnC,IAAIj9J,EAAO,KACLqyQ,EAAeuT,GAAUxlR,EAAGC,EAAGC,GAC/BnlB,EAAMzI,KAAKqsL,SACjB,GAAKrsL,KAAK06S,UAAUzB,YAAYtZ,IAK9B,IADAryQ,EAAOttB,KAAK06S,UAAUl8R,IAAImhR,IACjBl3R,KAAOA,EAAK,CAInB,IAAMisR,EAAcpnQ,EACpBA,EAAOttB,KAAKo9S,YAAY1vR,EAAGC,EAAGC,EAAG8xL,EAAYn1B,EAAY9hL,GAGrDisR,EAAYxhG,YAAc6P,GAE5Bz1K,EAAKonQ,YAAcA,EAAYA,YAE/BpnQ,EAAKonQ,YAAcA,EAErBpnQ,EAAKynQ,sBACL/0R,KAAK06S,UAAUnxS,QAAQo2R,EAAcryQ,SAnBvCA,EAAOttB,KAAKo9S,YAAY1vR,EAAGC,EAAGC,EAAG8xL,EAAYn1B,EAAY9hL,GACzDzI,KAAK06S,UAAU57R,IAAI6gR,EAAcryQ,GAqBnC,OAAOA,GAQT,YAAAmwR,2BAAA,SAA2B5gQ,GACzB,GAEE78C,KAAK+8S,0BAA4BlgQ,EAFnC,CAOA,IAAK,IAAMz9C,KADXY,KAAK+8S,yBAA2BlgQ,EACf78C,KAAK28S,uBACpB38S,KAAK28S,uBAAuBv9S,GAAIyhD,QAElC7gD,KAAK2zF,YAeP,YAAA+pN,yBAAA,SAAyBnzH,EAAYozH,GAEjC,IAAM/3Q,EAAO,GAAc2kJ,GAC3B,GAAI3kJ,EAAM,CACR,IAAMu3Q,EAAUt5H,EAAOj+I,GACjBu3Q,KAAWn9S,KAAK48S,wBACpB58S,KAAK48S,sBAAsBO,GAAWQ,KAKhD,EAvYA,CAAwB,IA6YxB,SAASlB,GAAwBmB,EAAWjsS,GACQisS,EAAU1wR,WAAYvb,IACtEA,EAGJ,Y,+dCzaA,eAIE,WAAYhS,GAAZ,MACE,YAAM,CACJ2b,OAAQ3b,EAAQ2b,OAChBxJ,OAAQnS,EAAQmS,OAChByhS,QAAS5zS,EAAQ4zS,QACjBzsR,YAAannB,EAAQmnB,YACrBi3Q,SAAUp+R,EAAQo+R,SAClB2V,UAAW/zS,EAAQ+zS,UACnBK,MAAOp0S,EAAQo0S,SACf,K,OAMF,EAAK8J,WAAal+S,EAAQm+S,U,EAmB9B,OAtC2B,QA0BzB,YAAAC,YAAA,SAAYrwR,GACV,OAAO1tB,KAAK69S,WAAWnwR,IAQzB,YAAAswR,aAAA,WACE,OAAOh+S,KAAK69S,YAEhB,EAtCA,CAA2B,I,+dC2B3B,eAIE,WAAYl+S,GAAZ,WACMskD,OACyB7/C,IAA3BzE,EAAQ62S,gBAA+B72S,EAAQ62S,oBACrBpyS,IAAxBzE,EAAQskD,cACVA,EAActkD,EAAQskD,aAKxB,IAAMg6P,OACwB75S,IAA5BzE,EAAQs+S,gBAAgCt+S,EAAQs+S,gBAAkB,MAI9D94G,EAAWxlM,EAAQwlM,SAErBpiK,EAAOpjC,EAAQojC,K,YACN3+B,IAAT2+B,QAAsC3+B,IAAhBzE,EAAQ0V,MAChC0tB,EAAO04Q,GAAU97S,EAAQ0V,O,EAG3B,YAAM,CACJgyM,aAAc1nN,EAAQ0nN,aACtBi3D,wBAAyB3+Q,EAAQ2+Q,wBACjC5yF,UAAW/rL,EAAQ+rL,UACnBv+J,YAAaxtB,EAAQwtB,YACrB82B,YAAaA,EACbsmI,WAAY5qL,EAAQ4qL,WACpBuyH,2BAA4Bn9S,EAAQm9S,2BACpCJ,UAAW/8S,EAAQ+8S,UACnBv3G,SAAUA,EACViwF,iBAAkBz1R,EAAQy1R,iBAC1BuI,eAAgBh+R,EAAQg+R,eACxB56P,KAAMA,EACNunJ,WAAyBlmL,IAAlBzE,EAAQ2qL,OAAsB3qL,EAAQ2qL,MAC7CsqG,WAAYj1R,EAAQi1R,WACpByJ,WAAY1+R,EAAQ0+R,cACpB,MAMGzuD,cAA+BxrO,IAApBzE,EAAQ2P,QAAwB3P,EAAQ2P,QAAU,QAMlE,EAAKiwQ,aAA6Bn7Q,IAAnBzE,EAAQqT,OAAuBrT,EAAQqT,OAAS,aAM/D,EAAKkrS,iBACoB95S,IAAvBzE,EAAQw2O,WAA2Bx2O,EAAQw2O,WAAa,GAM1D,EAAK80B,OAAStrQ,EAAQ6E,MAMtB,EAAK25S,WAAax+S,EAAQwf,UAM1B,EAAKo7M,OAAS56N,EAAQgG,MAStB,EAAKy4S,iBAAmBH,EAExB,EAAKnD,OAAO,EAAKuD,wBAEbt7Q,GAAQA,EAAK1/B,OAAS,IACxB,EAAKw4S,gBAAkBN,GACrBx4Q,EAAKzkC,IAAI,EAAKggT,uBAAuBp+P,KAAK,M,EAmLlD,OAhRmB,QAuGjB,YAAA67P,QAAA,SAAQh5Q,GACN/iC,KAAK+iC,KAAOA,EACZ,IAAMt6B,EAAMs6B,EAAKz4B,KAAK,MACtBtK,KAAKu8S,mBACHhB,GACEx4Q,EAAKzkC,IAAI0B,KAAKs+S,uBAAuBp+P,KAAKlgD,QAE5CyI,IAWJ,YAAA81S,cAAA,WACE,OAAOv+S,KAAKk+S,aAQd,YAAAh8B,UAAA,WACE,OAAOliR,KAAKu/Q,SAQd,YAAA5/P,SAAA,WACE,OAAO3f,KAAKirQ,QAQd,YAAAuzC,aAAA,WACE,OAAOx+S,KAAKm+S,YAQd,YAAAM,mBAAA,WACE,OAAOz+S,KAAKo+S,kBAQd,YAAAj4S,SAAA,WACE,OAAOnG,KAAKu6N,QAQd,YAAAmkF,WAAA,WACE,OAAO1+S,KAAK4vO,UAOd,YAAAyuE,qBAAA,WACE,IAAIn8S,EAAI,EACFuc,EAAM,GACZ,IAAK,IAAMhW,KAAOzI,KAAKk+S,YACrBz/R,EAAIvc,KAAOuG,EAAM,IAAMzI,KAAKk+S,YAAYz1S,GAE1C,OAAOgW,EAAInU,KAAK,MAQlB,YAAAq0S,iBAAA,SAAiBxoE,GACf,GAAOn2O,KAAKk+S,YAAa/nE,GACzBn2O,KAAK86S,OAAO96S,KAAKq+S,yBAOnB,YAAAC,uBAAA,SAAuBj1S,GACrB,IAAM40S,EAAkBj+S,KAAKo+S,iBAIvB9rO,EAAU,CACd,MAAStyE,KAAKirQ,OACd,MAASjrQ,KAAKu6N,OACd,cAAiBv6N,KAAKm+S,YAGD,OAAnBF,GACF,GAAO3rO,EAAS,CACd,QAAW,OACX,QAAW,UACX,QAAWtyE,KAAK4vO,SAChB,OAAU5vO,KAAKu/Q,UAQnBl2Q,EACqB,OAAnB40S,EACIlH,GAAa1tS,EAAUipE,GACvBjpE,EAASE,QAAQ,eAAe,SAAU47C,EAAG//C,GAC3C,OAAOA,EAAEgpB,gBAAiBkkD,EAAUA,EAAQltE,EAAEgpB,eAAiB+2B,KAGvE,IAAMggJ,EACJnlM,KAAa,SAETm2O,EAAan2O,KAAKk+S,YAExB,OAAO,SAOK7yC,EAAW3rD,EAAYn1B,GAC/B,GAAK8gF,EAEE,CACL,IAAM,EAAe,CACnB,WAAclmE,EAAS44G,YAAY1yC,EAAU,IAC7C,QAAWA,EAAU,GACrB,QAAWA,EAAU,IAEvB,GAAO,EAAcl1B,GACrB,IAAI9gO,EAAMhM,EAQV,OANEgM,EADqB,OAAnB4oS,EACIlH,GAAa1hS,EAAK,GAElBA,EAAI9L,QAAQ,eAAe,SAAU47C,EAAG//C,GAC5C,OAAO,EAAaA,SAQlC,EAhRA,CAAmB,IAkRnB,Y,+dC9PA,SA7EA,YASE,WAAYkW,EAAQ6oC,EAAYu7J,EAAYriJ,EAAQuhP,GAApD,WACQ/pS,OACWzQ,IAAfw6S,EAA2B51D,GAAkBA,G,SAE/C,YAAM1tO,EAAQ6oC,EAAYu7J,EAAY7qM,IAAM,MAOvCyqQ,aAAyBl7Q,IAAfw6S,EAA2BA,EAAa,KAMvD,EAAKj1D,QAAUtsL,EAMf,EAAKwhP,OAAS,K,EA2ClB,OA3E0B,QAuCxB,YAAAC,SAAA,WACE,OAAO9+S,KAAK6+S,QAQd,YAAAE,YAAA,SAAYtlS,GACNA,GACFzZ,KAAK6+S,OAASplS,EACdzZ,KAAK6U,MAAQm0O,IAEbhpP,KAAK6U,MAAQm0O,GAEfhpP,KAAK2zF,WAMP,YAAAyiC,KAAA,WACMp2H,KAAK6U,OAASm0O,KAChBhpP,KAAK6U,MAAQm0O,GACbhpP,KAAK2zF,UACL3zF,KAAKs/Q,QAAQt/Q,KAAK++S,YAAY7+P,KAAKlgD,SAOvC,YAAAktB,SAAA,WACE,OAAOltB,KAAK2pP,SAEhB,EA3EA,CAA0B,I,+dCkI1B,SA3FA,YAIE,WAAYjuD,GAAZ,WACQ/7L,EAAU+7L,GAA4B,GAExCz3I,OACyB7/C,IAA3BzE,EAAQ62S,gBAA+B72S,EAAQ62S,e,YACrBpyS,IAAxBzE,EAAQskD,cACVA,EAActkD,EAAQskD,c,EAGxB,YAAM,CACJojK,aAAc1nN,EAAQ0nN,aACtBpjK,YAAaA,EACbsmI,WAAY5qL,EAAQ4qL,WACpBzjK,YAAannB,EAAQmnB,YACrBjS,MAAOlV,EAAQkV,SACf,MAMGmqS,gBAAkBr/S,EAAQs/S,eAM/B,EAAKt1D,QAAU,KAMf,EAAKwwB,kBAAoB,EAMzB,EAAKw9B,YAA2BvzS,IAAlBzE,EAAQk1E,MAAsBl1E,EAAQk1E,MAAQ,I,EA8ChE,OAzFgC,QAqD9B,YAAA+hO,iBAAA,SAAiBt7R,EAAQ6oC,EAAYu7J,EAAYn1B,GAC/CpmI,EAAankD,KAAK22S,sBAAsBxyP,GAExC,IAAIkZ,EAASr9D,KAAK2pP,QAClB,GACEtsL,GACAr9D,KAAKm6Q,mBAAqBn6Q,KAAKgvL,eAC/B3xH,EAAO56C,iBAAmB0hC,GAC1BkZ,EAAO8qL,iBAAmBzoC,GAC1Bj4B,GAAepqH,EAAOt2C,YAAazL,GAEnC,OAAO+hD,EAITysH,GADAxuK,EAASA,EAAO3Q,QACQ3K,KAAK23S,QAC7B,IAEM9iR,EAAO,CAFC+zJ,GAASttK,GAAU6oC,EAEXu7J,EADP72B,GAAUvtK,GAAU6oC,EACQu7J,GAErCw/F,EAAgBl/S,KAAKg/S,gBAAgBt+S,KACzCV,KACAsb,EACA6oC,EACAu7J,EACA7qL,EACA01J,GAQF,OANI20H,IACF7hP,EAAS,IAAI,GAAY/hD,EAAQ6oC,EAAYu7J,EAAYw/F,IAE3Dl/S,KAAK2pP,QAAUtsL,EACfr9D,KAAKm6Q,kBAAoBn6Q,KAAKgvL,cAEvB3xH,GAEX,EAzFA,CAAgC,I,qMCyDhC95D,GAAAA,EAAAA,KAAUtD,GAAAA,EACVsD,GAAAA,EAAAA,KAAUU,GAAAA,EACV,MAAM4tB,GAAmB,GACzBA,GAAiBniB,MAAQyvS,GAAAA,EACzBttR,GAAiBpiB,OAASA,GAAAA,EAC1BoiB,GAAiB7gB,SAAWA,GAAAA,EAC5B6gB,GAAiBxvB,QAAU+8S,GAAAA,EAC3BvtR,GAAiBhiB,WAAawvS,GAAAA,EAC9BxtR,GAAiBjiB,YAAcA,GAAAA,EAC/BiiB,GAAiBjhB,cAAgBA,GAAAA,EACjCihB,GAAiB5hB,aAAeqvS,GAAAA,EAChC/7S,GAAAA,EAAAA,SAAcq+C,GAAAA,EAEdnwC,OAAOk0B,GAAK,GACZA,GAAG/a,QAAUA,EACb+a,GAAG1rB,IAAMA,GACT0rB,GAAG45Q,KAAOA,GACV55Q,GAAG65Q,QAAUA,GACbhgT,GAAAA,oBAA8Bw7N,GAC9Br1L,GAAGnmC,QAAUA,GACbmmC,GAAG85Q,WAAaA,GAChB95Q,GAAG8+K,aAAeA,GAClB9+K,GAAG+5Q,oBAAsBA,GACzB/5Q,GAAGytC,MAAQA,GAEXztC,GAAGovB,MAAQ,CACPtvB,OAAQA,EACRzN,SAAUA,GAGd2N,GAAGu4N,QAAU,CACTC,OAAQA,GAGZx4N,GAAG4rC,MAAQ,CACPs6G,QAASA,GACTP,SAAUA,IAGd3lJ,GAAGg6Q,KAAO,CACNC,UAAWA,IAGfj6Q,GAAG6iM,OAAS,CACRq3E,UAAWA,IAGfl6Q,GAAG76B,QAAU,CACT8pI,YAAaA,GACbkrK,UAAWA,GACXC,KAAMA,GACNC,WAAYA,GACZC,aAAcA,IAGlBt6Q,GAAG0a,OAAS,CACR0uI,UAAWmxH,GACX3xH,OAAQA,GACRK,cAAeA,GACf9rL,UAAW,CACP2nN,aAAcA,KAItB9kL,GAAGrqB,OAAS,CACRstK,SAAUA,GACVC,UAAWA,GACXtB,mBAAoBA,EACpBE,eAAgBA,GAChB7uH,OAAQA,EACRunP,eAAgBA,GAGpBx6Q,GAAGplC,KAAO,CACNmP,MAAOA,GACPG,WAAYA,GACZ2sN,WAAYA,GACZS,gBAAiBA,GACjB56N,QAASA,GACT4N,aAAcA,GACd0vN,mBAAoBA,GACpBpgO,OAAQ6gT,GACRl0L,eAAgBA,GAChBz7G,KAAM,CACF2+L,mBAAoBA,GACpBa,mBAAoBA,GACpBowG,iBtIrKD,SAA0B93H,EAAiBt2J,EAAQ63C,EAAK0+G,GAC7D,IAAIv4F,EAAYksI,GAAiB5zC,EAAiBt2J,EAAQ63C,EAAK0+G,GACzD3lI,EAAK0lI,EAAgBz+G,EAAM0+G,GAAUD,EAAgBt2J,GACrD6wB,EAAKylI,EAAgBz+G,EAAM0+G,EAAS,GAAKD,EAAgBt2J,EAAS,GAExE,OADAg+D,GAAa1uF,KAAKkrC,KAAKoW,EAAKA,EAAKC,EAAKA,MsIqKxCnd,GAAG26Q,cAAgB,CACfj1R,IAAKA,IAGTsa,GAAG3yB,OAAS,CACRxT,QAASA,GACTmoO,QAASA,GACTpwL,IAAKA,GACL+C,KAAMA,GACNC,KAAMA,GACNC,MAAOA,GACPlD,IAAKA,GACLD,IAAKA,GACLF,IAAKA,GACLuD,IAAKA,GACLC,IAAKA,GACL6yE,QAASA,GACT+yL,gBAAiBA,GACjBC,kBAAmBA,GACnBC,iBAAkBA,GAClBC,SAAUA,GACVtiD,IAAK,CACDz1B,YAAaA,GACbL,YAAaA,GACbS,WAAYA,GACZF,oBAAqBA,GACrBJ,aAAcA,GACdS,oBAAqBA,GACrBC,kBAAmBA,GACnBE,qBAAsBA,GACtBL,qBAAsBA,GACtBO,gCAAiCA,KAGzC5jM,GAAG3yB,OAAOxT,QAAQmhT,6BAA+BA,GAEjDh7Q,GAAGg8K,YAAc,CACbi/F,SAAUA,GACVl3N,KAAMA,GACNiiI,QAASA,GACTk1F,UAAWA,GACXC,KAAMA,GACN90B,OAAQA,GACRroJ,OAAQA,GACRo9K,YAAaA,GACbC,gBAAiBA,IAGrBr7Q,GAAGnhC,MAAQ,CACPoO,MAAOA,GACPquS,KAAMA,GACN7tO,MAAO8tO,GACPtvR,OAAQuvR,GACRC,QAASA,IAGbz7Q,GAAG0pJ,WAAa,CACZD,QAASA,IAGbzpJ,GAAGxmC,OAASkiT,GAEZ17Q,GAAGC,KAAO,CACN07Q,gBAAiBA,GACjBC,WAAYA,GACZ15G,yBAA0BA,GAC1BrpL,IAAKA,GACLw6H,UAAWA,GACX6vD,gBAAiBA,GACjBD,aAAcA,GACdvF,MAAOA,GACPr+J,MAAO,CACHa,SCxPD,SAAkBb,GACvB,IAEI9iC,EAAGoV,ElM2V+BqD,EAAQ6rL,EAAag7G,EAASC,EAC9Dj4G,EACAC,EkM/VAi4G,EAAYviT,OAAOD,KAAK8lC,EAAM28Q,MAC9B12S,EAAMy2S,EAAUr+S,OAEtB,IAAKnB,EAAI,EAAGA,EAAI+I,IAAO/I,EAAG,CACxB,IAAMjD,EAAOyiT,EAAUx/S,GACvB,IAAK,GAAIjD,GAAO,CACd,IAAMimC,EAAMF,EAAM28Q,KAAK1iT,GACnB08C,EAAQzW,EAAIyW,MACXA,GAA0B,YAAjBzW,EAAI08Q,WAChBjmQ,EAAQ,YAEV2rJ,GACE,IAAI,GAAW,CACbroM,KAAMA,EACNmlM,gBAAiBl/J,EAAIQ,KACrBk/J,cAAe1/J,EAAI28Q,SACnBlmQ,MAAK,MAKb,IAAKz5C,EAAI,EAAGA,EAAI+I,IAAO/I,EAAG,CACxB,IAAMqnE,EAAQm4O,EAAUx/S,GAClB4/S,EAAQ,GAAIv4O,GAClB,IAAKjyD,EAAI,EAAGA,EAAIrM,IAAOqM,EAAG,CACxB,IAAMkyD,EAAQk4O,EAAUpqS,GAClByqS,EAAQ,GAAIv4O,GAClB,IAAK,GAAaD,EAAOC,GACvB,GAAIxkC,EAAM28Q,KAAKp4O,KAAWvkC,EAAM28Q,KAAKn4O,GACnCq+H,GAAyB,CAACi6G,EAAOC,QAC5B,CACL,IAAM/oK,EAAYh0G,EAAMukC,EAAOC,GlM8TD7uD,EkM5T5BmnS,ElM4ToCt7G,EkM3TpCu7G,ElM2TiDP,EkM1TjDj4G,GAA8Bu4G,EAAOC,EAAO/oK,EAAUwoK,SlM0TIC,EkMzT1Dl4G,GAA8Bw4G,EAAOD,EAAO9oK,EAAUyoK,SlM0T1Dj4G,OAAAA,EACAC,OAAAA,EADAD,EAAa,GAAI7uL,GACjB8uL,EAAW,GAAIjD,GACrB,GACEgD,EACAC,EACAvB,GAAuCs5G,IAEzC,GACE/3G,EACAD,EACAtB,GAAuCu5G,SiM/GvCO,SAAU,CACNV,gBAAiBW,GACjBp8G,YAAaA,KAIrBlgK,GAAGkX,OAAS,CACRqlQ,iBEjMG,SAA0BriR,GAC/B,KAAMA,EAAMyyC,mBAAmBg9L,0BAC7B,MAAM,IAAItwQ,MAAM,sDAIlB,IAUIi+Q,EAVEklC,EAAmBtiR,EAAM42J,sBAAsB,GAC/CpD,EAAaxzJ,EAAMwzJ,WACnBr6C,EAAY2sC,EAChB9lJ,EAAM42J,sBAAsB9rL,QAC5B0oL,EAAW6B,4BAEPmX,EAAmBotE,GACvBpmF,EAAWb,UAAUruI,WACrBg+P,GAGIl5G,EAAiB,KAQvB,OAPIA,IACFg0E,EAAgBt1E,GACdsB,EACA5V,EAAWb,UAAUjI,aAIlB,IAAI,GACT1qJ,EAAMyyC,QACN6vO,EACA9uH,EAAW/3K,OACX09H,EACAq6C,EAAWb,UAAUn+H,SACrBg4I,EACA4wE,IFkKAmlC,UExNG,SAAmB9vO,EAASopH,GACjC,IAAMr+H,EAASiV,EAAQjV,OACjB19D,EAAU+7L,GAA4B,GACtCgkB,EAAa//M,EAAQ+/M,YAAcz6B,EACnCpwJ,EAAOl1B,EAAQk1B,KACjBA,IACFwoC,EAAO/qC,MAAQuC,EAAK,GAAK6qL,EACzBriJ,EAAO9qC,OAASsC,EAAK,GAAK6qL,EAC1BriJ,EAAO13D,MAAM2sB,MAAQuC,EAAK,GAAK,KAC/BwoC,EAAO13D,MAAM4sB,OAASsC,EAAK,GAAK,MAElC,IAAMvZ,EAAS,CAAC,EAAG,EAAG+hD,EAAO/qC,MAAO+qC,EAAO9qC,QACrCymH,EAAYzuG,EnP3CX,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GmP2C6Bm1K,EAAYA,GAChE,OAAO,IAAI,GAAwBptI,EAASotI,EAAYpkM,EAAQ09H,EAAW,IF4MzE+1C,UAAWszH,IAGf18Q,GAAGhrB,OAAS,CACRiX,OAAQ0wR,GACRC,QAASA,GACTC,SAAUA,GACVtrQ,KAAMA,GACNklQ,cAAeA,GACfx7B,gBAAiBA,GACjB6hC,YAAaA,GAEbrvO,MAAO,CACHmjO,yBAA0BA,KAGlC5wQ,GAAGhrB,OAAOu8B,KAAKwrQ,wBHwER,SAAiCC,EAAS1zP,GAC/C,IACMluC,EAAInY,EADK+5S,EAAkB,SAAS,OACnB,SAAUC,EAAK94R,EAAOirC,GAC3C,OAAO6tP,EAAgB,YAAK3zP,EAAc,SAE5C,GAAU,OAANluC,EACF,OAAO,KAET,IACItZ,EADEo7S,EAAiBF,EAAkB,SAAiB,eAItDl7S,EAFAsZ,EAAqB,kBAAE1d,OAAS,EAE1Bw+D,EAAU9gD,EAAqB,kBADnC,eAAgBkuC,EACsB,SAAU2zP,EAAK94R,EAAOirC,GAC5D,IAGM+tP,EAHgBl6S,EAAKi6S,GAAgB,SAAU/jK,GACnD,OAAOA,EAAe,YAAK8jK,EAAmB,iBAEC,aAC3Cd,EAAQ,GAAcgB,GACtBf,EAAQ,GAAc9yP,EAAmB,YAC/C,OAAI6yP,GAASC,EACJ15G,GAAWy5G,EAAOC,GAElBe,GAAgB7zP,EAAmB,YAIN,SAAU2zP,EAAK94R,EAAOirC,GAC5D,OAAO6tP,EAAmB,eAAK3zP,EAAkB,YAI/C,GAEE,IACRxnD,EAAM,GAER,IAAM0X,EAEH4B,EAAqB,kBAAEtZ,GAAqB,cACzCs7S,EAEHhiS,EAAqB,kBAAEtZ,GAA2B,oBAEjDuL,EAAgC+N,EAAU,OAAE,GAC5C,WAAYkuC,IACdj8C,EAASi8C,EAAe,SAE1BxnD,EAAMo6D,EAAU9gD,EAAS,OAAG,SAAU6hS,EAAK94R,EAAOirC,GAChD,MAAI,UAAW9F,EACN2zP,EAAW,OAAK3zP,EAAc,MAE9B2zP,EAAe,cAGhB,IACRn7S,EAAM,GAER,IAAM9B,EAA+Bob,EAAS,MAAEtZ,GAAkB,WAE5D0uO,EAAa,GACf,cAAep1N,GACjBA,EAAa,UAAExZ,SAAQ,SAAUq7S,EAAK94R,EAAOirC,GAC3C,IAAMtsD,EAAMm6S,EAAgB,WACxB//S,EAAQ+/S,EAAa,aACXx+S,IAAVvB,IACFA,EAAQ+/S,EAAW,MAAE,IAEvBzsE,EAAW1tO,GAAO5F,KAItB,IAKI0nL,EAJEy4H,EAAep6S,EADF+5S,EAAkB,SAAiB,eAChB,SAAUC,EAAK94R,EAAOirC,GAC1D,OAAO6tP,EAAgB,YAAKzjS,KAIxBlgB,EAAO+jT,EAA2B,aAIxC,GAHI/jT,IACFsrL,EAAa,GAActrL,IAEzB,eAAgBgwD,EAAQ,CAC1B,IAAMg0P,EAAa,GAAch0P,EAAmB,YAChDg0P,IACG14H,IAAc8d,GAAW46G,EAAY14H,KACxCA,EAAa04H,IAKnB,IAAI34H,GAAQ,EACN44H,EAA2D,MAAhD34H,EAAW9G,qBAAqB78J,OAAO,EAAG,GAEvDnH,EAASujS,EAAa5qS,WAAW,GAGjC+qS,EAAsB,CACxB5qS,WAAY,EACZF,WAAY,EAEZI,WAAYgH,EAAO2jS,YAAc,EACjC5qS,WAAYiH,EAAO4jS,aAAe,GAIpC,GAAIN,EAAc,CAChBI,EAAsBJ,EAAaA,EAAa1/S,OAAS,GACzD,IAAM8hD,EAAIv8C,EACRo6S,EAAa5qS,YACb,SAACkrS,GACC,OAAAA,EAAgBjsS,aAAe8rS,EAAoB/qS,YACnD4qS,EAAa3rS,WAAa,IAAMisS,EAAgBjsS,aAC9C8rS,EAAoB/qS,cAEtB+sC,IACF1lC,EAAS0lC,GAIb,IAAMhB,EACuB,MAA1B1kC,EAAO8jS,iBAA8Bh5H,EAAW7nK,mBAC7C5Q,EAASoxS,EACX,CAACzjS,EAAO+jS,cAAc,GAAI/jS,EAAO+jS,cAAc,IAC/C/jS,EAAO+jS,cACLC,EAAYhkS,EAAOikS,UAAYv/P,EAC/Bw/P,EAAYlkS,EAAOmkS,WAAaz/P,EAClC0/P,EAAkBb,EAA0B,YAC5Ca,GAAmBX,IACrBW,EAAkB,CAChBA,EAAgB,GAChBA,EAAgB,GAChBA,EAAgB,GAChBA,EAAgB,KAGpB,IAAIvoS,EAAS,CACXxJ,EAAO,GAAK2xS,EAAYN,EAAoB5qS,WAE5CzG,EAAO,GAAK6xS,GAAa,EAAIR,EAAoB3qS,YACjD1G,EAAO,GAAK2xS,GAAa,EAAIN,EAAoB1qS,YACjD3G,EAAO,GAAK6xS,EAAYR,EAAoB9qS,YAG9C,QACsBjU,IAApBy/S,IACCp8H,GAAeo8H,EAAiBvoS,GACjC,CACA,IAAMwoS,EAAmB/iS,EAAoB,iBACvCgjS,EAAwB,GAAc,aAAah9R,YAEzD,GADAzL,EAASuoS,EACLC,EACFx5H,EACEw5H,EAAiB,KAAOC,EAAsB,IAC9CD,EAAiB,KAAOC,EAAsB,OAC3C,CACL,IAAMC,EAAuBn7G,GAC3Bg7G,EACAb,EAA2B,aAC3B,aAGF14H,EACE05H,EAAqB,GAAK,OAASD,EAAsB,IACzDC,EAAqB,GAAK,OAASD,EAAsB,IAI/D,IAAM5+G,EDxbD,SACLhmL,EACAkoK,EACA48H,GAGA,IAAMn9R,EAAc,GAEdg3R,EAAY,GAEZvK,EAAU,GAEVG,EAAY,GAEZK,EAAQ,GAERgP,OAAoC3+S,IAArB6/S,EAAiCA,EAAmB,GAWnE15H,EAAa,GADNprK,EAA8B,cAErCylL,EAAgBra,EAAW7nK,mBAE3BwhS,EAAiE,MAAhD35H,EAAW9G,qBAAqB78J,OAAO,EAAG,GAmDjE,OAjDAzH,EAA2B,WAAEgL,MAAK,SAAUrP,EAAGsP,GAC7C,OAAOA,EAA0B,iBAAItP,EAA0B,oBAGjEqE,EAA2B,WAAE5X,SAAQ,SAAUq7S,GAuB7C,KAnBIG,EAAa1/S,OAAS,IACNuF,EAAKm6S,GAAc,SAAUoB,GAC7C,OAAIvB,EAAsB,YAAKuB,EAAwB,aAKT,IAA1CvB,EAAsB,WAAE55S,QAAQ,MAEhCmW,EAA4B,WAAI,IAAMyjS,EAAsB,aAC5DuB,EAAwB,cASX,CACnBrG,EAAU11S,KAAKw6S,EAAsB,YACrC,IAAMz+P,EAC6B,MAAhCy+P,EAA4B,iBAAeh+G,EACxCw/G,EAAYxB,EAAqB,UACjCyB,EAAazB,EAAsB,WACrCsB,EACF3Q,EAAQnrS,KAAK,CACXw6S,EAAyB,cAAE,GAC3BA,EAAyB,cAAE,KAG7BrP,EAAQnrS,KAAKw6S,EAAyB,eAExC97R,EAAY1e,KAAK+7C,GACjBuvP,EAAUtrS,KACRg8S,GAAaC,EAAaD,EAAY,CAACA,EAAWC,IAEpDtQ,EAAM3rS,KAAK,CAACw6S,EAAiB,YAAGA,EAAkB,mBAI/C,IAAI0B,GAAa,CACtBhpS,OAAQ+rK,EACRksH,QAASA,EACTzsR,YAAaA,EACbg3R,UAAWA,EACXpK,UAAWA,EACXK,MAAOA,ICiWQwQ,CACfvB,EACA1nS,EACAynS,GAIIhgR,EAAO,GACTk7Q,EAAkBhvP,EAAwB,gBAG9C,GAFAgvP,OAAsC75S,IAApB65S,EAAgCA,EAAkB,GAGlE,uBAAwB0E,GACxB,YAAaA,EAA4B,mBAIzC,IAFA,IAAM6B,EAAO7B,EAA4B,mBAAW,QAAO,IAAQ,KAAO,IAEjEzgT,EAAI,EAAGgiB,EAAKsgS,EAAKnhT,OAAQnB,EAAIgiB,IAAMhiB,EAC1C,GAAIsiT,EAAKtiT,GAAe,WAAG,CACzB,IAGMuiT,EAHa77S,EAAK47S,EAAKtiT,GAAe,YAAG,SAAUi/C,GACvD,MAA0B,eAAnBA,EAAc,QAEqB,cAAS,MAMrD,GAJwB,KAApB88P,IAEFA,EAAkBwG,EAAU,IAEN,QAApBxG,EAKF,MAJIjmR,EAASysR,EAAW,QACtB1hR,EAAK36B,KAA4Bo8S,EAAKtiT,GAAU,WAK3CsiT,EAAKtiT,GAAS,OACvB+7S,EAAkB,MAClBl7Q,EAAK36B,KAA4Bo8S,EAAKtiT,GAAU,OActD,OAVoB,IAAhB6gC,EAAK1/B,SACP46S,EAAkB,OAClBl9R,EAAe,YAAExZ,SAAQ,SAAU45C,GACD,SAA5BA,EAAsB,eACxBnuC,EAASmuC,EAAgB,OACzBpe,EAAK36B,KAA4B+4C,EAAmB,eAKnD,CACLpe,KAAMA,EACNv+B,MAAOyqD,EAAc,MACrB9vC,UAAWA,EACXnM,OAAQA,EACRu3K,WAAYA,EACZ0zH,gBAAiBA,EACjB94G,SAAUA,EACVx/L,MAAOA,EACPwwO,WAAYA,EACZ7rD,MAAOA,EACPn9J,YAAa8hC,EAAoB,cG3SrCtpB,GAAGg4Q,SAAW,CACV+G,SAAUA,IAGd/+Q,GAAGhgC,MAAQ,CACP4pP,MAAOA,GACP/B,aAAcA,GACdjuP,OAAQolT,GACR59D,KAAMA,GACNuE,KAAMA,GACNa,OAAQA,GACRgF,KAAMA,GACNzG,gBAAiBA,GACjBH,WAAYA,IAGhB5kN,GAAG7M,IAAM,CACLtH,MAAOA,GACPsyM,UAAWA,GACX/6E,gBAAiBA,GACjBk7E,gBAAiBA,GACjBE,oBAAqBA,GACrBV,gBAAiBA,GACjBjC,kBAAmBA,GACnBkB,kBAAmBA,GACnBL,aAAcA,GACdiB,aAAcA,GACdlB,gBAAiBA,GACjBH,kBAAmBA,GACnBW,oBAAqBA,GACrBH,yBAA0BA,GAC1BO,sBAAuBA,GACvBK,6BAA8BA,GAC9BjC,wBAAyBA,IAM7B,IAFA,IAAIwjF,GAAW,EACXC,GAAU,CAAC,KAAM,MAAO,SAAU,KAC7Bl3R,GAAI,EAAGA,GAAIk3R,GAAQxhT,SAAWoO,OAAO61I,wBAAyB35H,GACnElc,OAAO61I,sBAAwB71I,OAAOozS,GAAQl3R,IAAK,yBACnDlc,OAAO81I,qBAAuB91I,OAAOozS,GAAQl3R,IAAK,yBAC3Clc,OAAOozS,GAAQl3R,IAAK,+BAG1Blc,OAAO61I,wBACR71I,OAAO61I,sBAAwB,SAAU/uH,EAAUusR,GAC/C,IAAIC,GAAW,IAAIlhR,MAAOsrC,UACtB61O,EAAazjT,KAAK4K,IAAI,EAAG,IAAM44S,EAAWH,KAC1CxlT,EAAKqS,OAAOw1C,YAAW,WAAc1uB,EAASwsR,EAAWC,KACzDA,GAEJ,OADAJ,GAAWG,EAAWC,EACf5lT,IAGVqS,OAAO81I,uBACR91I,OAAO81I,qBAAuB,SAAUnoJ,GACpC4nD,aAAa5nD,KAIrB,MAAMmzC,GAAY,YACZ0yQ,GAAY,YACZn3H,GAAYnoJ,GAAG0a,OAAO0uI,UAAUjB,UAChCC,GAAWpoJ,GAAG0a,OAAO0uI,UAAUhB,SAC/BngJ,GAAOjI,GAAG0a,OAAO0uI,UAAUnhJ,KAC3BmvG,GAASp3G,GAAG0a,OAAO0uI,UAAUhyC,OAC7B1qG,GAAQ1M,GAAG+5Q,oBAAoBrtQ,MAC/B2rJ,GAAcr4J,GAAG+5Q,oBAAoB1hH,YACrCE,GAAcv4J,GAAG+5Q,oBAAoBxhH,YACrCoC,GAAU36J,GAAG8+K,aAAankB,QAC1BnO,GAAaxsJ,GAAGkX,OAAOkyI,UAAUoD,WACjC2sF,GAAan5O,GAAGhrB,OAAOimQ,gBAAgB9B,WACvCE,GAAgBr5O,GAAGhrB,OAAOimQ,gBAAgB5B,cAC1CrxF,GAAQhoJ,GAAGhrB,OAAOimQ,gBAAgBjzF,MAClCu3H,GACW,cADXA,GAEa,gBAFbA,GAGY,eAHZA,GAIW,cAJXA,GAKa,gBALbA,GAMY,eANZA,GAQU,aARVA,GASS,YAETC,GACK,QADLA,GAEW,aAFXA,GAGW,aAHXA,GAIiB,kBAJjBA,GAKO,UALPA,GAMa,eAGb9vH,GAAe9xL,GAAAA,EAAAA,KAAAA,cAAwB,EAAI,GAE3C6hT,GAAwB,6BAK9Bz/Q,GAAG45Q,KAAK/+S,UAAU26M,8BAAgC,SAAUF,GACxD,MAAMnF,EAAQmF,GAAa,EACrB3qB,EAAgBtwL,KAAKs2M,eACrBhsE,EAAgBtqI,KAAKu2M,eACrBpqM,EAAM5K,KAAKoG,IAAI2oL,EAAgBhmD,GAAiB/oI,KAAKoG,IAAImuM,GAC/D,OAAO,SAKO3xJ,GACN,IAAIthD,EAAQtB,KAAKoG,IAAI2oL,EAAgBnsI,GAAc5iD,KAAKoG,IAAImuM,GAAS3pM,EAErE,OADAtJ,EAAQtB,KAAK4K,IAAI5K,KAAKqa,IAAI,EAAG/Y,GAAQ,KAOjD8iC,GAAG76B,QAAQ8pI,YAAYp0I,UAAU6kT,iBAAmB1/Q,GAAG76B,QAAQ8pI,YAAYp0I,UAAU60N,gBACrF1vL,GAAG76B,QAAQ8pI,YAAYp0I,UAAU60N,gBAAkB,WAC/C,IAAIt1N,EAAOC,KACXD,EAAKslT,mBACDtlT,EAAK2D,OAAS3D,EAAK2D,MAAMF,OAAO7D,QAAQ2lT,gBACxCvlT,EAAK+1N,aAKbnwL,GAAG76B,QAAQ8pI,YAAYp0I,UAAU+kT,WAAa5/Q,GAAG76B,QAAQ8pI,YAAYp0I,UAAUy0N,UAC/EtvL,GAAG76B,QAAQ8pI,YAAYp0I,UAAUy0N,UAAY,SAAUxrL,GACnD,MAAM1pC,EAAOC,KACP80N,EAAU/0N,EAAKw2N,iBAAiBvT,UAChCp+M,EAAS+gC,GAAG76B,QAAQ8pI,YAAYp0I,UAAU+kT,WAAW7kT,KAAKX,EAAM0pC,GAChE2rL,EAAUr1N,EAAKw2N,iBAAiBvT,UAChCwiG,EAAazlT,EAAK2D,MAAMF,OAAOlF,IAAI2B,KAAK3B,IAAI0kN,UAOlD,OANKoS,EAAQl0N,aACTk0N,EAAQjhK,UAAUqxP,EAAWtkT,aAE5Bk0N,EAAQ3yM,iBACT2yM,EAAQr+J,cAAc+9J,EAAQryM,iBAE3B7d,GAIX+gC,GAAG76B,QAAQ8pI,YAAYp0I,UAAUilT,cAAgB9/Q,GAAG76B,QAAQ8pI,YAAYp0I,UAAU00N,aAClFvvL,GAAG76B,QAAQ8pI,YAAYp0I,UAAU00N,aAAe,WAC5C,IAAIn1N,EAAOC,KACXD,EAAK0lT,cAAc/kT,KAAKX,GACxB,IAAIE,EAAOF,EAAK2D,MAChB,GAAIzD,EAAKylT,KAAM,CACX,IACI3vF,EADQh2N,EAAKw2N,iBACEvT,UACf1nM,EAASy6M,EAAOtb,kBAChBh3M,EAAUxD,EAAK0lT,mBAAmBxjS,YAAYy8E,cAAc,GAChE,GAAIn7F,EAAS,CACT,MAAM2G,EAAc3G,EAAQtC,cAAcG,iBAC1C,IAAIugI,EAASz3H,EAAY,GAAG,GACxB03H,EAAS13H,EAAY,GAAG,GAC5B,IAAKu7B,GAAGrqB,OAAOisK,mBAAmBjsK,EAAQumH,KAAYl8F,GAAGrqB,OAAOisK,mBAAmBjsK,EAAQwmH,GAAS,CAChG,IAAIlpE,EAASr3D,KAAK4K,IACdmP,EAAO,GAAKumH,EAAO,GACnBvmH,EAAO,GAAKumH,EAAO,GACnBA,EAAO,GAAKvmH,EAAO,GACnBumH,EAAO,GAAKvmH,EAAO,GACnBA,EAAO,GAAKwmH,EAAO,GACnBxmH,EAAO,GAAKwmH,EAAO,GACnBA,EAAO,GAAKxmH,EAAO,GACnBwmH,EAAO,GAAKxmH,EAAO,IAEvBy6M,EAAO/jK,IAAIrsB,GAAGrqB,OAAOs9C,OAAOt9C,EAAQs9C,QAQpDjzB,GAAG76B,QAAQ8pI,YAAYp0I,UAAUolT,YAAcjgR,GAAG76B,QAAQ8pI,YAAYp0I,UAAU01N,WAChFvwL,GAAG76B,QAAQ8pI,YAAYp0I,UAAU01N,WAAa,WAC1C,MAAMn2N,EAAOC,KACbD,EAAK6lT,YAAYllT,KAAKX,GACtBA,EAAK00N,YAAY7C,yBAGrBjsL,GAAG3yB,OAAOo1N,UAAY,WAClBziM,GAAG3yB,OAAOunC,KAAK75C,KAAKV,KAAM,CACtBuP,QAAS,YAGjBhM,GAAAA,EAAAA,QAAWoiC,GAAG3yB,OAAOo1N,UAAWziM,GAAG3yB,OAAOunC,MAE1C5U,GAAG3yB,OAAOm1N,UAAY,WAClBxiM,GAAG3yB,OAAOsnC,KAAK55C,KAAKV,KAAM,CACtBuP,QAAS,YAGjBhM,GAAAA,EAAAA,QAAWoiC,GAAG3yB,OAAOm1N,UAAWxiM,GAAG3yB,OAAOsnC,MAG1C,MAAMutL,GAAe,6BACfC,GAAiB,iCACvBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU8mO,kCAAkCQ,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU8mO,kCAAkCO,IACxIliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUknO,0BAA0BI,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUknO,0BAA0BG,IACxHliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUulO,iBAAiB+B,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUulO,iBAAiB8B,IACtGliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUqsO,mBAAmB/E,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUqsO,mBAAmBhF,IAC1GliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUwsO,qBAAqBlF,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUwsO,qBAAqBnF,IAC9GliM,GAAG3yB,OAAOunC,KAAK/5C,UAAU0sO,oBAAoBpF,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU0sO,oBAAoBrF,IAC5GliM,GAAG3yB,OAAOunC,KAAK/5C,UAAU4sO,sBAAsBtF,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU4sO,sBAAsBvF,IAChHliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUstO,gBAAgBhG,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUstO,gBAAgBjG,IACpGliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUwtO,cAAclG,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUwtO,cAAcnG,IAChGliM,GAAG3yB,OAAOunC,KAAK/5C,UAAU0tO,iBAAiBpG,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU0tO,iBAAiBrG,IACtGliM,GAAG3yB,OAAOunC,KAAK/5C,UAAU8sO,gBAAgBxF,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAU8sO,gBAAgBzF,IACpGliM,GAAG3yB,OAAOunC,KAAK/5C,UAAUgtO,iBAAiB1F,IAAkBniM,GAAG3yB,OAAOunC,KAAK/5C,UAAUgtO,iBAAiB3F,IAEtGliM,GAAGC,KAAKiiK,yBAAyBliK,GAAGC,KAAKo8Q,SAASn8G,aAElDlgK,GAAGC,KAAKZ,MAAMa,SAASb,GAAAA,GAuBvB,MAAM6gR,GAAWtiT,GAAAA,EAAAA,KAAAA,eAIXuiT,GAAuBngR,GAAGhrB,OAAOu8B,KAAK12C,UAAUo9R,kBACtDj4P,GAAGhrB,OAAOu8B,KAAK12C,UAAUo9R,kBAAoB,SAAUl+E,GACnD,OAAImmG,GACOC,GAAqBplT,KAAKV,KAAM0/M,GAEpComG,GAAqBplT,KAAKV,KAAM0/M,IAAeA,GAAc,IAGxE,MAAMqmG,GAAuBpgR,GAAGg4Q,SAAS+G,SAASlkT,UAAU67R,kBAC5D12P,GAAGg4Q,SAAS+G,SAASlkT,UAAU67R,kBAAoB,SAAUl4O,EAAYm6J,GACrE,IAAI7/L,EAAM0lC,EAIV,OAHK0hQ,KACDpnS,GAAYhN,OAAO0oG,kBAEhB4rM,GAAqBrlT,KAAKV,KAAMye,EAAK6/L,IAKhD34K,GAAG65Q,QAAQh/S,UAAU6yN,uBAAyB,SAAUjgC,EAAOtgD,GAC3D,MAAMntI,EAAQ3F,KAAKmhD,QAAQx7C,MACrBssB,EAASjyB,KAAKmyN,YAEdF,EAAcjyN,KAAKoyN,iBAEzBpyN,KAAKkmK,YAAW,GAEhB,IAAIwxC,EAAUzlL,EAAO,GACjB0lL,EAAU1lL,EAAO,GACrB,GAAIggM,GAAeizF,IACfjzF,GAAeizF,IACfjzF,GAAeizF,GAAgC,CACnB,KAAxBllT,KAAK8oJ,SAASk9J,QACdhmT,KAAK8oJ,SAASk9J,MAAQrgT,EAAMyuE,KAAO,IAEvC,MAAME,EAAQ/yE,KAAKirC,MAAMsmG,EAAQ,GAAKsgD,EAAM,GAAKskB,GAAW,KACxD13M,KAAK8oJ,SAASm9J,QAAU3xO,IACxBt0E,KAAK8oJ,SAASm9J,OAAStgT,EAAM2uE,MAAQA,OAEtC,CAC0B,KAAzBt0E,KAAK8oJ,SAASm9J,SACdjmT,KAAK8oJ,SAASm9J,OAAStgT,EAAM2uE,MAAQ,IAErC29I,GAAeizF,IACfjzF,GAAeizF,IACfjzF,GAAeizF,KACfxtG,GAAW13M,KAAKmhD,QAAQvzC,YAAc,GAE1C,MAAMwmE,EAAO7yE,KAAKirC,MAAM4mJ,EAAM,GAAKskB,GAAW,KAC1C13M,KAAK8oJ,SAASk9J,OAAS5xO,IACvBp0E,KAAK8oJ,SAASk9J,MAAQrgT,EAAMyuE,KAAOA,GAG3C,GAAI69I,GAAeizF,IACfjzF,GAAeizF,IACfjzF,GAAeizF,GAAmC,CACvB,KAAvBllT,KAAK8oJ,SAASo9J,OACdlmT,KAAK8oJ,SAASo9J,KAAOvgT,EAAMwuE,IAAM,IAErC,MAAME,EAAS9yE,KAAKirC,MAAMsmG,EAAQ,GAAKsgD,EAAM,GAAKukB,GAAW,KACzD33M,KAAK8oJ,SAASq9J,SAAW9xO,IACzBr0E,KAAK8oJ,SAASq9J,QAAUxgT,EAAM0uE,OAASA,OAExC,CAC2B,KAA1Br0E,KAAK8oJ,SAASq9J,UACdnmT,KAAK8oJ,SAASq9J,QAAUxgT,EAAM0uE,OAAS,IAEvC49I,GAAeizF,IACfjzF,GAAeizF,IACfjzF,GAAeizF,KACfvtG,GAAW33M,KAAKmhD,QAAQmmE,aAAe,GAE3C,MAAMnzC,EAAM5yE,KAAKirC,MAAM4mJ,EAAM,GAAKukB,GAAW,KACzC33M,KAAK8oJ,SAASo9J,MAAQ/xO,IACtBn0E,KAAK8oJ,SAASo9J,KAAOvgT,EAAMwuE,IAAMA,KAO7C,MAAMiyO,GAAoBzgR,GAAGhrB,OAAO6nS,SAAShiT,UAAUw3S,eACvDryQ,GAAGhrB,OAAO6nS,SAAShiT,UAAUw3S,eAAiB,SAAU18R,EAAQuZ,EAAM6qL,EAAYn1B,EAAYrtK,GAC1F,GAAmB,IAAfwiM,EAAkB,CAElB,MAAM3yD,EAAO,GAAK2yD,EAAa,GAAO,EACtCxiM,EAAOmpS,eAAiBt5J,EACxB7vI,EAAOopS,IAAMv5J,EAEjB,OAAOq5J,GAAkB1lT,KAAKV,KAAMsb,EAAQuZ,EAAM6qL,EAAYn1B,EAAYrtK,IAG9E,MAAMqpS,GAAY5gR,GAAGg8K,YAAYm/F,KAAKtgT,UAAUmpR,OAChDhkP,GAAGg8K,YAAYm/F,KAAKtgT,UAAUmpR,OAAS,SAAUv2F,EAAO+2F,EAAiB7rR,GACrE,MAAMsG,EAAS2hT,GAAU7lT,KAAKV,KAAMozL,EAAO+2F,EAAiB7rR,GAE5D,OADA0B,KAAKwmT,UAAY5hT,EACVA,GAKX,MAAMusK,GAAU,SAAU5/F,EAAO/9D,GAC7B,IAAI5O,EAWJ,OARIA,EAFA2sE,GACA3sE,EAAS+gC,GAAG4rC,MAAMs6G,QAAQt6G,IACV5mE,QAGP,CAAC,EAAG,EAAG,EAAG,QAEPvG,IAAZoP,IACA5O,EAAO,GAAK4O,GAET5O,GAOL6hT,GAAuB,SAAUC,EAASliT,EAAO7E,GACnD,MAAM8pC,EAAOi9Q,EAAQpoT,IAAI0kN,UACnB2jG,EAAUl9Q,EAAKhnB,gBAIfi9L,EAAan8M,GAAAA,EAAAA,KAAAA,eAAyB,EAAImjT,EAAQpoT,IAAImhN,YAEtDmnG,EAAM,CACRr8H,WAAY9gJ,EAAKvnB,gBACjBvhB,OAAQ8oC,EAAKvoC,YACbijD,WAAYwiQ,EACZ3vG,gBAAgB,EAChBvB,qBAAqB,EACrBjL,gBAAgB,EAChBqM,wBAAwB,GAGxB6vG,EAAQljT,OAAOulC,YACf69Q,EAAItrS,OAASorS,EAAQljT,OAAOulC,WAIhC,IAAI89Q,EAAsBriT,EACtBA,EAAM2F,OAASrK,GAAAA,EAAAA,UAAAA,QAA2B4mT,EAAQljT,OAAO8P,iBACzDuzS,EAAsBH,EAAQljT,OAAO8P,gBAGzC,MAAMmL,EAAMooS,EAAoB3xS,eAAiB2xS,EAAoB3xS,iBAAmB,GACxF,IAAI4xS,EACAC,EAEJ,GAAItoS,GAAOA,EAAIpb,OAAQ,CACnByjT,EAASD,EAAoBv2H,gBAAiB3wL,MAAAA,OAAO,EAAPA,EAAS2wL,gBAAiB7xK,EAAI,GAC5EsoS,EAASF,EAAoBv8K,gBAAiB3qI,MAAAA,OAAO,EAAPA,EAAS2qI,gBAAiB7rH,EAAIA,EAAIpb,OAAS,GAGzF,IAAI2jT,EAAWvoS,EAAIpb,OAASob,EAAI9T,QAAQulB,UAAU2xC,WAAUvtD,GAAKA,GAAKyyS,IAAU,EAC5EC,IAAavoS,EAAIpb,SACjB2jT,GAAY,GAEhB,MAAMC,EAAWxoS,EAAIojD,WAAUvtD,GAAKA,GAAKwyS,IAEzCF,EAAI9/R,YAAcrI,EAAI9T,MAAMs8S,EAAUD,EAAW,GAE9B,IAAftnG,IACAknG,EAAI9/R,YAAc8/R,EAAI9/R,YAAYxoB,KAAIgW,GAAKA,EAAIorM,UAInDonG,EAASD,EAAoBv2H,cAC7By2H,EAASF,EAAoBv8K,cAiBjC,OAfIy8K,IACAA,GAAkBrnG,EAClBknG,EAAIt8K,cAAgBy8K,EAChBJ,EAAUI,IACVH,EAAIziQ,WAAa4iQ,IAGrBD,IACAA,GAAkBpnG,EAClBknG,EAAIt2H,cAAgBw2H,EAChBH,EAAUG,IACVF,EAAIziQ,WAAa2iQ,IAIlBF,GAmBXrjT,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,OAA+B,WAC3B,IAAIxD,EAAOC,KACPW,EAAS,EACRZ,EAAKyD,OAAOslC,cAAc,GAAK/oC,EAAKyD,OAAOslC,cAAc,IAAM,GAC/D/oC,EAAKyD,OAAOslC,cAAc,GAAK/oC,EAAKyD,OAAOslC,cAAc,IAAM,GAGhEo+Q,GAAWliR,EAAAA,GAAAA,GAAMjlC,EAAKyD,OAAO0D,MACF,WAE3B,IAAIw1E,EAAU38E,EAAKyD,OAAO0D,IAAI0f,OAAO7mB,EAAKyD,OAAO0D,IAAIwsB,YAAY,KAAO,GAEpEyzR,EAAc,CACdxrQ,MAAOurQ,EAASE,MAAMzrQ,OAGtB0rQ,EAAwB,GACZ,SAAZ3qO,IACAyqO,EAAYloT,KAAO,QAAUy9E,EAC7B2qO,EAAsBj/S,KAAK,IAAIu9B,GAAGC,KAAK27Q,WAAW4F,IAClDA,EAAYloT,KAAO,yBAA2By9E,EAC9C2qO,EAAsBj/S,KAAK,IAAIu9B,GAAGC,KAAK27Q,WAAW4F,IAElDxhR,GAAGC,KAAKiiK,yBAAyBw/G,IAGrC1hR,GAAGC,KAAKZ,MAAMa,SAASb,GAAAA,GAI3B6iK,GAEA,IAAIs/G,EAAc,CACdloT,KAAMc,EAAKyD,OAAO0D,IAClBy0C,MAAOurQ,EAASE,MAAMzrQ,OAEF,cAApB57C,EAAKyD,OAAO0D,MACZigT,EAAY/iH,gBAAkB,OAElC,IAAI7Z,EAAa,IAAI5kJ,GAAGC,KAAK27Q,WAAW4F,GAEpCroG,EAAen5K,GAAGg8K,YAAYi/F,WAE9Bn/F,EAAc,CACdl3B,WAAYA,EACZ5pL,OAAQA,EACRq2M,gBAAgB,EAChBvB,qBAAqB,EACrBjL,gBAAgB,EAChBqM,wBAAwB,GAE5B,MAAMywG,EAAsBvnT,EAAKyD,OAAOulC,WAAahpC,EAAKyD,OAAOslC,cAC7D/oC,EAAKyD,OAAOulC,YACZ04K,EAAYnmM,OAASvb,EAAKyD,OAAOulC,WAErC,IAAIwrC,EAAOx0E,EAAKyD,OAAOkJ,IAAIoiD,wBACvBjM,EAAKykQ,EAAoB,GAAKA,EAAoB,GAClDxkQ,EAAKwkQ,EAAoB,GAAKA,EAAoB,GACtD7lG,EAAYt9J,WAAa5iD,KAAK4K,IAAI02C,EAAK0xB,EAAKjiD,MAAOwwB,EAAKyxB,EAAKhiD,QAE7DxyB,EAAKzB,IAAM,IAAIqnC,GAAG1rB,IAAI,CAClBxM,OAAQ1N,EAAKyD,OAAOkJ,IACpB+8B,KAAM,IAAI9D,GAAG45Q,KAAK99F,GAClBt3K,SAAU,GACV20K,aAAcA,IAiBlB/+M,EAAKzB,IAAIoF,MAAQ3D,EACjBA,EAAK+d,SAAWlf,QAAQC,QAAQkB,EAAKzB,KAGrCyB,EAAKwnT,WAAW7mT,KAAKX,EAAKzB,KAmD1B,IAAIkpT,EAtCJznT,EAAKyD,OAAOu4B,IAAIj8B,GAAAA,EAAAA,MAAAA,SAVC,WACbC,EAAKghE,gBAWThhE,EAAKzB,IAAI+P,GAAG2vL,IAAa,SAAUj/L,GAE/B,GAAIgB,EAAKyD,OAAOimC,OAAS3pC,GAAAA,EAAAA,KAAAA,SAAzB,CAIAC,EAAKyD,OAAO0mC,WAAW3iC,SAAQ,SAAU6mD,UAC9BA,EAAGF,qBAEd,IAAIu5P,EAAmB1nT,EAAKyD,OAAO0mC,WAAW5rC,KAAI,WAC9C,OAAO,KAEXyB,EAAKzB,IAAI8jN,sBAAsBrjN,EAAEq0L,OAC7B,SAAU3vL,EAASe,GACf,GAAIf,EAAQC,OAASD,EAAQC,MAAMF,OAAOa,WAAY,CAClD,IAAK,IAAInC,EAAI,EAAGA,EAAInC,EAAKyD,OAAO0mC,WAAW7mC,OAAQnB,IAAK,CAEpD,GADSnC,EAAKyD,OAAO0mC,WAAWhoC,GACzBjC,KAAKuE,QAAUA,EAAO,CACzBijT,EAAiBvlT,IAAK,EACtB,OAIR,OADAnC,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,aAA2B,CAAE2D,QAASA,EAAQC,MAAMF,SACjEC,KAGf,CACI4xL,aAAcA,KAEtB,IAAK,IAAInzL,EAAI,EAAGA,EAAIulT,EAAiBpkT,OAAQnB,IACpCulT,EAAiBvlT,IAClBnC,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6B,CAAE0E,MAAOzE,EAAKyD,OAAO0mC,WAAWhoC,SAW7F,MAMMwlT,EAA2B,SAAU/5S,GACvC,MAAMw2C,EAAaqjQ,EAAO/kS,gBACpBvb,EAAMsgT,EAAOtlS,gBAAgBE,UACnCriB,EAAKyD,OAAOuf,OACP7d,QAAO6b,GAAKA,EAAE5W,OAASrK,GAAAA,EAAAA,UAAAA,MACvByH,SAAQwZ,IACL,MAAMzF,EAASyF,EAAEgG,UAAU,CAAE7f,IAAKA,IAClC,GAAIoU,EAAQ,CACR,MAAMqsS,EAAiBC,GAAatsS,EAAQ6oC,EAAY,KACxDpjC,EAAE9gB,KAAKuE,MAAM8lD,UAAUq9P,QAOjCE,EAAe,WACjBL,EAASznT,EAAKzB,IAAI0kN,UAHlBwkG,EAAOn5S,GAAG,oBAAqBq5S,GAK/BA,KAxBA3nT,EAAKzB,IAAI+P,GAAGiyL,IAAS,WACjBvgM,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,SA0B5B+nT,IAEAL,EAAOn5S,GAAG,qBAAqB,SAAUV,GACrC5N,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,cACrBC,EAAKyD,QAERzD,EAAKzB,IAAI+P,GAAG,cAAew5S,GAM3B,MAAMC,EAAkB,SAAUtjT,EAAO7E,GACrC,GAAI6E,EAAO,CACP,IAAIoiT,EAAMH,GAAqB1mT,EAAMyE,EAAO7E,GAExC8pC,EAAO,IAAI9D,GAAG45Q,KAAKqH,GACvB7mT,EAAKzB,IAAI60D,QAAQ1pB,GACjB1pC,EAAKzB,IAAIu+C,WAIjB98C,EAAKyD,OAAO6K,GAAGvO,GAAAA,EAAAA,MAAAA,uBAAoC,SAAUggD,GAEzD,GAAI//C,EAAKyD,OAAO0D,MAAQnH,EAAKyD,OAAO7D,QAAQuH,MAAQnH,EAAKyD,OAAOwD,UAAY84C,EAAIuK,SAASlgD,OAASrK,GAAAA,EAAAA,UAAAA,OAAyB,CACvH,MAAMioT,EAAiBjoQ,EAAIoT,SAASh+C,iBACpC,IAAI8yS,EAAaloQ,EAAIuK,SACrB,MAAM49P,EAAmB,IACpBnoQ,EAAIuK,SAASn1C,kBAAoB6yS,IAGlCC,EAAaloQ,EAAIoT,SAEjB+0P,EAAiB39K,cAAgBxqF,EAAIuK,SAASigF,cAC9C29K,EAAiB33H,cAAgBxwI,EAAIuK,SAASimI,eAElDvwL,EAAKyD,OAAOu4B,IAAIj8B,GAAAA,EAAAA,MAAAA,iBAA8B,SAAU6N,GACpDm6S,EAAgBE,EAAYC,UAIxCloT,EAAKyD,OAAO6K,GAAGvO,GAAAA,EAAAA,MAAAA,SAAsB,SAAU6N,GAC3Cm6S,EAAgB/nT,EAAKyD,OAAO8P,mBAGhC,MAAM40S,EAAgBnoT,EAAKzB,IAAIk2D,cAE/B0zP,EAAct8S,iBAAiB9L,GAAAA,EAAAA,MAAAA,WAAwB,SAAUf,GAC7D,IAAIopT,GAAM,EAEV,IAAKpoT,EAAKyD,OAAOs6C,gBAAkB/9C,EAAKyD,OAAOs6C,cAAcmB,cAAe,CAExE,GAAIl/C,EAAKyD,OAAOimC,OAAS3pC,GAAAA,EAAAA,KAAAA,SACrB,OAGJ,IAAIszL,EAAQrzL,EAAKzB,IAAIy/L,cAAch/L,GACnCopT,EAAMpoT,EAAKzB,IAAI8jN,sBAAsBhvB,GAAO,SAAU3vL,EAASqpD,GAC3D,IAAIloD,GAAS,EAWb,OAVInB,EAAQC,OAAUD,EAAQC,MAAMF,OAAOa,YAAeZ,EAAQC,MAAMF,OAAO7D,QAAQyoT,aACnFxjT,GAAS,GAGTA,GAAUnB,EAAQC,OAClB3D,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC1C2D,QAASA,EAAQC,MAAMF,SAIxBoB,IACR,CAAEywL,aAAcA,KAInB6yH,EAAcviT,MAAMk7I,OADpBsnK,EAC6B,UAEA,MAMrC,SAAUE,IACN7gR,WAAY,gBAAe/1B,OAAO0oG,yBAC7BvuG,iBAAiB,SAAUy8S,EAAkB,CAAE5nQ,MAAM,IAE1D1gD,EAAKzB,IAAImhN,YAAchuM,OAAO0oG,iBAC9B2tM,EAAgB/nT,EAAKyD,OAAO4rB,WAC5BrvB,EAAKwnT,aANT,IAUJhkT,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,WAAmC,WAC/BvD,KAAK1B,IAAIyiE,cAGb,IAAIr+C,GAAmB,SAAUkjB,EAAM0iR,GACnC,IAAI3sQ,EAAQ/V,EAAKi/J,WACjB,OAAKlpJ,GAASA,IAAUhW,GAAGC,KAAKy9J,MAAMznJ,QAG/BjW,GAAGC,KAAK07Q,gBAAgB3lQ,GAFpBp4C,GAAAA,EAAAA,KAAAA,mBAA2B+kT,IAK1C/kT,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,iBAAyC,WAErC,OAAOmf,GAAiBijB,GAAGC,KAAKpnB,IADrBxe,KAC8BwD,OAAO0D,KADrClH,KACgD+mB,cAG/D,IAAIwhS,GAAe,SAAU5oT,GAEzBA,EAAUA,GAAW,GACrB,IAAI6oT,EAFOxoT,KAEWwD,OAAO7D,QAAQuH,KAAO3D,GAAAA,EAAAA,IAAAA,IACxCklT,EAAc9iR,GAAGC,KAAKpnB,IAAIgqS,GAC1BE,EAAU/iR,GAAGC,KAAKpnB,IAAI7e,EAAQuH,KAClC,OAAOwb,GAAiBgmS,EAAS/oT,EAAQ2oT,iBAAmB5lS,GAAiB+lS,EAAa9oT,EAAQ2oT,kBAGlGK,GAAsB,SAAUhpT,GAChC,IAAIiF,EAaJ,OAXIA,EADAjF,EAAQykM,gBACC,IAAIz+J,GAAGC,KAAK27Q,WAAW,CAC5BtiT,KAAMU,EAAQuH,IACdk9L,gBAAiBzkM,EAAQykM,kBAIpBz+J,GAAGC,KAAKpnB,IAAI7e,EAAQuH,MAErB29L,aACRjgM,EAAOo/L,OAASr+J,GAAGC,KAAKy9J,MAAMznJ,SAE3Bh3C,GAGXrB,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsC,SAAU5D,GAC5C,MAAMI,EAAOC,KAEPovB,GADNzvB,EAAUA,GAAW,IACKyvB,WAAarvB,EAAKyD,OAAO4rB,UACnD,IAAI9T,EAEAA,EADA3b,EAAQ2b,OACC3b,EAAQ2b,OAGRqqB,GAAGC,KAAKijK,gBAAgB9oM,EAAKgnB,YAAahnB,EAAKyD,OAAO0D,IAAKvH,EAAQuH,KAEhF,MAAMohT,EAAkB3iR,GAAGC,KAAKijK,gBAAgBvtL,EAAQ3b,EAAQuH,IAAK,aAC/D0hT,EAAYL,GAAa7nT,KAAKX,EAAM,CACtCmH,IAAKvH,EAAQuH,IACbohT,gBAAiBA,IAEf/9H,EAAao+H,GAAoBhpT,GACjCm1N,EAAU/0N,EAAKzB,IAAI0kN,UACnBvB,EAAc,CAChBl3B,WAAYA,EACZysB,gBAAgB,EAChBvB,qBAAqB,EACrBjL,gBAAgB,EAChBqM,wBAAwB,GAEtB/vL,EAAcsI,EAAUla,iBAE9B,GAAI4R,GAAeA,EAAYzjB,OAC3Bo+M,EAAY36L,YAAcA,MAEzB,CACD26L,EAAYlxB,QAAUukC,EAAQ3jC,aAC9BswB,EAAYjxB,QAAUskC,EAAQ1jC,aAC9B,MAAM9mD,EAAgBl7G,EAAUnvB,KAAKuE,MAAM0sL,mBACrCZ,EAAgBlhK,EAAUnvB,KAAKuE,MAAMysL,mBAC3C,IAAI43H,EAAkB,EACtB,GAAsB,IAAlBv+K,GAAuBgmD,IAAkB3oK,OAAOC,kBAAmB,CAKnEihS,EAJqBN,GAAa7nT,KAAKX,EAAM,CACzCmH,IAAKnH,EAAKyD,OAAO0D,IACjBohT,gBAAiBA,IAEYM,EAGjCnnG,EAAYn3E,cADM,IAAlBA,EAC4BwqF,EAAQ5jC,mBAAqB23H,EAG7Bv+K,EAE5BgmD,IAAkB3oK,OAAOC,kBACzB65L,EAAYnxB,cAAgBwkC,EAAQ7jC,mBAAqB43H,EAGzDpnG,EAAYnxB,cAAgBA,EAKpCvwL,EAAKyD,OAAO0mC,WAAW3iC,SAAQwZ,IAC3B,GAAIA,EAAE5W,OAASrK,GAAAA,EAAAA,UAAAA,IAAsB,CACfihB,EAAEgG,UAAU,CAAE7f,IAAKvH,EAAQuH,OAEzC6Z,EAAE9gB,KAAKuE,MAAM8lD,UAAUvpC,EAAEgG,iBAMrC06L,EAAY9gN,OAASglC,GAAGC,KAAKozG,UAAUj5I,EAAKmB,YAAanB,EAAKyD,OAAO0D,IAAKvH,EAAQuH,KAElFnH,EAAKyD,OAAOslC,cAA8B,IAAd8/Q,EAAkBjjR,GAAGC,KAAKijK,gBAAgB9oM,EAAKyD,OAAOslC,cAAe/oC,EAAKyD,OAAO0D,IAAKvH,EAAQuH,KAAOnH,EAAKyD,OAAO7D,QAAQmpC,cACjJ/oC,EAAKyD,OAAO7D,QAAQopC,YACpBhpC,EAAKyD,OAAOulC,UAA0B,IAAd6/Q,EAAkBjjR,GAAGC,KAAKijK,gBAAgB9oM,EAAKyD,OAAOulC,UAAWhpC,EAAKyD,OAAO0D,IAAKvH,EAAQuH,KAAOnH,EAAKyD,OAAO7D,QAAQopC,UAC7I04K,EAAYnmM,OAASvb,EAAKyD,OAAOulC,WAErC,IAAIqsL,EAAU,IAAIzvL,GAAG45Q,KAAK99F,GAC1B1hN,EAAKzB,IAAI60D,QAAQiiK,GACjBA,EAAQpjK,IAAI12C,EAAQ,CAAEogM,SAAS,KAOnCn4M,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,YAAoC,SAAUge,EAAS9Z,GAInD,IAHA,IAAI1H,EAAOC,KACP+iB,EAAShjB,EAAKzB,IAAIu3G,YAClB6oE,GAAgB,EACXx8K,EAAI,EAAGA,EAAI6gB,EAAOrS,YAAaxO,IACpC,GAAI6gB,EAAO/Y,KAAK9H,KAAOqf,EAAS,CAC5Bm9J,GAAgB,EAChB,MAIR,MAAMz+K,EAAOshB,EAAQ7d,MACrB,IAAKzD,EAAKuD,OAAOuP,QAAU9S,EAAKuD,OAAO2G,OAASrK,GAAAA,EAAAA,UAAAA,IAAsB,CAClE,MAAM+sQ,EAAc5sQ,EAAKuD,OAAOujB,YAC5B8lP,GACAtrP,EAAQ+oC,UAAUs9P,GAAa/6C,EAAa9sQ,EAAK0iB,gBAAiB,MAI1E,GAAIi8J,EACA37J,EAAOib,OAAOzc,GACdwB,EAAOk5K,SAASx0L,EAAK8Z,OAEpB,CACG9Z,EAAM,EACNsb,EAAO3a,KAAKmZ,GAGZwB,EAAOk5K,SAASx0L,EAAK8Z,GAGzB,IAAIkoB,EAAO1pC,EAAKzB,IAAI0kN,UACpB,GAAIjjN,EAAKyD,OAAO0D,MAAQnH,EAAKyD,OAAO7D,QAAQuH,KACxC,GAAIqa,aAAmBokB,GAAGnhC,MAAMy8S,KAAM,CAClC,IAAIn6R,EAAcvF,EAAQY,YAAYjN,iBACtCu0B,EAAK6sK,eAAiBxvL,EAAY,GAClC2iB,EAAK8sK,eAAiBzvL,EAAYA,EAAYzjB,OAAS,SAKvDke,aAAmBokB,GAAGnhC,MAAMy8S,OAC5B1/R,EAAQqwK,iBAAiBnoJ,EAAKwnJ,oBAC9B1vK,EAAQswK,iBAAiBpoJ,EAAKynJ,qBAItC,IAAI43H,EAAmB,EAEnBC,EAAwB,SAAUp7S,GAClC1N,EAAKuD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,QAChBF,GAAoB,IACpBA,EAAmB,EACnB/oT,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,kBAAgC,CAAE0E,MAAOvE,EAAKuD,UAEtE+d,EAAQ0nS,kBAAoB1nS,EAAQ0nS,kBAAoB,GAExDhpT,EAAKuD,OAAOqR,QAAUm0S,GAAAA,EAAAA,MAAAA,SAAyB/oT,EAAKuD,OAAOsQ,YAC3Di1S,IAEJ9oT,EAAK4wB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,eAA6BipT,GAE7C9oT,EAAK4wB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,SAAwB,IAAMA,GAAAA,EAAAA,MAAAA,eAA4B,SAAU6N,IAChFm7S,GAAsC,IACd,IACpBA,EAAmB,EACnB7oT,EAAKuD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,KACpBjpT,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAAE0E,MAAOvE,EAAKuD,eAM5ED,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,YAAoC,SAAUge,GAC1CvhB,KAAK1B,IAAIwsD,YAAYvpC,IAGzBhe,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsC,WAClC,OAAOvD,KAAK1B,IAAIwjN,gBAAgBjsG,YAAYnlG,aAGhDnN,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,mBAA2C,WACvC,IAAIqB,GAAU,EAMd,OALA5E,KAAK1B,IAAIwjN,gBAAgBjsG,YAAYtuG,SAAQ,SAAUwZ,EAAG7e,GAClD6e,aAAa4kB,GAAGnhC,MAAMotB,SAAsB,IAAZhtB,IAChCA,EAAS1C,MAGV0C,GAGXrB,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsC,SAAUge,GAC5C,IAAI3c,GAAU,EAMd,OALA5E,KAAK1B,IAAIwjN,gBAAgBjsG,YAAYtuG,SAAQ,SAAUC,EAAKC,GACpDD,IAAQ+Z,IACR3c,EAAS6C,MAGV7C,GAGXrB,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsC,SAAUge,EAASuI,GACrD,IAEIN,EAFSxpB,KAAK1B,IAAIu3G,YACJmmF,WACJhzL,QAAQuY,GAElBiI,GAAM,GAAKA,IAAOM,IAClB9pB,KAAK1B,IAAIwsD,YAAYvpC,GACrBvhB,KAAKoyD,YAAY7wC,EAASuI,KASlCvmB,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,aAAqC,SAAUge,GAC3C,IAAIxhB,EAAOC,KACX,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IA7gB8BowB,EAAYr9B,EAAa8iB,EA6gBnD3rB,EAAW,SAAUirS,GAIrB,IADAA,EAAQA,GAASnpT,EAAKyD,OAAO8P,kBAEzBvT,EAAKzB,IAAIwsD,YAAYo+P,EAAMjpT,KAAKuE,OAC5B+c,aAAmBokB,GAAGnhC,MAAM4uE,OAC5B7xD,EAAQ7d,MAAMyR,cAAc,CACxBjO,IAAKnH,EAAKyD,OAAO0D,MAIrBqa,EAAQ7d,MAAMF,OAAO2G,OAASrK,GAAAA,EAAAA,UAAAA,MAAuB,CACrD,IAAI41D,EAAyB,CAAExuD,IAAKnH,EAAKyD,OAAO0D,IAAKqzB,OAAQhZ,EAAQY,YAAYD,gBAAgBE,WAE7FszC,EAAuBn7B,SAAWm7B,EAAuBxuD,KACzDqa,EAAQ7d,MAAMF,OAAO2R,cAAcugD,GAa/C31D,EAAKqyD,YAAY7wC,EAAS,GAC1BxhB,EAAKzB,IAAImjF,cAAcl6E,SAAQ,SAAUwmD,GACjCA,aAAepoB,GAAG76B,QAAQk1S,YAC1BjyP,EAAIwrK,iBAGZ16N,KAKA4iN,EAAcglG,GAAqB1mT,EAAMwhB,EAAQ7d,MAAMF,QACvDimC,EAAO1pC,EAAKzB,IAAI0kN,UAChBh3E,EAAoBviG,EAAKhnB,gBAC7B,IAAKg/L,EAAY36L,cAAgB26L,EAAYn3E,eAAiBm3E,EAAYnxB,eAAgB,CACtF,MAAMxpK,EAAc2iB,EAAKv0B,iBACzB,GAAI4R,EAAa,CACb,MAAMqiS,EAAiBriS,EAClB5hB,QAAOoP,KACAmtM,EAAYn3E,eAAiBh2H,EAAImtM,EAAYn3E,kBAG7Cm3E,EAAYnxB,eAAiBh8K,EAAImtM,EAAYnxB,iBAKrD64H,EAAe9lT,OAASyjB,EAAYzjB,SACpCo+M,EAAY36L,YAAcqiS,IAItC,GAAI1nG,EAAY36L,YAAa,CACzB,MAAMsuM,EAAU,IAAIzvL,GAAG45Q,KAAK99F,GAE5B,IAAI2nG,GA7kBsBjlQ,EA6kBO6nF,EA7kBKllH,EA6kBc26L,EAAY36L,YA7kBb8iB,EA6kB0B7pC,EAAKyD,OAAO7D,QAAQiqC,mBA5kBpG9iB,EAGEA,EACFnc,QACAwf,MAAK,SAAUrP,EAAGsP,GAAK,OAAOtP,EAAIsP,KAClCniB,QAAO,SAAU+Z,EAAMxa,GACpB,OAAa,IAATwa,IACCxa,EAAM28C,GAAc5iD,KAAKyoB,IAAI,EAAIm6B,EAAa38C,GAAOoiC,GAC/CpiC,EAEJwa,IACR,GAXImiC,GA4kBCilQ,IAAWp9K,GAAqBjsI,EAAKyD,OAAO4nD,SAC5C3hB,EAAK8gB,QAAQ,CAAEpG,WAAYilQ,EAAQ/4P,SAAUvwD,GAAAA,EAAAA,0BAAkC,WAC3EC,EAAKzB,IAAI60D,QAAQiiK,GACjBn3M,EAASle,EAAKyD,OAAO8P,oBAIzBvT,EAAKzB,IAAI60D,QAAQiiK,GACjBA,EAAQr+J,cAAcqyP,GACtBnrS,UAIJA,QAKZ1a,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,SAAU+X,EAAQ3b,EAAS44B,GACzD,MAAMx4B,EAAOC,KACTuD,GAAAA,EAAAA,KAAAA,WAAmB5D,IACnB44B,EAAW54B,EACXA,EAAU,IAGVA,EAAUA,GAAW,GAmCzB,OAJAf,QAAQC,QAAQkB,EAAKspT,mBAAmBv7P,SAAQ,YA5B7B,SAAUxyC,GACzBvb,EAAKspT,kBAAoB,IAAIzqT,SAAQ,SAAUC,EAASk1B,GAGpDizB,aAAajnD,EAAKupT,UAClBvpT,EAAKupT,SAAWriQ,YAAW,WAEvB,MAQMsiQ,EAAa,CACfhxR,SAToB,WACpB,MAAMjd,EAASvb,EAAKgnB,YAChBxjB,GAAAA,EAAAA,KAAAA,WAAmBg1B,IACnBA,EAASjd,GAEbzc,EAAQyc,IAKRogM,SAAU/7M,EAAQ0yD,eAEE,IAApB1yD,EAAQ4qD,SAAwB5qD,EAAQ4qD,WAExCg/P,EAAWl5P,SAAWvwD,GAAAA,EAAAA,yBAG1BC,EAAKzB,IAAI0kN,UAAUhxJ,IAAI12C,EAAQiuS,KAChC,OAIPC,CAAWluS,MAGRvb,EAAKspT,mBAGhB9lT,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,WAC9B,OAAOvD,KAAK1B,IAAI0kN,UAAUvI,gBAAgBz6M,KAAK1B,IAAIglN,YAGvD//M,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,SAAU7D,EAAQC,GAChD,MAAMI,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,MAAMwE,EAAW,WACb15B,KAGEmF,EAAOrE,GAAW,GAClB8pC,EAAO1pC,EAAKzB,IAAI0kN,UAElBh/M,EAAKumD,QACL9gB,EAAK8gB,QAAQ,CACT5pD,OAAQjB,EAAQ2wD,SAAUvwD,GAAAA,EAAAA,yBAC3By4B,IAGHkR,EAAK0qB,UAAUz0D,GACfb,SAKZ0E,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,WAC9B,OAAOvD,KAAK1B,IAAI0kN,UAAU9hN,aAG9BqC,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsC,WAClC,OAAOvD,KAAK1B,IAAI0kN,UAAUvgM,iBAG9Blf,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,cAAsCqH,eAAgBu5C,GAGlD,aAFoBnkD,KAAKwxD,UACnBwxJ,UAAUjsJ,cAAc5S,GACvBA,GAGX5gD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,YAAoC,SAAU8wD,GAC1Cr0D,KAAKwxD,SAAS9yD,MAAK,SAAU+qT,GACzBA,EAAMzmG,UAAU5uJ,YAAYC,OAIpC9wD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,YAAoC,WAChC,OAAOvD,KAAK1B,IAAI0kN,UAAU1uJ,eAG9B/wD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,eAAuC,WACnC,OAAOvD,KAAK1B,IAAI0kN,UAAU9tM,kBAAoB,IAGlD3R,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,uBAA+C,SAAUsyD,GACrD,OAAO71D,KAAK1B,IAAIs3D,uBAAuBC,IAG3CtyD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,uBAA+C,SAAU0yB,GACrD,OAAOj2B,KAAK1B,IAAIw3D,uBAAuB7/B,IAG3C1yB,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,YAAoC,SAAU5D,GAC1C,MAAMI,EAAOC,KAcb,OAZWL,GAAW,IAEb29D,YACIv9D,EAAKzB,IAAIk2D,cAGT,IAAI51D,SAAQ,SAAUC,EAASk1B,GACpCh0B,EAAKyxD,SAAS9yD,MAAK,SAAU+qT,GACzB5qT,EAAQ4qT,EAAMj1P,sBAO9BjxD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,WAC9B,MAAMxD,EAAOC,KACb,GAAID,EAAKyD,OAAOwD,SAAU,CACtB,MAAM0iT,EAAQ3pT,EAAKyD,OAAOyD,OAAOqyI,WAC3B1lE,EAAYjnE,SAASC,cAAc,UACzCgnE,EAAUthD,MAAQo3R,EAAMrsP,OAAO/qC,MAC/BshD,EAAUrhD,OAASm3R,EAAMrsP,OAAO9qC,OAChC,MAAMo3R,EAAO/1O,EAAUrB,WAAW,MAclC,OAbAm3O,EAAMrsP,OAAOkV,WAAW,QAAS,CAAEuvN,uBAAuB,IAC1D4nB,EAAME,mBAAoB,EAC1BF,EAAM7sQ,SACN8sQ,EAAKx2O,UAAUu2O,EAAMrsP,OAAQ,EAAG,EAAGqsP,EAAMrsP,OAAO/qC,MAAOo3R,EAAMrsP,OAAO9qC,QACpEm3R,EAAME,mBAAoB,EAC1BF,EAAMrsP,OAAOkV,WAAW,QAAS,CAAEuvN,uBAAuB,IAQnD,CAACluN,GAGR,OAAO9yE,MAAMoX,KAAKnY,EAAKyD,OAAOkJ,IAAIhB,iBAAiB,mDAG3DnI,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,SAAiC,SAAUjF,GACvC,OAAOA,aAAeqnC,GAAG1rB,KAG7B1W,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,MAA8B,WAC1B,IAAIo4C,EAAQ37C,KAAK1B,IAAI0kN,UAAU9gM,gBAAgB2iL,WAC/C,OAAQlpJ,GAASA,IAAUhW,GAAGC,KAAKy9J,MAAMznJ,SAG7Cr4C,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,SAAiC,SAAUsmT,GACvC,MAAM9pT,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IAAImxE,OAA2C9gG,IAA/BylT,EAASlqT,QAAQulG,WAA2B2kN,EAASlqT,QAAQulG,UAC7EnlG,EAAKyxD,SAAS9yD,MAAK,SAAU+qT,GACzB,IAAKI,EAAS5pT,KAAK+E,MAAO,CAEtB,IAAIA,EAAQ,IAAI2gC,GAAG65Q,QAAQ,CACvBr+P,QAAS0oQ,EAASp0K,SAClBw8E,YAAaizF,KAEjBuE,EAAMznG,WAAWh9M,GACjB6kT,EAAS5pT,KAAK+E,MAAQA,EAItB,MAAMkjT,EAAgBuB,EAAMj1P,cAExB0wC,GACA,oCAAsBxmG,MAAK,SAAUW,GACjC,MAAM40D,EAAY41P,EAASp0K,SAASj5E,cACpCqtP,EAASp0K,SAAS13G,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,WAGhCm0D,EAAUroD,iBAAiB,aAAa,SAAU7M,GAC9C,IAAIyE,EAASzE,EAAE0O,OACf,EAAG,CACC,GAAIjK,EAAO+lB,SAAW/lB,EAAO+lB,QAAQ,+BAAgC,CACjExqB,EAAE+uE,kBACF,MAEJtqE,EAASA,EAAOg5D,oBAEbh5D,KACR,CAAEwK,SAAS,IAEd,MAAMo1J,EAAc/jK,EAAOiP,QAErB60J,EAAO,IAAIC,EAAYnvG,EAAW,CACpC61P,IAAK,kDAET3mJ,EAAKoqB,YAAc,SAAU1tJ,GACzB,MAAMkqR,EAAc/pT,KAAKL,QAAQmqT,IACjC,GAAIC,EAAa,CACb,IAAIviT,EAAMq4B,EAAMpyB,OACZu8S,GAAc,EAClB,KAAOxiT,IAAQwiT,GACXA,EAAcxiT,EAAI+hB,SAAW/hB,EAAI+hB,QAAQwgS,GACzCviT,EAAMA,EAAIg1D,cAEd,GAAIwtP,EACA,OAGR5mJ,EAAY5iK,UAAU+sL,YAAY7sL,KAAKV,KAAM6/B,IAEjDsjI,EAAK90J,GAAG,eAAe,SAAUtP,EAAGkrT,GAChC,IAAIC,EAAMnrT,EAAE0O,OAAOqhD,wBAEnB,GAAIo7P,EAAI91O,KAAOr1E,EAAE0O,OAAOy1I,YAAc+mK,EAAQh7O,OAASi7O,EAAI/1O,IAAMp1E,EAAE0O,OAAO05I,aAAe8iK,EAAQ/6O,MAE7F,OADAi0F,EAAKgnJ,eAAeprT,EAAGkrT,IAChB,KAGf9mJ,EAAK90J,GAAG,aAAa,SAAUV,EAAIy8S,GAG/B,GAFAP,EAAS/zK,aAAY,GACrB+zK,EAASQ,eAAiBrlT,EAAMmtN,YAC5B03F,EAASS,2BAA4B,CACrC,IAAIx3K,EAAU22K,EAAMnmG,UACpBt+M,EAAM0+J,YAAY+lJ,EAAM7zP,uBAAuB,CAACi0P,EAASS,2BAA2B,GAAIx3K,EAAQ,GAAK+2K,EAASS,2BAA2B,MACzIT,EAASQ,eAAiB,CAAC,EAAG,GAC9BrlT,EAAM+sN,UAAU83F,EAASQ,uBAClBR,EAASS,gCAGhBT,EAASQ,eAAiBrlT,EAAMmtN,eAGxChvD,EAAK90J,GAAG,WAAW,SAAUV,GACzBk8S,EAAS/zK,aAAY,GACrB,IAAIjU,EAAS4nL,EAAM7zP,uBAAuB,CAAC,EAAG,IAC1CksE,EAAS2nL,EAAM7zP,uBAAuB5wD,EAAMmtN,aAC5Co4F,EAAa,CAACzoL,EAAO,GAAKD,EAAO,GAAIC,EAAO,GAAKD,EAAO,IACxDv1H,EAAWtH,EAAM+/E,cACrB//E,EAAM0+J,YAAY,CAACp3J,EAAS,GAAKi+S,EAAW,GAAIj+S,EAAS,GAAKi+S,EAAW,KACzEvlT,EAAM+sN,UAAU,CAAC,EAAG,IACpB83F,EAASQ,eAAiB,CAAC,EAAG,GAE9B,MAAMG,EAAgBv2P,EAAUnF,wBAChC+6P,EAASS,2BAA6B,CAACE,EAAcp2O,KAAMo2O,EAAcn2O,cAgBrF,MAAMo2O,EAAmB,SAAU1rT,GAC/B,MAAM6kF,EAAW6lO,EAAMj1P,cACvB,IAAI2zP,GAAM,EACV,IAAKpoT,EAAKyD,OAAOs6C,gBAAkB/9C,EAAKyD,OAAOs6C,cAAcmB,cAAe,CACxE,IAAIm0I,EAAQq2H,EAAM1rH,cAAch/L,GAChCopT,EAAMsB,EAAMrnG,sBAAsBhvB,GAAO,SAAU3vL,EAASqpD,GACxD,IAAIloD,GAAS,EAIb,OAHInB,EAAQC,QAAUD,EAAQC,MAAMF,OAAOa,aACvCO,GAAS,GAENA,IAEP,CACIywL,aAAcA,KAItBzxG,EAASj+E,MAAMk7I,OADfsnK,EACwB,UAEA,IAKhCD,EAAcvnQ,oBAAoBpO,GAAWk4Q,GAC7CvC,EAAct8S,iBAAiB2mC,GAAWk4Q,OAGlD5rT,QAIR0E,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkC,SAAUsmT,GAC7B7pT,KACNwD,OAAO2B,eAAiB,KACzB0kT,EAASp0K,UACTo0K,EAASp0K,SAAS13G,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,UAI3CyD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,WAAmC,WAC/B,MAAMxD,EAAOC,KACbD,EAAK0/M,YAAchuM,OAAO0oG,iBAG1B,MAAMotM,EAAa,WACfxnT,EAAKghE,cAGJx9D,GAAAA,EAAAA,KAAAA,iBAEDgkT,IACA91S,OAAO7F,iBAAiB,SAAU27S,KAI1C,IAAImD,GAAoB,SAAU7hT,EAAM0sP,GACpC,OAAQ1sP,GACJ,KAAK/I,GAAAA,EAAAA,UAAAA,IACL,KAAKA,GAAAA,EAAAA,SAAAA,IACL,KAAKA,GAAAA,EAAAA,OAAAA,IAGD,OAAO,IAAI6lC,GAAG3yB,OAAOqkC,IAAI,CACrBu+M,gBAAgB,EAChBL,mBAAiCnxP,IAAlBmxP,GAA8BA,IAErD,KAAKz1P,GAAAA,EAAAA,UAAAA,IACL,KAAKA,GAAAA,EAAAA,SAAAA,IACD,OAAO,IAAI6lC,GAAG3yB,OAAOskC,IACzB,KAAKx3C,GAAAA,EAAAA,UAAAA,QACL,KAAKA,GAAAA,EAAAA,SAAAA,QACL,KAAKA,GAAAA,EAAAA,SAAAA,KACL,KAAKA,GAAAA,EAAAA,OAAAA,KACD,OAAO,IAAI6lC,GAAG3yB,OAAOw6G,QACzB,KAAK1tH,GAAAA,EAAAA,OAAAA,KACD,OAAO,IAAI6lC,GAAG3yB,OAAOsnC,KACzB,KAAKx6C,GAAAA,EAAAA,OAAAA,KACD,OAAO,IAAI6lC,GAAG3yB,OAAOunC,KACzB,KAAKz6C,GAAAA,EAAAA,OAAAA,MACD,OAAO,IAAI6lC,GAAG3yB,OAAOwnC,MACzB,KAAK16C,GAAAA,EAAAA,SAAAA,IACL,KAAKA,GAAAA,EAAAA,OAAAA,IACD,OAAO,IAAI6lC,GAAG3yB,OAAOukC,IACzB,KAAKz3C,GAAAA,EAAAA,OAAAA,SACD,OAAO,IAAI6lC,GAAG3yB,OAAO0tS,SACzB,KAAK5gT,GAAAA,EAAAA,OAAAA,IACD,OAAO,IAAI6lC,GAAG3yB,OAAO0nC,IACzB,KAAK56C,GAAAA,EAAAA,OAAAA,IACD,OAAO,IAAI6lC,GAAG3yB,OAAO2nC,IACzB,QACI,OAAO,OAInBp3C,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,eAAuC,SAAUuL,EAAUnP,GACvD,IAAII,EAAOC,KACXL,EAAUA,GAAW,GACrB,IAAIgrT,EAAcC,GAAkB,CAChCxkT,OAAQrG,EAAKyD,OAAO7D,QAAQyG,SAE5BykT,EAAa/7S,EAASxQ,KAAI,SAAUmF,GACpC,IAAImB,EAASnB,EAAQxD,KAAKwD,QAAQ+G,QAElC5F,EAAOlB,MAAQD,EAAQxD,KACvB,MAAMi0B,EAAOzwB,EAAQkB,UACjBuvB,IACAtvB,EAAOhB,SAAWswB,GAGtBtvB,EAAOy1N,IAAM52N,EAAQrE,GAEhBwF,EAAOuB,YACRvB,EAAOc,SAASilT,GAIpB,MAAMvxS,EAAO0xS,GAAsBlmT,GAAQ0b,UAC3C,GAAIlH,EAAM,CACOA,EAAKkH,WAEd1b,EAAO4qL,cAAc,CACjB3mL,KAAMuQ,EAAKkH,YAIvB,OAAO1b,KAEPoO,EAAS03S,GAAkB/qT,EAAQqT,QAEvC,GAAIA,aAAkB2yB,GAAG3yB,OAAOqkC,IAAK,CAEjCwzQ,EAAaA,EACRvsT,KAAI,SAAUmF,GACX,MAAMlD,EAAOkD,EAAQtC,cACrB,GAAIZ,aAAgBolC,GAAGplC,KAAKmP,MAAO,CAE/B,IAAI/J,EAAQmlT,GAAsBrnT,GAClC,MAAMsnT,EAAQplT,EAAMunB,WACpB,GAAI69R,aAAiBplR,GAAGhgC,MAAM6nP,aAAc,CACxC,MAAM5sP,EAASmqT,EAAM3pT,YACfmU,EAASw1S,EAAMp9D,YACf5hN,EAAcx2B,EAAOqzK,WACrBniG,EAAOskO,EAAMt9D,UACbrmL,EAAW,EAAIxmE,EAASmrC,EAExBsxB,EAAS1wD,SAASC,cAAc,UACtCywD,EAAO/qC,MAAQ80C,EACf/J,EAAO9qC,OAAS60C,EAKhB,MAAMhuD,EAAOzT,EAAM2a,WACnB3a,EAAQA,EAAM6E,SACRolP,UAQN,MAAMl4L,EAAa,IAAI/xB,GAAGnmC,QAAQe,GAoBlC,OAnBAm3D,EAAWxzD,MAAMT,EAAQE,SACzB+zD,EAAW83H,cAAc/rL,EAAQisL,iBAEjCh4H,EAAWhyD,SAAS,IAAIigC,GAAGhgC,MAAM4pP,MAAM,CACnCxiO,MAAO,IAAI4Y,GAAGhgC,MAAM2lP,KAAK,CACrB35O,IAAMyzS,GAAwB3zS,OAAO2Z,KAAK,kDACtCg8C,EAAW,aAAeA,EADY,iBAErBA,EAAW,EAAI,SAAWA,EAAW,EAAI,QAAUxmE,EACpE,aAAe2U,EAAOw4I,WAAa,gBACnCtnE,EAAKsnE,WAAa,oBAAsBhiH,EAJF,cAQ1ClX,KAAM,CAACuyC,EAAUA,GACjB2jL,QAAS,CAAC3jL,EAAUA,GACpB78B,MAAOwgR,EAAMp+J,aAEjBvzI,KAAMA,KAEHs+C,GAGf,OAAOj0D,KAGf,MAAMunT,EAAc,GACpBH,EAAWtjT,SAAQ,SAAU9D,GACzB,IAAIkC,EAAQmlT,GAAsBrnT,GAClC,MAAMnD,EAAWmD,EAAQtC,cACnBiY,EAAOzT,EAAM2a,UACnB,IAAI+U,EACJ,GAAIjc,GAAQA,EAAKkH,UAAW,CACxB,QAAQ,GACJ,KAAKhgB,aAAoBqlC,GAAGplC,KAAKi8N,WAC7BnnM,EAAQ,IAAIsQ,GAAGplC,KAAKmP,MAAMpP,EAASs8N,gBAAgB,KACnD,MACJ,KAAKt8N,aAAoBqlC,GAAGplC,KAAK8B,QAC7BgzB,EAAQ/0B,EAASkzM,mBACjB,MACJ,KAAKlzM,aAAoBqlC,GAAGplC,KAAK08N,gBAAiB,CAE9C,MAAMH,EAAcx8N,EAAS+8N,iBAC7B,IAAItpD,GAAa,EACjB1+I,EAAQ,IAAIsQ,GAAGplC,KAAKmP,MAAMotN,EAAYA,EACjCx+N,KAAI,SAAUi3B,GACX,OAAOA,EAAK7kB,eAEfzI,QAAO,SAAU+Z,EAAMC,EAAKxa,GACzB,OAAIwa,EAAM8xJ,GACNA,EAAY9xJ,EACLxa,GAEJua,KACP,IAAI46M,gBAAgB,KAC5B,MAEJ,KAAKt8N,aAAoBqlC,GAAGplC,KAAK0P,aAAc,CAE3C,MAAM4tN,EAAWv9N,EAASy+N,cAC1B,IAAIksF,GAAW,EACf51R,EAAQwoM,EAASA,EACZv/N,KAAI,SAAU+R,GACX,OAAOA,EAAQM,aAElB1I,QAAO,SAAU+Z,EAAMC,EAAKxa,GACzB,OAAIwa,EAAMgpS,GACNA,EAAUhpS,EACHxa,GAEJua,KACP,IAAIwxL,mBACZ,OAKR,GAAIn+K,EAAO,CACP,MAAMqiC,EAAa,IAAI/xB,GAAGnmC,QAAQ61B,GAClCqiC,EAAWhyD,SAAS,IAAIigC,GAAGhgC,MAAM4pP,MAAM,CACnCn2O,KAAMA,EAAK5O,QACXuiB,MAAO,IAAI4Y,GAAGhgC,MAAM2lP,KAAK,CACrBn+N,YAAa,YACbxb,IAAKpO,GAAAA,EAAAA,YAAiB,+BAG9BynT,EAAY5iT,KAAKsvD,QAIzBszP,EAAY3nT,SACZwnT,EAAaA,EAAWxiT,OAAO2iT,IAIvC,GAAIh4S,aAAkB2yB,GAAG3yB,OAAO20N,QAAS,CACrC30N,EAAO+3N,KAAOj8N,EAAS,GAAGwsD,qBAAuB,EAEjDtoD,EAAOzD,QAAUhM,GAAAA,EAAAA,KAAAA,SAAiBxD,EAAKyD,OAAO0D,MAE9C2jT,EAAaA,EAAWvsT,KAAI,SAAUyQ,GAClC,IAAIqqB,EAAOrqB,EAAEvE,QAEb,OADA4uB,EAAKihM,IAAMtrN,EAAEsrN,IACNjhM,MAEA7xB,SAAQ,SAAUwH,GACzB,MAAMof,EAASpf,EAAEwgL,QACX27H,EAAe,GACrB,IAAK,IAAIziT,KAAO0lB,EACR1lB,EAAIO,QAAQ,MAAQ,GACpBkiT,EAAa9iT,KAAKK,GAG1ByiT,EAAa3jT,SAAQ,SAAUkB,GAE3B,IAAI0iT,EAAS1iT,EAAIc,QAAQ,KAAM,KAI/B,GAHI,MAAM04B,KAAKkpR,KACXA,EAAS,IAAMA,GAEf1iT,IAAQ0iT,EACR,UAA0B/mT,IAAnB+pB,EAAOg9R,IACVA,GAAU,IAGlBh9R,EAAOg9R,GAAUh9R,EAAO1lB,UACjB0lB,EAAO1lB,SAItBuK,EAAO08I,UAAY,6BACnB18I,EAAO2e,YAAc,UACrB,IAAIy5R,EAAep4S,EAAOoyN,kBAAkBylF,EAAY,CACpDpqF,kBAAmB1gO,EAAKyD,OAAO0D,MAEnCkkT,EACK1/S,iBAAiB,mCACjBnE,SAAQyC,GAAQA,EAAKi0B,gBAAgB,aAE1C,IAAIotR,EAAwB1lR,GAAG7M,IAAIiwH,gBAAgB,6BAC/C,qBASJ,OARAsiK,EAAsBjiK,eAAe,4CACjC,qBAAsBp2I,EAAOwyN,gBAEjC4lF,EAAantR,gBAAgB,aAC7BmtR,EAAantR,gBAAgB,sBAC7BotR,EAAsBx+S,YAAYu+S,GAG3BC,EAAsBzyR,UAG7B5lB,aAAkB2yB,GAAG3yB,OAAOskC,MAE5BuzQ,EAAaA,EAAWvsT,KAAI,SAAUyQ,GAClC,MAAMxO,EAAOwO,EAAE5N,cAKf,OAJIZ,aAAgBolC,GAAGplC,KAAKi8N,aACxBztN,EAAIA,EAAEvE,SACJ3C,YAAY,IAAI89B,GAAGplC,KAAK08N,gBAAgB,CAAC18N,EAAKe,oBAE7CyN,MAIf,IAAInK,EAASoO,EAAO46G,cAAci9L,EAAY,CAC1CjqF,eAAgB,YAChBH,kBAAmB1gO,EAAKyD,OAAO0D,MAMnC,OAJI8L,aAAkB2yB,GAAG3yB,OAAOskC,MAE5B1yC,EAASA,EAAO2E,QAAQ,mBAAoB,KAEzC3E,GAGX,IAAI0mT,GAAa,SAAUvsT,GACvB,IAAK,IAAImD,EAAI,EAAG+I,EAAMlM,EAAEgzR,aAAav/K,MAAMnvG,OAAQnB,EAAI+I,EAAK/I,IACxD,GAAgC,UAA5BnD,EAAEgzR,aAAav/K,MAAMtwG,GACrB,OAAO,EAGf,OAAO,GAGPqpT,GAAkB,SAAUxsT,GAExBusT,GAAWvsT,KADJiB,KAEFwxD,SAAS9tD,MAAMF,OAAOkJ,IAAIqxB,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,MAC7Cf,EAAEoxG,iBACFpxG,EAAE+uE,oBAIN09O,GAAiB,SAAUzsT,GAE3B,GAAIusT,GAAWvsT,GAAI,CACf,IAAIT,EAFG0B,KAEQwxD,SAAS9tD,MAAMF,OAC1BzE,EAAE0O,SAHCzN,KAGeyN,QAClBnP,EAAIoO,IAAIqxB,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QAKrCyD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,kBAA0C,SAAU5D,GAChD,IAAII,EAAOC,KACPgE,EAAOrE,GAAW,GAClB8rT,EAAY,CACZr6B,mBAAoB,CAGhBzrP,GAAG3yB,OAAOqkC,IACV1R,GAAG3yB,OAAOskC,IACV3R,GAAG3yB,OAAOwnC,MACV7U,GAAG3yB,OAAOsnC,KACV3U,GAAG3yB,OAAOo1N,UACVziM,GAAG3yB,OAAOm1N,UACVxiM,GAAG3yB,OAAOunC,KAEV5U,GAAG3yB,OAAOw6G,QACV,WACI,OAAO,IAAI7nF,GAAG3yB,OAAO0nC,IAAI,CACrB67L,iBAAiB,KAGzB,WACI,OAAO,IAAI5wM,GAAG3yB,OAAO2nC,IAAI,CACrB47L,iBAAiB,KAGzB5wM,GAAG3yB,OAAO0tS,WAGd18S,EAAKgxG,WACLy2M,EAAUh+S,OAASlK,GAAAA,EAAAA,KAAAA,OAAeS,EAAKgxG,YAGvCy2M,EAAUh+S,OAAS1N,EAAKyD,OAAOkJ,IAEnC,IAAIg/S,EAAW,KACXC,EAAgB,IAAIhmR,GAAGg8K,YAAYo/F,YAAY0K,GAyInD,GAxIAE,EAAct9S,GAAG,eAAe,SAAUtP,GAAG,IAAA6sT,EAIzC,GAAc,QAAdA,EAAI7sT,EAAE+P,gBAAQ,IAAA88S,GAAVA,EAAYvoT,OAAQ,CACpB,MAAMwoT,EAAe,0LACrB9sT,EAAE+P,SAASvH,SAAQwH,IACf,IAAIpJ,EAAQoJ,EAAE5I,WACd,GAAIR,EAAO,CACH1B,GAAAA,EAAAA,WAAgB0B,KAChBA,EAAQA,EAAMoJ,IAEdjO,MAAMC,QAAQ4E,KACdA,EAAQA,EAAM,IAElB,MAAMonB,EAAQpnB,EAAMunB,WACpB,GAAIH,EAAO,CACP,MAAM1X,EAAM0X,EAAMm9N,SAClB,GAAI70O,EAAIic,WAAW8zR,IAAwB,CACvC,MACM57S,EADMiI,OAAOo/D,KAAKx7D,EAAIuR,OAAOw+R,GAAsB/hT,SACvCmG,MAAMqiT,GACxB,GAAIriT,EAAO,CACP,MAAMsiT,EAAW,IAAInmR,GAAGhgC,MAAMpG,OAAO,CACjCqB,OAAQgH,WAAW4B,EAAM,IACzB+L,OAAQ,IAAIowB,GAAGhgC,MAAMwmP,OAAO,CACxB56K,MAAO/nE,EAAM,GACb8oB,MAAO1qB,WAAW4B,EAAM,MAE5Bi9E,KAAM,IAAI9gD,GAAGhgC,MAAMohP,KAAK,CACpBx1K,MAAO/nE,EAAM,GACbgK,QAAS5L,WAAW4B,EAAM,QAGlC7D,EAAM6gK,SAASslJ,GACf/8S,EAAErJ,SAASC,UAQnC,MAAMmJ,EAAW/P,EAAE+P,SAAW/P,EAAE+P,SAASxQ,KAAI,SAAUkJ,GAInD,OAHKA,EAAI7D,SACL6D,EAAItD,MAAMX,GAAAA,EAAAA,UAEPA,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BiE,MACpC,GAEL,IAAI02E,EAAKn+E,EAAKyD,OAAOswD,sBACjBoqB,GACAA,EAAG32B,WAAWxnD,EAAKyD,OAAO+0G,sBAE9B,MAAMwzM,EAAuBj9S,EAAS5J,QAAO6J,GAAKA,EAAEzO,WAEpD,GAAIyrT,EAAqB1oT,OAAQ,CAC7B,MAAM2oT,EAA0B,CAC5Bl9S,SAAUi9S,EACV3jQ,KAAMrpD,EAAEqpD,KACR6pD,WAAY05M,EAAcj5B,cAAc3zR,EAAEqpD,MAC1CmQ,SAAUx5D,EAAEqpD,KAAKv/C,KACjBmsG,WAAYj2G,EAAE0O,OAAOA,OACrBwnG,UAAWl2G,EAAEqpD,KAAKoqO,aAClB7/K,WAAY5zG,EAAE6zR,YACdq5B,WAAYltT,EAAE8zR,aAElB,GAA8E,QAA1E9zR,EAAEqpD,KAAKv/C,KAAKswB,UAAUp6B,EAAEqpD,KAAKv/C,KAAK6qB,YAAY,KAAO,GAAGtF,cAAyB,CAEjF,MAAM89R,EAAWntT,EAAEqpD,KAAKv/C,KAAKswB,UAAU,EAAGp6B,EAAEqpD,KAAKv/C,KAAK6qB,YAAY,MAClEs4R,EAAwBv2M,sBAAwB,CAAC,OAAQ,OAAQ,OAAQ,QACpEn3G,KAAI6pB,GAAOwjS,EAAcQ,oBAAoBD,EAAW/jS,KACxDjjB,QAAOknT,GAAa,OAAPA,IACblnT,QAAOknT,GAAMA,IAAOJ,EAAwB/5M,aAMrD,GAJIlzG,EAAEqpD,KAAKqqO,kBACPu5B,EAAwBp5M,eAAiB7zG,EAAEqpD,KAAKqqO,uBACzC1zR,EAAEqpD,KAAKqqO,iBAEdk5B,EAAcU,YAAa,CAC3B,MAAMC,EAAaX,EAAcU,YAAYnnT,QAAO6b,GAChDA,EAAEphB,QAAQyoD,OAASrpD,EAAEqpD,KAAKv/C,MAAQkY,EAAEphB,QAAQgzG,aAAe5zG,EAAE6zR,cACjE,IAAI05B,EAAWjpT,OAIX,OAHA2oT,EAAwB32M,aAAei3M,EAO/C,IAAIC,EAGJ,GAAIP,EAAwB/5M,WAAY,CACpC,IAAIu6M,EAAkB,CAClB9qP,WAAYsqP,EAAwB/5M,YAEpC+5M,EAAwBv2M,wBACxB+2M,EAAgBlqP,kBAAoB0pP,EAAwBv2M,uBAEhE82M,EAAyBxsT,EAAKyD,OAAO69D,mBAAmBmrP,QAGxDD,EAAyB3tT,QAAQC,UAGrC0tT,EAAuB7tT,MAAK,KACxBqB,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6BksT,GAC7Cl9S,EAASqM,MAAKpM,IAAMA,EAAEzO,YACtBP,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,mBAAiC,CACjDsoD,KAAMrpD,EAAEqpD,cAKnB,CACD,GAAIsjQ,EAAU,CACV,KAAMA,EAASe,OAASf,EAASt8K,MAC7B,OAEC,CACD,MAAMn9B,EAAa05M,EAAcj5B,cAAc3zR,EAAEqpD,MACjDrpD,EAAEqpD,KAAO,IAAI+9D,KAAK,GAAIulM,EAASgB,SAC3Bz6M,GACA05M,EAAc/3B,cAAc70R,EAAEqpD,KAAM6pD,IAIhDlyG,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,oBAAkC,CAClDsoD,KAAMrpD,EAAEqpD,WAKpBujQ,EAAct9S,GAAG,SAAS,SAAUtP,GAChCwE,GAAAA,EAAAA,MAASxE,MAETiF,EAAKy8C,KACLkrQ,EAAc52H,KAAOh1L,EAAKzB,QAEzB,CACDyB,EAAKzB,IAAIsjN,eAAe+pG,GACxB,IAAIh6B,EAAWg6B,EAAcl+S,OAASk+S,EAAcl+S,OAAS1N,EAAKzB,IAAIk2D,cAEtE,MAAMm4P,EAAchB,EAAcr6B,cAElC,IAAIs7B,EAAkB,GAClBC,EAAc,SAAUzkQ,GACxB,OAAIA,EAAK0kQ,YACE1kQ,EAAK0kQ,cAEL,IAAIluT,SAAQ,SAAUC,EAAS4W,GAClC,IAAIs3S,EAAK,IAAI32M,WACb22M,EAAGnhS,OAAS,SAAUje,GAClB9O,EAAQ,IAAIktB,WAAW/rB,KAAK4E,UAEhCmoT,EAAGx/R,QAAU9X,EACbs3S,EAAG/6B,kBAAkB5pO,OAmBjCujQ,EAAcr6B,cAAgB1mR,eAAgBw9C,EAAMtI,GAChD,IAAI62H,EAAQ32K,KAEZ0rT,EAAW,KAGX,GAAI,YAAYzpR,KAAKmmB,EAAKv/C,OAAuB,mCAAdu/C,EAAKj+C,KAEpC,oCAAyDzL,MAAKkM,eAAgBoiT,GAC1E,MAAM9zP,EAAa8zP,EAAGtzP,cAChBuzP,EAAc,SAAUxzS,GACtBA,GACAlW,GAAAA,EAAAA,MAASkW,EAAK3Z,GAAAA,EAAAA,aAAAA,SAElB6sT,EAAYv8S,MAAMumK,EAAO,CAACvuH,EAAM,CAAE36C,OAAQ,CAAE7I,OAAQ,UA6DxD,KA3DiBgG,eAAgBmqD,GAC7BmE,EAAW9rD,KAAK2nD,GAAOr2D,MAAKkM,eAAgBivD,GACxC,MAAMqzP,EAAerzP,EAAUszP,mBACzBC,EAAYF,EAAa7pT,OAC/B,IAAIgqT,EAAW,EAAGC,EAAY,EAC1BC,EAAW,GAGf,MAAMC,EAAa,SAAU1lO,GACzB,KAAMulO,IAAaD,EAAW,CAC1BrtT,EAAKyD,OAAO4K,IAAItO,GAAAA,EAAAA,MAAAA,eAA6B0tT,GAC7C,IAAK,IAAItrT,EAAI,EAAGA,EAAIqrT,EAASlqT,OAAQnB,IACjCnC,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,sBAAoC,CACpDsoD,KAAMA,EACNq+C,MAAO8mN,EAASrrT,GAAGukG,MACnBptF,OAAQk0S,EAASrrT,GAAGmX,WAI9B44F,EAAa0kE,EAAM+7G,cAActqO,GACvCroD,EAAKyD,OAAO6K,GAAGvO,GAAAA,EAAAA,MAAAA,eAA6B0tT,GACxCN,EAAa7pT,OAAS,IAAGoO,OAAO6mG,iBAAmB7mG,OAAO6mG,iBAAmB40M,EAAa7pT,OAAS,GACvG,IAAK,IAAInB,EAAI,EAAGA,EAAIgrT,EAAa7pT,OAAQnB,IAErC,IACI,IAAIoF,EAAM,GACV,IAAK,IAAIgkJ,KAAOzxF,EAAU4zP,uBAAuBP,EAAahrT,IACtD/C,OAAOqB,UAAUC,eAAeC,KAAK4qJ,EAAK,QAC1CA,EAAIlsJ,GAAK8tT,EAAahrT,GAAK,IAAMopJ,EAAIlsJ,IACrCksJ,EAAIhrJ,WACJgrJ,EAAInhJ,KAAO,UACX7C,EAAIA,EAAIjE,QAAUioJ,GAG1B,IAAKhkJ,EAAIjE,OAAQ,KAAM,cAEvB,IAAIqqT,EAAU,CACV,KAAQ,oBACR,SAAYpmT,GAEZg8G,EAAU,IAAI6C,KAAK,GAAI+mM,EAAahrT,IAEpC+vG,GACA0kE,EAAMi9G,cAActwK,EAASrR,GAEjC06M,EAAYv8S,MAAMumK,EAAO,CAACrzD,EAAS,CAAE71G,OAAQ,CAAE7I,OAAQ8oT,MAEzD,MAAOj0S,GACL6zS,IACAE,EAAW,CAAEj1P,SAAU20P,EAAahrT,KACpCqrT,EAASnlT,KAAK,CAAEq+F,MAAOymN,EAAahrT,GAAImX,OAAQI,IAChDlW,GAAAA,EAAAA,MAAS,UAAYkW,EAAM,WAAayzS,EAAahrT,GAAIpC,GAAAA,EAAAA,aAAAA,SAG7DstT,IAAcE,GACdL,EAAY,yDAEjBA,GAGH5mM,CAAS,IAAIt6F,iBAAiB8gS,EAAYzkQ,KAE9C,MAAOkrE,GACH25L,EAAY35L,YAInB,GAAK,mDAAmDrxF,KAAKmmB,EAAKv/C,MAkHnE8jT,EAAYv8S,MAAMumK,EAAO,CAACvuH,EAAMtI,QAlH0C,CACrE,aAAa7d,KAAKmmB,EAAKv/C,OACxB4I,OAAO6mG,mBAGX,IAAI//C,EAAWnQ,EAAKv/C,KACpB,MAAM4qB,EAAY8kC,EAASp/B,UAAUo/B,EAAS7kC,YAAY,KAAO,GAC7DD,EAAUpwB,SACVk1D,EAAWA,EAASp/B,UAAU,EAAGo/B,EAAS7kC,YAAY,OAE1D6kC,EAAWA,EAAS/uD,MAAM,uBAAuB,GAGjD,IAAImkT,EAAY,KAUhB,GAHIA,EALCxuT,OAAOqB,UAAUC,eAAeC,KAAKksT,EAAiBr0P,GAK3Cq0P,EAAgBr0P,GAJhBq0P,EAAgBr0P,GAAY,CAAEq1P,OAAO,EAAO5sS,SAAU,IAOlE,qBAAqBihB,KAAKmmB,EAAKv/C,MAAO,CACtC8kT,EAAUC,OAAQ,EAClB,IAAIC,EA3HE,SAAUzlQ,GACxB,OAAIA,EAAKhvC,KACEgvC,EAAKhvC,OAEL,IAAIxa,SAAQ,SAAUC,EAAS4W,GAClC,IAAIs3S,EAAK,IAAI32M,WACb22M,EAAGnhS,OAAS,SAAUje,GAClB9O,EAAQ,IAAIktB,WAAW/rB,KAAK4E,UAEhCmoT,EAAGx/R,QAAU9X,EACbs3S,EAAG96B,WAAW7pO,MAiHI0lQ,CAAY1lQ,GAC9BulQ,EAAU3sS,SAAS5Y,KAAKylT,GAExBA,EAAYnvT,MAAK,SAAUyF,GACvByoT,EAAgBr0P,GAAU9kC,GAAatvB,UAI1C,GAAI,qBAAqB89B,KAAKmmB,EAAKv/C,MAAO,CAC3C8kT,EAAUC,OAAQ,EACd,aAAa3rR,KAAKmmB,EAAKv/C,QACvB8kT,EAAUI,QAAU3lQ,GAExB,IAAIylQ,EAAchB,EAAYzkQ,GAC9BulQ,EAAU3sS,SAAS5Y,KAAKylT,GAExBA,EAAYnvT,MAAK,SAAUyF,GACvByoT,EAAgBr0P,GAAU9kC,GAAatvB,KAI1CwpT,EAAU17I,QAEX07I,EAAU17I,MAAQ,IAAIrzK,SAAQ,SAAUC,GACpCooD,YAAW,WACPpoD,MACD,SAGP8uT,EAAU3sS,SAAS5Y,KAAKulT,EAAU17I,OAClCrzK,QAAQwiB,IAAIusS,EAAU3sS,UAAUtiB,MAAK,SAAUsvT,GACtCL,EAAUC,MAYX,oCAAgClvT,MAAKkM,OAAS0D,QAASqqD,MACnD,IAAIs1P,EACJ,IAAIF,EACJ,IAEI,IAAKJ,EAAUh1P,MAAQg1P,EAAUO,MAAQP,EAAU70P,IAO/C,OANK60P,EAAUh1P,KAAKlnD,OAAO6mG,mBAC3Bv4G,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,oBAAkC,CAClDsoD,KAAMA,EACNzqC,QAAS,2CAENivS,EAAgBr0P,GAG3Bw1P,EAAUJ,EAAUI,QACpBE,QAAet1P,EAAIw1P,QAAQ,CACvBx1P,EAAIy1P,SAAST,EAAUh1P,IAAKg1P,EAAUO,IAAKP,EAAUhlS,KACrDgwC,EAAI01P,SAASV,EAAU70P,IAAK60P,EAAUW,KAAOX,EAAUY,KApK3D,uBAqKO3B,EAAgBr0P,GAE3B,MAAO9+C,GAIH,YAHA1Z,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,oBAAkC,CAClDsoD,KAAMA,KAIb6lQ,aAAkBntT,MAAQmtT,EAAS,CAACA,IAAS1mT,SAAQ,SAAU8xB,GAE5DA,EAAWvqB,SAASvH,SAAQ,CAACwH,EAAG7M,KAC5B6M,EAAE3P,GAAM,GAAEm5D,KAAYr2D,EAAI,OAE9B,IAAIohH,EAAU,IAAI6C,KAAK,GAAI5tD,EAAW,QACtC,MAAM05C,EAAa0kE,EAAM+7G,cAAcq7B,GACnC97M,GACA0kE,EAAMi9G,cAActwK,EAASrR,GAEjC06M,EAAYv8S,MAAMumK,EAAO,CAACrzD,EAAS,CAAE71G,OAAQ,CAAE7I,OAAQ2sB,KAAK0vE,UAAU5nE,cA9C9C,mBAA5B+uB,EAAKv/C,KAAKulB,eACTjvB,OAAOD,KAAK0tT,GAAiBzxS,MAAKtD,GAAK+0S,EAAgB/0S,GAAG+1S,UAC3Dn8S,OAAO6mG,mBACPv4G,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,oBAAkC,CAClDsoD,KAAMA,YAGPwkQ,EAAgBr0P,UAsD3C,IAAIq5N,EAAa,SAAU7yR,GACvB,GAAIusT,GAAWvsT,GAAI,CACf,IAAIT,EAAMyB,EAAKyD,OACf,GAAImoT,EAAcl+S,SAAW1O,EAAE0O,OAAQ,CACnC,IAAKo0L,EAAQ9iM,EAAEgzR,aAAat1L,OAAQ,CAChC,IAAIve,EAAK5/E,EAAIw1D,sBACToqB,IACA5/E,EAAIi6G,qBAAuBr6B,EAAG92B,QAAQ9oD,EAAIi6G,uBAGlDx5G,EAAE+uE,uBAGF/uE,EAAEoxG,iBAEN7xG,EAAIoO,IAAIqxB,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QAG7B+hM,EAAU,SAAUplG,GACpB,IAAK,IAAIv6F,EAAI,EAAGgiB,EAAKu4E,EAAMp5F,OAAQnB,EAAIgiB,IAAMhiB,EACzC,GAAsB,SAAlBu6F,EAAMv6F,GAAGoxR,KACT,QAAI72L,EAAMv6F,GAAGsxR,aAAe/2L,EAAMv6F,GAAGqxR,oBAAsB92L,EAAMv6F,GAAGqxR,mBAAmBi7B,SAI5E3sH,EAAQplG,EAAMv6F,GAAGqxR,oBAIpC,OAAO,GAEXo4B,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAOojG,EAAU7jG,GACvBy9H,GAAiBI,IAEzBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAMosJ,GAC5By9H,GAAiBI,IAEzBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAOojG,EAAU5jG,GACvBw9H,GAAiBI,IAEzBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAMqsJ,GAC5Bw9H,GAAiBI,IAEzBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAOojG,EAAU/jP,GACvBgkP,EAAY+5B,IAEpBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAMkM,GAC5BgkP,EAAY+5B,IAEpBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAM,YAC5B8pR,GAAgBG,IAExBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAM,UAC5B8pR,GAAgBG,IAExBA,EAAct6B,gBAAgBjpR,KAC1Bu9B,GAAG0a,OAAOkuI,OAAO5hL,SAAS+0B,KAAM,WAC5B8pR,GAAgBG,IAExBh/S,SAASf,iBAAiB,cAAc,SAAU7M,GACzCA,EAAEijK,SACHjiK,EAAKyD,OAAOkJ,IAAIqxB,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,SAEtC,GACHC,EAAK0uT,WAAY,EAErB,OAAO9C,GAGXpoT,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,UAAkCqH,eAAgB6yD,EAAO99D,GACrD,MAAMI,EAAOC,KACb,IAAI2rT,EACJ,GAAKluP,EAAMp6D,OAAX,CAgBA,GAbItD,EAAK0uT,UACL1uT,EAAKzB,IAAIujN,kBAAkBt6M,SAAQ,SAAUC,GACrCA,aAAem+B,GAAGg8K,YAAYo/F,cAC9B4K,EAAgBnkT,MAKxBmkT,EAAgB5rT,EAAK4lF,kBAAkB,CACnCllC,MAAM,IAIVkrQ,GAAiBhsT,EAAS,CAC1B,IAAIqgD,EAAgB2rQ,EAAcl+S,OAOlC,GANAk+S,EAAcl+S,OAAS9N,EAAQmL,QAE/B/K,EAAKyD,OAAOu4B,IAAIj8B,GAAAA,EAAAA,MAAAA,gBAA6B,SAAoB6N,GAC7Dg+S,EAAcl+S,OAASuyC,KAGvBrgD,EAAQojB,OAAQ,CAChB,MAAM2rS,EAAoB/C,EAAcU,aAAe,GACvDV,EAAcU,YAAcqC,EACvBrmT,OAAO1I,EAAQojB,OAAO7d,QAAO6b,IAAM2tS,EAAkB12R,SAASjX,OAI3E,IAAIm9D,EAAKn+E,EAAKyD,OAAOswD,sBACjBoqB,IACAn+E,EAAKyD,OAAO+0G,qBAAuBr6B,EAAG92B,QAAQrnD,EAAKyD,OAAO+0G,uBAE9D,IAAK,IAAIr2G,EAAI,EAAGgiB,EAAKu5C,EAAMp6D,OAAQnB,EAAIgiB,IAAMhiB,EAAG,CAC5C,MAAMkmD,EAAOqV,EAAMv7D,GACnBypT,EAAc34B,YAAY5qO,MAIlC7kD,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,OAA+B,SAAUjF,GACrC,MAAMyB,EAAOC,KACP6nT,EAAe,WACjB,MAAM8G,EAAW5uT,EAAKzB,IAAI0kN,UACpB4rG,EAAWtwT,EAAI2B,KAAK3B,IAAI0kN,UAC9B/7J,YAAW,WACH0nQ,IAAaC,GACb7uT,EAAKzB,IAAI60D,QAAQy7P,KAEtB,MAEPtwT,EAAI2B,KAAK3B,IAAI+P,GAAG,cAAew5S,GAC/B9nT,EAAKzB,IAAI+P,GAAG,cAAew5S,GAC3BA,KAOJtkT,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,cAAwC,WACpC,MAAMxD,EAAOC,KACb,IAAI4E,GAAS,EAIb,OAHI7E,EAAKyE,QACLI,EAAS7E,EAAKyE,MAAMwsL,cAEjBpsL,GAOXrB,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,cAAwC,SAAUwB,GACjC/E,KACR2f,WAAWjhB,MAAK,SAAU8F,GAC3BA,EAAM0hK,WAAWnhK,OAIzBxB,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,WAAqCqH,eAAgB4I,UACpCxT,KACc2f,YACnBjM,WAAWF,IAGvBjQ,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,SAAmC,SAAUiB,GACzC,OAAOA,aAAiBmhC,GAAGnhC,MAAMoO,OAGrCrP,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,cAAwC,SAAU5D,GAC9C,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,MAAM6E,EAAQzE,EAAKyD,OACnB,GAAIgB,EAAMlG,IAAK,CACX,MAAMsqT,EAAYL,GAAa7nT,KAAKX,EAAM,CACtCmH,IAAKvH,EAAQuH,IACbohT,gBAAiB3iR,GAAGC,KAAKijK,gBAAgBrkM,EAAMlG,IAAIyoB,YAAaviB,EAAMlG,IAAI4I,IAAK,eAGnF,IAAI4f,EAActiB,EAAM0Q,iBACxB,GAAI4R,GAAeA,EAAYzjB,OAC3ByjB,EAAcA,EAAYxoB,KAAI,SAAUgW,GACpC,OAAOA,EAAIs0S,KAEfpkT,EAAMvE,KAAKuE,MAAMotL,iBAAiB9qK,EAAY,IAC9CtiB,EAAMvE,KAAKuE,MAAMqtL,iBAAiB/qK,EAAYA,EAAYzjB,OAAS,SAInE,IAAI1D,EAAQ46B,QAAUoL,GAAGC,KAAKpnB,IAAI7e,EAAQ46B,QAAQsqK,aAAel/J,GAAGC,KAAKy9J,MAAMxnJ,QAAYlW,GAAGC,KAAKpnB,IAAI7e,EAAQuH,KAAK29L,YAAcl/J,GAAGC,KAAKpnB,IAAI7e,EAAQuH,KAAK29L,aAAel/J,GAAGC,KAAKy9J,MAAMznJ,SAajL,GAAIj8C,EAAQ46B,QAAUoL,GAAGC,KAAKpnB,IAAI7e,EAAQ46B,QAAQsqK,aAAel/J,GAAGC,KAAKy9J,MAAMznJ,SAAWjW,GAAGC,KAAKpnB,IAAI7e,EAAQuH,KAAK29L,aAAel/J,GAAGC,KAAKy9J,MAAMxnJ,OAAQ,CAC3J,IAAIgxG,EAAkBtpJ,GAAAA,EAAAA,KAAAA,mBAA2BoiC,GAAGC,KAAKijK,gBAAgBrkM,EAAMlG,IAAIyoB,YAAaviB,EAAMlG,IAAI4I,IAAK,cAE3G1C,EAAM8lI,gBACN9lI,EAAM8lI,cAAgB9lI,EAAM8lI,cAAgBuiB,EAC5C9sJ,EAAKyE,MAAMqtL,iBAAiBrtL,EAAM8lI,gBAGlC9lI,EAAM8rL,gBACN9rL,EAAM8rL,cAAgB9rL,EAAM8rL,cAAgBzjC,EAC5C9sJ,EAAKyE,MAAMotL,iBAAiBptL,EAAM8rL,sBArBlC9rL,EAAM8lI,gBACN9lI,EAAM8lI,cAAgB9lI,EAAM8lI,cAAgBs+K,EAC5C7oT,EAAKyE,MAAMqtL,iBAAiBrtL,EAAM8lI,gBAGlC9lI,EAAM8rL,gBACN9rL,EAAM8rL,cAAgB9rL,EAAM8rL,cAAgBs4H,EAC5C7oT,EAAKyE,MAAMotL,iBAAiBptL,EAAM8rL,kBAqBtD,MAAMu+H,GAAyB,SAAUvuT,GACrC,MAAMsE,EAAS,IAAIkqT,OACbpmD,EAAKpoQ,EAAS,GACpBsE,EAAO0kH,OAAOo/I,EAAG,GAAIA,EAAG,IACxB,IAAK,IAAIxmQ,EAAI,EAAGgiB,EAAK5jB,EAAS+C,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC/C,MAAMkD,EAAI9E,EAAS4B,GACnB0C,EAAOw6H,OAAOh6H,EAAE,GAAIA,EAAE,IAG1B,OADAR,EAAOmqP,YACAnqP,GAGLmqT,GAAyB,SAAU76R,GAIrC,GAAI3wB,GAAAA,EAAAA,KAAAA,eACA,OAAO2wB,EAEN,CACD,MAAMtvB,EAAS,IAAIkqT,OAEnB,OADAlqT,EAAOoqT,QAAQ96R,EAAM,IAAI+6R,UAAU,SAAWx9S,OAAO0oG,iBAAmB,MACjEv1G,IAITsqT,GAAsB,SAAU5uT,EAAU6uT,EAAeC,EAAkBC,GAC7E,MAAMtvT,EAAOC,KACPsvT,EAAwB,IAAGH,oBAC3BI,EAAyB,IAAGJ,qBAC9BpvT,EAAKuvT,KACLvvT,EAAKyE,MAAMqqL,GAAGlpJ,GAAGkX,OAAOkyI,UAAUmD,UAAWnyL,EAAKuvT,WAC3CvvT,EAAKuvT,GACZvvT,EAAKyE,MAAMqqL,GAAGlpJ,GAAGkX,OAAOkyI,UAAUoD,WAAYpyL,EAAKwvT,WAC5CxvT,EAAKwvT,IAGZjvT,IACAP,EAAKuvT,GAAwBF,EAC7BrvT,EAAKyE,MAAM6J,GAAGs3B,GAAGkX,OAAOkyI,UAAUmD,UAAWnyL,EAAKuvT,IAElDvvT,EAAKwvT,GAAyBF,EAC9BtvT,EAAKyE,MAAM6J,GAAGs3B,GAAGkX,OAAOkyI,UAAUoD,WAAYpyL,EAAKwvT,KAGvDxvT,EAAKyD,OAAOlF,IAAI2B,KAAK3B,IAAIu+C,UAG7Bt5C,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,KAA+B,SAAUjD,GACrC,MAAMP,EAAOC,KACbkvT,GAAoBxuT,KAAKX,EAAMO,EAAU,QAAQ,SAAUvB,GACvD,IAAIwB,EAAOD,EACPiD,GAAAA,EAAAA,KAAAA,WAAmBjD,KACnBC,EAAOD,EAASI,KAAKX,EAAK2D,QAExBnD,aAAgBuuT,SAClBvuT,EAAOsuT,GAAuBtuT,IAElCA,EAAOwuT,GAAuBxuT,GAC9B,MAAM2yE,EAAMn0E,EAAEuzE,QACdY,EAAIq+B,OACJr+B,EAAI59D,KAAK/U,EAAM,cAChB,SAAUxB,GACTA,EAAEuzE,QAAQqoH,cAIlBp3L,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,OAAiC,SAAUjD,EAAUqF,GACjD,MAAM5F,EAAOC,KACbkvT,GAAoBxuT,KAAKX,EAAMO,EAAU,UAAU,SAAUqN,OAC1D,SAAU5O,GACT,IAAIwB,EAAOD,EACPiD,GAAAA,EAAAA,KAAAA,WAAmBjD,KACnBC,EAAOD,EAASI,KAAKX,EAAK2D,QAExBnD,aAAgBuuT,SAClBvuT,EAAOsuT,GAAuBtuT,IAElCA,EAAOwuT,GAAuBxuT,GAC9B,MAAM2yE,EAAMn0E,EAAEuzE,QACV3sE,EAAMomC,cACNmnC,EAAIy7K,UAAYhpP,EAAMomC,aAEtBpmC,EAAMmmC,cACNonC,EAAI+rD,YAAct5H,EAAMmmC,aAE5BonC,EAAI39D,OAAOhV,OAInBgD,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,UAA2CoiC,GAAG3yB,OAAOutS,gBAErDh9S,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,WAA4CoiC,GAAG3yB,OAAOytS,iBAEtDl9S,GAAAA,EAAAA,KAAAA,MAAAA,UAAAA,gBAA0C,SAAUiB,GAChD,IAAIzE,EAAOC,KACXwE,EAAM6J,GAAG,kBAAkB,WACnBtO,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,gBAA8B,CAClD0E,MAAOzE,EAAKyD,WAGrBzD,EAAKyD,OAAOlF,MAGnBiF,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,WAC1C,IAAIqB,EAAS,KACT7E,EAAOC,KACX,OAAQD,EAAKomB,kBACT,KAAKrmB,GAAAA,EAAAA,UAAAA,IAED,IADA,IAAI0vT,EAAUzvT,EAAKyD,OAAOwS,aAAa2mF,WAAW8yN,QAAQC,OAAOnvP,QACxDr+D,EAAI,EAAGA,EAAIstT,EAAQnsT,OAAQnB,IAChC,GAAIstT,EAAQttT,GAAGs+D,MAAQgvP,EAAQttT,GAAGs+D,KAAKo6G,IAAK,CACxCh2K,EAAS4qT,EAAQttT,GAAGs+D,KAAKo6G,IAAI9/C,eAC7B,MAGR,MACJ,KAAKh7H,GAAAA,EAAAA,UAAAA,KACD8E,EAAS7E,EAAKyD,OAAOwS,aAAa25S,mBAAmBC,QAAQjvP,IAAIH,KAAKo6G,IAAI,GAAG/oK,KAKrF,MAAMmuE,EAAWrzE,SAAS2zC,yBACpBuvQ,EAAWljT,SAASC,cAAc,YAIxC,OAHAozE,EAASnzE,YAAYgjT,GACrBA,EAAS1iT,UAAYvI,EACrBA,EAASirT,EAAS9hT,aAItBxK,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,IAAIqB,EAAS,KACT4D,EAAIxI,KAAKwD,OAAOwS,aAIpB,OAHIxN,EAAEm0F,YAAcn0F,EAAEm0F,WAAW8yN,QAAQK,iBACrClrT,EAAS4D,EAAEm0F,WAAW8yN,QAAQK,eAAej1L,QAE1Cj2H,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,qBAA4C,CACxC,mBACA,gCACA,0BACA,2CACA,YACA,aACA,YAGJA,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,SAAU5D,GACpD,IAAIiF,EAAS,KACT7E,EAAOC,KACPgW,EAAejW,EAAKyD,OAAOwS,aAE/B,IAAI+5S,EAIJ,IALApwT,EAAUA,GAAW,IAETuH,MACR6oT,EAAqB/5S,EAAae,SAASW,cAAcxS,QAAOojB,GAAO/kB,GAAAA,EAAAA,KAAAA,cAAsB5D,EAAQuH,IAAKohB,EAAIG,iBAE9GzS,GAAgBA,EAAae,SAC7B,IAAK,IAAI7U,EAAI,EAAGA,EAAI8T,EAAae,SAASnE,MAAMvP,OAAQnB,IAAK,CACzD,IAAIsC,EAAQwR,EAAae,SAASnE,MAAM1Q,GACxC,GAAInC,EAAKyD,OAAO7D,QAAQwd,aAAe3Y,EAAM6S,WACzC,IAAK,IAAIC,EAAI,EAAGA,EAAI9S,EAAM+S,kBAAkBlU,OAAQiU,IAChD,GAAI3X,EAAQuH,IAAK,CAEb,GADU6oT,EAAmB7qT,QAAO8qT,GAAUA,EAAO34S,aAAe7S,EAAM+S,kBAAkBD,GAAGI,gBACvFrU,OAAS,EAAG,CAChBuB,EAASJ,EACT,YAED,IAAK7E,EAAQuf,aAAenf,EAAKyD,OAAO7D,QAAQwf,aAAe3a,EAAM+S,kBAAkBD,GAAGI,cAAe,CAC5G9S,EAASJ,EACT,OAMpB,OAAOI,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,cAA+C,SAAU4b,GACrD,IAAIva,EAAS,KAEToR,EADOhW,KACawD,OAAOwS,aAC/B,GAAIA,GAAgBA,EAAae,UAAYf,EAAae,SAASW,cAC/D,IAAK,IAAIxV,EAAI,EAAGA,EAAI8T,EAAae,SAASW,cAAcrU,OAAQnB,IAAK,CACjE,IAAIomB,EAAMtS,EAAae,SAASW,cAAcxV,GAC9C,GAAIomB,EAAIjR,aAAe8H,EAAW,CAC9Bva,EAAS0jB,EAAIlQ,WACb,OAIZ,OAAOxT,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,qBAAsD,SAAUkR,GAC5D,IAAI7P,EAAS,GACT7E,EAAOC,KAUX,GATIyU,EAAK8uS,iBACL3+S,EAAS,CAAC6P,EAAK8uS,iBAAkB9uS,EAAK8uS,mBAGlC9uS,EAAKw7S,qBAAuBx7S,EAAKy7S,uBACjCtrT,EAAS,CAAC6P,EAAKy7S,oBAAqBz7S,EAAKw7S,uBAI5CrrT,EAAOvB,SAAWtD,EAAKmjB,QAAQzO,GAAO,CAGvC,IAFA,IAAIJ,EAAWtU,EAAK4jB,cAAclP,GAC9BtI,GAAO6pD,EAAAA,EAAUp6C,EAAMo6C,EAAAA,EAClB9zD,EAAI,EAAG+I,EAAMoJ,EAAShR,OAAQnB,EAAI+I,EAAK/I,IAAK,CACjD,IAAIiuT,EAAoBpwT,EAAK+iB,qBAAqBzO,EAASnS,IACvDiuT,EAAkB,GAAKhkT,IACvBA,EAAMgkT,EAAkB,IAExBA,EAAkB,GAAKv0S,IACvBA,EAAMu0S,EAAkB,IAG5BhkT,GAAO6pD,EAAAA,GAAYp6C,EAAMo6C,EAAAA,IACzBpxD,EAAS,CAACuH,EAAKyP,IAGvB,OAAOhX,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,MACMqB,EAAS,GACToR,EAAezS,GAAAA,EAAAA,aAFRvD,KAE6BwD,OAAO6R,KAmBjD,OAjBIW,IACIA,EAAao6S,iBACbxrT,EAAOiE,KAAOmN,EAAao6S,gBAAgBC,aAAazmS,OACxDhlB,EAAO41E,KAAOxkE,EAAao6S,gBAAgBE,aACvC1rT,EAAO41E,MAAQ51E,EAAO41E,KAAK3oE,MAAQjN,EAAO41E,KAAK3oE,KAAK+X,OAAOvmB,OAAS,EACpEuB,EAAO41E,KAAO51E,EAAO41E,KAAK3oE,YAEnBjN,EAAO41E,MAGbxkE,EAAau6S,sBAClB3rT,EAAOiE,KAAOmN,EAAau6S,sBAAsB1rS,MAAM+E,OAGvDhlB,EAAOiE,KAAOmN,EAAaipD,QAAQp6C,MAAM+E,QAG1ChlB,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,QAAyC,SAAUsF,GAC/C,IAIQ3G,EAJJnC,EAAOC,KACP4E,EAAS,GACToR,EAAejW,EAAKyD,OAAOwS,aAC/B,GAAIA,EAEA,GAAIA,EAAa2mF,WAAY,CACzB,IAAIj5E,EAAa3jB,EAAKijB,mBACtB,IAAK9gB,EAAI,EAAGA,EAAIwhB,EAAWrgB,OAAQnB,IAAK,CACpC,IAAI6e,EAAI2C,EAAWxhB,GACnB,GAAInC,EAAKyD,OAAO4X,aAAarb,EAAKmjB,QAAQnC,GAAIlY,GAAO,CAC7CkY,EAAE8D,QACFjgB,EAAO2F,MAAQwW,EAAE8D,OAEjB9D,EAAEgE,WACFngB,EAAOkgB,SAAW/D,EAAEgE,UAExBngB,EAAOygB,OAAS,GAEhB,IASIg1H,EAAY,SAAUv7I,EAAGw7I,GACzB,GAAIx7I,EAAE8T,OAAS9T,EAAE8T,MAAMvP,OAAS,EAC5B,IAAK,IAAInB,KAAKpD,EAAE8T,MAEZynI,EAAUv7I,EAAE8T,MAAM1Q,GAAIo4I,QAG1BA,EAAKlqI,MAAMrQ,EAAM,CAACjB,KAO1B,GAFAu7I,EAAUt5H,GArBK,SAAUle,GACR7C,KAAKmD,UAAUN,GACrBqC,QAAQ6b,GAAMA,EAAEpP,MAAKpK,SAASwZ,IACjCnc,EAAOygB,OAAOjd,KAAK,CACfuJ,IAAKoP,EAAEpP,IAAKpH,MAAO1H,EAAMgiB,cAmBjC9D,EAAEkE,aAAelE,EAAEkE,YAAY5hB,OAAQ,CACvCuB,EAAOogB,SAAW,GAClB,IAAK,IAAI1N,EAAI,EAAGA,EAAIyJ,EAAEkE,YAAY5hB,OAAQiU,IAAK,CAC3C,IAAI0R,EAAKjI,EAAEkE,YAAY3N,GACvB1S,EAAOogB,SAAS5c,KAAK,CACjB4K,OAAQgW,EAAG6xG,OAAQ1wH,KAAM6e,EAAG7e,KAAMkL,IAAK2T,EAAG8xG,kBAItDl2H,EAAOi7D,UAAY9+C,EAAE8+C,UACrB,aAIP,GAAI7pD,EAAae,SAAU,CAC5B,MAAMgP,EAAYhmB,EAAKyD,OAAOyX,MAAM,GACpC,IAAK/Y,EAAI,EAAGA,EAAI8T,EAAae,SAASnE,MAAMvP,OAAQnB,IAAK,CACrD,MAAMsC,EAAQwR,EAAae,SAASnE,MAAM1Q,GAC1C,GAAIsC,EAAM6S,aAAe0O,EAAW,CAChCnhB,EAAOkgB,SAAWtgB,EAAMugB,SACxB,IAAIC,EAAWxgB,EAAMgsT,SACjBxrS,IACKlkB,MAAMC,QAAQikB,KACfA,EAAW,CAACA,IAEhBpgB,EAAOogB,SAAWA,EAAS1mB,KAAI0qB,IAAM,CACjChW,OAAQgW,EAAGhW,OACXqC,IAAK2T,EAAGnX,UAGhB,QAMhB,OAAOjN,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,IAAIqB,EAAS,KACToR,EAAehW,KAAKwD,OAAOwS,aAO/B,OANIA,EAAa2mF,YAAc3mF,EAAa2mF,WAAW8yN,SAAWz5S,EAAa2mF,WAAW8yN,QAAQC,OAC9F9qT,EAAS9E,GAAAA,EAAAA,UAAAA,IAEJkW,EAAa25S,oBAAsB35S,EAAa25S,mBAAmBC,UACxEhrT,EAAS9E,GAAAA,EAAAA,UAAAA,MAEN8E,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,gBAAiD,WAC7C,IAAIqB,EAAS,KACToR,EAAehW,KAAKwD,OAAOwS,aAO/B,OANIA,EAAa2mF,YAAc3mF,EAAaipD,QACxCr6D,EAASoR,EAAaipD,QAAQp6C,MAEzB7O,EAAau6S,wBAClB3rT,EAASoR,EAAau6S,sBAAsB1rS,OAEzCjgB,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,iBAAkD,WAC9C,IACIqB,EAIJ,OALW5E,KAEFmmB,mBAAqBrmB,GAAAA,EAAAA,UAAAA,MAC1B8E,EAHO5E,KAGOwD,OAAOwS,aAAa2mF,WAAW/pF,OAE1ChO,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,QAAyC,SAAUkR,EAAMuR,GACrD,IAAIphB,EAAS6P,EAAKmc,KAClB,GAAIhsB,GAAUohB,EAAc,CACxB,IAAIve,EAAM7C,EAAOoE,QAAQ,KACrBvB,GAAO,IACP7C,EAASA,EAAOgiB,OAAOnf,EAAM,IAGrC,OAAO7C,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,cAA+C,SAAUkR,GACrD,OAAOA,EAAK4C,YAGhB9T,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,cAA+C,SAAUkR,GACrD,IAAI7P,EAAS6P,EAAK7B,MASlB,OARK9R,MAAMC,QAAQ6D,KAEXA,EADAA,EACS,CAACA,GAGD,IAGVA,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,iBAAkD,WAC9C,IAAIxD,EAAOC,KACX,IAAKD,EAAK0wT,WACN,OAAQ1wT,EAAKomB,kBACT,KAAKrmB,GAAAA,EAAAA,UAAAA,IACD,IAQI88F,EAAO78F,EAAKyjB,mBAChBzjB,EAAK0wT,WAAa7zN,EATC,SAAS8zN,EAAaj8S,GAGrC,IAFA,IAAIH,EAAI,CAACG,GACLJ,EAAWtU,EAAK4jB,cAAclP,GACzBvS,EAAI,EAAGA,EAAImS,EAAShR,OAAQnB,IACjCoS,EAAIA,EAAEjM,OAAOqoT,EAAar8S,EAASnS,KAEvC,OAAOoS,EAGco8S,CAAa9zN,GAAQ,GAC9C,MACJ,KAAK98F,GAAAA,EAAAA,UAAAA,KACDC,EAAK0wT,WAAa1wT,EAAKyD,OAAOwS,aAAae,SAASnE,MAAMjI,QAC1D,MACJ,QACI5K,EAAK0wT,WAAa,GAI9B,OAAO1wT,EAAK0wT,YAGhBltT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,mBAAoD,SAAUkR,GAC1D,OAAOA,GAGXlR,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,sBAAuD,SAAUyS,GAC7D,OAAOA,GAIX,MAAM26S,GAAYhkT,SAAS2zC,yBACrBswQ,GAAYjkT,SAASC,cAAc,YACzC+jT,GAAU9jT,YAAY+jT,IAEtBrtT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,UAA2C,SAAUkR,GACjD,IAAI7P,EAAS,GACTwB,EAASqO,EAAK86O,MAiBlB,OAhBInpP,GAAUA,EAAO/C,QACb+C,EAAO/C,QAAU+C,EAAO,GAAGyqT,WAAazqT,EAAO,GAAGyqT,UAAUxtT,QAC5D+C,EAAO,GAAGyqT,UAAUtpT,SAAQ,SAAuBupT,GAC/CF,GAAUzjT,UAAY2jT,EAAUh2L,eAChC,MAAMi2L,EAAY,CACdp/S,IAAKi/S,GAAU7iT,aAOnBnJ,EAAOwD,KAAK2oT,MAIjBnsT,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,SAAU2D,GACpD,IAAInH,EAAOC,KACP4E,GAAS,EACTJ,EAAQzE,EAAKyD,OACjB,OAAQzD,EAAKomB,kBACT,KAAKrmB,GAAAA,EAAAA,UAAAA,IACD,GAAI0E,EAAMwR,cAAgBxR,EAAMwR,aAAa2mF,YAAcn4F,EAAMwR,aAAa2mF,WAAW/pF,OACjFpO,EAAMyW,MAAM5X,OAAS,EAwBrB,IAvBA,IAAI4X,EAAQzW,EAAMyW,MAAMtQ,MAAM,GAC1BqmT,EAAgB,SAASA,EAAcprS,EAAO/c,EAAMooT,GACpD,IAAI38S,GAAI,EACR,GAAIsR,EACA,IAAK,IAAI1jB,EAAI,EAAGA,EAAI0jB,EAAMviB,OAAQnB,IAAK,CACnC,IAAI0S,EAAIgR,EAAM1jB,GACd,MAAMgvT,EAAUt8S,EAAE6tE,KAAO7tE,EAAEu8S,IACrBv8P,EAAU9zD,MAAMC,QAAQmwT,GAAWA,EAAU,CAACA,GACpD,IAAIE,EAAOH,GAASr8P,EAAQ5rD,QAAQ9B,IAAQ,EAC5C,GAAI1C,EAAM4W,aAAarb,EAAKmjB,QAAQtO,GAAI/L,GAAO,CACvCuoT,IACA98S,GAAI,GAER,MAEC,GAAI08S,EAAcp8S,EAAEhC,MAAO/J,EAAMuoT,GAAO,CACzC98S,GAAI,EACJ,OAIZ,OAAOA,GAEJ2G,EAAM5X,OAAS,GAClB,IAAK2tT,EAAc,CAACxsT,EAAMwR,aAAa2mF,WAAW/pF,OAAQqI,EAAM8mD,OAAQ,CACpEn9D,GAAS,EACT,MAKhB,MACJ,KAAK9E,GAAAA,EAAAA,UAAAA,KAED,GADA8E,GAAS,EACLJ,EAAMwR,cAAgBxR,EAAMwR,aAAae,UAAYvS,EAAMwR,aAAae,SAASW,cAEjF,IADA,IAAI4Q,EAAM9jB,EAAMwR,aAAae,SAASW,cAC7BxV,EAAI,EAAGA,EAAIomB,EAAIjlB,OAAQnB,IAC5B,GAAIomB,EAAIpmB,GAAGmV,aAAe7S,EAAM7E,QAAQwf,UAAW,CAC/Cva,EAASrB,GAAAA,EAAAA,KAAAA,cAAsB2D,EAAKohB,EAAIpmB,GAAGumB,cAC3C,OAQpB,OAAO7jB,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,iBAAkD,WAC9C,IACIqB,EAAS,GACTJ,EAFOxE,KAEMwD,OACjB,OAHWxD,KAGEmmB,kBACT,KAAKrmB,GAAAA,EAAAA,UAAAA,IACD,GAAI0E,EAAMwR,cAAgBxR,EAAMwR,aAAa2mF,YAAcn4F,EAAMwR,aAAa2mF,WAAW/pF,OACjFpO,EAAMyW,MAAM5X,OAAS,EAAG,CACxB,MAAMoxD,EAAWjwD,EAAMyW,MAClB3c,KAAI,SAAUuK,GACX,OAAOrE,EACFshB,YAAYjd,GACZvK,KAAI,SAAUmW,GACX,MAAMy8S,EAAUz8S,EAAKguE,KAAOhuE,EAAK08S,KAAO,GAClCv8P,EAAU9zD,MAAMC,QAAQmwT,GAAWA,EAAU,CAACA,GACpD,OAAOpwT,MAAMC,QAAQ6zD,GAAWA,EAAU,CAACA,MAE9C3sD,QAAO,SAAU+Z,EAAMC,GACpB,OAAoB,IAAhBD,EAAK3e,OACE4e,GAEXA,EAAI1a,SAAQ,SAAUC,GACdwa,EAAKhZ,QAAQxB,GAAO,IACpBwa,EAAKA,EAAK3e,OAAS,GAAKmE,MAGzBwa,KACR,OAGf,GAAwB,IAApByyC,EAASpxD,OACTuB,EAAS6vD,EAAS,OACf,CACH,MAAME,EAAgBF,EAAS9pD,MAAM,GACrC/F,EAAS6vD,EAAS,GAAGvvD,QAAO,SAAUsC,GAClC,OAAOmtD,EAAc5/C,OAAM,SAAU6/C,GACjC,OAAOA,EAAQ5rD,QAAQxB,IAAQ,SAMnD,MACJ,KAAK1H,GAAAA,EAAAA,UAAAA,KACG0E,EAAMwR,cAAgBxR,EAAMwR,aAAae,UACzCvS,EAAMwR,aAAae,SAASnE,MACvB1N,QAAO,SAAU6b,GACd,OAAOA,EAAE1J,aAAe7S,EAAM2Y,cAEjC5V,SAAQ,SAAUwZ,GACf,MAAM8hS,EAAiB9hS,EAAExJ,kBACpBjZ,KAAI,SAAU+yT,GACX,OAAOA,EAAK35S,iBAEpB9S,EAASJ,EAAMwR,aAAae,SAASW,cAChCxS,QAAO,SAAUojB,GACd,OAAOu6R,EAAe75S,QAAQsf,EAAIjR,aAAe,KAEpD/Y,KAAI,SAAUgqB,GACX,OAAOA,EAAIG,mBAQvC,OAAO7jB,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,oBAAqD,SAAU2D,GAC3D,IACItC,EAAS,GACTJ,EAFOxE,KAEMwD,OACjB,OAHWxD,KAGEmmB,kBACT,KAAKrmB,GAAAA,EAAAA,UAAAA,IACD,GAAI0E,EAAMwR,cAAgBxR,EAAMwR,aAAa2mF,YAAcn4F,EAAMwR,aAAa2mF,WAAW/pF,MAAO,CAC5F,IAAI0+S,EAAe,SAAUtnT,EAAM9C,EAAK+pT,GACpC,IAAIM,EAAavnT,EAAKy4E,KAAOz4E,EAAKmnT,IAC9BD,EAAUpwT,MAAMC,QAAQwwT,GAAcA,EAAa,CAACA,GACpDH,EAAOH,GAASC,EAAQloT,QAAQ9B,IAAQ,EAI5C,GAHIkqT,GAAQpnT,EAAK4mB,MACbhsB,EAAOwD,KAAK4B,EAAK4mB,MAEjB5mB,EAAK4I,MACL,IAAK,IAAI1Q,EAAI,EAAGA,EAAI8H,EAAK4I,MAAMvP,OAAQnB,IACnCovT,EAAatnT,EAAK4I,MAAM1Q,GAAIgF,EAAKkqT,IAI7CE,EAAa9sT,EAAMwR,aAAa2mF,WAAW/pF,MAAO1L,GAEtD,MACJ,KAAKpH,GAAAA,EAAAA,UAAAA,KACD,GAAI0E,EAAMwR,cAAgBxR,EAAMwR,aAAae,UAAYvS,EAAMwR,aAAae,SAASW,cAEjF,IADA,IAAI85S,EAAUhtT,EAAMwR,aAAae,SAASW,cACjCxV,EAAI,EAAGgiB,EAAKstS,EAAQnuT,OAAQnB,EAAIgiB,EAAIhiB,IAAK,CAC9C,IAAIomB,EAAMkpS,EAAQtvT,GAClB,GAAIqB,GAAAA,EAAAA,KAAAA,cAAsB2D,EAAKohB,EAAIG,cAG/B,IAFA,IAAIgpS,EAAgBnpS,EAAIjR,WACpB2oD,EAAYx7D,EAAMwR,aAAae,SAASnE,MACnC0E,EAAI,EAAGypF,EAAK/gC,EAAU38D,OAAQiU,EAAIypF,EAAIzpF,IAE3C,IADA,IAAIo6S,EAAc1xP,EAAU1oD,GAAGC,kBACtBM,EAAI,EAAGC,EAAK45S,EAAYruT,OAAQwU,EAAIC,EAAID,IAC7C,GAAI65S,EAAY75S,GAAGH,gBAAkB+5S,EAAe,CAChD7sT,EAAOwD,KAAK43D,EAAU1oD,GAAGD,YACzB,QAWhC,OAAOzS,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,wBAAyD,SAAU2D,GAC/D,IACItC,EAAS,GACb+jT,GAAoB,CAChBzhT,IAAKA,IAET,IAAI1C,EALOxE,KAKMwD,OACjB,GANWxD,KAMFmmB,mBAAqBrmB,GAAAA,EAAAA,UAAAA,KAG1B,IAFA,IAAIkgE,EAAYx7D,EAAMwR,aAAae,SAASnE,MACxC4+S,EAAUhtT,EAAMwR,aAAae,SAASW,cACjCxV,EAAI,EAAGgiB,EAAK87C,EAAU38D,OAAQnB,EAAIgiB,EAAIhiB,IAC3C,GAAIsC,EAAM2Y,aAAe6iD,EAAU99D,GAAGmV,WAElC,IADA,IAAIq6S,EAAc1xP,EAAU99D,GAAGqV,kBACtBD,EAAI,EAAGypF,EAAK2wN,EAAYruT,OAAQiU,EAAIypF,EAAIzpF,IAE7C,IADA,IAAIq6S,EAAUD,EAAYp6S,GACjBO,EAAI,EAAGC,EAAK05S,EAAQnuT,OAAQwU,EAAIC,EAAID,IAAK,CAC9C,IAAIyQ,EAAMkpS,EAAQ35S,GAClB,GAAIyQ,EAAIjR,aAAes6S,EAAQj6S,cAAe,CACtCnU,GAAAA,EAAAA,KAAAA,cAAsB2D,EAAKohB,EAAIG,eAC/B7jB,EAAOwD,KAAKkgB,EAAIjR,YAEpB,OAOxB,OAAOzS,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,WAA4C,WACxC,IAAIxD,EAAOC,KAEXD,EAAK4f,WAAWjhB,MAAK,SAAUqiB,GAC3BhhB,EAAKyD,OAAO7D,QAAUI,EAAKyD,OAAO7D,SAAW,GAC7C,IAAIojC,EAAOhiB,EAAEoB,YAAYg6R,UACzBp8S,EAAKyD,OAAO7D,QAAQm0I,WAAa/wG,EAAKA,EAAK1/B,OAAS,OAI5D,MAAMukT,GAAe,SAAUtsS,EAAQ6oC,EAAY7xB,GAC/C,MAAMs/R,EAAet/R,GAAS6xB,GAAc,GAC5C,OAAO7oC,EAAOhd,KAAI,CAACsqB,EAAG1mB,IAAMA,EAAI,EAAI0mB,EAAIgpS,EAAehpS,EAAIgpS,KAG/DruT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,SAAU8R,EAAK6H,EAAQvd,GACnE,MAAMI,EAAOC,KACb,IAAI4E,EAAS,KAET+V,EAAS,IAAIgrB,GAAGhrB,OAAO6nS,SAAS,CAChCntS,IAAKA,EACL8X,YAAaxtB,EAAQrB,IAAMqB,EAAQrB,IAAI6uB,iBAAc/oB,EACrD8Y,OAAQA,EACR23D,MAAOtxE,GAAAA,EAAAA,IAAAA,WACPwlP,kBAAmBhpP,EAAKyD,OAAOwpB,aAAakzB,KAAKngD,EAAKyD,QACtD+zS,WAAY,cAqBZ3mP,EAAe,CACf7rD,UAAWmY,EAAO6C,OAAO1c,QAAU1D,GAAWA,EAAQsuB,QAA6B,SAAnBtuB,EAAQsuB,OACxEtT,OAAQA,GAeZ,OAZIhb,EAAQ2qI,gBACR15E,EAAa05E,cAAgB3qI,EAAQ2qI,eAErC3qI,EAAQ2wL,gBACR1/H,EAAa0/H,cAAgB3wL,EAAQ2wL,gBAEzC1rL,EAAS,IAAI+gC,GAAGnhC,MAAM4uE,MAAMxiB,IAErBltD,MAAQ3D,EAEfA,EAAK8xT,gBAAgBjtT,GAEdA,GAGX,IAAIktT,GAAmB,SAAUnyT,GAC7B,IAAII,EAAOC,KACP4E,EAAS,KACTmtT,EAAgBpsR,GAAGhrB,OAAOu8B,KAAKwrQ,wBAAwB3iT,EAAKyD,OAAOwS,aAAc,CACjFxR,MAAO7E,EAAQwd,WACfgC,UAAWxf,EAAQwf,UACnBgO,YAAaxtB,EAAQrB,IAAMqB,EAAQrB,IAAIqB,QAAQwtB,iBAAc/oB,EAC7D65S,gBAAiBt+S,EAAQ6qB,SACzBxX,OAAQrT,EAAQqT,SAMpB,IAAIg/S,EACJ,MAAM3yS,EAAYtf,EACbyD,OACAwS,aACAe,SACAnE,MACAhK,MAAKmY,GAAKA,EAAE1J,aAAe1X,EAAQwd,aACxC,IAAIkC,EAqBA,MAAM,IAAIrgB,MAAO,UAASW,EAAQwd,yBAjBlC,GAHA60S,EAAoB3yS,EACf9H,kBACA3O,MAAKyoT,GAAQA,EAAK35S,gBAAkB/X,EAAQwf,aAC7C6yS,EAaA,MAAM,IAAIhzT,MAAO,eAAcW,EAAQwf,wBAbpB,CACnB,MAAM8yS,EAAYD,EAAkB/5S,oBAChCg6S,GACAF,EAAc5sH,SAASyuG,gBAAgBrsS,SAAQ,SAAUokI,EAAOlkI,GAC5D,MAAM4pT,EAAOY,EAAUxqT,GACvBkkI,EAAMk8C,KAAOwpI,EAAK94S,WAClBozH,EAAMm8C,KAAOupI,EAAKh5S,WAClBszH,EAAMo8C,KAAOspI,EAAK54S,WAClBkzH,EAAMq8C,KAAOqpI,EAAK74S,cAYlC,IAAI05S,EAAQ,SAEZ,GAAIH,EAAe,CAEfA,EAAcrmI,UAAY,KAEtBr5K,SAASN,WAAamgT,IACtBH,EAAchvR,KAAOgvR,EAAchvR,KAAKzkC,KAAI,SAAUkJ,GAClD,OAAOA,EAAI+B,QAAQ,QAAS2oT,OAIpCH,EAAcz2S,OAASvb,EAAKyD,OAAOujB,YAEnCgrS,EAAc5kS,YAAcxtB,EAAQrB,IAAMqB,EAAQrB,IAAI6uB,iBAAc/oB,GAEpEQ,EAAS,IAAI+gC,GAAGhrB,OAAOu8B,KAAK66Q,IACrBzV,oBAAoBv8S,EAAKyD,OAAOwpB,aAAakzB,KAAKngD,EAAKyD,SAmB9D,IAAI2uT,EAASvtT,EAAOsQ,eAAegrC,KAAKt7C,GACxCA,EAAOsQ,eAAiB,WACpB,IAAI4R,EAAcqrS,IACd1yS,EAAS1f,EAAKyD,OAAOwb,sBAEzB,GAAIS,GAAUA,EAAOpc,OAAQ,CACzB,IAAImmB,EAAK/J,EAAO,GAAGC,iBACRtb,IAAPolB,IACA1C,EAAcA,EAAYnc,MAAM6e,EAAI/J,EAAOpc,OAASmmB,IAI5D,OAAO1C,GAIf,OAAOliB,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,gBAAiD,SAAU5D,GACvD,MAAMI,EAAOC,KACb,IAAI4E,EAAS,KAET+V,EAASm3S,GAAiBpxT,KAAKX,EAAMJ,GAEzC,GAAIgb,EAAQ,CACR,IAAIi2C,EAAe,CACfj2C,OAAQA,GAERhb,EAAQ2qI,gBACR15E,EAAa05E,cAAgB3qI,EAAQ2qI,eAErC3qI,EAAQ2wL,gBACR1/H,EAAa0/H,cAAgB3wL,EAAQ2wL,gBAEzC1rL,EAAS,IAAI+gC,GAAGnhC,MAAMy8S,KAAKrwP,IACpBltD,MAAQ3D,EAEfA,EAAK8xT,gBAAgBjtT,GAErB,IAAIkiB,EAAcnM,EAAOzF,iBAEzBtQ,EAAOgtL,iBAAiB9qK,EAAY,GAAK,GACzCliB,EAAOitL,iBAAiB/qK,EAAYA,EAAYzjB,OAAS,IAG7D,OAAOuB,GAQXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,UAA2C,WACvC,OAAOvD,KAAKwE,MAAM2d,YAAYlC,aAOlC1c,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,UAA2C,SAAU2Z,GACjDld,KAAKwE,MAAM2d,YAAYo2R,aAAar7R,IAGxC3Z,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,SAAU4b,GACpD,MAAMpf,EAAOC,KACb,GAAID,EAAKyD,OAAO2G,OAASrK,GAAAA,EAAAA,UAAAA,KAAuB,CAC5C,MAAMsyT,EAAYN,GAAiBpxT,KAAKX,EAAMwD,GAAAA,EAAAA,KAAAA,OAAe,GAAIxD,EAAKyD,OAAO7D,QAAS,CAAEwf,UAAWA,KAC7FgqS,EAAiBiJ,EAAUl9S,iBAC3Bm9S,EAAmBlJ,EAAe,GAClCmJ,EAAmBnJ,EAAeA,EAAe9lT,OAAS,GAChEtD,EAAKyE,MAAMotL,iBAAiBygI,GAC5BtyT,EAAKyE,MAAMqtL,iBAAiBygI,GACxBvyT,EAAKyD,OAAO8mI,gBACZvqI,EAAKyD,OAAO8mI,cAAgBgoL,GAE5BvyT,EAAKyD,OAAO8sL,gBACZvwL,EAAKyD,OAAO8sL,cAAgB+hI,GAEhCtyT,EAAKyE,MAAMuuL,UAAUq/H,KAI7B7uT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,GAAIvD,KAAKwE,MAAM2d,UAAW,CACtB,IAAImtH,EAAKtvI,KAAKwE,MAAM2d,YACpB,OAAImtH,EAAGp6H,eAAuBo6H,EAAGp6H,iBACrB,GAGZ,MAAO,IAIf3R,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,SAAUujB,GACtD,GAAI9mB,KAAKwE,MAAM2d,UAAW,CACtB,IAAImtH,EAAKtvI,KAAKwE,MAAM2d,YAChBmtH,EAAGmnE,aACHnnE,EAAGmnE,aAAe3vL,EAEbwoH,EAAG61D,WACR71D,EAAG61D,SAASsR,aAAe3vL,KAKvCvjB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,WAC1C,MAAMxD,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAC9B1V,EAAKyE,MAAM2d,WACXpiB,EAAKyE,MAAM2d,YAAYqN,UACvB3wB,KAGA4W,QAKZlS,GAAAA,EAAAA,KAAAA,SAAmB,CACfy+C,WAAY,SAAU3sB,EAAO4sB,GACzB,IAAI1hD,EAOJ,OALIA,EADAqhD,GAAAA,EAAAA,iBAA0BK,GACnB,IAAItc,GAAGplC,KAAK08N,gBAAgBh7K,GAG5B,IAAItc,GAAGplC,KAAKi8N,WAAWv6K,GAE3B1hD,EAAKusM,gBAAgBz3K,KAKpC,IAAIk9R,GAAmB,SAAU37D,EAAY47D,EAAWt6R,GACpD,GAAI0+N,EAAY,CACZ,IAAI67D,EAAmB,SAAUC,GAC7B,IAAIC,GAAez6R,GAAUA,EAAOx0B,MAAQw0B,EAAOx0B,MAAMF,OAAO7D,QAAQ2yB,MAAQ,OAASkgS,EACzF,GAAIG,EAAcD,EAAU,CACxB,IAAI1wL,EAAS2wL,EAAcD,EAC3B97D,EAAWzpG,SAASnrB,KAGxB60H,EAAYD,EAAWtzC,UAC3B,GAAIuzC,EACA47D,EAAiB57D,EAAU,QAE1B,CACD,IAAIlrP,EAAMirP,EAAW1pO,WACrB,IAAIvhB,EAAI2pR,aAGH,CACD,MAAMt1M,EAAWrzE,SAAS2zC,yBACpB30C,EAAMgB,SAASC,cAAc,OAGnC,OAFAjB,EAAIgG,IAAMilP,EAAW1M,SACrBlqK,EAASnzE,YAAYlB,GACd,IAAI/M,SAAQ,SAAUC,GACzB8M,EAAIC,iBAAiB,QAAQ,WACzB6mT,EAAiBzyT,KAAKs1R,cACtBz2R,EAAQmB,YAVhByyT,EAAiB9mT,EAAI2pR,iBAkBjCs9B,GAAgB,SAAUp+R,EAAU/wB,GACpC,IAAImB,EAAS4vB,EACT0D,EAASz0B,GAAWA,EAAQxD,MAAQwD,EAAQxD,KAAKwD,QACrD,GAAwB,iBAAb+wB,EAAuB,CAC9B,IAAIhrB,EAAQgrB,EAAShrB,MAAM,gBAC3B,GAAIA,IACA5E,EAAS,GACLszB,GAAQ,CAIR,IAFA,IAAIitB,EAAI37C,EAAM,GAAG2I,MAAM,KACnBmC,EAAI4jB,EAAOw3J,gBACNxtL,EAAI,EAAGA,EAAIijD,EAAE9hD,aAAgBe,IAANkQ,EAAiBpS,IAC7CoS,EAAIA,EAAE6wC,EAAEjjD,IAEZ0C,EAAS0P,QAIZ/Q,GAAAA,EAAAA,KAAAA,WAAmBixB,KACxB5vB,EAAS4vB,EAAS/wB,IAEtB,OAAOmB,GAGX,MAQMiuT,GAAe,SAAUlzT,GAC3B,GAAIA,EACA,IAAK,IAAI8I,KAAO9I,EACZ,GAAW,SAAP8I,GAAyB,QAAPA,GAAwB,WAAPA,GAA2B,UAAPA,GAA0B,WAAPA,GAAoBxE,GAAAA,EAAAA,cAAmBwE,GAAM,CACvH,MAAM5F,EAAQlD,EAAQ8I,GACtB,GAAqB,iBAAV5F,GACP,GAAI,eAAeo/B,KAAKp/B,GACpB,OAAO,OAGV,GAAqB,iBAAVA,GACRgwT,GAAahwT,GACb,OAAO,EAM3B,OAAO,GAIL+nT,GAAoB,SAAUjrT,EAASu4B,GACzC,GAAIj0B,GAAAA,EAAAA,WAAgBtE,GAChB,OAAO,SAAUoP,GACb,OAAO67S,GAAkBjrT,EAAQoP,EAAErL,MAAMF,UAIjD,MAEMwhI,EAAgB,SAAU9sG,GAE5B,MAAM46R,EAAqB,GAE3B,IAAIrvT,EACAqE,EAASirT,EAAQC,EACrB,GAAI96R,EAAQ,CACR,MAAM+6R,EAAS/6R,EAAO/2B,cACtB,OAAQ8xT,GAAUA,EAAOhpT,WACrB,IAAK,QACL,IAAK,aACDnC,GAAU,EACV,MACJ,IAAK,aACL,IAAK,kBACDirT,GAAS,EACT,MACJ,IAAK,UACL,IAAK,eACDC,GAAY,EAIhBvvT,EADAy0B,EAAOx0B,MACGw0B,EAAOx0B,MAAMF,OAIb,CACNpE,GAAImE,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,MAAAA,KAAqC,CACrCE,QAASy0B,IAEbppB,SAAUopB,EAAO1Z,IAAI,YACrBza,QAAS,WACL,OAAOR,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,QAAAA,KAAuC,CAC1CE,QAASy0B,MAM7B,MAAM9xB,EAASzG,EAAQyG,OACvB,IAAImqF,EAAe,GAwGnB,OAvGInqF,EAAOmvB,OAASw9R,GAAW76R,IAC3Bq4D,EAAenqF,EAAOmvB,MACrBg7D,aAAwBzvF,MAAQyvF,EAAe,CAACA,IAAehpF,SAAQ,SAAU2rT,EAAcppS,GAC5FgpS,EAAmBhpS,GAAS3qB,OAAOmD,OAAOwwT,EAAmBhpS,IAAU,GACnE,CACI,OAAU,IAAI6b,GAAGhgC,MAAMwmP,OAAO,CAC1B56K,MAAOqhP,GAAcM,EAAapnR,YAAaroC,GAC/C6uB,MAAOsgS,GAAcM,EAAannR,YAAatoC,GAC/C6jE,SAAU4rP,EAAa5rP,kBAMvClhE,EAAOiK,UAAY2iT,GAAc96R,IACjCq4D,EAAenqF,EAAOiK,SACrBkgF,aAAwBzvF,MAAQyvF,EAAe,CAACA,IAAehpF,SAAQ,SAAU2rT,EAAcppS,GAC5FgpS,EAAmBhpS,GAAS3qB,OAAOmD,OAAOwwT,EAAmBhpS,IAAU,GACnE,CACI,KAAQ,IAAI6b,GAAGhgC,MAAMohP,KAAK,CACtBx1K,MAAO4/F,GAAQyhJ,GAAcM,EAAatnR,UAAWnoC,GAAUmvT,GAAcM,EAAarnR,YAAapoC,MAE3G,OAAU,IAAIkiC,GAAGhgC,MAAMwmP,OAAO,CAC1B56K,MAAOqhP,GAAcM,EAAapnR,YAAaroC,GAC/C6uB,MAAOsgS,GAAcM,EAAannR,YAAatoC,GAC/C6jE,SAAU4rP,EAAa5rP,kBAMvClhE,EAAOivB,QAAUvtB,GAAYowB,IAC7Bq4D,EAAenqF,EAAOivB,OACrBk7D,aAAwBzvF,MAAQyvF,EAAe,CAACA,IAAehpF,SAAQ,SAAU2rT,EAAcppS,GAC5F,IAAIqpS,EAAgB,CAChBvyT,OAAQgyT,GAAcM,EAAatyT,OAAQ6C,KACtCmvT,GAAcM,EAAa3gS,OAAQ9uB,GAAWmvT,GAAcM,EAAa5gS,MAAO7uB,IAAY,GAEjGyvT,EAAatnR,YACbunR,EAAc1sO,KAAO,IAAI9gD,GAAGhgC,MAAMohP,KAAK,CACnCx1K,MAAO4/F,GAAQyhJ,GAAcM,EAAatnR,UAAWnoC,GAAUmvT,GAAcM,EAAarnR,YAAapoC,OAG3GyvT,EAAapnR,cACbqnR,EAAc59S,OAAS,IAAIowB,GAAGhgC,MAAMwmP,OAAO,CACvC56K,MAAOqhP,GAAcM,EAAapnR,YAAaroC,GAC/C6uB,MAAOsgS,GAAcM,EAAannR,YAAatoC,GAC/C6jE,SAAU4rP,EAAa5rP,YAI1BtmE,MAAMmyT,EAAcvyT,UACrBkyT,EAAmBhpS,GAAS3qB,OAAOmD,OAAOwwT,EAAmBhpS,IAAU,GAAI,CAAE,MAAS,IAAI6b,GAAGhgC,MAAMpG,OAAO4zT,WAKlH5iO,EAAahkD,OAASgkD,EAAa6iO,YACnCN,EAAmBA,EAAmBzvT,QAAU,CAAE,KAAQgwT,GAAsB9iO,EAAc9sF,MAG9F2C,EAAOq1B,SAAW3zB,GAAYowB,IAC9Bq4D,EAAenqF,EAAOq1B,QACrB80D,aAAwBzvF,MAAQyvF,EAAe,CAACA,IAAehpF,SAAQ,SAAU2rT,EAAcppS,GAE5F,MAAMwpS,EAAUJ,EAAa79S,KAAOpR,GAAAA,EAAAA,wBAA6BivT,EAAarsP,UAE9E,IAAI0sP,EAAuB,WAC3B,GAAID,EAAS,KAAAE,EAAAC,EACT,IAAIC,EACAR,EAAa5gS,OAAS4gS,EAAa3gS,SACnCmhS,EAAW,CAACd,GAAcM,EAAa5gS,MAAO7uB,GAAUmvT,GAAcM,EAAa3gS,OAAQ9uB,KAE/FqvT,EAAmBhpS,GAAS3qB,OAAOmD,OAAOwwT,EAAmBhpS,IAAU,GAAI,CACvE,MAAS,IAAI6b,GAAGhgC,MAAM2lP,KAAK,CACvBn+N,YAAa,YACbvb,OAAQshT,EAAathT,QAAUxL,EAAOq1B,OAAO7pB,QAAU,CAAC,GAAK,GAC7D64O,aAAcyoE,EAAazoE,cAAgB8oE,EAC3C3oE,aAAcsoE,EAAatoE,cAAgB2oE,EAC3C5hT,IAAK2hT,EACLhhS,MAAe,QAAVkhS,EAAEE,SAAQ,IAAAF,OAAA,EAARA,EAAW,GAClBjhS,OAAgB,QAAVkhS,EAAEC,SAAQ,IAAAD,OAAA,EAARA,EAAW,GAEnBp/P,SAAU6+P,EAAa7+P,SAAW6+P,EAAa7+P,SAAW,IAAM9yD,KAAKS,QAAKoC,IAE9E,KAAQivT,GAAsBH,EAAczvT,UAa1CqvT,EAAmBx0T,KAAK40T,IACtC,IAAIvtT,EAAQ,IAAIggC,GAAGhgC,MAAM4pP,MAAM2jE,GAE/B,OADI3iO,EAAaojO,UAAShuT,EAAMi4P,SAAW,IAAIj4N,GAAGhgC,MAAMwrP,KAAK,CAAE/3O,KAAMm3E,EAAaojO,WAC3EhuT,MAKf,OAtJuBktT,GAAalzT,EAAQyG,QAsJpB4+H,EAAgBA,EAAc9sG,IAGpDm7R,GAAwB,SAAUxnN,EAAUpoG,GAC9C,IAAKooG,IAAaA,EAASt/D,MACvB,OAGJ,MAAMqnR,EAAc,CAChBx6S,KAAM,GAAKw5S,GAAc/mN,EAASunN,UAAYvnN,EAASt/D,MAAO9oC,GAC9D+8M,UAAU,GAed,GATI30G,EAAS8zB,KACTi0L,EAAYj0L,KAAO9zB,EAAS8zB,KAEvB9zB,EAASx/D,WACdunR,EAAYj0L,KAAOizL,GAAc/mN,EAASx/D,SAAU5oC,GAAW,iBAE/DooG,EAASipD,mBACT8+J,EAAYv/P,UAAY9yD,KAAKS,GAAK4wT,GAAc/mN,EAASipD,iBAAkBrxJ,GAAW,KAEtFooG,EAASz/D,UAAW,CACpB,MAAMA,EAAYwmR,GAAc/mN,EAASz/D,UAAW3oC,GACpDmwT,EAAYntO,KAAO,IAAI9gD,GAAGhgC,MAAMohP,KAAK,CAEjCx1K,MAAO4/F,GAAQ/kI,GAAYtrC,MAAMC,QAAQqrC,GAAaA,EAAU,GAAK,IAAM,KAInF,GAAIy/D,EAAS3/D,kBAAmB,CAC5B,MAAMk5F,EAAewtL,GAAc/mN,EAAS3/D,kBAAmBzoC,GAC/DmwT,EAAYr+S,OAAS,IAAIowB,GAAGhgC,MAAMwmP,OAAO,CAErC56K,MAAO4/F,GAAQ/rC,GAAetkI,MAAMC,QAAQqkI,GAAgBA,EAAa,GAAK,IAAM,GAEpF9yG,MAAOsgS,GAAc/mN,EAAS5/D,kBAAmBxoC,KAgBzD,OAbIooG,EAAS1/D,cACTynR,EAAYl8G,QAAU7rG,EAAS1/D,YAAY,GAC3CynR,EAAYj8G,QAAU9rG,EAAS1/D,YAAY,IAG3C0/D,EAASy9J,YACTsqD,EAAYrpR,MAAQshE,EAASy9J,WAG7Bz9J,EAAS+zB,YACTg0L,EAAYh0L,UAAY/zB,EAAS+zB,WAG9B,IAAIj6F,GAAGhgC,MAAMwrP,KAAKyiE,IAG7B,IAAIC,GAAc,SAAU3oR,GACxB,IAAItmC,EAASsmC,EAAOjoB,SAAS,IAI7B,OAHsB,IAAlBre,EAAOvB,SACPuB,EAAS,IAAMA,GAEZA,GAGPkvT,GAAuB,SAAUC,GACjC,MAAO,IAAMF,GAAYE,EAAW,IAAMF,GAAYE,EAAW,IAAMF,GAAYE,EAAW,KAG9FC,GAAqB,SAAUC,EAAS/7R,GACxC,IAAItzB,EAAS,GAUb,GARIrB,GAAAA,EAAAA,KAAAA,WAAmB0wT,IACf/7R,IACA+7R,EAAUA,EAAQ/7R,IAGtBp3B,MAAMC,QAAQkzT,KACdA,EAAUA,EAAQ,KAEjB1wT,GAAAA,EAAAA,KAAAA,WAAmB0wT,GAAU,CAC9B,IAAI1iP,EACAh8D,EACAkxE,EACJ,GAAIvuD,EAAQ,CACR,MAAM+6R,EAAS/6R,EAAO/2B,cACtB,GAAI8xT,EAAQ,CACR,MAAMiB,EAAajB,EAAOhpT,UAGtBiqT,IAAe/O,IAAwB+O,IAAe/O,IACtD8O,EAAQztJ,SAAS,OAI7B,IAAIz5I,EAAQknS,EAAQ/mS,WACpB,GAAIH,EACA,GAAIA,aAAiB4Y,GAAGhgC,MAAM6nP,cAE1Bj8K,GADAh8D,EAASwX,EAAM4gO,aACA5/F,cAEXx8E,EAAQ5rC,GAAG4rC,MAAMs6G,QAAQt6G,GACzB3sE,EAAOknC,YAAcgoR,GAAqBviP,IAE9C3sE,EAAOmnC,YAAcx2B,EAAOqzK,YAC5BniG,EAAO15D,EAAM0gO,cAETl8K,EAAQkV,EAAKsnE,cAETx8E,EAAQ5rC,GAAG4rC,MAAMs6G,QAAQt6G,GACzB3sE,EAAOgnC,UAAYkoR,GAAqBviP,IAE5C3sE,EAAOinC,YAAc0lC,EAAM,QAG9B,CACD3sE,EAAOyQ,IAAM0X,EAAMm9N,SACnB,IAAIr1N,EAAO9H,EAAMu2L,UACbzuL,IACAjwB,EAAO0tB,MAAQuC,EAAK,GACpBjwB,EAAO2tB,OAASsC,EAAK,GACrBjwB,EAAOgN,OAASmb,EAAMk7N,YAClBrjP,EAAOgN,SACPhN,EAAOgN,OAAO,GAAMhN,EAAOgN,OAAO,GAAKhN,EAAO0tB,OAAUvF,EAAM4/H,YAAc,GAC5E/nJ,EAAOgN,OAAO,GAAMhN,EAAOgN,OAAO,GAAKhN,EAAO2tB,QAAWxF,EAAM4/H,YAAc,UAMzFp3I,EAAS0+S,EAAQtmE,gBAEbp8K,EAAQh8D,EAAOw4I,cAEXx8E,EAAQ5rC,GAAG4rC,MAAMs6G,QAAQt6G,GACzB3sE,EAAOknC,YAAcgoR,GAAqBviP,IAE9C3sE,EAAOmnC,YAAcx2B,EAAOqzK,WAC5BhkL,EAAO0iE,SAAW/xD,EAAO82O,gBAE7B5lK,EAAOwtO,EAAQxmE,cAEXl8K,EAAQkV,EAAKsnE,cAETx8E,EAAQ5rC,GAAG4rC,MAAMs6G,QAAQt6G,GACzB3sE,EAAOgnC,UAAYkoR,GAAqBviP,IAE5C3sE,EAAOinC,YAAc0lC,EAAM,IAKvC,OAAO3sE,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,SAA0C,WACtC,OAAOywT,GAAmBh0T,KAAKwE,MAAM2B,aAGzC5C,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,WAC1C,MAAMxD,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,MAAM68B,EAAe7wD,EAAKo0T,mBAAmBp0T,EAAKyD,OAAQzD,EAAKq0T,aAAar0T,EAAKyD,SAEjF,GAAIzD,EAAKyD,OAAO2G,OAASrK,GAAAA,EAAAA,UAAAA,IACrB,IAAIu0T,EAAczjQ,EAAaj2C,OAAOtM,GAAG,UAAU,SAAUV,GAClB,UAAnCijD,EAAaj2C,OAAOu4K,aACpBvtJ,GAAG0pJ,WAAWD,QAAQilI,GAEtBx1T,QAKZ,IAAIiQ,EAAW/O,EAAKyE,MAAM2d,YAAYy8E,cACtC7+F,EAAKyE,MAAMuuL,UAAUniI,EAAaj2C,QAE9Bi2C,EAAajrD,OACb5F,EAAKyE,MAAMkB,SAASkrD,EAAajrD,OAEjC5F,EAAKyD,OAAO2G,OAASrK,GAAAA,EAAAA,UAAAA,MACrB8wD,EAAaj2C,OAAOkd,YAAY/oB,GAChCjQ,SAKZ0E,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,OAAwC,SAAU5D,GAC9C,IAAII,EAAOC,KACPgE,EAAOT,GAAAA,EAAAA,KAAAA,OAAe,GACvB5D,GACHqE,EAAKmG,KAAOxK,EAAQqT,OAEpB,IAAIshT,EAAcv0T,EAAKyE,MAAM2d,YAAYy8E,cACrChuC,EAAe7wD,EAAKo0T,mBAAmBnwT,EAAMjE,EAAKq0T,aAAar0T,EAAKyD,SACxEzD,EAAKyE,MAAMuuL,UAAUniI,EAAaj2C,QAC9Bi2C,EAAajrD,OACb5F,EAAKyE,MAAMkB,SAASkrD,EAAajrD,OAGrCirD,EAAaj2C,OAAOkd,YAAYy8R,IAGpC/wT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,mBAAoD,SAAU5D,EAASgrT,GACnE,MAAM5qT,EAAOC,KAEb,IAcI2a,EACA45S,EAHAC,GAAoB,EAKxB,MAAMC,EAAY90T,EAAQyG,QAAUzG,EAAQyG,OAAOsuT,QACnD,GAAI5zT,MAAMC,QAAQpB,EAAQ0V,MAAQ1V,EAAQojC,KAAM,CAC5C,IAAIA,EAAOpjC,EAAQojC,MAAQpjC,EAAQ0V,IACnC0tB,EAAOA,EAAKzkC,KAAI,SAAUkJ,EAAK22E,GAC3B,OAAO56E,GAAAA,EAAAA,QAAWiE,MAEtB+sT,EAAgB,CACZl/S,IAAK0tB,EAGL/vB,OAAQ,IAAI2yB,GAAG3yB,OAAOqkC,IAAI,CACtBu+M,gBAAgB,EAChBL,eAAgBk/D,IAEpBlqI,WAAY5qL,EAAQuH,UAGvB,GAAIvH,EAAQ0V,KAAO1V,EAAQwK,OAASrK,GAAAA,EAAAA,UAAAA,KACrCy0T,EAAgB,CACZl/S,IAAK1V,EAAQ0V,IACbk1K,WAAY5qL,EAAQuH,MAEV8L,OAAS03S,GAAkB/qT,EAAQqT,QAASyhT,IACtD/J,GAAkBnnT,GAAAA,EAAAA,KAAAA,mBAA2B5D,EAAQ0V,MAAOo/S,IAC5D/J,GAAkB/qT,EAAQwK,MAAOsqT,GACrCF,EAAc90C,OAAW80C,EAAcvhT,kBAAkB2yB,GAAG3yB,OAAOqkC,IAAsE,SAAUs9Q,EAAS1vL,EAAaslD,GACrK,MAAMl1K,EAAMk/S,EAAcl/S,IACpBrC,EAASuhT,EAAcvhT,OAC7BjT,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,QAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,kBAAgC,CACpD0E,MAAOzE,EAAKyD,SAGpBzD,EAAKyD,OAAO2P,kBAAkBwC,MAAMN,EAAK,CAAE4Y,OAAQ,MAAO2mS,UAAU,IAAQl2T,MAAKkM,eAAgBohB,GAC7F,GAAIA,EAASkY,GAAI,CACb,MAAM9qB,QAAa4S,EAAS5S,OAC5B,IAAItK,EAAWkE,EAAO86G,aAAa10G,EAAM,CAAEqnN,kBAAmBl2C,IAC9D,MAAMsqI,GAAe,IAAIr3S,WAAYE,gBAAgBtE,EAAM,YAAYpB,cAAc,mBAIrF,GAFAjY,EAAK83B,YAAY/oB,GACjB/O,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,KAChBh9R,EAAS3hB,QAAQgnB,IAAI,wBAA0B,yBAAyB4Q,KAAKjW,EAAS3hB,QAAQmU,IAAI,wBAAyB,CAC3H,MAAMs2S,EAAqB9oS,EAAS3hB,QAAQmU,IAAI,uBAChD,IAAI3V,EACJ,IACIA,EAAO,8CAA8CqJ,KAAK4iT,GAAoB,GAChF,MAAOxhM,GACL,IACIzqH,EAAOisT,EAAmB37R,WAAW27R,EAAmBphS,YAAY,MAAQohS,EAAmB9rT,QAAQ,MAAQ,GACjH,MAAO+rT,KAEbh1T,EAAKyD,OAAO+G,OAASsqT,EAAeA,EAAa9mT,YAAc,KAAOlF,EAAQgsT,GAAgBA,EAAa9mT,aAAelF,EAAO,KAAOA,EAAO,IAAMA,EAAQ,SAG7J9I,EAAKyD,OAAO+G,OAASsqT,EAAeA,EAAa9mT,YAAc,KAAO8mT,GAAgBA,EAAa9mT,aAAehO,EAAKyD,OAAO+G,MAAQ,KAAOxK,EAAKyD,OAAO+G,MAAQ,IAAMxK,EAAKyD,OAAO+G,OAEnLxK,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC9C0E,MAAOzE,EAAKyD,aAIzB2S,OAAM,SAAU6V,GACfjsB,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,KAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAC7C0E,MAAOzE,EAAKyD,OAAQ6V,OAAQ2S,QApFtB,SAAU3W,EAAKrC,GACrC,IAAIgiT,EAAiBrvR,GAAG26Q,cAAcj1R,IAAIhW,EAAKrC,GAC/C,OAAO,SAAUsI,EAAQ6oC,EAAYomI,GACjCxqL,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,QAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,kBAAgC,CACpD0E,MAAOzE,EAAKyD,SAGpBwxT,EAAet0T,KAAKV,KAAMsb,EAAQ6oC,EAAYomI,IAiCwB0qI,CAAoBV,EAAcl/S,IAAKk/S,EAAcvhT,QAgD/HwhT,GAAoB,OAEnB,GAAI70T,EAAQwE,KACbowT,EAAgB,CACZhqI,WAAY5qL,EAAQuH,IACpBu4Q,OAAQ,SAAUnkQ,EAAQ6oC,EAAYomI,GAClCxqL,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,QAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,kBAAgC,CACpD0E,MAAOzE,EAAKyD,SAGpB,IAAIwP,EAAShT,KAAKkiR,YAClB,IACI,IAAIjnH,EAAKjoJ,EAAO86G,aAAanuH,EAAQwE,KAAM,CACvCs8N,kBAAmBl2C,IAEvBvqL,KAAK63B,YAAYojI,GACjBl7J,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,KAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC9C0E,MAAOzE,EAAKyD,OAAQ+zD,QAAS53D,EAAQwE,OAIjD,MAAOpF,GACHgB,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,KAChBjpT,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAC7C0E,MAAOzE,EAAKyD,OAAQ6V,OAAQta,EAAE4e,aAMlD42S,EAAcvhT,OAAS03S,GAAkB/qT,EAAQqT,SAAW03S,GAAkB/qT,EAAQwK,WAErF,GAAIxK,EAAQwK,OAASrK,GAAAA,EAAAA,UAAAA,IAAsB,CAC5C,IAAIqxB,EACAwC,EACJ,OAAQh0B,EAAQwxB,cACZ,KAAKrxB,GAAAA,EAAAA,OAAAA,KACDqxB,EAAe,IAAIwU,GAAG3yB,OAAOw6G,QAAQ,CACjC/uD,aAAc9+D,EAAQ8+D,eAE1B9qC,EAAW,OACX,MACJ,KAAK7zB,GAAAA,EAAAA,OAAAA,KACDqxB,EAAe,IAAIwU,GAAG3yB,OAAOmkC,IAAI,CAAE64L,UAAW,IAAIrqM,GAAG3yB,OAAOunC,OAC5D5mB,EAAW7zB,GAAAA,EAAAA,SAAAA,IACX,MACJ,KAAKA,GAAAA,EAAAA,OAAAA,MACDqxB,EAAe,IAAIwU,GAAG3yB,OAAOmkC,IAAI,CAAE64L,UAAW,IAAIrqM,GAAG3yB,OAAOwnC,QAC5D7mB,EAAW7zB,GAAAA,EAAAA,SAAAA,IACX,MACJ,QACIqxB,EAAe,IAAIwU,GAAG3yB,OAAOmkC,IAAI,CAAE64L,UAAW,IAAIrqM,GAAG3yB,OAAOsnC,OAC5D3mB,EAAW7zB,GAAAA,EAAAA,SAAAA,IAGnBy0T,EAAgB,CACZvhT,OAAQme,EACRsuP,OAAQ,SAAUk1C,EAAS1vL,EAAaslD,GACpC,IAAI2qI,EAAUl1T,KACVuqB,EAAa5qB,EAAQ0V,IACzB,GAAIkV,EAAY,CACZxqB,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,QACpBjpT,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,kBAAgC,CACpD0E,MAAOzE,EAAKyD,SAGhB,MAAM2xT,EAAe,WACjB,MAAqC,iBAAvBx1T,EAAQ40B,YAEpB6gS,EAAkBppS,IACpB,MAAM7nB,EAAO6nB,EAAS7nB,KACtB,IAAIkxT,EACJ,IACIA,EAAQlkS,EAAa28F,aAAa3pH,GAEtC,MAAOpF,GACHgB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAKyD,OAAQ6V,OAAQta,EAAE4e,UAErF,MAAM23S,EAAqB,WACvBv1T,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC9C0E,MAAOzE,EAAKyD,OAAQ+zD,QAASpzD,KAG/Bo6J,EAAgB,SAAUx/J,GACxBA,EAAEyF,QAAUzE,EAAKyD,SACjBzD,EAAKyD,OAAOlF,IAAI8P,IAAItO,GAAAA,EAAAA,MAAAA,YAA0By+J,GAC9C+2J,MAGJD,GAASA,EAAMhyT,QACftD,EAAKyD,OAAOlF,IAAI+P,GAAGvO,GAAAA,EAAAA,MAAAA,YAA0By+J,GAC7C22J,EAAQr9R,YAAYw9R,IAGpBC,IAEJv1T,EAAKyD,OAAOqR,MAAQm0S,GAAAA,EAAAA,MAAAA,MAElBiE,EAAeh3S,IACbA,aAAiBqpD,YACjBv/D,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAKyD,OAAQ6V,OAAQpD,EAAM+B,cAAc,iBAAiB7K,YAGpHpN,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAKyD,OAAQ6V,OAAQpD,KAIjFs/S,EAAeA,CAAC1/O,EAAU7/D,KAC5B,IAAIw/S,EAAc,GACdtuT,EAAMqjL,EAAWnoK,UACjB9S,EAAU3P,EAAQ2P,SAAW0G,EAAa1G,SAAW,QACzD0G,EAAa1G,QAAUA,EACvB,IAAI+F,EAAMkV,EACNoH,EAAc7wB,MAAMC,QAAQpB,EAAQgyB,aAAehyB,EAAQgyB,YAAc,CAAChyB,EAAQgyB,aAatF,MAAM8jS,EAAaN,IAgDnB,GA7CIx1T,EAAQ40B,aAAekhS,EAAa91T,EAAQ40B,WAAWlxB,OAASvD,GAAAA,EAAAA,eAAwBH,EAAQ40B,WAAWjU,QAAQtK,EAAa1G,SAASjM,OAASvD,GAAAA,EAAAA,iBAClJ01T,EAAYvnS,OAAS,OACrBunS,EAAYngT,IAAMA,EAClBmgT,EAAYrxT,KAAOsxT,EAAa91T,EAAQ40B,WAAahxB,GAAAA,EAAAA,KAAAA,gBAAwBouB,EAAahyB,EAAQ40B,WAAYve,EAAc6/D,EAAW,KAAOl2E,EAAQwxB,aAAc0kD,EAAU3uE,EAAKvH,EAAQm2E,aAEtL2/O,GACD11T,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAE0E,MAAOzE,EAAKyD,OAAQ+jC,MAAOiuR,EAAYrxT,SAIpGqxT,EAAYvnS,OAAS,MACrBunS,EAAYngT,IAAMA,EAClBmgT,EAAYrxT,KAAO,CACf8sB,QAAS,MACTD,QAAS,aACT1hB,QAASA,EACT6hB,aAAcxxB,EAAQwxB,aACtBukS,QAASxuT,GAEbsuT,EAAYrxT,KAAK,YAA0B,UAAZmL,EAAsB,IAAM,MAAQ3P,EAAQgwJ,cAAgBhwJ,EAAQgwJ,cAAgB,IAAM,IAAMhwJ,EAAQgyB,YACnIkkD,IACA2/O,EAAYrxT,KAAOhF,OAAOmD,OAAOkzT,EAAYrxT,KAAM,CAC/CkyE,WAAY,UAEhB12E,EAAQ40B,aACJ50B,EAAQ40B,sBAAsBhxB,GAAAA,EAAAA,OAAAA,KAC9BiyT,EAAYrxT,KAAOhF,OAAOmD,OAAOkzT,EAAYrxT,KAAM,CAC/Cu/K,KAAM,sBAAsB1wK,OAAOrT,EAAQ40B,WAAWjZ,OAAOjT,OAAO,CAACnB,OAIzEsuT,EAAYrxT,KAAOhF,OAAOmD,OAAOkzT,EAAYrxT,KAAM,CAE/Ce,OAAQuwT,EAAa91T,EAAQ40B,WAAa50B,EAAQ40B,WAAWjU,QAAQhR,GAAS/F,QAAQ,mBAAoB,KAAKA,QAAQ,qBAAsB,QAGhJksT,GAAe5/O,GAChB91E,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAE0E,MAAOzE,EAAKyD,OAAQ+jC,MAAO5nC,EAAQ40B,WAAWjU,aAG3G3gB,EAAQm2E,cACR0/O,EAAYrxT,KAAOhF,OAAOmD,OAAOkzT,EAAYrxT,KAAM,CAC/C2xE,YAAan2E,EAAQm2E,gBAIxB,UADDD,EAAW,GAAKliD,GAEhB6hS,EAAY7pS,aAAe7rB,GAAAA,EAAAA,SAAAA,UAG3B01T,EAAY7pS,aAAe7rB,GAAAA,EAAAA,SAAAA,IAKnC,OAFA01T,EAAYlnS,YAAcxuB,GAAAA,EAAAA,SAAAA,IAEnByD,GAAAA,EAAAA,KAAQiyT,IAGnBz1T,EAAKyD,OAAOgW,yBAAyB9a,MAAMu4K,IAAkB,IAAA0+I,EAAAC,EAAAC,EACzD,MAAM7/S,EAAeihK,EAErB,IAAI6+I,EAAwC,QAA1BH,EAAG3/S,EAAaqiB,kBAAU,IAAAs9R,GAAY,QAAZC,EAAvBD,EAAyB11P,kBAAU,IAAA21P,GAAc,QAAdC,EAAnCD,EAAqCz1P,oBAAY,IAAA01P,OAA1B,EAAvBA,EAAmDz1P,aACxE,GAAI01P,EAAgB,CACXn2T,EAAQm2E,cACTn2E,EAAQm2E,YAAcggP,GAE1B,IAAIL,EAAaN,IACjBI,GAAaE,EAA2Bz/S,GAActX,MAAMstB,IACxD,GAAIypS,EACAL,EAAeppS,OADnB,CAIA,IAAI+pS,EAAY/pS,EAAS7nB,KAAKkQ,SAAS,GACvC,GAAI0hT,EAAU7/O,QAAQ9nD,cAAcplB,QAAQ,cAAgB,EACxDjJ,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAKyD,OAAQ6V,OAAQ08S,EAAU/9S,cAAc,iBAAiB7K,iBAEvH,GAAI4oT,EAAU7/O,QAAQ9nD,cAAcplB,QAAQ,sBAAwB,EAAG,CACxE,IAAIgtT,EAAuB19S,UAAUy9S,EAAUrtT,WAAWutT,eAAiBF,EAAUrtT,WAAWwtT,kBAAkBrzT,MAAO,IACzH,GAAI7B,MAAMg1T,IAAyBA,GAAwB19S,SAASw9S,EAAgB,IAEhF,YADA/1T,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,WAAyB,CAAE0E,MAAOzE,EAAKyD,OAAQ6V,OAAQvZ,GAAAA,EAAAA,UAAAA,iBAAmCqE,KAAM,CAAEgU,MAAOG,SAASw9S,EAAgB,IAAKK,QAASH,KAGvK,IAAKh1T,MAAMg1T,IAAkD,IAAzBA,EAKrC,YAHAZ,EAAe,CACXjxT,KAAMgtB,aAAwBwU,GAAG3yB,OAAOw6G,QAAU,CAAE,KAAQ,oBAAqB,cAAiB,EAAG,SAAY,GAAI,IAAO,MAASr8F,EAAay8F,cAAc,MAIxK2nM,GAAa,EAAOv/S,GAActX,KAAK02T,GAAgBj/S,MAAM82S,QAElE92S,MAAM82S,QAGTsI,GAAa,EAAOv/S,GAActX,KAAK02T,GAAgBj/S,MAAM82S,MAGrEltT,EAAKq2T,YAAc7rS,IAI3BggK,WAAY5qL,EAAQuH,KAIxBvH,EAAQmP,YACRylT,EAAgBA,GAAiB,IACnBzlT,SAAWnP,EAAQmP,SAASxQ,KAAIyQ,GAAKA,aAAasnT,GAAAA,EAAYtnT,EAAE9O,KAAKwD,QAAUsL,KAGjG4L,EAAS,IAAIgrB,GAAGhrB,OAAOiX,OAAO2iS,GAE1BC,GACA75S,EAAOtM,GAAG0uI,IAAQ,SAAUpvI,GACpB5N,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC9C0E,MAAOzE,EAAKyD,YAM5BmX,EAAO27S,SAAWv2T,EAAKyD,OAEvB,IAAIu8F,EAAcpgG,EAAQgG,OAAShG,EAAQgG,MAAM81B,OAAS97B,EAAQgG,MAAM81B,OAASl4B,GAAAA,EAAAA,IAAAA,OAAAA,OAQjF,GAPK5D,EAAQgG,OAAUhG,EAAQgG,MAAM81B,SACjCskE,EAAcx8F,GAAAA,EAAAA,KAAAA,OAAe,GAAIw8F,EAAa,CAC1CnuF,OAAQrO,GAAAA,EAAAA,IAAAA,OAAAA,MAAAA,UAKZ5D,EAAQuR,UACRyJ,EAAS,IAAIgrB,GAAGhrB,OAAO4nS,QAAQ,CAC3Bh4H,WAAY5qL,EAAQuH,IACpBm9C,SAAU1kD,EAAQuR,QAAQmzC,SAC1B1pC,OAAQA,IAIRhb,EAAQuR,QAAQq5C,SAAS,CACzB,IAMIA,EAAU,SAAU/mD,EAAQygB,GAC5B,IAAIsqD,EAAQ1qC,KAAKC,MACbyyR,EAAU/yT,EAAOrC,cAAcG,iBAC/Bk1T,EAAUvyS,EAAM9iB,cAAcG,iBAClC2iB,EAAMpc,YAAY,IAAI89B,GAAGplC,KAAKmP,MAAM6mT,IAWpCjvK,uBAVW,SAAS32H,IAChB,IAAIjxB,EAZgB,SAAU+2T,EAAYC,EAAUrmQ,EAAUke,GAClE,IAAIkrI,EAAWl4M,KAAKqa,KAAKioB,KAAKC,MAAQyqC,GAASle,EAAU,GACrDxN,GAAM6zQ,EAAS,GAAKD,EAAW,IAAMh9G,EACrC32J,GAAM4zQ,EAAS,GAAKD,EAAW,IAAMh9G,EACzC,MAAO,CAACg9G,EAAW,GAAK5zQ,EAAI4zQ,EAAW,GAAK3zQ,GAQ3B6zQ,CAAsBJ,EAASC,EAAS12T,GAAAA,EAAAA,2BAAmCyuE,GACxFtqD,EAAMpc,YAAY,IAAI89B,GAAGplC,KAAKmP,MAAMhQ,IAChCA,EAAO,KAAO82T,EAAQ,IAAM92T,EAAO,KAAO82T,EAAQ,GAClDlvK,sBAAsB32H,GAGtBimS,EAAa7tT,OAAO6tT,EAAa5tT,QAAQxF,GAAS,OAK1DozT,EAAe,GACnBj8S,EAAO/O,iBAAiBozQ,IAAe,SAAUjgR,GAC7C,IAAI+P,EAAW/P,EAAE0E,QAAQ+a,IAAI,YACzB1P,GAAYA,EAASzL,OAAS,GAC9BuzT,EAAaxuT,KAAKrJ,EAAE0E,YAG5BkX,EAAO/O,iBAAiBkzQ,IAAY,SAAU//Q,GAC1C,IAAI+P,EAAW/P,EAAE0E,QAAQ+a,IAAI,YAC7B,GAAI1P,EAAU,CACV,IAAIpP,EAASoP,EAAS,GAAG3N,cAAcG,iBACvC,GAAIwN,EAASzL,OAAS,EAAG,CACrB,IAAImG,EAAQotT,EAAa1xT,QAAO,SAAUsC,GACtC,IAAIqvT,EAAYrvT,EAAIrG,cAAcG,iBAClC,OAAOu1T,EAAU,KAAOn3T,EAAO,IAAMm3T,EAAU,KAAOn3T,EAAO,MAE7D8J,EAAMnG,QACNuzT,EAAa7tT,OAAO6tT,EAAa5tT,QAAQQ,EAAM,IAAK,GAG5D,IAAIhG,EAASozT,EAAa1xT,QAAO,SAAUsC,GACvC,IAAI6M,EAAW7M,EAAIgX,IAAI,YACvB,GAAInK,GAAYA,EAAShR,OAAS,EAK9B,OAJYgR,EAASnP,QAAO,SAAU4xT,GAClC,IAAIN,EAAUM,EAAK31T,cAAcG,iBACjC,OAAOk1T,EAAQ,KAAO92T,EAAO,IAAM82T,EAAQ,KAAO92T,EAAO,MAEhD2D,OAAS,KAG1BG,EAAOH,QACPknD,EAAQ/mD,EAAOA,EAAOH,OAAS,GAAItE,EAAE0E,aAOzD,IAAIikC,EAAI/sB,EACR,GACI+sB,EAAE97B,iBAAiBkzQ,IAAY,SAAU//Q,GACrC,IAAIm5B,EAASn5B,EAAE0E,QAEXkC,EAAQmlT,GAAsB5yR,GAAQ,GAC1C,GAAIvyB,EAAO,CACP,MAAMf,EAAS2tT,GAAiB5sT,EAAMunB,WAAY6yE,EAAYztE,MAAO4F,GACjEtzB,GACAA,EAAOlG,MAAK,WACR,GAAIK,EAAE0E,QAAQC,MAAMF,OAAON,QAAS,CAChC,MAAMsB,EAAQzF,EAAE0E,QAAQC,MAAMF,OAAOgB,aAC9BzF,EAAE0E,QAAQC,MAAMF,OAAON,QAC9BsB,EAAMlG,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,aAA2B,CAAE,MAAS0E,YAOxEkjC,EADAnkC,GAAAA,EAAAA,KAAAA,WAAmBmkC,EAAEvlB,WACjBulB,EAAEvlB,YAGF,WAGLulB,GAEP/sB,EAAO/O,iBAAiBkzQ,IAAY,SAAU//Q,GAC1C,MAAMm5B,EAASn5B,EAAE0E,QAEjB,IAAKy0B,EAAOx0B,QACPw0B,EAAOx0B,MAAMF,OAAOgB,QACpB0zB,EAAOx0B,MAAMF,OAAOgB,MAAMsK,SAASkpB,SAASE,EAAOx0B,MAAMF,QAAS,CACnE,MAAMg3B,EAAOj3B,GAAAA,EAAAA,KAAAA,QAAAA,cAA8B20B,GAC3C,IAAI2D,EACJ,QAAQ,GACJ,KAAKrB,aAAgB2kR,GAAAA,EACjBtjR,EAAQ97B,EAAKyD,OAAOgyB,SACpB,MACJ,KAAKgF,aAAgBxpB,GAAAA,EACjB6qB,EAAQ97B,EAAKyD,OAAOgzB,YACpB,MACJ,KAAKgE,aAAgB4kR,GAAAA,EACjBvjR,EAAQ97B,EAAKyD,OAAOwzB,WACpB,MACJ,KAAKwD,aAAgB8kR,GAAAA,EACjBzjR,EAAQ97B,EAAKyD,OAAO4zB,gBACpB,MACJ,KAAKoD,aAAgB5pB,GAAAA,EACjBirB,EAAQ97B,EAAKyD,OAAOozB,iBACpB,MACJ,QACIiF,EAAQ97B,EAAKyD,OAAOo0B,WAIxB,IAAI0xR,EADR,GAAIztR,EAEAA,EAAMn7B,KAAKX,EAAKyD,OAAQ00B,GAAQx5B,MAAK,SAAUqQ,GAC3C,IAAID,EAAWopB,EAAO1Z,IAAI,YACtB1d,MAAMC,QAAQ+N,KAEdC,EAAED,SAAWA,EAASxQ,KAAI,SAAUkJ,GAChC,OAAO,IAAIgzB,EAAK/6B,YAAY+H,OAKpCw/C,aAAasiQ,GACbA,EAAWriQ,YAAW,WAClBlnD,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,YAA0B,CAC9C0E,MAAOzE,EAAKyD,OAAQsL,SAAU,CAACC,OAEpC,WAMnB4L,EAAO/O,iBAAiBozQ,IAAe,SAAUjgR,GAC7C,IAAIm5B,EAASn5B,EAAE0E,QACf,GAAIy0B,EAAOx0B,MAAO,CACd,IAAI+D,EAAM1H,EAAKyD,OAAOsL,SAAS9F,QAAQkvB,EAAOx0B,MAAMF,QAChDiE,GAAO,IACP1H,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,oBAAkC,CACtD0E,MAAOzE,EAAKyD,OAAQC,QAASy0B,EAAOx0B,MAAMF,SAE9CzD,EAAKyD,OAAOsL,SAAS/F,OAAOtB,EAAK,GACjC1H,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,cAA4B,CAChD0E,MAAOzE,EAAKyD,OAAQC,QAASy0B,EAAOx0B,MAAMF,cAM1DmX,EAAO/O,iBAAiBkzQ,IAAY,SAAUnxQ,GACtC5N,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,aAA2B,CAC/C0E,MAAOzE,EAAKyD,YAKxBmX,EAAO/O,iBAAiBozQ,IAAe,WAC/Bj/Q,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,aAA2B,CAC/C0E,MAAOzE,EAAKyD,YAKxBmX,EAAO/O,iBAAiB+hL,IAAO,WACvB5tL,EAAKyD,OAAOlF,KACZyB,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,cAA4B,CAChD0E,MAAOzE,EAAKyD,YAKxB,IAAIotD,EAAe,CACfj2C,OAAQA,GAgBZ,OAbIhb,EAAQ2qI,gBACR15E,EAAa05E,cAAgB3qI,EAAQ2qI,eAErC3qI,EAAQ2wL,gBACR1/H,EAAa0/H,cAAgB3wL,EAAQ2wL,eAKnCikI,GAAiBA,EAAcvhT,kBAAkB2yB,GAAG3yB,OAAOqkC,MAAQ13C,EAAQuR,UAC7E0/C,EAAajrD,MAAQglT,GAAehrT,EAAQyG,QAGzCwqD,GAGXrtD,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,SAAU5D,GACpD,IAAII,EAAOC,KAEP+2T,GAAe,EAInB,IAFAp3T,EAAU4D,GAAAA,EAAAA,KAAAA,OAAe,GAAI5D,IACrBuH,IAAMvH,EAAQuH,KAAO3D,GAAAA,EAAAA,IAAAA,IACzBU,GAAAA,EAAAA,WAAgBtE,EAAQyG,QACxB2wT,GAAe,EACfh3T,EAAKilI,cAAgB,SAAU9sG,GAC3B,OAAO0yR,GAAkBjrT,EAAQyG,OAAO8xB,EAAOx0B,MAAMF,cAGxD,CACD,MAAMg5B,EA78BmB,SAAUh4B,GACvC,MAAMI,EAASrB,GAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIA,GAAAA,EAAAA,IAAAA,QAIxC,OAHIiB,GAASA,EAAMlG,KACfiF,GAAAA,EAAAA,KAAAA,QAAe,EAAMqB,EAAQJ,EAAMlG,IAAIqB,QAAQyG,QAE5CxB,EAw8BoBoyT,CAAyBj3T,EAAKyD,QAC/CyzT,EAAY1zT,GAAAA,EAAAA,KAAAA,QAAe,EAAMi5B,EAAgB78B,EAAQyG,QAwB/D2wT,KAAkBp3T,EAAQuR,UAAWvR,EAAQuR,QAAQ9K,SAvBhC,SAAS8wT,EAAev7R,GACzC,IAAK,IAAIlzB,KAAOkzB,EAAK,CACjB,IAAIqvB,EAAOrvB,EAAIlzB,GACf,cAAeuiD,GACX,IAAK,SACD,GAAI,eAAe/oB,KAAK+oB,GACpB,OAAO,EAEX,MACJ,IAAK,SACD,GAAIksQ,EAAelsQ,GACf,OAAO,EAEX,MACJ,IAAK,WACD,OAAO,GAKnB,OAAO,EAGqDksQ,CAAeD,GAC/E,MAAMjzT,EAAO,CACToC,OAAQjH,OAAOmD,OAAO,GAAI20T,IAE1Bl3T,EAAKyD,OAAO4C,SACZpC,EAAKoC,OAASjH,OAAOmD,OAAO0B,EAAKoC,OAAQrG,EAAKyD,OAAO4C,SAErDzG,EAAQuR,SAAWvR,EAAQuR,QAAQ9K,SACnCpC,EAAKoC,OAASjH,OAAOmD,OAAO,GAAI0B,EAAKoC,OAAQ,CAAE8K,QAASvR,EAAQuR,QAAQ9K,UAE5ErG,EAAKilI,cAAgB,SAAU9sG,GAC3Bl0B,EAAKQ,MAAQzE,EAAKyD,OAClB,IAAImnT,EAAcC,GAAkB5mT,EAAMk0B,GAI1C,OAHIj0B,GAAAA,EAAAA,WAAgB0mT,KAChBA,EAAcA,EAAYzyR,IAEvByyR,GAEP3mT,EAAKoC,QAAUjH,OAAOD,KAAK8E,EAAKoC,QAAQ/C,OAAS,IACjD0zT,GAAe,GAMvB,OAFkBA,EAAeh3T,EAAKilI,cAAgBjlI,EAAKilI,iBAK/DzhI,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,UAA2C,SAAU5D,GACjD,MAAMI,EAAOC,KACbD,EAAK4f,WAAWjhB,MAAK,SAAU6iB,GAC3B,GAAI5hB,GAAWA,EAAQ+0T,SAAWnzS,aAAmBokB,GAAGnhC,MAAM48S,QAAS,CACnE,MAAMtyS,EAAWyS,EAAQY,YAAYy8E,cACrC9vF,EAASvH,SAAQwH,GAAKA,EAAErJ,SAAS,QACjC,MAAMmyM,EAAat0M,GAAAA,EAAAA,KAAAA,QAAe,EAAM,CAAEuL,SAAUA,GAAY/O,EAAKyD,OAAO7D,SAG5E,UAFOk4M,EAAWzxM,OAClBrG,EAAKyE,MAAQzE,EAAKi0B,kBAAkBzwB,GAAAA,EAAAA,KAAAA,OAAes0M,EAAY,CAAEzxM,OAAQzG,KACrEI,EAAKyD,OAAOlF,IAAK,CACjB,MAAMooT,EAAU3mT,EAAKyD,OAAOlF,IAAI2B,KAChCymT,EAAQt0P,YAAYryD,EAAKyE,MAAOkiT,EAAQ7zP,cAActxC,IACtDmlS,EAAQ57P,YAAYvpC,SAIxBA,EAAQ7b,SAAS3F,EAAKq0T,aAAa,CAAEhuT,OAAQzG,SAKzD4D,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,kBAAmD,SAAU5D,GACzD,MAAMI,EAAOC,KACb,IAAI4E,EAAS,KAEbjF,EAAUA,GAAWI,EAAKyD,OAAO7D,QAEjC,MAAMixD,EAAe7wD,EAAKo0T,mBAAmBx0T,EAASI,EAAKq0T,aAAaz0T,IAGxE,GAAIA,EAAQyG,QAAUzG,EAAQyG,OAAOsuT,QAAS,CAC1C,MAAMyC,EAAY5zT,GAAAA,EAAAA,KAAAA,OAAe,GAAI5D,EAAQyG,OAAOsuT,SACpD,GAAInxT,GAAAA,EAAAA,KAAAA,WAAmB4zT,EAAUh1L,QAAS,CACtC,MAAMi1L,EAAcD,EAAUh1L,OAC9Bg1L,EAAUh1L,OAAS,SAAUjqG,GACzB,OAAOk/R,EAAYl/R,EAAOx0B,MAAMF,SAGxCoB,EAAS,IAAI+gC,GAAGnhC,MAAM48S,QAAQ79S,GAAAA,EAAAA,KAAAA,OAAe,CAAEoX,OAAQi2C,EAAaj2C,QAAUw8S,SAG9EvyT,EAAS,IAAI+gC,GAAGnhC,MAAMotB,OAAOg/B,GAMjC,OAJAhsD,EAAOlB,MAAQ3D,EAEfA,EAAK8xT,gBAAgBjtT,GAEdA,GAGXrB,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,YAA6C,SAAUuL,GACnD,MAAM/O,EAAOC,KACPq3T,EAAS,SAAUt2S,GACjBA,aAAa4kB,GAAGnhC,MAAM48S,SACtBtyS,EAASvH,SAAQwH,GAAKA,EAAErJ,SAAS,QAGrC,IADA,IAAIiV,EAASoG,EACNxd,GAAAA,EAAAA,KAAAA,WAAmBoX,EAAOwH,YAC7BxH,EAASA,EAAOwH,YAEpBxH,EAAOkd,YAAY/oB,IAEnB/O,EAAKyE,MACL6yT,EAAOt3T,EAAKyE,OAGZzE,EAAK4f,WAAWjhB,KAAK24T,IAI7B9zT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,YAA6C,WACzC,IAAIge,EAAUvhB,KAAK2f,WACnB,OAAI4B,aAAmBokB,GAAGnhC,MAAMoO,MACrB2O,EAAQY,YAAYy8E,cAGpB,IAIfr7F,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,SAAUnE,GACtD,IAAImiB,EAAUvhB,KAAKwE,MACnB,OAAI+c,aAAmBokB,GAAGnhC,MAAMoO,MACrB2O,EAAQY,YAAY8V,eAAe74B,GAGnC,MAIfmE,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,cAA+C,SAAUE,GACrD,MAAM1D,EAAOC,KACPq3T,EAAS,SAAUt2S,GACrB,GAAItd,EAAQxD,KAAKwD,QAAS,CACtB,IAAIkX,EAASoG,EAAEoB,YACX/iB,EAAKqE,EAAQxD,KAAKwD,QAAQE,QAC9B,GAAIvE,GAAMub,EAAOsd,eAAe74B,KAC5Bub,EAAOmd,cAAcr0B,EAAQxD,KAAKwD,SAC9BkX,EAAOwH,WAAarhB,MAAMC,QAAQ0C,EAAQqL,WAAW,CACrD,MAAMwoT,EAAY38S,EAAOwH,YACzB1e,EAAQqL,SAASnE,QAAQpD,SAAQwH,GAAKuoT,EAAUx/R,cAAc/oB,EAAE9O,KAAKwD,cAKjF1D,EAAKyE,MACL6yT,EAAOt3T,EAAKyE,OAGZzE,EAAK4f,WAAWjhB,KAAK24T,IAI7B9zT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,cAA+C,WAC3C,MAAMxD,EAAOC,KACPq3T,EAAS,SAAUt2S,GACrB,IAAIpG,EAASoG,EAAEoB,YACXxH,EAAOwd,cACPxd,EAAOwd,gBAGPxd,EAAOkmC,SAGX9gD,EAAKyE,MACL6yT,EAAOt3T,EAAKyE,OAGZzE,EAAK4f,WAAWjhB,KAAK24T,IAI7B9zT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,qBAAsD,SAAUE,EAASsB,GACrE,IAAIhF,EAAOC,KAEPu3T,EAAc,CACdhmP,MAAO,oBAEPimP,EAAgB,CAChBjmP,MAAO,oBAEPkmP,EAAmB,IAAI9xR,GAAGhgC,MAAM4pP,MAAM,CACtCxiO,MAAO,IAAI4Y,GAAGhgC,MAAMpG,OAAO,CACvBqB,OAAQ,EACR6lF,KAAM,IAAI9gD,GAAGhgC,MAAMohP,KAAKwwE,GACxBhiT,OAAQ,IAAIowB,GAAGhgC,MAAMwmP,OAAOqrE,KAEhC/wO,KAAM,IAAI9gD,GAAGhgC,MAAMohP,KAAKwwE,GACxBhiT,OAAQ,IAAIowB,GAAGhgC,MAAMwmP,OAAOqrE,KAGhC,GADUz3T,EAAKyD,OAAOsL,SAAS9F,QAAQvF,IAC5B,EAAG,CACV,IAAIy0B,EAASz0B,EAAQxD,KAAKwD,QAC1B1D,EAAK4f,WAAWjhB,MAAK,SAAU6iB,GACvBxc,GAAWmzB,EAAOw/R,eAClBx/R,EAAOxyB,SAASwyB,EAAOw/R,iBAGvBx/R,EAAOw/R,eAAiBx/R,EAAO/xB,YAAcob,EAAQpb,WACrD+xB,EAAOxyB,SAAS+xT,IAEpB13T,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,aAA2B,CAC/C0E,MAAOzE,EAAKyD,cAM5BD,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,QAAyC,SAAUguE,EAAO/9D,GACtD,OAAO29J,GAAQ5/F,EAAO/9D,IAG1BjQ,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,YAA6C,SAAUo0T,KAIvDp0T,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,iBAAkD,WAC9C,OAAOvD,KAAKo2T,aAGhB7yT,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,gBAAiD,SAAUy2B,EAASC,EAASC,GACzE,MAAMn6B,EAAOC,KACP43T,EAAmB,SAAUp9R,GAC/B,OAAOA,EAAKv6B,KAAKwD,SAErB,OAAO,IAAI7E,SAAQ,SAAUC,EAAS4W,GAClC,MAAMoiT,EAAY79R,EAAQ17B,IAAIs5T,GACxBE,EAAY79R,EAAQ37B,IAAIs5T,GACxBG,EAAY79R,EAAQ57B,IAAIs5T,GAC1B59R,EAAQ32B,QAAU42B,EAAQ52B,QAAU62B,EAAQ72B,OAC5CtD,EAAK4f,WAAWjhB,MAAK,WACjB,IAAIsU,EAAS,IAAI2yB,GAAG3yB,OAAOmkC,IACvBx3C,EAAUI,EAAKyD,OAAO7D,QACtBq4T,EAAchlT,EAAOi+N,iBAAiB4mF,EAAWC,EAAWC,EAAW,CACvEpoK,cAAehwJ,EAAQgwJ,cACvBD,UAAW/vJ,EAAQ+vJ,UACnB/9H,YAAahyB,EAAQgyB,YAAY,KAEjC6jS,EAAc,CACdngT,IAAKtV,EAAKyD,OAAO6R,IACjB4Y,OAAQ,OACRK,YAAaxuB,GAAAA,EAAAA,SAAAA,IACb6rB,aAAc7rB,GAAAA,EAAAA,SAAAA,IACdqE,KAAM6zT,EAAYp/R,WAEtBr1B,GAAAA,EAAAA,KAAQiyT,GACH92T,MAAK,SAAUstB,GACZ,MAAM7nB,EAAO6nB,EAAS7nB,KAChByhO,EAAK,6BACX,IAAIqyF,EAAK9zT,EAAKyoE,uBAAuBg5J,EAAI,mBAAmB,GACxDsyF,EAAW,CACX7+S,OAAQ,IAEZ,GAAI4+S,EAAI,CACJ,IAAIl5T,EAAIk5T,EAAGrrP,uBAAuBg5J,EAAI,aAAa,GACnD,GAAI7mO,EAAG,CACHm5T,EAASj5T,KAAOF,EAAE6+B,aAAa,iBAE/B,IADA,IAAIshB,EAAQngD,EAAE6tE,uBAAuBg5J,EAAI,iBAChC1jO,EAAI,EAAG+I,EAAMi0C,EAAM77C,OAAQnB,EAAI+I,EAAK/I,IACzCg2T,EAAS7+S,QAAU,KAAO6lC,EAAMh9C,GAAGiL,UAG3CsI,EAAOyiT,OAEN,CACD,IAAIC,EAAsBnlT,EAAOm9N,wBAAwBhsO,GACzDtF,EAAQs5T,OAGfhiT,OAAM,SAAUsD,GACb,MAAM2+S,EAAS,CACXn5T,KAAMwa,EAAIoS,QAAU,GACpBxS,OAAQI,EAAI4qB,KAAO,WAEvB5uB,EAAO2iT,SAKnBv5T,EAAQkB,EAAKyD,YAKzBD,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,SAAU2hG,EAAWmzN,EAAOC,GACtE,IAAIv4T,EAAOC,KAIXpB,QAAQwiB,IAAI,CAACrhB,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAUzxD,EAAK4f,aAAajhB,MAAK,SAAU65T,GACzE,MAAM9O,EAAQ8O,EAAU,GAClBh3S,EAAUg3S,EAAU,GAC1B,GAAIrzN,EAAW,CACX,IAAIszN,EAAqB,CACrBz1S,OAAQ,CAACxB,GACTzS,SAAU,IAAI62B,GAAG85Q,WAAWl+R,EAAQY,YAAYy8E,gBAEpD7+F,EAAK4hN,YAAc,IAAIh8K,GAAGg8K,YAAYk/F,UAAU2X,GAC5Cj1T,GAAAA,EAAAA,KAAAA,WAAmB80T,IACnBt4T,EAAK4hN,YAAYtzM,GAAG,gBAAgB,SAAUtP,GACtCA,EAAE+P,SAAS4B,aACX2nT,EAAMt5T,EAAE+P,SAAS9E,KAAK,GAAGtG,MAAMF,WAIvCD,GAAAA,EAAAA,KAAAA,WAAmB+0T,IACnBv4T,EAAK4hN,YAAYtzM,GAAG,kBAAkB,SAAUtP,GACxCA,EAAE+P,SAAS4B,aACX4nT,EAAQv5T,EAAE+P,SAAS9E,KAAK,GAAGtG,MAAMF,WAI7CimT,EAAM7nG,eAAe7hN,EAAK4hN,kBAErB5hN,EAAK4hN,cACV8nG,EAAMvkG,kBAAkBnlN,EAAK4hN,aAGzBp+M,GAAAA,EAAAA,KAAAA,YAAsBxD,EAAK04T,8BAAgCl1T,GAAAA,EAAAA,KAAAA,WAAmBxD,EAAK04T,gCACnFhP,EAAM56H,GAAG,cAAe9uL,EAAK04T,qCACtB14T,EAAK04T,mCAM5Bl1T,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,oBAAqD,SAAU+X,EAAQ+e,GACnE,IAAIt6B,EAAOC,KACP8O,EAAW9O,KAAKwE,MAAM2d,YAAYy8E,cAClC85N,EAAmB,GAEvB,GAAIr+R,EAAW,CACX,IAAIs+R,EAAa54T,EAAKyD,OAAOlF,IAAIw3D,uBAAuB,CAACx6C,EAAO,GAAIA,EAAO,KACvEs9S,EAAc74T,EAAKyD,OAAOlF,IAAIw3D,uBAAuB,CAACx6C,EAAO,GAAIA,EAAO,KAC5Eq9S,EAAW,IAAMt+R,EAAU,GAAK,EAChCs+R,EAAW,IAAMt+R,EAAU,GAC3Bu+R,EAAY,IAAMv+R,EAAU,GAAK,EACjC/e,EAASvb,EAAKyD,OAAOlF,IAAIs3D,uBAAuB+iQ,GAAYtwT,OAAOtI,EAAKyD,OAAOlF,IAAIs3D,uBAAuBgjQ,IAG9G,IAAK,IAAI12T,EAAI,EAAGA,EAAI4M,EAASzL,OAAQnB,IAAK,CACtC,IAAIs4B,EAAO1rB,EAAS5M,GAGhBuhF,EADWjpD,EAAKr5B,cACMG,iBAEtBqkC,GAAGrqB,OAAOisK,mBAAmBjsK,EAAQmoE,IACrCi1O,EAAiBtwT,KAAKoyB,EAAK92B,MAAMF,QAIzC,OAAOk1T,GAGXn1T,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,OAAO,MAEXA,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,aAA8C,WAC1C,IAAIqB,EAAS,KAEb,GADW5E,KACEmmB,mBACJrmB,GAAAA,EAAAA,UAAAA,IACD,IACI8E,EAJD5E,KAIewD,OAAOwS,aAAaqiB,WAAW4nC,WAAWU,IAAIH,KAAKo6G,IAAI/oK,KAEzE,MAAOyhH,IAMf,MAAMtzC,EAAWrzE,SAAS2zC,yBACpBuvQ,EAAWljT,SAASC,cAAc,YAIxC,OAHAozE,EAASnzE,YAAYgjT,GACrBA,EAAS1iT,UAAYvI,EACrBA,EAASirT,EAAS9hT,aAItBxK,GAAAA,EAAAA,KAAAA,MAAAA,OAAAA,UAAAA,eAAgD,WAC5C,IAAIqB,EAAS,KAKb,OAHI5E,KAAKwD,OAAOwS,eACZpR,EAAS9E,GAAAA,EAAAA,UAAAA,KAEN8E,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,SAA2C,SAAUjF,GACjD,IAAIyB,EAAOC,KAEXD,EAAK84T,SAAW,SAAU95T,GACtB,GAAIT,EAAImrC,OAAS3pC,GAAAA,EAAAA,KAAAA,SAAjB,CAGA,IAAI8kG,EAAe,EAkBnB,OAjBAtmG,EAAI2B,KAAK3B,IAAI8jN,sBAAsBrjN,EAAEq0L,OACjC,SAAU3vL,EAASqpD,GACXrpD,EAAQC,OAASD,EAAQC,MAAMF,OAAOa,YACtCugG,MAGR,CACIywF,aAAcA,KAEjBzwF,IAED7kG,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,MAAoB,CACxC2jF,WAAY1kF,EAAE0kF,WAAY2vG,MAAOr0L,EAAEq0L,QAEvCrzL,EAAKyD,OAAO+0B,SAASx5B,EAAE0kF,WAAY1kF,EAAEq0L,QAGjB,IAAjBxuF,KAIfrhG,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,SAA2C,WACvC,IAAIxD,EAAOC,KAEXD,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GACzCA,EAAMp7S,GAAG2vL,GAAaj+L,EAAK84T,cAInCt1T,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,WAA6C,WACzC,IAAIxD,EAAOC,KAEXD,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GACzCA,EAAM56H,GAAGmP,GAAaj+L,EAAK84T,cAInCt1T,GAAAA,EAAAA,KAAAA,QAAAA,SAAAA,UAAAA,OAA4C,WACxC,IAAIxD,EAAOC,KACND,EAAKguD,IAMNhuD,EAAKguD,IAAIy5J,iBALTznN,EAAKguD,IAAM,IAAIpoB,GAAG76B,QAAQg1S,UAAU,CAChCryS,OAAQ1N,EAAKyD,OAAOkJ,OAQhCnJ,GAAAA,EAAAA,KAAAA,QAAAA,SAAAA,UAAAA,QAA6C,WAEzC,GADWvD,KACF+tD,IACL,OAFO/tD,KAEK+tD,IAAIkpK,eAIxB1zN,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,SAA4C,SAAUjF,GAClD,IAAIyB,EAAOC,KACX1B,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAC7B,MAAM/8S,EAAM3M,EAAKyD,OAAOkJ,IACxB3M,EAAK+4T,KAAO,IAAInzR,GAAG76B,QAAQi1S,KAAK,CAC5BtyS,OAAQf,IAKZ3M,EAAKg5T,MAAQ,IAAIpzR,GAAG76B,QAAQk1S,WAAW,CACnCnjQ,OAAQ,SAAU99C,GACd,IAAKA,EAAEs0L,aAAet0L,EAAEs0L,WAAWb,WAAai3H,EAAMzmG,UAAU9xB,oBAAsBnyL,EAAEs0L,WAAWb,UAAUruI,WAAY,CAErH,IAAItH,EAAS,WACL78C,KAAKmhD,QAAQvzC,YAAc5N,KAAKmhD,QAAQmmE,cACnCvnH,EAAKi5T,oBACNj5T,EAAKi5T,kBAAoBvnT,OAAO61I,sBAAsBzqG,EAAOqD,KAAKlgD,QAGtEyR,OAAO61I,sBAAsBzqG,EAAOqD,KAAKlgD,QAClCA,KAAKmhD,QAAQvzC,YAAc5N,KAAKmhD,QAAQmmE,eAC3CvnH,EAAKi5T,oBACLvnT,OAAO81I,qBAAqBxnJ,EAAKi5T,0BAC1Bj5T,EAAKi5T,mBAEhBrzR,GAAG76B,QAAQk1S,WAAWx/S,UAAUq8C,OAAOn8C,KAAKV,KAAMjB,KAG1D89C,EAAOn8C,KAAKV,UAIxBD,EAAKg5T,MAAM52G,UAAUz1M,GAErB+8S,EAAMt+S,WAAWpL,EAAKg5T,OACtBtP,EAAMt+S,WAAWpL,EAAK+4T,MAEtBpsT,EAAIhB,iBAAiB,UAAUnE,SAAQ,SAAUqlD,GAC7CA,EAAO7uB,UAAUnjB,IAAI,aAAc,eAAgB7a,EAAKyD,OAAO84C,MAAQ,QACvEsQ,EAAOjnD,MAAMg3C,QAAU,QACvBiQ,EAAOz/C,UAAY,GACfy/C,EAAOrjC,QAAQ,iBACfqjC,EAAO7uB,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,eACzCsQ,EAAOx/B,aAAa,QAASrtB,EAAKyD,OAAOm+B,gBAAgB,YAEzDirB,EAAOrjC,QAAQ,kBACfqjC,EAAO7uB,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,gBACzCsQ,EAAOx/B,aAAa,QAASrtB,EAAKyD,OAAOm+B,gBAAgB,gBAIjE,MAAMs3R,EAAavsT,EAAIsL,cAAc,kBACrCihT,EAAWl7R,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,QAC7C28Q,EAAWjhT,cAAc,wBAAwB+lB,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,WAEnFh+C,EAAI+P,GAAGvO,GAAAA,EAAAA,MAAAA,gBAA8BC,EAAKyvB,QAAQ0wB,KAAKngD,QAI/DwD,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,QAA2C,WAiBvC,IAAIxD,EAAOC,KACP1B,EAAMyB,EAAKyD,OAAOlF,IAAI2B,KAAK3B,IAI/ByB,EAAKyD,OAAO6H,gBAAgB3M,MAAK,WAC7B,GAAIqB,EAAKg5T,MAAM//F,mBAAoB,CAC/B,IAAIv6M,EAAMngB,EAAI0kN,UAAUvgM,gBACxB1iB,EAAKg5T,MAAM7+F,kBAAkBz7M,QAG7BngB,EAAImiD,KAAK0xI,IAAY,SAAUpzL,GAC3BgB,EAAKg5T,MAAMl8Q,OAAO99C,UAMlCwE,GAAAA,EAAAA,KAAAA,QAAAA,WAAAA,UAAAA,SAAgD,SAAUjF,GACtD,IAAIyB,EAAOC,KACX1B,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAC7B,MAAM/8S,EAAM3M,EAAKyD,OAAOkJ,IAExB3M,EAAKm5T,OAAS,IAAIvzR,GAAG76B,QAAQm1S,aAAa,CACtCxyS,OAAQf,EAAK4O,OAAQhd,EAAIwqC,cAAeu9K,SAAU,KAGtDojG,EAAMt+S,WAAWpL,EAAKm5T,QAEtBxsT,EAAIhB,iBAAiB,UAAUnE,SAAQ,SAAUqlD,GAC7CA,EAAOjnD,MAAMg3C,QAAU,QACvBiQ,EAAOz/C,UAAY,MAEvB,MAAMgsT,EAAUzsT,EAAIsL,cAAc,0BAClCmhT,EAAQp7R,UAAUnjB,IAAI,aAAc,eAAgB7a,EAAKyD,OAAO84C,MAAQ,QACxE68Q,EAAQ/rS,aAAa,QAASrtB,EAAKyD,OAAOm+B,gBAAgB,4BAIlEp+B,GAAAA,EAAAA,KAAAA,QAAAA,WAAAA,UAAAA,iBAAwD,SAAU+X,GAC9Dtb,KAAKk5T,OAAO59S,OAASA,GAGzB/X,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,SAAiDqH,eAAgBtM,GAC7D,MAAMyB,EAAOC,KAQb,GAPAD,EAAKzB,IAAMA,EAEXyB,EAAKq5T,eAAiB,SAAUr6T,GAC5BgB,EAAKyD,OAAOggF,cAAczkF,IAG9BgB,EAAK0pT,YAAcnrT,EAAI2B,KAAKuxD,SACvBzxD,EAAKyD,OAAOlF,IAAI0I,SAKjBjH,EAAKyD,OAAO0D,IAAMnH,EAAKyD,OAAOlF,IAAI2I,OAAOC,IACzCnH,EAAKyD,OAAOm4C,MAAQ77C,GAAAA,EAAAA,MAAAA,YANO,CAC3B,IAAIyqL,EAAaxqL,EAAK0pT,MAAMzmG,UAAU9gM,gBACtCniB,EAAKyD,OAAO0D,IAAMqjL,EAAWnoK,UAC7BriB,EAAKyD,OAAOm4C,MAAQ4uI,EAAWsa,WAMnC9kM,EAAKyD,OAAOs3B,MAAQ/6B,EAAKyD,OAAOm4C,QAAUhW,GAAGC,KAAKy9J,MAAMznJ,SAK5Dr4C,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,YAAoD,SAAUxE,GAC1D,IAAIgB,EAAOC,KACX,GAAID,EAAKzB,IAAI2B,KAAK3B,IAAK,CACnB,IAAIoB,EAASK,EAAKzB,IAAI2B,KAAK3B,IAAIokN,mBAAmB3jN,GAC9CW,IACIK,EAAKyD,OAAOs3B,MACZ/6B,EAAKyD,OAAO6+E,OAAS3iF,EAAOwwB,UAE5BnwB,EAAKyD,OAAOqyD,GAAKn2D,EAGrBK,EAAKyD,OAAOk6E,OAAOttE,MAAMrQ,EAAKyD,OAAQwZ,cAKlDzZ,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,SAAiD,SAAUjF,GACvD,IAAIyB,EAAOC,KACXD,EAAKzB,IAAMA,EAEXyB,EAAKs5T,aAAe,SAAUt6T,GACtBA,EAAEg3I,UAGNh2I,EAAKu5T,SAASv5T,EAAK0pT,MAAM/mG,mBAAmB3jN,EAAE0+L,eAAgB1+L,EAAEq0L,QAGpErzL,EAAKw5T,mBAAqB,SAAUx6T,GAChCgB,EAAKy5T,gBAAgBz6T,IAGzBT,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAC7B1pT,EAAK0pT,MAAQA,MAIrB,IAAIgQ,GAAqB,WAGrB,OAFWz5T,KAECwD,OAAO4gH,iBAAiBt1G,SAASlG,MAAK,SAAUmG,GACxD,OAAOA,aAAaiC,GAAAA,MAI5BzN,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuD,WAGnD,OAFWvD,KAECwD,OAAO4gH,iBAAiBt1G,SAASzL,OAAS,GAF3CrD,KAEqDwD,OAAO4gH,iBAAiBt1G,SAAS,GAAGxO,SAAS+C,QAAU,GAc3HE,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,YAAoD,SAAU+I,EAAUioB,GACpE,IAEImlS,EAAW,IAAI/zR,GAAGnmC,QAAQ,CAC1Bc,SAAU,IAAIqlC,GAAGplC,KAAKmP,MAAM,CAACpD,EAAS,GAAIA,EAAS,GAAIioB,EAAWmvD,IAAKnvD,EAAW+3F,MAAO,UAE7FotM,EAASlqI,cAAcj7J,GALZv0B,KAONwD,OAAO4gH,iBAAiBnkH,KAAKuE,MAAM2d,YAAYyV,WAAW8hS,IAGnEn2T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,YAAoD,SAAU+I,EAAU6hH,EAAShpE,EAAG8sE,EAAO0nM,EAAWC,EAAmB7nM,GACrH,IAAIhyH,EAAOC,KAEP2tB,EAAIrhB,EAAS,GACbshB,EAAIthB,EAAS,GAEbipB,EAAOkkS,GAAmB/4T,KAAKV,MACnC,GAAID,EAAKyD,OAAO4gH,iBAAiBt1G,UAAYymB,EAAM,CAC/C,IAAIq5F,EAAOr5F,EAAKj1B,SAAS+C,OAAS,GAAKkyB,EAAKj1B,SAASi1B,EAAKj1B,SAAS+C,OAAS,GAC5E,GAAIurH,GAAwB,IAAhBA,EAAKvrH,OACbtD,EAAKyD,OAAO4gH,iBAAiBt1G,SAAS,GAAGxO,SAAS8H,KAAK,CAACulB,EAAGC,EAAGmkG,EAAU5sE,IACxE5vB,EAAKt1B,KAAKwD,QAAQtC,cAAcm7N,iBAAiB,CAAC3uM,EAAGC,EAAGmkG,EAAU5sE,QAEjE,CACD,IAAI00Q,EAAKjrM,EAAK,GACVx3G,EAAKw3G,EAAK,GAEVjhG,IAAMksS,GAAMjsS,IAAMxW,IAClBrX,EAAKyD,OAAO4gH,iBAAiBt1G,SAAS,GAAGxO,SAAS8H,KAAK,CAACulB,EAAGC,EAAGmkG,EAAU5sE,IACxE5vB,EAAKt1B,KAAKwD,QAAQtC,cAAcm7N,iBAAiB,CAAC3uM,EAAGC,EAAGmkG,EAAU5sE,KAI1E5hD,GAAAA,EAAAA,KAAAA,QAAAA,qBAAqCxD,EAAKyD,OAAO88G,MAAMlB,gBAAgBE,gBAAiBv/G,EAAKypH,mBAAmBzpH,EAAKyD,OAAO4gH,kBAAkBt1G,UAGlJ/O,EAAKyD,OAAO+H,QAAQxL,EAAKyD,OAAO88G,MAAMzgF,MAAMggF,aAAc,CACtDi6M,OAAoB11T,MAAX+pH,GAAiC/pH,MAAT6tH,GAAsBA,EAAQ,GAAK9D,EAAU,KAItF5qH,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,sBAA8DqH,eAAgBmvT,GAC1E,MAAMh6T,EAAOC,KACb,IAAIgyH,EAAU7D,EAAS8D,EAAOF,EAAUioM,EAMxC,GAJKP,GAAmB/4T,KAAKV,OACzBD,EAAKyD,OAAOilH,gBAAe,GAG3BsxM,GAAeA,EAAYr6T,SAC3BK,EAAKyD,OAAO2gH,SAAShsF,gBAErB65F,EAAW+nM,EAAYr6T,OAAOsyH,SAAWjyH,EAAKyD,OAAOlF,IAAIokB,oBAAsB,EAC/EyrG,EAAU4rM,EAAYr6T,OAAOyuH,SAAW4rM,EAAY,IAAM,EAC1D9nM,EAAQ8nM,EAAYr6T,OAAOuyH,MAAmC,IAA3B8nM,EAAYr6T,OAAOuyH,MAAc,EACpEF,EAAWgoM,EAAYr6T,OAAOqyH,UAAY,EAC1CioM,EAAmBD,EAAYr6T,OAAOs6T,kBAAoB,EAEtDj6T,EAAKyD,OAAO4gH,kBAAkB,CAC9B,IAAI61M,EAAY,CAACF,EAAYr6T,QAAUq6T,EAAYr6T,OAAOw6T,WAAaH,EAAY,GAAIA,EAAYr6T,QAAUq6T,EAAYr6T,OAAOy6T,UAAYJ,EAAY,IACxJ,IAAKE,EAAUllT,OAAMvM,GAAKA,IACtB,OAAO,KAEX,IAAI4xT,EAAoB72T,GAAAA,EAAAA,KAAAA,UAAkB02T,EAAW,YAAal6T,EAAKyD,OAAOlF,IAAI4I,KAElFnH,EAAKs6T,YAAYD,EAAmBjsM,GAAS,IAAItqF,MAAOsrC,UAAW8iD,EAAOD,EAAUgoM,EAAkBjoM,GAEtG,IAAIryH,EAAS+5T,GAAmB/4T,KAAKX,GAAMO,SACvC2K,EAAMvL,EAAO2D,OACb4H,GAAO,IACPlL,EAAKyD,OAAO82T,WAAa56T,EAAOuL,EAAM,GAAG,GAAKvL,EAAO,GAAG,KAAOuL,EAAM,IAGzElL,EAAKyD,OAAO+H,QAAQxL,EAAKyD,OAAO88G,MAAMzgF,MAAM6/E,eAAgB,CACxDc,GAAI,CACA,SAAY45M,EACZ,SAAYroM,EACZ,SAAYC,EACZ,QAAWzuH,GAAAA,EAAAA,KAAAA,SAAiB4qH,GAC5B,MAAS8D,KAIjB,MAAMnjH,QAAiBlQ,QAAQwiB,IAAI,CAACrhB,EAAKyD,OAAO2gH,SAAS3uF,SAAS4kS,EAAmB,CACjFx5T,OAAQ,EACRgrC,UAAW,UACXC,YAAa,EACbC,YAAa,UACbC,YAAa,EACb1nC,YAAY,IACZtE,EAAKyD,OAAO2gH,SAAS3sF,UAAU,CAAE72B,OAAQy5T,EAAmBx5T,OAAQoxH,GAAY,CAChFlmF,YAAa,UACbC,YAAa,EACbH,UAAW,UACXC,YAAa,GACbxnC,YAAY,MAEVo3B,EAAS3sB,EAAS,GAClByrT,EAAiBzrT,EAAS,GAGhC,GAFA/O,EAAKyD,OAAO6mH,qBAAsB,EAED,GAA7BtqH,EAAKyD,OAAOg3T,cAAwB,CAGpC,GAFAz6T,EAAKyD,OAAOg3T,eAAgB,GAEvBz6T,EAAKyD,OAAO0lH,kBAAmB,CAChCnpH,EAAKyD,OAAO0lH,kBAAoBnpH,EAAKyD,OAAOkJ,IAAIsL,cAAc,IAAMjY,EAAKyD,OAAO84C,MAAQ,iBACxFv8C,EAAKyD,OAAO0lH,kBAAkBlxG,cAAc,UAAUpM,iBAAiB,SAAS,WACvE5L,KAAK+9B,UAAU8gB,SAAS/+C,GAAAA,EAAAA,QAAAA,YAI7BC,EAAKyD,OAAOy3G,cAAa,GACzBl7G,EAAKyD,OAAO8lH,OAAOvpH,EAAKyD,OAAO2gH,SAASr1G,SAAS,GAAGxO,UAQpDP,EAAKyD,OAAOi9G,oBAAoB/hH,MAAK,SAAUgiH,GACtCA,EAAUr7G,aACXq7G,EAAU/kB,YAGV+kB,EAAUnyB,eACVmyB,EAAUlyB,eAlBdzuF,EAAKyD,OAAOy3G,cAAa,MAuBjC,IAAI7uG,EAAmBrM,EAAKyD,OAAOlF,IAAI2G,mBAAmB,+BAA+B,GACrFmH,EACArM,EAAKyD,OAAO0lH,kBAAoB98G,EAAiB41E,WAAW,CAAE11E,SAAUF,EAAiBG,SAASs1E,KAAMK,YAAaniF,EAAKyD,OAAO0lH,oBAEjInpH,EAAKyD,OAAOlF,IAAIoO,IAAIG,YAAY9M,EAAKyD,OAAO0lH,mBAIpDnpH,EAAKyD,OAAO0lH,kBAAkBnrF,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QAC/CC,EAAKyD,OAAOy3G,cAAa,GACzBl7G,EAAKyD,OAAO8lH,OAAOvpH,EAAKyD,OAAO2gH,SAASr1G,UAI5C,MAAO,CACH2sB,OAAQA,EACRu2F,SAAUuoM,GAKtB,OAAO,MAGXh3T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuD,SAAUk3T,GAC7D,IAAI16T,EAAOC,KAEX,GAAIy6T,EAAU,CACV16T,EAAKyD,OAAOg3T,eAAgB,EAC5B,IAEIE,EAFAC,EAAkB,GAItB,GAAI56T,EAAKyD,OAAOklH,mBAAoB,CAEhC,IACI55G,GADa,IAAIvL,GAAAA,EAAAA,KAAAA,OAAAA,MACKga,OAAOuwG,aAAa/tH,EAAKyD,OAAOklH,oBACtD55G,GAAY/O,EAAKyD,OAAO2pH,aAAeptH,EAAKyD,OAAOlF,IAAI4I,MACvD4H,EAAWA,EAASxQ,KAAI,SAAUmF,GAC9B,IAAI+G,EAAQ/G,EAAQ+G,QAEpB,OADAA,EAAMrJ,cAAc63I,UAAUj5I,EAAKyD,OAAO2pH,WAAYptH,EAAKyD,OAAOlF,IAAI4I,KAC/DsD,MAIf,IAAIJ,EAAc0E,EAASlG,MAAK,SAAUnF,GACtC,IAAI0G,EAAO1G,EAAQtC,cAAc8I,UAAUmkB,cAE3C,MADa,UAATjkB,GAAoBwwT,EAAgBvyT,KAAK3E,GAC7B,eAAT0G,GAAkC,oBAATA,KACjChJ,cAAcG,iBAEjBo5T,EAA2B,IAAI/0R,GAAGnmC,QAAQ,CACtCc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAWpyN,EAAa,QAC9CqwT,UAAU,SAIdC,EAA2B,IAAI/0R,GAAGnmC,QAAQ,CACtCc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAW,GAAI,QACrCi+F,UAAU,IAIlB,GAAIC,EAA0B,CAE1B,MAAME,EAAYr3T,GAAAA,EAAAA,KAAAA,QAAAA,cAA8Bm3T,GAmBhD,IAAIG,EAlBJ96T,EAAKyD,OAAO4gH,iBAAiBxsF,WAAWgjS,GAEpCA,EAAUt6T,SAAS+C,OAAS,GAC5BtD,EAAKyD,OAAOlF,IAAI6uD,eAAeptD,EAAKyD,OAAO4gH,iBAAiBt1G,UAG5D6rT,EAAgBt3T,OAAS,GACzBs3T,EACKr8T,KAAIo7T,GAAWn2T,GAAAA,EAAAA,KAAAA,QAAAA,cAA8Bm2T,KAC7CnyT,SAAQ9D,GAAW1D,EAAKyD,OAAO4gH,iBAAiBxsF,WAAWn0B,KAGpE1D,EAAKyD,OAAO8rH,uBAAyBvvH,EAAKyD,OAAOswD,sBAAsB1M,UAElErnD,EAAKqvH,qBACNrvH,EAAKqvH,mBAAqB,IAI9B,IAAI0rM,EAA4B,EAC5BC,EAAe,EACfltQ,GAAQ,EACRluD,EAAU,CACVq7T,oBAAoB,EAAMr+P,QAAS,KA4CvCk+P,EAA6BhhI,aAzCF,SAASohI,EAAmBC,GACnD,IAAI97T,EAAK07T,IACTh+P,UAAUmyD,YAAYgsM,oBAClB,SAAU92T,GACNy1L,cAAcihI,GACd96T,EAAKyD,OAAOswD,sBAAsBvM,WAAWxnD,EAAKyD,OAAO8rH,wBACzDvvH,EAAKo7T,sBAAsBh3T,GAAMzF,MAAK,SAAUi9B,GACL,GAAnC57B,EAAKyD,OAAO6mH,qBAA+B1uF,GAAOA,EAAIF,QAAUE,EAAIq2F,UACpEjyH,EAAKqvH,mBAAmBhnH,KAAK00D,UAAUmyD,YAAYmsM,cAAcr7T,EAAKo7T,sBAAsBj7Q,KAAKngD,GAAOA,EAAKyD,OAAOwrH,iBAAiB9uE,KAAKngD,EAAKyD,QAAS7D,SAIpKu7T,GACI,SAAUjlT,GACN,GAAQA,EAAMhX,OACLgX,EAAMw5G,QACHsrM,EAAe,IACfnhI,cAAcihI,GACd96T,EAAKyD,OAAOwrH,iBAAiBtuH,KAAKX,EAAKyD,OAAQyS,KAE/C8kT,IACAE,GAAmB,WACfrhI,cAAcihI,GACThtQ,IACDA,GAAQ,EACR9tD,EAAKyD,OAAOwrH,iBAAiBtuH,KAAKX,EAAKyD,OAAQyS,aAM3D2jL,cAAcihI,GACd96T,EAAKyD,OAAOwrH,iBAAiBtuH,KAAKX,EAAKyD,OAAQyS,IAExD,CACP0mD,QAAS,IAAOv9D,EAChBi8T,WAAY,GACZL,oBAAoB,MAIiC,KAE7D/zQ,YAAW,WACHlnD,EAAKyD,OAAO4gH,kBAAoBrkH,EAAKyD,OAAO4gH,iBAAiBt1G,UAAY/O,EAAKyD,OAAO4gH,iBAAiBt1G,SAASzL,OAAS,GAAiE,GAA5DtD,EAAKyD,OAAO4gH,iBAAiBt1G,SAAS,GAAGxO,SAAS+C,SAC/Ku2L,cAAcihI,GAEd96T,EAAKyD,OAAOswD,sBAAsBvM,WAAWxnD,EAAKyD,OAAO8rH,wBACzDvvH,EAAKzB,IAAIuvD,MAAM9tD,EAAKyD,OAAOm+B,gBAAgB,+BAAgC,CACvEx3B,KAAMrK,GAAAA,EAAAA,QAAAA,UAEVC,EAAKyD,OAAOm+G,MAAM2D,eAAevnF,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QAClDC,EAAKyD,OAAOm+G,MAAM4D,iBAAiBxnF,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,WAEtDH,EAAQg9D,QAAU,WAIzB58D,EAAKyD,OAAOg3T,eAAgB,EAExBz6T,EAAKqvH,qBACLrvH,EAAKqvH,mBAAqBrvH,EAAKqvH,8BAA8BtuH,MAAQf,EAAKqvH,mBAAqB,CAACrvH,EAAKqvH,oBAErGrvH,EAAKqvH,mBAAmB7nH,SAAQ,SAAU8nH,GACtCvyD,UAAUmyD,YAAYE,WAAWE,MAGrCtvH,EAAKqvH,mBAAqB,IAG1BrvH,EAAKyD,OAAO0lH,mBACZnpH,EAAKyD,OAAO0lH,kBAAkBnrF,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,SAIxDyD,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,iBAAyD,WACrD,IAAIxD,EAAOC,KAENuD,GAAAA,EAAAA,KAAAA,iBACDxD,EAAK0pT,MAAMp7S,GAAG,CAAC6vL,GAAaF,IAAcj+L,EAAKs5T,cAC/Ct5T,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAAM6J,GAAG8jL,GAAYpyL,EAAKw5T,sBAG9Dh2T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,mBAA2D,WACvD,IAAIxD,EAAOC,KAEXD,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GACpClmT,GAAAA,EAAAA,KAAAA,iBACDkmT,EAAM56H,GAAG,CAACqP,GAAaF,IAAcj+L,EAAKs5T,cAC1Ct5T,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAAMqqL,GAAGsD,GAAYpyL,EAAKw5T,qBAGtDx5T,EAAKu7T,UACL7R,EAAMtkG,cAAcplN,EAAKu7T,UAGzBv7T,EAAKw7T,kBACLx7T,EAAKw7T,gBAAgB51T,MAAMg3C,QAAU,QAGrC58C,EAAKy7T,kBACEz7T,EAAKy7T,SACZ/R,EAAM5sQ,cAIlBt5C,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,MAA8C,SAAUiB,GAGhDA,GACAA,EAAM2zB,gBAHCn4B,KAMN2sH,mBAAmBjsH,KANbV,OASfuD,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,gBAAwD,SAAUxE,GAG9D,MAAM08T,EAAgB91R,GAAGkX,OAAOqlQ,iBAAiBnjT,GAE7C08T,GAJOz7T,KAIew7T,WAC0B,mBAArCC,EAAcx5D,oBACrBw5D,EAAcx5D,mBAAmB,KAAM,IAAIt8N,GAAGhgC,MAAMwmP,OAAO,CACvD56K,MAAO,uBACPj/C,MAAO,KAI2B,mBAA/BmpS,EAAc16D,cACrB06D,EAAc16D,aAbX/gQ,KAa6Bw7T,SAASv7T,KAAKwD,QAAQtC,iBAKlEoC,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,QAAgD,WAC5C,IAAIxD,EAAOC,KAEXD,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAErC1pT,EAAKu7T,UACL7R,EAAMtkG,cAAcplN,EAAKu7T,UAEzBv7T,EAAKw7T,kBACLx7T,EAAKw7T,gBAAgB51T,MAAMg3C,QAAU,QAGrC58C,EAAKy7T,iBACEz7T,EAAKy7T,aAKxBj4T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,SAAiD,SAAUkgF,EAAYi4O,GACnE,IAAI37T,EAAOC,KAEX,GAAID,EAAKyD,OAAOiwG,WAAY,CACxB,IACIsuK,EADehiR,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAAM2d,YACnB2/P,8BAA8Br+L,GAC5D10E,IACI,MAAMxO,EAAOwO,EAAE5N,cACf,OAAOZ,aAAgBolC,GAAGplC,KAAKi8N,YAAcj8N,aAAgB08N,MAGrE,GAAuB,OAAnB8kD,EAAyB,CACzB,IACIn1E,EADWm1E,EAAe5gR,cACF2rM,gBAAgBrpH,GAG5C1jF,EAAKyD,OAAO09G,wCAAwC6gK,EAAe5gR,cAAcG,kBAEjF,MAAM8xL,EAAQrzL,EAAKyD,OAAOlF,IAAIw3D,uBAAuB82I,GAKrD,GAJiBrrM,KAAKkrC,KAClBlrC,KAAKs5B,IAAI6gS,EAAW,GAAKtoI,EAAM,GAAI,GACnC7xL,KAAKs5B,IAAI6gS,EAAW,GAAKtoI,EAAM,GAAI,IAExBrzL,EAAKyD,OAAO4+G,kBACvBriH,EAAK47T,cACF,CACH,IAAIvxT,EAAc,CAACq5E,EAAY,CAACmpH,EAAa,GAAIA,EAAa,KAEzD7sM,EAAKy7T,SACLz7T,EAAKy7T,SAASv7T,KAAKwD,QAAQtC,cAAcF,eAAemJ,GADzCrK,EAAKy7T,SAAW,IAAIxqT,GAAAA,EAAS5G,EAAa,IAIzDrK,EAAKw7T,kBACNx7T,EAAKw7T,gBAAkB5uT,SAAS6xF,uBAAuB,sCAAsC,IAEjGz+F,EAAKw7T,gBAAgB51T,MAAMg3C,QAAU,QAEhC58C,EAAKu7T,WACNv7T,EAAKu7T,SAAW,IAAI31R,GAAG65Q,QAAQ,CAC3Br+P,QAASphD,EAAKw7T,gBACdtpS,OAAQ,CAAC,EAAG,MAGhBlyB,EAAK0pT,MAAMznG,WAAWjiN,EAAKu7T,WAGDl3T,MAA1BrE,EAAKu7T,SAAS9pQ,UACdzxD,EAAKu7T,SAAS/tQ,OAAOxtD,EAAK0pT,OAE9B1pT,EAAKu7T,SAAS53J,YAAYjgF,GAE1B,IAAIt/E,EAAO,GACX,MAAM6pJ,EAAW+zH,EAAe5gR,cAAc8I,UAC9B,cAAZ+jJ,GAAwC,mBAAZA,GACxB+zH,EAAetyF,UAAUzmL,QAAQ,SAAW,IAC5C7E,EAAKyQ,EAAImtQ,EAAevjQ,IAAI,SAGpC,IAAIpV,EAASrJ,EAAKyD,OAAOlF,IAAIqB,QAAQyJ,QAAUrJ,EAAKyD,OAAOlF,IAAIqB,QAAQyJ,OAAOG,QAAQ,IAAK,WAAQnF,EACnGD,EAAKwpB,EAAI5tB,EAAKzB,IAAI2B,KAAK66B,QAAU8xK,EAAa,GAAG3pI,eAAe75D,EAAQ,CAAE8oH,sBAAuB,IAAO3wH,KAAKirC,MAAMogK,EAAa,IAAI3pI,eAAe75D,GACnJjF,EAAKypB,EAAI7tB,EAAKzB,IAAI2B,KAAK66B,QAAU8xK,EAAa,GAAG3pI,eAAe75D,EAAQ,CAAE8oH,sBAAuB,IAAO3wH,KAAKirC,MAAMogK,EAAa,IAAI3pI,eAAe75D,GAE/IrJ,EAAKzB,IAAI2B,KAAK66B,UACd32B,EAAK22B,OAAQ,GAGjB,IAAI8gS,EAAO,SAAUtvT,GACjB,OAAOsgM,EAAatgM,IAAa/K,KAAKirC,MAA+B,IAAzBogK,EAAatgM,IAAmB,KAAK22D,eAAe75D,QAAUhF,GAE1Gy3T,EAAO,SAAUvvT,GACjB,OAAOsgM,EAAatgM,GAAY,EAAI,IAAIu3B,KAAK+oK,EAAatgM,IAAW22D,eAAe75D,QAAUhF,GAalG,GAVe29Q,EAAe5gR,cAAco2I,cAC7B5xG,GAAGplC,KAAK2rH,eAAeC,MAClChoH,EAAKupB,EAAIkuS,EAAK,GACdz3T,EAAKghD,EAAI02Q,EAAK,IACP95C,EAAe5gR,cAAco2I,cAAgB5xG,GAAGplC,KAAK2rH,eAAem/E,IAC3ElnM,EAAKupB,EAAIkuS,EAAK,GACP75C,EAAe5gR,cAAco2I,cAAgB5xG,GAAGplC,KAAK2rH,eAAeE,MAC3EjoH,EAAKghD,EAAI02Q,EAAK,IAGd13T,EAAM,CAEN,GAAIpE,EAAKyD,OAAOkrF,oBAAsB3uF,EAAKyD,OAAOkrF,mBAAmBqL,mCAAmC,IACpGh6F,EAAKyD,OAAOkrF,mBAAmBqL,mCAAmC,GAAGopB,eAAgB,CAErF,MAAM24M,EADgBv4T,GAAAA,EAAAA,KAAAA,SAAAA,WAA4BkgF,EAAY1jF,EAAKyD,OAAOkrF,mBAAmBqL,mCAAmC,GAAGopB,gBACtG,GAC7Bh/G,EAAK43T,MAAQx6T,KAAKirC,MAAa,IAAPsvR,GAAc,KAAK74P,eAAe75D,GAE9DrJ,EAAKyD,OAAO85C,gBAAgBv9C,EAAKyD,OAAO84C,MAAQ,uBAAwBn4C,GAAM,SAAUuF,GACpF3J,EAAKw7T,gBAAgBpuT,UAAYzD,QAOrD3J,EAAK0pT,MAAM5sQ,UAGft5C,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,cAAsDqH,eAAgB+2G,GAClE,MAAM5hH,EAAOC,KAGP8O,GADa,IAAIvL,GAAAA,EAAAA,KAAAA,OAAAA,MACKga,OAAOuwG,aAAanM,EAAMx9G,MAEtD2K,EAAS5J,QAAO,SAAUzB,GACtB,MAAyD,eAAlDA,EAAQtC,cAAc8I,UAAUmkB,eAAoF,oBAAlD3qB,EAAQtC,cAAc8I,UAAUmkB,iBAC1G7mB,SAAQ,SAAU9D,GACjBA,EAAQtC,cAAcF,eAAewC,EAAQtC,cAAcG,iBAAkBqgH,EAAMh2E,WAGvF5rC,EAAK2sH,iBAAiBhsH,KAAKX,GAE3B+O,EACKxQ,KAAIyQ,GAAKxL,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BwL,KACvCxH,SAAQ,SAAUizB,GACXA,GACAz6B,EAAKyD,OAAOiwG,WAAW77E,WAAW4C,QAGzCz6B,EAAKyD,OAAO+kG,SAAWxoG,EAAKyD,OAAO+kG,SAAWxoG,EAAKyD,OAAO+kG,QAAQmH,SACnE3vG,EAAKyD,OAAOlF,IAAI6uD,eAAeptD,EAAKyD,OAAOiwG,WAAW3kG,WAI9DvL,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,qBAA6D,SAAU4sH,GACnE,MAAMpwH,EAAOC,KAEb,GAAID,EAAKyD,OAAO2pH,aAAeptH,EAAKyD,OAAOlF,IAAI4I,IAAK,CAChD,IAAI4H,GAAW,IAAI62B,GAAG3yB,OAAOw6G,SAAUM,aAAaqC,GACpD,GAAIrhH,EAQA,OAPAA,EAAWA,EAASxQ,KAAI,SAAUmF,GAC9B,IAAI+G,EAAQ/G,EAAQ+G,QAGpB,OAFAA,EAAMrJ,cAAc63I,UAAUj5I,EAAKyD,OAAO2pH,WAAYptH,EAAKyD,OAAOlF,IAAI4I,KACtEsD,EAAMtG,MAAMT,EAAQE,SACb6G,MAGJ,IAAIm7B,GAAG3yB,OAAOw6G,SAAUI,cAAc9+G,GAIrD,OAAOqhH,GAEX5sH,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,mBAA2D,SAAUiB,EAAOw3T,EAAwB92M,GAChG,IAAInlH,EAAOC,KAEPud,EAAS,IAAIha,GAAAA,EAAAA,KAAAA,OAAAA,KACjBga,EAASA,EAAOA,OAEhB,IACIouB,EADA78B,EAAWtK,EAAMvE,KAAKuE,MAAM2d,YAAYy8E,cAwC5C,OArCA9vF,EAAWA,EAASxQ,KAAI,SAAUmF,GAC9B,MAAMnD,EAAWmD,EAAQtC,cASzB,IARIb,aAAoBqlC,GAAGplC,KAAKi8N,YAAcl8N,aAAoBqlC,GAAGplC,KAAK08N,mBACtEtxL,EAASrrC,EAASi3I,aAGlBykL,GAA0Bv4T,EAAQisL,gBAAgB+qI,UAClDh3T,EAAQ0sL,MAAM,aAGbjrE,GAAgBnlH,EAAKyD,OAAOlF,IAAI4I,MAAQnH,EAAKyD,OAAO2pH,WAAY,CACjE,IAAI3iH,EAAQ/G,EAAQ+G,QAIpB,OAHAA,EAAMrJ,cAAc63I,UAAUj5I,EAAKyD,OAAOlF,IAAI4I,IAAKnH,EAAKyD,OAAO2pH,YAC/D3iH,EAAMtG,MAAMT,EAAQE,SAEb6G,EAGX,OAAO/G,KACR0mB,MAAK,SAAUrP,EAAGsP,GAEjB,OAAItP,EAAE3Z,wBAAyBwkC,GAAGplC,KAAKmP,SACjC0a,EAAEjpB,wBAAyBwkC,GAAGplC,KAAKmP,QAC7B,EAGR0a,EAAEjpB,wBAAyBwkC,GAAGplC,KAAKmP,SACjCoL,EAAE3Z,wBAAyBwkC,GAAGplC,KAAKmP,OAC9B,EAGPoL,EAAE40K,gBAAgB7mL,KAAOuhB,EAAEslK,gBAAgB7mL,MAAgB,EAC3DiS,EAAE40K,gBAAgB7mL,KAAOuhB,EAAEslK,gBAAgB7mL,KAAe,EAEvD,KAGJ,CACHiG,SAAUyO,EAAOqwG,cAAc9+G,GAAW68B,OAAQA,IAI1DpoC,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,OAA+C,SAAU26E,GACrD,MAAMn+E,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAElC1V,EAAKyD,OAAOyoH,aAAa/tC,GAAIx/E,MAAK,SAAUyF,GACxC,GAAIA,EAAM,CAEN,IAAI0mT,GAAa,IAAIllR,GAAG3yB,OAAOw6G,SAAUM,aAAa3pH,EAAKA,MAE3D,GAA0B,IAAtB0mT,EAAWxnT,OAAc,CACzB,IAAIk/O,EAAUxiP,EAAKyD,OAAOyoH,aAAa/tC,GACvC2sO,GAAa,IAAIllR,GAAG3yB,OAAOw6G,SAAUM,aAAay0H,GAGtD1jP,EAAQgsT,EAAWvsT,KAAIyQ,GAAKxL,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BwL,WAE1D0G,WAMhB,IAmQIwmT,GAowBAC,GAvgCAC,GAAgB,SAAUr/F,GAC1B,IAAIs/F,EAAc,GACd18T,EAAS,GACb,GAAIo9N,EAAYz5N,OAAS,EAAG,CAEM,IAA1By5N,EAAY,GAAGz5N,SACfy5N,EAAcA,EAAY3yM,MAAK,SAAUrP,EAAGsP,GACxC,OAAItP,EAAE,GAAG,IAAMsP,EAAE,GAAG,GACT,EACFtP,EAAE,GAAG,GAAKsP,EAAE,GAAG,IACZ,EACA,MAIpB,IAAK,IAAIiyS,EAAK,EAAGA,EAAKv/F,EAAYz5N,OAAQg5T,IAAM,CAM5C,IALA,IAAI9/F,EAAaO,EAAYu/F,GACzBC,GAAiB,EACjBj4Q,EAAW2R,EAAAA,EAEX44D,EAAO2tG,EAAW1uB,oBACb0uH,EAAMF,EAAK,EAAGE,EAAMz/F,EAAYz5N,OAAQk5T,IAAO,CACpD,IAAI5tM,EAAQmuG,EAAYy/F,GAAK3uH,qBACzB1rK,EAAI3gC,KAAKC,MAAMotH,EAAK,GAAKD,EAAM,GAAIC,EAAK,GAAKD,EAAM,IACnDzsF,EAAImiB,IACJi4Q,EAAgBC,EAChBl4Q,EAAWniB,GAIfk6R,EAAY/4T,OAASy5N,EAAYz5N,UACA,IAA7B+4T,EAAYpzT,QAAQqzT,KACpBD,EAAYh0T,KAAKi0T,GACjB38T,EAASA,EAAO2I,OAAOk0N,EAAWj7N,oBAEM,IAAxC86T,EAAYpzT,QAAQszT,KACpBF,EAAYh0T,KAAKk0T,GACjB58T,EAASA,EAAO2I,OAAOy0N,EAAYw/F,GAAeh7T,oBAO9D,OAAO5B,EAGX,OAAOo9N,EAAY,GAAGx7N,kBAG1BiC,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,wBAAgE,SAAU5D,GA6BtE,IA5BA,IAAII,EAAOC,KAEP2a,EAAS5a,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAAM2d,YAC3Co2C,EAAWx4D,EAAKyD,OAAOuhH,iBACvB9pG,EAAQ,GACR0jI,EAAQ,GACRC,EAAW,GACX49K,EAAc,GACd1tT,EAAW6L,EAAOikF,cAElB+rI,EAAW,GACX10M,EAAQ,GAER/S,EAAU,SAAUzf,GACpB,MAAM8wB,EAAa9wB,EAAQisL,gBACvBvwL,OAAOqB,UAAUC,eAAeC,KAAK6zB,EAAY,SAC7CA,EAAW1rB,KAAK+gB,OAAOvmB,OAAS,EAChC4X,EAAM7S,KAAKmsB,EAAW1rB,MAO1BoS,EAAM7S,KAAKmwD,IAIVxpD,EAAI,EAAGA,EAAID,EAASzL,OAAQ0L,IAAK,CACtC,IAAItL,EAAUqL,EAASC,GAEnBtL,aAAmB4yT,GAAAA,IACnB5yT,EAAUqL,EAASC,GAAG9O,KAAKwD,SAG/B,MAAMnD,EAAWmD,EAAQtC,cACzB,GAAIb,aAAoBqlC,GAAGplC,KAAKmP,MAAO,CACnC,MAAM+sT,EAAcn8T,EAASgB,iBACzBm7T,EAAYp5T,OAAS,GAAKo5T,EAAY,GAAK,KAG3CA,EAAY1zT,OAAO,EAAG,EAAG,GAE7BktB,EAAM7tB,KAAKq0T,GACXD,EAAYp0T,KAAK3E,QAEhB,GAAInD,aAAoBqlC,GAAGplC,KAAKi8N,WAAY,CAE7Ct5M,EAAQzf,GACR,MAAMi0D,EAAa,IAAI/xB,GAAGnmC,QAAQ,CAC9Bc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAWl8N,EAASgB,iBAAkBhB,EAASi3I,eAEzE7/E,EAAWxzD,MAAMT,EAAQE,SAAWJ,GAAAA,EAAAA,UACpCm0D,EAAW83H,cAAc/rL,EAAQisL,iBACjC/wC,EAAMv2I,KAAKsvD,GACXknF,EAASx2I,KAAK3E,QAEb,GAAInD,aAAoBqlC,GAAGplC,KAAK08N,gBAAiB,CAClD,IAAIzyN,EAAQ/G,EAAQ+G,QACpB0Y,EAAQ1Y,GAER,IAAI6xT,EAAK7xT,EAAMrJ,cAAck8N,iBAE7B,MAAM39N,EAASy8T,GAAcE,GACvB3kQ,EAAa,IAAI/xB,GAAGnmC,QAAQ,CAC9Bc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAW98N,EAAQY,EAASi3I,eAEtD7/E,EAAWxzD,MAAMT,EAAQE,SAAWJ,GAAAA,EAAAA,UACpCm0D,EAAW83H,cAAc/rL,EAAQisL,iBACjC/wC,EAAMv2I,KAAKsvD,GACXknF,EAASx2I,KAAK3E,IAItB,GAAIknO,EAAStnO,OAAS,EAAG,CACrB,MAAM3D,EAASy8T,GAAcxxF,GAC7BhsF,EAAMv2I,KAAK,IAAIu9B,GAAGnmC,QAAQ,CACtBc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAW98N,MAUzC,GANIu2B,EAAM5yB,OAAS,GAAKm5T,EAAYn5T,QAAUyL,EAASzL,QACnDs7I,EAAMv2I,KAAK,IAAIu9B,GAAGnmC,QAAQ,CACtBc,SAAU,IAAIqlC,GAAGplC,KAAKi8N,WAAWvmM,MAIrC2oH,EAASv7I,OAAS,EAClB,IAAK,IAAInB,EAAI,EAAGA,EAAI08I,EAASv7I,OAAQnB,IACjCyY,EAAOmd,cAAc8mH,EAAS18I,IAItC,GAAIy8I,EAAMt7I,OAAS,EAAG,CAClB,IAcIq5T,EACA5yS,EAAQ,GACK,WACb,MAAM9I,EAAW29H,EAAMrgJ,KAAI,SAAUq+T,EAAKl1T,GACtC,OAAO,IAAI7I,SAAQ,SAAUC,EAASk1B,GAKlC,IAAIlrB,EAJA6zT,GACA/hT,EAAOmd,cAAc4kS,GAIrBzhT,EAAM5X,OAASoE,IACfoB,EAAOoS,EAAMxT,GAzBd,SAAUstD,EAAO5T,GAG5B,IAFA,IAAI+gM,EAAU,GACVz6O,EAAMstD,EAAM/rD,QAAQm4C,IACR,IAAT15C,GAIH,GAHAy6O,EAAQ95O,KAAKX,GACbA,EAAMstD,EAAM/rD,QAAQm4C,EAAS15C,EAAM,GAE/By6O,EAAQ7+O,OAAS,EACjB,OAAO,EAGf,OAAO6+O,EAAQ7+O,OAAS,EAeRu5T,CAAS3hT,EAAOpS,KAChBA,EAAO,KAAOpB,EAAM,GAAb,KAA8BoB,IAI7C9I,EAAKyD,OAAOuhH,iBAAmBl8G,GAAc0vD,EAE7CmkQ,EAAe/9K,EAAMl3I,GACrBkT,EAAOid,WAAW8kS,GAElB38T,EAAKyD,OAAOkgH,UAAU,CAClB/lG,QAAS5d,EAAKyD,OAAOm+B,gBAAgB,oBAAqB,CAAEskF,UAAWp9G,GAAc0vD,IACrFwsD,iBAAkBl8G,GAAc0vD,EAChC2sD,aAAcvlH,EAAQulH,aACtBjT,WAAYtyG,EAAQsyG,aACrBvzG,MAAK,SAAUm+T,GACF,IAARp1T,IACAqiB,EAAQ+yS,GAEZh+T,aAIZ,OAAOD,QAAQwiB,IAAIJ,IAEvB87S,GAAap+T,MAAK,WAEdqB,EAAKyD,OAAOiwG,WAAW3uG,eAAc,GAKrC/E,EAAKyD,OAAOiwG,WAAWt7E,gBAEvBp4B,EAAKyD,OAAO+H,QAAQxL,EAAKyD,OAAO88G,MAAMzgF,MAAMqgF,cAAe,CAAEp2F,MAAOA,WAE7D/pB,EAAKyD,OAAOuhH,iBACnBhlH,EAAKyD,OAAOswD,sBAAsBvM,WAAW5nD,EAAQunD,cAIrDnnD,EAAKyD,OAAOiwG,aACZ1zG,EAAKyD,OAAOlF,IAAIwsD,YAAY/qD,EAAKyD,OAAOiwG,YACxC1zG,EAAKyD,OAAOiwG,gBAAarvG,UAGtBrE,EAAKyD,OAAOuhH,iBACnBhlH,EAAKyD,OAAOswD,sBAAsBvM,WAAW5nD,EAAQunD,MACrD3jD,GAAAA,EAAAA,MAASxD,EAAKyD,OAAOm+B,gBAAgB,2BAI7Cp+B,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,OAA+C,SAAU2jD,EAAM/iD,EAAMgG,GACjE,IACI8wQ,EACAo5C,EAFAt0T,EAAOC,KAIX,GAAImE,GAAQA,EAAKiV,KAAM,CAEnB,IAAIw3C,EAAe7wD,EAAKyD,OAAOiwG,WAAWxzG,KAAKk0T,mBAAmB,CAC9DhwT,KAAMA,EAAKiV,KACXjP,KAAMA,IAEV8wQ,EAAerqN,EAAaj2C,OAE5B05S,EAAcp5C,EAAa5sQ,GAAG,UAAU,SAAUV,GACd,UAA5BstQ,EAAa/nF,aACbvtJ,GAAG0pJ,WAAWD,QAAQilI,GACtBt0T,EAAKklH,wBAAwB/9D,OAIvBnnD,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAClCuuL,UAAUkoF,QAIdl7Q,EAAKyD,OAAOiwG,aACZ1zG,EAAKyD,OAAOlF,IAAIwsD,YAAY/qD,EAAKyD,OAAOiwG,YACxC1zG,EAAKyD,OAAOiwG,gBAAarvG,UAGtBrE,EAAKyD,OAAOuhH,iBACnBhlH,EAAKyD,OAAOswD,sBAAsBvM,WAAWL,GAC7C3jD,GAAAA,EAAAA,MAASxD,EAAKyD,OAAOm+B,gBAAgB,2BAK7Cp+B,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,iBAAyD,SAAUqoH,GAC/D,IAAI7rH,EAAOC,KAEN4rH,IAED7rH,EAAKyrH,cAAe,GAGxBzrH,EAAKyD,OAAOmnH,qBAER5qH,EAAKg9T,iBACLtrT,OAAO81I,qBAAqB00K,IACxBl8T,EAAKg9T,eAAev4T,MAAMvE,KAAKuE,MAAM2d,YAAYy8E,cAAcv7F,OAAS,GACxEtD,EAAKg9T,eAAev4T,MAAMszB,cAAc/3B,EAAKg9T,uBAE1Ch9T,EAAKg9T,iBAIpBx5T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,cAAsD,WAKlD,IAJA,IAEI6G,EAFArK,EAAOC,KAGP8O,EAAW/O,EAAKyD,OAAOiwG,WAAWxzG,KAAKuE,MAAM2d,YAAYy8E,cACpDy9N,EAAK,EAAGA,EAAKvtT,EAASzL,OAAQg5T,IAAM,CACzC,MAAM97T,EAAOuO,EAASutT,GAAIl7T,cAC1B,GAAIZ,aAAgBolC,GAAGplC,KAAKi8N,WAAY,CACpCpyN,EAAc0E,EAASutT,GAAIl7T,cAAcG,iBACzC,MAEKf,aAAgBolC,GAAGplC,KAAK08N,kBAC7B7yN,EAAc7J,EACT88N,iBACA/+N,KAAI+9T,GAAMA,EAAG/6T,mBACbmP,QAIb,GAAIrG,GAAeA,EAAY/G,OAAS,EAAG,CACvC,IAAIsrH,EAAQvkH,EAAY,IAEEQ,iBActB,OAbI7K,EAAKg9T,eACLh9T,EAAKg9T,eAAer7T,UAAUitH,EAAMhkH,MAAM,EAAG,IAG7C5K,EAAKg9T,qBAAuBh9T,EAAKyD,OAAOiwG,WAAWj+E,SAASm5F,EAAMhkH,MAAM,EAAG,GAAI,CAC3E/J,OAAQ,EACRgrC,UAAW,UACXC,YAAa,GACbC,YAAa,UACbC,YAAa,IAIdhsC,EAAKg9T,gBAGhBC,GAAoBt+T,MAAK,SAAUkpG,GAE/B,IAAIq1N,EAAyB,WACzB,IAAI1uP,EAEAyG,GAAU,EAEd,MAAMkoP,EAAW,SAAUx9T,GACvB,OAAIK,EAAKyD,OAAOlF,IAAI4I,MAAQnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,OACzCrlC,GAAAA,EAAAA,KAAAA,UAAkB7D,EAAQK,EAAKyD,OAAOlF,IAAI4I,IAAKnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,QAG3ElpC,GAGX,IAAIy9T,EAAgB/yT,EACpB,GAAgC,IAA5B+yT,EAAc,GAAG95T,QAAgB85T,EAAc,GAAG,GAAK,EACvD5uP,EAAQ4uP,EAAc,GAAG,GACzBnoP,GAAU,MACP,CACHmoP,EAAc,GAAG,GAAKt5R,KAAKC,MAE3B,IAAK,IAAI5hC,EAAI,EAAGA,EAAIi7T,EAAc95T,OAAQnB,IAAK,CAC3C,IAAI++G,EACJk8M,EAAcj7T,GAAG,GAAK,EAGlB++G,EADA/+G,EAAI,EAAIi7T,EAAc95T,OACf,IAAIsiC,GAAGplC,KAAKi8N,WAAW0gG,EAASC,EAAcxyT,MAAMzI,EAAI,EAAGA,EAAI,KAAKwO,YAEpE,IAAIi1B,GAAGplC,KAAKi8N,WAAW0gG,EAASC,EAAcxyT,MAAMzI,EAAI,KAAKwO,YAGxEysT,EAAcj7T,GAAG,GAAKi7T,EAAcj7T,EAAI,GAAG,GAAK,KAAU++G,EAAOlhH,EAAKyD,OAAO45T,aAGjF7uP,EAAQ4uP,EAAc,GAAG,GAG7B,IAAIE,EAAY,IAAI13R,GAAGplC,KAAKi8N,WAAW2gG,GACnC/iO,EAAY7rB,EACZlqB,EAAW,EAGXA,EADAtkD,EAAKyD,OAAOlF,IAAI4I,MAAQnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,OACrC,IAAIjD,GAAGplC,KAAKi8N,WAAW0gG,EAAS3rS,KAAKC,MAAMD,KAAK0vE,UAAUk8N,MAAkBzsT,YAE5E2sT,EAAU3sT,YAGzB,IAUI4sT,EAAiB,WAEjB,IAAKv9T,EAAKyD,OAAO2kH,gBAAiB,CAC9B,IAAI77G,EAAW+wT,EAAU3gG,iBAAiBtiI,GACtCl4D,EAdK,SAAUijB,GACvB,IAAK,IAAIjjD,EAAI,EAAGA,EAAIi7T,EAAc95T,OAAQnB,IACtC,GAAIi7T,EAAcj7T,GAAG,GAAKijD,EACtB,MAAO,CACHjjB,EAAG,IAAIyD,GAAGplC,KAAKi8N,WAAW0gG,EAASC,EAAcxyT,MAAM,EAAGzI,KAAKwO,YAC/DtL,EAAG+3T,EAAcj7T,EAAI,GAAGyI,MAAM,EAAG,IASjC4yT,CAAWnjO,GAEnB,IAAsB9tF,IAAa41B,EAAG,CAClC,IAAIg8C,EAAKn+E,EAAKyD,OAAOowG,uBAUrB,OATI11B,GACAn+E,EAAKyD,OAAOwjH,YAAW,EAAO9oC,GAE9Bn+E,EAAKyD,OAAOgoH,cACZzrH,EAAKyD,OAAOmnH,0BAGhB5qH,EAAKkoH,mBAKDloH,EAAKyD,OAAOgoH,cACZzrH,EAAKyD,OAAOg6T,iBAAiBt7R,EAAG51B,EAAU+3C,IAAU2wB,GAAUj1E,EAAKyD,OAAOynH,gBAAgBkyM,EAAc,GAAG,GAAI7wT,EAAS,KAGxHvM,EAAKg9T,gBAKLh9T,EAAKg9T,eAAer7T,UAAU4K,GAIE,IAAhCvM,EAAKyD,OAAO0kH,gBACZ9tB,GAAwBr6F,EAAKyD,OAAOghE,MAAQzkE,EAAKyD,OAAO0kH,gBAGxD9tB,GAAwBr6F,EAAKyD,OAAOghE,MAKhDy3P,GAA0B30K,sBAAsBg2K,IAEpDrB,GAA0B30K,sBAAsBg2K,KAItC1yT,iBACV,QAAI6G,OAAO0xI,UAGE,qCAEjBs6K,GAAQ/+T,MAAK,WACTu9T,GAA0B30K,sBAAsB21K,WAMhE15T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,qBAA6D,SAAUu8C,GACnE,IAAI//C,EAAOC,KACX,IAAKD,EAAKyD,OAAOm+G,MAAM+7M,UAAW,CAC9B39T,EAAKyD,OAAOm+G,MAAM+7M,UAAY/wT,SAASC,cAAc,OACrD,MAAM+wT,EAAW59T,EAAKyD,OAAOm+G,MAAM+7M,UAAU/3T,MAC7Cg4T,EAASC,UAAY,SACrBD,EAASprS,OAAS,QAClBorS,EAASrrS,MAAQ,QACjBqrS,EAASxpP,IAAM,IACfwpP,EAASvpP,KAAO,QAChBupP,EAAS/wN,gBAAkB,UAC3B+wN,EAASrxT,SAAW,WACpBvM,EAAKyD,OAAOlF,IAAIoO,IAAIG,YAAY9M,EAAKyD,OAAOm+G,MAAM+7M,WAGtD39T,EAAKyD,OAAOm+G,MAAM+7M,UAAU/3T,MAAMg3C,QAAU,GAE5C58C,EAAKouH,QAAUruE,EAAIryC,OAAOowT,aAE1B99T,EAAKyD,OAAOm+G,MAAM+7M,UAAUvwT,UAAYpN,EAAKyD,OAAOm+G,MAAM+7M,UAAUvwT,UAChE,8EAAgFpN,EAAKouH,QAAU,QAInGpuH,EAAKzB,IAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAUJ,GAClCA,EAAI0kN,UAAU5uJ,aAAar0D,EAAKouH,YAGpCpuH,EAAKyD,OAAO+H,QAAQxL,EAAKyD,OAAO88G,MAAMzgF,MAAMggF,aAAc,CACtDi6M,OAAyB11T,MAAhBrE,EAAKouH,SAAwBpuH,EAAKouH,QAAU,KAI7D5qH,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,yBAAiE,SAAUs8B,GACvE,IAAI9/B,EAAOC,KAEPypC,EAAO1pC,EAAKzB,IAAI2B,KAAK3B,IAAI0kN,UACzBriN,EAAS8oC,EAAKvoC,YACdijD,EAAa1a,EAAKhnB,gBAClBq7S,EAAOj+R,EAAMpyB,OAAOswT,WAAa,EACjCC,EAAQn+R,EAAMpyB,OAAOwwT,YAAc,EAEvCt9T,EAAO,IAAMwjD,EAAa65Q,EAAQ,GAClCr9T,EAAO,IAAMwjD,EAAa25Q,EAAO,GAEjCr0R,EAAK0qB,UAAU1qB,EAAKy0R,gBAAgBv9T,IAEpCZ,EAAKyD,OAAO+H,QAAQxL,EAAKyD,OAAO88G,MAAMzgF,MAAMggF,aAAc,CACtDi6M,OAAyB11T,MAAhBrE,EAAKouH,SAAwBpuH,EAAKouH,QAAU,KAI7D5qH,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,QAAgD,SAAU4wL,GAC3Cn0L,KAENm+T,UAAW,EAEhB,IAII9J,EAJAzzT,EAASuzL,EAAOl0L,KAAKwD,QAAQtC,cAAcC,YAC3CmtE,GAAQ,IAAI1qC,MAAOsrC,UA6BvBklP,EAlCWr0T,KAkCQypT,MAAMp7S,GAAG8jL,IAAY,SAAUtyJ,GAC9C,IAAI47R,EAAgB57R,EAAM47R,cACtBpoI,EAAaxzJ,EAAMwzJ,WAEnBmmB,EAAUnmB,EAAW/mE,KAAO/9C,EAE5Bx/D,EAAIolL,EAAOl0L,KAAKwD,QAAQtC,cAAcqJ,QACtC8J,EA/BQ,SAAUklM,GACtB,QAAQ,GACJ,KAAKA,GAAW,GACZ,OAAO54M,EACX,KAAK44M,EAAU,IAAMA,GAAW,IAC5B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAO54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,KAAT54M,EACX,KAAK44M,EAAU,KAAOA,GAAW,IAC7B,OAAgB,EAAT54M,EACX,QACI,OAAOA,GAUPQ,CAAUo4M,GAClBzqM,EAAEu8F,UAAUh3F,GAEZmnT,EAAcx5D,mBACV,IAAIt8N,GAAGhgC,MAAMohP,KAAK,CACdx1K,MAAO,uBAEX,IAAI5rC,GAAGhgC,MAAMwmP,OAAO,CAChB56K,MAAO,sBAAuBj/C,MAAO,KAG7CmpS,EAAc2C,mBAAmBrvT,GAE7ByqM,EA/CO,IAgDP7zK,GAAG0pJ,WAAWD,QAAQilI,GAI1BhhI,EAAW9oI,SAAU,MAI7BhnD,GAAAA,EAAAA,KAAAA,QAAAA,aAAAA,UAAAA,SAAkD,SAAUjF,GACxD,MAAMyB,EAAOC,KACbD,EAAKzB,IAAMA,EAEXA,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAC7B1pT,EAAK0pT,MAAQA,MAIrBlmT,GAAAA,EAAAA,KAAAA,QAAAA,aAAAA,UAAAA,oBAA6D,SAAU5D,GACnE,MAAMI,EAAOC,KAEPmE,GADNxE,EAAUA,GAAW,IACAwE,KACfK,EAAQ7E,EAAQ6E,MAChB9E,EAASC,EAAQD,OAEvB,IAAKK,EAAKs+T,gBAAiB,CACvB,MAAM72T,EAAMmF,SAASC,cAAc,OACnCpF,EAAI7B,MAAMg3C,QAAU,OACpBn1C,EAAIu2B,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,WAAY,gBAClDv8C,EAAKs+T,gBAAkB,IAAI14R,GAAG65Q,QAAQ,CAClCpgT,GAAI,oBACJ+hD,QAAS35C,EACTyqB,OAAQ,CAAC,EAAG,GACZggM,YAAaizF,GACb97F,WAAW,IAKnB,IAAK5kN,GAASA,EAAM6O,iBAAmB7O,EAAM+O,aAAe,EAAG,CAC3D,IAAIjH,EAAW5M,EAAOyE,EAAK,GAAG2lB,OAC1B/pB,EAAKyD,OAAOlF,IAAI4I,MAAQnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,SAChDt8B,EAAW/I,GAAAA,EAAAA,KAAAA,UAAkB+I,EAAUvM,EAAKzB,IAAIqB,QAAQipC,OAAQ7oC,EAAKzB,IAAI4I,MAE7EnH,EAAKs+T,gBAAgBnsG,aAAavsN,MAAMg3C,QAAU,GAC7C58C,EAAK0pT,MAAMxmG,eAAeljN,EAAKs+T,gBAAgB16T,WAChD5D,EAAK0pT,MAAMznG,WAAWjiN,EAAKs+T,iBACvBt+T,EAAKzB,IAAI0I,UACTjH,EAAKzB,IAAI2I,OAAOq3T,mBAAmBhyT,EAAUvM,EAAKyD,SAG1DzD,EAAKs+T,gBAAgB36J,YAAYp3J,GAC7BvM,EAAKzB,IAAI0I,UACTjH,EAAKzB,IAAI2I,OAAOs3T,mBAAmBjyT,EAAUvM,EAAKyD,UAK9DD,GAAAA,EAAAA,KAAAA,QAAAA,aAAAA,UAAAA,oBAA6D,WACzD,MAAMxD,EAAOC,KACTD,EAAKs+T,kBACLt+T,EAAKs+T,gBAAgBnsG,aAAavsN,MAAMg3C,QAAU,OAE9C58C,EAAKzB,IAAI0I,UACTjH,EAAKzB,IAAI2I,OAAO80F,oBAAoBh8F,EAAKyD,UAKrDD,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuDqH,iBACnD,IAAI7K,EAAOC,MAEVD,EAAK0pT,aAAe1pT,EAAKzB,IAAI2B,KAAKuxD,UAAUnjD,GAAGgkC,GAAOtyC,EAAKq5T,iBAGhE71T,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,iBAAyD,WAC1CvD,KAENypT,MAAM56H,GAAGx8I,GAFHryC,KAEeo5T,iBAG9B71T,GAAAA,EAAAA,KAAAA,OAAiB,aAGjBA,GAAAA,EAAAA,KAAAA,OAAAA,UAAAA,KAAgC,SAAUY,GACtC,IAAIS,EAAS,GASb,OARW5E,KACFud,SACL3Y,EAFO5E,KAEOud,OAAOuwG,aAAa3pH,GAAM7F,KAAI,SAAUk8B,GAClD,OAAO,IAAI67R,GAAAA,EAAU,KAAM,CACvBj3T,GAAIo7B,EAAK72B,QAASQ,KAAMq2B,EAAKk1J,sBAIlC9qL,GAGXrB,GAAAA,EAAAA,KAAAA,OAAAA,UAAAA,aAAwC,SAAUY,GAC9C,IAAIS,EAAS,GA+Bb,OA9BW5E,KACFud,SACL3Y,EAFO5E,KAEOud,OAAOuwG,aAAa3pH,GAAM7F,KAAI,SAAUk8B,GAClD,IAAIpwB,EAAcowB,EAAKr5B,cAAcG,iBACrC,MAAMs6B,EAAiB,GACvB,IAAIt7B,EACJ,OAAQk6B,EAAKr5B,cAAc8I,WACvB,IAAK,aACD3J,EAAW,IAAI0Q,GAAAA,EAAS5G,EAAawxB,GACrC,MACJ,IAAK,UACDt7B,EAAW,IAAI8+S,GAAAA,EAAUh1S,EAAawxB,GACtC,MACJ,IAAK,aACDt7B,EAAW,IAAI++S,GAAAA,EAAaj1S,EAAawxB,GACzC,MACJ,IAAK,kBACDt7B,EAAW,IAAIsQ,GAAAA,EAAcxG,EAAawxB,GAC1C,MACJ,IAAK,eACDt7B,EAAW,IAAIg/S,GAAAA,EAAel1S,EAAawxB,GAC3C,MAEJ,QACIt7B,EAAW,IAAI6+S,GAAAA,EAAQ/0S,EAAawxB,GAG5C,OAAOt7B,MAGRsE,GAGXrB,GAAAA,EAAAA,KAAAA,OAAiB,CACb4zC,IAAK,SAAUx3C,GACXK,KAAKud,OAAS,IAAIooB,GAAG3yB,OAAOmkC,IAAIx3C,IAEpC4xB,KAAM,SAAU5xB,GACZK,KAAKud,OAAS,IAAIooB,GAAG3yB,OAAOw6G,QAAQ7tH,KAG5C4D,GAAAA,EAAAA,QAAWA,GAAAA,EAAAA,KAAAA,OAAAA,IAAoBA,GAAAA,EAAAA,KAAAA,QAC/BA,GAAAA,EAAAA,QAAWA,GAAAA,EAAAA,KAAAA,OAAAA,KAAqBA,GAAAA,EAAAA,KAAAA,QAEhCA,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,SAAiDqH,eAAgBtM,GAC7D,MAAMyB,EAAOC,KAEPuhB,QAAgBxhB,EAAKyD,OAAOgB,MAAMvE,KAAK0f,WAC7C5f,EAAKy+T,MAAQ,IAAI74R,GAAG76B,QAAQ8pI,YAAY,CACpCnnI,OAAQ1N,EAAKyD,OAAOkJ,IACpBq8G,WAAW,EACXo9F,aAAa,EACbrqL,UAAW/7B,EAAKyD,OAAO84C,MAAQ,kBAC/Bv5B,OAAQ,CAACxB,KAEbxhB,EAAKy+T,MAAM96T,MAAQ3D,EAYnBA,EAAKy+T,MAAMjoG,iBAAiB9W,YAAc,EAe1C1/M,EAAKwnT,WAAW7mT,KAAKX,EAAKy+T,MAAMjoG,kBAEhCx2N,EAAK0+T,QAAU1+T,EAAKy+T,MAAM/pG,YAAYvC,aAEtC,MAAM9uD,SAAqB,qCAAuB90J,QAClD,IAAIowT,EAAS3+T,EAAKy+T,MAAMjoG,iBACxB,MAAMpzD,EAAO,IAAIC,EAAYrjK,EAAK0+T,SAElCt7J,EAAKw7J,aAAe,WAChB,MAAMh5T,EAAQ3F,KAAKmhD,QAAQx7C,MACrBi5T,EAAe,gBAAkB5+T,KAAK6+T,UAAUlxS,EAClD,OAAS3tB,KAAK6+T,UAAUjxS,EAAI,SAChC,GAAIjoB,EAAMqzI,UAAU31I,OAAQ,CACxB,MAAMy7T,EAAWn5T,EAAMqzI,UAAUhwI,QAAQ,eACzC,GAAI81T,GAAY,EAAG,CACf,MAAMtvL,EAAS7pI,EAAMqzI,UAAUhwI,QAAQ,IAAK81T,GAC5Cn5T,EAAMqzI,UAAYrzI,EAAMqzI,UAAUzvI,QAAQ5D,EAAMqzI,UAAU7/G,UAAU2lS,EAAUtvL,EAAS,GAAIovL,QAG3Fj5T,EAAMqzI,UAAY4lL,EAAe,IAAMj5T,EAAMqzI,eAIjDrzI,EAAMqzI,UAAY4lL,GAG1Bz7J,EAAK90J,GAAG,eAAe,SAAUV,GAK7B,GAJAw1J,EAAKttB,QAAU91I,EAAK0+T,QAAQn5N,YAC5B69D,EAAKttB,QAAQ93G,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,QAC3BqjK,EAAKttB,QAAQlwI,MAAM2G,SAAW,WAC9BvM,EAAK0+T,QAAQv/O,sBAAsB,cAAeikF,EAAKttB,SACnDv3I,EAAIyqC,UAAW,CACf,IAAIttB,EAAaijT,EAAO5oQ,uBAAuB,CAACx3D,EAAIyqC,UAAU,GAAIzqC,EAAIyqC,UAAU,KAC5ErtB,EAAWgjT,EAAO5oQ,uBAAuB,CAACx3D,EAAIyqC,UAAU,GAAIzqC,EAAIyqC,UAAU,KAC1E+pG,EAAU4rL,EAAOp7G,UACrB,MAAMrvJ,EAAYtnD,SAASC,cAAc,OACzCqnD,EAAUtuD,MAAM2G,SAAW,WAC3B2nD,EAAUtuD,MAAM0uE,OAAS9yE,KAAKirC,MAAMsmG,EAAQ,GAAKr3H,EAAW,IAAM,KAClEw4C,EAAUtuD,MAAMyuE,KAAO7yE,KAAKirC,MAAM/wB,EAAW,IAAM,KACnDw4C,EAAUtuD,MAAMwuE,IAAM5yE,KAAKirC,MAAM9wB,EAAS,IAAM,KAChDu4C,EAAUtuD,MAAM2uE,MAAQ/yE,KAAKirC,MAAMsmG,EAAQ,GAAKp3H,EAAS,IAAM,KAC/D,MAAMkoE,EAAW86O,EAAOlqQ,cACxBovB,EAASrhD,aAAa0xB,EAAW2vB,EAASwwF,mBAC1CjR,EAAKxjK,QAAQ0jK,YAAcpvG,MAGnCkvG,EAAK90J,GAAG,aAAa,SAAUV,GAC3Bw1J,EAAKttB,QAAQr5E,cAAcC,YAAY0mG,EAAKttB,SACxCv3I,EAAIyqC,YACJ21R,EAAOlqQ,cAAciI,YAAY0mG,EAAKxjK,QAAQ0jK,aAC9CF,EAAKxjK,QAAQ0jK,YAAc,SAGnCF,EAAK90J,GAAG,YAAY,SAAUV,EAAIy8S,EAAU2U,GACxC57J,EAAK67J,OAASD,KAElB57J,EAAK90J,GAAG,WAAW,SAAUV,EAAIy8S,GAC7B,IACI3gR,EADQ1pC,EAAKy+T,MAAMhtQ,SACNwxJ,UACbi8G,EAAcP,EAAO5oQ,uBAAuBrsB,EAAKvoC,aACjD28M,EAAY6gH,EAAO9oQ,uBAAuB,CAACqpQ,EAAY,GAAK97J,EAAK67J,OAAOrxS,EAAGsxS,EAAY,GAAK97J,EAAK67J,OAAOpxS,IACxGtS,EAAShd,EAAIyoB,YACbm4S,GAAa5jT,EAAO,GAAKA,EAAO,IAAM,EACtC6jT,GAAc7jT,EAAO,GAAKA,EAAO,IAAM,EAEvCuiM,EAAU,GAAKqhH,EAAY5gU,EAAIyqC,UAAU,GACzC80K,EAAU,GAAKv/M,EAAIyqC,UAAU,GAAKm2R,EAE7BrhH,EAAU,GAAKqhH,EAAY5gU,EAAIyqC,UAAU,KAC9C80K,EAAU,GAAKv/M,EAAIyqC,UAAU,GAAKm2R,GAElCrhH,EAAU,GAAKshH,EAAa7gU,EAAIyqC,UAAU,GAC1C80K,EAAU,GAAKv/M,EAAIyqC,UAAU,GAAKo2R,EAE7BthH,EAAU,GAAKshH,EAAa7gU,EAAIyqC,UAAU,KAC/C80K,EAAU,GAAKv/M,EAAIyqC,UAAU,GAAKo2R,GAGtCh8J,EAAKO,YAAY,EAAG,UACbP,EAAK67J,OACZ1gU,EAAI61D,UAAU0pJ,EAAW,CAAEtzJ,SAAS,OAGxC,MAAMk/P,QAAcnrT,EAAI2B,KAAKuxD,SAG7BzxD,EAAKogB,QAEL,MAAMi2G,EAAOr2H,EAAKyD,OAAOkJ,IAAIsL,cAAc,IAAMjY,EAAKyD,OAAO84C,MAAQ,SAerE,OAdA/6B,EAAQ7d,MAAMmtB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,gBAA6B,WAClDs2H,EAAKr4F,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QACtBs2H,EAAKr4F,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,YAEvByhB,EAAQ7d,MAAMmtB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,UAAuB,WAC5Cs2H,EAAKr4F,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,SACtBs2H,EAAKr4F,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,WAGvB2pT,EAAMt+S,WAAWpL,EAAKy+T,OAEtBz+T,EAAKyD,OAAO4nD,UAAW,EACvBrrD,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,SAEbC,GAGXwD,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,MAA8CqH,eAAgBjL,GAC1D,MAAMI,EAAOC,KACPie,EAAWrT,eAAgBpG,EAAO0C,GACpC,GAAI1C,EAAM2F,OAASrK,GAAAA,EAAAA,UAAAA,KAAuB,CACtC,IAAI41D,EAAyB,CAAExuD,IAAKA,GAAOnH,EAAKyD,OAAOlF,IAAI4I,IAAKqzB,OAAQ/1B,EAAMvE,KAAKuE,MAAM2d,YAAYD,gBAAgBE,WAEjHszC,EAAuBn7B,SAAWm7B,EAAuBxuD,KACzD1C,EAAM2Q,cAAcugD,GAI5B,MAAMn0C,QAAgB/c,EAAMvE,KAAK0f,WAEjC,IAAI6nS,EAAS,IAAI7hR,GAAG45Q,KAAKkH,GAAqB1mT,EAAKyD,OAAOlF,IAAI2B,KAAMshB,EAAQ7d,MAAMF,SAClF,MAAMimT,EAAQ1pT,EAAKy+T,MAAMjoG,iBAWzB,IATIixF,EAAOtyS,kBAAoBsyS,EAAOtlS,gBAAgBE,YAAcqnS,EAAMzmG,UAAU9gM,gBAAgBE,YAChGqnS,EAAMt2P,QAAQq0P,GAIlBjmS,EAAQ7d,MAAMmtB,QAAQkL,IAAIj8B,GAAAA,EAAAA,MAAAA,UAAuB,WAC7C2pT,EAAM5zM,YAAYmmF,WAAW,GAAG75K,YAAYqN,aAG5ChrB,IAAUzE,EAAKyD,OAAOgB,QAA0D,IAAjDilT,EAAM5zM,YAAYmmF,WAAWhzL,QAAQxE,GAAe,CAEnFzE,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,wBAAsC,CAAEozD,SAAU1uD,IAAUzE,EAAKyD,OAAOgB,MAAQzE,EAAKyD,OAAOgB,MAAQ,KAAM6lD,SAAU7lD,IAC5IilT,EAAM5zM,YAAYtuG,SAAQ,SAAUwZ,IAC5BA,aAAa4kB,GAAGnhC,MAAM4uE,OAASryD,aAAa4kB,GAAGnhC,MAAMy8S,OACrDwI,EAAM3+P,YAAY/pC,MAI1B,MAAMq1G,EAAOr2H,EAAKyD,OAAOkJ,IAAIsL,cAAc,IAAMjY,EAAKyD,OAAO84C,MAAQ,SACrE/6B,EAAQ7d,MAAMmtB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,gBAA6B,WAClDs2H,EAAKr4F,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,QACtBs2H,EAAKr4F,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,YAEvByhB,EAAQ7d,MAAMmtB,QAAQxiB,GAAGvO,GAAAA,EAAAA,MAAAA,UAAuB,WAC5Cs2H,EAAKr4F,UAAUC,OAAOl+B,GAAAA,EAAAA,QAAAA,SACtBs2H,EAAKr4F,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,WAGvB2pT,EAAM5zM,YAAYomF,SAAS,EAAG16K,GAGlC,OAAO/c,GAIX,IAAIA,GADJ7E,EAAUA,GAAW,IACD6E,OAASzE,EAAKyD,OAAOgB,MACzC,GAAIzE,EAAKyD,OAAOlF,KAAOkG,GAASzE,EAAKy+T,MAAO,OAElCh6T,EAAMgV,yBAEZ,IAAI4lT,EAAgB56T,EAEpB,GAAKA,EAAMmP,aAAa5T,EAAKyD,OAAOlF,IAAI4I,MAA2E,IAAnE1C,EAAMvE,KAAKwhB,wBAAwB1hB,EAAKyD,OAAOlF,IAAI4I,KAAK7D,OAcpG,aAAa4a,EAASzZ,GAVtB,GAHAA,EAAQA,EAAMsd,oBAAsB/hB,EAAKyD,OAAO2xI,mBAE1C3wI,EAAMgV,yBACRzZ,EAAKyD,OAAOlF,IAAI0I,WAAaxC,EAAMmP,aAAa5T,EAAKyD,OAAOlF,IAAI4I,KAAM,CACtE,MAAM4tD,QAAiB/0D,EAAKyD,OAAOlF,IAAIu2D,gBAAgB,CACnDD,QAASwqQ,EAAc19S,mBACvBuzC,QAAS,SAEb,aAAah3C,EAASmhT,EAAetqQ,EAAS,GAAG71D,MAC9C,GAAIuF,EAAMmP,aAAa5T,EAAKyD,OAAOlF,IAAI4I,KAC1C,aAAa+W,EAASzZ,GAMlC,OAAO,MAGXjB,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,iBAAyD,WACrD,IAGIi7T,EAHAz+T,EAAOC,KACP4E,EAAS,KACTy6T,EAAa,WAGjB,GAAIt/T,EAAKy+T,SACLA,EAAQz+T,EAAKy+T,MAAMjoG,kBACb1gH,YAAYtuG,SAAQ,SAAUC,GAC5BA,EAAIgX,IAAI,QAAU6gT,IAClBz6T,EAAS4C,OAIZ5C,GAAQ,KAAA06T,EACT,MAAM/uO,EAAe,CACjBnqF,OAAQ,CACJiK,QAASlR,OAAOmD,OAAO,GAAkC,QAAhCg9T,EAAEv/T,EAAKyD,OAAOlF,IAAIqB,QAAQyG,cAAM,IAAAk5T,OAAA,EAA9BA,EAAgCjvT,WAGnE,IAAIkvT,EAAW3U,GAAkBr6N,GAC7BtsF,GAAAA,EAAAA,WAAgBs7T,KAChBA,EAAWA,KAGfA,EAAS,GAAG9xE,UAAUzG,SAAS,CAAC,EAAG,EAAG,EAAG,IACzCpiP,EAAS,IAAI+gC,GAAGnhC,MAAMotB,OAAO,CACzBxyB,GAAIigU,EACJ1kT,OAAQ,IAAIgrB,GAAGhrB,OAAOiX,OACtBjsB,MAAO45T,IAEXf,EAAMp0Q,SAASxlD,GAGvB,OAAOA,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,aAAqD,SAAU5D,GAC3D,IAAII,EAAOC,KAEX,GAAIA,KAAKwD,OAAOlF,IAAI8sD,SAAU,CAC1BrrD,EAAK2lT,OAAS/lT,EACd,IAAI6/T,EAAWz/T,EAAK4lT,mBACpB,GAAI6Z,EAAU,CACV,IAAI/7T,EAEAg8T,GADJ9/T,EAAUA,GAAW,IACH8/T,IACd9kT,EAAS6kT,EAASr9S,YACtB,GAAKs9S,GAAQA,EAAIp8T,OAGZ,CACD,IAAIyL,EAAW6L,EAAOikF,cACjB9vF,EAASzL,OAKVI,EAAUqL,EAAS,IAJnBrL,EAAU,IAAIkiC,GAAGnmC,QACjBmb,EAAOid,WAAWn0B,IAKtBA,EAAQoE,YAAY,IAAI89B,GAAGplC,KAAK8B,QAAQ,CAACo9T,UAXzC9kT,EAAOkmC,QAaX,IAAIstE,EAAqC,iBAApBxuH,EAAQwuH,QAAuBxuH,EAAQwuH,QAAU,EACtEpuH,EAAK0+T,QAAQ94T,MAAMqzI,UAAY,UAAY7qB,EAAU,UAKjE5qH,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,OAA+C,WAC3C,IAAIxD,EAAOC,KACX,GAAID,EAAKyD,OAAOgB,OAASzE,EAAKyD,OAAOgB,MAAMM,cAAe,CACtD/E,EAAKyD,OAAOgB,MAAMM,eAAc,GAShC/E,EAAKyD,OAAOvD,KAAKu+T,MAAMjoG,iBAAiBx1J,aAGxC,MAAMy5C,EAAc7tG,SAASk5C,YAAY,cACzC20D,EAAYC,UAAU,UAAU,GAAO,GACvC16G,EAAKyD,OAAOlF,IAAIoO,IAAIszB,cAAcw6E,GAEtCz6G,EAAKy+T,MAAMtpG,eACXn1N,EAAKy+T,MAAMtoG,cAGf3yN,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,QAAgD,WAC5C,IAAIxD,EAAOC,KACPD,EAAKyD,OAAOgB,OAASzE,EAAKyD,OAAOgB,MAAMM,eACvC/E,EAAKyD,OAAOgB,MAAMM,eAAc,IAIxCvB,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,WAAmD,WAG/CA,GAAAA,EAAAA,KAAAA,IAAAA,UAAAA,WAAAA,KAFavD,OAKjBuD,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,SAAiD,SAAUjF,GACvD,IAAIyB,EAAOC,KACX1B,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAUghU,GAC7Bn8T,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,SAAAA,KAA8CxD,EAAMzB,GACpD,IAAIqhU,EAAgB5/T,EAAK84T,SACzB94T,EAAK84T,SAAW,SAAU95T,GACtB,IAAI6F,EAAS+6T,EAAcj/T,KAAKX,EAAMhB,GAOtC,OANI6F,EACA7E,EAAKyD,OAAO0+F,cAAc,CAAErsC,GAAI92D,EAAEq0L,QAGlC90L,EAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,cAA4B,CAAEgL,QAAS/K,EAAKyD,SAErDoB,OAMnB,IAAIg7T,GAAiB,SAAUp4T,GAC3B,IAAI4R,EAAO5R,EAAI2F,WAAa3F,EAAIuG,YAGhC,OAFAmuT,GAAYA,IAAavvT,SAASC,cAAc,aACtCO,UAAYiM,EACf8iT,GAAUr5T,OAGjBg9T,GAAgB,CAChB/xM,aAAc,SAAU10G,GACpB,IAAIxU,EAAS,GACTk7T,GAAO,IAAItiT,WAAaE,gBAAgBtE,EAAM,YAClD,GAAoC,wBAAhC0mT,EAAIrpT,gBAAgBy/D,QAEpB,IADA,IAAI6pP,EAAgBD,EAAIrpT,gBAAgBE,qBAAqB,yBACpDzU,EAAI,EAAG+I,EAAM80T,EAAc18T,OAAQnB,EAAI+I,EAAK/I,IAIjD,IAHA,IAAI89T,EAAMD,EAAc79T,GACpB6jB,EAAYi6S,EAAIpiS,aAAa,aAC7BqiS,EAASD,EAAIrpT,qBAAqB,eAC7BW,EAAI,EAAGs1H,EAAOqzL,EAAO58T,OAAQiU,EAAIs1H,EAAMt1H,IAAK,CAIjD,IAHA,IAAIy+D,EAASkqP,EAAO3oT,GAAGX,qBAAqB,SACxCjO,EAAa,GAERmP,EAAI,EAAGm8H,EAAOj+D,EAAO1yE,OAAQwU,EAAIm8H,EAAMn8H,IAAK,CACjD,IAAIwuI,EAAQtwE,EAAOl+D,GACnBnP,EAAWk3T,GAAev5K,EAAM1vI,qBAAqB,aAAa,KAAOipT,GAAev5K,EAAM1vI,qBAAqB,cAAc,IAErI,IAAIlT,EAAU,IAAIkiC,GAAGnmC,QAAQkJ,GAC7BjF,EAAQS,MAAM6hB,EAAY,IAAMxiB,GAAAA,EAAAA,UAChCqB,EAAOwD,KAAK3E,GAIxB,OAAOmB,IAIXs7T,GAAoB,SAAUjvS,EAASzsB,EAAOqE,GAC9C,IAAIqrB,EAAO1vB,EAAMG,QAAQkE,GACzBooB,EAAQlO,OAAO3a,KAAK,CAChBS,KAAMA,EACN0B,MAAO2pB,EAAKA,EAAK7wB,OAAS,GAC1B6wB,KAAMA,EAAKvpB,MAAM,GACjBmE,SAAU,GACV5J,OAAQV,EAAMU,UAItB3B,GAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuD,SAAU7D,EAAQykD,EAAYxkD,GACjF,IAAII,EAAOC,KACPgE,EAAOrE,GAAW,GAClBrB,EAAMyB,EAAKyD,OAAOlF,IACtB,OAAO,IAAIM,SAAQ,SAAUC,EAASk1B,GAClCz1B,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAC7B,IAAI0W,EAAiB,GACjBC,EAAU,GACd,MAAMC,EAAkB,GAClBC,EAAmB,GACnBC,EAAgB,GACtB,IAAI5iQ,EAAW,GAGX56C,EAAS0mS,EAAM5zM,YAAYmmF,WAG/Bj5K,EAASA,EAAO7d,QAAO,SAAUgsD,GAAQ,OAAOA,aAAgBvrB,GAAGnhC,MAAM4uE,OAASliB,EAAK8/H,gBAEvF,IAAK,IAAI15K,EAAI,EAAGA,EAAIyL,EAAO1f,OAAQiU,IAAK,CACpC,IAAIiK,EAAUwB,EAAOzL,GACjB9S,EAAQ+c,EAAQ7d,MAAMF,OAC1B,MAAMmX,EAAS4G,EAAQY,YAGvB,GAAIxH,EAAOi9R,mBAAqBt5S,EAAI4rC,WAAWlhC,QAAQxE,IAAU,GAAKA,EAAMyW,MAAM5X,OAAS,KAClFW,EAAKumB,YAAcvmB,EAAKumB,aAAe/lB,EAAM6Q,KAAM,CAGxD,IAAImrT,EACCL,EAAe37T,EAAM6Q,MAgBtBmrT,EAAgBL,EAAe37T,EAAM6Q,KACrC+qT,EAAQ57T,EAAM6Q,KAAKsF,OAAO49R,aAAah1S,GAAAA,EAAAA,KAAAA,OAAe68T,EAAQ57T,EAAM6Q,KAAKsF,OAAOsF,YAAatF,EAAOsF,gBAhBpGugT,EAAgB,CACZnrT,IAAK7Q,EAAM6Q,IACX0N,OAAQ,GACRi8C,UAAW,GACXz0D,MAAO/F,EAAM+F,MACbymB,QAAS,MAEbmvS,EAAe37T,EAAM6Q,KAAOmrT,EAC5BJ,EAAQ57T,EAAM6Q,KAAO,CACjBsF,OAAQpX,GAAAA,EAAAA,KAAAA,QAAe,EAAM,GAAIoX,GACjCoI,OAAQ,KAQhBy9S,EAAcxhQ,UAAU52D,KAAK5D,GAK7B,IAAIi8T,EAAmBj8T,EAAMic,2BAC7B,GAAIzc,EAAK+hB,UACD06S,EAAiBz3T,QAAQhF,EAAK+hB,YAAc,GAAKxE,EAAQ7d,MAAMwF,QAAQlF,EAAK+hB,WAAW85C,YACvFqgQ,GAAkBM,EAAeh8T,EAAOR,EAAK+hB,WAC7Cq6S,EAAQ57T,EAAM6Q,KAAK0N,OAAO3a,KAAKpE,EAAK+hB,gBAGvC,CACD,IAAK,IAAI7jB,EAAI,EAAGA,EAAIu+T,EAAiBp9T,OAAQnB,IAAK,CAC9C,IAAI2G,EAAO43T,EAAiBv+T,GACxBqf,EAAQ7d,MAAMwF,QAAQL,GAAMg3D,UAC5BqgQ,GAAkBM,EAAeh8T,EAAOqE,IAGxCtF,GAAAA,EAAAA,KAAAA,gBAAwB,SAAWk9T,EAAiBv+T,GAAK,oDACzDu+T,EAAiB13T,OAAO7G,EAAG,GAC3BA,GAAQ,GAMZu+T,EAAiBp9T,OAAS,IAC1B+8T,EAAQ57T,EAAM6Q,KAAK0N,OAASq9S,EAAQ57T,EAAM6Q,KAAK0N,OAAO1a,OAAOo4T,MAK7E,MAAMC,EAAe,SAAUx7T,GAC3B,OAAOA,IAAW,8BAA8B+8B,KAAK/8B,IAAWA,aAAkB3B,GAAAA,EAAAA,OAAAA,SAEtF,IAAK,IAAIgnB,KAAc41S,EAAgB,CACnCxiQ,EAASv1D,KAAK+3T,EAAe51S,IAC7B,MAAMi2S,EAAgBL,EAAe51S,GAC/B5P,EAASylT,EAAQ71S,GAAY5P,OAC7BgmT,EAAgBP,EAAQ71S,GAAYxH,OAG1C,IAAK49S,GAA0C,IAAzBA,EAAct9T,OAChC,SAGJ,IAAI6Z,EAASvC,EAAOsF,YAChB/C,EAAOhY,SAAQgY,EAAOhY,OAASs7T,EAAcz9S,OAAOzkB,KAAI,SAAU4D,GAAK,MAAO,KAAQw+T,EAAax+T,EAAEgD,QAAehD,EAAEgD,kBAAkB3B,GAAAA,EAAAA,OAAAA,OAAmBrB,EAAEgD,OAAOob,UAAYpe,EAAEgD,OAAnE,IAA6E,OAAQoF,KAAK,KACzM4S,EAAOmD,aAAYnD,EAAOmD,WAAamgT,EAAcz9S,OAAOzkB,KAAI,SAAU4D,GAAK,OAAQA,EAAEgD,QAAUw7T,EAAax+T,EAAEgD,QAAU,UAAYhD,EAAEgD,UAAWoF,KAAK,MAC9JqQ,EAAOw8R,QAAQp3R,OAAS4gT,EAAcr2T,KAAK,KAC3C,IAAIs2T,EAASjmT,EAAOi9R,kBAAkBl4S,EAAQykD,EAAY7lD,EAAI4I,IAAK,CAC/D,aAAgBy5T,EAAcr2T,KAAK,KACnC,YAAe4S,EAAO0S,YACtB,cAAiB,IACjB,OAAUtxB,EAAIqB,QAAQgqC,eACtB,OAAUrrC,EAAIqB,QAAQgqC,iBAMtBk3R,EAHJD,EAASA,EAAOr3T,QAAQ,4BAIxB,MAAMu3T,EAAc,CAChBv2S,WAAYA,EACZw2S,gBAAiB7jT,EAAO0S,YACxB6rR,UAAWolB,GAEfP,EAAiBl4T,KAAK04T,GACtBT,EAAgBj4T,KAAK,IAAIxJ,SAAQ,SAAUC,EAAS4W,GAChD,MAAMw2C,EAAWu0Q,EAAcxhQ,UAAU,GACzC/S,EAAS94C,kBAAkBwC,MAAMirT,GAC5BliU,MAAK,SAAUyF,GACZ8nD,EAAS94C,kBAAkBwZ,UAAUC,UAAUk0S,EAAYrlB,WAAW/8S,MAAK,SAAUouB,GACjFg0S,EAAYE,YAAcl0S,EAAMJ,OAAOhsB,KAAKurD,EAAS94C,kBAAmB2tT,EAAYrlB,WACpF58S,EAAQ0E,GAAAA,EAAAA,KAAAA,OAAe,GAAIY,EAAM28T,UAGxC3qT,OAAM,SAAUF,GACbR,EAAOzW,MAAMiX,WAGzB1S,GAAAA,EAAAA,KAAAA,gBAAwB,gBAG5B,GAAI88T,EAAgBh9T,OAAS,EACzBzE,QAAQwiB,IAAIi/S,GAAiB3hU,MAAK,SAAUgpF,GAIxC,IAHA,IAAIu5O,GAAc,EACdr8N,EAAe,EACfs8N,EAAyB,GACpBh/T,EAAI,EAAGA,EAAIwlF,EAAUrkF,OAAQnB,IAAK,CACvC,IAII8Q,EAJAw4B,EAAck8C,EAAUxlF,GACxB+uB,EAAUkvS,EAAeG,EAAiBp+T,GAAGqoB,YACjD02S,GAAc,EACdhwS,EAAQ7X,KAAOoyB,EAAYz1B,aAE3B,IAAIorT,EAAU31R,EAAYld,YAM1B,GALI6yS,GAAWA,EAAQn4T,QAAQ,MAAQ,IACnCm4T,EAAUA,EAAQv6S,OAAO,EAAGu6S,EAAQn4T,QAAQ,MAAM4gB,QAEjDu3S,IAASA,EAAU31R,EAAYu1R,iBAEhCI,IAAY31R,EAAYu1R,gBAAiB,CACzC,OAAQI,GACJ,IAAK,mBACDnuT,EAAS,IAAI2yB,GAAG3yB,OAAOw6G,QACvB,MACJ,IAAK,0BAEGx6G,EADAw4B,EAAYz1B,aAAa/M,QAAQ,sBAAwB,EAChD,IAAI28B,GAAG3yB,OAAOmkC,IAAI,CACvB64L,UAAW,IAAIrqM,GAAG3yB,OAAOsnC,KAAK,CAC1B/qC,QAASjR,EAAI4I,QAKZ,IAAIy+B,GAAG3yB,OAAOwtS,kBAE3B,MACJ,IAAK,gCACDxtS,EAAS,IAAI2yB,GAAG3yB,OAAOunC,KAAK,CACxBhrC,QAASjR,EAAI4I,MAEjB,MACJ,IAAK,2CACD8L,EAAS6sT,GACT,MACJ,QACI7sT,EAAS,KAIjB,GAAIA,EAAQ,CACR,IAAIlE,EACJ,IACIA,EAAWkE,EAAO86G,aAAatiF,EAAYz1B,aAAc,CACrD0qN,kBAAmB96L,GAAGC,KAAKpnB,IAAIlgB,EAAI4I,OAG3C,MAAOnI,GACHwE,GAAAA,EAAAA,MAASxD,EAAKyD,OAAOm+B,gBAAgB,gCAAiC,CAAEtsB,IAAKm2B,EAAYjhB,aAAgB,KAAOxrB,EAAE4e,SAClH7O,EAAW,GACX,SAEJ81F,GAA8B91F,EAASzL,OAyBvC,IAxBA,IAAI+9T,EAAiB,SAAU58T,EAAO68T,EAAIC,GACtC,IAAI18T,GAAS,EACb,GAAIy8T,IAAOC,EACP18T,GAAS,MAER,CACD,IAAI28T,EAAK/8T,EAAMshB,YAAYu7S,GACvB9sL,EAAK/vI,EAAMshB,YAAYw7S,GAC3B,GAAIC,EAAGl+T,OAAS,GAAKkxI,EAAGlxI,QAAUk+T,EAAGl+T,OAAQ,CACzCuB,GAAS,EACT,IAAK,IAAI1C,EAAI,EAAGA,EAAIq/T,EAAGl+T,OAAQnB,IAC3B,GAAIsC,EAAMvE,KAAKijB,QAAQq+S,EAAGr/T,MAAQsC,EAAMvE,KAAKijB,QAAQqxH,EAAGryI,IAAK,CACzD0C,GAAS,EACT,QAKhB,OAAOA,GAGP48T,EAAa,GAGRlqT,EAAI,EAAGA,EAAIxI,EAASzL,OAAQiU,IAAK,CACtC,IAAI7T,EAAUqL,EAASwI,GACvB,GAAI7T,aAAmBkiC,GAAGnmC,QAAS,CAI/B,IAHA,IAoBQiiU,EApBJv1J,EAAMzoK,EAAQE,SAAWJ,GAAAA,EAAAA,SACzBk2B,GAAQ,EACR1T,EAAYmmJ,EAAItlJ,OAAO,EAAGslJ,EAAIx4I,YAAY,MACrC7b,EAAI,EAAGA,EAAIoZ,EAAQlO,OAAO1f,OAAQwU,IAAK,CAC5C,IAAIkJ,EAAIkQ,EAAQlO,OAAOlL,GACnB6pT,EAAQ3gT,EAAElY,KAAK+d,OAAO7F,EAAElY,KAAKG,QAAQ,KAAO,GAChD,GAAIioB,EAAQ+tC,UAAU7jD,MAAK8wC,GAAYm1Q,EAAen1Q,EAAUy1Q,EAAO37S,KAAa,CAChF0T,GAAQ,EACHz1B,EAAKkmF,WAAazmF,EAAQE,UAAYK,EAAKkmF,YAC5Cq2O,EAAcn4T,KAAK7E,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BE,EAAS,CAAEY,YAAY,KACxE68T,EAAuB94T,KAAK2Y,EAAEjS,WAElC,OAMR,IAAK2qB,EAGG+nS,EAAWz7S,GAAY07S,EAAYD,EAAWz7S,IAE9C07S,EAAY,CACR54T,KAAMkd,EAAWxb,MAAOwb,EAAWmO,KAAM,CAACnO,GAAYjX,SAAU,IAEpE0yT,EAAWz7S,GAAa07S,EACxBxwS,EAAQlO,OAAO3a,KAAKq5T,IAGnBz9T,EAAKkmF,WAAazmF,EAAQE,UAAYK,EAAKkmF,YAC5Cq2O,EAAcn4T,KAAK7E,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BE,EAAS,CAAEY,YAAY,KACxE68T,EAAuB94T,KAAKq5T,EAAU3yT,iBAQrD,CAKD,MAAM6yT,EAAgB,CAClB94T,KAAM,QAAUtF,GAAAA,EAAAA,SAAagH,MAAO,oBAAqBuE,SAAU,CAAC,CAChE8yT,OAAQp2R,EAAYw1R,YAAavlB,UAAWjwQ,EAAYiwQ,UAAWomB,WAAYr2R,EAAYz1B,aAAc+rT,UAAWX,KAI5HlwS,EAAQlO,OAAO3a,KAAKu5T,GACpB/8N,GAA8B,QAMlCrhG,GAAAA,EAAAA,KAAAA,gBAAwB,oFACxBA,GAAAA,EAAAA,KAAAA,gBAAwB,4DAGxBxD,EAAKyD,OAAOshG,cAAc,CACtBnnF,QAAS6tB,EAAYz1B,aACrB8V,OAAQ2f,EAAY3f,SAGxBvtB,EAAIuvD,MAAM9tD,EAAKyD,OAAOm+B,gBAAgB,qBAAsB,CACxDx3B,KAAMrK,GAAAA,EAAAA,QAAAA,QAKlB,GAAImhU,EAAa,CACb,IAAIxgO,EACJ8/N,EAAch5T,SAAQ,SAAUizB,EAAM/yB,GAElC,IAAK,IAAIgB,KADT+xB,EAAK9xB,WAAa,GACF8xB,EAAKr2B,KAAM,CACvB,IAAItB,EAAQ23B,EAAKr2B,KAAKsE,GACD,iBAAV5F,EACP23B,EAAK9xB,WAAWN,KAAK,CACjBS,KAAMJ,EACN5F,MAAwB,iBAAVA,EAAqBA,EAAMogE,eAAe1/D,GAAAA,EAAAA,KAAAA,aAAqBxD,EAAKyD,OAAOlF,MAAQuE,IAIrG23B,EAAK9xB,WAAWN,KAAK,CACjBS,KAAMJ,EACN5F,MAAOA,KAId49F,GAAkBl9F,GAAAA,EAAAA,SAAAA,SAAqB7D,EAAQ86B,EAAKl6B,YACrDmgG,EAAiBjmE,GAErB,MAAMunS,EAAwBb,EAAuBz5T,GAGhDs6T,EAAsB5mT,MAAKpM,GAAKA,EAAE3P,KAAOo7B,EAAKp7B,MAC/C2iU,EAAsB35T,KAAKoyB,MAInC,IAAImjC,EAAW,GACf,IAAK,IAAIpzC,KAAc41S,EACfhhU,OAAOqB,UAAUC,eAAeC,KAAKy/T,EAAgB51S,IACrDozC,EAASv1D,KAAK+3T,EAAe51S,IAIrCxqB,EAAKyD,OAAO+8F,iBAAiB,CACzB7gG,OAAQA,EACRykD,WAAYA,EACZwZ,SAAUA,EACVinC,aAAcA,EACdnE,eAAgBA,IAEpB5hG,SAGAA,OAGJ,SAAUmkE,EAAI26F,EAAIqkK,GACd,GAAIrkQ,GAAgC,IAApBA,EAASt6D,OACrB,IAAK,IAAIknB,KAAc41S,EACnBxiQ,EAASv1D,KAAK+3T,EAAe51S,IAIrCxqB,EAAKyD,OAAO+8F,iBAAiB,CACzB7gG,OAAQA,EAAQykD,WAAYA,EAAYwZ,SAAUA,EAAUinC,aAAc,IAE9EtmG,EAAIuvD,MAAM9tD,EAAKyD,OAAOm+B,gBAAgB,qBAAsB,CACxDx3B,KAAMrK,GAAAA,EAAAA,QAAAA,QAEVjB,WAGP,CAUD,GARIP,EAAI4rC,WAAWhlC,QAAO,SAAUV,GAChC,OAAOA,aAAiBuY,GAAAA,KACzB1Z,OAAS,GACR/E,EAAIuvD,MAAM9tD,EAAKyD,OAAOm+B,gBAAgB,kCAAmC,CACrEx3B,KAAMrK,GAAAA,EAAAA,QAAAA,OAIV69D,GAAgC,IAApBA,EAASt6D,OACrB,IAAK,IAAIknB,KAAc41S,EACnBxiQ,EAASv1D,KAAK+3T,EAAe51S,IAKrCjsB,EAAI+P,GAAGvO,GAAAA,EAAAA,MAAAA,mBAAgC,WACnCC,EAAKyD,OAAO+8F,iBAAiB,CACzB7gG,OAAQA,EAAQykD,WAAYA,EAAYwZ,SAAUA,EAAUinC,aAAc,OAIlF7kG,EAAKyD,OAAO+8F,iBAAiB,CACzB7gG,OAAQA,EAAQykD,WAAYA,EAAYwZ,SAAUA,EAAUinC,aAAc,IAE9E/lG,YAMhB0E,GAAAA,EAAAA,KAAAA,QAAAA,oBAAAA,UAAAA,SAAyD,SAAUjF,GAC/D,IAAIyB,EAAOC,KACX1B,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAUghU,GAC7Bn8T,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,SAAAA,KAA8CxD,EAAMzB,GACpD,IAAIqhU,EAAgB5/T,EAAK84T,SACzB94T,EAAK84T,SAAW,SAAU95T,GACtBgB,EAAKkiU,oBAAoBvjU,MAAK,SAAUwjU,GAChCA,IACKniU,EAAKyD,OAAO0wH,cACTn1H,EAAEoL,OAAS6zL,IAAgBj+L,EAAKyD,OAAOywH,YAAel0H,EAAKyD,OAAO0wH,cAClEyrM,EAAcj/T,KAAKX,EAAMhB,YAUrDwE,GAAAA,EAAAA,KAAAA,QAAAA,oBAAAA,UAAAA,kBAAkEqH,iBAC9D,MACMtM,EADO0B,KACIwD,OAAOlF,IACxB,IAAIihB,GAAM,EAWV,aAVoBjhB,EAAI2B,KAAKuxD,UACvBqkD,YAAYtuG,SAAQ,SAAUga,GAChC,IAAI/c,EAAQ+c,EAAQ7d,MAAMF,OAG1B,GAFa+d,EAAQY,YAEVy1R,mBAAqBt5S,EAAI4rC,WAAWlhC,QAAQxE,IAAU,EAE7D,OADA+a,GAAM,GACC,KAGRA,GAGXhc,GAAAA,EAAAA,KAAAA,QAAAA,oBAAAA,UAAAA,UAA0D,SAAU5D,GAChE,IAAII,EAAOC,KAEP61D,GADJl2D,EAAUA,GAAW,IACJk2D,GACbrxD,EAAQ7E,EAAQ6E,OAASzE,EAAKyD,OAAOq8F,YACrCtnE,EAAW54B,EAAQ44B,SACnBjD,EAAe31B,EAAQ21B,aACvB6sS,GAAW,EACVpiU,EAAKqiU,UAmFNriU,EAAKqiU,SAASl5G,WAAU,GACxBnpN,EAAKqiU,SAAS58C,cAAc3vN,IAnF5BrxD,EAAMvE,KAAK0f,WAAWjhB,MAAK,SAAU6iB,GACjC,IAAI2yS,EACJ,GAAQ5+R,IACCx1B,GAAAA,EAAAA,KAAAA,SACDo0T,EAAa/O,QAGb+O,EAAa/O,GAGrB,MAAM3pR,EAAaja,EAAQpb,WAW3BpG,EAAKqiU,SAAW,IAAIz8R,GAAGg8K,YAAYj4H,KAAK,CACpC/uE,OAAQ4G,EAAQY,YAChBhY,KAAM+pT,EACNvuT,MAZkB,SAAU08T,GAC5B,OAAIA,GAAaA,EAAUlhU,cAAc8I,YAAciqT,EAC/C3wT,GAAAA,EAAAA,KAAAA,WAAmBi4B,GACZA,EAAW6mS,GAEf7mS,EAEJ,QAOXja,EAAQY,YAAY9T,GAAGywQ,IAAY,SAAUj/O,GACzCt8B,GAAAA,EAAAA,KAAAA,QAAAA,cAA8Bs8B,EAAMp8B,SAASY,YAAa,KAE9DtE,EAAKqiU,SAAS70I,YAAc,SAAU1tJ,GAElC,GAAIA,EAAM11B,OAAS6zL,GAAa,CAC5B,IAAIl8L,EAASoyT,IAAe/O,GAAyBnlT,KAAK2kR,cAAc,GAAK3kR,KAAK2kR,cAC9Ew9C,GAA8B,IAAlBrgU,EAAOuB,QAAwC,OAAxBrD,KAAKykR,eACxCzkR,KAAKulR,cAAc1lP,GAGnBsiS,GAAW,EAGnB,OAAOx8R,GAAGg8K,YAAYj4H,KAAKlpF,UAAU+sL,YAAY7sL,KAAKV,KAAM6/B,IAEhE,MACM4pR,EADM1pT,EAAKyD,OAAOlF,IACN2B,KAAK3B,IACvBmrT,EAAM7nG,eAAe7hN,EAAKqiU,UAC1BriU,EAAKqiU,SAAS/zT,GAAG,aAAa,SAAU0zG,GACpChiH,EAAKyD,OAAOywH,YAAa,EACzBw1L,EAAM5nG,kBAAkBt6M,SAAQ,SAAUyC,EAAM+4D,GACxC/4D,aAAgB27B,GAAGg8K,YAAYq/F,iBAC/Bh3S,EAAKk/M,WAAU,SAI3BnpN,EAAKqiU,SAAS58C,cAAc3vN,GAC5B91D,EAAKqiU,SAAS/zT,GAAG,WAAW,SAAUwxB,GAClC9/B,EAAKyD,OAAOywH,YAAa,EACzBw1L,EAAM5nG,kBAAkBt6M,SAAQ,SAAUyC,EAAM+4D,GACxC/4D,aAAgB27B,GAAGg8K,YAAYq/F,iBAC/Bh3S,EAAKk/M,WAAU,MAGvBugG,EAAMvkG,kBAAkBnlN,EAAKqiU,UAC7BpiU,KAAKkpN,WAAU,GACfnpN,EAAKqiU,SAAW,KAChB7gT,EAAQY,YAAY0+B,QACpB9gD,EAAKyD,OAAO2wH,YAAa,EACzBltE,YAAW,WACPlnD,EAAKyD,OAAO2wH,YAAa,IAC1B,KACHt0F,EAAMp8B,QAAQS,MAAMnE,EAAKyD,OAAOmjC,UAEhC,MAAMnM,EAAOj3B,GAAAA,EAAAA,KAAAA,QAAAA,cAA8Bs8B,EAAMp8B,QAAS,CAAEY,YAAY,IACxEtE,EAAKyD,OAAOw8F,cAAgBxlE,EAC5BA,EAAKh2B,MAAQzE,EAAKyD,OAAOq8F,YACrBtnE,GACAA,EAASiC,UAY7Bj3B,GAAAA,EAAAA,KAAAA,QAAAA,oBAAAA,UAAAA,WAA2D,SAAUm8F,EAAK5yC,EAAQy0B,GAC9E,IAAIxhF,EAAOC,KACPD,EAAKqiU,UAAYriU,EAAKyD,OAAOywH,aAC7Bl0H,EAAKyD,OAAOywH,YAAa,EACzBl0H,EAAKqiU,SAASl5G,WAAU,GACxBnpN,EAAKqiU,SAAS/+C,QAAQxiO,UAK9B,IAAIyhR,GAA2B,SAAUhkU,EAAK6F,EAAMmqB,GAChD,IAAItb,EACAmuT,EAAU7yS,EAKd,OAJI6yS,GAAWA,EAAQn4T,QAAQ,MAAQ,IACnCm4T,EAAUA,EAAQv6S,OAAO,EAAGu6S,EAAQn4T,QAAQ,MAAM4gB,QAEjDu3S,IAASA,EAAUh9T,EAAK48T,iBACrBI,GACJ,IAAK,mBACDnuT,EAAS,IAAI2yB,GAAG3yB,OAAOw6G,QACvB,MACJ,IAAK,0BAEGx6G,EADA7O,EAAK4R,aAAa/M,QAAQ,sBAAwB,EACzC,IAAI28B,GAAG3yB,OAAOmkC,IAAI,CACvB64L,UAAW,IAAIrqM,GAAG3yB,OAAOsnC,KAAK,CAC1B/qC,QAASjR,EAAI4I,QAIZ,IAAIy+B,GAAG3yB,OAAOwtS,kBAC3B,MACJ,IAAK,gCACDxtS,EAAS,IAAI2yB,GAAG3yB,OAAOunC,KAAK,CACxBhrC,QAASjR,EAAI4I,MAEjB,MACJ,IAAK,WACL,IAAK,kBAAmB,CAEpB,MAAMq4D,EAAYp7D,EAAK6T,cAAc,oBACjCunD,GACAh8D,GAAAA,EAAAA,MAASg8D,GACbvsD,EAAS,KACT,MAEJ,QACIA,EAAS,KAGjB,OAAIA,EACOA,EAAO86G,aAAa3pH,EAAM,CAC7Bs8N,kBAAmB96L,GAAGC,KAAKpnB,IAAIlgB,EAAI4I,OAIhC,MAUXq7T,GAA8B33T,eAAgBkE,EAAUmiB,GACxD,MAAMuxS,EAAc,GAwBpB,IAvBA,IAAItB,EAAyB,GACzBE,EAAiB,SAAU58T,EAAO68T,EAAIC,GACtC,IAAI18T,GAAS,EACb,GAAIy8T,IAAOC,GAAyB,IAAnBD,EAAGr4T,QAAQs4T,GACxB18T,GAAS,MAER,CACD,IAAI28T,EAAK/8T,EAAMG,QAAQ08T,GACnB9sL,EAAK/vI,EAAMG,QAAQ28T,GACvB,GAAIC,EAAGl+T,OAAS,GAAKkxI,EAAGlxI,QAAUk+T,EAAGl+T,OAAQ,CACzCuB,GAAS,EACT,IAAK,IAAI1C,EAAI,EAAGA,EAAIq/T,EAAGl+T,OAAQnB,IAC3B,GAAIq/T,EAAGr/T,KAAOqyI,EAAGryI,GAAI,CACjB0C,GAAS,EACT,QAKhB,OAAOA,GAGP48T,EAAa,GACRlqT,EAAI,EAAGA,EAAIxI,EAASzL,OAAQiU,IAAK,CACtC,IAAI7T,EAAUqL,EAASwI,GACvB,GAAI7T,aAAmBkiC,GAAGnmC,QAAS,CAI/B,IAHA,IAmBQiiU,EAnBJv1J,EAAMzoK,EAAQE,SAAWJ,GAAAA,EAAAA,SACzBk2B,GAAQ,EACR1T,EAAYmmJ,EAAItlJ,OAAO,EAAGslJ,EAAIx4I,YAAY,MACrC7b,EAAI,EAAGA,EAAIoZ,EAAQlO,OAAO1f,OAAQwU,IAAK,CAC5C,IAAIkJ,EAAIkQ,EAAQlO,OAAOlL,GACnB6pT,EAAQ3gT,EAAElY,KAAK+d,OAAO7F,EAAElY,KAAKG,QAAQ,KAAO,GAChD,GAAIioB,EAAQ+tC,UAAU7jD,MAAK8wC,GAAYm1Q,EAAen1Q,EAAUy1Q,EAAO37S,KAAa,CAChF0T,GAAQ,EACR+oS,EAAYp6T,KAAK7E,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BE,IAE/Cy9T,EAAuBz9T,EAAQ42N,KAAOt5M,EAAEjS,SACxC,OAMR,IAAK2qB,EAGG+nS,EAAWz7S,GAAY07S,EAAYD,EAAWz7S,IAE9C07S,EAAY,CACR54T,KAAMkd,EAAWxb,MAAOwb,EAAWjX,SAAU,IAEjD0yT,EAAWz7S,GAAa07S,EACxBxwS,EAAQlO,OAAO3a,KAAKq5T,IAGxBe,EAAYp6T,KAAK7E,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BE,IAC/Cy9T,EAAuB94T,KAAK3E,EAAQ42N,MAwBhD,OAnBAmoG,EAAYj7T,SAAQ,SAAUizB,GAG1B,IAAK,IAAI/xB,KAFT+xB,EAAK9xB,WAAa,GAEF8xB,EAAKr2B,KAAM,CACvB,IAAItB,EAAQ23B,EAAKr2B,KAAKsE,GAElB+xB,EAAK9xB,WAAWN,KAAK,CACjBS,KAAMJ,EAAK5F,MAAOA,IAU9Bq+T,EAAuB1mS,EAAKp7B,IAAIgJ,KAAKoyB,MAElC,CACHvJ,QAASA,IAIjB1tB,GAAAA,EAAAA,KAAAA,QAAAA,oBAAAA,UAAAA,sBAAsE,SAAUE,EAASoyD,GAErF,IAAI91D,EAAOC,KACX,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IAAIz1B,EAAMyB,EAAKyD,OAAOlF,IAEtBA,EAAI2B,KAAKuxD,SAAS9yD,MAAK,SAAU+qT,GAE7B,IAAIgZ,EAAah/T,EAAQxD,KAAKwD,QAAQtC,cAClCqnL,EAASi6I,EAAWj6I,OACpBD,EAAkBk6I,EAAWz/Q,qBAEjC,IAAK6S,EAAI,CAEL,IADA,IAAI6sQ,EAAY,KACPxgU,EAAI,EAAG+I,EAAMs9K,EAAgBllL,OAAQnB,EAAI+I,EAAK/I,GAAKsmL,IACnDk6I,GAAaA,EAAU,GAAKn6I,EAAgBrmL,MAC7CwgU,EAAY,CAACn6I,EAAgBrmL,EAAI,GAAIqmL,EAAgBrmL,KAG7D2zD,EAAK4zP,EAAM3zP,uBAAuB,IAAInwB,GAAGplC,KAAKmP,MAAMgzT,GAAWphU,kBAGnEvB,EAAKyD,OAAO0+F,cAAc,CAAErsC,GAAIA,IAEhC,IAAI8sQ,EAAcrkU,EAAIsgE,gBAAgB,CAAE15D,OAAQ,IAAI3B,GAAAA,EAAAA,OAAAA,WAAqBE,EAASnF,EAAI4I,KAAMiqB,aAAcrxB,GAAAA,EAAAA,OAAAA,OAE1G,MAAMi5B,EAAc,GACpBn6B,QAAQwiB,IAAIuhT,GAAajkU,MAAK,SAAUgpF,GAIpC,IAHA,IAAIy4O,EAAiB,GACjBv7N,EAAe,EAEV1iG,EAAI,EAAGA,EAAIwlF,EAAUrkF,OAAQnB,IAAK,CACvC,MAAM0gU,EAAcl7O,EAAUxlF,GAC9B,GAAK0gU,EAAL,CACA7pS,EAAY3wB,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKmiE,GACxC,GAAIgiP,EAAYpjQ,QAAUojQ,EAAYpjQ,OAAOn8D,OAAQ,CACjD,IAAK,IAAIiU,EAAI,EAAGA,EAAIsrT,EAAYpjQ,OAAOn8D,OAAQiU,IAAK,CAChD,IAAI8lD,EAAUylQ,EAAY/iU,GAAAA,EAAAA,QAAAA,QACtBmW,EAAQ2sT,EAAYpjQ,OAAOloD,GAC/B,OAAQrB,EAAMxN,KACV,KAAK3I,GAAAA,EAAAA,UAAAA,iBACDs9D,EAAWr9D,EAAKyD,OAAOm+B,gBAAgB,sBAAuB1rB,EAAMiH,QACpE,MAIJ,KAAKpd,GAAAA,EAAAA,UAAAA,gBACDs9D,EAAWr9D,EAAKyD,OAAOm+B,gBAAgB,wBAAyB1rB,EAAMiH,QACtE,MACJ,KAAKpd,GAAAA,EAAAA,UAAAA,YAED,SAEJ,KAAKA,GAAAA,EAAAA,UAAAA,cACDs9D,EAAWr9D,EAAKyD,OAAOm+B,gBAAgB,0BACvCp+B,GAAAA,EAAAA,MAAS,2EAA2EyP,OAAO,CAAEiD,MAAOA,EAAMiH,OAAOzD,IAAK6sE,YAAarwE,EAAMiH,OAAOuiD,YAAa3B,YAAa7nD,EAAMiH,OAAOyiD,eAAiB7/D,GAAAA,EAAAA,aAAAA,SACxM+iU,EAAY/iU,GAAAA,EAAAA,QAAAA,MACZ,MACJ,QACIs9D,EAAWr9D,EAAKyD,OAAOm+B,gBAAgB,UAAY1rB,EAAMxN,IAAKwN,EAAMiH,QAI5E5e,EAAIuvD,MAAMuP,EAAU,CAAEjzD,KAAM04T,IAE3BD,EAAY52S,UACbvN,SAMZ,IAAIqkT,EAAgBF,EAAY52S,SAAWs2S,GAAyBhkU,EAAKskU,EAAY52S,SAASjW,aAAc6sT,EAAY52S,SAASsC,aAAe,GAEhJyK,EAAYA,EAAY11B,OAAS,GAAKk/T,GAA4BO,EAAeF,EAAY3xS,SACzF2xS,EAAY3xS,SACZkvS,EAAe/3T,KAAKw6T,EAAY3xS,SAEpC2zE,GAA8Bk+N,EAAcz/T,QAEhDzE,QAAQwiB,IAAI2X,GAAar6B,MAAK,WAC1BqB,EAAKyD,OAAO+8F,iBAAiB,CACzB1qC,GAAIA,GAAM,KAAM8H,SAAUwiQ,EAAgBv7N,aAAcA,IAE5D/lG,UAEL,SAAU8O,GACT5N,EAAKyD,OAAO+8F,iBAAiB,IAC7B1hG,cAMhB0E,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAkC,WAC9BvD,KAAKgF,MAAQ,MAGjBlF,GAAAA,EAAAA,MAAAA,kBAAiC,uBACjCA,GAAAA,EAAAA,MAAAA,gBAA+B,qBAC/ByD,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,UAA4C,WACxC,IAAIxD,EAAOC,KACP1B,EAAMyB,EAAKyD,OAAOlF,IAClBmrT,EAAQ1pT,EAAKyD,OAAOlF,IAAI2B,KAAK3B,IAE7BykU,EAAoBhjU,EAAKyD,OAAOiyI,SAAS3mF,wBACzCk0Q,EAAkB1kU,EAAIoO,IAAIoiD,wBAE1BtzC,EAAUiuS,EAAM7zP,uBAAuB,CAACmtQ,EAAkB3uP,KAAO4uP,EAAgB5uP,KAAM2uP,EAAkB5uP,IAAM6uP,EAAgB7uP,MAC/Hx4D,EAAc8tS,EAAM7zP,uBAAuB,CAACmtQ,EAAkBzuP,MAAQ0uP,EAAgB5uP,KAAM2uP,EAAkB1uP,OAAS2uP,EAAgB7uP,MAE3I,GAAK34D,EAAL,CAKA,IAAIynT,EAAOznT,EAAQ,GACf0nT,EAAQ1nT,EAAQ,GAChB2nT,EAAOxnT,EAAY,GAGnBynT,EAAW,CAACH,EAFJtnT,EAAY,GAEKwnT,EAAMD,GAC/BG,EAAS/kU,EAAIyoB,YAEjB,IAAK4e,GAAGrqB,OAAOmsK,eAAe47I,EAAQD,GAAW,CAC7C,IAAIE,EAAY,CACZlvP,KAAM7yE,KAAK4K,IAAIk3T,EAAO,GAAKD,EAAS,GAAI,GACxC/uP,OAAQ9yE,KAAK4K,IAAIk3T,EAAO,GAAKD,EAAS,GAAI,GAC1C9uP,MAAO/yE,KAAK4K,IAAIi3T,EAAS,GAAKC,EAAO,GAAI,GACzClvP,IAAK5yE,KAAK4K,IAAIi3T,EAAS,GAAKC,EAAO,GAAI,IAG3C,GAAItjU,EAAKyD,OAAOqyI,QAAS,CAErB,IAAI0tL,EAASxjU,EAAKiF,MAAM+/E,cACpBu+O,EAAUhvP,MACVivP,EAAO,GAAKA,EAAO,GAAKD,EAAUhvP,MAE7BgvP,EAAUlvP,OACfmvP,EAAO,GAAKA,EAAO,GAAKD,EAAUlvP,MAElCkvP,EAAUnvP,IACVovP,EAAO,GAAKA,EAAO,GAAKD,EAAUnvP,IAE7BmvP,EAAUjvP,SACfkvP,EAAO,GAAKA,EAAO,GAAKD,EAAUjvP,QAEtC,IAAImvP,EAAc/Z,EAAM3zP,uBAAuBytQ,GAC/CC,EAAY,GAAK/Z,EAAMnmG,UAAU,GAAKkgH,EAAY,GAClDzjU,EAAKyD,OAAO8mT,2BAA6BkZ,GACxCzjU,EAAKiF,MAAMy+T,yBAA2B1jU,EAAKiF,MAAMqtN,qBAAqB3xN,KAAKX,EAAKiF,MAAOu+T,QAGxF,GAAIxjU,EAAKyD,OAAO6B,YAAa,CAEzB,IAAIokC,EAAOggR,EAAMzmG,UACb0gH,EAAKj6R,EAAKvoC,YAAYyJ,QAEtB24T,EAAUnvP,IAAKuvP,EAAG,IAAMJ,EAAUnvP,IAC7BmvP,EAAUjvP,SAAQqvP,EAAG,IAAMJ,EAAUjvP,QAC1CivP,EAAUhvP,MAAOovP,EAAG,IAAMJ,EAAUhvP,MAC/BgvP,EAAUlvP,OAAMsvP,EAAG,IAAMJ,EAAUlvP,MAE5C3qC,EAAK8gB,QAAQ,CACT5pD,OAAQ+iU,EAAInrH,OAAQ,SAAUorH,GAG1B,OAFgB,IAAZA,GAAe5jU,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,mBAC3B,IAAZ6jU,GAAe5jU,EAAKyD,OAAOlF,IAAIiN,QAAQzL,GAAAA,EAAAA,MAAAA,iBACpC6jU,SAQ/BpgU,GAAAA,EAAAA,KAAAA,QAAAA,MAAAA,UAAAA,WAA6C,SAAUsyI,GACnD,MAAM91I,EAAOC,KACb,IAAIgF,EAAQjF,EAAKiF,MAKjB,GAAI6wI,EAEK7wI,EAAMy+T,0BACPz+T,EAAMy+T,wBAA0Bz+T,EAAMqtN,oBACtCrtN,EAAMqtN,oBAAsB,cAG3BrtN,EAAM4+T,0BACP5+T,EAAM4+T,wBAA0B,WAC5B5+T,EAAMy+T,2BAEN1jU,EAAK8jU,0BACLl+R,GAAG0a,OAAOuuI,cAAc7uL,EAAK8jU,0BAEjC9jU,EAAK8jU,yBAA2Bl+R,GAAG0a,OAAOkuI,OACtCvpL,EAAO,gBACPA,EAAM4+T,wBAAyB5+T,QAItC,CAED,MAAM00N,EAAiB10N,EAAMktN,aAAa11J,cAAc72D,MAKxD+zN,EAAeoqG,YAAY,MAAO9+T,EAAM8jJ,SAASo9J,MACjDxsF,EAAeoqG,YAAY,SAAU9+T,EAAM8jJ,SAASq9J,SACpDzsF,EAAeoqG,YAAY,OAAQ9+T,EAAM8jJ,SAASk9J,OAClDtsF,EAAeoqG,YAAY,QAAS9+T,EAAM8jJ,SAASm9J,eAE5ClmT,EAAKyD,OAAO8mT,2BAEftlT,EAAMy+T,0BACNz+T,EAAMqtN,oBAAsBrtN,EAAMy+T,+BAC3Bz+T,EAAMy+T,yBAEbz+T,EAAM4+T,0BACF7jU,EAAK8jU,0BACLl+R,GAAG0a,OAAOuuI,cAAc7uL,EAAK8jU,0BAEjC9jU,EAAK8jU,yBAA2Bl+R,GAAG0a,OAAOkuI,OACtCvpL,EAAO,gBACPA,EAAM2sN,oBAAqB3sN,UACxBA,EAAM4+T,2BAMzBrgU,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,WAClC,IAAIxD,EAAOC,KACP4E,EAAS,GAETe,EAAQmlT,GAAsB/qT,EAAK0D,SAAS,GAChD,GAAIkC,EAAO,CACP,IAAIonB,EAAQpnB,EAAMunB,WAClB,GAAIH,EAAO,CACP,GAAIA,aAAiB4Y,GAAGhgC,MAAM2lP,KAAM,CAChC1mP,EAAO+M,IAAMob,EAAMm9N,SACnB,IAAI3/M,EAAQxd,EAAM4/H,WACdhhJ,EAAMohB,EAAMG,WACZqd,EACI5+B,EAAI2mB,OACJ1tB,EAAO0tB,MAAQ3mB,EAAI2mB,MAAQiY,EAC3B3lC,EAAO2tB,OAAS5mB,EAAI4mB,OAASgY,GAG7B3lC,EAAO2lC,MAAQA,EAIf5+B,EAAI2mB,QACJ1tB,EAAO0tB,MAAQ3mB,EAAI2mB,MACnB1tB,EAAO2tB,OAAS5mB,EAAI4mB,aAIvBxF,aAAiB4Y,GAAGhgC,MAAMpG,SAC/BqF,EAAO+M,IAAMob,EAAMG,WAAWqwC,aAE9Bx9D,EAAKyD,OAAO7D,QAAQiB,OACpBgE,EAAO2tB,OAAS3tB,EAAO0tB,MAAqC,EAA7BvyB,EAAKyD,OAAO7D,QAAQiB,QAGnDgE,EAAO0tB,MAAQ1tB,EAAO0tB,OAASvyB,EAAKyD,OAAO7D,QAAQ2yB,MACnD1tB,EAAO2tB,OAAS3tB,EAAO2tB,QAAUxyB,EAAKyD,OAAO7D,QAAQ4yB,YAGxD,CACD,IAAI+C,EACJ,OAAQv1B,EAAK0D,QAAQtC,cAAc8I,WAC/B,KAAKk7S,GACL,KAAKA,GACD7vR,EAAex1B,GAAAA,EAAAA,KAAAA,QACf,MACJ,KAAKqlT,GACL,KAAKA,GACD7vR,EAAex1B,GAAAA,EAAAA,KAAAA,SACf,MACJ,QACIw1B,EAAex1B,GAAAA,EAAAA,KAAAA,MAIvB8E,EAAO+M,IAAMpO,GAAAA,EAAAA,KAAAA,wBAAgCywT,GAAmBruT,GAAQ,CAAE2vB,aAAcA,KAuBhG,OAAO1wB,GAGX,MAAMm/T,GAAsB,SAAUrkU,EAAQC,GAC1C,MAAMI,EAAOC,KACbD,EAAK0D,QAAU,IAAIkiC,GAAGnmC,QAClBO,EAAKyD,OAAOpE,IACZW,EAAK0D,QAAQS,MAAMnE,EAAKyD,OAAOpE,IAE/BO,EAAQ8+D,cACR1+D,EAAK0D,QAAQk3N,gBAAgBh7N,EAAQ8+D,cAEzC1+D,EAAK0D,QAAQC,MAAQ3D,EACrBA,EAAKyD,OAAOvC,eAAevB,GAC3BK,EAAKyD,OAAOM,QAAQ/D,EAAKyD,OAAOW,OAGpCZ,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,YAAwC,SAAU7D,EAAQC,GACtD,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEivB,MAAO11B,IAAaI,EAAK0D,WAIrFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,iBAA6C,SAAU7D,EAAQC,GAC3D,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEivB,MAAO11B,IAAaI,EAAK0D,WAIrFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,aAAyC,SAAU7D,EAAQC,GACvD,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAI2zT,EAAU/vT,GAAAA,EAAAA,KAAAA,gBAAwB5D,GAClC2zT,GACA3zT,EAAQ0V,IAAMi+S,EACdyQ,GAAoBrjU,KAAKX,EAAML,EAAQC,GACnC4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEq1B,OAAQ97B,IAAaI,EAAK0D,WAIlF1D,EAAKkR,YAAYvR,EAAQC,IAIjC4D,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,kBAA8C,SAAU7D,EAAQC,GAC5D,MAAMI,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAI2zT,EAAU/vT,GAAAA,EAAAA,KAAAA,gBAAwB5D,GAClC2zT,GACA3zT,EAAQ0V,IAAMi+S,EACdyQ,GAAoBrjU,KAAKX,EAAML,EAAQC,GACnC4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEq1B,OAAQ97B,IAAaI,EAAK0D,WAIlF1D,EAAKiQ,iBAAiBtQ,EAAQC,IAItC4D,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,eAA2C,SAAU7D,EAAQC,GACzD,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEmvB,KAAM51B,IAAaI,EAAK0D,WAIpFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,cAA0C,SAAU7D,EAAQC,GACxD,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEiK,QAAS1Q,IAAaI,EAAK0D,WAKvFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,oBAAgD,SAAU7D,EAAQC,GAC9D,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEmvB,KAAM51B,IAAaI,EAAK0D,WAIpFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,mBAA+C,SAAU7D,EAAQC,GAC7D,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjB4D,GAAAA,EAAAA,KAAAA,gBAAwB5D,IACxBI,EAAK0D,QAAQiC,SAASklT,GAAkB,CAAExkT,OAAQ,CAAEiK,QAAS1Q,IAAaI,EAAK0D,WAIvFF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,aAAyC,SAAU7D,EAAQC,GACvD,MAAMI,EAAOC,KAEb+jU,GAAoBrjU,KAAKX,EAAML,EAD/BC,EAAUA,GAAW,IAEjBA,GACAI,EAAK0D,QAAQiC,SACT,IAAIigC,GAAGhgC,MAAM4pP,MAAM,CACfh6O,OAAQ,IAAIowB,GAAGhgC,MAAMwmP,OAAO,CACxB56K,MAAO5xE,EAAQmsC,YACfxZ,MAAO3yB,EAAQosC,YACfu7B,SAAU3nE,EAAQ2nE,WAEtBmf,KAAM,IAAI9gD,GAAGhgC,MAAMohP,KAAK,CACpBx1K,MAAO4/F,GAAQxxK,EAAQisC,UAAWjsC,EAAQksC,mBAO9DtoC,GAAAA,EAAAA,KAAAA,QAAAA,cAAgC,SAAU20B,EAAQv4B,GAC9C,IAAKu4B,EAAO8rS,cAAe,CACvB,IAAIvB,EAAavqS,EAAO/2B,eACxBxB,EAAUA,GAAW,IACbP,GAAK84B,EAAOv0B,QACpB,IAKIsgU,EA0CAzpS,EA/CAy5R,EAAU/7R,EAAO/xB,WAMrB,OALI8tT,GACA1wT,GAAAA,EAAAA,KAAAA,OAAe5D,EAASq0T,GAAmBC,EAAS/7R,KAIhD,GACJ,KAAKuqS,aAAsB98R,GAAGplC,KAAKmP,MACnC,KAAK+yT,aAAsB98R,GAAGplC,KAAKsP,WAC3BtM,GAAAA,EAAAA,KAAAA,WAAmB0wT,KACnBA,EAAUA,EAAQ/7R,IAKtB,IAHA,IAAIgsS,EAAWjQ,EACXnzT,MAAMC,QAAQkzT,GAAWA,EAAU,CAACA,GACpC,GACK/xT,EAAI,EAAG+I,EAAMi5T,EAAS7gU,OAAQnB,EAAI+I,EAAK/I,IAE5C,GADA+xT,EAAUiQ,EAAShiU,GACf+xT,EAAQ/mS,qBAAsByY,GAAGhgC,MAAM2lP,KAAM,CAC7C24E,EAAU,SACV,MAGRA,EAAUA,GAAW,QACjBxB,aAAsB98R,GAAGplC,KAAKsP,aACd,UAAZo0T,IACAA,EAAU,cAEE,WAAZA,IACAA,EAAU,gBAGlB,MACJ,KAAKxB,aAAsB98R,GAAGplC,KAAKi8N,WAC/BynG,EAAU,WACV,MACJ,KAAKxB,aAAsB98R,GAAGplC,KAAK8B,QAC/B4hU,EAAU,UACV,MACJ,KAAKxB,aAAsB98R,GAAGplC,KAAK08N,gBAC/BgnG,EAAU,gBACV,MACJ,KAAKxB,aAAsB98R,GAAGplC,KAAK0P,aAC/Bg0T,EAAU,eAOdzpS,EADAypS,EACO,IAAIpyS,GAAiBoyS,GAAS/rS,EAAQv4B,GAGtC,IAAI02T,GAAAA,EAAUn+R,EAAQv4B,GAEjC66B,EAAKr2B,KAAOq2B,EAAKv6B,KAAK8D,UACtBm0B,EAAO8rS,cAAgBxpS,EAE3B,OAAOtC,EAAO8rS,eAGlBzgU,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,aAAyC,WACrC,OAAOvD,KAAKyD,QAAQ+G,SAGxBjH,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,SAAqC,WACjC,IAAIxD,EAAOC,KACP4E,EAAS,GACTqvT,EAAUl0T,EAAK0D,QAAQ0C,WACvB5C,GAAAA,EAAAA,KAAAA,WAAmB0wT,KACnBA,EAAUA,EAAQl0T,EAAK0D,UAE3B,IAAIygU,EAAWjQ,EACXnzT,MAAMC,QAAQkzT,GAAWA,EAAU,CAACA,GACpC,GACJ,MAAMvnN,EAAQ,SAAU7pG,GACpB,OAAQ,IAAO8kB,OAAO9kB,GAAOogB,SAAS,KAAMtY,OAAO,IAEjD8iP,EAAU,SAAU9nP,EAAOg2B,GAC7B,GAAIh2B,EAAO,KAAAw+T,EAAAC,EACP,MAAM39O,EAAO9gF,EAAM8nP,YAA6B,QAApB02E,EAAIx+T,EAAMunB,kBAAU,IAAAi3S,GAAS,QAATC,EAAhBD,EAAkB12E,eAAO,IAAA22E,OAAT,EAAhBA,EAAA1jU,KAAAyjU,IAChC,GAAI19O,EAAM,CACN,IAAI49O,EAAS59O,EAAKsnE,WAClBpyH,EAAIiQ,UAAY,IAAM8gE,EAAM23N,EAAO,IAAM33N,EAAM23N,EAAO,IAAM33N,EAAM23N,EAAO,IACrEvjU,MAAMC,QAAQsjU,KACd1oS,EAAIkQ,YAAcw4R,EAAO,OAKnC12E,EAAY,SAAUhoP,EAAOg2B,GAC/B,GAAIh2B,EAAO,CACP,MAAM4P,EAAS5P,EAAMgoP,YACjBp4O,IACAomB,EAAImQ,YAAcv2B,EAAOw4I,WACzBpyH,EAAIoQ,YAAcx2B,EAAOqzK,cAKrC,IAAK,IAAI1mL,EAAI,EAAG+I,EAAMi5T,EAAS7gU,OAAQnB,EAAI+I,EAAK/I,IAAK,CAEjDurP,EADAwmE,EAAUiQ,EAAShiU,GACF0C,GACjB+oP,EAAUsmE,EAASrvT,GACnB,MAAMmoB,EAAQknS,EAAQ/mS,WACtB,GAAIH,aAAiB4Y,GAAGhgC,MAAM2lP,KAAM,KAAAg5E,EAAAC,EAAAC,GACR,QAApBF,EAACvkU,EAAKyD,OAAO7D,eAAO,IAAA2kU,IAAnBA,EAAqBz9P,UAAgC,QAAnB09P,EAAAxkU,EAAKyD,OAAO7D,eAAO,IAAA4kU,GAAnBA,EAAqB19P,WAAatjE,GAAAA,EAAAA,KAAAA,wBAAmD,QAApBihU,EAACzkU,EAAKyD,OAAO7D,eAAO,IAAA6kU,OAAA,EAAnBA,EAAqB39P,aAC9HjiE,EAAOyQ,IAAM0X,EAAMm9N,UACnB,MAAMr1N,EAAO9H,EAAMu2L,UACb/4K,EAAQxd,EAAM4/H,YAAc,EAC9B93H,IACAjwB,EAAO0tB,MAAQuC,EAAK,GAAK0V,EACzB3lC,EAAO2tB,OAASsC,EAAK,GAAK0V,GAI9B,MAAM8pB,EAAWtnC,EAAMunC,cAEnBD,IACAzvD,EAAOyvD,SAAW,IAAMA,EAAW9yD,KAAKS,IAE5C,IAAI4P,EAASmb,EAAMk7N,YACfr2O,IACAhN,EAAOgN,OAAS,CAACA,EAAO,GAAK24B,EAAO34B,EAAO,GAAK24B,GAC5C1V,IAEAjwB,EAAOgN,OAAO,GAAKhN,EAAOgN,OAAO,GAAKhN,EAAO0tB,MAC7C1tB,EAAOgN,OAAO,GAAKhN,EAAOgN,OAAO,GAAKhN,EAAO2tB,cAKrDk7N,EAAQ1gO,EAAOnoB,GACf+oP,EAAU5gO,EAAOnoB,GAErB,IAAIwU,EAAO66S,EAAQ3zS,UACnB,GAAIlH,EAAM,CACNxU,EAAO2nC,MAAQnzB,EAAKkH,UACpB,IAAIq/G,EAAOvmH,EAAKg4O,UACZzxH,IAEA/6H,EAAOynC,SAAW/zB,SAASqnH,EAAKn2H,MAAM,WAA6C,IAAhC8O,SAASqnH,EAAKn2H,MAAM,UACvE5E,EAAO+6H,KAAOA,GAElB,IAAItrE,EAAWj7C,EAAKk7C,cAChBD,IACAzvD,EAAOkwJ,kBAAoB,IAAMzgG,EAAW9yD,KAAKS,IAGrD,IAAIsnQ,EAAYlwP,EAAKuzI,WACjB28G,IACA1kQ,EAAO0kQ,UAAYA,GAGvB,IAAI1pI,EAAYxmH,EAAKo4O,eACjB5xH,IACAh7H,EAAOg7H,UAAYA,GAEvBh7H,EAAOunC,YAAc,CAAC/yB,EAAKu4O,aAAcv4O,EAAKw4O,cAC9C,IAAInrK,EAAOrtE,EAAKq0O,UACZhnK,IACA7hF,EAAOwnC,UAAYq6C,EAAKsnE,YAE5B,IAAIx4I,EAAS6D,EAAKu0O,YACdp4O,IACA3Q,EAAOsnC,kBAAoB32B,EAAOw4I,WAClCnpJ,EAAOqnC,kBAAoB12B,EAAOqzK,YAItCqrI,EAAQr2D,UAAYq2D,EAAQr2D,SAASt9O,YACrC1b,EAAO+uT,QAAUM,EAAQr2D,SAASt9O,WAK1C,OAHA/c,GAAAA,EAAAA,KAAAA,OAAexD,EAAKyD,OAAO7D,QAASiF,GAChC7E,EAAK0kU,YACL7/T,EAASzF,OAAOmD,OAAOsC,EAAQ7E,EAAK0kU,UAAUt+T,aAC3CvB,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,YAAwC,WACpC,IAAIqB,EACA7E,EAAOC,KACX,GAAID,EAAK0D,SAAW1D,EAAK0D,QAAQtC,YAAa,CAC1C,IAAIZ,EAAOR,EAAK0D,QAAQtC,cACxB,GAAIZ,EACA,GAAIA,aAAgBolC,GAAGplC,KAAKhB,OAAQ,CAChC,MAAMoB,EAASJ,EAAKW,YACpB0D,EAAS,CAACjE,EAAQ,CAACA,EAAO,GAAKJ,EAAKa,YAAaT,EAAO,UAEnDJ,EAAKe,iBACVsD,EAASrE,EAAKe,kBAI1B,OAAOsD,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,YAAwC,SAAUjD,GAC9C,MAAMP,EAAOC,KACb,GAAID,EAAK0D,SAAW1D,EAAK0D,QAAQtC,YAAa,CAC1C,IACI02D,EACAxiC,EACAvzB,EACA4iU,EACA7mG,EACA8mG,EACAC,EACAC,EARAtkU,EAAOR,EAAK0D,QAAQtC,cAcxB,QAAQ,GACJ,KAAKpB,EAAKyD,kBAAkB87S,GAAAA,EACxBqlB,GAAiB,EACjB9sQ,EAAOlyB,GAAGplC,KAAK0P,aACf4tN,EAAWv9N,EACPQ,MAAMC,QAAQ88N,KACd6mG,EAAmBpkU,EAAS,IAEpC,KAAKP,EAAKyD,kBAAkB47S,GAAAA,GAAar/S,EAAKyD,kBAAkBoN,GAAAA,EAC5Dg0T,GAA6B,EAC7B/sQ,EAAOA,IAAS93D,EAAKyD,kBAAkB47S,GAAAA,EAAYz5Q,GAAGplC,KAAK8B,QAAUsjC,GAAGplC,KAAK08N,iBAC7EynG,EAAmBC,EAAiBD,EAAmBpkU,EACnDQ,MAAMC,QAAQ2jU,KACd5iU,EAAS4iU,EAAiB,IAElC,KAAK3kU,EAAKyD,kBAAkBwN,GAAAA,GAAYjR,EAAKyD,kBAAkB67S,GAAAA,EAC3DwlB,GAAe,EACfhtQ,EAAOA,IAAS93D,EAAKyD,kBAAkBwN,GAAAA,EAAW20B,GAAGplC,KAAKi8N,WAAa72L,GAAGplC,KAAKsP,YAC/E/N,EAAS8iU,EAA6B9iU,EAASxB,EAC3CQ,MAAMC,QAAQe,KACduzB,EAAQvzB,EAAO,IAEvB,KAAK/B,EAAKyD,kBAAkB27S,GAAAA,EAGxB,GAFAtnP,EAAOA,GAAQlyB,GAAGplC,KAAKmP,MACvB2lB,EAAQwvS,EAAexvS,EAAQ/0B,EAC3BQ,MAAMC,QAAQs0B,IAA8B,iBAAbA,EAAM,IAAuC,iBAAbA,EAAM,GAAiB,CACtF,IAAIsW,EACJ,OAAQtW,EAAMhyB,QACV,KAAK,EACDsoC,EAAShG,GAAGplC,KAAK2rH,eAAem/E,IAChC,MACJ,KAAK,EACD1/J,EAAShG,GAAGplC,KAAK2rH,eAAeC,KAChC,MACJ,QACIxgF,EAAShG,GAAGplC,KAAK2rH,eAAerpC,GAGpCtiF,EACAA,EAAKU,eAAeX,EAAUqrC,IAG9BprC,EAAO,IAAIs3D,EAAKv3D,EAAUqrC,GAC1B5rC,EAAK0D,QAAQoE,YAAYtH,IAGjC,MACJ,KAAKR,EAAKyD,kBAAkBjE,GAAAA,EAAQ,CAChC,MAAM0hQ,EAAiB1hQ,GAAAA,EAAAA,cAAqBe,GACtCK,EAASsgQ,EAAe,GACxBpgQ,EAAqBogQ,EAAe,GAC1C,IAAIt1N,EACJ,OAAQhrC,EAAO0C,QACX,KAAK,EACDsoC,EAAShG,GAAGplC,KAAK2rH,eAAem/E,IAChC,MACJ,KAAK,EACD1/J,EAAShG,GAAGplC,KAAK2rH,eAAeC,KAChC,MACJ,QACIxgF,EAAShG,GAAGplC,KAAK2rH,eAAerpC,GAGxC,MAAMjiF,EAASW,KAAKC,MAAMX,EAAmB,GAAKF,EAAO,GAAIE,EAAmB,GAAKF,EAAO,IACxFJ,EACAA,EAAK4+N,mBAAmBx+N,EAAQC,EAAQ+qC,IAGxCprC,EAAO,IAAIolC,GAAGplC,KAAKhB,OAAOoB,EAAQC,EAAQ+qC,GAC1C5rC,EAAK0D,QAAQoE,YAAYtH,IAE7B,UAMhBgD,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,MAAkC,WAC9B,IAAIqB,EAKJ,OAJW5E,KACFyD,UACLmB,EAFO5E,KAEOyD,QAAQE,SAEnBiB,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,MAAkC,SAAUnE,GAC7BY,KACFyD,SADEzD,KAEFyD,QAAQS,MAAM9E,IAI3B,MAAM0lU,GAAmB,SAAU16T,GAC/B,IAAIxF,EAAS,EAMb,OALAwF,EAAY7C,SAAQ,SAAU+I,GAC1B,MACMy0T,EADU,IAAIp/R,GAAGplC,KAAK8B,QAAQ,CAACiO,IACbojM,cAAc,GACtC9uM,GAAkB+gC,GAAGplC,KAAKkQ,KAAK4vS,iBAAiB0kB,EAAQx8I,gBAAiB,EAAGw8I,EAAQx8I,gBAAgBllL,OAAQ0hU,EAAQv8I,WAEjH5jL,GAGLogU,GAAsB,SAAU56T,GAElC,OADa,IAAIu7B,GAAGplC,KAAKi8N,WAAWpyN,GACxBsG,aAGhBnN,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,SAAU5D,GAAS,IAAAslU,EAAAC,EACrD,MAAMnlU,EAAOC,KACbL,EAAUA,GAAW,GACrB,IAAIiF,EAAS,EAEb,GAAI7E,EAAK0kU,WAAwB,QAAfQ,EAAIllU,EAAKyD,cAAM,IAAAyhU,GAAO,QAAPC,EAAXD,EAAazgU,aAAK,IAAA0gU,GAAlBA,EAAoB5mU,IAAI0I,SAC1C,OAAOjH,EAAKyD,OAAOgB,MAAMlG,IAAI2I,OAAOyJ,UAAU3Q,EAAK0kU,WAGvD,MAAMlkU,EAAOR,EAAK0D,QAAQtC,cACpBiJ,EAAczK,EAAQyK,aAAe7J,EAAKe,iBAChD,QAAQ,GACJ,KAAKf,aAAgBolC,GAAGplC,KAAK8B,QACzBuC,EAASkgU,GAAiB16T,GAC1B,MACJ,KAAK7J,aAAgBolC,GAAGplC,KAAKi8N,WACzB53N,EAASogU,GAAoB56T,GAC7B,MACJ,KAAK7J,aAAgBolC,GAAGplC,KAAK0P,aACzB7F,EAAY7C,SAAQ,SAAU8I,GAC1BzL,GAAkBkgU,GAAiBz0T,MAEvC,MACJ,KAAK9P,aAAgBolC,GAAGplC,KAAK08N,gBACzB7yN,EAAY7C,SAAQ,SAAUg1N,GAC1B33N,GAAkBogU,GAAoBzoG,MAKlD,OAAO33N,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,QAAoC,SAAU5D,GAAS,IAAAwlU,EAAAC,EACnD,MAAMrlU,EAAOC,KAGb,GAFAL,EAAUA,GAAW,GAEjBI,EAAK0kU,WAAwB,QAAfU,EAAIplU,EAAKyD,cAAM,IAAA2hU,GAAO,QAAPC,EAAXD,EAAa3gU,aAAK,IAAA4gU,GAAlBA,EAAoB9mU,IAAI0I,SAC1C,OAAOjH,EAAKyD,OAAOgB,MAAMlG,IAAI2I,OAAO0J,QAAQ5Q,EAAK0kU,WAGrD,MAAMlkU,EAAOR,EAAK0D,QAAQtC,cAC1B,IAAIkxK,EAOJ,GANI9xK,aAAgBolC,GAAGplC,KAAK8B,QACxBgwK,EAAO1sI,GAAGplC,KAAK8B,QAEV9B,aAAgBolC,GAAGplC,KAAK0P,eAC7BoiK,EAAO1sI,GAAGplC,KAAK0P,cAEfoiK,EAAM,CAGN,OADgB,IAAIA,EADA1yK,EAAQyK,aAAe7J,EAAKe,kBAEjCqP,UAEnB,OAAO,GAGX,MAAMm6S,GAAwB,SAAUrnT,EAAS4hU,GAC7C,IAAI1/T,EAAQlC,EAAQ0C,WAiBpB,OAhBI5C,GAAAA,EAAAA,KAAAA,WAAmBoC,KACnBA,EAAQA,EAAMlC,IAEd3C,MAAMC,QAAQ4E,KACdA,EAAQA,EAAMsC,QAAO,SAAUq9T,EAAepS,GAK1C,OAJAoS,EAAcr4E,MAAQimE,EAAajmE,OAASq4E,EAAcr4E,MAC1Dq4E,EAAcp8E,OAASgqE,EAAahqE,QAAUo8E,EAAcp8E,OAC5Do8E,EAAch4E,QAAU4lE,EAAa5lE,SAAWg4E,EAAch4E,QAC9Dg4E,EAAcj2E,MAAQ6jE,EAAa7jE,OAASi2E,EAAcj2E,MACnDi2E,IACR,IAAI3/R,GAAGhgC,MAAM4pP,QAEf5pP,GAAU0/T,IACX1/T,EAAQ,IAAIggC,GAAGhgC,MAAM4pP,MACrB9rP,EAAQiC,SAASC,IAEdA,GAGXpC,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,SAAqC,SAAU5D,GAC3C,MAAMI,EAAOC,KACPk4B,EAASn4B,EAAK0D,QACpB,GAAgB,OAAZ9D,EAEA,YADAu4B,EAAOxyB,SAAS,MAGpB,MAAMjC,EAAU1D,EAAKyD,OACf+hU,EAAsB,CACxBn/T,OAAQ,IAEZm/T,EAAoBn/T,OAAO3C,EAAQ4C,WAAa1G,EAChD,IAAIiG,EAAWglT,GAAkB2a,EAAqBrtS,GAItD,GAFAA,EAAOxyB,SAASE,GAEZnC,EAAQe,OAAUzE,EAAK0kU,UAAW,CAElC,IAAIvR,EAAeh7R,EAAOw/R,gBAAkB9xT,EACxCrC,GAAAA,EAAAA,KAAAA,WAAmB2vT,KACnBA,EAAeA,KACnB,MAAMvtL,EAAYutL,EAAatqT,MAAM8+B,GAAMA,EAAEpnB,YAC7C7c,EAAQe,MAAMlG,IAAI2I,OAAOvB,SAAS3F,EAAK0kU,UAAW9kU,GAO9CgmI,GACAliI,EAAQe,MAAMlG,IAAI2I,OAAOu+T,SAASzlU,EAAK0kU,UAAW,CAC9Cr/L,aAAc,UACdh5F,UAAWu5F,EAAUrlH,UAAUmtO,UAAU1/F,WAAWpjJ,MAAM,EAAG,GAC7D86T,aAAc,EACd9lM,KAAMgG,EAAUrlH,UAAU8wO,UAC1Bh4O,KAAMusH,EAAUrlH,UAAUA,YAIlC4X,EAAOw/R,wBACAx/R,EAAOw/R,eACd33T,EAAKkD,qBAAoB,IAG7Bi1B,EAAOy7D,WAGXpwF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,oBAAgD,SAAUT,GACtD,MACMW,EADOzD,KACQyD,cACUW,IAAdtB,GAA2BW,EAAQi0T,eAAiB50T,GAEjE4iU,GAAiBjiU,GAGjBkiU,GAAoBliU,IAI5BF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,cAA0C,SAAU5D,GAChD,IAAIiF,EACAZ,EAAOrE,GAAW,GAGlBW,EADUN,KAAKyD,QACItC,cAEvB,IAAIzB,EACA87Q,GAAU,EAEd,OADA52Q,EAAStE,EAASstM,qBACVttM,EAAS2J,WACb,KAAKk7S,GACGnhT,EAAK4hU,UACLtlU,EAAW,IAAIqlC,GAAGplC,KAAK0P,aAAa3P,EAC/By+N,cACAzgO,KAAIg8J,GAAO/2J,GAAAA,EAAAA,SAAAA,YAAwB+2J,EAAIh5J,iBAAkB0C,EAAK4hU,WAC9D1gU,QAAOo1J,GAAOA,EAAIj3J,UACvBm4Q,GAAU,GAEd,IAAIxrL,EAAO,EACX1vF,EAAWA,EAASy+N,cAAc92N,QAAO,SAAU+Z,EAAMC,GACrD,MAAM4jT,EAAU5jT,EAAItR,UACd/L,EAASihU,EAAU71O,EAAO/tE,EAAMD,EAEtC,OADAguE,EAAO61O,EACAjhU,KAEf,KAAKugT,GACDzlT,EAASY,EAASgB,iBACd0C,EAAK4hU,UAAYpqD,IACjB97Q,EAAS6D,GAAAA,EAAAA,SAAAA,YAAwB7D,EAAQsE,EAAK4hU,UAGlDhhU,GADAtE,EAAW,IAAIqlC,GAAGplC,KAAK8B,QAAQ3C,IACb8zM,mBAAmBlyM,iBAGrC,IAFA,IAAIgqO,EAAQhrO,EAASqzM,iBAEZzxM,EAAI,EAAGA,EAAIopO,EAAMjoO,OAAQnB,IAC9B,GAAIqB,GAAAA,EAAAA,SAAAA,SAAqBqB,EAAQ0mO,EAAMppO,GAAGZ,kBAAmB,CACzDsD,EAAStE,EAASwsM,gBAAgBloM,GAClC,MAGR,MACJ,KAAKugT,GACGnhT,EAAK4hU,UACLtlU,EAAW,IAAIqlC,GAAGplC,KAAK08N,gBAAgB38N,EAClC+8N,iBACA/+N,KAAI+9T,GAAM94T,GAAAA,EAAAA,SAAAA,aAAyB84T,EAAG/6T,iBAAkB0C,EAAK4hU,WAC7D1gU,QAAOm3T,GAAMA,EAAGh5T,UACrBm4Q,GAAU,GAEd,IAAIn4Q,EAAS,EACb/C,EAAWA,EAAS+8N,iBAAiBp1N,QAAO,SAAU+Z,EAAMC,GACxD,MAAM6jT,EAAY7jT,EAAIvR,YAChB9L,EAASkhU,EAAYziU,EAAS4e,EAAMD,EAE1C,OADA3e,EAASyiU,EACFlhU,KAEf,KAAKugT,GACD,IAAI35F,EAAW,CAAC,EAAG,GACnB9rN,EAASY,EAASgB,iBACd0C,EAAK4hU,UAAYpqD,IACjB97Q,EAAS6D,GAAAA,EAAAA,SAAAA,aAAyB7D,EAAQsE,EAAK4hU,UAEnDtlU,EAAW,IAAIqlC,GAAGplC,KAAKi8N,WAAW98N,GAClC,IAASwC,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IAC/BspN,EAAS,IAAM9rN,EAAOwC,GAAG,GACzBspN,EAAS,IAAM9rN,EAAOwC,GAAG,GAE7BspN,EAAS,IAAM9rN,EAAO2D,OACtBmoN,EAAS,IAAM9rN,EAAO2D,OACtBuB,EAAStE,EAASwsM,gBAAgB0e,GAK1C,OAAO5mN,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,SAAU5D,GAC5C,MAAMI,EAAOC,KAEP6pT,GADNlqT,EAAUA,GAAW,KACOA,aAAmB4D,GAAAA,EAAAA,QAAa5D,EAAUA,EAAQmL,QAC9E,IAAIxM,EAAMurT,EAASvrT,IACnB,GAAIA,EAAK,CACL,IAAImF,EAAU1D,EAAK0D,QACnB,GAAIA,EAAS,CACT,MAAMsiU,EAAgBhmU,EAAKyD,OAC3BlF,EAAI6G,eAAiB4gU,EACrB,IAAIC,EAAgB1nU,EAAIyoB,YAExBhnB,EAAKkmU,eAAiBlmU,EAAKmmU,cAAc,CAAEN,QAASI,IAEpDnc,EAASp+S,WAAW0B,UAAYxN,EAAQ+J,MAAQ3J,EAAKyD,OAAO0F,QAAQ,CAAEE,OAAQ9K,EAAIqB,QAAQyJ,SAE1F,IAiCIwI,EAjCAu0T,EAAgBpmU,EAAKyD,OAAO7D,QAChC,GAAI4D,GAAAA,EAAAA,KAAAA,cAAsB4iU,IAAkBpmU,EAAKyD,OAAOgB,OACpDzE,EAAKyD,OAAOgB,MAAM4B,OAElB,QAAQ,GACJ,KAAK2/T,aAAyB5mB,GAAAA,GAC1BgnB,EAAgBpmU,EAAKyD,OAAOgB,MAAM4B,OAAOivB,SAOnB9xB,GAAAA,EAAAA,KAAAA,cAAsB4iU,KACxCA,EAAgBpmU,EAAKyD,OAAOgB,MAAM4B,OAAOq1B,QAE7C,MACJ,KAAKsqS,aAAyBt2T,GAAAA,EAC1B02T,EAAgBpmU,EAAKyD,OAAOgB,MAAM4B,OAAOq1B,OACzC,MACJ,KAAKsqS,aAAyBxmU,GAAAA,EAC9B,KAAKwmU,aAAyBzmB,GAAAA,EAC9B,KAAKymB,aAAyB3mB,GAAAA,EAC1B+mB,EAAgBpmU,EAAKyD,OAAOgB,MAAM4B,OAAOiK,QACzC,MACJ,KAAK01T,aAAyBn1T,GAAAA,EAC9B,KAAKm1T,aAAyB/0T,GAAAA,EAC1Bm1T,EAAgBpmU,EAAKyD,OAAOgB,MAAM4B,OAAOmvB,KAOrD,GAAI4wS,EAAcv0T,OACdA,EAASghT,GAAcuT,EAAcv0T,OAAQ7R,EAAKyD,YAEjD,CAGD,IAFA,IAAImC,EACAoJ,EAAItL,EAAQC,MAAMF,OACbtB,EAAI,EAAGA,EAAI5D,EAAI4rC,WAAW7mC,OAAQnB,IAAK,CAC5C,IAAIsC,EAAQlG,EAAI4rC,WAAWhoC,GAC3B,IAAKsC,EAAMsP,YACHtP,EAAMsK,SAAS9F,QAAQ+F,IAAM,EAAG,CAChCpJ,EAAQnB,EAAMvE,KAAK+kI,cAAcvhI,GACjC,OAIZ,GAAI3C,MAAMC,QAAQ4E,GAAQ,KAAAygU,EACtB,MAAMr5S,EAAgB,QAAXq5S,EAAGzgU,EAAM,UAAE,IAAAygU,OAAA,EAARA,EAAUl5S,WACxBtb,GAAUmb,GAASA,aAAiB4Y,GAAGhgC,MAAM2lP,KAAO,CAAC,GAAK,GAAK,CAAC,GAAK,KAG7E,MAAMr5N,EAAS,CAAC,EAAG,GACnB,GAAIrgB,EACA,GAAIu0T,EAAc5zS,OACdN,EAAO,KAAO2gS,GAAcuT,EAAc5zS,OAAQxyB,EAAKyD,SAAW,GAAKoO,EAAO,OAE7E,CACD,IAAIy0T,EAASvb,GAAsBrnT,GAAS,GAC5C,GAAI4iU,EAAQ,CACR,MAAMt5S,EAAQs5S,EAAOn5S,WACrB,GAAIH,aAAiB4Y,GAAGhgC,MAAM2lP,KAAM,CAChC,MAAMz2N,EAAO9H,EAAMs7N,eACfxzN,IACA5C,EAAO,GAAK4C,EAAK,IAAM9H,EAAM4/H,cAMjDk9J,EAAS5pT,KAAKqL,YAAW,GACzBu+S,EAAS5pT,KAAK+E,MAAM+sN,UAAU9/L,GAC9B43R,EAAS5pT,KAAK+E,MAAM0+J,YAAY3jK,EAAKkmU,gBACrCpc,EAASp0K,SAAS13G,UAAUnjB,IAAI9a,GAAAA,EAAAA,QAAAA,cAEhCxB,EAAI2B,KAAK21I,UAAUi0K,KAK/BtmT,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,SAAqC,SAAUE,GAC3C,OAAOA,aAAmBkiC,GAAGnmC,SAGjC+D,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,QAAoC,WAChC,IAAIqB,EAAS,GACT7E,EAAOC,KAIX,OAHID,EAAK0D,SAAW1D,EAAK0D,QAAQG,WAC7BgB,EAAS7E,EAAK0D,QAAQG,UAEnBgB,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,WAClC,IAAIqB,EAAS,KAEb,GADW5E,KACFyD,QAAS,CACd,MAAMnD,EAFCN,KAEeyD,QAAQtC,cAC9B,IAAKb,EAAU,OAAO,KACtBsE,EAAStE,EAASymB,YAEtB,OAAOniB,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,YAAwC,WACpC,IAAIqB,EAAS,KACT7E,EAAOC,KACP2F,EAAQ5F,EAAK0D,QAAQ0C,WACrB5C,GAAAA,EAAAA,KAAAA,WAAmBoC,KACnBA,EAAQA,EAAM5F,EAAK0D,UAEnBkC,IACAA,EAAS7E,MAAMC,QAAQ4E,GAAiBA,EAAMiD,MAAK8+B,GAAKA,EAAEk2N,WAA1Bj4P,IACnBA,EAAMi4P,WACfh5P,EAASe,EAAMi4P,SAASt9O,WAIhC,MAAMiU,EAAax0B,EAAK0D,QAAQisL,gBAKhC,OAJK9qL,GAAUzF,OAAOqB,UAAUC,eAAeC,KAAK6zB,EAAY,iBAC5D3vB,EAAS2vB,EAAWimC,aAGjB51D,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,QAAoC,WAChC,IACIqB,EADO5E,KACOyD,QAAQisL,gBAEtB5uL,MAAMC,QAAQ6D,EAAOkK,YAEjBlK,EAD2B,IAA3BA,EAAOkK,SAASzL,OACPuB,EAAOkK,SAAS,GAAG4gL,gBAGnB9qL,EAAOkK,SAASzL,OAAS,cAG1C,IAAIo7D,EAXOz+D,KAWayD,QAAQm3N,kBAKhC,IAAK,IAAIpmM,KAJL5vB,EAAO65D,WACA75D,EAAO65D,GAGG75D,EACjB,GAAIA,EAAO4vB,IAAa5vB,EAAO4vB,GAAUvqB,QACrC,OAAQrF,EAAO4vB,GAAUvqB,WACrB,KAAKk7S,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACDvgT,EAAO4vB,GAAY5vB,EAAO4vB,GAAUlzB,iBAKpD,OAAOsD,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,QAAoC,SAAUY,GAC1CnE,KAAKyD,QAAQ+rL,cAAcrrL,IAG/BZ,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,SAAUkF,GAC5BzI,KAAKyD,QACb0sL,MAAM1nL,IAGlBlF,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,WAClC,MAAME,EAAUzD,KAAKyD,QACfg7D,EAAeh7D,EAAQm3N,kBAC7Bn3N,EAAQgsL,UAAUloL,SAAQ,SAAUkB,GAC5BA,IAAQg2D,GACRh7D,EAAQ0sL,MAAM1nL,OAK1BlF,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,iBAAkD,SAAUukF,GACxD,MAAM/nF,EAAOC,KACTD,EAAKumU,QACLvmU,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6BC,EAAKwmU,mBAI9DhjU,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,iBAAkD,SAAUukF,GACxD,MAAM/nF,EAAOC,KACTD,EAAKumU,QAAUvmU,EAAKymU,kBACpBzmU,EAAK0mU,eAAe1mU,EAAKymU,iBACzBzmU,EAAKymU,gBAAkB,OAI/BjjU,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,aAA8C,SAAUu8C,GACpD,MAAM//C,EAAOC,KACb,GAAID,EAAKyD,OAAOlF,IAAImrC,OAAS3pC,GAAAA,EAAAA,KAAAA,SAA7B,CAGA,GAAIC,EAAK2mU,MAAO,CACZ,MAAM7jR,EAAK9iD,EAAK2mU,MAAM,GAAK5mR,EAAIqkC,QACzBrhC,EAAK/iD,EAAK2mU,MAAM,GAAK5mR,EAAIskC,QAC/B,GAAIvhC,EAAKA,EAAKC,EAAKA,EAAK/iD,EAAK4hN,YAAYmjE,uBACrC,OAGR,GAAI/kR,EAAKumU,OAAQ,CACb,IAAI5mU,EAASK,EAAKumU,OAAOnlU,cAAcG,iBACvCvB,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,MAAoB,CACpCu1B,MAAO31B,EAAOA,EAAO2D,OAAS,QAK1CE,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,mBAAoD,SAAUu8C,GAC7C9/C,KACR0mU,MAAQ,CAAC5mR,EAAIqkC,QAASrkC,EAAIskC,UAGnC7gF,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,eAAgD,WAC5C,MAAMxD,EAAOC,KAMP2mU,EAAe,SAAUpxS,EAAMpxB,GACjC,MAAMyiU,EAAgB,IAAIrxS,EAAK91B,YAAY8D,GAAAA,EAAAA,KAAAA,UAAkBgyB,EAAKj0B,iBAAkBvB,EAAKyD,OAAOlF,IAAI4I,IAAKnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,SAOjI,GANIg+R,EAAcvpG,eACdl5N,EAAKd,OAASujU,EAAcvpG,iBAAiBp1N,QAAO,CAACgD,EAAKoxT,IAAOpxT,EAAMoxT,EAAG3rT,aAAa,GAGvFvM,EAAKd,OAASujU,EAAcl2T,YAE5B3Q,EAAK8mU,iBAAkB,CACvB,MAAMC,EAA0B/mU,EAAK8mU,iBAAiB1lU,cACtD,GAAI2lU,IAA4BvxS,EAAM,CAClC,MAAMwxS,EAAsB,GAC5BJ,EAAaG,EAAyBC,GAClCA,EAAoB1jU,SACpBc,EAAKd,QAAU0jU,EAAoB1jU,WAanD,IAAIuB,EAAS,CACT+2C,MAAOhW,GAAGC,KAAKy9J,MAAMxnJ,QAEzB,GAAI77C,KAAKsmU,OAAQ,CACb,IAAI/lU,EAAOP,KAAKsmU,OAAOnlU,cACnBZ,aAAgBolC,GAAGplC,KAAK8B,QAZb,SAAUgO,EAASlM,GAClC,MAAM6iU,EAAmB,IAAIrhS,GAAGplC,KAAK8B,QAAQ,CAACkB,GAAAA,EAAAA,KAAAA,UAAkB8M,EAAQqjM,cAAc,GAAGpyM,iBAAkBvB,EAAKyD,OAAOlF,IAAI4I,IAAKnH,EAAKyD,OAAOlF,IAAIqB,QAAQipC,UACxJzkC,EAAK6rF,KAAOg3O,EAAiBr2T,UAC7B,IAAIL,EAAO02T,EAAiBtzH,cAAc,GAC1CvvM,EAAK8rF,UAAYtqD,GAAGplC,KAAKkQ,KAAK4vS,iBAAiB/vS,EAAKi4K,gBAAiB,EAAGj4K,EAAKi4K,gBAAgBllL,OAAQiN,EAAKk4K,QAStGy+I,CAAW1mU,EAAMqE,GAEZrE,aAAgBolC,GAAGplC,KAAKi8N,YAAcj8N,aAAgBolC,GAAGplC,KAAK08N,gBACnE0pG,EAAapmU,EAAMqE,GAEdrE,aAAgBolC,GAAGplC,KAAKmP,QACV9K,EA1ClBwF,YA0CY7J,EA1CQe,kBA8C7B,OAAOsD,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,UAA2C,WACvC,MAAMxD,EAAOC,KACb,GAAID,EAAKumU,OAAQ,CACb,IAAIY,EAAiBnnU,EAAKumU,OAAOnlU,cAAcqJ,QAC/C,GAAIzK,EAAK8mU,iBAAkB,CACvB,MAAMC,EAA0B/mU,EAAK8mU,iBAAiB1lU,cAAcqJ,QACpE08T,EAAiB,IAAIA,EAAeznU,YAAYynU,EAAe5lU,iBAAkBwlU,EAAwBvvL,aACzGuvL,EAAwB/pG,iBAAiBmqG,GACzCA,EAAiBJ,EAErB,OAAOvjU,GAAAA,EAAAA,KAAAA,QAAAA,cAA8B,IAAIoiC,GAAGnmC,QAAQ0nU,IAExD,OAAO,MAkCX3jU,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,SAA0C,SAAU0vB,GAChD,IAEI9oB,EAFApK,EAAOC,KAGX,OAAQizB,GACJ,KAAKnzB,GAAAA,EAAAA,KAAAA,QACDqK,EAAOg7S,GACP,MACJ,KAAKrlT,GAAAA,EAAAA,KAAAA,aACDqK,EAAOg7S,GACP,MACJ,KAAKrlT,GAAAA,EAAAA,KAAAA,MACDqK,EAAOg7S,GACP,MACJ,KAAKrlT,GAAAA,EAAAA,KAAAA,WACDqK,EAAOg7S,GACP,MACJ,KAAKrlT,GAAAA,EAAAA,KAAAA,cACDqK,EAAOg7S,GACP,MACJ,QACIh7S,EAAOg7S,GAIXplT,EAAKyD,OAAOlF,KACZM,QAAQwiB,IAAI,CAACrhB,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAUzxD,EAAKyD,OAAOmc,aAAajhB,MAAK,SAAU8uF,GAChF,MAAMi8N,EAAQj8N,EAAQ,GAChBhpF,EAAQgpF,EAAQ,GACtB,GAAIztF,EAAKyD,OAAOlF,IAAI0I,SAOhB,OANAjH,EAAKonU,cAAgB,IAAIpnU,EAAKyD,OAAOlF,IAAI2I,OAAOmgU,GAAGC,YAAYp0S,GAAM,SAAUxvB,GAC3E,OAAOe,EAAMozB,WAAWn0B,MAE5B1D,EAAK2F,WACL3F,EAAKonU,cAActpR,gBACnB99C,EAAKunU,UAAY,IAGjB9iU,GACAA,EAAMvE,KAAK0f,WAAWjhB,MAAK,SAAU6iB,GAqBjC,GAnBKxhB,EAAK6jF,WAAU7jF,EAAK6jF,SAAW6lO,EAAMj1P,eAEtCz0D,EAAK4hN,cACL8nG,EAAMvkG,kBAAkBnlN,EAAK4hN,aACzB5hN,EAAKwnU,sBACLxnU,EAAK6jF,SAASjjC,oBAAoB,cAAe5gD,EAAKwnU,qBACtDxnU,EAAKwnU,oBAAsB,MAE3BxnU,EAAKynU,gBACLznU,EAAK6jF,SAASjjC,oBAAoB,QAAS5gD,EAAKynU,eAChDznU,EAAKynU,cAAgB,MAErBznU,EAAK0nU,mBAAqB1nU,EAAK2nU,oBAC/B3nU,EAAK6jF,SAASjjC,oBAAoBpO,GAAWxyC,EAAK0nU,mBAClD1nU,EAAK6jF,SAASjjC,oBAAoBskQ,GAAWllT,EAAK2nU,qBAKtDz0S,EAAM,CACNlzB,EAAKwnU,oBAAsBxnU,EAAK4nU,mBAAmBznR,KAAKngD,GACxDA,EAAKynU,cAAgBznU,EAAK6nU,aAAa1nR,KAAKngD,GAC5CA,EAAK6jF,SAASh4E,iBAAiB,cAAe7L,EAAKwnU,qBAGnDxnU,EAAK6jF,SAASh4E,iBAAiB,QAAS7L,EAAKynU,eACzCznU,EAAKyD,OAAO8mF,WACZvqF,EAAK0nU,kBAAoB1nU,EAAK0qT,iBAAiBvqQ,KAAKngD,GACpDA,EAAK2nU,kBAAoB3nU,EAAK8nU,iBAAiB3nR,KAAKngD,GACpDA,EAAK6jF,SAASh4E,iBAAiB2mC,GAAWxyC,EAAK0nU,mBAC/C1nU,EAAK6jF,SAASh4E,iBAAiBq5S,GAAWllT,EAAK2nU,oBAGnD,IAAII,EAAc,CACd39T,KAAMA,EACNq5Q,cAAe,EACf1gR,UAAW,WACP,GAAI6iC,GAAG0a,OAAOv9C,UAAU2nN,aAAaztM,UAAU,IAAK,CACnCysS,EAAMrnG,sBAAsBqnG,EAAM3zP,uBAAuB94C,UAAU,GAAGymE,aAAa,SAAUhgF,GACtG,OAAI0hT,KAA2B1hT,EAAQtC,cAAc8I,WACjDk7S,KAAiC1hT,EAAQtC,cAAc8I,UAChDxG,EAEJ,OAEP,CACI4xL,aAAcA,KAI1B,OAAIt1L,EAAKyD,OAAOlF,IAAImrC,OAAS3pC,GAAAA,EAAAA,KAAAA,UAClB,OAMfyhB,IACAumT,EAAYntT,OAAS4G,EAAQY,aAE7B8Q,IAASnzB,GAAAA,EAAAA,KAAAA,YACTgoU,EAAY39T,KAAOg7S,GACnB2iB,EAAY9jD,UAAY,EACxB8jD,EAAY1jD,iBAAmB,SAAUh6Q,EAAa9J,GAClD,MAAMiuE,EAAQnkE,EAAY,GACpB0/D,EAAM1/D,EAAY,GAClBwpF,EAAY,CAAC,CAACrlB,EAAO,CAACA,EAAM,GAAIzE,EAAI,IAAKA,EAAK,CAACA,EAAI,GAAIyE,EAAM,IAAKA,IAOxE,OANIjuE,EACAA,EAASW,eAAe2yF,GAGxBtzF,EAAW,IAAIqlC,GAAGplC,KAAK8B,QAAQuxF,GAE5BtzF,IAIfP,EAAK4hN,YAAc,IAAIh8K,GAAGg8K,YAAYj4H,KAAKo+O,GAE3C/nU,EAAK2F,WAEL3F,EAAK4hN,YAAYtzM,GAAG,aAAa,SAAUyxC,GACvC//C,EAAKumU,OAASxmR,EAAIr8C,QAClB,MAAMskU,EAAc,GACdC,EAAWjoU,EAAKyD,OAAOyvB,KAC7B,GAAIlzB,EAAKkoU,WACLF,EAAYtkU,QAAU1D,EAAK4hN,YAAY8iE,eAAeu/C,mBAErD,GAAIjkU,EAAKyD,OAAO+mF,mBAChBy9O,IAAaloU,GAAAA,EAAAA,KAAAA,UAAwBkoU,IAAaloU,GAAAA,EAAAA,KAAAA,eAA4B,CAC/E,MAAMysH,EAAazsE,EAAIr8C,QAAQtC,cAAcysM,qBACvCs6H,EAAkBnoU,EACnByD,OACAgB,MACAsK,SACA5J,QAAO6J,GAAKA,aAAaiC,GAAAA,GAAYjC,aAAa6B,GAAAA,IAClDhI,MAAKmG,IACF,MAAMy9G,EAAYz9G,EAAE9O,KAAKwD,QAAQtC,cAAc0sM,oBAC/C,OAAOthF,EAAW,KAAOC,EAAU,IAAMD,EAAW,KAAOC,EAAU,MAE7E,GAAI07M,EAGA,OAFAnoU,EAAKooU,eAAeD,QACpBH,EAAYtkU,QAAUykU,GAI9BH,EAAY1zN,UAAYt0G,EAAKkoU,WAC7BloU,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,UAAwBioU,KAC7C/nU,MAEHD,EAAK4hN,YAAYtzM,GAAG,WAAW,SAAUyxC,GACrC,IAAKA,EAAIr8C,QAAQ0C,WAAY,CACzB,MAAMo/T,EAAsB6C,GAAwBroU,EAAKyD,OAAOyvB,KAAMlzB,EAAKyD,OAAO2C,YAClF25C,EAAIr8C,QAAQiC,SAASklT,GAAkB2a,IAEvCxlU,EAAKyD,OAAO8mF,UACZvqF,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,QAAsBC,EAAKwmU,kBAEnD,MAAMzjS,EAAQ,SAAUtI,GACpBz6B,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,QAAsB,CAAE2D,QAAS+2B,IACrDz6B,EAAKumU,OAAS,KACdvmU,EAAK4hN,YAAYuH,WAAU,IAE/B,GAAInpN,EAAKkoU,YAAcloU,EAAK8mU,iBAAkB,CAC1C,IAAIwB,EAAYtoU,EAAKumU,OAAOnlU,cAC5B,MAAM2lU,EAA0B/mU,EAAK8mU,iBAAiB1lU,cACtDknU,EAAY,IAAIA,EAAU5oU,YAAY4oU,EAAU/mU,iBAAkBwlU,EAAwBvvL,aAC1FuvL,EAAwB/pG,iBAAiBsrG,GACzC,MAAM7tS,EAAOz6B,EAAK8mU,iBAAiBnjU,MAAMF,OACzCg3B,EAAK90B,SAAS3F,EAAKyD,OAAO2C,YAC1Bq0B,EAAKl6B,SAAWwmU,EACZvlT,GAGA0lC,YAAW,KACP1lC,EAAQY,YAAY2V,cAAcgoB,EAAIr8C,WACvC,KAEPq/B,EAAMtI,OAEL,CACD,MAAMA,EAAOj3B,GAAAA,EAAAA,KAAAA,QAAAA,cAA8BxD,EAAKumU,QAChD,GAAIvmU,EAAKyD,OAAOyvB,OAASnzB,GAAAA,EAAAA,KAAAA,UAAuB,CAC5C,MAAM6tN,EAAQ,IACR26G,EAAsBvoU,EAAK4hN,YAC5BnwJ,SACAqwJ,kBACA7lB,WACApzL,MAAK1G,GAAKA,aAAayjC,GAAGg8K,YAAYq/F,kBAEvCsnB,GAAuBA,EAAoBnkH,cAC3CmkH,EAAoBp/G,WAAU,GAC9BjiK,YAAW,WACPqhR,EAAoBp/G,WAAU,KAC/ByE,IAEP5tN,EAAK4hN,YAAYuH,WAAU,GAC3BjiK,YAAW,IAAMnkB,EAAMtI,IAAOmzL,QAG9B7qL,EAAMtI,UAGPz6B,EAAK8mU,wBACL9mU,EAAKkoU,aACbjoU,MAEHD,EAAKwoU,yBAA2B,SAAUxpU,IA9O9B,SAAUgvD,EAAKhvD,GAC/C,GAAIgvD,EAAIu4Q,OAAQ,CACZ,MAAMkC,EAAUzpU,EAAE0+B,SAASvb,gBACrBwmS,EAAU3pT,EAAE0O,OAAO+Q,IAAIzf,EAAE0J,KAAKyZ,gBACpC,GAAIsmT,EAAQpmT,YAAcsmS,EAAQtmS,UAAW,CACzC,MAAM7hB,EAAOwtD,EAAIu4Q,OAAOnlU,cACxBZ,EAAKy4I,UAAUwvL,EAAS9f,GACxB36P,EAAI4zJ,YAAY+iE,aAAavjR,cAAc63I,UAAUwvL,EAAS9f,GAC9D,MAAMngI,EAAkB,GACxB,IAAI69F,EAEAA,EADAr4N,EAAIvqD,OAAOyvB,OAASnzB,GAAAA,EAAAA,KAAAA,QACLiuD,EAAI4zJ,YAAYgjE,cAAc,GAG9B52N,EAAI4zJ,YAAYgjE,cAEnCh/O,GAAGplC,KAAKkQ,KAAK2+L,mBAAmB7mB,EAAiB,EAAG69F,EAAc7lR,EAAKioL,QACnD7iJ,GAAGC,KAAKgjK,aAAa4/H,EAAS9f,EAClDz+H,CAAY1B,EAAiBA,EAAiBhoL,EAAKioL,QACnD49F,EAAezgP,GAAGplC,KAAKkQ,KAAKw/L,mBAAmB1nB,EAAiB,EAAGA,EAAgBllL,OAAQ9C,EAAKioL,QAC5Fz6H,EAAIvqD,OAAOyvB,OAASnzB,GAAAA,EAAAA,KAAAA,QACpBiuD,EAAI4zJ,YAAYgjE,cAAgB,CAACyB,GAGjCr4N,EAAI4zJ,YAAYgjE,cAAgByB,IAuNpBqiD,CAA4B1oU,EAAMhB,IAEtC0qT,EAAMp7S,GAAG,cAAetO,EAAKwoU,0BAE7B9e,EAAM7nG,eAAe7hN,EAAK4hN,aAE1B,IAAIh1K,EAAW5sC,EAAKyD,OAAOmpC,SAC3B,MAAM+7R,GAA8B/7R,GAAY5sC,EAAKyD,OAAO+mF,iBACtDwoO,EAAShkT,IACX,MAAMxO,EAAOwO,EAAE5N,cACf,OAAOZ,aAAgBi8N,IAAcj8N,aAAgB08N,IAUzD,GARIyrG,IACA/7R,EAAWprB,EACNY,YACAy8E,cACA15F,OAAO6tT,GACPz0T,KAAIyQ,GAAKA,EAAErL,MAAMF,UAE1BzD,EAAK4oU,YAAYh8R,GACb+7R,EAA4B,CAC5B,MAAME,EAAkB7oU,EAAK6oU,gBAC7BrnT,EAAQY,YAAY9T,GAAG,cAAc,SAAUtP,GACvCg0T,EAAOh0T,EAAE0E,UAAY1D,EAAK6oU,kBAAoBA,GAC9C7oU,EAAK6oU,gBAAgBhxS,WAAW74B,EAAE0E,aAMlD1D,EAAKunU,UAAY,UAOrC/jU,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,YAA6C,SAAUopC,GACnD,MAAM5sC,EAAOC,KACPypT,EAAQ1pT,EAAKyD,OAAOlF,IAAI2B,KAAK3B,IAKnC,GAJIyB,EAAK6oU,kBACLnf,EAAMvkG,kBAAkBnlN,EAAK6oU,iBAC7B7oU,EAAK6oU,gBAAkB,MAEvBj8R,EAAU,CACV,MAAMk8R,EAAc,GACpB,GAAIl8R,aAAoB/5B,GACpBi2T,EAAYluT,OAASgyB,EAAS1sC,KAAKuE,MAAM2d,iBAExC,GAAIrhB,MAAMC,QAAQ4rC,GACnBk8R,EAAY/5T,SAAW,IAAI2wS,GAAW9yQ,EAASruC,KAAIyQ,IAAC,IAAA+5T,EAAA,OAAU,QAAVA,EAAI/5T,EAAE9O,YAAI,IAAA6oU,OAAA,EAANA,EAAQrlU,gBAE/D,CACD,MACM8d,EADQxhB,EAAKyD,OAAOgB,MACJvE,KAAKuE,MAC3BqkU,EAAYluT,OAAS4G,EAAQY,YAEjCpiB,EAAK6oU,gBAAkB,IAAIjjS,GAAGg8K,YAAYm/F,KAAK+nB,GAC/Cpf,EAAM7nG,eAAe7hN,EAAK6oU,iBAC1B7oU,EAAK2F,aAIbnC,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,WAA4C,WACxC,IAAIxD,EAAOC,KACPD,EAAKyD,OAAOlF,MACZyB,EAAKumU,OAAS,KACVvmU,EAAK6jF,WACD7jF,EAAKwnU,sBACLxnU,EAAK6jF,SAASjjC,oBAAoB,cAAe5gD,EAAKwnU,qBACtDxnU,EAAKwnU,oBAAsB,MAE3BxnU,EAAKynU,gBACLznU,EAAK6jF,SAASjjC,oBAAoB,QAAS5gD,EAAKynU,eAChDznU,EAAKynU,cAAgB,OAG7B5oU,QAAQwiB,IAAI,CAACrhB,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAUzxD,EAAKyD,OAAOmc,aAAajhB,MAAK,SAAU8uF,GAChF,MAAMi8N,EAAQj8N,EAAQ,GAChBhpF,EAAQgpF,EAAQ,GAClBhpF,GAASzE,EAAKyD,OAAOumF,cACrBvlF,EAAM2zB,gBAENp4B,EAAK4hN,cACL8nG,EAAMvkG,kBAAkBnlN,EAAK4hN,aAC7B5hN,EAAK4hN,YAAc,MAEnB5hN,EAAKwoU,0BACL9e,EAAM56H,GAAG,cAAe9uL,EAAKwoU,8BAIrCxoU,EAAKonU,eACLpnU,EAAKonU,cAAcnpR,cAI3Bz6C,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,eAAgD,SAAUE,GACtD,MAAM1D,EAAOC,KACbD,EAAKkoU,YAAa,EAClB,MAAM/vS,EAASz0B,EAAQxD,KAAKwD,QACxBA,aAAmBuN,GAAAA,GAEnBjR,EAAK4hN,YAAYikE,eAEjBniR,EAAQe,MAAMszB,cAAcr0B,GAC5B1D,EAAK4hN,YAAYl8K,OAAOvN,IAKxBn4B,EAAK8mU,iBAAmB3uS,GAKhC30B,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,cAA+C,WAC3C,MAAMxD,EAAOC,KACb,GAAID,EAAKyD,OAAOyvB,OAASnzB,GAAAA,EAAAA,KAAAA,UACrB,MAAMd,MAAM,qDAEhB,IAAI4F,EAAS,KACb,GAAI7E,EAAK4hN,YAAa,CAClB,IAAIl+M,EAAU1D,EAAK4hN,YAAY8iE,eAC/B,GAAIhhR,EAAS,CACT,IAAI/D,EACAa,EAAOkD,EAAQtC,cAQnB,GANIZ,aAAgBolC,GAAGplC,KAAK8B,QACxB3C,EAASa,EAAKe,iBAAiB,GAE1Bf,aAAgBolC,GAAGplC,KAAKi8N,aAC7B98N,EAASa,EAAKe,kBAEd5B,EAAO2D,OAAS,EAAG,CAEnB,IAAIvB,EACAvB,aAAgBolC,GAAGplC,KAAK8B,QACxBP,EAAS/B,EAAK4hN,YAAYgjE,cAAc,GAEnCpkR,aAAgBolC,GAAGplC,KAAKi8N,aAC7B16N,EAAS/B,EAAK4hN,YAAYgjE,eAQ9B,IAWI76P,EAXAi/S,GAAuB,EAC3B,GAAIhpU,EAAK4hN,YAAY+iE,aAEjB,IADA,IAAIskD,EAAcjpU,EAAK4hN,YAAY+iE,aAAavjR,cAAcG,iBACrDY,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IAC/B,GAAIxC,EAAOwC,GAAG,IAAM8mU,EAAY,IAAMtpU,EAAOwC,GAAG,IAAM8mU,EAAY,GAAI,CAClED,GAAuB,EACvB,MASZnkU,EAAS9C,EAHiBgoB,EAAtBi/S,EAA8BjnU,EAAOuB,OAAS,EACrCvB,EAAOuB,OAAS,GAG7BvB,EAAOiH,OAAO+gB,EAAO,GAEjBvpB,aAAgBolC,GAAGplC,KAAK8B,SACxB9B,EAAKU,eAAe,CAACa,IACrB/B,EAAK4hN,YAAYijE,YAAYzjR,cAAcF,eAAea,IAG1DvB,EAAKU,eAAea,GAIxB2B,EAAQoE,YAAYtH,UAIvBR,EAAKonU,gBACVviU,EAAS7E,EAAKonU,cAAc8B,iBAEhC,OAAOrkU,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,eAAgD,SAAU0yB,GACtD,IAAIl2B,EAAOC,KACP4E,GAAS,EACb,GAAI7E,EAAK4hN,YAAa,CAClB,IAAIl+M,EAAU1D,EAAK4hN,YAAY8iE,eAC/B,GAAIhhR,EAAS,CACT,IAAI/D,EAUAwpU,EATA3oU,EAAOkD,EAAQtC,cAEfZ,aAAgBolC,GAAGplC,KAAK8B,QACxB3C,EAASa,EAAKe,iBAAiB,GACxBf,aAAgBolC,GAAGplC,KAAKi8N,aAC/B98N,EAASa,EAAKe,kBAKdf,aAAgBolC,GAAGplC,KAAK8B,QACxB6mU,EAASnpU,EAAK4hN,YAAYgjE,cAAc,GAGjCpkR,aAAgBolC,GAAGplC,KAAKi8N,aAE/B0sG,EAASnpU,EAAK4hN,YAAYgjE,eAI9B,IAAIokD,GAAuB,EAC3B,GAAIhpU,EAAK4hN,YAAY+iE,aAEjB,IADA,IAAIskD,EAAcjpU,EAAK4hN,YAAY+iE,aAAavjR,cAAcG,iBACrDY,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IAC/B,GAAIxC,EAAOwC,GAAG,IAAM8mU,EAAY,IAAMtpU,EAAOwC,GAAG,IAAM8mU,EAAY,GAAI,CAClED,GAAuB,EACvB,MAKZ,IAAIj/S,EAEAA,EADAi/S,EACQG,EAAO7lU,OAAS,EAGhB6lU,EAAO7lU,OAEnB6lU,EAAOngU,OAAO+gB,EAAO,EAAGmM,GAEpB11B,aAAgBolC,GAAGplC,KAAKi8N,WACxBj8N,EAAKU,eAAeioU,EAAQvjS,GAAGplC,KAAK2rH,eAAerpC,KAEnDtiF,EAAKU,eAAe,CAACioU,GAASvjS,GAAGplC,KAAK2rH,eAAerpC,IACrD9iF,EAAK4hN,YAAYijE,YAAYzjR,cAAcF,eAAeioU,IAI9DtkU,GAAS,QAGR7E,EAAKonU,gBACVpnU,EAAKonU,cAAcV,eAAexwS,GAClCrxB,GAAS,GAEb,OAAOA,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,KAAsC,WAClC,IAAIxD,EAAOC,KACP4E,GAAS,EAETqxB,EAAQl2B,EAAKkpU,gBAQjB,OAPIhzS,IACAl2B,EAAKunU,UAAUl/T,KAAK6tB,GACpBrxB,GAAS,GAGb7E,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6BC,EAAKwmU,kBAE/C3hU,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,KAAsC,WAClC,IAAIxD,EAAOC,KACP4E,GAAS,EASb,OAPI7E,EAAKunU,UAAUjkU,OAAS,IACxBtD,EAAK0mU,eAAe1mU,EAAKunU,UAAUvlQ,OACnCn9D,GAAS,GAGb7E,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6BC,EAAKwmU,kBAE/C3hU,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,IAAqC,WACjC,IAAIxD,EAAOC,KACPD,EAAK4hN,aAAe5hN,EAAK4hN,YAAY8iE,eACrC1kR,EAAK4hN,YAAY+jE,gBACZ3lR,EAAKonU,eACVpnU,EAAKonU,cAAcr9P,OAI3B,MAAMs+P,GAA0B,SAAUn1S,EAAMttB,GAC5C,MAAM4qF,EAAe,GACrB,OAAQt9D,GACJ,KAAKnzB,GAAAA,EAAAA,KAAAA,QACL,KAAKA,GAAAA,EAAAA,KAAAA,aACDywF,EAAanqF,OAAS,CAClBiK,QAAS1K,EACT4vB,MAAM,EACNF,OAAO,GAEX,MACJ,KAAKv1B,GAAAA,EAAAA,KAAAA,MACL,KAAKA,GAAAA,EAAAA,KAAAA,WACDywF,EAAanqF,OAAS,CAClBivB,MAAO1vB,EACP4vB,MAAM,EACNllB,SAAS,GAEb,MACJ,QACIkgF,EAAanqF,OAAS,CAClBmvB,KAAM5vB,EACN0vB,OAAO,EACPhlB,SAAS,GAGrB,OAAOkgF,GAGXhtF,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,SAA0C,WACtC,MAAMxD,EAAOC,KACb,GAAID,EAAK4hN,YAAa,CAClB,IAAIsyG,EACJ,MAAMkV,EAAcppU,EAAKyD,OAAO2C,WAChC,GAAIgjU,EAAa,KAAAC,EACb,MAAMC,EAActpU,EAAKyD,OAAOyvB,KAC1Bs9D,EAAe63O,GAAwBiB,EAAaF,GACpDtsL,EAAe+tK,GAAkBr6N,GACvC,IAAI+4O,EAAcC,EAClB,GAA+B,QAA/BH,EAAIrpU,EAAKyD,OAAO4C,OAAOumC,gBAAQ,IAAAy8R,GAA3BA,EAA6B/zS,MAAO,CACpC,GAAIt1B,EAAKyD,OAAO+mF,mBACX8+O,IAAgBvpU,GAAAA,EAAAA,KAAAA,UAAwBupU,IAAgBvpU,GAAAA,EAAAA,KAAAA,eAA4B,CACrF,MAAM0pU,EAAY5e,GAAkB,CAChCxkT,OAAQjH,OAAOmD,OAAO,GAAIiuF,EAAanqF,OAAQ,CAC3CivB,MAAOl2B,OAAOmD,OAAO,GAAIvC,EAAKyD,OAAO4C,OAAOumC,SAAStX,MAAO,CACxDkX,MAAO,IACPF,SAAU,GACVF,YAAa,CAAC,GAAI,SAI9Bo9R,EAA+B7pU,IAC3B,IAAKK,EAAKumU,QACFvmU,EAAKyD,OAAOgB,MAAMvE,KAAKuE,MACtB2d,YACAy8E,cACAtgG,KAAIyQ,GAAKA,EAAE5N,gBACX+D,QAAO29D,GAAKA,aAAal9B,GAAGplC,KAAKi8N,YAAc35J,aAAal9B,GAAGplC,KAAK08N,kBACpE9hN,MAAK0nD,IACF,MAAM2pD,EAAY3pD,EAAEgrI,oBACpB,OAAOnuM,EAAO,KAAO8sH,EAAU,IAAM9sH,EAAO,KAAO8sH,EAAU,MAEjE,OAAOg9M,GAKvB,GAAIzpU,EAAKyD,OAAOmpC,UAAY5sC,EAAKyD,OAAO+mF,iBAAkB,CACtD,MAAMi/O,EAAY5e,GAAkB,CAChCxkT,OAAQjH,OAAOmD,OAAO,GAAIiuF,EAAanqF,OAAQ,CAC3CivB,MAAOl2B,OAAOmD,OAAO,GAAIvC,EAAKyD,OAAO4C,OAAOumC,SAAStX,WAG7Di0S,EAAeA,IAAME,GAErBF,GAAgBC,KAChBtV,EAAU,WAAY,IAAAwV,EAClB,GAAwB,QAAxBA,EAAI1pU,EAAK6oU,uBAAe,IAAAa,GAApBA,EAAsBjjB,UAAW,KAAAkjB,EACjC,MAAMjN,EAAc18T,EAAK6oU,gBAAgBpiB,UAAUnkE,OAC7CmnF,GAAwC,QAA5BE,EAAAH,SAA4B,IAAAG,OAAA,EAA5BA,EAA+BjN,KAAgB6M,EAAa7M,GAC9E,GAAI+M,EACA,OAAOA,EAGf,OAAO3sL,IAIdo3K,IACDA,EAAUp3K,GAEd98I,EAAK4hN,YAAYqjE,SAASt/Q,SAASuuT,SAGlCl0T,EAAKonU,eACVpnU,EAAKonU,cAAczhU,SAAS3F,EAAKyD,OAAO2C,aAIhD5C,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,cAA+C,SAAU+3C,GACrD,MAAMv7C,EAAOC,KACTD,EAAK4hN,aACL5hN,EAAK4hN,YAAY2jE,aAAap/G,WAAW5qH,GAEzCv7C,EAAKonU,eACLpnU,EAAKonU,cAAc7rR,WAAWA,IAItC/3C,GAAAA,EAAAA,KAAAA,QAAAA,gBAAAA,UAAAA,kBAA8D,SAAU5D,GAIpE,IAHA,IAAI2b,EAAS3b,EAAQ2b,OACjByH,EAASpjB,EAAQojB,OACjBne,EAAS,IAAI9D,MAAMiiB,EAAO1f,QACrBnB,EAAI,EAAG+I,EAAMrG,EAAOvB,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC/C,IAAIsC,EAAQue,EAAO7gB,GACfiqI,EAAS,CACTltH,QAASza,EAAMpF,GACfggB,cAAe5a,EAAM2a,WAErBwqT,EAAWnlU,EAAMvE,KAAKuE,MAAM2d,YAIhC,GAHIwnT,EAASxtB,UACThwK,EAAO92H,IAAMs0T,EAASxtB,UAAU,IAEhCwtB,EAAS5uB,YAAa,CAMtB,IALA,IAAI51G,EAAWwkI,EAAS5uB,cACpBj0R,EAAcq+K,EAASjwL,iBACvB4oS,EAAY34G,EAAS64G,eACrBvpS,EAAOjQ,EAAMgd,mBAAmBhd,EAAM2Y,YACtC80S,EAAY,KACP36S,EAAI,EAAGsyT,EAAOn1T,EAAK8C,kBAAkBlU,OAAQiU,EAAIsyT,EAAMtyT,IAAK,CACjE,IAAI+5S,EAAO58S,EAAK8C,kBAAkBD,GAClC,GAAI+5S,EAAK35S,gBAAkBlT,EAAM2a,UAAW,CACxC8yS,EAAYZ,EAAKp5S,oBACjB,OAGRk0H,EAAOE,iBAAmB,GAC1BvlH,EAAYvf,SAAQ,SAAU48C,EAAY18C,GACtC,IAAIqK,EAASqzL,EAASmjD,UAAU7gP,GAC5Bs2R,EAAW54F,EAASw3F,YAAYl1R,GAChC6rI,EAAeyqJ,EAAW55O,EAC1BioF,EAAM,CACNW,IAAK+wK,EAAUr2S,GACfgX,IAAK0lC,EACLryC,OAAQA,EACRyhI,MAAOwqJ,EACP9wJ,GAAI1rI,KAAKonD,OAAOrtC,EAAO,GAAKxJ,EAAO,IAAMwhI,GACzChG,GAAI/rI,KAAKonD,OAAOrtC,EAAO,GAAKxJ,EAAO,IAAMwhI,GACzCtG,GAAIzrI,KAAKonD,OAAO72C,EAAO,GAAKwJ,EAAO,IAAMg4H,GACzC1jD,GAAIruF,KAAKonD,OAAO72C,EAAO,GAAKwJ,EAAO,IAAMg4H,IAE7C,GAAI2+K,EAAW,CACX,IAAI4X,EAAW5X,EAAUxqT,GACrBoiU,IACAz9L,EAAIa,GAAK1rI,KAAK4K,IAAIigI,EAAIa,GAAI48L,EAAStxT,YACnC6zH,EAAIkB,GAAK/rI,KAAKqa,IAAIwwH,EAAIkB,GAAIu8L,EAASpxT,YACnC2zH,EAAIY,GAAKzrI,KAAK4K,IAAIigI,EAAIY,GAAI68L,EAASxxT,YACnC+zH,EAAIx8C,GAAKruF,KAAKqa,IAAIwwH,EAAIx8C,GAAIi6O,EAASrxT,aAGvC4zH,EAAIa,IAAMb,EAAIkB,IAAMlB,EAAIY,IAAMZ,EAAIx8C,IAClCu8C,EAAOE,iBAAiBjkI,KAAKgkI,MAIzCxnI,EAAO1C,GAAKiqI,EAEhB,OAAOvnI,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,gBAAAA,UAAAA,kBAA8D,SAAUiB,GACpE,IAAII,EAAS,GACT+kU,EAAWnlU,EAAMvE,KAAKuE,MAAM2d,YAchC,OAbIwnT,EAASxtB,UACTv3S,EAAS+kU,EAASxtB,UAAU,IAE5B33S,EAAM7E,QAAQ6qB,WAAa1qB,GAAAA,EAAAA,aAAAA,UACvB8E,EAAOoE,QAAQ,KAAO,IACtBpE,GAAkB,KAElBA,EAAOoE,QAAQ,OAASpE,EAAOvB,OAAS,IACxCuB,EAASA,EAAS,SAAWJ,EAAM2Y,WAAa,gCAAkCsV,mBAAmBjuB,EAAM2a,WACvG,sDAAwDsT,mBAAmBjuB,EAAMwO,QACjF,iEAGLpO,GAGX,MAAMklU,GAAoB,SAAUx3S,GAChC,OAAO,IAAIqT,GAAGhgC,MAAMwmP,OAAO,CACvB56K,MAAO,UACPj/C,MAAOA,EAAQ,KAIjBy3S,GAAoB,SAAUz3S,GAChC,OAAO,IAAIqT,GAAGhgC,MAAMwmP,OAAO,CACvB56K,MAAO,UACPj/C,MAAOA,EAAQ,KAIjB03S,GAAiB,SAAUrkU,GACxBA,IACDA,EAAQ,IAERA,aAAiBggC,GAAGhgC,MAAM4pP,QAC1B5pP,EAAQ,CAACA,IAGb,MAAMskU,GADNtkU,EAAQA,EAAMgF,SACU,GACxB,GAAIs/T,EAAW,CACX,MAAMl9S,EAAQk9S,EAAU/8S,WACxB,IAAI6e,EACJ,GAAIhf,aAAiB4Y,GAAGhgC,MAAM6nP,aAAc,CACxCzhN,EAAchf,EAAM4gO,YAAY/kE,WAChC,MAAMhoL,EAASmsB,EAAM3rB,YACf8oU,EAAYD,EAAUz/T,QAC5B0/T,EAAU1jK,SAAS,IAAI7gI,GAAGhgC,MAAMpG,OAAO,CACnCqB,OAAQA,EACR2U,OAAQu0T,GAAkB/9R,MAE9BpmC,EAAMW,QAAQ4jU,GACd,MAAMC,EAAYF,EAAUz/T,QAC5B2/T,EAAU3jK,SAAS,IAAI7gI,GAAGhgC,MAAMpG,OAAO,CACnCqB,OAAQA,EACR2U,OAAQw0T,GAAkBh+R,MAE9BpmC,EAAMW,QAAQ6jU,GAElB,MAAM50T,EAAS00T,EAAUt8E,YAUzB,OATIp4O,IACAw2B,EAAcx2B,EAAOqzK,WACrBjjL,EAAMW,QAAQ,IAAIq/B,GAAGhgC,MAAM4pP,MAAM,CAC7Bh6O,OAAQu0T,GAAkB/9R,MAE9BpmC,EAAMW,QAAQ,IAAIq/B,GAAGhgC,MAAM4pP,MAAM,CAC7Bh6O,OAAQw0T,GAAkBh+R,OAG3BpmC,EAEX,OAAO,MAqBL+/T,GAAmB,SAAUlrS,GAC/B4vS,GAAoB1pU,KAAK85B,GACzBA,EAAKm5D,WAIHgyO,GAAsB,SAAUnrS,GAE9Br7B,OAAOqB,UAAUC,eAAeC,KAAK85B,EAAM,mBAAqBA,EAAKk9R,gBACrEl9R,EAAK90B,SAAS80B,EAAKk9R,uBAEhBl9R,EAAKk9R,gBAGV0S,GAAsB,WACxBpqU,KAAKu6N,OAjCmB,SAAU//L,GAAM,IAAA6vS,EACxC,IAAIxuD,EAAgBrhP,EAAKk9R,eAAiBl9R,EAAKk9R,gBAAkBl9R,EAAKr0B,WAOtE,OANKq0B,EAAKk9R,gBAAkBl9R,EAAK92B,MAAMF,OAAOgB,QAC1Cq3Q,EAAgBrhP,EAAKk9R,eAAiBl9R,EAAK92B,MAAMF,OAAOgB,MAAMvE,KAAKuE,MAAM2B,YAExE01Q,IACDA,EAAgBrhP,EAAKk9R,eAAiB9M,GAAkB,CAAExkT,OAAQ,IAAMo0B,IAExEj3B,GAAAA,EAAAA,KAAAA,WAAmBs4Q,GACZ,SAAU9sQ,EAAGuF,GAEhB,OAAO01T,GAAenuD,EAAc9sQ,EAAGuF,IAAIhW,KAAKqH,IAAYA,EAAMqsL,WAAWrsL,EAAMorL,aAAe,GAAK,GAAWprL,MAItF,QAApC0kU,EAAOL,GAAenuD,UAAc,IAAAwuD,OAAA,EAA7BA,EAA+B/rU,KAAKqH,IAAYA,EAAMqsL,WAAWrsL,EAAMorL,aAAe,GAAK,GAAWprL,KAkB/F2kU,CAAoBtqU,MAClCA,KAAKw6N,eAAkBx6N,KAAKu6N,OAAqB50L,GAAGnmC,QAAQw7N,oBAAoBh7N,KAAKu6N,aAAhDn2N,GAGzCb,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,SAA4C,WACxC,MAAMxD,EAAOC,KACTD,EAAKyD,OAAOlF,KACZM,QAAQwiB,IAAI,CAACrhB,EAAKyD,OAAOlF,IAAI2B,KAAKuxD,SAAUzxD,EAAKyD,OAAOgB,MAAMvE,KAAK0f,aAAajhB,MAAK,SAAU65T,GAC3F,MAAM9O,EAAQ8O,EAAU,GAClBh3S,EAAUg3S,EAAU,GACpBgS,EAAaxqU,EAAKyD,OAAOyvB,OAAS1vB,GAAAA,EAAAA,QAAAA,OAAAA,KAAAA,cAClCinU,EAAgB,CAClBznT,OAAQ,CAACxB,GACT8zK,aAAcA,GACd1vL,MAAO,MAEP5F,EAAK0qU,oBACLD,EAAc17T,SAAW/O,EAAK0qU,kBAAkB7rO,cAC5C2rO,IACAC,EAAc1nU,UAAYwnN,IAE9Bm/F,EAAMvkG,kBAAkBnlN,EAAK0qU,oBAEjC,IAAI/lU,EAAS,KACT3E,EAAKyD,OAAOlF,IAAI0I,WAChBtC,EAAS3E,EAAK0qU,mBAAqB,IAAI1qU,EAAKyD,OAAOlF,IAAI2I,OAAOmgU,GAAGsD,eAC1D7sR,SAAS0sR,GAChBxqU,EAAK0qU,kBAAoB/lU,IAGzBA,EAAS,IAAIihC,GAAGg8K,YAAYqqE,OAAOw+C,GACnCzqU,EAAK0qU,kBAAoB/lU,EACzB+kT,EAAM7nG,eAAel9M,IAEzB,IAAIimU,EAAoB,SAAUnjU,GAC9B,OAAOA,EAAI9D,MAAMF,QAErBkB,EAAO2J,GAAG,UAAU,SAAUwxB,GACtBA,EAAMp7B,SAASpB,OAAS,GACxBtD,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,eAA6B,CAAEiN,KAAMhN,EAAM+O,SAAU+wB,EAAMp7B,SAASnG,IAAIqsU,KAE5F9qS,EAAMirP,WAAWznR,OAAS,GACI,IAA1Bw8B,EAAMp7B,SAASpB,QACftD,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAEiN,KAAMhN,EAAKyD,OAAQsL,SAAU+wB,EAAMirP,WAAWxsR,IAAIqsU,QAI/G5qU,EAAK6qU,mBACLnhB,EAAMvkG,kBAAkBnlN,EAAK6qU,mBAEjC,MAAMC,EAAgB,CAClB/7T,SAAUpK,EAAOk6F,eAEjB2rO,IACAM,EAAcp+C,gBAAkBnhP,IAEpC,IAAIqiD,EAAS,IAAIhoD,GAAGg8K,YAAYh+E,OAAOknM,GACvC,GAAIN,EAAY,CACZ,IAAIO,EACJn9O,EAAOt/E,GAAG,eAAe,SAAUtP,GACA,UAA3BA,EAAEilN,gBAAgB75M,OAElB2gU,EAAkB/rU,EAAE+P,SAAS9E,KAAK,GAAGglL,kBAG7CrhG,EAAOt/E,GAAG,aAAa,SAAUtP,GACE,UAA3BA,EAAEilN,gBAAgB75M,MAEdpL,EAAE+P,SAAS9E,KAAK,GAAGglL,gBAAkB87I,GACrC/qU,EAAKyD,OAAOlF,IAAIuvD,MAAM9tD,EAAKyD,OAAOm+B,gBAAgB,2BAC9C,CAAEx3B,KAAMrK,GAAAA,EAAAA,QAAAA,WAwC5B,GAnCAC,EAAKgrU,oBAAsBhrU,EAAKgrU,qBAAuB,IAAIvoU,QAC3DmrF,EAAOt/E,GAAG,eAAe,SAAUtP,GAC/BA,EAAE+P,SAASvH,SAAQ,SAAU9D,GACzB1D,EAAKgrU,oBAAoBjsT,IAAIrb,EAASA,EAAQtC,cAAc6hD,qBAAqBr4C,eAGzFgjF,EAAOt/E,GAAG,aAAa,SAAUtP,GAC7BA,EAAE+P,SAASvH,SAAQ,SAAU9D,GACzB,MAAM80E,EAAU90E,EAAQtC,cACxB,GAAIo3E,EAAQiwG,OAAS,EAAG,CACpB,MAAMzkB,EAAYhkK,EAAKgrU,oBAAoBvsT,IAAI/a,GAC/C,GAAIsgK,EAAW,CACX,MAAMnwE,EAAYrb,EAAQv1B,qBAC1B,GAAI+gH,EAAU1gK,QAAUuwF,EAAUvwF,OAE9B,IAAK,IAAInB,EAAI,EAAGA,EAAI0xF,EAAUvwF,OAAQnB,GAAKq2E,EAAQiwG,OAAQ,CACvD,MAAMwiJ,EAAS9oU,EAAI,EACnB,GAAI0xF,EAAU1xF,KAAO6hK,EAAU7hK,IAAM0xF,EAAUo3O,KAAYjnK,EAAUinK,GAAS,CAC1Ep3O,EAAUo3O,EAAS,GAAK,EACxB,SAMpBvnU,EAAQC,MAAMF,OAAOlD,SAAWmD,EAAQC,MAAMvC,cAC9CpB,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASA,EAAQC,MAAMF,OAAQgB,MAAOzE,EAAKyD,OAAOgB,cAG5GzE,EAAK6qU,kBAAoBj9O,EACzB87N,EAAM7nG,eAAej0H,GAEjB5tF,EAAK6oU,iBACLnf,EAAMvkG,kBAAkBnlN,EAAK6oU,iBAE7B7oU,EAAKyD,OAAOmpC,SAAU,KAAAs+R,EAItB,GAHAlrU,EAAK6oU,gBAAkB,IAAIjjS,GAAGg8K,YAAYm/F,KAAK,CAC3CnmS,OAAQ4G,EAAQY,cAEW,QAA/B8oT,EAAIlrU,EAAKyD,OAAO4C,OAAOumC,gBAAQ,IAAAs+R,GAA3BA,EAA6B51S,MAAO,CACpC,MAAMm0S,EAAY5e,GAAkB,CAChCxkT,OAAQjH,OAAOmD,OAAO,CAClB+yB,MAAOl2B,OAAOmD,OAAO,GAAIvC,EAAKyD,OAAO4C,OAAOumC,SAAStX,WAGvD61S,EAAe,WAAY,IAAAC,EAC7B,OAAwB,QAAxBA,EAAIprU,EAAK6oU,uBAAe,IAAAuC,GAApBA,EAAsB3kB,UACfgjB,EAEJ,MAEXzpU,EAAK6qU,kBAAkBtlD,aAAa5/Q,SAASwlU,GAEjDzhB,EAAM7nG,eAAe7hN,EAAK6oU,iBAGzB7oU,EAAKqrU,eACNrrU,EAAKqrU,aAAe,SAAUrsU,GAC1B,MAAM6kF,EAAW6lO,EAAMj1P,cACvB,IAAI2zP,EAEA/0H,EAAQq2H,EAAM1rH,cAAch/L,GAChCopT,EAAMsB,EAAMrnG,sBAAsBhvB,GAAO,SAAUtuE,EAAUtgH,GACzD,SAAIzE,EAAKyD,OAAOgB,OAASA,IAAUzE,EAAKyD,OAAOgB,MAAMvE,KAAKuE,SAK1D,CACI6wL,aAAcA,KAIlBzxG,EAASj+E,MAAMk7I,OADfsnK,EACwB,UAEA,KAMpCsB,EAAMj1P,cAAc5oD,iBAAiB2mC,GAAWxyC,EAAKqrU,kBAKjE7nU,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,WAA8C,WAC1C,MAAMxD,EAAOC,KACb,GAAID,EAAK6qU,kBAAmB,CACxB7qU,EAAK6qU,kBAAkB1hH,WAAU,GACjCnpN,EAAK0qU,kBAAkBvhH,WAAU,GACjC,MAAMugG,EAAQ1pT,EAAK6qU,kBAAkBp5Q,SACrCi4P,EAAMj1P,cAAc7T,oBAAoBpO,GAAWxyC,EAAKqrU,cACxD3hB,EAAMvkG,kBAAkBnlN,EAAK6qU,mBAC7BnhB,EAAMvkG,kBAAkBnlN,EAAK0qU,mBAC7B1qU,EAAK6qU,kBAAoB,KACzB7qU,EAAK0qU,kBAAoB,OAIjClnU,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,oBAAuD,WACnD,IACIqB,EAAS,GASb,OAVW5E,KAEFyqU,mBAFEzqU,KAGFyqU,kBAAkB7rO,cAAcr3F,SAAQ,SAAUC,GACnD5C,EAAOwD,KAAKZ,EAAI9D,MAAMF,WAMvBoB,GAGXrB,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,oBAAuD,SAAUuL,GAC7D,IAAI/O,EAAOC,KACPD,EAAK0qU,oBACL1qU,EAAK0qU,kBAAkBnnD,UAAUziO,QACjC9gD,EAAK0qU,kBAAkBnnD,UAAU79O,OAAO32B,EAASxQ,KAAIyQ,GAAKA,EAAE9O,KAAKwD,aAIzEF,GAAAA,EAAAA,KAAAA,QAAAA,OAAAA,UAAAA,iBAAoD,SAAUuL,GAC1DA,EAAWA,GAAY,GACvB,MAAM/O,EAAOC,KACPgP,EAAmBjP,EAAK0qU,kBAAoB1qU,EAAK0qU,kBAAkB7rO,cAAgB,KACzF,GAAI5vF,EAAkB,CAClB,MAAMq8T,EAAqB,GAC3Br8T,EAAiBgtL,WAAWrxL,QAAQpD,SAAQ,SAAU86T,KAC7CvzT,EAASzL,QAAUyL,EAAS9F,QAAQq5T,IAAc,KACnDrzT,EAAiBgvB,OAAOqkS,GACxBgJ,EAAmBjjU,KAAKi6T,EAAU3+T,MAAMF,YAG5C6nU,EAAmBhoU,QACnBtD,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAEgP,SAAUu8T,MAK3E9nU,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,OAAwC,SAAU+nU,EAAaC,GAC3D,IAAIxrU,EAAOC,KAMX,GALAD,EAAK+B,OAAS,GACd/B,EAAKyrU,WAAa,GAIdzrU,EAAK0qU,kBAAmB,CACxB,IAAI37T,EAAW/O,EAAK0qU,kBAAkB7rO,cACtC7+F,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAEiN,KAAMhN,EAAKyD,OAAQC,QAASqL,EAAS0P,IAAI,KAC9F1P,EAAS+xC,QACT9gD,EAAK0qU,kBAAkBvhH,WAAU,KA+BzC3lN,GAAAA,EAAAA,KAAAA,QAAAA,KAAAA,UAAAA,eAAgD,SAAUuL,GACtD,IAAI/O,EAAOC,KACX,GAAIc,MAAMC,QAAQ+N,GAAW,CACzB,IAAI+7S,EAAa/7S,EAASxQ,KAAI,SAAUkJ,GACpC,OAAOA,EAAIvH,KAAKwD,WAEpB1D,EAAKyD,OAAOgB,MAAMvE,KAAK0f,WAAWjhB,MAAK,SAAU6iB,GAE7C,IADA,IAAIvS,EAAmBjP,EAAK0qU,kBAAoB1qU,EAAK0qU,kBAAkB7rO,cAAgB,KAC9E18F,EAAI,EAAG+I,EAAM4/S,EAAWxnT,OAAQnB,EAAI+I,EAAK/I,IAAK,CACnD,IAAImgU,EAAYxX,EAAW3oT,GACvB8M,IACAA,EAAiBgvB,OAAOqkS,GACxBtiU,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,iBAA+B,CAAE2D,QAAS4+T,EAAU3+T,MAAMF,UAElF+d,EAAQY,YAAY2V,cAAcuqS,GAClCtiU,EAAKyD,OAAO+H,QAAQzL,GAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAAS4+T,EAAU3+T,MAAMF,eAW3FD,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,MAAkC,SAAUkoU,EAAUl8T,GAClD,IAGIupB,EAHS,IAAI6M,GAAG3yB,OAAOukC,IAAI,CAC3BhoC,QAASA,IAEI81N,kBAAkBrlO,KAAKyD,QAAQtC,eAE5C08N,EAAW/kM,EAAI9gB,cAAc,qCAOjC,OANI6lN,GACAA,EAASnyN,iBAAiB,sBAAsBnE,SAAQyC,GAAQA,EAAKi0B,gBAAgB,aAGzFnF,EAAI5hB,WAAWkW,aAAa,SAAU0L,EAAI5hB,WAAWg/D,QAAU,IAAM3yE,GAAAA,EAAAA,WAE9D,IAAIihO,eACNW,kBAAkBrsM,EAAI5hB,YACtB3N,QAAQ,aAAa,SAAUof,GAC5B,IAAI27B,EAAM37B,EAAI3f,QAAQ,KAAO,EAAI2f,EAAI3f,QAAQ,KAAO,EAAI,EACxD,OAAO2f,EAAIwQ,UAAU,EAAGmrB,GAAO,OAAS37B,EAAIwQ,UAAUmrB,OAKlE/gD,GAAAA,EAAAA,KAAAA,QAAAA,UAAAA,UAAsC,WAElC,OADa,IAAIoiC,GAAG3yB,OAAOw6G,SACb0zG,cAAclhO,KAAKyD,QAAQtC,gBAG7CoC,GAAAA,EAAAA,KAAAA,SAAAA,MAAyB,SAAU5D,GAE/B,IAAIW,EAKJ,QANAX,EAAUA,GAAW,IAELqT,OAERrT,EAAQ4d,OAAS,IAAIooB,GAAG3yB,OAAOw6G,QAE/B7tH,EAAQwK,MACZ,KAAKrK,GAAAA,EAAAA,KAAAA,SACDQ,EAAW,IAAIqlC,GAAGplC,KAAKi8N,WAAW78N,EAAQyK,aAC1C,MACJ,KAAKtK,GAAAA,EAAAA,KAAAA,QACDQ,EAAW,IAAIqlC,GAAGplC,KAAK8B,QAAQ1C,EAAQyK,aACvC,MACJ,KAAKtK,GAAAA,EAAAA,KAAAA,WACDQ,EAAW,IAAIqlC,GAAGplC,KAAKsP,WAAWlQ,EAAQyK,aAC1C,MACJ,KAAKtK,GAAAA,EAAAA,KAAAA,cACDQ,EAAW,IAAIqlC,GAAGplC,KAAK08N,gBAAgBt9N,EAAQyK,aAC/C,MACJ,KAAKtK,GAAAA,EAAAA,KAAAA,aACDQ,EAAW,IAAIqlC,GAAGplC,KAAK0P,aAAatQ,EAAQyK,aAC5C,MACJ,KAAKtK,GAAAA,EAAAA,KAAAA,MACL,QACIQ,EAAW,IAAIqlC,GAAGplC,KAAKmP,MAAM/P,EAAQyK,aAG7C,OAAOzK,EAAQ4d,OAAO2jN,cAAc5gO,IAGxCiD,GAAAA,EAAAA,KAAAA,SAAAA,UAA6B,SAAU5D,GACnC,OAAO4D,GAAAA,EAAAA,KAAAA,SAAAA,MAAuB5D,IAGlC,SAAeM,GAAI,G,gFG/zTnBsD,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAW,GACrBA,EAAAA,EAAAA,KAAAA,YAAsB,WAWlBvD,KAAK0rU,eAAiB,SAAUvnU,EAAMwnU,EAAUC,GAC5C,MAAoB,iBAATznU,GACPA,EAAOA,EAAKoF,QAAQ,KAAM,OACtBqiU,GAAaznU,EAAK6E,QAAQ,MAAQ,GAAK7E,EAAK6E,QAAQ,OAAS,GAAK7E,EAAK6E,QAAQ,OAAS,KAAG7E,EAAOwnU,EAAWxnU,EAAOwnU,GACjHxnU,GAGS,kBAATA,EACAA,EAAO,OAAS,QAGpBA,GAYXnE,KAAKihG,UAAY,SAAU98D,EAAcxkC,GAGrC,IAGIksU,EAAa,oEACb3/S,EAAe5a,OAAO4a,aACtB4/S,EAAyB,WAEzB,IACIn/T,SAASC,cAAc,KACzB,MAAOqJ,GACL,OAAOA,GALc,GAU7BxE,OAAO2Z,OAAS3Z,OAAO2Z,KAAO,SAAUo9M,GAGpC,IAFA,IAAI1tN,EAAGsP,EAAO+7J,EAAI4lJ,EAAIC,EAAIxjU,EAAGtG,EAAI,EAAG+I,EAAMu9N,EAAOnlO,OAAQ8I,EAAM5K,KAAK4K,IAAKvH,EAAS,GAE3E1C,EAAI+I,GAAK,CAKZ,GAAIkB,EAJJ2O,EAAI0tN,EAAO13J,WAAW5uE,MAAQ,EAC9BkoB,EAAIo+M,EAAO13J,WAAW5uE,MAAQ,EAC9BsG,EAAIggO,EAAO13J,WAAW5uE,MAAQ,GAEX,IACf,MAAM4pU,EAIV3lJ,GAAW,EAAJrrK,IAAY,EAAOsP,GAAK,EAAK,GACpC2hT,GAAW,GAAJ3hT,IAAY,EAAO5hB,GAAK,EAAK,EACpCwjU,EAAS,GAAJxjU,EAEA4hB,EAEO5hB,IACRwjU,EAAK,IAFLD,EAAKC,EAAK,GAIdpnU,GAAUinU,EAAW9zP,OAVfj9D,GAAK,EAAK,IAUkB+wT,EAAW9zP,OAAOouG,GAAM0lJ,EAAW9zP,OAAOg0P,GAAMF,EAAW9zP,OAAOi0P,GAExG,OAAOpnU,IAIX6M,OAAOo/D,OAASp/D,OAAOo/D,KAAO,SAAU23J,GAEpC,IAAI1tN,EAAGsP,EAAO+7J,EAAI4lJ,EAAQvjU,EAAGtG,EAAI,EAAG+I,GADpCu9N,EAASA,EAAOj/N,QAAQ,MAAO,KACkBlG,OAAQuqQ,EAAQ,GAEjE,GAAI3iQ,EAAM,GAAM,EACZ,MAAM6gU,EAEV,KAAO5pU,EAAI+I,GAMP6P,GAAW,GALN+wT,EAAW7iU,QAAQw/N,EAAOzwJ,OAAO71E,QAKlB,GAJpBikL,EAAK0lJ,EAAW7iU,QAAQw/N,EAAOzwJ,OAAO71E,QAIL,EAAK,EACtCkoB,GAAW,GAAL+7J,IAAa,GAJnB4lJ,EAAKF,EAAW7iU,QAAQw/N,EAAOzwJ,OAAO71E,QAIN,EAAK,GACrCsG,GAAW,EAALujU,IAAa,EAAW,GAJzBF,EAAW7iU,QAAQw/N,EAAOzwJ,OAAO71E,MAMtC0rQ,EAAMxlQ,KAAK8jB,EAAapR,IACxBsP,GAAKwjP,EAAMxlQ,KAAK8jB,EAAa9B,IAC7B5hB,GAAKolQ,EAAMxlQ,KAAK8jB,EAAa1jB,IAEjC,OAAOolQ,EAAMtjQ,KAAK,MAGtB,IAAI2hU,EAAU,GAEVnrU,MAAMC,QAAQojC,GACd8nS,EAAU9nS,EAELlgC,EAAAA,EAAAA,WAAgBkgC,KACrB8nS,EAAU9nS,KAEd,MAAM+nS,EAAe,SAAUvwS,EAAKhT,GAChC,IAAIwjT,EAAOxjT,GAAO,GAClB,GAAIgT,aAAe76B,MAAO,CACtBqrU,GAAQ,iBACR,IAAK,IAAIjqU,EAAI,EAAGA,EAAIy5B,EAAIt4B,OAAQnB,IAC5BiqU,GAAQ,WAAaD,EAAavwS,EAAIz5B,GAAIymB,GAAO,aACrDwjT,GAAQ,wBAEP,GAAIxwS,aAAex8B,OAAQ,CAE5B,IAAK,IAAIsJ,KADT0jU,GAAQ,iBACQxwS,EAAK,CACjB,MAAM94B,EAAQ84B,EAAIlzB,GAElB,GADA0jU,GAAQ,WAAa1jU,EAAM,QACvB5F,aAAiB1D,OACjBgtU,GAAQ,OAASD,EAAarpU,EAAO8lB,GAAO,iBAC3C,CACD,IAAIyjT,EAAMC,EAAWxpU,GAGrB,GAFA84B,EAAIlzB,GAAO2jU,EAAIvpU,MACfspU,GAAQ,cAAgBC,EAAIE,MAAQ,MAC5B,KACkB,iBAAVzpU,GAAsBA,EAAMyuB,WAAW,SAC/C66S,GAAQ,YAAch7P,SAAS1+C,mBAAmB5vB,IAA1C,mBAGRspU,GAAQtpU,EAGhBspU,GAAQ,cAGhBA,GAAQ,wBAERA,GAAQxwS,EAEZ,OAAOwwS,GAGLE,EAAa,SAAUriU,GACzB,IAAIoiU,EACJ,GAAa,OAATpiU,GAAkC,iBAATA,GAAqC,iBAATA,EA6BrDoiU,EADKA,aAAejtU,OACd,GAGA,cA5BN,GAHI6K,EAAKnH,QACLmH,EAAOA,EAAKnH,QAEkB,KAA7B,GAAKmH,GAAMhB,QAAQ,KACpBgB,EAAOA,EAAKT,QAAQ,KAAM,KAAKA,QAAQ,QAASgjU,GAChDH,EAAM,cACH,CACH,IAAIlzF,EAAM,EACNlvO,IACAkvO,EAAsB,iBAATlvO,EAAoBA,EAAO,IAAI2d,OAAO3d,EAAKT,QAAUS,EAAKT,QAAQ,MAAO,IAAIA,QAAQ,KAAM,KAAKqgB,OAAS5f,EAAK4f,SAE1H5oB,MAAMk4O,GASHkzF,EADA,0CAA0CnqS,KAAKj4B,IAAS,gHAAgHi4B,KAAKj4B,GACvK,OAEA,UAVVA,EAAOkvO,EAAIj2N,WAAW1Z,QAAQ,IAAKgjU,GAE/BH,EADAlzF,EAAM,EAAI,EACJ,WAEA,UAiBtB,MAAO,CAAE,MAASkzF,EAAK,MAASpiU,IAIpC,IADA,IAAIwiU,EAAa,uBACRtqU,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAExB,IAAK,IAAIoV,KADTk1T,GAAc,OACAP,EAAQ/pU,GACd/C,OAAOqB,UAAUC,eAAeC,KAAKurU,EAAQ/pU,GAAIoV,KACjDk1T,GAAc,OAASP,EAAQ/pU,GAAGoV,GAAK,SAI/Ck1T,GAAc,QAElBA,GAAc,WAEdA,GAAc,UAGd,IAAIz8P,EAAWjT,UAAUiT,SAAS52C,UAAU,EAAG,GAC/C,IAAIozS,EACJ,IACIA,EAAM,IAAKtpQ,eAAe8M,GAAU52C,UAAU,EAAG,GAC3C,IAAM8pC,eAAe8M,GAAU52C,UAAU,EAAG,GAEtD,MAAOm6F,GACHi5M,EAAM,IAAKtpQ,eAAe,SAAS9pC,UAAU,EAAG,GAC1C,IAAM8pC,eAAe,SAAS9pC,UAAU,EAAG,GAGrD,IAAKj3B,EAAI,EAAGA,EAAI+pU,EAAQ5oU,OAAQnB,IAAK,CAEjC,IADAsqU,GAAc,OACTl1T,EAAI,EAAGA,EAAI20T,EAAQ/pU,GAAGmB,OAAQiU,IAC/B,GAAInY,OAAOqB,UAAUC,eAAeC,KAAKurU,EAAQ/pU,GAAIoV,GAAI,CACrD,IAAItN,EAAOiiU,EAAQ/pU,GAAGoV,GAEtB,MAAM80T,EAAMC,EAAWriU,IACvBA,EAAOoiU,EAAIvpU,iBACS1D,OAChBqtU,GAAc,OAASN,EAAaliU,GAAQ,SAG5CwiU,GAAc,cAAgBJ,EAAIE,MAAQ,IACtCtiU,IAAS7K,OAAOqB,UAAUC,eAAeC,KAAKsJ,EAAM,YAAc7K,OAAOqB,UAAUC,eAAeC,KAAKsJ,EAAM,aACzG7K,OAAOqB,UAAUC,eAAeC,KAAKsJ,EAAM,aAC3CwiU,GAAc,0BAA4BxiU,EAAKyiU,QAAU,KAAOziU,EAAKnH,MAAQ,SAC3E1D,OAAOqB,UAAUC,eAAeC,KAAKsJ,EAAM,aAC7CwiU,GAAc,aAAexiU,EAAK0iU,QAAU,KAAO1iU,EAAKnH,MAAQ,SAEpEyU,KAGAk1T,GAAc,KAAe,MAARxiU,EAAe,GAAKA,GAAQ,SAKjEwiU,GAAc,QAElBA,GAAc,WAEd,IAAInjU,EAAW,ojBAEXA,GADO,MAAPkjU,EACY,2FAGA,2FAEhBljU,GAAY,4BACZA,GAAY,mHACZA,GAAY,8LACZ,IAA0Bb,EACtB0qE,EAAM,CAAEy5P,UAAWhtU,EAAQitU,WAAa,QAASnmO,MAAO+lO,EAAYK,QAASltU,EAAQ4K,OAAS,IAElG,OAH0B/B,EAEH0qE,EAAV7pE,EAF2BE,QAAQ,YAAY,SAAUujU,EAAI1nU,GAAK,OAAOoD,EAAEpD,QAOhG7B,EAAAA,EAAAA,KAAAA,YAAAA,UAAAA,KAAqC,SAAU8sE,EAAUuqE,EAAMrwI,GAG3D,MAAMwiU,EADS/sU,KACUihG,UAAU25C,EAAM,CAAEoyL,SAAU,IAAMC,SAAU,IAAK1iU,MAAOA,GAAS,KAE1F,IAAIgkB,EAAO,IAAIld,KAAK,CAAC07T,GAAU,CAAE5iU,KAAM,4BACvC,GAAI2yD,UAAU2T,WACV3T,UAAU2T,WAAWliD,EAAM8hD,OACxB,CACH,IAAIjxC,EAAOzyB,SAASC,cAAc,KAClC,QAAsBxI,IAAlBg7B,EAAKy/B,SAAwB,CAE7B,IAAIxpD,EAAMuD,IAAIC,gBAAgB0V,GAC9B6Q,EAAKhS,aAAa,OAAQ/X,GAC1B+pB,EAAKhS,aAAa,WAAYijD,GAC9BjxC,EAAKz5B,MAAM21C,WAAa,SACxB3uC,SAAS+0B,KAAK70B,YAAYuyB,GAC1BA,EAAKkM,QACL3+B,SAAS+0B,KAAK+6B,YAAYr9B,MAMtC,MACA,EADoB77B,EAAAA,EAAAA,KAAAA,a,gFC/RpBA,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAW,GAErBA,EAAAA,EAAAA,KAAAA,cAAwB,SAAU09B,EAAOthC,GACrC,IAAII,EAAOC,KAQX,GANAD,EAAKD,OAAS,CACVuV,IAAK,CACDu3B,YAAa,8DAIPxoC,IAAV68B,EACA,MAAM,IAAIlxB,UAAU,iCAAkC,4BAItDhQ,EAAKkhC,MADY,mBAAVA,EACMA,EAEA,SAAU5rB,GACnB,IAAIzQ,EAASq8B,EAKb,MAJyB,SAArB5rB,EAAIuR,OAAO,EAAG,KACdhiB,GAAU6M,OAAOY,SAASN,UAE9BnN,GAAU6tB,mBAAmBpd,IAKrC1V,EAAUA,GAAW,GAErBI,EAAKmtU,UAAYvtU,EAAQ0S,UAAYZ,OAAOY,SAE5CtS,EAAKotU,yBAAsD/oU,IAAhCzE,EAAQ++H,sBAAqC/+H,EAAQ++H,qBAGpF,WACSjtH,OAAOkE,OACR,SAAW5V,GAEO,IAAIA,EAAK4V,MAAT,CACd,IAAIy3T,EACc,oBAAqBrtU,EADnCqtU,EACmD,WAAYrtU,GAAQ,aAAcstU,OADrFD,EACmG,eAAgBrtU,GAAQ,SAAUA,GAAS,WAC1I,IAEI,OADA,IAAIsR,MACG,EACT,MAAOtS,GAAK,OAAO,GAJqH,GAD9IquU,EAMgB,aAAcrtU,EAN9BqtU,EAMiD,gBAAiBrtU,EAEtE,GAAIqtU,EACA,IAAIE,EAAc,CAAC,qBAAsB,sBAAuB,6BAA8B,sBAAuB,uBAAwB,sBAAuB,uBAAwB,wBAAyB,yBACjNC,EAAa,SAAU5xS,GAAO,OAAOA,GAAOx8B,OAAOqB,UAAUgtU,cAAc9sU,KAAKi6O,SAASn6O,UAAWm7B,IACpG8xS,EAAoB/yF,YAAYqB,QAAU,SAAUpgN,GAAO,OAAOA,GAAO2xS,EAAYtkU,QAAQ7J,OAAOqB,UAAUyiB,SAASviB,KAAKi7B,KAAS,GAyB7IqI,EAAQxjC,UAAUyjC,OAAS,SAAUp7B,EAAMhG,GACvCgG,EAAO6kU,EAAc7kU,GACrBhG,EAAQ8qU,EAAe9qU,GACvB,IAAI46B,EAAWz9B,KAAK1B,IAAIuK,GACxB7I,KAAK1B,IAAIuK,GAAQ40B,EAAWA,EAAW,IAAM56B,EAAQA,GAEzDmhC,EAAQxjC,UAAkB,OAAI,SAAUqI,UAAe7I,KAAK1B,IAAIovU,EAAc7kU,KAC9Em7B,EAAQxjC,UAAUge,IAAM,SAAU3V,GAE9B,OADAA,EAAO6kU,EAAc7kU,GACd7I,KAAKqxB,IAAIxoB,GAAQ7I,KAAK1B,IAAIuK,GAAQ,MAE7Cm7B,EAAQxjC,UAAU6wB,IAAM,SAAUxoB,GAC9B,OAAO1J,OAAOqB,UAAUC,eAAeC,KAAKV,KAAK1B,IAAKovU,EAAc7kU,KAExEm7B,EAAQxjC,UAAUse,IAAM,SAAUjW,EAAMhG,GACpC7C,KAAK1B,IAAIovU,EAAc7kU,IAAS8kU,EAAe9qU,IAEnDmhC,EAAQxjC,UAAU+G,QAAU,SAAUgxB,EAAUg9J,GAC5C,IAAK,IAAI1sL,KAAQ7I,KAAK1B,IACda,OAAOqB,UAAUC,eAAeC,KAAKV,KAAK1B,IAAKuK,IAC/C0vB,EAAS73B,KAAK60L,EAASv1L,KAAK1B,IAAIuK,GAAOA,EAAM7I,OAIzDgkC,EAAQxjC,UAAUtB,KAAO,WACrB,IAAIu9F,EAAQ,GAEZ,OADAz8F,KAAKuH,SAAQ,SAAU1E,EAAOgG,GAAQ4zF,EAAMr0F,KAAKS,MAC1C+kU,EAAYnxO,IAEvBz4D,EAAQxjC,UAAU2tB,OAAS,WACvB,IAAIsuE,EAAQ,GAEZ,OADAz8F,KAAKuH,SAAQ,SAAU1E,GAAS45F,EAAMr0F,KAAKvF,MACpC+qU,EAAYnxO,IAEvBz4D,EAAQxjC,UAAU+M,QAAU,WACxB,IAAIkvF,EAAQ,GAEZ,OADAz8F,KAAKuH,SAAQ,SAAU1E,EAAOgG,GAAQ4zF,EAAMr0F,KAAK,CAACS,EAAMhG,OACjD+qU,EAAYnxO,IAEnB2wO,IAAoBppS,EAAQxjC,UAAU6sU,OAAOQ,UAAY7pS,EAAQxjC,UAAU+M,SAqF/E,IAAIgzC,EAAU,CAAC,SAAU,MAAO,OAAQ,UAAW,OAAQ,OA4B3DkvQ,EAAQjvT,UAAUgK,MAAQ,WAAc,OAAO,IAAIilT,EAAQzvT,KAAM,CAAE0hC,KAAM1hC,KAAK8tU,aA0B9EC,EAAKrtU,KAAK+uT,EAAQjvT,WAWlButU,EAAKrtU,KAAKstU,EAASxtU,WACnBwtU,EAASxtU,UAAUgK,MAAQ,WAAc,OAAO,IAAIwjU,EAAShuU,KAAK8tU,UAAW,CAAEjiT,OAAQ7rB,KAAK6rB,OAAQ2B,WAAYxtB,KAAKwtB,WAAYnjB,QAAS,IAAI25B,EAAQhkC,KAAKqK,SAAUgL,IAAKrV,KAAKqV,OAC/K24T,EAAS/3T,MAAQ,WACb,IAAI+V,EAAW,IAAIgiT,EAAS,KAAM,CAAEniT,OAAQ,EAAG2B,WAAY,KAE3D,OADAxB,EAAS7hB,KAAO,QACT6hB,GAEX,IAAIiiT,EAAmB,CAAC,IAAK,IAAK,IAAK,IAAK,KAC5CD,EAASE,SAAW,SAAU74T,EAAKwW,GAC/B,IAA0C,IAAtCoiT,EAAiBjlU,QAAQ6iB,GAAkB,MAAM,IAAIsiT,WAAW,uBACpE,OAAO,IAAIH,EAAS,KAAM,CAAEniT,OAAQA,EAAQxhB,QAAS,CAAEgI,SAAUgD,MAErEtV,EAAKikC,QAAUA,EACfjkC,EAAK0vT,QAAUA,EACf1vT,EAAKiuU,SAAWA,EAChBjuU,EAAK4V,MAAQ,SAAUq/E,EAAOpvC,GAC1B,OAAO,IAAIhnD,SAAQ,SAAUC,EAAS4W,GAClC,IAAIub,EAAU,IAAIy+R,EAAQz6N,EAAOpvC,GACjCA,EAAOA,GAAQ,GACf,IAAIv6B,EAAM,IAAIC,eACdD,EAAIO,OAAS,WACT,GAAmB,IAAfP,EAAIQ,OACJ,OAAO,IAAImiT,EAAS,KAAM,CAAEniT,OAAQR,EAAIQ,SAExC,IAAIlsB,EAAU,CAAEksB,OAAQR,EAAIQ,OAAQ2B,WAAYnC,EAAImC,WAAYnjB,SAhD1D+jU,EAgDgF/iT,EAAIgjT,yBAA2B,GA/C7HhkU,EAAU,IAAI25B,EACQoqS,EAAW7kU,QAAQ,eAAgB,KACzC4I,MAAM,SAAS5K,SAAQ,SAAUguB,GACjD,IAAIzH,EAAQyH,EAAKpjB,MAAM,KACnB1J,EAAMqlB,EAAMya,QAAQ3e,OACxB,GAAInhB,EAAK,CACL,IAAI5F,EAAQirB,EAAMxjB,KAAK,KAAKsf,OAC5Bvf,EAAQ45B,OAAOx7B,EAAK5F,OAGrBwH,IAsCK1K,EAAQ0V,IAAM,gBAAiBgW,EAAMA,EAAIijT,YAAc3uU,EAAQ0K,QAAQmU,IAAI,iBAC3E,IAlDM4vT,EACd/jU,EAiDYq3B,EAAO,aAAcrW,EAAMA,EAAIW,SAAWX,EAAItV,aAClDlX,EAAQ,IAAImvU,EAAStsS,EAAM/hC,KAGnC0rB,EAAIkC,QAAU,WAAc9X,EAAO,IAAI1F,UAAU,4BACjDsb,EAAIkjT,UAAY,WAAc94T,EAAO,IAAI1F,UAAU,4BACnDsb,EAAIje,KAAK4jB,EAAQ/C,OAAQ+C,EAAQ3b,KAAMuwC,EAAKnhB,MAChB,YAAxBzT,EAAQw9S,YAA6BnjT,EAAIk1M,iBAAkB,EAAsC,SAAxBvvM,EAAQw9S,cAA0BnjT,EAAIk1M,iBAAkB,IAChI36K,EAAKnhB,MAAS,iBAAkBpZ,GAAO+hT,IAAiB/hT,EAAIM,aAAe,QAChFqF,EAAQ3mB,QAAQ9C,SAAQ,SAAU1E,EAAOgG,GAAQwiB,EAAIK,iBAAiB7iB,EAAMhG,MAC5EwoB,EAAIgB,UAAkC,IAAtB2E,EAAQ88S,UAA4B,KAAO98S,EAAQ88S,eAG3E/tU,EAAK4V,MAAM84T,UAAW,EA3PtB,SAASf,EAAc7kU,GAEnB,GADoB,iBAATA,IAAqBA,EAAOyI,OAAOzI,IAC1C,6BAA6Bo5B,KAAKp5B,GAAS,MAAM,IAAIkH,UAAU,0CACnE,OAAOlH,EAAKulB,cAEhB,SAASu/S,EAAe9qU,GAEpB,MADqB,iBAAVA,IAAsBA,EAAQyO,OAAOzO,IACzCA,EAEX,SAAS+qU,EAAYnxO,GACjB,IAAIoxO,EAAW,CACXa,KAAM,WACF,IAAI7rU,EAAQ45F,EAAMl0D,QAClB,MAAO,CAAE04E,UAAgB78G,IAAVvB,EAAqBA,MAAOA,KAInD,OADIuqU,IAAoBS,EAASR,OAAOQ,UAAY,WAAc,OAAOA,IAClEA,EAEX,SAAS7pS,EAAQ35B,GACbrK,KAAK1B,IAAM,GACP+L,aAAmB25B,EAAW35B,EAAQ9C,SAAQ,SAAU1E,EAAOgG,GAAQ7I,KAAKikC,OAAOp7B,EAAMhG,KAAU7C,MAAiBc,MAAMC,QAAQsJ,GAAYA,EAAQ9C,SAAQ,SAAU6wG,GAAUp4G,KAAKikC,OAAOm0E,EAAO,GAAIA,EAAO,MAAOp4G,MAAiBqK,GAAWlL,OAAOwvU,oBAAoBtkU,GAAS9C,SAAQ,SAAUsB,GAAQ7I,KAAKikC,OAAOp7B,EAAMwB,EAAQxB,MAAU7I,MA0C7V,SAAS4uU,EAASltS,GACd,GAAIA,EAAKmtS,SAAY,OAAOjwU,QAAQ6W,OAAO,IAAI1F,UAAU,iBACzD2xB,EAAKmtS,UAAW,EAEpB,SAASC,EAAgB71F,GACrB,OAAO,IAAIr6O,SAAQ,SAAUC,EAAS4W,GAClCwjO,EAAOrtN,OAAS,WAAc/sB,EAAQo6O,EAAOr0O,SAC7Cq0O,EAAO1rN,QAAU,WAAc9X,EAAOwjO,EAAOhjO,WAGrD,SAAS84T,EAAsBxgT,GAC3B,IAAI0qN,EAAS,IAAI7iI,WACbl5D,EAAU4xR,EAAgB71F,GAE9B,OADAA,EAAO+4C,kBAAkBzjQ,GAClB2uB,EAcX,SAAS8xR,EAAY/kC,GACjB,GAAIA,EAAIt/R,MAAS,OAAOs/R,EAAIt/R,MAAM,GAC9B,IAAI8+B,EAAO,IAAI1d,WAAWk+Q,EAAIxvD,YAE9B,OADAhxM,EAAK3qB,IAAI,IAAIiN,WAAWk+Q,IACjBxgQ,EAAKmvB,OAGpB,SAASm1Q,IA+CL,OA9CA/tU,KAAK6uU,UAAW,EAChB7uU,KAAKivU,UAAY,SAAUvtS,GAEvB,GADA1hC,KAAK8tU,UAAYpsS,EACZA,EAEE,GAAoB,iBAATA,EACd1hC,KAAKkvU,UAAYxtS,OACd,GAAI0rS,GAAgBjuU,OAAOqB,UAAUgtU,cAAc9sU,KAAK2Q,KAAK7Q,UAAWkhC,GAC3E1hC,KAAKmvU,UAAYztS,OACd,GAAI0rS,GAAoBjuU,OAAOqB,UAAUgtU,cAAc9sU,KAAK+9H,SAASj+H,UAAWkhC,GACnF1hC,KAAKovU,cAAgB1tS,OAClB,GAAI0rS,GAAwBjuU,OAAOqB,UAAUgtU,cAAc9sU,KAAKqwB,gBAAgBvwB,UAAWkhC,GAC9F1hC,KAAKkvU,UAAYxtS,EAAKze,gBACnB,GAAImqT,GAAuBA,GAAgBG,EAAW7rS,GACzD1hC,KAAKqvU,iBAAmBL,EAAYttS,EAAKk3B,QACzC54D,KAAK8tU,UAAY,IAAIz8T,KAAK,CAACrR,KAAKqvU,uBAC7B,KAAIjC,IAAwBjuU,OAAOqB,UAAUgtU,cAAc9sU,KAAKg6O,YAAYl6O,UAAWkhC,KAAS+rS,EAAkB/rS,GAGrH,MAAM,IAAI1iC,MAAM,6BAFhBgB,KAAKqvU,iBAAmBL,EAAYttS,QAbpC1hC,KAAKkvU,UAAY,GAiBhBlvU,KAAKqK,QAAQmU,IAAI,kBACE,iBAATkjB,EACP1hC,KAAKqK,QAAQyU,IAAI,eAAgB,4BAC1B9e,KAAKmvU,WAAanvU,KAAKmvU,UAAUhlU,KACxCnK,KAAKqK,QAAQyU,IAAI,eAAgB9e,KAAKmvU,UAAUhlU,MACzCijU,GAAwBjuU,OAAOqB,UAAUgtU,cAAc9sU,KAAKqwB,gBAAgBvwB,UAAWkhC,IAC9F1hC,KAAKqK,QAAQyU,IAAI,eAAgB,qDAIzCsuT,IACAptU,KAAKuuB,KAAO,WACR,IAAIy9B,EAAW4iR,EAAS5uU,MACxB,GAAIgsD,EAAY,OAAOA,EACvB,GAAIhsD,KAAKmvU,UAAa,OAAOvwU,QAAQC,QAAQmB,KAAKmvU,WAAkB,GAAInvU,KAAKqvU,iBAAoB,OAAOzwU,QAAQC,QAAQ,IAAIwS,KAAK,CAACrR,KAAKqvU,oBAA2B,GAAIrvU,KAAKovU,cAAiB,MAAM,IAAIpwU,MAAM,wCAAiD,OAAOJ,QAAQC,QAAQ,IAAIwS,KAAK,CAACrR,KAAKkvU,cAEvSlvU,KAAK8sT,YAAc,WAAc,OAAI9sT,KAAKqvU,iBAA2BT,EAAS5uU,OAASpB,QAAQC,QAAQmB,KAAKqvU,kBAAkCrvU,KAAKuuB,OAAO7vB,KAAKqwU,KAEnK/uU,KAAKoZ,KAAO,WACR,IA5DgBmV,EAChB0qN,EACA/7L,EA0DI8O,EAAW4iR,EAAS5uU,MACxB,GAAIgsD,EAAY,OAAOA,EACvB,GAAIhsD,KAAKmvU,UAAa,OA9DN5gT,EA8D4BvuB,KAAKmvU,UA7DjDl2F,EAAS,IAAI7iI,WACbl5D,EAAU4xR,EAAgB71F,GAC9BA,EAAOg5C,WAAW1jQ,GACX2uB,EA0DgE,GAAIl9C,KAAKqvU,iBAAoB,OAAOzwU,QAAQC,QAxDvH,SAA+BorS,GAG3B,IAFA,IAAIxgQ,EAAO,IAAI1d,WAAWk+Q,GACtBr8B,EAAQ,IAAI9sQ,MAAM2oC,EAAKpmC,QAClBnB,EAAI,EAAGA,EAAIunC,EAAKpmC,OAAQnB,IAAO0rQ,EAAM1rQ,GAAKoP,OAAO4a,aAAaud,EAAKvnC,IAC5E,OAAO0rQ,EAAMtjQ,KAAK,IAoDyGglU,CAAsBtvU,KAAKqvU,mBAA0B,GAAIrvU,KAAKovU,cAAiB,MAAM,IAAIpwU,MAAM,wCAAiD,OAAOJ,QAAQC,QAAQmB,KAAKkvU,YAEnS9B,IAAoBptU,KAAKuvU,SAAW,WAAc,OAAOvvU,KAAKoZ,OAAO1a,KAAK2pC,KAC9EroC,KAAKokC,KAAO,WAAc,OAAOpkC,KAAKoZ,OAAO1a,KAAK6yB,KAAKC,QAChDxxB,KAOX,SAASyvT,EAAQz6N,EAAOr1F,GAEpB,IANqBsuB,EACjBuhT,EAKA9tS,GADJ/hC,EAAUA,GAAW,IACF+hC,KACnB,GAAIszD,aAAiBy6N,EAAS,CAC1B,GAAIz6N,EAAM65O,SAAY,MAAM,IAAI9+T,UAAU,gBAC1C/P,KAAKqV,IAAM2/E,EAAM3/E,IACjBrV,KAAKwuU,YAAcx5O,EAAMw5O,YACpB7uU,EAAQ0K,UAAWrK,KAAKqK,QAAU,IAAI25B,EAAQgxD,EAAM3qF,UACzDrK,KAAKiuB,OAAS+mE,EAAM/mE,OACpBjuB,KAAKizB,KAAO+hE,EAAM/hE,KACbyO,GAA2B,MAAnBszD,EAAM84O,YACfpsS,EAAOszD,EAAM84O,UACb94O,EAAM65O,UAAW,QAEhB7uU,KAAKqV,IAAM/D,OAAO0jF,GAM3B,GALAh1F,KAAKwuU,YAAc7uU,EAAQ6uU,aAAexuU,KAAKwuU,aAAe,QAC1D7uU,EAAQ0K,SAAYrK,KAAKqK,UAAWrK,KAAKqK,QAAU,IAAI25B,EAAQrkC,EAAQ0K,UAC3ErK,KAAKiuB,QArBgBA,EAqBStuB,EAAQsuB,QAAUjuB,KAAKiuB,QAAU,MApB3DuhT,EAAUvhT,EAAO2xB,cACbW,EAAQv3C,QAAQwmU,IAAY,EAAKA,EAAUvhT,GAoBnDjuB,KAAKizB,KAAOtzB,EAAQszB,MAAQjzB,KAAKizB,MAAQ,KACzCjzB,KAAKyvU,SAAW,MACK,QAAhBzvU,KAAKiuB,QAAoC,SAAhBjuB,KAAKiuB,SAAsByT,EAAQ,MAAM,IAAI3xB,UAAU,6CACrF/P,KAAKivU,UAAUvtS,GAGnB,SAAS2G,EAAO3G,GACZ,IAAI+0E,EAAO,IAAIgoB,SASf,OARA/8F,EAAK9X,OAAOzX,MAAM,KAAK5K,SAAQ,SAAUmoU,GACrC,GAAIA,EAAO,CACP,IAAIv9T,EAAQu9T,EAAMv9T,MAAM,KACpBtJ,EAAOsJ,EAAMo2B,QAAQh/B,QAAQ,MAAO,KACpC1G,EAAQsP,EAAM7H,KAAK,KAAKf,QAAQ,MAAO,KAC3CktG,EAAKxyE,OAAO9R,mBAAmBtpB,GAAOspB,mBAAmBtvB,QAG1D4zG,EAgBX,SAASu3N,EAAS2B,EAAUhwU,GACnBA,IAAWA,EAAU,IAC1BK,KAAKmK,KAAO,UACZnK,KAAK6rB,YAA4BznB,IAAnBzE,EAAQksB,OAAuB,IAAMlsB,EAAQksB,OAC3D7rB,KAAKkkC,GAAKlkC,KAAK6rB,QAAU,KAAO7rB,KAAK6rB,OAAS,IAC9C7rB,KAAKwtB,WAAa,eAAgB7tB,EAAUA,EAAQ6tB,WAAa,KACjExtB,KAAKqK,QAAU,IAAI25B,EAAQrkC,EAAQ0K,SACnCrK,KAAKqV,IAAM1V,EAAQ0V,KAAO,GAC1BrV,KAAKivU,UAAUU,IAlOvB,CA4QG3vU,MAGP,IAAI0R,EAAW,SAAUC,GAcrB,IAAIC,EAASjF,SAASC,cAAc,KAGpC,GAFAgF,EAAOC,KAAOF,GAETC,EAAOE,OAAQ,CAEhB,IAAMF,EAAOG,WAAYH,EAAOI,SAAW,CACvC,IAAIC,EAAW,gEAAgEC,KAAKN,EAAOC,MAI3F,GAFAD,EAAOG,SAAWE,EAAS,GAEvBA,EAAS,GAAGjJ,QAAQ,MAAQ,EAAG,CAC/B,IAAIgJ,EAAWC,EAAS,GAAGE,MAAM,KACjCP,EAAOI,SAAWA,EAAS,GAC3BJ,EAAOQ,KAAOJ,EAAS,QAEvBJ,EAAOI,SAAWC,EAAS,GAInCL,EAAOE,QAAqC,IAA3BF,EAAOG,SAAS1O,OAAeoO,OAAOY,SAASN,SAAWH,EAAOG,UAAY,KAAOH,EAAOI,UAAYJ,EAAOQ,MAAQT,EAAI3I,QAAQ4I,EAAOQ,OAAS,EAAI,IAAMR,EAAOQ,KAAO,IAG/L,OAAOR,GAiKX,IAAIg+T,EAAYrsU,EAAAA,EAAAA,KAAAA,cAAAA,UAEhBqsU,EAAUjjT,UAAY,IA5EJ,WACd,IAAIkjT,EAAS,SAAUl+T,GACnB,IAAI0D,EAAM3D,EAASC,GACnB,OAAI0D,EACOA,EAAIvD,OAGR,MAMX9R,KAAK8vU,OAAS,GACd9vU,KAAK+vU,YAAc,GAEnB/vU,KAAKgwU,GAAK,SAAUr+T,EAAKhS,GACrB,IAAIwtE,EAAO0iQ,EAAOl+T,GAElB,OAAmC,OAA5B3R,KAAKwe,IAAI2uD,EAAMxtE,IAG1BK,KAAKwe,IAAM,SAAU2uD,EAAMxtE,GACvB,GAAqC,IAAjCK,KAAKiwU,QAAQtwU,GAAS0D,OACtB,OAAO,KAEP,IAAI6sU,EAAWlwU,KAAKiwU,QAAQtwU,GAASuF,QAAO,SAAU8jD,GAClD,OAAOA,EAAEvgD,MAAQ0kE,GAAQxtE,EAAQ6sB,YAAcw8B,EAAEx8B,cAErD,OAAwB,IAApB0jT,EAAS7sU,OACF,KAEA6sU,EAAS,IAK5BlwU,KAAKiwU,QAAU,SAAUtwU,GACrB,OAAOA,EAAQwwU,SAAWnwU,KAAK+vU,YAAc/vU,KAAK8vU,QAGtD9vU,KAAKowU,OAAS,SAAUz+T,EAAKhS,GACzB,IACI0wU,EAAU,CAAE5nU,IADLonU,EAAOl+T,GACS+a,OAAQ,MAKnC,OAJI/sB,EAAQ6sB,aACR6jT,EAAQ7jT,WAAa7sB,EAAQ6sB,YAEjCxsB,KAAKiwU,QAAQtwU,GAASyI,KAAKioU,GACpBrwU,KAAKiwU,QAAQtwU,GAASK,KAAKiwU,QAAQtwU,GAAS0D,OAAS,IAGhErD,KAAKswU,UAAY,SAAU3+T,EAAKhS,GAG5B,IAFA,IAAIwtE,EAAO0iQ,EAAOl+T,GAETzP,EAAI,EAAGA,EAAIlC,KAAKiwU,QAAQtwU,GAAS0D,OAAQnB,IAC9C,GAAIlC,KAAKiwU,QAAQtwU,GAASuC,GAAGuG,MAAQ0kE,GAAQxtE,EAAQ6sB,YAAcxsB,KAAKiwU,QAAQtwU,GAASuC,GAAGsqB,WAAY,CACpGxsB,KAAKiwU,QAAQtwU,GAASoJ,OAAO7G,EAAG,GAChC,QAKZlC,KAAK4sB,UAAY,SAAUjb,EAAKhS,GAC5BA,EAAUA,GAAW,GAErB,IAAIwtE,EAAO0iQ,EAAOl+T,GACdmb,EAAQ9sB,KAAKwe,IAAI2uD,EAAMxtE,GAC3B,OAAKmtB,EAGEA,EAAMyjT,eAFF3xU,QAAQ6W,OAAO,IAAIzW,MAAM,iBAU5C4wU,EAAUY,iBAAmB,WACzB,QAAI1zQ,UAAUsa,mBACNta,UAAUsa,cAAcC,YAA2D,cAA7Cva,UAAUsa,cAAcC,WAAWxiE,SAGzEioD,UAAUsa,cAAczqB,MACnBjuD,MAAK,SAAU+xU,GACZ,QAAIA,EAAatzS,UAMpBhnB,OAAM,KACHzO,QAAQC,IAAI,8EAGb,KAOnBioU,EAAUc,cAAgB,SAAU1qQ,GAChC,IAAIjmE,EAAOC,KAEP4E,EAAiC,IAAxBohE,EAAIh9D,QAAQ,SAAuC,IAAtBg9D,EAAIh9D,QAAQ,MAClDiJ,GAAYrN,GAAUohE,EAAIx8D,MAAMzJ,EAAKD,OAAOuV,IAAIu3B,aACpD,GAAI36B,EAAU,CACV,IAAIg0D,EAAYh0D,EAAS,GACzBrN,GAAUqhE,GAAalmE,EAAKmtU,UAAUn7T,UAAyB3N,MAAb6hE,IAA2Bh0D,EAAS,IAAMlS,EAAKmtU,UAAUl7T,SAC3G,IAAIk0D,EAAQj0D,EAAS,GAAIk0D,EAAQpmE,EAAKmtU,UAAU96T,MACnC,IAAT8zD,GAAyB,KAAVA,GAAyB,MAATC,GAA2B,KAAVA,KAChDvhE,EAASA,GAAUshE,GAASC,GAGpC,OAAOvhE,GAGXgrU,EAAUe,gBAAkB,SAAU3qQ,GAClC,MAAMjmE,EAAOC,KACb,IAAIw3E,EAAgB,kBAChBC,EAAczR,EAAIx8D,MAAMguE,GAC5B,GAAIC,GAAeA,EAAYp0E,OAAS,EAAG,CACvC,IAAIq0E,EAAmB33E,EAAKmtU,UAAU1jU,MAAMguE,GAC5C,GAAIE,GAAoBA,EAAiBr0E,OAAS,EAC9C,OAAOo0E,EAAY,GAAG7tD,SAAW8tD,EAAiB,GAAG9tD,OAI7D,OAAO,GAGXgmT,EAAUgB,aAAe,SAAUv7T,GAE/B,OAAK,oBAAoB4sB,KAAK5sB,IAGvB,mBAAmB4sB,KAAK5sB,IAGnC,MAAM+5C,EAAgB,SAAUvjC,EAAQzS,EAAM/D,GAC1CrV,KAAK6rB,OAASA,EACd7rB,KAAKoZ,KAAOA,EACZpZ,KAAKqV,IAAMA,GAGf,IAAIw7T,EAAiB,SAAUl/T,EAAKm/T,GAChC,IAAIz7T,EAAM3D,EAASC,GACnB,OAAOA,EAAIpI,QAAQ8L,EAAItD,SAAU++T,IAGjCC,EAAU,SAAUp/T,GACpB,OAAOk/T,EAAel/T,EAAK,WAG3Bq/T,EAAS,SAAUr/T,GACnB,OAAOk/T,EAAel/T,EAAK,UAG3Bs/T,EAAe,SAAUt/T,EAAKhS,EAASd,EAAS4W,GAChD,IAAI1V,EAAOC,KACX2R,EAAMo/T,EAAQp/T,GAEd5R,EAAK69H,OAAOszM,UAAUv/T,EAAKhS,GAASjB,MAAK,SAAUiN,GAC/C9M,EAAQ8M,EAAK5L,EAAKoxU,iBACnB,SAAUl7T,GACLA,IAAUlW,EAAK69H,OAAOC,UAAU14D,SAChC1vD,EAAOQ,GAGPm7T,EAAS1wU,KAAKX,EAAMixU,EAAOr/T,GAAMhS,EAASd,EAAS4W,OAK3D47T,EAAgB,SAAU1/T,EAAKhS,EAASd,EAAS4W,GACjD,IAAI1V,EAAOC,KACX2R,EAAMq/T,EAAOr/T,GAEb5R,EAAK69H,OAAOszM,UAAUv/T,EAAKhS,GAASjB,MAAK,SAAUiN,GAC/C9M,EAAQ8M,EAAK5L,EAAKuxU,gBACnB,SAAUr7T,GACLA,IAAUlW,EAAK69H,OAAOC,UAAU14D,UAAYlvD,IAAUlW,EAAK69H,OAAOC,UAAUC,sBAC5EroH,EAAOQ,GAEPm7T,EAAS1wU,KAAKX,EAAMgxU,EAAQp/T,GAAMhS,EAASd,EAAS4W,OAK5D27T,EAAW,SAAUz/T,EAAKhS,EAASd,EAAS4W,GAC5C,IAAI1V,EAAOC,KAEXL,EAAQ4xU,WAAaxxU,EAAK2wU,cAAc3wU,EAAKyxU,aAAa9wU,KAAKX,EAAM4R,IAErE5R,EAAK69H,OAAO6zM,kBAAkB9/T,EAAKhS,EAASI,EAAKyxU,aAAatxR,KAAKngD,IAAOrB,MAAK,SAAUiN,GACrF9M,EAAQ8M,EAAK5L,EAAKyxU,iBACnB,SAAUv7T,GACTR,EAAOQ,OAIf25T,EAAU8B,cAAgB,SAAU//T,GAChC,OAAOA,GAGXi+T,EAAU0B,YAAc,SAAU3/T,GAC9B,OAAOk/T,EAAel/T,EAAK,UAG/Bi+T,EAAUuB,aAAe,SAAUx/T,GAC/B,OAAOk/T,EAAel/T,EAAK,WAG/Bi+T,EAAU4B,aAAe,SAAU7/T,GAG/B,OAFW3R,KAECihC,MAAMtvB,IAGtBi+T,EAAUhyM,OAAS,CACfC,UAAW,CACP8zM,KAAM,OACNxsQ,SAAU,WACVysQ,WAAY,aACZC,WAAY,aACZC,QAAS,UACTh0M,sBAAuB,2BAE3Bi0M,iBAAkB,CAAC,YAAa,aAAc,aAAc,YAAa,YAAa,gBAAiB,aAAa,cACpHC,gBAAiB,SAAUrgU,GACvB,MAAM5R,EAAOC,KACb,OAAK88D,UAAUgyB,OAIRn5E,MAAMhE,EAAK,CAAE68T,YAAa,SAC5B9vU,KAAKkxU,EAAUqC,OAAOC,oBAAoBhyR,KAAK0vR,EAAW7vU,EAAKgyU,mBAC/DrzU,MAAK,SAAUstB,GACZ,MAAO,CAAEH,OAAQG,EAASH,OAAQ2B,WAAYxB,EAASwB,eAE1DrX,OAAM,SAAUF,GACb,OAAIA,EAAM0H,UAAY5d,EAAK89H,UAAUC,sBAC1B7nH,EACJ,CAAEuX,WAAYztB,EAAK89H,UAAUg0M,eAXjCjzU,QAAQ6W,OAAO,CAAE+X,WAAYztB,EAAK89H,UAAUi0M,WAc3DZ,UAAW,SAAUv/T,EAAKhS,GACtB,OAAO,IAAIf,QAAQ,SAAUC,EAAS4W,GAClC,IAAI1V,EAAOC,KAEP2L,EAAMgB,SAASC,cAAc,OAE7BjN,EAAQ6sB,aAAe7sB,EAAQ4xU,aAC/B5lU,EAAI0yC,QAAQ8zR,kBAAmB,EAC/BxmU,EAAIwhB,YAA4C,iBAAvBxtB,EAAQ6sB,WAA0B7sB,EAAQ6sB,WAAa,aAGpF7gB,EAAIigB,OAAS,WAMT,GAJAlkB,QAAQC,IAAI,YAAcgE,EAAIgG,KAE9BhG,EAAIigB,OAASjgB,EAAI4hB,aAAUnpB,EAEvBzE,EAAQ6sB,aAAe7sB,EAAQ4xU,WAAY,CAW3C,IACI,IAAIl0Q,EAXW,SAAU1xD,GACzB,IAAI0xD,EAAS1wD,SAASC,cAAc,UAChCsmE,EAAM7V,EAAOkV,WAAW,MAK5B,OAJAlV,EAAO9qC,OAAS5mB,EAAI4mB,OACpB8qC,EAAO/qC,MAAQ3mB,EAAI2mB,MACnB4gD,EAAIC,UAAUxnE,EAAK,EAAG,GAEf0xD,EAIM4V,CAAatnE,GACX0xD,EAAOE,UAAU,aAChC1+D,EAAQ8M,GACV,MAAO5M,GACU,KAAXA,EAAEE,KACFwW,EAAO1V,EAAK89H,UAAU8zM,MAEtB9yU,EAAQ8M,SAGX9M,EAAQ8M,IAGrBA,EAAI4hB,QAAU,SAAUgmD,GAEpB7rE,QAAQC,IAAI,2BAA6BgE,EAAIgG,KAEzChG,EAAI0yC,QAAQ8zR,kBACZxmU,EAAIwhB,YAAc,KAElBxhB,EAAI4hB,aAAUnpB,EACduH,EAAI4hB,QAAU,SAAUgmD,GACpB7rE,QAAQC,IAAI,eAAiBgE,EAAIgG,KAEjC5R,EAAKiyU,gBAAgBrmU,EAAIgG,KAAKjT,MAAK,SAAUuX,GACrCtW,EAAQ4sB,qBAGa,MAAjBtW,EAAM4V,OAFVpW,EAAO1V,EAAK89H,UAAU14D,UAMlB1vD,EAAOQ,MAGhBE,MAAMV,GACT9J,EAAIigB,OAASjgB,EAAI4hB,aAAUnpB,GAG/BuH,EAAIgG,IAAMA,IAGVjK,QAAQC,IAAI,eAAiBgE,EAAIgG,KAEjChG,EAAIigB,OAASjgB,EAAI4hB,aAAUnpB,EAE3BrE,EAAKiyU,gBAAgBrmU,EAAIgG,KAAKjT,MAAK,SAAUuX,GACrCtW,EAAQ4sB,qBAGa,MAAjBtW,EAAM4V,OAFVpW,EAAO1V,EAAK89H,UAAU14D,UAKlB1vD,EAAOQ,MAGhBE,MAAMV,KAIjB,IACI9J,EAAIgG,IAAMA,EACZ,MAAO2hH,GACL5rH,QAAQC,IAAI,eAAiBgE,EAAIgG,KAEjC8D,EAAO1V,EAAK89H,UAAUg0M,cAE5B3xR,KAAK0vR,EAAUhyM,UAErB6zM,kBAAmB,SAAU9/T,EAAKhS,EAAS+sB,GACvC,OAAO,IAAI9tB,QAAQ,SAAUC,EAAS4W,GAClC,IAAI1V,EAAOC,KAEP2L,EAAMgB,SAASC,cAAc,OAE5BjN,EAAQ4xU,YACL5xU,EAAQ6sB,aACR7gB,EAAIwhB,YAAc,aAI1BxhB,EAAIigB,OAAS,WACTjgB,EAAIigB,OAASjgB,EAAI4hB,aAAUnpB,EAC3BvF,EAAQ8M,IAEZA,EAAI4hB,QAAU,SAAUgmD,GACpB7rE,QAAQC,IAAI,eAAiBgE,EAAIgG,KACjChG,EAAIigB,OAASjgB,EAAI4hB,aAAUnpB,EAE3BrE,EAAKiyU,gBAAgBrmU,EAAIgG,KAAKjT,MAAK,SAAUuX,GACrCtW,EAAQ4sB,qBAGa,MAAjBtW,EAAM4V,OAFVpW,EAAO1V,EAAK89H,UAAU14D,UAKlB1vD,EAAOQ,MAGhBE,MAAMV,IAEb9J,EAAIgG,IAAM+a,EAAO/a,IACnBuuC,KAAK0vR,EAAUhyM,WAIzBgyM,EAAUqC,OAAS,CACfjuS,QAAS,CACLouS,YAAa,eACbC,mBAAmB,uBAEvBx0M,UAAW,CACP8zM,KAAM,OACNxsQ,SAAU,WACVysQ,WAAY,cACZC,WAAY,cACZ/zM,sBAAuB,2BAE3Bw0M,iBAAkB,SAAUtmT,GACxB,IAAKA,EAASkY,GACV,MAAM,IAAIkrB,EAAcpjC,EAASH,OAAQG,EAASwB,WAAYxB,EAAS3W,KAE3E,OAAO2W,GAEXkmT,oBAAqB,SAAUK,EAAqBvmT,GAChD,MAAMjsB,EAAOC,KAEb,IAAKuyU,EACD,OAAOvmT,EAGX,IAAIsC,EAActC,EAAS3hB,QAAQmU,IAAIze,EAAKkyU,OAAOjuS,QAAQouS,aAC3D,GAAI9jT,IAA6D,IAA9CA,EAAYtlB,QAAQupU,GACnC,MAAMvzU,MAAMe,EAAKkyU,OAAOp0M,UAAUC,uBAGtC,OAAO9xG,IAKf4jT,EAAUnjT,WAAa,SAAU9a,EAAKhS,GAClC,IAAII,EAAOC,KAKX,OAHAL,EAAUA,GAAW,IACbwwU,UAAW,EAEZ,IAAIvxU,SAAQ,SAAUC,EAAS4W,GAElC,GAAI1V,EAAK4sB,UAAUqjT,GAAGr+T,EAAKhS,GACvBI,EAAK4sB,UAAUC,UAAUjb,EAAKhS,GAASjB,MAAK,SAAUouB,GAClDntB,EAAQ4xU,WAAaxxU,EAAK2wU,cAAc5jT,EAAMJ,OAAO/a,IACrD5R,EAAK69H,OAAO6zM,kBAAkB9/T,EAAKhS,EAASmtB,EAAMJ,QAAQhuB,MAAK,SAAUiN,GACrE9M,EAAQ8M,MACT,SAAUsK,GACTR,EAAOQ,SAEZE,OAAMF,GAASR,EAAOQ,SACtB,CACH,IAAI6W,EAAQ/sB,EAAK4sB,UAAUyjT,OAAOz+T,EAAKhS,GACvCmtB,EAAMyjT,eAAiB,IAAI3xU,SAAQ,SAAU4zU,EAAsBC,GAE/D,MAAMC,EAAW,SAAU/mU,EAAK+gB,GAC5BI,EAAMJ,OAASA,EAAOwzB,KAAKngD,GAC3B+sB,EAAMN,WAAa7sB,EAAQ6sB,WAE3BgmT,EAAqB,CAAE9lT,OAAQI,EAAMJ,SAErC7tB,EAAQ8M,IAGNooB,EAAU,SAAU9d,GACtBw8T,EAAoBx8T,GAEhBA,EAAM4V,OAMN9rB,EAAK4sB,UAAU2jT,UAAU3+T,EAAKhS,GAC9B8V,EAAOQ,KAOK,SAAUtW,GACtBI,EAAK2wU,cAAc/+T,IACnBhS,EAAQ4xU,YAAa,EACrBxxU,EAAK69H,OAAOszM,UAAUv/T,EAAKhS,GAASjB,MAAK,SAAUiN,GAC/C+mU,EAAS/mU,EAAK5L,EAAK2xU,iBACpB39S,IAEEh0B,EAAK6wU,aAAaj/T,GAwBnB5R,EAAK69H,OAAOszM,UAAUv/T,EAAKhS,GAASjB,MAAK,SAAUiN,GAC/C+mU,EAAS/mU,EAAK5L,EAAK2xU,kBACpB,SAAUz7T,GACLtW,EAAQ6sB,YAAcvW,IAAUlW,EAAK69H,OAAOC,UAAU8zM,MAAQ5xU,EAAKywU,oBAAsBzwU,EAAK6wU,aAAa7wU,EAAKmtU,YAAcntU,EAAKotU,oBAE/Hl3T,IAAUlW,EAAK69H,OAAOC,UAAU14D,UAAYxlE,EAAQ4sB,oBACpDwH,EAAQ9d,GAERm7T,EAAS1wU,KAAKX,EAAM4R,EAAKhS,EAAS+yU,EAAU3+S,GAGhDs9S,EAAc3wU,KAAKX,EAAM4R,EAAKhS,EAAS+yU,EAAU3+S,MAlCrDh0B,EAAKywU,oBAAsBzwU,EAAK6wU,aAAa7wU,EAAKmtU,YAAcntU,EAAKotU,oBAErE8D,EAAavwU,KAAKX,EAAM4R,EAAKhS,EAAS+yU,EAAU3+S,GAGhDh0B,EAAK69H,OAAOszM,UAAUv/T,EAAKhS,GAASjB,MAAK,SAAUiN,GAC/C+mU,EAAS/mU,EAAK5L,EAAK2xU,kBACpB,SAAUz7T,GACLtW,EAAQ6sB,YAAcvW,IAAUlW,EAAK69H,OAAOC,UAAU8zM,OAAS5xU,EAAK6wU,aAAa7wU,EAAKmtU,WAElFj3T,IAAUlW,EAAK69H,OAAOC,UAAU14D,UAAYxlE,EAAQ4sB,oBACpDwH,EAAQ9d,GAERm7T,EAAS1wU,KAAKX,EAAM4R,EAAKhS,EAAS+yU,EAAU3+S,GAGhDk9S,EAAavwU,KAAKX,EAAM4R,EAAKhS,EAAS+yU,EAAU3+S,MAyBxE4+S,CAAYhzU,WAM5BiwU,EAAUgD,WAAa,SAAUv9T,EAAK1V,EAASiV,GAC3C,MAAM7U,EAAOC,KACb,IAAIiyU,EAASt8T,MAMb,OAJIhW,EAAQ8kC,OACRwtS,EAASlyU,EAAK8yU,WAGXZ,EAAO58T,EAAK1V,GAASwW,OAAM,SAAUF,GACxC,GAAU,IAANrB,EAAS,MAAMqB,EACnB,OAAOlW,EAAK6yU,WAAWv9T,EAAK1V,EAASiV,EAAI,OAIjDg7T,EAAUiD,UAAY,SAAUx9T,EAAK1V,GACjC,IAAII,EAAOC,KAEX,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAGqB,WAAY1V,GAAsBstU,OADzF,IAAID,EACmG,eAAgBrtU,GAAQ,SAAUA,GAAS,WAC1I,IAEI,OADA,IAAIsR,MACG,EACT,MAAOtS,GAAK,OAAO,GAJqH,GAuBlJ,IAAIiyB,EAAU,IAAIy+R,QAAQp6S,EAAK1V,GAC3B0rB,EAAM,IAAIC,eACdD,EAAIO,OAAS,WACT,IAlBkBwiT,EACd/jU,EAiBA1K,EAAU,CAAEksB,OAAQR,EAAIQ,OAAQ2B,WAAYnC,EAAImC,WAAYnjB,SAlB9C+jU,EAkBoE/iT,EAAIgjT,yBAA2B,GAjBjHhkU,EAAU,IAAI25B,QACQoqS,EAAW7kU,QAAQ,eAAgB,KACzC4I,MAAM,SAAS5K,SAAQ,SAAUguB,GACjD,IAAIzH,EAAQyH,EAAKpjB,MAAM,KACnB1J,EAAMqlB,EAAMya,QAAQ3e,OACxB,GAAInhB,EAAK,CACL,IAAI5F,EAAQirB,EAAMxjB,KAAK,KAAKsf,OAC5Bvf,EAAQ45B,OAAOx7B,EAAK5F,OAGrBwH,IAQP1K,EAAQ0V,IAAM,gBAAiBgW,EAAMA,EAAIijT,YAAc3uU,EAAQ0K,QAAQmU,IAAI,iBAC3E,IAAIkjB,EAAO,aAAcrW,EAAMA,EAAIW,SAAWX,EAAItV,aAClDlX,EAAQ,IAAImvU,SAAStsS,EAAM/hC,KAE/B0rB,EAAIkC,QAAU,WAAc9X,EAAO,IAAI1F,UAAU,4BACjDsb,EAAIkjT,UAAY,WAAc94T,EAAO,IAAI1F,UAAU,4BACnDsb,EAAIje,KAAK4jB,EAAQ/C,OAAQ+C,EAAQ3b,KAAK,GACV,YAAxB2b,EAAQw9S,YACRnjT,EAAIk1M,iBAAmB5gO,EAAQ8kC,KACA,SAAxBzT,EAAQw9S,cACfnjT,EAAIk1M,iBAAkB,IAErB5gO,EAAQ8kC,MAAS,iBAAkBpZ,GAAO+hT,IAAiB/hT,EAAIM,aAAe,QACnFqF,EAAQ3mB,QAAQ9C,SAAQ,SAAU1E,EAAOgG,GAAQwiB,EAAIK,iBAAiB7iB,EAAMhG,MAC5EwoB,EAAIgB,UAAkC,IAAtB2E,EAAQ88S,UAA4B,KAAO98S,EAAQ88S,eAI3E8B,EAAUj3S,SAAW,SAAUtjB,EAAK1V,GAMhC,OAHAA,EAAUA,GAAW,IACbgsB,aAAe,MAHV3rB,KAKD2V,MAAMN,EAAK1V,IAG3BiwU,EAAUlrS,UAAY,SAAUrvB,EAAK1V,GAMjC,OAHAA,EAAUA,GAAW,IACbgsB,aAAe7rB,EAAAA,EAAAA,SAAAA,KAHVE,KAKD2V,MAAMN,EAAK1V,IAG3BiwU,EAAUkD,UAAY,SAAUz9T,EAAK1V,GAMjC,OAHAA,EAAUA,GAAW,IACbgsB,aAAe,OAHV3rB,KAKD2V,MAAMN,EAAK1V,IAI3BiwU,EAAUvhT,iBAAmB,SAAUhZ,EAAK1V,GAMxC,OAHAA,EAAUA,GAAW,IACbgsB,aAAe,QAHV3rB,KAKD2V,MAAMN,EAAK1V,IAW3BiwU,EAAUj6T,MAAQ,SAAUN,EAAK1V,GAC7B,MAAMI,EAAOC,MAEbL,EAAUA,GAAW,IAETwK,OACRxK,EAAQsuB,OAAStuB,EAAQwK,YAElBxK,EAAQwK,MAGfxK,EAAQwE,OACRxE,EAAQ+hC,KAAO/hC,EAAQwE,YAEhBxE,EAAQwE,MAGfxE,EAAQ2uB,cACR3uB,EAAQ0K,QAAU,IAAI25B,QACtBrkC,EAAQ0K,QAAQ45B,OAAO,eAAgBtkC,EAAQ2uB,oBAExC3uB,EAAQ2uB,aAGd3uB,EAAQgsB,eACThsB,EAAQgsB,aAAe,IAG3B,IAAIonT,EAAe,SAAU19T,EAAK1V,EAAS0zH,EAASvmG,GAMhD,OAAQntB,EAAQiW,cAAgB7V,EAAK6yU,WAAWv/M,EAAQ,GAAG3yH,KAAKX,EAAMsV,GAAM1V,EAASA,EAAQiW,eAAiBD,MAAM09G,EAAQ,GAAG3yH,KAAKX,EAAMsV,GAAM1V,IAC3IjB,KAAKqB,EAAKkyU,OAAOK,kBACjB5zU,KAAKqB,EAAKkyU,OAAOC,oBAAoBhyR,KAAKngD,EAAMJ,EAAQgsB,eACxDjtB,MAAK,SAAUstB,GACRc,IACAA,EAAMJ,OAAS2mG,EAAQ,GAAGnzE,KAAKngD,IAGnC,MAAMuuB,EAActC,EAAS3hB,QAAQmU,IAAIze,EAAKkyU,OAAOjuS,QAAQouS,aAC7D,GAAIzyU,EAAQi1T,SACR,OAAOh2T,QAAQC,QAAQmtB,GAS3B,MAAMgnT,EAAqC,SAAUC,GAYjD,OAAOjnT,EAASuC,OACX7vB,MAAK,SAAU6vB,GACZ,MAAM0qN,EAAS,IAAI7iI,WAEnB,OAAO,IAAIx3G,SAAQ,SAAUC,EAAS4W,GAElCwjO,EAAOrtO,iBAAiB,SAAS,WAC7BqtO,EAAO57E,QACP5nJ,EAAO,IAAIohG,aAAa,wBAG5BoiI,EAAOrtO,iBAAiB,WAAW,WAC/B/M,EAAQo6O,EAAOr0O,WAGnBq0O,EAAOg5C,WAAW1jQ,EAAM0kT,SAE7B98T,OAAM,SAAUF,GAAS,MAAMA,MAG1C,IAAIi9T,EACJ,QAAQ,GACJ,KAAKvzU,EAAQgsB,aAAa3iB,QAAQ,QAAU,EAC5C,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,aAAe,EACjD,KAAKrJ,EAAQgsB,aAAa3iB,QAAQlJ,EAAAA,EAAAA,SAAAA,MAAwB,EAEtD,OADAozU,EAAa,mBAAmBhhU,KAAKoc,GACjC4kT,GAAoC,IAAtBA,EAAW7vU,QAAkC,UAAlB6vU,EAAW,GAC7CF,EAAmCE,EAAW,IAAIx0U,MAAK,SAAU0a,GACpE,OAAQ,IAAI3H,OAAO+L,WAAaE,gBAAgBtE,EAAM,eACvDjD,OAAM,SAAUF,GAAS,MAAMA,KAE3B+V,EAAS5S,OAAO1a,MAAK,SAAUyF,GAClC,OAAQ,IAAIsN,OAAO+L,WAAaE,gBAAgBvZ,EAAM,eACvDgS,OAAM,SAAUF,GAAS,MAAMA,KAE1C,KAAKtW,EAAQgsB,aAAa3iB,QAAQ,gBAAkB,EAChD,OAAOgjB,EAAS8gS,cACpB,KAAKntT,EAAQgsB,aAAa3iB,QAAQ,UAAY,EAC9C,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,SAAW,EAC7C,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,oBAAsB,EACxD,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,iCAAmC,EACrE,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,qCAAuC,EACzE,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,6BAA+B,EACjE,KAAKrJ,EAAQgsB,aAAa3iB,QAAQ,mCAAqC,EACnE,OAAOgjB,EAASuC,OAAO7vB,MAAK,SAAU6vB,GAClC,OAAO,IAAIld,KAAK,CAACkd,GAAO,CAAEpkB,KAAMmkB,OACjCnY,OAAM,SAAUF,GAAS,MAAMA,KACtC,KAAKtW,EAAQgsB,aAAa3iB,QAAQ,aAAe,EAC7C,MAAM,IAAImqU,eAAe,2BAA6BxzU,EAAQgsB,cAClE,KAAKhsB,EAAQgsB,aAAa3iB,QAAQlJ,EAAAA,EAAAA,SAAAA,OAAyB,EACvD,OAAOksB,EAASoY,OACpB,IAA6B,IAAxBzkC,EAAQgsB,aACb,KAAKhsB,EAAQgsB,aAAa3iB,QAAQ,SAAW,EAC7C,QAEI,OADAkqU,EAAa,mBAAmBhhU,KAAKoc,GACjC4kT,GAAoC,IAAtBA,EAAW7vU,QAAkC,UAAlB6vU,EAAW,GAC7CF,EAAmCE,EAAW,IAAIx0U,MAAK,SAAU0a,GACpE,MAA4B,IAAxBzZ,EAAQgsB,aACD,CAAE5V,aAAcqD,EAAMkV,YAAaA,GAEnClV,KAEZjD,OAAM,SAAUF,GAAS,MAAMA,KAE3B+V,EAAS5S,OAAO1a,MAAK,SAAU0a,GAClC,MAA4B,IAAxBzZ,EAAQgsB,aACD,CAAE5V,aAAcqD,EAAMkV,YAAaA,GAEnClV,KAEZjD,OAAM,SAAUF,GAAS,MAAMA,SAIjDE,OAAM,SAAUF,GAEb,OAAuB,IAAnBo9G,EAAQhwH,QAAiB4S,EAAM4V,QAAyB,MAAf5V,EAAM4V,QAC/CnkB,QAAQC,IAAI,iBAAkBsO,GACvBrX,QAAQ6W,OAAOQ,KAG1Bo9G,EAAQ9qF,QACDwqS,EAAa19T,EAAK1V,EAAS0zH,EAASvmG,QAIvD,GAAI/sB,EAAK4sB,UAAUqjT,GAAG36T,EAAK1V,GACvB,OAAO,IAAIf,SAAQ,SAAUC,EAAS4W,GAClC1V,EAAK4sB,UAAUC,UAAUvX,EAAK1V,GAASjB,MAAK,SAAUouB,GAClDjuB,EAAQk0U,EAAa19T,EAAK1V,EAAS,CAACmtB,EAAMJ,aAC3CvW,OAAM,SAAUF,IACVA,EAAM4V,QAAU5V,EAAM4V,QAAU,IACjCpW,EAAOQ,GAEPpX,EAAQkB,EAAK4V,MAAMN,EAAK1V,UAKpC,IAAImtB,EAAQ/sB,EAAK4sB,UAAUyjT,OAAO/6T,EAAK1V,GACvC,OAAO,IAAIf,SAAQ,SAAUC,EAAS4W,GAClCqX,EAAMyjT,eAAiB,IAAI3xU,SAAQ,SAAU4zU,EAAsBC,GAE/Dp9T,EAAM3D,EAAS2D,GAAKxD,KAEpB,MAAMuhU,EAAY,SAAUjvU,GACxBquU,EAAqB,CAAE9lT,OAAQI,EAAMJ,SACrC7tB,EAAQsF,IAGNkvU,EAAW,SAAUp9T,GACvBlW,EAAK4sB,UAAU2jT,UAAUj7T,EAAK1V,GAE9B8yU,EAAoBx8T,GACpBR,EAAOQ,IAGPlW,EAAK2wU,cAAcr7T,GACnB09T,EAAa19T,EAAK1V,EAAS,CAACI,EAAK2xU,cAAe3xU,EAAKyxU,cAAe1kT,GAAOpuB,KAAK00U,GAAWj9T,MAAMk9T,GAE5FtzU,EAAK6wU,aAAav7T,GASftV,EAAKywU,mBAELuC,EAAa19T,EAAK1V,EAAS,CAACI,EAAK2xU,cAAe3xU,EAAKyxU,cAAe1kT,GAAOpuB,KAAK00U,GAAWj9T,MAAMk9T,GAGjGN,EAAa19T,EAAK1V,EAAUI,EAAK6wU,aAAa7wU,EAAKmtU,WAAyE,CAACntU,EAAK2xU,cAAe3xU,EAAKyxU,cAAtF,CAACzxU,EAAK2xU,cAAe3xU,EAAKuxU,YAAavxU,EAAKyxU,cAAyD1kT,GAAOpuB,KAAK00U,GAAWj9T,MAAMk9T,GAblMtzU,EAAKywU,mBAELuC,EAAa19T,EAAK1V,EAAS,CAACI,EAAKoxU,aAAcpxU,EAAKyxU,cAAe1kT,GAAOpuB,KAAK00U,GAAWj9T,MAAMk9T,GAGhGN,EAAa19T,EAAK1V,EAAUI,EAAK6wU,aAAa7wU,EAAKmtU,WAA0E,CAACntU,EAAKoxU,aAAcpxU,EAAKyxU,cAAtF,CAACzxU,EAAK2xU,cAAe3xU,EAAKoxU,aAAcpxU,EAAKyxU,cAAwD1kT,GAAOpuB,KAAK00U,GAAWj9T,MAAMk9T,MAalNvmT,EAAMyjT,eAAep6T,OAAM,SAAUF,IAC5BA,EAAM4V,QAAU5V,EAAM4V,QAAU,IACjCpW,EAAOQ,GAEPpX,EAAQkB,EAAK4V,MAAMN,EAAK1V,WAO5CiwU,EAAU0D,UAAY,SAAUj+T,EAAK1V,GACjC,MAAMI,EAAOC,KAIb,OAFAL,EAAUA,GAAW,IACbi1T,UAAW,EACZ,IAAIh2T,SAAQ,SAAUC,EAAS4W,GAClC1V,EAAK4V,MAAMN,EAAK1V,GAASjB,MAAK,SAAUstB,GACpC,MAAM8oS,EAAqB9oS,EAAS3hB,QAAQmU,IAAIze,EAAKkyU,OAAOjuS,QAAQquS,oBACpE,IAAIhiQ,EAAW,IAAI/mD,OAAO,yBAAyBpX,KAAKmD,GAAK,GAC7D,GAAIy/S,GAAsB,yBAAyB7yR,KAAK6yR,GACpD,IACIzkP,EAAW,kDAAkDn+D,KAAK4iT,GAAoB,GACxF,MAAOxhM,GACL,IACIjjD,EAAWykP,EAAmB37R,WAAW27R,EAAmBphS,YAAY,MAAQohS,EAAmB9rT,QAAQ,MAAQ,GACrH,MAAO+rT,KAGjB/oS,EAASuC,OAAO7vB,MAAK,SAAU6vB,GAC3B1vB,EAAQ,IAAIsnH,KAAK,CAAC53F,GAAO8hD,EAAU,CAAElmE,KAAM6hB,EAAS3hB,QAAQmU,IAAIze,EAAKkyU,OAAOjuS,QAAQouS,sBAGzFj8T,MAAMV,OA9uCrB,GAovCA,QADoBlS,EAAAA,EAAAA,KAAAA,e,0DC7wCpBA,EAAAA,EAAAA,GAAQA,EAAAA,EAAAA,IAAS,GAEjB,WAEI,IAAIohE,EAAgB,SAAShpC,GACzB,MAA+C,oBAAxCx8B,OAAOqB,UAAUyiB,SAASviB,KAAKi7B,IAOtC8J,EAAS,WAET,IAAI8tS,EAAW,GACXzuQ,GAAO,EACP5iE,EAAI,EAG6C,qBAAjD/C,OAAOqB,UAAUyiB,SAASviB,KAAKsc,UAAU,MACzC8nD,EAAO9nD,UAAU,GACjB9a,KAkBJ,IAdA,IAAIsxU,EAAQ,SAAS73S,GACjB,IAAK,IAAIqvB,KAAQrvB,EACTA,EAAIl7B,eAAeuqD,KAEf8Z,GAAsD,oBAA9C3lE,OAAOqB,UAAUyiB,SAASviB,KAAKi7B,EAAIqvB,IAC3CuoR,EAASvoR,GAAQvlB,EAAO8tS,EAASvoR,GAAOrvB,EAAIqvB,IAE5CuoR,EAASvoR,GAAQrvB,EAAIqvB,KAO9B9oD,EAAI8a,UAAU3Z,OAAQnB,IACzBsxU,EAAMx2T,UAAU9a,IAGpB,OAAOqxU,GAmBPE,EAAa,SAASC,EAAWvvU,EAAMwvU,GACnC,IAAIjqU,EAAO,GACX,GAAIvF,EACA,GAAIwvU,EAASv7M,UAETu7M,EAASlmU,OAAON,UAAYwmU,EAASv7M,UAAU,CAAEpyF,QAAS7hC,QASzD,CACD,IAAK,IAAIjC,EAAI,EAAGA,EAAIiC,EAAKd,OAAQnB,IAAK,CAClC,IAAIsF,EAAMrD,EAAKjC,GAEXyiE,EAAcn9D,GACdkC,EAAKtB,KAAM,gBAAeurU,EAASv0S,OAAO3M,mBAAmBjrB,EAAIpI,QAAQoI,EAAI+kC,kBAE7E7iC,EAAKtB,KAAM,gBAAeurU,EAASv0S,OAAO3M,mBAAmBjrB,OAASA,cAI9E,IAAI6B,EAAWsD,SAASC,cAAc,YACtCvD,EAAS8D,UAAYzD,EAAKY,KAAK,IAE/BqpU,EAASlmU,OAAOZ,YAAYxD,EAAS2C,QAAU3C,EAAS2C,QAAQkL,WAAa7N,EAAS6N,YAOpE,OAAtBy8T,EAASp7S,UAxFI,mBAwF4Bo7S,EAASp7S,UAClDq7S,EAAeD,GAGfD,EAAU7wU,MAAMQ,OAAS,EACzBqwU,EAAU1zS,cAAc,IAAIghB,YAAY,+BAExC0yR,EAAU1zS,cAAc,IAAIghB,YAAY,gCAGhD4yR,EAAiB,SAASD,GACtBA,EAASlmU,OAAO/B,iBAAiB,QAAQnE,SAAQ,SAAS45C,GACtDA,EAAQv1C,iBAAiB,SAAS,SAAS7M,GACvCA,EAAE+uE,kBACF/uE,EAAEoxG,iBACFwjO,EAASp7S,SAASx5B,UAU9B80U,EAAc,SAASH,EAAWjmU,GAE9BA,EAAON,UAAY,GAKnBumU,EAAU1zS,cAAc,IAAIghB,YAAY,gCAE5C8yR,EAAc,SAAS/0U,GACnB,IAEIqa,EACAjV,EAEA4vU,EACA1qT,EANAqqT,EAAY30U,EAAE0O,OAIduoH,GAHK09M,EAAU91S,aAAa,MAGb81S,EAAU91S,aAAa,iBAG1C,GAAIo4F,EAAc,CACd,IAAI29M,EAAW3zU,KAAK2zU,SACN39M,EAAag+M,QAI3B,IAFA56T,EAAOs6T,EAAU7wU,OAERQ,OAASswU,EAASh8M,UACvBk8M,EAAYH,EAAWC,EAASlmU,aAGhC,GAAI3M,MAAMC,QAAQ4yU,EAASh5T,QACvBxW,EAAOwvU,EAASh5T,OAAOwP,OAAOjlB,QAAO,SAASi8C,GAc1C,OAVkB93B,EAFdsqT,EAASM,eAEU,IAAI3qT,OAAO,IAAMlQ,EAAM,KAGvB,IAAIkQ,OAAOlQ,EAAM,KAGpC26T,EADApvQ,EAAcxjB,GACCA,EAAQ5U,MAER4U,EAEZ93B,EAAG4Y,KAAK8xS,MAEnBN,EAAWC,EAAWvvU,EAAMwvU,QAK3B,GAA+B,mBAApBA,EAASh5T,OAAuB,CAC5C,GAAIqC,WAAaA,UAAU,IACnB,CAAC,GAAI,IAAIhU,QAAQgU,UAAU,GAAGi8I,UAAY,EAC1C,OAIR06K,EAASh5T,OAAOvB,GAAM,SAASjV,GAC3BsvU,EAAWC,EAAWvvU,EAAMwvU,SAiDhDpzR,EAAU,CACNqF,KAAM,SAASjmD,GACX,IAAIm/I,EAAK9+I,KACLg2H,EAAe,CAAE29M,SAAU,MAC/B39M,EAAa29M,SAAWluS,EAAO,GAAIuwF,EAAa4qL,SAAUjhT,GAE1Dm/I,EAAG1xH,aAAa,gBAAgB,GAEhC,IAAIumT,EAAW39M,EAAa29M,SAW5B,OATA70L,EAAGn+F,oBAAoB,QAASmzR,GAChCh1L,EAAGlzI,iBAAiB,QAASkoU,GAEzBh1L,EAAGt9F,WAAWxpC,cAAc,oBAC5B8mI,EAAGt9F,WAAWxpC,cAAc,mBAAmBpM,iBAAiB,SAAS,SAAS7M,GAC9E80U,EAAY/0L,EAAI60L,EAASlmU,WAI1BqxI,GAGXphE,OAAQ,SAASw2P,EAAgBr8H,GAK7B,OAJmB73M,KAAK49B,aAAa,kBAEjC59B,KAAK2zU,SAAWluS,EAAOzlC,KAAK2zU,SAAU97H,IAEnC73M,MAGX6gD,MAAO,SAASlhD,GAKZ,OAJmBK,KAAK49B,aAAa,iBAEjCi2S,EAAY7zU,KAAMA,KAAK2zU,SAASlmU,QAE7BzN,MAGX6hJ,QAAS,WAQL,OAPmB7hJ,KAAK49B,aAAa,kBAEjCi2S,EAAY7zU,KAAMA,KAAK2zU,SAASlmU,QAChCzN,KAAKi+B,gBAAgB,gBACrBj+B,KAAK2gD,oBAAoB,QAASmzR,IAG/B9zU,OAInBuD,EAAAA,EAAAA,GAAAA,aAAqB,SAAU0qB,GAC3B,OAAIsyB,EAAQtyB,GACDsyB,EAAQtyB,GAAQ7d,MAAMpQ,KAAMc,MAAMN,UAAUmK,MAAMjK,KAAKsc,UAAW,IAChD,iBAAXiR,GAAwBA,OAAnC,GACHjuB,KAAK2zU,SAAW32T,UAAU,GACnBujC,EAAQqF,KAAKx1C,MAAMpQ,KAAMgd,aAzR5C,CA6RGzZ,EAAAA,GAEH,MACA,EADqBA,EAAAA,EAAAA,GAAAA,c,orCClRrB,IAWA4wU,EAAA,IAAA3xU,QAAA4xU,EAAA,IAAA5xU,QAAA6xU,EAAA,IAAA7xU,QAAA8xU,EAAA,IAAA9xU,QAAA+xU,EAAA,IAAA/xU,QAAAgyU,EAAA,IAAAhyU,QAAAiyU,EAAA,IAAAjyU,QAAAkyU,EAAA,IAAAlyU,QAAAmyU,EAAA,IAAAnyU,QAAAoyU,EAAA,IAAApyU,QAAAqyU,EAAA,IAAAryU,QAAAsyU,EAAA,IAAAtyU,QAAAuyU,EAAA,IAAAvyU,QAEe,MAAMwyU,UAAmB74R,YA2BpC18C,YAAYw1U,EAAQ9qU,EAAMxK,GACtBC,QAAQ+C,EAAA,KAAAwxU,EAAA,CAAAvxU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAyxU,EAAA,CAAAxxU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA0xU,EAAA,CAAAzxU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA2xU,EAAA,CAAA1xU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA4xU,EAAA,CAAA3xU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA6xU,EAAA,CAAA5xU,UAAA,EAAAC,MAtBK,KAAEF,EAAA,KAAA8xU,EAAA,CAAA7xU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAA+xU,EAAA,CAAA9xU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAgyU,EAAA,CAAA/xU,UAAA,EAAAC,WAAA,IAAAF,EAAA,KAAAiyU,EAAA,CAAAhyU,UAAA,EAAAC,MAIA,IAACF,EAAA,KAAAkyU,EAAA,CAAAjyU,UAAA,EAAAC,MACA,KAAEF,EAAA,KAAAmyU,EAAA,CAAAlyU,UAAA,EAAAC,WAAA,IAAAhD,EAAA,qBAEN,IAAE8C,EAAA,KAAAoyU,EAAA,CAAAnyU,UAAA,EAAAC,MAEV,KAAEhD,EAAA,kBACG,IAAIq1U,OAAOC,YAAYt1U,EAAA,yBAChB,IAAIq1U,OAAOE,iBAAiB,YAAUv1U,EAAA,uBACxC,IAAIq1U,OAAOE,iBAAiB,UAAQv1U,EAAA,qBACtC,GAACA,EAAA,mBACJ,GAAKA,EAAA,yBACC,GAAKA,EAAA,6BAAAA,EAAA,mBAEV,CAAEw1U,eAAgB,qBAAoBx1U,EAAA,iBACzC,GAAKA,EAAA,sBACC,MAIbmD,EAAAhD,KAAIm0U,EAAYc,GAChBjyU,EAAAhD,KAAI+0U,EAAS5qU,GACbpH,EAAA/C,KAAIm0U,GAAUmB,YAAYC,UAAU,WAAWlyU,OAAS,EAAIrD,KAAKw1U,kBAAoBzyU,EAAA/C,KAAIm0U,GAAUmB,YAAYC,UAAU,WAAW,GAAKxyU,EAAA/C,KAAIm0U,GAAUmB,YAAY16T,IAAI5a,KAAKw1U,mBAC5KzyU,EAAA/C,KAAIm0U,GAAUmB,YAAYC,UAAU,SAASlyU,OAAS,EAAIrD,KAAKy1U,gBAAkB1yU,EAAA/C,KAAIm0U,GAAUmB,YAAYC,UAAU,SAAS,GAAKxyU,EAAA/C,KAAIm0U,GAAUmB,YAAY16T,IAAI5a,KAAKy1U,iBACtKzyU,EAAAhD,KAAIo0U,EAAiBz0U,MAAAA,GAAAA,EAASmsC,aAAensC,EAAQmsC,uBAAuBopS,OAAOQ,MAC/E/1U,EAAQmsC,YAAcopS,OAAOQ,MAAMC,oBAAmBh2U,MAAAA,OAAO,EAAPA,EAASmsC,cAAe,uBAClF9oC,EAAAhD,KAAIq0U,OAA0CjwU,KAAzBzE,MAAAA,OAAO,EAAPA,EAASosC,aAA4BpsC,EAAQosC,YAAc,GAChF/oC,EAAAhD,KAAIs0U,EAAe30U,MAAAA,GAAAA,EAASisC,WAAajsC,EAAQisC,qBAAqBspS,OAAOQ,MACzE/1U,EAAQisC,UAAYspS,OAAOQ,MAAMC,oBAAmBh2U,MAAAA,OAAO,EAAPA,EAASisC,YAAa,uBAC9E5rC,KAAK41U,gBAAkBj2U,MAAAA,IAAAA,EAASi2U,eAIpCC,2BAA2B,IAAA1qP,EAAA06C,EAGM,QAA7B16C,EAAIpoF,EAAA/C,KAAIm0U,GAAUzqB,MAAMosB,aAAK,IAAA3qP,GAAc,QAAd06C,EAAzB16C,EAA2B4qP,oBAAY,IAAAlwM,GAAvCA,EAAyCqB,SACzCnkI,EAAA/C,KAAIm0U,GAAUzqB,MAAM7sQ,SAI5BgB,WACI79C,KAAKm9B,QAAO,GAEhB6gB,aACQh+C,KAAKg2U,gBACLh2U,KAAKm9B,QAAO,GACZn9B,KAAKi2U,kBAIbhN,gBAEI,OADAlmU,EAAA/C,KAAI60U,GAAmB9yQ,MAChBh/D,EAAA/C,KAAIw0U,GAAgBzyQ,MAE/B0kQ,eAAehjP,GACX1gF,EAAA/C,KAAIw0U,GAAgBpsU,KAAKq7E,GAG7B3Z,MACI9pE,KAAK0lR,gBAETpqO,WAAWv2C,GACP/E,KAAKw1U,kBAAkBU,SAASx5R,KAAO33C,EACvC/E,KAAKy1U,gBAAgBS,SAASx5R,KAAO33C,EAEzCi5B,OAAOm4S,GACCn2U,KAAKy1U,gBAAgBS,SAASr3R,SAASs3R,KACvCn2U,KAAKy1U,gBAAgBS,SAASl4S,OAAOm4S,GACrCn2U,KAAKi2U,iBACLlzU,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,iBAI5BwiK,SAAS2Q,EAAS,KAAMxwU,IACpBwwU,EAASA,GAAUn2U,KAAKy1U,gBAAgBS,SAAS/nT,OAAOnuB,KAAKy1U,gBAAgBS,SAAS/nT,OAAO9qB,OAAS,IAAMrD,KAAKw1U,kBAAkBU,SAAS/nT,OAAOnuB,KAAKw1U,kBAAkBU,SAAS/nT,OAAO9qB,OAAS,MAE1L8yU,EAAO7pU,WACR6pU,EAAO7pU,SAAW4oU,OAAOkB,eAAeC,WAAWF,EAAOplU,SAASulU,UAAUroL,YAAYttJ,QAE7Fw1U,EAAO5pS,MAAQ,CACX64F,aAAc8vM,OAAOQ,MAAMC,mBAAmBhwU,EAAMy/H,cACpDx5F,UAAWspS,OAAOQ,MAAMa,UAAUnmU,MAAM,GAAIzK,EAAMymC,WAClDq5R,aAAc9/T,EAAM8/T,aACpB9lM,KAAMh6H,EAAMg6H,KACZvmH,KAAMzT,EAAMyT,KACZzT,MAAOuvU,OAAOsB,WAAWC,iBACzBC,gBAAiBxB,OAAOyB,gBAAgBC,gBACxCC,YAAaV,EAAOplU,SAAW,IAAImkU,OAAO4B,WAAW,EAAG,GAAK,IAAI5B,OAAO4B,WAAW,GAAI,KAE3F/zU,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,iBAG5B+zK,UAAUZ,GACFA,EAAO5pS,QACP4pS,EAAO7pU,SAAW4oU,OAAOkB,eAAeC,WAAUtzU,EAAC/C,KAAIw0U,IAAiB7zU,QAGhFq2U,cAAc,IAAAC,EAAAC,EAAAC,EAAAC,EACV,MAAO,KAAQ,QAAJH,EAAAl0U,EAAA/C,KAAIm0U,UAAA,IAAA8C,GAAmB,QAAnBC,EAAJD,EAAef,gBAAQ,IAAAgB,OAAnB,EAAJA,EAAyB/oT,SAAU,OAAoC,QAA7BgpT,EAAAp0U,EAAA/C,KAAIm0U,GAAUsB,uBAAe,IAAA0B,GAAU,QAAVC,EAA7BD,EAA+BjB,gBAAQ,IAAAkB,OAAV,EAA7BA,EAAyCjpT,SAAU,IAK5GgP,OAAOt6B,GACCA,EACK7C,KAAKg2U,gBACNh2U,KAAKg2U,cAAgB,IAAId,OAAOmC,wBAAwBt0U,EAAA/C,KAAIm0U,GAAU92Q,QACtEr9D,KAAKg2U,cAAcsB,eAAet3U,KAAKu3U,aAAar3R,KAAKlgD,MAAOk1U,OAAOsC,qBAAqBC,YAC5Fz3U,KAAKg2U,cAAcsB,eAAet3U,KAAK03U,eAAex3R,KAAKlgD,MAAOk1U,OAAOsC,qBAAqBG,mBAC3E,UAAf50U,EAAA/C,KAAI+0U,KAAoB/0U,KAAK43U,WAAa53U,KAAK63U,2BACnD73U,KAAKg2U,cAAcsB,eAAet3U,KAAK83U,aAAa53R,KAAKlgD,MAAOk1U,OAAOsC,qBAAqBO,cAG5F/3U,KAAKg4U,eACLh4U,KAAKi4U,oBAELj4U,KAAKg2U,gBACLh2U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqBC,YACjEz3U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqBG,mBACjE33U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqBO,YACjE/3U,KAAKg2U,cAAcn0L,WAEvB7hJ,KAAKg2U,mBAAgB5xU,EACjBpE,KAAK43U,aACL53U,KAAKw1U,kBAAkBU,SAASl4S,OAAOh+B,KAAK43U,YAC5C53U,KAAK43U,WAAa,KAClB70U,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,kBAG5BhjK,KAAKggC,cAAc,IAAIghB,YAAY,eAAgB,CAAEf,OAAQ,CAAE9iB,OAAQt6B,MAE3Es1U,iBAAiB5/S,GACbv4B,KAAKo4U,UAAW,EAChBp4U,KAAKq4U,eAAiB9/S,EACtBv4B,KAAKg2U,cAAgB,IAAId,OAAOmC,wBAAwBt0U,EAAA/C,KAAIm0U,GAAU92Q,QACtEr9D,KAAKg2U,cAAcsB,eAAet3U,KAAKs4U,eAAep4R,KAAKlgD,MAAOk1U,OAAOsC,qBAAqBC,YAElGc,uBACIv4U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqBC,YAErE/xU,SAASC,EAAOwwU,GACPA,GAQGA,EAAO9gT,QACP8gT,EAAO9gT,MAAMk8C,MAAQ2jQ,OAAOQ,MAAMC,mBAAmBhwU,EAAMimC,WAAW4sS,UAAU7yU,EAAMkmC,aACtFsqS,EAAO9gT,MAAMojT,UAAY9yU,EAAMomC,aAAeoqS,IAAWn2U,KAAKg4U,cAAgB,GAAK,IACnF7B,EAAO9gT,MAAMowS,aAAe9/T,EAAMomC,YAClCoqS,EAAO9gT,MAAM+vG,aAAe8vM,OAAOQ,MAAMC,mBAAmBhwU,EAAMmmC,cAElEqqS,EAAOplU,WACPolU,EAAOplU,SAASuhB,MAAQ3sB,EAAMomC,YAC9BoqS,EAAOplU,SAAS2nU,SAAWxD,OAAOQ,MAAMC,mBAAmBhwU,EAAMmmC,cAEjEqqS,EAAO9lU,UACP8lU,EAAO9lU,QAAQqoU,SAAWxD,OAAOQ,MAAMC,mBAAmBhwU,EAAMimC,WAAW4sS,UAAU7yU,EAAMkmC,gBAlB/F7oC,EAAAhD,KAAIo0U,EAAiBc,OAAOQ,MAAMC,mBAAmBhwU,EAAMmmC,cAC3D9oC,EAAAhD,KAAIq0U,EAAiB1uU,EAAMomC,aACvBpmC,EAAMimC,WACN5oC,EAAAhD,KAAIs0U,EAAeY,OAAOQ,MAAMC,mBAAmBhwU,EAAMimC,WAAW4sS,UAAU7yU,EAAMkmC,eAmBhG8sS,aAAax7S,GACLA,GACAn9B,KAAK44U,kBAAmB,EACxB54U,KAAK64U,cAAc3zU,QAAO,CAACE,EAAGlD,IAAMA,EAAI,IAAGqF,SAASnC,IAChDA,EAAEs3C,MAAO,OAIb18C,KAAK44U,kBAAmB,EACxB54U,KAAK64U,cAActxU,SAASnC,IACxBA,EAAEs3C,MAAO,MAKrBo8R,kBAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACd,IAAKn5U,KAAKg2U,gBAAkBh2U,KAAKg4U,cAAe,OAChDh1U,EAAAhD,KAAI+0U,EAAU/0U,KAAKg4U,cAAc3nU,QAAU,UAAarQ,KAAKg4U,cAAcjnU,SAAW,WAAa,SACnG/Q,KAAKg2U,cAAcsB,gBAAez3S,GAAS7/B,KAAKo5U,YAAYv5S,IAAQq1S,OAAOsC,qBAAqB6B,WAChGr5U,KAAKg2U,cAAcsB,gBAAez3S,GAAS7/B,KAAKs5U,UAAUz5S,IAAQq1S,OAAOsC,qBAAqB+B,SAC9Fv5U,KAAKg2U,cAAcsB,eAAet3U,KAAKw5U,aAAat5R,KAAKlgD,MAAOk1U,OAAOsC,qBAAqBO,YAC5F,MAAMzrU,EAAsC,QAA9BysU,EAAG/4U,KAAKg4U,cAAc1rU,gBAAQ,IAAAysU,OAAA,EAA3BA,EAA6B9qL,SAASjuJ,KAAKy5U,YAC5D,IAAInD,EAAY,GACZoD,GAAmB,EACvB,OAAA32U,EAAQ/C,KAAI+0U,IACR,IAAK,QACD/0U,KAAKg4U,cAAc1rU,SAAW,IAAI4oU,OAAOyE,kBAAiB,IAAM52U,EAAA/C,KAAIw0U,GAAgB,IAAMloU,IAAU,GACpGtM,KAAKg4U,cAAc3iT,MAAMojT,UAAiD,EAArCz4U,KAAKg4U,cAAc3iT,MAAMojT,UAC9D,MACJ,IAAK,WACDnC,EAAY,IAAIt2U,KAAKg4U,cAAcjnU,SAASulU,UAAUroL,SAASjuJ,KAAKy5U,aACpEz5U,KAAKg4U,cAAcjnU,SAASulU,UAAY,IAAIpB,OAAOyE,kBAAiB,IAAA52U,EAChE/C,KAAIw0U,KAAiB,GACzBkF,GAAmB,EACnB,MACJ,IAAK,UACDpD,EAAY,IAA8B,QAA7B0C,EAAGh5U,KAAKg4U,cAAc3nU,eAAO,IAAA2oU,GAAW,QAAXC,EAA1BD,EAA4BY,iBAAS,IAAAX,OAAX,EAA1BA,EAAuChrL,SAASjuJ,KAAKy5U,YAAYnD,WACjFt2U,KAAKg4U,cAAc3nU,QAAQupU,UAAY,IAAI1E,OAAOyE,kBAAiB,IAAM,IAAIzE,OAAO2E,iBAAgB92U,EAAC/C,KAAIw0U,MAAkB,GAC3Hx0U,KAAKg4U,cAAcjnU,SAASulU,UAAY,IAAIpB,OAAOyE,kBAAiB,IAAM,IAAC52U,EAAG/C,KAAIw0U,GAAiBzxU,EAAA/C,KAAIw0U,GAAgB,MAAK,GAC5HkF,GAAmB,EACnB,MACJ,IAAK,YACDpD,EAAY,IAA8B,QAA7B4C,EAAGl5U,KAAKg4U,cAAc3nU,eAAO,IAAA6oU,GAAW,QAAXC,EAA1BD,EAA4BU,iBAAS,IAAAT,OAAX,EAA1BA,EAAuClrL,SAASjuJ,KAAKy5U,YAAYnD,WACjFt2U,KAAKg4U,cAAc3nU,QAAQupU,UAAY,IAAI1E,OAAOyE,kBAAiB,IAAM,IAAIzE,OAAO2E,iBAAgB92U,EAAC/C,KAAIw0U,MAAkB,GAC3Hx0U,KAAKw1U,kBAAkBU,SAASt7T,IAAI,CAChCtO,SAAU,IAAI4oU,OAAOyE,kBAAiB,KAClCrD,EAAYvzU,EAAA/C,KAAIw0U,GAAgBnxU,OAAMN,EAAG/C,KAAIw0U,GAAkB8B,EACxDpB,OAAO4E,WAAWC,SAASzD,EAAU,GAAIA,EAAU,GAAI,IAAIpB,OAAO4E,eAC1E,GACHE,UAAW,CACPjtT,MAAO,2BACPktT,yBAA0BtyT,OAAOC,kBACjC8uT,gBAAiBxB,OAAOyB,gBAAgBC,iBAE5CriT,WAAY,CACRpqB,KAAM,YAOtBmsU,EAAU/uU,SAAQ,CAACnC,EAAGqC,KAClB1E,EAAA/C,KAAIw0U,GAAgBpsU,KAAKhD,MAE7BpF,KAAKk6U,oBAAoB5D,EAAWoD,GAGxCQ,oBAAoB5D,EAAWoD,GAY3B,GAXApD,EAAU/uU,SAAQ,CAACnC,EAAGqC,KAClB,MAAM0yU,EAAcn6U,KAAKo6U,mBAAmBh1U,EAAG,CAAE0hH,MAAM,EAAMuzN,cAAe5yU,IAG5E,GAFA0yU,EAAY5lT,WAAWzK,MAAQriB,EAC/BzH,KAAK64U,cAAczwU,KAAK+xU,GACpBT,GAAqBjyU,EAAM,EAAK6uU,EAAUjzU,OAAQ,CAClD,MAAMu/C,EAAK5iD,KAAKs6U,iBAAiBl1U,EAAGkxU,EAAU7uU,EAAM,IAC9C8yU,EAAqBv6U,KAAKo6U,mBAAmBx3R,EAAI,CAAEkkE,MAAM,EAAM0zN,SAAS,IAC9ED,EAAmBhmT,WAAWzK,MAAQriB,EACtCzH,KAAK64U,cAAczwU,KAAKmyU,OAGb,YAAfx3U,EAAA/C,KAAI+0U,IAAwBuB,EAAUjzU,OAAS,EAAG,CAElD,MAAMo3U,EAAUnE,EAAUjzU,OAAS,EAC7Bu/C,EAAK5iD,KAAKs6U,iBAAiBhE,EAAUmE,GAAUnE,EAAU,IACzDiE,EAAqBv6U,KAAKo6U,mBAAmBx3R,EAAI,CAAEkkE,MAAM,EAAM0zN,SAAS,IAC9ED,EAAmBhmT,WAAWzK,MAAQ2wT,EACtCz6U,KAAK64U,cAAczwU,KAAKmyU,GAE5Bx3U,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBAGxBi1K,oBACI,GAAKj4U,KAAKg2U,eAAkBh2U,KAAKg4U,cAAjC,CACA,OAAAj1U,EAAQ/C,KAAI+0U,IACR,IAAK,WACD/0U,KAAKg4U,cAAcjnU,SAASulU,UAASvzU,EAAG/C,KAAIw0U,GAC5C,MACJ,IAAK,QACDx0U,KAAKg4U,cAAc3iT,MAAMojT,UAAYz4U,KAAKg4U,cAAc3iT,MAAMojT,UAAY,EAC1Ez4U,KAAKg4U,cAAc1rU,SAAWtM,KAAKg4U,cAAc1rU,SAAS2hJ,SAASjuJ,KAAKy5U,YACxE,MACJ,IAAK,UACDz5U,KAAKg4U,cAAcjnU,SAASulU,UAAY,IAACvzU,EAAG/C,KAAIw0U,GAAiBzxU,EAAA/C,KAAIw0U,GAAgB,IACrFx0U,KAAKg4U,cAAc3nU,QAAQupU,UAAY,IAAI1E,OAAO2E,iBAAgB92U,EAAC/C,KAAIw0U,IAG/EzxU,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBACpBhjK,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqB6B,WACjEr5U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqB+B,SACjEv5U,KAAKg2U,cAAckC,kBAAkBhD,OAAOsC,qBAAqBO,aAGrEryD,gBACI,IACIywD,EADAG,EAASvzU,EAAG/C,KAAIw0U,GAEpB,IAAoB,YAAfzxU,EAAA/C,KAAI+0U,IAAuC,cAAfhyU,EAAA/C,KAAI+0U,KAA2BuB,EAAUjzU,OAAS,EAM/E,YALArD,KAAKggC,cAAc,IAAIghB,YAAY,YAAa,CAC5Cf,OAAQ,CACJhqC,MAAOjW,KAAK06U,YAAYrF,mBAKpC,GAAmB,UAAftyU,EAAA/C,KAAI+0U,GACA/0U,KAAK26U,cACLrE,EAAUluU,KAAKpI,KAAK26U,cACxBxE,EAASn2U,KAAK46U,WAAW56U,KAAK26U,kBAM7B,CACD,GAAmB,YAAf53U,EAAA/C,KAAI+0U,GAAsB,CAC1B,MAAM1wR,EAAW,IAAI6wR,OAAO2F,kBAAkB3F,OAAO4F,aAAaC,cAAch4U,EAAA/C,KAAIw0U,GAAgBzxU,EAAA/C,KAAIw0U,GAAgBnxU,OAAS,IAAK6xU,OAAO4F,aAAaC,cAAch4U,EAAA/C,KAAIw0U,GAAgB,IAAKU,OAAO8F,UAAUC,OAAOC,gBAEzNn4U,EAAA/C,KAAI60U,GAAmBzsU,KAAKi8C,EAAW,KAE3C8xR,EAASn2U,KAAK46U,WAAU73U,EAAC/C,KAAIw0U,IAEjCzxU,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBAEpB,MAAMm4K,EAAen7U,KAAKo7U,gBAAgB9E,EAASvzU,EAAE/C,KAAI+0U,IACzD/0U,KAAKggC,cAAc,IAAIghB,YAAY,UAAW,CAC1Cf,OAAQ,CACJq2R,UAAWA,EACXnsU,KAAIpH,EAAE/C,KAAI+0U,GACVoG,aAAcA,EACdhF,OAAQA,MAIhBn2U,KAAKi2U,iBAEToF,eAAelF,GACX,OAAQn2U,KAAK0kR,cAAgB1kR,KAAK0kR,eAAiByxD,EAAO/2U,GAE9Dk8U,cAAcnF,GACV,OAASn2U,KAAKgoU,UAAYhoU,KAAKo4U,YACxBp4U,KAAKg4U,eAAiBh4U,KAAKy1U,gBAAgBS,SAASr3R,SAASs3R,EAAO/2U,KAClEY,KAAKg4U,eAAiBh4U,KAAKy1U,gBAAgBS,SAASr3R,SAASs3R,EAAO/2U,KAAOY,KAAKg4U,eAAiB7B,EAAO/2U,IACxGY,KAAKg4U,eAAiBh4U,KAAK64U,cAAc19T,MAAM/V,GAAIA,IAAI+wU,EAAO/2U,MAE3E62U,eAAesF,GACXv7U,KAAKw1U,kBAAkBU,SAASsF,YAC5Bx7U,KAAK43U,YAAY53U,KAAKw1U,kBAAkBU,SAASt7T,IAAI5a,KAAK43U,YAC1D2D,GACAv7U,KAAKy1U,gBAAgBS,SAASsF,YAElCx4U,EAAAhD,KAAIw0U,EAAkB,IACtBx0U,KAAK26U,kBAAev2U,EACpBpE,KAAK0kR,kBAAetgR,EACpBpE,KAAKy7U,gBAAkB,EACvBz4U,EAAAhD,KAAI60U,EAAqB,IACzB70U,KAAKg4U,mBAAgB5zU,EACrBpE,KAAK07U,uBAAoBt3U,EACzBpE,KAAK27U,YAAa,EAClB37U,KAAK64U,cAAgB,GAMzBh4R,QACI7gD,KAAKi2U,iBAGTmE,mBAAmB9tU,EAAU3M,GACzB,MAAMw2U,EAAS,CACX7pU,SAAUA,EACV+oB,MAAO,CACHk8C,MAAO5xE,MAAAA,GAAAA,EAAS66U,QAAUtF,OAAOQ,MAAMkG,KAAO1G,OAAOQ,MAAMmG,MAC3DpW,aAAc,EACdrgM,aAAc8vM,OAAOQ,MAAMoG,MAC3BrD,UAAW94U,MAAAA,GAAAA,EAASmnH,KAAO,EAAI,EAC/B4vN,gBAAiBxB,OAAOyB,gBAAgBC,iBAE5CriT,WAAY,IAEZ50B,MAAAA,GAAAA,EAASmnH,OACTqvN,EAAO9gT,MAAM4kT,yBAA2BtyT,OAAOC,mBAKnD,MAAMm0T,EAAc/7U,KAAKw1U,kBAAkBU,SAASt7T,IAAIu7T,GAGxD,OAFIx2U,MAAAA,GAAAA,EAAS66U,UACTuB,EAAYxnT,WAAWimT,QAAU76U,EAAQ66U,SACtCuB,EAEXlE,0BACI,OAAO73U,KAAKw1U,kBAAkBU,SAASt7T,IAAI,CACvCtO,SAAU,IAAI4oU,OAAO4E,WACrBzkT,MAAO,CACHk8C,MAAO,IAAI2jQ,OAAOyE,kBAAiB,IAAQ52U,EAAO/C,KAAIs0U,KAAgB,GACtE7O,aAAc,IAAIyP,OAAOyE,kBAAiB,IAAQ52U,EAAO/C,KAAIq0U,KAAkB,GAC/EjvM,aAAc,IAAI8vM,OAAOyE,kBAAiB,IAAQ52U,EAAO/C,KAAIo0U,KAAkB,GAC/EqE,UAAW,IAAIvD,OAAOyE,kBAAiB,IAAe,GAAE52U,EAAG/C,KAAIq0U,KAAkB,MAM7F2H,kBAAkB1F,GACd,OAAOt2U,KAAKw1U,kBAAkBU,SAASt7T,IAAI,CACvC7J,SAAU,CACNulU,UAAWA,EACX2F,eAAe,EACf3pT,MAAO,IAAI4iT,OAAOyE,kBAAiB,IAAA52U,EAAM/C,KAAIq0U,KAAgB,GAC7DqE,SAAU,IAAIxD,OAAOgH,sBAAsB,IAAIhH,OAAOyE,kBAAiB,IAAA52U,EAAM/C,KAAIo0U,KAAgB,OAK7GwG,WAAWtE,GACP,MAAmB,UAAfvzU,EAAA/C,KAAI+0U,GACG/0U,KAAKy1U,gBAAgBS,SAASt7T,IAAI,CACrCtO,SAAUgqU,EACVjhT,MAAO,CACHk8C,MAAKxuE,EAAE/C,KAAIs0U,GACXmE,UAAW,GAAE11U,EAAG/C,KAAIq0U,GACpB5O,aAAY1iU,EAAE/C,KAAIq0U,GAClBjvM,aAAYriI,EAAE/C,KAAIo0U,MAIJ,aAAfrxU,EAAA/C,KAAI+0U,GACJ/0U,KAAKy1U,gBAAgBS,SAASt7T,IAAI,CACrC7J,SAAU,CACNulU,UAAWA,EACX2F,eAAe,EACf3pT,MAAKvvB,EAAE/C,KAAIq0U,GACXqE,SAAQ31U,EAAE/C,KAAIo0U,MAIA,YAAfrxU,EAAA/C,KAAI+0U,IAAuC,cAAfhyU,EAAA/C,KAAI+0U,GAChC/0U,KAAKy1U,gBAAgBS,SAASt7T,IAAI,CACrCvK,QAAS,CACLupU,UAAW,CACPtD,UAAWA,GAEfoC,SAAU,IAAIxD,OAAOgH,sBAAqBn5U,EAAC/C,KAAIs0U,IAC/C2H,eAAe,GAEnBlrU,SAAU,CACNulU,UAAW,IAAIA,EAAWA,EAAU,IACpC2F,eAAe,EACf3pT,MAAKvvB,EAAE/C,KAAIq0U,GACXqE,SAAQ31U,EAAE/C,KAAIo0U,WAbnB,EAoBX+H,2BACI,OAAO,IAAIjH,OAAOyE,kBAAiB,KAC/B,MAAMyC,EAAe,IAACr5U,EAAG/C,KAAIw0U,GAAiBx0U,KAAK26U,cAE7CrE,EAAY8F,EAClB,MAAmB,cAAfr5U,EAAA/C,KAAI+0U,IAAkD,IAAxBqH,EAAa/4U,OACpC,GAEPizU,EAAUjzU,QAAU,GAAoB,aAAfN,EAAA/C,KAAI+0U,GAGtB,IAAIuB,EAAWA,EAAU,IAEzBA,KAEZ,GAGP+F,oBACI,IAAKr8U,KAAK0kR,aAAc,OACxB,MAEM4xD,EAFe,IAACvzU,EAAG/C,KAAIw0U,GAAiBx0U,KAAK26U,cAG7C2B,EAAehG,EAAUjzU,OAC/B,GAAIi5U,EAAe,EAAG,CAClB,IAAIj4R,EACJ,GAAmB,cAAfthD,EAAA/C,KAAI+0U,IAA0BuH,EAAe,EAAG,CAChD,MAAMlyT,EAAIksT,EAAU,GACdiG,EAAKjG,EAAU,GACrBjyR,EAAW6wR,OAAO4E,WAAWz1R,SAASj6B,EAAGmyT,GACxCv8U,KAAK0kR,aAAap4Q,SAAUkwU,SAASD,OACnC,CACH,MAAM/vN,EAAY8pN,EAAUgG,EAAe,GAC3Cj4R,EAAW,IAAI6wR,OAAO2F,kBAAkB3F,OAAO4F,aAAaC,cAAczE,EAAUgG,EAAe,IAAKpH,OAAO4F,aAAaC,cAAcvuN,GAAY0oN,OAAO8F,UAAUC,OAAOC,gBAWlL,OARAl4U,EAAAhD,KAAI40U,EAAoBvwR,EAAW,UACnCrkD,KAAKggC,cAAc,IAAIghB,YAAY,aAAc,CAC7Cf,OAAQ,CACJq2R,UAAWA,EACXnsU,KAAIpH,EAAE/C,KAAI+0U,GACVoG,aAAcn7U,KAAKo7U,gBAAgB9E,EAASvzU,EAAE/C,KAAI+0U,SAQlEwC,aAAa13S,GACT7/B,KAAK61U,2BACL,MAAMvpU,EAAWvJ,EAAA/C,KAAIm0U,GAAUzqB,MAAMosB,MAAM2G,KAAK15U,EAAA/C,KAAIm0U,GAAUuI,OAAOC,WAAW98S,EAAMvzB,UAAWvJ,EAAA/C,KAAIm0U,GAAUzqB,OAC/G,GAAIp9S,EAAU,CAEV,GAAKtM,KAAK0kR,aAaN1kR,KAAK0kR,aAAap4Q,SAASkwU,SAASlwU,GAC/BvJ,EAAA/C,KAAI60U,GAAmB78S,SAAQj1B,EAAC/C,KAAI40U,KACrC7xU,EAAA/C,KAAI60U,GAAmBzsU,KAAIrF,EAAC/C,KAAI40U,SARpC,GANA50U,KAAKggC,cAAc,IAAIghB,YAAY,cACnChhD,KAAK0kR,aAAe1kR,KAAKo6U,mBAAmB9tU,GAC5CtM,KAAK26U,aAAeruU,EAEpBtM,KAAKg8U,kBAAkBh8U,KAAKm8U,4BAC5Bp5U,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBACD,UAAfjgK,EAAA/C,KAAI+0U,GAGJ,OAFAhyU,EAAA/C,KAAIw0U,GAAgBpsU,KAAKkE,QACzBtM,KAAK0lR,gBASb3iR,EAAA/C,KAAIw0U,GAAgBpsU,KAAKpI,KAAK26U,cAC9B,MAAMiC,EAAc58U,KAAK41U,gBACL,YAAf7yU,EAAA/C,KAAI+0U,IAAuD,IAA/BhyU,EAAA/C,KAAIw0U,GAAgBnxU,QACjC,aAAfN,EAAA/C,KAAI+0U,IAAwD,IAA/BhyU,EAAA/C,KAAIw0U,GAAgBnxU,SAElC,cAAfN,EAAA/C,KAAI+0U,IAAyD,IAA/BhyU,EAAA/C,KAAIw0U,GAAgBnxU,QAAiBu5U,IACpE58U,KAAK0lR,gBAET1lR,KAAKggC,cAAc,IAAIghB,YAAY,QAAS,CAAEf,OAAQ,CAAE3zC,SAAAA,EAAUA,SAAAA,OAM1EgsU,eAAez4S,GACX,IAAK7/B,KAAKq4U,eAAgB,OAC1B,MAAMv0K,EAAgB/gK,EAAA/C,KAAIm0U,GAAUzqB,MAAM+yB,KAAK58S,EAAMvzB,UACjD4oU,OAAOrwL,QAAQif,IAAkBoxK,OAAOrwL,QAAQif,EAAc1kK,KAAOY,KAAKy1U,gBAAgBS,SAASr3R,SAASilH,EAAc1kK,KACtHY,KAAKg4U,eAAiBh4U,KAAKg4U,gBAAkBl0K,EAAc1kK,IAC3DY,KAAKi4U,oBAETj4U,KAAKg4U,cAAgBl0K,EAAc1kK,GACnCY,KAAK84U,kBAEL94U,KAAKq4U,eAAev0K,EAAc1kK,KAGlCY,KAAKq4U,eAAe,MAG5BwE,iBAAiB9zJ,EAAQ+zJ,EAAeC,EAAUC,EAAcC,EAAUC,GACtE,IAAIC,EAAUjI,OAAO4E,WAAWsD,SAASr0J,EAAQi0J,EAAc,IAAI9H,OAAO4E,YAC1EqD,EAAUjI,OAAO4E,WAAWuD,iBAAiBF,EAASF,EAAU,IAAI/H,OAAO4E,YAC3E,MAAMwD,EAAkBpI,OAAO4E,WAAWl/T,IAAImiU,EAAUI,EAAS,IAAIjI,OAAO4E,YAEtEyD,EAAerI,OAAO4E,WAAWz1R,SAAS0kI,EAAQ+zJ,GAElDU,EADkBtI,OAAO4E,WAAWz1R,SAASi5R,EAAiBR,GAC5BS,EACxC,IAAIE,EAAevI,OAAO4E,WAAWsD,SAASr0J,EAAQ+zJ,EAAe,IAAI5H,OAAO4E,YAEhF2D,EAAevI,OAAO4E,WAAWuD,iBAAiBI,EAAcD,EAAe,IAAItI,OAAO4E,YAC1F,IAAI4D,EAAoBxI,OAAO4E,WAAWl/T,IAAIkiU,EAAeW,EAAc,IAAIvI,OAAO4E,YAKtF,OAJIoD,IACAO,EAAevI,OAAO4E,WAAWoD,OAAOO,EAAc,IAAIvI,OAAO4E,YACjE4D,EAAoBxI,OAAO4E,WAAWl/T,IAAIkiU,EAAeW,EAAc,IAAIvI,OAAO4E,aAE/E4D,EAGXC,gBAAgBC,EAAeC,GAC3B,MAAMvH,EAAY,IAACvzU,EAAG/C,KAAIw0U,IACpB7zU,EAASu0U,OAAO4E,WAAWC,SAASzD,EAAU,GAAIA,EAAU,GAAI,IAAIpB,OAAO4E,YAC3EgE,EAAahD,aAAaC,cAAcp6U,GACxCo9U,EAAUjD,aAAaC,cAAc8C,GACrCG,EAAYlD,aAAaC,cAAc6C,GACvCK,EAAa18U,KAAKS,GAAKT,KAAKqnE,MAAMm1Q,EAAQ7jB,UAAY4jB,EAAW5jB,UAAW6jB,EAAQ5jB,SAAW2jB,EAAW3jB,UAE1G+jB,EADW38U,KAAKS,GAAKT,KAAKqnE,MAAMo1Q,EAAU9jB,UAAY4jB,EAAW5jB,UAAW8jB,EAAU7jB,SAAW2jB,EAAW3jB,UACrF8jB,EAE7B3H,EAAU/uU,SAAQ,CAAC+8C,EAAK65R,KACpB,MAAM9oT,EAAQylT,aAAaC,cAAcz2R,GACnC85R,EAAW78U,KAAKY,IAAI+7U,GACpBG,EAAW98U,KAAKa,IAAI87U,GACpBI,EAAQF,GAAY/oT,EAAM6kS,UAAY4jB,EAAW5jB,WAAamkB,GAAYhpT,EAAM8kS,SAAW2jB,EAAW3jB,UAAY54T,KAAKyoB,IAAIzoB,KAAKY,IAAI27U,EAAW3jB,WAC/IokB,EAAQF,GAAYhpT,EAAM6kS,UAAY4jB,EAAW5jB,WAAa34T,KAAKyoB,IAAIzoB,KAAKY,IAAI27U,EAAW3jB,WAAaikB,GAAY/oT,EAAM8kS,SAAW2jB,EAAW3jB,UAChJ53O,EAAMu7P,EAAW5jB,UAAYokB,EAC7Bh8P,EAAMw7P,EAAW3jB,SAAWokB,EAElCjI,EAAU6H,GAAQrD,aAAa0D,YAAY,IAAI1D,aAAav4P,EAAKD,OAErEtiF,KAAK64U,cAActxU,SAAQ,CAACm0J,EAAIjzJ,KAC5BizJ,EAAGpvJ,SAAWgqU,EAAU7tU,GACxB1F,EAAA/C,KAAIw0U,GAAgB/rU,GAAO6tU,EAAU7tU,MAEzC1F,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBAGxB80K,aAAaj4S,GACT7/B,KAAK61U,2BACL,MAAMvpU,EAAWvJ,EAAA/C,KAAIm0U,GAAUzqB,MAAMosB,MAAM2G,KAAK15U,EAAA/C,KAAIm0U,GAAUuI,OAAOC,WAAW98S,EAAMg+S,aAAc96U,EAAA/C,KAAIm0U,GAAUzqB,OAC7Gp9S,IAEDtM,KAAK0kR,eACL1kR,KAAK0kR,aAAap4Q,SAASkwU,SAASlwU,GACpCtM,KAAK26U,aAAeruU,EACpBtM,KAAKq8U,qBAELr8U,KAAK43U,YACL53U,KAAK43U,WAAWtrU,SAASkwU,SAASlwU,GAGtCvJ,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,iBAExBw2K,aAAa35S,GACT7/B,KAAK61U,2BACL,MAAMvpU,EAAWvJ,EAAA/C,KAAIm0U,GAAUzqB,MAAMosB,MAAM2G,KAAK15U,EAAA/C,KAAIm0U,GAAUuI,OAAOC,WAAW98S,EAAMg+S,aAAc96U,EAAA/C,KAAIm0U,GAAUzqB,OAClH,GAAKp9S,GAEDtM,KAAKg4U,eAAmBh4U,KAAK07U,mBACzB17U,KAAK27U,WACL,GAAmB,UAAf54U,EAAA/C,KAAI+0U,GACJ/0U,KAAKg4U,cAAc1rU,SAAWA,EAC9BtJ,EAAAhD,KAAIw0U,EAAkB,CAACloU,QACpB,KAAAmyU,EACH,MAAMC,EAAmC,QAApBD,EAAGz+U,KAAK0kR,oBAAY,IAAA+5D,OAAA,EAAjBA,EAAmBlqT,WACrCzK,EAAQ40T,EAAgB50T,MAC9B,IAAI60T,EAAe,IAAIzJ,OAAO4E,WAM9B,GALqB,iBAAVhwT,IACP9pB,KAAK0kR,aAAap4Q,SAAWA,EAC7BqyU,EAAe57U,EAAA/C,KAAIw0U,GAAgB1qT,GACnC/mB,EAAA/C,KAAIw0U,GAAgB1qT,GAASxd,GAEd,YAAfvJ,EAAA/C,KAAI+0U,GAAsB,KAAA6J,EAAAC,EAE1B,MAAMp3U,EAAuB,QAApBm3U,EAAG5+U,KAAK0kR,oBAAY,IAAAk6D,GAAY,QAAZC,EAAjBD,EAAmBrqT,kBAAU,IAAAsqT,OAAZ,EAAjBA,EAA+B/0T,MACrCg1T,EAAQ9+U,KAAK64U,cAAcx1U,OAC3B07U,EAAuC,GAAnBD,EAAQr3U,EAAM,GAAUq3U,EAC5CE,EAAah/U,KAAK64U,cAAckG,GAChCE,EAAsBj/U,KAAKs6U,iBAAiB0E,EAAYh/U,KAAK0kR,cACnE1kR,KAAK64U,cAAckG,EAAkB,GAAGzyU,SAAW2yU,EAEnD,MAAMC,EAAuC,GAAnBJ,EAAQr3U,EAAM,GAAUq3U,EAC5CK,EAAan/U,KAAK64U,cAAcqG,GAChCE,EAAsBp/U,KAAKs6U,iBAAiB6E,EAAYn/U,KAAK0kR,cACnE1kR,KAAK64U,cAAoB,EAANpxU,EAAU,GAAG6E,SAAW8yU,EAE/C,GAAmB,aAAfr8U,EAAA/C,KAAI+0U,GAAuB,KAAAsK,EAAAC,EAE3B,MAAM73U,EAAuB,QAApB43U,EAAGr/U,KAAK0kR,oBAAY,IAAA26D,GAAY,QAAZC,EAAjBD,EAAmB9qT,kBAAU,IAAA+qT,OAAZ,EAAjBA,EAA+Bx1T,MAC3C,GAAIriB,EAAM,EAAG,CACT,MAAMu3U,EAAah/U,KAAK64U,cAA0B,GAAXpxU,EAAM,IACvCw3U,EAAsBj/U,KAAKs6U,iBAAiB0E,EAAYh/U,KAAK0kR,cACnE1kR,KAAK64U,cAA0B,GAAXpxU,EAAM,GAAS,GAAG6E,SAAW2yU,EAErD,GAAIx3U,EAAO1E,EAAA/C,KAAIw0U,GAAgBnxU,OAAS,EAAI,CACxC,MAAM87U,EAAan/U,KAAK64U,cAA0B,GAAXpxU,EAAM,IACvC23U,EAAsBp/U,KAAKs6U,iBAAiB6E,EAAYn/U,KAAK0kR,cACnE1kR,KAAK64U,cAA0B,GAAXpxU,EAAM,GAAS,GAAG6E,SAAW8yU,OAElD,CACH,MAAM9I,EAASvzU,EAAG/C,KAAIw0U,GACtB,GAAmB,cAAfzxU,EAAA/C,KAAI+0U,GAAwB,CAC5B,GAAI2J,EAAgBv0U,MAA4C,WAApCu0U,EAAgBv0U,KAAK8jJ,WAAyB,KAAAsxL,EAAAC,EACtE,MAAMC,EAA+B,QAApBF,EAAGv/U,KAAK0kR,oBAAY,IAAA66D,GAAU,QAAVC,EAAjBD,EAAmBjzU,gBAAQ,IAAAkzU,OAAV,EAAjBA,EAA6BvxL,SAASjuJ,KAAKy5U,YAE/D,YADAz5U,KAAK29U,gBAAgB8B,EAAanzU,GAGtC,MAAMozU,EAAgB51T,EAAQ,EAAIA,EAAQ,EAAIA,EAAQ,EAChD61T,EAAY71T,EAAQ,EAAI,EAAI,EAAIA,EAAQ,EACxC81T,EAAa91T,EAAQ,EAAI,EAAI,EAAIA,EAAQ,EAC/C,IAAI+1T,EAAevJ,EAAUxsT,GAC7B,MAAMgzT,EAAgBxG,EAAUoJ,GAChC,IAAII,EAAYxJ,EAAUqJ,GACtBI,EAAazJ,EAAUsJ,GAE3B,MAAM7C,EAAW7H,OAAO4E,WAAWC,SAAS8F,EAAc/C,EAAe,IAAI5H,OAAO4E,YAC9EkD,EAAe9H,OAAO4E,WAAWC,SAAS4E,EAAc7B,EAAe,IAAI5H,OAAO4E,YAGlFmD,EAFU/H,OAAO4E,WAAWz1R,SAASw7R,EAAc9C,GACrC7H,OAAO4E,WAAWz1R,SAASs6R,EAAc3B,GAGvDE,EAASl9U,KAAKggV,mBAAmBH,EAAc/C,EAAegD,EAAWC,GAC/ED,EAAY9/U,KAAK68U,iBAAiBiD,EAAWhD,EAAeC,EAAUC,EAAcC,EAAUC,EAAO9oQ,MACrG2rQ,EAAa//U,KAAK68U,iBAAiBkD,EAAYjD,EAAeC,EAAUC,EAAcC,EAAUC,EAAO5oQ,OAEvGurQ,EAAe7/U,KAAKigV,qBAAqBJ,EAAc/C,EAAegD,EAAWC,GACjFF,EAAe7/U,KAAKigV,qBAAqBJ,EAAc/C,EAAeiD,EAAYD,GAElFxJ,EAAUxsT,GAAS+1T,EACnB98U,EAAA/C,KAAIw0U,GAAgB1qT,GAAS+1T,EAC7BvJ,EAAUqJ,GAAaG,EACvBxJ,EAAUsJ,GAAcG,EACxB//U,KAAK64U,cAActxU,SAAQ,CAACm0J,EAAIjzJ,KAC5BizJ,EAAGpvJ,SAAWgqU,EAAU7tU,SASpDivU,iBACS30U,EAAA/C,KAAI60U,GAAmB78S,SAAQj1B,EAAC/C,KAAI40U,KACrC7xU,EAAA/C,KAAI60U,GAAmBzsU,KAAIrF,EAAC/C,KAAI40U,IAEpC7xU,EAAA/C,KAAIw0U,GAAgBzyQ,MACpB/hE,KAAK0lR,gBAUT0zD,YAAYv5S,GAER,GADA7/B,KAAK07U,kBAAoB77S,EAAMvzB,SAC3BtM,KAAKg4U,cAAe,CACpB,MAAMxqP,EAAUzqF,EAAA/C,KAAIm0U,GAAUzqB,MAAMw2B,UAAUrgT,EAAMvzB,SAAU,EAAG,EAAG,GACpE,GAAIkhF,EAAQnqF,OACR,GAAIrD,KAAK44U,kBAAoB54U,KAAK64U,cAAc7gT,SAASw1D,EAAQ,GAAGpuF,IAAK,CACrE,GAAoB,YAAf2D,EAAA/C,KAAI+0U,IAAwBhyU,EAAA/C,KAAIw0U,GAAgBnxU,QAAU,GAAsB,aAAfN,EAAA/C,KAAI+0U,IAAyBhyU,EAAA/C,KAAIw0U,GAAgBnxU,QAAU,EAM7H,YALArD,KAAKggC,cAAc,IAAIghB,YAAY,YAAa,CAC5Cf,OAAQ,CACJhqC,MAAOjW,KAAK06U,YAAYrF,mBAKpC,MAAM8K,EAAkBngV,KAAK64U,cAAc3zU,QAAO,CAACE,EAAGlD,MAAQA,EAAI,KAAI8G,QAAQwkF,EAAQ,GAAGpuF,IACnFghV,EAAkBpgV,KAAK64U,cAAc7vU,QAAQwkF,EAAQ,GAAGpuF,IAExDihV,EAAWrgV,KAAK64U,cAAcuH,EAAkB,IAAMpgV,KAAK64U,cAAcuH,EAAkB,GAC3FE,EAAatgV,KAAK64U,cAAcuH,EAAkB,IAAMpgV,KAAK64U,cAAcuH,EAAkB,GAC/FC,IAAaC,IACbD,EAAS/zU,SAAWtM,KAAKs6U,iBAAiBv3U,EAAA/C,KAAIw0U,IAAqC,IAApB2L,EAAwBA,EAAgB98U,OAAS88U,GAAmB,GAC7Hp9U,EAAA/C,KAAIw0U,GAAgB2L,IAAoBp9U,EAAA/C,KAAIw0U,GAAgBnxU,OAAS,EAAI,EAAI88U,EAAkB,KAEzGngV,KAAK64U,cAAc9vU,OAAO/I,KAAK64U,cAAc7vU,QAAQs3U,GAAa,GAClEtgV,KAAK64U,cAAc9vU,OAAOq3U,EAAiB,GAC3CpgV,KAAKw1U,kBAAkBU,SAASl4S,OAAOsiT,GACvCtgV,KAAKw1U,kBAAkBU,SAASl4S,OAAOwvD,EAAQ,GAAGpuF,IAClDY,KAAKugV,iCAAiCJ,GAOtCngV,KAAK64U,cAAc3zU,QAAQE,IAAOA,EAAEmvB,WAAWimT,UAASjzU,SAAQ,CAACnC,EAAG0kB,KAChE1kB,EAAEmvB,WAAWzK,MAAQA,KAEzB9pB,KAAK64U,cAAc3zU,QAAQE,GAAMA,EAAEmvB,WAAWimT,UAASjzU,SAAQ,CAACnC,EAAG0kB,KAC/D1kB,EAAEmvB,WAAWzK,MAAQA,KAGzB9pB,KAAKggC,cAAc,IAAIghB,YAAY,aAAc,CAC7Cf,OAAQ,CACJq2R,UAASvzU,EAAE/C,KAAIw0U,GACfrqU,KAAIpH,EAAE/C,KAAI+0U,GACVoB,OAAQn2U,KAAKg4U,kBAGrBh4U,KAAK+2U,UAAU/2U,KAAKg4U,mBAGnB,KAAAwI,EAAAC,EACD,MAAMC,EAAgBlzP,EAAQ5kF,MAAK+yB,KAASA,EAAIv8B,GAAGi2B,SAAWsG,EAAIv8B,GAAG46U,YACrE,IAAK0G,EAAe,OACpB,MAAMC,EAAiBD,EAActhV,GACrCY,KAAK0kR,aAAei8D,EACpB,MAAMpsT,EAAaosT,EAAepsT,WAElCv0B,KAAK27U,WAAagF,EAAevhV,KAAOY,KAAKg4U,cAAc54U,IACvDY,KAAK64U,cAAc19T,MAAKugJ,GAAMA,EAAGt8J,KAAOuhV,EAAevhV,MACtDm1B,GAAcA,EAAWpqB,MAAuC,WAA/BoqB,EAAWpqB,KAAK8jJ,WAClDjuJ,KAAK27U,YAA+B,QAArB6E,EAAIxgV,KAAK0kR,oBAAY,IAAA87D,GAAY,QAAZC,EAAjBD,EAAmBjsT,kBAAU,IAAAksT,GAA7BA,EAA+BjG,SAClDx6U,KAAK4gV,uCAIb5gV,KAAK27U,aACL54U,EAAA/C,KAAIm0U,GAAUzqB,MAAMm3B,4BAA4BC,cAAe,EAC/D9gV,KAAKggC,cAAc,IAAIghB,YAAY,eAW/Cs5R,iBAAiBx/T,EAAGsP,GAChBtP,EAAIA,EAAExO,UAAYwO,EAClBsP,EAAIA,EAAE9d,UAAY8d,EAClBtP,EAAIA,EAAEmzI,SAAWnzI,EAAEmzI,SAASjuJ,KAAKy5U,YAAc3+T,EAC/CsP,EAAIA,EAAE6jI,SAAW7jI,EAAE6jI,SAASjuJ,KAAKy5U,YAAcrvT,EAC/C,MAAM9d,EAAW4oU,OAAO4E,WAAWl/T,IAAIE,EAAGsP,EAAG,IAAI8qT,OAAO4E,YAExD,OADA5E,OAAO4E,WAAWiH,eAAez0U,EAAU,EAAGA,GACvCA,EAGXs0U,uCAAuC,IAAAI,EAAAC,EAGnC,MAAMC,EAAmBlhV,KAAK0kR,aACxBy8D,EAAkBjM,OAAO4E,WAAWtvU,MAA+B,QAA1Bw2U,EAACE,EAAiB50U,gBAAQ,IAAA00U,OAAA,EAAzBA,EAA2B/yL,SAASjuJ,KAAKy5U,aACnF2H,EAAwC,QAA9BH,EAAGC,EAAiB3sT,kBAAU,IAAA0sT,OAAA,EAA3BA,EAA6Bn3T,MAC1Cu3T,EAAUrhV,KAAK64U,cAA2B,EAAbuI,GAC7BE,EAAUthV,KAAK64U,cAAkC,GAAlBuI,EAAa,GAAWphV,KAAK64U,cAAcx1U,QAC1Ek+U,EAAmBvhV,KAAKs6U,iBAAiB+G,EAASF,GAClDK,EAAmBxhV,KAAKs6U,iBAAiB6G,EAAiBG,GAC1DG,EAAUzhV,KAAKo6U,mBAAmB+G,EAAiB,CAAEr6N,MAAM,IAC3D46N,EAAa1hV,KAAKo6U,mBAAmBoH,EAAkB,CAAE16N,MAAM,EAAM0zN,SAAS,IACjE0G,EACR50U,SAAWi1U,EAEtBvhV,KAAK2hV,iCAAiCP,EAAa,EAAGD,EAAgB32U,SACtExK,KAAK64U,cAAc9vU,OAA0B,GAAlBq4U,EAAa,GAAQ,EAAGK,EAASC,GAC5D1hV,KAAK64U,cAActxU,SAAQ,CAACm0J,EAAIj0J,IAAQi0J,EAAGnnI,WAAWzK,MAAQvoB,KAAKonD,MAAMlhD,EAAM,KAC/EzH,KAAK0kR,aAAe+8D,EACpB1+U,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,gBAGxB2+K,iCAAiCl6U,EAAK2C,GAClCrH,EAAA/C,KAAIw0U,GAAgBzrU,OAAOtB,EAAK,EAAG2C,GAEvCm2U,iCAAiC94U,GAC7B1E,EAAA/C,KAAIw0U,GAAgBzrU,OAAOtB,EAAK,GAMpC6xU,UAAUz5S,GACN98B,EAAA/C,KAAIm0U,GAAUzqB,MAAMm3B,4BAA4BC,cAAe,EAC7C5L,OAAO4B,WAAW8K,cAAc/hT,EAAMvzB,SAAUtM,KAAK07U,kBAAmB,EAAG,IAEzF17U,KAAK6hV,kBAAkBhiT,GAEvB7/B,KAAK27U,aACL37U,KAAKggC,cAAc,IAAIghB,YAAY,aAAc,CAC7Cf,OAAQ,CACJq2R,UAASvzU,EAAE/C,KAAIw0U,GACfrqU,KAAIpH,EAAE/C,KAAI+0U,GACVoB,OAAQn2U,KAAKg4U,kBAGrBh4U,KAAK+2U,UAAU/2U,KAAKg4U,gBAGxBh4U,KAAK27U,YAAa,EAClB37U,KAAK07U,uBAAoBt3U,EACzBpE,KAAK0kR,kBAAetgR,EAGxBy9U,kBAAkB9/N,GAAQ,IAAA+/N,EAAAC,EACtB,MAAMhjV,EAAIiB,KAAKg4U,cACf,GAAIh4U,KAAK0kR,mBAAwDtgR,KAAZ,QAA5B09U,EAAA9hV,KAAK0kR,aAAanwP,kBAAU,IAAAutT,OAAA,EAA5BA,EAA8Bh4T,SAAoD,QAA7Bi4T,EAAC/hV,KAAK0kR,aAAanwP,kBAAU,IAAAwtT,IAA5BA,EAA8BvH,SAAS,CAElH,IAAIwH,EAAU,EACd,OAAAj/U,EAAQ/C,KAAI+0U,IACR,IAAK,UAAW,IAAAkN,EAAAC,EAAAC,EAEZ,IAD2B,QAAZF,EAAGljV,EAAEsR,eAAO,IAAA4xU,GAAW,QAAXC,EAATD,EAAWrI,iBAAS,IAAAsI,OAAX,EAATA,EAAsBj0L,SAASjuJ,KAAKy5U,aACxCnD,UAAUjzU,QAAU,EAC9B,OAEJN,EAAA/C,KAAIw0U,GAAgBzrU,OAAmC,QAA7Bo5U,EAACniV,KAAK0kR,aAAanwP,kBAAU,IAAA4tT,OAAA,EAA5BA,EAA8Br4T,MAAO,GAChEk4T,EAAU,EACV,MAEJ,IAAK,WAAY,IAAAI,EAAAC,EAAAC,EAEb,IAD6B,QAAbF,EAAGrjV,EAAEgS,gBAAQ,IAAAqxU,GAAW,QAAXC,EAAVD,EAAY9L,iBAAS,IAAA+L,OAAX,EAAVA,EAAuBp0L,SAASjuJ,KAAKy5U,aACzCp2U,QAAU,EACrB,OAEJN,EAAA/C,KAAIw0U,GAAgBzrU,OAAmC,QAA7Bu5U,EAACtiV,KAAK0kR,aAAanwP,kBAAU,IAAA+tT,OAAA,EAA5BA,EAA8Bx4T,MAAO,GAChEk4T,EAAU,EACV,MAMR,GAAgB,IAAZA,EAAe,KAAAO,EACf,MAAMnB,EAAyC,QAA/BmB,EAAGviV,KAAK0kR,aAAanwP,kBAAU,IAAAguT,OAAA,EAA5BA,EAA8Bz4T,MAC3C04T,EAA2B,EAAbpB,EACdruB,EAAwB,aAAfhwT,EAAA/C,KAAI+0U,GACb0N,EAAoB1vB,GAAyB,IAAfquB,EAC9BsB,EAAmB3vB,GAAWyvB,IAAgBxiV,KAAK64U,cAAcx1U,OAAS,EAEhF,IAAKo/U,IAAsBC,EAAkB,CAEzC,MAAMC,GAAoB3iV,KAAK64U,cAAcx1U,OAASm/U,EAAc,GAAMxiV,KAAK64U,cAAcx1U,OACvFu/U,GAAoBJ,EAAc,GAAMxiV,KAAK64U,cAAcx1U,OAC3D27U,EAAah/U,KAAK64U,cAAc8J,GAChCE,EAAgB7iV,KAAK64U,cAAc8J,EAAmB,GACtDxD,EAAan/U,KAAK64U,cAAc+J,GAChCt+N,EAActkH,KAAKs6U,iBAAiB0E,EAAYG,GACtD0D,EAAcv2U,SAAWg4G,EAG7B,IAAIw+N,EAGAA,EAFAJ,EAEa1iV,KAAK64U,cAAc9vU,OAAOy5U,EAAc,EAAG,GAG3CxiV,KAAK64U,cAAc9vU,OAAOy5U,EAAa,GAExDxiV,KAAK64U,cAActxU,SAAQ,CAACmgC,EAAG5d,IAAU4d,EAAEnT,WAAWzK,MAAQvoB,KAAKonD,MAAM7+B,EAAQk4T,KACjFc,EAAWv7U,SAAQmgC,GAAK1nC,KAAKw1U,kBAAkBU,SAASl4S,OAAO0J,UAC5D,GAAmB,YAAf3kC,EAAA/C,KAAI+0U,IAAuC,aAAfhyU,EAAA/C,KAAI+0U,GAAuB,KAAAgO,EAC9D/iV,KAAK64U,cAAc9vU,OAAmC,QAA7Bg6U,EAAC/iV,KAAK0kR,aAAanwP,kBAAU,IAAAwuT,OAAA,EAA5BA,EAA8Bj5T,MAAO,GAC/D9pB,KAAK64U,cAActxU,SAAQ,CAACm0J,EAAIj0J,IAAQi0J,EAAGnnI,WAAWzK,MAAQriB,IAC9DzH,KAAKw1U,kBAAkBU,SAASl4S,OAAOh+B,KAAK0kR,cAEhD3hR,EAAA/C,KAAIm0U,GAAUzqB,MAAM1mJ,iBAI5Bi9K,qBAAqBl3J,EAAQ+zJ,EAAekG,EAAaC,GACrD,MAEMC,EAFWpJ,WAAWz1R,SAAS2+R,EAAalG,GAC9BhD,WAAWz1R,SAAS0kI,EAAQk6J,GAEhD,IAAIE,EAAQrJ,WAAWsD,SAASr0J,EAAQk6J,EAAa,IAAInJ,YAEzD,OADAqJ,EAAQrJ,WAAWuD,iBAAiB8F,EAAOD,EAAQ,IAAIpJ,YAChDA,WAAWl/T,IAAIqoU,EAAaE,EAAO,IAAIrJ,YAGlDkG,mBAAmBH,EAAc/C,EAAegD,EAAWC,GACvD,MAAMqD,EAAiBrgV,EAAA/C,KAAIm0U,GAAUzqB,MAAM25B,6BAA6BxD,GAClEyD,EAAevgV,EAAA/C,KAAIm0U,GAAUzqB,MAAM25B,6BAA6BtD,GAChEwD,EAAcxgV,EAAA/C,KAAIm0U,GAAUzqB,MAAM25B,6BAA6BvD,GAC/D0D,EAAkBzgV,EAAA/C,KAAIm0U,GAAUzqB,MAAM25B,6BAA6BvG,GACzE,OAAKsG,GAAmBE,GAAiBC,GAAgBC,EAMlD,CACHlvQ,QAASmvQ,gBAAgBC,0CACrBN,EAAez1T,EACfy1T,EAAex1T,EACf01T,EAAa31T,EACb21T,EAAa11T,EACb21T,EAAY51T,EACZ41T,EAAY31T,EACZ41T,EAAgB71T,EAChB61T,EAAgB51T,GAEpBwmD,OAAQqvQ,gBAAgBC,0CACpBN,EAAez1T,EACfy1T,EAAex1T,EACf21T,EAAY51T,EACZ41T,EAAY31T,EACZ01T,EAAa31T,EACb21T,EAAa11T,EACb41T,EAAgB71T,EAChB61T,EAAgB51T,IAxBb,CACH0mD,OAAO,EACPF,MAAM,GA0BlBgnQ,gBAAgB9E,EAAWnsU,GACvB,MAAMtH,EAAQ,CACV84C,MAAOhW,GAAGC,KAAKy9J,MAAMxnJ,QAEnByJ,EAAY,GAOlB,GANAgxR,EAAU/uU,SAAQ,CAACnC,EAAGqD,KACdA,EAAM,GACN68C,EAAUl9C,KAAK,IAAI8sU,OAAO2F,kBAAkB3F,OAAO4F,aAAaC,cAAczE,EAAU7tU,EAAM,IAAKysU,OAAO4F,aAAaC,cAAc31U,GAAI8vU,OAAO8F,UAAUC,OAAOC,oBAI5J,aAAT/wU,EACAtH,EAAc,OAAIyiD,EAAUr9C,QAAO,CAAC6S,EAAGsP,IAAMtP,EAAIsP,GAAG,QAEnD,GAAa,YAATjgB,EACLtH,EAAiB,UAAIyiD,EAAUr9C,QAAO,CAAC6S,EAAGsP,IAAMtP,EAAIsP,GAAG,GAEvDvnB,EAAY,KAAIyzU,EAAUjzU,OAAS,EAAI9B,KAAKkrC,KAAKlrC,KAAKs5B,IAAIq6S,OAAOyO,gBAAgBC,cAActN,GAAY,IAAM,OAEhH,GAAa,UAATnsU,EACL,MAAO,GAGX,OAAOtH,G,cCzgCf,SAAgB,SAAW,CAAC,EAAE,YAAY,KAAO,SAASoxD,EAAU4vR,EAAOC,EAAQC,EAAS5/U,GACxF,MAAO,wZACT,SAAU,GCFZ,GAAgB,SAAW,CAAC,EAAE,YAAY,KAAO,SAAS8vD,EAAU4vR,EAAOC,EAAQC,EAAS5/U,GACxF,IAAI6/U,EAAiB,MAAVH,EAAiBA,EAAU5vR,EAAUgwR,aAAe,GAAKC,EAAOjwR,EAAUkwR,iBAAkBC,EAAiBnwR,EAAUmwR,gBAAkB,SAAS5gV,EAAQmtD,GACjK,GAAIxxD,OAAOqB,UAAUC,eAAeC,KAAK8C,EAAQmtD,GAC/C,OAAOntD,EAAOmtD,IAKtB,MAAO,qtEACHuzR,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,oBAAoB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC5K,unDACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,oBAAoB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC5K,iuBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC3K,krEACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC3K,iwBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,sBAAsB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC9K,mgBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,qBAAqB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC7K,4fACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC3K,igBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,oBAAoB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC5K,yhBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,sBAAsB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,QAC9K,u5BACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,sBAAsB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,IAAI,OAAS,IAAI,IAAM,CAAC,KAAO,IAAI,OAAS,QAChL,wuBACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,qBAAqB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,IAAI,OAAS,IAAI,IAAM,CAAC,KAAO,IAAI,OAAS,QAC/K,yrEACA+/U,EAAOE,EAAeN,EAAQ,QAAQpjV,KAAKsjV,EAAO,qBAAqB,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO7/U,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,IAAI,OAAS,IAAI,IAAM,CAAC,KAAO,IAAI,OAAS,QAC/K,+GACJ,SAAU,GCdZZ,EAAAA,EAAAA,KAAUA,EAAAA,EAAAA,MAAW,GACrBA,EAAAA,EAAAA,QAAaA,EAAAA,EAAAA,SAAc,GAC3BA,EAAAA,EAAAA,QAAAA,YAAyBm4E,EAAAA,QAEzB57E,EAAAA,EAAAA,SAAkB,SAiyKlB,QA7xKGyD,EAAAA,EAAAA,KAD2B,OACR,WAElB,MAAM9C,EAAiBtB,OAAOqB,UAAUC,eAExC,IAAI4jV,EAAY,CACZC,SAAU,SACVhoS,MAAO,aACPx8C,OAAQ,CACJykV,WAAY,QACZzgJ,kBAAmB,KAEvBx3J,QAAS,CACLk4S,MAAO,YACP3qU,QAAS,aACT4qU,uBAAwB,oBACxBz2J,MAAO,QACPtgJ,YAAa,iBACbg3S,SAAU,eAEdC,gBAAiB,GACjBt7U,SAAU,GAEV4rU,OAAQ,KACR2P,QAAS,KACT3pQ,gBAAiB,KAEjBt5C,gBAAiB,SAAUl5B,EAAKy2C,GAC5B,IAAIn/C,EAAOC,KACPoJ,EAASrJ,EAAKzB,IAAMyB,EAAKzB,IAAIqB,QAAQyJ,OAAS7F,EAAAA,EAAAA,IAAAA,OAClD,OAAOA,EAAAA,EAAAA,KAAAA,gBAAwB6F,EAAQX,EAAKy2C,IAGhD5B,gBAAiB,SAAUC,EAAYp5C,EAAMo0B,GACzC,OAAOh1B,EAAAA,EAAAA,QAAAA,UAAAA,gBAAAA,KAA0CvD,KAAMu9C,EAAYp5C,EAAMo0B,KAIjFz4B,EAAAA,EAAAA,QAAAA,OAAwBA,EAAAA,EAAAA,QAAAA,QAAyB,QACjDA,EAAAA,EAAAA,QAAAA,cAA+BA,EAAAA,EAAAA,QAAAA,eAAgC,eAC/DA,EAAAA,EAAAA,MAAAA,cAA6BA,EAAAA,EAAAA,MAAAA,eAA8B,0BAC3DA,EAAAA,EAAAA,MAAAA,iBAAgCA,EAAAA,EAAAA,MAAAA,kBAAiC,6BACjEA,EAAAA,EAAAA,MAAAA,WAA0BA,EAAAA,EAAAA,MAAAA,YAA2B,uBACrDA,EAAAA,EAAAA,MAAAA,YAA2BA,EAAAA,EAAAA,MAAAA,aAA4B,iBAEvDukV,EAAUh7U,SAASg7U,EAAU/nS,OAASuoS,EAAAA,QACtCR,EAAUh7U,SAASg7U,EAAU/nS,MAAQ,YAAcwoS,EACnDT,EAAUh7U,SAASg7U,EAAU/nS,MAAQ,YAAcyoS,EAEnD,MAAMC,EAAU,SAAU1mV,EAAKkF,GAC3B,IAAIzD,EAAOC,KACXD,EAAKzB,IAAMA,EACXyB,EAAKyD,OAASA,EAEd5E,QAAQC,QAAQkB,EAAKzB,IAAIi2D,eAAe71D,KAAK,SAAUgL,GACnD3J,EAAKklV,SAAWv7U,GAClBw2C,KAAKngD,IAEPA,EAAK6kM,cAAgBtmM,EAAIokB,mBAEzB3iB,EAAKuwL,cAAgB,KAIrBvwL,EAAKmlV,iBAAmB5mV,EAAI61D,UAC5B71D,EAAI61D,UAAY,SAAUz0D,EAAQC,GAC1BrB,EAAI0I,SACJ1I,EAAI2I,OAAOk+U,oBAAoBzkV,KAAK8C,EAAQ9D,GAG5CK,EAAKmlV,iBAAiBxkV,KAAKpC,EAAKoB,EAAQC,KAIpDqlV,EAAQxkV,UAAUU,UAAY,WAC1B,OAAOlB,KAAK1B,IAAI4C,aAEpB8jV,EAAQxkV,UAAUumB,UAAY,WAC1B,OAAO/mB,KAAK1B,IAAIyoB,aAEpBi+T,EAAQxkV,UAAUiiB,cAAgB,WAC9B,OAAOziB,KAAK1B,IAAImkB,iBAEpBuiU,EAAQxkV,UAAU8zD,YAAc,WAC5B,OAAOt0D,KAAK1B,IAAIg2D,eAEpB0wR,EAAQxkV,UAAUywL,iBAAmB,WACjC,GAAIjxL,KAAKswL,cACL,OAAOtwL,KAAKswL,cAEhB,GAAkC,OAA9BtwL,KAAK1B,IAAI4W,iBACTlV,KAAKswL,cAAgBtwL,KAAK1B,IAAI4W,iBAAiB,OAC9C,CACD,IAAIoG,EAAStb,KAAK1B,IAAIqB,QAAQqpC,gBAC9BhpC,KAAKswL,eAAiBh1K,EAAO,GAAKA,EAAO,IAAMtb,KAAKwD,OAAO1D,OAAOgkM,kBAGtE,OAAO9jM,KAAKswL,eAEhB00J,EAAQxkV,UAAUs1D,uBAAyB,SAAUp2D,GACjD,OAAOM,KAAK1B,IAAIw3D,uBAAuBp2D,IAE3CslV,EAAQxkV,UAAU2zD,UAAY,SAAUxzD,GACpCX,KAAKklV,iBAAiBxkV,KAAKV,KAAK1B,IAAKqC,IAEzCqkV,EAAQxkV,UAAU8pD,UAAY,SAAUhvC,GACpCtb,KAAK1B,IAAIgsD,UAAUhvC,IAEvB0pU,EAAQxkV,UAAUu2D,cAAgB,SAAU5S,GACxCnkD,KAAK1B,IAAIy4D,cAAc5S,IAE3B6gS,EAAQxkV,UAAU4zD,YAAc,SAAUC,GACtCr0D,KAAK1B,IAAI81D,YAAYC,IAIzB,MAAM1gD,EAAe,SAAUnP,EAAO0C,GAClC,OAAO1C,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,KAClB0E,EAAMvE,KAAKwhB,wBAAwBva,GAAK7D,OAAS,EACjDmB,EAAMmP,aAAazM,IAIrBk+U,EAAe,SAAUtzU,EAAQuzU,GACnC,IAAIzkV,EAAS,IACTiiD,EAAKwiS,EAAU,GAAKvzU,EAAO,GAC3BgxC,EAAKuiS,EAAU,GAAKvzU,EAAO,GAC3B7P,EAAQV,KAAK6kM,KAAKtjJ,EAAKD,GAK3B,OAHIA,EAAK,IACL5gD,GAAgBV,KAAKS,IAElB,CAAC8P,EAAO,GAAKlR,EAASW,KAAKY,IAAIF,GAAQ6P,EAAO,GAAKlR,EAASW,KAAKa,IAAIH,KAG1EqjV,EAAkB,SAAU77U,EAAIm5C,GAClC,IAAIC,EAAKD,EAAG,GAAKn5C,EAAG,GAChBq5C,EAAKF,EAAG,GAAKn5C,EAAG,GACpB,OAAOo5C,EAAKA,EAAKC,EAAKA,GAGpByiS,EAAkB,SAAU5pT,GAK9B,IAAI57B,EAAOC,KAEX,IADA27B,EAAMA,GAAO,IACL6pT,cAAe,CACnB,IAAIC,EAAY9pT,EAAI+pT,YAAYl7U,QAChCi7U,EAAU73T,EAAIrsB,KAAKirC,MAAoB,EAAdi5S,EAAU73T,EAAQ,IAC3C,IAAI+3T,EAAaC,EAAcllV,KAAKX,EAAM0lV,GAC1C,GAAIE,EAAY,CAGZ,IAAIxpT,EAAc,CAACR,EAAI6pT,cAAeG,GAAYx7T,MAAK,SAAUrP,EAAGsP,GAChE,OAAOk7T,EAAgB3pT,EAAIkqT,eAAgB/qU,GAAKwqU,EAAgB3pT,EAAIkqT,eAAgBz7T,MAExF,OAAOg7T,EAAah1U,MAAMpQ,KAAMm8B,IAGxC,OAAO,MAGLypT,EAAgB,SAAUxyJ,EAAOlsL,GACnC,IAAInH,EAAOC,KACP8lV,EAAYC,EAAyBhmV,EAAKk1U,OAAOvrB,MAAOt2H,GAC5D,GAAI0yJ,EAAW,CACXA,EAAY5Q,OAAO4F,aAAaC,cAAc+K,GAC9C,MAAME,EAAe9+U,GAAOnH,EAAKkH,OAAOmvD,UACxC,OAAIr2D,EAAKkH,OAAOC,MAAQ8+U,EACbziV,EAAAA,EAAAA,KAAAA,UAAkB,CAAC2xU,OAAO3zU,KAAK0kV,UAAUH,EAAU5rB,WAAYgb,OAAO3zU,KAAK0kV,UAAUH,EAAU3rB,WAAYp6T,EAAKkH,OAAOC,IAAK8+U,GAE5H,CAAC9Q,OAAO3zU,KAAK0kV,UAAUH,EAAU5rB,WAAYgb,OAAO3zU,KAAK0kV,UAAUH,EAAU3rB,WAG5F,OAAO,MAIL+rB,EAA4B,SAAU/hS,EAAYg2Q,GACpD,IAAIp6T,EAAOC,KAEPmmV,EAAOpmV,EAAKk1U,OAAOyH,OAAO0J,QAAQD,KAClCE,EAAkBliS,EAAapkD,EAAK6kV,QAAQK,SAASn2R,wBAAwBv8B,OAC7E+zT,EAAwB/kV,KAAKY,IAAIZ,KAAKyoB,IAAImwS,IAG9C,OAFoBksB,EAAkBtmV,EAAK6kV,QAAQhgJ,cAAgB0hJ,EAE3C,EAAK/kV,KAAKqkM,IAAIugJ,EAAO,IAG3CI,EAA4B,SAAUliS,EAAU81Q,GAClD,IAAIp6T,EAAOC,KAEPq9D,EAASt9D,EAAKk1U,OAAOvrB,MAAMrsP,OAC3B8oR,EAAOpmV,EAAKk1U,OAAOyH,OAAO0J,QAAQD,KAElCK,EAAgB,EAAIniS,EAAW9iD,KAAKqkM,IAAIugJ,EAAO,GAC/CG,EAAwB/kV,KAAKY,IAAIZ,KAAKyoB,IAAImwS,IAE1Ch2Q,EADkBqiS,EAAgBzmV,EAAK6kV,QAAQhgJ,cAAgB0hJ,EAChCjpR,EAAO8pF,aAItCrgI,EAAc/mB,EAAKzB,IAAI4W,iBAC3B,GAAoB,OAAhB4R,EAEA,IAAK,IAAI5kB,EAAI,EAAGgiB,GADhB4C,EAAc,IAAIhmB,MAAM,KACSuC,OAAQnB,EAAIgiB,IAAMhiB,EAC/C4kB,EAAY5kB,GAAKnC,EAAK6kV,QAAQ3zJ,mBAAqB1vL,KAAKs5B,IAAI,EAAG34B,GAKvE,IAAK,IAAIoV,EAAI,EAAGA,EAAIwP,EAAYzjB,OAAQiU,IAAK,CACzC,GAAIwP,EAAYxP,GAAK/V,KAAKyoB,IAAIm6B,GAAa,CACvCA,EAAar9B,EAAYxP,EAAI,GAC7B,MACG,GAAIwP,EAAYxP,KAAO/V,KAAKyoB,IAAIm6B,GAAa,CAChDA,EAAar9B,EAAYxP,GACzB,MACOA,IAAMwP,EAAYzjB,OAAS,IAClC8gD,EAAar9B,EAAYxP,IAIjC,OAAO6sC,GAGLsiS,EAAmB,SAAU/J,EAAQz6U,EAAOyjC,EAAMszG,EAAW0iD,GAC/D,IAYIntH,EAZAo8G,EAAQuqJ,OAAO3zU,KAAKopL,MACpB+7J,EAAexR,OAAOwR,aAEtB/mV,EAAU+7L,GAAe,GACzBrrI,EAAWq2R,EAAa/mV,EAAQ0wD,SAAU,KAE1C+6I,EAAS,SAAUtwL,GACnB,OAAOA,GAEPy9L,EAASmuI,EAAa/mV,EAAQ44M,OAAQnN,GACtC7yK,EAAW54B,EAAQ44B,SAGnBouT,EAAe,EACfC,EAAe,IAAI1R,OAAO2R,QAE9B,OAAO,IAAIjoV,SAAQ,SAAUC,EAASk1B,GAElC,SAASgqJ,EAAU3jF,GACV7rB,IACDA,EAAQ6rB,GAEZ,IAAIs/G,EAAWnB,EAAO5tB,GAAOvwF,EAAY7rB,GAASle,EAAU,EAAG,IAE/DqsR,EAAO1jM,UAAUxuI,MAAMo8U,GACvB,IAAIE,GAAaptI,EAAWitI,GAAgB1kV,EAC5C0kV,EAAejtI,EAEfgjI,EAAOqK,gBAAgB/tM,GACvB0jM,EAAOvvI,OAAOznK,EAAMohT,GACpBpK,EAAOqK,gBAAgBH,GAEnBltI,EAAW,EACXpyD,sBAAsBy2B,IAElBxlJ,GACAA,IAEJ15B,KAKRyoJ,sBAAsBy2B,OAIxBgoK,EAA2B,SAAUr8B,EAAOt2H,GAC9C,IAAI4zJ,EAAMt9B,EAAMgzB,OAAOC,WAAWvpJ,GAElC,OADas2H,EAAMosB,MAAM2G,KAAKuK,EAAKt9B,IAClBA,EAAMgzB,OAAOuK,cAAc7zJ,IAG1C8zJ,EAAkB,SAAUx9B,GAC9B,IAAIrsP,EAASqsP,EAAMrsP,OACf18D,EAAS,IAAIu0U,OAAO4B,WACpBz5Q,EAAO6lF,YAAc,EACrB7lF,EAAO8pF,aAAe,GAC1B,OAAO4+L,EAAyBr8B,EAAO/oT,IAGrCwmV,EAAkB,SAAUz9B,GAC9B,IAAIrsP,EAASqsP,EAAMrsP,OACfgX,EAAS,IAAI6gQ,OAAO4B,WACpBz5Q,EAAO6lF,YAAc,EAAG7lF,EAAO8pF,cACnC,OAAO4+L,EAAyBr8B,EAAOr1O,IAGrC+yQ,EAAe,SAAU19B,GAC3B,IAAIgzB,EAAShzB,EAAMgzB,OACf2K,EAAQ3K,EAAO0J,QAAQD,KAAO,EAC9B/hK,EAAYs4J,EAAOt4J,UACnB/vH,EAAW6gR,OAAOoS,WAAWC,cAAc7K,EAAOpoQ,MAAO+yQ,GACzD5nU,EAASy1T,OAAOsS,QAAQC,eAAepzR,GACvCqmF,EAAS,IAAIw6L,OAAO4E,WAExB,OADA5E,OAAOsS,QAAQE,iBAAiBjoU,EAAQ2kK,EAAW1pC,GAC5C,IAAIw6L,OAAOyS,IAAIjL,EAAOpwU,SAAUouI,IAGrCktM,EAA8B,SAAUl+B,EAAOv7L,EAAS05N,EAAcnsJ,GACxE,IAAIghJ,EAAShzB,EAAMgzB,OAEfoL,EAAgBC,EAAqBr+B,EAAOm+B,GAC5CniT,EAAOg3S,EAAOpoQ,MACd0zQ,EAAa9S,OAAOoS,WAAWC,cAAc7hT,EAAMoiT,GACnDzzR,EAAW6gR,OAAOsS,QAAQC,eAAeO,GAGzCttM,EAAS,IAAIw6L,OAAO4E,WACxB5E,OAAO4E,WAAWsD,SAASV,EAAOpwU,SAAUu7U,EAAcntM,GAC1D,IAAIutM,EAAS,IAAI/S,OAAO4E,WACxB5E,OAAOsS,QAAQE,iBAAiBrzR,EAAUqmF,EAAQutM,GAClD/S,OAAO4E,WAAWl/T,IAAIqtU,EAAQJ,EAAcI,GAG5C,IAAIjvM,EAAYk8L,OAAO2R,QAAQqB,gBAAgBD,GAC/CxB,EAAiB/J,EAAQvuN,EAAS85N,EAAQjvM,EAAW0iD,IAGnDysJ,EAAqB,SAAUx5N,EAAOuiB,EAAQk3M,GAGhD,IAAIttU,EAAI,IAAIo6T,OAAO4E,WACf1vT,EAAI,IAAI8qT,OAAO4E,WACftxU,EAAI,IAAI0sU,OAAO4E,WACnB5E,OAAO4E,WAAWvqM,UAAU5gB,EAAO7zG,GACnCo6T,OAAO4E,WAAWvqM,UAAU2B,EAAQ9mH,GACpC8qT,OAAO4E,WAAWuO,MAAMvtU,EAAGsP,EAAG5hB,GAE9B,IAAI8/U,EAASpT,OAAO4E,WAAWyO,IAAIztU,EAAGsP,GAClCo+T,EAAOtT,OAAO4E,WAAW2O,UAAUjgV,GAGnCkgV,EAAOxT,OAAO4E,WAAWyO,IAAIH,EAAQ5/U,GACrCvG,EAAQV,KAAKqnE,MAAM4/Q,EAAMF,GAC7B,OAAOI,GAAQ,EAAIzmV,GAASA,GAG1B8lV,EAAuB,SAAUr+B,EAAOi/B,GAQ1C,IAAIjM,EAAShzB,EAAMgzB,OACfkM,EAAKlM,EAAO0J,QAAQD,KAAO,EAC3Ba,EAAMI,EAAa19B,GACnBtlI,EAAY8wJ,OAAO4E,WAAWtvU,MAAMw8U,EAAI5iK,WAC5C8wJ,OAAO4E,WAAWoD,OAAO94J,EAAWA,GAEpC,IAAIgkK,EAAS,IAAIlT,OAAO4E,WACxB5E,OAAO8F,UAAUC,MAAM4N,wBAAwBF,EAAOP,GAEtD,IAAIh0Q,EAAO,IAAI8gQ,OAAO4E,WAItB,OAHA5E,OAAO4E,WAAWoD,OAAOR,EAAOpoQ,MAAOF,GAE/B+zQ,EAAmBC,EAAQhkK,EAAWhwG,GACnCw0Q,GA8BTE,EAAS,SAAU1+U,EAAauhC,EAAQ9iC,EAAM8iG,EAAYo9O,EAAY3rB,GACxE,MAAMr9T,EAAOC,KAEb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IAAIuiT,EAAYlsU,EAAY9L,KAAI,SAAUmlF,GACtC,IAAIvtB,EAAcutB,EAIlB,OAHI1jF,EAAKkH,OAAOmvD,YAAcr2D,EAAKkH,OAAOC,MACtCgvD,EAAc3yD,EAAAA,EAAAA,KAAAA,UAAkBkgF,EAAY1jF,EAAKkH,OAAOmvD,UAAWr2D,EAAKkH,OAAOC,MAE5EguU,OAAO4F,aAAakO,YAAY9yR,EAAY,GAAIA,EAAY,OAGvEg/Q,OAAOh8E,KAAKn5P,EAAKk1U,OAAOh6P,gBAAgBguQ,0BAA0B3S,IAAY,SAAU4S,GACpF,IAAIr6Q,EAAWs6Q,EAAU9jS,EAAgB,EAEzC,GAAI1Z,IAAWhG,GAAGplC,KAAK2rH,eAAeC,KAClCt9C,EAAYzkE,EAAY,GAAG,GAC3B++U,EAAW/+U,EAAYA,EAAY/G,OAAS,GAAG,QAC5C,GAAIsoC,IAAWhG,GAAGplC,KAAK2rH,eAAeE,IACzCv9C,EAAYzkE,EAAY,GAAG,GAC3B++U,EAAW/+U,EAAYA,EAAY/G,OAAS,GAAG,OAC5C,CAEH+G,EAAY,GAAG,GAAK8+U,EAAiB,GAAG58N,KAAOzoF,KAAKC,MAEpD,IAAK,IAAI5hC,EAAI,EAAGA,EAAIgnV,EAAiB7lV,OAAQnB,IAAK,CAC9C,IAAI++G,EACJ,IAAImoO,EAAgB,GAEpBF,EAAiBhnV,GAAGoqH,KAAO,EAGvB88N,EADAlnV,EAAI,EAAIgnV,EAAiB7lV,OACT6lV,EAAiBv+U,MAAMzI,EAAI,EAAGA,EAAI,GAElCgnV,EAAiBv+U,MAAMzI,EAAI,GAK/CmjD,GAFA47D,EAAO,IAAIi0N,OAAO2F,kBAAkBuO,EAAc,GAAIA,EAAc,IAAIlO,gBAIxE9wU,EAAYlI,GAAG,GAAKgnV,EAAiBhnV,GAAGoqH,KAAO48N,EAAiBhnV,EAAI,GAAGoqH,KAAQ,KAAUrL,EAAOm8M,EAGpGvuP,EAAYq6Q,EAAiB,GAAG58N,KAChC68N,EAAWD,EAAiBA,EAAiB7lV,OAAS,GAAGipH,KAG7D,GAAsB,IAAlBjnE,EACA,IAAK,IAAI/tC,EAAI,EAAGA,EAAI4xU,EAAiB7lV,OAAQiU,IAAK,CAC9C,IAAI8xU,EAAgB,GAGhBA,EADA9xU,EAAI,EAAI4xU,EAAiB7lV,OACT6lV,EAAiBv+U,MAAM2M,EAAI,EAAGA,EAAI,GAElC4xU,EAAiBv+U,MAAM2M,EAAI,GAG/C+tC,GAAiB,IAAI6vR,OAAO2F,kBAAkBuO,EAAc,GAAIA,EAAc,IAAIlO,gBAI1FrsQ,EAAY,IAAIhrC,KAAKgrC,GAAW+lB,cAChCu0P,EAAW,IAAItlT,KAAKslT,GAAUv0P,cAE9B,IAAIy0P,EAAO,CAAC,CACR,GAAM,WACN,KAAQ,aACR,QAAW,OACZ,CACC,GAAM,OACN,KAAQxgV,EACR,aAAgBgmE,EAAY,IAAMs6Q,EAClC,SAAY,CACR,MAASt6Q,EACT,oBAAuBq6Q,EAAiB5qV,KAAI,SAAUgrV,EAAiBpnV,GACnE,OAAOypC,IAAWhG,GAAGplC,KAAK2rH,eAAeC,KAAO,CAAC,IAAItoF,KAAKz5B,EAAYlI,GAAG,IAAI0yF,cAAe00P,EAAgBpvB,UAAWovB,EAAgBnvB,SAAUmvB,EAAgB/2T,QAC7JoZ,IAAWhG,GAAGplC,KAAK2rH,eAAeE,IAAM,CAAC,IAAIvoF,KAAKz5B,EAAYlI,GAAG,IAAI0yF,cAAe00P,EAAgBpvB,UAAWovB,EAAgBnvB,SAAUmvB,EAAgB/2T,QACrJ,CAAC,IAAIsR,KAAKylT,EAAgBh9N,MAAM13B,cAAe00P,EAAgBpvB,UAAWovB,EAAgBnvB,SAAUmvB,EAAgB/2T,WAC7HtqB,QAAO,SAAU+Z,EAAMkhB,GACtB,OAAOlhB,EAAK3Z,OAAO66B,OAG3B,MAAS,CACL,gBAAmB,kBACnB,UAAayoE,EAAW/qG,OACxB,MAAS,CACL,KAAQ+qG,EAAW//D,WAEvB,aAAgB,CACZ,KAAQ+/D,EAAW7/D,aAEvB,aAAgB6/D,EAAW5/D,eAInCltC,EAAQ,CAAEwqV,KAAMA,EAAMhkS,cAAeA,EAAekkS,cAAen/U,WAKzEo/U,EAAiB,SAAUhmV,GAC7B,IAAIzD,EAAOC,KAEXD,EAAKyD,OAASA,EAEd,IAAIimV,EAAa,SAAU97U,GACZ3N,KAEN0pV,uBAAwB,GAE7BC,EAAY,WACZ,IAAI5pV,EAAOC,KAEXD,EAAK2pV,uBAAwB,EAC7B3pV,EAAK6pV,YAAcx8L,YAAYtpH,MAE3B/jC,EAAK2M,IAAIqxB,UAAU8gB,SAAS9+C,EAAKyD,OAAO8oC,QAAQo4S,YAChD3kV,EAAK2M,IAAIqxB,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQo4S,UAC9C3kV,EAAK8pV,yBAAyB9rT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQo4S,UACnE3kV,EAAK+pV,8BAA8B/rT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQo4S,UACxE3kV,EAAKgqV,2BAA2BhsT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQo4S,UACrE3kV,EAAKiqV,gCAAgCjsT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQo4S,YAI9EuF,EAAmB,WACRjqV,KACN85T,QAAS,GAEdowB,EAAiB,WACjB,IAAInqV,EAAOC,KACXD,EAAK+5T,QAAS,EACd/5T,EAAKyD,OAAOlF,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAA2B,CAAEwM,SAAUvM,EAAKyD,OAAOyD,OAAOq/J,mBAElF6jL,EAAoB,WACpB,IAAIpqV,EAAOC,KACPypC,EAAO1pC,EAAKyD,OAEZzD,EAAKyD,OAAOyD,OAAOmjV,eAAe1pV,KAAKX,EAAKyD,SAC5CzD,EAAKsqV,2BAET,IAAI3N,EAAS38U,EAAKuqV,YACdh+U,EAAWowU,EAAO6N,qBAElBxqV,EAAK+5T,SAEL0wB,EAAUzqV,EAAK0qV,cAAe/N,EAAOh3K,OACrC8kL,EAAUzqV,EAAK2qV,iBAAkBhO,EAAOvuN,SAExCpuH,EAAK4qV,gBACL5qV,EAAK6qV,YAAY,GAEbnhT,EAAKxiC,OAAOC,MAAQuiC,EAAKxiC,OAAOmvD,UAChCr2D,EAAK8qV,UAAYtnV,EAAAA,EAAAA,KAAAA,UAAkB,CAAC2xU,OAAO3zU,KAAK0kV,UAAU35U,EAAS4tT,WAAYgb,OAAO3zU,KAAK0kV,UAAU35U,EAAS6tT,WAAY1wR,EAAKxiC,OAAOC,IAAKuiC,EAAKxiC,OAAOmvD,WAEvJr2D,EAAK8qV,UAAY,CAAC3V,OAAO3zU,KAAK0kV,UAAU35U,EAAS4tT,WAAYgb,OAAO3zU,KAAK0kV,UAAU35U,EAAS6tT,WAGhG1wR,EAAKm7S,QAAQzwR,UAAUp0D,EAAK8qV,WAC5BphT,EAAKm7S,QAAQ7tR,cAAcwvR,EAA0B7lV,KAAK+oC,EAAMn9B,EAASimB,OAAQjmB,EAAS6tT,YAO1Fp6T,EAAK8qV,YACLphT,EAAKqhT,OAASrhT,EAAKqhT,QAAUrhT,EAAKnrC,IAAI2G,mBAAmB,0BAA0B,GAC/EwkC,EAAKqhT,QACLrhT,EAAKqhT,OAAOz/U,gBAAgB3M,MAAK,WAE7B+qC,EAAKqhT,OAAO7qV,KAAK8qV,aAAa,CAAEz+U,SAAUvM,EAAK8qV,UAAW18N,QAASuuN,EAAOvuN,QAASsxM,IAAK1/T,EAAKyD,OAAOyD,OAAOugF,sBAMvHgjQ,EAAY,SAAUrpS,EAASl/C,GAC/B,IAAIg0B,EAAQkrB,EAAQ6pS,UACpB,MAAMnoV,EAAQ,UAAYqyU,OAAO3zU,KAAK0kV,UAAUhkV,GAAS,KAAOg0B,EAAMtI,EAAKsI,EAAM3D,MAAQ,GAAM,KAAO2D,EAAMrI,EAAKqI,EAAM1D,OAAS,GAAM,IACtI5lB,SAAS6xF,uBAAuBr9C,EAAQrlB,UAAUmvT,SAAS,GAAG79T,aAAa,YAAavqB,IAG5F9C,EAAKmrV,kBAAoB3nV,EAAAA,EAAAA,KAAAA,cAAwB,CAAC,cAAgB,CAAC,aAAc,YACjFxD,EAAKorV,YAAc1B,EAAWvpS,KAAKngD,GAEnCA,EAAKqrV,iBAAmB7nV,EAAAA,EAAAA,KAAAA,cAAwB,CAAC,cAAgB,CAAC,YAAa,cAC/ExD,EAAKsrV,WAAa1B,EAAUzpS,KAAKngD,GAEjCA,EAAKurV,UAAYrB,EAAiB/pS,KAAKngD,GACvCA,EAAKwrV,QAAUrB,EAAehqS,KAAKngD,GACnCA,EAAK2sQ,WAAay9E,EAAkBjqS,KAAKngD,GAEzCA,EAAKuhD,UAAY,CACbkqS,KAAM,WACNr+I,OAAQ,aACRs+I,UAAW,aACXC,UAAW,QACXC,WAAY,SACZC,UAAW,QACXC,QAAS,OAGb9rV,EAAK+rV,SAAW5W,OAAO3zU,KAAKq+S,WAAW,IACvC7/S,EAAKgsV,SAAW7W,OAAO3zU,KAAKq+S,WAAW,GAEvC7/S,EAAK88C,UAET2sS,EAAehpV,UAAU0/C,KAAO,WAC5B,IAAIngD,EAAOC,KAeX,SAAS0T,IACA3T,EAAK6pV,cACN7pV,EAAK6pV,YAAcx8L,YAAYtpH,OAEpBspH,YAAYtpH,MAAQ/jC,EAAK6pV,YACzB,MAAuC,IAA/B7pV,EAAK2pV,wBACnB3pV,EAAK2M,IAAIqxB,UAAU8gB,SAAS9+C,EAAKyD,OAAO8oC,QAAQo4S,YACjD3kV,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQo4S,UAC3C3kV,EAAK8pV,yBAAyB9rT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQo4S,UAChE3kV,EAAK+pV,8BAA8B/rT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQo4S,UACrE3kV,EAAKgqV,2BAA2BhsT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQo4S,UAClE3kV,EAAKiqV,gCAAgCjsT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQo4S,YAI/E3kV,EAAKisV,iBAAmB1kM,sBAAsB5zI,GA3BlD3T,EAAKuqV,YAAYgB,UAAU1/U,iBAAiB7L,EAAKurV,WACjDvrV,EAAKuqV,YAAYiB,QAAQ3/U,iBAAiB7L,EAAKwrV,SAC/CxrV,EAAKyD,OAAOyxU,OAAOvrB,MAAMh9C,WAAW9gQ,iBAAiB7L,EAAK2sQ,YAG1D3sQ,EAAKmrV,kBAAkB3jV,SAAQ,SAAUs4B,GACrC9/B,EAAK2M,IAAId,iBAAiBi0B,EAAO9/B,EAAKorV,gBAE1CprV,EAAKqrV,iBAAiB7jV,SAAQ,SAAUs4B,GACpC9/B,EAAK2M,IAAId,iBAAiBi0B,EAAO9/B,EAAKsrV,eAoB1CtrV,EAAKisV,iBAAmB1kM,sBAAsB5zI,IAElD81U,EAAehpV,UAAUyrV,OAAS,WAC9B,IAAIlsV,EAAOC,KAEXD,EAAK2M,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAGvBC,EAAKuqV,YAAYgB,UAAU3qS,oBAAoB5gD,EAAKurV,WACpDvrV,EAAKuqV,YAAYiB,QAAQ5qS,oBAAoB5gD,EAAKwrV,SAClDxrV,EAAKyD,OAAOyxU,OAAOvrB,MAAMh9C,WAAW/rN,oBAAoB5gD,EAAK2sQ,YAG7D3sQ,EAAKmrV,kBAAkB3jV,SAAQ,SAAUs4B,GACrC9/B,EAAK2M,IAAIi0C,oBAAoB9gB,EAAO9/B,EAAKorV,gBAE7CprV,EAAKqrV,iBAAiB7jV,SAAQ,SAAUs4B,GACpC9/B,EAAK2M,IAAIi0C,oBAAoB9gB,EAAO9/B,EAAKsrV,eAE7C55U,OAAO81I,qBAAqBxnJ,EAAKisV,kBACjCjsV,EAAK6pV,iBAAcxlV,EACnBrE,EAAKisV,sBAAmB5nV,GAE5BolV,EAAehpV,UAAU8pV,UAAY,WAGjC,OAFWtqV,KAECwD,OAAOyxU,OAAOvrB,MAAMgzB,QAEpC8M,EAAehpV,UAAU+oD,eAAiB,WACtC,IAAIxpD,EAAOC,KAEX,GAAID,EAAKyD,OAAOyxU,OAAQ,CACpB,IAAIyH,EAAS38U,EAAKyD,OAAOyxU,OAAOvrB,MAAMgzB,OAClCmJ,EAAiBnJ,EAAO6N,qBAExB1C,EAAeV,EAAgBpnV,EAAKyD,OAAOyxU,OAAOvrB,OACtD,GAAIm+B,EAAc,CACd,IAAIxjS,EAAW6wR,OAAO4E,WAAWz1R,SAASq4R,EAAOpwU,SAAUu7U,GAE3D,MAAO,CACHl5R,GAAI,CAACk3R,EAAe3rB,UAAW2rB,EAAe1rB,SAAU0rB,EAAetzT,QACvEq8B,KAAM,CAAC8tR,EAAOvuN,QAASuuN,EAAOh3K,MAAOg3K,EAAOwP,MAC5Cr9R,KAAMxK,MAKtBmlS,EAAehpV,UAAUq8C,OAAS,WAC9B,IAAI98C,EAAOC,KAEPD,EAAK2M,KACL3M,EAAK2M,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAC1BC,EAAKmgD,QAGLngD,EAAKyD,OAAO85C,gBAAgBv9C,EAAKyD,OAAO84C,MAAQ,WAAY,GAAI,SAAU5yC,GAEtE3J,EAAK2M,IAAMC,SAASC,cAAc,OAClC7M,EAAK2M,IAAIqxB,UAAUnjB,IAAI7a,EAAKyD,OAAO84C,MAAQ,YAC3Cv8C,EAAK2M,IAAIS,UAAYzD,EACrB3J,EAAKyD,OAAOlF,IAAIoO,IAAIG,YAAY9M,EAAK2M,KAIrC,IAAIy/U,EAAe,IAAMpsV,EAAKyD,OAAO84C,MAAQv8C,EAAKuhD,UAAUkqS,KAE5DzrV,EAAKqsV,mBAAqBrsV,EAAK2M,IAAIsL,cAAc,WAAam0U,EAAa5iV,QAAQ,IAAK,IAAvC,WACjDxJ,EAAKqsV,mBAAmBxgV,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBC,EAAKssV,UAAUnsS,KAAKngD,IAEjFA,EAAK0qV,cAAgB1qV,EAAK2M,IAAIsL,cAAcm0U,EAAe,cAE3DpsV,EAAK8pV,yBAA2B9pV,EAAK2M,IAAIsL,cAAcm0U,EAAe,iBACtEpsV,EAAK+pV,8BAAgC/pV,EAAK2M,IAAIsL,cAAcm0U,EAAe,uBAE3EpsV,EAAKusV,oBAAsBvsV,EAAK2M,IAAIsL,cAAc,WAAam0U,EAAa5iV,QAAQ,IAAK,IAAvC,WAClDxJ,EAAKusV,oBAAoB1gV,iBAAiB,YAAa,SAAU7M,GAC7D,IAAIgB,EAAOC,KAEPjB,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExB,IAAIo8O,EAAgB,IAAIrX,OAAO4B,WAC3B31R,EAAUpiD,EAAEihD,cACZwsS,EAAYztV,EAAEihD,cAAc8O,wBAC5BnuD,EAAS,IAAIu0U,OAAO4B,YAAY0V,EAAUl4Q,MAAQk4Q,EAAUp4Q,MAAQ,GAAMo4Q,EAAUn4Q,OAASm4Q,EAAUr4Q,KAAO,GAC9Gs4Q,EAAgB,IAAIvX,OAAO4B,WAAW/3U,EAAEolF,QAAUqoQ,EAAUp4Q,KAAMr1E,EAAEqlF,QAAUooQ,EAAUr4Q,KACxFumE,EAASw6L,OAAO4B,WAAWsG,SAASqP,EAAe9rV,EAAQ4rV,GAM/D,OAJAxsV,EAAK2sV,aAAahsV,KAAKX,EAAMohD,EAASu5F,GAEtC37I,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GACTlwD,KAAKngD,IAGPA,EAAK6sV,OAAS7sV,EAAK2M,IAAIsL,cAAcm0U,EAAepsV,EAAKuhD,UAAUuqS,SACnE9rV,EAAK6sV,OAAOhhV,iBAAiBrI,EAAAA,EAAAA,KAAAA,cAAwB,YAAc,aAAc,SAAUxE,GAEvF,GAAIA,EAAE0O,OAAO2vB,SAMT,OALIr+B,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpxG,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,EAGPrxG,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpwG,EAAKsrV,WAAWtsV,GAEhB,IAAI8tV,EAAUtpV,EAAAA,EAAAA,KAAAA,cAAwB,UAAY,WAwBlD,OAtBAoJ,SAASg0C,oBAAoBksS,EAAS9sV,EAAK+sV,uBAAuB,GAClE/sV,EAAK+sV,2BAAwB1oV,EAE7BrE,EAAKyrV,KAAK9qV,KAAKX,EAAM,GAErBA,EAAKgtV,eAAiBlzJ,YAAY,WACzB95L,EAAKitV,iBACLjtV,EAAK+sV,wBADkB/sV,EAAKyrV,KAAK9qV,KAAKX,EAAM,IAEnDmgD,KAAKngD,GAAO,KAEdA,EAAK+sV,sBAAwB,WACzBlzJ,cAAc75L,EAAKgtV,gBACnBhtV,EAAKgtV,oBAAiB3oV,EAEtBuI,SAASg0C,oBAAoBksS,EAAS9sV,EAAK+sV,uBAAuB,GAClE/sV,EAAK+sV,2BAAwB1oV,GAGjCuI,SAASf,iBAAiBihV,EAAS9sV,EAAK+sV,uBAAuB,GAE/D/tV,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GACTlwD,KAAKngD,IAGPA,EAAKktV,SAAWltV,EAAK2M,IAAIsL,cAAcm0U,EAAepsV,EAAKuhD,UAAUsqS,WACrE7rV,EAAKktV,SAASrhV,iBAAiBrI,EAAAA,EAAAA,KAAAA,cAAwB,YAAc,aAAc,SAAUxE,GAGzF,GAAIA,EAAE0O,OAAO2vB,SAMT,OALIr+B,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpxG,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,EAGPrxG,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpwG,EAAKsrV,WAAWtsV,GAEhB,IAAI8tV,EAAUtpV,EAAAA,EAAAA,KAAAA,cAAwB,UAAY,WAwBlD,OAtBAoJ,SAASg0C,oBAAoBksS,EAAS9sV,EAAKmtV,yBAAyB,GACpEntV,EAAKmtV,6BAA0B9oV,EAE/BrE,EAAKyrV,KAAK9qV,KAAKX,GAAO,GAEtBA,EAAKotV,iBAAmBtzJ,YAAY,WAC3B95L,EAAKqtV,mBACLrtV,EAAKmtV,0BADoBntV,EAAKyrV,KAAK9qV,KAAKX,GAAO,IAEtDmgD,KAAKngD,GAAO,KAEdA,EAAKmtV,wBAA0B,WAC3BtzJ,cAAc75L,EAAKotV,kBACnBptV,EAAKotV,sBAAmB/oV,EAExBuI,SAASg0C,oBAAoBksS,EAAS9sV,EAAKmtV,yBAAyB,GACpEntV,EAAKmtV,6BAA0B9oV,GAGnCuI,SAASf,iBAAiBihV,EAAS9sV,EAAKmtV,yBAAyB,GAEjEnuV,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GACTlwD,KAAKngD,IAGP,IAAIstV,EAAiB,IAAMttV,EAAKyD,OAAO84C,MAAQv8C,EAAKuhD,UAAU6rJ,OAE9DptM,EAAKutV,qBAAuBvtV,EAAK2M,IAAIsL,cAAc,WAAaq1U,EAAe9jV,QAAQ,IAAK,IAAzC,WACnDxJ,EAAKutV,qBAAqB1hV,iBAAiB9L,EAAAA,EAAAA,MAAAA,MAAoBC,EAAKwtV,cAAcrtS,KAAKngD,IAEvFA,EAAK2qV,gBAAkB3qV,EAAK2M,IAAIsL,cAAcq1U,EAAiB,cAE/DttV,EAAKgqV,2BAA6BhqV,EAAK2M,IAAIsL,cAAcq1U,EAAiB,iBAC1EttV,EAAKiqV,gCAAkCjqV,EAAK2M,IAAIsL,cAAcq1U,EAAiB,uBAE/EttV,EAAKytV,sBAAwBztV,EAAK2M,IAAIsL,cAAc,WAAaq1U,EAAe9jV,QAAQ,IAAK,IAAzC,WACpDxJ,EAAKytV,sBAAsB5hV,iBAAiB,YAAa,SAAU7M,GAC/D,IAAIgB,EAAOC,KAEPjB,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExB,IAAIo8O,EAAgB,IAAIrX,OAAO4B,WAC3B31R,EAAUpiD,EAAEihD,cACZwsS,EAAYztV,EAAEihD,cAAc8O,wBAC5BnuD,EAAS,IAAIu0U,OAAO4B,YAAY0V,EAAUl4Q,MAAQk4Q,EAAUp4Q,MAAQ,GAAMo4Q,EAAUn4Q,OAASm4Q,EAAUr4Q,KAAO,GAC9Gs4Q,EAAgB,IAAIvX,OAAO4B,WAAW/3U,EAAEolF,QAAUqoQ,EAAUp4Q,KAAMr1E,EAAEqlF,QAAUooQ,EAAUr4Q,KACxFumE,EAASw6L,OAAO4B,WAAWsG,SAASqP,EAAe9rV,EAAQ4rV,GAM/D,OAJAxsV,EAAK0tV,eAAe/sV,KAAKX,EAAMohD,EAASu5F,GAExC37I,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GACTlwD,KAAKngD,IAGPA,EAAK2tV,WAAa3tV,EAAK2M,IAAIsL,cAAcq1U,EAAiBttV,EAAKuhD,UAAUoqS,WACzE3rV,EAAK2tV,WAAW9hV,iBAAiBrI,EAAAA,EAAAA,KAAAA,cAAwB,YAAc,aAAc,SAAUxE,GAEvFA,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpwG,EAAKsrV,WAAWtsV,GAEhB,IAAI8tV,EAAUtpV,EAAAA,EAAAA,KAAAA,cAAwB,UAAY,WAuBlD,OArBAoJ,SAASg0C,oBAAoBksS,EAAS9sV,EAAK4tV,2BAA2B,GACtE5tV,EAAK4tV,+BAA4BvpV,EAEjCrE,EAAKotM,OAAOzsM,KAAKX,GAAO,IAExBA,EAAK6tV,mBAAqB/zJ,YAAY,WAClC95L,EAAKotM,OAAOzsM,KAAKX,GAAO,KAC1BmgD,KAAKngD,GAAO,KAEdA,EAAK4tV,0BAA4B,WAC7B/zJ,cAAc75L,EAAK6tV,oBACnB7tV,EAAK6tV,wBAAqBxpV,EAE1BuI,SAASg0C,oBAAoBksS,EAAS9sV,EAAK4tV,2BAA2B,GACtE5tV,EAAK4tV,+BAA4BvpV,GAGrCuI,SAASf,iBAAiBihV,EAAS9sV,EAAK4tV,2BAA2B,GAEnE5uV,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GAETlwD,KAAKngD,IAEPA,EAAK8tV,YAAc9tV,EAAK2M,IAAIsL,cAAcq1U,EAAiBttV,EAAKuhD,UAAUqqS,YAC1E5rV,EAAK8tV,YAAYjiV,iBAAiBrI,EAAAA,EAAAA,KAAAA,cAAwB,YAAc,aAAc,SAAUxE,GAExFA,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExBpwG,EAAKsrV,WAAWtsV,GAEhB,IAAI8tV,EAAUtpV,EAAAA,EAAAA,KAAAA,cAAwB,UAAY,WAuBlD,OArBAoJ,SAASg0C,oBAAoBksS,EAAS9sV,EAAK+tV,4BAA4B,GACvE/tV,EAAK+tV,gCAA6B1pV,EAElCrE,EAAKotM,OAAOzsM,KAAKX,EAAM,IAEvBA,EAAKguV,oBAAsBl0J,YAAY,WACnC95L,EAAKotM,OAAOzsM,KAAKX,EAAM,KACzBmgD,KAAKngD,GAAO,KAEdA,EAAK+tV,2BAA6B,WAC9Bl0J,cAAc75L,EAAKguV,qBACnBhuV,EAAKguV,yBAAsB3pV,EAE3BuI,SAASg0C,oBAAoBksS,EAAS9sV,EAAK+tV,4BAA4B,GACvE/tV,EAAK+tV,gCAA6B1pV,GAGtCuI,SAASf,iBAAiBihV,EAAS9sV,EAAK+tV,4BAA4B,GAEpE/uV,EAAE4tV,cAAe,EACjB5tV,EAAEqxG,aAAc,GACT,GAETlwD,KAAKngD,IAEPA,EAAKmgD,QAEPA,KAAKlgD,QAGfwpV,EAAehpV,UAAUoqV,YAAc,SAAU3oV,GAC7C,IAAIlC,EAAOC,KAEPm3M,EAAQ+9H,OAAO3zU,KAAKq+S,UAAU39S,GAC9BupV,EAAOzrV,EAAKuqV,YAAY5kL,MAE5B3lK,EAAKqtV,mBAAsB5B,GAAQr0I,EAASp3M,EAAK+rV,SACjD/rV,EAAKitV,iBAAoBxB,EAAOr0I,EAASp3M,EAAKgsV,SAG9ChsV,EAAK6sV,OAAOxvT,SAAWr9B,EAAKitV,iBAC5BjtV,EAAK6sV,OAAO7uT,UAAUS,OAAOz+B,EAAKyD,OAAO8oC,QAAQm4S,uBAAwB1kV,EAAKitV,kBAI9EjtV,EAAKktV,SAAS7vT,SAAWr9B,EAAKqtV,mBAC9BrtV,EAAKktV,SAASlvT,UAAUS,OAAOz+B,EAAKyD,OAAO8oC,QAAQm4S,uBAAwB1kV,EAAKqtV,qBAEpF5D,EAAehpV,UAAUmqV,cAAgB,WACrC,IAAI5qV,EAAOC,KAEPguV,GAAY,EAGZ3wR,EADQt9D,EAAKyD,OAAOyxU,OAAOvrB,MACZrsP,OAGf4wR,EAAY,CAFC,IAAI/Y,OAAO4B,WAAW,EAAGz5Q,EAAO8pF,aAAe,GAC9C,IAAI+tL,OAAO4B,WAAWz5Q,EAAO6lF,YAAc,EAAG7lF,EAAO8pF,aAAe,GAC5C,IAAI+tL,OAAO4B,WAAWz5Q,EAAO6lF,YAAc,EAAG,GAAI,IAAIgyL,OAAO4B,WAAW,EAAG,IAChHx4U,IAAI,SAAUkJ,GACX,OAAOo+U,EAAcllV,KAAKV,KAAMwH,IAClC04C,KAAKngD,EAAKyD,SACX0B,QAAO,SAAUsC,GACd,OAAe,OAARA,KAkBf,OAfIymV,EAAU5qV,QAAU4qV,EAAU5qV,QAAU,IACxC2qV,GAAY,GAIhBjuV,EAAKutV,qBAAqBlwT,SAAW4wT,EAGrCjuV,EAAK2tV,WAAWtwT,SAAW4wT,EAC3BjuV,EAAK2tV,WAAW3vT,UAAUS,OAAOz+B,EAAKyD,OAAO8oC,QAAQm4S,uBAAwBuJ,GAG7EjuV,EAAK8tV,YAAYzwT,SAAW4wT,EAC5BjuV,EAAK8tV,YAAY9vT,UAAUS,OAAOz+B,EAAKyD,OAAO8oC,QAAQm4S,uBAAwBuJ,GAEvEA,GAEXxE,EAAehpV,UAAUgrV,KAAO,SAAUvpV,GACtC,IAAIlC,EAAOC,KAIX,GAFAD,EAAK6qV,YAAY3oV,GAEblC,EAAKyD,OAAOyxU,QAAUl1U,EAAKyD,OAAOyxU,OAAOiZ,cACzCnuV,EAAKuqV,YAAY6D,SAASjZ,OAAO3zU,KAAKq+S,UAAU39S,QAC7C,CAMH,GALiDmC,MAA7C8iV,EAAgBnnV,EAAKyD,OAAOyxU,OAAOvrB,SAC/BznT,EAAQ,EAAGlC,EAAKuqV,YAAY8D,SAC3BruV,EAAKuqV,YAAY+D,YAGrBpsV,GAASizU,OAAO3zU,KAAK+sV,aAAevuV,EAAKitV,kBACzC/qV,IAAUizU,OAAO3zU,KAAK+sV,aAAevuV,EAAKqtV,mBAC3C,OAGJ,IAAImB,EAASrZ,OAAO3zU,KAAKq+S,UAAU39S,GAC/B0mV,EAAQzB,EAAgBnnV,EAAKyD,OAAOyxU,OAAOvrB,OAC/C,GAAIi/B,EAAO,CACP,IAAI3vM,EAAYk8L,OAAO2R,QAAQqB,gBAAgBS,GAC/C5oV,EAAKyD,OAAOyD,OAAOw/U,iBAAiB1mV,EAAKuqV,aAAciE,EAAQxuV,EAAKuqV,YAAYh2Q,MAAO0kE,EAAW,CAAE3oF,SAAU,SAI1Hm5R,EAAehpV,UAAU2sM,OAAS,SAAUlrM,GACxC,IAAIlC,EAAOC,KAIX,GAFAiC,EAAQizU,OAAO3zU,KAAKq+S,UAAU39S,GAE1BlC,EAAKyD,OAAOyxU,QAAUl1U,EAAKyD,OAAOyxU,OAAOiZ,cACzCnuV,EAAKuqV,YAAYuD,aAAa5rV,OAC3B,CACH,IAAIoyE,EAAS8yQ,EAAgBpnV,EAAKyD,OAAOyxU,OAAOvrB,OAC5Cr1O,GACAuzQ,EAA4B7nV,EAAKyD,OAAOyxU,OAAOvrB,MAAOznT,EAAOoyE,EAAQ,CACjEhkB,SAAU,QAK1Bm5R,EAAehpV,UAAUksV,aAAe,SAAU8B,EAAaC,GAC3D,IAAI1uV,EAAOC,KAEXD,EAAK8pV,yBAAyB9rT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQoB,aAEhE,IAAIghT,EAAsB,IAAIxZ,OAAO2R,QACjC8H,EAAsB,IAAIzZ,OAAO2R,QACjC0F,EAAgB,IAAIrX,OAAO4B,WAE/BnqU,SAASg0C,oBAAoB,YAAa5gD,EAAK6uV,uBAAuB,GACtEjiV,SAASg0C,oBAAoB,UAAW5gD,EAAK8uV,qBAAqB,GAElE9uV,EAAK6uV,2BAAwBxqV,EAC7BrE,EAAK8uV,yBAAsBzqV,EAE3BrE,EAAK+uV,WAAY,EAEjB,IAAIplC,EAAQ3pT,EAAKyD,OAAOyxU,OAAOvrB,MAC3BgzB,EAAShzB,EAAMgzB,OAEfiM,EAAQzB,EAAgBx9B,GACvBi/B,GAID5oV,EAAKgvV,UAAY7Z,OAAO8Z,WAAWC,wBAAwBtG,EAAOzT,OAAO8F,UAAUC,MAAO0T,GAC1F5uV,EAAKmvV,YAAa,IAJlBnvV,EAAKgvV,UAAY7Z,OAAO8Z,WAAWC,wBAAwBvS,EAAOyS,WAAYja,OAAO8F,UAAUC,MAAO0T,GACtG5uV,EAAKmvV,YAAa,GAMtBnvV,EAAKqvV,iBAAmB7tV,KAAKqnE,OAAO6lR,EAAa7gU,EAAG6gU,EAAa9gU,GAEjE,IAAIi5T,EAAe1R,OAAO2R,QAAQr8U,MAAMkyU,EAAO1jM,UAAW01M,GAC1DhS,EAAOqK,gBAAgBhnV,EAAKgvV,WAE5BhvV,EAAKsvV,mBAAqB9tV,KAAKqnE,MAAM8zQ,EAAOpwU,SAASshB,EAAG8uT,EAAOpwU,SAASqhB,GAExE+uT,EAAOqK,gBAAgBH,GAEvB7mV,EAAK6uV,sBAAwB,SAAU7vV,GACnC,IAAIgB,EAAOC,KAEX0pT,EAAQ3pT,EAAKyD,OAAOyxU,OAAOvrB,MAC3BgzB,EAAShzB,EAAMgzB,OAEf,IAAI4S,EAAgBd,EAAY1/R,wBAChC,MAAMnuD,EAAS,IAAIu0U,OAAO4B,YAAYwY,EAAch7Q,MAAQg7Q,EAAcl7Q,MAAQ,GAAMk7Q,EAAcj7Q,OAASi7Q,EAAcn7Q,KAAO,GACpI,IAAIs4Q,EAAgB,IAAIvX,OAAO4B,WAAW/3U,EAAEolF,QAAUmrQ,EAAcl7Q,KAAMr1E,EAAEqlF,QAAUkrQ,EAAcn7Q,KAChGumE,EAASw6L,OAAO4B,WAAWsG,SAASqP,EAAe9rV,EAAQ4rV,GAE/D7kV,QAAQC,IAAI,UAAY+yI,EAAOz3H,YAE/B,IACIssU,EADQhuV,KAAKqnE,OAAO8xE,EAAO9sH,EAAG8sH,EAAO/sH,GACX5tB,EAAKqvV,iBAC/BI,EAAiBta,OAAO3zU,KAAKkuV,YAAY1vV,EAAKsvV,mBAAqBE,GAEvE,IACI3I,EAAe1R,OAAO2R,QAAQr8U,MAAMkyU,EAAO1jM,UAAW01M,GACtDhS,EAAOqK,gBAAgBhnV,EAAKgvV,WAC5B,IACI53I,EAAQq4I,EADajuV,KAAKqnE,MAAM8zQ,EAAOpwU,SAASshB,EAAG8uT,EAAOpwU,SAASqhB,GAGnE69T,EAAO9O,EAAOh3K,OAClB8lL,GAAQr0I,GAEGp3M,EAAK+rV,SACZpP,EAAOvvI,OAAOuvI,EAAOpoQ,MAAOooQ,EAAOh3K,MAAQ3lK,EAAK+rV,UACzCN,EAAOzrV,EAAKgsV,SACnBrP,EAAOvvI,OAAOuvI,EAAOpoQ,MAAOooQ,EAAOh3K,MAAQ3lK,EAAKgsV,UAEhDrP,EAAOvvI,OAAOuvI,EAAOpoQ,OAAQ6iI,GAGjCp3M,EAAK6qV,YAAY,GACjBlO,EAAOqK,gBAAgBH,GAEzB,MAAO7nV,GACLgB,EAAK8uV,wBAIX3uS,KAAKngD,GAEPA,EAAK8uV,oBAAsB,SAAUlhV,GACjC5N,EAAK8pV,yBAAyB9rT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQoB,aAEnE3tC,EAAK+uV,WAAY,EACjBniV,SAASg0C,oBAAoB,YAAa5gD,EAAK6uV,uBAAuB,GACtEjiV,SAASg0C,oBAAoB,UAAW5gD,EAAK8uV,qBAAqB,GAElE9uV,EAAK6uV,2BAAwBxqV,EAC7BrE,EAAK8uV,yBAAsBzqV,GAG/BuI,SAASf,iBAAiB,YAAa7L,EAAK6uV,uBAAuB,GACnEjiV,SAASf,iBAAiB,UAAW7L,EAAK8uV,qBAAqB,IAEnErF,EAAehpV,UAAUitV,eAAiB,SAAUiC,EAAejB,GAC/D,IAAI1uV,EAAOC,KA2CX,GAzCA2M,SAASg0C,oBAAoB,YAAa5gD,EAAK4vV,yBAAyB,GACxEhjV,SAASg0C,oBAAoB,UAAW5gD,EAAK6vV,uBAAuB,GAEpE7vV,EAAK4vV,6BAA0BvrV,EAC/BrE,EAAK6vV,2BAAwBxrV,EAE7BrE,EAAK4vV,wBAA0B,SAAU5wV,GACrC,IAAI4+U,EAAkB+R,EAAc5gS,wBAChCnuD,EAAS,IAAIu0U,OAAO4B,YAAY6G,EAAgBrpQ,MAAQqpQ,EAAgBvpQ,MAAQ,GAAMupQ,EAAgBtpQ,OAASspQ,EAAgBxpQ,KAAO,GACtIs4Q,EAAgB,IAAIvX,OAAO4B,WAAW/3U,EAAEolF,QAAUw5P,EAAgBvpQ,KAAMr1E,EAAEqlF,QAAUu5P,EAAgBxpQ,KACpGumE,EAASw6L,OAAO4B,WAAWsG,SAASqP,EAAe9rV,EAAQ4rV,GAG3DgD,EAFQhuV,KAAKqnE,OAAO8xE,EAAO9sH,EAAG8sH,EAAO/sH,GAEX5tB,EAAK8vV,yBAC/BL,EAAiBta,OAAO3zU,KAAKkuV,YAAY1vV,EAAK+vV,yBAA2BP,GAE7E7S,EAAS38U,EAAKyD,OAAOyxU,OAAOvrB,MAAMgzB,OAElC,IACIkK,EAAe1R,OAAO2R,QAAQr8U,MAAMkyU,EAAO1jM,UAAW01M,GACtDhS,EAAOqK,gBAAgBhnV,EAAKgwV,aAC5B,IAAIC,EAAqBzuV,KAAKqnE,MAAM8zQ,EAAOpwU,SAASshB,EAAG8uT,EAAOpwU,SAASqhB,GACvE+uT,EAAOmR,YAAY2B,EAAiBQ,GACpCtT,EAAOqK,gBAAgBH,GACzB,MAAO7nV,GACLgB,EAAK6vV,0BAIb7vV,EAAK6vV,sBAAwB,SAAUjiV,GACnC5N,EAAKkwV,YAAa,EAElBlwV,EAAKgqV,2BAA2BhsT,UAAUC,OAAOj+B,EAAKyD,OAAO8oC,QAAQoB,aAErE/gC,SAASg0C,oBAAoB,YAAa5gD,EAAK4vV,yBAAyB,GACxEhjV,SAASg0C,oBAAoB,UAAW5gD,EAAK6vV,uBAAuB,GAEpE7vV,EAAK4vV,6BAA0BvrV,EAC/BrE,EAAK6vV,2BAAwBxrV,GAG7BrE,EAAK4qV,gBACL5qV,EAAK6vV,4BADT,CAKA7vV,EAAKgqV,2BAA2BhsT,UAAUnjB,IAAI7a,EAAKyD,OAAO8oC,QAAQoB,aAElE,IAAIghT,EAAsB,IAAIxZ,OAAO2R,QACjC8H,EAAsB,IAAIzZ,OAAO2R,QACjC0F,EAAgB,IAAIrX,OAAO4B,WAE/B/2U,EAAKkwV,YAAa,EAClBlwV,EAAK8vV,yBAA2BtuV,KAAKqnE,OAAO6lR,EAAa7gU,EAAG6gU,EAAa9gU,GAEzE,IACI+uT,EADQ38U,EAAKyD,OAAOyxU,OAAOvrB,MACZgzB,OAEfx+C,EAAagpD,EAAgBnnV,EAAKyD,OAAOyxU,OAAOvrB,OAClC,MAAdxrB,GAAoC95R,MAAd85R,GAEJ,OADlBA,EAAaipD,EAAgBpnV,EAAKyD,OAAOyxU,OAAOvrB,SACRtlT,MAAd85R,GAQ1Bn+R,EAAKgwV,YAAc7a,OAAO8Z,WAAWkB,wBAAwBhyD,EAAYg3C,OAAO8F,UAAUC,MAAO0T,GACjG5uV,EAAKowV,cAAe,IARhBpwV,EAAKgwV,YAAc7a,OAAO8Z,WAAWkB,wBAAwBxT,EAAOyS,WAAYja,OAAO8F,UAAUC,MAAO0T,GACxG5uV,EAAKowV,cAAe,GAU5B,IACI,IAAIvJ,EAAe1R,OAAO2R,QAAQr8U,MAAMkyU,EAAO1jM,UAAW01M,GAC1DhS,EAAOqK,gBAAgBhnV,EAAKgwV,aAC5BhwV,EAAK+vV,yBAA2BvuV,KAAKqnE,MAAM8zQ,EAAOpwU,SAASshB,EAAG8uT,EAAOpwU,SAASqhB,GAC9E5tB,EAAKqwV,4BAA8Blb,OAAO4E,WAAW2O,UAAU,IAAIvT,OAAO4E,WAAW4C,EAAOpwU,SAASqhB,EAAG+uT,EAAOpwU,SAASshB,EAAG,IAC3H8uT,EAAOqK,gBAAgBH,GACzB,MAAO7nV,GACLgB,EAAK6vV,wBAGTjjV,SAASf,iBAAiB,YAAa7L,EAAK4vV,yBAAyB,GACrEhjV,SAASf,iBAAiB,UAAW7L,EAAK6vV,uBAAuB,KAErEpG,EAAehpV,UAAU6rV,UAAY,WACjC,IAAItsV,EAAOC,KAEPiC,GAASlC,EAAKuqV,YAAY5kL,MAAQwvK,OAAO3zU,KAAKq+S,UAAU,IAC5D7/S,EAAKyrV,KAAKtW,OAAO3zU,KAAK0kV,UAAUhkV,KAEpCunV,EAAehpV,UAAU+sV,cAAgB,SAAU5tV,GAC/C,MAAMI,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAClC,IAAIs8T,EAGJ,IAFAA,GAAmBtwV,EAAKuqV,YAAYn8N,QAE7BkiO,GAAmB9uV,KAAKS,IAC3BquV,GAAmB,EAAI9uV,KAAKS,GAEhC,KAAOquV,EAAkB9uV,KAAKS,IAC1BquV,GAAmB,EAAI9uV,KAAKS,GAG3BrC,EAGDA,EAAQ44B,SAAW,WACf15B,KAHJA,IAOAkB,EAAKyD,OAAOyxU,QAAUl1U,EAAKyD,OAAOyxU,OAAOiZ,eACzCnuV,EAAKyD,OAAOyD,OAAOqpV,iBAAiBrhO,YAAYshO,cAAc7vV,KAAKX,EAAM,CAAE0N,OAAQ,CAAEquB,UAAW,QAAU00T,QAAQ,IAEtH,IAAIn8Q,EAAS8yQ,EAAgBpnV,EAAKyD,OAAOyxU,OAAOvrB,OAC5Cr1O,GACAuzQ,EAA4B7nV,EAAKyD,OAAOyxU,OAAOvrB,MAAO2mC,EAAiBh8Q,EAAQ10E,OAI3F6pV,EAAehpV,UAAU6pV,yBAA2B,WAChD,IAeIrxM,EACAy3M,EAhBA1wV,EAAOC,KAEP0wV,EAA+B,IAAIxb,OAAO2R,QAC1C8J,EAAkC,IAAIzb,OAAO4F,aAE7CpxB,EAAQ3pT,EAAKyD,OAAOyxU,OAAOvrB,MAC3BgzB,EAAS38U,EAAKyD,OAAOyxU,OAAOvrB,MAAMgzB,OAElCmE,EAA8Bn3B,EAAMm3B,4BACpC+P,EAAgC/P,EAA4B+P,8BAC5DC,EAAsBhQ,EAA4BgQ,oBAClD/a,EAAQpsB,EAAMosB,MAEdgb,EAAYhb,EAAMgb,UAIjB5b,OAAO2R,QAAQrkS,OAAOk6R,EAAO1jM,UAAWk8L,OAAO2R,QAAQkK,YACxD/3M,EAAYk8L,OAAO2R,QAAQr8U,MAAMkyU,EAAO1jM,UAAW03M,GACnDD,EAAMvb,OAAO4E,WAAW2O,UAAU/L,EAAOpwU,UACzCowU,EAAOsU,cAAc9b,OAAO2R,QAAQkK,WAGxC,IAAIE,EAAeN,EACnBG,EAAUI,wBAAwBxU,EAAOpwU,SAAU2kV,GAEnD,IAAIE,GAAgB,EACpB,GAAIF,EAAa1+T,OAASq+T,EAA+B,CACrD,IAAIr+T,EAASujT,EAAMjtJ,UAAUooK,GACzB1+T,MAAAA,IACAA,GAAUs+T,EACNI,EAAa1+T,OAASA,IACtB0+T,EAAa1+T,OAASA,EACtBu+T,EAAUM,wBAAwBH,EAAcvU,EAAOpwU,UACvD6kV,GAAgB,IAKxBn4M,MAAAA,IACA0jM,EAAOsU,cAAch4M,GACjBm4M,IACAjc,OAAO4E,WAAWvqM,UAAUmtM,EAAOpwU,SAAUowU,EAAOpwU,UACpD4oU,OAAO4E,WAAWoD,OAAOR,EAAOpwU,SAAUowU,EAAOt4J,WACjD8wJ,OAAO4E,WAAWuD,iBAAiBX,EAAOpwU,SAAU/K,KAAK4K,IAAIskV,EAAKI,GAAsBnU,EAAOpwU,UAC/F4oU,OAAO4E,WAAWvqM,UAAUmtM,EAAOt4J,UAAWs4J,EAAOt4J,WACrD8wJ,OAAO4E,WAAWuO,MAAM3L,EAAOt4J,UAAWs4J,EAAO2U,GAAI3U,EAAOpoQ,OAC5D4gQ,OAAO4E,WAAWuO,MAAM3L,EAAOpoQ,MAAOooQ,EAAOt4J,UAAWs4J,EAAO2U,OAI3E7H,EAAehpV,UAAU8wV,wBAA0B,WAC/C,IAAIvxV,EAAOC,KAEPskD,EAAMvkD,EAAKk1U,OAAOyH,OAAO6N,qBAAqB//U,QAElD,KAAM85C,EAAI41Q,WAAan6T,EAAKwxV,WAAWtuB,MACnC3+Q,EAAI41Q,WAAan6T,EAAKwxV,WAAWpuB,MACjC7+Q,EAAI61Q,UAAYp6T,EAAKwxV,WAAWC,OAChCltS,EAAI61Q,UAAYp6T,EAAKwxV,WAAWruB,OAAQ,CAExC,IAAItuP,EAAY70E,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4B4Q,oBAC1D9uM,EAAuB,IAAbr+F,EAAI/xB,OAAgBqiD,EAClCtwB,EAAI41Q,UAAY34T,KAAK4K,IAAIpM,EAAKwxV,WAAWtuB,KAAOtgL,EAASr+F,EAAI41Q,WAC7D51Q,EAAI61Q,SAAW54T,KAAK4K,IAAIpM,EAAKwxV,WAAWC,MAAQ7uM,EAASr+F,EAAI61Q,UAC7D71Q,EAAI41Q,UAAY34T,KAAKqa,IAAI7b,EAAKwxV,WAAWpuB,KAAOxgL,EAASr+F,EAAI41Q,WAC7D51Q,EAAI61Q,SAAW54T,KAAKqa,IAAI7b,EAAKwxV,WAAWruB,MAAQvgL,EAASr+F,EAAI61Q,UAC7Dp6T,EAAKk1U,OAAOyH,OAAOvpR,QAAQ,CACvBqzI,YAAa0uI,OAAO8F,UAAUC,MAAMmW,wBAAwB9sS,GAC5DkzF,YAAa,CACTrpB,QAASpuH,EAAKk1U,OAAOyH,OAAOvuN,QAC5Bu3C,MAAO3lK,EAAKk1U,OAAOyH,OAAOh3K,SAMtC3lK,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4BgQ,oBAAsBvsS,EAAI/xB,OAAS,KAAO,IAAM,KAGlG,MAAMm/T,EAAwB,SAAUpzV,GACpC,IAKIqzV,EALA9lS,GAAU,EACVpwB,EAAS,KACTm2T,EAAkB,KAClBC,EAAiB,KAGjBC,EAAuBxzV,EAAIA,IAAImkB,cAE/BsvU,EAAqB,SAAUF,GAE/B,GAAID,EACA,OAAOhzV,QAAQC,UACZ,CAEH,MAAMkN,EAAsB,CACxB,QAAW,QACX,OAAU,CACN,KAAQxI,EAAAA,EAAAA,KAAAA,gBAAwBjF,EAAIA,IAAIqB,QAAQyJ,OAAQ,uBACxD,IAAO7F,EAAAA,EAAAA,KAAAA,gBAAwBjF,EAAIA,IAAIqB,QAAQyJ,OAAQ,yBAI/D,IAAIgyF,EACAhvF,EAAmB9N,EAAIA,IAAI2G,mBAAmB,+BAA+B,GAUjF,OATImH,GACAL,EAAoBO,SAAWF,EAAiBG,SAASC,MACzD4uF,EAAoBhvF,EAAiBjB,WAAW,eAAgBY,KAEhEA,EAAoBW,IAAMC,SAASC,cAAc,OACjDtO,EAAIA,IAAIoO,IAAIG,YAAYd,EAAoBW,KAC5C0uF,EAAoB98F,EAAIA,IAAI6M,WAAW,eAAgBY,IAGpDqvF,EAAkB18F,MAAK,SAAUoM,GACpCA,EAAQI,OAAS2mV,EACjBD,EAAkB9mV,EAClB+mV,EAAe/kV,aAAe8kV,QAK1CC,EAAiBvzV,EAAIA,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,aAAwB,MAGhEouV,EAAYE,EAAetiQ,YAE3BwiQ,EAAmBF,GAAgBnzV,MAAK,WACpCmzV,EAAenuP,eAAe5jG,EAAAA,EAAAA,cAAAA,eAE9BxB,EAAIA,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,mBAAgC,SAAUf,GAC7CA,EAAE+L,UAAY+mV,EAAezwP,sBACxBywP,EAAelyP,UAChBqyP,YAMpBhyV,KAAK6gD,MAAQ,WACTgxS,EAAe5tP,eACf+tP,KAEJhyV,KAAKmgB,MAAQ,WACTngB,KAAK6gD,QACLgxS,EAAenuP,eAAeiuP,GAC9BrzV,EAAIA,IAAImkB,cAAgBqvU,GAE5B,IAAIztL,EAAY,SAAU4tL,GACtB,GAAKx2T,EAaDA,EAAOnvB,SAAW2lV,MAbT,CACT,IAAIjY,EAAY,CACZ1tU,SAAU2lV,EACVjY,UAAW,CACPjtT,MAAOxpB,EAAAA,EAAAA,KAAAA,wBAAgCjF,EAAIg+C,MAAQ,WACnD41S,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,OAAOkd,eAAeC,OACtC3b,gBAAiBxB,OAAOyB,gBAAgBC,kBAGhDn7S,EAASn9B,EAAI2I,OAAOqrV,iBAAiB5xV,KAAKpC,EAAK07U,GAMnD17U,EAAI22U,OAAOvrB,MAAM1mJ,iBAEjBgvL,EAAe,WACf1zV,EAAI2I,OAAO6wB,cAAcp3B,KAAKpC,EAAKm9B,GACnCA,EAAS,MAEbz7B,KAAKqsB,KAAO,SAAU4lU,GAClB,OAAO,IAAIrzV,SAAQ,SAAUC,EAASk1B,GAClC83B,GAAU,EAENgmS,EAAetiQ,cAAgBzvF,EAAAA,EAAAA,cAAAA,eAC/B+xV,EAAenuP,eAAe5jG,EAAAA,EAAAA,cAAAA,eAG9B+xV,EAAe/kV,cACf+kV,EAAe/kV,aAAaE,QAG3B1O,EAAI0tJ,UACL1tJ,EAAI0tJ,QAAU1tJ,EAAIA,IAAIw1D,sBAAsB1M,WAEhDi9G,EAAU4tL,GAEVF,EAAmBF,GAAgBnzV,MAAK,WACpC,IAEIw3D,EAFAq8R,EAAiBrd,OAAO8F,UAAUC,MAAMiW,wBAAwBe,GAIhE/7R,EADA53D,EAAI2I,OAAOC,MAAQ5I,EAAI2I,OAAOmvD,UAChB7yD,EAAAA,EAAAA,KAAAA,UAAkB,CAAC2xU,OAAO3zU,KAAK0kV,UAAUsM,EAAer4B,WAAYgb,OAAO3zU,KAAK0kV,UAAUsM,EAAep4B,WAAY77T,EAAI2I,OAAOC,IAAK5I,EAAI2I,OAAOmvD,WAEhJ,CAAC8+Q,OAAO3zU,KAAK0kV,UAAUsM,EAAer4B,WAAYgb,OAAO3zU,KAAK0kV,UAAUsM,EAAep4B,WAOzG,IAHA,IACIq4B,EADAC,EAAgBn0V,EAAI22U,OAAOvrB,MAAMosB,MAAM4c,SAASC,eAG3CC,EAAe,GAAIJ,GAAcI,EAAeH,EAAcpvV,SAAUuvV,EAAc,CAC3F,IAAItlU,EAAOmlU,EAAcG,GACrB1d,OAAO2d,UAAUh0S,SAASvxB,EAAKk/T,UAAW+F,KAC1CC,EAAallU,GAIrB,GAAKklU,EAAL,CAMA,IADA,IAAIM,EAAeN,EAAWruV,KAAK4uV,QAC1B7wV,EAAI4wV,EAAazvV,OAAS,EAAGnB,GAAK,IAAKA,EAG5C,IAFqB4wV,EAAa5wV,GACL8wV,aAGzB,YADAn0V,IAKR,IAAIo0V,EAAkBT,EAAWU,aAAaC,wBAAwBX,EAAW7kU,EAAG6kU,EAAW5kU,EAAG4kU,EAAWxkU,OAEzGolU,GAAoCN,EAAalqV,MAAK,SAAUmqV,GAChE,OAAOA,EAAQC,aAAaK,aAAaC,kBACvC,IAAIN,aAEV10V,EAAIA,IAAImkB,cAAgB,WAEpB,IAAI8wU,EAAaj1V,EAAI2I,OAAOC,MAAQ5I,EAAI2I,OAAOmvD,UAAY7yD,EAAAA,EAAAA,KAAAA,UAAkB,CAAC0vV,EAAgBhwB,KAAMgwB,EAAgBzB,OAAQlzV,EAAI2I,OAAOC,IAAK5I,EAAI2I,OAAOmvD,WAAa,CAAC68R,EAAgBhwB,KAAMgwB,EAAgBzB,OACvMgC,EAAal1V,EAAI2I,OAAOC,MAAQ5I,EAAI2I,OAAOmvD,UAAY7yD,EAAAA,EAAAA,KAAAA,UAAkB,CAAC0vV,EAAgB9vB,KAAM8vB,EAAgB/vB,OAAQ5kU,EAAI2I,OAAOC,IAAK5I,EAAI2I,OAAOmvD,WAAa,CAAC68R,EAAgB9vB,KAAM8vB,EAAgB/vB,OAEvMz4H,GAAe+oJ,EAAW,GAAKD,EAAW,KAAOH,GAAoCA,EAAiCC,aAAaI,gBAAgBrvC,WAAa,KAChK15G,GAAe8oJ,EAAW,GAAKD,EAAW,KAAOH,GAAoCA,EAAiCC,aAAaI,gBAAgBpvC,YAAc,KAErK,OAAO9iT,KAAK4K,IAAIs+L,EAAaC,IAE/BxqJ,KAAK5hD,EAAK80V,EAAkCH,GAE9C30V,EAAIA,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,cAA4B,SAAUf,GAC9C8sD,GAAU,EAEVhtD,EAAQE,IACVmhD,KAAK2xS,IAEPvzV,EAAIA,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,aAA0B,SAAUf,GAC5C8sD,GAAU,EAEVhtD,EAAQE,MAGZT,EAAIA,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,cAA2B,SAAUf,GAC5CizV,IAEAnzV,EAAQE,MAGZ8yV,EAAez1S,UAAW,EAC1By1S,EAAe3vP,cAAc,CACzBrsC,GAAI,CAAC,EAAG,KAGZg8R,EAAet5T,SAAS29B,QAvDpBr3D,WA2DhBmB,KAAK0zV,YAAc,WACf,OAAO7B,EAAe7xP,eAE1BhgG,KAAK2zV,UAAY,WACb,OAAO9nS,IAIT+nS,EAAkB,SAAUC,GAC9B7zV,KAAK8zV,SAAW,KAEhB,IAoKIC,EApKAC,EAAQ,CACRvxQ,IAAK,CAAC,aAAc,QAAS,OAC7BwxQ,cAAe,CAAC,WAAY,gBAAiB,cAC7CC,oBAAqB,CAAC,WAAY,kBAElCC,EAAY,SAAUx4T,EAAKv2B,EAAGlD,GAC9B,GAAIA,EAAIkD,EAAE/B,OAAS,EACf,OAAI5C,EAAeC,KAAKi7B,EAAKv2B,EAAElD,IACpBiyV,EAAUx4T,EAAIv2B,EAAElD,IAAKkD,IAAKlD,GAG1B,KAGX,GAAIy5B,aAAe76B,MAAO,CAEtB,IADA,IAAIszV,EAAO,GACFt5U,EAAI,EAAGA,EAAI6gB,EAAIt4B,OAAQyX,IACxBra,EAAeC,KAAKi7B,EAAI7gB,GAAI1V,EAAElD,KAC9BkyV,EAAKhsV,KAAKuzB,EAAI7gB,GAAG1V,EAAElD,KAI3B,OAAOkyV,EAEP,OAAOz4T,EAAIv2B,EAAElD,KAKrBmyV,EAA6C,SAAU7vV,EAAO0C,GAC9D,IAAIotV,EACJ,GAAKA,EAAU/wV,EAAAA,EAAAA,KAAAA,iBAAyBiB,EAAM6Q,KAAO,CACjD,IAAIowD,EACJ,GAAKA,EAAOliE,EAAAA,EAAAA,aAAgB+wV,GAExB,IADA,IAAIl1U,EAAgB+0U,EAAU1uR,EAAMuuR,EAAME,oBAAqB,GACtDp5U,EAAI,EAAGA,EAAIsE,EAAc/b,OAAQyX,IACtC,GAAIvX,EAAAA,EAAAA,KAAAA,cAAsB2D,EAAKkY,EAActE,GAAG2N,cAC5C,MAAO,CAAErpB,GAAIggB,EAActE,GAAGzD,WAAYk9U,OAAQJ,EAAU/0U,EAActE,GAAI,CAAC,aAAc,cAAe,IAM5H,OAAO,MAGP05U,EAAY,SAAUhwV,GACtB,MAAMzE,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC,IACI6qO,EACAm0G,EAFAC,EAAsBL,EAA2C7vV,EAAOzE,EAAK+zV,UAGjF,GAAIh0V,EAAAA,EAAAA,aAAAA,MAA4B0E,EAAMgmB,SAClC81N,EAAW,IAAI40F,OAAOyf,SAAS,CAC3Bt/U,IAAK7Q,EAAM6Q,IACX2b,QAAS,IAAIkkT,OAAOzlB,QAAQ,CACxBtlT,KAAM+qU,OAAO0f,YAAYC,iBAG9B,GAAI/0V,EAAAA,EAAAA,aAAAA,UAAgC0E,EAAMgmB,SAAU,CACvD,MAAMgqU,EAAYhwV,EAAMvE,KAAKojB,aAAa,CAAEnc,IAAKnH,EAAK+zV,WAClDU,GAAaA,EAAUM,aAAeN,EAAUM,YAAYzxV,OAAS,IACrEoxV,EAAcD,EAAUM,YAAY,GACpCx0G,EAAW,IAAI40F,OAAOyf,SAAS,CAC3Bt/U,IAAKo/U,EAAYprV,SACjB2nB,QAAS,IAAIkkT,OAAOzlB,QAAQ,CACxBtlT,KAAM+qU,OAAO0f,YAAYC,aAKzC,GAAIv0G,GAAYo0G,EAAqB,CACjCp0G,EAASy0G,QAAUvwV,EACnB,IAAI7E,EAAU,CACV0V,IAAKirO,EACL97O,MAAOA,EAAM2Y,WACbxX,MAAO,UACPqN,OAAQyhV,GAAeA,EAAYzhV,QAAUxO,EAAMwO,QAAUxO,EAAM7E,QAAQqT,OAC3EkgV,aAAc,IAAIhe,OAAO8f,wBAGzBl1V,EAAAA,EAAAA,aAAAA,UAAgC0E,EAAMgmB,SACtC7qB,EAAQs1V,gBAAkBP,EAAoBt1V,GACvCU,EAAAA,EAAAA,aAAAA,MAA4B0E,EAAMgmB,UAAYkqU,IACrD/0V,EAAQs1V,gBAAkBP,EAAoBt1V,GAC9CO,EAAQu1V,iBAAmBR,EAAoBH,QAG/CG,GAAuBA,EAAoBH,SAC3C50V,EAAQw1V,aAAe78U,SAASo8U,EAAoBH,OAAOG,EAAoBH,OAAOlxV,OAAS,KASnGxE,EAAQ,IAAIq2U,OAAOkgB,iCAAiCz1V,SAGpD8V,EAAO,4CAKfk3J,EAAW,SAAUnoK,GACrB,OAAO,IAAI5F,SAAQ,SAAUC,EAASk1B,GAClC,IAAIusN,EAAW,IAAI40F,OAAOyf,SAAS,CAC/Bt/U,IAAK7Q,EAAM6Q,IACX2b,QAAS,IAAIkkT,OAAOzlB,QAAQ,CACxBtlT,KAAM+qU,OAAO0f,YAAYC,YAGjCv0G,EAASy0G,QAAUvwV,EACnB,IAAI7E,EAAU,CACV0V,IAAKirO,EACLv9N,OAAQve,EAAM2Y,WACd2vD,WAAY,CACRx9D,QAAS,QACT2N,aAAa,EACbjK,OAAQxO,EAAMwO,QAAUxO,EAAM7E,QAAQqT,SAI9C,IA6BIqiV,EA7Ba,WACb,IAAI9tU,EAAO,GACX,GAAI/iB,EAAMwR,cAAgBxR,EAAMwR,aAAa2mF,YAAcn4F,EAAMwR,aAAa2mF,WAAW/pF,OACjFpO,EAAMyW,MAAM5X,OAAS,EAerB,IAdA,IAAI4X,EAAQzW,EAAMyW,MAAMtQ,MAAM,GAC1B2qV,EAAa,SAASA,EAAW1vU,EAAO/c,GACxC,GAAI+c,EAAO,CACP,IAAIhR,EACJ,IAAK,IAAI1S,EAAI,EAAGA,EAAI0jB,EAAMviB,OAAQnB,IAE9B,GADA0S,EAAIgR,EAAM1jB,GACNsC,EAAM4W,aAAa5W,EAAMvE,KAAKijB,QAAQtO,GAAI/L,GAC1C,OAAO+L,EAAE4S,yBAIjB,OAAO8tU,EAAW1gV,EAAEhC,MAAO/J,KAG5BoS,EAAM5X,OAAS,GAAG,CACrB,IAAIkyV,EAASD,EAAW,CAAC9wV,EAAMwR,aAAa2mF,WAAW/pF,OAAQqI,EAAM8mD,OACtD,OAAXwzR,GACAhuU,EAAKnf,KAAKmtV,GAM1B,OAAOhuU,EAESiuU,GAEhBH,IACA7wV,EAAMixV,QAAUJ,GAGpBx2V,EAAQ,IAAIq2U,OAAOwgB,6BAA6B/1V,QAKpDg2V,EAAuB,YAIvB5B,EAAiB,SAAUp0V,EAAS6E,GAChC0wU,OAAOyf,SAASj0V,KAAKV,KAAML,GAE3BK,KAAKwE,MAAQA,IAEFhE,UAAUf,YAAcs0V,EACvCA,EAAevzV,UAAYrB,OAAOknC,OAAO6uS,OAAOyf,SAASn0V,UAAW,IACpEuzV,EAAevzV,UAAUgK,MAAQ,SAAU5F,GAEvC,IAAIorH,EAASklN,OAAOyf,SAASn0V,UAAUgK,MAAM9J,KAAKV,KAAM4E,GAqBxD,OAnBKswU,OAAOrwL,QAAQjgJ,KAChBA,EAAS,IAAImvV,EAAe,CACxB1+U,IAAKrV,KAAK28H,MACX38H,KAAKwE,QAGZI,EAAO+3H,KAAO3M,EAAO2M,KACrB/3H,EAAOgxV,iBAAmB5lO,EAAO4lO,iBACjChxV,EAAOixV,gBAAkB7lO,EAAO6lO,gBAChCjxV,EAAOyF,QAAU2lH,EAAO3lH,QACxBzF,EAAOq8B,MAAQ+uF,EAAO/uF,MACtBr8B,EAAOkxV,cAAgB9lO,EAAO8lO,cAC9BlxV,EAAOgR,cAAgBo6G,EAAOp6G,cAC9BhR,EAAOmxV,YAAc,EAErBnxV,EAAOosB,QAAUg/F,EAAOh/F,QAIjBpsB,GAEXmvV,EAAevzV,UAAUisB,WAAaupU,GAItCC,EAAoB,WACpB,IACI,IAAI5qU,EAAM,IAAIC,eAGd,OAFAD,EAAIje,KAAK,MAAO,KAAK,GACrBie,EAAIM,aAAe,OACS,SAArBN,EAAIM,aACb,MAAO5sB,GACL,OAAO,GAPS,GAWxB,SAASm3V,EAAqBllU,GAC1B,GAAIA,EAAQnc,QAAUqgU,OAAOihB,aAAaC,QAAUplU,EAAQnc,QAAUqgU,OAAOihB,aAAa1oT,OACtF,MAAM,IAAIynS,OAAOmhB,aAAa,0CAGlCrlU,EAAQnc,MAAQqgU,OAAOihB,aAAaG,SACpCtlU,EAAQulU,cAAWnyV,EAGvB,SAASoyV,EAAYhyV,EAAO6Q,EAAK8X,EAAaopU,GAC1C,IAAIrpU,EAAW,SAAUhQ,GACrB,IAAI6P,EAAQ,IAAIqmD,MAEhBrmD,EAAMnB,OAAS,SAAUkhC,GACrBypS,EAAS13V,QAAQkuB,IACnBmzB,KAAKnzB,EAAOvoB,GAEduoB,EAAMQ,QAAU,SAAUu/B,EAAQ/tD,GAC9Bw3V,EAAS9gV,OAAO1W,IAClBmhD,KAAKnzB,EAAOvoB,GAEV2oB,IACI+nT,OAAOuhB,eAAe53S,SAASxpC,GAC/B0X,EAAMI,YAAc,kBAEpBJ,EAAMI,YAAc,IAI5BJ,EAAMpb,IAAMuL,EAAO7H,KAGvB7Q,EAAMkyV,YAAYh2V,KAAK8D,EAAO6Q,GAAK3W,KAAKwuB,GAAU,SAAUnuB,GACxDw3V,EAAS9gV,OAAO1W,MAIxB,SAAS0tB,EAAW6zN,EAAUq2G,GAC1B,IAAI3lU,EAAUsvN,EAAStvN,QACvBA,EAAQ3b,IAAMirO,EAASjrO,IACvB2b,EAAQ4lU,gBAAkB,WACtB,IAAIvhV,EAAMirO,EAASjrO,IACf8X,GAAc,EAGbmzN,EAASu2G,WAAcv2G,EAASw2G,YACjC3pU,EAAcmzN,EAASy2G,kBAG3B,IAAIR,EAAWrhB,OAAOh8E,KAAK89F,QAI3B,OAFAR,EAAYl2G,EAAS97O,MAAO6Q,EAAK8X,GAAewpU,EAAkBJ,GAE3DA,EAASr5S,SAGpB,IAAIA,EAAUg4R,OAAO+hB,iBAAiBjmU,QAAQA,GAC9C,GAAKkkT,OAAOrwL,QAAQ3nG,GAIpB,OAAOA,EAAQg6S,WAAU,SAAUn4V,GAC/B,OAAOm2U,OAAOh8E,KAAKzjP,OAAO1W,MAIlC,IAAIi3V,EAAmB,SAAUmB,EAAYR,GAezC,GAdIzhB,OAAOrwL,QAAQ8xM,IACfzhB,OAAOkiB,mBAAmB,uCAAwC,8HAGtED,EAAajiB,OAAOwR,aAAayQ,GAAY,GAC7CR,EAAmBzhB,OAAOwR,aAAaiQ,GAAkB,GAEzDT,EAAqBl2V,KAAKgxB,UAOrBilU,GAAoBj2V,KAAK62V,WAAa72V,KAAK82V,YAAe92V,KAAKq3V,aAAeF,EAC/E,OAAO1qU,EAAWzsB,KAAM22V,GAG5B,IAKIW,EACAC,EANAC,EAAcx3V,KAAK8yU,YACvB,OAAKoC,OAAOrwL,QAAQ2yM,GAMbA,EACF94V,MAAK,SAAU6vB,GACZ,GAAK2mT,OAAOrwL,QAAQt2H,GAApB,CAGAgpU,EAAgBhpU,EAChB,IAAIkpU,EAAUhmV,OAAOmH,IAAIC,gBAAgB0V,GAKzC,OAAO9B,EAJP6qU,EAAwB,IAAIpiB,OAAOyf,SAAS,CACxCt/U,IAAKoiV,SAKZ/4V,MAAK,SAAUquB,GACZ,GAAKmoT,OAAOrwL,QAAQ93H,GAQpB,OALAtb,OAAOmH,IAAI6V,gBAAgB6oU,EAAsBjiV,KAIjD0X,EAAMwB,KAAOgpU,EACNxqU,KAEVmqU,WAAU,SAAUjhV,GAKjB,OAJIi/T,OAAOrwL,QAAQyyM,IACf7lV,OAAOmH,IAAI6V,gBAAgB6oU,EAAsBjiV,KAG9C6/T,OAAOh8E,KAAKzjP,OAAOQ,WAnClC,GAwCJjW,KAAK03V,QAAU,SAAUlzV,EAAOmzV,GAK5B,OAJA33V,KAAK8zV,SAAW6D,EAEX5D,GAAkB4B,KAEf,GACJ,KAAK71V,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM2F,KAChC,OAAOqqV,EAAU9zV,KAAKV,KAAMwE,GAChC,KAAK1E,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,KAC/B,OAAOwiK,EAASjsK,KAAKV,KAAMwE,MAIrCozV,EAAmB,WACrB,IAAIluC,EAAQ,KACRmuC,EAAgB,SAAUC,EAAgBtsQ,GACtCssQ,aAA0Bh3V,QAC1Bg3V,EAAiB,QAAUA,EAAe,GAAK,KAAOA,EAAe,GAAK,KAAOA,EAAe,GAAK,KAAOA,EAAe,GAAK,KAEpI,IAAIvmR,EAAQ2jQ,OAAOQ,MAAMC,mBAAmBmiB,GAC5C,YAAc1zV,IAAVonF,EACOja,EAAMinQ,UAAUhtP,GAGpBja,GAEPwmR,EAAqB,SAAU3xV,EAAQmuB,EAAY9wB,GACnD,IAAK,IAAIgF,KAAO8rB,EAAY,CACxB,IAAI5rB,EAAOvC,EAAOmuB,EAAW9rB,GAAKuiD,MAClC,QAAa5mD,IAATuE,EACA,GAAsB,mBAAVA,EAAsB,CAC9B,IAAIX,EAAMW,EAAKlF,GACXuE,IACAusB,EAAW9rB,GAAKT,IAAMA,QAG1BusB,EAAW9rB,GAAKT,IAAMW,IAKlCqvV,EAAe,SAAUt4V,GACzB,IAAI8sV,EAEJ,GAAqB,GAAjB9sV,EAAO2D,OAAa,CACpB,IAEIitI,EAAME,EAAMD,EAAME,EAFlBp7G,EAAQ31B,EAAO,GACf8kE,EAAQ,IAEZ8rE,EAAO,IAAI4kM,OAAO4E,WAAWzkT,EAAM1H,EAAI62C,EAAOnvC,EAAMzH,EAAGyH,EAAM3H,GAC7D8iH,EAAO,IAAI0kM,OAAO4E,WAAWzkT,EAAM1H,EAAG0H,EAAMzH,EAAI42C,EAAOnvC,EAAM3H,GAC7D6iH,EAAO,IAAI2kM,OAAO4E,WAAWzkT,EAAM1H,EAAI62C,EAAOnvC,EAAMzH,EAAGyH,EAAM3H,GAC7D+iH,EAAO,IAAIykM,OAAO4E,WAAWzkT,EAAM1H,EAAG0H,EAAMzH,EAAI42C,EAAOnvC,EAAM3H,GAE7D8+T,EAAYtX,OAAO2d,UAAUoF,mBAAmB,CAAC3nN,EAAME,EAAMD,EAAME,GAAOykM,OAAO8F,UAAUC,YAE3FuR,EAAYtX,OAAO2d,UAAUoF,mBAAmBv4V,EAAQw1U,OAAO8F,UAAUC,OAG7E,IAAIid,EAAuBxuC,EAAMgzB,OAAOyb,8BAA8B3L,GAClEnoS,EAAW6wR,OAAO4E,WAAWz1R,SAAS6zS,EAAsBhjB,OAAOkB,eAAeC,WAAW32U,GAAQiB,QACrG83U,EAAY/uB,EAAMgzB,OAAO0J,QAAQgS,mBAAmB1uC,EAAM7kB,mBAAoB6kB,EAAM5kB,oBAAqBzgP,EAAUqlQ,EAAMhqG,WAAY,IAAIw1H,OAAO4B,YAEpJ,OADA2B,EAAYl3U,KAAK4K,IAAIssU,EAAU9qT,EAAG8qT,EAAU7qT,GACZ,GAAzBrsB,KAAKirC,MAAMisS,GAAkB,EAAIA,GAGxC4f,EAAkB,SAAU50V,GAC5B,IACI2C,EAcJ,OANAA,EAAsChC,OALlCgC,GADC3C,EAAQe,OAAUf,EAAQe,QAAU/D,EAAeC,KAAK+C,EAAQe,MAAO,UAC/DjB,EAAAA,EAAAA,SAAAA,OAEAE,EAAQe,MAAM4B,QAGX3C,EAAQ4C,WACpBD,EAA8B,aAAtB3C,EAAQ4C,UAA2B,OAAS5C,EAAQ4C,WAC5DD,EAA8B,iBAAtB3C,EAAQ4C,UAA+B,UAAY5C,EAAQ4C,WAEvED,EAAS7C,EAAAA,EAAAA,KAAAA,OAAe,GAAI6C,EAAQ3C,EAAQ9D,QAAS8D,EAAQ0C,aAKjE,SAASmyV,EAAWl5V,EAAIM,EAAQC,EAAS44B,GACrC,MAAMggU,EAAY,CACd1vV,KAAMzJ,EACN2R,SAAU,CACNulU,UAAW52U,EACX4yB,MAAO3yB,EAAQ2yB,MACfomT,SAAU/4U,EAAQ4xE,MAClB0qQ,eAAe,IAGvBptE,EAAY0pF,EAAW54V,EAASD,GAEhC64B,EAAS,IAAI28S,OAAOsjB,OAAOD,IAG/B,SAASpnV,EAAc/R,EAAIM,EAAQC,EAAS44B,GACxC,MAAMggU,EAAY,CACd1vV,KAAMzJ,EACN2R,SAAU,CACNulU,UAAW52U,EACX4yB,MAAO3yB,EAAQ2yB,MACfomT,SAAU/4U,EAAQylI,aAClB62M,eAAe,GAEnB5rU,QAAS,CACLupU,UAAW,IAAI1E,OAAO2E,iBAAiBn6U,GACvCg5U,SAAU/4U,EAAQ4xE,MAClB0qQ,eAAe,IAGvBptE,EAAY0pF,EAAW54V,EAASD,GAGhC64B,EAFa,IAAI28S,OAAOsjB,OAAOD,IAInC,SAAS1pF,EAAY0pF,EAAW54V,EAASD,GACjCC,EAAQ4sC,QACRgsT,EAAUjsV,SAAW4oU,OAAOkB,eAAeC,WAAW32U,GAAQiB,OAC9D43V,EAAUhsT,MAAQ,CACdnzB,KAAMzZ,EAAQ4sC,MACd64F,aAAc8vM,OAAOQ,MAAMC,mBAAmB,WAE9ClQ,aAAc,EAEd9/T,MAAOuvU,OAAOsB,WAAWC,iBACzBC,gBAAiBxB,OAAOyB,gBAAgBC,iBAExCj3U,EAAQysC,YACRmsT,EAAUhsT,MAAMX,UAAYjsC,EAAQysC,WACpCzsC,EAAQ0sC,WACRksT,EAAUhsT,MAAMozF,KAAOhgI,EAAQ0sC,SAAW,kBAKtD,IAsGIosT,EAAmB,SAAUh1V,GAC7B,IAAI4M,EAAU,GACVjK,EAASiyV,EAAgB50V,GA8H7B,OA5HA4M,EAAQ1Q,QAAU,WACd,IAaI4xE,EAbAq/D,EAAM,GACNr8G,EAAa,CACbg9C,MAAO,CAAEvmB,KAAM,aACfx3C,QAAS,CAAEw3C,KAAM,eACjBo6E,aAAc,CAAEp6E,KAAM,eACtB0tS,eAAgB,CAAE1tS,KAAM,iBACxB14B,MAAO,CAAE04B,KAAM,eACf5e,UAAW,CAAE4e,KAAM,aACnB3e,SAAU,CAAE2e,KAAM,YAClBze,MAAO,CAAEye,KAAM,UAwCnB,OArCA+sS,EAAmB3xV,EAAQmuB,EAAY9wB,GAEnChD,EAAeC,KAAK6zB,EAAWg9C,MAAO,SAElCA,EADA9wE,EAAeC,KAAK6zB,EAAW/gB,QAAS,OAChCqkV,EAActjU,EAAWg9C,MAAMvpE,IAAKusB,EAAW/gB,QAAQxL,KAEvD6vV,EAActjU,EAAWg9C,MAAMvpE,MAI/C4oI,EAAIr/D,MAAQA,EAER9wE,EAAeC,KAAK6zB,EAAW6wG,aAAc,SAEzC7zD,EADA9wE,EAAeC,KAAK6zB,EAAWmkU,eAAgB,OACvCb,EAActjU,EAAW6wG,aAAap9H,IAAKusB,EAAWmkU,eAAe1wV,KAErE6vV,EAActjU,EAAW6wG,aAAap9H,MAItD4oI,EAAIxL,aAAe7zD,EAEf9wE,EAAeC,KAAK6zB,EAAWjC,MAAO,SACtCs+G,EAAIt+G,MAAQiC,EAAWjC,MAAMtqB,KAG7BvH,EAAeC,KAAK6zB,EAAWgY,MAAO,SACtCqkG,EAAIrkG,MAAQhY,EAAWgY,MAAMvkC,IAEzBvH,EAAeC,KAAK6zB,EAAW6X,UAAW,SAC1CwkG,EAAIxkG,UAAYyrT,EAActjU,EAAW6X,UAAUpkC,MAEnDvH,EAAeC,KAAK6zB,EAAW8X,SAAU,SACzCukG,EAAIvkG,SAAW9X,EAAW8X,SAASrkC,MAIpC4oI,GAGPntI,aAAmBwM,EAAAA,EACnBI,EAAQilB,aAAe,SAAU51B,EAAQC,GACrC,OAAO,IAAIf,SAAQ,SAAUC,EAAS4W,GA2BlC,IA1BA,IAAIkjV,EAAU,GAEVC,EAAY,GACZC,EAAe,GAEfC,EAAc,SAAUC,GACxB,OAAO,IAAI7jB,OAAO8jB,iBAAiB,CAC/B55V,GAAIqE,EAAQrE,GACZkB,SAAU,IAAI40U,OAAO+jB,gBAAgB,CACjCF,iBAAkBA,IAEtBrwV,WAAY,CACR6oE,MAAO5xE,EAAQ4xE,UAKvB2nR,EAAiB,SAAUC,GAC3B,OAAO,IAAIv6V,SAAQ,SAAU6f,EAAKmiE,GAC9B03Q,EAAW70V,EAAQrE,GAAI+5V,EAAe,CAAEzgB,SAAU/4U,EAAQylI,aAAc9yG,MAAO3yB,EAAQ2yB,QAAS,SAAU6jT,GACtG0iB,EAAazwV,KAAK+tU,GAClB13T,WAKHvc,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IAAK,CACpC,IAAI03U,EACJ,IAAK,IAAItiU,EAAI,EAAGA,EAAI5X,EAAOwC,GAAGmB,OAAQiU,IACzB,GAALA,GACAqhV,EAAQvwV,KAAK8wV,EAAex4V,KAAKV,KAAMN,EAAOwC,GAAG,KACjD03U,EAAY,IAAI1E,OAAO2E,iBAAiBn6U,EAAOwC,GAAG,MAElDy2V,EAAQvwV,KAAK8wV,EAAex4V,KAAKV,KAAMN,EAAOwC,GAAGoV,KACjDsiU,EAAUwf,MAAMhxV,KAAK,IAAI8sU,OAAO2E,iBAAiBn6U,EAAOwC,GAAGoV,MAInEshV,EAAUxwV,KAAK0wV,EAAYlf,IAG/Bh7U,QAAQwiB,IAAIu3U,GAASj6V,MAAK,WACtBi6V,EAAU,GAEV95V,EACI,CAAC,IAAIq2U,OAAOmkB,gBAAgB,CACxBC,0BAA0B,EAC1BC,kBAAmBX,IACnBC,OACT1iV,MAAMV,OAIZhS,aAAmBpB,EAAAA,IACxBgO,EAAQilB,aAAe,SAAU51B,EAAQC,GACrC,OAAO,IAAIf,SAAQ,SAAUC,EAASk1B,GAC9BjzB,MAAMC,QAAQrB,IAA6B,IAAlBA,EAAO2D,QAAgBvC,MAAMC,QAAQrB,EAAO,MACrEA,EAASA,EAAO,IAEpByR,EAAc1N,EAAQrE,GAAIM,EACtBC,GAAS,SAAUw2U,GAEft3U,EAAQs3U,WAMrB9lU,GAEPmpV,EAAgB,SAAU/1V,GAC1B,IAAI8xB,EAAO,GACPnvB,EAASiyV,EAAgB50V,GA2G7B,OAzGA8xB,EAAK51B,QAAU,WACX,IAgBI4xE,EAhBAq/D,EAAM,GACNr8G,EAAa,CACbg9C,MAAO,CAAEvmB,KAAM,eACfx3C,QAAS,CAAEw3C,KAAM,iBACjB14B,MAAO,CAAE04B,KAAM,eACf5e,UAAW,CAAE4e,KAAM,aACnB3e,SAAU,CAAE2e,KAAM,YAClBze,MAAO,CAAEye,KAAM,UAmCnB,OAhCA+sS,EAAmB3xV,EAAQmuB,EAAY9wB,GAEnChD,EAAeC,KAAK6zB,EAAWjC,MAAO,SACtCs+G,EAAIt+G,MAAQiC,EAAWjC,MAAMtqB,KAI7BvH,EAAeC,KAAK6zB,EAAWg9C,MAAO,SAElCA,EADA9wE,EAAeC,KAAK6zB,EAAW/gB,QAAS,OAChCqkV,EAActjU,EAAWg9C,MAAMvpE,IAAKusB,EAAW/gB,QAAQxL,KAEvD6vV,EAActjU,EAAWg9C,MAAMvpE,MAI/C4oI,EAAIr/D,MAAQA,EAER9wE,EAAeC,KAAK6zB,EAAWjC,MAAO,SACtCs+G,EAAIt+G,MAAQiC,EAAWjC,MAAMtqB,KAG7BvH,EAAeC,KAAK6zB,EAAWgY,MAAO,SACtCqkG,EAAIrkG,MAAQhY,EAAWgY,MAAMvkC,IAEzBvH,EAAeC,KAAK6zB,EAAW6X,UAAW,SAC1CwkG,EAAIxkG,UAAYyrT,EAActjU,EAAW6X,UAAUpkC,MAEnDvH,EAAeC,KAAK6zB,EAAW8X,SAAU,SACzCukG,EAAIvkG,SAAW9X,EAAW8X,SAASrkC,MAIpC4oI,GAGPntI,aAAmBmN,EAAAA,EACnB2kB,EAAKD,aAAe,SAAU51B,EAAQC,GAClC,OAAO,IAAIf,SAAQ,SAAUC,EAAS4W,GAClC,IAAIgkV,EAAgB,GAEhBd,EAAU,GAEd,GAAqB,GAAjBj5V,EAAO2D,OACP3D,EAASA,EAAO,GAEhBi5V,EAAQvwV,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKmiE,GACpC03Q,EAAW70V,EAAQrE,GAAIM,EAAQC,GAAS,SAAUw2U,GAC9CsjB,EAAcrxV,KAAK+tU,GACnB13T,eAKL,CACH/e,EAASA,EAAOyqB,MAAK,SAAUrP,EAAGsP,GAC9B,OAAItP,EAAEzX,OAAS+mB,EAAE/mB,QACL,EAERyX,EAAEzX,OAAS+mB,EAAE/mB,OACN,EAEJ,KAEK20V,EAAat4V,EAAO,IACpC,IADA,IACSwC,EAAI,EAAGA,EAAIxC,EAAO2D,OAAQnB,IAE/By2V,EAAQvwV,KAAK,IAAIxJ,SAAQ,SAAU6f,EAAKmiE,GACpC03Q,EAAW70V,EAAQrE,GAAIM,EAAOwC,GAAIvC,GAAS,SAAUw2U,GACjDsjB,EAAcrxV,KAAK+tU,GACnB13T,WAMhB7f,QAAQwiB,IAAIu3U,GAASj6V,MAAK,WACtBi6V,EAAU,GAEV95V,EAAQ46V,MACTtjV,MAAMV,OAIZhS,aAAmBuN,EAAAA,IACxBukB,EAAKD,aAAe,SAAU51B,EAAQC,GAClC,OAAO,IAAIf,SAAQ,SAAUC,EAASk1B,GAElCukU,EAAW70V,EAAQrE,GAAIM,EAAQC,GAAS,SAAUw2U,GAC9Ct3U,EAAQs3U,WAMjB5gT,GAEPmkU,EAAiB,SAAUj2V,GAC3B,IAAI4xB,EAAQ,GACRjvB,EAASiyV,EAAgB50V,GAgG7B,GA9FA4xB,EAAM11B,QAAU,WACZ,IAAIixI,EAAM,GAENr8G,EAAa,CACb8/B,SAAU,CAAErJ,KAAM,SAClBze,MAAO,CAAEye,KAAM,SACf3e,SAAU,CAAE2e,KAAM,YAClB5e,UAAW,CAAE4e,KAAM,aACnB2uS,kBAAmB,CAAE3uS,KAAM,qBAC3B4uS,kBAAmB,CAAE5uS,KAAM,qBAC3Bp5C,OAAQ,CAAEo5C,KAAM,UAChBz4B,OAAQ,CAAEy4B,KAAM,UAChB14B,MAAO,CAAE04B,KAAM,SACf31C,IAAK,CAAE21C,KAAM,OACbumB,MAAO,CAAEvmB,KAAM,aACfx3C,QAAS,CAAEw3C,KAAM,eACjBo6E,aAAc,CAAEp6E,KAAM,eACtB0tS,eAAgB,CAAE1tS,KAAM,iBACxBy6Q,aAAc,CAAEz6Q,KAAM,eACtBpqD,OAAQ,CAAEoqD,KAAM,WAwEpB,OArEA+sS,EAAmB3xV,EAAQmuB,EAAY9wB,GAEnChD,EAAeC,KAAK6zB,EAAW3iB,OAAQ,UAClCnR,EAAeC,KAAK6zB,EAAWlf,IAAK,QAAU5R,EAAQ9D,QAAQ0V,IAC/Du7H,EAAIv7H,IAAM5R,EAAQ9D,QAAQ0V,IAE1Bu7H,EAAIv7H,IAAMkf,EAAWlf,IAAIrN,IAG7B4oI,EAAIh/H,OAAS2iB,EAAW3iB,OAAO5J,KAG/BvH,EAAeC,KAAK6zB,EAAWhC,OAAQ,SACvCq+G,EAAIr+G,OAASgC,EAAWhC,OAAOvqB,KAG/BvH,EAAeC,KAAK6zB,EAAWjC,MAAO,SACtCs+G,EAAIt+G,MAAQiC,EAAWjC,MAAMtqB,KAG7BvH,EAAeC,KAAK6zB,EAAW8/B,SAAU,SACzCu8E,EAAIv8E,SAAW9/B,EAAW8/B,SAASrsD,KAGnCvH,EAAeC,KAAK6zB,EAAWgY,MAAO,SACtCqkG,EAAIrkG,MAAQhY,EAAWgY,MAAMvkC,KAG7BvH,EAAeC,KAAK6zB,EAAW8X,SAAU,SACzCukG,EAAIvkG,SAAW9X,EAAW8X,SAASrkC,KAGnCvH,EAAeC,KAAK6zB,EAAW6X,UAAW,SAC1CwkG,EAAIxkG,UAAYyrT,EAActjU,EAAW6X,UAAUpkC,MAGnDvH,EAAeC,KAAK6zB,EAAWolU,kBAAmB,SAClD/oN,EAAI+oN,kBAAoB9B,EAActjU,EAAWolU,kBAAkB3xV,MAGnEvH,EAAeC,KAAK6zB,EAAWqlU,kBAAmB,SAClDhpN,EAAIgpN,kBAAoBrlU,EAAWqlU,kBAAkB5xV,KAIrDvH,EAAeC,KAAK6zB,EAAWg9C,MAAO,SAClC9wE,EAAeC,KAAK6zB,EAAW/gB,QAAS,OACxCo9H,EAAIr/D,MAAQsmR,EAActjU,EAAWg9C,MAAMvpE,IAAKusB,EAAW/gB,QAAQxL,KAEnE4oI,EAAIr/D,MAAQsmR,EAActjU,EAAWg9C,MAAMvpE,MAI/CvH,EAAeC,KAAK6zB,EAAW6wG,aAAc,SACzC3kI,EAAeC,KAAK6zB,EAAWmkU,eAAgB,OAC/C9nN,EAAIxL,aAAeyyN,EAActjU,EAAW6wG,aAAap9H,IAAKusB,EAAWmkU,eAAe1wV,KAExF4oI,EAAIxL,aAAeyyN,EAActjU,EAAW6wG,aAAap9H,MAI7DvH,EAAeC,KAAK6zB,EAAWkxS,aAAc,SAC7C70L,EAAI60L,aAAelxS,EAAWkxS,aAAaz9T,KAG3CvH,EAAeC,KAAK6zB,EAAW3zB,OAAQ,SACvCgwI,EAAIhwI,OAAS2zB,EAAW3zB,OAAOoH,KAG5B4oI,GAGPntI,aAAmBgM,EAAAA,EACnB4lB,EAAMC,aAAe,SAAU51B,EAAQC,GACnC,IAAIq6U,EAAY,CACZnxU,KAAMpF,EAAQrE,GACdkN,SAAU5M,EAAO,GACjBs6U,UAAW,CACPjtT,MAAOptB,EAAQ0V,IACfid,MAAO3yB,EAAQ2yB,MACfC,OAAQ5yB,EAAQ4yB,OAChB2/T,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,OAAOkd,eAAeC,OACtC3b,gBAAiBxB,OAAOyB,gBAAgBC,kBAQhD,OAJIj3U,EAAQiS,QAAUjS,EAAQiS,OAAOvO,OAAS,IAC1C22U,EAAUA,UAAUnD,YAAc,IAAI3B,OAAO4B,WAAWn3U,EAAQiS,OAAO,GAAIjS,EAAQiS,OAAO,KAGzFjS,EAAQ4sC,OAGTytS,EAAUztS,MAAQ,CACdnzB,KAAMzZ,EAAQ4sC,MACdozF,KAAM,kBACN+2M,gBAAiBxB,OAAOyB,gBAAgBC,gBACxCijB,iBAAkB3kB,OAAO4kB,iBAAiBj4Q,KAC1CswQ,eAAgBjd,OAAOkd,eAAeC,OACtCzmT,UAAWjsC,EAAQysC,UACnB2tT,gBAAgB,EAChB7H,UAAW,IAAIhd,OAAO4E,WAAW,IAAM,GAAI,MAGxC,IAAI5E,OAAOsjB,OAAOxe,IAblB,IAAI9E,OAAOsjB,OAAOxe,SAiBhC,GAAIv2U,aAAmBiM,EAAAA,EAAO,CAC/B,IAAIsqV,EAAa,IAAI9kB,OAAO+kB,WAE5B5kU,EAAMC,aAAe,SAAU51B,EAAQC,GACnC,IAAIyZ,EAAOzZ,EAAQ4sC,MAEnB,QAAQ,GACJ,KAAMnzB,GAAQ,iBAAiB6oB,KAAK7oB,GACpC,KAAMA,IAAS,8BAA8B6oB,KAAK7oB,GAE9C,OAAO,IAAI87T,OAAOsjB,OAAO,CACrB3vV,KAAMpF,EAAQrE,GACdkN,SAAU5M,EAAO,GACjB6sC,MAAO,CACHnzB,KAAMzZ,EAAQ4sC,MACd2lT,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCpD,gBAAiBxB,OAAOyB,gBAAgBC,gBACxCijB,iBAAkB3kB,OAAO4kB,iBAAiBn2J,OAC1CwuJ,eAAgBjd,OAAOkd,eAAe8H,SACtCv6N,KAAM,2BACN/zF,UAAWspS,OAAOQ,MAAMoG,MACxB12M,aAAc8vM,OAAOQ,MAAMmG,MAC3BpW,aAAc,EACd9/T,MAAOuvU,OAAOsB,WAAWC,oBAIrC,IAAM,8BAA8Bx0S,KAAK7oB,GACrC,OAAO,IAAI87T,OAAOsjB,OAAO,CACrB3vV,KAAMpF,EAAQrE,GACdkN,SAAU5M,EAAO,GACjBs6U,UAAW,CACPjtT,MAAOitU,EAAWG,SAAS/gV,EAAMzZ,EAAQysC,UAAW,IAAImxB,YACxD20R,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,OAAOkd,eAAeC,OACtC3b,gBAAiBxB,OAAOyB,gBAAgBC,mBAIpD,KAAKj3U,EAAQiB,QAAUjB,EAAQiB,OAAS,EAEpC,OAAO,IAAIs0U,OAAOsjB,OAAO,CACrB3vV,KAAMpF,EAAQrE,GACdkN,SAAU5M,EAAO,GACjB21B,MAAO,CACHk8C,MAAO5xE,EAAQ4xE,MACfknQ,UAA6B,EAAjB94U,EAAQiB,OAAcjB,EAAQ8lU,aAC1CA,aAAc9lU,EAAQ8lU,aACtBrgM,aAAczlI,EAAQylI,aACtBsxM,gBAAiBxB,OAAOyB,gBAAgBC,mBAGpD,QACI,OAAO,IAAI1B,OAAOsjB,OAAO,CACrB3vV,KAAMpF,EAAQrE,GACdkN,SAAU5M,EAAO,GACjBs6U,UAAW,CACPjtT,MAAOitU,EAAWI,UAAUllB,OAAOQ,MAAMC,mBAAmBlyU,EAAQ9D,QAAQisC,UAAYnoC,EAAQ9D,QAAQisC,UAAYroC,EAAAA,EAAAA,IAAAA,OAAAA,MAAAA,WAAgC,IAAIg6D,YACxJ20R,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,OAAOkd,eAAeC,OACtCwH,iBAAkB3kB,OAAO4kB,iBAAiBn2J,OAC1C+yI,gBAAiBxB,OAAOyB,gBAAgBC,qBAOhE,OAAOvhT,GAGXr1B,KAAK03V,QAAU,SAAU2C,EAAK52V,EAASqD,EAAWyU,GAC9C,MAAMxb,EAAOC,KACb0pT,EAAQ2wC,EAER,IAgBI1+T,EAEA2+T,EAEAx4V,EACA4iU,EACA7mG,EAtBA08H,GAAY,EACZC,EAAa,GACbhc,EAAc,SAAUvoT,EAAO3uB,GAC1BxG,MAAMC,QAAQk1B,KAIfnvB,IAAcyU,IACd0a,EAAQ1yB,EAAAA,EAAAA,KAAAA,UAAkB0yB,EAAOnvB,EAAWyU,IAGhDjU,EAAIc,KAAK6tB,EAAM5yB,OAAS,EACpB6xU,OAAO4E,WAAWkP,YAAY/yT,EAAM,GAAIA,EAAM,GAAIA,EAAM,IACxDi/S,OAAO4E,WAAWkP,YAAY/yT,EAAM,GAAIA,EAAM,OAIlD31B,EAAWmD,EAAQnD,SAOnBm6V,EAAY,SAAU34V,EAAQwF,GAC9B,GAAIxG,MAAMC,QAAQe,GACd,IAAK,IAAII,EAAI,EAAGA,EAAIJ,EAAOuB,OAAQnB,IAC/Bs8U,EAAY18U,EAAOI,GAAIoF,IAI/BozV,EAAsB,SAAUh2B,EAAkBp9T,GAClD,GAAIxG,MAAMC,QAAQ2jU,GACd,IAAK,IAAIxiU,EAAI,EAAGA,EAAIwiU,EAAiBrhU,OAAQnB,IACzCoF,EAAIc,KAAK,IACTqyV,EAAU/1B,EAAiBxiU,GAAIoF,EAAIA,EAAIjE,OAAS,KAIxDs3V,EAAc,SAAU98H,GACxB,GAAI/8N,MAAMC,QAAQ88N,GACd,IAAK,IAAI37N,EAAI,EAAGA,EAAI27N,EAASx6N,OAAQnB,IACjCs4V,EAAWpyV,KAAK,IAChBsyV,EAAoB78H,EAAS37N,GAAIs4V,EAAWA,EAAWn3V,OAAS,KAK5E,QAAQ,GACJ,KAAKI,aAAmBwM,EAAAA,EACpB4tN,EAAWv9N,EACPQ,MAAMC,QAAQ88N,KACd88H,EAAY98H,GAEZy8H,EAAY7B,EAAiB/3V,KAAKX,EAAM0D,GACxC82V,GAAY,GAEhB,MACJ,KAAK92V,aAAmBlE,EAAAA,EAEpBe,GADAmD,EAAUA,EAAQ7B,aACCtB,SACvB,KAAKmD,aAAmBpB,EAAAA,GAAWoB,aAAmBmN,EAAAA,EAClD8zT,EAAmBpkU,EACfQ,MAAMC,QAAQ2jU,KACdg2B,EAAoBh2B,EAAkB81B,GAElC/2V,aAAmBpB,EAAAA,GACnBi4V,EAAY7B,EAAiBh1V,GAC7B82V,GAAY,GAEP92V,aAAmBmN,EAAAA,IACxB0pV,EAAYd,EAAc/1V,GAC1B82V,GAAY,IAGpB,MACJ,KAAK92V,aAAmBuN,EAAAA,EACpBlP,EAASxB,EACLQ,MAAMC,QAAQe,KACd24V,EAAU34V,EAAQ04V,GAElBF,EAAYd,EAAc/1V,GAC1B82V,GAAY,GAEhB,MACJ,KAAK92V,aAAmBgM,EAAAA,EAMxB,KAAKhM,aAAmBiM,EAAAA,EAEpB+qV,EADA34V,EAAS,CAACxB,GACQk6V,GAElBF,EAAYZ,EAAej2V,GAInC,OAAyB,GAArB+2V,EAAWn3V,OACJ,OAGXs4B,EAAM,CACFv8B,GAAIqE,EAAQrE,GACZsJ,WAAYjF,EAAQU,KACpBy2V,cAAe1lB,OAAOkB,eAAeC,WAAWmkB,KAM5Cl6V,SAHHi6V,EAGc,SAAUM,GAErB,OADAP,EAAUO,SAAWA,EACdP,EAAUhlU,aAAaklU,EAAYF,EAAU36V,YAJzC26V,EAAUhlU,aAAaklU,EAAYF,EAAU36V,WAQzDg8B,KAITm/T,EAAgB,CAClBC,QAAS,GACTC,SAAU,GACVC,WAAY,IAEVC,EAA+B,SAAU58V,GAC3C,MAAMyB,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAAS4W,GAClC,IAAI0lV,EAAe78V,EAAI8wB,qBAAqBrS,EAAAA,EAE5C,GAAIo+U,GACA,IAAKxnV,EAAarV,EAAI8wB,UAAWrvB,EAAKkH,OAAOC,KAAM,CAC/C,IAAI0a,EAAgBtjB,EAAI8wB,UAAUtN,mBAC9BF,GACAA,EAAcpI,yBAAyB9a,MAAK,WACnCkjB,EAAcjO,aAAa5T,EAAKkH,OAAOC,MACxC5I,EAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,+BAAgC,CAAE94B,KAAMvK,EAAI8wB,UAAUjS,uBAMrG29U,EAAcG,WAAa38V,EAAI8wB,UAGG,IAAlC0rU,EAAcE,SAAS33V,QAEvBzE,QAAQwiB,IAAI9iB,EAAI0rC,WAAW1rC,KAAI,SAAU8wB,GACrC,GAAKzb,EAAayb,EAAWrvB,EAAKkH,OAAOC,KAUrC,OAAOtI,QAAQC,SAAQ,GATvB,IAAI+iB,EAAgBwN,EAAUtN,mBAC9B,OAAIF,EACOA,EAAcpI,yBAAyB9a,MAAK,WAC/C,OAAQkjB,EAAcjO,aAAa5T,EAAKkH,OAAOC,QAG5CtI,QAAQC,SAAQ,OAK/BH,MAAK,SAAUsnC,GACf,GAAIA,EAAQ3iC,OAAS,EACjB,IAAK,IAAInB,EAAI,EAAGA,EAAI5D,EAAI0rC,WAAW3mC,OAAQnB,IACnC5D,EAAI0rC,WAAW9nC,KACf5D,EAAI0rC,WAAW9nC,GAAGogB,cAAgB0jB,EAAQ9jC,IAOtDrD,OACDsX,MAAMV,GAGbqlV,EAAcC,QAAUI,EAAe78V,EAAI8wB,UAAYrvB,EAAKD,OAAOykV,eAimF3E,OA7lFAF,EAAUz+R,KAAO,SAAUjmD,GACvB,MAAMI,EAAOC,KAEbD,EAAKsgD,OAAStgD,EAAKzB,IAAIuyB,QAEvB9wB,EAAKuhD,UAAY,CACb85S,aAAcz7V,EAAQ+M,KAGtB/M,EAAQ07V,QACRt7V,EAAKs7V,QAAU17V,EAAQ07V,QAEvBt7V,EAAKs7V,QAAU,CACXhmV,IAAK,qDACLimV,YAAa,EACbj0I,aAAc,CACVx+M,KAAM,gBACN2xE,KAAM,iCAKd76E,EAAQ47V,kBACRx7V,EAAKw7V,iBAAmBz6V,MAAMC,QAAQpB,EAAQ47V,iBAAmB57V,EAAQ47V,gBAAkB,CAAC57V,EAAQ47V,kBAAkBj9V,KAAKk9V,IACnHA,GAASA,EAAInmV,MAASmmV,EAAIC,cAAgBD,EAAIz1U,iBAAkC3hB,IAApBo3V,EAAIF,YASzD,CACHjmV,IAAKmmV,EAAInmV,IAAIuU,OACb7D,UAAWy1U,EAAIC,cAAgBD,EAAIz1U,UACnC/S,OAAQwoV,EAAIxoV,OACZsoV,YAAaE,EAAIF,YACjBnxV,KAAMqxV,EAAIrxV,MAbP,CACHkL,IAAK,oGACLomV,aAAc,IACdzoV,OAAQ,UACRsoV,aAAc,UAc1B37V,EAAQwqC,WACRpqC,EAAK4kV,gBAAkBhlV,EAAQwqC,UAGnCpqC,EAAK6kV,QAAU,IAAII,EAAQjlV,EAAKzB,IAAKyB,GAErCA,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAU6N,GACjD5N,EAAK6kV,QAAQhgJ,cAAgB7kM,EAAKzB,IAAIokB,sBAG1C3iB,EAAKzB,IAAI2I,OAASlH,EAAKkH,OAGvBlH,EAAKu9C,gBAAgBv9C,EAAKu8C,MAAQ,WAAY,IAAI,SAAU5yC,GACxD,MAAM6T,EAAS,IAAIC,UACnBzd,EAAKkiN,QAAU1kM,EAAOG,gBAAgBhU,EAAM,aAAag4B,KAAKxqB,eAItEmtU,EAAUj0U,MAAQ,SAAUzQ,GACxB,MAAMI,EAAOC,KAIb,KAFAL,EAAUA,GAAW,IAETrB,IAoBR,MAAMU,MAAM,+BApBC,IAAA08V,EAKb,GAJA37V,EAAKzB,IAAMqB,EAAQrB,IAEG,QAAtBo9V,EAAA37V,EAAKzB,IAAIw/C,qBAAa,IAAA49S,GAAtBA,EAAwB19S,cAEnBj+C,EAAKzB,IAAI2I,OAAQ,CAClB,IAAI00V,EAAW57V,EAAKukV,SAAWvkV,EAAKukV,SAAS19T,OAAO,EAAG,GAAGwH,cAAgBruB,EAAKukV,SAAS19T,OAAO,GAC/F,IAAI7mB,EAAKzB,IAAIqB,QAAQi8V,QAASn7V,EAAeC,KAAKX,EAAKzB,IAAIqB,QAAQi8V,MAAOD,GAGtE,MAAM38V,MAAM,mCAFZe,EAAK6lD,KAAK7lD,EAAKzB,IAAIqB,QAAQi8V,MAAMD,IAuB7C,GAjBI57V,EAAKkH,OAAOmvD,UAAYz2D,EAAQrB,IAAI4I,IAEpCvH,EAAQrB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAA+B,SAAUf,GACpDgB,EAAKkH,OAAOmvD,UAAYr3D,EAAEw2D,UAM9B51D,EAAQkV,OACR9U,EAAKzB,IAAIuvD,MAAMtqD,EAAAA,EAAAA,KAAAA,gBAAwBxD,EAAKzB,IAAIqB,QAAQyJ,OAAQ,uBAAwB,CAAEe,KAAMrK,EAAAA,EAAAA,QAAAA,OAG/FC,EAAKisJ,UACNjsJ,EAAKisJ,QAAUjsJ,EAAKzB,IAAIw1D,sBAAsB1M,YAG7CrnD,EAAK87V,WAAY,CAElB,IADA,IAAI9nS,EAAO,GACF7xD,EAAI,EAAG+I,EAAMlL,EAAK4kV,gBAAgBthV,OAAQnB,EAAI+I,EAAK/I,IAAK,CAC7D,IAAI6rD,EAAMhuD,EAAK4kV,gBAAgBziV,GAC/B6rD,EAAMA,EAAInnC,OAAO,EAAG,GAAGg5B,cAAgBmO,EAAInnC,OAAO,GAClD,IAAIk1U,EAAY/7V,EAAKzB,IAAI2G,mBAAmB,cAAgB8oD,GACnC,IAArB+tS,EAAUz4V,SACV0qD,EAAMA,EAAInO,cACVk8S,EAAY/7V,EAAKzB,IAAI2G,mBAAmB,cAAgB8oD,IAE5DgG,EAAOA,EAAK1rD,OAAOyzV,GAEvB/7V,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,YAAyB,SAAUf,GAEvCgB,EAAK4kV,gBAAgBxpU,MAAM4yC,GAAQhvD,EAAE+L,mBAAmBvH,EAAAA,EAAAA,QAAWwqD,EAAInnC,OAAO,EAAG,GAAGg5B,cAAgBmO,EAAInnC,OAAO,OAC/G7mB,EAAK87V,WAAWzzV,KAAKrJ,EAAE+L,YAK/B/K,EAAK87V,WAAa9nS,EAGtBh0D,EAAKzB,IAAI0I,UAAW,EAEpBjH,EAAKzB,IAAIoO,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,QAE3BC,EAAKq7V,aAAezuV,SAASqL,cAAc,IAAMjY,EAAKuhD,UAAU85S,cAChEr7V,EAAKq7V,aAAar9T,UAAUnjB,IAAI7a,EAAKusC,QAAQk4S,MAAOzkV,EAAKusC,QAAQzyB,SAEjE9Z,EAAKkH,OAAOgtD,UAAYl0D,EAAKq7V,aAE7B,MAAMW,EAAW,WACbr0V,QAAQC,IAAI,oBAEZ5H,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBAExCjsJ,EAAKisJ,QAERrsJ,EAAQ44B,UACR54B,EAAQ44B,YAIhB,IACIx4B,EAAKkH,OAAO+0V,WAAWt7V,KAAKX,GACvBrB,MAAK,WAEFqB,EAAKq7V,aAAar9T,UAAUC,OAAOj+B,EAAKu8C,MAAQ,gBAChDv8C,EAAKq7V,aAAar9T,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,eAC7Cv8C,EAAK6kV,QAAQK,SAASlnT,UAAUC,OAAOj+B,EAAKu8C,MAAQ,eACpDv8C,EAAK6kV,QAAQK,SAASlnT,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,gBAE5C38C,EAAQkV,OACT9U,EAAKq7V,aAAar9T,UAAUC,OAAOj+B,EAAKusC,QAAQzyB,SAIpDqhV,EAA6Bx6V,KAAKX,EAAMA,EAAKzB,KACxCI,MAAK,WAEFqB,EAAKkH,OAAOg1V,qBAAqBv7V,KAAKX,GAGtCA,EAAKkH,OAAOijD,aAAaxpD,KAAKX,EAAMA,EAAKzB,IAAI8wB,WAG7CrvB,EAAKzB,IAAI4rC,WAAWhlC,QAAO,SAAUgsD,GACjC,OAAOA,EAAK/mD,OAASrK,EAAAA,EAAAA,UAAAA,MAAyBoxD,EAAK/mD,OAASrK,EAAAA,EAAAA,UAAAA,OAC7DowB,UAAU3oB,SAAQ,SAAU/C,GAC3BzE,EAAKkH,OAAOmjD,SAAS1pD,KAAKX,EAAMyE,MAGpCzE,EAAKk1U,OAAOinB,aAAax9V,KAAK,WAS1B,GAPKqB,EAAKkH,OAAOoiD,eACZtpD,EAAKkH,OAAOoiD,eAAexM,OAAOn8C,KAAKX,EAAKkH,OAAOoiD,gBADvBtpD,EAAKkH,OAAOoiD,eAAiB,IAAImgS,EAAezpV,GAG5EJ,EAAQw8V,kBAAqBx8V,EAAQkV,QACtClV,EAAQw8V,kBAAmB,GAG3Bx8V,EAAQkV,MAER9U,EAAKq7V,aAAar9T,UAAUC,OAAOj+B,EAAKusC,QAAQzyB,SAEnC9Z,EAAKkH,OAAOoiD,eAAeihS,YACjC8R,MAAM,CACT51J,YAAa0uI,OAAO4E,WAAWuiB,YAAY18V,EAAQkV,MAAM85C,GAAG,GAAIhvD,EAAQkV,MAAM85C,GAAG,GAAIhvD,EAAQkV,MAAM85C,GAAG,IACtG6oF,YAAa,CACTrpB,QAASxuH,EAAQkV,MAAM+5C,KAAK,GAC5B82G,MAAO/lK,EAAQkV,MAAM+5C,KAAK,GAC1Bs9R,KAAMvsV,EAAQkV,MAAM+5C,KAAK,IAE7B4kB,SAAUuoR,SAGX,GAAIp8V,EAAQw8V,iBAAkB,CACjC,IAAIl6V,EAAQizU,OAAO3zU,KAAKq+S,UAAU,IAC9B08C,EAASnV,EAAgBpnV,EAAKk1U,OAAOvrB,OAEzC,MAAM6yC,EAAc,SAAUC,GAC1B,IAAIC,EAAevnB,OAAO2R,QAAQqB,gBAAgBsU,GAElDz8V,EAAKkH,OAAOw/U,iBAAiB1mV,EAAKk1U,OAAOvrB,MAAMgzB,QAASz6U,EACpDlC,EAAKk1U,OAAOvrB,MAAMgzB,OAAOpoQ,MAAOmoR,EAAc,CAC9CpsS,SAAU,IACV93B,SAAU4gL,KAIZA,EAAoB,WACtB+7H,OAAOwnB,OAAOC,uBAAyB58V,EAAKkH,OAAO21V,iBAAmB78V,EAAKk1U,OAAOyH,OAAOmgB,uBACzF3nB,OAAOwnB,OAAOI,oBAAsB,EAEpCf,KAGJ,GAAIO,EACAC,EAAYD,OACT,CAGH,IAAIS,EACAluR,GAAY,IAAIhrC,MAAOsrC,UAqB3B4tR,EAAqBljK,aAnBQ,WACzB,IAAI2iK,EAAUrV,EAAgBpnV,EAAKk1U,OAAOvrB,OAC1C,GAAI8yC,EACA5iK,cAAcmjK,GACdR,EAAYC,QAEZ,IAAI,IAAI34T,MAAOsrC,UAAYN,EAAY,KAAO,CAC1C+qH,cAAcmjK,GAEd,IAAIC,EAAarwV,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,WAAAA,UAAAA,MAAwC,QAKzF,OAJIy5V,GAAcA,EAAW35V,OAAS,GAClC25V,EAAW,GAAG1xT,aAElB6tK,OAM2C,UAI3D4iJ,IAGJh8V,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2pC,KAAM3pC,EAAAA,EAAAA,KAAAA,SAElDC,EAAKsgD,OAAOhyC,GAAGvO,EAAAA,EAAAA,MAAAA,eAA4B,WAEvC,MAAMm9V,EAAY,SAAU3wV,GACxB,IAAI2kV,EAAe/b,OAAO8F,UAAUC,MAAMiW,wBAAwB5kV,GAC9DimB,EAASxyB,EAAKk1U,OAAOvrB,MAAMosB,MAAMjtJ,UAAUooK,IAAiB,EAC5DiM,EAAoB,CACpBhjC,UAAW+2B,EAAa/2B,UACxBC,SAAU82B,EAAa92B,SACvB5nS,OAAQ0+T,EAAa1+T,OAASA,GAGlC,OAAO2iT,OAAO8F,UAAUC,MAAMmW,wBAAwB8L,IAG1D,IAAI3mS,EAAUx2D,EAAKk1U,OAAOiB,SAAS/nT,OAAOjpB,QAAO,SAAUixU,GACvD,OAAOA,EAAO6D,aASlB,GANIzjR,EAAQlzD,OAAS,GACjBkzD,EAAQhvD,SAAQ,SAAUk0B,GACtBA,EAAOnvB,SAAW2wV,EAAU/nB,OAAOioB,SAASC,oBAAoB3hU,EAAOnvB,SAAU4oU,OAAOC,WAAWrxS,SAIvG/jC,EAAKk1U,OAAOooB,oBAAqB,CAEjC,IAAK,IAAIn7V,EAAI,EAAGA,EAAInC,EAAKk1U,OAAOooB,oBAAoBh6V,OAAQnB,IACxDnC,EAAKk1U,OAAOooB,oBAAoB7+U,IAAItc,GAAGoK,SAAW2wV,EAAUl9V,EAAKk1U,OAAOooB,oBAAoB7+U,IAAItc,GAAGoK,UAGvGvM,EAAKk1U,OAAOvrB,MAAM1mJ,qBAI5B9iH,KAAKngD,IACFoW,OAAM,KAAQzO,QAAQC,IAAI,QAASo0V,UAE3C5lV,OAAM,KAAQzO,QAAQC,IAAI,QAASo0V,UAE3C5lV,OAAM,KAAQzO,QAAQC,IAAI,QAASo0V,OAC1C,MAAO9lV,GAGL,MAFA8lV,IAEM9lV,IAIdouU,EAAUiZ,QAAU,SAAU39V,GAAS,IAAA49V,EACnC,MAAMx9V,EAAOC,KAERD,EAAKisJ,UACNjsJ,EAAKisJ,QAAUjsJ,EAAKzB,IAAIw1D,sBAAsB1M,WAG5B,QAAtBm2S,EAAAx9V,EAAKzB,IAAIw/C,qBAAa,IAAAy/S,GAAtBA,EAAwBv/S,aAExBj+C,EAAKzB,IAAI0I,UAAW,EAGhBjH,EAAKk1U,QAAUl1U,EAAKk1U,OAAOiZ,eAC3BnuV,EAAKkH,OAAOqpV,iBAAiBrhO,YAAYhvH,KAAKgoH,mBAGlDloH,EAAKkH,OAAOoiD,eAAekkS,cAAc,CAAEl9R,SAAU,MAChD3xD,MAAK,WAEF,IAAIy6M,EAAoB,WAEpBp5M,EAAKzB,IAAIoO,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,QAG9BC,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,sBAAoC,CAAEm7E,gBAAiBl7E,EAAKk1U,OAAOvrB,MAAMzuO,kBAEtFl7E,EAAKk1U,OAAOvrB,MAAMzuO,gBAAgBuiR,kBAClCz9V,EAAKk1U,OAAOvrB,MAAMzuO,gBAAgBuiR,iBAAiBj2V,SAAQ,SAAUszV,GACjE96V,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,sBAAoC,CAAEm7E,gBAAiB4/Q,OAIhF96V,EAAKkH,OAAOw2V,sBAAsB/8V,KAAKX,GAAMrB,MAAK,WAC9CqB,EAAKq7V,aAAar9T,UAAUC,OAAOj+B,EAAKusC,QAAQk4S,MAAOzkV,EAAKu8C,MAAQ,eACpEv8C,EAAKq7V,aAAar9T,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,gBAC7Cv8C,EAAK6kV,QAAQK,SAASlnT,UAAUC,OAAOj+B,EAAKu8C,MAAQ,gBACpDv8C,EAAK6kV,QAAQK,SAASlnT,UAAUnjB,IAAI7a,EAAKu8C,MAAQ,eAIjDv8C,EAAKkH,OAAO46I,QAAQnhJ,KAAKX,GAGzBA,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBACxCjsJ,EAAKisJ,QAERrsJ,EAAQ44B,UACR54B,EAAQ44B,cAIhBx4B,EAAK6kV,QAAQxwR,YAAY,GACrBr0D,EAAK+qV,QACL/qV,EAAK+qV,OAAO7qV,KAAK8qV,aAAa,OAIlC12Q,EAAS8yQ,EAAgBpnV,EAAKk1U,OAAOvrB,OACrC1wK,EAAYk8L,OAAO2R,QAAQqB,gBAAgB7zQ,GAC3CpyE,EAAQ8lV,EAAqBhoV,EAAKk1U,OAAOvrB,MAAOr1O,GAEpDt0E,EAAKkH,OAAOw/U,iBAAiB1mV,EAAKk1U,OAAOvrB,MAAMgzB,QAASz6U,EAAOlC,EAAKk1U,OAAOvrB,MAAMgzB,OAAOpoQ,MAAO0kE,EAAW,CACtG3oF,SAAU,KACV93B,SAAU4gL,OAGjBhjM,OAAM,SAAUpX,GACb,MAAOA,MAInBslV,EAAUp9U,OAAU,WAEhB,IAAIy2V,EAAgB,KAEpB,MAAMC,EAAkB,IAAI/J,EAAgB,kBACtCgK,EAAmB,IAAIhG,EAEvBhgU,EAAa,SAAUimU,GACzB,IAAIxtL,EAAewtL,EACnB,QAAQ,GACJ,KAAKA,aAAqB3oB,OAAOmkB,gBAC7Br5V,KAAKi1U,OAAOvrB,MAAMo0C,iBAAiBljV,IAAIijV,GACvC,MAEJ,KAAKA,aAAqB1+V,QAAUsB,EAAeC,KAAKm9V,EAAW,aAC1D79V,KAAKi1U,OAAOooB,sBACbr9V,KAAKi1U,OAAOooB,oBAAsBr9V,KAAKi1U,OAAOvrB,MAAMq0C,WAAWnjV,IAAI,IAAIs6T,OAAO8oB,oBAAoB,CAC9Ft0C,MAAO1pT,KAAKi1U,OAAOvrB,UAY3Br5I,EAR4BrwK,KAAKi1U,OAAOooB,oBAAoBziV,IAAI,CAC5DtO,SAAUuxV,EAAUvxV,SACpBygB,MAAO8wU,EAAU7jB,UAAUjtT,MAC3BolU,eAAgB0L,EAAU7jB,UAAUmY,eACpCzb,gBAAiBmnB,EAAU7jB,UAAUtD,gBACrCt3U,GAAIy+V,EAAU7jB,UAAU56U,KAI5B,MAEJ,KAAKy+V,aAAqB1+V,QACtBkxK,EAAerwK,KAAKi1U,OAAOiB,SAAS+nB,QAAQJ,EAAUz+V,OAElDixK,EAAerwK,KAAKi1U,OAAOiB,SAASt7T,IAAIijV,IAQpD,OAFA79V,KAAKi1U,OAAOvrB,MAAM1mJ,gBAEXqN,GAEL6tL,EAAc,SAAU5/V,EAAK6/V,EAAW15B,GACrChkU,EAAeC,KAAKpC,EAAI8/V,iBAAkBD,EAAU35V,MAAMpF,IAItDqB,EAAeC,KAAKpC,EAAI8/V,iBAAiBD,EAAU35V,MAAMpF,IAAK++V,EAAU/+V,IAGzEd,EAAI8/V,iBAAiBD,EAAU35V,MAAMpF,IAAI++V,EAAU/+V,IAAIgJ,KAAKq8T,GAF5DnmU,EAAI8/V,iBAAiBD,EAAU35V,MAAMpF,IAAI++V,EAAU/+V,IAAM,CAACqlU,IAJ9DnmU,EAAI8/V,iBAAiBD,EAAU35V,MAAMpF,IAAM,GAC3Cd,EAAI8/V,iBAAiBD,EAAU35V,MAAMpF,IAAI++V,EAAU/+V,IAAM,CAACqlU,IAQ1DA,aAAqByQ,OAAOsjB,SAC5B2F,EAAUl+V,KAAKwkU,UAAYA,EAC3BA,EAAU/gU,MAAQ,CAAEF,OAAQ26V,KAK9BE,EAAW,CACbv+V,EAAAA,EAAAA,MAAAA,sBAAoCA,EAAAA,EAAAA,MAAAA,gBACpCA,EAAAA,EAAAA,MAAAA,SAAuBA,EAAAA,EAAAA,MAAAA,YAA0BA,EAAAA,EAAAA,MAAAA,gBAA8BA,EAAAA,EAAAA,MAAAA,aAA2BA,EAAAA,EAAAA,MAAAA,WAC1GA,EAAAA,EAAAA,MAAAA,WAAyBA,EAAAA,EAAAA,MAAAA,cAA4BA,EAAAA,EAAAA,MAAAA,cAC0DA,EAAAA,EAAAA,MAAAA,QAE7Gw+V,EAAiB,SAAUv/V,GAC7B,IAAIgB,EAAOC,KAEX,QAAQ,GACJ,KAAKjB,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,sBACNC,EAAKisJ,UACNjsJ,EAAKisJ,QAAUjsJ,EAAKzB,IAAIw1D,sBAAsB1M,WAClD,MACJ,KAAKroD,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,gBACXC,EAAKkH,OAAOijD,aAAaxpD,KAAKX,EAAMhB,EAAEyF,OACtC,MAEJ,KAAKzF,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,SACXC,EAAKkH,OAAOmjD,SAAS1pD,KAAKX,EAAMhB,EAAEyF,OAClC,MAEJ,KAAKzF,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,YACXC,EAAKkH,OAAO6jD,YAAYpqD,KAAKX,EAAMhB,EAAEyF,OACrC,MAEJ,KAAKzF,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,gBACXC,EAAKkH,OAAOs3V,sBAAsB79V,KAAKX,EAAMhB,EAAEyF,MAAO,CAAE82C,WAAYv8C,EAAEyF,MAAM6O,kBAC5E,MAEJ,KAAKtU,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,aACXC,EAAKkH,OAAOs3V,sBAAsB79V,KAAKX,EAAMhB,EAAEyF,MAAO,CAAEgP,QAASzU,EAAEyF,MAAM+O,eACzExT,EAAKk1U,OAAOvrB,MAAM1mJ,gBAClB,MAEJ,KAAKjkK,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,WACX,IAAK,IAAIoC,EAAI,EAAGA,EAAInC,EAAKkH,OAAOijC,WAAW7mC,OAAQnB,IAC/C,GAAInC,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,iBAAmB1zV,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,OAAOzY,KAAK,OAASvL,EAAEyF,MAAMyW,MAAM3Q,KAAK,KAAM,CAErI,GAAIvL,EAAE+zD,SAAW/zD,EAAEg0D,SAAU,CACzB,MAAMujR,EAAYv3U,EAAE+zD,SAAW/zD,EAAEg0D,SACjC,IAAK,IAAI3tD,EAAI,EAAGA,EAAIkxU,EAAWlxU,IAC3BrF,EAAKk1U,OAAOvrB,MAAM80C,cAAcC,MAAM1+V,EAAKkH,OAAOijC,WAAWhoC,QAG9D,CACH,MAAMo0U,EAAYv3U,EAAEg0D,SAAWh0D,EAAE+zD,SACjC,IAAK,IAAI1tD,EAAI,EAAGA,EAAIkxU,EAAWlxU,IAC3BrF,EAAKk1U,OAAOvrB,MAAM80C,cAAcE,MAAM3+V,EAAKkH,OAAOijC,WAAWhoC,IAIrEnC,EAAKkH,OAAOijC,WAAWnhC,OAAOhK,EAAEg0D,SAAU,EAAGhzD,EAAKkH,OAAOijC,WAAWnhC,OAAOhK,EAAE+zD,SAAU,GAAG,IAC1F,MAGR,MAEJ,KAAK/zD,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,WAEX,MAEJ,KAAKf,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,cAEX,GAAIC,EAAKkH,OAAOm3V,kBAAoB39V,EAAeC,KAAKX,EAAKkH,OAAOm3V,iBAAkBr/V,EAAEyF,MAAMpF,IAAK,CAE/F,MAAM4+B,EAAS,SAAUv6B,GACjBhD,EAAeC,KAAKX,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IAAKqE,EAAQrE,MAClDW,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IAAIqE,EAAQrE,IACvDmI,SAAQo3V,GAAO5+V,EAAKkH,OAAO6wB,cAAcp3B,KAAKX,EAAM4+V,YAE3D5+V,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IAAIqE,EAAQrE,MAI5DL,EAAE0E,mBAAmB3C,MACrB/B,EAAE0E,QAAQ8D,QAAQy2B,GAElBA,EAAOj/B,EAAE0E,SAGjB,MAEJ,KAAK1E,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,cAMX,GAJAC,EAAKkH,OAAOguU,OAAOK,YAAYC,UAAU,WAAWhuU,SAASglU,IACzDA,EAAG2J,SAASsF,eAGZz7U,EAAKkH,OAAOm3V,kBAAoB39V,EAAeC,KAAKX,EAAKkH,OAAOm3V,iBAAkBr/V,EAAEyF,MAAMpF,IAE1F,IAAK,IAAI8qF,KAAanqF,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IACnCW,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IAAI8qF,GAC/C3iF,SAAQo3V,GAAO5+V,EAAKkH,OAAO6wB,cAAcp3B,KAAKX,EAAM4+V,YAE3D5+V,EAAKkH,OAAOm3V,iBAAiBr/V,EAAEyF,MAAMpF,IAAI8qF,GAIxD,MAEJ,KAAKnrF,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,KACX,GAAIC,EAAKkH,OAAOoiD,iBAAmBtpD,EAAKkH,OAAOoiD,eAAeywQ,OAAQ,CAElE,IAAIxnS,EAAQvyB,EAAKkH,OAAOguU,OAAOvrB,MAAMrsP,OAAO6lF,YACxC3wH,EAASxyB,EAAKkH,OAAOguU,OAAOvrB,MAAMrsP,OAAO8pF,aAK7C,IAAKpnJ,EAAKkH,OAAO23V,sBACZ7+V,EAAKkH,OAAO43V,oBAEbvsU,IAAUvyB,EAAKkH,OAAO43V,oBACtBtsU,IAAWxyB,EAAKkH,OAAO23V,oBAavB,OAXK7+V,EAAKkH,OAAO43V,qBACb9+V,EAAKkH,OAAO43V,mBAAqB9+V,EAAKkH,OAAOguU,OAAOvrB,MAAMrsP,OAAO6lF,aAGhEnjJ,EAAKkH,OAAO23V,sBACb7+V,EAAKkH,OAAO23V,oBAAsB7+V,EAAKkH,OAAOguU,OAAOvrB,MAAMrsP,OAAO8pF,cAGtEpnJ,EAAKkH,OAAO43V,mBAAqBvsU,OACjCvyB,EAAKkH,OAAO23V,oBAAsBrsU,GAKtCxyB,EAAKkH,OAAOk+U,oBAAoBzkV,KAAKX,EAAMA,EAAK6kV,QAAQ1jV,aAE5D,MAEJ,KAAKnC,EAAEoL,MAAQrK,EAAAA,EAAAA,MAAAA,OAAqB,CAEhC,GAAIC,EAAK++V,UAAY1xM,YAAYtpH,MAAQ/jC,EAAK++V,SAAW,GACrD,OAEJ/+V,EAAK++V,SAAW1xM,YAAYtpH,MAE5B,IAAI0oT,EAAYtX,OAAO2d,UAAU7J,eAAejqV,EAAEuc,QAClDvb,EAAKkH,OAAO83V,eAAer+V,KAAKX,EAAMysV,GACtC,SAMNwS,EAA0B,WAC5B,IAAIj/V,EAAOC,KAEX,GAAKD,EAAKzB,IAAI0I,WAITjH,EAAKkH,OAAOg4V,kBAAmB,CAChC,IAAIC,EAAgBn/V,EAAKkH,OAAOqpV,iBAAiBrhO,YAC7CtN,EAAQu9O,EAAc96O,iBAAiBt1G,SAAS5J,QAAO,SAAUzB,GACjE,OAAOA,aAAmBuN,EAAAA,KAG9B,GAAI2wG,GAASA,EAAMt+G,OAAS,EAAG,CAE3B,IAAIizU,EAAY,GAChB,MAAM6oB,EAAmB,IAAIjqB,OAAOyE,iBAAiB,SAAUylB,EAAO5lO,GAClE,GAAI7X,EAAM,GAAGrhH,SAAS+C,OAASizU,EAAUjzU,OAAQ,CAC7C,IAAIg8V,EAA2B19O,EAAM,GAAGrhH,SAASqK,MAAM2rU,EAAUjzU,QAAQ/E,IAAI,SAAUmlF,GACnF,IAAIvtB,EAAcutB,EAMlB,OAJIzjF,KAAKiH,OAAOmvD,YAAcp2D,KAAKiH,OAAOC,MACtCgvD,EAAc3yD,EAAAA,EAAAA,KAAAA,UAAkBkgF,EAAYzjF,KAAKiH,OAAOmvD,UAAWp2D,KAAKiH,OAAOC,MAG5EguU,OAAO4F,aAAakO,YAAY9yR,EAAY,GAAIA,EAAY,GAAIutB,EAAW,KACpFvjC,KAAKlgD,OAEHkpV,EAAmB,GAQvB,OANIA,EADAmW,aAAoCv+V,MACjBo0U,OAAO8F,UAAUC,MAAMqkB,kCAAkCD,GAEzD,CAACnqB,OAAO8F,UAAUC,MAAMmW,wBAAwBiO,IAGvE/oB,EAAYA,EAAUjuU,OAAO6gV,GAIjC,OAAO5S,GAETp2R,KAAKlgD,OAAO,GAEd,IAAIu/V,EAAoB,IAAIrqB,OAAOsjB,OAAO,CACtCp5V,GAAI,oBACJ2R,SAAU,CACNulU,UAAW6oB,EACXljB,eAAe,EACf3pT,MAAO,EACPomT,SAAU,IAAIxD,OAAOsqB,6BAA6B,CAC9CjuR,MAAO,IAAI2jQ,OAAOyE,iBAAiB,SAAUylB,EAAO5lO,GAEhD,OADAz5H,EAAKk1U,OAAOvrB,MAAM1mJ,gBACXkyK,OAAOQ,MAAM+pB,UAAU,IAAIvqB,OAAOQ,MAAM,EAAG,IAAK,KAAMwpB,EAAcv9O,MAAMe,YAAY9iF,QAAU,EAAI,IAC7GsgB,KAAKlgD,OAAO,GACd0/V,SAAUxqB,OAAOQ,MAAM11T,iBAKnCjgB,EAAKkH,OAAOg4V,kBAAoBl/V,EAAKk1U,OAAOiB,SAASt7T,IAAI2kV,GACzDx/V,EAAKk1U,OAAOvrB,MAAM1mJ,mBAIxB28L,EAA4B,SAAU9/T,GACxC,IAAI9/B,EAAOC,KAEPk/V,EAAgBn/V,EAAKkH,OAAOqpV,iBAAiBrhO,YACjD,QAAQ,GACJ,KAAKiwO,EAAc5+O,MAAMzgF,MAAMqgF,cAAcl3G,QAAQ62B,EAAM11B,OAAS,EACpE,KAAK01B,EAAMpyB,OAAOquB,UAAU9yB,QAAQ,SAAW,GAAK62B,EAAMpyB,OAAO+uD,cAAcz+B,UAAU8gB,SAASqgT,EAAc5+O,MAAMxkF,UAAU8jU,eAChI,MAAO//T,EAAMpyB,OAAO+uD,eAAiB38B,EAAMpyB,OAAO+uD,cAAcz+B,UAAU8gB,SAASqgT,EAAc5+O,MAAMxkF,UAAU8jU,gBACjH,KAAK//T,EAAMpyB,OAAOquB,UAAU9yB,QAAQ,SAAW,EAO3C,GALIjJ,EAAKzB,IAAI0I,WACTjH,EAAKk1U,OAAO4qB,MAAMC,eAAgB,EAClC//V,EAAKk1U,OAAO4qB,MAAME,YAAc7qB,OAAOC,WAAW6qB,SAAS,IAAIn8T,OAG/D9jC,EAAKkH,OAAOg5V,gBAAiB,CAC7B,GAAIlgW,EAAKkH,OAAOg5V,gBAAgB58V,OAAS,EAAG,CACxC,IAAI8yU,EAASp2U,EAAKkH,OAAOg5V,gBAAgBzhV,IAAI,GAAG03T,SAAS/nT,OAAO,GAChEpuB,EAAKk1U,OAAOiB,SAASgqB,WAAW/pB,EAAO/2U,IAG3CW,EAAKkH,OAAOg5V,gBAAgBp+M,iBACrB9hJ,EAAKkH,OAAOg5V,gBAKvB,GAFAf,EAAcv0O,qBAEV9qF,EAAM2wT,OAAQ,CACd,MAAM78O,EAAoBurP,EAActrP,uBACpCD,GACAA,EAAkB37F,cAAcknV,EAAc5+O,MAAMvhE,SAASggE,MAAMzzE,QAG3E,MACJ,KAAKzL,EAAMpyB,OAAOswB,UAAU8gB,SAASqgT,EAAc5+O,MAAMxkF,UAAU0iF,MAC/Dz+G,EAAKk1U,OAAO4qB,MAAMC,eAAgB,EAClC,MACJ,KAAKjgU,EAAMpyB,OAAOswB,UAAU8gB,SAASqgT,EAAc5+O,MAAMxkF,UAAU2iF,OAC/D1+G,EAAKk1U,OAAO4qB,MAAMC,eAAgB,IAMxCK,EAAuB,SAAU12T,GACnC,IAAI1pC,EAAOC,KACX,MAAMogW,EAAkBrgW,EAAK87V,WAAWv9V,KAAI,SAAUyO,GAAQ,OAAOA,EAAKuvC,SAe1E,OAbAv8C,EAAKzB,IAAI6rC,SAAS5iC,SAAQ,SAAU84V,GAChC,GAAID,EAAgBp3V,QAAQq3V,EAAQ/jT,OAAS,EACzC,QAAQ,GACJ,KAAMx8C,EAAAA,EAAAA,KAAAA,SAAuB2pC,EACzB42T,EAAQjiT,SACR,MACJ,KAAMt+C,EAAAA,EAAAA,KAAAA,QAAsB2pC,EACxB42T,EAAQ5hT,eAMhB,GACJ,KAAM3+C,EAAAA,EAAAA,KAAAA,SAAuB2pC,EACzB98B,SAASjB,iBAAiB,gBAAgBnE,SAAQ,SAAUC,GACxDA,EAAIu2B,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,kBAEzBC,EAAK87V,WAAWt0V,SAAQ,SAAUwmD,GAC9BA,EAAIrhD,IAAIqxB,UAAUC,OAAOl+B,EAAAA,EAAAA,QAAAA,WAE7B,MACJ,KAAMA,EAAAA,EAAAA,KAAAA,QAAsB2pC,EACxB98B,SAASjB,iBAAiB,gBAAgBnE,SAAQ,SAAUC,GACxDA,EAAIu2B,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,kBAEtBC,EAAK87V,WAAWt0V,SAAQ,SAAUwmD,GAC9BA,EAAIrhD,IAAIqxB,UAAUnjB,IAAI9a,EAAAA,EAAAA,QAAAA,WAIlC,IAAIwgW,GAAa,EACbC,EAAkB,KACtB,MAAMC,EAAgB,GAChBC,EAAuBC,IAGzB,GAAI3gW,EAAKk1U,OAAOiZ,cACZ,OAGJ,MAAM5tP,EAAiB,WACnB,IAAI0mP,EAAMjnV,EAAKk1U,OAAOyH,OAAOC,WAAW+jB,EAASp0V,UAC7CA,EAAWvM,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAKuK,EAAKjnV,EAAKk1U,OAAOvrB,OACzDp9S,GACAvM,EAAKkH,OAAO05V,wBAAwBjgW,KAAKX,EAAMuM,IAIvD,GAAIvM,EAAKzB,IAAIw/C,yBAAyB4rC,EAAAA,SAAQ3pF,EAAKzB,IAAIw/C,yBAAyB6lF,EAAAA,QAAQ,CACpF,IAAIr3H,EAAWvM,EAAKk1U,OAAOvrB,MAAMk3C,aAAaF,EAASp0V,UACvDk0V,EAAcA,EAAcn9V,QAAUiJ,MAErC,CACD,IAAIw3J,EAAgB/jK,EAAKk1U,OAAOvrB,MAAM+yB,KAAKikB,EAASp0V,UACpD,GAAIw3J,GAAiBA,EAAc1kK,GAAI,CACnC,IAAIA,EAAK0kK,EAAc1kK,cAAc81U,OAAOsjB,OAAS10L,EAAc1kK,GAAGyJ,KAAOi7J,EAAc1kK,GAEvF+2T,GAAU,EACd,IAAK,IAAIl3S,KAAWlf,EAAKkH,OAAOm3V,iBAC5B,GAAI39V,EAAeC,KAAKX,EAAKkH,OAAOm3V,iBAAiBn/U,GAAU7f,GAAK,CAChE,MAAM++V,EAAYp+V,EACbzB,IACA4rC,WACAthC,MAAKglD,GAAaA,EAAUxuD,KAAO6f,IACnCnQ,SACA5J,QAAOzB,GAAWrE,EAAG4J,QAAQvF,EAAQrE,KAAO,GAAKqE,EAAQY,aAE9D,GAAI85V,GAAaA,EAAU96V,OAAS,EAAG,KAAAw9V,EAGnC,GAFA1qC,GAAU,IAEJgoC,aAAqBzuV,EAAAA,GAAYyuV,aAAqB1uV,EAAAA,GAAS,CAEjE,IAAIu3U,EAAMjnV,EAAKk1U,OAAOyH,OAAOC,WAAW+jB,EAASp0V,UAG7CmvB,GAFAnvB,EAAWvM,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAKuK,EAAKjnV,EAAKk1U,OAAOvrB,OAEhD3pT,EAAKzB,IAAI2I,OAAOqrV,iBAAiB5xV,KAAKX,EAAKzB,IAAK,CACzDgO,SAAUA,EACV0tU,UAAW,CACPjtT,MAAOxpB,EAAAA,EAAAA,KAAAA,wBAAgCxD,EAAKu8C,MAAQ,WACpD41S,UAAW,IAAIhd,OAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,OAAOkd,eAAeC,OACtC3b,gBAAiBxB,OAAOyB,gBAAgBC,oBAIhD,MAAMkqB,EAAc,SAAU/hW,GAC1B,GAAIA,EAAE+L,QAAS,CACX,MAAMA,EAAU/L,EAAE+L,QACZi2V,EAAe,SAAUhiW,GACvBA,EAAE+L,UAAYA,IACd/K,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,kBAAgCihW,GAC7ChhW,EAAKzB,IAAI2I,OAAO6wB,cAAcp3B,KAAKX,EAAM07B,KAGjD17B,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,kBAAgCihW,GAC5ChhW,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,UAAwBghW,KAG7C/gW,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,UAAwBghW,GAGyC,QAAjFD,EAAA9gW,EAAKzB,IAAI2G,mBAAmB1B,EAAAA,EAAAA,QAAAA,cAAyBqF,MAAMu/D,GAAOA,EAAG9iE,qBAAY,IAAAw7V,GAAjFA,EAAmF7zV,QACnFjN,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,aAA2B,CAAE2D,QAAS06V,EAAU,KAEjE,OAMPhoC,GACD71N,SAGJA,MAMZ,IAAI0gQ,GAAiB,EACrB,MAAMC,EAAuBP,IAEzB,IAAI3gW,EAAKk1U,OAAOiZ,cAAhB,CAGA,IAAIpqL,EAAgB/jK,EAAKk1U,OAAOvrB,MAAM+yB,KAAKikB,EAAS7iB,aAOpD,IALI/5K,IAAiBA,EAAc1kK,IAAQW,EAAKzB,IAAIw/C,yBAAyB4rC,EAAAA,QAGzE3pF,EAAKk1U,OAAO53Q,OAAO13D,MAAMk7I,OAAS,UAFlC9gJ,EAAKk1U,OAAO53Q,OAAO13D,MAAMk7I,OAAS,UAIlCy/M,GAAcC,IAAoBS,EAAgB,CAClD,MAAM18O,EAAcvkH,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAK18U,EAAKk1U,OAAOyH,OAAOC,WAAW+jB,EAAS7iB,aAAc99U,EAAKk1U,OAAOvrB,OAClH62C,EAAgBW,UAAU50V,SAAWg4G,EAErC08O,GAAiB,EACjBjhW,EAAKk1U,OAAOvrB,MAAM1mJ,gBAClB/7G,YAAW,WACP+5S,GAAiB,IAElB,QAKLG,EAAsBT,IACxB,IAAI58L,EAAgB/jK,EAAKk1U,OAAOvrB,MAAM+yB,KAAKikB,EAASp0V,UAChDw3J,GAAiBA,EAAc1kK,KAC/BkhW,GAAa,EACb5C,EAAgB39V,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAK18U,EAAKk1U,OAAOyH,OAAOC,WAAW+jB,EAASp0V,UAAWvM,EAAKk1U,OAAOvrB,OAC3G62C,EAAkBz8L,EAClB/jK,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4BC,cAAe,IAG/DsgB,EAAoBV,IAEtB,GADAJ,GAAa,EACTC,EAAiB,CACjB,MAAMj8O,EAAcvkH,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAK18U,EAAKk1U,OAAOyH,OAAOC,WAAW+jB,EAASp0V,UAAWvM,EAAKk1U,OAAOvrB,OAC/G62C,EAAgBW,UAAU50V,SAAWg4G,EACrC,IAAIimO,EAAuBrV,OAAO8F,UAAUC,MAAMiW,wBAAwB5sO,GACtE+8O,EAA0BnsB,OAAO8F,UAAUC,MAAMiW,wBAAwBwM,GAE7E39V,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,YAA0B,CAAEgkK,cAAey8L,EAAgBW,UAAWttQ,UAAW,CAACshP,OAAO3zU,KAAK0kV,UAAUsE,EAAqBrwB,WAAYgb,OAAO3zU,KAAK0kV,UAAUsE,EAAqBpwB,WAAYp2J,UAAW,CAACmxK,OAAO3zU,KAAK0kV,UAAUob,EAAwBnnC,WAAYgb,OAAO3zU,KAAK0kV,UAAUob,EAAwBlnC,aACrUomC,EAAkB,KAClBxgW,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4BC,cAAe,IAqCrE,GAhCIhhV,EAAAA,EAAAA,KAAAA,SAAuB2pC,IAElB1pC,EAAKkH,OAAOqpV,iBAAiB9kT,aAC9BrsC,OAAOD,KAAKa,EAAKzB,IAAIqB,QAAQwqC,UAAUnhC,QAAQ,gBAAkB,GACjEjJ,EAAK4kV,gBAAgB37U,QAAQ,gBAAkB,IAC/CjJ,EAAKkH,OAAOqpV,iBAAiB9kT,YAAc,IAAIkmT,EAAsB3xV,IAGpEA,EAAKuhW,gBACNvhW,EAAKuhW,cAAgB,IAGzBvhW,EAAKuhW,cAAcC,kBAAoB,IAAIrsB,OAAOmC,wBAAwBt3U,EAAKk1U,OAAOvrB,MAAMrsP,QAC5Ft9D,EAAKuhW,cAAcC,kBAAkBjqB,eAAempB,EAAqBvrB,OAAOsC,qBAAqBC,YACrG13U,EAAKuhW,cAAcC,kBAAkBjqB,eAAe2pB,EAAqB/rB,OAAOsC,qBAAqBO,YACrGh4U,EAAKuhW,cAAcC,kBAAkBjqB,eAAe6pB,EAAoBjsB,OAAOsC,qBAAqB6B,WACpGt5U,EAAKuhW,cAAcC,kBAAkBjqB,eAAe8pB,EAAkBlsB,OAAOsC,qBAAqB+B,UAE3Fz5U,EAAAA,EAAAA,KAAAA,UAAwB2pC,GAC3B1pC,EAAKuhW,cAAcC,mBACnBxhW,EAAKuhW,cAAcC,kBAAkB1/M,WAIxC9hJ,EAAKkH,OAAOqpV,iBAAiBrhO,aAC9B9vH,OAAOD,KAAKa,EAAKzB,IAAIqB,QAAQwqC,UAAUnhC,QAAQ,gBAAkB,GACjEjJ,EAAK4kV,gBAAgB37U,QAAQ,gBAAkB,IAC/CjJ,EAAKkH,OAAOqpV,iBAAiBrhO,YAAclvH,EAAK87V,WAAWjzV,MAAK,SAAUmE,GACtE,OAAOA,aAAgBxJ,EAAAA,EAAAA,QAAAA,gBAI3BxD,EAAKkH,OAAOqpV,iBAAiBrhO,YAAa,CAE1C,IAAIiwO,EAAgBn/V,EAAKkH,OAAOqpV,iBAAiBrhO,YAEjD,GAAInvH,EAAAA,EAAAA,KAAAA,SAAuB2pC,EAAM,CAE7B,IAAI+3T,EAAW,CAACtC,EAAc5+O,MAAMvhE,SAASggE,KAC7CmgP,EAAc5+O,MAAMvhE,SAAS0/D,MAC7BygP,EAAc5+O,MAAMvhE,SAASigE,SAC7BkgP,EAAc5+O,MAAMvhE,SAASkgE,SACzBwiP,EAA6B9B,EAA0Bz/S,KAAKngD,GAChEA,EAAKkH,OAAOqpV,iBAAiBrhO,YAAYshO,cAAgBkR,EAEzD,IAAIC,EAAmB,SAAU3iW,GAEzByiW,EAASrmV,MAAK,SAAUixT,GACxB,OAAOrtU,EAAE0O,OAAOswB,UAAU8gB,SAASutR,EAAI7iU,QAAQ,IAAK,SAEpDk4V,EAA2B1iW,IAInCmgW,EAAc/+U,MAAQ,WAElB5c,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuD27V,EAAcyC,gBACrEp+V,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,cAAsD27V,EAAc0C,oBAEpE1C,EAAc32O,cAAgB22O,EAAc2C,eAC5C3C,EAAcrrP,oBAAsBqrP,EAAc4C,qBAElDN,EAASj6V,SAAQ,SAAUw6V,GACvBp1V,SAASg0C,oBAAoB,QAAS+gT,MAG1CxC,EAAc9wV,IAAI8wV,EAAc5+O,MAAMzgF,MAAMqgF,cAAeuhP,IAI/D90V,SAASf,iBAAiB,QAAS81V,GAEnCxC,EAAc7wV,GAAG6wV,EAAc5+O,MAAMzgF,MAAMqgF,cAAeuhP,GAI1DvC,EAAcyC,gBAAkBp+V,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAChCA,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,eAAuD,SAAUk3T,GAE7DykC,EAAcyC,gBAAgBjhW,KAAKw+V,EAAcj/V,KAAMw6T,GAEnDA,EACAykC,EAAc7wV,GAAG6wV,EAAc5+O,MAAMzgF,MAAM6/E,eAAgBs/O,EAAwB9+S,KAAKngD,KAGxFm/V,EAAc9wV,IAAI8wV,EAAc5+O,MAAMzgF,MAAM6/E,eAAgBs/O,EAAwB9+S,KAAKngD,IACrFA,EAAKkH,OAAOg4V,oBACZl/V,EAAKk1U,OAAOiB,SAASgqB,WAAWngW,EAAKkH,OAAOg4V,kBAAkB7/V,WACvDW,EAAKkH,OAAOg4V,qBAK/BC,EAAc4C,qBAAuB5C,EAAcrrP,oBACnDqrP,EAAcrrP,oBAAsB,SAAU31B,EAAIv+E,GAM9C,OAJIA,MAAAA,GAAAA,EAASisH,SACT+zO,EAA0Bj/V,KAAKX,EAAM,CAAE0N,OAAQ,CAAEquB,UAAW,QAAU00T,QAAQ,IAG3E0O,EAAc4C,qBAAqBphW,KAAKw+V,EAAehhR,EAAIv+E,IAItE,MAAMg0G,EAAoBurP,EAActrP,uBAKxC,IAAIouP,EAJAruP,GAAqBurP,EAAc1zO,cACnC0zO,EAAcrrP,oBAAoBnzG,KAAKX,EAAM4zG,EAAmB,CAAEiY,SAAS,IAI/EszO,EAAc2C,eAAiB3C,EAAc32O,cAC7C22O,EAAc32O,cAAgB,SAAUrqC,GACpC,IAAIn+E,EAAOC,KAAKiH,OAAOqpV,iBAAiBrhO,YAExClvH,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,gCAAiC,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,OAGzEE,KAAKi1U,OAAO4qB,MAAMC,eAAiB9/V,KAAKiH,OAAOg5V,kBAC/C+B,IACArC,EAA0Bj/V,KAAKV,KAAM,CAAEyN,OAAQ,CAAEquB,UAAW,QAAU00T,QAAQ,KAGlFzwV,EAAKmoH,gBAAkB,EACvBnoH,EAAKonH,UAAUjpC,GAAI,GAAOx/E,KAAK,WAG3B,GAFAqB,EAAKE,KAAKsoH,gBAENxoH,EAAK0zG,YAAc1zG,EAAK0zG,WAAW3kG,SAAU,CAC7C,IAAI6yG,EAAQ5hH,EAAK0zG,WAAW3kG,SAASlG,MAAK,SAAUnF,GAChD,OAAOA,aAAmBuN,EAAAA,KAG1B2wG,GACAmnO,EAAOpoV,KAAKV,KAAM2hH,EAAMrhH,SAAUqhH,EAAM1hH,KAAKwD,QAAQtC,cAAcwqC,OAAQ,QAAS5rC,EAAKggG,YAAahgG,EAAK0rG,UAAW1rG,EAAKq9T,cAAc1+T,KAAK,SAAUkG,GACpJ,IAAIykV,EAAOzkV,EAAOykV,KAAMhkS,EAAgBzgD,EAAOygD,cAAekkS,EAAgB3kV,EAAO2kV,cAErFvpV,KAAKiH,OAAOg5V,gBAAkB,IAAI/qB,OAAO+sB,qBACzC,IAAIC,EAAoB,IAAIhtB,OAAOitB,kBAAkB,CACjDz4C,MAAO1pT,KAAKi1U,OAAOvrB,MACnB04C,qBAAsBpiW,KAAKiH,OAAOg5V,kBAGtCjgW,KAAKi1U,OAAOvrB,MAAMj9C,UAAU7gQ,kBAAiB,SAAU89S,EAAOp9L,GAC1D41O,EAAkBxkR,OAAO4uC,MAG7BtsH,KAAKiH,OAAOg5V,gBAAgBrlV,IAAIs6T,OAAOmtB,eAAejsO,KAAKizN,IAAO3qV,KAAK,SAAUitC,EAAQ49S,EAAe+Y,GAIpG,IAAI/zR,EAAOg0R,EAFXviW,KAAKi1U,OAAO4qB,MAAMC,eAAgB,EAGlCvxR,EAAQ+zR,EAAezC,MAAMhxR,UAC7B0zR,EAAOD,EAAezC,MAAM1W,SAE5BnpV,KAAKi1U,OAAO4qB,MAAMhxR,UAAYN,EAAM/jE,QACpCxK,KAAKi1U,OAAO4qB,MAAM1W,SAAWoZ,EAAK/3V,QAClCxK,KAAKi1U,OAAO4qB,MAAME,YAAcxxR,EAAM/jE,QACtCxK,KAAKi1U,OAAO4qB,MAAM2C,UAAYttB,OAAOutB,UAAUC,eAC/C1iW,KAAKi1U,OAAO4qB,MAAM8C,WAAaztB,OAAO0tB,WAAWC,QACjD7iW,KAAKi1U,OAAO4qB,MAAMiD,WAAa,EAE/B,IAAIC,EAAcT,EAAepsB,SAAS/nT,OAAO,GAEjD40U,EAAYp3T,OAASA,EAErBo3T,EAAYC,MAAQ9kR,EAEpB6kR,EAAYE,aAAe,IAAI/tB,OAAOguB,uBAAuB,CAAC,IAAIhuB,OAAOiuB,aAAa,CAClF50R,MAAOA,EACPg0R,KAAMA,MAGNviW,KAAKi1U,OAAOiZ,gBACZluV,KAAKi1U,OAAOiB,SAASgqB,WAAWlgW,KAAKi1U,OAAOiZ,cAAc9uV,IAC1DY,KAAKi1U,OAAOiZ,cAAgB,MAGhCluV,KAAKi1U,OAAOiB,SAASt7T,IAAImoV,GAEzB/iW,KAAKi1U,OAAOmnB,MAAM2G,GAAarkW,KAAK,WAIhC,SAAS0kW,EAAsB7Z,EAAe8Z,GAQ1C,IAPA,IAAI5/Q,EAEA6/Q,EAAe,EAEfptS,EAAcl2D,KAAKiH,OAAOmvD,YAAcp2D,KAAKiH,OAAOC,IAAM3D,EAAAA,EAAAA,KAAAA,UAAkBgmV,EAAc,GAAIvpV,KAAKiH,OAAOmvD,UAAWp2D,KAAKiH,OAAOC,KAAOqiV,EAAc,GACtJzoO,EAAW,IAAIo0N,OAAO4F,aAAakO,YAAY9yR,EAAY,GAAIA,EAAY,IAEtEh0D,EAAI,EAAGA,EAAIqnV,EAAclmV,OAAQnB,IAAK,CAC3Cg0D,EAAcl2D,KAAKiH,OAAOmvD,YAAcp2D,KAAKiH,OAAOC,IAAM3D,EAAAA,EAAAA,KAAAA,UAAkBgmV,EAAcrnV,GAAIlC,KAAKiH,OAAOmvD,UAAWp2D,KAAKiH,OAAOC,KAAOqiV,EAAcrnV,GACtJ,IAAIkyI,EAAU,IAAI8gM,OAAO4F,aAAakO,YAAY9yR,EAAY,GAAIA,EAAY,IAK9E,GAHAotS,GAAgB,IAAIpuB,OAAO2F,kBAAkB/5N,EAAUszB,GAAS8mM,gBAChEp6N,EAAWszB,EAEPkvN,EAAeD,EAAiB,CAChC5/Q,EAAa8lQ,EAAcrnV,EAAI,GAC/B,OAIR,GAAIuhF,EAAY,CACZ,IAAI8/Q,EAAcR,EAAYp3T,SAAWhG,GAAGplC,KAAK2rH,eAAeC,MAC5D42O,EAAYp3T,SAAWhG,GAAGplC,KAAK2rH,eAAem/E,IADqB,GACV,EAC7D,GAAIk4J,GAAe,EACf,OAAO9/Q,EAAW8/Q,GAI1B,OAAO,EA/BXvjW,KAAKi1U,OAAOiZ,cAAgB6U,EAkC5B,IAAIS,EAAkBH,EAAkB,EACxCrB,EAAwBhiW,KAAKi1U,OAAOvrB,MAAM+5C,UAAU73V,iBAAiB,SAAU89S,EAAOq2C,GAGlF,MAAMpsP,EAAoB3zG,KAAKiH,OAAOqpV,iBAAiBrhO,YAAYrb,uBACnE,IAAKD,GAAqBA,EAAkB/1E,aAAa,aAAemlU,EAAYC,MAAMplU,aAAa,YAEnGs3S,OAAOC,WAAWuuB,oBAAoB3D,EAAagD,EAAYE,aAAaV,MAE5EP,IACArC,EAA0Bj/V,KAAKV,KAAM,CAAEyN,OAAQ,CAAEquB,UAAW,QAAU00T,QAAQ,SAE3E,GAAIxwV,KAAKi1U,OAAO4qB,MAAMC,eAAiBiD,EAAYzpK,YAAYymK,GAAc,CAG3EyD,IACDA,EAAmBtuB,OAAO4F,aAAaC,cAAc7F,OAAOioB,SAASC,oBAAoB2F,EAAYz2V,SAAUy2V,EAAYE,aAAa10R,SAE5I,MAAM2gD,EAAkBgmN,OAAO4F,aAAaC,cAAc7F,OAAOioB,SAASC,oBAAoB2F,EAAYz2V,SAAUyzV,IAGhH//V,KAAKiH,OAAOqpV,iBAAiBrhO,YAAYzD,eACzBu3O,EAAYp3T,SAAWhG,GAAGplC,KAAK2rH,eAAeC,OAC1D42O,EAAYp3T,OAAWhG,GAAGplC,KAAK2rH,eAAeE,KAElDpsH,KAAKiH,OAAOqpV,iBAAiBrhO,YAAYuuM,iBAAiB,CACtDp4T,EAAG,CAACo+V,EAAiBtpC,UAAWspC,EAAiBrpC,SAAUqpC,EAAiBjxU,QAC5E2P,EAAGmhU,GAEH,CAACn0O,EAAgBgrM,UAAWhrM,EAAgBirM,SAAUipC,EAAsB1iW,KAAKV,KAAMupV,EAAe8Z,IACtGh+S,GAAgB09S,EAAYp3T,SAAWhG,GAAGplC,KAAK2rH,eAAeC,MAC1D42O,EAAYp3T,SAAWhG,GAAGplC,KAAK2rH,eAAeE,MAC9CpsH,KAAKiH,OAAOqpV,iBAAiBrhO,YAAYhE,gBAAgBiqN,OAAOC,WAAWwuB,OAAOZ,EAAYE,aAAa10R,OAAQ2mQ,OAAOC,WAAWwuB,OAAO5D,MAIxJsD,GAAmB,IAAInuB,OAAO2F,kBAAkB2oB,EAAkBt0O,GAAiBgsN,gBACnFsoB,EAAmBt0O,EAEnBlvH,KAAKi1U,OAAOvrB,MAAM1mJ,kBAExB9iH,KAAKlgD,OAEPA,KAAKi1U,OAAO4qB,MAAMC,eAAgB,GAEpC5/S,KAAKlgD,OAGPA,KAAKi1U,OAAOvrB,MAAM1mJ,iBAEpB9iH,KAAKlgD,KAAM2hH,EAAM1hH,KAAKwD,QAAQtC,cAAcwqC,OAAQ49S,KACxDrpS,KAAKlgD,SAGjBkgD,KAAKlgD,QAETkgD,KAAKngD,GAEPm/V,EAAc0C,oBAAsBr+V,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,cACpCA,EAAAA,EAAAA,KAAAA,QAAAA,YAAAA,UAAAA,cAAsD,iBAGnD,CAEH,MAAMowG,EAAoB5zG,EAAKkH,OAAOqpV,iBAAiBrhO,YAAYrb,uBAC/DD,GAAqB5zG,EAAKkH,OAAOqpV,iBAAiBrhO,YAAYzD,cAE9D0zO,EAAc4C,qBAAqBphW,KAAKX,EAAKkH,OAAOqpV,iBAAiBrhO,YAAatb,GAAmB,MAO/GiwP,EAAuB,WACzB,IAAI7jW,EAAOC,KACXD,EAAKzB,IAAI4rC,WAAWhlC,QAAO,SAAUV,GACjC,OAAOA,aAAiBotB,EAAAA,KACzBrqB,SAAQ,SAAUmvD,GACbA,EAAY0uB,QAAU1uB,EAAY0uB,iBAAiB7hF,EAAAA,EAAAA,QAAAA,mBAAgCmzD,EAAY0uB,iBAAiB7hF,EAAAA,EAAAA,QAAAA,QAChHmzD,EAAY0uB,MAAMnlF,KAAK4jW,aAAe,IAAI9jW,EAAKzB,IAAI2I,OAAOmgU,GAAGC,aAEjE3wQ,EAAY5nD,SAASvH,SAAQ,SAAU9D,GACnC1D,EAAKkH,OAAO2wB,WAAWl3B,KAAKX,EAAKkH,OAAQxD,UAKrD,IAAIqlC,EAAeg7T,EAAQC,EAC3B,MAAMC,EAAiB,SAAUnmT,GAC7B,IAAI99C,EAAOC,KAEPikW,EAAS,IAETt+L,EAAO,SAAUs+L,GACjB,IAAIlkW,EAAOC,KAEPW,EAAS,IAAIu0U,OAAO4B,WACpB/2U,EAAKk1U,OAAOvrB,MAAMrsP,OAAO6lF,YAAc,EACvCnjJ,EAAKk1U,OAAOvrB,MAAMrsP,OAAO8pF,aAAe,GAmB5CpnJ,EAAKkH,OAAOi9V,gBAAgBxjW,KAAKX,EAAM,CAAE89U,YAAal9U,GAAUsjW,IAGhEpmT,GACA/U,EAAgB,SAAU/pC,GACtB,IAAIgB,EAAOC,KAEPjB,EAAE+uE,iBAAiB/uE,EAAE+uE,kBACrB/uE,EAAEoxG,gBAAgBpxG,EAAEoxG,iBAExB,IAAIg0P,EAAYpkW,EAAKkH,OAAOmvD,UACxBr2D,EAAKzB,IAAIqB,QAAQuH,MAAQnH,EAAKkH,OAAOmvD,YACrC+tS,EAAYpkW,EAAKzB,IAAIqB,QAAQuH,KAGjC,IAAIivD,EAAW5yD,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKzB,IAAIqB,QAAQmpC,cAAcn+B,MAAM,EAAG,GAAIw5V,EAAWpkW,EAAKkH,OAAOC,KAChGmvD,EAAY9yD,EAAAA,EAAAA,KAAAA,UAAkBxD,EAAKzB,IAAIqB,QAAQmpC,cAAcn+B,MAAM,GAAIw5V,EAAWpkW,EAAKkH,OAAOC,KAC9FslV,EAAYtX,OAAO2d,UAAU7J,YAAY7yR,EAAS,GAAIA,EAAS,GAAIE,EAAU,GAAIA,EAAU,IAI/F,OAFAt2D,EAAKkH,OAAO83V,eAAer+V,KAAKX,EAAMysV,EAAW,CAAEn8R,SAAU,MAEtD,GAETnQ,KAAKngD,GAEP+jW,EAAS,SAAUn2V,GACfg4J,EAAKjlK,KAAKX,EAAMkkW,IAClB/jT,KAAKngD,GAEPgkW,EAAU,SAAUp2V,GAChBg4J,EAAKjlK,KAAKX,GAAOkkW,IACnB/jT,KAAKngD,GAEP4M,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,WAAAA,UAAAA,MAAwC,QAAQgE,SAAQ,SAAUqlD,GAC9FA,EAAOhhD,iBAAiB,QAASk9B,MAErCn8B,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,OAAAA,UAAAA,MAAoC,eAAegE,SAAQ,SAAUqlD,GACjGA,EAAOhhD,iBAAiB,QAASk4V,MAErCn3V,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,OAAAA,UAAAA,MAAoC,gBAAgBgE,SAAQ,SAAUqlD,GAClGA,EAAOhhD,iBAAiB,QAASm4V,QAIrCp3V,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,WAAAA,UAAAA,MAAwC,QAAQgE,SAAQ,SAAUqlD,GAC9FA,EAAOjM,oBAAoB,QAAS7X,MAExCn8B,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,OAAAA,UAAAA,MAAoC,eAAegE,SAAQ,SAAUqlD,GACjGA,EAAOjM,oBAAoB,QAASmjT,MAExCn3V,SAASjB,iBAAiB,IAAMnI,EAAAA,EAAAA,QAAAA,OAAAA,UAAAA,MAAoC,gBAAgBgE,SAAQ,SAAUqlD,GAClGA,EAAOjM,oBAAoB,QAASojT,QAK1CK,EAAsB,SAAUC,GAClC,OAAIvkW,EAAAA,EAAAA,MAAAA,YAA2BukW,EACpB9gW,EAAAA,EAAAA,KAAAA,eAAyB2xU,OAAOsC,qBAAqBC,WAAavC,OAAOsC,qBAAqBO,WAC9Fj4U,EAAAA,EAAAA,MAAAA,QAAuBukW,EACvBnvB,OAAOsC,qBAAqBC,WAGhC4sB,GAGX,MAAO,CAEHpwS,UAAW,KAEX/sD,IAAK,YACLo9V,WAAY,iBAEZluS,UAAW,KAEXmuS,aAAc,KAEdn1U,UAAW,KAEX8a,WAAY,GACZs6T,eAAgB,GAChBpG,iBAAkB,GAElB9N,iBAAkB,GAElBlG,eAAgB,WACZ,IAEIhgH,EAFOpqO,KAEQi1U,OAAOvrB,MAAMosB,MAAM4c,SACtC,OAAQtoH,EAAQq6H,cAAc93S,OAC1By9K,EAAQs6H,mBAAmBrhW,OAAS,GACpC+mO,EAAQu6H,qBAAqBthW,OAAS,GACtC+mO,EAAQw6H,kBAAkBvhW,OAAS,GACnC+mO,EAAQy6H,OAAOC,wBAA0B,GAGjD9I,WAAY,WACR,MAAMj8V,EAAOC,KACb,OAAO,IAAIpB,SAAQ,SAAUC,EAASk1B,GAC7Bh0B,EAAKk1U,OA8fNp2U,EAAQkB,EAAKk1U,QA7fb,wDAA2Bv2U,MAAKkM,eAAgBvL,GAC5C,MAAM61U,EAAS71U,EAAOiP,QAEtB,IAAIy2V,EAAoB,KAAMC,EAAmB,KACjD,IACID,QAA0B7vB,EAAOyf,SAASsQ,UAAU,CAAE5vV,IAAK9R,EAAAA,EAAAA,YAAiB,wCAAyC7E,MAAK,SAAUq3D,GAChI,OAAIA,GAAUA,EAAOjnD,UAAYinD,EAAOjnD,SAASzL,OAAS,EAC/C0yD,EAAOjnD,SAAS,GAAGxO,SAAS8J,YAE5B,MAInB,MAAOkpH,GACH5rH,QAAQgS,KAAK,2CAEjB,IACIsrV,QAAyB9vB,EAAOyf,SAASsQ,UAAU,CAAE5vV,IAAK9R,EAAAA,EAAAA,YAAiB,uCAAwC7E,MAAK,SAAUq3D,GAC9H,OAAIA,GAAUA,EAAOjnD,UAAYinD,EAAOjnD,SAASzL,OAAS,EAC/C0yD,EAAOjnD,SAAS,GAAGxO,SAAS8J,YAE5B,MAInB,MAAOkpH,GACH5rH,QAAQgS,KAAK,0CAEjBw7T,EAAOgwB,0BAA0BC,aAAazmW,MAAK,WAG3CqB,EAAKw7V,iBACax7V,EAAKw7V,gBAE3B,MAAM6J,EAAa,CAACL,EAAmBC,GAAkB9/V,QAAOyoB,GAAKA,MAAAA,IACrE,IAAIstD,EACAl7E,EAAKw7V,iBAAmB6J,EAAW/hW,OAEnC43E,EAAkB,IAAIi6P,EAAOmwB,qBAAqBtlW,EAAKs7V,QAASt7V,EAAM,CAClEqlW,WAAYA,EAEZE,SAAUvlW,EAAKw7V,mBAGfx7V,EAAKw7V,kBAAoB6J,EAAW/hW,QACpCqE,QAAQgS,KAAK,6EAEjBuhE,EAAkB,IAAIi6P,EAAOqwB,sBAAsB,CAC/ClwV,IAAKtV,EAAKs7V,QAAQhmV,IAAIuU,UAGVq/T,0BAA4B,SAAU3S,GAClD,OAAOpB,EAAO+T,0BAA0BhuQ,EAAiBq7P,IAG7Dr7P,EAAgBosI,aAAe,GAG3BtnN,EAAKs7V,QAAQh0I,eAEbpsI,EAAgBV,eAAiB,WAC7B,OAAOU,EAAgBosI,cAG3BpsI,EAAgBosI,aAAetnN,EAAKs7V,QAAQh0I,aAC5CtnN,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,mBAAiC,CAAEm7E,gBAAiBA,MAI7E,IAAI66P,EAAQ,IAAIZ,EAAOswB,MACvB1vB,EAAM2vB,UAAYvwB,EAAOQ,MAAMmG,MAC/B/F,EAAM4vB,gBAAiB,EAGvB5vB,EAAM6vB,cAAgB,IAGtB7vB,EAAM8vB,wBAA0B,EAEhC7lW,EAAKk1U,OAASl1U,EAAKkH,OAAOguU,OAAS,IAAIC,EAAO2wB,OAAO9lW,EAAKuhD,UAAU85S,aAAc,CAC9EngR,gBAAiBA,EACjB6qR,oBAAqB,EAErB/nL,WAAW,EACXgoL,UAAU,EACVC,kBAAkB,EAClBC,iBAAiB,EACjBxS,iBAAiB,EACjByS,wCAAwC,EACxCC,sBAAsB,EACtBC,UAAU,EACVpJ,YAAY,EACZqJ,SAAS,EACTC,iBAAiB,EACjBC,oBAAoB,EACpBzwB,MAAOA,EAKPlsB,mBAAmB,EACnB48C,wBAAyBxwS,EAAAA,IAI7Bj2D,EAAKk1U,OAAOvrB,MAAM98M,gBAAkBsoO,EAAOQ,MAAMmG,MACjD97U,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4B4lB,0BAA2B,EACzE1mW,EAAKk1U,OAAOvrB,MAAMm3B,4BAA4B4Q,oBAAsB,IAMpE1xV,EAAKk1U,OAAOvrB,MAAM80C,cAAchjB,YAGhCz7U,EAAKk1U,OAAOh6P,gBAAgByrR,WAAW96V,kBAAiB,SAAU7M,GAE9D,GAAIA,EAAEkX,MACF,OAAQlX,EAAEkX,MAAM0wV,YACZ,KAAK,IACL,KAAK,IACDj/V,QAAQC,IAAI,2BAIzB5H,GACHA,EAAKk1U,OAAOvrB,MAAMk9C,YAAYh7V,kBAAiB,SAAU6B,EAAQwI,GAC7D,IAAIlW,EAAOC,KAEPiW,GAAwB,KAAfA,EAAMhX,OAGfc,EAAKq7V,aAAar9T,UAAUC,OAAOj+B,EAAKusC,QAAQzyB,SAChD9Z,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,YAAa,CAAEx3B,KAAMrK,EAAAA,EAAAA,QAAAA,QAEzDC,EAAKu9V,aAEVv9V,GAEHA,EAAKk1U,OAAOinB,aAAe,IAAIt9V,SAAQ,SAAUC,EAASk1B,GAGtDh0B,EAAKkH,OAAO4/V,mBAAqB,IAAI3xB,EAAO4xB,YAC5C/mW,EAAKkH,OAAO4/V,mBAAmBjsV,IAAI7a,EAAKk1U,OAAOvrB,MAAMosB,MAAMixB,sBAAuB,SAAU5iW,GACnFpE,EAAKisJ,UACNjsJ,EAAKisJ,QAAUjsJ,EAAKzB,IAAIw1D,sBAAsB1M,YAE7CrnD,EAAKk1U,OAAOvrB,MAAMzuO,gBAAgB+rR,WACjCjnW,EAAKk1U,OAAOvrB,MAAMzuO,gBAAgB+rR,UAAYjnW,EAAKk1U,OAAOvrB,MAAMzuO,gBAAgBtuB,QACtE,IAATxoD,GACHpE,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBACxCjsJ,EAAKisJ,QAEZntJ,IAEAkB,EAAKsgD,OAAO90C,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,KAEhDC,EAAKsgD,OAAO90C,QAAQzL,EAAAA,EAAAA,MAAAA,iBAA+B,KAEzDogD,KAAKngD,OAMXikW,EAAetjW,KAAKX,GAAM,GAG1B4M,SAASjB,iBAAiB,yBAAyBnE,SAAQ,SAAUC,GACjEA,EAAIg1D,cAAcC,YAAYj1D,MAIlCzH,EAAKkH,OAAOggW,gBAAkB3I,EAAep+S,KAAKngD,GAClDA,EAAKzB,IAAI+P,GAAGgwV,EAAS/zV,KAAK,KAAMvK,EAAKkH,OAAOggW,iBAG5C9G,EAAqBz/V,KAAKX,EAAMD,EAAAA,EAAAA,KAAAA,QAEhCC,EAAKk1U,OAAOinB,aAAax9V,MAAK,WAE1BklW,EAAqBljW,KAAKX,MAE9BA,EAAKkH,OAAOqyI,SAAW,WACnB,OAAOv5I,EAAKk1U,OAAOvrB,OAEvB3pT,EAAKkH,OAAOugF,aAAe,SAAUtgF,GACjC,IACIm2D,EADQt9D,EAAKk1U,OAAOvrB,MACLrsP,OACf5hD,EAAa,IAAIy5T,EAAO4B,WAAW,EAAGz5Q,EAAO8pF,aAAe,GAC5DxrI,EAAc,IAAIu5T,EAAO4B,WAAWz5Q,EAAO6lF,YAAc,EAAG7lF,EAAO8pF,aAAe,GAClF8mM,EAAY,CACZxyU,EACAE,EACA,IAAIu5T,EAAO4B,WAAWz5Q,EAAO6lF,YAAc,EAAG,GAC9C,IAAIgyL,EAAO4B,WAAW,EAAG,IAC3Bx4U,KAAI,SAAUkJ,GACZ,OAAOo+U,EAAcllV,KAAKX,EAAMyH,EAAKN,MACtChC,QAAO,SAAUsC,GAChB,OAAe,OAARA,KAEX,GAAIymV,EAAU5qV,QAAU4qV,EAAU5qV,OAAS,EAAG,CAG1C,IAAI6jW,EAAgB3hB,EAAgB7kV,KAAKX,EAAM,CAC3CylV,cAAeyI,EAAU,GACzBvI,YAAajqU,EACboqU,eAAgB9lV,EAAKkH,OAAOoiD,eAAewhS,YAE3Csc,EAAiB5hB,EAAgB7kV,KAAKX,EAAM,CAC5CylV,cAAeyI,EAAU,GACzBvI,YAAa/pU,EACbkqU,eAAgB9lV,EAAKkH,OAAOoiD,eAAewhS,YAE3Cqc,GAAiBC,IACjBlZ,EAAU,GAAKkZ,EACflZ,EAAU,GAAKiZ,GAIvB,OAAOjZ,GAEXluV,EAAKkH,OAAOq/J,cAAgB,WACxB,MAAMo2K,EAAS38U,EAAKk1U,OAAOvrB,MAAMgzB,OAC3BmJ,EAAiBnJ,EAAOpwU,SACxB86V,EAAsBlyB,EAAO8F,UAAUC,MAAMiW,wBAAwBrL,GAC3E,MAAO,CACH,SAAY3Q,EAAO3zU,KAAK0kV,UAAUmhB,EAAoBjtC,UACtD,UAAa+a,EAAO3zU,KAAK0kV,UAAUmhB,EAAoBltC,WACvD,OAAUktC,EAAoB70U,OAC9B,QAAWmqT,EAAOvuN,SAAW,IAAM5sH,KAAKS,IACxC,MAAS06U,EAAOh3K,OAAS,IAAMnkK,KAAKS,MAG5CjC,EAAKkH,OAAO48J,kBAAoB,SAAUnkK,GACtC,MAAMkkK,EAAUlkK,aAAkBw1U,EAAO4B,WAAap3U,EAAS,IAAIw1U,EAAO4B,WAAWp3U,EAAO,GAAIA,EAAO,IAEvG,IAAIsnV,EAAMjnV,EAAKk1U,OAAOyH,OAAOC,WAAW/4K,GACpCt3J,EAAWvM,EAAKk1U,OAAOvrB,MAAMosB,MAAM2G,KAAKuK,EAAKjnV,EAAKk1U,OAAOvrB,OAC7D,GAAIp9S,EAAU,CACV,IAEIg2E,EAFAioQ,EAAuBrV,EAAO8F,UAAUC,MAAMiW,wBAAwB5kV,GAO1E,OAJAg2E,EAAM4yP,EAAO3zU,KAAK0kV,UAAUsE,EAAqBpwB,UAI1C,CAAE53O,IAHH2yP,EAAO3zU,KAAK0kV,UAAUsE,EAAqBrwB,WAG9B53O,IAAKA,EAAKoB,IAFvBniF,KAAKirC,MAAM+9S,EAAqBh4T,WAK9CxyB,EAAKkH,OAAOo9J,UAAY,SAAU/3J,EAAUygB,EAAO0O,EAAS,KAAMr8B,GAwB9D,OAvBMkN,aAAoB4oU,EAAO4E,YAAcxtU,aAAoB4oU,EAAO4B,aACtExqU,EAAW4oU,EAAO4E,WAAWkP,YAAY18U,EAAS,GAAIA,EAAS,KAE9DmvB,GAcDA,EAAOnvB,SAAWA,EAClBmvB,EAAO+qI,SAAyB,IAAhBjlK,KAAKysH,SAAiBjhG,GACtC0O,EAAOo7S,YAAc,IAAI3B,EAAO4B,WAAW,EAAG,IAC9Cr7S,EAAOihB,MAAO,GAhBdjhB,EAAS17B,EAAKzB,IAAI2I,OAAOqrV,iBAAiB5xV,KAAKX,EAAKzB,IAAK,CACrDgO,SAAUA,EACV0tU,UAAW,CACPjtT,MAAOA,EACPmlU,UAAW,IAAIhd,EAAO4E,WAAW,EAAG,GAAI,KACxCqY,eAAgBjd,EAAOkd,eAAeC,OACtC3b,gBAAiBxB,EAAOyB,gBAAgBC,gBACxCC,YAAa,IAAI3B,EAAO4B,WAAW,EAAG,IACtC13U,GAAIA,GAAMmE,EAAAA,EAAAA,YAUtBxD,EAAKk1U,OAAOvrB,MAAM1mJ,gBACXvnI,GAIX17B,EAAKkH,OAAOktD,UAAY,SAAU0B,GAG9B,MAAM6zP,EAAQ3pT,EAAKzB,IAAI2I,OAAOqyI,WAC9B,IAAIktD,EAAc0uI,EAAO4E,WAAWkP,YAAYnzR,EAAG,GAAIA,EAAG,GAAI91D,EAAKkH,OAAO6qH,iBAAiBj8D,IAE3F,MAAMl1D,EAAS+oT,EAAMosB,MAAM2G,KAAK/yB,EAAMgzB,OAAOC,WAAW,IAAIzH,EAAO4B,WAAW/2U,EAAKkH,OAAOgtD,UAAUivF,YAAc,EAAGnjJ,EAAKkH,OAAOgtD,UAAUkzF,aAAe,IAAKuiK,GACzJrlQ,EAAW6wR,EAAO4E,WAAWz1R,SAAS1jD,EAAQ+oT,EAAMgzB,OAAOyS,YACjE,IAAIvI,EAAe,IAAI1R,EAAO2R,QAC9Bn9B,EAAMgzB,OAAO1jM,UAAUxuI,MAAMo8U,GAU7Bl9B,EAAMgzB,OAAO2qB,OAAO7gK,EAChB,IAAI0uI,EAAOoyB,kBAAkB59C,EAAMgzB,OAAOvuN,QAASu7L,EAAMgzB,OAAOh3K,MAAOrhH,IAC3EqlQ,EAAMgzB,OAAOqK,gBAAgBH,IAKjC7mV,EAAKkH,OAAOu+T,SAAW,SAAU2Q,EAAQxwU,GACrC5F,EAAKkH,OAAOsgW,WAAW/hC,SAAS2Q,EAAQxwU,IAE5C5F,EAAKkH,OAAOvB,SAAW,SAAUywU,EAAQxwU,GACrC5F,EAAKkH,OAAOsgW,WAAW7hW,SAASC,EAAOwwU,IAE3Cp2U,EAAKkH,OAAOyJ,UAAY,SAAUylU,GAE9B,OADoBA,EAAOplU,SAASulU,UAAUroL,WAC3BhmJ,QAAO,SAAU+wB,EAAIC,EAAInP,EAAOxiB,GAC/C,OAAc,IAAVwiB,EAAoB,EACjBkP,EAAK,IAAIk8S,EAAO2F,kBAAkB3F,EAAO4F,aAAaC,cAAczzU,EAAIwiB,EAAQ,IAAKorT,EAAO4F,aAAaC,cAAczzU,EAAIwiB,IAASorT,EAAO8F,UAAUC,OAAOC,kBACpK,IAEPn7U,EAAKkH,OAAO0J,QAAU,SAAUwlU,GAC5B,MAAM/rU,EAAc+rU,EAAO9lU,QAAQupU,UAAU3rL,WAC7C,OAAO1sJ,KAAKkrC,KAAKlrC,KAAKs5B,IAAIq6S,EAAOyO,gBAAgBC,cAAcx5U,EAAYksU,WAAY,KAG3F,MAAMkxB,EAAmB,SAAUC,GAC/B,MAAM71O,EAAYsjN,EAAO4F,aAAaC,cAAc0sB,GAEpD,MAAO,CAACvyB,EAAO3zU,KAAK0kV,UAAUr0N,EAAUsoM,WAAYgb,EAAO3zU,KAAK0kV,UAAUr0N,EAAUuoM,YAElFutC,EAAuB,SAAUC,EAAmBx9V,GACtD,IAAI7J,EACJ,OAAQ6J,GACJ,IAAK,WACD7J,EAAW,IAAI0Q,EAAAA,EAAS22V,EAAkBrpW,KAAI,SAAU+2B,GACpD,OAAOmyU,EAAiBnyU,OAE5B,MACJ,IAAK,UACD/0B,EAAW,IAAI+B,EAAAA,EAAQslW,EAAkBrpW,KAAI,SAAU+2B,GACnD,OAAOmyU,EAAiBnyU,OAE5B,MACJ,IAAK,QACD/0B,EAAW,IAAIoP,EAAAA,EAAM83V,EAAiBG,EAAkB,KAGhE,OAAOrnW,GAGXP,EAAKkH,OAAOmgU,GAAK,CACbC,YAAa,SAAUp0S,EAAMsF,GAoCzB,OAnCAx4B,EAAKkH,OAAOsgW,WAAa,IAAIvyB,EAAWj1U,EAAKk1U,OAAQhiT,GACrDlzB,EAAKkH,OAAOsgW,WAAW37V,iBAAiB,WAAYk0C,IAChD//C,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,QAAsBggD,EAAIG,OAAOk7R,cAChE,MAAMysB,EAAaF,EAAqB5nT,EAAIG,OAAOq2R,UAAWx2R,EAAIG,OAAO91C,MACzEpK,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,QAAsB,CACjD2D,QAASmkW,IAEbrvU,EAASqvU,GAAYlpW,MAAK,SAAUy/V,GAChCD,EAAYn+V,EAAKkH,OAAQk3V,EAAWr+S,EAAIG,OAAOk2R,QAC/Cr2R,EAAIG,OAAOk2R,OAAOttU,KAAOs1V,EAAU/+V,GACnC++V,EAAUz4V,SAASo6C,EAAIG,OAAOk2R,OAAOhwU,kBAM7CpG,EAAKkH,OAAOsgW,WAAW37V,iBAAiB,aAAck0C,IAClD//C,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,UAAwB,OAE3DC,EAAKkH,OAAOsgW,WAAW37V,iBAAiB,cAAek0C,IACnD//C,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,eAA6BggD,EAAIG,OAAOk7R,iBAE3Ep7U,EAAKkH,OAAOsgW,WAAW37V,iBAAiB,SAAUk0C,IAC9C,MAAM8xE,EAAYsjN,EAAO4F,aAAaC,cAAcj7R,EAAIG,OAAO3zC,UAC/DvM,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,MAAoB,CAC/Cu1B,MAAO,CAAC6/S,EAAO3zU,KAAK0kV,UAAUr0N,EAAUsoM,WAAYgb,EAAO3zU,KAAK0kV,UAAUr0N,EAAUuoM,gBAG5Fp6T,EAAKkH,OAAOsgW,WAAW37V,iBAAiB,cAAek0C,IACnD,MAAM4X,EAAagwS,EAAqB5nT,EAAIG,OAAOq2R,UAAWx2R,EAAIG,OAAO91C,MACnE09V,EAAe/nT,EAAIG,OAAOk2R,OAAOzyU,MAAMF,OAC7CqkW,EAAa5mW,eAAey2D,EAAWp2D,kBACvCvB,EAAKzB,IAAIw/C,cAAcvyC,QAAQzL,EAAAA,EAAAA,MAAAA,cAA4B,CAAE2D,QAASokW,EAAcrjW,MAAOqjW,EAAarjW,WAGrGzE,EAAKkH,OAAOsgW,YAErB78B,cAAe,WACb,IAAIo9B,EAAiB,KACjBC,EAAiB,KACrB,MAAMC,EAAsB,SAAU7xB,GAClC,OAAIA,EAAO9lU,QACA,IAAIhO,EAAAA,EAAQ8zU,EAAO9lU,QAAQupU,UAAU3rL,WAAWqoL,UAAUh4U,KAAI,SAAU+2B,GAC3E,OAAOmyU,EAAiBnyU,MACxB,CAAEj2B,GAAI+2U,EAAO/2U,KACZ+2U,EAAOplU,SACL,IAAIC,EAAAA,EAASmlU,EAAOplU,SAASulU,UAAUroL,WAAW3vJ,KAAI,SAAU+2B,GACnE,OAAOmyU,EAAiBnyU,MACxB,CAAEj2B,GAAI+2U,EAAO/2U,KAEV,IAAIsQ,EAAAA,EAAM83V,EAAiBrxB,EAAO7pU,SAAS2hJ,SAASinL,EAAOC,WAAWrxS,MAAO,CAAE1kC,GAAI+2U,EAAO/2U,MAenG6oW,EAAkB,WAAY,IAAAC,EAElB,QAAdA,EAAAJ,SAAc,IAAAI,GAAdA,EAAgBxkW,MAAMF,OAAOP,qBAAoB,IAG/CklW,EAAY,SAAU59B,GAKxBxqU,EAAKzB,IAAI+P,GAAGvO,EAAAA,EAAAA,MAAAA,cAA4BsoW,GACxCroW,EAAKkH,OAAOsgW,WAAW5uB,aAAapO,GAChCxqU,EAAKkH,OAAOsgW,WAAWvvB,gBAAkBzN,GAAYxqU,EAAKkH,OAAOsgW,WAAW1pT,WAChF99C,EAAKkH,OAAOsgW,WAAWpvB,kBAAiB,SAAUwI,GAGV,IAAA0nB,EAAhCnzB,EAAOrwL,QAAQ87L,KACfmnB,EAAiBnnB,EACjBonB,EAAe,CACXtjW,SAAU,GAAsB,QAApB4jW,EAAA1nB,EAAej9U,aAAK,IAAA2kW,OAAA,EAApBA,EAAsB7kW,SAAUwkW,EAAoBrnB,IAAiB1gV,KAAKwD,SAAUqnR,WAAY,UAKtHs9E,EAAU,SAAUvoU,GAAO,IAAAyoU,EACP,QAAtBA,EAAIzoU,EAAMp8B,QAAQxD,YAAI,IAAAqoW,GAAlBA,EAAoB7jC,YACpB1kU,EAAKkH,OAAOsgW,WAAWvpU,OAAO6B,EAAMp8B,QAAQxD,KAAKwkU,WACjDqjC,EAAiB,OAGnBx8B,EAAc,WAChB28B,IACAloW,EAAKkH,OAAOsgW,WAAWhvB,uBACvBx4U,EAAKkH,OAAOsgW,WAAWtvB,oBACvBl4U,EAAKzB,IAAI8P,IAAItO,EAAAA,EAAAA,MAAAA,cAA4BsoW,GACzCroW,EAAKkH,OAAOsgW,WAAWnvB,UAAW,EAClCr4U,EAAKzB,IAAIw/C,cAAcE,cAE3B,MAAO,CACHH,SAAUsqT,EACVj/I,UAAW,SAAU/rL,GACjBA,EAASgrU,IAAc78B,KAE3BttR,WAAYstR,EACZj9T,GAAI,SAAUwxB,EAAOtH,GACjBwvU,EAAiBxvU,GAErBqmE,YAAa,WAAY,IAAA2pQ,EACrB,OAAKrzB,EAAOrwL,QAAQijN,GAGb,IAAIniU,GAAG85Q,WAAW,GAAyB,QAAvB8oD,EAAAT,EAAe1oW,GAAGsE,aAAK,IAAA6kW,OAAA,EAAvBA,EAAyB/kW,SAAUwkW,EAAoBF,IAAiB7nW,KAAKwD,UAF7F,IAAIkiC,GAAG85Q,eAOlC5gT,EAAQkB,EAAKk1U,WAIjBC,EAAOsjB,OAAOh4V,UAAU2F,SAAW,WAAY,IAAAqiW,EAAAC,EAC3C,MAAMr4P,EAAc,GA2BpB,OA1BIpwG,KAAKqQ,QACLlR,OAAOmD,OAAO8tG,EAAwC,CAClDxkE,UAAW5rC,KAAKqQ,QAAQqoU,SAASzqL,WAAW18E,MAAMm3R,iBAAiBvvU,UAAU,EAAG,GAChF0S,YAAa7rC,KAAKqQ,QAAQqoU,SAASzqL,WAAW18E,MAAMia,MACpD1/C,YAAa9rC,KAAK+Q,SAAS2nU,SAASzqL,WAAW18E,MAAMm3R,iBAAiBvvU,UAAU,EAAG,GACnF4S,YAAa/rC,KAAK+Q,SAASuhB,MAAM27H,aAGhCjuJ,KAAK+Q,SACV5R,OAAOmD,OAAO8tG,EAAqC,CAC/CtkE,YAAa9rC,KAAK+Q,SAAS2nU,SAASzqL,WAAW18E,MAAMm3R,iBAAiBvvU,UAAU,EAAG,GACnF4S,YAAa/rC,KAAK+Q,SAASuhB,MAAM27H,aAGhCjuJ,KAAKq1B,OACVl2B,OAAOmD,OAAO8tG,EAAsC,CAChDxkE,UAAW5rC,KAAKq1B,MAAMk8C,MAAM08E,WAAWy6M,iBAAiBvvU,UAAU,EAAG,GACrE0S,YAAa7rC,KAAKq1B,MAAMk8C,MAAM08E,WAAWziE,MAEzC1/C,YAAa9rC,KAAKq1B,MAAM+vG,aAAa6oB,WAAWy6M,iBAAiBvvU,UAAU,EAAG,GAC9E4S,YAAa/rC,KAAKq1B,MAAMowS,aAAax3K,WACrCrtJ,QAASZ,KAAKq1B,MAAMowS,aAAax3K,WAAajuJ,KAAKq1B,MAAMojT,UAAUxqL,YAAc,IAGrFjuJ,KAAKusC,QACL6jE,EAAuB,UAAc,QAAbo4P,EAAGxoW,KAAKusC,aAAK,IAAAi8T,GAAW,QAAXC,EAAVD,EAAY58T,iBAAS,IAAA68T,OAAX,EAAVA,EAAuBx6M,WAAWy6M,kBAC1Dt4P,UAW3BlmD,aAAc,SAAU1lD,GACpB,IAAIzE,EAAOC,KAEP2oW,EAAa,SAAUnkW,GAUvB,OATKmP,EAAanP,EAAOzE,EAAKkH,OAAOC,OACA,OAA7B1C,EAAMsd,oBAA+BnO,EAAanP,EAAMsd,mBAAoB/hB,EAAKkH,OAAOC,KACxF1C,EAAQA,EAAMsd,oBAEd/hB,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,yBAA0B,CAAE94B,KAAMrE,EAAM+F,SAC5E/F,EAAQ,OAITA,GAGNzE,EAAKkH,OAAOmoB,WAwBTrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAc3/S,SAAS9+C,EAAKkH,OAAOmoB,aACrDrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAcoK,WAAW7oW,EAAKkH,OAAOmoB,WACvDrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAcxgU,OAAOj+B,EAAKkH,OAAOmoB,WAAW,IAG9D5qB,aAAiBotB,EAAAA,GACjB7xB,EAAKkH,OAAOmoB,UAAYrvB,EAAKD,OAAOykV,WAEpCxkV,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBACxCjsJ,EAAKisJ,UAGZxnJ,EAAQmkW,EAAWnkW,MAGfA,EAAMlG,IAAMyB,EAAKzB,IACjBkG,EAAMuO,QAAS,EAEfhT,EAAKkH,OAAOmjD,SAAS1pD,KAAKX,EAAMyE,KAxCpCA,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM2F,OAASrK,EAAAA,EAAAA,UAAAA,IAEnD0E,EAAM7E,QAAQkpW,aACd9oW,EAAKzB,IAAI8wB,UAAY5qB,EAAQzE,EAAKzB,IAAIqhB,SAASnb,EAAM7E,QAAQkpW,aAC7D9oW,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,gBAA8B,CAAE0E,MAAOzE,EAAKzB,IAAI8wB,cAGjE5qB,EAAQmkW,EAAWnkW,MAGVA,EAAMuO,SACPvO,EAAMuO,QAAS,GAEnBhT,EAAKkH,OAAOmjD,SAAS1pD,KAAKX,EAAMyE,IAKxCzE,EAAKkH,OAAOmoB,UAAYrvB,EAAKD,OAAOykV,WA2B5CuW,EAAcC,QAAUh7V,EAAKzB,IAAI8wB,WAGrCg7B,SAAU,SAAU5lD,GAChB,IAAIzE,EAAOC,KAEX,QAAQ,GACJ,KAAKF,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,KAClCpK,EAAKkH,OAAOu9V,eAAep8V,KAAK5D,GAChC,MAEJ,KAAK1E,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM2F,KACpC,KAAKrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,KAC1B3F,EAAMuO,QAAWvO,EAAMmP,aAAa5T,EAAKkH,OAAOC,KAIjDy2V,EAAgBjG,QAAQlzV,EAAOzE,EAAKkH,OAAOC,KAAKxI,MAAK,SAAUoqW,GAC3D,GAAIA,EAAgB,MAE0B1kW,IAAtC0kW,EAAeC,qBACfD,EAAeC,oBAAqB,EACpCD,EAAe/T,QAAUvwV,GAGzBA,EAAMuO,QAAUhT,EAAKkH,OAAOmoB,WACxBrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAc3/S,SAAS9+C,EAAKkH,OAAOmoB,aACrDrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAcoK,WAAW7oW,EAAKkH,OAAOmoB,WACvDrvB,EAAKk1U,OAAOvrB,MAAM80C,cAAcxgU,OAAOj+B,EAAKkH,OAAOmoB,WAAW,IAGtE8lT,OAAOuhB,eAAe77U,IAAI,IAAIhC,IAAI,UAAYkwV,EAAezzV,KAAK83D,KAAM,MACxE+nQ,OAAOuhB,eAAe77U,IAAI,IAAIhC,IAAI,WAAakwV,EAAezzV,KAAK83D,KAAM,OACzE+nQ,OAAOuhB,eAAe77U,IAAI,mBAAoB,QAE9C,IAAIouV,EAAkBjpW,EAAKk1U,OAAOvrB,MAAM80C,cAAcyK,mBAAmBH,GAErEtkW,EAAMuO,QACNhT,EAAKkH,OAAOmoB,UAAY45U,EACxBjpW,EAAKk1U,OAAOvrB,MAAM80C,cAAc0K,cAAcF,KAE9CA,EAAgBtsT,KAAOl4C,EAAM6O,gBAC7B21V,EAAgBx9Q,MAAQhnF,EAAM+O,aAE9BxT,EAAKkH,OAAOijC,WAAW9hC,KAAK4gW,QA9BxCjpW,EAAKzB,IAAIuvD,MAAM9tD,EAAK4hC,gBAAgB,yBAA0B,CAAE94B,KAAMrE,EAAM2Y,gBAuC5F2tC,YAAa,SAAUtmD,GACnB,IAAIzE,EAAOC,KAEX,QAAQ,GACJ,KAAKF,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,KAElC,GAAIpK,EAAKkH,OAAOm3V,kBAAoB39V,EAAeC,KAAKX,EAAKkH,OAAOm3V,iBAAkB55V,EAAMpF,IAAK,CAE7F,IAAK,IAAI8qF,KAAanqF,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IACjCW,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IAAI8qF,GAE7C3iF,SAAQo3V,GAAO5+V,EAAKkH,OAAO6wB,cAAcp3B,KAAKX,EAAM4+V,YAG/D5+V,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IAK9C,MAEJ,KAAKU,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM2F,KACpC,KAAKrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,KAC/B,IAAK,IAAIjI,EAAI,EAAGA,EAAInC,EAAKkH,OAAOijC,WAAW7mC,OAAQnB,IAC/C,GAAIsC,EAAMyW,OAASlb,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,OAAOzY,KAAK,OAAS9F,EAAMyW,MAAM3Q,KAAK,MAC/F9F,EAAM+F,OAASxK,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,OAAOzY,KAAK,OAAS9F,EAAM+F,MAAO,CAC3FxK,EAAKk1U,OAAOvrB,MAAM80C,cAAcoK,WAAW7oW,EAAKkH,OAAOijC,WAAWhoC,IAClEnC,EAAKk1U,OAAOvrB,MAAM80C,cAAcxgU,OAAOj+B,EAAKkH,OAAOijC,WAAWhoC,IAAI,GAElEnC,EAAKkH,OAAOijC,WAAWnhC,OAAO7G,EAAG,GACjC,SAMpBq8V,sBAAuB,SAAU/5V,EAAO7E,GACpC,IAAII,EAAOC,KAEX,QAAQ,GACJ,KAAKF,EAAAA,EAAAA,UAAAA,QAA2B0E,EAAM2F,KAClC,GAAIpK,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IAAK,CAExC,IAAK,IAAI8qF,KAAanqF,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IACtCW,EAAKkH,OAAOm3V,iBAAiB55V,EAAMpF,IAAI8qF,GAC7C3iF,SAAQwH,GAAKhP,EAAKkH,OAAOkiW,wBAAwBp6V,EAAG,CAAE2tC,KAAMl4C,EAAM6O,oBAG/EtT,EAAKk1U,OAAOvrB,MAAM1mJ,gBAEtB,MAEJ,KAAKljK,EAAAA,EAAAA,UAAAA,MAAyB0E,EAAM2F,KACpC,KAAKrK,EAAAA,EAAAA,UAAAA,KAAwB0E,EAAM2F,KAC/B,IAAK,IAAIjI,EAAI,EAAGA,EAAInC,EAAKkH,OAAOijC,WAAW7mC,OAAQnB,IAAK,CACpD,MAAMknW,EAAoBtoW,MAAMC,QAAQhB,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,QAAUhjB,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,OAAOzY,KAAK,KAAOvK,EAAKkH,OAAOijC,WAAWhoC,GAAGuxV,gBAAgB1wU,OACnM,GAAIve,EAAMyW,OAASmuV,IAAsB5kW,EAAMyW,MAAM3Q,KAAK,MACtD9F,EAAM+F,OAAS6+V,IAAsB5kW,EAAM+F,MAAO,CAE9C9J,EAAeC,KAAKf,EAAS,gBAC7BI,EAAKkH,OAAOijC,WAAWhoC,GAAGw6C,KAAO/8C,EAAQ27C,YAGzC76C,EAAeC,KAAKf,EAAS,aAC7BI,EAAKkH,OAAOijC,WAAWhoC,GAAGspF,MAAQ7rF,EAAQ6T,SAE9C,OAIRzT,EAAKk1U,OAAOvrB,MAAM1mJ,kBAK9BmiL,oBAAqB,SAAUzlV,GAC3B,IAAIK,EAAOC,KAEPqpW,EAAStpW,EAAKkH,OAAOmvD,YAAcr2D,EAAKkH,OAAOC,IAAM3D,EAAAA,EAAAA,KAAAA,UAAkB7D,EAAQK,EAAKkH,OAAOmvD,UAAWr2D,EAAKkH,OAAOC,KAAOxH,EACzH8mM,EAAc0uI,OAAO4E,WAAWkP,YAAYqgB,EAAO,GAAIA,EAAO,GAAItpW,EAAKk1U,OAAOyH,OAAO6N,qBAAqBh4T,QAE1GmqT,EAAS38U,EAAKk1U,OAAOyH,OACzBA,EAAO0f,MAAM,CACT51J,YAAaA,EACbhvD,YAAa,CACTrpB,QAASuuN,EAAOvuN,QAChBu3C,MAAOg3K,EAAOh3K,UAGxBxlH,KAAKmkS,GACP0a,eAAgB,SAAUvS,EAAW7sV,GACjC,MAAMI,EAAOC,KAIb,OAFAD,EAAKk1U,OAAOvrB,MAAMgzB,OAAO4sB,eAElB,IAAI1qW,SAAQ,SAAUC,EAASk1B,GAClCp0B,EAAUA,GAAW,GAGrB,IAAI4pW,EAAUr0B,OAAO3zU,KAAKioW,SACtBhd,EAAUrpB,OAASqpB,EAAUvpB,OAC7BupB,EAAUrpB,MAAQomC,EAClB/c,EAAUvpB,MAAQsmC,GAGlB/c,EAAUtpB,QAAUspB,EAAUgF,QAC9BhF,EAAUtpB,OAASqmC,EACnB/c,EAAUgF,OAAS+X,GAGvB,IAAIE,EAAgB,GAChBC,EAAUld,EAAUl6T,MAAQm3U,EAAgB,EAC5CE,EAAUnd,EAAUj6T,OAASk3U,EAAgB,EACjDjd,EAAUrpB,MAAQumC,EAClBld,EAAUvpB,MAAQ0mC,EAClBnd,EAAUtpB,OAASymC,EACnBnd,EAAUgF,OAASmY,EAEnB,IAAIjgD,EAAQ3pT,EAAKk1U,OAAOvrB,MACpBgzB,EAAShzB,EAAMgzB,OAEfktB,EAAuBltB,EAAOyb,8BAA8B3L,GAC5DhmJ,EAAc0uI,OAAO8F,UAAUC,MAAMiW,wBAAwB0Y,GAEjE10B,OAAOh8E,KAAKwwD,EAAMosB,MAAM76P,gBAAgBguQ,0BAA0B,CAAC/T,OAAO2d,UAAUlyV,OAAO6rV,MAAc,SAAUtD,GAE/G,IAAI2gB,EAA+B,CAC/B3vC,UAAW1zH,EAAY0zH,UACvBC,SAAU3zH,EAAY2zH,SACtB5nS,OAAQi0K,EAAYj0K,OAAS22T,EAAiB,GAAG32T,QAAU,GAG/DmqT,EAAO0f,MAAM,CACT/rS,SAAU1wD,EAAQ0wD,UAAY,EAC9Bm2I,YAAa0uI,OAAO8F,UAAUC,MAAMmW,wBAAwByY,GAC5Dr2R,SAAU,WACN,IAAIvxE,EAAQizU,OAAO3zU,KAAKq+S,UAAU,IAC9B08C,EAASnV,EAAgBnnV,KAAKi1U,OAAOvrB,OACzC4yC,EAASpnB,OAAO2R,QAAQqB,gBAAgBoU,GAExCt8V,KAAKiH,OAAOw/U,iBAAiBzmV,KAAKi1U,OAAOvrB,MAAMgzB,QAASz6U,EAAOjC,KAAKi1U,OAAOvrB,MAAMgzB,OAAOpoQ,MAAOgoR,EAAQ,CACnGjsS,SAAU,IACV93B,SAAU,WACN15B,QAGVqhD,KAAKngD,YAIrBmgD,KAAKmkS,GAEP6f,gBAAiB,SAAU53V,EAAU23V,GACjC,IAAIlkW,EAAOC,KACP0pT,EAAQ3pT,EAAKk1U,OAAOvrB,MAExB,IAAKp9S,IAAaA,EAASuxU,YAAa,CACpC,IAAIxgR,EAASqsP,EAAMrsP,OACf18D,EAAS,IAAIu0U,OAAO4B,WACpBz5Q,EAAO6lF,YAAc,EACrB7lF,EAAO8pF,aAAe,GAC1B76I,EAAW,CACPuxU,YAAal9U,GAIrB,IAAImpW,EAAUpgD,EAAMgzB,OAAOC,WAAWrwU,EAASuxU,aAC3Ch0J,EAAe6/H,EAAMosB,MAAM2G,KAAKqtB,EAASpgD,GAC7C,GAAI7/H,EAAc,CAEd,IAAIkgL,EAAkB70B,OAAO4E,WAAWz1R,SAASylT,EAAQh4V,OAAQ+3K,GACjE,GAAIkgL,EAAkB,EAClB,OAGKhqW,EAAKkH,OAAO+iW,UACbjqW,EAAKkH,OAAO+iW,QAAU,CAClB/F,OAAQ,IAGhBlkW,EAAKkH,OAAO+iW,QAAQ5lL,UAAY6/K,EAAS,EAAI,EAAI,EACjDlkW,EAAKkH,OAAO+iW,QAAQ/F,QAA6B,EAAlB8F,EAAsB,IACrDhqW,EAAKkH,OAAO+iW,QAAQnsB,YAAcvxU,EAASuxU,YAInD,IAAIosB,EAAiB,SAAU9lW,GAC3B,IAAIpE,EAAOC,KACP0pT,EAAQ3pT,EAAKk1U,OAAOvrB,MAEpBogD,EAAUpgD,EAAMgzB,OAAOC,WAAWrwU,EAASuxU,aAAe15U,EAAK05U,aAC/Dh0J,EAAe6/H,EAAMosB,MAAM2G,KAAKqtB,EAASpgD,GAC7C,GAAI7/H,EAAc,CAGd,GADsBqrJ,OAAO4E,WAAWz1R,SAASylT,EAAQh4V,OAAQ+3K,GAC3C,EAClB,OAIA,IAAIg8J,EAAiBn8B,EAAMgzB,OAAOpwU,SAG9B49V,GAFkBxgD,EAAMgzB,OAAOt4J,UAExB,IAAI8wJ,OAAO4E,YAClBqwB,EAASD,EACbh1B,OAAO4E,WAAWuD,iBAAiBysB,EAAQ1lL,UAA6B,GAAlBjgL,EAAKigL,UAAiBjgL,EAAK8/V,QAAU9/V,EAAK8/V,OAAQkG,GACxGj1B,OAAO4E,WAAWl/T,IAAIirU,EAAgBskB,EAAQD,GAE9C,IAAIljB,EAAM,IAAI9R,OAAOyS,IAAIuiB,EAAMJ,EAAQ1lL,WACnCgmL,EAAmB1gD,EAAMosB,MAAM2G,KAAKuK,EAAKt9B,GAC7C,GAAI0gD,EAAkB,CAElB,IAAIjqV,EAAQ,WACRngB,KAAKiH,OAAO+iW,QAAU,CAClB5lL,UAAW,EACX6/K,OAAQ,EACRpmB,YAAa,KAMjB3I,OAAO4E,WAAWz1R,SAAS6lT,EAAME,GAAoB,GACrD7oW,KAAKyoB,IAAIkrT,OAAO8F,UAAUC,MAAMiW,wBAAwBgZ,GAAM33U,QAAUm3R,EAAMm3B,4BAA4BgQ,oBAC1G1wU,EAAMzf,KAAKX,GAGXA,EAAKk1U,OAAOyH,OAAO0f,MAAM,CACrB51J,YAAa0jK,EACb1yN,YAAa,CACTrpB,QAASu7L,EAAMgzB,OAAOvuN,QACtBu3C,MAAOgkJ,EAAMgzB,OAAOh3K,MACpBwmL,KAAMxiC,EAAMgzB,OAAOwP,MAEvB77R,SAAU,EACVg6S,eAAgBn1B,OAAOo1B,eAAeC,YACtC/2R,SAAU,SAAUutC,GAChB/gH,KAAKiH,OAAO+iW,QAAU,CAClB5lL,UAAW,EACX6/K,OAAQ,EACRpmB,YAAa,KAEnB39R,KAAKngD,EAAMm1U,OAAO4E,WAAWz1R,SAAS6lT,EAAME,SAQtEnjT,WAAW,WACPgjT,EAAevpW,KAAKX,EAAMA,EAAKkH,OAAO+iW,UACxC9pT,KAAKngD,GAAO,KAGlB0mV,iBAAkB,SAAU/J,EAAQz6U,EAAOyjC,EAAMszG,EAAW0iD,GACxD,OAAO+qJ,EAAiB/J,EAAQz6U,EAAOyjC,EAAMszG,EAAW0iD,IAG5D9jK,WAAY,SAAUn0B,EAASy/D,GAC3B,IAAInjE,EAAOC,KAEP4a,EAAM,WAEN,IAAI4vV,EAAY5M,EAAiBlG,QAAQ33V,EAAKk1U,OAAOvrB,MAAOjmT,EAAS1D,EAAKq2D,UAAWr2D,EAAKmH,KAC1F,GAAIsjW,EACA,GAAkC,mBAAvBA,EAAUlqW,SAEjBkqW,EAAUlqW,SAASP,EAAKk1U,OAAOh6P,iBAAiBv8E,MAAK,SAAUqnI,GAE3D,GAAIA,aAAuBjlI,MACvBilI,EAAYx+H,SAAQ,SAAUhH,GACtBA,aAAgBO,MAChBP,EAAKgH,SAAQ,SAAUkjW,GACnBA,EAAM7yU,EAAWl3B,KAAKX,EAAM0qW,GAC5BvM,EAAYn+V,EAAM0D,EAASgnW,OAG/BlqW,EAAOq3B,EAAWl3B,KAAKX,EAAMQ,GAC7B29V,EAAYn+V,EAAM0D,EAASlD,WAIlC,CACD,IAAIA,EAAOq3B,EAAWl3B,KAAKX,EAAMgmI,GACjCm4N,EAAYn+V,EAAM0D,EAASlD,YAKlC,GAAIiqW,EAAUlqW,oBAAoBQ,MACnC0pW,EAAUlqW,SAASiH,SAAQ,SAAUhH,GACjCA,EAAOq3B,EAAWl3B,KAAKX,EAAMQ,GAC7B29V,EAAYn+V,EAAM0D,EAASlD,UAG9B,CACD,IAAIA,EAAOq3B,EAAWl3B,KAAKX,EAAMyqW,EAAUlqW,UAC3C49V,EAAYn+V,EAAM0D,EAASlD,KAMvC,GAAKR,EAAKuwV,iBAAiB9kT,aAAezrC,EAAKuwV,iBAAiB9kT,YAAYkoT,gBAAkBjwV,GACzF1D,EAAKuwV,iBAAiB9kT,aAAezrC,EAAKuwV,iBAAiB9kT,YAAYmoT,YAExE1sS,YAAW,WACHlnD,EAAKuwV,iBAAiB9kT,YAAYkoT,gBAAkBjwV,GAGpDmX,MAEL,OACA,IAAI7a,EAAKuwV,iBAAiBrhO,aAAelvH,EAAKuwV,iBAAiBrhO,YAAY7K,mBAAqB3gH,EAAQe,OAASf,aAAmBuN,EAAAA,EACvI,OAEA4J,MAGRkd,cAAe,SAAUr0B,GACrB,IAAI1D,EAAOC,KACX,GAAID,EAAKk1U,QACDxxU,EAAS,CACT,QAAQ,GACJ,KAAKA,aAAmByxU,OAAOmkB,gBAC3Bt5V,EAAKk1U,OAAOvrB,MAAMo0C,iBAAiB9/T,OAAOv6B,GAC1C,MACJ,KAAKA,aAAmByxU,OAAOw1B,UAC3B3qW,EAAKk1U,OAAOooB,oBAAoBr/T,OAAOv6B,GACvC,MACJ,KAAKA,aAAmByxU,OAAOsjB,OAE3B,MACJ,KAAK/0V,aAAmBtE,OACpBY,EAAKk1U,OAAOiB,SAASgqB,WAAWz8V,EAAQrE,IAIhDW,EAAKk1U,OAAOvrB,MAAM1mJ,kBAI9BmmM,wBAAyB,SAAU1lW,EAAS9D,GACpC8D,IACAA,EAAQi5C,KAAO/8C,EAAQ+8C,OAI/B41S,iBAAkB,SAAUqY,GACxB,OAAO/yU,EAAWl3B,KAAKV,KAAKiH,OAAQ0jW,IAGxC1O,qBAAsB,WAClB,IAAIl8V,EAAOC,KAEXD,EAAKk1U,OAAOvrB,MAAMosB,MAAM76P,gBAAgBihR,aAAax9V,MAAK,WACtD,IAAIiC,EAASZ,EAAK6kV,QAAQ1jV,YAE1B,GAAKP,EAAL,CAIA,IAAIiqW,EAAS7qW,EAAKkH,OAAOmvD,YAAcr2D,EAAKkH,OAAOC,IAAM3D,EAAAA,EAAAA,KAAAA,UAAkB5C,EAAQZ,EAAKkH,OAAOmvD,UAAWr2D,EAAKkH,OAAOC,KAAOvG,EACzH0jD,EAAW6hS,EAA0BxlV,KAAKX,EAAMA,EAAK6kV,QAAQniU,iBAAmB,EAAGyyT,OAAO3zU,KAAKq+S,UAAUgrD,EAAO,KAEhHC,EAAQ,IAAI31B,OAAO4F,aAAa5F,OAAO3zU,KAAKq+S,UAAUgrD,EAAO,IAAK11B,OAAO3zU,KAAKq+S,UAAUgrD,EAAO,KAC/F7qW,EAAKk1U,OAAOvrB,MAAMosB,QAClB+0B,EAAMt4U,OAASxyB,EAAKk1U,OAAOvrB,MAAMosB,MAAMjtJ,UAAUgiL,IAAU,GAG/D,IAAIC,EAAY,WACZ,GAAI/qW,EAAKzB,IAAI0I,SAAU,CACnB,IAAIw/L,EAAc0uI,OAAO8F,UAAUC,MAAMmW,wBAAwByZ,GAC7DrzN,EAAc,CACdkuB,MAAOwvK,OAAO3zU,KAAKq+S,WAAW,IAC9BzxL,SAAUpuH,EAAK6kV,QAAQtwR,cACvB43R,KAAM,GAGVnsV,EAAKk1U,OAAOyH,OAAOvpR,QAAQ,CACvBqzI,YAAaA,EACbhvD,YAAaA,IAGjBz3I,EAAKk1U,OAAOyH,OAAOquB,aAAa1mT,KAInB,IAAjBwmT,EAAMt4U,OACNhvB,EAAAA,EAAAA,QAAWA,EAAAA,EAAAA,OAAYA,EAAAA,EAAAA,KAAAA,UAAmBA,EAAAA,EAAAA,YAAiB,qBAAqB,WAC5ExD,EAAKkH,OAAOysF,cAAgB,IAAInwF,EAAAA,EAAAA,KAAAA,UAChCxD,EAAKkH,OAAOysF,cAAcG,aAAa,CACnC3sF,IAAKnH,EAAKkH,OAAOC,IACjBkD,YAAa,CAACwgW,KACflsW,MAAK,SAAUkG,GACVA,GAAUA,EAAOvB,OAAS,IAC1BwnW,EAAMt4U,OAAS3tB,EAAO,GAAG,GAAKA,EAAO,GAAG,GAAK,EAC7CkmW,QAEL30V,OAAOpX,GAAM2I,QAAQC,IAAI5I,QAGhC+rW,SAIZrN,sBAAuB,WACnB,MAAM19V,EAAOC,KAGb,IAAI8wV,EAAY5b,OAAO8F,UAAUC,MAC7BvxB,EAAQ3pT,EAAKk1U,OAAOvrB,MACpB7jG,EAAUqhI,EAAgBx9B,GAE9B,IAAK7jG,EAAS,CACV,IAAIiwH,EAAQ/1U,EAAKk1U,OAAOvrB,MAAMosB,MAC1B+0B,EAAQ9qW,EAAKk1U,OAAOyH,OAAO6N,qBAAqB//U,QAChD+nB,EAASujT,EAAMjtJ,UAAUgiL,GAC7BA,EAAMt4U,OAASA,GAAU,EACzBszL,EAAUqvH,OAAO8F,UAAUC,MAAMmW,wBAAwByZ,GAI7D,IAAIxmT,EAAW6wR,OAAO4E,WAAWz1R,SAASwhK,EAAS9lN,EAAKk1U,OAAOyH,OAAOpwU,UAClE0+V,EAAqBla,EAAUI,wBAAwBrrI,GAEvDolJ,EAAelrW,EAAKkH,OAAOC,MAAQnH,EAAKkH,OAAOmvD,UAAY7yD,EAAAA,EAAAA,KAAAA,UAC3D,CAAC2xU,OAAO3zU,KAAK0kV,UAAU+kB,EAAmB9wC,WAAYgb,OAAO3zU,KAAK0kV,UAAU+kB,EAAmB7wC,WAC/Fp6T,EAAKkH,OAAOC,IAAKnH,EAAKkH,OAAOmvD,WAAa,CAAC8+Q,OAAO3zU,KAAK0kV,UAAU+kB,EAAmB9wC,WAAYgb,OAAO3zU,KAAK0kV,UAAU+kB,EAAmB7wC,WA6B7I,OA3BAp6T,EAAK6kV,QAAQzwR,UAAU82S,GAEvBlrW,EAAK6kV,QAAQ7tR,cAAcwvR,EAA0B7lV,KAAKX,EAAMskD,EAAU2mT,EAAqBA,EAAmB7wC,SAAW,IAyBtHv7T,QAAQC,WAGnBwoW,OAAQ,SAAU3nW,GACd,MAAMK,EAAOC,KAETD,EAAKmH,MAAQnH,EAAKq2D,YAClB12D,EAAS6D,EAAAA,EAAAA,KAAAA,UAAkB7D,EAAQK,EAAKq2D,UAAWr2D,EAAKmH,MAG5D,IAAIw1U,EAAS38U,EAAKk1U,OAAOyH,OAErBnqT,EADuBmqT,EAAO6N,qBACAh4T,OAC9B0+T,EAAe,IAAI/b,OAAO4F,aAAa5F,OAAO3zU,KAAKq+S,UAAUlgT,EAAO,IAAKw1U,OAAO3zU,KAAKq+S,UAAUlgT,EAAO,IAAK6yB,GAE/GmqT,EAAO0f,MAAM,CACT51J,YAAa0uI,OAAO4E,WAAWuiB,YAAYpL,EAAa/2B,UAAW+2B,EAAa92B,SAAU82B,EAAa1+T,QACvG89B,SAAU,KAIlBswS,wBAAyB,SAAU1O,GAC/B,IAAIlyV,EAAOC,KAENiyV,IAIDlyV,EAAKzB,IAAIy9B,IAAIj8B,EAAAA,EAAAA,MAAAA,WAAwB,SAAU6N,GAC3C5N,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBACxCjsJ,EAAKisJ,WAGhBjsJ,EAAKkH,OAAOqpV,iBAAiB9kT,YAAYnf,KAAK3rB,KAAKX,EAAMkyV,GAAgBvzV,MAAK,SAAUiP,GACpF5N,EAAKzB,IAAIw1D,sBAAsBvM,WAAWxnD,EAAKisJ,gBACxCjsJ,EAAKisJ,aAKxB39I,GAAI,SAAUwxB,EAAOtH,GACjB,MAAMx4B,EAAOC,KAEPkrW,EAAyB,SAAUxK,GACrC,OAAI3gW,EAAKk1U,QAAUl1U,EAAKk1U,OAAOk2B,aACpBprW,EAAK8jK,kBAAkB68L,EAAS7iB,aAAe6iB,EAASp0V,UAe5D,MAGNvM,EAAKuhW,gBACNvhW,EAAKuhW,cAAgB,IAGzBvhW,EAAKuhW,cAAc8J,4BAA8B,IAAIl2B,OAAOmC,wBAAwBt3U,EAAKk1U,OAAOvrB,MAAMrsP,QACtGt9D,EAAKuhW,cAAc8J,4BAA4B9zB,gBAAe,SAAUz3S,GACpE,GAAIA,EAAMg+S,aAAeh+S,EAAMvzB,SAAU,CAErC,GAAIvM,EAAKk1U,OAAOiZ,cACZ,OAGJ31T,EAAS2yU,EAAuBrrU,SAEhCtH,EAASsH,KAGdukU,EAAoBvkU,KAG3BiyF,iBAAkB,SAAUF,GACxB,MAAM7xH,EAAOC,KAEb,IAAIynW,EAAY,IAAIvyB,OAAO4F,aAAa5F,OAAO3zU,KAAKq+S,UAAUhuL,EAAU,IAAKsjN,OAAO3zU,KAAKq+S,UAAUhuL,EAAU,KAC7G,OAAO7xH,EAAKk1U,OAAOvrB,MAAMosB,MAAMjtJ,UAAU4+K,IAAc,GAI3DnpC,mBAAoB,SAAU5+T,EAAQ4yE,GAClC,MAAMvyE,EAAOC,KACTD,EAAKk1U,SAAWl1U,EAAKk1U,OAAOo2B,+BAC5BtrW,EAAKk1U,OAAOo2B,8BAA+B,EAC3CtrW,EAAKk1U,OAAOinB,aAAax9V,MAAK,kBACnBqB,EAAKk1U,OAAOo2B,6BACnB,MAAM/+V,EAAWvM,EAAKq2D,YAAcr2D,EAAKmH,IAAM3D,EAAAA,EAAAA,KAAAA,UAAkB7D,EAAQK,EAAKq2D,UAAWr2D,EAAKmH,KAAOxH,EACrG,IAAIy2U,EAAS,IAAIjB,OAAOsjB,OAAO,CAC3BlsV,SAAU4oU,OAAO4E,WAAWkP,YAAY18U,EAAS,GAAIA,EAAS,IAC9DzD,KAAM,kBACNwsB,MAAO,CACHqnB,MAAM,EACN60B,MAAO2jQ,OAAOQ,MAAM41B,IAAI9yB,UAAU,IAClCC,UAAW,GACXrzM,aAAc8vM,OAAOQ,MAAMmG,MAC3BpW,aAAc,EACdiR,gBAAiBxB,OAAOyB,gBAAgBC,mBAIhDtkQ,EAAQi5R,sBAAwB3zU,EAAWl3B,KAAKX,EAAMo2U,QAIlE5X,mBAAoB,SAAU7+T,EAAQ4yE,GAClC,MAAMvyE,EAAOC,KACTD,EAAKk1U,QACLl1U,EAAKk1U,OAAOinB,aAAax9V,MAAK,WAC1B,GAAI4zE,EAAQi5R,sBAAuB,CAC/B,MAAMj/V,EAAW5M,EAEjB4yE,EAAQi5R,sBAAsBj/V,SAAW4oU,OAAO4E,WAAWkP,YAAY18U,EAAS,GAAIA,EAAS,GAAIvM,EAAKk1U,OAAOyH,OAAO6N,qBAAqBh4T,QACpI+/C,EAAQi5R,sBAAsB7uT,OAC/B41B,EAAQi5R,sBAAsB7uT,MAAO,GAEzC38C,EAAKk1U,OAAOvrB,MAAM1mJ,qBAElBjjK,EAAKu+T,mBAAmB5+T,EAAQ4yE,OAKhDypB,oBAAqB,SAAUzpB,GAC3B,MAAMvyE,EAAOC,KACTD,EAAKk1U,QAAU3iQ,EAAQi5R,uBACvBxrW,EAAKk1U,OAAOinB,aAAax9V,MAAK,WAC1BqB,EAAK+3B,cAAcp3B,KAAKX,EAAMuyE,EAAQi5R,8BAC/Bj5R,EAAQi5R,0BAK3B1pN,QAAS,WACL,IAAI9hJ,EAAOC,KAEXD,EAAKzB,IAAI0I,UAAW,EAGpBjH,EAAKkH,OAAOu9V,eAAiB,GAC7BzkW,EAAKkH,OAAOm3V,iBAAmB,GAI/Br+V,EAAKzB,IAAI8P,IAAIiwV,EAAS/zV,KAAK,KAAMvK,EAAKkH,OAAOggW,iBAG7C9G,EAAqBz/V,KAAKX,EAAMD,EAAAA,EAAAA,KAAAA,SAGhCkkW,EAAetjW,KAAKX,GAAM,GAI1BnB,QAAQwiB,IAAIrhB,EAAKzB,IAAI0rC,WAAW1rC,KAAI,SAAU8wB,GAC1C,OAAOxwB,QAAQC,SAAS8U,EAAayb,EAAWrvB,EAAKkH,OAAOmvD,gBAC5D13D,MAAK,SAAUsnC,GACf,IAAI0hE,EACJ,GAAI1hE,EAAQ3iC,OAAS,EAAG,CAEpB,IADA,IAAI4mC,EACK/nC,EAAI,EAAGA,EAAInC,EAAKzB,IAAI0rC,WAAW3mC,OAAQnB,IACvC+nC,GAAqBjE,EAAQ9jC,KAC9B+nC,EAAmBlqC,EAAKzB,IAAI0rC,WAAW9nC,IAEvCnC,EAAKzB,IAAI0rC,WAAW9nC,KACpBnC,EAAKzB,IAAI0rC,WAAW9nC,GAAGogB,cAAgB0jB,EAAQ9jC,IAGvDwlG,GAAe,EACf,MAAM8jQ,EAAsB,SAAUC,EAAcr8U,EAAWxN,GAC3D,MAAMy7D,EAAgB,CAClB74E,MAAO4qB,GAGPxN,IACAy7D,EAAcz7D,cAAgBA,GAGlC,IAAI9W,EAAU/K,EAAKzB,IAAI2G,mBAAmBwmW,EAAeloW,EAAAA,EAAAA,QAAAA,gBAA6BA,EAAAA,EAAAA,QAAAA,aAClFuH,EAAQzH,OAAS,IAEbyH,EAAQ,aAAcvH,EAAAA,EAAAA,QAAAA,cACtBmkG,GAAe,GAEnBrqB,EAAczP,cAAgB,WAC1B7tE,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2pC,KAAM3pC,EAAAA,EAAAA,KAAAA,WAEtDgL,EAAQ,GAAGwyE,2BAA2BD,KAI9C,IAAIjuD,EAAY0rU,EAAcC,SAAWh7V,EAAKD,OAAOykV,WAAauW,EAAcG,WAAaH,EAAcC,QACtG3rU,EAAUzb,aAAa5T,EAAKzB,IAAI8I,UAoBjCrH,EAAKzB,IAAI4rD,aAAa96B,GAlBjBA,EAAUxN,eAGXwN,EAAUtN,mBACNsN,EAAUtN,mBAAmBnO,aAAa5T,EAAKzB,IAAI8I,UAGnD7D,EAAAA,EAAAA,QAAWxD,EAAK4hC,gBAAgB,2BAC5B,WACI6pU,GAAoB,EAAOp8U,EAAWA,EAAUxN,kBACjD,WACC7hB,EAAKzB,IAAI4rD,aAAa96B,EAAUxN,kBAGxC4pV,GAAoB,EAAMp8U,IAb9Bo8U,GAAoB,EAAMp8U,GAqBtC0rU,EAAcC,QAAU,GAExBh7V,EAAKkH,OAAOmoB,UAAY,KAExBrvB,EAAKkH,OAAOijC,WAAa,GAEzBnqC,EAAKzB,IAAI4rC,WAAWhlC,QAAQkpD,IAAE,IAAAs9S,EAAA,OAAgB,QAAhBA,EAAKt9S,EAAGt/C,gBAAQ,IAAA48V,OAAA,EAAXA,EAAaroW,UAAQkE,SAAQ,SAAU6mD,GACtEA,EAAGt/C,SAASvH,SAAS9D,IAAY,IAAAkoW,EACzBloW,MAAAA,GAAa,QAANkoW,EAAPloW,EAASxD,YAAI,IAAA0rW,GAAbA,EAAelnC,WACfhhU,EAAQxC,eAAesC,EAAAA,EAAAA,KAAAA,UAAkBE,EAAQnD,SAAUP,EAAKkH,OAAOC,IAAKnH,EAAKkH,OAAOmvD,kBAKpGr2D,EAAKkH,OAAOoiD,eAAe4iS,SAEvBlsV,EAAKkH,OAAOqpV,iBAAiB9kT,aAC7BzrC,EAAKkH,OAAOqpV,iBAAiB9kT,YAAYrrB,QAGzCpgB,EAAKkH,OAAOqpV,iBAAiBrhO,cAC7BlvH,EAAKkH,OAAOqpV,iBAAiBrhO,YAAYn0F,OAAQ,EACjD/6B,EAAKkH,OAAOqpV,iBAAiBrhO,YAAY9uG,SAK7CpgB,EAAKkH,OAAO4/V,mBAAmBrrB,mBACxBz7U,EAAKkH,OAAO4/V,mBAEnB9mW,EAAKk1U,OAAOpzL,UACZ9hJ,EAAKk1U,OAAS,KAEVvtO,GACA3nG,EAAKzB,IAAIiN,QAAQzL,EAAAA,EAAAA,MAAAA,WAAyB,CAAE2pC,KAAM3pC,EAAAA,EAAAA,KAAAA,eApuElD,GA2uEb,CACH8lD,KAAMy+R,EAAUz+R,KAAK1F,KAAKmkS,GAC1Bj0U,MAAOi0U,EAAUj0U,MAAM8vC,KAAKmkS,GAC5BiZ,QAASjZ,EAAUiZ,QAAQp9S,KAAKmkS,GAChCC,SAAUD,EAAUC,UA1xKMnoF,I,oECtBlC,MAAMl8P,EAAO,CACTga,IAAK,SAAU3b,GACX,IAAIyB,EAAOC,KACXD,EAAKyD,OAASlF,EACdyB,EAAKzB,IAAM,KAIXyB,EAAKyxD,OAAS,WACV,OAAOzxD,EAAK+d,WAGpBlL,MAAO,SAAUpO,GACb,IAAIzE,EAAOC,KACXD,EAAKyD,OAASgB,EACdzE,EAAKyE,MAAQ,KACb23C,EAAAA,EAAAA,KAAiBp8C,GAIjBA,EAAK4f,SAAW,WACZ,OAAI5f,EAAKyE,MACE5F,QAAQC,QAAQkB,EAAKyE,OAEzBzE,EAAK+d,UAMhB/d,EAAKke,SAAW,SAAUsD,GACtBxhB,EAAKyE,MAAQ+c,IAGrB/c,MAAO,CACHuY,OAAQ,WAAc9c,EAAK2S,MAAMxC,MAAMpQ,KAAMgd,YAC7C4U,OAAQ,WAAc3xB,EAAK2S,MAAMxC,MAAMpQ,KAAMgd,aAEjDjS,QAAS,SAAUgjD,GACJ/tD,KACNwD,OAASuqD,GAElBjjD,QAAS,CACLi2E,MAAO,WAAc9gF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC9CgwI,SAAU,WAAc/sJ,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACjDyqH,OAAQ,WAAcxnI,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC/C4qH,WAAY,WAAc3nI,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACnDmlE,YAAa,WAAcliF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACpD4uV,OAAQ,WAAc3rW,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC/CmvE,QAAS,WAAclsF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAChD43H,YAAa,WAAc30I,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACpDuiF,YAAa,WAAct/F,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACpDvO,MAAO,WAAcxO,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC9Cg3G,oBAAqB,WAAc/zH,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC5Dg+F,YAAa,WAAc/6G,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACpD0sE,KAAM,WAAczpF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC7C2mH,OAAQ,WAAc1jI,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC/C8jE,gBAAiB,WAAc7gF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YACxD+0E,KAAM,WAAc9xF,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,YAC7CtO,aAAc,WAAczO,EAAK8K,QAAQqF,MAAMpQ,KAAMgd,aAEzDxd,QAAS,aACToiD,SAAU,cAGdr+C,EAAAA,EAAAA,QAAWtD,EAAK2S,MAAOupC,EAAAA,GACvB54C,EAAAA,EAAAA,QAAWtD,EAAKuE,MAAMuY,OAAQ9c,EAAK2S,OACnCrP,EAAAA,EAAAA,QAAWtD,EAAKuE,MAAMotB,OAAQ3xB,EAAK2S,OACnCrP,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQi2E,MAAO9gF,EAAK8K,SACpCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQkiJ,SAAU/sJ,EAAK8K,SACvCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ28H,OAAQxnI,EAAK8K,SACrCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ88H,WAAY3nI,EAAK8K,SACzCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQq3E,YAAaliF,EAAK8K,SAC1CxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQqhF,QAASlsF,EAAK8K,SACtCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ8pI,YAAa30I,EAAK8K,SAC1CxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ2D,MAAOxO,EAAK8K,SACpCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQy0F,YAAat/F,EAAK6K,QAAQi2E,OAClDx9E,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQkpH,oBAAqB/zH,EAAK6K,QAAQi2E,OAC1Dx9E,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQkwG,YAAa/6G,EAAK8K,SAC1CxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ4+E,KAAMzpF,EAAK8K,SACnCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQg2E,gBAAiB7gF,EAAK8K,SAC9CxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQinF,KAAM9xF,EAAK8K,SACnCxH,EAAAA,EAAAA,QAAWtD,EAAK6K,QAAQ4D,aAAczO,EAAK8K,SAE3C,W,oECvFA,iBAEA,mBAA0B,QAAQ,SAAUtC,EAAKojW,GAC7C,MAAMhpW,EAAQU,GAAGiM,KAAKgmH,cAAc/sH,GACpC,MAAqB,iBAAV5F,EACAgpW,EAAO,IAAI,gBAAsBhpW,GAASA,EAE9C4F,KAGX,mBAA0B,MAAM,SAAUwwR,EAAIE,GAC1C,OAAOF,EAAKE,KAGhB,mBAA0B,MAAM,SAAUF,EAAIE,GAC1C,OAAOF,EAAKE,KAGhB,mBAA0B,MAAM,SAAUF,EAAIE,GAC1C,OAAOF,GAAME,KAGjB,mBAA0B,SAAS,WAC/B,OAAOr4R,MAAMoX,KAAK8E,WAAWrS,MAAM,EAAGqS,UAAU3Z,OAAS,GAAG0R,OAAM6T,GAAKA,OAG3E,mBAA0B,SAAS,SAAU/lB,GACzC,OAAOtB,KAAKirC,MAAM3pC,MAGtB,mBAA0B,aAAa,SAAU8lB,GAC7C,OAAOA,GAAOA,EAAIyF,iBAGtB,mBAA0B,cAAc,SAAUzF,EAAK9lB,GACnD,OAAO8lB,GAAOA,EAAI1F,WAAWqO,WAAWzuB,MAG5C,mBAA0B,YAAY,SAAU84B,GAC5C,OAAOA,aAAex8B,SAAW2B,MAAMC,QAAQ46B,MAGnD,mBAA0B,WAAW,SAAUA,GAC3C,IAAK,IAAIlzB,KAAOkzB,EACZ,GAAIx8B,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAKlzB,GAC1C,OAAO,EAGf,OAAO,KAGX,mBAA0B,WAAW,SAAUkzB,GAC3C,OAAO76B,MAAMC,QAAQ46B,MAGzB,mBAA0B,SAAS,SAAUhT,GACzC,OAAOA,GAAO,kCAAkCsZ,KAAKtZ,MAGzD,mBAA0B,gBAAgB,SAAUA,GAChD,GAAIA,EAAK,CACL,MAAMnf,EAAQmf,EAAInf,MAAM,4HACxB,GAAIA,EACA,OAAOA,EAAM,GAGrB,OAAO,QAGX,mBAA0B,aAAa,SAAUmf,GAC7C,GAAIA,EAAK,CACL,MAAMnf,EAAQmf,EAAInf,MAAM,YACxB,GAAIA,EACA,OAAOA,EAAM,GAGrB,OAAO,QAGX,MAAMsiW,EAAY,0HAEZC,EAAkB,SAAUpjV,GAC9B,GAAIA,GAAsB,iBAARA,EAAkB,CAChC,MAAMnf,EAAQmf,EAAInf,MAAMsiW,GACxB,GAAItiW,EACA,OAAOA,EAAM,IAAMA,EAAM,GAGjC,OAAO,MAGLwiW,EAA2B,SAAUrjV,EAAKlhB,GAC5C,GAAIkhB,EAAK,CACL,MAAMnf,EAAQmf,EAAInf,MAAMsiW,GACxB,GAAItiW,EAAO,CACP,MAAM3G,EAAQ2G,EAAM/B,EAAM,IAAM+B,EAAM/B,EAAM,GAC5C,MAAc,SAAV5E,EACOA,EAAQA,EAAQ,KAAO,OAE3BA,GAGf,OAAO,MAGLopW,EAAqB,SAAUpjW,EAAMhG,EAAO8pE,GAC9C,OAAOo/R,EAAgBljW,KAAU8jE,GAAOo/R,EAAgBlpW,KAAW8pE,GAGvE,mBAA0B,oBAAoB,SAAU9jE,EAAMhG,GAC1D,OAAOopW,EAAmBpjW,EAAMhG,EAAO,YAG3C,mBAA0B,oBAAoB,SAAUgG,EAAMhG,GAC1D,OAAOopW,EAAmBpjW,EAAMhG,EAAO,YAG3C,mBAA0B,oBAAoB,SAAUgG,EAAMhG,GAC1D,OAAOopW,EAAmBpjW,EAAMhG,EAAO,YAG3C,mBAA0B,oBAAoB,SAAUgG,EAAMhG,GAC1D,OAAOopW,EAAmBpjW,EAAMhG,EAAO,YAG3C,mBAA0B,kBAAkB,SAAU84B,GAClD,OAAOA,GAAOx8B,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,gBAAkBx8B,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,eAGxH,mBAA0B,eAAe,SAAU9yB,EAAMhG,GACrD,IAAI+B,EAASonW,EAAyBnjW,EAAM,GAI5C,OAHKjE,IACDA,EAASonW,EAAyBnpW,EAAO,IAEtC+B,KAGX,mBAA0B,gBAAgB,SAAUiE,EAAMhG,GACtD,IAAI+B,EAASonW,EAAyBnjW,EAAM,GAI5C,OAHKjE,IACDA,EAASonW,EAAyBnpW,EAAO,IAEtC+B,KAGX,mBAA0B,6BAA6B,SAAU+jB,GAC7D,IAAKA,EACD,OAAO,KAEX,GAAmB,iBAARA,EAAkB,CACzB,MAAMnf,EAAQmf,EAAInf,MAAMsiW,GACxB,GAAItiW,EAAO,CACP,MAAMiuG,EAAY,KAElB,OAA+B,IADnBjuG,EAAM,GACVR,QAAQyuG,GACL9uF,EAAI/B,OAAO,EAAG+B,EAAI+K,YAAY+jF,IAG9B9uF,EAAI/B,OAAO+B,EAAI3f,QAAQyuG,GAAaA,EAAUp0G,SAIjE,OAAOslB,KAGX,mBAA0B,cAAc,SAAUgT,GAC9C,OAAOA,GAAOx8B,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAK,UAAoC,iBAAjBA,EAAW,SAG1F,oBAA6B,GAC7B,mBAA0B,SAAS,SAAUA,GACzC,IAAIlC,EAAQ,0BAAiCzvB,GAAkBA,EAAK2xB,MAAQA,IAI5E,OAHKlC,GACD,yBAAgCA,EAAQ,CAAEkC,IAAKA,EAAKv8B,GAAImE,GAAGojC,WAExDlN,EAAMr6B,MAIjB,mBAA0B,WAAW,SAAUu8B,EAAKuwU,GAChD,MAAMC,EAAUD,EAAeA,EAAa/5V,MAAM,KAAO,GACzD,IAAIi6V,EAAS,EACb,IAAK,IAAIv0V,KAAK8jB,EACNwwU,EAAQnjW,QAAQ6O,GAAK,GACrBu0V,IAGR,OAAOA,EAAS,KAGpB,mBAA0B,sBAAsB,SAAUzwU,GACtD,OAAIA,GAAO,qHAAqHsG,KAAKtG,GAC1H,IAAIkI,KAAKlI,GAAKsnC,eAAe1/D,GAAGiM,KAAKm0K,kBAAoBpgL,GAAGiM,KAAKm0K,iBAAiBtgL,OAAS,EAAIE,GAAGiM,KAAKm0K,iBAAiB/8J,OAAO,EAAG,GAAKrjB,GAAGiM,KAAKm0K,iBAAkB,CAAE0oL,QAAQ,IAElL1wU,GAAO,yDAAyDsG,KAAKtG,IACjE36B,MAAM6iC,KAAKrS,MAAMmK,MACjBA,EAAMA,EAAIpyB,QAAQ,IAAK,KACpB,IAAIs6B,KAAKlI,GAAK2+I,mBAAmB/2K,GAAGiM,KAAKm0K,kBAAoBpgL,GAAGiM,KAAKm0K,iBAAiBtgL,OAAS,EAAIE,GAAGiM,KAAKm0K,iBAAiB/8J,OAAO,EAAG,GAAKrjB,GAAGiM,KAAKm0K,mBAG3I,iBAARhoJ,GAAsC,iBAAV,IAAwB36B,MAAM26B,GAC1Dp4B,GAAGU,KAAKmiE,aAAazqC,EAAKp4B,GAAGiM,KAAKm0K,kBAEtChoJ,KAEX,mBAA0B,gBAAgB,SAAU94B,EAAOuG,GACvD,OAAOvG,EAAMogE,eAAe75D,MAGhC,QAAe,K,0BChNf9J,EAAQm7O,WAuCR,SAAqB6xH,GACnB,IAAIC,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,GA1ClDptW,EAAQqtW,YAiDR,SAAsBL,GACpB,IAAI/nL,EAcAriL,EAbAqqW,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvBjlW,EAAM,IAAIslW,EAVhB,SAAsBN,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,EAS9BG,CAAYP,EAAKG,EAAUC,IAEzCI,EAAU,EAGV7hW,EAAMyhW,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAKvqW,EAAI,EAAGA,EAAI+I,EAAK/I,GAAK,EACxBqiL,EACGwoL,EAAUT,EAAIx7R,WAAW5uE,KAAO,GAChC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,KAAO,GACpC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,KAAO,EACrC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,IAC/BoF,EAAIwlW,KAAcvoL,GAAO,GAAM,IAC/Bj9K,EAAIwlW,KAAcvoL,GAAO,EAAK,IAC9Bj9K,EAAIwlW,KAAmB,IAANvoL,EAGK,IAApBmoL,IACFnoL,EACGwoL,EAAUT,EAAIx7R,WAAW5uE,KAAO,EAChC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,KAAO,EACvCoF,EAAIwlW,KAAmB,IAANvoL,GAGK,IAApBmoL,IACFnoL,EACGwoL,EAAUT,EAAIx7R,WAAW5uE,KAAO,GAChC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,KAAO,EACpC6qW,EAAUT,EAAIx7R,WAAW5uE,EAAI,KAAO,EACvCoF,EAAIwlW,KAAcvoL,GAAO,EAAK,IAC9Bj9K,EAAIwlW,KAAmB,IAANvoL,GAGnB,OAAOj9K,GA3FThI,EAAQ0tW,cAkHR,SAAwBC,GAQtB,IAPA,IAAI1oL,EACAt5K,EAAMgiW,EAAM5pW,OACZ6pW,EAAajiW,EAAM,EACnB6iB,EAAQ,GACRq/U,EAAiB,MAGZjrW,EAAI,EAAGkrW,EAAOniW,EAAMiiW,EAAYhrW,EAAIkrW,EAAMlrW,GAAKirW,EACtDr/U,EAAM1lB,KAAKilW,EAAYJ,EAAO/qW,EAAIA,EAAIirW,EAAkBC,EAAOA,EAAQlrW,EAAIirW,IAI1D,IAAfD,GACF3oL,EAAM0oL,EAAMhiW,EAAM,GAClB6iB,EAAM1lB,KACJ6+M,EAAO1iC,GAAO,GACd0iC,EAAQ1iC,GAAO,EAAK,IACpB,OAEsB,IAAf2oL,IACT3oL,GAAO0oL,EAAMhiW,EAAM,IAAM,GAAKgiW,EAAMhiW,EAAM,GAC1C6iB,EAAM1lB,KACJ6+M,EAAO1iC,GAAO,IACd0iC,EAAQ1iC,GAAO,EAAK,IACpB0iC,EAAQ1iC,GAAO,EAAK,IACpB,MAIJ,OAAOz2J,EAAMxjB,KAAK,KAzIpB,IALA,IAAI28M,EAAS,GACT8lJ,EAAY,GACZH,EAA4B,oBAAf7gV,WAA6BA,WAAajrB,MAEvD7B,EAAO,mEACFiD,EAAI,EAAG+I,EAAMhM,EAAKoE,OAAQnB,EAAI+I,IAAO/I,EAC5C+kN,EAAO/kN,GAAKjD,EAAKiD,GACjB6qW,EAAU9tW,EAAK6xE,WAAW5uE,IAAMA,EAQlC,SAASsqW,EAASF,GAChB,IAAIrhW,EAAMqhW,EAAIjpW,OAEd,GAAI4H,EAAM,EAAI,EACZ,MAAM,IAAIjM,MAAM,kDAKlB,IAAIytW,EAAWH,EAAItjW,QAAQ,KAO3B,OANkB,IAAdyjW,IAAiBA,EAAWxhW,GAMzB,CAACwhW,EAJcA,IAAaxhW,EAC/B,EACA,EAAKwhW,EAAW,GAsEtB,SAASY,EAAaJ,EAAO1+R,EAAOzE,GAGlC,IAFA,IAAIy6G,EARoB20D,EASpBtsD,EAAS,GACJ1qL,EAAIqsE,EAAOrsE,EAAI4nE,EAAK5nE,GAAK,EAChCqiL,GACI0oL,EAAM/qW,IAAM,GAAM,WAClB+qW,EAAM/qW,EAAI,IAAM,EAAK,QACP,IAAf+qW,EAAM/qW,EAAI,IACb0qL,EAAOxkL,KAdF6+M,GADiBiyB,EAeM30D,IAdT,GAAK,IACxB0iC,EAAOiyB,GAAO,GAAK,IACnBjyB,EAAOiyB,GAAO,EAAI,IAClBjyB,EAAa,GAANiyB,IAaT,OAAOtsD,EAAOtiL,KAAK,IAjGrByiW,EAAU,IAAIj8R,WAAW,IAAM,GAC/Bi8R,EAAU,IAAIj8R,WAAW,IAAM,I;;;;;;;ACT/B,MAAM4C,EAAS,EAAQ,MACjB45R,EAAU,EAAQ,MAClBC,EACe,mBAAXlgC,QAAkD,mBAAlBA,OAAY,IAChDA,OAAY,IAAE,8BACd,KAEN/tU,EAAQ,GAASkuW,EAEjBluW,EAAQ,GAAoB,GAE5B,MAAMmuW,EAAe,WAwDrB,SAAS1pE,EAAc1gS,GACrB,GAAIA,EAASoqW,EACX,MAAM,IAAIt/B,WAAW,cAAgB9qU,EAAS,kCAGhD,MAAM4mS,EAAM,IAAIl+Q,WAAW1oB,GAE3B,OADAlE,OAAOkkP,eAAe4mD,EAAKujE,EAAOhtW,WAC3BypS,EAaT,SAASujE,EAAQv8S,EAAKy8S,EAAkBrqW,GAEtC,GAAmB,iBAAR4tD,EAAkB,CAC3B,GAAgC,iBAArBy8S,EACT,MAAM,IAAI39V,UACR,sEAGJ,OAAO49V,EAAY18S,GAErB,OAAO/4C,EAAK+4C,EAAKy8S,EAAkBrqW,GAKrC,SAAS6U,EAAMrV,EAAO6qW,EAAkBrqW,GACtC,GAAqB,iBAAVR,EACT,OAqHJ,SAAqB2lO,EAAQh+M,GACH,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKgjV,EAAOI,WAAWpjV,GACrB,MAAM,IAAIza,UAAU,qBAAuBya,GAG7C,MAAMnnB,EAAwC,EAA/Bo3O,EAAWjS,EAAQh+M,GAClC,IAAIy/Q,EAAMlG,EAAa1gS,GAEvB,MAAMwqW,EAAS5jE,EAAI5xO,MAAMmwK,EAAQh+M,GAE7BqjV,IAAWxqW,IAIb4mS,EAAMA,EAAIt/R,MAAM,EAAGkjW,IAGrB,OAAO5jE,EA1IEx+G,CAAW5oL,EAAO6qW,GAG3B,GAAIhzH,YAAYqB,OAAOl5O,GACrB,OAkJJ,SAAwBirW,GACtB,GAAIC,EAAWD,EAAW/hV,YAAa,CACrC,MAAMg5C,EAAO,IAAIh5C,WAAW+hV,GAC5B,OAAOxrE,EAAgBv9N,EAAKnM,OAAQmM,EAAKi3K,WAAYj3K,EAAK01K,YAE5D,OAAOuzH,EAAcF,GAvJZG,CAAcprW,GAGvB,GAAa,MAATA,EACF,MAAM,IAAIkN,UACR,yHACiDlN,GAIrD,GAAIkrW,EAAWlrW,EAAO63O,cACjB73O,GAASkrW,EAAWlrW,EAAM+1D,OAAQ8hL,aACrC,OAAO4nD,EAAgBz/R,EAAO6qW,EAAkBrqW,GAGlD,GAAiC,oBAAtB6qW,oBACNH,EAAWlrW,EAAOqrW,oBAClBrrW,GAASkrW,EAAWlrW,EAAM+1D,OAAQs1S,oBACrC,OAAO5rE,EAAgBz/R,EAAO6qW,EAAkBrqW,GAGlD,GAAqB,iBAAVR,EACT,MAAM,IAAIkN,UACR,yEAIJ,MAAMu2D,EAAUzjE,EAAMyjE,SAAWzjE,EAAMyjE,UACvC,GAAe,MAAXA,GAAmBA,IAAYzjE,EACjC,OAAO2qW,EAAOt1V,KAAKouD,EAASonS,EAAkBrqW,GAGhD,MAAM+mB,EAkJR,SAAqBuR,GACnB,GAAI6xU,EAAOW,SAASxyU,GAAM,CACxB,MAAM1wB,EAA4B,EAAtB20B,EAAQjE,EAAIt4B,QAClB4mS,EAAMlG,EAAa94R,GAEzB,OAAmB,IAAfg/R,EAAI5mS,QAIRs4B,EAAIopC,KAAKklO,EAAK,EAAG,EAAGh/R,GAHXg/R,EAOX,QAAmB7lS,IAAfu3B,EAAIt4B,OACN,MAA0B,iBAAfs4B,EAAIt4B,QAAuB+qW,EAAYzyU,EAAIt4B,QAC7C0gS,EAAa,GAEfiqE,EAAcryU,GAGvB,GAAiB,WAAbA,EAAIxxB,MAAqBrJ,MAAMC,QAAQ46B,EAAIx3B,MAC7C,OAAO6pW,EAAcryU,EAAIx3B,MAvKjBkqW,CAAWxrW,GACrB,GAAIunB,EAAG,OAAOA,EAEd,GAAsB,oBAAXijT,QAAgD,MAAtBA,OAAOihC,aACH,mBAA9BzrW,EAAMwqU,OAAOihC,aACtB,OAAOd,EAAOt1V,KAAKrV,EAAMwqU,OAAOihC,aAAa,UAAWZ,EAAkBrqW,GAG5E,MAAM,IAAI0M,UACR,yHACiDlN,GAqBrD,SAAS0rW,EAAY15U,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAI9kB,UAAU,0CACf,GAAI8kB,EAAO,EAChB,MAAM,IAAIs5S,WAAW,cAAgBt5S,EAAO,kCA4BhD,SAAS84U,EAAa94U,GAEpB,OADA05U,EAAW15U,GACJkvQ,EAAalvQ,EAAO,EAAI,EAAoB,EAAhB+K,EAAQ/K,IAwC7C,SAASm5U,EAAej5S,GACtB,MAAM1xD,EAAS0xD,EAAM1xD,OAAS,EAAI,EAA4B,EAAxBu8B,EAAQm1B,EAAM1xD,QAC9C4mS,EAAMlG,EAAa1gS,GACzB,IAAK,IAAInB,EAAI,EAAGA,EAAImB,EAAQnB,GAAK,EAC/B+nS,EAAI/nS,GAAgB,IAAX6yD,EAAM7yD,GAEjB,OAAO+nS,EAWT,SAAS3H,EAAiBvtO,EAAOinL,EAAY34O,GAC3C,GAAI24O,EAAa,GAAKjnL,EAAM0lL,WAAauB,EACvC,MAAM,IAAImyF,WAAW,wCAGvB,GAAIp5Q,EAAM0lL,WAAauB,GAAc34O,GAAU,GAC7C,MAAM,IAAI8qU,WAAW,wCAGvB,IAAIlkC,EAYJ,OAVEA,OADiB7lS,IAAf43O,QAAuC53O,IAAXf,EACxB,IAAI0oB,WAAWgpC,QACD3wD,IAAXf,EACH,IAAI0oB,WAAWgpC,EAAOinL,GAEtB,IAAIjwN,WAAWgpC,EAAOinL,EAAY34O,GAI1ClE,OAAOkkP,eAAe4mD,EAAKujE,EAAOhtW,WAE3BypS,EA4BT,SAASrqQ,EAASv8B,GAGhB,GAAIA,GAAUoqW,EACZ,MAAM,IAAIt/B,WAAW,0DACas/B,EAAaxqV,SAAS,IAAM,UAEhE,OAAgB,EAAT5f,EAuGT,SAASo3O,EAAYjS,EAAQh+M,GAC3B,GAAIgjV,EAAOW,SAAS3lI,GAClB,OAAOA,EAAOnlO,OAEhB,GAAIq3O,YAAYqB,OAAOvT,IAAWulI,EAAWvlI,EAAQkS,aACnD,OAAOlS,EAAOiS,WAEhB,GAAsB,iBAAXjS,EACT,MAAM,IAAIz4N,UACR,kGAC0By4N,GAI9B,MAAMv9N,EAAMu9N,EAAOnlO,OACbmrW,EAAaxxV,UAAU3Z,OAAS,IAAsB,IAAjB2Z,UAAU,GACrD,IAAKwxV,GAAqB,IAARvjW,EAAW,OAAO,EAGpC,IAAIwjW,GAAc,EAClB,OACE,OAAQjkV,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOvf,EACT,IAAK,OACL,IAAK,QACH,OAAOyjW,EAAYlmI,GAAQnlO,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAAN4H,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAO0jW,EAAcnmI,GAAQnlO,OAC/B,QACE,GAAIorW,EACF,OAAOD,GAAa,EAAIE,EAAYlmI,GAAQnlO,OAE9CmnB,GAAY,GAAKA,GAAU4D,cAC3BqgV,GAAc,GAMtB,SAASG,EAAcpkV,EAAU+jD,EAAOzE,GACtC,IAAI2kS,GAAc,EAclB,SALcrqW,IAAVmqE,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQvuE,KAAKqD,OACf,MAAO,GAOT,SAJYe,IAAR0lE,GAAqBA,EAAM9pE,KAAKqD,UAClCymE,EAAM9pE,KAAKqD,QAGTymE,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTyE,KAAW,GAGT,MAAO,GAKT,IAFK/jD,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOqkV,EAAS7uW,KAAMuuE,EAAOzE,GAE/B,IAAK,OACL,IAAK,QACH,OAAOglS,EAAU9uW,KAAMuuE,EAAOzE,GAEhC,IAAK,QACH,OAAOilS,EAAW/uW,KAAMuuE,EAAOzE,GAEjC,IAAK,SACL,IAAK,SACH,OAAOklS,EAAYhvW,KAAMuuE,EAAOzE,GAElC,IAAK,SACH,OAAOmlS,EAAYjvW,KAAMuuE,EAAOzE,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOolS,EAAalvW,KAAMuuE,EAAOzE,GAEnC,QACE,GAAI2kS,EAAa,MAAM,IAAI1+V,UAAU,qBAAuBya,GAC5DA,GAAYA,EAAW,IAAI4D,cAC3BqgV,GAAc,GAatB,SAASxwL,EAAM7zJ,EAAGxV,EAAGuwC,GACnB,MAAMjjD,EAAIkoB,EAAExV,GACZwV,EAAExV,GAAKwV,EAAE+6B,GACT/6B,EAAE+6B,GAAKjjD,EA4IT,SAASitW,EAAsBv2S,EAAQ5wD,EAAKg0O,EAAYxxN,EAAUypQ,GAEhE,GAAsB,IAAlBr7N,EAAOv1D,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAf24O,GACTxxN,EAAWwxN,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAGZoyH,EADJpyH,GAAcA,KAGZA,EAAai4C,EAAM,EAAKr7N,EAAOv1D,OAAS,GAItC24O,EAAa,IAAGA,EAAapjL,EAAOv1D,OAAS24O,GAC7CA,GAAcpjL,EAAOv1D,OAAQ,CAC/B,GAAI4wR,EAAK,OAAQ,EACZj4C,EAAapjL,EAAOv1D,OAAS,OAC7B,GAAI24O,EAAa,EAAG,CACzB,IAAIi4C,EACC,OAAQ,EADJj4C,EAAa,EAUxB,GALmB,iBAARh0O,IACTA,EAAMwlW,EAAOt1V,KAAKlQ,EAAKwiB,IAIrBgjV,EAAOW,SAASnmW,GAElB,OAAmB,IAAfA,EAAI3E,QACE,EAEH+rW,EAAax2S,EAAQ5wD,EAAKg0O,EAAYxxN,EAAUypQ,GAClD,GAAmB,iBAARjsR,EAEhB,OADAA,GAAY,IACgC,mBAAjC+jB,WAAWvrB,UAAUwI,QAC1BirR,EACKloQ,WAAWvrB,UAAUwI,QAAQtI,KAAKk4D,EAAQ5wD,EAAKg0O,GAE/CjwN,WAAWvrB,UAAUkzB,YAAYhzB,KAAKk4D,EAAQ5wD,EAAKg0O,GAGvDozH,EAAax2S,EAAQ,CAAC5wD,GAAMg0O,EAAYxxN,EAAUypQ,GAG3D,MAAM,IAAIlkR,UAAU,wCAGtB,SAASq/V,EAAc9nW,EAAKU,EAAKg0O,EAAYxxN,EAAUypQ,GACrD,IA0BI/xR,EA1BAmtW,EAAY,EACZC,EAAYhoW,EAAIjE,OAChBksW,EAAYvnW,EAAI3E,OAEpB,QAAiBe,IAAbomB,IAEe,UADjBA,EAAWlZ,OAAOkZ,GAAU4D,gBACY,UAAb5D,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAIljB,EAAIjE,OAAS,GAAK2E,EAAI3E,OAAS,EACjC,OAAQ,EAEVgsW,EAAY,EACZC,GAAa,EACbC,GAAa,EACbvzH,GAAc,EAIlB,SAASllO,EAAMmzR,EAAK/nS,GAClB,OAAkB,IAAdmtW,EACKplE,EAAI/nS,GAEJ+nS,EAAIulE,aAAattW,EAAImtW,GAKhC,GAAIp7E,EAAK,CACP,IAAIw7E,GAAc,EAClB,IAAKvtW,EAAI85O,EAAY95O,EAAIotW,EAAWptW,IAClC,GAAI4U,EAAKxP,EAAKpF,KAAO4U,EAAK9O,GAAqB,IAAhBynW,EAAoB,EAAIvtW,EAAIutW,IAEzD,IADoB,IAAhBA,IAAmBA,EAAavtW,GAChCA,EAAIutW,EAAa,IAAMF,EAAW,OAAOE,EAAaJ,OAEtC,IAAhBI,IAAmBvtW,GAAKA,EAAIutW,GAChCA,GAAc,OAKlB,IADIzzH,EAAauzH,EAAYD,IAAWtzH,EAAaszH,EAAYC,GAC5DrtW,EAAI85O,EAAY95O,GAAK,EAAGA,IAAK,CAChC,IAAIu3B,GAAQ,EACZ,IAAK,IAAIniB,EAAI,EAAGA,EAAIi4V,EAAWj4V,IAC7B,GAAIR,EAAKxP,EAAKpF,EAAIoV,KAAOR,EAAK9O,EAAKsP,GAAI,CACrCmiB,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAOv3B,EAItB,OAAQ,EAeV,SAASwtW,EAAUzlE,EAAKzhE,EAAQv2M,EAAQ5uB,GACtC4uB,EAAStK,OAAOsK,IAAW,EAC3B,MAAM09U,EAAY1lE,EAAI5mS,OAAS4uB,EAC1B5uB,GAGHA,EAASskB,OAAOtkB,IACHssW,IACXtsW,EAASssW,GAJXtsW,EAASssW,EAQX,MAAMC,EAASpnI,EAAOnlO,OAKtB,IAAInB,EACJ,IAJImB,EAASusW,EAAS,IACpBvsW,EAASusW,EAAS,GAGf1tW,EAAI,EAAGA,EAAImB,IAAUnB,EAAG,CAC3B,MAAM2tW,EAASv3V,SAASkwN,EAAO5hN,OAAW,EAAJ1kB,EAAO,GAAI,IACjD,GAAIksW,EAAYyB,GAAS,OAAO3tW,EAChC+nS,EAAIh4Q,EAAS/vB,GAAK2tW,EAEpB,OAAO3tW,EAGT,SAAS4tW,EAAW7lE,EAAKzhE,EAAQv2M,EAAQ5uB,GACvC,OAAO0sW,EAAWrB,EAAYlmI,EAAQyhE,EAAI5mS,OAAS4uB,GAASg4Q,EAAKh4Q,EAAQ5uB,GAG3E,SAAS2sW,EAAY/lE,EAAKzhE,EAAQv2M,EAAQ5uB,GACxC,OAAO0sW,EAypCT,SAAuBpnV,GACrB,MAAMsnV,EAAY,GAClB,IAAK,IAAI/tW,EAAI,EAAGA,EAAIymB,EAAItlB,SAAUnB,EAEhC+tW,EAAU7nW,KAAyB,IAApBugB,EAAImoD,WAAW5uE,IAEhC,OAAO+tW,EA/pCWC,CAAa1nI,GAASyhE,EAAKh4Q,EAAQ5uB,GAGvD,SAAS8sW,EAAalmE,EAAKzhE,EAAQv2M,EAAQ5uB,GACzC,OAAO0sW,EAAWpB,EAAcnmI,GAASyhE,EAAKh4Q,EAAQ5uB,GAGxD,SAAS+sW,EAAWnmE,EAAKzhE,EAAQv2M,EAAQ5uB,GACvC,OAAO0sW,EA0pCT,SAAyBpnV,EAAKgzB,GAC5B,IAAInzC,EAAGyzN,EAAID,EACX,MAAMi0I,EAAY,GAClB,IAAK,IAAI/tW,EAAI,EAAGA,EAAIymB,EAAItlB,WACjBs4C,GAAS,GAAK,KADaz5C,EAGhCsG,EAAImgB,EAAImoD,WAAW5uE,GACnB+5N,EAAKzzN,GAAK,EACVwzN,EAAKxzN,EAAI,IACTynW,EAAU7nW,KAAK4zN,GACfi0I,EAAU7nW,KAAK6zN,GAGjB,OAAOg0I,EAvqCWI,CAAe7nI,EAAQyhE,EAAI5mS,OAAS4uB,GAASg4Q,EAAKh4Q,EAAQ5uB,GA+E9E,SAAS4rW,EAAahlE,EAAK17N,EAAOzE,GAChC,OAAc,IAAVyE,GAAezE,IAAQmgO,EAAI5mS,OACtBqwE,EAAOs5R,cAAc/iE,GAErBv2N,EAAOs5R,cAAc/iE,EAAIt/R,MAAM4jE,EAAOzE,IAIjD,SAASglS,EAAW7kE,EAAK17N,EAAOzE,GAC9BA,EAAMvoE,KAAKqa,IAAIquR,EAAI5mS,OAAQymE,GAC3B,MAAMrrD,EAAM,GAEZ,IAAIvc,EAAIqsE,EACR,KAAOrsE,EAAI4nE,GAAK,CACd,MAAMwmS,EAAYrmE,EAAI/nS,GACtB,IAAIquW,EAAY,KACZC,EAAoBF,EAAY,IAChC,EACCA,EAAY,IACT,EACCA,EAAY,IACT,EACA,EAEZ,GAAIpuW,EAAIsuW,GAAoB1mS,EAAK,CAC/B,IAAI2mS,EAAYC,EAAWC,EAAYC,EAEvC,OAAQJ,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EACHG,EAAaxmE,EAAI/nS,EAAI,GACO,MAAV,IAAbuuW,KACHG,GAA6B,GAAZN,IAAqB,EAAoB,GAAbG,EACzCG,EAAgB,MAClBL,EAAYK,IAGhB,MACF,KAAK,EACHH,EAAaxmE,EAAI/nS,EAAI,GACrBwuW,EAAYzmE,EAAI/nS,EAAI,GACQ,MAAV,IAAbuuW,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZN,IAAoB,IAAoB,GAAbG,IAAsB,EAAmB,GAAZC,EACrEE,EAAgB,OAAUA,EAAgB,OAAUA,EAAgB,SACtEL,EAAYK,IAGhB,MACF,KAAK,EACHH,EAAaxmE,EAAI/nS,EAAI,GACrBwuW,EAAYzmE,EAAI/nS,EAAI,GACpByuW,EAAa1mE,EAAI/nS,EAAI,GACO,MAAV,IAAbuuW,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZN,IAAoB,IAAqB,GAAbG,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,EAClGC,EAAgB,OAAUA,EAAgB,UAC5CL,EAAYK,KAMJ,OAAdL,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACb9xV,EAAIrW,KAAKmoW,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvB9xV,EAAIrW,KAAKmoW,GACTruW,GAAKsuW,EAGP,OAQF,SAAgCK,GAC9B,MAAM5lW,EAAM4lW,EAAWxtW,OACvB,GAAI4H,GAAO6lW,EACT,OAAOx/V,OAAO4a,aAAa9b,MAAMkB,OAAQu/V,GAI3C,IAAIpyV,EAAM,GACNvc,EAAI,EACR,KAAOA,EAAI+I,GACTwT,GAAOnN,OAAO4a,aAAa9b,MACzBkB,OACAu/V,EAAWlmW,MAAMzI,EAAGA,GAAK4uW,IAG7B,OAAOryV,EAvBAsyV,CAAsBtyV,GA19B/B+uV,EAAOwD,oBAUP,WAEE,IACE,MAAM1pW,EAAM,IAAIykB,WAAW,GACrBklV,EAAQ,CAAEC,IAAK,WAAc,OAAO,KAG1C,OAFA/xW,OAAOkkP,eAAe4tH,EAAOllV,WAAWvrB,WACxCrB,OAAOkkP,eAAe/7O,EAAK2pW,GACN,KAAd3pW,EAAI4pW,MACX,MAAOnyW,GACP,OAAO,GAnBkBoyW,GAExB3D,EAAOwD,qBAA0C,oBAAZtpW,SACb,mBAAlBA,QAAQuO,OACjBvO,QAAQuO,MACN,iJAkBJ9W,OAAOqgK,eAAeguM,EAAOhtW,UAAW,SAAU,CAChDi/J,YAAY,EACZjhJ,IAAK,WACH,GAAKgvV,EAAOW,SAASnuW,MACrB,OAAOA,KAAK44D,UAIhBz5D,OAAOqgK,eAAeguM,EAAOhtW,UAAW,SAAU,CAChDi/J,YAAY,EACZjhJ,IAAK,WACH,GAAKgvV,EAAOW,SAASnuW,MACrB,OAAOA,KAAKg8O,cAqChBwxH,EAAO4D,SAAW,KA8DlB5D,EAAOt1V,KAAO,SAAUrV,EAAO6qW,EAAkBrqW,GAC/C,OAAO6U,EAAKrV,EAAO6qW,EAAkBrqW,IAKvClE,OAAOkkP,eAAemqH,EAAOhtW,UAAWurB,WAAWvrB,WACnDrB,OAAOkkP,eAAemqH,EAAQzhV,YA8B9ByhV,EAAO6D,MAAQ,SAAUx8U,EAAM4xD,EAAMj8D,GACnC,OArBF,SAAgBqK,EAAM4xD,EAAMj8D,GAE1B,OADA+jV,EAAW15U,GACPA,GAAQ,EACHkvQ,EAAalvQ,QAETzwB,IAATqiF,EAIyB,iBAAbj8D,EACVu5Q,EAAalvQ,GAAM4xD,KAAKA,EAAMj8D,GAC9Bu5Q,EAAalvQ,GAAM4xD,KAAKA,GAEvBs9M,EAAalvQ,GAQbw8U,CAAMx8U,EAAM4xD,EAAMj8D,IAW3BgjV,EAAOG,YAAc,SAAU94U,GAC7B,OAAO84U,EAAY94U,IAKrB24U,EAAO8D,gBAAkB,SAAUz8U,GACjC,OAAO84U,EAAY94U,IA8GrB24U,EAAOW,SAAW,SAAmB/jV,GACnC,OAAY,MAALA,IAA6B,IAAhBA,EAAEmnV,WACpBnnV,IAAMojV,EAAOhtW,WAGjBgtW,EAAOn6D,QAAU,SAAkBv4R,EAAGsP,GAGpC,GAFI2jV,EAAWjzV,EAAGiR,cAAajR,EAAI0yV,EAAOt1V,KAAK4C,EAAGA,EAAEmX,OAAQnX,EAAE2/N,aAC1DszH,EAAW3jV,EAAG2B,cAAa3B,EAAIojV,EAAOt1V,KAAKkS,EAAGA,EAAE6H,OAAQ7H,EAAEqwN,cACzD+yH,EAAOW,SAASrzV,KAAO0yV,EAAOW,SAAS/jV,GAC1C,MAAM,IAAIra,UACR,yEAIJ,GAAI+K,IAAMsP,EAAG,OAAO,EAEpB,IAAIuD,EAAI7S,EAAEzX,OACNuqB,EAAIxD,EAAE/mB,OAEV,IAAK,IAAInB,EAAI,EAAG+I,EAAM1J,KAAKqa,IAAI+R,EAAGC,GAAI1rB,EAAI+I,IAAO/I,EAC/C,GAAI4Y,EAAE5Y,KAAOkoB,EAAEloB,GAAI,CACjByrB,EAAI7S,EAAE5Y,GACN0rB,EAAIxD,EAAEloB,GACN,MAIJ,OAAIyrB,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GAGT6/U,EAAOI,WAAa,SAAqBpjV,GACvC,OAAQlZ,OAAOkZ,GAAU4D,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIbo/U,EAAOnlW,OAAS,SAAiB6qF,EAAM7vF,GACrC,IAAKvC,MAAMC,QAAQmyF,GACjB,MAAM,IAAInjF,UAAU,+CAGtB,GAAoB,IAAhBmjF,EAAK7vF,OACP,OAAOmqW,EAAO6D,MAAM,GAGtB,IAAInvW,EACJ,QAAekC,IAAXf,EAEF,IADAA,EAAS,EACJnB,EAAI,EAAGA,EAAIgxF,EAAK7vF,SAAUnB,EAC7BmB,GAAU6vF,EAAKhxF,GAAGmB,OAItB,MAAMu1D,EAAS40S,EAAOG,YAAYtqW,GAClC,IAAIihD,EAAM,EACV,IAAKpiD,EAAI,EAAGA,EAAIgxF,EAAK7vF,SAAUnB,EAAG,CAChC,IAAI+nS,EAAM/2M,EAAKhxF,GACf,GAAI6rW,EAAW9jE,EAAKl+Q,YACdu4B,EAAM2lP,EAAI5mS,OAASu1D,EAAOv1D,QACvBmqW,EAAOW,SAASlkE,KAAMA,EAAMujE,EAAOt1V,KAAK+xR,IAC7CA,EAAIllO,KAAKnM,EAAQtU,IAEjBv4B,WAAWvrB,UAAUse,IAAIpe,KACvBk4D,EACAqxO,EACA3lP,OAGC,KAAKkpT,EAAOW,SAASlkE,GAC1B,MAAM,IAAIl6R,UAAU,+CAEpBk6R,EAAIllO,KAAKnM,EAAQtU,GAEnBA,GAAO2lP,EAAI5mS,OAEb,OAAOu1D,GAkDT40S,EAAO/yH,WAAaA,EA8EpB+yH,EAAOhtW,UAAU+wW,WAAY,EAQ7B/D,EAAOhtW,UAAUgxW,OAAS,WACxB,MAAMvmW,EAAMjL,KAAKqD,OACjB,GAAI4H,EAAM,GAAM,EACd,MAAM,IAAIkjU,WAAW,6CAEvB,IAAK,IAAIjsU,EAAI,EAAGA,EAAI+I,EAAK/I,GAAK,EAC5B+7K,EAAKj+K,KAAMkC,EAAGA,EAAI,GAEpB,OAAOlC,MAGTwtW,EAAOhtW,UAAUixW,OAAS,WACxB,MAAMxmW,EAAMjL,KAAKqD,OACjB,GAAI4H,EAAM,GAAM,EACd,MAAM,IAAIkjU,WAAW,6CAEvB,IAAK,IAAIjsU,EAAI,EAAGA,EAAI+I,EAAK/I,GAAK,EAC5B+7K,EAAKj+K,KAAMkC,EAAGA,EAAI,GAClB+7K,EAAKj+K,KAAMkC,EAAI,EAAGA,EAAI,GAExB,OAAOlC,MAGTwtW,EAAOhtW,UAAUkxW,OAAS,WACxB,MAAMzmW,EAAMjL,KAAKqD,OACjB,GAAI4H,EAAM,GAAM,EACd,MAAM,IAAIkjU,WAAW,6CAEvB,IAAK,IAAIjsU,EAAI,EAAGA,EAAI+I,EAAK/I,GAAK,EAC5B+7K,EAAKj+K,KAAMkC,EAAGA,EAAI,GAClB+7K,EAAKj+K,KAAMkC,EAAI,EAAGA,EAAI,GACtB+7K,EAAKj+K,KAAMkC,EAAI,EAAGA,EAAI,GACtB+7K,EAAKj+K,KAAMkC,EAAI,EAAGA,EAAI,GAExB,OAAOlC,MAGTwtW,EAAOhtW,UAAUyiB,SAAW,WAC1B,MAAM5f,EAASrD,KAAKqD,OACpB,OAAe,IAAXA,EAAqB,GACA,IAArB2Z,UAAU3Z,OAAqByrW,EAAU9uW,KAAM,EAAGqD,GAC/CurW,EAAax+V,MAAMpQ,KAAMgd,YAGlCwwV,EAAOhtW,UAAUyiE,eAAiBuqS,EAAOhtW,UAAUyiB,SAEnDuqV,EAAOhtW,UAAUgiD,OAAS,SAAiBp4B,GACzC,IAAKojV,EAAOW,SAAS/jV,GAAI,MAAM,IAAIra,UAAU,6BAC7C,OAAI/P,OAASoqB,GACsB,IAA5BojV,EAAOn6D,QAAQrzS,KAAMoqB,IAG9BojV,EAAOhtW,UAAUmxW,QAAU,WACzB,IAAIhpV,EAAM,GACV,MAAMxc,EAAM7M,EAAQ,GAGpB,OAFAqpB,EAAM3oB,KAAKijB,SAAS,MAAO,EAAG9W,GAAK5C,QAAQ,UAAW,OAAOqgB,OACzD5pB,KAAKqD,OAAS8I,IAAKwc,GAAO,SACvB,WAAaA,EAAM,KAExB4kV,IACFC,EAAOhtW,UAAU+sW,GAAuBC,EAAOhtW,UAAUmxW,SAG3DnE,EAAOhtW,UAAU6yS,QAAU,SAAkB5lS,EAAQ8gE,EAAOzE,EAAK8nS,EAAWC,GAI1E,GAHI9D,EAAWtgW,EAAQse,cACrBte,EAAS+/V,EAAOt1V,KAAKzK,EAAQA,EAAOwkB,OAAQxkB,EAAOgtO,cAEhD+yH,EAAOW,SAAS1gW,GACnB,MAAM,IAAIsC,UACR,wFAC2BtC,GAiB/B,QAbcrJ,IAAVmqE,IACFA,EAAQ,QAEEnqE,IAAR0lE,IACFA,EAAMr8D,EAASA,EAAOpK,OAAS,QAEfe,IAAdwtW,IACFA,EAAY,QAEExtW,IAAZytW,IACFA,EAAU7xW,KAAKqD,QAGbkrE,EAAQ,GAAKzE,EAAMr8D,EAAOpK,QAAUuuW,EAAY,GAAKC,EAAU7xW,KAAKqD,OACtE,MAAM,IAAI8qU,WAAW,sBAGvB,GAAIyjC,GAAaC,GAAWtjS,GAASzE,EACnC,OAAO,EAET,GAAI8nS,GAAaC,EACf,OAAQ,EAEV,GAAItjS,GAASzE,EACX,OAAO,EAQT,GAAI9pE,OAASyN,EAAQ,OAAO,EAE5B,IAAIkgB,GAJJkkV,KAAa,IADbD,KAAe,GAMXhkV,GAPJk8C,KAAS,IADTyE,KAAW,GASX,MAAMtjE,EAAM1J,KAAKqa,IAAI+R,EAAGC,GAElBkkV,EAAW9xW,KAAK2K,MAAMinW,EAAWC,GACjCE,EAAatkW,EAAO9C,MAAM4jE,EAAOzE,GAEvC,IAAK,IAAI5nE,EAAI,EAAGA,EAAI+I,IAAO/I,EACzB,GAAI4vW,EAAS5vW,KAAO6vW,EAAW7vW,GAAI,CACjCyrB,EAAImkV,EAAS5vW,GACb0rB,EAAImkV,EAAW7vW,GACf,MAIJ,OAAIyrB,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GA4HT6/U,EAAOhtW,UAAUw3B,SAAW,SAAmBhwB,EAAKg0O,EAAYxxN,GAC9D,OAAoD,IAA7CxqB,KAAKgJ,QAAQhB,EAAKg0O,EAAYxxN,IAGvCgjV,EAAOhtW,UAAUwI,QAAU,SAAkBhB,EAAKg0O,EAAYxxN,GAC5D,OAAO2kV,EAAqBnvW,KAAMgI,EAAKg0O,EAAYxxN,GAAU,IAG/DgjV,EAAOhtW,UAAUkzB,YAAc,SAAsB1rB,EAAKg0O,EAAYxxN,GACpE,OAAO2kV,EAAqBnvW,KAAMgI,EAAKg0O,EAAYxxN,GAAU,IA6C/DgjV,EAAOhtW,UAAU63D,MAAQ,SAAgBmwK,EAAQv2M,EAAQ5uB,EAAQmnB,GAE/D,QAAepmB,IAAX6tB,EACFzH,EAAW,OACXnnB,EAASrD,KAAKqD,OACd4uB,EAAS,OAEJ,QAAe7tB,IAAXf,GAA0C,iBAAX4uB,EACxCzH,EAAWyH,EACX5uB,EAASrD,KAAKqD,OACd4uB,EAAS,MAEJ,KAAI2tI,SAAS3tI,GAUlB,MAAM,IAAIjzB,MACR,2EAVFizB,KAAoB,EAChB2tI,SAASv8J,IACXA,KAAoB,OACHe,IAAbomB,IAAwBA,EAAW,UAEvCA,EAAWnnB,EACXA,OAASe,GAQb,MAAMurW,EAAY3vW,KAAKqD,OAAS4uB,EAGhC,SAFe7tB,IAAXf,GAAwBA,EAASssW,KAAWtsW,EAASssW,GAEpDnnI,EAAOnlO,OAAS,IAAMA,EAAS,GAAK4uB,EAAS,IAAOA,EAASjyB,KAAKqD,OACrE,MAAM,IAAI8qU,WAAW,0CAGlB3jT,IAAUA,EAAW,QAE1B,IAAIikV,GAAc,EAClB,OACE,OAAQjkV,GACN,IAAK,MACH,OAAOklV,EAAS1vW,KAAMwoO,EAAQv2M,EAAQ5uB,GAExC,IAAK,OACL,IAAK,QACH,OAAOysW,EAAU9vW,KAAMwoO,EAAQv2M,EAAQ5uB,GAEzC,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO2sW,EAAWhwW,KAAMwoO,EAAQv2M,EAAQ5uB,GAE1C,IAAK,SAEH,OAAO8sW,EAAYnwW,KAAMwoO,EAAQv2M,EAAQ5uB,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO+sW,EAAUpwW,KAAMwoO,EAAQv2M,EAAQ5uB,GAEzC,QACE,GAAIorW,EAAa,MAAM,IAAI1+V,UAAU,qBAAuBya,GAC5DA,GAAY,GAAKA,GAAU4D,cAC3BqgV,GAAc,IAKtBjB,EAAOhtW,UAAUw9Q,OAAS,WACxB,MAAO,CACL7zQ,KAAM,SACNhG,KAAMrD,MAAMN,UAAUmK,MAAMjK,KAAKV,KAAKs/J,MAAQt/J,KAAM,KA2FxD,MAAM8wW,EAAuB,KAoB7B,SAAS/B,EAAY9kE,EAAK17N,EAAOzE,GAC/B,IAAIvqD,EAAM,GACVuqD,EAAMvoE,KAAKqa,IAAIquR,EAAI5mS,OAAQymE,GAE3B,IAAK,IAAI5nE,EAAIqsE,EAAOrsE,EAAI4nE,IAAO5nE,EAC7Bqd,GAAOjO,OAAO4a,aAAsB,IAAT+9Q,EAAI/nS,IAEjC,OAAOqd,EAGT,SAASyvV,EAAa/kE,EAAK17N,EAAOzE,GAChC,IAAIvqD,EAAM,GACVuqD,EAAMvoE,KAAKqa,IAAIquR,EAAI5mS,OAAQymE,GAE3B,IAAK,IAAI5nE,EAAIqsE,EAAOrsE,EAAI4nE,IAAO5nE,EAC7Bqd,GAAOjO,OAAO4a,aAAa+9Q,EAAI/nS,IAEjC,OAAOqd,EAGT,SAASsvV,EAAU5kE,EAAK17N,EAAOzE,GAC7B,MAAM7+D,EAAMg/R,EAAI5mS,SAEXkrE,GAASA,EAAQ,KAAGA,EAAQ,KAC5BzE,GAAOA,EAAM,GAAKA,EAAM7+D,KAAK6+D,EAAM7+D,GAExC,IAAIyzE,EAAM,GACV,IAAK,IAAIx8E,EAAIqsE,EAAOrsE,EAAI4nE,IAAO5nE,EAC7Bw8E,GAAOszR,EAAoB/nE,EAAI/nS,IAEjC,OAAOw8E,EAGT,SAASwwR,EAAcjlE,EAAK17N,EAAOzE,GACjC,MAAM4lQ,EAAQzlC,EAAIt/R,MAAM4jE,EAAOzE,GAC/B,IAAIrrD,EAAM,GAEV,IAAK,IAAIvc,EAAI,EAAGA,EAAIwtU,EAAMrsU,OAAS,EAAGnB,GAAK,EACzCuc,GAAOnN,OAAO4a,aAAawjT,EAAMxtU,GAAqB,IAAfwtU,EAAMxtU,EAAI,IAEnD,OAAOuc,EAkCT,SAASwzV,EAAahgV,EAAQ9J,EAAK9kB,GACjC,GAAK4uB,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAIk8S,WAAW,sBAC3D,GAAIl8S,EAAS9J,EAAM9kB,EAAQ,MAAM,IAAI8qU,WAAW,yCA0QlD,SAAS+jC,EAAUjoE,EAAKpnS,EAAOovB,EAAQ9J,EAAKhc,EAAKyP,GAC/C,IAAK4xV,EAAOW,SAASlkE,GAAM,MAAM,IAAIl6R,UAAU,+CAC/C,GAAIlN,EAAQsJ,GAAOtJ,EAAQ+Y,EAAK,MAAM,IAAIuyT,WAAW,qCACrD,GAAIl8S,EAAS9J,EAAM8hR,EAAI5mS,OAAQ,MAAM,IAAI8qU,WAAW,sBAgGtD,SAASgkC,EAAgBloE,EAAKpnS,EAAOovB,EAAQrW,EAAKzP,GAChDimW,EAAWvvW,EAAO+Y,EAAKzP,EAAK89R,EAAKh4Q,EAAQ,GAEzC,IAAI+pM,EAAKr0M,OAAO9kB,EAAQwvW,OAAO,aAC/BpoE,EAAIh4Q,KAAY+pM,EAChBA,IAAW,EACXiuE,EAAIh4Q,KAAY+pM,EAChBA,IAAW,EACXiuE,EAAIh4Q,KAAY+pM,EAChBA,IAAW,EACXiuE,EAAIh4Q,KAAY+pM,EAChB,IAAIC,EAAKt0M,OAAO9kB,GAASwvW,OAAO,IAAMA,OAAO,aAQ7C,OAPApoE,EAAIh4Q,KAAYgqM,EAChBA,IAAW,EACXguE,EAAIh4Q,KAAYgqM,EAChBA,IAAW,EACXguE,EAAIh4Q,KAAYgqM,EAChBA,IAAW,EACXguE,EAAIh4Q,KAAYgqM,EACThqM,EAGT,SAASqgV,EAAgBroE,EAAKpnS,EAAOovB,EAAQrW,EAAKzP,GAChDimW,EAAWvvW,EAAO+Y,EAAKzP,EAAK89R,EAAKh4Q,EAAQ,GAEzC,IAAI+pM,EAAKr0M,OAAO9kB,EAAQwvW,OAAO,aAC/BpoE,EAAIh4Q,EAAS,GAAK+pM,EAClBA,IAAW,EACXiuE,EAAIh4Q,EAAS,GAAK+pM,EAClBA,IAAW,EACXiuE,EAAIh4Q,EAAS,GAAK+pM,EAClBA,IAAW,EACXiuE,EAAIh4Q,EAAS,GAAK+pM,EAClB,IAAIC,EAAKt0M,OAAO9kB,GAASwvW,OAAO,IAAMA,OAAO,aAQ7C,OAPApoE,EAAIh4Q,EAAS,GAAKgqM,EAClBA,IAAW,EACXguE,EAAIh4Q,EAAS,GAAKgqM,EAClBA,IAAW,EACXguE,EAAIh4Q,EAAS,GAAKgqM,EAClBA,IAAW,EACXguE,EAAIh4Q,GAAUgqM,EACPhqM,EAAS,EAmHlB,SAASsgV,EAActoE,EAAKpnS,EAAOovB,EAAQ9J,EAAKhc,EAAKyP,GACnD,GAAIqW,EAAS9J,EAAM8hR,EAAI5mS,OAAQ,MAAM,IAAI8qU,WAAW,sBACpD,GAAIl8S,EAAS,EAAG,MAAM,IAAIk8S,WAAW,sBAGvC,SAASqkC,EAAYvoE,EAAKpnS,EAAOovB,EAAQmnN,EAAcq5H,GAOrD,OANA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GACHF,EAAatoE,EAAKpnS,EAAOovB,EAAQ,GAEnCq7U,EAAQj1S,MAAM4xO,EAAKpnS,EAAOovB,EAAQmnN,EAAc,GAAI,GAC7CnnN,EAAS,EAWlB,SAAS6nN,EAAamwD,EAAKpnS,EAAOovB,EAAQmnN,EAAcq5H,GAOtD,OANA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GACHF,EAAatoE,EAAKpnS,EAAOovB,EAAQ,GAEnCq7U,EAAQj1S,MAAM4xO,EAAKpnS,EAAOovB,EAAQmnN,EAAc,GAAI,GAC7CnnN,EAAS,EAxkBlBu7U,EAAOhtW,UAAUmK,MAAQ,SAAgB4jE,EAAOzE,GAC9C,MAAM7+D,EAAMjL,KAAKqD,QACjBkrE,IAAUA,GAGE,GACVA,GAAStjE,GACG,IAAGsjE,EAAQ,GACdA,EAAQtjE,IACjBsjE,EAAQtjE,IANV6+D,OAAc1lE,IAAR0lE,EAAoB7+D,IAAQ6+D,GASxB,GACRA,GAAO7+D,GACG,IAAG6+D,EAAM,GACVA,EAAM7+D,IACf6+D,EAAM7+D,GAGJ6+D,EAAMyE,IAAOzE,EAAMyE,GAEvB,MAAMmkS,EAAS1yW,KAAK2yW,SAASpkS,EAAOzE,GAIpC,OAFA3qE,OAAOkkP,eAAeqvH,EAAQlF,EAAOhtW,WAE9BkyW,GAWTlF,EAAOhtW,UAAUoyW,WACjBpF,EAAOhtW,UAAUqyW,WAAa,SAAqB5gV,EAAQwoN,EAAYg4H,GACrExgV,KAAoB,EACpBwoN,KAA4B,EACvBg4H,GAAUR,EAAYhgV,EAAQwoN,EAAYz6O,KAAKqD,QAEpD,IAAI2E,EAAMhI,KAAKiyB,GACX6gV,EAAM,EACN5wW,EAAI,EACR,OAASA,EAAIu4O,IAAeq4H,GAAO,MACjC9qW,GAAOhI,KAAKiyB,EAAS/vB,GAAK4wW,EAG5B,OAAO9qW,GAGTwlW,EAAOhtW,UAAUuyW,WACjBvF,EAAOhtW,UAAUwyW,WAAa,SAAqB/gV,EAAQwoN,EAAYg4H,GACrExgV,KAAoB,EACpBwoN,KAA4B,EACvBg4H,GACHR,EAAYhgV,EAAQwoN,EAAYz6O,KAAKqD,QAGvC,IAAI2E,EAAMhI,KAAKiyB,IAAWwoN,GACtBq4H,EAAM,EACV,KAAOr4H,EAAa,IAAMq4H,GAAO,MAC/B9qW,GAAOhI,KAAKiyB,IAAWwoN,GAAcq4H,EAGvC,OAAO9qW,GAGTwlW,EAAOhtW,UAAUq3O,UACjB21H,EAAOhtW,UAAUyyW,UAAY,SAAoBhhV,EAAQwgV,GAGvD,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCrD,KAAKiyB,IAGdu7U,EAAOhtW,UAAU0yW,aACjB1F,EAAOhtW,UAAU2yW,aAAe,SAAuBlhV,EAAQwgV,GAG7D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCrD,KAAKiyB,GAAWjyB,KAAKiyB,EAAS,IAAM,GAG7Cu7U,EAAOhtW,UAAU4yW,aACjB5F,EAAOhtW,UAAUgvW,aAAe,SAAuBv9U,EAAQwgV,GAG7D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACnCrD,KAAKiyB,IAAW,EAAKjyB,KAAKiyB,EAAS,IAG7Cu7U,EAAOhtW,UAAU6yW,aACjB7F,EAAOhtW,UAAU8yW,aAAe,SAAuBrhV,EAAQwgV,GAI7D,OAHAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,SAElCrD,KAAKiyB,GACTjyB,KAAKiyB,EAAS,IAAM,EACpBjyB,KAAKiyB,EAAS,IAAM,IACD,SAAnBjyB,KAAKiyB,EAAS,IAGrBu7U,EAAOhtW,UAAU+yW,aACjB/F,EAAOhtW,UAAUgzW,aAAe,SAAuBvhV,EAAQwgV,GAI7D,OAHAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QAEpB,SAAfrD,KAAKiyB,IACTjyB,KAAKiyB,EAAS,IAAM,GACrBjyB,KAAKiyB,EAAS,IAAM,EACrBjyB,KAAKiyB,EAAS,KAGlBu7U,EAAOhtW,UAAUizW,gBAAkBC,GAAmB,SAA0BzhV,GAE9E0hV,EADA1hV,KAAoB,EACG,UACvB,MAAM08F,EAAQ3uH,KAAKiyB,GACb28F,EAAO5uH,KAAKiyB,EAAS,QACb7tB,IAAVuqH,QAAgCvqH,IAATwqH,GACzBglP,EAAY3hV,EAAQjyB,KAAKqD,OAAS,GAGpC,MAAM24N,EAAKrtG,EACQ,IAAjB3uH,OAAOiyB,GACU,MAAjBjyB,OAAOiyB,GACPjyB,OAAOiyB,GAAU,GAAK,GAElBgqM,EAAKj8N,OAAOiyB,GACC,IAAjBjyB,OAAOiyB,GACU,MAAjBjyB,OAAOiyB,GACP28F,EAAO,GAAK,GAEd,OAAOyjP,OAAOr2I,IAAOq2I,OAAOp2I,IAAOo2I,OAAO,QAG5C7E,EAAOhtW,UAAUqzW,gBAAkBH,GAAmB,SAA0BzhV,GAE9E0hV,EADA1hV,KAAoB,EACG,UACvB,MAAM08F,EAAQ3uH,KAAKiyB,GACb28F,EAAO5uH,KAAKiyB,EAAS,QACb7tB,IAAVuqH,QAAgCvqH,IAATwqH,GACzBglP,EAAY3hV,EAAQjyB,KAAKqD,OAAS,GAGpC,MAAM44N,EAAKttG,EAAQ,GAAK,GACL,MAAjB3uH,OAAOiyB,GACU,IAAjBjyB,OAAOiyB,GACPjyB,OAAOiyB,GAEH+pM,EAAKh8N,OAAOiyB,GAAU,GAAK,GACd,MAAjBjyB,OAAOiyB,GACU,IAAjBjyB,OAAOiyB,GACP28F,EAEF,OAAQyjP,OAAOp2I,IAAOo2I,OAAO,KAAOA,OAAOr2I,MAG7CwxI,EAAOhtW,UAAUszW,UAAY,SAAoB7hV,EAAQwoN,EAAYg4H,GACnExgV,KAAoB,EACpBwoN,KAA4B,EACvBg4H,GAAUR,EAAYhgV,EAAQwoN,EAAYz6O,KAAKqD,QAEpD,IAAI2E,EAAMhI,KAAKiyB,GACX6gV,EAAM,EACN5wW,EAAI,EACR,OAASA,EAAIu4O,IAAeq4H,GAAO,MACjC9qW,GAAOhI,KAAKiyB,EAAS/vB,GAAK4wW,EAM5B,OAJAA,GAAO,IAEH9qW,GAAO8qW,IAAK9qW,GAAOzG,KAAKs5B,IAAI,EAAG,EAAI4/M,IAEhCzyO,GAGTwlW,EAAOhtW,UAAUuzW,UAAY,SAAoB9hV,EAAQwoN,EAAYg4H,GACnExgV,KAAoB,EACpBwoN,KAA4B,EACvBg4H,GAAUR,EAAYhgV,EAAQwoN,EAAYz6O,KAAKqD,QAEpD,IAAInB,EAAIu4O,EACJq4H,EAAM,EACN9qW,EAAMhI,KAAKiyB,IAAW/vB,GAC1B,KAAOA,EAAI,IAAM4wW,GAAO,MACtB9qW,GAAOhI,KAAKiyB,IAAW/vB,GAAK4wW,EAM9B,OAJAA,GAAO,IAEH9qW,GAAO8qW,IAAK9qW,GAAOzG,KAAKs5B,IAAI,EAAG,EAAI4/M,IAEhCzyO,GAGTwlW,EAAOhtW,UAAUwzW,SAAW,SAAmB/hV,EAAQwgV,GAGrD,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACtB,IAAfrD,KAAKiyB,IAC0B,GAA5B,IAAOjyB,KAAKiyB,GAAU,GADKjyB,KAAKiyB,IAI3Cu7U,EAAOhtW,UAAUyzW,YAAc,SAAsBhiV,EAAQwgV,GAC3DxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QAC3C,MAAM2E,EAAMhI,KAAKiyB,GAAWjyB,KAAKiyB,EAAS,IAAM,EAChD,OAAc,MAANjqB,EAAsB,WAANA,EAAmBA,GAG7CwlW,EAAOhtW,UAAU0zW,YAAc,SAAsBjiV,EAAQwgV,GAC3DxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QAC3C,MAAM2E,EAAMhI,KAAKiyB,EAAS,GAAMjyB,KAAKiyB,IAAW,EAChD,OAAc,MAANjqB,EAAsB,WAANA,EAAmBA,GAG7CwlW,EAAOhtW,UAAU2zW,YAAc,SAAsBliV,EAAQwgV,GAI3D,OAHAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QAEnCrD,KAAKiyB,GACVjyB,KAAKiyB,EAAS,IAAM,EACpBjyB,KAAKiyB,EAAS,IAAM,GACpBjyB,KAAKiyB,EAAS,IAAM,IAGzBu7U,EAAOhtW,UAAU4zW,YAAc,SAAsBniV,EAAQwgV,GAI3D,OAHAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QAEnCrD,KAAKiyB,IAAW,GACrBjyB,KAAKiyB,EAAS,IAAM,GACpBjyB,KAAKiyB,EAAS,IAAM,EACpBjyB,KAAKiyB,EAAS,IAGnBu7U,EAAOhtW,UAAU6zW,eAAiBX,GAAmB,SAAyBzhV,GAE5E0hV,EADA1hV,KAAoB,EACG,UACvB,MAAM08F,EAAQ3uH,KAAKiyB,GACb28F,EAAO5uH,KAAKiyB,EAAS,QACb7tB,IAAVuqH,QAAgCvqH,IAATwqH,GACzBglP,EAAY3hV,EAAQjyB,KAAKqD,OAAS,GAGpC,MAAM2E,EAAMhI,KAAKiyB,EAAS,GACL,IAAnBjyB,KAAKiyB,EAAS,GACK,MAAnBjyB,KAAKiyB,EAAS,IACb28F,GAAQ,IAEX,OAAQyjP,OAAOrqW,IAAQqqW,OAAO,KAC5BA,OAAO1jP,EACU,IAAjB3uH,OAAOiyB,GACU,MAAjBjyB,OAAOiyB,GACPjyB,OAAOiyB,GAAU,GAAK,OAG1Bu7U,EAAOhtW,UAAU8zW,eAAiBZ,GAAmB,SAAyBzhV,GAE5E0hV,EADA1hV,KAAoB,EACG,UACvB,MAAM08F,EAAQ3uH,KAAKiyB,GACb28F,EAAO5uH,KAAKiyB,EAAS,QACb7tB,IAAVuqH,QAAgCvqH,IAATwqH,GACzBglP,EAAY3hV,EAAQjyB,KAAKqD,OAAS,GAGpC,MAAM2E,GAAO2mH,GAAS,IACH,MAAjB3uH,OAAOiyB,GACU,IAAjBjyB,OAAOiyB,GACPjyB,OAAOiyB,GAET,OAAQogV,OAAOrqW,IAAQqqW,OAAO,KAC5BA,OAAOryW,OAAOiyB,GAAU,GAAK,GACZ,MAAjBjyB,OAAOiyB,GACU,IAAjBjyB,OAAOiyB,GACP28F,MAGJ4+O,EAAOhtW,UAAU+zW,YAAc,SAAsBtiV,EAAQwgV,GAG3D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCiqW,EAAQx2V,KAAK9W,KAAMiyB,GAAQ,EAAM,GAAI,IAG9Cu7U,EAAOhtW,UAAUg0W,YAAc,SAAsBviV,EAAQwgV,GAG3D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCiqW,EAAQx2V,KAAK9W,KAAMiyB,GAAQ,EAAO,GAAI,IAG/Cu7U,EAAOhtW,UAAUi0W,aAAe,SAAuBxiV,EAAQwgV,GAG7D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCiqW,EAAQx2V,KAAK9W,KAAMiyB,GAAQ,EAAM,GAAI,IAG9Cu7U,EAAOhtW,UAAUk0W,aAAe,SAAuBziV,EAAQwgV,GAG7D,OAFAxgV,KAAoB,EACfwgV,GAAUR,EAAYhgV,EAAQ,EAAGjyB,KAAKqD,QACpCiqW,EAAQx2V,KAAK9W,KAAMiyB,GAAQ,EAAO,GAAI,IAS/Cu7U,EAAOhtW,UAAUm0W,YACjBnH,EAAOhtW,UAAUo0W,YAAc,SAAsB/xW,EAAOovB,EAAQwoN,EAAYg4H,GAI9E,GAHA5vW,GAASA,EACTovB,KAAoB,EACpBwoN,KAA4B,GACvBg4H,EAAU,CAEbP,EAASlyW,KAAM6C,EAAOovB,EAAQwoN,EADbl5O,KAAKs5B,IAAI,EAAG,EAAI4/M,GAAc,EACK,GAGtD,IAAIq4H,EAAM,EACN5wW,EAAI,EAER,IADAlC,KAAKiyB,GAAkB,IAARpvB,IACNX,EAAIu4O,IAAeq4H,GAAO,MACjC9yW,KAAKiyB,EAAS/vB,GAAMW,EAAQiwW,EAAO,IAGrC,OAAO7gV,EAASwoN,GAGlB+yH,EAAOhtW,UAAUq0W,YACjBrH,EAAOhtW,UAAUs0W,YAAc,SAAsBjyW,EAAOovB,EAAQwoN,EAAYg4H,GAI9E,GAHA5vW,GAASA,EACTovB,KAAoB,EACpBwoN,KAA4B,GACvBg4H,EAAU,CAEbP,EAASlyW,KAAM6C,EAAOovB,EAAQwoN,EADbl5O,KAAKs5B,IAAI,EAAG,EAAI4/M,GAAc,EACK,GAGtD,IAAIv4O,EAAIu4O,EAAa,EACjBq4H,EAAM,EAEV,IADA9yW,KAAKiyB,EAAS/vB,GAAa,IAARW,IACVX,GAAK,IAAM4wW,GAAO,MACzB9yW,KAAKiyB,EAAS/vB,GAAMW,EAAQiwW,EAAO,IAGrC,OAAO7gV,EAASwoN,GAGlB+yH,EAAOhtW,UAAUo5O,WACjB4zH,EAAOhtW,UAAUu0W,WAAa,SAAqBlyW,EAAOovB,EAAQwgV,GAKhE,OAJA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,IAAM,GACtDjyB,KAAKiyB,GAAmB,IAARpvB,EACTovB,EAAS,GAGlBu7U,EAAOhtW,UAAUw0W,cACjBxH,EAAOhtW,UAAUy0W,cAAgB,SAAwBpyW,EAAOovB,EAAQwgV,GAMtE,OALA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,MAAQ,GACxDjyB,KAAKiyB,GAAmB,IAARpvB,EAChB7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EACvBovB,EAAS,GAGlBu7U,EAAOhtW,UAAU00W,cACjB1H,EAAOhtW,UAAU20W,cAAgB,SAAwBtyW,EAAOovB,EAAQwgV,GAMtE,OALA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,MAAQ,GACxDjyB,KAAKiyB,GAAWpvB,IAAU,EAC1B7C,KAAKiyB,EAAS,GAAc,IAARpvB,EACbovB,EAAS,GAGlBu7U,EAAOhtW,UAAU40W,cACjB5H,EAAOhtW,UAAU60W,cAAgB,SAAwBxyW,EAAOovB,EAAQwgV,GAQtE,OAPA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,WAAY,GAC5DjyB,KAAKiyB,EAAS,GAAMpvB,IAAU,GAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,GAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EAC9B7C,KAAKiyB,GAAmB,IAARpvB,EACTovB,EAAS,GAGlBu7U,EAAOhtW,UAAU80W,cACjB9H,EAAOhtW,UAAU+0W,cAAgB,SAAwB1yW,EAAOovB,EAAQwgV,GAQtE,OAPA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,WAAY,GAC5DjyB,KAAKiyB,GAAWpvB,IAAU,GAC1B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,GAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EAC9B7C,KAAKiyB,EAAS,GAAc,IAARpvB,EACbovB,EAAS,GA+ClBu7U,EAAOhtW,UAAUg1W,iBAAmB9B,GAAmB,SAA2B7wW,EAAOovB,EAAS,GAChG,OAAOkgV,EAAenyW,KAAM6C,EAAOovB,EAAQogV,OAAO,GAAIA,OAAO,0BAG/D7E,EAAOhtW,UAAUi1W,iBAAmB/B,GAAmB,SAA2B7wW,EAAOovB,EAAS,GAChG,OAAOqgV,EAAetyW,KAAM6C,EAAOovB,EAAQogV,OAAO,GAAIA,OAAO,0BAG/D7E,EAAOhtW,UAAUk1W,WAAa,SAAqB7yW,EAAOovB,EAAQwoN,EAAYg4H,GAG5E,GAFA5vW,GAASA,EACTovB,KAAoB,GACfwgV,EAAU,CACb,MAAMt6V,EAAQ5W,KAAKs5B,IAAI,EAAI,EAAI4/M,EAAc,GAE7Cy3H,EAASlyW,KAAM6C,EAAOovB,EAAQwoN,EAAYtiO,EAAQ,GAAIA,GAGxD,IAAIjW,EAAI,EACJ4wW,EAAM,EACN6C,EAAM,EAEV,IADA31W,KAAKiyB,GAAkB,IAARpvB,IACNX,EAAIu4O,IAAeq4H,GAAO,MAC7BjwW,EAAQ,GAAa,IAAR8yW,GAAsC,IAAzB31W,KAAKiyB,EAAS/vB,EAAI,KAC9CyzW,EAAM,GAER31W,KAAKiyB,EAAS/vB,IAAOW,EAAQiwW,GAAQ,GAAK6C,EAAM,IAGlD,OAAO1jV,EAASwoN,GAGlB+yH,EAAOhtW,UAAUo1W,WAAa,SAAqB/yW,EAAOovB,EAAQwoN,EAAYg4H,GAG5E,GAFA5vW,GAASA,EACTovB,KAAoB,GACfwgV,EAAU,CACb,MAAMt6V,EAAQ5W,KAAKs5B,IAAI,EAAI,EAAI4/M,EAAc,GAE7Cy3H,EAASlyW,KAAM6C,EAAOovB,EAAQwoN,EAAYtiO,EAAQ,GAAIA,GAGxD,IAAIjW,EAAIu4O,EAAa,EACjBq4H,EAAM,EACN6C,EAAM,EAEV,IADA31W,KAAKiyB,EAAS/vB,GAAa,IAARW,IACVX,GAAK,IAAM4wW,GAAO,MACrBjwW,EAAQ,GAAa,IAAR8yW,GAAsC,IAAzB31W,KAAKiyB,EAAS/vB,EAAI,KAC9CyzW,EAAM,GAER31W,KAAKiyB,EAAS/vB,IAAOW,EAAQiwW,GAAQ,GAAK6C,EAAM,IAGlD,OAAO1jV,EAASwoN,GAGlB+yH,EAAOhtW,UAAUq1W,UAAY,SAAoBhzW,EAAOovB,EAAQwgV,GAM9D,OALA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,KAAO,KACnDpvB,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtC7C,KAAKiyB,GAAmB,IAARpvB,EACTovB,EAAS,GAGlBu7U,EAAOhtW,UAAUs1W,aAAe,SAAuBjzW,EAAOovB,EAAQwgV,GAMpE,OALA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,OAAS,OACzDjyB,KAAKiyB,GAAmB,IAARpvB,EAChB7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EACvBovB,EAAS,GAGlBu7U,EAAOhtW,UAAUu1W,aAAe,SAAuBlzW,EAAOovB,EAAQwgV,GAMpE,OALA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,OAAS,OACzDjyB,KAAKiyB,GAAWpvB,IAAU,EAC1B7C,KAAKiyB,EAAS,GAAc,IAARpvB,EACbovB,EAAS,GAGlBu7U,EAAOhtW,UAAUw1W,aAAe,SAAuBnzW,EAAOovB,EAAQwgV,GAQpE,OAPA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,YAAa,YAC7DjyB,KAAKiyB,GAAmB,IAARpvB,EAChB7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,GAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,GACvBovB,EAAS,GAGlBu7U,EAAOhtW,UAAUy1W,aAAe,SAAuBpzW,EAAOovB,EAAQwgV,GASpE,OARA5vW,GAASA,EACTovB,KAAoB,EACfwgV,GAAUP,EAASlyW,KAAM6C,EAAOovB,EAAQ,EAAG,YAAa,YACzDpvB,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C7C,KAAKiyB,GAAWpvB,IAAU,GAC1B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,GAC9B7C,KAAKiyB,EAAS,GAAMpvB,IAAU,EAC9B7C,KAAKiyB,EAAS,GAAc,IAARpvB,EACbovB,EAAS,GAGlBu7U,EAAOhtW,UAAU01W,gBAAkBxC,GAAmB,SAA0B7wW,EAAOovB,EAAS,GAC9F,OAAOkgV,EAAenyW,KAAM6C,EAAOovB,GAASogV,OAAO,sBAAuBA,OAAO,0BAGnF7E,EAAOhtW,UAAU21W,gBAAkBzC,GAAmB,SAA0B7wW,EAAOovB,EAAS,GAC9F,OAAOqgV,EAAetyW,KAAM6C,EAAOovB,GAASogV,OAAO,sBAAuBA,OAAO,0BAkBnF7E,EAAOhtW,UAAU41W,aAAe,SAAuBvzW,EAAOovB,EAAQwgV,GACpE,OAAOD,EAAWxyW,KAAM6C,EAAOovB,GAAQ,EAAMwgV,IAG/CjF,EAAOhtW,UAAU61W,aAAe,SAAuBxzW,EAAOovB,EAAQwgV,GACpE,OAAOD,EAAWxyW,KAAM6C,EAAOovB,GAAQ,EAAOwgV,IAahDjF,EAAOhtW,UAAU81W,cAAgB,SAAwBzzW,EAAOovB,EAAQwgV,GACtE,OAAO34H,EAAY95O,KAAM6C,EAAOovB,GAAQ,EAAMwgV,IAGhDjF,EAAOhtW,UAAU+1W,cAAgB,SAAwB1zW,EAAOovB,EAAQwgV,GACtE,OAAO34H,EAAY95O,KAAM6C,EAAOovB,GAAQ,EAAOwgV,IAIjDjF,EAAOhtW,UAAUukE,KAAO,SAAet3D,EAAQ+oW,EAAajoS,EAAOzE,GACjE,IAAK0jS,EAAOW,SAAS1gW,GAAS,MAAM,IAAIsC,UAAU,+BAQlD,GAPKw+D,IAAOA,EAAQ,GACfzE,GAAe,IAARA,IAAWA,EAAM9pE,KAAKqD,QAC9BmzW,GAAe/oW,EAAOpK,SAAQmzW,EAAc/oW,EAAOpK,QAClDmzW,IAAaA,EAAc,GAC5B1sS,EAAM,GAAKA,EAAMyE,IAAOzE,EAAMyE,GAG9BzE,IAAQyE,EAAO,OAAO,EAC1B,GAAsB,IAAlB9gE,EAAOpK,QAAgC,IAAhBrD,KAAKqD,OAAc,OAAO,EAGrD,GAAImzW,EAAc,EAChB,MAAM,IAAIroC,WAAW,6BAEvB,GAAI5/P,EAAQ,GAAKA,GAASvuE,KAAKqD,OAAQ,MAAM,IAAI8qU,WAAW,sBAC5D,GAAIrkQ,EAAM,EAAG,MAAM,IAAIqkQ,WAAW,2BAG9BrkQ,EAAM9pE,KAAKqD,SAAQymE,EAAM9pE,KAAKqD,QAC9BoK,EAAOpK,OAASmzW,EAAc1sS,EAAMyE,IACtCzE,EAAMr8D,EAAOpK,OAASmzW,EAAcjoS,GAGtC,MAAMtjE,EAAM6+D,EAAMyE,EAalB,OAXIvuE,OAASyN,GAAqD,mBAApCse,WAAWvrB,UAAUi2W,WAEjDz2W,KAAKy2W,WAAWD,EAAajoS,EAAOzE,GAEpC/9C,WAAWvrB,UAAUse,IAAIpe,KACvB+M,EACAzN,KAAK2yW,SAASpkS,EAAOzE,GACrB0sS,GAIGvrW,GAOTuiW,EAAOhtW,UAAUimF,KAAO,SAAez+E,EAAKumE,EAAOzE,EAAKt/C,GAEtD,GAAmB,iBAARxiB,EAAkB,CAS3B,GARqB,iBAAVumE,GACT/jD,EAAW+jD,EACXA,EAAQ,EACRzE,EAAM9pE,KAAKqD,QACa,iBAARymE,IAChBt/C,EAAWs/C,EACXA,EAAM9pE,KAAKqD,aAEIe,IAAbomB,GAA8C,iBAAbA,EACnC,MAAM,IAAIza,UAAU,6BAEtB,GAAwB,iBAAbya,IAA0BgjV,EAAOI,WAAWpjV,GACrD,MAAM,IAAIza,UAAU,qBAAuBya,GAE7C,GAAmB,IAAfxiB,EAAI3E,OAAc,CACpB,MAAMpE,EAAO+I,EAAI8oE,WAAW,IACV,SAAbtmD,GAAuBvrB,EAAO,KAClB,WAAburB,KAEFxiB,EAAM/I,QAGc,iBAAR+I,EAChBA,GAAY,IACY,kBAARA,IAChBA,EAAM2f,OAAO3f,IAIf,GAAIumE,EAAQ,GAAKvuE,KAAKqD,OAASkrE,GAASvuE,KAAKqD,OAASymE,EACpD,MAAM,IAAIqkQ,WAAW,sBAGvB,GAAIrkQ,GAAOyE,EACT,OAAOvuE,KAQT,IAAIkC,EACJ,GANAqsE,KAAkB,EAClBzE,OAAc1lE,IAAR0lE,EAAoB9pE,KAAKqD,OAASymE,IAAQ,EAE3C9hE,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAK9F,EAAIqsE,EAAOrsE,EAAI4nE,IAAO5nE,EACzBlC,KAAKkC,GAAK8F,MAEP,CACL,MAAM0nU,EAAQ89B,EAAOW,SAASnmW,GAC1BA,EACAwlW,EAAOt1V,KAAKlQ,EAAKwiB,GACfvf,EAAMykU,EAAMrsU,OAClB,GAAY,IAAR4H,EACF,MAAM,IAAI8E,UAAU,cAAgB/H,EAClC,qCAEJ,IAAK9F,EAAI,EAAGA,EAAI4nE,EAAMyE,IAASrsE,EAC7BlC,KAAKkC,EAAIqsE,GAASmhQ,EAAMxtU,EAAI+I,GAIhC,OAAOjL,MAOT,MAAMw/D,EAAS,GACf,SAASk3S,EAAGC,EAAKC,EAAY3iL,GAC3Bz0H,EAAOm3S,GAAO,cAAwB1iL,EACpCx0L,cACEG,QAEAT,OAAOqgK,eAAex/J,KAAM,UAAW,CACrC6C,MAAO+zW,EAAWxmW,MAAMpQ,KAAMgd,WAC9Bpa,UAAU,EACVi0W,cAAc,IAIhB72W,KAAK6I,KAAO,GAAG7I,KAAK6I,SAAS8tW,KAG7B32W,KAAKuhC,aAEEvhC,KAAK6I,KAGV5J,WACF,OAAO03W,EAGL13W,SAAM4D,GACR1D,OAAOqgK,eAAex/J,KAAM,OAAQ,CAClC62W,cAAc,EACdp3M,YAAY,EACZ58J,MAAAA,EACAD,UAAU,IAIdqgB,WACE,MAAO,GAAGjjB,KAAK6I,SAAS8tW,OAAS32W,KAAK2d,YAkC5C,SAASm5V,EAAuB9uW,GAC9B,IAAIyW,EAAM,GACNvc,EAAI8F,EAAI3E,OACZ,MAAMkrE,EAAmB,MAAXvmE,EAAI,GAAa,EAAI,EACnC,KAAO9F,GAAKqsE,EAAQ,EAAGrsE,GAAK,EAC1Buc,EAAM,IAAIzW,EAAI2C,MAAMzI,EAAI,EAAGA,KAAKuc,IAElC,MAAO,GAAGzW,EAAI2C,MAAM,EAAGzI,KAAKuc,IAa9B,SAAS2zV,EAAYvvW,EAAO+Y,EAAKzP,EAAK89R,EAAKh4Q,EAAQwoN,GACjD,GAAI53O,EAAQsJ,GAAOtJ,EAAQ+Y,EAAK,CAC9B,MAAMhH,EAAmB,iBAARgH,EAAmB,IAAM,GAC1C,IAAI+vH,EAWJ,MARIA,EAFA8uG,EAAa,EACH,IAAR7+N,GAAaA,IAAQy2V,OAAO,GACtB,OAAOz9V,YAAYA,QAA2B,GAAlB6lO,EAAa,KAAS7lO,IAElD,SAASA,QAA2B,GAAlB6lO,EAAa,GAAS,IAAI7lO,iBACtB,GAAlB6lO,EAAa,GAAS,IAAI7lO,IAGhC,MAAMgH,IAAMhH,YAAYzI,IAAMyI,IAElC,IAAI4qD,EAAOu3S,iBAAiB,QAASprO,EAAO9oI,IArBtD,SAAsBonS,EAAKh4Q,EAAQwoN,GACjCk5H,EAAe1hV,EAAQ,eACH7tB,IAAhB6lS,EAAIh4Q,SAAsD7tB,IAA7B6lS,EAAIh4Q,EAASwoN,IAC5Cm5H,EAAY3hV,EAAQg4Q,EAAI5mS,QAAUo3O,EAAa,IAoBjDu8H,CAAY/sE,EAAKh4Q,EAAQwoN,GAG3B,SAASk5H,EAAgB9wW,EAAOgG,GAC9B,GAAqB,iBAAVhG,EACT,MAAM,IAAI28D,EAAOy3S,qBAAqBpuW,EAAM,SAAUhG,GAI1D,SAAS+wW,EAAa/wW,EAAOQ,EAAQ8G,GACnC,GAAI5I,KAAKonD,MAAM9lD,KAAWA,EAExB,MADA8wW,EAAe9wW,EAAOsH,GAChB,IAAIq1D,EAAOu3S,iBAAiB5sW,GAAQ,SAAU,aAActH,GAGpE,GAAIQ,EAAS,EACX,MAAM,IAAIm8D,EAAO03S,yBAGnB,MAAM,IAAI13S,EAAOu3S,iBAAiB5sW,GAAQ,SACR,MAAMA,EAAO,EAAI,YAAY9G,IAC7BR,GAtFpC6zW,EAAE,4BACA,SAAU7tW,GACR,OAAIA,EACK,GAAGA,gCAGL,mDACNslU,YACLuoC,EAAE,wBACA,SAAU7tW,EAAMglW,GACd,MAAO,QAAQhlW,4DAA+DglW,MAC7E99V,WACL2mW,EAAE,oBACA,SAAU/tV,EAAKgjH,EAAO32C,GACpB,IAAI3wD,EAAM,iBAAiB1b,sBACvBsnR,EAAWj7M,EAWf,OAVIrtE,OAAOy7C,UAAU4xB,IAAUzzF,KAAKyoB,IAAIgrE,GAAS,GAAK,GACpDi7M,EAAW6mE,EAAsBxlW,OAAO0jF,IACd,iBAAVA,IAChBi7M,EAAW3+R,OAAO0jF,IACdA,EAAQq9Q,OAAO,IAAMA,OAAO,KAAOr9Q,IAAUq9Q,OAAO,IAAMA,OAAO,QACnEpiE,EAAW6mE,EAAsB7mE,IAEnCA,GAAY,KAEd5rQ,GAAO,eAAesnG,eAAmBskK,IAClC5rQ,IACN8pS,YAiEL,MAAMgpC,EAAoB,oBAgB1B,SAASzI,EAAalmI,EAAQ7sL,GAE5B,IAAI40T,EADJ50T,EAAQA,GAASqa,EAAAA,EAEjB,MAAM3yD,EAASmlO,EAAOnlO,OACtB,IAAI+zW,EAAgB,KACpB,MAAM1nC,EAAQ,GAEd,IAAK,IAAIxtU,EAAI,EAAGA,EAAImB,IAAUnB,EAAG,CAI/B,GAHAquW,EAAY/nI,EAAO13J,WAAW5uE,GAG1BquW,EAAY,OAAUA,EAAY,MAAQ,CAE5C,IAAK6G,EAAe,CAElB,GAAI7G,EAAY,MAAQ,EAEjB50T,GAAS,IAAM,GAAG+zR,EAAMtnU,KAAK,IAAM,IAAM,KAC9C,SACK,GAAIlG,EAAI,IAAMmB,EAAQ,EAEtBs4C,GAAS,IAAM,GAAG+zR,EAAMtnU,KAAK,IAAM,IAAM,KAC9C,SAIFgvW,EAAgB7G,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjB50T,GAAS,IAAM,GAAG+zR,EAAMtnU,KAAK,IAAM,IAAM,KAC9CgvW,EAAgB7G,EAChB,SAIFA,EAAkE,OAArD6G,EAAgB,OAAU,GAAK7G,EAAY,YAC/C6G,IAEJz7T,GAAS,IAAM,GAAG+zR,EAAMtnU,KAAK,IAAM,IAAM,KAMhD,GAHAgvW,EAAgB,KAGZ7G,EAAY,IAAM,CACpB,IAAK50T,GAAS,GAAK,EAAG,MACtB+zR,EAAMtnU,KAAKmoW,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAK50T,GAAS,GAAK,EAAG,MACtB+zR,EAAMtnU,KACJmoW,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAK50T,GAAS,GAAK,EAAG,MACtB+zR,EAAMtnU,KACJmoW,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAIvxW,MAAM,sBARhB,IAAK28C,GAAS,GAAK,EAAG,MACtB+zR,EAAMtnU,KACJmoW,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAO7gC,EA4BT,SAASi/B,EAAehmV,GACtB,OAAO+qD,EAAOi5R,YAxHhB,SAAsBhkV,GAMpB,IAFAA,GAFAA,EAAMA,EAAIxW,MAAM,KAAK,IAEXyX,OAAOrgB,QAAQ4tW,EAAmB,KAEpC9zW,OAAS,EAAG,MAAO,GAE3B,KAAOslB,EAAItlB,OAAS,GAAM,GACxBslB,GAAY,IAEd,OAAOA,EA6GmB0uV,CAAY1uV,IAGxC,SAASonV,EAAYp+V,EAAK2lW,EAAKrlV,EAAQ5uB,GACrC,IAAInB,EACJ,IAAKA,EAAI,EAAGA,EAAImB,KACTnB,EAAI+vB,GAAUqlV,EAAIj0W,QAAYnB,GAAKyP,EAAItO,UADpBnB,EAExBo1W,EAAIp1W,EAAI+vB,GAAUtgB,EAAIzP,GAExB,OAAOA,EAMT,SAAS6rW,EAAYpyU,EAAKxxB,GACxB,OAAOwxB,aAAexxB,GACZ,MAAPwxB,GAAkC,MAAnBA,EAAIl8B,aAA+C,MAAxBk8B,EAAIl8B,YAAYoJ,MACzD8yB,EAAIl8B,YAAYoJ,OAASsB,EAAKtB,KAEpC,SAASulW,EAAazyU,GAEpB,OAAOA,GAAQA,EAKjB,MAAMq2U,EAAsB,WAC1B,MAAMuF,EAAW,mBACX9wQ,EAAQ,IAAI3lG,MAAM,KACxB,IAAK,IAAIoB,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,MAAMs1W,EAAU,GAAJt1W,EACZ,IAAK,IAAIoV,EAAI,EAAGA,EAAI,KAAMA,EACxBmvF,EAAM+wQ,EAAMlgW,GAAKigW,EAASr1W,GAAKq1W,EAASjgW,GAG5C,OAAOmvF,EATmB,GAa5B,SAASitQ,EAAoBvqT,GAC3B,MAAyB,oBAAXkpT,OAAyBoF,EAAyBtuT,EAGlE,SAASsuT,IACP,MAAM,IAAIz4W,MAAM,0B,SCxjElB,IAAI04W,EAAU,CAEZC,KAAM,CAEJC,cAAe,SAASjvV,GACtB,OAAO+uV,EAAQG,IAAID,cAAczmS,SAAS1+C,mBAAmB9J,MAI/DmvV,cAAe,SAASpoC,GACtB,OAAOv9S,mBAAmBk/C,OAAOqmS,EAAQG,IAAIC,cAAcpoC,OAK/DmoC,IAAK,CAEHD,cAAe,SAASjvV,GACtB,IAAK,IAAI+mT,EAAQ,GAAIxtU,EAAI,EAAGA,EAAIymB,EAAItlB,OAAQnB,IAC1CwtU,EAAMtnU,KAAyB,IAApBugB,EAAImoD,WAAW5uE,IAC5B,OAAOwtU,GAITooC,cAAe,SAASpoC,GACtB,IAAK,IAAI/mT,EAAM,GAAIzmB,EAAI,EAAGA,EAAIwtU,EAAMrsU,OAAQnB,IAC1CymB,EAAIvgB,KAAKkJ,OAAO4a,aAAawjT,EAAMxtU,KACrC,OAAOymB,EAAIre,KAAK,OAKtBjL,EAAOC,QAAUo4W,G,SChCjB,IACMK,EAGJC,EAHID,EACE,mEAENC,EAAQ,CAENC,KAAM,SAASrjW,EAAGwV,GAChB,OAAQxV,GAAKwV,EAAMxV,IAAO,GAAKwV,GAIjC8tV,KAAM,SAAStjW,EAAGwV,GAChB,OAAQxV,GAAM,GAAKwV,EAAOxV,IAAMwV,GAIlC+tV,OAAQ,SAASvjW,GAEf,GAAIA,EAAEnV,aAAekoB,OACnB,OAA0B,SAAnBqwV,EAAMC,KAAKrjW,EAAG,GAAsC,WAApBojW,EAAMC,KAAKrjW,EAAG,IAIvD,IAAK,IAAI1S,EAAI,EAAGA,EAAI0S,EAAEvR,OAAQnB,IAC5B0S,EAAE1S,GAAK81W,EAAMG,OAAOvjW,EAAE1S,IACxB,OAAO0S,GAITwjW,YAAa,SAASxjW,GACpB,IAAK,IAAI86T,EAAQ,GAAI96T,EAAI,EAAGA,IAC1B86T,EAAMtnU,KAAK7G,KAAKonD,MAAsB,IAAhBpnD,KAAKysH,WAC7B,OAAO0hN,GAIT2oC,aAAc,SAAS3oC,GACrB,IAAK,IAAItlL,EAAQ,GAAIloJ,EAAI,EAAGkoB,EAAI,EAAGloB,EAAIwtU,EAAMrsU,OAAQnB,IAAKkoB,GAAK,EAC7DggI,EAAMhgI,IAAM,IAAMslT,EAAMxtU,IAAO,GAAKkoB,EAAI,GAC1C,OAAOggI,GAITkuN,aAAc,SAASluN,GACrB,IAAK,IAAIslL,EAAQ,GAAItlT,EAAI,EAAGA,EAAmB,GAAfggI,EAAM/mJ,OAAa+mB,GAAK,EACtDslT,EAAMtnU,KAAMgiJ,EAAMhgI,IAAM,KAAQ,GAAKA,EAAI,GAAO,KAClD,OAAOslT,GAIT6oC,WAAY,SAAS7oC,GACnB,IAAK,IAAIz0F,EAAM,GAAI/4O,EAAI,EAAGA,EAAIwtU,EAAMrsU,OAAQnB,IAC1C+4O,EAAI7yO,MAAMsnU,EAAMxtU,KAAO,GAAG+gB,SAAS,KACnCg4N,EAAI7yO,MAAiB,GAAXsnU,EAAMxtU,IAAU+gB,SAAS,KAErC,OAAOg4N,EAAI3wO,KAAK,KAIlBkuW,WAAY,SAASv9H,GACnB,IAAK,IAAIy0F,EAAQ,GAAIlnU,EAAI,EAAGA,EAAIyyO,EAAI53O,OAAQmF,GAAK,EAC/CknU,EAAMtnU,KAAKkQ,SAAS2iO,EAAIr0N,OAAOpe,EAAG,GAAI,KACxC,OAAOknU,GAIT+oC,cAAe,SAAS/oC,GACtB,IAAK,IAAIh8P,EAAS,GAAIxxE,EAAI,EAAGA,EAAIwtU,EAAMrsU,OAAQnB,GAAK,EAElD,IADA,IAAIw2W,EAAWhpC,EAAMxtU,IAAM,GAAOwtU,EAAMxtU,EAAI,IAAM,EAAKwtU,EAAMxtU,EAAI,GACxDoV,EAAI,EAAGA,EAAI,EAAGA,IACb,EAAJpV,EAAY,EAAJoV,GAAwB,EAAfo4T,EAAMrsU,OACzBqwE,EAAOtrE,KAAK2vW,EAAUhgS,OAAQ2gS,IAAY,GAAK,EAAIphW,GAAM,KAEzDo8D,EAAOtrE,KAAK,KAElB,OAAOsrE,EAAOppE,KAAK,KAIrBqkW,cAAe,SAASj7R,GAEtBA,EAASA,EAAOnqE,QAAQ,iBAAkB,IAE1C,IAAK,IAAImmU,EAAQ,GAAIxtU,EAAI,EAAGy2W,EAAQ,EAAGz2W,EAAIwxE,EAAOrwE,OAC9Cs1W,IAAUz2W,EAAI,EACH,GAATy2W,GACJjpC,EAAMtnU,MAAO2vW,EAAU/uW,QAAQ0qE,EAAOqE,OAAO71E,EAAI,IAC1CX,KAAKs5B,IAAI,GAAI,EAAI89U,EAAQ,GAAK,IAAgB,EAARA,EACtCZ,EAAU/uW,QAAQ0qE,EAAOqE,OAAO71E,MAAS,EAAY,EAARy2W,GAEtD,OAAOjpC,IAIXrwU,EAAOC,QAAU04W,G;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpEnB,IAAiD77G,EAAAA,EASxC,WACT,OAAgB,SAAUy8G,GAEhB,IAAIC,EAAmB,GAGvB,SAAS,EAAoBC,GAG5B,GAAGD,EAAiBC,GACnB,OAAOD,EAAiBC,GAAUx5W,QAGnC,IAAID,EAASw5W,EAAiBC,GAAY,CACzCx5W,QAAS,GACTF,GAAI05W,EACJn/V,QAAQ,GAUT,OANAi/V,EAAQE,GAAUp4W,KAAKrB,EAAOC,QAASD,EAAQA,EAAOC,QAAS,GAG/DD,EAAOsa,QAAS,EAGTta,EAAOC,QAcf,OATA,EAAoB6lD,EAAIyzT,EAGxB,EAAoBpwW,EAAIqwW,EAGxB,EAAoBzzW,EAAI,GAGjB,EAAoB,GAvCrB,CA0CN,CAEJ,SAAU/F,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAEIC,EAAsBF,EAFD,EAAoB,IAQzCG,EAA0BH,EAFD,EAAoB,KAI7CI,EAA0B,EAAoB,IAE9CC,EAA8B,EAAoB,IAIlDC,EAAyCN,EAFD,EAAoB,KAM5DO,EAA8BP,EAFD,EAAoB,KAMjDQ,EAAyBR,EAFD,EAAoB,KAI5CS,EAAUP,EAA6B,QAAE5yU,OAC7C,SAASA,IACP,IAAIozU,EAAKD,IAgBT,OAdAC,EAAGC,QAAU,SAAU1kR,EAAOr1F,GAC5B,OAAOy5W,EAA4BM,QAAQ1kR,EAAOr1F,EAAS85W,IAE7DA,EAAGE,WAAa,SAAU3kR,EAAOr1F,GAC/B,OAAOy5W,EAA4BO,WAAW3kR,EAAOr1F,EAAS85W,IAGhEA,EAAGG,IAAMV,EAAiC,QAC1CO,EAAGI,SAAWT,EAA4BS,SAC1CJ,EAAGK,mBAAqBT,EAAgD,QACxEI,EAAG/iI,OAASyiI,EAAwB57V,OACpCk8V,EAAGjoV,MAAQ2nV,EAAwB3nV,MACnCioV,EAAGM,uBAAyBZ,EAAwBY,uBAE7CN,EAGT,IAAIO,EAAO3zU,IACX2zU,EAAK3zU,OAASA,EAEdkzU,EAAgC,QAAES,GAElCA,EAAKC,QAAUX,EAAqC,QAEpDU,EAAc,QAAIA,EAElB16W,EAAiB,QAAI06W,EACrB36W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,GAEvB,aAEAA,EAAiB,QAAI,SAAUq8B,GAC7B,OAAOA,GAAOA,EAAIq9U,WAAar9U,EAAM,CACnC,QAAWA,IAIfr8B,EAAQ05W,YAAa,GAIhB,SAAU35W,EAAQC,EAAS,GAEhC,aAEA,IAAI46W,EAA0B,EAAoB,GAAY,QAE1DnB,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAEIlwT,EAAOoxT,EAFW,EAAoB,IAStCC,EAAyBpB,EAFD,EAAoB,KAM5CqB,EAAwBrB,EAFD,EAAoB,IAM3CsB,EAAQH,EAFW,EAAoB,IAMvCI,EAAUJ,EAFW,EAAoB,KAMzCX,EAAyBR,EAFD,EAAoB,KAKhD,SAAS1yU,IACP,IAAIozU,EAAK,IAAI3wT,EAAKyxT,sBAalB,OAXAF,EAAM50U,OAAOg0U,EAAI3wT,GACjB2wT,EAAGe,WAAaL,EAAgC,QAChDV,EAAGgB,UAAYL,EAA+B,QAC9CX,EAAGY,MAAQA,EACXZ,EAAGt1B,iBAAmBk2B,EAAMl2B,iBAE5Bs1B,EAAGiB,GAAKJ,EACRb,EAAGpwW,SAAW,SAAUsxW,GACtB,OAAOL,EAAQjxW,SAASsxW,EAAMlB,IAGzBA,EAGT,IAAIO,EAAO3zU,IACX2zU,EAAK3zU,OAASA,EAEdkzU,EAAgC,QAAES,GAElCA,EAAc,QAAIA,EAElB16W,EAAiB,QAAI06W,EACrB36W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,GAEvB,aAEAA,EAAiB,QAAI,SAAUq8B,GAC7B,GAAIA,GAAOA,EAAIq9U,WACb,OAAOr9U,EAEP,IAAIi/U,EAAS,GAEb,GAAW,MAAPj/U,EACF,IAAK,IAAIlzB,KAAOkzB,EACVx8B,OAAOqB,UAAUC,eAAeC,KAAKi7B,EAAKlzB,KAAMmyW,EAAOnyW,GAAOkzB,EAAIlzB,IAK1E,OADAmyW,EAAgB,QAAIj/U,EACbi/U,GAIXt7W,EAAQ05W,YAAa,GAIhB,SAAU35W,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EACrB15W,EAAQi7W,sBAAwBA,EAEhC,IAAIM,EAAS,EAAoB,GAI7BC,EAAc/B,EAFD,EAAoB,IAIjCgC,EAAW,EAAoB,IAE/BC,EAAc,EAAoB,IAIlCC,EAAWlC,EAFD,EAAoB,KAI9BmC,EAAuB,EAAoB,IAG/C57W,EAAQsrB,QADM,QAGdtrB,EAAQ67W,kBADgB,EAIxB77W,EAAQ87W,kCAFgC,EAcxC97W,EAAQ+7W,iBAXe,CACrB,EAAG,cACH,EAAG,gBACH,EAAG,gBACH,EAAG,WACH,EAAG,mBACH,EAAG,kBACH,EAAG,kBACH,EAAG,YAIL,IAAIC,EAAa,kBAEjB,SAASf,EAAsBz2B,EAASC,EAAUw3B,GAChDv7W,KAAK8jV,QAAUA,GAAW,GAC1B9jV,KAAK+jV,SAAWA,GAAY,GAC5B/jV,KAAKu7W,WAAaA,GAAc,GAEhCR,EAASS,uBAAuBx7W,MAChCg7W,EAAYS,0BAA0Bz7W,MAGxCu6W,EAAsB/5W,UAAY,CAChCf,YAAa86W,EAEbmB,OAAQT,EAAkB,QAC1BtzW,IAAKszW,EAAkB,QAAEtzW,IAEzBg0W,eAAgB,SAAwB9yW,EAAMsgD,GAC5C,GAAI0xT,EAAO53V,SAASviB,KAAKmI,KAAUyyW,EAAY,CAC7C,GAAInyT,EACF,MAAM,IAAI2xT,EAAqB,QAAE,2CAEnCD,EAAOp1U,OAAOzlC,KAAK8jV,QAASj7U,QAE5B7I,KAAK8jV,QAAQj7U,GAAQsgD,GAGzByyT,iBAAkB,SAA0B/yW,UACnC7I,KAAK8jV,QAAQj7U,IAGtBgzW,gBAAiB,SAAyBhzW,EAAMizW,GAC9C,GAAIjB,EAAO53V,SAASviB,KAAKmI,KAAUyyW,EACjCT,EAAOp1U,OAAOzlC,KAAK+jV,SAAUl7U,OACxB,CACL,QAAuB,IAAZizW,EACT,MAAM,IAAIhB,EAAqB,QAAE,4CAA8CjyW,EAAO,kBAExF7I,KAAK+jV,SAASl7U,GAAQizW,IAG1BC,kBAAmB,SAA2BlzW,UACrC7I,KAAK+jV,SAASl7U,IAGvBmzW,kBAAmB,SAA2BnzW,EAAMsgD,GAClD,GAAI0xT,EAAO53V,SAASviB,KAAKmI,KAAUyyW,EAAY,CAC7C,GAAInyT,EACF,MAAM,IAAI2xT,EAAqB,QAAE,8CAEnCD,EAAOp1U,OAAOzlC,KAAKu7W,WAAY1yW,QAE/B7I,KAAKu7W,WAAW1yW,GAAQsgD,GAG5B8yT,oBAAqB,SAA6BpzW,UACzC7I,KAAKu7W,WAAW1yW,IAMzBqzW,4BAA6B,WAC3BhB,EAAqBiB,0BAIzB,IAAIx0W,EAAMszW,EAAkB,QAAEtzW,IAE9BrI,EAAQqI,IAAMA,EACdrI,EAAQ88W,YAAcvB,EAAOuB,YAC7B98W,EAAQo8W,OAAST,EAAkB,SAI9B,SAAU57W,EAAQC,GAEvB,aAEAA,EAAQ05W,YAAa,EACrB15W,EAAQmmC,OAASA,EACjBnmC,EAAQ0J,QA+DR,SAAiB+rD,EAAOlyD,GACtB,IAAK,IAAIX,EAAI,EAAG+I,EAAM8pD,EAAM1xD,OAAQnB,EAAI+I,EAAK/I,IAC3C,GAAI6yD,EAAM7yD,KAAOW,EACf,OAAOX,EAGX,OAAQ,GApEV5C,EAAQ6kV,iBAuER,SAA0B37G,GACxB,GAAsB,iBAAXA,EAAqB,CAE9B,GAAIA,GAAUA,EAAO6zI,OACnB,OAAO7zI,EAAO6zI,SACT,GAAc,MAAV7zI,EACT,MAAO,GACF,IAAKA,EACV,OAAOA,EAAS,GAMlBA,EAAS,GAAKA,EAGhB,OAAK8zI,EAASr6U,KAAKumM,GAGZA,EAAOj/N,QAAQgzW,EAAU55L,GAFvB6lD,GAxFXlpO,EAAQuiM,QA6FR,SAAiBh/L,GACf,OAAKA,GAAmB,IAAVA,MAEH9B,EAAQ8B,IAA2B,IAAjBA,EAAMQ,SA/FrC/D,EAAQ88W,YAsGR,SAAqBr0T,GACnB,IAAIy0T,EAAQ/2U,EAAO,GAAIsiB,GAEvB,OADAy0T,EAAM7nP,QAAU5sE,EACTy0T,GAxGTl9W,EAAQm9W,YA2GR,SAAqBv/V,EAAQ64F,GAE3B,OADA74F,EAAOgX,KAAO6hF,EACP74F,GA5GT5d,EAAQo9W,kBA+GR,SAA2BC,EAAav9W,GACtC,OAAQu9W,EAAcA,EAAc,IAAM,IAAMv9W,GA/GlD,IAAIiyE,EAAS,CACX,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,UAGHkrS,EAAW,aACXD,EAAW,YAEf,SAAS35L,EAAWi6L,GAClB,OAAOvrS,EAAOurS,GAGhB,SAASn3U,EAAO9J,GACd,IAAK,IAAIz5B,EAAI,EAAGA,EAAI8a,UAAU3Z,OAAQnB,IACpC,IAAK,IAAIuG,KAAOuU,UAAU9a,GACpB/C,OAAOqB,UAAUC,eAAeC,KAAKsc,UAAU9a,GAAIuG,KACrDkzB,EAAIlzB,GAAOuU,UAAU9a,GAAGuG,IAK9B,OAAOkzB,EAGT,IAAI1Y,EAAW9jB,OAAOqB,UAAUyiB,SAEhC3jB,EAAQ2jB,SAAWA,EAInB,IAAI0d,EAAa,SAAoB99B,GACnC,MAAwB,mBAAVA,GAIZ89B,EAAW,OACbrhC,EAAQqhC,WAAaA,EAAa,SAAU99B,GAC1C,MAAwB,mBAAVA,GAAiD,sBAAzBogB,EAASviB,KAAKmC,KAGxDvD,EAAQqhC,WAAaA,EAKrB,IAAI5/B,EAAUD,MAAMC,SAAW,SAAU8B,GACvC,SAAOA,GAA0B,iBAAVA,IAA8C,mBAAzBogB,EAASviB,KAAKmC,IAG5DvD,EAAQyB,QAAUA,GA8Db,SAAU1B,EAAQC,EAAS,GAEhC,aAEA,IAAIu9W,EAAyB,EAAoB,GAAY,QAE7Dv9W,EAAQ05W,YAAa,EACrB,IAAI8D,EAAa,CAAC,cAAe,WAAY,aAAc,gBAAiB,UAAW,OAAQ,SAAU,SAEzG,SAASrC,EAAU98V,EAASlJ,GAC1B,IAAIsoW,EAAMtoW,GAAQA,EAAKsoW,IACnBxnV,OAAOnxB,EACP44W,OAAgB54W,EAChB64W,OAAS74W,EACT84W,OAAY94W,EAEZ24W,IACFxnV,EAAOwnV,EAAIxuS,MAAMh5C,KACjBynV,EAAgBD,EAAIjzS,IAAIv0C,KACxB0nV,EAASF,EAAIxuS,MAAM0uS,OACnBC,EAAYH,EAAIjzS,IAAImzS,OAEpBt/V,GAAW,MAAQ4X,EAAO,IAAM0nV,GAMlC,IAHA,IAAI14L,EAAMvlL,MAAMwB,UAAUf,YAAYiB,KAAKV,KAAM2d,GAGxClW,EAAM,EAAGA,EAAMq1W,EAAWz5W,OAAQoE,IACzCzH,KAAK88W,EAAWr1W,IAAQ88K,EAAIu4L,EAAWr1W,IAIrCzI,MAAMm+W,mBACRn+W,MAAMm+W,kBAAkBn9W,KAAMy6W,GAGhC,IACMsC,IACF/8W,KAAKo9W,WAAa7nV,EAClBv1B,KAAKg9W,cAAgBA,EAIjBH,GACF19W,OAAOqgK,eAAex/J,KAAM,SAAU,CACpC6C,MAAOo6W,EACPx9M,YAAY,IAEdtgK,OAAOqgK,eAAex/J,KAAM,YAAa,CACvC6C,MAAOq6W,EACPz9M,YAAY,MAGdz/J,KAAKi9W,OAASA,EACdj9W,KAAKk9W,UAAYA,IAGrB,MAAOG,KAKX5C,EAAUj6W,UAAY,IAAIxB,MAE1BM,EAAiB,QAAIm7W,EACrBp7W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhCD,EAAOC,QAAU,CAAE,QAAW,EAAoB,GAAI05W,YAAY,IAI7D,SAAU35W,EAAQC,EAAS,GAEhC,IAAIyhD,EAAI,EAAoB,GAC5B1hD,EAAOC,QAAU,SAAwBg+W,EAAI70W,EAAK80W,GAChD,OAAOx8T,EAAEy8T,QAAQF,EAAI70W,EAAK80W,KAKvB,SAAUl+W,EAAQC,GAEvB,IAAIm+W,EAAUt+W,OACdE,EAAOC,QAAU,CACf+mC,OAAYo3U,EAAQp3U,OACpBq3U,SAAYD,EAAQ/xM,eACpBiyM,OAAY,GAAGC,qBACfC,QAAYJ,EAAQK,yBACpBN,QAAYC,EAAQj+M,eACpBu+M,SAAYN,EAAQO,iBACpBvuL,QAAYguL,EAAQv+W,KACpB++W,SAAYR,EAAQ9uC,oBACpBuvC,WAAYT,EAAQU,sBACpBj0N,KAAY,GAAG3iJ,UAKZ,SAAUlI,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EACrB15W,EAAQk8W,uBA+BR,SAAgChrT,GAC9B4tT,EAAqC,QAAE5tT,GACvC6tT,EAAuB,QAAE7tT,GACzB8tT,EAAgC,QAAE9tT,GAClC+tT,EAAqB,QAAE/tT,GACvBguT,EAAsB,QAAEhuT,GACxBiuT,EAAyB,QAAEjuT,GAC3BkuT,EAAuB,QAAEluT,IArC3BlxD,EAAQq/W,kBAwCR,SAA2BnuT,EAAUouT,EAAYC,GAC3CruT,EAASszR,QAAQ86B,KACnBpuT,EAASsuT,MAAMF,GAAcpuT,EAASszR,QAAQ86B,GACzCC,UACIruT,EAASszR,QAAQ86B,KA1C9B,IAEIR,EAA8BrF,EAFD,EAAoB,KAMjDsF,EAAgBtF,EAFD,EAAoB,KAMnCuF,EAAyBvF,EAFD,EAAoB,KAM5CwF,EAAcxF,EAFD,EAAoB,KAMjCyF,EAAezF,EAFD,EAAoB,KAMlC0F,EAAkB1F,EAFD,EAAoB,KAMrC2F,EAAgB3F,EAFD,EAAoB,MAyBlC,SAAU15W,EAAQC,EAAS,GAEhC,aAEAA,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAEjCv7W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,sBAAsB,SAAUrpS,EAAS3yE,GAC/D,IAAI8hT,EAAU9hT,EAAQ8hT,QAClBt4P,EAAKxpD,EAAQwpD,GAEjB,IAAgB,IAAZmpB,EACF,OAAOnpB,EAAGnpD,MACL,IAAgB,IAAZsyE,GAAgC,MAAXA,EAC9B,OAAOmvO,EAAQzhT,MACV,GAAI66W,EAAO95W,QAAQuxE,GACxB,OAAIA,EAAQjvE,OAAS,GACf1D,EAAQo2G,MACVp2G,EAAQo2G,IAAM,CAACp2G,EAAQkJ,OAGlB2nD,EAASszR,QAAQ55L,KAAK53E,EAAS3yE,IAE/B8hT,EAAQzhT,MAGjB,GAAIL,EAAQwE,MAAQxE,EAAQo2G,IAAK,CAC/B,IAAI5xG,EAAO02W,EAAOuB,YAAYz8W,EAAQwE,MACtCA,EAAKw4W,YAAc9B,EAAO6B,kBAAkB/8W,EAAQwE,KAAKw4W,YAAah9W,EAAQkJ,MAC9ElJ,EAAU,CAAEwE,KAAMA,GAGpB,OAAOglD,EAAGmpB,EAAS3yE,OAKzBN,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,IAEJ,SAASglM,GAAS,aAE9C,IAAIy6K,EAAe,EAAoB,IAAa,QAEhDhG,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAI7BC,EAAc/B,EAFD,EAAoB,IAIrCz5W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,QAAQ,SAAUrpS,EAAS3yE,GACjD,IAAKA,EACH,MAAM,IAAIm7W,EAAqB,QAAE,+BAGnC,IAwDUkE,EAxDN71T,EAAKxpD,EAAQwpD,GACbs4P,EAAU9hT,EAAQ8hT,QAClBv/S,EAAI,EACJqd,EAAM,GACNpb,OAAOC,EACPu4W,OAAcv4W,EAclB,SAAS66W,EAAc54N,EAAOv8H,EAAO8kG,GAC/BzqH,IACFA,EAAKsE,IAAM49I,EACXliJ,EAAK2lB,MAAQA,EACb3lB,EAAKwqH,MAAkB,IAAV7kG,EACb3lB,EAAKyqH,OAASA,EAEV+tP,IACFx4W,EAAKw4W,YAAcA,EAAct2N,IAIrC9mI,GAAY4pC,EAAGmpB,EAAQ+zE,GAAQ,CAC7BliJ,KAAMA,EACNs4W,YAAa5B,EAAO4B,YAAY,CAACnqS,EAAQ+zE,GAAQA,GAAQ,CAACs2N,EAAct2N,EAAO,SAInF,GA9BI1mJ,EAAQwE,MAAQxE,EAAQo2G,MAC1B4mQ,EAAc9B,EAAO6B,kBAAkB/8W,EAAQwE,KAAKw4W,YAAah9W,EAAQo2G,IAAI,IAAM,KAGjF8kQ,EAAOl6U,WAAW2xC,KACpBA,EAAUA,EAAQ5xE,KAAKV,OAGrBL,EAAQwE,OACVA,EAAO02W,EAAOuB,YAAYz8W,EAAQwE,OAqBhCmuE,GAA8B,iBAAZA,EACpB,GAAIuoS,EAAO95W,QAAQuxE,GACjB,IAAK,IAAIh7D,EAAIg7D,EAAQjvE,OAAQnB,EAAIoV,EAAGpV,IAC9BA,KAAKowE,GACP2sS,EAAc/8W,EAAGA,EAAGA,IAAMowE,EAAQjvE,OAAS,QAG1C,GAAIihM,EAAO+oI,QAAU/6P,EAAQgyH,EAAO+oI,OAAOQ,UAAW,CAG3D,IAFA,IAAIv5D,EAAa,GACbu5D,EAAWv7P,EAAQgyH,EAAO+oI,OAAOQ,YAC5ByvC,EAAKzvC,EAASa,QAAS4uC,EAAGr8P,KAAMq8P,EAAKzvC,EAASa,OACrDp6D,EAAWlsQ,KAAKk1W,EAAGz6W,OAGrB,IAASyU,GADTg7D,EAAUgiM,GACWjxQ,OAAQnB,EAAIoV,EAAGpV,IAClC+8W,EAAc/8W,EAAGA,EAAGA,IAAMowE,EAAQjvE,OAAS,QAIvC27W,OAAW56W,EAEf26W,EAAazsS,GAAS/qE,SAAQ,SAAUkB,QAIrBrE,IAAb46W,GACFC,EAAcD,EAAU98W,EAAI,GAE9B88W,EAAWv2W,EACXvG,YAEekC,IAAb46W,GACFC,EAAcD,EAAU98W,EAAI,GAAG,GAUvC,OAJU,IAANA,IACFqd,EAAMkiS,EAAQzhT,OAGTuf,MAIXlgB,EAAOC,QAAUA,EAAiB,UACLoB,KAAKpB,EAAU,WAAa,OAAOU,KAArB,KAItC,SAAUX,EAAQC,EAAS,GAEhCD,EAAOC,QAAU,CAAE,QAAW,EAAoB,IAAK05W,YAAY,IAI9D,SAAU35W,EAAQC,EAAS,GAEhC,EAAoB,IACpBD,EAAOC,QAAU,EAAoB,IAAIH,OAAOD,MAI3C,SAAUG,EAAQC,EAAS,GAGhC,IAAI4/W,EAAW,EAAoB,IAEnC,EAAoB,GAApB,CAAwB,QAAQ,SAASC,GACvC,OAAO,SAAc7B,GACnB,OAAO6B,EAAMD,EAAS5B,SAMrB,SAAUj+W,EAAQC,EAAS,GAGhC,IAAIulJ,EAAU,EAAoB,IAClCxlJ,EAAOC,QAAU,SAASg+W,GACxB,OAAOn+W,OAAO0lJ,EAAQy4N,MAKnB,SAAUj+W,EAAQC,GAGvBD,EAAOC,QAAU,SAASg+W,GACxB,GAASl5W,MAANk5W,EAAgB,MAAMvtW,UAAU,yBAA2ButW,GAC9D,OAAOA,IAKJ,SAAUj+W,EAAQC,EAAS,GAGhC,IAAI8/W,EAAU,EAAoB,IAC9BC,EAAU,EAAoB,IAC9BC,EAAU,EAAoB,IAClCjgX,EAAOC,QAAU,SAASigX,EAAKrtW,GAC7B,IAAIi3C,GAAOk2T,EAAKlgX,QAAU,IAAIogX,IAAQpgX,OAAOogX,GACzC10L,EAAM,GACVA,EAAI00L,GAAOrtW,EAAKi3C,GAChBi2T,EAAQA,EAAQI,EAAIJ,EAAQK,EAAIH,GAAM,WAAYn2T,EAAG,MAAQ,SAAU0hI,KAKpE,SAAUxrL,EAAQC,EAAS,GAEhC,IAAIglM,EAAY,EAAoB,IAChC+6K,EAAY,EAAoB,IAChCnsS,EAAY,EAAoB,IAGhCksS,EAAU,SAASj1W,EAAMtB,EAAM8R,GACjC,IAQIlS,EAAKi3W,EAAKhhS,EARVihS,EAAYx1W,EAAOi1W,EAAQK,EAC3BG,EAAYz1W,EAAOi1W,EAAQS,EAC3BC,EAAY31W,EAAOi1W,EAAQI,EAC3BO,EAAY51W,EAAOi1W,EAAQY,EAC3BC,EAAY91W,EAAOi1W,EAAQc,EAC3BC,EAAYh2W,EAAOi1W,EAAQgB,EAC3B9gX,EAAYsgX,EAAYP,EAAOA,EAAKx2W,KAAUw2W,EAAKx2W,GAAQ,IAC3D4E,EAAYmyW,EAAYt7K,EAASw7K,EAAYx7K,EAAOz7L,IAASy7L,EAAOz7L,IAAS,IAAa,UAG9F,IAAIJ,KADDm3W,IAAUjlW,EAAS9R,GACX8R,GAET+kW,GAAOC,GAAalyW,GAAUhF,KAAOgF,IAC3BhF,KAAOnJ,IAEjBo/E,EAAMghS,EAAMjyW,EAAOhF,GAAOkS,EAAOlS,GAEjCnJ,EAAQmJ,GAAOm3W,GAAmC,mBAAfnyW,EAAOhF,GAAqBkS,EAAOlS,GAEpEw3W,GAAWP,EAAMxsS,EAAIwL,EAAK4lH,GAE1B67K,GAAW1yW,EAAOhF,IAAQi2E,EAAM,SAAU2hS,GAC1C,IAAIZ,EAAI,SAASvxV,GACf,OAAOluB,gBAAgBqgX,EAAI,IAAIA,EAAEnyV,GAASmyV,EAAEnyV,IAG9C,OADAuxV,EAAW,UAAIY,EAAW,UACnBZ,EALyB,CAO/B/gS,GAAOqhS,GAA0B,mBAAPrhS,EAAoBxL,EAAI6uG,SAASrhL,KAAMg+E,GAAOA,EACxEqhS,KAAUzgX,EAAiB,YAAMA,EAAiB,UAAI,KAAKmJ,GAAOi2E,KAIzE0gS,EAAQK,EAAI,EACZL,EAAQS,EAAI,EACZT,EAAQI,EAAI,EACZJ,EAAQY,EAAI,EACZZ,EAAQc,EAAI,GACZd,EAAQgB,EAAI,GACZ/gX,EAAOC,QAAU8/W,GAIZ,SAAU//W,EAAQC,GAGvB,IAAIglM,EAASjlM,EAAOC,QAA2B,oBAAVmS,QAAyBA,OAAOlQ,MAAQA,KACzEkQ,OAAwB,oBAAR1R,MAAuBA,KAAKwB,MAAQA,KAAOxB,KAAOgiL,SAAS,cAATA,GACrD,iBAAPu+L,MAAgBA,IAAMh8K,IAI3B,SAAUjlM,EAAQC,GAEvB,IAAI+/W,EAAOhgX,EAAOC,QAAU,CAACgQ,QAAS,SACrB,iBAAPixW,MAAgBA,IAAMlB,IAI3B,SAAUhgX,EAAQC,EAAS,GAGhC,IAAIkhX,EAAY,EAAoB,IACpCnhX,EAAOC,QAAU,SAAS6pD,EAAIgsC,EAAM9xF,GAElC,GADAm9W,EAAUr3T,QACE/kD,IAAT+wF,EAAmB,OAAOhsC,EAC7B,OAAO9lD,GACL,KAAK,EAAG,OAAO,SAASyX,GACtB,OAAOquC,EAAGzoD,KAAKy0F,EAAMr6E,IAEvB,KAAK,EAAG,OAAO,SAASA,EAAGsP,GACzB,OAAO++B,EAAGzoD,KAAKy0F,EAAMr6E,EAAGsP,IAE1B,KAAK,EAAG,OAAO,SAAStP,EAAGsP,EAAG5hB,GAC5B,OAAO2gD,EAAGzoD,KAAKy0F,EAAMr6E,EAAGsP,EAAG5hB,IAG/B,OAAO,WACL,OAAO2gD,EAAG/4C,MAAM+kF,EAAMn4E,cAMrB,SAAU3d,EAAQC,GAEvBD,EAAOC,QAAU,SAASg+W,GACxB,GAAgB,mBAANA,EAAiB,MAAMvtW,UAAUutW,EAAK,uBAChD,OAAOA,IAKJ,SAAUj+W,EAAQC,GAEvBD,EAAOC,QAAU,SAAS4S,GACxB,IACE,QAASA,IACT,MAAMnT,GACN,OAAO,KAMN,SAAUM,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAEI8B,EAAc/B,EAFD,EAAoB,IAIrCz5W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,iBAAiB,WACvC,GAAyB,IAArB3+V,UAAU3Z,OAKZ,MAAM,IAAIy3W,EAAqB,QAAE,oBAAsB99V,UAAUA,UAAU3Z,OAAS,GAAGwF,KAAO,SAKpGxJ,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAI7BC,EAAc/B,EAFD,EAAoB,IAIrCz5W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,MAAM,SAAU8E,EAAa9gX,GACnD,GAAwB,GAApBqd,UAAU3Z,OACZ,MAAM,IAAIy3W,EAAqB,QAAE,qCASnC,OAPID,EAAOl6U,WAAW8/U,KACpBA,EAAcA,EAAY//W,KAAKV,QAM5BL,EAAQ8uD,KAAKiyT,cAAgBD,GAAe5F,EAAOh5K,QAAQ4+K,GACvD9gX,EAAQ8hT,QAAQzhT,MAEhBL,EAAQwpD,GAAGnpD,SAItBwwD,EAASmrT,eAAe,UAAU,SAAU8E,EAAa9gX,GACvD,GAAwB,GAApBqd,UAAU3Z,OACZ,MAAM,IAAIy3W,EAAqB,QAAE,yCAEnC,OAAOtqT,EAASszR,QAAY,GAAEpjV,KAAKV,KAAMygX,EAAa,CACpDt3T,GAAIxpD,EAAQ8hT,QACZA,QAAS9hT,EAAQwpD,GACjBsF,KAAM9uD,EAAQ8uD,WAKpBpvD,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,GAEvB,aAEAA,EAAQ05W,YAAa,EAErB15W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,OAAO,WAG7B,IAFA,IAAI3iS,EAAO,MAAC50E,GACRzE,EAAUqd,UAAUA,UAAU3Z,OAAS,GAClCnB,EAAI,EAAGA,EAAI8a,UAAU3Z,OAAS,EAAGnB,IACxC82E,EAAK5wE,KAAK4U,UAAU9a,IAGtB,IAAI8rB,EAAQ,EACc,MAAtBruB,EAAQ8uD,KAAKzgC,MACfA,EAAQruB,EAAQ8uD,KAAKzgC,MACZruB,EAAQwE,MAA8B,MAAtBxE,EAAQwE,KAAK6pB,QACtCA,EAAQruB,EAAQwE,KAAK6pB,OAEvBgrD,EAAK,GAAKhrD,EAEVwiC,EAAS7oD,IAAIyI,MAAMogD,EAAUwoB,OAIjC35E,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,GAEvB,aAEAA,EAAQ05W,YAAa,EAErB15W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,UAAU,SAAUhgV,EAAK0qH,EAAO1mJ,GACtD,OAAKg8B,EAIEh8B,EAAQykV,eAAezoT,EAAK0qH,GAF1B1qH,MAMbt8B,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAI7BC,EAAc/B,EAFD,EAAoB,IAIrCz5W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASmrT,eAAe,QAAQ,SAAUrpS,EAAS3yE,GACjD,GAAwB,GAApBqd,UAAU3Z,OACZ,MAAM,IAAIy3W,EAAqB,QAAE,uCAE/BD,EAAOl6U,WAAW2xC,KACpBA,EAAUA,EAAQ5xE,KAAKV,OAGzB,IAAImpD,EAAKxpD,EAAQwpD,GAEjB,GAAK0xT,EAAOh5K,QAAQvvH,GAYlB,OAAO3yE,EAAQ8hT,QAAQzhT,MAXvB,IAAImE,EAAOxE,EAAQwE,KAMnB,OALIxE,EAAQwE,MAAQxE,EAAQo2G,OAC1B5xG,EAAO02W,EAAOuB,YAAYz8W,EAAQwE,OAC7Bw4W,YAAc9B,EAAO6B,kBAAkB/8W,EAAQwE,KAAKw4W,YAAah9W,EAAQo2G,IAAI,KAG7E5sD,EAAGmpB,EAAS,CACjBnuE,KAAMA,EACNs4W,YAAa5B,EAAO4B,YAAY,CAACnqS,GAAU,CAACnuE,GAAQA,EAAKw4W,oBAQjEt9W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EACrB15W,EAAQm8W,0BAMR,SAAmCjrT,GACjCmwT,EAA4B,QAAEnwT,IALhC,IAEImwT,EAAqB5H,EAFD,EAAoB,MAUvC,SAAU15W,EAAQC,EAAS,GAEhC,aAEAA,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAEjCv7W,EAAiB,QAAI,SAAUkxD,GAC7BA,EAASwrT,kBAAkB,UAAU,SAAU7yT,EAAIv0B,EAAOq/B,EAAWt0D,GACnE,IAAI4f,EAAM4pC,EAeV,OAdKv0B,EAAMmvT,WACTnvT,EAAMmvT,SAAW,GACjBxkU,EAAM,SAAU+yD,EAAS3yE,GAEvB,IAAImzF,EAAW7+B,EAAU8vR,SACzB9vR,EAAU8vR,SAAW82B,EAAOp1U,OAAO,GAAIqtD,EAAUl+D,EAAMmvT,UACvD,IAAIxkU,EAAM4pC,EAAGmpB,EAAS3yE,GAEtB,OADAs0D,EAAU8vR,SAAWjxP,EACdvzE,IAIXqV,EAAMmvT,SAASpkV,EAAQq5E,KAAK,IAAMr5E,EAAQwpD,GAEnC5pC,MAIXlgB,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEAA,EAAQ05W,YAAa,EAErB,IAAI6B,EAAS,EAAoB,GAE7Ba,EAAS,CACXkF,UAAW,CAAC,QAAS,OAAQ,OAAQ,SACrC5yV,MAAO,OAGP6yV,YAAa,SAAqB7yV,GAChC,GAAqB,iBAAVA,EAAoB,CAC7B,IAAI8yV,EAAWjG,EAAO7xW,QAAQ0yW,EAAOkF,UAAW5yV,EAAMI,eAEpDJ,EADE8yV,GAAY,EACNA,EAEAxoW,SAAS0V,EAAO,IAI5B,OAAOA,GAITrmB,IAAK,SAAaqmB,GAGhB,GAFAA,EAAQ0tV,EAAOmF,YAAY7yV,GAEJ,oBAAZtmB,SAA2Bg0W,EAAOmF,YAAYnF,EAAO1tV,QAAUA,EAAO,CAC/E,IAAIC,EAASytV,EAAOkF,UAAU5yV,GAEzBtmB,QAAQumB,KACXA,EAAS,OAGX,IAAK,IAAI8yV,EAAO/jW,UAAU3Z,OAAQsa,EAAU7c,MAAMigX,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IACjGrjW,EAAQqjW,EAAO,GAAKhkW,UAAUgkW,GAGhCt5W,QAAQumB,GAAQ7d,MAAM1I,QAASiW,MAKrCre,EAAiB,QAAIo8W,EACrBr8W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAI2hX,EAAiB,EAAoB,IAAa,QAElDlC,EAAe,EAAoB,IAAa,QAEhD7E,EAA0B,EAAoB,GAAY,QAE9D56W,EAAQ05W,YAAa,EACrB15W,EAAQ4hX,yBAYR,SAAkCC,GAChC,IAAIC,EAAyBH,EAAe,MAC5CG,EAAoC,aAAI,EACxCA,EAAyC,kBAAI,EAC7CA,EAAyC,kBAAI,EAC7CA,EAAyC,kBAAI,EAE7C,IAAIC,EAA2BJ,EAAe,MAI9C,OAFAI,EAAoC,WAAI,EAEjC,CACL9sV,WAAY,CACV+sV,UAAWC,EAAuBC,sBAAsBH,EAA0BF,EAAeM,wBACjG/6B,aAAcy6B,EAAeO,+BAE/BnhU,QAAS,CACP+gU,UAAWC,EAAuBC,sBAAsBJ,EAAwBD,EAAeQ,qBAC/Fj7B,aAAcy6B,EAAeS,8BA7BnCtiX,EAAQuiX,gBAkCR,SAAyBj9W,EAAQk9W,EAAoBnxT,GACnD,OACSoxT,EADa,mBAAXn9W,EACak9W,EAAmBvhU,QAEnBuhU,EAAmBvtV,WAFSo8B,IAnCtDrxD,EAAQ68W,sBA2DR,WACE4C,EAAaiD,GAAkBz6W,SAAQ,SAAUopD,UACxCqxT,EAAiBrxT,OA3D5B,IAAI4wT,EAAyB,EAAoB,IAI7C7F,EAASxB,EAFC,EAAoB,KAI9B8H,EAAmBf,EAAe,MAiCtC,SAASc,EAAeE,EAA2BtxT,GACjD,YAA0DvsD,IAAtD69W,EAA0BX,UAAU3wT,IACuB,IAAtDsxT,EAA0BX,UAAU3wT,QAEEvsD,IAA3C69W,EAA0Bv7B,aACrBu7B,EAA0Bv7B,cAMrC,SAAwC/1R,IACC,IAAnCqxT,EAAiBrxT,KACnBqxT,EAAiBrxT,IAAgB,EACjC+qT,EAAO/zW,IAAI,QAAS,+DAAiEgpD,EAAjE,8OAPtBuxT,CAA+BvxT,IACxB,KAkBJ,SAAUtxD,EAAQC,EAAS,GAEhCD,EAAOC,QAAU,CAAE,QAAW,EAAoB,IAAK05W,YAAY,IAI9D,SAAU35W,EAAQC,EAAS,GAEhC,IAAIyhD,EAAI,EAAoB,GAC5B1hD,EAAOC,QAAU,SAAgB0gX,EAAGmC,GAClC,OAAOphU,EAAE1a,OAAO25U,EAAGmC,KAKhB,SAAU9iX,EAAQC,EAAS,GAEhC,aAEA,IAAI2hX,EAAiB,EAAoB,IAAa,QAEtD3hX,EAAQ05W,YAAa,EACrB15W,EAAQkiX,sBAWR,WACE,IAAK,IAAIT,EAAO/jW,UAAU3Z,OAAQq2R,EAAU54R,MAAMigX,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC9EtnF,EAAQsnF,GAAQhkW,UAAUgkW,GAG5B,OAAOnG,EAAOp1U,OAAOr1B,WAAMhM,EAAW,CAAC68W,EAAe,OAAO54W,OAAOqxR,KAdtE,IAAImhF,EAAS,EAAoB,IAmB5B,SAAUx7W,EAAQC,GAGvB,aAGA,SAASk7W,EAAWhyI,GAClBxoO,KAAKwoO,OAASA,EAFhBlpO,EAAQ05W,YAAa,EAKrBwB,EAAWh6W,UAAUyiB,SAAWu3V,EAAWh6W,UAAU67W,OAAS,WAC5D,MAAO,GAAKr8W,KAAKwoO,QAGnBlpO,EAAiB,QAAIk7W,EACrBn7W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAI8iX,EAAe,EAAoB,IAAa,QAEhDrD,EAAe,EAAoB,IAAa,QAEhD7E,EAA0B,EAAoB,GAAY,QAE1DnB,EAAyB,EAAoB,GAAY,QAE7Dz5W,EAAQ05W,YAAa,EACrB15W,EAAQ+iX,cAuBR,SAAuBC,GACrB,IAAIC,EAAmBD,GAAgBA,EAAa,IAAM,EACtDE,EAAkBC,EAAMtH,kBAE5B,KAAIoH,GAAoBE,EAAMrH,mCAAqCmH,GAAoBE,EAAMtH,mBAA7F,CAIA,GAAIoH,EAAmBE,EAAMrH,kCAAmC,CAC9D,IAAIsH,EAAkBD,EAAMpH,iBAAiBmH,GACzCG,EAAmBF,EAAMpH,iBAAiBkH,GAC9C,MAAM,IAAIzH,EAAqB,QAAE,6IAAoJ4H,EAAkB,oDAAsDC,EAAmB,MAGhR,MAAM,IAAI7H,EAAqB,QAAE,wIAA+IwH,EAAa,GAAK,QApCtMhjX,EAAQ+J,SAwCR,SAAkBu5W,EAAcn3V,GAE9B,IAAKA,EACH,MAAM,IAAIqvV,EAAqB,QAAE,qCAEnC,IAAK8H,IAAiBA,EAAa12W,KACjC,MAAM,IAAI4uW,EAAqB,QAAE,mCAAqC8H,GAGxEA,EAAa12W,KAAK22W,UAAYD,EAAaE,OAI3Cr3V,EAAIivV,GAAG2H,cAAcO,EAAavlU,UAGlC,IAAI0lU,EAAuCH,EAAavlU,UAAyC,IAA7BulU,EAAavlU,SAAS,GAyCtF4W,EAAY,CACd+uT,OAAQ,SAAgBrnV,EAAK9yB,EAAMk0W,GACjC,IAAKphV,KAAS9yB,KAAQ8yB,GACpB,MAAM,IAAIm/U,EAAqB,QAAE,IAAMjyW,EAAO,oBAAsB8yB,EAAK,CACvEohV,IAAKA,IAGT,OAAO9oT,EAAUmwR,eAAezoT,EAAK9yB,IAEvCu7U,eAAgB,SAAwB5gV,EAAQmtD,GAC9C,IAAI/rD,EAASpB,EAAOmtD,GACpB,OAAc,MAAV/rD,GAGAzF,OAAOqB,UAAUC,eAAeC,KAAK8C,EAAQmtD,IAI7CuqT,EAAqB2G,gBAAgBj9W,EAAQqvD,EAAU6tT,mBAAoBnxT,GANtE/rD,OAMT,GAKFqiN,OAAQ,SAAgBg8J,EAAQp6W,GAE9B,IADA,IAAIoC,EAAMg4W,EAAO5/W,OACRnB,EAAI,EAAGA,EAAI+I,EAAK/I,IAEvB,GAAc,OADD+gX,EAAO/gX,IAAM+xD,EAAUmwR,eAAe6+B,EAAO/gX,GAAI2G,IAE5D,OAAOo6W,EAAO/gX,GAAG2G,IAIvBq6W,OAAQ,SAAgB9uO,EAAS9hE,GAC/B,MAA0B,mBAAZ8hE,EAAyBA,EAAQ1zI,KAAK4xE,GAAW8hE,GAGjE+vM,iBAAkBk2B,EAAMl2B,iBACxBg/B,cA5EF,SAA8BrH,EAASxpS,EAAS3yE,GAC1CA,EAAQ8uD,OACV6jB,EAAU+nS,EAAM50U,OAAO,GAAI6sC,EAAS3yE,EAAQ8uD,MACxC9uD,EAAQo2G,MACVp2G,EAAQo2G,IAAI,IAAK,IAGrB+lQ,EAAUrwV,EAAIivV,GAAG0I,eAAe1iX,KAAKV,KAAM87W,EAASxpS,EAAS3yE,GAE7D,IAAI0jX,EAAkBhJ,EAAM50U,OAAO,GAAI9lC,EAAS,CAC9Cm/W,MAAO9+W,KAAK8+W,MACZgD,mBAAoB9hX,KAAK8hX,qBAGvBl9W,EAAS6mB,EAAIivV,GAAGyI,cAAcziX,KAAKV,KAAM87W,EAASxpS,EAAS+wS,GAM/D,GAJc,MAAVz+W,GAAkB6mB,EAAIiuV,UACxB/5W,EAAQokV,SAASpkV,EAAQkJ,MAAQ4iB,EAAIiuV,QAAQoC,EAAS8G,EAAaU,gBAAiB73V,GACpF7mB,EAASjF,EAAQokV,SAASpkV,EAAQkJ,MAAMypE,EAAS+wS,IAErC,MAAVz+W,EAAgB,CAClB,GAAIjF,EAAQ4jX,OAAQ,CAElB,IADA,IAAIxqR,EAAQn0F,EAAOuN,MAAM,MAChBjQ,EAAI,EAAG6e,EAAIg4E,EAAM11F,OAAQnB,EAAI6e,IAC/Bg4E,EAAM72F,IAAMA,EAAI,IAAM6e,GADY7e,IAKvC62F,EAAM72F,GAAKvC,EAAQ4jX,OAASxqR,EAAM72F,GAEpC0C,EAASm0F,EAAMzuF,KAAK,MAEtB,OAAO1F,EAEP,MAAM,IAAIk2W,EAAqB,QAAE,eAAiBn7W,EAAQkJ,KAAO,6DA4CnEsgD,GAAI,SAAYjnD,GACd,IAAIqd,EAAMqjW,EAAa1gX,GAEvB,OADAqd,EAAIsjW,UAAYD,EAAa1gX,EAAI,MAC1Bqd,GAGTikW,SAAU,GACVh4E,QAAS,SAAiBtpS,EAAGiC,EAAMs/W,EAAqBhH,EAAawG,GACnE,IAAIS,EAAiB1jX,KAAKwjX,SAASthX,GAC/BinD,EAAKnpD,KAAKmpD,GAAGjnD,GAMjB,OALIiC,GAAQ8+W,GAAUxG,GAAegH,EACnCC,EAAiBC,EAAY3jX,KAAMkC,EAAGinD,EAAIhlD,EAAMs/W,EAAqBhH,EAAawG,GACxES,IACVA,EAAiB1jX,KAAKwjX,SAASthX,GAAKyhX,EAAY3jX,KAAMkC,EAAGinD,IAEpDu6T,GAGTv/W,KAAM,SAActB,EAAO8rR,GACzB,KAAO9rR,GAAS8rR,KACd9rR,EAAQA,EAAM8xH,QAEhB,OAAO9xH,GAET+gX,cAAe,SAAuB11V,EAAO21V,GAC3C,IAAIloV,EAAMzN,GAAS21V,EAMnB,OAJI31V,GAAS21V,GAAU31V,IAAU21V,IAC/BloV,EAAM0+U,EAAM50U,OAAO,GAAIo+U,EAAQ31V,IAG1ByN,GAGTsoT,YAAam+B,EAAa,IAE1B0B,KAAMr4V,EAAIivV,GAAGoJ,KACbxB,aAAcM,EAAavlU,UAG7B,SAAS99B,EAAI+yD,GACX,IAAI3yE,EAAUqd,UAAU3Z,QAAU,QAAsBe,IAAjB4Y,UAAU,GAAmB,GAAKA,UAAU,GAE/E7Y,EAAOxE,EAAQwE,KAEnBob,EAAIwkW,OAAOpkX,IACNA,EAAQm8W,SAAW8G,EAAaoB,UACnC7/W,EAAO8/W,EAAS3xS,EAASnuE,IAE3B,IAAI8+W,OAAS7+W,EACTq4W,EAAcmG,EAAasB,eAAiB,QAAK9/W,EASrD,SAAS8H,EAAKomE,GACZ,MAAO,GAAKswS,EAAa12W,KAAK+nD,EAAWqe,EAASre,EAAU6vR,QAAS7vR,EAAU8vR,SAAU5/U,EAAMs4W,EAAawG,GAI9G,OAbIL,EAAauB,YAEblB,EADEtjX,EAAQsjX,OACD3wS,GAAW3yE,EAAQsjX,OAAO,GAAK,CAAC3wS,GAASjqE,OAAO1I,EAAQsjX,QAAUtjX,EAAQsjX,OAE1E,CAAC3wS,KAQdpmE,EAAOk4W,EAAkBxB,EAAa12W,KAAMA,EAAM+nD,EAAWt0D,EAAQsjX,QAAU,GAAI9+W,EAAMs4W,IAC7EnqS,EAAS3yE,GA4CvB,OAzCA4f,EAAI8kW,OAAQ,EAEZ9kW,EAAIwkW,OAAS,SAAUpkX,GACrB,GAAKA,EAAQm8W,QAoBX7nT,EAAU6tT,mBAAqBniX,EAAQmiX,mBACvC7tT,EAAU6vR,QAAUnkV,EAAQmkV,QAC5B7vR,EAAU8vR,SAAWpkV,EAAQokV,SAC7B9vR,EAAUsnT,WAAa57W,EAAQ47W,WAC/BtnT,EAAU6qT,MAAQn/W,EAAQm/W,UAxBN,CACpB,IAAIwF,EAAgBjK,EAAM50U,OAAO,GAAIha,EAAIq4T,QAASnkV,EAAQmkV,UA4IhE,SAAyCwgC,EAAerwT,GACtD8qT,EAAauF,GAAe/8W,SAAQ,SAAUq3W,GAC5C,IAAIxxE,EAASk3E,EAAc1F,GAC3B0F,EAAc1F,GAIlB,SAAkCxxE,EAAQn5O,GACxC,IAAImwR,EAAiBnwR,EAAUmwR,eAC/B,OAAOmgC,EAAoBC,WAAWp3E,GAAQ,SAAUztS,GACtD,OAAO06W,EAAM50U,OAAO,CAAE2+S,eAAgBA,GAAkBzkV,MAP5B8kX,CAAyBr3E,EAAQn5O,MA9I3DywT,CAAgCJ,EAAerwT,GAC/CA,EAAU6vR,QAAUwgC,EAEhB1B,EAAa+B,aAEf1wT,EAAU8vR,SAAW9vR,EAAU2vT,cAAcjkX,EAAQokV,SAAUt4T,EAAIs4T,YAEjE6+B,EAAa+B,YAAc/B,EAAagC,iBAC1C3wT,EAAUsnT,WAAalB,EAAM50U,OAAO,GAAIha,EAAI8vV,WAAY57W,EAAQ47W,aAGlEtnT,EAAU6qT,MAAQ,GAClB7qT,EAAU6tT,mBAAqB5G,EAAqBgG,yBAAyBvhX,GAE7E,IAAIklX,EAAsBllX,EAAQmlX,2BAA6B/B,EAC/DhI,EAAS4D,kBAAkB1qT,EAAW,gBAAiB4wT,GACvD9J,EAAS4D,kBAAkB1qT,EAAW,qBAAsB4wT,KAUhEtlW,EAAIwlW,OAAS,SAAU7iX,EAAGiC,EAAMs4W,EAAawG,GAC3C,GAAIL,EAAasB,iBAAmBzH,EAClC,MAAM,IAAI3B,EAAqB,QAAE,0BAEnC,GAAI8H,EAAauB,YAAclB,EAC7B,MAAM,IAAInI,EAAqB,QAAE,2BAGnC,OAAO6I,EAAY1vT,EAAW/xD,EAAG0gX,EAAa1gX,GAAIiC,EAAM,EAAGs4W,EAAawG,IAEnE1jW,GAnPTjgB,EAAQqkX,YAAcA,EACtBrkX,EAAQ8jX,eA6QR,SAAwBtH,EAASxpS,EAAS3yE,GAYxC,OAXKm8W,EAMOA,EAAQp7W,MAASf,EAAQkJ,OAEnClJ,EAAQkJ,KAAOizW,EACfA,EAAUn8W,EAAQokV,SAAS+3B,IAPzBA,EADmB,mBAAjBn8W,EAAQkJ,KACAlJ,EAAQwE,KAAK,iBAEbxE,EAAQokV,SAASpkV,EAAQkJ,MAOhCizW,GAxRTx8W,EAAQ6jX,cA2RR,SAAuBrH,EAASxpS,EAAS3yE,GAEvC,IAAIqlX,EAAsBrlX,EAAQwE,MAAQxE,EAAQwE,KAAK,iBACvDxE,EAAQm8W,SAAU,EACdn8W,EAAQo2G,MACVp2G,EAAQwE,KAAKw4W,YAAch9W,EAAQo2G,IAAI,IAAMp2G,EAAQwE,KAAKw4W,aAG5D,IAAIsI,OAAe7gX,EAyBnB,GAxBIzE,EAAQwpD,IAAMxpD,EAAQwpD,KAAO26T,GAC/B,WACEnkX,EAAQwE,KAAOs+W,EAAMrG,YAAYz8W,EAAQwE,MAEzC,IAAIglD,EAAKxpD,EAAQwpD,GACjB87T,EAAetlX,EAAQwE,KAAK,iBAAmB,SAA6BmuE,GAC1E,IAAI3yE,EAAUqd,UAAU3Z,QAAU,QAAsBe,IAAjB4Y,UAAU,GAAmB,GAAKA,UAAU,GAMnF,OAFArd,EAAQwE,KAAOs+W,EAAMrG,YAAYz8W,EAAQwE,MACzCxE,EAAQwE,KAAK,iBAAmB6gX,EACzB77T,EAAGmpB,EAAS3yE,IAEjBwpD,EAAG46R,WACLpkV,EAAQokV,SAAWs2B,EAAM50U,OAAO,GAAI9lC,EAAQokV,SAAU56R,EAAG46R,WAd7D,QAmBc3/U,IAAZ03W,GAAyBmJ,IAC3BnJ,EAAUmJ,QAGI7gX,IAAZ03W,EACF,MAAM,IAAIhB,EAAqB,QAAE,eAAiBn7W,EAAQkJ,KAAO,uBAC5D,GAAIizW,aAAmB/5L,SAC5B,OAAO+5L,EAAQxpS,EAAS3yE,IA9T5BL,EAAQwkX,KAAOA,EAEf,IAEIzJ,EAAQH,EAFC,EAAoB,IAM7BY,EAAc/B,EAFD,EAAoB,IAIjC0J,EAAQ,EAAoB,GAE5B1H,EAAW,EAAoB,IAE/BwJ,EAAsB,EAAoB,IAE1CrJ,EAAuB,EAAoB,IAmO/C,SAASyI,EAAY1vT,EAAW/xD,EAAGinD,EAAIhlD,EAAMs/W,EAAqBhH,EAAawG,GAC7E,SAASiC,EAAK5yS,GACZ,IAAI3yE,EAAUqd,UAAU3Z,QAAU,QAAsBe,IAAjB4Y,UAAU,GAAmB,GAAKA,UAAU,GAE/EmoW,EAAgBlC,EAKpB,OAJIA,GAAU3wS,GAAW2wS,EAAO,IAAQ3wS,IAAYre,EAAUgwR,aAA6B,OAAdg/B,EAAO,KAClFkC,EAAgB,CAAC7yS,GAASjqE,OAAO46W,IAG5B95T,EAAG8K,EAAWqe,EAASre,EAAU6vR,QAAS7vR,EAAU8vR,SAAUpkV,EAAQwE,MAAQA,EAAMs4W,GAAe,CAAC98W,EAAQ88W,aAAap0W,OAAOo0W,GAAc0I,GAQvJ,OALAD,EAAOd,EAAkBj7T,EAAI+7T,EAAMjxT,EAAWgvT,EAAQ9+W,EAAMs4W,IAEvDjxE,QAAUtpS,EACfgjX,EAAKv2F,MAAQs0F,EAASA,EAAO5/W,OAAS,EACtC6hX,EAAKzI,YAAcgH,GAAuB,EACnCyB,EA8DT,SAASpB,IACP,MAAO,GAGT,SAASG,EAAS3xS,EAASnuE,GAKzB,OAJKA,GAAU,SAAUA,KACvBA,EAAOA,EAAOs+W,EAAMrG,YAAYj4W,GAAQ,IACnCy4F,KAAOtqB,GAEPnuE,EAGT,SAASigX,EAAkBj7T,EAAI+7T,EAAMjxT,EAAWgvT,EAAQ9+W,EAAMs4W,GAC5D,GAAItzT,EAAG05T,UAAW,CAChB,IAAIjuV,EAAQ,GACZswV,EAAO/7T,EAAG05T,UAAUqC,EAAMtwV,EAAOq/B,EAAWgvT,GAAUA,EAAO,GAAI9+W,EAAMs4W,EAAawG,GACpF5I,EAAM50U,OAAOy/U,EAAMtwV,GAErB,OAAOswV,IAmBJ,SAAU7lX,EAAQC,EAAS,GAEhCD,EAAOC,QAAU,CAAE,QAAW,EAAoB,IAAK05W,YAAY,IAI9D,SAAU35W,EAAQC,EAAS,GAEhC,EAAoB,IACpBD,EAAOC,QAAU,EAAoB,IAAIH,OAAOimX,MAI3C,SAAU/lX,EAAQC,EAAS,GAGhC,IAAI+lX,EAAW,EAAoB,IAEnC,EAAoB,GAApB,CAAwB,QAAQ,SAASC,GACvC,OAAO,SAAchI,GACnB,OAAOgI,GAASD,EAAS/H,GAAMgI,EAAMhI,GAAMA,OAM1C,SAAUj+W,EAAQC,GAEvBD,EAAOC,QAAU,SAASg+W,GACxB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,IAKlD,SAAUj+W,EAAQC,GAEvB,aAEAA,EAAQ05W,YAAa,EACrB15W,EAAQklX,WAER,SAAoBp3E,EAAQm4E,GAC1B,MAAsB,mBAAXn4E,EAGFA,EAEK,WAGZ,OADApwR,UAAUA,UAAU3Z,OAAS,GAAKkiX,EADpBvoW,UAAUA,UAAU3Z,OAAS,IAEpC+pS,EAAOh9R,MAAMpQ,KAAMgd,cAOzB,SAAU3d,EAAQC,IAEK,SAASglM,GAAS,aAE9ChlM,EAAQ05W,YAAa,EAErB15W,EAAiB,QAAI,SAAU48C,GAE7B,IAAI0gD,OAAyB,IAAX0nG,EAAyBA,EAAS7yL,OAChD+zW,EAAc5oR,EAAK1gD,WAEvBA,EAAWupU,WAAa,WAItB,OAHI7oR,EAAK1gD,aAAeA,IACtB0gD,EAAK1gD,WAAaspU,GAEbtpU,IAIX78C,EAAOC,QAAUA,EAAiB,UACLoB,KAAKpB,EAAU,WAAa,OAAOU,KAArB,KAItC,SAAUX,EAAQC,GAEvB,aAEAA,EAAQ05W,YAAa,EACrB,IAAIY,EAAM,CAER91B,QAAS,CAIP4hC,iBAAkB,SAA0BjxW,GAC1C,MAAqB,kBAAdA,EAAKtK,OAA2C,sBAAdsK,EAAKtK,MAA8C,mBAAdsK,EAAKtK,UAAiCsK,EAAKyI,QAAUzI,EAAKyI,OAAO7Z,QAAUoR,EAAKg6C,OAGhKk3T,SAAU,SAAkBzxV,GAC1B,MAAQ,aAAa+N,KAAK/N,EAAK4+D,WAMjC8yR,SAAU,SAAkB1xV,GAC1B,OAA6B,IAAtBA,EAAKpG,MAAMzqB,SAAiBu2W,EAAI91B,QAAQ6hC,SAASzxV,KAAUA,EAAKy6P,SAO7ErvR,EAAiB,QAAIs6W,EACrBv6W,EAAOC,QAAUA,EAAiB,SAI7B,SAAUD,EAAQC,EAAS,GAEhC,aAEA,IAAIy5W,EAAyB,EAAoB,GAAY,QAEzDmB,EAA0B,EAAoB,GAAY,QAE9D56W,EAAQ05W,YAAa,EACrB15W,EAAQy6W,uBAAyBA,EACjCz6W,EAAQkyB,MAuCR,SAAewjE,EAAOr1F,GACpB,IAAIkmX,EAAM9L,EAAuB/kR,EAAOr1F,GAGxC,OAFY,IAAImmX,EAA6B,QAAEnmX,GAElCkhC,OAAOglV,IAzCtB,IAEIE,EAAWhN,EAFD,EAAoB,KAM9B+M,EAAsB/M,EAFD,EAAoB,KAMzCiN,EAAU9L,EAFC,EAAoB,KAI/BW,EAAS,EAAoB,GAEjCv7W,EAAQie,OAASwoW,EAAkB,QAEnC,IAAIE,EAAK,GAGT,SAASlM,EAAuB/kR,EAAOr1F,GAErC,MAAmB,YAAfq1F,EAAM7qF,KACD6qF,GAGT+wR,EAAkB,QAAEE,GAAKA,EAGzBA,EAAGC,QAAU,SAAUA,GACrB,OAAO,IAAID,EAAGE,eAAexmX,GAAWA,EAAQymX,QAASF,IAGjDH,EAAkB,QAAEv0V,MAAMwjE,IAftC6lR,EAAOp1U,OAAOwgV,EAAID,IA6Bb,SAAU3mX,EAAQC,GAIvB,aAEAA,EAAQ05W,YAAa,EACrB,IAAIqN,EAAa,WACb,IAAI9oW,EAAS,CAAE4yC,MAAO,aAClB81T,GAAI,GACJK,SAAU,CAAE,MAAS,EAAG,KAAQ,EAAG,QAAW,EAAG,IAAO,EAAG,oBAAuB,EAAG,UAAa,EAAG,SAAY,EAAG,MAAS,EAAG,SAAY,GAAI,QAAW,GAAI,aAAgB,GAAI,QAAW,GAAI,QAAW,GAAI,QAAW,GAAI,aAAgB,GAAI,qBAAwB,GAAI,cAAiB,GAAI,eAAkB,GAAI,WAAc,GAAI,yBAA4B,GAAI,qBAAwB,GAAI,gBAAmB,GAAI,UAAa,GAAI,cAAiB,GAAI,WAAc,GAAI,YAAe,GAAI,cAAiB,GAAI,WAAc,GAAI,sBAAyB,GAAI,kBAAqB,GAAI,kBAAqB,GAAI,MAAS,GAAI,aAAgB,GAAI,wBAA2B,GAAI,oBAAuB,GAAI,oBAAuB,GAAI,iBAAoB,GAAI,mBAAsB,GAAI,6BAAgC,GAAI,yBAA4B,GAAI,yBAA4B,GAAI,kBAAqB,GAAI,QAAW,GAAI,aAAgB,GAAI,qBAAwB,GAAI,cAAiB,GAAI,KAAQ,GAAI,qBAAwB,GAAI,iBAAoB,GAAI,eAAkB,GAAI,qBAAwB,GAAI,iBAAoB,GAAI,gBAAmB,GAAI,aAAgB,GAAI,YAAe,GAAI,oBAAuB,GAAI,gBAAmB,GAAI,iBAAoB,GAAI,mBAAsB,GAAI,6BAAgC,GAAI,yBAA4B,GAAI,MAAS,GAAI,MAAS,GAAI,WAAc,GAAI,kBAAqB,GAAI,cAAiB,GAAI,YAAe,GAAI,KAAQ,GAAI,sBAAyB,GAAI,YAAe,GAAI,GAAM,GAAI,OAAU,GAAI,YAAe,GAAI,kBAAqB,GAAI,6BAAgC,GAAI,mBAAsB,GAAI,KAAQ,GAAI,SAAY,GAAI,OAAU,GAAI,OAAU,GAAI,QAAW,GAAI,UAAa,GAAI,KAAQ,GAAI,KAAQ,GAAI,aAAgB,GAAI,IAAO,GAAI,QAAW,EAAG,KAAQ,GAC1xDC,WAAY,CAAE,EAAG,QAAS,EAAG,MAAO,GAAI,UAAW,GAAI,UAAW,GAAI,gBAAiB,GAAI,iBAAkB,GAAI,kBAAmB,GAAI,aAAc,GAAI,QAAS,GAAI,eAAgB,GAAI,qBAAsB,GAAI,UAAW,GAAI,gBAAiB,GAAI,OAAQ,GAAI,iBAAkB,GAAI,kBAAmB,GAAI,eAAgB,GAAI,qBAAsB,GAAI,aAAc,GAAI,cAAe,GAAI,KAAM,GAAI,SAAU,GAAI,oBAAqB,GAAI,qBAAsB,GAAI,SAAU,GAAI,SAAU,GAAI,UAAW,GAAI,YAAa,GAAI,OAAQ,GAAI,OAAQ,GAAI,OACpiBC,aAAc,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAAI,GAAI,CAAC,GAA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AAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,KAAM,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAM,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,IAAM,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,EAAG,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,KAAM,GAAI,KAAO,CAAE,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,MAAQ,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,GAAI,CAAC,EAAG,KAAO,CAAE,GAAI,CAAC,EAAG,IAAK,G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","sources":["webpack://SITNA/./TC/control/ eager ^\\.\\/.*$ namespace object","webpack://SITNA/./TC/control/ lazy ^\\.\\/.*$ namespace object","webpack://SITNA/./SITNA/feature/Circle.js","webpack://SITNA/./SITNA/feature/Feature.js","webpack://SITNA/./SITNA/feature/Marker.js","webpack://SITNA/./SITNA/feature/MultiMarker.js","webpack://SITNA/./SITNA/feature/MultiPoint.js","webpack://SITNA/./SITNA/feature/MultiPolygon.js","webpack://SITNA/./SITNA/feature/MultiPolyline.js","webpack://SITNA/./SITNA/feature/Point.js","webpack://SITNA/./SITNA/feature/Polygon.js","webpack://SITNA/./SITNA/feature/Polyline.js","webpack://SITNA/./workers/tc-caps-web-worker-blob.mjs","webpack://SITNA/./SITNA/layer/Layer.js","webpack://SITNA/./SITNA/layer/Raster.js","webpack://SITNA/./workers/tc-dft-web-worker-blob.mjs","webpack://SITNA/./SITNA/layer/Vector.js","webpack://SITNA/./SITNA/ui/Button.js","webpack://SITNA/./SITNA/ui/Component.js","webpack://SITNA/./SITNA/ui/Toggle.js","webpack://SITNA/./TC.js","webpack://SITNA/./TC/Cfg.js","webpack://SITNA/./TC/Consts.js","webpack://SITNA/./TC/Control.js","webpack://SITNA/./TC/EventTarget.js","webpack://SITNA/./TC/Geometry.js","webpack://SITNA/./workers/tc-jsonpack-web-worker-blob.mjs","webpack://SITNA/./TC/Map.js","webpack://SITNA/./TC/Util.js","webpack://SITNA/./TC/control/Attribution.js","webpack://SITNA/./TC/control/BasemapSelector.js","webpack://SITNA/./TC/control/CacheBuilder.js","webpack://SITNA/./TC/control/Click.js","webpack://SITNA/./TC/control/Container.js","webpack://SITNA/./TC/control/ControlContainer.js","webpack://SITNA/./TC/control/Coordinates.js","webpack://SITNA/./TC/control/DataLoader.js","webpack://SITNA/./TC/control/Download.js","webpack://SITNA/./TC/control/Draw.js","webpack://SITNA/./TC/control/DrawMeasureModify.js","webpack://SITNA/./TC/control/Edit.js","webpack://SITNA/./TC/control/Elevation.js","webpack://SITNA/./TC/control/ExternalWMS.js","webpack://SITNA/./TC/control/FeatureDownloadDialog.js","webpack://SITNA/./TC/control/FeatureInfo.js","webpack://SITNA/./TC/control/FeatureInfoCommons.js","webpack://SITNA/./TC/control/FeatureStyler.js","webpack://SITNA/./TC/control/FeatureTools.js","webpack://SITNA/./TC/control/FileEdit.js","webpack://SITNA/./TC/control/FileImport.js","webpack://SITNA/./TC/control/FullScreen.js","webpack://SITNA/./TC/control/Geolocation.js","webpack://SITNA/./TC/control/GeometryFeatureInfo.js","webpack://SITNA/./TC/control/LanguageSelector.js","webpack://SITNA/./TC/control/LayerCatalog.js","webpack://SITNA/./TC/control/Legend.js","webpack://SITNA/./TC/control/LineFeatureInfo.js","webpack://SITNA/./TC/control/ListTOC.js","webpack://SITNA/./TC/control/LoadingIndicator.js","webpack://SITNA/./TC/control/MapContents.js","webpack://SITNA/./TC/control/MapInfo.js","webpack://SITNA/./TC/control/Measure.js","webpack://SITNA/./TC/control/Measurement.js","webpack://SITNA/./TC/control/Modify.js","webpack://SITNA/./TC/control/MultiFeatureInfo.js","webpack://SITNA/./TC/control/NavBar.js","webpack://SITNA/./TC/control/NavBarHome.js","webpack://SITNA/./TC/control/OfflineMapMaker.js","webpack://SITNA/./TC/control/OverviewMap.js","webpack://SITNA/./TC/control/PolygonFeatureInfo.js","webpack://SITNA/./TC/control/Popup.js","webpack://SITNA/./TC/control/Print.js","webpack://SITNA/./TC/control/PrintMap.js","webpack://SITNA/./TC/control/ProjectionSelector.js","webpack://SITNA/./TC/control/ResultsPanel.js","webpack://SITNA/./TC/control/SWCacheClient.js","webpack://SITNA/./TC/control/Scale.js","webpack://SITNA/./TC/control/ScaleBar.js","webpack://SITNA/./TC/control/ScaleSelector.js","webpack://SITNA/./TC/control/Search.js","webpack://SITNA/./TC/control/SelectContainer.js","webpack://SITNA/./TC/control/Share.js","webpack://SITNA/./TC/control/StreetView.js","webpack://SITNA/./TC/control/TOC.js","webpack://SITNA/./TC/control/TabContainer.js","webpack://SITNA/./TC/control/ThreeD.js","webpack://SITNA/./TC/control/WFSEdit.js","webpack://SITNA/./TC/control/WFSQuery.js","webpack://SITNA/./TC/control/WebComponentControl.js","webpack://SITNA/./TC/control/WorkLayerManager.js","webpack://SITNA/./TC/control/infoShare.js","webpack://SITNA/./TC/control/itemToolContainer.js","webpack://SITNA/./TC/control/layerOwner.js","webpack://SITNA/./TC/filter.js","webpack://SITNA/./TC/i18n.js","webpack://SITNA/./node_modules/ol/src/util.js","webpack://SITNA/./node_modules/ol/src/Disposable.js","webpack://SITNA/./node_modules/ol/src/array.js","webpack://SITNA/./node_modules/ol/src/functions.js","webpack://SITNA/./node_modules/ol/src/has.js","webpack://SITNA/./node_modules/ol/src/AssertionError.js","webpack://SITNA/./node_modules/ol/src/asserts.js","webpack://SITNA/./node_modules/ol/src/transform.js","webpack://SITNA/./node_modules/ol/src/extent/Relationship.js","webpack://SITNA/./node_modules/ol/src/extent.js","webpack://SITNA/./node_modules/ol/src/math.js","webpack://SITNA/./node_modules/ol/src/color.js","webpack://SITNA/./node_modules/ol/src/style/IconImageCache.js","webpack://SITNA/./node_modules/ol/src/events/Event.js","webpack://SITNA/./node_modules/ol/src/ObjectEventType.js","webpack://SITNA/./node_modules/ol/src/obj.js","webpack://SITNA/./node_modules/ol/src/events/Target.js","webpack://SITNA/./node_modules/ol/src/events/EventType.js","webpack://SITNA/./node_modules/ol/src/events.js","webpack://SITNA/./node_modules/ol/src/Observable.js","webpack://SITNA/./node_modules/ol/src/Object.js","webpack://SITNA/./node_modules/ol/src/layer/Property.js","webpack://SITNA/./node_modules/ol/src/layer/Base.js","webpack://SITNA/./node_modules/ol/src/render/EventType.js","webpack://SITNA/./node_modules/ol/src/layer/Layer.js","webpack://SITNA/./node_modules/ol/src/coordinate.js","webpack://SITNA/./node_modules/ol/src/renderer/Map.js","webpack://SITNA/./node_modules/ol/src/render/Event.js","webpack://SITNA/./node_modules/ol/src/css.js","webpack://SITNA/./node_modules/ol/src/dom.js","webpack://SITNA/./node_modules/ol/src/render/canvas.js","webpack://SITNA/./node_modules/ol/src/renderer/Composite.js","webpack://SITNA/./node_modules/ol/src/CollectionEventType.js","webpack://SITNA/./node_modules/ol/src/Collection.js","webpack://SITNA/./node_modules/ol/src/layer/Group.js","webpack://SITNA/./node_modules/ol/src/MapEvent.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEvent.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEventType.js","webpack://SITNA/./node_modules/ol/src/pointer/EventType.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEventHandler.js","webpack://SITNA/./node_modules/ol/src/MapEventType.js","webpack://SITNA/./node_modules/ol/src/MapProperty.js","webpack://SITNA/./node_modules/ol/src/structs/PriorityQueue.js","webpack://SITNA/./node_modules/ol/src/TileState.js","webpack://SITNA/./node_modules/ol/src/TileQueue.js","webpack://SITNA/./node_modules/ol/src/proj/Units.js","webpack://SITNA/./node_modules/ol/src/ViewHint.js","webpack://SITNA/./node_modules/ol/src/ViewProperty.js","webpack://SITNA/./node_modules/ol/src/tilegrid/common.js","webpack://SITNA/./node_modules/ol/src/proj/Projection.js","webpack://SITNA/./node_modules/ol/src/proj/epsg3857.js","webpack://SITNA/./node_modules/ol/src/proj/epsg4326.js","webpack://SITNA/./node_modules/ol/src/proj/projections.js","webpack://SITNA/./node_modules/ol/src/proj/transforms.js","webpack://SITNA/./node_modules/ol/src/sphere.js","webpack://SITNA/./node_modules/ol/src/proj.js","webpack://SITNA/./node_modules/ol/src/centerconstraint.js","webpack://SITNA/./node_modules/ol/src/resolutionconstraint.js","webpack://SITNA/./node_modules/ol/src/rotationconstraint.js","webpack://SITNA/./node_modules/ol/src/easing.js","webpack://SITNA/./node_modules/ol/src/geom/GeometryLayout.js","webpack://SITNA/./node_modules/ol/src/geom/flat/transform.js","webpack://SITNA/./node_modules/ol/src/geom/Geometry.js","webpack://SITNA/./node_modules/ol/src/geom/SimpleGeometry.js","webpack://SITNA/./node_modules/ol/src/geom/flat/closest.js","webpack://SITNA/./node_modules/ol/src/geom/flat/deflate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/simplify.js","webpack://SITNA/./node_modules/ol/src/geom/flat/inflate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/area.js","webpack://SITNA/./node_modules/ol/src/geom/LinearRing.js","webpack://SITNA/./node_modules/ol/src/geom/Point.js","webpack://SITNA/./node_modules/ol/src/geom/flat/contains.js","webpack://SITNA/./node_modules/ol/src/geom/flat/interiorpoint.js","webpack://SITNA/./node_modules/ol/src/geom/flat/segments.js","webpack://SITNA/./node_modules/ol/src/geom/flat/intersectsextent.js","webpack://SITNA/./node_modules/ol/src/geom/flat/reverse.js","webpack://SITNA/./node_modules/ol/src/geom/flat/orient.js","webpack://SITNA/./node_modules/ol/src/geom/Polygon.js","webpack://SITNA/./node_modules/ol/src/View.js","webpack://SITNA/./node_modules/ol/src/size.js","webpack://SITNA/./node_modules/ol/src/PluggableMap.js","webpack://SITNA/./node_modules/ol/src/control/Control.js","webpack://SITNA/./node_modules/ol/src/control/Attribution.js","webpack://SITNA/./node_modules/ol/src/control/Rotate.js","webpack://SITNA/./node_modules/ol/src/control/Zoom.js","webpack://SITNA/./node_modules/ol/src/interaction/Property.js","webpack://SITNA/./node_modules/ol/src/interaction/Interaction.js","webpack://SITNA/./node_modules/ol/src/interaction/DoubleClickZoom.js","webpack://SITNA/./node_modules/ol/src/interaction/Pointer.js","webpack://SITNA/./node_modules/ol/src/events/condition.js","webpack://SITNA/./node_modules/ol/src/interaction/DragPan.js","webpack://SITNA/./node_modules/ol/src/interaction/DragRotate.js","webpack://SITNA/./node_modules/ol/src/render/Box.js","webpack://SITNA/./node_modules/ol/src/interaction/DragBox.js","webpack://SITNA/./node_modules/ol/src/interaction/DragZoom.js","webpack://SITNA/./node_modules/ol/src/events/KeyCode.js","webpack://SITNA/./node_modules/ol/src/interaction/KeyboardPan.js","webpack://SITNA/./node_modules/ol/src/interaction/KeyboardZoom.js","webpack://SITNA/./node_modules/ol/src/Kinetic.js","webpack://SITNA/./node_modules/ol/src/interaction/MouseWheelZoom.js","webpack://SITNA/./node_modules/ol/src/interaction/PinchRotate.js","webpack://SITNA/./node_modules/ol/src/interaction/PinchZoom.js","webpack://SITNA/./node_modules/ol/src/interaction.js","webpack://SITNA/./node_modules/ol/src/Map.js","webpack://SITNA/./node_modules/ol/src/control.js","webpack://SITNA/./node_modules/ol/src/Overlay.js","webpack://SITNA/./node_modules/ol/src/string.js","webpack://SITNA/./node_modules/ol/src/control/OverviewMap.js","webpack://SITNA/./node_modules/ol/src/control/ScaleLine.js","webpack://SITNA/./node_modules/ol/src/control/ZoomToExtent.js","webpack://SITNA/./node_modules/ol/src/control/ZoomSlider.js","webpack://SITNA/./node_modules/ol/src/Feature.js","webpack://SITNA/./node_modules/ol/src/geom/MultiPoint.js","webpack://SITNA/./node_modules/ol/src/geom/flat/interpolate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/length.js","webpack://SITNA/./node_modules/ol/src/geom/LineString.js","webpack://SITNA/./node_modules/ol/src/geom/MultiLineString.js","webpack://SITNA/./node_modules/ol/src/geom/MultiPolygon.js","webpack://SITNA/./node_modules/ol/src/geom/flat/center.js","webpack://SITNA/./node_modules/ol/src/geom/Circle.js","webpack://SITNA/./node_modules/ol/src/geom/GeometryCollection.js","webpack://SITNA/./node_modules/ol/src/featureloader.js","webpack://SITNA/./node_modules/ol/src/format/Feature.js","webpack://SITNA/./node_modules/ol/src/xml.js","webpack://SITNA/./node_modules/ol/src/format/XMLFeature.js","webpack://SITNA/./node_modules/ol/src/format/GMLBase.js","webpack://SITNA/./lib/ol/format/GMLBase.js","webpack://SITNA/./node_modules/ol/src/format/xsd.js","webpack://SITNA/./node_modules/ol/src/format/GML2.js","webpack://SITNA/./node_modules/ol/src/format/GML3.js","webpack://SITNA/./node_modules/ol/src/format/GML.js","webpack://SITNA/./node_modules/ol/src/format/GML32.js","webpack://SITNA/./node_modules/ol/src/format/filter/Filter.js","webpack://SITNA/./node_modules/ol/src/format/filter/LogicalNary.js","webpack://SITNA/./node_modules/ol/src/format/filter/And.js","webpack://SITNA/./node_modules/ol/src/format/filter/Bbox.js","webpack://SITNA/./node_modules/ol/src/format/WFS.js","webpack://SITNA/./node_modules/ol/src/format/filter.js","webpack://SITNA/./node_modules/ol/src/format/TextFeature.js","webpack://SITNA/./node_modules/ol/src/format/WKT.js","webpack://SITNA/./node_modules/ol/src/format/WKB.js","webpack://SITNA/./node_modules/ol/src/format/XML.js","webpack://SITNA/./node_modules/ol/src/format/xlink.js","webpack://SITNA/./node_modules/ol/src/format/WMSCapabilities.js","webpack://SITNA/./node_modules/ol/src/format/WMSGetFeatureInfo.js","webpack://SITNA/./node_modules/ol/src/format/OWS.js","webpack://SITNA/./node_modules/ol/src/format/WMTSCapabilities.js","webpack://SITNA/./node_modules/ol/src/format/JSONFeature.js","webpack://SITNA/./node_modules/ol/src/format/TopoJSON.js","webpack://SITNA/./node_modules/ol/src/format/GeoJSON.js","webpack://SITNA/./lib/ol/format/GeoJSON.js","webpack://SITNA/./lib/ol/format/GPX.js","webpack://SITNA/./node_modules/ol/src/style/Fill.js","webpack://SITNA/./node_modules/ol/src/style/IconAnchorUnits.js","webpack://SITNA/./node_modules/ol/src/style/IconOrigin.js","webpack://SITNA/./node_modules/ol/src/ImageState.js","webpack://SITNA/./node_modules/ol/src/style/Image.js","webpack://SITNA/./node_modules/ol/src/ImageBase.js","webpack://SITNA/./node_modules/ol/src/Image.js","webpack://SITNA/./node_modules/ol/src/style/IconImage.js","webpack://SITNA/./node_modules/ol/src/style/Icon.js","webpack://SITNA/./node_modules/ol/src/style/Stroke.js","webpack://SITNA/./node_modules/ol/src/colorlike.js","webpack://SITNA/./node_modules/ol/src/style/RegularShape.js","webpack://SITNA/./node_modules/ol/src/style/Circle.js","webpack://SITNA/./node_modules/ol/src/style/Style.js","webpack://SITNA/./node_modules/ol/src/style/TextPlacement.js","webpack://SITNA/./node_modules/ol/src/style/Text.js","webpack://SITNA/./node_modules/ol/src/format/KML.js","webpack://SITNA/./lib/ol/format/KML.js","webpack://SITNA/./node_modules/ol/src/layer/BaseVector.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Instruction.js","webpack://SITNA/./node_modules/ol/src/render/VectorContext.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Builder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/ImageBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/LineStringBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/PolygonBuilder.js","webpack://SITNA/./node_modules/ol/src/geom/flat/straightchunk.js","webpack://SITNA/./node_modules/ol/src/render/canvas/TextBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/BuilderGroup.js","webpack://SITNA/./node_modules/ol/src/renderer/Layer.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/Layer.js","webpack://SITNA/./node_modules/ol/src/geom/flat/textpath.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Executor.js","webpack://SITNA/./node_modules/ol/src/render/canvas/ExecutorGroup.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Immediate.js","webpack://SITNA/./node_modules/ol/src/render/canvas/hitdetect.js","webpack://SITNA/./node_modules/ol/src/renderer/vector.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/VectorLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Vector.js","webpack://SITNA/./node_modules/ol/src/structs/RBush.js","webpack://SITNA/./node_modules/ol/src/source/Source.js","webpack://SITNA/./node_modules/ol/src/source/VectorEventType.js","webpack://SITNA/./node_modules/ol/src/loadingstrategy.js","webpack://SITNA/./node_modules/ol/src/source/Vector.js","webpack://SITNA/./node_modules/ol/src/interaction/Draw.js","webpack://SITNA/./node_modules/ol/src/interaction/Translate.js","webpack://SITNA/./node_modules/ol/src/interaction/Snap.js","webpack://SITNA/./node_modules/ol/src/interaction/Select.js","webpack://SITNA/./node_modules/ol/src/interaction/Modify.js","webpack://SITNA/./node_modules/ol/src/interaction/DragAndDrop.js","webpack://SITNA/./lib/ol/interaction/DragAndDrop.js","webpack://SITNA/./node_modules/ol/src/layer/TileProperty.js","webpack://SITNA/./node_modules/ol/src/layer/BaseTile.js","webpack://SITNA/./node_modules/ol/src/Tile.js","webpack://SITNA/./node_modules/ol/src/ImageTile.js","webpack://SITNA/./node_modules/ol/src/reproj/Triangulation.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/common.js","webpack://SITNA/./node_modules/ol/src/reproj.js","webpack://SITNA/./node_modules/ol/src/reproj/Tile.js","webpack://SITNA/./node_modules/ol/src/reproj/common.js","webpack://SITNA/./node_modules/ol/src/TileRange.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/TileLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Tile.js","webpack://SITNA/./node_modules/ol/src/layer/BaseImage.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/ImageLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Image.js","webpack://SITNA/./node_modules/ol/src/webgl.js","webpack://SITNA/./node_modules/ol/src/webgl/Buffer.js","webpack://SITNA/./node_modules/ol/src/webgl/ContextEventType.js","webpack://SITNA/./node_modules/ol/src/webgl/PostProcessingPass.js","webpack://SITNA/./node_modules/ol/src/vec/mat4.js","webpack://SITNA/./node_modules/ol/src/webgl/Helper.js","webpack://SITNA/./node_modules/ol/src/renderer/webgl/Layer.js","webpack://SITNA/./node_modules/ol/src/webgl/RenderTarget.js","webpack://SITNA/./node_modules/ol/src/renderer/webgl/PointsLayer.js","webpack://SITNA/./node_modules/ol/src/worker/webgl.js","webpack://SITNA/./node_modules/ol/src/layer/Heatmap.js","webpack://SITNA/./node_modules/ol/src/tilecoord.js","webpack://SITNA/./node_modules/ol/src/tilegrid/TileGrid.js","webpack://SITNA/./node_modules/ol/src/source/Cluster.js","webpack://SITNA/./node_modules/ol/src/reproj/Image.js","webpack://SITNA/./node_modules/ol/src/source/Image.js","webpack://SITNA/./node_modules/ol/src/source/wms.js","webpack://SITNA/./node_modules/ol/src/uri.js","webpack://SITNA/./node_modules/ol/src/source/ImageWMS.js","webpack://SITNA/./node_modules/ol/src/structs/LRUCache.js","webpack://SITNA/./node_modules/ol/src/TileCache.js","webpack://SITNA/./node_modules/ol/src/source/TileEventType.js","webpack://SITNA/./node_modules/ol/src/tilegrid.js","webpack://SITNA/./node_modules/ol/src/source/Tile.js","webpack://SITNA/./node_modules/ol/src/tileurlfunction.js","webpack://SITNA/./node_modules/ol/src/source/UrlTile.js","webpack://SITNA/./node_modules/ol/src/source/TileImage.js","webpack://SITNA/./node_modules/ol/src/tilegrid/WMTS.js","webpack://SITNA/./node_modules/ol/src/source/WMTS.js","webpack://SITNA/./node_modules/ol/src/ImageCanvas.js","webpack://SITNA/./node_modules/ol/src/source/ImageCanvas.js","webpack://SITNA/./TC/ol/ol.js","webpack://SITNA/./node_modules/ol/src/proj/proj4.js","webpack://SITNA/./node_modules/ol/src/render.js","webpack://SITNA/./TC/tool/ExcelExport.js","webpack://SITNA/./TC/tool/Proxification.js","webpack://SITNA/./TC/ui/autocomplete.js","webpack://SITNA/./TC/view/ThreeDDraw.js","webpack://SITNA/./TC/templates/tc-view-3d-overlay.mjs","webpack://SITNA/./TC/templates/tc-view-3d-cm-ctls.mjs","webpack://SITNA/./TC/view/ThreeD.js","webpack://SITNA/./TC/wrap.js","webpack://SITNA/./lib/handlebars/helpers.js","webpack://SITNA/./node_modules/base64-js/index.js","webpack://SITNA/./node_modules/buffer/index.js","webpack://SITNA/./node_modules/charenc/charenc.js","webpack://SITNA/./node_modules/crypt/crypt.js","webpack://SITNA/./node_modules/handlebars/dist/handlebars.js","webpack://SITNA/./node_modules/ieee754/index.js","webpack://SITNA/./node_modules/is-buffer/index.js","webpack://SITNA/./node_modules/jsnlog/jsnlog.ts","webpack://SITNA/./node_modules/jszip/dist/jszip.min.js","webpack://SITNA/./node_modules/loadjs/dist/loadjs.umd.js","webpack://SITNA/./node_modules/localforage/dist/localforage.js","webpack://SITNA/./node_modules/md5/md5.js","webpack://SITNA/./node_modules/proj4/lib/constants/values.js","webpack://SITNA/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://SITNA/./node_modules/proj4/lib/constants/units.js","webpack://SITNA/./node_modules/proj4/lib/match.js","webpack://SITNA/./node_modules/proj4/lib/projString.js","webpack://SITNA/./node_modules/wkt-parser/parser.js","webpack://SITNA/./node_modules/wkt-parser/process.js","webpack://SITNA/./node_modules/wkt-parser/index.js","webpack://SITNA/./node_modules/proj4/lib/defs.js","webpack://SITNA/./node_modules/proj4/lib/global.js","webpack://SITNA/./node_modules/proj4/lib/parseCode.js","webpack://SITNA/./node_modules/proj4/lib/extend.js","webpack://SITNA/./node_modules/proj4/lib/common/msfnz.js","webpack://SITNA/./node_modules/proj4/lib/common/sign.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_lon.js","webpack://SITNA/./node_modules/proj4/lib/common/tsfnz.js","webpack://SITNA/./node_modules/proj4/lib/common/phi2z.js","webpack://SITNA/./node_modules/proj4/lib/projections/longlat.js","webpack://SITNA/./node_modules/proj4/lib/projections.js","webpack://SITNA/./node_modules/proj4/lib/projections/merc.js","webpack://SITNA/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://SITNA/./node_modules/proj4/lib/constants/Datum.js","webpack://SITNA/./node_modules/proj4/lib/datum.js","webpack://SITNA/./node_modules/proj4/lib/nadgrid.js","webpack://SITNA/./node_modules/proj4/lib/Proj.js","webpack://SITNA/./node_modules/proj4/lib/deriveConstants.js","webpack://SITNA/./node_modules/proj4/lib/datumUtils.js","webpack://SITNA/./node_modules/proj4/lib/datum_transform.js","webpack://SITNA/./node_modules/proj4/lib/adjust_axis.js","webpack://SITNA/./node_modules/proj4/lib/common/toPoint.js","webpack://SITNA/./node_modules/proj4/lib/checkSanity.js","webpack://SITNA/./node_modules/proj4/lib/transform.js","webpack://SITNA/./node_modules/proj4/lib/core.js","webpack://SITNA/./node_modules/mgrs/mgrs.js","webpack://SITNA/./node_modules/proj4/lib/Point.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_enfn.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://SITNA/./node_modules/proj4/lib/projections/tmerc.js","webpack://SITNA/./node_modules/proj4/lib/common/sinh.js","webpack://SITNA/./node_modules/proj4/lib/common/hypot.js","webpack://SITNA/./node_modules/proj4/lib/common/asinhy.js","webpack://SITNA/./node_modules/proj4/lib/common/log1py.js","webpack://SITNA/./node_modules/proj4/lib/common/gatg.js","webpack://SITNA/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://SITNA/./node_modules/proj4/lib/common/cosh.js","webpack://SITNA/./node_modules/proj4/lib/projections/etmerc.js","webpack://SITNA/./node_modules/proj4/lib/common/clens.js","webpack://SITNA/./node_modules/proj4/lib/projections/utm.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_zone.js","webpack://SITNA/./node_modules/proj4/lib/common/srat.js","webpack://SITNA/./node_modules/proj4/lib/projections/gauss.js","webpack://SITNA/./node_modules/proj4/lib/projections/sterea.js","webpack://SITNA/./node_modules/proj4/lib/projections/stere.js","webpack://SITNA/./node_modules/proj4/lib/projections/somerc.js","webpack://SITNA/./node_modules/proj4/lib/projections/omerc.js","webpack://SITNA/./node_modules/proj4/lib/projections/lcc.js","webpack://SITNA/./node_modules/proj4/lib/projections/krovak.js","webpack://SITNA/./node_modules/proj4/lib/common/mlfn.js","webpack://SITNA/./node_modules/proj4/lib/common/e0fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e1fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e2fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e3fn.js","webpack://SITNA/./node_modules/proj4/lib/common/gN.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_lat.js","webpack://SITNA/./node_modules/proj4/lib/common/imlfn.js","webpack://SITNA/./node_modules/proj4/lib/projections/cass.js","webpack://SITNA/./node_modules/proj4/lib/common/qsfnz.js","webpack://SITNA/./node_modules/proj4/lib/projections/laea.js","webpack://SITNA/./node_modules/proj4/lib/common/asinz.js","webpack://SITNA/./node_modules/proj4/lib/projections/aea.js","webpack://SITNA/./node_modules/proj4/lib/projections/gnom.js","webpack://SITNA/./node_modules/proj4/lib/projections/cea.js","webpack://SITNA/./node_modules/proj4/lib/common/iqsfnz.js","webpack://SITNA/./node_modules/proj4/lib/projections/eqc.js","webpack://SITNA/./node_modules/proj4/lib/projections/poly.js","webpack://SITNA/./node_modules/proj4/lib/projections/nzmg.js","webpack://SITNA/./node_modules/proj4/lib/projections/mill.js","webpack://SITNA/./node_modules/proj4/lib/projections/sinu.js","webpack://SITNA/./node_modules/proj4/lib/projections/moll.js","webpack://SITNA/./node_modules/proj4/lib/projections/eqdc.js","webpack://SITNA/./node_modules/proj4/lib/projections/vandg.js","webpack://SITNA/./node_modules/proj4/lib/projections/aeqd.js","webpack://SITNA/./node_modules/proj4/lib/projections/ortho.js","webpack://SITNA/./node_modules/proj4/lib/projections/qsc.js","webpack://SITNA/./node_modules/proj4/lib/projections/robin.js","webpack://SITNA/./node_modules/proj4/lib/projections/geocent.js","webpack://SITNA/./node_modules/proj4/lib/projections/tpers.js","webpack://SITNA/./node_modules/proj4/lib/projections/geos.js","webpack://SITNA/./node_modules/proj4/lib/index.js","webpack://SITNA/./node_modules/proj4/projs.js","webpack://SITNA/./node_modules/rbush/rbush.min.js","webpack://SITNA/./node_modules/ua-parser-js/src/ua-parser.js","webpack://SITNA/./TC/templates/tc-ctl-3d.mjs","webpack://SITNA/webpack/bootstrap","webpack://SITNA/webpack/runtime/create fake namespace object","webpack://SITNA/webpack/runtime/load script","webpack://SITNA/webpack/runtime/amd options","webpack://SITNA/webpack/runtime/compat get default export","webpack://SITNA/webpack/runtime/define property getters","webpack://SITNA/webpack/runtime/ensure chunk","webpack://SITNA/webpack/runtime/get javascript chunk filename","webpack://SITNA/webpack/runtime/global","webpack://SITNA/webpack/runtime/hasOwnProperty shorthand","webpack://SITNA/webpack/runtime/make namespace object","webpack://SITNA/webpack/runtime/publicPath","webpack://SITNA/webpack/runtime/jsonp chunk loading","webpack://SITNA/./SITNA/Map.js","webpack://SITNA/./SITNA/ui/Tab.js","webpack://SITNA/./sitna.js"],"sourcesContent":["var map = {\n\t\"./Attribution\": 9753,\n\t\"./Attribution.js\": 9753,\n\t\"./BasemapSelector\": 7687,\n\t\"./BasemapSelector.js\": 7687,\n\t\"./CacheBuilder\": 3041,\n\t\"./CacheBuilder.js\": 3041,\n\t\"./Click\": 5669,\n\t\"./Click.js\": 5669,\n\t\"./Container\": 3678,\n\t\"./Container.js\": 3678,\n\t\"./ControlContainer\": 9524,\n\t\"./ControlContainer.js\": 9524,\n\t\"./Coordinates\": 6188,\n\t\"./Coordinates.js\": 6188,\n\t\"./DataLoader\": 8002,\n\t\"./DataLoader.js\": 8002,\n\t\"./Download\": 658,\n\t\"./Download.js\": 658,\n\t\"./Draw\": 1235,\n\t\"./Draw.js\": 1235,\n\t\"./DrawMeasureModify\": 4975,\n\t\"./DrawMeasureModify.js\": 4975,\n\t\"./Edit\": 4916,\n\t\"./Edit.js\": 4916,\n\t\"./Elevation\": 2212,\n\t\"./Elevation.js\": 2212,\n\t\"./ExternalWMS\": 2429,\n\t\"./ExternalWMS.js\": 2429,\n\t\"./FeatureDownloadDialog\": 3697,\n\t\"./FeatureDownloadDialog.js\": 3697,\n\t\"./FeatureInfo\": 2863,\n\t\"./FeatureInfo.js\": 2863,\n\t\"./FeatureInfoCommons\": 4094,\n\t\"./FeatureInfoCommons.js\": 4094,\n\t\"./FeatureStyler\": 9717,\n\t\"./FeatureStyler.js\": 9717,\n\t\"./FeatureTools\": 1497,\n\t\"./FeatureTools.js\": 1497,\n\t\"./FileEdit\": 8127,\n\t\"./FileEdit.js\": 8127,\n\t\"./FileImport\": 7622,\n\t\"./FileImport.js\": 7622,\n\t\"./FullScreen\": 707,\n\t\"./FullScreen.js\": 707,\n\t\"./Geolocation\": 5573,\n\t\"./Geolocation.js\": 5573,\n\t\"./GeometryFeatureInfo\": 1885,\n\t\"./GeometryFeatureInfo.js\": 1885,\n\t\"./LanguageSelector\": 4743,\n\t\"./LanguageSelector.js\": 4743,\n\t\"./LayerCatalog\": 4997,\n\t\"./LayerCatalog.js\": 4997,\n\t\"./Legend\": 6460,\n\t\"./Legend.js\": 6460,\n\t\"./LineFeatureInfo\": 9186,\n\t\"./LineFeatureInfo.js\": 9186,\n\t\"./ListTOC\": 9886,\n\t\"./ListTOC.js\": 9886,\n\t\"./LoadingIndicator\": 9945,\n\t\"./LoadingIndicator.js\": 9945,\n\t\"./MapContents\": 8239,\n\t\"./MapContents.js\": 8239,\n\t\"./MapInfo\": 3784,\n\t\"./MapInfo.js\": 3784,\n\t\"./Measure\": 3965,\n\t\"./Measure.js\": 3965,\n\t\"./Measurement\": 895,\n\t\"./Measurement.js\": 895,\n\t\"./Modify\": 5516,\n\t\"./Modify.js\": 5516,\n\t\"./MultiFeatureInfo\": 1391,\n\t\"./MultiFeatureInfo.js\": 1391,\n\t\"./NavBar\": 4234,\n\t\"./NavBar.js\": 4234,\n\t\"./NavBarHome\": 2855,\n\t\"./NavBarHome.js\": 2855,\n\t\"./OfflineMapMaker\": 6994,\n\t\"./OfflineMapMaker.js\": 6994,\n\t\"./OverviewMap\": 6436,\n\t\"./OverviewMap.js\": 6436,\n\t\"./PolygonFeatureInfo\": 9889,\n\t\"./PolygonFeatureInfo.js\": 9889,\n\t\"./Popup\": 5590,\n\t\"./Popup.js\": 5590,\n\t\"./Print\": 674,\n\t\"./Print.js\": 674,\n\t\"./PrintMap\": 4283,\n\t\"./PrintMap.js\": 4283,\n\t\"./ProjectionSelector\": 7292,\n\t\"./ProjectionSelector.js\": 7292,\n\t\"./ResultsPanel\": 8644,\n\t\"./ResultsPanel.js\": 8644,\n\t\"./SWCacheClient\": 5515,\n\t\"./SWCacheClient.js\": 5515,\n\t\"./Scale\": 8792,\n\t\"./Scale.js\": 8792,\n\t\"./ScaleBar\": 9510,\n\t\"./ScaleBar.js\": 9510,\n\t\"./ScaleSelector\": 6161,\n\t\"./ScaleSelector.js\": 6161,\n\t\"./Search\": 9085,\n\t\"./Search.js\": 9085,\n\t\"./SelectContainer\": 333,\n\t\"./SelectContainer.js\": 333,\n\t\"./Share\": 2749,\n\t\"./Share.js\": 2749,\n\t\"./StreetView\": 3510,\n\t\"./StreetView.js\": 3510,\n\t\"./TOC\": 2006,\n\t\"./TOC.js\": 2006,\n\t\"./TabContainer\": 3640,\n\t\"./TabContainer.js\": 3640,\n\t\"./ThreeD\": 7885,\n\t\"./ThreeD.js\": 7885,\n\t\"./WFSEdit\": 5122,\n\t\"./WFSEdit.js\": 5122,\n\t\"./WFSQuery\": 6564,\n\t\"./WFSQuery.js\": 6564,\n\t\"./WebComponentControl\": 2461,\n\t\"./WebComponentControl.js\": 2461,\n\t\"./WorkLayerManager\": 849,\n\t\"./WorkLayerManager.js\": 849,\n\t\"./infoShare\": 7167,\n\t\"./infoShare.js\": 7167,\n\t\"./itemToolContainer\": 5198,\n\t\"./itemToolContainer.js\": 5198,\n\t\"./layerOwner\": 2416,\n\t\"./layerOwner.js\": 2416\n};\n\n\nfunction webpackAsyncContext(req) {\n\treturn webpackAsyncContextResolve(req).then(__webpack_require__);\n}\nfunction webpackAsyncContextResolve(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\treturn map[req];\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.resolve = webpackAsyncContextResolve;\nwebpackAsyncContext.id = 837;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Attribution\": 9753,\n\t\"./Attribution.js\": 9753,\n\t\"./BasemapSelector\": 7687,\n\t\"./BasemapSelector.js\": 7687,\n\t\"./CacheBuilder\": 3041,\n\t\"./CacheBuilder.js\": 3041,\n\t\"./Click\": 5669,\n\t\"./Click.js\": 5669,\n\t\"./Container\": 3678,\n\t\"./Container.js\": 3678,\n\t\"./ControlContainer\": 9524,\n\t\"./ControlContainer.js\": 9524,\n\t\"./Coordinates\": 6188,\n\t\"./Coordinates.js\": 6188,\n\t\"./DataLoader\": 8002,\n\t\"./DataLoader.js\": 8002,\n\t\"./Download\": 658,\n\t\"./Download.js\": 658,\n\t\"./Draw\": 1235,\n\t\"./Draw.js\": 1235,\n\t\"./DrawMeasureModify\": 4975,\n\t\"./DrawMeasureModify.js\": 4975,\n\t\"./Edit\": 4916,\n\t\"./Edit.js\": 4916,\n\t\"./Elevation\": 2212,\n\t\"./Elevation.js\": 2212,\n\t\"./ExternalWMS\": 2429,\n\t\"./ExternalWMS.js\": 2429,\n\t\"./FeatureDownloadDialog\": 3697,\n\t\"./FeatureDownloadDialog.js\": 3697,\n\t\"./FeatureInfo\": 2863,\n\t\"./FeatureInfo.js\": 2863,\n\t\"./FeatureInfoCommons\": 4094,\n\t\"./FeatureInfoCommons.js\": 4094,\n\t\"./FeatureStyler\": 9717,\n\t\"./FeatureStyler.js\": 9717,\n\t\"./FeatureTools\": 1497,\n\t\"./FeatureTools.js\": 1497,\n\t\"./FileEdit\": 8127,\n\t\"./FileEdit.js\": 8127,\n\t\"./FileImport\": 7622,\n\t\"./FileImport.js\": 7622,\n\t\"./FullScreen\": 707,\n\t\"./FullScreen.js\": 707,\n\t\"./Geolocation\": 5573,\n\t\"./Geolocation.js\": 5573,\n\t\"./GeometryFeatureInfo\": 1885,\n\t\"./GeometryFeatureInfo.js\": 1885,\n\t\"./LanguageSelector\": 4743,\n\t\"./LanguageSelector.js\": 4743,\n\t\"./LayerCatalog\": 4997,\n\t\"./LayerCatalog.js\": 4997,\n\t\"./Legend\": 6460,\n\t\"./Legend.js\": 6460,\n\t\"./LineFeatureInfo\": 9186,\n\t\"./LineFeatureInfo.js\": 9186,\n\t\"./ListTOC\": 9886,\n\t\"./ListTOC.js\": 9886,\n\t\"./LoadingIndicator\": 9945,\n\t\"./LoadingIndicator.js\": 9945,\n\t\"./MapContents\": 8239,\n\t\"./MapContents.js\": 8239,\n\t\"./MapInfo\": 3784,\n\t\"./MapInfo.js\": 3784,\n\t\"./Measure\": 3965,\n\t\"./Measure.js\": 3965,\n\t\"./Measurement\": 895,\n\t\"./Measurement.js\": 895,\n\t\"./Modify\": 5516,\n\t\"./Modify.js\": 5516,\n\t\"./MultiFeatureInfo\": 1391,\n\t\"./MultiFeatureInfo.js\": 1391,\n\t\"./NavBar\": 4234,\n\t\"./NavBar.js\": 4234,\n\t\"./NavBarHome\": 2855,\n\t\"./NavBarHome.js\": 2855,\n\t\"./OfflineMapMaker\": 6994,\n\t\"./OfflineMapMaker.js\": 6994,\n\t\"./OverviewMap\": 6436,\n\t\"./OverviewMap.js\": 6436,\n\t\"./PolygonFeatureInfo\": 9889,\n\t\"./PolygonFeatureInfo.js\": 9889,\n\t\"./Popup\": 5590,\n\t\"./Popup.js\": 5590,\n\t\"./Print\": 674,\n\t\"./Print.js\": 674,\n\t\"./PrintMap\": 4283,\n\t\"./PrintMap.js\": 4283,\n\t\"./ProjectionSelector\": 7292,\n\t\"./ProjectionSelector.js\": 7292,\n\t\"./ResultsPanel\": 8644,\n\t\"./ResultsPanel.js\": 8644,\n\t\"./SWCacheClient\": 5515,\n\t\"./SWCacheClient.js\": 5515,\n\t\"./Scale\": 8792,\n\t\"./Scale.js\": 8792,\n\t\"./ScaleBar\": 9510,\n\t\"./ScaleBar.js\": 9510,\n\t\"./ScaleSelector\": 6161,\n\t\"./ScaleSelector.js\": 6161,\n\t\"./Search\": 9085,\n\t\"./Search.js\": 9085,\n\t\"./SelectContainer\": 333,\n\t\"./SelectContainer.js\": 333,\n\t\"./Share\": 2749,\n\t\"./Share.js\": 2749,\n\t\"./StreetView\": 3510,\n\t\"./StreetView.js\": 3510,\n\t\"./TOC\": 2006,\n\t\"./TOC.js\": 2006,\n\t\"./TabContainer\": 3640,\n\t\"./TabContainer.js\": 3640,\n\t\"./ThreeD\": 7885,\n\t\"./ThreeD.js\": 7885,\n\t\"./WFSEdit\": 5122,\n\t\"./WFSEdit.js\": 5122,\n\t\"./WFSQuery\": 6564,\n\t\"./WFSQuery.js\": 6564,\n\t\"./WebComponentControl\": 2461,\n\t\"./WebComponentControl.js\": 2461,\n\t\"./WorkLayerManager\": 849,\n\t\"./WorkLayerManager.js\": 849,\n\t\"./infoShare\": 7167,\n\t\"./infoShare.js\": 7167,\n\t\"./itemToolContainer\": 5198,\n\t\"./itemToolContainer.js\": 5198,\n\t\"./layerOwner\": 2416,\n\t\"./layerOwner.js\": 2416\n};\n\nfunction webpackAsyncContext(req) {\n\treturn Promise.resolve().then(() => {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\n\t\tvar id = map[req];\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 8949;\nmodule.exports = webpackAsyncContext;","import Consts from '../../TC/Consts';\r\nimport Feature from './Feature';\r\nimport Polygon from './Polygon';\r\n\r\n/**\r\n * Entidad geográfica que representa un círculo en el mapa.\r\n * @class Circle\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {SITNA.feature.CircleGeometry|Array.} geometry - Si el parámetro es un array, las coordenadas\r\n * del círculo expresadas como un array de dos elementos, el primero son las coordenadas del centro \r\n * en las unidades del CRS del mapa y el segundo son las coordenadas de un punto de su circunferencia, \r\n * en las unidades del CRS actual del mapa (metros por defecto).\r\n * @param {SITNA.feature.PolygonOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.layer.Vector#addCircle\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.Circle.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @returns {SITNA.feature.PolygonStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos al círculo.\r\n * @method setStyle\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @param {SITNA.feature.PolygonStyleOptions} style - Objeto de opciones de estilo de polígono.\r\n * @returns {SITNA.feature.Circle} La propia entidad geográfica.\r\n */\r\n\r\nclass Circle extends Feature {\r\n STYLETYPE = Consts.geom.POLYGON;\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createCircle(Circle.parseGeometry(coords), options);\r\n }\r\n }\r\n\r\n static parseGeometry(geometry) {\r\n // Adoptamos la convención de introducir las coordenadas de dos puntos:\r\n // El primero es el centro, el segundo es cualquiera de la circunferencia.\r\n let geom = geometry;\r\n if (Object.prototype.hasOwnProperty.call(geometry, 'center') &&\r\n Object.prototype.hasOwnProperty.call(geometry, 'radius')) {\r\n geom = [geometry.center, [geometry.center[0] + geometry.radius, geometry.center[1]]];\r\n }\r\n const center = geom[0];\r\n const circunferencePoint = geom[1];\r\n if (Array.isArray(geom) &&\r\n Array.isArray(center) &&\r\n !isNaN(center[0]) && !isNaN(center[1]) &&\r\n Array.isArray(circunferencePoint) &&\r\n !isNaN(circunferencePoint[0]) && !isNaN(circunferencePoint[1])) {\r\n return geom;\r\n }\r\n throw new Error('Coordinates not valid for circle');\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de la geometría del círculo en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @returns {Array.} Array cuyo primer elemento son las coordenadas \r\n * del centro del círculo en el CRS del mapa y el segundo elemento es el punto \r\n * de la circunferencia con el mayor valor de x.\r\n */\r\n\r\n /**\r\n * Establece la geometría del círculo en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @param {SITNA.feature.CircleGeometry|Array.} geometry - Si el parámetro es un array, las coordenadas\r\n * del círculo expresadas como un array de dos elementos, el primero son las coordenadas del centro\r\n * en las unidades del CRS del mapa y el segundo son las coordenadas de un punto de su circunferencia,\r\n * en las unidades del CRS actual del mapa (metros por defecto).\r\n * @returns {SITNA.feature.Circle} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (coords) {\r\n coords = Circle.parseGeometry(coords);\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas del centro del círculo en el CRS actual del mapa.\r\n * @method getCenter\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @returns {number[]} Array con las coordenadas del centro del círculo en el CRS del mapa. \r\n */\r\n getCenter() {\r\n return this.wrap.getGeometry()[0];\r\n }\r\n\r\n /**\r\n * Obtiene el radio del círculo en metros.\r\n * @method getRadius\r\n * @memberof SITNA.feature.Circle\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Longitud del radio en metros.\r\n */\r\n getRadius(options) {\r\n const self = this;\r\n const [center, circonferencePoint] = self.getCoordinates(options);\r\n return Math.hypot(circonferencePoint[0] - center[0], circonferencePoint[1] - center[1]);\r\n }\r\n\r\n getCoords() {\r\n return this.getCoordinates();\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates();\r\n }\r\n\r\n toPolygon(numPoints = 72) {\r\n const self = this;\r\n const radius = self.getRadius();\r\n const center = self.getCenter();\r\n const points = new Array(numPoints);\r\n const dAngle = 2 * Math.PI / numPoints;\r\n let angle = 0;\r\n for (var i = 0; i < numPoints; i++) {\r\n points[i] = [center[0] + radius * Math.cos(angle), center[1] + radius * Math.sin(angle)];\r\n angle += dAngle;\r\n }\r\n return new Polygon([points], Object.assign({}, self.options));\r\n }\r\n}\r\n\r\nexport default Circle;\r\n\r\n/**\r\n * Objeto de descripción de la geometría de un círculo.\r\n * @typedef CircleGeometry\r\n * @memberof SITNA.feature\r\n * @property {number[]} center - Coordenadas del centro del círculo en el CRS del mapa.\r\n * @property {number} radius - Radio del círculo en la unidad de longitud del CRS actual del mapa (metros por defecto).\r\n */","import TC from '../../TC';\r\nimport Consts from '../../TC/Consts';\r\nimport Util from '../../TC/Util';\r\nimport Cfg from '../../TC/Cfg';\r\nimport Control from '../../TC/Control';\r\n//import Popup from '../../TC/control/Popup';\r\n//import ResultsPanel from '../../TC/control/ResultsPanel';\r\nimport ControlContainer from '../../TC/control/ControlContainer';\r\n\r\n/**\r\n * Espacio de nombres de las entidades geográficas del mapa.\r\n * @namespace SITNA.feature\r\n */\r\n\r\n/**\r\n * Entidad geográfica genérica (sin especificar geometría) del mapa. Normalmente no se instancia directamente\r\n * esta clase, sino objetos de clases que heredan de esta.\r\n * @class Feature\r\n * @memberof SITNA.feature\r\n * @param {Array} coordinates - Coordenadas de la geometría expresadas en las unidades del CRS del mapa.\r\n * @param {SITNA.feature.FeatureOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @example [Ver en vivo](../examples/feature.methods.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\nclass Feature {\r\n STYLETYPE = Consts.geom.POLYGON;\r\n #hasSelectedStyle = false;\r\n #selected = false;\r\n #visibilityState = Consts.visibility.VISIBLE;\r\n\r\n constructor(coords, options) {\r\n const self = this;\r\n\r\n let olFeatureId;\r\n self.wrap = new TC.wrap.Feature();\r\n self.wrap.parent = self;\r\n if (self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n coords._wrap = self.wrap;\r\n olFeatureId = self.wrap.getId();\r\n self.geometry = self.wrap.getGeometry();\r\n if (coords._folders) {\r\n self.folders = coords._folders;\r\n }\r\n self.setData(self.wrap.getData());\r\n }\r\n\r\n var opts = self.options = Util.extend(true, {}, options);\r\n\r\n self.id = olFeatureId || opts.id || TC.getUID();\r\n if (self.wrap.feature && !olFeatureId) {\r\n self.wrap.feature.setId(self.id);\r\n }\r\n self.data = opts.data || self.data || null;\r\n if (opts.showsPopup === undefined) {\r\n self.showsPopup = true;\r\n }\r\n else {\r\n self.showsPopup = opts.showsPopup;\r\n }\r\n if (opts.showPopup) {\r\n self.autoPopup = true;\r\n }\r\n self.layer = opts.layer || null;\r\n\r\n if (opts.selected) {\r\n self.select();\r\n }\r\n }\r\n\r\n getPath() {\r\n const self = this;\r\n let result = [];\r\n\r\n if (self.folders) {\r\n result = self.folders;\r\n }\r\n else if (self.options.group) {\r\n result = [self.options.group];\r\n }\r\n return result;\r\n }\r\n\r\n setVisibility(visible) {\r\n const self = this;\r\n\r\n // Ocultamos el posible popup\r\n if (!visible && self.showsPopup && self.layer) {\r\n var popup = self.layer.map.getControlsByClass('TC.control.Popup').filter(function (popup) {\r\n return popup.currentFeature === self;\r\n });\r\n\r\n if (popup.length > 0) {\r\n const p = popup[0];\r\n if (p.isVisible()) {\r\n p.hide();\r\n }\r\n }\r\n }\r\n\r\n if (visible && self.#visibilityState === Consts.visibility.NOT_VISIBLE ||\r\n !visible && self.#visibilityState === Consts.visibility.VISIBLE) {\r\n self.#visibilityState = visible ? Consts.visibility.VISIBLE : Consts.visibility.NOT_VISIBLE;\r\n self.layer.wrap.setFeatureVisibility(self, visible);\r\n }\r\n\r\n return self;\r\n }\r\n\r\n getVisibilityState() {\r\n return this.#visibilityState;\r\n }\r\n\r\n /**\r\n * Obtiene el identificador de la entidad geográfica dentro de su capa.\r\n * @method getId\r\n * @memberof SITNA.feature.Feature\r\n * @instance\r\n * @returns {string} Identificador de la entidad geográfica.\r\n */\r\n getId() {\r\n return this.wrap.getId();\r\n }\r\n\r\n setId(id) {\r\n const self = this;\r\n self.id = id;\r\n self.wrap.setId(id);\r\n return self;\r\n }\r\n\r\n getBounds() {\r\n return this.wrap.getBounds();\r\n }\r\n\r\n setStyle(style) {\r\n const self = this;\r\n let newStyle;\r\n if (style === null) {\r\n newStyle = null;\r\n }\r\n else {\r\n const mergedStyles = [self.getStyle(), style];\r\n if (self.layer?.styles?.[self.STYLETYPE]) {\r\n mergedStyles.unshift(self.layer.styles[self.STYLETYPE]);\r\n }\r\n if (self.layer?.map.options.styles?.[self.STYLETYPE]) {\r\n mergedStyles.unshift(self.layer.map.options.styles[self.STYLETYPE]);\r\n }\r\n if (Cfg?.styles?.[self.STYLETYPE]) {\r\n mergedStyles.unshift(Cfg.styles[self.STYLETYPE]);\r\n }\r\n newStyle = Util.mergeStyles(...mergedStyles);\r\n }\r\n self.wrap.setStyle(newStyle);\r\n return self;\r\n }\r\n\r\n toggleSelectedStyle = function (condition) {\r\n const self = this;\r\n if (self.#hasSelectedStyle !== condition) {\r\n self.#hasSelectedStyle = condition;\r\n self.wrap.toggleSelectedStyle(condition);\r\n }\r\n return self;\r\n }\r\n\r\n getLegend = function () {\r\n const self = this;\r\n if (!self._legend) {\r\n self._legend = self.wrap.getLegend();\r\n }\r\n return self._legend;\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de la entidad geográfica en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.Feature\r\n * @instance\r\n * @returns {Array} Coordenadas en el CRS actual del mapa de la geometría de la entidad geográfica.\r\n */\r\n getCoordinates(options) {\r\n const self = this;\r\n const sourceCrs = options?.geometryCrs || (self.layer?.map?.on3DView ? self.layer.map.view3D.crs:self.layer?.map?.crs);\r\n const destCrs = options?.crs || self.layer?.map?.getCRS() || Cfg.utmCrs;\r\n self.geometry = self.wrap.getGeometry();\r\n if (sourceCrs && destCrs) {\r\n return TC.Util.reproject(self.geometry, sourceCrs, destCrs);\r\n }\r\n return self.geometry;\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de la entidad geográfica.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Feature\r\n * @instance\r\n * @param {Array} coordinates - Coordenadas de la entidad geográfica en el CRS actual del mapa.\r\n * @returns {SITNA.feature.Feature} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n\r\n const toNumberCoords = function (arr) {\r\n arr.forEach(function (elm, idx) {\r\n if (Array.isArray(elm)) {\r\n toNumberCoords(elm);\r\n }\r\n else {\r\n if (elm === null) {\r\n arr[idx] = 0;\r\n }\r\n else if (typeof elm !== 'number') {\r\n console.log('Warning: coordinate does not have number type');\r\n arr[idx] = parseFloat(elm);\r\n }\r\n }\r\n });\r\n };\r\n\r\n if (Array.isArray(coords)) {\r\n toNumberCoords(coords);\r\n }\r\n\r\n self.geometry = coords;\r\n self.wrap.setGeometry(coords);\r\n return self;\r\n }\r\n\r\n getCoords() {\r\n return this.getCoordinates();\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n const self = this;\r\n const isPoint = function (elm) {\r\n return Array.isArray(elm) && elm.length >= 2 && typeof elm[0] === 'number' && typeof elm[1] === 'number';\r\n };\r\n const flattenFn = function (val) {\r\n return isPoint(val) ? [val] : val.reduce(reduceFn, []);\r\n };\r\n const reduceFn = function (acc, elm) {\r\n if (isPoint(elm)) {\r\n acc.push(elm);\r\n }\r\n else {\r\n acc = acc.concat(flattenFn(elm));\r\n }\r\n return acc;\r\n };\r\n return flattenFn(self.getCoordinates());\r\n }\r\n\r\n getGeometryStride = function () {\r\n const self = this;\r\n const coordsArray = self.getCoordsArray();\r\n const firstCoord = coordsArray[0];\r\n if (firstCoord) {\r\n return firstCoord.length;\r\n }\r\n return 0;\r\n }\r\n\r\n removeZ() {\r\n const self = this;\r\n const coords = self.getCoordsArray();\r\n if (coords[0]?.length > 2) {\r\n coords.forEach(c => c.length = 2);\r\n self.setCoordinates(self.geometry);\r\n }\r\n return self;\r\n }\r\n\r\n /**\r\n * Obtiene los atributos de la entidad geográfica.\r\n * @method getData\r\n * @memberof SITNA.feature.Feature\r\n * @instance\r\n * @returns {Object} Diccionario de pares clave/valor con los atributos de la entidad geográfica.\r\n */\r\n getData() {\r\n const self = this;\r\n let result = null;\r\n if (self.data) {\r\n result = self.data;\r\n }\r\n else {\r\n result = self.wrap.getData();\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Establece los atributos de la entidad geográfica.\r\n * @method setData\r\n * @memberof SITNA.feature.Feature\r\n * @instance\r\n * @param {Object} data - Diccionario de pares clave/valor con los atributos a establecer.\r\n * @returns {SITNA.feature.Feature} La propia entidad geográfica.\r\n */\r\n setData(data) {\r\n const self = this;\r\n if (typeof data === 'string') {\r\n self.data = data;\r\n }\r\n else {\r\n self.data = Util.extend(self.data, data);\r\n self.attributes = self.attributes || [];\r\n for (var key in data) {\r\n let attr = self.attributes.find(attr => attr.name === key);\r\n if (attr) {\r\n attr.value = data[key];\r\n }\r\n else {\r\n self.attributes.push({ name: key, value: data[key] });\r\n }\r\n }\r\n self.wrap.setData(data);\r\n }\r\n return self;\r\n }\r\n\r\n unsetData(key) {\r\n const self = this;\r\n delete self.data[key];\r\n const attr = (self.attributes || []).find(attr => attr.name === key);\r\n if (attr) {\r\n self.attributes.splice(self.attributes.indexOf(attr), 1);\r\n }\r\n self.wrap.unsetData(key);\r\n return self;\r\n }\r\n\r\n clearData() {\r\n const self = this;\r\n self.data = {};\r\n self.attributes = [];\r\n self.wrap.clearData();\r\n return self;\r\n }\r\n\r\n getInfo(options) {\r\n const self = this;\r\n let result = null;\r\n const locale = options?.locale || self.layer?.map && Util.getMapLocale(self.layer.map);\r\n const data = self.getData();\r\n if (typeof data === 'object') {\r\n var template = self.wrap.getTemplate();\r\n if (template) {\r\n // GLS: Contemplo en la expresión regular la opción de que el nombre del campo se componga de $[aaa/abc/loQueMeInteresa] \r\n // (la expresión no está limitada a 2 niveles), hasta ahora se manejaba $[loQueMeInteresa]\r\n result = template.replace(/\\$\\[?(?:\\w+\\/)*([^><]+)\\]/g, function (match, p1) {\r\n //esto es por si la feature viene de un KML con este formato de datos\r\n /*\r\n * \r\n valor del atributo\r\n Texto a mostrar como clave\r\n \r\n */\r\n if (data[p1] instanceof Object && Object.prototype.hasOwnProperty.call(data[p1], \"value\")) {\r\n return data[p1][\"value\"];\r\n }\r\n return data[p1];\r\n });\r\n }\r\n else {\r\n var html = [];\r\n const hSlots = [];\r\n const openText = Util.getLocaleString(locale, 'open');\r\n const titleText = Util.getLocaleString(locale, 'linkInNewWindow');\r\n const formatValue = function (value) {\r\n let result;\r\n var isUrl = Util.isURL(value);\r\n if (isUrl) {\r\n result = `${openText}`;\r\n }\r\n else {\r\n result = value !== undefined ?\r\n typeof value === \"number\" ? TC.Util.formatNumber(value, locale) : value\r\n : '—';\r\n }\r\n return result;\r\n };\r\n const recursiveFn = function (data) {\r\n var html = [];\r\n if (data instanceof Array) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n html.push(`
`);\r\n html.push(`
`);\r\n html.push('');\r\n data.forEach(item => {\r\n html.push('');\r\n });\r\n html.push('
');\r\n html = html.concat(recursiveFn(item));\r\n html.push('
');\r\n } else if (data instanceof Object) {\r\n if (data.getType) {\r\n const tttt = {\r\n type: data.getType(),\r\n coordinates: data.getCoordinates()\r\n };\r\n html = html.concat(recursiveFn(tttt));\r\n }\r\n else {\r\n html.push('');\r\n for (var i in data) {\r\n html.push('');\r\n if (data[i] && data[i] instanceof Array) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n html.push(`\r\n ');\r\n }\r\n else if (data[i] && data[i] instanceof Object) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n //if(data[i] && Object.entries(data[i]).some((item)=>{return item[1] instanceof Object})){\t\t\t\t\t\t\r\n html.push(`\r\n ');\r\n }\r\n else {\r\n html.push(`\r\n ');\r\n }\r\n html.push('');\r\n }\r\n html.push('
${i}
`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
${i}
`);\r\n html.push(`
`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
${i}`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
');\r\n }\r\n } else {\r\n html.push(formatValue(data));\r\n }\r\n return html;\r\n };\r\n for (var key in data) {\r\n const value = data[key];\r\n const match = key.match(/^h(\\d)_/i);\r\n if (match) {\r\n hSlots[match[1]] = value;\r\n }\r\n else {\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'undefined') {\r\n html.push(`${key}${formatValue(value)}`);\r\n }\r\n else {\r\n html.push(`${key}`);\r\n html = html.concat(recursiveFn(value));\r\n html.push('');\r\n\r\n }\r\n }\r\n }\r\n const headers = hSlots\r\n .map(function (val, idx) {\r\n if (val) {\r\n return `${val}`;\r\n }\r\n })\r\n .filter(function (val) {\r\n return val;\r\n });\r\n if (headers.length) {\r\n html = headers.concat(html);\r\n }\r\n if (html.length > 0) {\r\n html.unshift('');\r\n html.push('
');\r\n result = html.join('');\r\n }\r\n }\r\n }\r\n else if (typeof data === 'string') {\r\n result = data;\r\n }\r\n if (!result) {\r\n result = self.title;\r\n if (self.group) {\r\n result += ' ' + self.group;\r\n }\r\n }\r\n if (!result) {\r\n result = Util.getLocaleString(locale, 'noData');\r\n }\r\n return result;\r\n }\r\n\r\n getTemplate() {\r\n const self = this;\r\n let result = self.wrap.getTemplate();\r\n if (result) {\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n clone() {\r\n const self = this;\r\n const nativeClone = self.wrap.cloneFeature();\r\n nativeClone._wrap = self.wrap;\r\n const result = new self.constructor(nativeClone, self.options);\r\n if (self.folders) {\r\n result.folders = self.folders.slice();\r\n }\r\n return result;\r\n }\r\n\r\n getStyle() {\r\n return this.wrap.getStyle();\r\n }\r\n\r\n async showPopup(options) {\r\n const self = this;\r\n options = options || {};\r\n const control = options instanceof Control ? options : options.control;\r\n const map = self.layer?.map || control?.map;\r\n if (map) {\r\n let popup = control || self.popup;\r\n if (!popup) {\r\n // Buscamos un popup existente que no esté asociado a un control.\r\n var popups = map.getControlsByClass('TC.control.Popup');\r\n for (var i = 0, len = popups.length; i < len; i++) {\r\n var p = popups[i];\r\n if (!p.caller) {\r\n popup = p;\r\n break;\r\n }\r\n }\r\n }\r\n if (!popup) {\r\n popup = await map.addControl('popup');\r\n }\r\n popup.currentFeature = self;\r\n map.getControlsByClass('TC.control.Popup')\r\n .filter(p => p !== popup && p.isVisible())\r\n .forEach(p => p.hide());\r\n if (!popup.getContainerElement()) await popup.renderPromise(); \r\n popup.setDragged(false);\r\n self.wrap.showPopup(Object.assign({}, options, { control: popup }));\r\n map.trigger(Consts.event.POPUP, { control: popup });\r\n popup.fitToView(true);\r\n popup.contentDiv.querySelectorAll('img').forEach(img => img.addEventListener('load', () => popup.fitToView()));\r\n return popup;\r\n }\r\n return null;\r\n }\r\n\r\n async showResultsPanel(options) {\r\n const self = this;\r\n options = options || {};\r\n const control = options instanceof Control ? options : options.control;\r\n const map = self.layer?.map || control?.map;\r\n if (map) {\r\n let panel;\r\n\r\n var resultsPanelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: TC.Util.getLocaleString(map.options.locale, \"rsp.title\"),\r\n max: TC.Util.getLocaleString(map.options.locale, \"rsp.title\")\r\n }\r\n };\r\n var controlContainer = map.getControlsByClass(ControlContainer)[0];\r\n if (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n //URI 24/01/2022 comprobar que ya existe un resultpanel para la feature en cuestión, sino se crea uno nuevo\r\n panel = map.getControlsByClass('TC.control.ResultsPanel').find(resultPanel => resultPanel.currentFeature === self);\r\n if (!panel) panel = await controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n map.div.appendChild(resultsPanelOptions.div);\r\n //URI 24/01/2022 comprobar que ya existe un resultpanel para la feature en cuestión, sino se crea uno nuevo\r\n panel = map.getControlsByClass('TC.control.ResultsPanel').find(resultsPanel => resultsPanel.currentFeature === self);\r\n if (!panel) panel = await map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n panel.currentFeature = self;\r\n\r\n // GLS: si contamos con el contenedor de controles no es necesario cerra el resto de paneles ya que no habrá solape excepto los paneles\r\n if (map.getControlsByClass(ControlContainer).length === 0) {\r\n map.getControlsByClass('TC.control.ResultsPanel').filter(ctrl => ctrl.options.content === \"table\").forEach(function (p) {\r\n p.close();\r\n });\r\n }\r\n\r\n // cerramos los paneles con feature asociada que no sean gráfico\r\n const panels = map.getControlsByClass('TC.control.ResultsPanel');\r\n panels.filter(ctrl => panel !== ctrl).forEach(function (p) {\r\n if (p.currentFeature && !p.chart) {\r\n p.close();\r\n }\r\n });\r\n\r\n panel.menuDiv.innerHTML = '';\r\n panel.open(options.html || self.getInfo({ locale: map.options.locale }), panel.getInfoContainer());\r\n\r\n const resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n entry.target.querySelectorAll('h3, h4').forEach(function (hx) {\r\n hx.addEventListener(\"mouseenter\", function (_e) {\r\n if (this.offsetWidth < this.scrollWidth) {\r\n this.title = this.childNodes.item(0).textContent;\r\n }\r\n else {\r\n this.title = \"\";\r\n }\r\n }, { passive: true });\r\n });\r\n }\r\n });\r\n resizeObserver.observe(panel.infoDiv);\r\n\r\n var onViewChange = function (_e) {\r\n map.off(Consts.event.VIEWCHANGE, onViewChange);\r\n\r\n panel.close();\r\n };\r\n map.on(Consts.event.VIEWCHANGE, onViewChange);\r\n return panel;\r\n }\r\n return null;\r\n }\r\n\r\n async showInfo(options) {\r\n const self = this;\r\n options = options || {};\r\n\r\n if (!TC.control || !TC.control.FeatureInfoCommons) {\r\n const module = await import('../../TC/control/FeatureInfoCommons');\r\n TC.control = TC.control || {};\r\n TC.control.FeatureInfoCommons = module.default;\r\n }\r\n\r\n let html;\r\n if (self.getTemplate()) {\r\n html = self.getInfo();\r\n }\r\n else {\r\n if (typeof self.data === 'string') {\r\n html = self.data;\r\n }\r\n else {\r\n html = await TC.control.FeatureInfoCommons.renderFeatureAttributeTable({ attributes: self.attributes, singleFeature: true });\r\n }\r\n }\r\n const opts = Util.extend({}, options, { html: html });\r\n let control;\r\n if (options.control && TC.control) {\r\n const optionsControl = options.control;\r\n const Popup = (await import('../../TC/control/Popup')).default;\r\n const ResultsPanel = (await import('../../TC/control/ResultsPanel')).default;\r\n if (optionsControl instanceof Popup) {\r\n control = await self.showPopup(opts);\r\n }\r\n else if (optionsControl instanceof ResultsPanel) {\r\n control = await self.showResultsPanel(opts);\r\n }\r\n }\r\n else {\r\n if (self.layer.map.on3DView || self.layer.map.defaultInfoContainer === Consts.infoContainer.RESULTS_PANEL) {\r\n control = await self.showResultsPanel(opts);\r\n }\r\n else {\r\n control = await self.showPopup(opts);\r\n }\r\n }\r\n self.infoControl = control;\r\n self.layer.features.filter((f) => f !== self).forEach((f) => f.toggleSelectedStyle(false));\r\n self.toggleSelectedStyle(true);\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners(control.getContainerElement());\r\n }\r\n\r\n select() {\r\n const self = this;\r\n self.#selected = true;\r\n if (self.layer) {\r\n self.layer.selectedFeatures.push(self);\r\n }\r\n var selectionOptions = self.options.selection || {};\r\n self.setStyle(Util.extend({}, Cfg.styles.selection[self.STYLETYPE], selectionOptions[self.STYLETYPE]));\r\n //URI:Traer al frente\r\n\r\n return self;\r\n }\r\n\r\n unselect() {\r\n const self = this;\r\n self.#selected = false;\r\n // Volvemos al estilo por defecto\r\n self.setStyle(self.options);\r\n //self.setStyle(Object.assign({}, self.options, Cfg.styles[self.STYLETYPE]));\r\n\r\n if (self.layer) {\r\n const idx = self.layer.selectedFeatures.indexOf(self);\r\n if (idx >= 0) {\r\n self.layer.selectedFeatures.splice(idx, 1);\r\n }\r\n }\r\n return self;\r\n }\r\n\r\n isSelected() {\r\n return this.#selected;\r\n }\r\n\r\n toGML(version, srsName) {\r\n return this.wrap.toGML(version, srsName);\r\n }\r\n}\r\n\r\nexport default Feature;\r\n\r\n/**\r\n * Opciones de entidad. Hay que tener en cuenta que el archivo `config.json` de una maquetación \r\n * puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef FeatureOptions\r\n * @memberof SITNA.feature\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos \r\n * alfanuméricos de la entidad geográfica o bien cadena de caracteres con el código HTML asociado a la misma. \r\n * Al pulsar sobre la entidad geográfica, bien una tabla con los atributos o bien el HTML especificado \r\n * se mostrarán en un bocadillo.\r\n * @property {string} [group] - Nombre de grupo en el que incluir la entidad geográfica. \r\n * Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {string} [layer] - Identificador de una capa de tipo [SITNA.Consts.layerType.VECTOR]{@link SITNA.Consts} en la\r\n * que se añadirá la entidad geográfica.\r\n * Cuando un objeto de este tipo se pasa como parámetro a {@link SITNA.Map#addMarker} y no se especifica \r\n * esta propiedad, se creará una capa específica para las entidades geográficas que se añadan.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, la entidad geográfica se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n */\r\n\r\n/**\r\n * Opciones para la obtención de una medida. Cuando queremos obtener la longitud o el área de la geometría \r\n * de una entidad geográfica hay que tener en cuenta que el resultado depende de en qué unidades están definidas \r\n * sus coordenadas y sobre qué CRS se proyecta la entidad.\r\n * @typedef MeasurementOptions\r\n * @memberof SITNA.feature\r\n * @property {string} [crs=[\"EPSG:25830\"]{@link https://epsg.io/25830}] - Cadena con el código identificador del CRS sobre la que se proyecta la geometría de la entidad geográfica.\r\n * Dado que al proyectar una entidad geográfica sobre un plano se puede alterar su forma o tamaño, la medida es \r\n * dependiente del CRS utilizado.\r\n * @property {string} [geometryCrs] - Cadena con el código identificador del CRS en que están las coordenadas \r\n * de la geometría de la entidad geográfica. Si no se especifica se tomará el CRS del mapa en que \r\n * se encuentra la entidad.\r\n * @see SITNA.feature.Polyline#getLength\r\n * @see SITNA.feature.MultiPolyline#getLength\r\n * @see SITNA.feature.Polygon#getArea\r\n * @see SITNA.feature.Polygon#getLength\r\n * @see SITNA.feature.MultiPolygon#getArea\r\n * @see SITNA.feature.MultiPolygon#getLength\r\n * @see SITNA.feature.Circle#getRadius\r\n */","import TC from '../../TC';\r\nimport Point from './Point';\r\nimport Consts from '../../TC/Consts';\r\nimport Cfg from '../../TC/Cfg';\r\nimport i18n from '../../TC/i18n';\r\n\r\nTC.i18n = TC.i18n || i18n;\r\n\r\n/**\r\n * Entidad geográfica que representa un marcador (punto con un icono asociado) del mapa.\r\n * @class Marker\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Point\r\n * @param {number[]} coordinates - Coordenadas del punto expresadas en las unidades del CRS del mapa.\r\n * @param {SITNA.feature.MarkerOptions} [options] Objeto de opciones de marcador.\r\n * @see SITNA.Map#addMarker\r\n * @see SITNA.layer.Vector#addMarker\r\n * @see SITNA.layer.Vector#addMarkers\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.Marker.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Establece las coordenadas del punto en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Marker\r\n * @instance\r\n * @param {number[]} coordinates - Coordenadas del punto en el CRS actual del mapa.\r\n * @returns {SITNA.feature.Marker} La propia entidad geográfica.\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.Marker\r\n * @instance\r\n * @returns {SITNA.feature.MarkerStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos al marcador.\r\n * @method setStyle\r\n * @memberof SITNA.feature.Marker\r\n * @instance\r\n * @param {SITNA.feature.MarkerStyleOptions} style - Objeto de opciones de estilo de marcador.\r\n * @returns {SITNA.feature.Marker} La propia entidad geográfica.\r\n */\r\n\r\nclass Marker extends Point {\r\n STYLETYPE = 'marker';\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n const locale = self.layer && self.layer.map ? self.layer.map.options.locale : Cfg.locale;\r\n self.title = self.options.title || TC.i18n[locale][Consts.MARKER];\r\n self.wrap.createMarker(coords, options);\r\n }\r\n }\r\n}\r\n\r\nexport default Marker;\r\n\r\n/**\r\n * Opciones de estilo de marcador (punto con un icono). Para determinar qué icono se va a asignar al marcador, se leen las propiedades `url` y `cssClass`, en ese orden de preferencia.\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef MarkerStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @mixes SITNA.feature.LabelStyleOptions\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {number[]} [anchor=[0.5, 1]] - Posicionamiento relativo del icono respecto al punto del mapa, representado por un array de dos números entre 0 y 1, siendo [0, 0] la esquina superior izquierda del icono y [1, 1] la esquina inferior derecha del icono.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string[]} [classes=[\"tc-marker1\", \"tc-marker2\", \"tc-marker3\", \"tc-marker4\", \"tc-marker5\"]] - \r\n * Lista de nombres de clase CSS a utilizar para asignar iconos a los marcadores según grupo\r\n * (Ver propiedad `group` de {@link SITNA.feature.MarkerOptions}). Cuando se añade un nuevo grupo de marcadores, se le asignará la clase correspondiente\r\n * al siguiente elemento del array. Si hay más grupos que elementos en `classes`, se repite el ciclo a lo largo\r\n * del array. La API extraerá la URL de la imagen del atributo `background-image` de la clase CSS asignada.\r\n * [Ver ejemplo de uso](../examples/cfg.MarkerOptions.2.html).\r\n * @property {string} [cssClass] - Nombre de una clase CSS. El marcador adoptará como icono el valor del atributo `background-image` de dicha clase.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del marcador.\r\n * @property {number} [height=32] - Altura en píxeles del icono.\r\n * Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelkey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [url] - URL de archivo de imagen que se utilizará para el icono.\r\n * @property {number} [width=32] - Anchura en píxeles del icono.\r\n */\r\n\r\n/**\r\n * Opciones de marcador (punto con un icono). Para determinar qué icono se va a asignar al marcador, se leen las propiedades `url`, `cssClass` `group`, en ese orden de preferencia.\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef MarkerOptions\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.FeatureOptions\r\n * @mixes SITNA.feature.MarkerStyleOptions\r\n * @see SITNA.Map#addMarker\r\n * @property {number[]} [anchor=[0.5, 1]] - Posicionamiento relativo del icono respecto al punto del mapa, representado por un array de dos números entre 0 y 1, siendo [0, 0] la esquina superior izquierda del icono y [1, 1] la esquina inferior derecha del icono.\r\n * @property {string} [angle] - *__Obsoleta__: En lugar de esta propiedad utilice la propiedad equivalente `labelRotationKey`.*\r\n * \r\n * Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string[]} [classes=[\"tc-marker1\", \"tc-marker2\", \"tc-marker3\", \"tc-marker4\", \"tc-marker5\"]] - \r\n * Lista de nombres de clase CSS a utilizar para asignar iconos a los marcadores según grupo \r\n * (Ver propiedad `group`). Cuando se añade un nuevo grupo de marcadores, se le asignará la clase correspondiente \r\n * al siguiente elemento del array. Si hay más grupos que elementos en `classes`, se repite el ciclo a lo largo \r\n * del array. La API extraerá la URL de la imagen del atributo `background-image` de la clase CSS asignada.\r\n * [Ver ejemplo de uso](../examples/cfg.MarkerOptions.2.html).\r\n * @property {string} [cssClass] - Nombre de una clase CSS. El marcador adoptará como icono el valor del atributo `background-image` de dicha clase.\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos alfanuméricos del marcador o bien cadena de caracteres con el código HTML asociado al mismo. Al pulsar sobre el marcador, bien una tabla con los atributos o bien el HTML especificado se mostrarán en un bocadillo.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del marcador.\r\n * @property {string} [group] - Nombre de grupo en el que incluir el marcador. Todos los marcadores con el mismo valor en esta propiedad se consideran en un mismo grupo, y\r\n * con ello comparten el mismo icono. El icono se selecciona por orden de la lista de clases CSS definida en `classes`. Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {number} [height=32] - Altura en píxeles del icono.\r\n * @property {string} [label] - *__Obsoleta__: En lugar de esta propiedad utilice la propiedad equivalente `labelKey`.*\r\n * \r\n * Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [layer] - Esta propiedad se utiliza en {@link SITNA.Map#addMarker}. Es el identificador de una capa de tipo [SITNA.Consts.layerType.VECTOR]{@link SITNA.Consts} en la que se añadirá el marcador.\r\n * Si no se especifica se creará una capa específica para los marcadores que se añadan por este método.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, el marcador se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n * @property {string} [url] - URL de archivo de imagen que se utilizará para el icono.\r\n * @property {number} [width=32] - Anchura en píxeles del icono.\r\n * @example Ejemplo del uso de contenido HTML en la propiedad `data` [Ver en vivo](../examples/cfg.MarkerOptions.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo del uso de las propiedades `classes` y `group` [Ver en vivo](../examples/cfg.MarkerOptions.2.html) {@lang html}\r\n * \r\n *
\r\n * \r\n */","import MultiPoint from './MultiPoint';\r\n\r\n/**\r\n * Entidad geográfica que representa un conjunto de marcadores (puntos con icono asociado).\r\n * @class MultiMarker\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.} coordinates - Array de las coordenadas de cada punto expresadas en el CRS del mapa.\r\n * @param {SITNA.feature.MarkerOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.feature.Marker\r\n * @see SITNA.layer.Vector#addMultiMarker\r\n * @see SITNA.layer.Vector#addMultiMarkers\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.MultiMarker.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.MultiMarker\r\n * @instance\r\n * @returns {SITNA.feature.MarkerStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos a los marcadores.\r\n * @method setStyle\r\n * @memberof SITNA.feature.MultiMarker\r\n * @instance\r\n * @param {SITNA.feature.MarkerStyleOptions} style - Objeto de opciones de estilo de marcador.\r\n * @returns {SITNA.feature.MultiMarker} La propia entidad geográfica.\r\n */\r\n\r\nclass MultiMarker extends MultiPoint {\r\n STYLETYPE = 'marker';\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createMultiMarker(coords, options);\r\n }\r\n }\r\n\r\n getCoordinates(options) {\r\n return super.getCoordinates.call(this, options);\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de los puntos en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.MultiMarker\r\n * @instance\r\n * @param {Array.} coordinates - Coordenadas de los puntos en el CRS actual del mapa.\r\n * @returns {SITNA.feature.MultiMarker} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (coords) {\r\n if (Array.isArray(coords)) {\r\n if (!Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new TypeError('Coordinates not valid for multimarker');\r\n }\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n}\r\n\r\nexport default MultiMarker;","import Feature from './Feature';\r\nimport Consts from '../../TC/Consts';\r\n\r\n/**\r\n * Entidad geográfica que representa un conjunto de puntos.\r\n * @class MultiPoint\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.} coordinates - Array de las coordenadas de cada punto expresadas en el CRS del mapa.\r\n * @param {SITNA.feature.PointOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.feature.Point\r\n * @see SITNA.layer.Vector#addMultiPoint\r\n * @see SITNA.layer.Vector#addMultiPoints\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.MultiPoint.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Asigna estilos a los puntos.\r\n * @method setStyle\r\n * @memberof SITNA.feature.MultiPoint\r\n * @instance\r\n * @param {SITNA.feature.PointStyleOptions} style - Objeto de opciones de estilo de punto.\r\n * @returns {SITNA.feature.MultiPoint} La propia entidad geográfica.\r\n */\r\n\r\nclass MultiPoint extends Feature {\r\n STYLETYPE = Consts.geom.POINT;\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createMultiPoint(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de los puntos en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.MultiPoint\r\n * @instance\r\n * @returns {Array.} Coordenadas de los puntos en el CRS actual del mapa.\r\n */\r\n getCoordinates(options) {\r\n return super.getCoordinates.call(this, options);\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de los puntos en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.MultiPoint\r\n * @instance\r\n * @param {Array.} coordinates - Coordenadas de los puntos en el CRS actual del mapa.\r\n * @returns {SITNA.feature.MultiPoint} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (coords) {\r\n if (Array.isArray(coords)) {\r\n if (!Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new TypeError('Coordinates not valid for multipoint');\r\n }\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates();\r\n }\r\n}\r\n\r\nexport default MultiPoint;","import Feature from './Feature';\r\nimport Consts from '../../TC/Consts';\r\n\r\n/**\r\n * Entidad geográfica compuesta de varios elementos con geometría poligonal.\r\n * @class MultiPolygon\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.>>} coordinates - Coordenadas de la geometría expresadas como un array de\r\n * coordenadas de objetos {@link SITNA.feature.Polygon}.\r\n * @param {SITNA.feature.PolygonOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.feature.Polygon\r\n * @see SITNA.layer.Vector#addMultiPolygon\r\n * @see SITNA.layer.Vector#addMultiPolygons\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.MultiPolygon.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @returns {SITNA.feature.PolygonStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos a los polígonos.\r\n * @method setStyle\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @param {SITNA.feature.PolygonStyleOptions} style - Objeto de opciones de estilo de polígono.\r\n * @returns {SITNA.feature.MultiPolygon} La propia entidad geográfica.\r\n */\r\n\r\nclass MultiPolygon extends Feature {\r\n STYLETYPE = Consts.geom.POLYGON;\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createMultiPolygon(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de los vértices de los polígonos en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @returns {Array.>>} Coordenadas de los vértices de los polígonos en el CRS actual del mapa.\r\n */\r\n getCoordinates(options) {\r\n const coords = super.getCoordinates.call(this, options);\r\n if (options?.pointArray) {\r\n return [].concat.apply([], [].concat.apply([], coords));\r\n }\r\n return coords;\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de los vértices de los polígonos en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @param {Array.>>} coordinates - Coordenadas de los vértices de los polígonos en el CRS actual del mapa.\r\n * @returns {SITNA.feature.MultiPolygon} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (coords) {\r\n if (Array.isArray(coords) && Array.isArray(coords[0])) {\r\n if (!Array.isArray(coords[0][0])) {\r\n coords = [[coords]];\r\n }\r\n else if (!Array.isArray(coords[0][0][0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new TypeError('Coordinates not valid for multipolygon');\r\n }\r\n coords.forEach(function (polygon) {\r\n polygon.forEach(function (ring) {\r\n const startPoint = ring[0];\r\n const endPoint = ring[ring.length - 1];\r\n if (startPoint[0] !== endPoint[0] || startPoint[1] !== endPoint[1]) {\r\n ring[ring.length] = startPoint;\r\n }\r\n });\r\n });\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates().flat(2);\r\n }\r\n\r\n /**\r\n * Obtiene la longitud total en metros de todos los bordes (perímetro y agujeros) de los polígonos.\r\n * @method getLength\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Suma de las longitudes de todos los polígonos, en metros.\r\n */\r\n getLength(options) {\r\n const self = this;\r\n return self.wrap.getLength({ coordinates: self.getCoordinates(options) });\r\n }\r\n\r\n\r\n /**\r\n * Obtiene la suma del área de los polígonos en metros cuadrados.\r\n * @method getArea\r\n * @memberof SITNA.feature.MultiPolygon\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Total de áreas de los polígonos en metros cuadrados.\r\n */\r\n getArea(options) {\r\n const self = this;\r\n return self.wrap.getArea({ coordinates: self.getCoordinates(options) });\r\n }\r\n}\r\n\r\nexport default MultiPolygon;","import Feature from './Feature';\r\nimport Polyline from './Polyline';\r\n\r\n/**\r\n * Entidad geográfica que representa un conjunto de líneas de varios segmentos en el mapa.\r\n * @class MultiPolyline\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.>} coordinates - Coordenadas de las líneas expresadas como un array de \r\n * coordenadas de objetos {@link SITNA.feature.Polyline}.\r\n * @param {SITNA.feature.PolylineOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.feature.Polyline\r\n * @see SITNA.layer.Vector#addMultiPolyline\r\n * @see SITNA.layer.Vector#addMultiPolylines\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.MultiPolyline.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.MultiPolyline\r\n * @instance\r\n * @returns {SITNA.feature.PolylineStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos a las líneas.\r\n * @method setStyle\r\n * @memberof SITNA.feature.MultiPolyline\r\n * @instance\r\n * @param {SITNA.feature.PolylineStyleOptions} style - Objeto de opciones de estilo de línea.\r\n * @returns {SITNA.feature.MultiPolyline} La propia entidad geográfica.\r\n */\r\n\r\nclass MultiPolyline extends Feature {\r\n STYLETYPE = \"line\";\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createMultiPolyline(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de los vértices de las líneas en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.MultiPolyline\r\n * @instance\r\n * @returns {Array.>} Coordenadas de los vértices de las líneas en el CRS actual del mapa.\r\n */\r\n getCoordinates(options) {\r\n if (options?.pointArray) {\r\n return this.getCoordsArray();\r\n }\r\n return super.getCoordinates.call(this, options);\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de los vértices de las líneas en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.MultiPolyline\r\n * @instance\r\n * @param {Array.>} coordinates - Coordenadas de los vértices de las líneas en el CRS actual del mapa.\r\n * @returns {SITNA.feature.MultiPolyline} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && Array.isArray(coords[0]) && !Array.isArray(coords[0][0])) {\r\n coords = [coords];\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates().flat();\r\n }\r\n\r\n appendPolyline(polyline) {\r\n const self = this;\r\n if (polyline instanceof Polyline) {\r\n const coords = self.getCoordinates();\r\n coords.push(polyline.getCoordinates());\r\n self.setCoordinates(coords);\r\n }\r\n return self;\r\n }\r\n\r\n /**\r\n * Obtiene la longitud total de todas las líneas, en metros.\r\n * @method getLength\r\n * @memberof SITNA.feature.MultiPolyline\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Suma de las longitudes de todas las líneas, en metros.\r\n */\r\n getLength = function (options) {\r\n const self = this;\r\n return self.wrap.getLength({ coordinates: self.getCoordinates(options) });\r\n }\r\n}\r\n\r\nexport default MultiPolyline;","import Consts from '../../TC/Consts';\r\nimport Cfg from '../../TC/Cfg';\r\nimport Util from '../../TC/Util';\r\nimport Feature from './Feature';\r\n\r\n/**\r\n * Entidad geográfica que representa un punto del mapa.\r\n * @class Point\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {number[]} coordinates - Coordenadas del punto expresadas en las unidades del CRS del mapa.\r\n * @param {SITNA.feature.PointOptions} [options] Objeto de opciones del punto.\r\n * @see SITNA.layer.Vector#addPoint\r\n * @see SITNA.layer.Vector#addPoints\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.Point.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.Point\r\n * @instance\r\n * @returns {SITNA.feature.PointStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos al punto.\r\n * @method setStyle\r\n * @memberof SITNA.feature.Point\r\n * @instance\r\n * @param {SITNA.feature.PointStyleOptions} style - Objeto de opciones de estilo de punto.\r\n * @returns {SITNA.feature.Point} La propia entidad geográfica.\r\n */\r\n\r\nclass Point extends Feature {\r\n STYLETYPE = Consts.geom.POINT;\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createPoint(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Establece las coordenadas del punto en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Point\r\n * @instance\r\n * @param {number[]} coordinates - Coordenadas del punto en el CRS actual del mapa.\r\n * @returns {SITNA.feature.Point} La propia entidad geográfica.\r\n */\r\n\r\n /**\r\n * Obtiene las coordenadas del punto en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.Point\r\n * @instance\r\n * @returns {number[]} Coordenadas del punto en el CRS actual del mapa.\r\n */\r\n getCoordinates(options) {\r\n const coords = super.getCoordinates.call(this, options);\r\n if (options?.pointArray) {\r\n return [coords];\r\n }\r\n return coords;\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n getCoordsArray() {\r\n return [this.getCoordinates()];\r\n }\r\n\r\n setStyle(style) {\r\n const self = this;\r\n const isCluster = Array.isArray(self.features) && self.features.length > 1;\r\n if (isCluster) {\r\n const mergedStyles = [];\r\n if (self.layer?.styles?.cluster) {\r\n mergedStyles.unshift(self.layer.styles.cluster);\r\n }\r\n if (self.layer?.map.options.styles?.cluster) {\r\n mergedStyles.unshift(self.layer.map.options.styles.cluster);\r\n }\r\n if (Cfg?.styles?.cluster) {\r\n mergedStyles.unshift(Cfg.styles.cluster);\r\n }\r\n const newStyle = Util.mergeStyles(...mergedStyles);\r\n return self.wrap.setStyle(newStyle);\r\n }\r\n return super.setStyle.call(self, style);\r\n }\r\n}\r\n\r\nexport default Point;\r\n\r\n/**\r\n * Opciones de estilo de punto. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PointStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @mixes SITNA.feature.StrokeStyleOptions\r\n * @mixes SITNA.feature.FillStyleOptions\r\n * @mixes SITNA.feature.LabelStyleOptions\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [fillColor=\"#000000\" (\"#333366\" en clusters)] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3 (0.6 en clusters)] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [fontColor=\"#000000\" (\"#ffffff\" en clusters)] - Color del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10 (9 en clusters)] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del punto.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\" (undefined en clusters)] - Color del contorno del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2 (undefined en clusters)] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {number} [radius=6 (undefined en clusters)] - Radio en píxeles del símbolo que representa el punto.\r\n * @property {string} [strokeColor=\"#ff0000\" (undefined en clusters)] - Color de trazo de la línea que delimita el símbolo del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1 (undefined en clusters)] - Opacidad de trazo de la línea que delimita el símbolo del punto, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2 (undefined en clusters)] - Anchura de trazo en píxeles de la línea que delimita el símbolo del punto.\r\n */\r\n\r\n/**\r\n * Opciones de punto. Hay que tener en cuenta que el archivo `config.json` de una maquetación \r\n * puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PointOptions\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.FeatureOptions\r\n * @mixes SITNA.feature.PointStyleOptions\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos alfanuméricos \r\n * de la entidad geográfica o bien cadena de caracteres con el código HTML asociado al mismo. Al pulsar sobre el punto, bien una tabla con los atributos o bien el HTML especificado se mostrarán en un bocadillo.\r\n * @property {string} [fillColor=\"#000000\" (\"#333366\" en clusters)] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3 (0.6 en clusters)] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [fontColor=\"#000000\" (\"#ffffff\" en clusters)] - Color del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10 (9 en clusters)] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del punto.\r\n * @property {string} [group] - Nombre de grupo en el que incluir el punto. \r\n * Todos los puntos con el mismo valor en esta propiedad se consideran en un mismo grupo. \r\n * Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\" (undefined en clusters)] - Color del contorno del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2 (undefined en clusters)] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [layer] - Identificador de una capa de tipo [SITNA.Consts.layerType.VECTOR]{@link SITNA.Consts} en la que se añadirá el punto.\r\n * @property {number} [radius=6 (undefined en clusters)] - Radio en píxeles del símbolo que representa el punto.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, el punto se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n * @property {string} [strokeColor=\"#ff0000\" (undefined en clusters)] - Color de trazo de la línea que delimita el símbolo del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1 (undefined en clusters)] - Opacidad de trazo de la línea que delimita el símbolo del punto, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2 (undefined en clusters)] - Anchura de trazo en píxeles de la línea que delimita el símbolo del punto.\r\n */","import Consts from '../../TC/Consts';\r\nimport Feature from './Feature';\r\n\r\n/**\r\n * Entidad geográfica con geometría poligonal.\r\n * @class Polygon\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.>} coordinates - Coordenadas del polígono en las unidades del CRS del mapa. \r\n * Estas son un array de anillos, siendo el primer anillo las coordenadas del contorno del polígono \r\n * y los anillos subsiguientes las coordenadas del los agujeros en el polígono si estos existen.\r\n * Cada anillo es un array de las coordenadas de cada uno de los vértices del contorno que definen.\r\n * @param {SITNA.feature.PolygonOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.layer.Vector#addPolygon\r\n * @see SITNA.layer.Vector#addPolygons\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.Polygon.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @returns {SITNA.feature.PolygonStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos al polígono.\r\n * @method setStyle\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @param {SITNA.feature.PolygonStyleOptions} style - Objeto de opciones de estilo de polígono.\r\n * @returns {SITNA.feature.Polygon} La propia entidad geográfica.\r\n */\r\n\r\nclass Polygon extends Feature {\r\n STYLETYPE = Consts.geom.POLYGON;\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createPolygon(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de los vértices de los contornos del polígono en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @returns {Array.>} Coordenadas de los vértices de los contornos del polígono en el CRS actual del mapa.\r\n */\r\n getCoordinates(options) {\r\n const coords = super.getCoordinates.call(this, options);\r\n if (options?.pointArray) {\r\n return [].concat.apply([], coords);\r\n }\r\n return coords;\r\n }\r\n\r\n /**\r\n * Establece las coordenadas de los vértices de los contornos del polígono en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @param {Array.>} coordinates - Coordenadas de los vértices de los contornos del polígono en el CRS actual del mapa.\r\n * @returns {SITNA.feature.Polygon} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (coords) {\r\n if (Array.isArray(coords) && Array.isArray(coords[0])) {\r\n if (!Array.isArray(coords[0][0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new TypeError('Coordinates not valid for polygon');\r\n }\r\n coords.forEach(function (ring) {\r\n const startPoint = ring[0];\r\n const endPoint = ring[ring.length - 1];\r\n if (startPoint[0] !== endPoint[0] || startPoint[1] !== endPoint[1]) {\r\n ring[ring.length] = startPoint;\r\n }\r\n });\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n getCoords(options) {\r\n return this.getCoordinates(options);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates().flat();\r\n }\r\n\r\n /**\r\n * Obtiene la longitud total del borde (perímetro y agujeros) del polígono en metros.\r\n * @method getLength\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Longitud total del polígono en metros.\r\n */\r\n getLength(options) {\r\n const self = this;\r\n return self.wrap.getLength({ coordinates: self.getCoordinates(options) });\r\n }\r\n\r\n /**\r\n * Obtiene el área del polígono en metros cuadrados.\r\n * @method getArea\r\n * @memberof SITNA.feature.Polygon\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Área del polígono en metros cuadrados.\r\n */\r\n getArea(options) {\r\n const self = this;\r\n return self.wrap.getArea({ coordinates: self.getCoordinates(options) });\r\n }\r\n}\r\n\r\nexport default Polygon;\r\n\r\n/**\r\n * Opciones de estilo de polígono. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PolygonStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @mixes SITNA.feature.StrokeStyleOptions\r\n * @mixes SITNA.feature.FillStyleOptions\r\n * @mixes SITNA.feature.LabelStyleOptions\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [fillColor=\"#000000\"] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva de la entidad geográfica.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de los lados del polígono, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de los lados del polígono, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en de los lados del polígono.\r\n */\r\n\r\n/**\r\n * Opciones de entidad poligonal. Hay que tener en cuenta que el archivo `config.json` de una maquetación\r\n * puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PolygonOptions\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.FeatureOptions\r\n * @mixes SITNA.feature.PolygonStyleOptions\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos alfanuméricos\r\n * de la entidad geográfica o bien cadena de caracteres con el código HTML asociado al mismo. Al pulsar sobre el polígono, bien una tabla con los atributos o bien el HTML especificado se mostrarán en un bocadillo.\r\n * @property {string} [fillColor=\"#000000\"] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva de la entidad geográfica.\r\n * @property {string} [group] - Nombre de grupo en el que incluir la entidad geográfica. Todos las entidades geográficas con el mismo valor en esta propiedad se consideran en un mismo grupo.\r\n * Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, la entidad geográfica se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de la línea del contorno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de la línea del contorno, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en píxeles de la línea del contorno.\r\n */","import Feature from './Feature';\r\n\r\n/**\r\n * Entidad geográfica que representa una línea de varios segmentos en el mapa.\r\n * @class Polyline\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.Feature\r\n * @param {Array.} coordinates - Coordenadas de la línea expresadas como un array de coordenadas \r\n * de puntos (los vértices de la línea) en las unidades del CRS del mapa.\r\n * @param {SITNA.feature.PolylineOptions} [options] Objeto de opciones de la entidad geográfica.\r\n * @see SITNA.layer.Vector#addPolyline\r\n * @see SITNA.layer.Vector#addPolylines\r\n * @see SITNA.layer.Vector#addFeature\r\n * @see SITNA.layer.Vector#addFeatures\r\n * @see [Ejemplo de uso de métodos de entidad geográfica](../examples/feature.methods.html)\r\n * @example [Ver en vivo](../examples/feature.Polyline.html) {@lang html}\r\n
\r\n\r\n */\r\n\r\n/**\r\n * Obtiene el estilo de la entidad.\r\n * @method getStyle\r\n * @memberof SITNA.feature.Polyline\r\n * @instance\r\n * @returns {SITNA.feature.PolylineStyleOptions}\r\n */\r\n\r\n/**\r\n * Asigna estilos a la línea.\r\n * @method setStyle\r\n * @memberof SITNA.feature.Polyline\r\n * @instance\r\n * @param {SITNA.feature.PolylineStyleOptions} style - Objeto de opciones de estilo de línea.\r\n * @returns {SITNA.feature.Polyline} La propia entidad geográfica.\r\n */\r\n\r\nclass Polyline extends Feature {\r\n STYLETYPE = \"line\";\r\n\r\n constructor(coords, options) {\r\n super(coords, options);\r\n const self = this;\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createPolyline(coords, options);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene las coordenadas de los vértices de la línea en el CRS actual del mapa.\r\n * @method getCoordinates\r\n * @memberof SITNA.feature.Polyline\r\n * @instance\r\n * @returns {Array.} Coordenadas de los vértices de la línea en el CRS actual del mapa.\r\n */\r\n\r\n /**\r\n * Establece las coordenadas de los vértices de la línea en el CRS actual del mapa.\r\n * @method setCoordinates\r\n * @memberof SITNA.feature.Polyline\r\n * @instance\r\n * @param {Array.} coordinates - Coordenadas de los vértices de la línea en el CRS actual del mapa.\r\n * @returns {SITNA.feature.Polyline} La propia entidad geográfica.\r\n */\r\n setCoordinates(coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && !Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n return super.setCoordinates.call(self, coords);\r\n }\r\n\r\n setCoords(coords) {\r\n return this.setCoordinates(coords);\r\n }\r\n\r\n getCoordsArray() {\r\n return this.getCoordinates();\r\n }\r\n\r\n /**\r\n * Obtiene la longitud total de la línea en metros.\r\n * @method getLength\r\n * @memberof SITNA.feature.Polyline\r\n * @instance\r\n * @param {SITNA.feature.MeasurementOptions} [options] - Parámetros referentes al CRS que hay que considerar para la medida.\r\n * @returns {number} Longitud total de la línea en metros.\r\n */\r\n getLength(options) {\r\n const self = this;\r\n return self.wrap.getLength({ coordinates: self.getCoordinates(options) });\r\n }\r\n}\r\n\r\nexport default Polyline;\r\n\r\n/**\r\n * Opciones de estilo de línea. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PolylineStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @mixes SITNA.feature.StrokeStyleOptions\r\n * @mixes SITNA.feature.LabelStyleOptions\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva de la entidad geográfica.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de la línea, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de la línea, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en píxeles de la línea.\r\n */\r\n\r\n/**\r\n * Opciones de entidad lineal. Hay que tener en cuenta que el archivo `config.json` de una maquetación\r\n * puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PolylineOptions\r\n * @memberof SITNA.feature\r\n * @extends SITNA.feature.FeatureOptions\r\n * @mixes SITNA.feature.PolylineStyleOptions\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos alfanuméricos \r\n * de la entidad geográfica o bien cadena de caracteres con el código HTML asociado al mismo. Al pulsar sobre la línea, bien una tabla con los atributos o bien el HTML especificado se mostrarán en un bocadillo.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva de la entidad geográfica.\r\n * @property {string} [group] - Nombre de grupo en el que incluir la entidad geográfica. Todos las entidades geográficas con el mismo valor en esta propiedad se consideran en un mismo grupo.\r\n * Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {string} [labelKey] - Nombre de atributo del cual extraer el valor de la etiqueta si esta existe.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, la entidad geográfica se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de la línea, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de la línea, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en píxeles de la línea.\r\n */","export default new Blob([String.raw`\r\n/**\r\n * @author: Tobias Nickel\r\n * @created: 06.04.2015\r\n * I needed a small xmlparser chat can be used in a worker.\r\n */\r\n\r\n/**\r\n * parseXML / html into a DOM Object. with no validation and some failur tolerance\r\n * @params S {string} your XML to parse\r\n * @param options {object} all other options:\r\n * searchId {string} the id of a single element, that should be returned. using this will increase the speed rapidly\r\n * filter {function} filter method, as you know it from Array.filter. but is goes throw the DOM.\r\n * simplify {bool} to use tXml.simplify.\r\n */\r\n\r\n\r\nfunction tXml(S, options) {\r\n \"use strict\";\r\n options = options || {};\r\n\r\n var pos = 0;\r\n\r\n var openBracket = \"<\";\r\n var openBracketCC = \"<\".charCodeAt(0);\r\n var closeBracket = \">\";\r\n var closeBracketCC = \">\".charCodeAt(0);\r\n var minus = \"-\";\r\n var minusCC = \"-\".charCodeAt(0);\r\n var slash = \"/\";\r\n var slashCC = \"/\".charCodeAt(0);\r\n var exclamation = '!';\r\n var exclamationCC = '!'.charCodeAt(0);\r\n var singleQuote = \"'\";\r\n var singleQuoteCC = \"'\".charCodeAt(0);\r\n var doubleQuote = '\"';\r\n var doubleQuoteCC = '\"'.charCodeAt(0);\r\n var openSquareBracket = \"[\";\r\n var openSquareBracketCC = \"[\".charCodeAt(0);\r\n var closeSquareBracket = \"]\";\r\n var closeSquareBracketCC = \"]\".charCodeAt(0);\r\n\r\n /**\r\n * parsing a list of entries\r\n */\r\n\r\n function parseChildren() {\r\n var children = [];\r\n while (S[pos]) {\r\n if (S.charCodeAt(pos) == openBracketCC) {\r\n if (S.charCodeAt(pos + 1) === slashCC) {\r\n pos = S.indexOf(closeBracket, pos);\r\n return children;\r\n } else if (S.charCodeAt(pos + 1) === exclamationCC) {\r\n var char2 = S.charCodeAt(pos + 2);\r\n if (char2 == openSquareBracketCC) {\r\n // cdata support\r\n }\r\n else {\r\n if (char2 == minusCC) {\r\n //comment support\r\n while (pos !== -1 && !(S.charCodeAt(pos) === closeBracketCC && S.charCodeAt(pos - 1) == minusCC && S.charCodeAt(pos - 2) == minusCC && pos != -1)) {\r\n pos = S.indexOf(closeBracket, pos + 1);\r\n }\r\n if (pos === -1)\r\n pos = S.length\r\n } else {\r\n // doctypesupport\r\n pos += 2;\r\n while (S.charCodeAt(pos) !== closeBracketCC) {\r\n pos++;\r\n }\r\n }\r\n pos++;\r\n continue;\r\n }\r\n }\r\n var node = parseNode();\r\n children.push(node);\r\n } else {\r\n var text = parseText()\r\n if (text.trim().length > 0)\r\n children.push(text);\r\n }\r\n pos++;\r\n }\r\n return children;\r\n }\r\n\r\n /**\r\n * returns the text outside of texts until the first '<'\r\n */\r\n\r\n function parseText() {\r\n var start = pos;\r\n pos = S.indexOf(openBracket, pos) - 1;\r\n if (pos === -2)\r\n pos = S.length;\r\n return S.slice(start, pos + 1);\r\n }\r\n /**\r\n * returns text until the first nonAlphebetic letter\r\n */\r\n var nameSpacer = '\\n\\t>/= ';\r\n\r\n function parseName() {\r\n var start = pos;\r\n var c = S[pos];\r\n while (nameSpacer.indexOf(c) === -1) {\r\n c = S[++pos];\r\n // flacunza: Ignoramos los prefijos\r\n if (c === ':') {\r\n pos++;\r\n start = pos;\r\n }\r\n }\r\n return S.slice(start, pos);\r\n }\r\n /**\r\n * is parsing a node, including tagName, Attributes and its children,\r\n * to parse children it uses the parseChildren again, that makes the parsing recursive\r\n */\r\n var NoChildNodes = ['img', 'br', 'input', 'meta', 'link'];\r\n\r\n function parseNode() {\r\n var node = {};\r\n pos++;\r\n if (S.charCodeAt(pos) === exclamationCC && S.charCodeAt(pos + 1) === openSquareBracketCC) {\r\n // parse cdata\r\n var start = pos + 8;\r\n while (!(S.charCodeAt(pos) === closeBracketCC && S.charCodeAt(pos - 1) === closeSquareBracketCC && S.charCodeAt(pos - 2) === closeSquareBracketCC)) {\r\n pos++;\r\n }\r\n return S.slice(start, pos - 2);\r\n }\r\n\r\n node.tagName = parseName();\r\n\r\n // parsing attributes\r\n var attrFound = false;\r\n let name;\r\n while (S.charCodeAt(pos) !== closeBracketCC) {\r\n var c = S.charCodeAt(pos);\r\n if ((c > 64 && c < 91) || (c > 96 && c < 123)) {\r\n //if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(S[pos])!==-1 ){\r\n name = parseName();\r\n // search beginning of the string\r\n var code = S.charCodeAt(pos);\r\n while (code !== singleQuoteCC && code !== doubleQuoteCC && !((code > 64 && code < 91) || (code > 96 && code < 123)) && code !== closeBracketCC) {\r\n pos++;\r\n code = S.charCodeAt(pos);\r\n }\r\n if (!attrFound) {\r\n node.attributes = {};\r\n attrFound = true;\r\n }\r\n let value;\r\n if (code === singleQuoteCC || code === doubleQuoteCC) {\r\n value = parseString();\r\n } else {\r\n value = null;\r\n pos--;\r\n }\r\n node.attributes[name] = value;\r\n }\r\n pos++;\r\n\r\n }\r\n // optional parsing of children\r\n if (S.charCodeAt(pos - 1) !== slashCC) {\r\n if (node.tagName == \"script\") {\r\n const start = pos + 1;\r\n pos = S.indexOf('', pos);\r\n node.children = [S.slice(start, pos - 1)];\r\n pos += 8;\r\n } else if (node.tagName == \"style\") {\r\n const start = pos + 1;\r\n pos = S.indexOf('', pos);\r\n node.children = [S.slice(start, pos - 1)];\r\n pos += 7;\r\n } else if (NoChildNodes.indexOf(node.tagName) == -1) {\r\n pos++;\r\n node.children = parseChildren(name);\r\n }\r\n }\r\n return node;\r\n }\r\n\r\n /**\r\n * is parsing a string, that starts with a char and with the same usually ' or \"\r\n */\r\n\r\n function parseString() {\r\n var startChar = S[pos];\r\n var startpos = ++pos;\r\n pos = S.indexOf(startChar, startpos)\r\n return S.slice(startpos, pos);\r\n }\r\n\r\n /**\r\n *\r\n */\r\n\r\n function findElements() {\r\n var r = new RegExp('\\\\s' + options.attrName + '\\\\s*=[\\'\"]' + options.attrValue + '[\\'\"]').exec(S)\r\n if (r) {\r\n return r.index;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n var out = null;\r\n if (options.attrValue !== undefined) {\r\n options.attrName = options.attrName || 'id';\r\n out = [];\r\n\r\n while ((pos = findElements()) !== -1) {\r\n pos = S.lastIndexOf('<', pos);\r\n if (pos !== -1) {\r\n out.push(parseNode());\r\n }\r\n S = S.substr(pos);\r\n pos = 0;\r\n }\r\n } else {\r\n out = parseChildren();\r\n }\r\n\r\n if (options.filter) {\r\n out = tXml.filter(out, options.filter);\r\n }\r\n\r\n if (options.simplify) {\r\n out = tXml.simplify(out);\r\n }\r\n return out;\r\n}\r\n/**\r\n * transform the DomObject to an object that is like the object of PHPs simplexmp_load_*() methods.\r\n * this format helps you to write that is more likely to keep your programm working, even if there a small changes in the XML schema.\r\n * be aware, that it is not possible to reproduce the original xml from a simplified version, because the order of elements is not saved.\r\n * therefore your programm will be more flexible and easyer to read.\r\n *\r\n * @param {array} the childrenList\r\n */\r\ntXml.simplify = function simplify(children) {\r\n var out = {};\r\n if (!children || !children.length) {\r\n return '';\r\n }\r\n\r\n if (children.length === 1 && typeof children[0] == 'string') {\r\n return children[0];\r\n }\r\n // map each object\r\n children.forEach(function (child) {\r\n if (typeof child !== 'object') {\r\n return;\r\n }\r\n if (!out[child.tagName])\r\n out[child.tagName] = [];\r\n var kids = tXml.simplify(child.children);\r\n out[child.tagName].push(kids);\r\n if (child.attributes) {\r\n kids._attributes = child.attributes;\r\n }\r\n });\r\n\r\n for (var i in out) {\r\n if (out[i].length == 1) {\r\n out[i] = out[i][0];\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\n/**\r\n * behaves the same way as Array.filter, if the filter method return true, the element is in the resultList\r\n * @params children{Array} the children of a node\r\n * @param f{function} the filter method\r\n */\r\ntXml.filter = function (children, f) {\r\n var out = [];\r\n children.forEach(function (child) {\r\n if (typeof (child) === 'object' && f(child)) out.push(child);\r\n if (child.children) {\r\n var kids = tXml.filter(child.children, f);\r\n out = out.concat(kids);\r\n }\r\n });\r\n return out;\r\n};\r\n\r\n/**\r\n * stringify a previously parsed string object.\r\n * this is useful,\r\n * 1. to remove whitespaces\r\n * 2. to recreate xml data, with some changed data.\r\n * @param O{tXMLDomObject} the object to Stringify\r\n */\r\ntXml.stringify = function TOMObjToXML(O) {\r\n var out = '';\r\n\r\n function writeChildren(O) {\r\n if (O)\r\n for (var i = 0; i < O.length; i++) {\r\n if (typeof O[i] == 'string') {\r\n out += O[i].trim();\r\n } else {\r\n writeNode(O[i]);\r\n }\r\n }\r\n }\r\n\r\n function writeNode(N) {\r\n out += \"<\" + N.tagName;\r\n for (var i in N.attributes) {\r\n if (N.attributes[i] === null) {\r\n out += ' ' + i;\r\n } else if (N.attributes[i].indexOf('\"') === -1) {\r\n out += ' ' + i + '=\"' + N.attributes[i].trim() + '\"';\r\n } else {\r\n out += ' ' + i + \"='\" + N.attributes[i].trim() + \"'\";\r\n }\r\n }\r\n out += '>';\r\n writeChildren(N.children);\r\n out += '';\r\n }\r\n writeChildren(O);\r\n\r\n return out;\r\n};\r\n\r\n\r\n/**\r\n * use this method to read the textcontent, of some node.\r\n * It is great if you have mixed content like:\r\n * this text has some big text and a link\r\n */\r\ntXml.toContentString = function (tDom) {\r\n if (Array.isArray(tDom)) {\r\n var out = '';\r\n tDom.forEach(function (e) {\r\n out += ' ' + tXml.toContentString(e);\r\n out = out.trim();\r\n });\r\n return out;\r\n } else if (typeof tDom === 'object') {\r\n return tXml.toContentString(tDom.children)\r\n } else {\r\n return ' ' + tDom;\r\n }\r\n};\r\n\r\ntXml.getElementById = function (S, id, simplified) {\r\n var out = tXml(S, {\r\n attrValue: id,\r\n simplify: simplified\r\n });\r\n return simplified ? out : out[0];\r\n};\r\n/**\r\n * A fast parsing method, that not realy finds by classname,\r\n * more: the class attribute contains XXX\r\n * @param\r\n */\r\ntXml.getElementsByClassName = function (S, classname, simplified) {\r\n return tXml(S, {\r\n attrName: 'class',\r\n attrValue: '[a-zA-Z0-9\\-\\s ]*' + classname + '[a-zA-Z0-9\\-\\s ]*',\r\n simplify: simplified\r\n });\r\n};\r\n\r\nif ('object' === typeof module) {\r\n module.exports = tXml;\r\n}\r\n\r\n//console.clear();\r\n//console.log('here:',tXml.getElementById('dadavalue','test'));\r\n//console.log('here:',tXml.getElementsByClassName('dadavalue','test'));\r\n\r\n/*\r\nconsole.clear();\r\ntXml(d,'content');\r\n //some testCode\r\nvar s = document.body.innerHTML.toLowerCase();\r\nvar start = new Date().getTime();\r\nvar o = tXml(s,'content');\r\nvar end = new Date().getTime();\r\n//console.log(JSON.stringify(o,undefined,'\\t'));\r\nconsole.log(\"MILLISECONDS\",end-start);\r\nvar nodeCount=document.querySelectorAll('*').length;\r\nconsole.log('node count',nodeCount);\r\nconsole.log(\"speed:\",(1000/(end-start))*nodeCount,'Nodes / second')\r\n//console.log(JSON.stringify(tXml('testPage

TestPage

this is a testpage

'),undefined,'\\t'));\r\nvar p = new DOMParser();\r\nvar s2=''+s+''\r\nvar start2= new Date().getTime();\r\nvar o2 = p.parseFromString(s2,'text/html').querySelector('#content')\r\nvar end2=new Date().getTime();\r\nconsole.log(\"MILLISECONDS\",end2-start2);\r\n// */\r\n\r\n\r\n(function () {\r\n\r\n var simplify = function simplify(children, attributes) {\r\n var out = {};\r\n if ((!children || !children.length) && !attributes) {\r\n return '';\r\n }\r\n children = children || [];\r\n\r\n if (children.length === 1 && typeof children[0] == 'string') {\r\n return children[0];\r\n }\r\n // map each object\r\n children.forEach(function (child) {\r\n if (typeof child !== 'object') {\r\n return;\r\n }\r\n var prefixIdx = child.tagName.indexOf('ows:');\r\n var tagName = prefixIdx < 0 ? child.tagName : child.tagName.substr(prefixIdx + 4);\r\n if (!out[tagName])\r\n out[tagName] = [];\r\n var kids = simplify(child.children, child.attributes);\r\n out[tagName].push(kids);\r\n if (child.attributes) {\r\n for (var key in child.attributes) {\r\n kids[key] = child.attributes[key];\r\n }\r\n }\r\n });\r\n\r\n for (var i in out) {\r\n if (out[i].length == 1) {\r\n out[i] = out[i][0];\r\n }\r\n }\r\n\r\n return out;\r\n };\r\n\r\n var flattenOnlineResource = function (olr) {\r\n return olr.href;\r\n };\r\n\r\n var flattenLayerUrls = function (layer, tag) {\r\n if (Object.prototype.hasOwnProperty.call(layer, tag)) {\r\n var tagObj = layer[tag];\r\n var urls = tagObj.length ? tagObj : [tagObj];\r\n for (var i = 0, len = urls.length; i < len; i++) {\r\n var url = urls[i];\r\n url.OnlineResource = flattenOnlineResource(url.OnlineResource);\r\n }\r\n layer[tag] = urls;\r\n }\r\n };\r\n\r\n var processDCPType = function (node) {\r\n if (node) {\r\n var dcpts = node.DCPType.length ? node.DCPType : [node.DCPType];\r\n for (var i = 0, len = dcpts.length; i < len; i++) {\r\n var dcpt = dcpts[i];\r\n for (var protocol in dcpt) {\r\n var dcptp = dcpt[protocol];\r\n for (var verb in dcptp) {\r\n var dcptpv = dcptp[verb];\r\n dcptpv.OnlineResource = flattenOnlineResource(dcptpv.OnlineResource);\r\n }\r\n }\r\n }\r\n node.DCPType = dcpts;\r\n }\r\n };\r\n\r\n var booleanValues = [false, true];\r\n var processWMSLayer = function processWMSLayer(layer, crsList) {\r\n // Transformamos booleanos\r\n if (Object.prototype.hasOwnProperty.call(layer, 'queryable')) {\r\n layer.queryable = booleanValues[layer.queryable];\r\n }\r\n var bbox;\r\n // Convertimos EX_GeographicBoundingBox a array\r\n if (Object.prototype.hasOwnProperty.call(layer, 'EX_GeographicBoundingBox')) {\r\n bbox = layer.EX_GeographicBoundingBox;\r\n layer.EX_GeographicBoundingBox = [\r\n parseFloat(bbox.westBoundLongitude),\r\n parseFloat(bbox.southBoundLatitude),\r\n parseFloat(bbox.eastBoundLongitude),\r\n parseFloat(bbox.northBoundLatitude)\r\n ]\r\n }\r\n // Convertimos BoundingBox a array\r\n if (Object.prototype.hasOwnProperty.call(layer, 'BoundingBox')) {\r\n bbox = layer.BoundingBox;\r\n bbox = layer.BoundingBox.length ? layer.BoundingBox : [layer.BoundingBox];\r\n layer.BoundingBox = bbox.map(function (elm) {\r\n return {\r\n crs: elm.CRS || elm.SRS,\r\n extent: [\r\n parseFloat(elm.minx),\r\n parseFloat(elm.miny),\r\n parseFloat(elm.maxx),\r\n parseFloat(elm.maxy)\r\n ],\r\n res: new Array(2)\r\n }\r\n });\r\n }\r\n // Convertimos OnlineResource a string\r\n if (Object.prototype.hasOwnProperty.call(layer, 'Attribution') && layer.Attribution.OnlineResource) {\r\n layer.Attribution.OnlineResource = flattenOnlineResource(layer.Attribution.OnlineResource);\r\n }\r\n flattenLayerUrls(layer, 'AuthorityURL');\r\n flattenLayerUrls(layer, 'MetadataURL');\r\n // Convertimos Style a array\r\n if (layer.Style) {\r\n if (!layer.Style.length) {\r\n layer.Style = [layer.Style];\r\n }\r\n // Convertimos OnlineResource a string\r\n for (var i = 0, len = layer.Style.length; i < len; i++) {\r\n flattenLayerUrls(layer.Style[i], 'LegendURL');\r\n }\r\n }\r\n // Hacemos heredar la lista de CRS\r\n var newCrsList = typeof layer.CRS === 'string' ? [layer.CRS] : layer.CRS;\r\n if (crsList) {\r\n if (layer.CRS) {\r\n layer.CRS = newCrsList.concat(crsList);\r\n }\r\n }\r\n if (layer.Layer) {\r\n var children = layer.Layer[1] ? layer.Layer : [layer.Layer];\r\n layer.Layer = children;\r\n for (var i = 0, len = children.length; i < len; i++) {\r\n children[i].parent = layer;\r\n processWMSLayer(children[i], newCrsList);\r\n }\r\n }\r\n };\r\n\r\n var cornerSeparator = ' ';\r\n var parseCorner = function (cornerString) {\r\n return cornerString.split(cornerSeparator).map(function (elm) {\r\n return parseFloat(elm);\r\n });\r\n };\r\n\r\n var processWMTSLayers = function (contents) {\r\n if (!contents.Layer.length) {\r\n contents.Layer = [contents.Layer];\r\n }\r\n var layers = contents.Layer;\r\n for (var i = 0, len = layers.length; i < len; i++) {\r\n var layer = layers[i];\r\n if (typeof layer.Format === 'string') {\r\n layer.Format = [layer.Format];\r\n }\r\n if (layer.ResourceURL && !layer.ResourceURL.length) {\r\n layer.ResourceURL = [layer.ResourceURL];\r\n }\r\n if (layer.Style && !Array.isArray(layer.Style)) {\r\n layer.Style = [layer.Style];\r\n }\r\n if (!layer.TileMatrixSetLink.length) {\r\n layer.TileMatrixSetLink = [layer.TileMatrixSetLink];\r\n }\r\n for (var j = 0, lenj = layer.TileMatrixSetLink.length; j < lenj; j++) {\r\n var tmsl = layer.TileMatrixSetLink[j];\r\n if (tmsl.TileMatrixSetLimits) {\r\n tmsl.TileMatrixSetLimits = tmsl.TileMatrixSetLimits.TileMatrixLimits;\r\n for (var k = 0, lenk = tmsl.TileMatrixSetLimits.length; k < lenk; k++) {\r\n var tmslm = tmsl.TileMatrixSetLimits[k];\r\n tmslm.MaxTileCol = parseInt(tmslm.MaxTileCol);\r\n tmslm.MaxTileRow = parseInt(tmslm.MaxTileRow);\r\n tmslm.MinTileCol = parseInt(tmslm.MinTileCol);\r\n tmslm.MinTileRow = parseInt(tmslm.MinTileRow);\r\n }\r\n }\r\n }\r\n if (layer.WGS84BoundingBox) {\r\n var lowerCorner = parseCorner(layer.WGS84BoundingBox.LowerCorner);\r\n var upperCorner = parseCorner(layer.WGS84BoundingBox.UpperCorner);\r\n layer.WGS84BoundingBox = [\r\n lowerCorner[0],\r\n lowerCorner[1],\r\n upperCorner[0],\r\n upperCorner[1]\r\n ];\r\n }\r\n }\r\n };\r\n\r\n var processTMS = function (contents) {\r\n if (!contents.TileMatrixSet.length) {\r\n contents.TileMatrixSet = [contents.TileMatrixSet];\r\n }\r\n var tileMatrixSets = contents.TileMatrixSet;\r\n tileMatrixSets.forEach(function (tileMatrixSet) {\r\n tileMatrixSet.SupportedCRS = tileMatrixSet.SupportedCRS.trim();\r\n if (tileMatrixSet.BoundingBox) {\r\n var lowerCorner = parseCorner(tileMatrixSet.BoundingBox.LowerCorner);\r\n var upperCorner = parseCorner(tileMatrixSet.BoundingBox.UpperCorner);\r\n tileMatrixSet.BoundingBox = [\r\n lowerCorner[0],\r\n lowerCorner[1],\r\n upperCorner[0],\r\n upperCorner[1]\r\n ];\r\n }\r\n tileMatrixSet.TileMatrix.forEach(function (tileMatrix) {\r\n tileMatrix.MatrixHeight = parseInt(tileMatrix.MatrixHeight);\r\n tileMatrix.MatrixWidth = parseInt(tileMatrix.MatrixWidth);\r\n tileMatrix.TileHeight = parseInt(tileMatrix.TileHeight);\r\n tileMatrix.TileWidth = parseInt(tileMatrix.TileWidth);\r\n tileMatrix.ScaleDenominator = parseFloat(tileMatrix.ScaleDenominator);\r\n tileMatrix.TopLeftCorner = parseCorner(tileMatrix.TopLeftCorner);\r\n });\r\n });\r\n };\r\n\r\n var processDCPVerb = function (dcpVerb) {\r\n var verbs = dcpVerb.length ? dcpVerb : [dcpVerb];\r\n var result = new Array(verbs.length);\r\n for (var i = 0, len = verbs.length; i < len; i++) {\r\n var verb = verbs[i];\r\n if (!verb.Constraint.length) {\r\n verb.Constraint = [verb.Constraint];\r\n for (var j = 0, lenj = verb.Constraint.length; j < lenj; j++) {\r\n var allowedValues = verb.Constraint[j].AllowedValues;\r\n if (typeof allowedValues.Value === 'string') {\r\n allowedValues.Value = [allowedValues.Value];\r\n }\r\n }\r\n }\r\n result[i] = {\r\n Constraint: verb.Constraint,\r\n href: verb.href\r\n };\r\n }\r\n return result;\r\n };\r\n\r\n var processOM = function (om) {\r\n var operations = om.Operation.length ? om.Operation : [om.Operation];\r\n for (var i = 0, len = operations.length; i < len; i++) {\r\n var operation = operations[i];\r\n for (var protocol in operation.DCP) {\r\n var protocolProp = operation.DCP[protocol];\r\n for (var verb in protocolProp) {\r\n protocolProp[verb] = processDCPVerb(protocolProp[verb]);\r\n }\r\n }\r\n om[operation.name] = {\r\n DCP: operation.DCP\r\n }\r\n }\r\n delete om.Operation;\r\n };\r\n\r\n var wfsParser = function () {\r\n var keys = [\"name\", \"Name\"],\r\n parameters = [\"Parameter\", \"Constraint\"],\r\n a2o = function (a) {\r\n return a.reduce(function (result, item, index) {\r\n if (keys.some(k => { return Object.prototype.hasOwnProperty.call(item, k); })) {\r\n var key = keys.find(k => { return Object.prototype.hasOwnProperty.call(item, k); });\r\n var objName = (item[key].substring(item[key].indexOf(\":\") + 1));\r\n delete item[key];\r\n result[objName] = Object.prototype.hasOwnProperty.call(item, \"AllowedValues\") && item.AllowedValues.Value || item\r\n return result;\r\n }\r\n else {\r\n return (index === 0 ? [] : result).concat(item);\r\n }\r\n }, {});\r\n },\r\n pp = function (p) {\r\n var o = {};\r\n if (p instanceof Array) {\r\n o = a2o(p);\r\n }\r\n else {\r\n o = Object.prototype.hasOwnProperty.call(p, \"AllowedValues\") &&\r\n p.AllowedValues.Value && keys.find(k => { return Object.prototype.hasOwnProperty.call(p, k) }) &&\r\n (o[p[keys.find(k => { return Object.prototype.hasOwnProperty.call(p, k) })]] = p.AllowedValues.Value) && o || p\r\n }\r\n return o;\r\n\r\n },\r\n e = {\r\n V1_0_0: \"1.0.0\",\r\n V1_1_0: \"1.1.0\",\r\n V2_0_0: \"2.0.0\"\r\n },\r\n r = function () {\r\n var r, n = [],\r\n u = [],\r\n p = [],\r\n capabilites = arguments[0];\r\n switch (capabilites.version) {\r\n case e.V1_0_0:\r\n r = e.V1_0_0;\r\n break;\r\n case e.V1_1_0:\r\n r = e.V1_1_0;\r\n break;\r\n case e.V2_0_0:\r\n r = e.V2_0_0\r\n }\r\n n = t(capabilites, r), u = a(capabilites, r), p = i(capabilites, r);\r\n var o = s(capabilites, r),\r\n l = {\r\n Operations: n,\r\n FeatureTypes: u,\r\n Filters: p\r\n };\r\n return Object.assign(l, o), l\r\n },\r\n t = function (r, t) {\r\n switch (t) {\r\n case e.V1_0_0:\r\n var a = r.Capability.Request;\r\n if (a.GetFeature) {\r\n var i = [];\r\n for (var s in a.GetFeature.ResultFormat) i.push(s.toLowerCase());\r\n a.GetFeature.outputFormat = i, delete a.GetFeature.ResultFormat, a.GetFeature.Operations = r.FeatureTypeList.Operations\r\n }\r\n return a;\r\n case e.V1_1_0:\r\n return {};\r\n case e.V2_0_0:\r\n var n = {};\r\n for (var s in r.OperationsMetadata) {\r\n var u = {};\r\n if (!(r.OperationsMetadata[s] instanceof Array)) continue;\r\n u[s] = a2o(r.OperationsMetadata[s]);\r\n for (var p in u[s]) {\r\n u[s][p] = ((o) => {\r\n var r = {};\r\n if (o instanceof Array)\r\n return a2o(o);\r\n for (var k in o) {\r\n if (parameters.find((i) => { return k === i })) {\r\n r = Object.assign(r, pp(o[parameters.find((i) => { return k === i })]));\r\n }\r\n else\r\n r[k] = o[k];\r\n } return r;\r\n })(u[s][p]);\r\n }\r\n n = Object.assign(n, u[s]);\r\n }\r\n return n\r\n }\r\n return null\r\n },\r\n a = function (r, t) {\r\n switch (t) {\r\n case e.V1_0_0:\r\n r.FeatureTypeList.FeatureType = (r.FeatureTypeList.FeatureType instanceof Array) ? r.FeatureTypeList.FeatureType : [r.FeatureTypeList.FeatureType];\r\n for (var a = {}, i = 0; i < r.FeatureTypeList.FeatureType.length; i++) {\r\n var s = r.FeatureTypeList.FeatureType[i].Name;\r\n a[s.substring(s.indexOf(\":\") + 1)] = r.FeatureTypeList.FeatureType[i]\r\n }\r\n return a;\r\n case e.V1_1_0:\r\n return {};\r\n case e.V2_0_0:\r\n r.FeatureTypeList.FeatureType = (r.FeatureTypeList.FeatureType instanceof Array) ? r.FeatureTypeList.FeatureType : [r.FeatureTypeList.FeatureType];\r\n for (var a = {}, i = 0; i < r.FeatureTypeList.FeatureType.length; i++) {\r\n var s = r.FeatureTypeList.FeatureType[i].Name;\r\n a[s.substring(s.indexOf(\":\") + 1)] = r.FeatureTypeList.FeatureType[i]\r\n }\r\n return a\r\n }\r\n return null\r\n },\r\n i = function (r, t) {\r\n switch (t) {\r\n case e.V1_0_0:\r\n return r.Filter_Capabilities;\r\n case e.V1_1_0:\r\n return {};\r\n case e.V2_0_0:\r\n var a = r.Filter_Capabilities;\r\n return a\r\n }\r\n return null\r\n },\r\n s = function (r, t) {\r\n switch (t) {\r\n case e.V1_0_0:\r\n var a = {};\r\n for (var i in r) \"string\" == typeof r[i] && (a[i] = r[i]);\r\n return a;\r\n case e.V1_1_0:\r\n return {};\r\n case e.V2_0_0:\r\n var a = {};\r\n for (var i in r) \"string\" == typeof r[i] && (a[i] = r[i]);\r\n return a\r\n }\r\n return {}\r\n }\r\n return {\r\n Parse: r\r\n }\r\n }();\r\n\r\n var postprocessWMS = function (xml) {\r\n var capabilities = xml.WMS_Capabilities || (xml['?xml'] && (xml['?xml'].WMS_Capabilities || xml['?xml'].WMT_MS_Capabilities));\r\n if (capabilities) {\r\n processWMSLayer(capabilities.Capability.Layer);\r\n var request = capabilities.Capability.Request;\r\n processDCPType(request.GetMap);\r\n if (request.GetFeatureInfo) {\r\n request.GetFeatureInfo.Format = typeof request.GetFeatureInfo.Format === 'string' ? [request.GetFeatureInfo.Format] : request.GetFeatureInfo.Format;\r\n }\r\n }\r\n return capabilities;\r\n };\r\n\r\n var postprocessWMTS = function (xml) {\r\n var capabilities = xml['?xml'] && xml['?xml'].Capabilities;\r\n if (capabilities) {\r\n processWMTSLayers(capabilities.Contents);\r\n processTMS(capabilities.Contents);\r\n processOM(capabilities.OperationsMetadata);\r\n }\r\n return capabilities;\r\n };\r\n var postprocessWFS = function (xml) {\r\n var capabilities = xml.WFS_Capabilities || (xml['?xml'] && (xml['?xml'].WFS_Capabilities));\r\n if (capabilities) {\r\n capabilities = wfsParser.Parse(capabilities);\r\n //añadir prefijo a los atributos simples y pue empiecen por http\r\n for (var attr in capabilities) {\r\n if (typeof (capabilities[attr]) === \"string\" && capabilities[attr].indexOf(\"http\") === 0) {\r\n capabilities[\"xmlns:\" + attr] = capabilities[attr];\r\n delete capabilities[attr];\r\n }\r\n }\r\n delete capabilities.updateSequence;\r\n }\r\n return capabilities;\r\n };\r\n\r\n onmessage = function (e) {\r\n\r\n //if (e.data.url)\r\n // this.importScripts(e.data.url + 'TC/workers/tXml.js');\r\n //else\r\n // this.importScripts('tXml.js');\r\n var xml = simplify(tXml(e.data.text));\r\n var capabilities;\r\n switch (e.data.type) {\r\n case \"WMS\":\r\n capabilities = postprocessWMS(xml);\r\n break;\r\n case \"WMTS\":\r\n capabilities = postprocessWMTS(xml);\r\n break;\r\n case \"WFS\":\r\n capabilities = postprocessWFS(xml);\r\n break;\r\n }\r\n postMessage({\r\n state: capabilities ? 'success' : 'error',\r\n capabilities: capabilities\r\n });\r\n };\r\n\r\n})();\r\n`], { type: \"text/javascript; charset=utf-8\" });","import TC from '../../TC';\r\nimport Consts from '../../TC/Consts';\r\nimport Util from '../../TC/Util';\r\nimport localforage from 'localforage';\r\nimport Proxification from '../../TC/tool/Proxification';\r\nimport wwBlob from '../../workers/tc-caps-web-worker-blob.mjs';\r\n\r\nconst isWebWorkerEnabled = Object.prototype.hasOwnProperty.call(window, 'Worker');\r\n\r\nconst srcToURL = function (src) {\r\n const anchor = document.createElement('a');\r\n anchor.href = src;\r\n\r\n if (!anchor.origin) {\r\n\r\n if (!(anchor.protocol && anchor.hostname)) {\r\n var urlParts = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(anchor.href);\r\n\r\n anchor.protocol = urlParts[1];\r\n\r\n if (urlParts[4].indexOf(':') > -1) {\r\n var hostname = urlParts[4].split(':');\r\n anchor.hostname = hostname[0];\r\n anchor.port = hostname[1];\r\n } else {\r\n anchor.hostname = urlParts[4];\r\n }\r\n }\r\n\r\n anchor.origin = anchor.protocol.length === 0 ? window.location.protocol : anchor.protocol +\r\n \"//\" + anchor.hostname + (anchor.port && src.indexOf(anchor.port) > -1 ? ':' + anchor.port : '');\r\n }\r\n\r\n return anchor;\r\n};\r\n\r\nconst cleanOgcUrl = function (url) {\r\n var result = url;\r\n if (url) {\r\n var match = url.match(/\\??SERVICE=\\w+&/i);\r\n if (match) {\r\n result = result.replace(match[0], '');\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Espacio de nombres de las capas del mapa.\r\n * @namespace SITNA.layer\r\n */\r\n\r\n/**\r\n * Capa de mapa. Esta clase no debería instanciarse directamente, sino mediante alguna de las clases que heredan de ella.\r\n * @class Layer\r\n * @memberof SITNA.layer\r\n * @abstract\r\n * @param {SITNA.layer.LayerOptions} [options] Objeto de opciones de configuración de la capa.\r\n * @see SITNA.Map#getLayer\r\n */\r\nclass Layer {\r\n /**\r\n * Identificador de capa, debe ser único en el mapa. Si no se asigna en las opciones del constructor, se genera uno automáticamente.\r\n * @member id\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @type {string}\r\n */\r\n id;\r\n\r\n /**\r\n * Objeto del mapa al que pertenece la capa.\r\n * @member map\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @type {SITNA.Map|undefined}\r\n */\r\n map;\r\n\r\n /**\r\n * Tipo de capa.\r\n * @member type\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @type {SITNA.Consts.layerType}\r\n */\r\n type;\r\n\r\n /**\r\n * URL del servicio al que pertenenece la capa o del archivo geográfico que contiene los datos de la capa.\r\n * @member url\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @type {string}\r\n */\r\n url;\r\n\r\n /*\r\n * Árbol del documento de capabilities del servicio.\r\n * @property capabilities\r\n * @memberof SITNA.layer.Raster\r\n * @type {object}\r\n */\r\n capabilities = null;\r\n\r\n tree = null;\r\n wrap = null;\r\n #CAPABILITIES_STORE_KEY_PREFIX = 'TC.capabilities.';\r\n #onlineCapabilitiesPromise;\r\n\r\n static state = {\r\n IDLE: 'idle',\r\n LOADING: 'loading'\r\n };\r\n\r\n constructor(options) {\r\n const self = this;\r\n this.options = options || {};\r\n Util.extend(self, self.options);\r\n self.id = self.options.id || TC.getUID();\r\n self.type = self.options.type || Consts.layerType.WMS;\r\n const defaultFormat = self.options.isBase ? Consts.mimeType.JPEG : Consts.mimeType.PNG;\r\n self.format = self.options.format || defaultFormat;\r\n if (!Object.prototype.hasOwnProperty.call(self.options, 'hideTree')) {\r\n self.hideTree = true;\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(self.options, 'hideTitle')) {\r\n self.hideTitle = false;\r\n }\r\n\r\n self.proxificationTool = new Proxification(TC.proxify);\r\n }\r\n\r\n /**\r\n * Establece la visibilidad de la capa en el mapa.\r\n * @method setVisibility\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @param {boolean} visible `true` si se quiere mostrar la capa, `false` si se quiere ocultarla.\r\n */\r\n setVisibility(visible) {\r\n const self = this;\r\n self.wrap.setVisibility(visible);\r\n return self;\r\n }\r\n\r\n /**\r\n * Obtiene la visibilidad actual de la capa en el mapa.\r\n * @method getVisibility\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @returns {boolean} `true` si la capa está visible, `false` si está oculta.\r\n */\r\n getVisibility() {\r\n const self = this;\r\n if (self.map) {\r\n if (!self.isBase || self.map.getBaseLayer() === self) {\r\n return self.wrap.getVisibility();\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Obtiene la opacidad actual de la capa en el mapa.\r\n * @method getOpacity\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @return {number} Número de 0 a 1, siendo 0 completamente transparente y 1 completamente opaca.\r\n */\r\n getOpacity() {\r\n const self = this;\r\n if (self.map) {\r\n if (!self.isBase || self.map.getBaseLayer() === self) {\r\n return self.wrap.layer.getOpacity();\r\n }\r\n }\r\n return 1;\r\n }\r\n\r\n /**\r\n * Establece la opacidad de la capa en el mapa. Hay que tener en cuenta que establecer opacidad 0 a una capa no es\r\n * equivalente a llamar a [setVisibility]{@link SITNA.layer.Layer#setVisibility} con el valor del parámetro `false`.\r\n * @method setOpacity\r\n * @memberof SITNA.layer.Layer\r\n * @instance\r\n * @param {number} opacity Valor entre `0` (capa transparente) y `1` (capa opaca).\r\n */\r\n async setOpacity(opacity, silent) {\r\n const self = this;\r\n await self.wrap.setOpacity(opacity);\r\n self.opacity = opacity;\r\n if (self.map && !silent) {\r\n self.map.trigger(Consts.event.LAYEROPACITY, { layer: self, opacity: opacity });\r\n }\r\n }\r\n\r\n /*\r\n * Determina si la capa se puede mostrar en el CRS especificado.\r\n * @method isCompatible\r\n * @instance\r\n * @param {string} crs Cadena con el well-known ID (WKID) del CRS.\r\n * @return {boolean}\r\n */\r\n isCompatible(_crs) {\r\n return true;\r\n }\r\n\r\n /*\r\n * Determina si la capa tiene nombres válidos.\r\n * @method isValidFromNames\r\n * @instance\r\n * @return {boolean}\r\n */\r\n isValidFromNames() {\r\n return true;\r\n }\r\n\r\n /*\r\n * Determina si la capa es de tipo raster.\r\n * @method isRaster\r\n * @instance\r\n * @return {boolean}\r\n */\r\n isRaster() {\r\n const self = this;\r\n switch (self.type) {\r\n case Consts.layerType.VECTOR:\r\n case Consts.layerType.KML:\r\n case Consts.layerType.WFS:\r\n case Consts.layerType.GROUP:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /*\r\n * Determina si la capa es visible a la resolución actual. Para ello consulta el documento de capabilities en los casos en que exista.\r\n * @method isVisibleByScale\r\n * @instance\r\n * @return {boolean}\r\n */\r\n isVisibleByScale() {\r\n return true;\r\n }\r\n\r\n /*\r\n * Determina si una capa del servicio está establecida en el mapa como visible.\r\n * @method isVisibleByName\r\n * @return {boolean}\r\n */\r\n isVisibleByName(_name) {\r\n return true;\r\n }\r\n\r\n /*\r\n *

Devuelve un árbol de información de la capa. Como mínimo devuelve un nodo raíz con el título de la capa.

\r\n *

En capas de servicios WMS es la jerarquía de capas obtenida del documento capabilities. Dependiendo del valor de la propiedad TC.cfg.LayerOptions.{{#crossLink \"TC.cfg.LayerOptions/hideTree:property\"}}{{/crossLink}},\r\n * puede mostrar un árbol de todas las capas del servicio o solo un árbol de las capas visibles inicialmente.

\r\n *

En capas de documentos KML cada nodo es una carpeta del documento.

\r\n *

Si la propiedad TC.cfg.LayerOptions.{{#crossLink \"TC.cfg.LayerOptions/stealth:property\"}}{{/crossLink}} está establecida a true, este método devuelve null.

\r\n * @method getTree\r\n * @return {TC.layer.LayerTree}\r\n */\r\n getTree() {\r\n const self = this;\r\n return { name: self.name, title: self.title };\r\n }\r\n\r\n /*\r\n * Devuelve un nodo del árbol de información de la capa.\r\n * @method findNode\r\n * @param {string} id Identificador del nodo.\r\n * @param {TC.layer.LayerTree} parent Nodo desde el que se comienza la búsqueda.\r\n * @return {TC.layer.LayerTree} Si no se encuentra el nodo el método devuelve null.\r\n */\r\n findNode(id, parent) {\r\n const self = this;\r\n let result = null;\r\n if (parent.uid == id) {\r\n result = parent;\r\n }\r\n else {\r\n for (var i = 0; i < parent.children.length; i++) {\r\n const r = self.findNode(id, parent.children[i]);\r\n if (r) {\r\n result = r;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * Establece la visibilidad en el mapa de un elemento asociado a un nodo de árbol de la capa. Dependiendo del tipo de capa este elemento\r\n * es una entidad u otra, así, en capas de tipo WMS son capas de servicio, en KML son carpetas y en capas vectoriales genéricas son grupos de marcadores.\r\n * @method setNodeVisibility\r\n * @param {string} id Identificador del nodo.\r\n * @param {boolean} visible true si se quiere mostrar el elemento, false si se quiere ocultar.\r\n */\r\n setNodeVisibility(id, visible) {\r\n const self = this;\r\n const tree = self.getTree(true); //const tree = self.getTree(!self.options.hideTree);\r\n\r\n const node = self.findNode(id, tree);\r\n if (!self.isRoot(node)) {\r\n const setState = function (n, state) {\r\n n.visibilityState = state;\r\n n.children && n.children.forEach(c => setState(c, state));\r\n };\r\n if (visible) {\r\n setState(node, Consts.visibility.VISIBLE);\r\n\r\n let n = node.parent;\r\n do {\r\n if (n.visibilityState !== Consts.visibility.VISIBLE) {\r\n n.visibilityState = Consts.visibility.HAS_VISIBLE;\r\n }\r\n n = n.parent;\r\n }\r\n while (n);\r\n }\r\n else {\r\n setState(node, Consts.visibility.NOT_VISIBLE);\r\n\r\n let n = node.parent;\r\n do {\r\n if (n.visibilityState === Consts.visibility.HAS_VISIBLE &&\r\n n.children.every(c => c.visibilityState === Consts.visibility.NOT_VISIBLE)) {\r\n n.visibilityState = Consts.visibility.NOT_VISIBLE;\r\n }\r\n n = n.parent;\r\n }\r\n while (n);\r\n }\r\n }\r\n return node;\r\n }\r\n\r\n isRoot(node) {\r\n const self = this;\r\n const tree = self.tree || self.getTree(true);\r\n return node.uid === tree.uid\r\n }\r\n\r\n /*\r\n * Obtiene la visibilidad en el mapa de un elemento asociado a un nodo de árbol de la capa. Dependiendo del tipo de capa este elemento\r\n * es una entidad u otra, así, en capas de tipo WMS son capas de servicio, en KML son carpetas y en capas vectoriales genéricas son grupos de marcadores.\r\n * @method getNodeVisibility\r\n * @param {string} id Identificador del nodo.\r\n * @return {TC.consts.Visibility}\r\n */\r\n getNodeVisibility(id, opt_tree) {\r\n const self = this;\r\n let tree = opt_tree || self.tree;\r\n if (!tree) {\r\n tree = self.getTree(true);\r\n }\r\n const node = self.findNode(id, tree);\r\n if (node) {\r\n return node.visibilityState;\r\n }\r\n return node;\r\n }\r\n\r\n getResolutions() {\r\n if (this.wrap.getResolutions) {\r\n return this.wrap.getResolutions();\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n setProjection() {\r\n }\r\n\r\n clone() {\r\n const self = this;\r\n const options = Util.extend(true, {}, self.options, { id: self.id + '_clone' });\r\n return new self.constructor(options);\r\n }\r\n\r\n getBySSL_(url) {\r\n return url.replace(/^(f|ht)tp?:\\/\\//i, \"https://\");\r\n }\r\n\r\n clip(geometry) {\r\n this.wrap.clip(geometry);\r\n }\r\n\r\n stroke(geometry, options) {\r\n this.wrap.stroke(geometry, options);\r\n }\r\n\r\n #parseCapabilities(data) {\r\n const self = this;\r\n let capabilities;\r\n\r\n if (data.documentElement) {\r\n\r\n const serviceException = data.getElementsByTagName('ServiceException')[0];\r\n if (serviceException) {\r\n capabilities = { error: serviceException.textContent };\r\n }\r\n else {\r\n var format = self.type === Consts.layerType.WMTS ? new self.wrap.WmtsParser() : new self.wrap.WmsParser();\r\n capabilities = format.read(data);\r\n\r\n //parsear a manija los tileMatrixSetLimits, que openLayers no lo hace (de momento)\r\n if (self.type === Consts.layerType.WMTS) {\r\n if (capabilities.Contents && capabilities.Contents.Layer) {\r\n const layerCollection = data.getElementsByTagName('Layer');\r\n for (var i = 0, len = layerCollection.length; i < len; i++) {\r\n const curXmlLy = layerCollection[i];\r\n var nd = TC.Util.getElementByNodeName(curXmlLy, \"ows:Identifier\")[0];\r\n var id = nd.firstChild.data;\r\n\r\n var capLy = capabilities.Contents.Layer.filter(function (ly) {\r\n return ly.Identifier == id;\r\n });\r\n\r\n if (capLy.length) {\r\n capLy = capLy[0];\r\n for (var j = 0; j < capLy.TileMatrixSetLink.length; j++) {\r\n var capLink = capLy.TileMatrixSetLink[j];\r\n let matrixId = capLink.TileMatrixSet;\r\n\r\n var xmlLink;\r\n const xmlLinks = curXmlLy.getElementsByTagName('TileMatrixSetLink');\r\n for (var k = 0, kk = xmlLinks.length; k < kk; k++) {\r\n const curLink = xmlLinks[k];\r\n if (curLink.querySelector(\"TileMatrixSet:first\").textContent == matrixId) {\r\n xmlLink = curLink;\r\n break;\r\n }\r\n }\r\n\r\n if (xmlLink) {\r\n capLink.TileMatrixSetLimits = [];\r\n const tmlCollection = Array.from(xmlLink.getElementsByTagName('TileMatrixLimits'));\r\n tmlCollection.forEach(limit => {\r\n capLink.TileMatrixSetLimits.push({\r\n TileMatrix: limit.getElementsByTagName('TileMatrix')[0].textContent,\r\n MinTileRow: parseInt(limit.getElementsByTagName('MinTileRow')[0].textContent),\r\n MinTileCol: parseInt(limit.getElementsByTagName('MinTileCol')[0].textContent),\r\n MaxTileRow: parseInt(limit.getElementsByTagName('MaxTileRow')[0].textContent),\r\n MaxTileCol: parseInt(limit.getElementsByTagName('MaxTileCol')[0].textContent)\r\n });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.#storeCapabilities(capabilities);\r\n return Promise.resolve(capabilities);\r\n }\r\n else {\r\n return new Promise(function (resolve, reject) {\r\n if (isWebWorkerEnabled && typeof data === 'string') {\r\n const workerUrl = URL.createObjectURL(wwBlob);\r\n var worker = new Worker(workerUrl);\r\n worker.onmessage = function (e) {\r\n if (e.data.state === 'success') {\r\n capabilities = e.data.capabilities;\r\n\r\n // GLS: Sólo almacenamos si el capabilities es correcto\r\n self.#storeCapabilities(capabilities);\r\n }\r\n else {\r\n capabilities = {\r\n error: 'Web worker error: ' + self.url\r\n };\r\n reject(capabilities.error);\r\n }\r\n\r\n resolve(capabilities);\r\n worker.terminate();\r\n };\r\n worker.postMessage({\r\n type: self.type,\r\n text: data,\r\n url: TC.apiLocation.indexOf(\"http\") >= 0 ? TC.apiLocation : document.location.protocol + TC.apiLocation\r\n });\r\n }\r\n else {\r\n capabilities = data;\r\n resolve(capabilities);\r\n }\r\n });\r\n }\r\n }\r\n\r\n #capabilitiesError(reason) {\r\n return 'No se pudo obtener el documento de capacidades del servicio ' + this.url + ': [' + reason + ']';\r\n }\r\n\r\n getCapabilitiesOnline() {\r\n const self = this;\r\n const result = self.#onlineCapabilitiesPromise = self.#onlineCapabilitiesPromise || new Promise(function (resolve, reject) {\r\n const url = self.getGetCapabilitiesUrl();\r\n\r\n self.proxificationTool.fetch(url, { retryAttempts: 2 }).then(function (data) {\r\n self.#parseCapabilities(data.responseText)\r\n .then(function (capabilities) {\r\n if (capabilities.error) {\r\n reject(Error(self.#capabilitiesError(capabilities.error)));\r\n return;\r\n }\r\n resolve(capabilities);\r\n })\r\n .catch(function (error) {\r\n delete self._onlineCapabilitesPromise;\r\n reject(Error(error));\r\n });\r\n }).catch(function (dataError) {\r\n delete self._onlineCapabilitesPromise;\r\n reject(Error(self.#capabilitiesError(dataError)));\r\n });\r\n\r\n });\r\n return result;\r\n }\r\n\r\n async getCapabilitiesFromStorage() {\r\n const self = this;\r\n // Obtenemos el capabilities almacenado en caché\r\n const url = srcToURL(self.url);\r\n const value = await localforage.getItem(self.#CAPABILITIES_STORE_KEY_PREFIX + self.type + \".\" + url.href);\r\n if (value) {\r\n return value;\r\n }\r\n else {\r\n throw Error('Capabilities not in storage: ' + url.href);\r\n }\r\n }\r\n\r\n #storeCapabilities(capabilities) {\r\n const self = this;\r\n // Esperamos a que el mapa se cargue y entonces guardamos el capabilities.\r\n // Así evitamos que la operación, que es bastante pesada, ocupe tiempo de carga \r\n // (con el efecto secundario de que LoadingIndicator esté un tiempo largo apagado durante la carga)\r\n const url = srcToURL(self.options.url);\r\n var capKey = self.#CAPABILITIES_STORE_KEY_PREFIX + self.type + \".\" + url.href;\r\n var setItem = function () {\r\n // GLS: antes de guardar, validamos que es un capabilities sin error\r\n if (Object.prototype.hasOwnProperty.call(capabilities, \"error\")) {\r\n return;\r\n } else {\r\n\r\n self.getCapabilitiesPromise().then(function () {\r\n localforage.setItem(capKey, capabilities).catch(err => console.warn(err));\r\n });\r\n }\r\n };\r\n if (self.map) {\r\n self.map.loaded(setItem);\r\n }\r\n else {\r\n setItem();\r\n }\r\n }\r\n\r\n getGetMapUrl() {\r\n return cleanOgcUrl(this.wrap.getGetMapUrl());\r\n }\r\n}\r\n\r\nexport default Layer;\r\n\r\n/**\r\n * Opciones de capa. Este objeto se utiliza al [configurar un mapa]{@linkplain SITNA.MapOptions}, el [control del catálogo de capas]{@linkplain LayerCatalogOptions}\r\n * o como parámetro al [añadir una capa]{@linkplain SITNA.Map#addLayer}.\r\n * @typedef LayerOptions\r\n * @memberof SITNA.layer\r\n * @see SITNA.MapOptions\r\n * @see SITNA.control.LayerCatalogOptions\r\n * @see SITNA.Map#addLayer\r\n * @see SITNA.Map#setBaseLayer\r\n * @property {string} id - Identificador único de capa. No puede haber en un mapa dos capas con el mismo valor de `id`.\r\n * @property {string} [format] - En las capas de tipo [WMS]{@link SITNA.Consts} y [WMTS]{@link SITNA.Consts},\r\n * es el tipo MIME del formato de archivo de imagen a obtener del servicio. En las capas de tipo [VECTOR]{@link SITNA.Consts}, es el tipo MIME\r\n * del formato de archivo de datos geográficos que queremos cargar (GeoJSON, KML, etc.).\r\n *\r\n * Si esta propiedad no está definida, si la capa es un mapa de fondo (consultar propiedad `isBase`), se asume que el formato es `image/jpeg`, en caso contrario se asume que el formato es `image/png`.\r\n *\r\n * Para asignar valor a esta propiedad se puede usar las constantes de definidas en [SITNA.Consts.mimeType]{@link SITNA.Consts}.\r\n * @property {boolean} [hideTree] - Aplicable a capas de tipo [WMS]{@link SITNA.Consts} y [KML]{@link SITNA.Consts}.\r\n * Si se establece a `true`, la capa no muestra la jerarquía de grupos de capas en la tabla de contenidos ni en la leyenda.\r\n * @property {boolean} [isBase] - Si se establece a `true`, la capa es un mapa de fondo.\r\n * @property {boolean} [isDefault] - *__Obsoleta__: En lugar de esta propiedad es recomendable usar la propiedad `defaultBaseLayer`de {@link SITNA.MapOptions}.*\r\n *\r\n * Si se establece a true, la capa se muestra por defecto si forma parte de los mapas de fondo.\r\n * @property {LayerOptions|string} [overviewMapLayer] - Definición de la capa que se utilizará como fondo en el control de mapa de situación cuando esta capa está de fondo en el mapa principal.\r\n * Si el valor es de tipo `string`, tiene que ser un identificador de capas de la API SITNA (un miembro de [SITNA.Consts.layer]{@link SITNA.Consts}).\r\n *\r\n * La capa del mapa de situación debe ser compatible con el sistema de referencia de coordenadas del mapa principal (ver propiedad `crs` de {@link SITNA.MapOptions}).\r\n * @property {boolean} [stealth] - Si se establece a `true`, la capa no aparece en la tabla de contenidos ni en la leyenda.\r\n * De este modo se puede añadir una superposición de capas de trabajo que el usuario la perciba como parte del mapa de fondo.\r\n * @property {string} [thumbnail] - URL de una imagen en miniatura a mostrar en el selector de mapas de fondo.\r\n * @property {string} [title] - Título de capa. Este valor se mostrará en la tabla de contenidos y la leyenda.\r\n * @property {string} [type] - Tipo de capa. Si no se especifica se considera que la capa es WMS. La lista de valores posibles está definida en [SITNA.Consts.layerType]{@link SITNA.Consts}.\r\n * @property {string} [url] - URL del servicio OGC o del archivo de datos geográficos que define la capa. Propiedad obligatoria en capas de tipo [WMS]{@link SITNA.Consts},\r\n * [WMTS]{@link SITNA.Consts}, [WFS]{@link SITNA.Consts} y [KML]{@link SITNA.Consts}.\r\n *\r\n * En las capas de tipo [VECTOR]{@link SITNA.Consts} los archivos de datos geográficos soportados son KML, GeoJSON, GPX, GML, WKT y TopoJSON.\r\n * El formato se deduce de la extensión del nombre de archivo, pero también se puede especificar utilizando la propiedad `format`.\r\n *\r\n * En el caso de que un fichero KML tenga definido el estilo del bocadillo, este formato será usado al renderizar el bocadillo en visores basados en la API SITNA.\r\n * @example Ejemplo de uso de la propiedad `url` - [Ver en vivo](../examples/cfg.LayerOptions.url.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de la propiedad `filter` - [Ver en vivo](../examples/cfg.LayerOptions.filter.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de la propiedad `overviewMapLayer` - [Ver en vivo](../examples/cfg.LayerOptions.overviewMapLayer.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n\r\n/**\r\n * Árbol de elementos de capa.\r\n * @typedef LayerTree\r\n * @ignore\r\n * @property {LayerTree} [children] - Lista de nodos hijos del nodo actual.\r\n * @property {string} [legend] - URL de la imagen con la leyenda de la capa.\r\n * @property {string} [name] - Nombre de capa en servicios WMS o WMTS.\r\n * @property {string} [title] - Título de nodo. Es un texto descriptivo para el usuario.\r\n * @property {string} [uid] - Identificador único del nodo.\r\n */\r\n","import TC from '../../TC';\r\nimport Util from '../../TC/Util';\r\nimport Consts from '../../TC/Consts';\r\nimport Cfg from '../../TC/Cfg';\r\nimport Layer from '../../SITNA/layer/Layer';\r\nimport Vector from './Vector';\r\nTC.layer = TC.layer || {};\r\n\r\nConsts.BLANK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAQAIBRAA7';\r\n\r\nconst wfsUrlPromises = {};\r\nconst describeLayerPromises = {};\r\nconst capabilitiesPromises = new Map();\r\nconst formatDescriptions = {};\r\n\r\nconst _getLayerNamePosition = function _getLayerNamePosition(treeNode, name, counter) {\r\n var result = false;\r\n counter.count = counter.count + 1;\r\n if (treeNode.name === name) {\r\n result = true;\r\n }\r\n else {\r\n // Las capas se ordenan de arriba a abajo en el árbol, por tanto hay que recorrer la lista del revés\r\n for (var i = treeNode.children.length - 1; i >= 0; i--) {\r\n if (_getLayerNamePosition(treeNode.children[i], name, counter)) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nvar _extendLayerNameOptions = function (options) {\r\n return Util.extend({ aggregate: true, lazy: false }, options);\r\n};\r\n\r\nvar _combineArray = function (source, add, rem) {\r\n var result = [];\r\n var s, a, r;\r\n s = source ? source : [];\r\n a = add ? add : [];\r\n r = rem ? rem : [];\r\n var sa = s.concat(a);\r\n for (var i = 0; i < sa.length; i++) {\r\n if (sa.indexOf(sa[i]) === i && r.indexOf(sa[i]) === -1) {\r\n result.push(sa[i]);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nvar _isNameInArray = function (layer, name, names, looseComparison) {\r\n return names.some(function (elm) {\r\n return layer.compareNames(name, elm, looseComparison);\r\n });\r\n};\r\n\r\nconst reprojectExtent = function (extent, sourceCrs, targetCrs) {\r\n const topLeft = Util.reproject([extent[0], extent[3]], sourceCrs, targetCrs);\r\n const bottomLeft = Util.reproject([extent[0], extent[1]], sourceCrs, targetCrs);\r\n const topRight = Util.reproject([extent[2], extent[3]], sourceCrs, targetCrs);\r\n const bottomRight = Util.reproject([extent[2], extent[1]], sourceCrs, targetCrs);\r\n const result = new Array(4);\r\n result[0] = Math.min(topLeft[0], bottomLeft[0]);\r\n result[1] = Math.min(bottomLeft[1], bottomRight[1]);\r\n result[2] = Math.max(topRight[0], bottomRight[0]);\r\n result[3] = Math.max(topLeft[1], topRight[1]);\r\n return result;\r\n};\r\n\r\n/**\r\n * Capa de tipo raster, como la de un WMS o un WMTS.\r\n * @class Raster\r\n * @memberof SITNA.layer\r\n * @extends SITNA.layer.Layer\r\n * @param {SITNA.layer.RasterOptions} [options] Objeto de opciones de configuración de la capa.\r\n * @see SITNA.Map#getLayer\r\n */\r\nclass Raster extends Layer {\r\n /**\r\n * URL del servicio al que pertenenece la capa.\r\n * @member url\r\n * @memberof SITNA.layer.Raster\r\n * @instance\r\n * @type string\r\n */\r\n\r\n /*\r\n * Indica si la capa tiene transparencia.\r\n * @property transparent\r\n * @memberof SITNA.layer.Raster\r\n * @type boolean\r\n * @default true\r\n */\r\n transparent;\r\n\r\n /*\r\n * Lista de nombres de capa.\r\n * @property names\r\n * @memberof SITNA.layer.Raster\r\n * @type Array.\r\n * @default []\r\n */\r\n names;\r\n\r\n /*\r\n * Lista de nombres de capa disponibles inicialmente.\r\n * @property availableNames\r\n * @memberof SITNA.layer.Raster\r\n * @type Array.\r\n * @default []\r\n */\r\n availableNames;\r\n\r\n #capabilitiesPromise;\r\n #wfsLayer = null;//capa WFS de respaldo\r\n #disgregatedLayerNames;\r\n #capabilitiesNodes = new Map();\r\n #newParams;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n //esta promise se resolverá cuando el capabilities esté descargado y parseado\r\n //se utiliza para saber cuándo está listo el capabilities en los casos en los que se instancia el layer pero no se añade al mapa\r\n //porque la forma habitual de detectar esto es por los eventos del mapa (que en esos casos no saltarán)\r\n self.#capabilitiesPromise = null;\r\n\r\n self.wrap = new TC.wrap.layer.Raster(self);\r\n\r\n self.transparent = self.options.transparent === false ? false : true;\r\n\r\n self.url = self.options.url;\r\n self.capabilities = TC.capabilities[self.url];\r\n\r\n self.params = self.options.params;\r\n\r\n if (typeof self.options.layerNames === 'string') {\r\n self.names = self.availableNames = self.options.layerNames.split(',');\r\n }\r\n else {\r\n self.names = [];\r\n self.availableNames = [];\r\n if (Array.isArray(self.options.layerNames)) {\r\n for (var i = 0; i < self.options.layerNames.length; i++) {\r\n const name = self.options.layerNames[i];\r\n if (typeof name === 'string') {\r\n self.names.push(name);\r\n self.availableNames.push(name);\r\n\r\n }\r\n else if (Object.prototype.hasOwnProperty.call(name, 'name')) {\r\n self.availableNames.push(name.name);\r\n if (name.isVisible === undefined || name.isVisible) {\r\n self.names.push(name.name);\r\n }\r\n }\r\n }\r\n } else {\r\n // Si no se encuentran nombres de capas, se buscan en el parámetro sld_body. Este parámetro es utilizado\r\n // cuando queremos instanciar una capa pasándole un SLD en la petición\r\n var sldBody = self.options.params ? self.options.params.sld_body : null;\r\n\r\n if (sldBody) {\r\n const parser = new DOMParser();\r\n var sldBodyToXml;\r\n try {\r\n sldBodyToXml = parser.parseFromString(sldBody, 'text/xml');\r\n }\r\n catch (e) {\r\n TC.error(e.message);\r\n sldBodyToXml = null;\r\n }\r\n if (sldBodyToXml) {\r\n var namedLayerElm = Util.getElementByNodeName(sldBodyToXml, 'sld:NamedLayer');\r\n if (namedLayerElm && namedLayerElm.length > 0) {\r\n var names = Util.getElementByNodeName(namedLayerElm[0], 'sld:Name');\r\n\r\n if (names && names.length > 0) {\r\n const name = names[0].textContent;\r\n self.names.push(name);\r\n self.availableNames.push(name);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.ignorePrefixes = self.options.ignorePrefixes === undefined ? true : self.options.ignorePrefixes;\r\n\r\n self.wrap._promise = new Promise(function (resolve, reject) {\r\n const endCreateLayerFn = function (ollyr) {\r\n self.wrap.setLayer(ollyr);\r\n if (ollyr) {\r\n resolve(ollyr);\r\n }\r\n else {\r\n reject(Error('Could not create native layer for \"' + self.id + '\"'));\r\n }\r\n };\r\n /*\r\n * _createOLLayer: Crea la capa nativa correspondiente según el tipo\r\n */\r\n const _createOLLayer = function () {\r\n let ollyr;\r\n if (!self.wrap.layer) {\r\n switch (self.type) {\r\n case Consts.layerType.GROUP:\r\n endCreateLayerFn(ollyr);\r\n break;\r\n case Consts.layerType.WMTS:\r\n try {\r\n ollyr = self.#createWmtsLayer();\r\n endCreateLayerFn(ollyr);\r\n }\r\n catch (_e) {\r\n // Ha fallado la creación. Puede que sea por capabilities cacheado obsoleto, \r\n // así que reintentamos online.\r\n self.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n self.capabilities = onlineCapabilities;\r\n try {\r\n ollyr = self.#createWmtsLayer();\r\n endCreateLayerFn(ollyr);\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n break;\r\n default:\r\n ollyr = self.#createWmsLayer();\r\n endCreateLayerFn(ollyr);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const processedCapabilities = function (capabilities) {\r\n // Si existe el capabilities no machacamos, porque provoca efectos indeseados en la gestión de capas.\r\n // En concreto, se regeneran los UIDs de capas, como consecuencia los controles de la API interpretan como distintas capas que son la misma.\r\n self.capabilities = self.capabilities || capabilities;\r\n\r\n var actualUrl = self.getGetMapUrl();\r\n TC.capabilities[self.options.url] = TC.capabilities[self.options.url] || capabilities;\r\n TC.capabilities[actualUrl] = TC.capabilities[actualUrl] || capabilities;\r\n\r\n _createOLLayer();\r\n };\r\n\r\n if (self.capabilities) {\r\n processedCapabilities(self.capabilities);\r\n self.#capabilitiesPromise = Promise.resolve(self.capabilities);\r\n return;\r\n }\r\n\r\n self.#capabilitiesPromise = capabilitiesPromises.get(self.url) || new Promise(function (res, rej) {\r\n const onlinePromise = self.getCapabilitiesOnline();\r\n const storagePromise = self.getCapabilitiesFromStorage();\r\n\r\n onlinePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function (error) {\r\n storagePromise.catch(function () {\r\n rej(error);\r\n });\r\n });\r\n\r\n storagePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function () {\r\n onlinePromise.catch(function (error) {\r\n rej(error);\r\n });\r\n });\r\n });\r\n capabilitiesPromises.set(self.url, self.#capabilitiesPromise);\r\n\r\n self.getCapabilitiesPromise()\r\n .then(function (capabilities) {\r\n processedCapabilities(capabilities);\r\n })\r\n .catch(function (error) {\r\n if (self.map) {\r\n self.map.trigger(Consts.event.LAYERERROR, { layer: self, reason: 'couldNotGetCapabilities' });\r\n }\r\n reject(error);\r\n });\r\n });\r\n\r\n self.#disgregatedLayerNames = null;\r\n\r\n if (Consts.layerType.WMTS === self.type) {\r\n self.wrap.setWMTSUrl();\r\n }\r\n }\r\n\r\n #createWmsLayer() {\r\n const self = this;\r\n const layerNames = Array.isArray(self.names) ? self.names.join(',') : self.names;\r\n const format = self.format;\r\n const options = self.options;\r\n\r\n var params = {\r\n LAYERS: layerNames,\r\n FORMAT: format,\r\n TRANSPARENT: self.transparent,\r\n VERSION: self.capabilities.version || '1.3.0'\r\n };\r\n\r\n if (self.params) {\r\n Util.extend(params, self.params);\r\n }\r\n\r\n if (self.queryParams) {\r\n Util.extend(params, self.queryParams);\r\n }\r\n\r\n var infoFormat = self.getPreferredInfoFormat();\r\n if (infoFormat !== null) {\r\n params.INFO_FORMAT = infoFormat;\r\n }\r\n //filtro GML o CQL\r\n if (options.filter) {\r\n //primero miramos si es un objeto TC.filter\r\n if (options.filter instanceof TC.filter.Filter) {\r\n params.filter = options.filter.getText();\r\n }\r\n //se puede parsear a XML, asumimos que es GML\r\n else if (!new DOMParser().parseFromString(options.filter, 'text/xml').querySelector(\"parsererror\")) {\r\n params.filter = options.filter;\r\n }\r\n //Si no, asumimos que es CQL\r\n else {\r\n params.cql_filter = options.filter;\r\n }\r\n }\r\n\r\n return self.wrap.createWMSLayer(self.getGetMapUrl(), params, options);\r\n }\r\n\r\n #createWmtsLayer() {\r\n const self = this;\r\n return self.wrap.createWMTSLayer(self.options);\r\n }\r\n\r\n setVisibility(visible) {\r\n const self = this;\r\n self.tree = null;\r\n super.setVisibility.call(self, visible);\r\n }\r\n\r\n /*\r\n * #aggregateLayerNames: devuelve un array de nombres de capa WMS sustituyendo en la medida de lo posible capas por las capas de grupo que las contienen\r\n */\r\n #aggregateLayerNames(layerNames) {\r\n const self = this;\r\n if (self.type !== Consts.layerType.WMS) {\r\n return layerNames;\r\n }\r\n else {\r\n var ln = layerNames.slice();\r\n self.#aggregateLayerNodeNames(ln, self.wrap.getRootLayerNode());\r\n return ln;\r\n }\r\n }\r\n\r\n /*\r\n * #aggregateLayerNodeNames: Agrega el array de nombres de capa WMS sustituyendo en la medida de lo posible capas por las capas de grupo que las contienen.\r\n * Se parte de un nodo del árbol de capas del capabilities\r\n */\r\n #aggregateLayerNodeNames(names, layerNode) {\r\n const self = this;\r\n var result = false;\r\n var children = self.wrap.getLayerNodes(layerNode);\r\n if (children.length) {\r\n children.forEach(child => {\r\n if (self.#aggregateLayerNodeNames(names, child)) {\r\n result = true;\r\n }\r\n });\r\n\r\n var nodeNames = children.map(function (elm) {\r\n return self.wrap.getName(elm);\r\n }).reverse();\r\n var idx, firstIdx;\r\n var fail = false;\r\n\r\n firstIdx = idx = names.indexOf(nodeNames[0]);\r\n if (idx < 0) {\r\n fail = true;\r\n }\r\n else {\r\n for (var i = 1, len = nodeNames.length; i < len; i++) {\r\n if (nodeNames[i] != names[++idx]) {\r\n fail = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!fail) {\r\n var nodeName = self.wrap.getName(layerNode);\r\n if (nodeName && nodeNames.length > 1) {\r\n names.splice(firstIdx, nodeNames.length, nodeName);\r\n result = true;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * #disgregateLayerNames: devuelve un array de nombres de capa WMS con solo capas hoja.\r\n * Parámetros: objeto de capa, array of strings, nodo de la capa en el capabilities, booleano que dice si esta rama viene de un nodo visible\r\n */\r\n #disgregateLayerNames(layerNames) {\r\n const self = this;\r\n let result = [];\r\n const ln = layerNames.slice();\r\n const rootNode = self.wrap.getRootLayerNode();\r\n for (var i = 0, len = ln.length; i < len; i++) {\r\n result = result.concat(self.#disgregateLayerName(ln[i], rootNode));\r\n }\r\n return result;\r\n }\r\n\r\n #disgregateLayerName(name, layerNode, ancestorVisible) {\r\n const self = this;\r\n let result = [];\r\n const nodeName = self.wrap.getName(layerNode);\r\n const nodeVisible = self.compareNames(name, nodeName);\r\n let hasEmptyChildren = false;\r\n const children = self.wrap.getLayerNodes(layerNode);\r\n for (var i = 0; i < children.length; i++) {\r\n var names = self.#disgregateLayerName(name, children[i], ancestorVisible || nodeVisible);\r\n if (!names.length) {\r\n hasEmptyChildren = true;\r\n }\r\n else {\r\n result = result.concat(names);\r\n }\r\n }\r\n if (!children.length || hasEmptyChildren) {\r\n if (ancestorVisible || nodeVisible) {\r\n result = [nodeName];\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * getLimitedMatrixSet: devuelve un array de tileMatrixSets limitados por su correspondiente TileMatrixSetLimits (si es que lo tiene)\r\n */\r\n getLimitedMatrixSet() {\r\n const self = this;\r\n const layerId = self.layerNames;\r\n const matrixSetId = self.matrixSet;\r\n var capabilities = self.capabilities;\r\n\r\n const tileMatrixSet = capabilities.Contents.TileMatrixSet.find(elm => elm.Identifier === matrixSetId);\r\n\r\n if (tileMatrixSet) {\r\n const layerNode = capabilities.Contents.Layer.find(elm => elm.Identifier === layerId);\r\n if (layerNode.TileMatrixSetLink) {\r\n const tileMatrixSetLink = layerNode.TileMatrixSetLink.find(elm => elm.TileMatrixSet === matrixSetId);\r\n if (tileMatrixSetLink && tileMatrixSetLink.TileMatrixSetLimits && tileMatrixSetLink.TileMatrixSetLimits.length) {\r\n const ret = [];\r\n tileMatrixSetLink.TileMatrixSetLimits.forEach(function (tileMatrixSetLimit) {\r\n const matrix = tileMatrixSet.TileMatrix.find(elm => elm.Identifier === tileMatrixSetLimit.TileMatrix);\r\n if (matrix) {\r\n ret.push(Util.extend({ matrixIndex: tileMatrixSet.TileMatrix.indexOf(matrix) }, matrix, tileMatrixSetLimit));\r\n }\r\n });\r\n return ret;\r\n }\r\n else {\r\n return tileMatrixSet.TileMatrix;\r\n }\r\n }\r\n else {\r\n return tileMatrixSet.TileMatrix;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /*\r\n * Establece los nombres de capas que deben estar visibles en un WMS. Si la lista está vacía, hace invisible la capa.\r\n * @method setLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * setLayerNames: sets the visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n async setLayerNames(layerNames, options) {\r\n const self = this;\r\n await self.wrap.getLayer();\r\n let ln = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n self.names = ln;\r\n var opts = _extendLayerNameOptions(options);\r\n if (opts.aggregate) {\r\n ln = self.#aggregateLayerNames(ln);\r\n }\r\n self.#disgregatedLayerNames = null;\r\n var newParams = {\r\n LAYERS: ln.join(','), TRANSPARENT: true\r\n };\r\n if (opts.lazy) {\r\n var params = self.#newParams || self.wrap.getParams();\r\n self.#newParams = Util.extend(params, newParams);\r\n }\r\n else {\r\n if (self.map) {\r\n self.map.trigger(Consts.event.BEFOREUPDATEPARAMS, { layer: self });\r\n }\r\n self.tree = null;\r\n self.wrap.setParams(newParams);\r\n if (opts.reset || !self.map) {\r\n // layerNames se fija cuando se añade al mapa o cuando reset = true.\r\n self.availableNames = self.names;\r\n }\r\n if (self.map) {\r\n self.map.trigger(Consts.event.UPDATEPARAMS, { layer: self });\r\n }\r\n }\r\n return self.names;\r\n }\r\n\r\n /*\r\n * Establece el atributo filter o CQL_filter de una capa WMS.\r\n * @method setFilter\r\n * @param {TC.filter.Filter|string} filter Objeto de tipo TC.filter.Filter, un filtro GML como cadena de texto o filtro CQL como cadena de texto\r\n */\r\n /*\r\n * setFilter: sets the filter or CQL_filter attribute on WMS layer\r\n * Parameters: object instance of TC.filter.Filter or a GML filter string\r\n */\r\n async setFilter(filter) {\r\n const self = this;\r\n await self.wrap.getLayer();\r\n var oldParams = self.wrap.getParams();\r\n delete oldParams.filter;\r\n delete oldParams.cql_filter;\r\n\r\n //if (self.map) {\r\n // self.map.trigger(Consts.event.BEFOREUPDATEPARAMS, { layer: self });\r\n //}\r\n\r\n //primero miramos si es un objeto TC.filter\r\n if (filter instanceof TC.filter.Filter) {\r\n self.filter = oldParams.filter = filter.getText();\r\n }\r\n //se puede parsear a XML, asumimos que es GML\r\n else if (!new DOMParser().parseFromString(filter, 'text/xml').querySelector(\"parsererror\")) {\r\n self.filter = oldParams.filter = filter;\r\n }\r\n //Si no, asumimos que es CQL\r\n else {\r\n self.filter = oldParams.cql_filter = filter;\r\n }\r\n self.wrap.setParams(oldParams);\r\n\r\n //if (self.map) {\r\n // self.map.trigger(Consts.event.UPDATEPARAMS, { layer: self });\r\n //}\r\n\r\n return filter;\r\n }\r\n\r\n \r\n #sortLayerNames(layerNames) {\r\n const self = this;\r\n var ln = typeof layerNames === 'string' ? layerNames.split(',') : layerNames;\r\n if (self.capabilities) {\r\n self.tree = null;\r\n var tree = self.getTree();\r\n ln.sort(function (a, b) {\r\n var idxa = {\r\n count: 0\r\n };\r\n var idxb = {\r\n count: 0\r\n };\r\n _getLayerNamePosition(tree, a, idxa);\r\n _getLayerNamePosition(tree, b, idxb);\r\n return idxb.count - idxa.count;\r\n });\r\n }\r\n return ln;\r\n }\r\n\r\n /*\r\n * Añade capas por nombre a las que ya están visibles en el WMS\r\n * @method addLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * addLayerNames: adds layer names to the set of visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n async addLayerNames(layerNames, options) {\r\n const self = this;\r\n await self.wrap.getLayer();\r\n const opts = _extendLayerNameOptions(options);\r\n let ln2a = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n let ln = self.wrap.getParams().LAYERS ? self.wrap.getParams().LAYERS.split(',') : [];\r\n if (opts.aggregate) {\r\n ln2a = self.#disgregateLayerNames(ln2a);\r\n ln = self.getDisgregatedLayerNames();\r\n }\r\n const names = await self.setLayerNames(self.#sortLayerNames(_combineArray(ln, ln2a, null)), options);\r\n return names;\r\n }\r\n\r\n /*\r\n * Elimina capas por nombre de las que están visibles en el WMS\r\n * @method addLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * removeLayerNames: removes layer names from the set of visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n async removeLayerNames(layerNames, options) {\r\n const self = this;\r\n await self.wrap.getLayer();\r\n const opts = _extendLayerNameOptions(options);\r\n let ln2r = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n let ln = self.wrap.getParams().LAYERS;\r\n if (opts.aggregate) {\r\n ln2r = self.#disgregateLayerNames(ln2r);\r\n ln = self.getDisgregatedLayerNames();\r\n }\r\n const names = await self.setLayerNames(self.#sortLayerNames(_combineArray(ln, null, ln2r)), options);\r\n return names;\r\n }\r\n\r\n /*\r\n * Toma una lista de nombres de capa WMS y cambia su visibilidad: de visible a no visible y viceversa.\r\n * @method toggleLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * toggleLayerNames: from a list, adds a layer name when it is not visible or removes a layer name when it is visible in a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n async toggleLayerNames(layerNames, options) {\r\n const self = this;\r\n await self.wrap.getLayer();\r\n const opts = _extendLayerNameOptions(options);\r\n let ln2t = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n let currentLayerNames = self.wrap.getParams().LAYERS;\r\n if (opts.aggregate) {\r\n ln2t = self.#disgregateLayerNames(ln2t);\r\n currentLayerNames = self.getDisgregatedLayerNames();\r\n }\r\n const ln2a = [];\r\n const ln2r = [];\r\n for (var i = 0; i < ln2t.length; i++) {\r\n var l = ln2t[i];\r\n if (currentLayerNames.indexOf(l) < 0) {\r\n ln2a.push(l);\r\n }\r\n else {\r\n ln2r.push(l);\r\n }\r\n }\r\n var promises = [];\r\n if (ln2a.length > 0) {\r\n promises.push(self.addLayerNames(ln2a, opts));\r\n }\r\n if (ln2r.length > 0) {\r\n promises.push(self.removeLayerNames(ln2r, opts));\r\n }\r\n const arrays = await Promise.all(promises);\r\n const a1 = arrays[0];\r\n const a2 = arrays[1];\r\n if (a1) {\r\n if (a2) {\r\n return a1.concat(a2);\r\n }\r\n else {\r\n return a1;\r\n }\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n /*\r\n * Devuelve la lista de nombres de capa WMS hoja correspondientes a las capas visibles.\r\n * @method getDisgregatedLayerNames\r\n * @return {array}\r\n */\r\n /*\r\n * getDisgregatedLayerNames: returns an array of visible WMS leaf layer names\r\n */\r\n getDisgregatedLayerNames() {\r\n const self = this;\r\n const olLayer = self.wrap.layer;\r\n if (self.wrap.isNative(olLayer) && self.type === Consts.layerType.WMS) {\r\n if (!self.#disgregatedLayerNames) {\r\n var layerNames = self.wrap.getParams().LAYERS;\r\n layerNames = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n self.#disgregatedLayerNames = self.#disgregateLayerNames(layerNames);\r\n }\r\n }\r\n else {\r\n self.#disgregatedLayerNames = self.names;\r\n }\r\n return self.#disgregatedLayerNames.slice();\r\n }\r\n\r\n isValidFromNames() {\r\n const self = this;\r\n for (var i = 0, len = self.names.length; i < len; i++) {\r\n if (!self.getLayerNodeByName(self.names[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n isCompatible(crs) {\r\n const self = this;\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n return self.wrap.isCompatible(crs) || self.wrap.getCompatibleMatrixSets(crs).length > 0;\r\n case Consts.layerType.WMS:\r\n return self.wrap.isCompatible(crs);\r\n default:\r\n break;\r\n }\r\n return false;\r\n }\r\n\r\n getCompatibleCRS(options) {\r\n const self = this;\r\n options = options || {};\r\n let result = self.wrap.getCompatibleCRS();\r\n if (options.includeFallback && self.fallbackLayer) {\r\n const fbLayer = self.getFallbackLayer();\r\n if (fbLayer instanceof Layer) {\r\n result = result.concat(fbLayer.wrap.getCompatibleCRS());\r\n }\r\n }\r\n if (options.normalized) {\r\n result = result\r\n .map(function (crs) {\r\n return Util.getCRSCode(crs);\r\n }) // códigos numéricos\r\n .filter(function (code) {\r\n return code !== null;\r\n })\r\n .reduce(function (prev, cur) {\r\n if (prev.indexOf(cur) < 0) {\r\n prev.push(cur);\r\n }\r\n return prev;\r\n }, []) // códigos numéricos sin duplicados\r\n .map(function (code) {\r\n return 'EPSG:' + code;\r\n }); // códigos normalizados\r\n }\r\n return result;\r\n }\r\n\r\n getProjection() {\r\n const self = this;\r\n\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n return self.wrap.layer.getSource().getProjection().getCode();\r\n case Consts.layerType.WMS:\r\n return self.map.crs;\r\n }\r\n }\r\n\r\n setProjection(options) {\r\n const self = this;\r\n options = options || {};\r\n if (options.crs) {\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n var matrixSet = self.wrap.getCompatibleMatrixSets(options.crs)[0];\r\n if (matrixSet) {\r\n self.matrixSet = matrixSet;\r\n self.wrap.setMatrixSet(matrixSet);\r\n }\r\n else {\r\n self.wrap.setProjection(options);\r\n }\r\n self.mustReproject = !matrixSet;\r\n break;\r\n case Consts.layerType.WMS:\r\n self.wrap.setProjection(options);\r\n self.mustReproject = !self.isCompatible(options.crs);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * isVisibleByScale: return wether the WMS layer is visible at current scale\r\n * Parameter: WMS layer name or UID\r\n */\r\n isVisibleByScale(nameOrUid, looseComparison) {\r\n const self = this;\r\n let result;\r\n const getOgcScale = function () {\r\n return self.map.wrap.getResolution() * self.map.getMetersPerUnit() / 0.00028; // OGC assumes 0.28 mm / pixel\r\n };\r\n var currentScale;\r\n var i;\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n result = false;\r\n var tileMatrix = self.wrap.getTileMatrix(self.options.matrixSet);\r\n if (tileMatrix) {\r\n currentScale = getOgcScale();\r\n for (i = 0; i < tileMatrix.length; i++) {\r\n const scaleDenominators = self.wrap.getScaleDenominators(tileMatrix[i]);\r\n if (scaleDenominators[0] === currentScale) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n break;\r\n case Consts.layerType.WMS:\r\n result = true;\r\n var layers = self.wrap.getAllLayerNodes();\r\n if (layers.length > 0) {\r\n currentScale = getOgcScale();\r\n var node;\r\n if (parseInt(nameOrUid).toString() === nameOrUid) { // Es numérico, asumimos que es un UID\r\n node = self.#capabilitiesNodes.get(nameOrUid);\r\n }\r\n if (!node) {\r\n node = layers.find(layer => self.compareNames(self.wrap.getName(layer), nameOrUid, looseComparison));\r\n }\r\n const isNodeVisibleByScale = function (node) {\r\n const scaleDenominators = self.wrap.getScaleDenominators(node);\r\n return !(parseFloat(scaleDenominators[1]) > currentScale || parseFloat(scaleDenominators[0]) < currentScale);\r\n };\r\n if (node) {\r\n result = isNodeVisibleByScale(node);\r\n\r\n // GLS: si no es visible miramos si tiene capas hijas y si tiene comprobamos si alguna de ellas es visible a la escala actual.\r\n if (!result) {\r\n if (node.Layer && node.Layer.length > 0) {\r\n return node.Layer.some(isNodeVisibleByScale);\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * isVisibleByName: return wether the WMS layer is visible because of the requested layer names\r\n * Parameter: WMS layer name\r\n */\r\n isVisibleByName(name, looseComparison) {\r\n const self = this;\r\n let result = false;\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n if (self.wrap.getWMTSLayer()) {\r\n result = true;\r\n break;\r\n }\r\n break;\r\n case Consts.layerType.WMS: {\r\n const getPathLayerNames = function getPathLayerNames(name) {\r\n return getPathLayerNamesForNode(name, self.wrap.getRootLayerNode());\r\n };\r\n\r\n const getPathLayerNamesForNode = function getPathLayerNamesForNode(name, capabilitiesNode) {\r\n let result = [];\r\n const n = self.wrap.getName(capabilitiesNode);\r\n if (self.compareNames(n, name, looseComparison)) {\r\n result.push(n);\r\n }\r\n else {\r\n const layerNodes = self.wrap.getLayerNodes(capabilitiesNode);\r\n let mustPushName = false;\r\n layerNodes.forEach(item => {\r\n const r = getPathLayerNamesForNode(name, item);\r\n if (r.length) {\r\n mustPushName = true;\r\n result = result.concat(r);\r\n }\r\n });\r\n if (mustPushName) {\r\n result.push(n);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n result = getPathLayerNames(name).some(n => _isNameInArray(self, n, self.names));\r\n break;\r\n }\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n isVisibleByNode(node) {\r\n const self = this;\r\n let result = false;\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n if (self.wrap.getWMTSLayer()) {\r\n result = true;\r\n break;\r\n }\r\n break;\r\n case Consts.layerType.WMS: {\r\n const isChildOrItself = function (potentialParent, potentialChild) {\r\n if (potentialParent === potentialChild) {\r\n return true;\r\n }\r\n return potentialParent.Layer && potentialParent.Layer.some(child => isChildOrItself(child, potentialChild));\r\n };\r\n for (var i = 0, ii = self.names.length; i < ii; i++) {\r\n const nodes = self.getLayerNodesByName(self.names[i]);\r\n if (nodes.some(n => isChildOrItself(n, node))) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n #getLayerNodeIndex(treeNode) {\r\n const self = this;\r\n var result = self.availableNames.indexOf(treeNode.name);\r\n if (result === -1) {\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n result = self.#getLayerNodeIndex(treeNode.children[i]);\r\n if (result !== -1) {\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n #sortTree(treeNode) {\r\n const self = this;\r\n var _sortFunction = function (n1, n2) {\r\n return self.#getLayerNodeIndex(n2) - self.#getLayerNodeIndex(n1);\r\n };\r\n treeNode.children.sort(_sortFunction);\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n self.#sortTree(treeNode.children[i]);\r\n }\r\n }\r\n\r\n #isNameInPath(node) {\r\n const self = this;\r\n //return self.getDisgregatedLayerNames().some(name => self.getBranch(name).some(step => step === node));\r\n return self.getDisgregatedLayerNames().some(name => self.getNodePath(name).some(step => step.Name === node || (!step.Name & step.Title === node)));\r\n }\r\n\r\n //17/02/2022 URI Se Obtiene la ramas ramas \r\n getNestedTree() {\r\n const self = this;\r\n return self.getTree(false, true);\r\n }\r\n\r\n //29/10/2021 URI Obtiene el arbol completo del capabilities de una capa sin modificar el hideTree de la capa ni modificar la propiedad tree del arbol\r\n getFullTree() {\r\n const self = this;\r\n return self.getTree(true);\r\n }\r\n\r\n //29/10/2021 URI Relaccionado con la función anterior (getFullTree), añado un parametro mas para que no haga caso a la opción hideTree del arbol y que no guarde el\r\n //resultado en un variable del objeto capa\r\n getTree(fullTree, nested = false) {\r\n const self = this;\r\n if (fullTree === undefined) {\r\n fullTree = !self.hideTree;\r\n }\r\n var result = fullTree || nested ? false : self.tree;\r\n\r\n var addChild = function (node, child) {\r\n child.parent = node;\r\n if (self.options.inverseTree) {\r\n // Versión rápida de unshift\r\n Util.fastUnshift(node.children, child);\r\n }\r\n else {\r\n node.children.push(child);\r\n }\r\n };\r\n\r\n if (!result) {\r\n let rootNode;\r\n const getTreeNode = function getTreeNode(capabilitiesNode, forceAddition, isRootNode, nested) {\r\n let uid;\r\n for (var key of self.#capabilitiesNodes.keys()) {\r\n if (self.#capabilitiesNodes.get(key) === capabilitiesNode) {\r\n uid = key;\r\n break;\r\n }\r\n }\r\n if (!uid) {\r\n uid = TC.getUID();\r\n self.#capabilitiesNodes.set(uid, capabilitiesNode);\r\n }\r\n let rslt = {\r\n name: self.wrap.getName(capabilitiesNode),\r\n title: capabilitiesNode.title || capabilitiesNode.Title,\r\n uid: uid,\r\n children: [],\r\n abstract: !!capabilitiesNode.Abstract,\r\n metadata: !!capabilitiesNode.MetadataURL\r\n };\r\n if (isRootNode) {\r\n rootNode = rslt;\r\n }\r\n\r\n if (_isNameInArray(self, rslt.name, self.availableNames))\r\n forceAddition = true;\r\n if (nested) {\r\n if (isRootNode || (self.#isNameInPath(rslt.name || rslt.title))) {\r\n forceAddition = true;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n if (!self.options.isBase) {\r\n if (rslt === rootNode) {\r\n rslt.isVisible = self.getVisibility();\r\n }\r\n else {\r\n rslt.isVisible = self.isVisibleByName(rslt.name);\r\n //rslt.isVisible = self.isVisibleByNode(capabilitiesNode);\r\n }\r\n var i;\r\n var layerNodes = self.wrap.getLayerNodes(capabilitiesNode);\r\n for (i = 0; i < layerNodes.length; i++) {\r\n const treeNode = getTreeNode(layerNodes[i], forceAddition, undefined, nested);\r\n if (treeNode) {\r\n addChild(rslt, treeNode);\r\n }\r\n }\r\n\r\n rslt.legend = self.wrap.getLegend(capabilitiesNode);\r\n\r\n // No muestra ramas irrelevantes si hideTree = true\r\n if (!forceAddition && !isRootNode) {\r\n // Eliminamos la rama hasta el nodo de interés\r\n rootNode.children = rootNode.children.concat(rslt.children);\r\n rslt = null;\r\n }\r\n }\r\n else {\r\n rslt.name = self.names.join(',');\r\n rslt.title = self.title || rslt.title;\r\n rslt.isBase = self.isDefault;\r\n if (self.options.thumbnail) {\r\n rslt.legend = [{\r\n src: self.options.thumbnail\r\n }];\r\n }\r\n }\r\n return rslt;\r\n };\r\n\r\n switch (self.type) {\r\n case Consts.layerType.WMTS:\r\n result = getTreeNode(self.wrap.getWMTSLayer(), !self.hideTree, true);\r\n break;\r\n case Consts.layerType.WMS:\r\n if (self.capabilities) {\r\n result = getTreeNode(self.wrap.getRootLayerNode(),\r\n !fullTree ? !self.hideTree : fullTree, true, nested);\r\n\r\n var _setNodeState = function _setNodeState(node) {\r\n let rslt = Consts.visibility.NOT_VISIBLE;\r\n if (node) {\r\n if (node.children) {\r\n for (var i = 0, len = node.children.length; i < len; i++) {\r\n var nState = _setNodeState(node.children[i]);\r\n if (nState === Consts.visibility.VISIBLE ||\r\n nState === Consts.visibility.HAS_VISIBLE) {\r\n rslt = Consts.visibility.HAS_VISIBLE;\r\n break;\r\n }\r\n }\r\n }\r\n if (node.isVisible &&\r\n ((node === rootNode && self.layerNames && self.layerNames.length && node.isVisible)\r\n ||\r\n node !== rootNode)) {\r\n rslt = Consts.visibility.VISIBLE;\r\n }\r\n node.visibilityState = rslt;\r\n }\r\n return rslt;\r\n };\r\n _setNodeState(result);\r\n\r\n if (self.hideTree) {\r\n self.#sortTree(result);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!result) {\r\n result = {\r\n name: self.name, title: self.title\r\n };\r\n }\r\n result.title = self.title || result.title;\r\n result.customLegend = self.customLegend || result.customLegend;\r\n if (!fullTree) {\r\n self.tree = result;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n setNodeVisibility(id, visible) {\r\n const self = this;\r\n const parentFn = super.setNodeVisibility;\r\n const nodes = [];\r\n id = Array.isArray(id) ? id : [id];\r\n id.forEach(function (id) {\r\n nodes.push(parentFn.call(self, id, visible));\r\n });\r\n\r\n var _getNames = function _getNames(node) {\r\n var result = [];\r\n if (node.name) {\r\n result[0] = node.name;\r\n }\r\n else {\r\n for (var i = 0; i < node.children.length; i++) {\r\n result = result.concat(_getNames(node.children[i]));\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n if (nodes.some((node) => self.isRoot(node))) {\r\n if (visible && self.names.length === 0) {\r\n // Prevent pink error tile\r\n self.addLayerNames(self.availableNames).then(function () {\r\n self.setVisibility(true);\r\n });\r\n }\r\n else {\r\n self.setVisibility(visible);\r\n }\r\n }\r\n else {\r\n var names = nodes.map(node => { return _getNames(node) }).join(\",\");\r\n if (visible) {\r\n self.addLayerNames(names);\r\n }\r\n else {\r\n self.removeLayerNames(names);\r\n }\r\n }\r\n return nodes.length > 1 ? nodes : nodes[0];\r\n }\r\n\r\n getNodePath(layerName, ignorePrefix) {\r\n const self = this;\r\n let result = [];\r\n if (self.type === Consts.layerType.WMS && self.capabilities) {\r\n layerName = layerName || self.names[0];\r\n\r\n var _getPath = function _getPath(node) {\r\n var res = [];\r\n var nodeName = self.wrap.getName(node);\r\n if (self.compareNames(nodeName, layerName, ignorePrefix)) {\r\n res.push(node);\r\n }\r\n else {\r\n var children = self.wrap.getLayerNodes(node);\r\n for (var i = 0; i < children.length; i++) {\r\n var r = _getPath(children[i]);\r\n if (r.length) {\r\n res = r;\r\n Util.fastUnshift(res, node);\r\n break;\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n result = _getPath(self.wrap.getRootLayerNode());\r\n }\r\n return result;\r\n }\r\n\r\n getPath(layerName, ignorePrefix) {\r\n return this.getNodePath(layerName, ignorePrefix).map(function (node) {\r\n return node.title || node.Title;\r\n });\r\n }\r\n\r\n getLayerNodesByName(name) {\r\n const result = [];\r\n const self = this;\r\n const getName = self.wrap.getServiceType() === Consts.layerType.WMTS ? self.wrap.getIdentifier : self.wrap.getName;\r\n const nodes = self.wrap.getAllLayerNodes();\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n if (self.compareNames(getName(nodes[i]), name)) {\r\n result.push(nodes[i]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getLayerNodeByName(name) {\r\n const self = this;\r\n const nodes = self.getLayerNodesByName(name);\r\n if (nodes.length) {\r\n return nodes[0];\r\n }\r\n return null;\r\n }\r\n\r\n getChildrenLayers(layer) {\r\n const result = [];\r\n const recursiveFn = function (lyr, arr) {\r\n if (lyr && lyr.Layer && lyr.Layer.length) {\r\n for (var i = 0; i < lyr.Layer.length; i++) {\r\n arr.push(lyr.Layer[i]);\r\n recursiveFn(lyr.Layer[i], arr);\r\n }\r\n }\r\n };\r\n recursiveFn(layer, result);\r\n return result;\r\n }\r\n\r\n compareNames(n1, n2, looseComparison) {\r\n const self = this;\r\n let result = n1 === n2;\r\n const lc = looseComparison !== undefined ? looseComparison : self.ignorePrefixes;\r\n if (!result && lc && n1 && n2) {\r\n // Revisamos si tienen prefijo. Si lo tiene solo una de las dos lo obviamos para la comparación\r\n var idx1 = n1.indexOf(':');\r\n var idx2 = n2.indexOf(':');\r\n if (idx1 >= 0 && idx2 < 0) {\r\n result = n1.substr(idx1 + 1) === n2;\r\n }\r\n else if (idx2 >= 0 && idx1 < 0) {\r\n result = n1 === n2.substr(idx2 + 1);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getCapabilitiesPromise() {\r\n return this.#capabilitiesPromise;\r\n }\r\n\r\n getResolutions() {\r\n return this.wrap.getResolutions();\r\n }\r\n\r\n setResolutions(resolutions) {\r\n this.wrap.setResolutions(resolutions);\r\n }\r\n\r\n getExtent(options) {\r\n const self = this;\r\n options = options || {};\r\n let extent = null;\r\n\r\n if (self.type === Consts.layerType.WMS) {\r\n const mapCrs = options.crs || self.map && self.map.getCRS() || 'EPSG:4326';\r\n const mapCrsCode = Util.getCRSCode(mapCrs);\r\n\r\n const getNodeBoundingBoxes = function (node) {\r\n let bboxes = null;\r\n let hasOwnBBox = false;\r\n if (node.BoundingBox) {\r\n bboxes = Array.isArray(node.BoundingBox) ? node.BoundingBox : [node.BoundingBox];\r\n const crsBboxes = bboxes.filter(bbox => Util.getCRSCode(bbox.crs) === mapCrsCode);\r\n if (crsBboxes.length) {\r\n hasOwnBBox = true;\r\n bboxes = crsBboxes;\r\n }\r\n }\r\n if (!bboxes && !node.EX_GeographicBoundingBox && node.parent) {\r\n bboxes = getNodeBoundingBoxes(node.parent);\r\n }\r\n if (self.capabilities.version === '1.3.0' && bboxes) {\r\n // En WMS 1.3.0 las coordenadas de EPSG:4326 están en formato neu en vez de enu\r\n // Cambiamos el orden\r\n bboxes = bboxes.map(function (bbox) {\r\n if (bbox.crs === 'EPSG:4326') {\r\n const prevExtent = bbox.extent;\r\n return {\r\n crs: bbox.crs,\r\n extent: [prevExtent[1], prevExtent[0], prevExtent[3], prevExtent[2]]\r\n };\r\n }\r\n else if (bbox.crs === 'CRS:84') {\r\n return {\r\n crs: 'EPSG:4326',\r\n extent: bbox.extent\r\n };\r\n }\r\n return bbox;\r\n });\r\n if (!hasOwnBBox && node.EX_GeographicBoundingBox) {\r\n bboxes.unshift({\r\n crs: 'EPSG:4326',\r\n extent: node.EX_GeographicBoundingBox\r\n });\r\n }\r\n }\r\n return bboxes;\r\n }\r\n\r\n const boundingBoxes = new Array(self.names.length);\r\n for (var i = 0, ii = boundingBoxes.length; i < ii; i++) {\r\n const node = self.getLayerNodeByName(self.names[i]);\r\n if (!node) return null;\r\n const bboxes = getNodeBoundingBoxes(node);\r\n if (!bboxes) {\r\n return null;\r\n }\r\n boundingBoxes[i] = bboxes;\r\n }\r\n\r\n extent = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n boundingBoxes\r\n .map(function getBestBbox(bboxes) {\r\n const result = {};\r\n let firstBbox, crsBbox;\r\n bboxes.forEach(function (bbox, idx) {\r\n if (idx === 0) {\r\n firstBbox = bbox;\r\n }\r\n if (Util.getCRSCode(bbox.crs) === mapCrsCode) {\r\n crsBbox = bbox;\r\n }\r\n });\r\n if (crsBbox) {\r\n result.crs = mapCrs;\r\n result.extent = crsBbox.extent;\r\n }\r\n else {\r\n result.crs = firstBbox.crs;\r\n result.extent = firstBbox.extent;\r\n }\r\n return result;\r\n })\r\n .reduce(function combineBoundingBoxesByCrs(acc, bboxObj) {\r\n let accExtent = acc.get(bboxObj.crs);\r\n const curExtent = bboxObj.extent;\r\n if (accExtent) {\r\n accExtent[0] = Math.min(accExtent[0], curExtent[0]);\r\n accExtent[1] = Math.min(accExtent[1], curExtent[1]);\r\n accExtent[2] = Math.max(accExtent[2], curExtent[2]);\r\n accExtent[3] = Math.max(accExtent[3], curExtent[3]);\r\n }\r\n else {\r\n accExtent = curExtent;\r\n }\r\n acc.set(bboxObj.crs, accExtent);\r\n return acc;\r\n }, new Map())\r\n .forEach(function combineExtent(ext, crs) {\r\n if (Util.getCRSCode(crs) === mapCrsCode) {\r\n extent[0] = Math.min(ext[0], extent[0]);\r\n extent[1] = Math.min(ext[1], extent[1]);\r\n extent[2] = Math.max(ext[2], extent[2]);\r\n extent[3] = Math.max(ext[3], extent[3]);\r\n }\r\n else {\r\n const mapCrsExtent = reprojectExtent(ext, crs, mapCrs);\r\n extent[0] = Math.min(mapCrsExtent[0], extent[0]);\r\n extent[1] = Math.min(mapCrsExtent[1], extent[1]);\r\n extent[2] = Math.max(mapCrsExtent[2], extent[2]);\r\n extent[3] = Math.max(mapCrsExtent[3], extent[3]);\r\n }\r\n });\r\n }\r\n else if (self.type === Consts.layerType.WMTS) {\r\n const layerName = self.names[0];\r\n const layerNode = self\r\n .capabilities\r\n .Contents\r\n .Layer\r\n .find(l => l.Identifier === layerName);\r\n if (layerNode) {\r\n const matrixSetNode = self\r\n .capabilities\r\n .Contents\r\n .TileMatrixSet\r\n .find(tms => tms.Identifier === self.matrixSet);\r\n if (matrixSetNode) {\r\n if (layerNode.BoundingBox || layerNode.WGS84BoundingBox) {\r\n let boundingBox;\r\n if (Array.isArray(layerNode.BoundingBox)) {\r\n boundingBox = layerNode.BoundingBox.find(bbox => Util.CRSCodesEqual(bbox.crs, matrixSetNode.SupportedCRS));\r\n }\r\n else {\r\n boundingBox = layerNode.BoundingBox;\r\n }\r\n if (boundingBox) {\r\n const stringToNumberArray = str => {\r\n return str.split(' ').map(v => parseFloat(v));\r\n };\r\n const bottomLeft = stringToNumberArray(boundingBox.LowerCorner);\r\n const topRight = stringToNumberArray(boundingBox.UpperCorner);\r\n extent = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\r\n }\r\n if (!extent && layerNode.WGS84BoundingBox) {\r\n extent = reprojectExtent(layerNode.WGS84BoundingBox, 'EPSG:4326', matrixSetNode.SupportedCRS);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return extent;\r\n }\r\n\r\n getInfo(name) {\r\n const self = this;\r\n const info = self.wrap.getInfo(name);\r\n if (info.metadata) {\r\n info.metadata.forEach(function (md) {\r\n if (self.map) {\r\n md.formatDescription = formatDescriptions[md.format] =\r\n formatDescriptions[md.format] ||\r\n Util.getLocaleString(self.map.options.locale, Util.getSimpleMimeType(md.format)) ||\r\n Util.getLocaleString(self.map.options.locale, 'viewMetadata');\r\n }\r\n else {\r\n md.formatDescription = formatDescriptions[md.format];\r\n }\r\n });\r\n }\r\n return info;\r\n }\r\n\r\n //Devuelve un array de subLayers cuyo nombre o descripción contenga el texto indicado\r\n //case insensitive\r\n searchSubLayers(text) {\r\n if (text && text.length && text.length >= 3) {\r\n var self = this;\r\n var layers = null;\r\n /*URI:Si la cadena a buscar contiene a la busqueda anterior, por ejemplo, antes he buscado \"cat\" y ahora busco \"cata\" porque esto escribiendo \"catastro\" ...\r\n en vez de buscar en todas las capas del servicio busco en los resultados encotrados en la búsqueda anterior */\r\n if (this.lastPattern && text.indexOf(this.lastPattern) >= 0) {\r\n layers = this.lastMatches;\r\n }\r\n else {\r\n /*si se ha definido el parametro layers de esta capa en configuraci\\u00f3n filtro las capas del capability para que busque solo en las capas que est\\u00e9n en \r\n configuraci\\u00f3n y sus hijas*/\r\n if (self.availableNames && self.availableNames.length > 0) {\r\n layers = [];\r\n for (var i = 0; i < self.availableNames.length; i++) {\r\n var layer = self.getLayerNodeByName(self.availableNames[i]);\r\n if (layer) {\r\n layers.push(layer);\r\n layers = layers.concat(self.getChildrenLayers(layer));\r\n }\r\n }\r\n }\r\n else {\r\n layers = self.wrap.getAllLayerNodes();\r\n }\r\n }\r\n\r\n var filter = TC.Util.patternFn(text);\r\n var re = new RegExp(filter, \"i\");\r\n\r\n var matches = layers.map(function (ly, ix) {\r\n delete ly.tcScore;\r\n\r\n ly.tcPosition = ix;\r\n\r\n self.wrap.normalizeLayerNode(ly);\r\n\r\n var title = ly.Title.trim();\r\n var res = re.exec(title);\r\n var titleIx = res ? res.index : -1;\r\n var abstractIx = -1;\r\n if (ly.Abstract) {\r\n var abs = ly.Abstract.trim();\r\n var res2 = re.exec(abs);\r\n abstractIx = res2 ? res2.index : -1;\r\n }\r\n\r\n if (res && title == res[0])\r\n ly.tcScore = 20;\r\n else if (titleIx == 0)\r\n ly.tcScore = 15;\r\n else if (titleIx > -1)\r\n ly.tcScore = 10;\r\n else if (abstractIx == 0)\r\n ly.tcScore = 5;\r\n else if (abstractIx > -1)\r\n ly.tcScore = 1;\r\n\r\n if (ly.tcScore)\r\n return ly;\r\n else\r\n return null;\r\n })\r\n .filter(function (elto) {\r\n return elto != null;\r\n })\r\n .sort(function (a, b) {\r\n if (b.tcScore === a.tcScore) {\r\n //si la puntuación es la misma reordenamos por título\r\n var titleA = Util.replaceSpecialCharacters(a.Title);\r\n var titleB = Util.replaceSpecialCharacters(b.Title);\r\n if (titleA < titleB) return -1;\r\n if (titleA > titleB) return 1;\r\n return 0;\r\n }\r\n else\r\n return b.tcScore - a.tcScore;\r\n });\r\n\r\n this.lastPattern = text;\r\n this.lastMatches = matches;\r\n\r\n return matches;\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n getGetCapabilitiesUrl() {\r\n const self = this;\r\n var url;\r\n const serviceUrl = self.url;\r\n const params = {};\r\n if (self.type === Consts.layerType.WMTS) {\r\n if (self.options.encoding === Consts.WMTSEncoding.RESTFUL) {\r\n var suffix = '/1.0.0/WMTSCapabilities.xml';\r\n const suffixIdx = serviceUrl.indexOf(suffix);\r\n if (suffixIdx < 0 || suffixIdx < serviceUrl.length - suffix.length) {\r\n if (serviceUrl[serviceUrl.length - 1] === '/') {\r\n suffix = suffix.substr(1);\r\n }\r\n url = serviceUrl + suffix;\r\n }\r\n else {\r\n url = serviceUrl;\r\n }\r\n }\r\n else {\r\n url = serviceUrl;\r\n params.SERVICE = 'WMTS';\r\n params.VERSION = '1.0.0';\r\n params.REQUEST = 'GetCapabilities';\r\n }\r\n }\r\n else {\r\n url = serviceUrl;\r\n params.SERVICE = 'WMS';\r\n params.VERSION = '1.3.0';\r\n params.REQUEST = 'GetCapabilities';\r\n }\r\n url = url + '?' + Util.getParamString(Util.extend(params, self.queryParams));\r\n return url;\r\n }\r\n\r\n getPreferredInfoFormat() {\r\n const layer = this;\r\n var result = null;\r\n\r\n const infoFormats = layer.wrap.getInfoFormats();\r\n if (infoFormats) {\r\n for (var i = 0; i < TC.wrap.layer.Raster.infoFormatPreference.length; i++) {\r\n var format = TC.wrap.layer.Raster.infoFormatPreference[i];\r\n if (infoFormats.indexOf(format) >= 0) {\r\n result = format;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * Carga la imagen de leyenda de una capa por POST.\r\n */\r\n getLegendGraphicImage() {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n //Si ya hemos hecho esta consulta previamente, retornamos la respuesta\r\n if (self.options.params.base64LegendSrc) {\r\n return resolve(self.options.params.base64LegendSrc);\r\n }\r\n\r\n if (typeof window.btoa === 'function') {\r\n var name = self.names[0];\r\n var info = self.wrap.getInfo(name);\r\n var xhr = new XMLHttpRequest();\r\n var url = info.legend[0].src.split('?'); // Separamos los parámetros de la raíz de la URL\r\n var dataEntries = url[1].split(\"&\"); // Separamos clave/valor de cada parámetro\r\n var params = self.options.params.sld_body ? \"sld_body=\" + self.options.params.sld_body : '';\r\n\r\n for (var i = 0; i < dataEntries.length; i++) {\r\n var chunks = dataEntries[i].split('=');\r\n\r\n if (chunks && chunks.length > 1 && chunks[1]) {\r\n params += \"&\" + dataEntries[i];\r\n }\r\n }\r\n if (self.options.params.env) {\r\n params += \"&\" + self.options.params.env;\r\n }\r\n\r\n xhr.open('POST', url[0], true);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function (_e) {\r\n if (this.status === 200) {\r\n var uInt8Array = new Uint8Array(this.response);\r\n var i = uInt8Array.length;\r\n var binaryString = new Array(i);\r\n while (i--) {\r\n binaryString[i] = String.fromCharCode(uInt8Array[i]);\r\n }\r\n var data = binaryString.join('');\r\n var type = xhr.getResponseHeader('content-type');\r\n if (type.indexOf('image') === 0) {\r\n var imageSrc;\r\n imageSrc = 'data:' + type + ';base64,' + window.btoa(data);\r\n self.options.params.base64LegendSrc = imageSrc; //Cacheamos la respuesta\r\n resolve(imageSrc);\r\n }\r\n }\r\n };\r\n xhr.send(params);\r\n } else {\r\n reject(Error(\"Función window.btoa no soportada por el navegador\"));\r\n }\r\n });\r\n }\r\n\r\n // GLS: Según MDN: https://developer.mozilla.org/es/docs/Web/API/WebGL_API/Tutorial/Wtilizando_texturas_en_WebGL\r\n // Note: Es importante señalar que la carga de texturas en WebGL sigue reglas de dominio-cruzado; \r\n // Es decir, sólo puede cargar texturas de sitios para los que su contenido tiene aprobación de CORS.\r\n\r\n // Usamos el mismo método que para el capabilities ya que la carga de texturas es igual de restrictiva.\r\n async getWebGLUrl(src) {\r\n const self = this;\r\n\r\n const resultSrc = !Util.isSecureURL(src) && Util.isSecureURL(Util.toAbsolutePath(self.url)) ? self.getBySSL_(src) : src;\r\n\r\n if (self.ignoreProxification) {\r\n return resultSrc;\r\n } else {\r\n const options = {\r\n exportable: true,\r\n ignoreProxification: self.ignoreProxification\r\n };\r\n\r\n const img = await self.proxificationTool.fetchImage(resultSrc, options);\r\n let action = self.proxificationTool.cacheHost.getAction(resultSrc, options);\r\n let _img = img;\r\n if (action) {\r\n const cache = await action;\r\n if (cache && cache.action) {\r\n return { url: cache.action.call(self.proxificationTool, resultSrc), image: _img };\r\n }\r\n } else {\r\n throw Error('No action to ' + resultSrc);\r\n }\r\n }\r\n\r\n //// IGN francés tiene cabeceras CORS menos en las excepciones que las devuelve en XML así que si da error cargamos imagen en blanco sin hacer más\r\n //if (self.ignoreProxification) {\r\n // setSRC({ src: Consts.BLANK_IMAGE });\r\n // return;\r\n //}\r\n\r\n //return self.capabilitiesUrl_.call(self, !Util.isSecureURL(url) && Util.isSecureURL(Util.toAbsolutePath(self.url)) ? self.getBySSL_(url) : url); \r\n }\r\n\r\n \r\n #get$events() {\r\n const self = this;\r\n if (self.wrap && self.wrap.$events) {\r\n return self.wrap.$events;\r\n }\r\n return null;\r\n }\r\n\r\n getImageLoad(image, src) {\r\n const self = this;\r\n\r\n const setSRC = function (data) {\r\n const img = image.getImage();\r\n\r\n if (!Util.isSameOrigin(data.src)) {\r\n if (!self.map || self.map.crossOrigin) {\r\n img.crossOrigin = data.crossOrigin !== null ?\r\n data.crossOrigin :\r\n self.map ? self.map.crossOrigin : \"anonymous\";\r\n }\r\n }\r\n\r\n // GLS: si establecemos por atributo directamente no actualiza, mediante setAttribute funciona siempre.\r\n img.setAttribute(\"src\", data.src);\r\n img.onload = function () {\r\n self.#get$events().trigger(Consts.event.TILELOAD, { tile: image });\r\n };\r\n img.onerror = function (error) {\r\n img.setAttribute(\"src\", Consts.BLANK_IMAGE);\r\n self.#get$events().trigger(Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n };\r\n };\r\n\r\n // Viene sin nombre desde el control TOC, si es así lo ignoramos.\r\n if (self.names && self.names.length > 0) {\r\n\r\n const errorFn = function (error) {\r\n self.#get$events().trigger(Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n setSRC({ src: Consts.BLANK_IMAGE });\r\n };\r\n\r\n // comprobamos z/x/y contra el matrixset del capabilities para evitar peticiones 404\r\n if (self.type === Consts.layerType.WMTS) {\r\n var z, x, y;\r\n if (self.encoding !== \"KVP\") {\r\n var _src = src.replace('.' + self.format.split('/')[1], '');\r\n const parts = _src.split('/').slice(_src.split('/').length - 3).map(function (elm) { return parseInt(elm); });\r\n z = parts[0];\r\n x = parts[1];\r\n y = parts[2];\r\n } else {\r\n let parts = /.*TileMatrix=(\\d*)&TileCol=(\\d*)&TileRow=(\\d*)/i.exec(src);\r\n if (parts && parts.length === 4) {\r\n parts = parts.slice(1).map(function (elm) { return parseInt(elm); });\r\n z = parts[0];\r\n x = parts[2];\r\n y = parts[1];\r\n }\r\n }\r\n\r\n if (z && x && y) {\r\n var wmtsOptions = self.wrap.getWMTSLayer();\r\n if (wmtsOptions) {\r\n const matrixSet = wmtsOptions.TileMatrixSetLink.find(elm => elm.TileMatrixSet === self.matrixSet);\r\n if (matrixSet) {\r\n\r\n if (matrixSet.TileMatrixSetLimits && matrixSet.TileMatrixSetLimits.length > 0) {\r\n var matrixSetLimits = matrixSet.TileMatrixSetLimits.sort(function (a, b) {\r\n if (parseInt(a.TileMatrix) > parseInt(b.TileMatrix))\r\n return 1;\r\n else if (parseInt(a.TileMatrix) < parseInt(b.TileMatrix))\r\n return -1;\r\n else return 0;\r\n });\r\n\r\n var level = matrixSetLimits[z];\r\n if (level && self.map && self.map.on3DView) {\r\n if (!(level.MinTileRow <= x && level.MaxTileRow >= x && level.MinTileCol <= y && level.MaxTileCol >= y)) {\r\n console.log('Prevenimos petición fuera de matrix set, cargamos imagen en blanco');\r\n setSRC({ src: Consts.BLANK_IMAGE });\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.#get$events().trigger(Consts.event.BEFORETILELOAD, { tile: image });\r\n\r\n var params = \"\";\r\n var isPOST = self.options.method === \"POST\";\r\n if (isPOST) {\r\n var url = src.split('?');\r\n params = url[1].split(\"&\").filter(function (param) {\r\n const values = param.split('=');\r\n // eliminamos los valores en blanco y el parámetro layers\r\n return values.length > 1 && values[1].trim().length > 0 && values[0].trim().toLowerCase() !== \"layers\";\r\n }).join('&');\r\n\r\n self.proxificationTool.fetchImageAsBlob(url[0], {\r\n type: \"POST\",\r\n data: params,\r\n contentType: \"application/x-www-form-urlencoded\"\r\n }).then(function (blob) {\r\n const imageUrl = URL.createObjectURL(blob);\r\n const img = image.getImage();\r\n img.onload = function (_e) {\r\n URL.revokeObjectURL(imageUrl);\r\n };\r\n setSRC({ src: imageUrl });\r\n }).catch(errorFn);\r\n\r\n } else {\r\n if (!self.ignoreProxification) {\r\n self.proxificationTool.fetchImage(src, { exportable: !self.map || self.map.crossOrigin }).then(function (img) {\r\n setSRC(img);\r\n }).catch(errorFn);\r\n } else {\r\n setSRC({ src: src });\r\n var img = image.getImage();\r\n\r\n if (!Util.isSameOrigin(src)) {\r\n if (!self.map || self.map.crossOrigin) {\r\n img.crossOrigin = self.map ? self.map.crossOrigin : \"anonymous\";\r\n }\r\n }\r\n\r\n img.onload = function () {\r\n self.#get$events().trigger(Consts.event.TILELOAD, { tile: image });\r\n };\r\n img.onerror = function (error) {\r\n img.src = Consts.BLANK_IMAGE;\r\n self.#get$events().trigger(Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n };\r\n\r\n img.src = self.names.length ? src : Consts.BLANK_IMAGE;\r\n }\r\n }\r\n } else {\r\n setSRC({ src: Consts.BLANK_IMAGE });\r\n // lanzamos el evento para gestionar el loading\r\n self.#get$events().trigger(Consts.event.TILELOAD, { tile: image });\r\n }\r\n }\r\n\r\n async #describeLayer() {\r\n const self = this;\r\n const url = new URL(self.url, document.location.href);\r\n const layerNames = self.layerNames instanceof Array ? self.layerNames[0] : self.layerNames;\r\n url.search = new URLSearchParams({ request: 'DescribeLayer', service: \"WMS\", version: \"1.1.1\", Layers: layerNames, outputFormat: \"application/json\" });\r\n let urlPromises = describeLayerPromises[self.options.url];\r\n if (!urlPromises) {\r\n urlPromises = describeLayerPromises[self.options.url] = new Map();\r\n }\r\n if (!urlPromises.has(layerNames)) {\r\n urlPromises.set(layerNames, self.proxificationTool.fetch(url.toString(), {\r\n method: \"GET\"\r\n }));\r\n }\r\n const response = await urlPromises.get(layerNames);\r\n if (response.contentType.startsWith(\"application/json\")) {\r\n return JSON.parse(response.responseText).layerDescriptions[0];\r\n }\r\n else {\r\n let xmlDoc = new DOMParser().parseFromString(response.responseText, \"text/xml\");\r\n let error = xmlDoc.querySelector(\"Exception ExceptionText\") || xmlDoc.querySelector(\"ServiceException\");\r\n if (error) {\r\n throw Error(error.textContent);\r\n } else {\r\n return xmlDoc.querySelector(\"LayerDescription\");\r\n }\r\n }\r\n }\r\n\r\n async getWFSURL() {\r\n const self = this;\r\n if (wfsUrlPromises[self.options.url]) return await wfsUrlPromises[self.options.url];\r\n const layerDescription = await self.#describeLayer();\r\n if (layerDescription.owsType !== \"WFS\") {\r\n return self.options.url.replace(/wms/gi, \"wfs\");\r\n }\r\n const url = layerDescription.owsURL.substr(0, layerDescription.owsURL.length + (layerDescription.owsURL.endsWith('?') ? -1 : 0));\r\n try {\r\n await self.proxificationTool.fetch(url, { method: \"HEAD\" });\r\n }\r\n catch (_e) {\r\n return self.options.url.replace(/wms/gi, \"wfs\");\r\n }\r\n return url;\r\n }\r\n\r\n async getWFSFeatureType() {\r\n const self = this;\r\n if (wfsUrlPromises[self.options.url]) return await wfsUrlPromises[self.options.url];\r\n const layerDescription = await self.#describeLayer();\r\n if (layerDescription.owsType !== \"WFS\") {\r\n return '';\r\n }\r\n return layerDescription.typeName;\r\n }\r\n\r\n async getWFSCapabilities() {\r\n const self = this;\r\n const layer = await self.#getWfsLayer(await self.getWFSURL());\r\n return await layer.getCapabilitiesPromise();\r\n }\r\n\r\n async #getWfsLayer(url) {\r\n const self = this;\r\n if (!self.#wfsLayer || self.#wfsLayer.options.url !== url || self.#wfsLayer.featureType !== self.layerNames[0]) {\r\n self.#wfsLayer = new Vector({\r\n type: Consts.layerType.WFS,\r\n url: url,\r\n featureType: self.layerNames[0],\r\n stealth: true\r\n });\r\n }\r\n return self.#wfsLayer;\r\n }\r\n\r\n async getDescribeFeatureTypeUrl() {\r\n const self = this;\r\n const wfsLayer = await self.#getWfsLayer(await self.getWFSURL());\r\n return wfsLayer.getDescribeFeatureTypeUrl();\r\n }\r\n\r\n getFallbackLayer() {\r\n const self = this;\r\n if (self.fallbackLayer instanceof Layer) {\r\n return self.fallbackLayer;\r\n }\r\n if (self.options.fallbackLayer) {\r\n var fbLayer = self.options.fallbackLayer;\r\n if (typeof fbLayer === 'string') {\r\n const ablCollection = self.map ? self.map.options.availableBaseLayers : Cfg.availableBaseLayers;\r\n ablCollection.forEach(function (baseLayer) {\r\n if (self.options.fallbackLayer === baseLayer.id) {\r\n self.fallbackLayer = new Raster(Util.extend({}, baseLayer, { isBase: true, stealth: true, map: self.map }));\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n });\r\n }\r\n else if (fbLayer instanceof Layer) {\r\n self.fallbackLayer = fbLayer;\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n else {\r\n self.fallbackLayer = new Raster(Util.extend({}, fbLayer, {\r\n id: TC.getUID(),\r\n isBase: true,\r\n stealth: true,\r\n title: self.title,\r\n map: self.map\r\n }));\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n return self.fallbackLayer;\r\n }\r\n return null;\r\n }\r\n\r\n async describeFeatureType(layerName) {\r\n const self = this;\r\n const layer = await self.#getWfsLayer(await self.getWFSURL());\r\n return layer.describeFeatureType(layerName || self.layerNames[0]);\r\n }\r\n\r\n refresh() {\r\n return this.wrap.reloadSource();\r\n }\r\n}\r\n\r\n//var esriParser = {\r\n// parse: function (text) {\r\n// var result = [];\r\n// var dom = (new DOMParser()).parseFromString(text, 'text/xml');\r\n// if (dom.documentElement.tagName === 'FeatureInfoResponse') {\r\n// var fiCollections = dom.documentElement.getElementsByTagName('FeatureInfoCollection');\r\n// for (var i = 0, len = fiCollections.length; i < len; i++) {\r\n// var fic = fiCollections[i];\r\n// var layerName = fic.getAttribute('layername');\r\n// var fInfos = fic.getElementsByTagName('FeatureInfo');\r\n// for (var j = 0, lenj = fInfos.length; j < lenj; j++) {\r\n// var fields = fInfos[j].getElementsByTagName('Field');\r\n// var attributes = {};\r\n// for (var k = 0, lenk = fields.length; k < lenk; k++) {\r\n// var field = fields[k];\r\n// attributes[getElementText(field.getElementsByTagName('FieldName')[0])] = getElementText(field.getElementsByTagName('FieldValue')[0]);\r\n// }\r\n// var feature = new ol.Feature(attributes);\r\n// feature.setId(layerName + '.' + TC.getUID());\r\n// result.push(feature);\r\n// }\r\n// }\r\n// }\r\n// return result;\r\n// }\r\n//};\r\n\r\nTC.layer.Raster = Raster;\r\nexport default Raster;\r\n\r\n/**\r\n * Opciones de capa raster. Este objeto se utiliza al [configurar un mapa]{@linkplain SITNA.MapOptions}, el [control del catálogo de capas]{@linkplain LayerCatalogOptions}\r\n * o como parámetro al [añadir una capa]{@linkplain SITNA.Map#addLayer}.\r\n * @typedef RasterOptions\r\n * @memberof SITNA.layer\r\n * @extends SITNA.layer.LayerOptions\r\n * @see SITNA.MapOptions\r\n * @see SITNA.control.LayerCatalogOptions\r\n * @see SITNA.Map#addLayer\r\n * @see SITNA.Map#setBaseLayer\r\n * @property {string} id - Identificador único de capa. No puede haber en un mapa dos capas con el mismo valor de `id`.\r\n * @property {string} layerNames - Lista separada por comas de los nombres de capa del servicio OGC.\r\n * @property {string} url - URL del servicio OGC que define la capa.\r\n * @property {string} [filter] - Filtro en formato GML o CQL. En función del formato especificado, se añade a las peticiones GetMap posteriores el parámetro filter o cql_filter correspondiente.\r\n *\r\n * No se pueden añadir al mapa 2 o más capas del mismo servicio (misma URL), en las cuales se establezcan filtros de tipo distinto. Es decir, no se pueden mezclar filtros CQL y GML en capas del mismo servicio.\r\n * @property {string} [format] - Tipo MIME del formato de archivo de imagen a obtener del servicio.\r\n *\r\n * Si esta propiedad no está definida, entonces si la capa es un mapa de fondo (consultar propiedad `isBase`), se asume que el formato es `image/jpeg`, en caso contrario se asume que el formato es `image/png`.\r\n *\r\n * Para asignar valor a esta propiedad se puede usar las constantes de definidas en [SITNA.Consts.mimeType]{@link SITNA.Consts}.\r\n * @property {boolean} [hideTree] - Aplicable a capas de tipo [WMS]{@link SITNA.Consts}.\r\n * Si se establece a `true`, la capa no muestra la jerarquía de grupos de capas en la tabla de contenidos ni en la leyenda.\r\n * @property {boolean} [isBase] - Si se establece a `true`, la capa es un mapa de fondo.\r\n * @property {boolean} [isDefault] - *__Obsoleta__: En lugar de esta propiedad es recomendable usar la propiedad `defaultBaseLayer`de {@link SITNA.MapOptions}.*\r\n *\r\n * Si se establece a true, la capa se muestra por defecto si forma parte de los mapas de fondo.\r\n * @property {string} [matrixSet] - Nombre de conjunto de matrices del servicio WMTS. \r\n * Esta propiedad es obligatoria para capas de tipo [WMTS]{@link SITNA.Consts}.\r\n * @property {LayerOptions|string} [overviewMapLayer] - Definición de la capa que se utilizará como fondo en el control de mapa de situación cuando esta capa está de fondo en el mapa principal.\r\n * @property {string} [thumbnail] - URL de una imagen en miniatura a mostrar en el selector de mapas de fondo.\r\n * @property {string} [title] - Título de capa. Este valor se mostrará en la tabla de contenidos y la leyenda.\r\n * @property {boolean} [transparent=true] - Indica si la capa tiene transparencia.\r\n * @property {string} [type] - Tipo de capa. Si no se especifica se considera que la capa es WMS. La lista de valores posibles está definida en [SITNA.Consts.layerType]{@link SITNA.Consts}.\r\n */\r\n\r\n/*\r\n * Opciones de nombre de capa.\r\n * @typedef LayerNameOptions\r\n * @property {boolean} [aggregate=true] - Siempre que sea posible se reemplaza en la lista {{#crossLink \"SITNA.layer.Raster/names:property\"}}{{/crossLink}} los nombres de capa por los nombres de las capas de grupo que las contienen.\r\n * @property {boolean} [lazy=false] - Determina si la capa nativa se actualiza en cuanto cambia la lista \r\n * {{#crossLink \"SITNA.layer.Raster/names:property\"}}{{/crossLink}} (valor `false`)\r\n * o se espera a que la capa se actualice (valor `true`).\r\n * @property {boolean} [reset] - Determina si la capa la propiedad TC.layer.Raster.{{#crossLink \"TC.layer.Raster/availableNames:property\"}}{{/crossLink}} (valor false) se restablece\r\n * al actualizar la propiedad {{#crossLink \"SITNA.layer.Raster/names:property\"}}{{/crossLink}}.\r\n */\r\n","export default new Blob([String.raw`\r\n/**\r\n * @author: Tobias Nickel\r\n * @created: 06.04.2015\r\n * I needed a small xmlparser chat can be used in a worker.\r\n */\r\n\r\n/**\r\n * parseXML / html into a DOM Object. with no validation and some failur tolerance\r\n * @params S {string} your XML to parse\r\n * @param options {object} all other options:\r\n * searchId {string} the id of a single element, that should be returned. using this will increase the speed rapidly\r\n * filter {function} filter method, as you know it from Array.filter. but is goes throw the DOM.\r\n * simplify {bool} to use tXml.simplify.\r\n */\r\n\r\n//importScripts('./loquesea.js');\r\n\r\nfunction tXml(S, options) {\r\n \"use strict\";\r\n options = options || {};\r\n\r\n var pos = 0;\r\n\r\n var openBracket = \"<\";\r\n var openBracketCC = \"<\".charCodeAt(0);\r\n var closeBracket = \">\";\r\n var closeBracketCC = \">\".charCodeAt(0);\r\n var minus = \"-\";\r\n var minusCC = \"-\".charCodeAt(0);\r\n var slash = \"/\";\r\n var slashCC = \"/\".charCodeAt(0);\r\n var exclamation = '!';\r\n var exclamationCC = '!'.charCodeAt(0);\r\n var singleQuote = \"'\";\r\n var singleQuoteCC = \"'\".charCodeAt(0);\r\n var doubleQuote = '\"';\r\n var doubleQuoteCC = '\"'.charCodeAt(0);\r\n var openSquareBracket = \"[\";\r\n var openSquareBracketCC = \"[\".charCodeAt(0);\r\n var closeSquareBracket = \"]\";\r\n var closeSquareBracketCC = \"]\".charCodeAt(0);\r\n\r\n /**\r\n * parsing a list of entries\r\n */\r\n\r\n function parseChildren() {\r\n var children = [];\r\n while (S[pos]) {\r\n if (S.charCodeAt(pos) == openBracketCC) {\r\n if (S.charCodeAt(pos + 1) === slashCC) {\r\n pos = S.indexOf(closeBracket, pos);\r\n return children;\r\n } else if (S.charCodeAt(pos + 1) === exclamationCC) {\r\n var char2 = S.charCodeAt(pos + 2);\r\n if (char2 == openSquareBracketCC) {\r\n // cdata support\r\n }\r\n else {\r\n if (char2 == minusCC) {\r\n //comment support\r\n while (pos !== -1 && !(S.charCodeAt(pos) === closeBracketCC && S.charCodeAt(pos - 1) == minusCC && S.charCodeAt(pos - 2) == minusCC && pos != -1)) {\r\n pos = S.indexOf(closeBracket, pos + 1);\r\n }\r\n if (pos === -1)\r\n pos = S.length\r\n } else {\r\n // doctypesupport\r\n pos += 2;\r\n while (S.charCodeAt(pos) !== closeBracketCC) {\r\n pos++;\r\n }\r\n }\r\n pos++;\r\n continue;\r\n }\r\n }\r\n var node = parseNode();\r\n children.push(node);\r\n } else {\r\n var text = parseText()\r\n if (text.trim().length > 0)\r\n children.push(text);\r\n }\r\n pos++;\r\n }\r\n return children;\r\n }\r\n\r\n /**\r\n * returns the text outside of texts until the first '<'\r\n */\r\n\r\n function parseText() {\r\n var start = pos;\r\n pos = S.indexOf(openBracket, pos) - 1;\r\n if (pos === -2)\r\n pos = S.length;\r\n return S.slice(start, pos + 1);\r\n }\r\n /**\r\n * returns text until the first nonAlphebetic letter\r\n */\r\n var nameSpacer = '\\n\\t>/= ';\r\n\r\n function parseName() {\r\n var start = pos;\r\n var c = S[pos];\r\n while (nameSpacer.indexOf(c) === -1) {\r\n c = S[++pos];\r\n // flacunza: Ignoramos los prefijos\r\n if (c === ':') {\r\n pos++;\r\n start = pos;\r\n }\r\n }\r\n return S.slice(start, pos);\r\n }\r\n /**\r\n * is parsing a node, including tagName, Attributes and its children,\r\n * to parse children it uses the parseChildren again, that makes the parsing recursive\r\n */\r\n var NoChildNodes = ['img', 'br', 'input', 'meta', 'link'];\r\n\r\n function parseNode() {\r\n var node = {};\r\n pos++;\r\n if (S.charCodeAt(pos) === exclamationCC && S.charCodeAt(pos + 1) === openSquareBracketCC) {\r\n // parse cdata\r\n var start = pos + 8;\r\n while (!(S.charCodeAt(pos) === closeBracketCC && S.charCodeAt(pos - 1) === closeSquareBracketCC && S.charCodeAt(pos - 2) === closeSquareBracketCC)) {\r\n pos++;\r\n }\r\n return S.slice(start, pos - 2);\r\n }\r\n\r\n node.tagName = parseName();\r\n\r\n // parsing attributes\r\n var attrFound = false;\r\n let name;\r\n while (S.charCodeAt(pos) !== closeBracketCC) {\r\n var c = S.charCodeAt(pos);\r\n if ((c > 64 && c < 91) || (c > 96 && c < 123)) {\r\n //if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(S[pos])!==-1 ){\r\n name = parseName();\r\n // search beginning of the string\r\n var code = S.charCodeAt(pos);\r\n while (code !== singleQuoteCC && code !== doubleQuoteCC && !((code > 64 && code < 91) || (code > 96 && code < 123)) && code !== closeBracketCC) {\r\n pos++;\r\n code = S.charCodeAt(pos);\r\n }\r\n if (!attrFound) {\r\n node.attributes = {};\r\n attrFound = true;\r\n }\r\n let value;\r\n if (code === singleQuoteCC || code === doubleQuoteCC) {\r\n value = parseString();\r\n } else {\r\n value = null;\r\n pos--;\r\n }\r\n node.attributes[name] = value;\r\n }\r\n pos++;\r\n\r\n }\r\n // optional parsing of children\r\n if (S.charCodeAt(pos - 1) !== slashCC) {\r\n if (node.tagName == \"script\") {\r\n var start = pos + 1;\r\n pos = S.indexOf('', pos);\r\n node.children = [S.slice(start, pos - 1)];\r\n pos += 8;\r\n } else if (node.tagName == \"style\") {\r\n var start = pos + 1;\r\n pos = S.indexOf('', pos);\r\n node.children = [S.slice(start, pos - 1)];\r\n pos += 7;\r\n } else if (NoChildNodes.indexOf(node.tagName) == -1) {\r\n pos++;\r\n node.children = parseChildren(name);\r\n }\r\n }\r\n return node;\r\n }\r\n\r\n /**\r\n * is parsing a string, that starts with a char and with the same usually ' or \"\r\n */\r\n\r\n function parseString() {\r\n var startChar = S[pos];\r\n var startpos = ++pos;\r\n pos = S.indexOf(startChar, startpos)\r\n return S.slice(startpos, pos);\r\n }\r\n\r\n /**\r\n *\r\n */\r\n\r\n function findElements() {\r\n var r = new RegExp('\\\\s' + options.attrName + '\\\\s*=[\\'\"]' + options.attrValue + '[\\'\"]').exec(S)\r\n if (r) {\r\n return r.index;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n var out = null;\r\n if (options.attrValue !== undefined) {\r\n options.attrName = options.attrName || 'id';\r\n var out = [];\r\n\r\n while ((pos = findElements()) !== -1) {\r\n pos = S.lastIndexOf('<', pos);\r\n if (pos !== -1) {\r\n out.push(parseNode());\r\n }\r\n S = S.substr(pos);\r\n pos = 0;\r\n }\r\n } else {\r\n out = parseChildren();\r\n }\r\n\r\n if (options.filter) {\r\n out = tXml.filter(out, options.filter);\r\n }\r\n\r\n if (options.simplify) {\r\n out = tXml.simplify(out);\r\n }\r\n return out;\r\n}\r\n/**\r\n * transform the DomObject to an object that is like the object of PHPs simplexmp_load_*() methods.\r\n * this format helps you to write that is more likely to keep your programm working, even if there a small changes in the XML schema.\r\n * be aware, that it is not possible to reproduce the original xml from a simplified version, because the order of elements is not saved.\r\n * therefore your programm will be more flexible and easyer to read.\r\n *\r\n * @param {array} the childrenList\r\n */\r\ntXml.simplify = function simplify(children) {\r\n var out = {};\r\n if (!children || !children.length) {\r\n return '';\r\n }\r\n\r\n if (children.length === 1 && typeof children[0] == 'string') {\r\n return children[0];\r\n }\r\n // map each object\r\n children.forEach(function (child) {\r\n if (typeof child !== 'object') {\r\n return;\r\n }\r\n if (!out[child.tagName])\r\n out[child.tagName] = [];\r\n var kids = tXml.simplify(child.children);\r\n out[child.tagName].push(kids);\r\n if (child.attributes) {\r\n kids._attributes = child.attributes;\r\n }\r\n });\r\n\r\n for (var i in out) {\r\n if (out[i].length == 1) {\r\n out[i] = out[i][0];\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\n/**\r\n * behaves the same way as Array.filter, if the filter method return true, the element is in the resultList\r\n * @params children{Array} the children of a node\r\n * @param f{function} the filter method\r\n */\r\ntXml.filter = function (children, f) {\r\n var out = [];\r\n children.forEach(function (child) {\r\n if (typeof (child) === 'object' && f(child)) out.push(child);\r\n if (child.children) {\r\n var kids = tXml.filter(child.children, f);\r\n out = out.concat(kids);\r\n }\r\n });\r\n return out;\r\n};\r\n\r\n/**\r\n * stringify a previously parsed string object.\r\n * this is useful,\r\n * 1. to remove whitespaces\r\n * 2. to recreate xml data, with some changed data.\r\n * @param O{tXMLDomObject} the object to Stringify\r\n */\r\ntXml.stringify = function TOMObjToXML(O) {\r\n var out = '';\r\n\r\n function writeChildren(O) {\r\n if (O)\r\n for (var i = 0; i < O.length; i++) {\r\n if (typeof O[i] == 'string') {\r\n out += O[i].trim();\r\n } else {\r\n writeNode(O[i]);\r\n }\r\n }\r\n }\r\n\r\n function writeNode(N) {\r\n out += \"<\" + N.tagName;\r\n for (var i in N.attributes) {\r\n if (N.attributes[i] === null) {\r\n out += ' ' + i;\r\n } else if (N.attributes[i].indexOf('\"') === -1) {\r\n out += ' ' + i + '=\"' + N.attributes[i].trim() + '\"';\r\n } else {\r\n out += ' ' + i + \"='\" + N.attributes[i].trim() + \"'\";\r\n }\r\n }\r\n out += '>';\r\n writeChildren(N.children);\r\n out += '';\r\n }\r\n writeChildren(O);\r\n\r\n return out;\r\n};\r\n\r\n\r\n/**\r\n * use this method to read the textcontent, of some node.\r\n * It is great if you have mixed content like:\r\n * this text has some big text and a link\r\n */\r\ntXml.toContentString = function (tDom) {\r\n if (Array.isArray(tDom)) {\r\n var out = '';\r\n tDom.forEach(function (e) {\r\n out += ' ' + tXml.toContentString(e);\r\n out = out.trim();\r\n });\r\n return out;\r\n } else if (typeof tDom === 'object') {\r\n return tXml.toContentString(tDom.children)\r\n } else {\r\n return ' ' + tDom;\r\n }\r\n};\r\n\r\ntXml.getElementById = function (S, id, simplified) {\r\n var out = tXml(S, {\r\n attrValue: id,\r\n simplify: simplified\r\n });\r\n return simplified ? out : out[0];\r\n};\r\n/**\r\n * A fast parsing method, that not realy finds by classname,\r\n * more: the class attribute contains XXX\r\n * @param\r\n */\r\ntXml.getElementsByClassName = function (S, classname, simplified) {\r\n return tXml(S, {\r\n attrName: 'class',\r\n attrValue: '[a-zA-Z0-9\\-\\s ]*' + classname + '[a-zA-Z0-9\\-\\s ]*',\r\n simplify: simplified\r\n });\r\n};\r\n\r\nif ('object' === typeof module) {\r\n module.exports = tXml;\r\n}\r\n\r\n//console.clear();\r\n//console.log('here:',tXml.getElementById('dadavalue','test'));\r\n//console.log('here:',tXml.getElementsByClassName('dadavalue','test'));\r\n\r\n/*\r\nconsole.clear();\r\ntXml(d,'content');\r\n //some testCode\r\nvar s = document.body.innerHTML.toLowerCase();\r\nvar start = new Date().getTime();\r\nvar o = tXml(s,'content');\r\nvar end = new Date().getTime();\r\n//console.log(JSON.stringify(o,undefined,'\\t'));\r\nconsole.log(\"MILLISECONDS\",end-start);\r\nvar nodeCount=document.querySelectorAll('*').length;\r\nconsole.log('node count',nodeCount);\r\nconsole.log(\"speed:\",(1000/(end-start))*nodeCount,'Nodes / second')\r\n//console.log(JSON.stringify(tXml('testPage

TestPage

this is a testpage

'),undefined,'\\t'));\r\nvar p = new DOMParser();\r\nvar s2=''+s+''\r\nvar start2= new Date().getTime();\r\nvar o2 = p.parseFromString(s2,'text/html').querySelector('#content')\r\nvar end2=new Date().getTime();\r\nconsole.log(\"MILLISECONDS\",end2-start2);\r\n// */\r\n\r\n\r\n(function () {\r\n\r\n var simplify = function simplify(children, attributes) {\r\n var out = {};\r\n if ((!children || !children.length) && !attributes) {\r\n return '';\r\n }\r\n children = children || [];\r\n\r\n if (children.length === 1 && typeof children[0] == 'string') {\r\n return children[0];\r\n }\r\n // map each object\r\n children.forEach(function (child) {\r\n if (typeof child !== 'object') {\r\n return;\r\n }\r\n var prefixIdx = child.tagName.indexOf('ows:');\r\n var tagName = prefixIdx < 0 ? child.tagName : child.tagName.substr(prefixIdx + 4);\r\n if (!out[tagName])\r\n out[tagName] = [];\r\n var kids = simplify(child.children, child.attributes);\r\n out[tagName].push(kids);\r\n if (child.attributes) {\r\n for (var key in child.attributes) {\r\n kids[key] = child.attributes[key];\r\n }\r\n }\r\n });\r\n\r\n for (var i in out) {\r\n if (out[i].length == 1) {\r\n out[i] = out[i][0];\r\n }\r\n }\r\n\r\n return out;\r\n };\r\n const removePreffix = function (str) {\r\n return str.substring(str.indexOf(\":\") + 1);\r\n }\r\n const copySchema = function (schema1, schema2) {\r\n for (var key in schema2.attributes) {\r\n schema1.attributes[key] = schema2.attributes[key];\r\n }\r\n schema1.children = schema1.children.concat(schema2.children.filter(function (e) { return e.tagName === \"element\" || e.tagName === \"complexType\" || e.tagName === \"import\" }));\r\n }\r\n const findByTagName = function (node, tagName) {\r\n if (node.tagName === tagName)\r\n return [node];\r\n else if (node.children) {\r\n const nodes = node.children.filter(function (node) { return node.tagName === tagName })\r\n if (nodes.length > 0) return nodes;\r\n else\r\n return node.children.reduce(function (vi, va) {\r\n return vi.concat(findByTagName(va, tagName));\r\n }, [])\r\n }\r\n return [];\r\n }\r\n const proccessIncludes = async function (schema, url) {\r\n var include = schema.children.filter(function (node) { return node.tagName === \"include\" })\r\n if (include.length > 0) {\r\n for (var i = 0; i < include.length; i++) {\r\n var _url = include[i].attributes.schemaLocation;\r\n _url = _url.startsWith(\"http\") ? _url : url.substring(0, url.lastIndexOf(\"/\") + 1) + _url;\r\n if (IncludesUsed.indexOf(_url) >= 0) continue;\r\n var schema2;\r\n try {\r\n schema2 = await proxifyUrl(_url);\r\n } catch (err) {\r\n return schema\r\n }\r\n copySchema(schema, schema2);\r\n IncludesUsed.push(_url);\r\n proccessIncludes(schema, _url);\r\n return schema;\r\n }\r\n }\r\n return schema;\r\n }\r\n const searchHierarchyTypes = async function (schema, type, urlBegin) {\r\n let IncludesUsed = [];\r\n const prom = new Promise(async function (resolve) {\r\n const getRecursive = async function (schema, type, url) {\r\n var temp = schema.children.find(function (node) { return node.tagName === \"complexType\" && node.attributes.name === removePreffix(type) });\r\n if (!temp) {\r\n IncludesUsed.push(url);\r\n var include = schema.children.filter(function (node) { return node.tagName === \"include\" });\r\n if (include.length > 0) {\r\n for (var i = 0; i < include.length; i++) {\r\n var _url = include[i].attributes.schemaLocation;\r\n _url = _url.startsWith(\"http\") ? _url : url.substring(0, url.lastIndexOf(\"/\") + 1) + _url;\r\n if (IncludesUsed.indexOf(_url) >= 0) continue;\r\n var schema;\r\n try {\r\n schema = await proxifyUrl(_url);\r\n } catch (err) {\r\n console.log(err)\r\n throw err;\r\n }\r\n await getRecursive({ ...schema }, type, _url);\r\n }\r\n }\r\n }\r\n else {\r\n var subType = null;\r\n var extension = findByTagName(temp, \"extension\")[0];\r\n var subelement = findByTagName(temp, \"element\")[0]\r\n if (extension && extension.attributes.base)\r\n subType = extension.attributes.base;\r\n if (subelement && subelement.attributes.ref)\r\n subType = subelement.attributes.ref;\r\n if (subType) {\r\n if (subType.indexOf(\":\") > 0) {\r\n IncludesUsed = [];\r\n temp = await getRecursive({ ...schema }, subType, urlBegin);\r\n }\r\n else\r\n resolve(subType);\r\n }\r\n else {\r\n resolve(temp)\r\n }\r\n\r\n }\r\n }\r\n await getRecursive({ ...schema }, type, urlBegin);\r\n resolve(null);\r\n });\r\n\r\n return await prom;\r\n }\r\n\r\n const getExternalType = async function (schema, type, depth) {\r\n //miro si ya está en la colección\r\n if (collection[type])\r\n return collection[type];\r\n //miro si está en el schema actual\r\n else if (schema.children && schema.children.filter(function (node) { return node.tagName === \"element\" && node.attributes.name === removePreffix(type) }).length > 0) {\r\n if (type.endsWith(\"Type\"))\r\n collection[type] = await processType(schema, type, ++depth);\r\n else\r\n collection[type] = await processElement(schema, type, ++depth);\r\n return collection[type];\r\n }\r\n else {\r\n //miro si tiene prefijo y busco un import para ese prefijo\r\n if (type.indexOf(\":\") > 0) {\r\n const preffix = type.substring(0, type.indexOf(\":\"));\r\n const schemaLocation = schema.children.find(function (_import) { return _import.tagName === \"import\" && _import.attributes.namespace === schema.attributes[preffix]; }).attributes.schemaLocation;\r\n var schema2 = await proxifyUrl(schemaLocation.startsWith(\"http\") ? schemaLocation : self.location.origin + \"/\" + schemaLocation);\r\n IncludesUsed.push(schemaLocation);\r\n copySchema(schema, schema2);\r\n if (type.endsWith(\"Type\")) {\r\n let ret = null;\r\n if (findByTagName(type, \"element\").length === 1 && findByTagName(type, \"element\")[0].attributes.ref)\r\n ret = await processElement(schema, findByTagName(type, \"element\")[0].attributes.ref, ++depth);\r\n else\r\n ret = await processType(schema, type, ++depth);\r\n if (!ret || Object.keys(ret).length === 0)\r\n ret = await searchHierarchyTypes(schema2, type, schemaLocation);\r\n collection[type] = ret;\r\n return ret;\r\n }\r\n else {\r\n collection[type] = await processElement(schema, type, ++depth);\r\n return collection[type];\r\n }\r\n }\r\n return type;\r\n }\r\n\r\n }\r\n\r\n const geometryTypes = [\r\n \"gml:PointPropertyType\",\r\n \"gml:MultiPointPropertyType\",\r\n \"gml:LineStringPropertyType\",\r\n \"gml:MultiLineStringPropertyType\",\r\n \"gml:LinearRingPropertyType\",\r\n \"gml:PolygonPropertyType\",\r\n \"gml:MultiPolygonPropertyType\",\r\n \"gml:MultiSurfacePropertyType\",\r\n \"gml:GeometryPropertyType\",\r\n \"gml:GeometryCollectionPropertyType\",\r\n \"gml:GeometryAssociationType\",\r\n \"gml:MultiCurvePropertyType\",\r\n \"gml:CurvePropertyType\",\r\n \"gml:BoxPropertyType\"\r\n ]\r\n\r\n const requestCache = {};\r\n const functionsCallback = {};\r\n\r\n const proxifyUrl = async function (url) {\r\n if (requestCache[url]) {\r\n if (!(requestCache[url] instanceof Promise))\r\n return requestCache[url];\r\n else {\r\n return await requestCache[url];\r\n }\r\n }\r\n requestCache[url] = new Promise(function (resolve) {\r\n functionsCallback[url] = resolve;\r\n });\r\n self.postMessage(url);\r\n return await requestCache[url];\r\n }\r\n const getComplexType = function (schema, element) {\r\n var complexType;\r\n if (!element.children && element.attributes.type) {\r\n var type = element.attributes.type;\r\n complexType = schema.children.filter(function (node) { return node.tagName === \"complexType\" && node.attributes.name === removePreffix(type) });\r\n }\r\n else if (element.children && element.attributes.type) {\r\n var type = element.attributes.type;\r\n complexType = schema.children.filter(function (node) { return node.tagName === \"complexType\" && node.attributes.name === removePreffix(type) });\r\n }\r\n if (complexType.length > 0) {\r\n return complexType = complexType[0];\r\n }\r\n return null;\r\n }\r\n const processElement = async function (schema, element, depth, preffix) {\r\n if (depth === MAX_DEPTH) return null;\r\n //busco los includes\r\n schema = await proccessIncludes(schema);\r\n //busco los elements con el nombre de la capa en cuestión\r\n var currentElement = schema.children.filter(function (node) { return node.tagName === \"element\" && node.attributes.name === removePreffix(element) });\r\n\r\n if (currentElement.length > 0) {\r\n //si tiene un tipo compuesto lo busco\t\t\t\t\r\n var complexType = getComplexType(schema, currentElement[0])\r\n collection[element] = await processType(schema, complexType, depth, preffix);\r\n return collection[element];\r\n }\r\n else {\r\n collection[element] = null;\r\n return null;\r\n }\r\n }\r\n const processType = async function (schema, complexType, depth, preffix) {\r\n\r\n if (!(complexType instanceof Object))\r\n complexType = schema.children.find(function (item) { return item.tagName === \"complexType\" && item.attributes.name === removePreffix(complexType) })\r\n if (!complexType) return null;\r\n //Recorro recursivamente buscando nodos element debajo del nodo complexType\r\n const elements = findByTagName(complexType, \"element\");\r\n var objFeature = {};\r\n //recorro los nodos element que son los atributos de la feature\r\n for (var j = 0; j < elements.length; j++) {\r\n let element = elements[j];\r\n let type = element.attributes.type;\r\n if (!element.attributes.name && element.attributes.ref) {\r\n let aux = {}, preffix = element.attributes.ref.substring(0, element.attributes.ref.indexOf(\":\"));\r\n aux[removePreffix(element.attributes.ref)] = { \"type\": await processElement(schema, element.attributes.ref, ++depth, preffix), \"name\": element.attributes.ref };\r\n return aux;\r\n }\r\n const nodeName = removePreffix(element.attributes.name);\r\n //declaro un objeto cuyo key es el nombre de la entidad y sus hijos los atributos\r\n let current = objFeature[nodeName] = {};\r\n\r\n //cada atributo será un objeto cuyo key será el nombre del atributo y dentro un objeto infromación de cada atribut como tipo si es nullable etc \r\n for (var i in element.attributes) {\r\n switch (i) {\r\n case \"minOccurs\":\r\n case \"maxOccurs\":\r\n current[i] = parseInt(element.attributes[i], 10);\r\n if (isNaN(current[element.attributes[i]]))\r\n current[i] = element.attributes[i];\r\n break;\r\n case \"nillable\":\r\n current[i] = element.attributes[i] === \"true\" ? true : false;\r\n break;\r\n default:\r\n current[i] = (preffix ? preffix + \":\" : \"\") + element.attributes[i];\r\n break;\r\n }\r\n }\r\n if (geometryTypes.includes(type)) { continue; }//no procesamos las geometrías\r\n if (type) {\r\n current.type = type;\r\n if (type.startsWith(\"xsd\"))\r\n type = removePreffix(type);\r\n if (type === \"gml:ReferenceType\") {\r\n var targetElement = findByTagName(element, \"targetElement\");\r\n if (targetElement.length > 0 && targetElement[0].children.length > 0) {\r\n current.type = await getExternalType(schema, targetElement[0].children[0], depth);\r\n }\r\n }\r\n else if (type.indexOf(\":\") > 0) {\r\n complexType = schema.children.find(function (node) { return (node.tagName === \"complexType\" || node.tagName === \"element\") && node.attributes.name === removePreffix(type) })\r\n if (!complexType) {\r\n current.type = await getExternalType(schema, type, depth);\r\n }\r\n else {\r\n if (complexType.tagName === \"complexType\") {\r\n current.type = await processType(schema, complexType, depth);\r\n }\r\n else {\r\n current.type = null;//Esto no se había dado hasta ahora;\r\n }\r\n }\r\n\r\n }\r\n }\r\n else {\r\n //si el atributo es un dato complejo\r\n var attrComplex = element.children.find((a) => a.tagName === \"complexType\");\r\n var extension = findByTagName(attrComplex, \"extension\")[0];\r\n var subelement = findByTagName(attrComplex, \"element\")[0]\r\n if (extension && extension.attributes.base) {\r\n if (extension.attributes.base.indexOf(\":\") < 0) {\r\n current.type = extension.attributes.base;\r\n }\r\n else {\r\n current.type = await getExternalType(schema, extension.attributes.base);\r\n }\r\n }\r\n if (subelement && subelement.attributes.ref) {\r\n current.type = await getExternalType(schema, subelement.attributes.ref);\r\n }\r\n }\r\n }\r\n return objFeature;\r\n }\r\n\r\n const processDFT = async function (json, layerName, preffix) {\r\n //coger nodo esquema\r\n var schema = json.find(function (node) { return node.tagName === \"schema\" });\r\n return new Promise(async function (resolve) {\r\n await processElement(schema, layerName, 0);\r\n resolve();\r\n });\r\n }\r\n var collection = {};\r\n var IncludesUsed = [];\r\n var MAX_DEPTH = 5;\r\n\r\n onmessage = async function (e) {\r\n if (e.data.xml) {\r\n var json = tXml(e.data.xml);\r\n\r\n const arrTypes = (e.data.layerName instanceof Array ? e.data.layerName : e.data.layerName.split(\",\"));\r\n let result;\r\n try {\r\n for (var i = 0; i < arrTypes.length; i++) {\r\n await processDFT(json, arrTypes[i]);\r\n }\r\n result = true;\r\n }\r\n catch (error) {\r\n result = false;\r\n }\r\n postMessage({\r\n state: result ? 'success' : 'error',\r\n DFTCollection: (e.data.layerName instanceof Array ? e.data.layerName : e.data.layerName.split(\",\")).reduce(function (vi, va) {\r\n let temp = {};\r\n temp[va] = (collection[va] || collection[va.replace(/^\\w{1,}:/, function (a) { return (a.toLowerCase()) })]);\r\n return Object.assign(vi, temp);\r\n }, {})\r\n });\r\n }\r\n else {\r\n functionsCallback[e.data.url](tXml(e.data.response)[0]);\r\n delete functionsCallback[e.data.url];\r\n }\r\n\r\n };\r\n\r\n})();\r\n`], { type: \"text/javascript; charset=utf-8\" });","import TC from '../../TC';\r\nimport Cfg from '../../TC/Cfg';\r\nimport Util from '../../TC/Util';\r\nimport Consts from '../../TC/Consts';\r\nimport Layer from './Layer';\r\nimport Feature from '../feature/Feature';\r\nimport Point from '../feature/Point';\r\nimport Marker from '../feature/Marker';\r\nimport Polyline from '../feature/Polyline';\r\nimport Polygon from '../feature/Polygon';\r\nimport MultiPoint from '../feature/MultiPoint';\r\nimport MultiMarker from '../feature/MultiMarker';\r\nimport MultiPolyline from '../feature/MultiPolyline';\r\nimport MultiPolygon from '../feature/MultiPolygon';\r\nimport Circle from '../feature/Circle';\r\nimport wwBlob from '../../workers/tc-dft-web-worker-blob.mjs';\r\n\r\nTC.Layer = Layer;\r\nTC.Util = Util;\r\nTC.layer = TC.layer || {};\r\nconst featureNamespace = {};\r\nfeatureNamespace.Point = Point;\r\nfeatureNamespace.Marker = Marker;\r\nfeatureNamespace.Polyline = Polyline;\r\nfeatureNamespace.Polygon = Polygon;\r\nfeatureNamespace.MultiPoint = MultiPoint;\r\nfeatureNamespace.MultiMarker = MultiMarker;\r\nfeatureNamespace.MultiPolyline = MultiPolyline;\r\nfeatureNamespace.MultiPolygon = MultiPolygon;\r\nfeatureNamespace.Circle = Circle;\r\n\r\nconst capabilitiesPromises = {};\r\nconst visibilityCache = new Map();\r\n\r\n\r\nconst getMergedLegendImage = function (images) {\r\n let offset = 0;\r\n const margin = 2;\r\n const svgs = images\r\n .map(str => str.replace('data:image/svg+xml,', ''))\r\n .map(str => decodeURIComponent(str));\r\n const widths = svgs.map(str => parseFloat(str.match(/ width=\"([\\d\\.]*)\"/)[1]));\r\n const heights = svgs.map(str => parseFloat(str.match(/ height=\"([\\d\\.]*)\"/)[1]));\r\n const width = widths.reduce((acc, cur) => acc + cur + margin, 0);\r\n const height = Math.max.apply(Math, heights);\r\n const offsetSvgs = svgs\r\n .map((str, idx) => {\r\n const result = str.replace('${offsetSvgs.join('')}`);\r\n};\r\n\r\n//URI esta función compara los estilos de las features extrayendo la parte comun para sacarla a los estilos de capa\r\nconst compareStyles = function (objTo, objFrom, distinct = true) {\r\n const fnCompare = function (value1, value2, mode) {\r\n return mode ? value1 !== value2 : value1 === value2;\r\n };\r\n for (let key in objFrom) {\r\n //si es un array o un objeto\r\n const objFromValue = objFrom[key];\r\n if (Array.isArray(objFromValue)) {\r\n let toStyle = objTo[key];\r\n if (toStyle) {\r\n toStyle = Array.isArray(toStyle) ? toStyle : [toStyle];\r\n }\r\n else {\r\n toStyle = [];\r\n }\r\n if (Object.prototype.hasOwnProperty.call(objTo, key) && fnCompare(objFromValue.join(), toStyle.join(), distinct)) {\r\n delete objTo[key];\r\n }\r\n }\r\n else if (typeof objFromValue === 'object') {\r\n objTo[key] = compareStyles(objTo[key], objFromValue);\r\n }\r\n else {\r\n if (Object.prototype.hasOwnProperty.call(objTo, key) && fnCompare(objFromValue, objTo[key], distinct)) {\r\n delete objTo[key];\r\n }\r\n }\r\n }\r\n return objTo;\r\n};\r\n\r\n/**\r\n * Capa con entidades geográficas vectoriales.\r\n * @class Vector\r\n * @memberof SITNA.layer\r\n * @extends SITNA.layer.Layer\r\n * @param {SITNA.layer.VectorOptions} [options] Objeto de opciones de configuración de la capa.\r\n * @see SITNA.Map#getLayer\r\n */\r\nclass Vector extends Layer {\r\n\r\n /**\r\n * Lista de entidades geográficas que hay en la capa.\r\n * @member features\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @type Array.\r\n */\r\n features = [];\r\n\r\n selectedFeatures = [];\r\n\r\n //esta promise se resolverá cuando el capabilities esté descargado y parseado\r\n //se utiliza para saber cuándo está listo el capabilities en los casos en los que se instancia el layer pero no se añade al mapa\r\n //porque la forma habitual de detectar esto es por los eventos del mapa (que en esos casos no saltarán)\r\n #capabilitiesPromise = null;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n self.type = self.options.type || Consts.layerType.VECTOR;\r\n self.featureType = self.options.featureType;\r\n\r\n const getFileExtension = function (url) {\r\n url = url || '';\r\n var idx = url.indexOf('?');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n else {\r\n idx = url.indexOf('#');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n }\r\n return url.substr(url.lastIndexOf('.')).toLowerCase();\r\n };\r\n\r\n const getFormatFromMimeType = function (mimeType) {\r\n switch (mimeType) {\r\n case Consts.mimeType.KML:\r\n return Consts.format.KML;\r\n case Consts.mimeType.GPX:\r\n return Consts.format.GPX;\r\n case Consts.mimeType.JSON:\r\n case Consts.mimeType.GEOJSON:\r\n return Consts.format.GEOJSON;\r\n case Consts.mimeType.GML:\r\n return Consts.format.GML;\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const extension = getFileExtension(self.url);\r\n const format = getFormatFromMimeType(self.format) || TC.Util.getFormatFromFileExtension(extension);\r\n if (format || self.type === Consts.layerType.KML) {\r\n if (format === Consts.format.KML) {\r\n self.type = Consts.layerType.KML;\r\n }\r\n\r\n var getFileName = function (url) {\r\n url = url || '';\r\n var result = url;\r\n var regexp = new RegExp('([\\\\w|\\\\-|\\\\.]+\\\\' + extension + ')', 'i');\r\n for (var i = 0; i < 3; i++) {\r\n url = decodeURIComponent(url);\r\n var match = regexp.exec(url);\r\n if (match.length > 1) {\r\n result = match[1];\r\n break;\r\n }\r\n\r\n }\r\n return result;\r\n };\r\n self.title = self.options.title || getFileName(self.url);\r\n }\r\n\r\n self.wrap = new TC.wrap.layer.Vector(self);\r\n\r\n self.wrap._promise = new Promise((resolve, _reject) => {\r\n var ollyr = null;\r\n ollyr = self.wrap.createVectorLayer();\r\n self.wrap.setLayer(ollyr);\r\n resolve(ollyr);\r\n });//Promise.resolve(ollyr);\r\n }\r\n\r\n getTree() {\r\n const self = this;\r\n if (self.tree) return self.tree;\r\n let result = null;\r\n if (!self.options.stealth) {\r\n result = {\r\n children: []\r\n };\r\n const nodes = new Set();\r\n self.features.forEach(f => {\r\n const path = f.getPath();\r\n if (path.length) {\r\n const node = TC.Util.addArrayToTree(path, result);\r\n if (!nodes.has(node)) {\r\n nodes.add(node);\r\n if (f.getVisibilityState() === Consts.visibility.NOT_VISIBLE) {\r\n if (!Object.prototype.hasOwnProperty.call(node, \"visibilityState\")) {\r\n node.visibilityState = Consts.visibility.NOT_VISIBLE;\r\n }\r\n }\r\n else {\r\n node.visibilityState = Consts.visibility.VISIBLE;\r\n }\r\n\r\n node.legend = [];\r\n }\r\n const featureLegend = f.getLegend();\r\n let nodeLegend = node.legend.find(f => f.src === featureLegend.src);\r\n if (!nodeLegend) {\r\n nodeLegend = Object.assign({}, featureLegend);\r\n nodeLegend.features = [];\r\n node.legend.push(nodeLegend);\r\n }\r\n nodeLegend.features.push(f);\r\n }\r\n });\r\n\r\n // Repasamos los nodos por si hay que hacerles una leyenda temática\r\n nodes.forEach(function createMultiLegend(node) {\r\n if (node.legend.length > 1) {\r\n // Hay varios símbolos para la carpeta, hay que confeccionar la leyenda\r\n const commonPropertiesByLegendWatch = [];\r\n // Averiguamos qué propiedades tienen valor común en cada grupo\r\n node.legend.forEach(function getFolderCommonPropertyValues(l) {\r\n const commonProperties = l.features\r\n .map(f => f.getData())\r\n .reduce(function getFeatureCommonPropertyValues(properties, data) {\r\n for (var key in properties) {\r\n const property = data[key];\r\n if (property && Object.prototype.hasOwnProperty.call(property, 'value')) {\r\n if (property.value !== properties[key].value) {\r\n delete properties[key];\r\n }\r\n }\r\n else {\r\n if (property !== properties[key]) {\r\n delete properties[key];\r\n }\r\n }\r\n }\r\n return properties;\r\n }, Object.assign({}, l.features[0].getData()));\r\n // Las propiedades pueden ser complejas, teniendo propiedades value y displayName\r\n // En ese caso aplanamos\r\n const commonPropertiesObj = {};\r\n for (var key in commonProperties) {\r\n const value = commonProperties[key];\r\n commonPropertiesObj[value?.displayName || key] = value?.value || value;\r\n }\r\n commonPropertiesByLegendWatch.push(commonPropertiesObj);\r\n });\r\n // Averiguamos qué propiedades comunes dentro de grupo son distintas entre grupos\r\n const keys = Object.keys(commonPropertiesByLegendWatch[0]);\r\n const distinctKeys = [];\r\n keys.forEach(function fillDistinctKeysArray(key) {\r\n const values = commonPropertiesByLegendWatch.map(props => props[key]);\r\n const hasDuplicates = new Set(values).size < values.length;\r\n if (!hasDuplicates) {\r\n distinctKeys.push(key);\r\n }\r\n });\r\n // Completamos los textos para cada símbolo de la leyenda\r\n const distinctKey = distinctKeys[0];\r\n if (distinctKey) {\r\n node.legendTitle = distinctKey;\r\n node.legend.forEach(function addTexts(l, idx) {\r\n l.value = commonPropertiesByLegendWatch[idx][distinctKey];\r\n });\r\n }\r\n }\r\n });\r\n\r\n if (self.styles || self.cluster) {\r\n const legendImages = [];\r\n if (self.cluster) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(\r\n TC.Util.extend({}, self.cluster.styles?.point, { radius: Cfg.styles.point.radius + 2, offset: [0, 6] }),\r\n { geometryType: Consts.geom.POINT }\r\n ));\r\n }\r\n if (self.styles?.point) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.point, { geometryType: Consts.geom.POINT }));\r\n }\r\n if (self.styles?.line) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.line, { geometryType: Consts.geom.POLYLINE }));\r\n }\r\n if (self.styles?.polygon) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.polygon, { geometryType: Consts.geom.POLYGON }));\r\n }\r\n result.legend = {\r\n src: getMergedLegendImage(legendImages)\r\n };\r\n }\r\n result.name = self.name || result.name;\r\n result.customLegend = self.options.customLegend; //Atributo para pasar una plantilla HTML diferente a la por defecto (LegendNode.html)\r\n result.title = self.title || result.title;\r\n result.uid = self.id;\r\n }\r\n self.tree = result\r\n return result;\r\n }\r\n\r\n async #addFeatureInternal(multipleFeatureFunction, coord, options) {\r\n const self = this;\r\n const features = await multipleFeatureFunction.call(self, [coord], options);\r\n if (self.map) {\r\n self.map.trigger(Consts.event.FEATUREADD, { layer: self, feature: features[0] });\r\n }\r\n return features[0];\r\n }\r\n\r\n async #addFeaturesInternal(coordsArray, constructorName, styleType, options) {\r\n const self = this;\r\n let FeatureConstructor;\r\n if (constructorName) {\r\n FeatureConstructor = featureNamespace[constructorName];\r\n }\r\n else {\r\n FeatureConstructor = Feature;\r\n }\r\n var features = new Array(coordsArray.length);\r\n var nativeFeatures = [];\r\n for (var i = 0, len = coordsArray.length; i < len; i++) {\r\n const opts = TC.Util.extend(true, {}, options);\r\n let coords = coordsArray[i];\r\n let feature;\r\n const isNative = TC.wrap.Feature.prototype.isNative(coords);\r\n if (coords instanceof FeatureConstructor) {\r\n feature = coords;\r\n }\r\n else {\r\n if (isNative) {\r\n feature = coords._wrap && coords._wrap.parent;\r\n }\r\n if (!feature) {\r\n opts.layer = self;\r\n const layerStyle = self.styles && self.styles[styleType];\r\n if (Util.hasStyleOptions(opts) || !layerStyle) {\r\n // Si las opciones tienen estilos, o la capa no los tiene, creamos un objeto de estilos para la feature\r\n const externalStyles = Object.assign({}, Cfg.styles, self.map ? self.map.options.styles : null);\r\n Object.assign(opts, externalStyles[styleType], layerStyle, options);\r\n }\r\n feature = new FeatureConstructor(coords, opts);\r\n }\r\n }\r\n feature.layer = self;\r\n features[i] = feature;\r\n self.features.push(feature);\r\n if (!isNative) {\r\n nativeFeatures.push(feature.wrap.feature);\r\n }\r\n if (feature.options.showPopup) {\r\n feature.showInfo();\r\n }\r\n // Este evento mata el rendimiento\r\n //self.map.trigger(Consts.event.FEATUREADD, { layer: self, feature: marker });\r\n }\r\n if (nativeFeatures.length) {\r\n self.wrap.addFeatures(nativeFeatures);\r\n }\r\n return features;\r\n }\r\n\r\n /**\r\n * Añade un punto a la capa.\r\n * @method addPoint\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {number[]|SITNA.feature.Point} coordsOrPoint - Si es un array, contiene dos números (la coordenada del punto).\r\n * @param {SITNA.feature.PointOptions} [options] - Este parámetro se ignora si `coordsOrPoint` es una instancia de {@link SITNA.feature.Point}.\r\n * @returns {Promise} Punto añadido.\r\n * @see [Ejemplo de uso](../examples/feature.Point.html)\r\n */\r\n addPoint(coordsOrPoint, options) {\r\n return this.#addFeatureInternal(this.addPoints, coordsOrPoint, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de puntos a la capa.\r\n * @method addPoints\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|Array.} coordsOrPoints - Los elementos de esta lista son cualquiera de los que acepta el método [addPoint]{@link SITNA.layer.Vector#addPoint}.\r\n * @param {SITNA.feature.PointOptions} [options] - Este parámetro se ignora si `coordsOrPointArray` contiene instancias de {@link SITNA.feature.Point}.\r\n * @returns {Promise} Array de puntos.\r\n * @see [Ejemplo de uso](../examples/feature.Point.html)\r\n */\r\n addPoints(coordsOrPointArray, options) {\r\n return this.#addFeaturesInternal(coordsOrPointArray, 'Point', Consts.geom.POINT, options);\r\n }\r\n\r\n /**\r\n * Añade una entidad de varios puntos a la capa.\r\n * @method addMultiPoint\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.MultiPoint} coordsOrMultiPoint - Array con las coordenadas de los puntos en el CRS del mapa\r\n * u objeto {@link SITNA.feature.MultiPoint}.\r\n * @param {SITNA.feature.PointOptions} [options]\r\n * @returns {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.MultiPoint.html)\r\n */\r\n addMultiPoint(coordsOrMultiPoint, options) {\r\n return this.#addFeatureInternal(this.addMultiPoints, coordsOrMultiPoint, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades de varios puntos a la capa.\r\n * @method addMultiPoints\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.MultiPoint>} coordsOrMultiPoint - Array cuyos elementos son objetos {@link SITNA.feature.MultiPoint}\r\n * o sus coordenadas en el CRS del mapa.\r\n * @param {SITNA.feature.PointOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n */\r\n addMultiPoints = function (coordsOrMultiPointArray, options) {\r\n return this.#addFeaturesInternal(coordsOrMultiPointArray, 'MultiPoint', \"point\", options);\r\n }\r\n\r\n /**\r\n * Añade un marcador a la capa.\r\n * @method addMarker\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.Marker} coordsOrMarker - Las coordenadas del marcador en el CRS del mapa\r\n * o un objeto {@link SITNA.feature.Marker}.\r\n * @param {SITNA.feature.MarkerOptions} [options]\r\n * @return {Promise} Marcador añadido.\r\n * @see [Ejemplo de uso](../examples/feature.Marker.html)\r\n */\r\n addMarker(coord, options) {\r\n return this.#addFeatureInternal(this.addMarkers, coord, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de de marcadores a la capa.\r\n * @method addMarkers\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.Marker>} coordsOrMarkers - Los elementos de esta lista \r\n * son cualquiera de los que acepta el método [addMarker]{@link SITNA.layer.Vector#addMarker}.\r\n * @param {SITNA.feature.MarkerOptions} [options]\r\n * @return {Promise} Array de marcadores añadidos.\r\n */\r\n addMarkers(coordsOrMarkerArray, options) {\r\n return this.#addFeaturesInternal(coordsOrMarkerArray, 'Marker', 'marker', options);\r\n }\r\n\r\n /**\r\n * Añade una entidad de varios marcadores a la capa.\r\n * @method addMultiMarker\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.MultiMarker} coordsOrMultiMarker - Array con las coordenadas de los puntos en el CRS del mapa\r\n * u objeto {@link SITNA.feature.MultiMarker}.\r\n * @param {SITNA.feature.MarkerOptions} [options]\r\n * @returns {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.MultiMarker.html)\r\n */\r\n addMultiMarker(coordsOrMultiMarker, options) {\r\n return this.#addFeatureInternal(this.addMultiMarkers, coordsOrMultiMarker, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades de varios marcadores a la capa.\r\n * @method addMultiMarkers\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.MultiMarker>} coordsOrMultiMarker - Array cuyos elementos son objetos {@link SITNA.feature.MultiMarker}\r\n * o sus coordenadas en el CRS del mapa.\r\n * @param {SITNA.feature.MarkerOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n */\r\n addMultiMarkers(coordsOrMultiMarkerArray, options) {\r\n return this.#addFeaturesInternal(coordsOrMultiMarkerArray, 'MultiMarker', \"marker\", options);\r\n }\r\n\r\n /**\r\n * Añade una entidad geográfica de línea de varios segmentos a la capa.\r\n * @method addPolyline\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.|SITNA.feature.Polyline} coordsOrPolyline - Array de las coordenadas de los vértices de la línea\r\n * u objeto {@link SITNA.feature.Polyline}.\r\n * @param {SITNA.feature.PolylineOptions} [options]\r\n * @return {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.Polyline.html)\r\n */\r\n addPolyline(coordsOrPolyline, options) {\r\n return this.#addFeatureInternal(this.addPolylines, coordsOrPolyline, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades geográficas de línea de varios segmentos a la capa.\r\n * @method addPolylines\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {array} coordsOrPolylines - Los elementos de esta lista son cualquiera de los que acepta \r\n * el método [addPolyline]{@link SITNA.layer.Vector#addPolyline}.\r\n * @param {SITNA.feature.PolylineOptions} [options]\r\n * @return {Promise} Array de entidades añadidas.\r\n * @see [Ejemplo de uso](../examples/feature.Polyline.html)\r\n */\r\n addPolylines(coordsOrPolylineArray, options) {\r\n //URI: El tipo de estilo se especifica LINE pero realmente deberia ser TC.Const.Style.LINE\r\n return this.#addFeaturesInternal(coordsOrPolylineArray, 'Polyline', \"line\", options);\r\n }\r\n\r\n /**\r\n * Añade una entidad geográfica de varias líneas de varios segmentos a la capa.\r\n * @method addMultiPolyline\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.>|SITNA.feature.MultiPolyline} coordsOrMultiPolyline - Array cuyos elementos son coordenadas de objetos {@link SITNA.feature.Polyline}\r\n * u objeto {@link SITNA.feature.MultiPolyline}.\r\n * @param {SITNA.feature.PolylineOptions} [options]\r\n * @return {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.MultiPolyline.html)\r\n */\r\n addMultiPolyline(coordsOrMultiPolyline, options) {\r\n return this.#addFeatureInternal(this.addMultiPolylines, coordsOrMultiPolyline, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades de varias líneas multisegmento a la capa.\r\n * @method addMultiPolylines\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.>|SITNA.feature.MultiPolyline>} coordsOrMultiPolylines - Array cuyos elementos son objetos {@link SITNA.feature.MultiPolyline}\r\n * o sus coordenadas en el CRS del mapa.\r\n * @param {SITNA.feature.PolylineOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n * @see [Ejemplo de uso](../examples/feature.MultiPolyline.html)\r\n */\r\n addMultiPolylines(coordsOrMultiPolylineArray, options) {\r\n //URI: El tipo de estilo se especifica LINE pero realmente deberia ser TC.Const.Style.LINE\r\n return this.#addFeaturesInternal(coordsOrMultiPolylineArray, 'MultiPolyline', \"line\", options);\r\n }\r\n\r\n /**\r\n * Añade un polígono a la capa.\r\n * @method addPolygon\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.>|SITNA.feature.Polygon} coordsOrPolygon - Array de las coordenadas de los contornos del polígono\r\n * u objeto {@link SITNA.feature.Polygon}.\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @return {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.Polygon.html)\r\n */\r\n addPolygon(coordsOrPolygon, options) {\r\n return this.#addFeatureInternal(this.addPolygons, coordsOrPolygon, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de polígonos a la capa.\r\n * @method addPolygons\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {array} coordsOrPolygons - Los elementos de esta lista son cualquiera de los que acepta el método [addPolygon]{@link SITNA.layer.Vector#addPolygon}.\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n * @see [Ejemplo de uso](../examples/feature.Polygon.html)\r\n */\r\n addPolygons(coordsOrPolygonArray, options) {\r\n //URI: El tipo de style se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return this.#addFeaturesInternal(coordsOrPolygonArray, 'Polygon', Consts.geom.POLYGON, options);\r\n }\r\n\r\n /**\r\n * Añade una entidad geográfica de varios polígonos a la capa.\r\n * @method addMultiPolygon\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.>>|SITNA.feature.MultiPolygon} coordsOrMultiPolygon - Array cuyos elementos son coordenadas de objetos {@link SITNA.feature.Polygon}\r\n * u objeto {@link SITNA.feature.MultiPolygon}.\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @return {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.MultiPolygon.html)\r\n */\r\n addMultiPolygon(coordsOrMultiPolygon, options) {\r\n return this.#addFeatureInternal(this.addMultiPolygons, coordsOrMultiPolygon, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades de varios polígonos a la capa.\r\n * @method addMultiPolygons\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.>>|SITNA.feature.MultiPolygon>} coordsOrMultiPolygons - Array cuyos elementos son objetos {@link SITNA.feature.MultiPolygon}\r\n * o sus coordenadas en el CRS del mapa.\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n */\r\n addMultiPolygons(coordsOrMultiPolygonArray, options) {\r\n //URI: El tipo de style se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return this.#addFeaturesInternal(coordsOrMultiPolygonArray, 'MultiPolygon', Consts.geom.POLYGON, options);\r\n }\r\n\r\n /**\r\n * Añade una entidad con geometría circular a la capa.\r\n * @method addCircle\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array|SITNA.feature.CircleGeometry|SITNA.feature.Circle} geometryOrCircle - Si es un array, contiene dos elementos, el primero es\r\n * un array de dos números (la coordenada del centro) y el segundo es un número (el radio).\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @returns {Promise} Entidad añadida.\r\n * @see [Ejemplo de uso](../examples/feature.Circle.html)\r\n */\r\n addCircle(geometryOrCircle, options) {\r\n return this.#addFeatureInternal(this.addCircles, geometryOrCircle, options);\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades con geometría circular a la capa.\r\n * @method addCircles\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {Array.} geometryOrCircles - Array\r\n * cuyos elementos son cualquiera de los que acepta el método [addCircle]{@link SITNA.layer.Vector#addCircle}.\r\n * @param {SITNA.feature.PolygonOptions} [options]\r\n * @returns {Promise} Array de entidades añadidas.\r\n * @see [Ejemplo de uso](../examples/feature.Circle.html)\r\n */\r\n addCircles(geometryOrCircleArray, options) {\r\n //URI: El tipo de geometria se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return this.#addFeaturesInternal(geometryOrCircleArray, 'Circle', Consts.geom.POLYGON, options);\r\n }\r\n\r\n /**\r\n * Añade una entidad geográfica a la capa.\r\n * @method addFeature\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {SITNA.feature.Feature} feature - Entidad geográfica a añadir\r\n * @returns {Promise} Entidad añadida.\r\n */\r\n addFeature(feature) {\r\n const self = this;\r\n var result;\r\n if (feature instanceof Point) {\r\n result = self.addPoint(feature);\r\n }\r\n else if (feature instanceof Polyline) {\r\n result = self.addPolyline(feature);\r\n }\r\n else if (feature instanceof Polygon) {\r\n result = self.addPolygon(feature);\r\n }\r\n else if (feature instanceof MultiPolygon) {\r\n result = self.addMultiPolygon(feature);\r\n }\r\n else if (feature instanceof MultiPolyline) {\r\n result = self.addMultiPolyline(feature);\r\n }\r\n else if (feature instanceof Circle) {\r\n result = self.addCircle(feature);\r\n }\r\n else {\r\n result = self.#addFeaturesInternal([feature]);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Añade una colección de entidades geográficas a la capa.\r\n * @method addFeatures\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @async\r\n * @param {SITNA.feature.Feature[]} features - Array de entidades geográficas a añadir\r\n * @returns {Promise} Array de entidades añadidas.\r\n */\r\n addFeatures(features) {\r\n return this.#addFeaturesInternal(features);\r\n }\r\n\r\n /**\r\n * Elimina una entidad geográfica de la capa.\r\n * @method removeFeature\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @param {SITNA.feature.Feature} feature - Entidad a eliminar\r\n */\r\n removeFeature(feature) {\r\n const self = this;\r\n if (feature.layer && self.features.indexOf(feature) >= 0) {\r\n self.wrap.removeFeature(feature);\r\n feature.layer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene de la capa la entidad geográfica especificada por el parámetro.\r\n * @method getFeature\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n * @param {string|SITNA.feature.Feature} feature - Identificador de la entidad geográfica \r\n * que estamos buscando o instancia de la clase de entidad geográfica.\r\n * @returns {SITNA.feature.Feature|null} Entidad o `null` si no se ha encontrado ninguna en la capa.\r\n */\r\n getFeature(feature) {\r\n const self = this;\r\n if (feature instanceof Feature) {\r\n if (self.features.includes(feature)) {\r\n return feature;\r\n }\r\n }\r\n else {\r\n return self.getFeatureById(feature);\r\n }\r\n return null;\r\n }\r\n\r\n getFeatureById(id) {\r\n const self = this;\r\n let result = null;\r\n var olFeat = self.wrap.getFeatureById(id);\r\n if (olFeat) {\r\n result = olFeat._wrap.parent;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Borra todas las entidades de la capa.\r\n * @method clearFeatures\r\n * @memberof SITNA.layer.Vector\r\n * @instance\r\n */\r\n clearFeatures() {\r\n const self = this;\r\n if (self.features && self.wrap) {\r\n if (self.map) {\r\n const popups = self.map.getControlsByClass('TC.control.Popup');\r\n popups.forEach(function (pu) {\r\n if (pu.isVisible() && self.features.indexOf(pu.currentFeature) >= 0) {\r\n pu.hide();\r\n }\r\n });\r\n }\r\n self.features.length = 0;\r\n self.wrap.clearFeatures();\r\n }\r\n }\r\n\r\n getDescribeFeatureTypeUrl(layerNames) {\r\n const self = this;\r\n const version = self.options.version || self.capabilities.version || '1.1.0';\r\n let featureType = layerNames || self.featureType;\r\n featureType = Array.isArray(featureType) ? featureType : [featureType];\r\n return self.url + '?service=WFS&' + 'version=' + version + '&request=DescribeFeatureType&typename=' + featureType.join(',') + '&outputFormat=' + encodeURIComponent(self.capabilities.Operations.DescribeFeatureType.outputFormat);\r\n }\r\n\r\n describeFeatureType(layerName, callback, error) {\r\n const self = this;\r\n if (!layerName) {\r\n layerName = self.featureType;\r\n }\r\n const _getStoredFeatureTypes = function (layerName, collection) {\r\n if (!(layerName instanceof Array))\r\n layerName = layerName.split(\",\");\r\n return layerName.reduce(function (vi, va) {\r\n var temp = [];\r\n temp[va] = collection[va];\r\n return Object.assign(vi, temp);\r\n }, {});\r\n };\r\n const result = new Promise(function (resolve, reject) {\r\n self.getCapabilitiesPromise()\r\n .then(function (capabilities) {\r\n if (!capabilities.Operations.DescribeFeatureType) {\r\n reject(\"No esta disponible el método describeFeatureType\");\r\n return;\r\n }\r\n if (Object.prototype.hasOwnProperty.call(window, 'Worker')) {\r\n const wwInit = function () {\r\n if (!self.WebWorkerDFT) {\r\n const workerUrl = URL.createObjectURL(wwBlob);\r\n self.WebWorkerDFT = new Worker(workerUrl);\r\n }\r\n self.WebWorkerDFT.onmessage = async function (e) {\r\n if (!(e.data instanceof Object)) {\r\n var data = await self.proxificationTool.fetchXML(e.data);\r\n self.WebWorkerDFT.postMessage({\r\n url: e.data,\r\n response: data.documentElement.outerHTML\r\n });\r\n return;\r\n }\r\n if (e.data.state === 'success') {\r\n let key = Object.keys(e.data.DFTCollection).join(\",\");\r\n if (TC.describeFeatureType[key]) {\r\n if (typeof TC.describeFeatureType[key] === \"function\") {\r\n TC.describeFeatureType[key].call(null, e.data.DFTCollection);\r\n }\r\n }\r\n else {\r\n throw \"No se encuentra la clave \" + key + \" en la colección\";\r\n }\r\n TC.describeFeatureType = Object.assign(TC.describeFeatureType, e.data.DFTCollection);\r\n }\r\n else {\r\n throw \"Ha habido problemas procesando el Describe feature type\";\r\n //reject(\"loquesea\");\r\n }\r\n };\r\n };\r\n const wwProcess = async function (layers, callback) {\r\n var data = await self.proxificationTool.fetchXML(self.getDescribeFeatureTypeUrl(layers || self.featureType));\r\n //checkear si excepciones del servidor\r\n if (data.querySelector(\"Exception\") || data.querySelector(\"exception\")) {\r\n throw (data.querySelector(\"Exception\") || data.querySelector(\"exception\")).textContent.trim();\r\n }\r\n self.WebWorkerDFT.postMessage({\r\n layerName: layers,\r\n xml: data.documentElement.outerHTML,\r\n url: TC.apiLocation.indexOf(\"http\") >= 0 ? TC.apiLocation : document.location.protocol + TC.apiLocation\r\n });\r\n TC.describeFeatureType[layers instanceof Array ? layers.join(\",\") : layers] = callback;\r\n };\r\n try {\r\n wwInit();\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n //si no es una array convierto en Array\r\n if (!(layerName instanceof Array)) layerName = layerName.split(\",\");\r\n //si tiene distinto Namespace separo las pediciones describeFeatureType\t\t\t\t\t\t\t\t\t\t\r\n var arrPromises = Object.entries(layerName.reduce(function (vi, va) {\r\n let preffix = va.substring(0, va.indexOf(\":\"));\r\n if (!vi[preffix]) {\r\n let temp = {};\r\n temp[preffix] = [va];\r\n return Object.assign(vi, temp);\r\n } else {\r\n vi[preffix].push(va);\r\n return vi;\r\n }\r\n }, {})).map(function (params) {\r\n var layers = params[1];\r\n return new Promise(async function (resolve, reject) {\r\n if (TC.describeFeatureType[layers]) {\r\n resolve(_getStoredFeatureTypes(layers, TC.describeFeatureType));\r\n return;\r\n }\r\n try {\r\n await wwProcess(layers, function (data) {\r\n resolve(data);\r\n });\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n });\r\n Promise.all(arrPromises).then(function (response) {\r\n let objReturned = response.reduce(function (vi, va) {\r\n return Object.assign(vi, va);\r\n }, {});\r\n\r\n //si solo hay un objeto devuelvo directamente los atributos\tde este\t\t\t\t\r\n resolve(Object.keys(objReturned).length === 1 ? objReturned[Object.keys(objReturned)[0]] : objReturned);\r\n }).catch(reject);\r\n }\r\n else {\r\n reject(\"No esta disponible el WebWorker\");\r\n }\r\n })\r\n .catch(err => reject(err));\r\n });\r\n result.then(\r\n function (data) {\r\n if (TC.Util.isFunction(callback)) {\r\n callback(data);\r\n }\r\n },\r\n function (errorText) {\r\n if (TC.Util.isFunction(error)) {\r\n error(errorText);\r\n }\r\n }\r\n );\r\n return result;\r\n }\r\n\r\n import = function (options) {\r\n this.wrap.import(options);\r\n }\r\n\r\n setNodeVisibility(id, visible) {\r\n const self = this;\r\n\r\n const nodes = [];\r\n id = Array.isArray(id) ? id : [id];\r\n\r\n\r\n self.state = Layer.state.LOADING;\r\n self.map.trigger(Consts.event.BEFOREUPDATE);\r\n self.map.trigger(Consts.event.BEFORELAYERUPDATE, { layer: self });\r\n\r\n id.forEach(function (id) {\r\n nodes.push(Layer.prototype.setNodeVisibility.call(self, id, visible));\r\n });\r\n if (nodes.some((node) => !node.parent)) { // Si es el nodo raíz, es la capa entera\r\n self.setVisibility(visible);\r\n }\r\n else {\r\n\r\n nodes.forEach((node) => {\r\n visibilityCache.set(node.uid, visible ? Consts.visibility.VISIBLE : Consts.visibility.NOT_VISIBLE);\r\n //02/02/2022 URI: Si se pincha en un nodo que tiene hijos se cambian los estos con el valor dado\r\n //salvo que se quiera hace visible un nodo que no esta en la cache.\r\n node.children.forEach((children) => {\r\n self.setNodeVisibility(children.uid, visible);\r\n });\r\n if (node.parent) {\r\n const parentNodeVisibility = visibilityCache.get(node.parent.uid);\r\n ////si todos los hijos están visible se hace visible el padre\r\n //if ((parentNode === Consts.visibility.NOT_VISIBLE || self.isRoot(node.parent)) && \r\n // node.parent.children.length > 0 && \r\n // node.parent.children.every(c => {\r\n // const n = visibilityCache.get(c.uid);\r\n // return n === undefined || n !== Consts.visibility.NOT_VISIBLE);\r\n // }) {\r\n ////if ((parentNode === Consts.visibility.NOT_VISIBLE || !visibilityCache.has(node.parent.uid)) && node.parent.children.length > 0 && node.parent.children.every(c => {\r\n // const n = visibilityCache.get(c.uid);\r\n // return n === undefined || n !== Consts.visibility.NOT_VISIBLE);\r\n // })) {\r\n // self.setNodeVisibility(node.parent.uid, true);\r\n //}\r\n //si todos los hijos estan ocultos se oculta el padre\r\n if (parentNodeVisibility !== Consts.visibility.NOT_VISIBLE &&\r\n node.parent.children.length > 0 &&\r\n node.parent.children.every(c => visibilityCache.get(c.uid) === Consts.visibility.NOT_VISIBLE)) {\r\n self.setNodeVisibility(node.parent.uid, false);\r\n }\r\n }\r\n var found = false;\r\n var i;\r\n var f;\r\n for (i = 0; i < self.features.length; i++) {\r\n f = self.features[i];\r\n if (f.id == id) {\r\n found = true;\r\n f.setVisibility(visible);\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n for (i = 0; i < self.features.length; i++) {\r\n f = self.features[i];\r\n if (f._path === undefined) {\r\n f._path = '/' + f.getPath().join('/');\r\n }\r\n //URI: 31/12/2021 Si un KML tiene elementos anidados en 2 o mas folders cambiar la visibilidad de los superiores no afectaba a las features descendientes\r\n if (f._path === id || f._path.startsWith(id)) {\r\n f.setVisibility(visible);\r\n }\r\n }\r\n }\r\n })\r\n\r\n }\r\n self.state = Layer.state.IDLE;\r\n self.map.trigger(Consts.event.LAYERUPDATE, { layer: self });\r\n self.map.trigger(Consts.event.UPDATE);\r\n return nodes.length > 1 ? nodes : nodes[0];\r\n }\r\n\r\n getNodeVisibility(id) {\r\n var self = this;\r\n var result = super.getNodeVisibility.call(self, id);\r\n\r\n var node = self.findNode(id, self.getTree());\r\n if (!node) return undefined;\r\n if (node === self.getTree()) {\r\n result = self.getVisibility() ? Consts.visibility.VISIBLE : Consts.visibility.NOT_VISIBLE;\r\n if (result === Consts.visibility.VISIBLE &&\r\n Array.from(visibilityCache.values()).some(v => v === Consts.visibility.NOT_VISIBLE)) {\r\n result = Consts.visibility.HAS_VISIBLE;\r\n }\r\n }\r\n else {\r\n var r = visibilityCache.get(id);\r\n if (r !== undefined) {\r\n result = r;\r\n const someOppositeState = Array.from(visibilityCache.entries()).some(arr => arr[0] !== id && arr[0].startsWith(id) && arr[1] !== result);\r\n if (someOppositeState) {\r\n result = Consts.visibility.HAS_VISIBLE;\r\n }\r\n }\r\n else {\r\n const someHidden = Array.from(visibilityCache.entries()).some(arr => arr[0] !== id && arr[0].startsWith(id) && !arr[1]);\r\n const everyHidden = node.children.length > 0 && node.children.every(c => visibilityCache.get(c.uid) === Consts.visibility.NOT_VISIBLE);\r\n if (everyHidden) {\r\n result = Consts.visibility.NOT_VISIBLE;\r\n }\r\n else if (someHidden) {\r\n result = Consts.visibility.HAS_VISIBLE;\r\n }\r\n else {\r\n result = Consts.visibility.VISIBLE;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n setModifiable(modifiable) {\r\n this.wrap.setModifiable(modifiable);\r\n }\r\n\r\n applyEdits(inserts, updates, deletes) {\r\n return this.wrap.sendTransaction(inserts, updates, deletes);\r\n }\r\n\r\n refresh() {\r\n const self = this;\r\n self.clearFeatures();\r\n return self.wrap.reloadSource();\r\n }\r\n\r\n getFeaturesInCurrentExtent(tolerance) {\r\n const self = this;\r\n const extent = self.map.getExtent();\r\n return self.getFeaturesInExtent(extent, tolerance);\r\n }\r\n\r\n //getGetCapabilitiesUrl() {\r\n // const self = this;\r\n // const version = self.options.version || '1.1.0';\r\n // return self.url + '?service=WFS&' + 'version=' + version + '&request=GetCapabilities';\r\n //};\r\n\r\n getFeaturesInExtent(extent, tolerance) {\r\n return this.wrap.getFeaturesInExtent(extent, tolerance);\r\n }\r\n\r\n setProjection(options) {\r\n const self = this;\r\n self.wrap.setProjection(options);\r\n if (options.crs && options.oldCrs) {\r\n self.map.trigger(Consts.event.BEFORELAYERUPDATE, { layer: self });\r\n self.features.forEach(function (feat) {\r\n feat.setCoordinates(feat.getCoordinates({\r\n geometryCrs: options.oldCrs,\r\n crs: options.crs\r\n }));\r\n });\r\n self.map.trigger(Consts.event.LAYERUPDATE, { layer: self });\r\n }\r\n }\r\n\r\n setStyles(options) {\r\n const self = this;\r\n self.styles = Util.extend({}, options);\r\n self.wrap.setStyles(options);\r\n }\r\n\r\n exportState(options) {\r\n const self = this;\r\n options = options || {};\r\n const lObj = {\r\n id: self.id\r\n };\r\n if (self.map && self.map.crs !== self.map.options.crs) {\r\n lObj.crs = self.map.crs;\r\n }\r\n\r\n // Aplicamos una precisión un dígito mayor que la del mapa, si no, al compartir algunas parcelas se deforman demasiado\r\n var precision = Math.pow(10, (self.map.wrap.isGeo() ? Consts.DEGREE_PRECISION : Consts.METER_PRECISION) + 1);\r\n let commonStyles = null;\r\n const features = options.features || self.features;\r\n lObj.features = features\r\n .map(function (f) {\r\n let fObj = {};\r\n var layerStyle;\r\n switch (true) {\r\n case f instanceof Marker:\r\n fObj.type = Consts.geom.POINT;\r\n layerStyle = self.styles?.marker;\r\n break;\r\n case f instanceof Point:\r\n fObj.type = Consts.geom.POINT;\r\n layerStyle = self.styles?.point;\r\n break;\r\n case f instanceof MultiPoint:\r\n fObj.type = Consts.geom.MULTIPOINT;\r\n break;\r\n case f instanceof Polyline:\r\n fObj.type = Consts.geom.POLYLINE;\r\n layerStyle = self.styles?.line;\r\n break;\r\n case f instanceof MultiPolyline:\r\n fObj.type = Consts.geom.MULTIPOLYLINE;\r\n layerStyle = self.styles?.line;\r\n break;\r\n case f instanceof Polygon:\r\n fObj.type = Consts.geom.POLYGON;\r\n layerStyle = self.styles?.polygon;\r\n break;\r\n case f instanceof MultiPolygon:\r\n fObj.type = Consts.geom.MULTIPOLYGON;\r\n layerStyle = self.styles?.polygon;\r\n break;\r\n case f instanceof Circle:\r\n fObj.type = Consts.geom.CIRCLE;\r\n layerStyle = self.styles?.polygon;\r\n break;\r\n default:\r\n break;\r\n }\r\n fObj.id = f.id;\r\n fObj.geom = TC.Util.compactGeometry(f.geometry, precision);\r\n fObj.data = f.getData();\r\n fObj.autoPopup = f.autoPopup;\r\n fObj.showsPopup = f.showsPopup;\r\n if (options.exportStyles === undefined || options.exportStyles) {\r\n layerStyle = TC.Util.extend({}, layerStyle);\r\n for (var key in layerStyle) {\r\n var val = layerStyle[key];\r\n if (TC.Util.isFunction(val)) {\r\n layerStyle[key] = val(f);\r\n }\r\n }\r\n fObj.style = TC.Util.extend(layerStyle, f.getStyle());\r\n if (!commonStyles) commonStyles = Object.assign({}, fObj.style);\r\n else\r\n commonStyles = compareStyles(commonStyles, fObj.style);\r\n }\r\n return fObj;\r\n });\r\n if (!options.features && commonStyles && Object.keys(commonStyles).length) {\r\n //Ahora borramos las propiedades de cada feature que son comunes a todos\r\n lObj.features.forEach(function (feature) {\r\n feature.style = compareStyles(feature.style, commonStyles, false);\r\n });\r\n lObj.style = commonStyles;\r\n }\r\n return lObj;\r\n }\r\n\r\n async importState(obj) {\r\n const self = this;\r\n const promises = new Array(obj.features.length);\r\n obj.features.forEach(function (f, idx) {\r\n let style = TC.Util.extend({}, obj.style || {}, f.style);\r\n const featureOptions = TC.Util.extend({}, style, {\r\n data: f.data,\r\n id: f.id,\r\n showsPopup: f.showsPopup,\r\n showPopup: f.autoPopup\r\n });\r\n var addFn;\r\n switch (f.type) {\r\n case Consts.geom.POLYGON:\r\n addFn = self.addPolygon;\r\n break;\r\n case Consts.geom.MULTIPOLYGON:\r\n addFn = self.addMultiPolygon;\r\n break;\r\n case Consts.geom.POLYLINE:\r\n addFn = self.addPolyline;\r\n break;\r\n case Consts.geom.MULTIPOLYLINE:\r\n addFn = self.addMultiPolyline;\r\n break;\r\n case Consts.geom.CIRCLE:\r\n addFn = self.addCircle;\r\n break;\r\n case Consts.geom.MULTIPOINT:\r\n if (f.style && (f.style.url || f.style.className)) {\r\n addFn = self.addMultiMarker;\r\n }\r\n else {\r\n addFn = self.addMultiPoint;\r\n }\r\n break;\r\n case Consts.geom.POINT:\r\n if (style && (style.url || style.className)) {\r\n addFn = self.addMarker;\r\n }\r\n else {\r\n addFn = self.addPoint;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (addFn) {\r\n var geom = TC.Util.explodeGeometry(f.geom);\r\n if (obj.crs && self.map.crs !== obj.crs) {\r\n promises[idx] = new Promise(function (res, rej) {\r\n self.map.one(Consts.event.PROJECTIONCHANGE, function (_e) {\r\n addFn.call(self, geom, featureOptions).then(\r\n function () {\r\n res();\r\n },\r\n function () {\r\n rej(Error('addFn failed'));\r\n }\r\n );\r\n });\r\n });\r\n }\r\n else {\r\n promises[idx] = addFn.call(self, geom, featureOptions);\r\n }\r\n }\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n clone() {\r\n const self = this;\r\n const clone = super.clone.call(self);\r\n self.features.forEach(f => clone.addFeature(f.clone()));\r\n return clone;\r\n }\r\n\r\n getGetCapabilitiesUrl() {\r\n const self = this;\r\n if (self.type === Consts.layerType.WFS) {\r\n const getUrl = () => self.options.url || self.url;\r\n const _src = !TC.Util.isSecureURL(getUrl()) && TC.Util.isSecureURL(TC.Util.toAbsolutePath(getUrl())) ? self.getBySSL_(getUrl()) : getUrl();\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = '2.0.0';\r\n params.REQUEST = 'GetCapabilities';\r\n\r\n return _src + '?' + TC.Util.getParamString(params);\r\n }\r\n return null;\r\n }\r\n\r\n getCapabilitiesPromise() {\r\n const self = this;\r\n if (self.type === Consts.layerType.WFS) {\r\n return new Promise((resolve, reject) => {\r\n const processedCapabilities = function (capabilities) {\r\n // Si existe el capabilities no machacamos, porque provoca efectos indeseados en la gestión de capas.\r\n // En concreto, se regeneran los UIDs de capas, como consecuencia los controles de la API interpretan como distintas capas que son la misma.\r\n self.capabilities = self.capabilities || capabilities;\r\n TC.capabilitiesWFS[self.options.url || self.url] = TC.capabilitiesWFS[self.options.url || self.url] || capabilities;\r\n TC.capabilitiesWFS[actualUrl] = TC.capabilitiesWFS[actualUrl] || capabilities;\r\n resolve(capabilities);\r\n };\r\n\r\n var actualUrl = (self.options.url || self.url).replace(/https ?:/gi, '');\r\n\r\n if (self.capabilities) {\r\n resolve(self.capabilities);\r\n self.#capabilitiesPromise = Promise.resolve(self.capabilities);\r\n }\r\n if (TC.capabilitiesWFS[actualUrl]) {\r\n resolve(TC.capabilitiesWFS[actualUrl]);\r\n self.#capabilitiesPromise = Promise.resolve(TC.capabilitiesWFS[actualUrl]);\r\n\r\n }\r\n\r\n const cachePromise = capabilitiesPromises[actualUrl];\r\n capabilitiesPromises[actualUrl] = self.#capabilitiesPromise = cachePromise || new Promise(function (res, rej) {\r\n const onlinePromise = self.getCapabilitiesOnline();\r\n const storagePromise = self.getCapabilitiesFromStorage();\r\n\r\n onlinePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function (error) {\r\n storagePromise.catch(function () {\r\n rej(error);\r\n });\r\n });\r\n storagePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function () {\r\n onlinePromise.catch(function (error) {\r\n rej(error);\r\n });\r\n });\r\n });\r\n\r\n capabilitiesPromises[actualUrl].then(function (capabilities) {\r\n processedCapabilities(capabilities);\r\n })\r\n .catch(function (error) {\r\n if (self.map) {\r\n self.map.trigger(Consts.event.LAYERERROR, { layer: self, reason: 'couldNotGetCapabilities' });\r\n }\r\n reject(error);\r\n });\r\n });\r\n }\r\n else {\r\n return Promise.reject(new Error(`Layer \"${self.id}\" does not have capabilities document`));\r\n }\r\n }\r\n}\r\n\r\nTC.layer.Vector = Vector;\r\nexport default Vector;\r\n\r\n/**\r\n * Opciones de capa vectorial. Este objeto se utiliza al [configurar un mapa]{@linkplain SITNA.MapOptions} o el [control del catálogo de capas]{@linkplain LayerCatalogOptions},\r\n * o como parámetro al [añadir una capa]{@linkplain SITNA.Map#addLayer}.\r\n * @typedef VectorOptions\r\n * @memberof SITNA.layer\r\n * @extends SITNA.layer.LayerOptions\r\n * @see SITNA.MapOptions\r\n * @see SITNA.control.LayerCatalogOptions\r\n * @see SITNA.Map#addLayer\r\n * @see SITNA.Map#setBaseLayer\r\n * @property {string} id - Identificador único de capa. No puede haber en un mapa dos capas con el mismo valor de `id`.\r\n * @property {SITNA.layer.ClusterOptions} [cluster] - La capa agrupa sus entidades puntuales cercanas entre sí en grupos (clusters).\r\n * @property {string} [format] - Tipo MIME del formato de archivo de datos geográficos que queremos cargar (GeoJSON, KML, etc.).\r\n\r\n * Para asignar valor a esta propiedad se pueden usar las constantes definidas en [SITNA.Consts.mimeType]{@link SITNA.Consts}.\r\n * @property {boolean} [hideTree] - Aplicable a capas de tipo [KML]{@link SITNA.Consts}.\r\n * Si se establece a `true`, la capa no muestra la jerarquía de grupos de capas en la tabla de contenidos ni en la leyenda.\r\n * @property {boolean} [isBase] - Si se establece a `true`, la capa es un mapa de fondo.\r\n * @property {boolean} [isDefault] - *__Obsoleta__: En lugar de esta propiedad es recomendable usar la propiedad `defaultBaseLayer`de {@link SITNA.MapOptions}.*\r\n *\r\n * Si se establece a true, la capa se muestra por defecto si forma parte de los mapas de fondo.\r\n * @property {SITNA.layer.LayerOptions|string} [overviewMapLayer] - Definición de la capa que se utilizará como fondo en el control de mapa de situación cuando esta capa está de fondo en el mapa principal.\r\n * Si el valor es de tipo `string`, tiene que ser un identificador de capas de la API SITNA (un miembro de [SITNA.Consts.layer]{@link SITNA.Consts}).\r\n *\r\n * La capa del mapa de situación debe ser compatible con el sistema de referencia de coordenadas del mapa principal (ver propiedad `crs` de {@link SITNA.MapOptions}).\r\n * @property {boolean} [stealth] - Si se establece a `true`, la capa no aparece en la tabla de contenidos ni en la leyenda.\r\n * De este modo se puede añadir una superposición de capas de trabajo que el usuario la perciba como parte del mapa de fondo.\r\n * @property {SITNA.layer.StyleOptions} [styles] - Descripción de los estilos que tendrán las entidades geográficas de la capa.\r\n * @property {string} [thumbnail] - URL de una imagen en miniatura a mostrar en el selector de mapas de fondo.\r\n * @property {string} [title] - Título de capa. Este valor se mostrará en la tabla de contenidos y la leyenda.\r\n * @property {string} [type=[SITNA.Consts.layerType.VECTOR]{@link SITNA.Consts}] - Tipo de capa. \r\n * La lista de valores posibles está definida en [SITNA.Consts.layerType]{@link SITNA.Consts}.\r\n * @property {string} [url] - URL del servicio OGC o del archivo de datos geográficos que define la capa. \r\n * Propiedad obligatoria en capas de tipo [WFS]{@link SITNA.Consts} y [KML]{@link SITNA.Consts}.\r\n *\r\n * Los archivos de datos geográficos soportados son [KML]{@link SITNA.Consts}, [GeoJSON]{@link SITNA.Consts}, [GPX]{@link SITNA.Consts}, [GML]{@link SITNA.Consts}, [WKT]{@link SITNA.Consts} y [TopoJSON]{@link SITNA.Consts}.\r\n * El formato se deduce de la extensión del nombre de archivo, pero también se puede especificar utilizando la propiedad `format`.\r\n *\r\n * En el caso de que un fichero KML tenga definido el estilo del bocadillo, este formato será usado al renderizar el bocadillo en visores basados en la API SITNA.\r\n */\r\n\r\n/**\r\n * Opciones de clustering de puntos de una capa, define si los puntos se tienen que agrupar cuando están más cerca entre sí que un valor umbral.\r\n *\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef ClusterOptions\r\n * @memberof SITNA.layer\r\n * @property {number} distance - Distancia en píxels que tienen que tener como máximo los puntos entre sí para que se agrupen en un cluster.\r\n * @property {boolean} [animate] - Si se establece a `true`, los puntos se agrupan y desagrupan con una transición animada.\r\n * @property {SITNA.layer.ClusterStyleOptions} [styles] - Opciones de estilo de los clusters.\r\n * @see SITNA.layer.VectorOptions\r\n * @example [Ver en vivo](../examples/cfg.LayerOptions.cluster.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n/**\r\n * Opciones de estilo de cluster de puntos. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef ClusterStyleOptions\r\n * @memberof SITNA.layer\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {SITNA.feature.PointStyleOptions} [point] - Opciones de estilo del punto que representa el cluster.\r\n * @see SITNA.layer.ClusterOptions\r\n * @example [Ver en vivo](../examples/cfg.ClusterStyleOptions.point.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n/**\r\n * Opciones de estilo de mapa de calor. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef HeatmapStyleOptions\r\n * @memberof SITNA.layer\r\n * @see SITNA.layer.StyleOptions\r\n * @see layout_cfg\r\n * @property {number} [blur=15] - Ancho en píxeles del difuminado de las manchas del mapa de calor.\r\n * @property {string[]} [gradient=[\"#00f\", \"#0ff\", \"#0f0\", \"#ff0\", \"#f00\"]] - Gradiente de colores de las manchas de mapa\r\n * de calor. Debe ser un array de cadenas CSS de color.\r\n * @property {number} [radius=8] - Radio en píxeles de la mancha unitaria en el mapa de calor.\r\n * @example [Ver en vivo](../examples/cfg.HeatmapStyleOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n","import Component from './Component';\r\n\r\nconst elementName = \"sitna-button\";\r\n\r\nclass Button extends Component {\r\n\r\n #button;\r\n #active = false;\r\n\r\n static variant = {\r\n DEFAULT: 'default',\r\n ICON: 'icon',\r\n ICONLEFT: 'iconleft',\r\n LINK: 'link',\r\n MINIMAL: 'minimal'\r\n }\r\n\r\n static action = {\r\n CLOSE: 'close',\r\n DELETE: 'delete',\r\n DOWNLOAD: 'download',\r\n DOWNLOAD_ALL: 'download_all',\r\n EDIT: 'edit',\r\n SHARE: 'share'\r\n }\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.#button = document.createElement('button');\r\n self.#button.setAttribute('type', 'button');\r\n self.shadowRoot.appendChild(self.#button);\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.text = self.text;\r\n self.variant = self.variant;\r\n self.active = self.active;\r\n self.disabled = self.disabled;\r\n self.icon = self.icon;\r\n self.iconText = self.iconText;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['text', 'icon', 'variant', 'disabled', 'active', 'icon-text', 'title'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'disabled') {\r\n self.disabled = self.hasAttribute(name);\r\n }\r\n else if (name === 'active') {\r\n self.active = self.hasAttribute(name);\r\n }\r\n if (oldValue !== newValue) {\r\n switch (name) {\r\n case 'text':\r\n self.text = newValue;\r\n break;\r\n case 'icon':\r\n self.icon = newValue;\r\n break;\r\n case 'variant':\r\n self.variant = newValue;\r\n break;\r\n case 'icon-text':\r\n self.iconText = newValue;\r\n break;\r\n case 'title':\r\n if (self.hasAttribute(name)) {\r\n if (self.#button.hasAttribute('title')) {\r\n self.#button.setAttribute('title', newValue);\r\n }\r\n }\r\n else {\r\n if (self.#button.hasAttribute('title')) {\r\n self.text = self.text;\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n get variant() {\r\n return this.getAttribute('variant') || Button.variant.DEFAULT;\r\n }\r\n\r\n set variant(value) {\r\n const self = this;\r\n value = value || Button.varian.DEFAULT;\r\n\r\n self.#button.classList.remove(self.variant);\r\n if (value !== Button.variant.DEFAULT) {\r\n self.#button.classList.add(value);\r\n self.setAttribute('variant', value);\r\n }\r\n else {\r\n self.removeAttribute('variant');\r\n }\r\n const text = self.text;\r\n if (text && (value === Button.variant.ICON || value === Button.variant.MINIMAL || value === Button.variant.LINK)) {\r\n self.#button.setAttribute('title', text);\r\n }\r\n else {\r\n self.#button.removeAttribute('title');\r\n }\r\n }\r\n\r\n get text() {\r\n return this.getAttribute('text');\r\n }\r\n\r\n set text(value) {\r\n const self = this;\r\n self.#button.innerHTML = value ?? '';\r\n if (value) {\r\n self.setAttribute('text', value);\r\n }\r\n else {\r\n self.removeAttribute('text');\r\n }\r\n const variant = self.variant;\r\n if (variant === Button.variant.ICON || variant === Button.variant.MINIMAL || variant === Button.variant.LINK) {\r\n if (value) {\r\n self.#button.setAttribute('title', value);\r\n }\r\n else {\r\n self.#button.removeAttribute('title');\r\n }\r\n }\r\n }\r\n\r\n get iconText() {\r\n return this.getAttribute('icon-text');\r\n }\r\n\r\n #setDataValue(name, value) {\r\n const self = this;\r\n if (value) {\r\n self.#button.setAttribute('data-' + name, value);\r\n self.setAttribute(name, value);\r\n }\r\n else {\r\n delete self.#button.removeAttribute('data-' + name);\r\n self.removeAttribute(name);\r\n }\r\n }\r\n\r\n set iconText(value) {\r\n const self = this;\r\n self.#setDataValue('icon-text', value);\r\n }\r\n\r\n get icon() {\r\n return this.getAttribute('icon');\r\n }\r\n\r\n set icon(value) {\r\n const self = this;\r\n self.#setDataValue('icon', value);\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('disabled', boolValue);\r\n self.#button.disabled = boolValue;\r\n }\r\n\r\n get active() {\r\n return this.hasAttribute('active');\r\n }\r\n\r\n set active(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('active', boolValue);\r\n self.#button.classList.toggle('active', boolValue);\r\n }\r\n}\r\n\r\nif (!customElements.get(elementName)) {\r\n Component.preloadStyle(elementName);\r\n customElements.define(elementName, Button);\r\n}\r\nexport default Button;","import TC from '../../TC';\r\n\r\nconst elementName = 'sitna-component';\r\n\r\nclass Component extends HTMLElement {\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.attachShadow({ mode: 'open' });\r\n const link = document.createElement('link');\r\n link.setAttribute('rel', 'stylesheet');\r\n link.href = `${Component.#getStylePath()}${self.elementName}.css`;\r\n self.shadowRoot.appendChild(link);\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n static #getStylePath() {\r\n return `${TC.apiLocation}css/ui/`;\r\n }\r\n\r\n static preloadStyle(elmName) {\r\n if (globalThis.document) {\r\n const link = document.createElement('link');\r\n link.setAttribute('rel', 'preload');\r\n link.setAttribute('as', 'style');\r\n link.href = `${Component.#getStylePath()}${elmName}.css`;\r\n document.head.appendChild(link);\r\n }\r\n }\r\n}\r\n\r\nexport default Component;","import Component from './Component';\r\n\r\nconst elementName = \"sitna-toggle\";\r\n\r\nclass Toggle extends Component {\r\n\r\n #checkbox;\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.#checkbox = document.createElement('input');\r\n self.#checkbox.setAttribute('type', 'checkbox');\r\n self.#checkbox.addEventListener('change', function (_e) {\r\n self.checked = self.#checkbox.checked;\r\n const event = new Event('change', { bubbles: true });\r\n self.dispatchEvent(event);\r\n });\r\n self.shadowRoot.appendChild(self.#checkbox);\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.text = self.text;\r\n self.checked = self.checked;\r\n self.checkedIconText = self.checkedIconText;\r\n self.uncheckedIconText = self.uncheckedIconText;\r\n self.disabled = self.disabled;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['text', 'disabled', 'checked', 'checked-icon-text', 'unchecked-icon-text'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'disabled') {\r\n self.disabled = self.disabled;\r\n }\r\n else if (name === 'checked') {\r\n self.checked = self.checked;\r\n }\r\n if (oldValue !== newValue) {\r\n if (name === 'text') {\r\n self.text = newValue;\r\n }\r\n if (name === 'checked-icon-text') {\r\n self.checkedIconText = newValue;\r\n }\r\n if (name === 'unchecked-icon-text') {\r\n self.uncheckedIconText = newValue;\r\n }\r\n }\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n get text() {\r\n return this.getAttribute('text');\r\n }\r\n\r\n set text(value) {\r\n const self = this;\r\n self.#checkbox.setAttribute('title', value);\r\n self.setAttribute('text', value);\r\n }\r\n\r\n get checkedIconText() {\r\n return this.getAttribute('checked-icon-text');\r\n }\r\n\r\n get uncheckedIconText() {\r\n return this.getAttribute('unchecked-icon-text');\r\n }\r\n\r\n #setDataValue(name, value) {\r\n const self = this;\r\n if (value) {\r\n self.#checkbox.setAttribute('data-' + name, value);\r\n self.setAttribute(name, value);\r\n }\r\n else {\r\n delete self.#checkbox.removeAttribute('data-' + name);\r\n self.removeAttribute(name);\r\n }\r\n }\r\n\r\n set checkedIconText(value) {\r\n const self = this;\r\n self.#setDataValue('checked-icon-text', value);\r\n }\r\n\r\n set uncheckedIconText(value) {\r\n const self = this;\r\n self.#setDataValue('unchecked-icon-text', value);\r\n }\r\n\r\n get checked() {\r\n return this.hasAttribute('checked');\r\n }\r\n\r\n set checked(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('checked', boolValue);\r\n self.#checkbox.checked = boolValue;\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('disabled', boolValue);\r\n self.#checkbox.disabled = boolValue;\r\n }\r\n}\r\n\r\nif (!customElements.get(elementName)) {\r\n Component.preloadStyle(elementName);\r\n customElements.define(elementName, Toggle);\r\n}\r\nexport default Toggle;","import Consts from './TC/Consts';\r\nimport loadjs from 'loadjs';\r\nimport proj4 from 'proj4';\r\n\r\nvar TC = TC || {};\r\n\r\n(function () {\r\n if (!TC.apiLocation) {\r\n if (typeof SITNA_BASE_URL !== \"undefined\") {\r\n // Obtenemos la URL base de la configuración SITNA_BASE_URL (necesario para usar como paquete npm)\r\n TC.apiLocation = SITNA_BASE_URL;\r\n if (!TC.apiLocation.endsWith('/')) {\r\n TC.apiLocation = TC.apiLocation + '/';\r\n }\r\n }\r\n else {\r\n // Obtenemos la URL base de la dirección del script\r\n const script = document.currentScript;\r\n const src = script.getAttribute('src');\r\n TC.apiLocation = src.substr(0, src.lastIndexOf('/') + 1);\r\n globalThis.SITNA_BASE_URL = TC.apiLocation;\r\n }\r\n }\r\n})();\r\n\r\nTC.control = {};\r\nTC.capabilities = {};\r\nTC.capabilitiesWFS = {};\r\nTC.describeFeatureType = {};\r\nTC.tool = {};\r\n\r\nTC.cache = {};\r\n\r\nif (typeof TC.isDebug !== \"boolean\") {\r\n TC.isDebug = true;\r\n}\r\n\r\nTC.alert = function (text) {\r\n alert(text);\r\n};\r\n\r\nTC.prompt = function (text, value, callback) {\r\n var newValue = prompt(text, value);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(newValue);\r\n }\r\n};\r\n\r\nTC.confirm = function (text, accept, cancel) {\r\n if (confirm(text)) {\r\n if (TC.Util.isFunction(accept)) {\r\n accept();\r\n }\r\n }\r\n else {\r\n if (TC.Util.isFunction(cancel)) {\r\n cancel();\r\n }\r\n }\r\n};\r\n\r\nTC.error = function (text) {\r\n if (window.console) {\r\n console.error(text);\r\n }\r\n};\r\n\r\n/* \r\n * proxify: returns cross-origin safe URL\r\n */\r\nTC.proxify = function (url) {\r\n url = url.trim();\r\n var result = url;\r\n const cfgProxy = window.TC.Cfg.proxy;\r\n if (cfgProxy) {\r\n var prevent = false;\r\n const cfgProxyExceptions = window.TC.Cfg.proxyExceptions;\r\n if (cfgProxyExceptions) {\r\n for (var i = 0; i < cfgProxyExceptions.length; i++) {\r\n if (url.indexOf(cfgProxyExceptions[i]) > -1) {\r\n prevent = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!prevent && !TC.Util.isSameOrigin(url)) {\r\n if (typeof cfgProxy === \"function\") {\r\n result = cfgProxy(url);\r\n } else {\r\n result = cfgProxy;\r\n if (url.substr(0, 4) !== \"http\") result += window.location.protocol;\r\n result += encodeURIComponent(url);\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nconst getHead = function () {\r\n var result;\r\n var d = document;\r\n var ah = d.getElementsByTagName(\"head\");\r\n if (ah.length === 0) {\r\n result = d.createElement(\"head\");\r\n d.documentElement.insertBefore(result, document.body);\r\n }\r\n else {\r\n result = ah[0];\r\n }\r\n return result;\r\n};\r\n\r\nvar _showLoadFailedError = function (url) {\r\n let stack = \"\";\r\n try {\r\n throw new Error();\r\n } catch (error) {\r\n stack = error && error.stack ? error.stack : error.toString();\r\n }\r\n\r\n const mapObj = TC.Map.get(document.querySelector('.' + Consts.classes.MAP));\r\n const subject = \"Error al cargar \" + url;\r\n const body = TC.Util.getLocaleString(mapObj ? mapObj.options.locale : 'es-ES', \"urlFailedToLoad\", { url: url });\r\n\r\n // tostada sin la pila\r\n TC.error(\r\n body,\r\n [Consts.msgErrorMode.TOAST],\r\n subject);\r\n // email con pila\r\n TC.error(\r\n `${body}. Pila de la llamada al recurso: \r\n${stack && stack.length > 0 ? stack : \"\"}`,\r\n [Consts.msgErrorMode.EMAIL],\r\n subject);\r\n};\r\n\r\nTC.syncLoadJS = function (url) {\r\n var _sendRequest = function (url, callbackErrorFn) {\r\n var req = new XMLHttpRequest();\r\n req.open(\"GET\", url, false); // 'false': synchronous.\r\n var result;\r\n\r\n req.onreadystatechange = function (_e) {\r\n if (req.readyState === 4) {\r\n if (req.status === 404) {\r\n result = false;\r\n callbackErrorFn(true);\r\n } else if (req.status !== 200) {\r\n callbackErrorFn();\r\n result = false;\r\n } else {\r\n result = req.responseText;\r\n }\r\n }\r\n };\r\n\r\n\r\n try {\r\n req.send(null);\r\n } catch (error) {\r\n result = false;\r\n callbackErrorFn();\r\n }\r\n\r\n return result;\r\n };\r\n\r\n if (!/(\\.js|\\/)$/i.test(url)) { // Si pedimos un archivo sin extensión se la ponemos según el entorno\r\n url = url + (TC.isDebug ? '.js' : '.min.js');\r\n }\r\n\r\n var reqResult = _sendRequest(url, function (is404) {\r\n if (is404) {\r\n _showLoadFailedError(url);\r\n return false;\r\n } else {\r\n return _sendRequest(url, function () {\r\n _showLoadFailedError(url);\r\n });\r\n }\r\n });\r\n\r\n if (reqResult) {\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.text = reqResult;\r\n getHead().appendChild(script);\r\n }\r\n};\r\n\r\nTC.loadJSInOrder = function (condition, url, callback) {\r\n return TC.loadJS(condition, url, callback, true);\r\n};\r\n\r\nconst addCrossOriginAttr = function (path, scriptEl) {\r\n if (!TC.Util.isSameOrigin(path)) {\r\n scriptEl.crossOrigin = \"anonymous\";\r\n }\r\n};\r\n\r\nTC.loadJS = function (condition, url, callback, inOrder=false, notCrossOrigin) {\r\n return new Promise(function (resolve, _reject) {\r\n const endFn = function () {\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n };\r\n\r\n var urls = Array.isArray(url) ? url : [url];\r\n urls = urls.map(function (elm) {\r\n if (!/\\.js$/i.test(elm) && elm.indexOf(TC.apiLocation) === 0) { // Si pedimos un archivo sin extensión y es nuestro se la ponemos según el entorno\r\n return elm + (TC.isDebug ? '.js' : '.min.js');\r\n }\r\n return elm;\r\n });\r\n\r\n if (condition) {\r\n urls = urls instanceof Array ? urls : [urls];\r\n\r\n var name = \"\";\r\n const getName = function (path) {\r\n return path.split('/').reverse().slice(0, 2).reverse().join('_').toLowerCase();\r\n };\r\n if (urls.length > 1) {\r\n var toReduce = urls.slice(0).filter(function (path, index) {\r\n if (loadjs.isDefined(getName(path))) {\r\n urls.splice(index, 1);\r\n loadjs.ready(getName(path), endFn);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n if (toReduce.length === 1) {\r\n name = getName(toReduce[0]);\r\n } else if (toReduce.length > 0) {\r\n name = toReduce.reduce(function (prev, curr) {\r\n return getName(prev) + \"_\" + getName(curr);\r\n });\r\n }\r\n } else {\r\n name = getName(urls[0]);\r\n }\r\n\r\n if (name.length > 0) {\r\n if (!loadjs.isDefined(name)) {\r\n var options = {\r\n async: !inOrder,\r\n numRetries: 1\r\n };\r\n\r\n if (!notCrossOrigin && !TC.Util.detectIE()) {\r\n options.before = addCrossOriginAttr;\r\n }\r\n\r\n loadjs(urls, name, options);\r\n loadjs.ready(name, {\r\n success: function () {\r\n endFn();\r\n },\r\n error: function (pathsNotFound) {\r\n _showLoadFailedError(pathsNotFound);\r\n }\r\n });\r\n } else {\r\n // Esto vuelve a añadir el script al head si se está pidiendo un script cargado previamente.\r\n //urls.forEach(function (url) {\r\n // const urlObj = new URL(url, location.href);\r\n // const script = Array.from(document.scripts).filter((scr) => scr.src === urlObj.href)[0];\r\n // if (script) {\r\n // document.head.appendChild(script.cloneNode());\r\n // }\r\n //});\r\n loadjs.ready(name, endFn);\r\n }\r\n }\r\n }\r\n else {\r\n endFn();\r\n }\r\n });\r\n};\r\n\r\nTC.loadCSS = function (url) {\r\n const getName = function (path) {\r\n return path.split('/').reverse().slice(0, 2).reverse().join('_').toLowerCase();\r\n };\r\n\r\n const name = getName(url);\r\n if (!loadjs.isDefined(name)) {\r\n loadjs(url, name, {\r\n error: function (pathsNotFound) {\r\n _showLoadFailedError(pathsNotFound);\r\n },\r\n numRetries: 1\r\n });\r\n } else {\r\n loadjs.ready(name, {});\r\n }\r\n};\r\n\r\n// Transformación de petición AJAX de jQuery a promesa nativa\r\nTC.ajax = function (options) {\r\n return new Promise(function (resolve, reject) {\r\n options = options || {};\r\n const method = options.method || 'GET';\r\n const isGET = method === 'GET';\r\n var data;\r\n if (options.data) {\r\n if (typeof options.data === 'string') {\r\n data = options.data;\r\n }\r\n else if (typeof options.data === 'object') {\r\n if (isGET && (options.contentType || typeof options.contentType === 'boolean')) {\r\n data = TC.Util.getParamString(options.data);\r\n } else {\r\n const paramArray = [];\r\n for (var key in options.data) {\r\n paramArray.push(key + '=' + options.data[key].toString());\r\n }\r\n data = paramArray.join('&');\r\n }\r\n }\r\n }\r\n var url = options.url;\r\n if (isGET && data) {\r\n url = url + '?' + data;\r\n }\r\n if (options.cache === false) {\r\n url += (url.indexOf('?') < 0 ? '?' : '&') + 'ts=' + Date.now();\r\n }\r\n\r\n const fetchOptions = {\r\n method: method,\r\n headers: new Headers()\r\n };\r\n if (options.contentType || typeof options.contentType === 'boolean') {\r\n if (options.contentType) {\r\n fetchOptions.headers.append('Content-Type', options.contentType + '; charset=UTF-8');\r\n }\r\n }\r\n else {\r\n fetchOptions.headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\r\n }\r\n if (method === 'POST') {\r\n fetchOptions.body = data;\r\n }\r\n\r\n fetch(url, fetchOptions)\r\n .then(async response => {\r\n if (response.ok) {\r\n try {\r\n let responseData;\r\n switch (options.responseType) {\r\n case Consts.mimeType.JSON:\r\n //URI: Compruebo que la respuesta no es un XML de excepción\r\n responseData = await response.json();\r\n break;\r\n case Consts.mimeType.XML:\r\n responseData = await response.text();\r\n responseData = new DOMParser().parseFromString(responseData, 'application/xml');\r\n break;\r\n default:\r\n responseData = await response.text();\r\n break;\r\n }\r\n resolve({ data: responseData, contentType: response.headers.get(\"Content-type\") });\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else {\r\n reject({\r\n status: response.status,\r\n msg: response.statusText,\r\n url: url\r\n });\r\n }\r\n })\r\n .catch(err => reject(err));\r\n });\r\n};\r\n\r\nvar projectionDataCache = {};\r\n\r\nTC.getProjectionData = async function (options) {\r\n options = options || {};\r\n const crs = options.crs || '';\r\n const match = crs.match(/\\d{4,5}$/g);\r\n let code = match ? match[0] : '';\r\n const url = Consts.url.EPSG + '?format=json&q=' + code;\r\n let projData = projectionDataCache[code];\r\n if (projData) {\r\n if (options.sync) {\r\n return projData;\r\n }\r\n return Promise.resolve(projData);\r\n }\r\n if (options.sync) {\r\n let result;\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = function (_e) {\r\n if (xhr.readyState == 4) {\r\n if (xhr.status == 404) {\r\n result = false;\r\n } else if (xhr.status != 200) {\r\n result = false;\r\n } else {\r\n result = xhr.responseText;\r\n }\r\n }\r\n };\r\n xhr.open('GET', url, false);\r\n\r\n try {\r\n xhr.send(null);\r\n } catch (error) {\r\n result = false;\r\n }\r\n if (result) {\r\n result = JSON.parse(result);\r\n }\r\n return result;\r\n }\r\n\r\n if (!TC.tool.Proxification) {\r\n TC.tool.Proxification = (await import('./TC/tool/Proxification')).default;\r\n }\r\n\r\n const proxificationTool = new TC.tool.Proxification(TC.proxify);\r\n const data = await proxificationTool.fetchJSON(url, options);\r\n projectionDataCache[code] = data;\r\n return data;\r\n};\r\n\r\nTC.loadProjDef = function (options) {\r\n options = options || {};\r\n const crs = options.crs;\r\n const epsgPrefix = 'EPSG:';\r\n const urnPrefix = 'urn:ogc:def:crs:EPSG::';\r\n const urnxPrefix = 'urn:x-ogc:def:crs:EPSG:';\r\n const ogcHttpUrlPrefix = 'http://www.opengis.net/gml/srs/epsg.xml#';\r\n const ogcHttpUriPrefix = 'http://www.opengis.net/def/crs/EPSG/0/';\r\n\r\n const fromHTTPURIToURN = function (name) {\r\n var match = /http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/\\d\\/(\\d{4,5})/.exec(name);\r\n if (match && match.length === 2) {\r\n return urnPrefix + match[1];\r\n }\r\n\r\n return name;\r\n };\r\n\r\n var getDef;\r\n getDef = function (name) {\r\n name = fromHTTPURIToURN(name);\r\n return proj4.defs(name);\r\n };\r\n const isFunction = function (obj) {\r\n return typeof obj === 'function';\r\n };\r\n const loadDef = function (code, def, name) {\r\n // Lista sacada de https://docs.geoserver.org/stable/en/user/services/wfs/webadmin.html#gml\r\n const epsgCode = epsgPrefix + code;\r\n const urnCode = urnPrefix + code;\r\n const urnxCode = urnxPrefix + code;\r\n const ogcHttpUrlCode = ogcHttpUrlPrefix + code;\r\n const ogcHttpUriCode = ogcHttpUriPrefix + code;\r\n var axisUnawareDef;\r\n if (typeof def === 'object') {\r\n axisUnawareDef = TC.Util.extend({}, def);\r\n def = TC.Util.extend({}, def);\r\n if (axisUnawareDef.axis) {\r\n delete axisUnawareDef.axis;\r\n }\r\n }\r\n else if (typeof def === 'string') {\r\n axisUnawareDef = def.replace('+axis=neu', '');\r\n }\r\n proj4.defs(epsgCode, def);\r\n proj4.defs(urnCode, def);\r\n proj4.defs(urnxCode, def);\r\n // Por convención, los CRS definidos por URL siempre tienen orden de coordenadas X-Y.\r\n proj4.defs(ogcHttpUrlCode, axisUnawareDef);\r\n proj4.defs(ogcHttpUriCode, def);\r\n if (crs.indexOf(ogcHttpUrlPrefix) === 0) {\r\n // El CRS es tipo URL, usado seguramente en un GML.\r\n proj4.defs(crs, axisUnawareDef);\r\n getDef(crs).name = name;\r\n }\r\n if (window.ol && ol.proj && !options.silent) {\r\n // https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html\r\n ol.proj.proj4.register(proj4);\r\n }\r\n getDef(epsgCode).name = name;\r\n getDef(ogcHttpUrlCode).name = name;\r\n getDef(ogcHttpUriCode).name = name;\r\n };\r\n const loadDefResponse = function (data) {\r\n const result = data && data.status === 'ok' && data.number_result === 1;\r\n if (result) {\r\n var def = data.results[0];\r\n loadDef(def.code, def.proj4, def.name);\r\n }\r\n return result;\r\n };\r\n\r\n var idx = crs.lastIndexOf('#');\r\n if (idx < 0) {\r\n idx = crs.lastIndexOf('/');\r\n }\r\n if (idx < 0) {\r\n idx = crs.lastIndexOf(':');\r\n }\r\n var code = crs.substr(idx + 1);\r\n var def = getDef(crs);\r\n if (def) {\r\n loadDef(code, def, options.name);\r\n if (isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n else {\r\n if (options.def) {\r\n loadDef(code, options.def, options.name);\r\n if (isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n else {\r\n const loadDataAndExecCallback = function (data) {\r\n if (loadDefResponse(data) && isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n };\r\n if (options.sync) {\r\n const data = TC.getProjectionData(options);\r\n loadDataAndExecCallback(data);\r\n }\r\n else {\r\n TC.getProjectionData(options).then(loadDataAndExecCallback).catch(e => console.error(e));\r\n }\r\n }\r\n }\r\n};\r\n\r\nTC.inherit = function (childCtor, parentCtor) {\r\n childCtor.prototype = Object.create(parentCtor.prototype);\r\n childCtor.prototype.constructor = childCtor;\r\n childCtor._super = parentCtor.prototype;\r\n};\r\n\r\nTC.mix = function (targetCtor, ...mixins) {\r\n Object.assign(targetCtor.prototype, ...mixins);\r\n};\r\n\r\nconst uids = new Map();\r\nTC.getUID = function (options) {\r\n const opts = options || {};\r\n const prefix = opts.prefix || '';\r\n let value = uids.get(prefix);\r\n if (!value) {\r\n value = 1;\r\n }\r\n var result = prefix + value;\r\n uids.set(prefix, value + 1);\r\n if (opts.banlist && opts.banlist.includes(result)) {\r\n return TC.getUID(options);\r\n }\r\n return result;\r\n};\r\n\r\nTC.setUIDStart = function (count, options) {\r\n const opts = options || {};\r\n const prefix = opts.prefix || '';\r\n let currentValue = uids.get(prefix);\r\n if (!currentValue) {\r\n currentValue = 1;\r\n }\r\n if (count > currentValue) {\r\n uids.set(prefix, count);\r\n return count;\r\n }\r\n return currentValue;\r\n};\r\n\r\nconst prefixes = ['', '-webkit-', '-moz-', '-o-', '-ms-'];\r\nconst randomText = ':-)';\r\nconst urlString = 'http://sitna.tracasa.es/';\r\nvar touch;\r\nvar inputTypeColor;\r\nvar urlParser;\r\nconst browserFeatures = {\r\n touch: function () {\r\n if (touch === undefined) {\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {\r\n touch = true;\r\n return true;\r\n }\r\n const query = prefixes\r\n .map(function (prefix) { return '(' + prefix + 'touch-enabled)'; })\r\n .join();\r\n touch = matchMedia(query).matches;\r\n }\r\n return touch;\r\n },\r\n inputTypeColor: function () {\r\n if (inputTypeColor === undefined) {\r\n const elm = document.createElement('input');\r\n elm.setAttribute('type', 'color');\r\n inputTypeColor = elm.type !== 'text' && 'style' in elm;\r\n if (inputTypeColor) {\r\n elm.value = randomText;\r\n inputTypeColor = elm.value !== randomText;\r\n }\r\n }\r\n return inputTypeColor;\r\n },\r\n urlParser: function () {\r\n if (urlParser === undefined) {\r\n try {\r\n // have to actually try use it, because Safari defines a dud constructor\r\n const url = new URL(urlString);\r\n urlParser = url.href === urlString;\r\n } catch (e) {\r\n urlParser = false;\r\n }\r\n }\r\n return urlParser;\r\n }\r\n};\r\nTC.browserFeatures = browserFeatures;\r\n\r\nconst pluses = /\\+/g;\r\nfunction raw(s) {\r\n return s;\r\n}\r\nfunction decoded(s) {\r\n return decodeURIComponent(s.replace(pluses, ' '));\r\n}\r\n\r\nTC.cookie = function (key, value, options) {\r\n\r\n // key and at least value given, set cookie...\r\n if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null)) {\r\n options = TC.Util.extend({}, options);\r\n\r\n if (value === null) {\r\n options.expires = -1;\r\n }\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setDate(t.getDate() + days);\r\n }\r\n\r\n value = String(value);\r\n\r\n return (document.cookie = [\r\n encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),\r\n options.expires ? ';expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? ';path=' + options.path : '',\r\n options.domain ? ';domain=' + options.domain : '',\r\n options.secure ? ';secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // key and possibly options given, get cookie...\r\n options = value || {};\r\n var decode = options.raw ? raw : decoded;\r\n var cookies = document.cookie.split('; ');\r\n for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) {\r\n if (decode(parts.shift()) === key) {\r\n return decode(parts.join('='));\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport default TC;\r\nexport { browserFeatures };","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport Util from './Util';\r\n\r\nTC.Util = Util;\r\n\r\n/**\r\n * Opciones de configuración del mapa. Para más información de como usar objetos de este tipo, consultar {@tutorial 2-configuration}.\r\n * @typedef MapOptions\r\n * @memberof SITNA\r\n * @see 2-configuration\r\n * @property {LayerOptions[]|string[]} [baseLayers=[SITNA.Consts.layer.IDENA_BASEMAP]{@link SITNA.Consts}, \r\n * [SITNA.Consts.layer.IDENA_ORTHOPHOTO]{@link SITNA.Consts}, [SITNA.Consts.layer.IDENA_CADASTER]{@link SITNA.Consts}, \r\n * [SITNA.Consts.layer.IDENA_CARTO]{@link SITNA.Consts}] - Lista con cualquier combinación de objetos de definición de capa o de identificadores de capas de la API SITNA\r\n * (miembros de [SITNA.Consts.layer]{@link SITNA.Consts}) para incluir dichas capas como mapas de fondo.\r\n * @property {SITNA.control.MapControlOptions} [controls] - Opciones de controles de mapa, define qué controles se incluyen en un mapa y qué opciones se pasan a cada control. \r\n * @property {string} [crossOrigin] - Valor del atributo `crossorigin` de las imágenes del mapa para habilitar CORS. Es necesario establecer esta opción para poder utilizar el método {@link SITNA.Map#exportImage}.\r\n *\r\n * Los valores soportados son `anonymous` y `use-credentials`. Para más información, consulte [la documentación de MDN Web Docs](https://developer.mozilla.org/es/docs/Web/HTML/CORS_enabled_image).\r\n * @property {string} [crs=[\"EPSG:25830\"]{@link https://epsg.io/25830}] - Código EPSG del sistema de referencia de coordenadas del mapa.\r\n * @property {string} [defaultBaseLayer=[SITNA.Consts.layer.IDENA_BASEMAP]{@link SITNA.Consts}] - Identificador de la capa base por defecto o índice de la capa base por defecto en la lista de capas base del mapa (Definida con la propiedad `baseLayers`).\r\n * @property {number[]} [initialExtent=[541084.221, 4640788.225, 685574.4632, 4796618.764]] - Extensión inicial del mapa definida por x mínima, y mínima, x máxima, y máxima, en las unidades del sistema de referencia de coordenadas del mapa (Ver propiedad `crs`). Por defecto la extensión es la de Navarra.\r\n * @property {string|SITNA.LayoutOptions} [layout=\"//sitna.navarra.es/api/layout/responsive\"] - URL de la carpeta de maquetación u objeto de opciones de maquetación. Para prescindir de maquetación, establecer esta propiedad a `null`. Para más información al respecto de esta propiedad,\r\n * consulte el tutorial {@tutorial layout_cfg}.\r\n * @property {string} [locale=\"es-ES\"] - Código de idioma de la interfaz de usuario. Este código debe obedecer la sintaxis definida por la IETF. Los valores posibles son `es-ES`, `eu-ES` y `en-US`.\r\n * @property {number[]|boolean} [maxExtent=false] - Extensión máxima del mapa definida por x mínima, y mínima, x máxima, y máxima, de forma que el centro del mapa nunca saldrá fuera de estos límites. \r\n * Estos valores deben estar en las unidades definidas por el sistema de referencia de coordenadas del mapa (Ver propiedad `crs`).\r\n *\r\n * Si en vez de un array el valor es `false`, el mapa no tiene limitada la extensión máxima.\r\n * @property {boolean} [mouseWheelZoom=true] - Si se establece a un valor verdadero, la rueda de scroll del ratón se puede utilizar para hacer zoom en el mapa.\r\n * @property {boolean} [stateful=false] - Si se establece a un valor verdadero, el mapa mantiene un historial de estados \r\n * añadiendo a la URL de la aplicación que lo contiene un código _hash_.\r\n * \r\n * Con esta opción activa, el mapa puede pasar al estado previo o siguiente con los botones de historial del navegador. Así mismo, si se recarga la página el mapa conservará el estado en el que se encontraba.\r\n * @property {number} [pixelTolerance=10] - Tolerancia en pixels a las consultas de información de capa.\r\n *\r\n * En ciertas capas, por ejemplo las que representan geometrías de puntos, puede ser difícil pulsar precisamente en el punto donde está la entidad geográfica que interesa.\r\n * \r\n * La propiedad `pixelTolerance` define un área de un número de pixels hacia cada lado del punto de pulsación, de forma que toda entidad geográfica que esté dentro de ese área, total o parcialmente, se incluye en el resultado de la consulta.\r\n * \r\n * Por ejemplo, si el valor establecido es 10, toda entidad geográfica que esté dentro de un cuadrado de 21 pixels de lado (10 pixels por cuadrante más el pixel central) \r\n * centrado en el punto de pulsación se mostrará en el resultado. A tener en cuenta: Esta propiedad establece el valor de los llamados *parámetros de vendedor* \r\n * que los servidores de mapas admiten para modificar el comportamiento de las peticiones `getFeatureInfo` del standard WMS. Pero este comportamiento puede ser modificado también por otras circunstancias, \r\n * como los estilos aplicados a las capas en el servidor.\r\n * \r\n * Como estas circunstancias están fuera del ámbito de alcance de esta API, es posible que los resultados obtenidos desde algún servicio WMS sean inesperados en lo referente a `pixelTolerance`.\r\n * @property {string} [proxy] - URL del proxy utilizado para peticiones a dominios remotos.\r\n * \r\n * Debido a restricciones de seguridad implementadas en Javascript, a través de `XMLHttpRequest` no es posible obtener información de dominios distintos al de la página web.\r\n * \r\n * Hay dos maneras de solventar esta restricción. La primera es que el servidor remoto permita el acceso entre dominios estableciendo la cabecera `Access-Control-Allow-Origin` a la respuesta HTTP. \r\n * Dado que esta solución la implementan terceras personas (los administradores del dominio remoto), no siempre es aplicable.\r\n * \r\n * La segunda solución es desplegar en el dominio propio un proxy. Un proxy es un servicio que recibe peticiones HTTP y las redirige a otra URL.\r\n * \r\n * Si la propiedad `proxy` está establecida, todas las peticiones a dominios remotos las mandará al proxy para que este las redirija. \r\n * De esta manera no infringimos las reglas de seguridad de JavaScript, dado que el proxy está alojado en el dominio propio.\r\n * @property {SITNA.layer.StyleOptions} [styles] - Opciones de estilo de las entidades geográficas.\r\n * @property {SITNA.MapViewOptions} [views] - Opciones de vistas de mapa, define qué vistas estarán disponibles para conmutar entre el mapa y las vistas adicionales configuradas aquí, y qué opciones se pasan a cada vista. Actualmente, únicamente existe la opción de configurar la vista `threed` que gestiona el control `threed` de {@link SITNA.control.MapControlOptions}.\r\n * @property {LayerOptions[]} [workLayers] - Lista de objetos de definición de capa para incluir dichas capas como contenido activo del mapa.\r\n */\r\n\r\nconst Defaults = (function () {\r\n\r\n var clusterRadii = {};\r\n var getClusterRadius = function (feature) {\r\n var count = feature.features.length;\r\n var result = clusterRadii[count];\r\n if (!result) {\r\n result = 2 + Math.round(Math.sqrt(count) * 5);\r\n clusterRadii[count] = result;\r\n }\r\n return result;\r\n };\r\n\r\n return {\r\n imageRatio: 1.05,\r\n proxy: '',\r\n acceptedBrowserVersions: [],\r\n\r\n crs: 'EPSG:25830',\r\n utmCrs: 'EPSG:25830',\r\n geoCrs: 'EPSG:4326',\r\n initialExtent: [541084.221, 4640788.225, 685574.4632, 4796618.764],\r\n maxExtent: false,\r\n baselayerExtent: [480408, 4599748, 742552, 4861892],\r\n resolutions: [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, .5, .25],\r\n pointBoundsRadius: 30,\r\n extentMargin: 0.2,\r\n mouseWheelZoom: true,\r\n attribution: 'SITNA',\r\n oldBrowserAlert: true,\r\n notifyApplicationErrors: false,\r\n loggingErrorsEnabled: true,\r\n maxErrorCount: 10,\r\n\r\n locale: 'es-ES',\r\n\r\n view: Consts.view.DEFAULT,\r\n\r\n screenSize: 27,\r\n pixelTolerance: 10, // Used in GFI requests\r\n maxResolutionError: 0.01, // Max error ratio to consider two resolutions equivalent\r\n\r\n toastDuration: 5000,\r\n\r\n averageTileSize: 31000,\r\n\r\n availableBaseLayers: [\r\n {\r\n id: Consts.layer.IDENA_BASEMAP,\r\n title: 'Mapa base',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830extended',\r\n layerNames: 'mapabase',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: true,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap.png',\r\n fallbackLayer: Consts.layer.IDENA_DYNBASEMAP,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_BASEMAP_GREY,\r\n title: 'Mapa base gris',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830extended',\r\n layerNames: 'mapaBaseGris',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap-grey.png',\r\n fallbackLayer: Consts.layer.IDENA_DYNBASEMAP_GREY,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO,\r\n title: 'Ortofoto máxima actualidad',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto_maxima_actualidad',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-orthophoto.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2022,\r\n title: 'Ortofoto 2022',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2022',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2022.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2022,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2021,\r\n title: 'Ortofoto 2021',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2021',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2021.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2021,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2020,\r\n title: 'Ortofoto 2020',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2020',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2020.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2020,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2019,\r\n title: 'Ortofoto 2019',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2019',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2019.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2019,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2018,\r\n title: 'Ortofoto 2018',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2018',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2018.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2018,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2017,\r\n title: 'Ortofoto 2017',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2017',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2017.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2017,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2014,\r\n title: 'Ortofoto 2014',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830reduced',\r\n layerNames: 'ortofoto2014',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2014.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2014,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_ORTHOPHOTO2012,\r\n title: 'Ortofoto 2012',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2012',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2012.jpg',\r\n fallbackLayer: Consts.layer.IDENA_DYNORTHOPHOTO2012,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_PAMPLONA_ORTHOPHOTO2020,\r\n title: 'Ortofoto comarca de Pamplona 2020',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830deep',\r\n layerNames: 'ortofotoPamplona2020',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho-pamplona2020.jpg',\r\n fallbackLayer: Consts.layer.IDENA_PAMPLONA_DYNORTHOPHOTO2020,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_CARTO,\r\n title: 'Cartografía topográfica',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830extended',\r\n layerNames: 'mapaTopografico',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-bta.png',\r\n fallbackLayer: Consts.layer.IDENA_DYNCARTO,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_PAMPLONA_CARTO,\r\n title: 'Cartografía topográfica Pamplona',\r\n type: Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830deep',\r\n layerNames: 'mapaTopograficoPamplona',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-topo-pamplona.jpg',\r\n fallbackLayer: Consts.layer.IDENA_PAMPLONA_DYNCARTO,\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_CADASTER,\r\n title: 'Catastro',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'catastro,regionesFronterizas',\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-cadaster.png',\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_BW_RELIEF,\r\n title: 'Relieve',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'IDENA:mapa_relieve_bn',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-relief_bw.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_BASEMAP_ORTHOPHOTO,\r\n title: 'Mapa base/ortofoto',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'mapaBase_orto',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-base_ortho.png',\r\n overviewMapLayer: Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNBASEMAP,\r\n title: 'Mapa base',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'mapaBase,regionesFronterizas',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap.png',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNBASEMAP_GREY,\r\n title: 'Mapa base gris',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'mapaBaseGris,regionesFronterizas',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap-grey.png',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO,\r\n title: 'Ortofoto máxima actualidad',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_maxima_actualidad',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-orthophoto.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2022,\r\n title: 'Ortofoto 2022',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2022',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2022.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2021,\r\n title: 'Ortofoto 2021',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2021',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2021.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2020,\r\n title: 'Ortofoto 2020',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2020',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2020.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2019,\r\n title: 'Ortofoto 2019',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2019',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2019.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2018,\r\n title: 'Ortofoto 2018',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2018',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2018.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2017,\r\n title: 'Ortofoto 2017',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2017',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2017.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2014,\r\n title: 'Ortofoto 2014',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2014',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2014.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNORTHOPHOTO2012,\r\n title: 'Ortofoto 2012',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2012',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho2012.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_PAMPLONA_DYNORTHOPHOTO2020,\r\n title: 'Ortofoto comarca de Pamplona 2020',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_500_Pamplona_2020',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-ortho-pamplona2020.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_DYNCARTO,\r\n title: 'Cartografía topográfica 2017',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'MTNa5_BTA',\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-bta.png',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IDENA_PAMPLONA_DYNCARTO,\r\n title: 'Cartografía topográfica Pamplona',\r\n type: Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'MTNa05_BTU_201',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-topo-pamplona.jpg',\r\n overviewMapLayer: Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_CARTO,\r\n type: Consts.layerType.WMTS,\r\n title: \"Cartografía raster \\r\\n (IGN ES)\",\r\n url: \"//www.ign.es/wmts/mapa-raster\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"MTN\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-carto_ign.png\",\r\n fallbackLayer: Consts.layer.IGN_ES_DYNCARTO,\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_BASEMAP,\r\n title: \"Callejero \\r\\n (IGN ES)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/ign-base\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"IGNBaseTodo\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-basemap_ign.png\",\r\n fallbackLayer: Consts.layer.IGN_ES_DYNBASEMAP,\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_BASEMAP_GREY,\r\n title: \"Callejero gris \\r\\n (IGN ES)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/ign-base\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"IGNBase-gris\",\r\n matrixSet: \"GoogleMapsCompatible\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-basemap_grey_ign.png\",\r\n fallbackLayer: Consts.layer.IGN_ES_DYNBASEMAP_GREY,\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_RELIEF,\r\n title: \"Relieve \\r\\n (IGN ES)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//servicios.idee.es/wmts/mdt\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"Relieve\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-relief_ign.jpg\",\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_ORTHOPHOTO,\r\n title: \"Ortofoto PNOA\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/pnoa-ma\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"OI.OrthoimageCoverage\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-orthophoto_pnoa.jpg\",\r\n fallbackLayer: Consts.layer.IGN_ES_DYNORTHOPHOTO,\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_LIDAR,\r\n title: \"Modelo digital LIDAR (IGN ES)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//wmts-mapa-lidar.idee.es/lidar\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"EL.GridCoverageDSM\",\r\n matrixSet: \"GoogleMapsCompatible\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-lidar_ign.jpg\",\r\n fallbackLayer: Consts.layer.IGN_ES_DYNLIDAR,\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_DYNBASEMAP,\r\n title: 'Callejero \\r\\n (IGN ES)',\r\n type: Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/ign-base',\r\n layerNames: 'IGNBaseTodo',\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap_ign.png',\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_DYNBASEMAP_GREY,\r\n title: 'Callejero gris \\r\\n (IGN ES)',\r\n type: Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/ign-base',\r\n layerNames: 'IGNBaseTodo-gris',\r\n thumbnail: TC.apiLocation + 'css/img/thumb-basemap_grey_ign.png',\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_DYNORTHOPHOTO,\r\n title: 'Ortofoto PNOA',\r\n type: Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/pnoa-ma',\r\n layerNames: 'OI.OrthoimageCoverage',\r\n thumbnail: TC.apiLocation + 'css/img/thumb-orthophoto_pnoa.jpg',\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_DYNCARTO,\r\n title: 'Cartografía raster \\r\\n (IGN ES)',\r\n type: Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/mapa-raster',\r\n layerNames: 'mtn_rasterizado',\r\n thumbnail: TC.apiLocation + 'css/img/thumb-carto_ign.png',\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_ES_DYNLIDAR,\r\n title: 'Modelo digital LIDAR (IGN ES)',\r\n type: Consts.layerType.WMS,\r\n url: '//wms-mapa-lidar.idee.es/lidar',\r\n layerNames: 'EL.GridCoverage',\r\n thumbnail: TC.apiLocation + \"css/img/thumb-lidar_ign.jpg\",\r\n overviewMapLayer: Consts.layer.IGN_ES_BASEMAP\r\n },\r\n /*{\r\n id: Consts.layer.IGN_FR_CARTO,\r\n title: \"Cartografía raster \\r\\n (IGN FR)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/njfzwf3vgc55gekk8ra4zezx/geoportail/wmts\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.MAPS\",\r\n matrixSet: \"PM\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-carto-fr-ign.png\",\r\n fallbackLayer: Consts.layer.IGN_FR_DYNCARTO,\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },*/\r\n {\r\n id: Consts.layer.IGN_FR_BASEMAP,\r\n title: \"Mapa base \\r\\n (IGN FR)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/wmts\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2\",\r\n matrixSet: \"PM\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-base-fr-ign.png\",\r\n fallbackLayer: Consts.layer.IGN_FR_DYNBASEMAP,\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_FR_RELIEF,\r\n title: \"Relieve \\r\\n (IGN FR)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/altimetrie/geoportail/wmts\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"ELEVATION.ELEVATIONGRIDCOVERAGE.SHADOW\",\r\n matrixSet: \"PM\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-estom-fr-ign.jpg\",\r\n fallbackLayer: Consts.layer.IGN_FR_DYNRELIEF,\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_FR_ORTHOPHOTO,\r\n title: \"Ortofoto \\r\\n (IGN FR)\",\r\n type: Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/wmts\",\r\n encoding: Consts.WMTSEncoding.KVP,\r\n layerNames: \"ORTHOIMAGERY.ORTHOPHOTOS\",\r\n matrixSet: \"PM\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-ortho-fr-ign.jpg\",\r\n fallbackLayer: Consts.layer.IGN_FR_DYNORTHOPHOTO,\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n /*{\r\n id: Consts.layer.IGN_FR_DYNCARTO,\r\n title: 'Cartografía raster \\r\\n (IGN FR)',\r\n type: Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/njfzwf3vgc55gekk8ra4zezx/geoportail/r/wms\",\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.MAPS\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-carto-fr-ign.png\",\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },*/\r\n {\r\n id: Consts.layer.IGN_FR_DYNBASEMAP,\r\n title: 'Mapa base \\r\\n (IGN FR)',\r\n type: Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/r/wms\",\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.PLANIGN\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-base-fr-ign.png\",\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_FR_DYNRELIEF,\r\n title: 'Relieve \\r\\n (IGN FR)',\r\n type: Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/altimetrie/geoportail/r/wms\",\r\n layerNames: \"ELEVATION.ELEVATIONGRIDCOVERAGE.SHADOW\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-estom-fr-ign.jpg\",\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.IGN_FR_DYNORTHOPHOTO,\r\n title: 'Ortofoto \\r\\n (IGN FR)',\r\n type: Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/r/wms\",\r\n layerNames: \"ORTHOIMAGERY.ORTHOPHOTOS\",\r\n thumbnail: TC.apiLocation + \"css/img/thumb-ortho-fr-ign.jpg\",\r\n ignoreProxification: true,\r\n overviewMapLayer: Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: Consts.layer.OSM,\r\n title: 'OSM',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/osm/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'osm',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-osm.png',\r\n overviewMapLayer: Consts.layer.OSM\r\n },\r\n {\r\n id: Consts.layer.OPENTOPOMAP,\r\n title: 'OpenTopoMap',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/opentopomap/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'opentopomap',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-opentopomap.png',\r\n overviewMapLayer: Consts.layer.OSM\r\n },\r\n {\r\n id: Consts.layer.CARTO_VOYAGER,\r\n title: 'CARTO Voyager',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'voyager',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-carto-voyager.png',\r\n overviewMapLayer: Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: Consts.layer.CARTO_LIGHT,\r\n title: 'CARTO light',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'light_all',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-carto-light.png',\r\n overviewMapLayer: Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: Consts.layer.CARTO_DARK,\r\n title: 'CARTO dark',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'dark_all',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-carto-dark.png',\r\n overviewMapLayer: Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: Consts.layer.MAPBOX_STREETS,\r\n title: 'Mapbox Streets',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/mapbox/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'streets',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-mapbox-streets.png',\r\n overviewMapLayer: Consts.layer.MAPBOX_STREETS\r\n },\r\n {\r\n id: Consts.layer.MAPBOX_SATELLITE,\r\n title: 'Mapbox Satellite',\r\n type: Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/mapbox/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'satellite',\r\n encoding: Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'css/img/thumb-mapbox-satellite.jpg',\r\n overviewMapLayer: Consts.layer.MAPBOX_STREETS\r\n },\r\n {\r\n id: Consts.layer.BLANK,\r\n title: 'Mapa en blanco',\r\n type: Consts.layerType.VECTOR\r\n }\r\n ],\r\n\r\n baseLayers: [\r\n Consts.layer.IDENA_BASEMAP,\r\n Consts.layer.IDENA_ORTHOPHOTO,\r\n Consts.layer.IDENA_CADASTER,\r\n Consts.layer.IDENA_CARTO\r\n ],\r\n\r\n defaultBaseLayer: Consts.layer.IDENA_BASEMAP,\r\n\r\n workLayers: [],\r\n\r\n\r\n /**\r\n * Opciones de vistas de mapa, define qué vistas estarán disponibles para conmutar entre el mapa y las vistas adicionales configuradas aquí, y qué opciones se pasan a cada vista. Actualmente, únicamente existe la opción de configurar la vista `threed` que gestiona el control `threed` de {@link SITNA.control.MapControlOptions}.\r\n * @typedef MapViewOptions\r\n * @memberof SITNA\r\n * @see SITNA.MapOptions\r\n * @property {SITNA.ThreeDViewOptions} [threeD] - Se establece un valor *truthy* con las opciones de la vista del mapa.\r\n * @example Definición objeto SITNA.MapViewOptions {@lang javascript}\r\n * { \r\n * threeD: { }\r\n * } \r\n * @example [Ver en vivo](../examples/cfg.ThreeDOptions.html) {@lang html}\r\n *
\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Espacio de nombres de los controles de la interfaz de usuario.\r\n * @namespace SITNA.control\r\n */\r\n\r\n /**\r\n * Opciones de controles de mapa, define qué controles se incluyen en un mapa y qué opciones se pasan a cada control.\r\n * @typedef MapControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.MapOptions\r\n * @property {boolean|SITNA.control.ControlOptions} [attribution=true] - Si se establece a un valor *truthy*, el mapa tiene atribución. \r\n * @property {boolean|SITNA.control.ControlOptions} [basemapSelector=false] - Si se establece a un valor *truthy*, el mapa tiene un selector de mapas de fondo.\r\n * @property {boolean|SITNA.control.ClickOptions} [click=false] - Si se establece a un valor *truthy*, el mapa tiene un control que gestiona los clics del usuario sobre su ventana de visualización.\r\n * La atribución es un texto superpuesto al mapa que actúa como reconocimiento de la procedencia de los datos que se muestran.\r\n * @property {boolean|SITNA.control.CoordinatesOptions} [coordinates=true] - Si se establece a un valor *truthy*, el mapa tiene un indicador de coordenadas y de sistema de referencia espacial.\r\n * @property {boolean|SITNA.control.DataLoaderOptions} [dataLoader=false] - Si se establece a un valor *truthy*, se muestra un control para añadir datos externos, en concreto servicios WMS y archivos locales de datos geográficos.\r\n * \r\n * Hay más información sobre el funcionamiento del control en la página de documentación de {@link DataLoaderOptions}.\r\n * @property {boolean|SITNA.control.TabContainerOptions} [download=false] - Si se establece a un valor *truthy*, el mapa tiene un control que permite descargar la imagen actual del mapa o las capas cargadas como un archivo de datos vectoriales.\r\n * Para llevar a cabo esta segunda operación, es necesario que las capas del mapa tengan asociado un servicio WFS al servicio WMS que muestra las entidades en el mapa (software como GeoServer realiza esto automáticamente).\r\n * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n * @property {boolean|SITNA.control.DrawMeasureModifyOptions} [drawMeasureModify=false] - Si se establece a un valor *truthy*, el mapa tiene un control para dibujar, medir y modificar geometrías en el mapa.\r\n * @property {boolean|SITNA.control.FeatureInfoOptions} [featureInfo=true] - Si se establece a un valor *truthy*, el mapa responde a los clics con un información de las capas cargadas de tipo WMS. Se usa para ello la petición `getFeatureInfo` del standard WMS.\r\n * @property {boolean|SITNA.control.ControlOptions} [fullScreen=false] - Si se establece a un valor *truthy*, el mapa incorpora un botón para activar el modo de pantalla completa.\r\n * @property {boolean|SITNA.control.GeolocationOptions} [geolocation=false] - Si se establece a un valor *truthy*, se muestra un control para geolocalizar y crear, visualizar y guardar rutas.\r\n * @property {boolean|SITNA.control.LayerCatalogOptions} [layerCatalog=false] - Si se establece a un valor *truthy*, se muestra un control para añadir capas de trabajo desde uno o varios servicios WMS.\r\n *\r\n * Este control se usa habitualmente en combinación con `workLayerManager`. Hay más información de cómo funcionan ambos controles en \r\n * la página de documentación de {@link LayerCatalogOptions}.\r\n * @property {boolean|SITNA.control.ControlOptions} [legend=false] - Si se establece a un valor *truthy*, el mapa tiene leyenda.\r\n * @property {boolean|SITNA.control.ControlOptions} [loadingIndicator=true] - Si se establece a un valor *truthy*, el mapa tiene un indicador de espera de carga.\r\n * @property {boolean|SITNA.control.ControlOptions} [measure=false] - Si se establece a un valor *truthy*, el mapa tiene un medidor de longitudes, áreas y perímetros.\r\n * @property {boolean|SITNA.control.MultiFeatureInfoOptions} [multiFeatureInfo=false] - Si se establece a un valor *truthy*, el mapa incluye un control que permite la\r\n * obtención de información de las entidades que se intersecan con puntos, líneas o polígonos dibujados por el usuario. Para líneas y polígonos, \r\n * es necesario que las capas del mapa tengan asociado un servicio WFS al servicio WMS que muestra las entidades en el mapa (software como GeoServer realiza esto automáticamente).\r\n * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n * @property {boolean|SITNA.control.ControlOptions} [navBar=false] - Si se establece a un valor *truthy*, el mapa tiene una barra de navegación con control de zoom.\r\n * @property {boolean|SITNA.control.OfflineMapMakerOptions} [offlineMapMaker=false] - Si se establece a un valor *truthy*, el mapa tiene un creador de mapas sin conexión para uso sin acceso a Internet.\r\n * \r\n * Hay más información sobre los requisitos necesarios para el correcto funcionamiento del control en la página de documentación de\r\n * {@link OfflineMapMakerOptions}.\r\n * @property {boolean|SITNA.control.OverviewMapOptions} [overviewMap=false] - Si se establece a un valor *truthy*, el mapa tiene un mapa de situación.\r\n * @property {boolean|SITNA.control.ControlOptions} [popup=false] - Si se establece a un valor *truthy*, el mapa muestra los datos asociados a los marcadores cuando se pulsa sobre ellos.\r\n * @property {boolean|SITNA.control.PrintMapOptions} [printMap=false] - Si se establece a un valor *truthy*, se muestra una herramienta para imprimir el mapa en PDF.\r\n *\r\n * El control permite al usuario elegir entre varios tamaños de hoja y orientación horizontal o vertical, además se le puede poner un título al documento de impresión.\r\n * \r\n * Al pulsar el botón de imprimir se abre una previsualización como paso previo a la impresión. Ahí el usuario puede realizar unos últimos ajustes a la extensión del mapa.\r\n * \r\n * El PDF se generará al pulsar en el botón dentro de la previsualización.\r\n * @property {boolean|SITNA.control.ControlOptions} [scale=false] - Si se establece a un valor *truthy*, el mapa tiene un indicador numérico de escala.\r\n * @property {boolean|SITNA.control.ControlOptions} [scaleBar=false] - Si se establece a un valor *truthy*, el mapa tiene un indicador gráfico de escala.\r\n * @property {boolean|SITNA.control.ControlOptions} [scaleSelector=false] - Si se establece a un valor *truthy*, el mapa tiene un selector numérico de escala.\r\n * @property {boolean|SITNA.control.SearchOptions} [search=false] - Si se establece a un valor *truthy*, el mapa tiene un buscador.\r\n * El buscador localiza coordenadas y busca entidades geográficas tales como: municipios, cascos urbanos, vías, portales, topónimos, topónimos por municipio, carreteras, puntos kilométricos y parcelas catastrales de IDENA. \r\n * Es posible establecer un origen de datos distinto a IDENA en el que buscar, consultar en {@link SearchOptions}.\r\n * @property {boolean|SITNA.control.ControlOptions} [share=false] - Si se establece a un valor *truthy*, el mapa tiene un control para compartir mapas por distintos canales.\r\n * \r\n * Para que el control funcione correctamente, hay que establecer un valor verdadero a la opción `stateful` del mapa (Ver {@link SITNA.MapOptions}).\r\n * @property {boolean|SITNA.control.StreetViewOptions} [streetView=true] - Si se establece a un valor *truthy*, el usuario podrá abrir una ventana de Google StreetView en la ubicación seleccionada en el mapa.\r\n * @property {boolean} [threed=false] - Si se establece a true, el mapa incorpora un botón para conmutar entre las vistas 2D y 3D.\r\n * Este control requiere de la configuración adicional de una vista en la cual se renderizará la vista 3D, para ello se deben seguir los siguientes pasos:\r\n *\r\n * - Añadir en el marcado elemento del DOM en el cual renderizar la vista 3D.\r\n * - Establecer la propiedad `views` del mapa (Ver {@link SITNA.MapOptions}) indicando como valor un objeto con la estructura definida en {@link SITNA.MapViewOptions}.\r\n * - Establecer la propiedad `threeD` del objeto anterior configurando como valor un objeto siguiendo la estructura de {@link SITNA.ThreeDViewOptions}.\r\n * \r\n * @property {boolean|SITNA.control.ControlOptions} [TOC=false] - Si se establece a un valor *truthy*, el mapa tiene una tabla de contenidos mostrando las capas de trabajo y los grupos de marcadores.\r\n * Los controles `TOC` y `workLayerManager` realizan varias funciones comunes, así rara vez será necesario tener los dos a la vez en un visor.\r\n * @property {boolean|SITNA.control.WFSEditOptions} [WFSEdit=false] - Si se establece a un valor *truthy*, se añade un control para editar las entidades de las capas vectoriales de tipo [WFS]{@link SITNA.Consts} o de las\r\n * capas de tipo [WMS]{@link SITNA.Consts} si estas tienen asociado un servicio WFS. Con este control se pueden crear, modificar y eliminar entidades. Las modificaciones pueden ser de geometría o de atributos.\r\n * @property {boolean|SITNA.control.WFSQueryOptions} [WFSQuery=false] - Si se establece a un valor *truthy*, desde el control `workLayerManager` se pueden hacer consultas alfanuméricas a las capas del mapa.\r\n * @property {boolean|SITNA.control.ControlOptions} [workLayerManager=false] - Si se establece a un valor *truthy*, se muestra un control para consultar y gestionar las capas de trabajo que están cargadas en el mapa.\r\n * Con este control se dispone de las siguientes funcionalidades: \r\n * \r\n * - Consultar qué capas están cargadas en el mapa\r\n * - Ver en qué orden están superpuestas y modificar ese orden\r\n * - Comprobar si una capa es visible al nivel de zoom actual\r\n * - Activar y desactivar la visibilidad de las capas\r\n * - Establecer el grado de transparencia de cada capa\r\n * - Borrar capas cargadas\r\n * - Consultar metadatos asociados a la capa\r\n * - Si está también el control `WFSQuery`, ejecutar consultas alfanuméricas sobre las capas cargadas en el mapa, si cuentan con un servicio WFS pareado al WMS.\r\n * \r\n * Los controles `workLayerManager` y `TOC` realizan varias funciones comunes, así rara vez será necesario tener los dos a la vez en un visor.\r\n * @example Ejemplo de uso de propiedad `featureInfo` - [Ver en vivo](../examples/cfg.MapControlOptions.featureInfo.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `fullScreen` - [Ver en vivo](../examples/cfg.MapControlOptions.fullScreen.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `printMap` - [Ver en vivo](../examples/cfg.MapControlOptions.printMap.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `share` - [Ver en vivo](../examples/cfg.MapControlOptions.share.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `workLayerManager` - [Ver en vivo](../examples/cfg.MapControlOptions.workLayerManager.html) {@lang html}\r\n *
\r\n * \r\n */\r\n controls: {\r\n loadingIndicator: true,\r\n navBar: false,\r\n scaleBar: false,\r\n scale: false,\r\n scaleSelector: false,\r\n overviewMap: false,\r\n basemapSelector: false,\r\n attribution: true,\r\n TOC: false,\r\n workLayerManager: false,\r\n layerCatalog: false,\r\n coordinates: true,\r\n legend: false,\r\n popup: false,\r\n search: {\r\n url: 'https://idena.navarra.es/ogc/wfs',\r\n allowedSearchTypes: {\r\n coordinates: {},\r\n municipality: {},\r\n urban: {},\r\n street: {},\r\n number: {},\r\n cadastral: {}\r\n }\r\n },\r\n measure: false,\r\n streetView: false,\r\n click: false,\r\n printMap: false,\r\n featureInfo: {\r\n active: true,\r\n persistentHighlights: true\r\n },\r\n featureTools: true\r\n },\r\n\r\n layout: null,\r\n /**\r\n * Opciones de estilo de trazo.\r\n * @typedef StrokeStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @property {string} [strokeColor] - Color de trazo de línea, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity] - Opacidad de trazo de línea, valor en el rango de 0 (tranparente) a 1 (opaco).\r\n * @property {number} [strokeWidth] - Anchura de trazo en píxeles del trazo de la línea.\r\n * @see SITNA.feature.PointStyleOptions\r\n * @see SITNA.feature.PolylineStyleOptions\r\n * @see SITNA.feature.PolygonStyleOptions\r\n */\r\n\r\n /**\r\n * Opciones de estilo de relleno.\r\n * @typedef FillStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @property {string} [fillColor] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity] - Opacidad de relleno, valor en el rango de 0 (tranparente) a 1 (opaco).\r\n * @see SITNA.feature.PointStyleOptions\r\n * @see SITNA.feature.PolygonStyleOptions\r\n */\r\n\r\n /**\r\n * Opciones de estilo de etiqueta.\r\n * @typedef LabelStyleOptions\r\n * @memberof SITNA.feature\r\n * @mixin\r\n * @property {string} [labelRotationKey] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva de la entidad geográfica.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva de la entidad geográfica, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @see SITNA.feature.PointStyleOptions\r\n * @see SITNA.feature.PolylineStyleOptions\r\n * @see SITNA.feature.PolygonStyleOptions\r\n */\r\n\r\n /**\r\n * Opciones de estilo de entidades geográficas.\r\n * @typedef StyleOptions\r\n * @memberof SITNA.layer\r\n * @property {SITNA.feature.PointStyleOptions} [point] - Opciones de estilo de punto.\r\n * @property {SITNA.feature.PolylineStyleOptions} [line] - Opciones de estilo de línea.\r\n * @property {SITNA.feature.PolygonStyleOptions} [polygon] - Opciones de estilo de polígono.\r\n * @property {SITNA.feature.MarkerStyleOptions} [marker] - Opciones de estilo de marcador (punto de mapa con icono).\r\n * @property {SITNA.layer.ClusterStyleOptions} [cluster] - Opciones de estilo de cluster de puntos. Consultar la propiedad `cluster` de {@link LayerOptions} para saber cómo mostrar clusters.\r\n * @property {SITNA.layer.HeatmapStyleOptions} [heatmap] - Opciones de estilo de mapa de calor.\r\n * @see SITNA.MapOptions\r\n * @see SITNA.control.WFSQueryOptions\r\n * @see SITNA.control.CadastralSearchOptions\r\n * @see SITNA.control.MunicipalitySearchOptions\r\n * @see SITNA.control.PostalAddressSearchOptions\r\n * @see SITNA.control.StreetSearchOptions\r\n * @see SITNA.control.UrbanAreaSearchOptions\r\n */\r\n styles: {\r\n point: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n radius: 6,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -16],\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n marker: {\r\n classes: [\r\n Consts.classes.MARKER + 1,\r\n Consts.classes.MARKER + 2,\r\n Consts.classes.MARKER + 3,\r\n Consts.classes.MARKER + 4,\r\n Consts.classes.MARKER + 5\r\n ],\r\n anchor: [.5, 1],\r\n width: 32,\r\n height: 32,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -32],\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n line: {\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n polygon: {\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n fillColor: '#000000',\r\n fillOpacity: 0.3,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n label: {\r\n strokeColor: '#ffffff',\r\n strokeWidth: 1,\r\n fillColor: '#000000'\r\n },\r\n cluster: {\r\n point: {\r\n fillColor: '#333366',\r\n fillOpacity: 0.6,\r\n radius: getClusterRadius,\r\n label: '${features.length}',\r\n fontColor: \"#ffffff\",\r\n fontSize: 9\r\n }\r\n },\r\n selection: {\r\n point: {\r\n fillColor: '#008000',\r\n fillOpacity: 0.5,\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n radius: 6,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -16],\r\n fontColor: '#000000',\r\n fontSize: 10,\r\n zIndex:1\r\n },\r\n line: {\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10,\r\n zIndex: 1\r\n },\r\n polygon: {\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n fillColor: '#000000',\r\n fillOpacity: .3,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10,\r\n zIndex: 1\r\n }\r\n },\r\n snapping: {\r\n point: {\r\n fillColor: '#00ffff',\r\n fillOpacity: 0.3,\r\n strokeColor: '#00ffff',\r\n strokeWidth: 2,\r\n radius: 6,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -16],\r\n fontColor: '#000000',\r\n fontSize: 10,\r\n zIndex: 1\r\n }\r\n }\r\n }\r\n };\r\n})();\r\n\r\n/**\r\n * Configuración general de la API. Cualquier llamada a un método o un constructor de la API sin parámetro de opciones toma las opciones de aquí. \r\n * Hay que tener en cuenta que el archivo config.json de una maquetación puede sobreescribir los valores por defecto de las propiedades de este espacio de nombres \r\n * (consultar el tutorial {@tutorial layout_cfg} para ver instrucciones de uso de maquetaciones).\r\n * @member Cfg\r\n * @type SITNA.MapOptions\r\n * @memberof SITNA\r\n * @example Configuración de capas base - [Ver en vivo](../examples/Cfg.baseLayers.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de CRS - [Ver en vivo](../examples/Cfg.crs.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de capas de trabajo - [Ver en vivo](../examples/Cfg.workLayers.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de uso de proxy {@lang javascript}\r\n * SITNA.Cfg.proxy = \"\"; // Las peticiones a http://www.otrodominio.com se hacen directamente\r\n * \r\n * SITNA.Cfg.proxy = \"/cgi-bin/proxy.cgi?url=\"; // Las peticiones a http://www.otrodominio.com se convierten en peticiones a /cgi-bin/proxy.cgi?url=http://www.otrodominio.com\r\n */\r\nconst Cfg = TC.Util.extend(true, {}, Defaults);\r\n\r\nexport default Cfg;\r\nexport { Defaults };","/**\r\n * Dentro de este objeto estático se definen las constantes de utilidad que utiliza la API SITNA.\r\n * @member Consts\r\n * @memberof SITNA\r\n * @type object\r\n * @readonly\r\n * @property {object} format - Colección de tipos de formatos de archivo de utilidad.\r\n * @property {string} format.GEOJSON - Leer y escribir datos en formato GeoJSON.\r\n * @property {string} format.GEOPACKAGE - Leer y escribir datos en formato GeoPackage.\r\n * @property {string} format.GML - Leer y escribir datos en formato GML.\r\n * @property {string} format.GML2 - Leer y escribir datos en formato GML versión 2.\r\n * @property {string} format.GML3 - Leer y escribir datos en formato GML versión 3.\r\n * @property {string} format.GML32 - Leer y escribir datos en formato GML versión 3.2.\r\n * @property {string} format.GPX - Leer y escribir datos en formato GPX.\r\n * @property {string} format.JSON - Leer y escribir datos en formato JSON.\r\n * @property {string} format.KML - Leer y escribir datos en formato KML.\r\n * @property {string} format.KMZ - Leer y escribir datos en formato KMZ.\r\n * @property {string} format.SHAPEFILE - Leer y escribir datos en formato ShapeFile.\r\n * @property {string} format.TOPOJSON - Leer y escribir datos en formato TopoJSON.\r\n * @property {string} format.WKT - Leer y escribir datos en formato WKT.\r\n * @property {string} format.ZIP - Leer y escribir datos archivados en formato ZIP.\r\n * @property {object} geom - Colección de identificadores de tipo de geometría.\r\n * @property {string} geom.POINT - Identificador de geometría de tipo punto.\r\n * @property_ {string} geom.MULTIPOINT - Identificador de geometría de tipo multipunto.\r\n * @property {string} geom.POLYLINE - Identificador de geometría de tipo línea de varios segmentos.\r\n * @property_ {string} geom.MULTIPOLYLINE - Identificador de geometría lineal compuesta de líneas de varios segmentos.\r\n * @property {string} geom.POLYGON - Identificador de geometría de tipo polígono.\r\n * @property_ {string} geom.MULTIPOLYLINE - Identificador de geometría compuesta de polígonos.\r\n * @property_ {string} geom.CIRCLE - Identificador de geometría circular.\r\n * @property {object} layer - Colección de identificadores de capas útiles de IDENA y otros servicios de terceros.\r\n * @property {string} layer.BLANK - Identificador de una capa en blanco.\r\n * @property {string} layer.CARTO_DARK - Identificador de la capa de Carto Dark a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.CARTO_LIGHT - Identificador de la capa de Carto Light a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.CARTO_VOYAGER - Identificador de la capa de Carto Voyager a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.IDENA_BASEMAP - Identificador de la capa de mapa base del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_BASEMAP_GREY - Identificador de la capa de mapa base gris del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_BASEMAP_ORTHOPHOTO - Identificador de la capa de la combinación de ortofoto de máxima actualidad y mapa base del WMS de IDENA.\r\n * @property {string} layer.IDENA_BW_RELIEF - Identificador de la capa de relieve en blanco y negro del WMS de IDENA.\r\n * @property {string} layer.IDENA_CADASTER - Identificador de la capa de catastro del WMS de IDENA.\r\n * @property {string} layer.IDENA_CARTO - Identificador de la capa de cartografía topográfica del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_DYNBASEMAP - Identificador de la capa de mapa base del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNBASEMAP_GREY - Identificador de la capa de mapa base gris del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNCARTO - Identificador de la capa de cartografía topográfica del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO - Identificador de la capa de ortofoto de máxima actualidad del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2012 - Identificador de la capa de ortofoto 2012 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2014 - Identificador de la capa de ortofoto 2014 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2017 - Identificador de la capa de ortofoto 2017 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2018 - Identificador de la capa de ortofoto 2018 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2019 - Identificador de la capa de ortofoto 2019 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2020 - Identificador de la capa de ortofoto 2020 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2021 - Identificador de la capa de ortofoto 2021 del WMS de IDENA.\r\n * @property {string} layer.IDENA_DYNORTHOPHOTO2022 - Identificador de la capa de ortofoto 2022 del WMS de IDENA.\r\n * @property {string} layer.IDENA_ORTHOPHOTO - Identificador de la capa de ortofoto de máxima actualidad del WMTS de IDENA. Esta capa solo es compatible con los sistemas de referencia EPSG:25830 y EPSG:4326.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2012 - Identificador de la capa de ortofoto 2012 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2014 - Identificador de la capa de ortofoto 2014 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2017 - Identificador de la capa de ortofoto 2017 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2018 - Identificador de la capa de ortofoto 2018 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2019 - Identificador de la capa de ortofoto 2019 del WMTS de IDENA. Esta capa solo es compatible con los sistemas de referencia EPSG:25830 y EPSG:4326.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2020 - Identificador de la capa de ortofoto 2020 del WMTS de IDENA. Esta capa solo es compatible con los sistemas de referencia EPSG:25830 y EPSG:4326.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2021 - Identificador de la capa de ortofoto 2021 del WMTS de IDENA. Esta capa solo es compatible con los sistemas de referencia EPSG:25830 y EPSG:4326.\r\n * @property {string} layer.IDENA_ORTHOPHOTO2022 - Identificador de la capa de ortofoto 2022 del WMTS de IDENA. Esta capa solo es compatible con los sistemas de referencia EPSG:25830 y EPSG:4326.\r\n * @property {string} layer.IDENA_PAMPLONA_DYNORTHOPHOTO2020 - Identificador de la capa de ortofoto de la comarca de Pamplona 2020 del WMS de IDENA.\r\n * @property {string} layer.IDENA_PAMPLONA_DYNCARTO - Identificador de la capa de la cartografía topográfica de Pamplona del WMS de IDENA.\r\n * @property {string} layer.IDENA_PAMPLONA_ORTHOPHOTO2020 - Identificador de la capa de ortofoto de la comarca de Pamplona 2020 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IDENA_PAMPLONA_CARTO - Identificador de la capa de la cartografía topográfica de Pamplona del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @property {string} layer.IGN_ES_BASEMAP - Identificador de la capa del callejero del WMTS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_BASEMAP_GREY - Identificador de la capa del callejero en gris del WMTS del Instituto Geográfico Nacional. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.IGN_ES_CARTO - Identificador de la capa de cartografía raster del WMTS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_DYNBASEMAP - Identificador de la capa del callejero del WMS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_DYNBASEMAP_GREY - Identificador de la capa del callejero en gris del WMS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_DYNCARTO - Identificador de la capa de cartografía raster del WMS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_DYNLIDAR - Identificador de la capa del modelo digital de superficies LIDAR del WMS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_DYNORTHOPHOTO - Identificador de la capa del PNOA del WMS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_LIDAR - Identificador de la capa del modelo digital de superficies LIDAR del WMTS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_ORTHOPHOTO - Identificador de la capa del PNOA del WMTS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_ES_RELIEF - Identificador de la capa de relieve del WMTS del Instituto Geográfico Nacional.\r\n * @property {string} layer.IGN_FR_BASEMAP - Identificador de la capa de mapa base del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.IGN_FR_DYNBASEMAP - Identificador de la capa de mapa base del WMS del Instituto Geográfico Nacional Francés.\r\n * @property {string} layer.IGN_FR_DYNORTHOPHOTO - Identificador de la capa de ortofoto del WMS del Instituto Geográfico Nacional Francés.\r\n * @property {string} layer.IGN_FR_DYNRELIEF - Identificador de la capa de relieve del WMS del Instituto Geográfico Nacional Francés.\r\n * @property {string} layer.IGN_FR_ORTHOPHOTO - Identificador de la capa de ortofoto del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.IGN_FR_RELIEF - Identificador de la capa de relieve del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.MAPBOX_SATELLITE - Identificador de la capa de Mapbox Satellite a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.MAPBOX_STREETS - Identificador de la capa de Mapbox Streets a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.OPENTOPOMAP - Identificador de la capa de OpenTopoMap a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {string} layer.OSM - Identificador de la capa de OpenStreetMap a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @property {object} layerType - Colección de identificadores de tipo de capa.\r\n * @property {string} layerType.KML - *__Obsoleta__: En lugar de esta propiedad es recomendable usar `SITNA.Consts.layerType.VECTOR` para cargar archivos KML.*\r\n *\r\n * Identificador de capa de tipo KML.\r\n * @property {string} layerType.VECTOR - Identificador de capa de tipo vectorial.\r\n * Este tipo de capa es la que se utiliza para representar entidades geográficas de {@link SITNA.feature}.\r\n * @property {string} layerType.WFS - Identificador de capa de tipo WFS.\r\n * @property {string} layerType.WMS - Identificador de capa de tipo WMS.\r\n * @property {string} layerType.WMTS - Identificador de capa de tipo WMTS.\r\n * @property {object} mimeType - Colección de tipos MIME de utilidad.\r\n * @property {string} mimeType.GEOJSON - Tipo MIME de documento GeoJSON.\r\n * @property {string} mimeType.GEOPACKAGE - Tipo MIME de archivo GeoPackage.\r\n * @property {string} mimeType.GML - Tipo MIME de documento GML.\r\n * @property {string} mimeType.GPX - Tipo MIME de documento GPX.\r\n * @property {string} mimeType.JPEG - Tipo MIME de imagen JPEG.\r\n * @property {string} mimeType.JSON - Tipo MIME de documento JSON.\r\n * @property {string} mimeType.KML - Tipo MIME de documento KML.\r\n * @property {string} mimeType.KMZ - Tipo MIME de documento KMZ (KML comprimido en ZIP).\r\n * @property {string} mimeType.PNG - Tipo MIME de imagen PNG.\r\n * @property {string} mimeType.SHAPEFILE - Tipo MIME de archivo Shapefile.\r\n * @property {string} mimeType.XML - Tipo MIME de documento XML.\r\n * @property {string} mimeType.ZIP - Tipo MIME de archivo ZIP.\r\n * @example Paso de constantes como parámetros al constructor de una capa vectorial con un documento KML como fuente de datos. {@lang javascript}\r\n * const myVectorLayer = new SITNA.layer.Vector({\r\n * id: 'myLayer',\r\n * type: SITNA.Consts.layerType.VECTOR,\r\n * format: SITNA.Consts.format.KML,\r\n * url: 'https://sitna.navarra.es/api/examples/data/MUSEOSNAVARRA.kml'\r\n * });\r\n */\r\n\r\nconst Consts = {};\r\n\r\nConsts.OLNS = 'ol';\r\nConsts.PROJ4JSOBJ = 'proj4';\r\nConsts.GEOGRAPHIC = 'geographic';\r\nConsts.UTM = 'UTM';\r\nConsts.OLD_BROWSER_ALERT = 'TC.oldBrowserAlert';\r\nConsts.CLUSTER_ANIMATION_DURATION = 200;\r\nConsts.ZOOM_ANIMATION_DURATION = 300;\r\nConsts.URL_MAX_LENGTH = 2048;\r\nConsts.METER_PRECISION = 0;\r\nConsts.DEGREE_PRECISION = 5;\r\nConsts.EXTENT_TOLERANCE = 0.9998;/*URI: debido al redondeo del extente en el hash se obtiene un nivel de resolución mayor al debido. Con este valor definimos una tolerancia para que use una resolución si es muy muy muy próxima*/\r\nConsts.SRSDOWNLOAD_GEOJSON_KML = \"urn:ogc:def:crs:OGC::CRS84\";\r\n\r\nConsts.url = {\r\n SPLIT_REGEX: /([^:]*:)?\\/\\/([^:]*:?[^@]*@)?([^:\\/\\?]*):?([^\\/\\?]*)/,\r\n EPSG: 'https://epsg.io/'\r\n};\r\nif (typeof SITNA_BASE_URL !== \"undefined\") {\r\n Consts.url.ERROR_LOGGER = SITNA_BASE_URL + 'errors/logger.ashx';\r\n}\r\nelse {\r\n // Obtenemos la URL base de la dirección del script\r\n const script = document.currentScript;\r\n const src = script.getAttribute('src');\r\n const apiLocation = src.substr(0, src.lastIndexOf('/') + 1);\r\n Consts.url.ERROR_LOGGER = apiLocation + 'errors/logger.ashx';\r\n}\r\nConsts.classes = {\r\n MAP: 'tc-map',\r\n POINT: 'tc-point',\r\n MARKER: 'tc-marker',\r\n VISIBLE: 'tc-visible',\r\n HIDDEN: 'tc-hidden',\r\n COLLAPSED: 'tc-collapsed',\r\n COLLAPSED_LEFT: 'tc-collapsed-left',\r\n COLLAPSED_RIGHT: 'tc-collapsed-right',\r\n CHECKED: 'tc-checked',\r\n DISABLED: 'tc-disabled',\r\n ACTIVE: 'tc-active',\r\n HIGHLIGHTED: 'tc-highlighted',\r\n DEFAULT: 'tc-default',\r\n LASTCHILD: 'tc-lastchild',\r\n TRANSPARENT: 'tc-transparent',\r\n DROP: 'tc-drop',\r\n LOADING: 'tc-loading',\r\n IPAD_IOS7_FIX: 'tc-ipad-ios7-fix',\r\n INFO: 'tc-msg-info',\r\n WARNING: 'tc-msg-warning',\r\n ERROR: 'tc-msg-error',\r\n THREED: 'tc-3d',\r\n TOAST: 'tc-toast',\r\n TOAST_CONTAINER: 'tc-toast-container',\r\n LEFT_PANEL: 'tc-left-panel',\r\n RIGHT_PANEL: 'tc-right-panel',\r\n SLIDE_PANEL: 'tc-slide-panel',\r\n TOOLS_PANEL: 'tc-tools-panel',\r\n LEGEND_PANEL: 'tc-legend-panel',\r\n OVERVIEW_MAP_PANEL: 'tc-ovmap-panel',\r\n PANEL_CONTENT: 'tc-panel-content',\r\n PANEL_TAB: 'tc-panel-tab',\r\n FULL_SCREEN: 'tc-fullscreen',\r\n};\r\nConsts.msgType = {\r\n INFO: 'info',\r\n WARNING: 'warning',\r\n ERROR: 'error'\r\n};\r\nConsts.msgErrorMode = {\r\n TOAST: 'toast',\r\n CONSOLE: 'console',\r\n EMAIL: 'email'\r\n};\r\nConsts.event = {\r\n /**\r\n * Se lanza cuando el mapa ha cargado todas sus capas iniciales y todos sus controles\r\n * @event mapload\r\n */\r\n MAPLOAD: 'mapload.tc',\r\n MAPREADY: 'mapready.tc',\r\n MAPCHANGE: 'mapchange.tc',\r\n BEFORELAYERADD: 'beforelayeradd.tc',\r\n LAYERADD: 'layeradd.tc',\r\n LAYERREMOVE: 'layerremove.tc',\r\n LAYERORDER: 'layerorder.tc',\r\n BEFORELAYERUPDATE: 'beforelayerupdate.tc',\r\n LAYERUPDATE: 'layerupdate.tc',\r\n LAYERERROR: 'layererror.tc',\r\n BEFOREBASELAYERCHANGE: 'beforebaselayerchange.tc',\r\n BASELAYERCHANGE: 'baselayerchange.tc',\r\n BEFOREUPDATE: 'beforeupdate.tc',\r\n UPDATE: 'update.tc',\r\n BEFOREZOOM: 'beforezoom.tc',\r\n ZOOM: 'zoom.tc',\r\n BEFOREUPDATEPARAMS: 'beforeupdateparams.tc',\r\n UPDATEPARAMS: 'updateparams.tc',\r\n VECTORUPDATE: 'vectorupdate.tc',\r\n FEATUREADD: 'featureadd.tc',\r\n BEFOREFEATURESADD: 'beforefeaturesadd.tc',\r\n FEATURESADD: 'featuresadd.tc',\r\n BEFOREFEATUREREMOVE: 'beforefeatureremove.tc',\r\n FEATUREREMOVE: 'featureremove.tc',\r\n FEATURESCLEAR: 'featuresclear.tc',\r\n FEATURESIMPORT: 'featuresimport.tc',\r\n FEATURESIMPORTERROR: 'featuresimporterror.tc',\r\n FEATURESIMPORTPARTIAL: 'featuresimportpartial.tc',\r\n FEATURESIMPORTWARN: 'featuresimportwarn.tc',\r\n FILESAVE: 'filesave.tc',\r\n BEFORETILELOAD: 'beforetileload.tc',\r\n TILELOAD: 'tileload.tc',\r\n TILELOADERROR: 'tileloaderror.tc',\r\n CONTROLADD: 'controladd.tc',\r\n CONTROLACTIVATE: 'controlactivate.tc',\r\n CONTROLDEACTIVATE: 'controldeactivate.tc',\r\n BEFORECONTROLRENDER: 'beforecontrolrender.tc',\r\n CONTROLRENDER: 'controlrender.tc',\r\n CONTROLHIGHLIGHT: 'controlhighlight.tc',\r\n CONTROLUNHIGHLIGHT: 'controlunhighlight.tc',\r\n BEFORELAYOUTLOAD: 'beforelayoutload.tc',\r\n LAYOUTLOAD: 'layoutload.tc',\r\n LAYERVISIBILITY: 'layervisibility.tc',\r\n LAYEROPACITY: 'layeropacity.tc',\r\n FEATURECLICK: 'featureclick.tc',\r\n NOFEATURECLICK: 'nofeatureclick.tc',\r\n FEATUREOVER: 'featureover.tc',\r\n FEATUREOUT: 'featureout.tc',\r\n BEFOREFEATUREINFO: 'beforefeatureinfo.tc',\r\n FEATUREINFO: 'featureinfo.tc',\r\n NOFEATUREINFO: 'nofeatureinfo.tc',\r\n FEATUREINFOERROR: 'featureinfoerror.tc',\r\n CLICK: 'click',\r\n MOUSEUP: 'mouseup',\r\n MOUSEMOVE: 'mousemove',\r\n MOUSELEAVE: 'mouseleave',\r\n STARTLOADING: 'startloading.tc',\r\n STOPLOADING: 'stoploading.tc',\r\n EXTERNALSERVICEADDED: 'externalserviceadded.tc',\r\n ZOOMTO: 'zoomto.tc',\r\n PROJECTIONCHANGE: 'projectionchange.tc',\r\n VIEWCHANGE: 'viewchange.tc',\r\n CAMERACHANGE: 'camerachange.tc',\r\n TERRAINPROVIDERADD: 'terrainprovideradd.tc',\r\n TERRAINPROVIDERREMOVE: 'terrainproviderremove.tc',\r\n OVERVIEWBASELAYERCHANGE: 'overviewbaselayerchange.tc',\r\n POPUP: 'popup.tc',\r\n BEFOREAPPLYQUERY: 'beforeapplyquery.tc',\r\n RECENTFILEADD: 'recentfileadd.tc'\r\n};\r\n\r\nConsts.layer = {\r\n IDENA_ORTHOPHOTO: 'ortofoto',\r\n IDENA_BASEMAP: 'mapabase',\r\n IDENA_BASEMAP_GREY: 'mapabase_gris',\r\n IDENA_CADASTER: 'catastro',\r\n IDENA_CARTO: 'cartografia',\r\n IDENA_ORTHOPHOTO2022: 'ortofoto2022',\r\n IDENA_ORTHOPHOTO2021: 'ortofoto2021',\r\n IDENA_ORTHOPHOTO2020: 'ortofoto2020',\r\n IDENA_ORTHOPHOTO2019: 'ortofoto2019',\r\n IDENA_ORTHOPHOTO2018: 'ortofoto2018',\r\n IDENA_ORTHOPHOTO2017: 'ortofoto2017',\r\n IDENA_ORTHOPHOTO2014: 'ortofoto2014',\r\n IDENA_ORTHOPHOTO2012: 'ortofoto2012',\r\n IDENA_PAMPLONA_ORTHOPHOTO2020: 'ortofoto_pamplona2020',\r\n IDENA_PAMPLONA_CARTO: 'cartografia_pamplona',\r\n IDENA_DYNBASEMAP: 'mapabase_dinamico',\r\n IDENA_DYNBASEMAP_GREY: 'mapabase_gris_dinamico',\r\n IDENA_DYNORTHOPHOTO: 'ortofoto_dinamico',\r\n IDENA_DYNORTHOPHOTO2022: 'ortofoto2022_dinamico',\r\n IDENA_DYNORTHOPHOTO2021: 'ortofoto2021_dinamico',\r\n IDENA_DYNORTHOPHOTO2020: 'ortofoto2020_dinamico',\r\n IDENA_DYNORTHOPHOTO2019: 'ortofoto2019_dinamico',\r\n IDENA_DYNORTHOPHOTO2018: 'ortofoto2018_dinamico',\r\n IDENA_DYNORTHOPHOTO2017: 'ortofoto2017_dinamico',\r\n IDENA_DYNORTHOPHOTO2014: 'ortofoto2014_dinamico',\r\n IDENA_DYNORTHOPHOTO2012: 'ortofoto2012_dinamico',\r\n IDENA_PAMPLONA_DYNORTHOPHOTO2020: 'ortofoto_pamplona2020_dinamico',\r\n IDENA_PAMPLONA_DYNCARTO: 'cartografia_pamplona_dinamico',\r\n IDENA_DYNCARTO: 'cartografia_dinamico',\r\n IDENA_BW_RELIEF: 'relieve_bn',\r\n IDENA_BASEMAP_ORTHOPHOTO: 'base_orto',\r\n\r\n IGN_ES_CARTO: \"ign-raster\",\r\n IGN_ES_BASEMAP: \"ign-base\",\r\n IGN_ES_BASEMAP_GREY: \"ign-base-gris\",\r\n IGN_ES_RELIEF: \"ign-mtn\",\r\n IGN_ES_ORTHOPHOTO: \"ign-pnoa\",\r\n IGN_ES_LIDAR: \"ign-lidar\",\r\n IGN_ES_DYNCARTO: \"ign-raster-dyn\",\r\n IGN_ES_DYNBASEMAP: \"ign-base-dyn\",\r\n IGN_ES_DYNBASEMAP_GREY: \"ign-base-gris-dyn\",\r\n IGN_ES_DYNORTHOPHOTO: \"ign-pnoa-dyn\",\r\n IGN_ES_DYNLIDAR: \"ign-lidar-dyn\",\r\n\r\n /*\r\n * Identificador de la capa de cartografía raster del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n //IGN_FR_CARTO: \"ign-fr-cartes\",\r\n IGN_FR_BASEMAP: \"ign-fr-base\",\r\n IGN_FR_RELIEF: \"ign-fr-estompage\",\r\n IGN_FR_ORTHOPHOTO: \"ign-fr-orto\",\r\n /*\r\n * Identificador de la capa de cartografía raster del WMS del Instituto Geográfico Nacional Francés.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n //IGN_FR_DYNCARTO: \"ign-fr-cartes-dyn\",\r\n IGN_FR_DYNBASEMAP: \"ign-fr-base-dyn\",\r\n IGN_FR_DYNRELIEF: \"ign-fr-estompage-dyn\",\r\n IGN_FR_DYNORTHOPHOTO: \"ign-fr-orto-dyn\",\r\n\r\n OSM: 'osm',\r\n OPENTOPOMAP: 'opentopomap',\r\n\r\n CARTO_VOYAGER: 'carto_voyager',\r\n CARTO_LIGHT: 'carto_light',\r\n CARTO_DARK: 'carto_dark',\r\n\r\n MAPBOX_STREETS: 'mapbox_streets',\r\n MAPBOX_SATELLITE: 'mapbox_satellite',\r\n\r\n BLANK: 'ninguno'\r\n};\r\nConsts.text = {\r\n API_ERROR: 'Error API SITNA',\r\n APP_ERROR: 'Error de aplicación'\r\n};\r\n\r\nConsts.layerType = {\r\n WMS: 'WMS',\r\n WMTS: 'WMTS',\r\n WFS: 'WFS',\r\n VECTOR: 'vector',\r\n KML: 'KML',\r\n GPX: 'GPX',\r\n GML: 'GML',\r\n GEOJSON: 'GeoJSON',\r\n GROUP: 'group'\r\n};\r\n\r\nConsts.geom = {\r\n POINT: 'point',\r\n MULTIPOINT: 'multipoint',\r\n POLYLINE: 'polyline',\r\n POLYGON: 'polygon',\r\n MULTIPOLYLINE: 'multipolyline',\r\n MULTIPOLYGON: 'multipolygon',\r\n CIRCLE: 'circle',\r\n RECTANGLE: 'rectangle'\r\n};\r\n\r\nConsts.searchType = {\r\n CADASTRAL: 'cadastral',\r\n COORDINATES: 'coordinates',\r\n MUNICIPALITY: 'municipality',\r\n COUNCIL: 'council',\r\n LOCALITY: 'locality',\r\n STREET: 'street',\r\n NUMBER: 'number',\r\n URBAN: 'urban',\r\n COMMONWEALTH: 'commonwealth',\r\n ROAD: 'road',\r\n ROADMILESTONE: 'roadmilestone',\r\n PLACENAME: 'placename',\r\n PLACENAMEMUNICIPALITY: 'placenamemunicipality'\r\n};\r\nConsts.mapSearchType = {\r\n MUNICIPALITY: Consts.searchType.MUNICIPALITY,\r\n COUNCIL: Consts.searchType.COUNCIL,\r\n URBAN: Consts.searchType.URBAN,\r\n COMMONWEALTH: Consts.searchType.COMMONWEALTH,\r\n GENERIC: 'generic'\r\n};\r\nConsts.comparison = {\r\n EQUAL_TO: '==',\r\n NOT_EQUAL_TO: '!=',\r\n LESS_THAN: '<',\r\n GREATER_THAN: '>',\r\n LESS_THAN_EQUAL_TO: '=<',\r\n GREATER_THAN_EQUAL_TO: '>=',\r\n LIKE: 'is'\r\n};\r\nConsts.logicalOperator = {\r\n AND: 'and',\r\n OR: 'or'\r\n};\r\nConsts.WMTSEncoding = {\r\n KVP: 'KVP',\r\n RESTFUL: 'RESTful'\r\n};\r\n\r\nConsts.mimeType = {\r\n PNG: 'image/png',\r\n JPEG: 'image/jpeg',\r\n JSON: 'application/json',\r\n GEOJSON: 'application/vnd.geo+json',\r\n KML: 'application/vnd.google-earth.kml+xml',\r\n KMZ: 'application/vnd.google-earth.kmz',\r\n GML: 'application/gml+xml',\r\n GPX: 'application/gpx+xml',\r\n XML: 'application/xml',\r\n GEOPACKAGE: 'application/geopackage+sqlite3',\r\n SHAPEFILE: 'x-gis/x-shapefile',\r\n ZIP: 'application/x-zip'\r\n};\r\n\r\nConsts.format = {\r\n JSON: 'JSON',\r\n KML: 'KML',\r\n KMZ: 'KMZ',\r\n GML: 'GML',\r\n GML2: 'GML2',\r\n GML3: 'GML3',\r\n GML32: 'GML32',\r\n GEOJSON: 'GeoJSON',\r\n TOPOJSON: 'TopoJSON',\r\n GPX: 'GPX',\r\n WKT: 'WKT',\r\n WKB: 'WKB',\r\n SHAPEFILE: 'SHP',\r\n ZIP: 'ZIP',\r\n GEOPACKAGE: 'GPKG'\r\n};\r\n\r\n//enumerado de errores y warninqs derivados de descargas, getfeatures\r\nConsts.WFSErrors = {\r\n GETFEATURE_NOT_AVAILABLE: \"GetFeatureNotAvailable\",\r\n LAYERS_NOT_AVAILABLE: \"LayersNotAvailable\",\r\n NO_LAYERS: \"NoLayers\",\r\n NO_VALID_LAYERS: \"noValidLayers\",\r\n QUERY_NOT_AVAILABLE: \"QueryNotAvailable\",\r\n //CapabilitiesParseError: \"CapabilitiesParseError\",\r\n MAX_NUM_FEATURES: \"NumMaxFeatures\",\r\n GETCAPABILITIES: \"GetCapabilities\",\r\n INDETERMINATE: \"Indeterminate\",\r\n NO_FEATURES: \"NoFeatures\"\r\n};\r\n\r\nConsts.visibility = {\r\n NOT_VISIBLE: 0,\r\n NOT_VISIBLE_AT_RESOLUTION: 1,\r\n HAS_VISIBLE: 2,\r\n VISIBLE: 4\r\n};\r\n\r\nConsts.view = {\r\n DEFAULT: 0,\r\n THREED: 1,\r\n PRINTING: 2\r\n};\r\n\r\nConsts.units = {\r\n DEGREES: \"degrees\",\r\n METERS: \"m\"\r\n};\r\n\r\nConsts.MARKER = 'marker';\r\n\r\nConsts.infoContainer = {\r\n POPUP: 'popup',\r\n RESULTS_PANEL: 'resultsPanel'\r\n};\r\n\r\nConsts.DownloadError = {\r\n MIMETYPE_NOT_SUPORTED: \"MimeTypeNotSupported\"\r\n};\r\n\r\nexport default Consts;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport Cfg from './Cfg';\r\nimport EventTarget from './EventTarget';\r\nimport i18n from './i18n';\r\nimport Handlebars from '../lib/handlebars/helpers';\r\nTC.i18n = TC.i18n || i18n;\r\nTC._hbs = Handlebars;\r\n\r\n/**\r\n * Opciones básicas de control.\r\n * @typedef ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @see 2-configuration\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n */\r\n\r\nTC.control = TC.control || {};\r\n\r\nTC.Control = function () {\r\n const self = this;\r\n EventTarget.call(self);\r\n\r\n self.map = null;\r\n self.isActive = false;\r\n self.isDisabled = false;\r\n self.CLASS = self.getClassName();\r\n\r\n var len = arguments.length;\r\n\r\n self.options = TC.Util.extend({}, len > 1 ? arguments[1] : arguments[0]);\r\n self.id = self.options.id || TC.getUID({\r\n prefix: self.CLASS.substr(TC.Control.prototype.CLASS.length + 1) + '-'\r\n });\r\n self.div = TC.Util.getDiv(self.options.div ? self.options.div : arguments[0]);\r\n self.div.classList.add(TC.Control.prototype.CLASS, self.CLASS);\r\n\r\n self.template = self.options.template || self.template;\r\n self.exportsState = false; \r\n};\r\n\r\nTC.inherit(TC.Control, EventTarget);\r\n\r\n(function () {\r\n const ctlProto = TC.Control.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl';\r\n\r\n ctlProto.template = void 0;\r\n\r\n ctlProto.show = function () {\r\n this.div.style.display = '';\r\n };\r\n\r\n ctlProto.hide = function () {\r\n const self = this;\r\n self.div.style.display = 'none';\r\n self.unhighlight();\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(null, function () {\r\n self.addUIEventListeners();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n\r\n };\r\n\r\n ctlProto.getClassName = function () {\r\n return this.CLASS;\r\n };\r\n\r\n ctlProto._set1stRenderPromise = function (promise) {\r\n const self = this;\r\n if (!self._firstRender) {\r\n self._firstRender = promise;\r\n }\r\n return promise;\r\n };\r\n\r\n ctlProto.renderData = async function (data, callback) {\r\n const self = this;\r\n if (self.map) {\r\n self.trigger(Consts.event.BEFORECONTROLRENDER, { dataObject: data });\r\n }\r\n self.div.classList.toggle(Consts.classes.DISABLED, self.isDisabled);\r\n\r\n let template;\r\n if (!self.template) {\r\n await self.loadTemplates();\r\n }\r\n if (typeof self.template === 'object' && !self.template.compiler) {\r\n template = self.template[self.CLASS];\r\n }\r\n else {\r\n template = self.template;\r\n self.template = {};\r\n self.template[self.CLASS] = template;\r\n }\r\n\r\n const html = await self.getRenderedHtml(self.CLASS, data);\r\n self.div.innerHTML = html;\r\n if (self.map) {\r\n self.trigger(Consts.event.CONTROLRENDER);\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n };\r\n\r\n const processTemplates = async function (templates, options) {\r\n options = options || {};\r\n\r\n const templatePromises = [];\r\n for (var key in templates) {\r\n const templateName = key;\r\n let template = templates[templateName];\r\n if (typeof template === 'string') {\r\n templatePromises.push(new Promise(function (res, rej) {\r\n TC.ajax({\r\n url: template,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n .then(function (response) {\r\n templates[templateName] = template = Handlebars.compile(response.data); // TODO: add optimization options\r\n res(template);\r\n })\r\n .catch(function (err) {\r\n console.log(\"Error fetching template: \" + err);\r\n rej(err);\r\n });\r\n }));\r\n }\r\n else {\r\n if (typeof template === 'object') {\r\n templates[key] = template = Handlebars.template(template);\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(templatePromises);\r\n for (var key2 in templates) {\r\n const t = templates[key2];\r\n if (t && key2 !== options.className) {\r\n Handlebars.registerPartial(key2, templates[key2]);\r\n }\r\n }\r\n };\r\n\r\n ctlProto.getRenderedHtml = async function (templateId, data, callback) {\r\n const self = this;\r\n\r\n const endFn = function (template) {\r\n if (typeof template === 'undefined') {\r\n return '';\r\n }\r\n const html = template(data);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n return html;\r\n };\r\n\r\n if (!self.template) {\r\n await self.loadTemplates();\r\n }\r\n const template = self.template[templateId];\r\n if (typeof template !== 'function') {\r\n await processTemplates(self.template, { locale: self.map && self.map.options.locale, className: self.CLASS });\r\n return endFn(self.template[templateId]);\r\n }\r\n else {\r\n return endFn(template);\r\n }\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n self.map = map;\r\n await self.render();\r\n if (self.options.active) {\r\n self.activate();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.activate = function () {\r\n const self = this;\r\n if (self.map && self.map.activeControl && self.map.activeControl !== self) {\r\n self.map.previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate();\r\n }\r\n self.isActive = true;\r\n if (self.map) {\r\n self.map.activeControl = self;\r\n self.map.trigger(Consts.event.CONTROLACTIVATE, { control: self });\r\n self.trigger(Consts.event.CONTROLACTIVATE, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.deactivate = function (stopChain) {\r\n if (arguments.length === 0) {\r\n stopChain = false;\r\n }\r\n\r\n const self = this;\r\n self.isActive = false;\r\n if (self.map) {\r\n self.map.activeControl = null;\r\n\r\n if (!stopChain) {\r\n //determinar cuál es el control predeterminado para reactivarlo\r\n //salvo que sea yo mismo, claro\r\n var nextControl = self.map.getDefaultControl();\r\n if (nextControl === self) nextControl = null;\r\n else if (self.map.previousActiveControl === self) // GLS: Validamos antes de activar que el control activo anterior sea distinto al control actual\r\n nextControl = null;\r\n else if (!nextControl) {\r\n nextControl = self.map.previousActiveControl;\r\n }\r\n\r\n if (nextControl)\r\n nextControl.activate();\r\n }\r\n self.map.trigger(Consts.event.CONTROLDEACTIVATE, { control: self });\r\n self.trigger(Consts.event.CONTROLDEACTIVATE, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.enable = function () {\r\n const self = this;\r\n self.isDisabled = false;\r\n if (self.div) {\r\n self.div.classList.remove(Consts.classes.DISABLED);\r\n delete self.div.dataset.tcMessage;\r\n }\r\n if (self.containerControl && self.containerControl.onControlEnable) {\r\n self.containerControl.onControlEnable(self);\r\n }\r\n };\r\n\r\n ctlProto.disable = function (options) {\r\n const self = this;\r\n options = options || {};\r\n self.isDisabled = true;\r\n if (self.div) {\r\n self.div.classList.add(Consts.classes.DISABLED);\r\n let message = self.getLocaleString('disabledControl');\r\n if (options.reason) {\r\n message = `${message} - ${options.reason}`;\r\n }\r\n self.div.dataset.tcMessage = message;\r\n }\r\n if (self.containerControl && self.containerControl.onControlDisable) {\r\n self.containerControl.onControlDisable(self);\r\n }\r\n };\r\n\r\n ctlProto.highlight = function () {\r\n const self = this;\r\n if (self.div) {\r\n self.div.classList.add(Consts.classes.HIGHLIGHTED);\r\n }\r\n if (self.map) {\r\n self.map.trigger(Consts.event.CONTROLHIGHLIGHT, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.unhighlight = function () {\r\n const self = this;\r\n if (self.div) {\r\n self.div.classList.remove(Consts.classes.HIGHLIGHTED);\r\n }\r\n if (self.map) {\r\n self.map.trigger(Consts.event.CONTROLUNHIGHLIGHT, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.isHighlighted = function () {\r\n const self = this;\r\n if (self.div) {\r\n return self.div.classList.contains(Consts.classes.HIGHLIGHTED);\r\n }\r\n return false;\r\n };\r\n\r\n //ctlProto.remove = function () {\r\n // const self = this;\r\n // if (self.map) {\r\n // if (self.isActive) {\r\n // self.deactivate();\r\n // }\r\n // const idx = self.map.controls.indexOf(self);\r\n // if (idx >= 0) {\r\n // self.map.controls.splice(idx, 1);\r\n // }\r\n // self.map = null;\r\n // if (self._dialogDiv) {\r\n // self._dialogDiv.remove();\r\n // }\r\n // if (self.div) {\r\n // self.div.remove();\r\n // }\r\n // }\r\n //};\r\n\r\n ctlProto.renderPromise = function () {\r\n const self = this;\r\n return self._firstRender || new Promise(function (resolve, _reject) {\r\n self.one(Consts.event.CONTROLRENDER, function () {\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addUIEventListener = function (selector, event, listener) {\r\n const self = this;\r\n const elements = selector ? self.div.querySelectorAll(selector) : [self.div];\r\n elements.forEach(function (elm) {\r\n elm.addEventListener(event, listener);\r\n });\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n };\r\n\r\n ctlProto.isExclusive = function () {\r\n return false;\r\n };\r\n\r\n ctlProto.getLocaleString = function (key, texts) {\r\n var self = this;\r\n var locale = self.map ? self.map.options.locale : Cfg.locale;\r\n return TC.Util.getLocaleString(locale, key, texts);\r\n };\r\n\r\n ctlProto.getUID = function () {\r\n const self = this;\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState) {\r\n return {};\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (_state) {\r\n };\r\n \r\n ctlProto.getDownloadDialog = async function () {\r\n const self = this;\r\n self._downloadDialog = self._downloadDialog || self.map.getControlsByClass('TC.control.FeatureDownloadDialog')[0];\r\n if (!self._downloadDialog) {\r\n self._downloadDialog = await self.map.addControl('FeatureDownloadDialog');\r\n }\r\n self._downloadDialog.caller = self;\r\n return self._downloadDialog;\r\n };\r\n\r\n ctlProto.getElevationTool = async function () {\r\n const self = this;\r\n if (!self.displayElevation && !self.options.displayElevation) {\r\n return null;\r\n }\r\n if (self.elevation) {\r\n return self.elevation;\r\n }\r\n if (!TC.tool.Elevation) {\r\n await import('./tool/Elevation');\r\n }\r\n if (typeof self.options.displayElevation === 'boolean') {\r\n if (self.map) {\r\n const mapElevation = await self.map.getElevationTool();\r\n if (mapElevation) {\r\n self.elevation = mapElevation;\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n }\r\n else {\r\n if (self.map) {\r\n const mapElevation = await self.map.getElevationTool();\r\n if (mapElevation) {\r\n self.elevation = new TC.tool.Elevation(TC.Util.extend(true, {}, mapElevation.options, self.options.displayElevation));\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n }\r\n return self.elevation;\r\n };\r\n\r\n})();\r\n\r\nTC.Control.create = async function (type, options) {\r\n const ctorName = type.substr(0, 1).toUpperCase() + type.substr(1);\r\n if (!TC.control[ctorName]) {\r\n const module = await import('./control/' + ctorName);\r\n TC.control[ctorName] = module.default;\r\n }\r\n return new TC.control[ctorName](null, options);\r\n};\r\n\r\nvar Control = TC.Control;\r\nexport default Control;","const getNativeListener = function (evt, callback) {\r\n const result = function (evt) {\r\n const cbParameter = {\r\n type: evt.type,\r\n target: this,\r\n currentTarget: this\r\n };\r\n if (evt.detail) {\r\n Object.keys(evt.detail).forEach(function (key) {\r\n if (!(key in cbParameter)) {\r\n cbParameter[key] = evt.detail[key];\r\n }\r\n });\r\n }\r\n return callback.call(this, cbParameter);\r\n }.bind(this);\r\n const stack = this._listeners[evt] = this._listeners[evt] || new Map();\r\n stack.set(callback, result);\r\n return result;\r\n};\r\n\r\nconst onInternal = function (events, callback, options) {\r\n const self = this;\r\n events.split(' ').forEach(function (evt) {\r\n self.$events.addEventListener(evt, getNativeListener.call(self, evt, callback), options);\r\n });\r\n return self;\r\n};\r\n\r\nconst EventTarget = function () {\r\n const self = this;\r\n self._listeners = {};\r\n self.$events = document.createDocumentFragment();\r\n\r\n const delegate = function (method) {\r\n this[method] = self.$events[method].bind(self.$events);\r\n };\r\n const methods = [\r\n 'addEventListener',\r\n 'dispatchEvent',\r\n 'removeEventListener'\r\n ];\r\n methods.forEach(delegate, self);\r\n\r\n const fill$events = function (method) {\r\n self.$events[method] = self[method].bind(self);\r\n };\r\n methods.push('on');\r\n methods.push('one');\r\n methods.push('off');\r\n methods.push('trigger');\r\n methods.forEach(fill$events, self);\r\n};\r\n\r\nconst etProto = EventTarget.prototype;\r\n\r\netProto.on = function (events, callback) {\r\n return onInternal.call(this, events, callback);\r\n};\r\n\r\netProto.one = function (events, callback) {\r\n return onInternal.call(this, events, callback, { once: true });\r\n};\r\n\r\netProto.off = function (events, callback) {\r\n const self = this;\r\n const eventList = events.split(' ');\r\n if (callback) {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack && stack.has(callback)) {\r\n self.$events.removeEventListener(evt, stack.get(callback));\r\n }\r\n });\r\n }\r\n else {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack) {\r\n stack.forEach(function (cb) {\r\n self.$events.removeEventListener(evt, cb);\r\n });\r\n stack.clear();\r\n }\r\n });\r\n }\r\n return self;\r\n};\r\n\r\netProto.trigger = function (type, options) {\r\n const self = this;\r\n //Compatibilidad hacia atrás\r\n if (window.$ && $.Event && type instanceof $.Event) {\r\n options = {};\r\n Object.keys(type).forEach(function (key) {\r\n if (key !== 'type') {\r\n options[key] = type[key];\r\n }\r\n });\r\n type = type.type;\r\n }\r\n var ceOptions;\r\n if (options) {\r\n ceOptions = {\r\n detail: options\r\n };\r\n }\r\n const event = new CustomEvent(type, ceOptions);\r\n self.dispatchEvent(event);\r\n};\r\n\r\nEventTarget._onBySelectorMap = new WeakMap();\r\n\r\nEventTarget.listenerBySelector = function (selector, callback) {\r\n // Crea una estructura a partir de un mapa cuyas claves son los elementos.\r\n // Los valores son objetos cuyas claves son tipos de eventos\r\n // y cuyos valores son objetos que tienen como claves los selectores\r\n // y cuyos valores son las funciones de callback.\r\n // Se crea una función que va buscando la primera correspondencia con un selector.\r\n // En cuanto la encuentra, ejecuta el callback y deja de procesar.\r\n return function (e) {\r\n const element = this;\r\n const eventType = e.type;\r\n var eventTypes = EventTarget._onBySelectorMap.get(element);\r\n if (!eventTypes) {\r\n eventTypes = {};\r\n EventTarget._onBySelectorMap.set(element, eventTypes);\r\n }\r\n var selectors = eventTypes[eventType];\r\n if (!selectors) {\r\n eventTypes[eventType] = selectors = {};\r\n }\r\n if (!selectors[selector]) {\r\n selectors[selector] = callback;\r\n }\r\n // Para cada evento en cada elemento hay que llamar una sola vez al callback que toque.\r\n // Así que si se ejecuta un callback, prohibimos al resto de los listeners resolverse.\r\n if (!e._listenerBySelectorCalled) {\r\n var matches = false;\r\n var elm = e.target;\r\n var result;\r\n while (elm && elm !== element) {\r\n for (selector in selectors) {\r\n if (elm.matches && elm.matches(selector)) {\r\n matches = true;\r\n result = selectors[selector].call(element, e);\r\n e._listenerBySelectorCalled = true;\r\n }\r\n }\r\n if (matches) {\r\n return result;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default EventTarget;","import TC from '../TC';\r\n\r\n // intersect a segment against one of the 4 lines that make up the bbox\r\n const intersectBox = function (a, b, edge, bbox) {\r\n return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top\r\n edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom\r\n edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right\r\n edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left\r\n null;\r\n };\r\n\r\n // bit code reflects the point position relative to the bbox:\r\n\r\n // left mid right\r\n // top 1001 1000 1010\r\n // mid 0001 0000 0010\r\n // bottom 0101 0100 0110\r\n const bitCode = function (p, bbox) {\r\n let code = 0;\r\n\r\n if (p[0] < bbox[0]) code |= 1; // left\r\n else if (p[0] > bbox[2]) code |= 2; // right\r\n\r\n if (p[1] < bbox[1]) code |= 4; // bottom\r\n else if (p[1] > bbox[3]) code |= 8; // top\r\n\r\n return code;\r\n };\r\n\r\n const Geometry = {\r\n isPoint: function (geometry) {\r\n return Array.isArray(geometry) && geometry.length >= 2 && typeof geometry[0] === 'number' && typeof geometry[1] === 'number';\r\n },\r\n isRing: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isPoint(geometry[0]));\r\n },\r\n isRingCollection: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isRing(geometry[0]));\r\n },\r\n isMultiRingCollection: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isRingCollection(geometry[0]));\r\n },\r\n getNearest: function getNearest(point, candidates) {\r\n return TC.wrap.Geometry.getNearest(point, candidates);\r\n },\r\n isInside: function isInside(point, ring) {\r\n var result = false;\r\n if (Geometry.isPoint(point)) {\r\n if (Geometry.isPoint(ring)) {\r\n result = point[0] === ring[0] && point[1] === ring[1];\r\n }\r\n else if (Geometry.isRing(ring)) {\r\n for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\r\n var xi = ring[i][0], yi = ring[i][1];\r\n var xj = ring[j][0], yj = ring[j][1];\r\n\r\n var intersect = yi > point[1] !== yj > point[1] && \r\n point[0] < (xj - xi) * (point[1] - yi) / (yj - yi) + xi;\r\n if (intersect) result = !result;\r\n }\r\n }\r\n else if (Geometry.isRingCollection(ring) && ring.length > 0) {\r\n // polígono con agujeros\r\n // miramos si está en el polígono exterior\r\n if (isInside(point, ring[0])) {\r\n var insideHole = false;\r\n // miramos si está en un agujero\r\n for (i = 1; i < ring.length; i++) {\r\n if (isInside(point, ring[i])) {\r\n insideHole = true;\r\n break;\r\n }\r\n }\r\n if (!insideHole) {\r\n result = true;\r\n }\r\n }\r\n }\r\n else if (Geometry.isMultiRingCollection(ring) && ring.length > 0) {\r\n // multipolígono\r\n // miramos si está en alguno de los polígonos\r\n for (i = 0; i < ring.length; i++) {\r\n if (isInside(point, ring[i])) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n },\r\n equals: function(g1, g2) {\r\n if (Array.isArray(g1) && Array.isArray(g2)) {\r\n return g1.length === g2.length && g1.every((elm, idx) => Geometry.equals(elm, g2[idx]));\r\n }\r\n if (Array.isArray(g1) || Array.isArray(g2)) {\r\n return false;\r\n }\r\n return g1 === g2;\r\n },\r\n getSquaredDistance: function (p1, p2) {\r\n const dx = p2[0] - p1[0];\r\n const dy = p2[1] - p1[1];\r\n return dx * dx + dy * dy;\r\n },\r\n getDistance: function (p1, p2) {\r\n return Math.hypot(p2[0] - p1[0], p2[1] - p1[1]);\r\n },\r\n getFlatCoordinates: function (geom) {\r\n const reductionFn = function (prev, cur) {\r\n return prev.concat(cur);\r\n };\r\n switch (true) {\r\n case Geometry.isPoint(geom):\r\n return [geom];\r\n case Geometry.isRing(geom):\r\n return geom;\r\n case Geometry.isRingCollection(geom):\r\n return geom.reduce(reductionFn);\r\n case Geometry.isMultiRingCollection(geom):\r\n return geom.reduce(reductionFn).reduce(reductionFn);\r\n default:\r\n return [];\r\n }\r\n },\r\n // Función generator que itera por los puntos de una geometría\r\n iterateCoordinates: function* iterateCoords(geometry) {\r\n if (Array.isArray(geometry)) {\r\n if (Geometry.isPoint(geometry)) {\r\n yield geometry;\r\n }\r\n else {\r\n for (var i = 0, ii = geometry.length; i < ii; i++) {\r\n yield* iterateCoords(geometry[i]);\r\n }\r\n }\r\n }\r\n },\r\n intersects: function (geom1, geom2) {\r\n const flatIntersects = function (coords, geom) {\r\n for (var i = 0, ii = coords.length; i < ii; i++) {\r\n if (Geometry.isInside(coords[i], geom)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n if (flatIntersects(Geometry.getFlatCoordinates(geom1), geom2) || flatIntersects(Geometry.getFlatCoordinates(geom2), geom1)) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n clipPolygon: function (coords, bbox) {\r\n return coords\r\n .map(ring => Geometry.clipRing(ring, bbox))\r\n .filter(ring => ring.length);\r\n },\r\n clipRing: function (coords, bbox) {\r\n // Algoritmo Sutherland-Hodgeman de recorte de anillos\r\n let result, edge, prev, prevInside, inside;\r\n\r\n // clip against each side of the clip rectangle\r\n for (edge = 1; edge <= 8; edge *= 2) {\r\n result = [];\r\n prev = coords[coords.length - 1];\r\n prevInside = !(bitCode(prev, bbox) & edge);\r\n\r\n coords.forEach(point => {\r\n inside = !(bitCode(point, bbox) & edge);\r\n\r\n // if segment goes through the clip window, add an intersection\r\n if (inside !== prevInside) result.push(intersectBox(prev, point, edge, bbox));\r\n\r\n if (inside) result.push(point); // add a point if it's inside\r\n\r\n prev = point;\r\n prevInside = inside;\r\n });\r\n\r\n coords = result;\r\n\r\n if (!coords.length) break;\r\n }\r\n\r\n return result;\r\n },\r\n clipPolyline: function (coords, bbox) {\r\n // Algoritmo Cohen-Sutherland de clipping de líneas\r\n let len = coords.length,\r\n codeA = bitCode(coords[0], bbox),\r\n part = [],\r\n i, a, b, codeB, lastCode;\r\n\r\n let result = [];\r\n\r\n for (i = 1; i < len; i++) {\r\n a = coords[i - 1];\r\n b = coords[i];\r\n codeB = lastCode = bitCode(b, bbox);\r\n\r\n while (true) {\r\n\r\n if (!(codeA | codeB)) { // accept\r\n part.push(a);\r\n\r\n if (codeB !== lastCode) { // segment went outside\r\n part.push(b);\r\n\r\n if (i < len - 1) { // start a new line\r\n result = result.concat(part);\r\n part = [];\r\n }\r\n } else if (i === len - 1) {\r\n part.push(b);\r\n }\r\n break;\r\n\r\n } else if (codeA & codeB) { // trivial reject\r\n break;\r\n\r\n } else if (codeA) { // a outside, intersect with clip edge\r\n a = intersectBox(a, b, codeA, bbox);\r\n codeA = bitCode(a, bbox);\r\n\r\n } else { // b outside\r\n b = intersectBox(a, b, codeB, bbox);\r\n codeB = bitCode(b, bbox);\r\n }\r\n }\r\n\r\n codeA = lastCode;\r\n }\r\n\r\n if (part.length) {\r\n result = result.concat(part);\r\n }\r\n\r\n return result;\r\n },\r\n interpolate: function (coords, options) {\r\n let coordinateList = coords;\r\n const isSinglePoint = coordinateList.length === 1;\r\n\r\n if (!isSinglePoint) {\r\n if (options.resolution) {\r\n const newCoordinateList = [];\r\n coordinateList.forEach(function (point, idx, arr) {\r\n if (idx) {\r\n const prev = arr[idx - 1];\r\n const distance = Geometry.getDistance(prev, point);\r\n if (distance > options.resolution) {\r\n // posición en el segmento del primer punto interpolado\r\n let pos = distance % options.resolution / 2;\r\n // x··$·····|·····|··x\r\n let n = Math.ceil(distance / options.resolution);\r\n if (pos === 0) {\r\n n = n - 1;\r\n pos = options.resolution;\r\n }\r\n const x = point[0] - prev[0];\r\n const y = point[1] - prev[1];\r\n const sin = y / distance;\r\n const cos = x / distance;\r\n let xpos = prev[0] + pos * cos;\r\n let ypos = prev[1] + pos * sin;\r\n let dx = options.resolution * cos;\r\n let dy = options.resolution * sin;\r\n for (var i = 0; i < n; i++) {\r\n newCoordinateList.push([xpos, ypos]);\r\n xpos += dx;\r\n ypos += dy;\r\n }\r\n }\r\n }\r\n newCoordinateList.push(point);\r\n });\r\n coordinateList = newCoordinateList;\r\n }\r\n else if (options.sampleNumber) {\r\n const numPoints = coordinateList.length;\r\n if (numPoints > options.sampleNumber) {\r\n // Sobran puntos. Nos quedamos con los puntos más cercanos a los puntos kilométricos\r\n // de los intervalos definidos por sampleNumber.\r\n const milestones = [];\r\n let accumulatedDistance = 0;\r\n coordinateList.forEach(function (point, idx, arr) {\r\n if (idx) {\r\n accumulatedDistance += TC.Geometry.getDistance(arr[idx - 1], point);\r\n }\r\n milestones.push({\r\n index: idx,\r\n distance: accumulatedDistance\r\n });\r\n });\r\n const intervalLength = accumulatedDistance / options.sampleNumber;\r\n let nextMilestoneDistance = 0;\r\n milestones.forEach(function (milestone, idx, arr) {\r\n const dd = milestone.distance - nextMilestoneDistance;\r\n if (dd === 0) {\r\n milestone.included = true;\r\n }\r\n else if (dd > 0) {\r\n if (milestone.index) {\r\n const prevMilestone = arr[idx - 1];\r\n if (nextMilestoneDistance - prevMilestone.distance < dd) {\r\n prevMilestone.included = true;\r\n }\r\n else {\r\n milestone.included = true;\r\n }\r\n }\r\n while (milestone.distance > nextMilestoneDistance) {\r\n nextMilestoneDistance += intervalLength;\r\n }\r\n }\r\n });\r\n milestones.filter(m => !m.included).forEach(function (m) {\r\n coordinateList[m.index] = null;\r\n });\r\n coordinateList = coordinateList.filter(p => p !== null);\r\n }\r\n else if (numPoints < options.sampleNumber) {\r\n // Faltan puntos. Insertamos puntos en las segmentos más largos.\r\n const insertBefore = function (arr, idx, count) {\r\n const p1 = arr[idx - 1];\r\n const p2 = arr[idx];\r\n const n = count + 1;\r\n let x = p1[0];\r\n let y = p1[1];\r\n const dx = (p2[0] - x) / n;\r\n const dy = (p2[1] - y) / n;\r\n const spliceParams = new Array(count + 2);\r\n spliceParams[0] = idx;\r\n spliceParams[1] = 0;\r\n for (var i = 2, ii = spliceParams.length; i < ii; i++) {\r\n x += dx;\r\n y += dy;\r\n spliceParams[i] = [x, y];\r\n }\r\n arr.splice.apply(arr, spliceParams);\r\n };\r\n let totalDistance = 0;\r\n const distances = coordinateList.map(function (point, idx, arr) {\r\n let distance = 0;\r\n if (idx) {\r\n distance = TC.Geometry.getDistance(arr[idx - 1], point);\r\n totalDistance += distance;\r\n }\r\n return {\r\n index: idx,\r\n distance: distance\r\n };\r\n });\r\n // Hacemos copia de la lista porque vamos a insertar puntos\r\n coordinateList = coordinateList.slice();\r\n const defaultCount = options.sampleNumber - numPoints;\r\n let leftCount = defaultCount;\r\n let insertionCount = 0;\r\n for (var i = 0, ii = distances.length; leftCount && i < ii; i++) {\r\n const obj = distances[i];\r\n if (obj.distance !== 0) {\r\n const partialInsertionCount = Math.min(Math.round(defaultCount * obj.distance / totalDistance), leftCount) || 1;\r\n leftCount -= partialInsertionCount;\r\n insertBefore(coordinateList, obj.index + insertionCount, partialInsertionCount);\r\n insertionCount += partialInsertionCount;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return coordinateList;\r\n }\r\n };\r\n\r\nexport default Geometry;","export default new Blob([String.raw`/*\r\n Copyright (c) 2013, Rodrigo González, Sapienlab All Rights Reserved.\r\n Available via MIT LICENSE. See https://github.com/rgcl/jsonpack/blob/master/LICENSE.md for details.\r\n */\r\n(function (n) { n([], function () { var f = -1, e = -2, i = -3, n = -4, r = -5, h = function (s, h) { var l, c, a; h = h || {}; l = h.verbose || !1; l && console.log(\"Normalize the JSON Object\"); s = typeof s == \"string\" ? this.JSON.parse(s) : s; l && console.log(\"Creating a empty dictionary\"); c = { strings: [], integers: [], floats: [] }; l && console.log(\"Creating the AST\"); var y = function v(s) { var y, w, a, p, h; if (l && console.log(\"Calling recursiveAstBuilder with \" + this.JSON.stringify(s)), y = typeof s, s === null) return { type: \"null\", index: i }; if (typeof s == \"undefined\") return { type: \"undefined\", index: r }; if (s instanceof Array) { a = [\"@\"]; for (w in s) s.hasOwnProperty(w) && a.push(v(s[w])); return a } if (y === \"object\") { a = [\"$\"]; for (p in s) s.hasOwnProperty(p) && (a.push(v(p)), a.push(v(s[p]))); return a } if (s === \"\") return { type: \"empty\", index: n }; if (y === \"string\") return h = u.call(c.strings, s), h == -1 && (c.strings.push(o(s)), h = c.strings.length - 1), { type: \"strings\", index: h }; if (y === \"number\" && s % 1 == 0) return h = u.call(c.integers, s), h == -1 && (c.integers.push(t(s)), h = c.integers.length - 1), { type: \"integers\", index: h }; if (y === \"number\") return h = u.call(c.floats, s), h == -1 && (c.floats.push(s), h = c.floats.length - 1), { type: \"floats\", index: h }; if (y === \"boolean\") return { type: \"boolean\", index: s ? f : e }; throw new Error(\"Unexpected argument of type \" + typeof s); }(s), p = c.strings.length, w = c.integers.length, k = c.floats.length; return (l && console.log(\"Parsing the dictionary\"), a = c.strings.join(\"|\"), a += \"^\" + c.integers.join(\"|\"), a += \"^\" + c.floats.join(\"|\"), l && console.log(\"Parsing the structure\"), a += \"^\" + function b(u) { var e, s, f, o; if (l && console.log(\"Calling a recursiveParser with \" + this.JSON.stringify(u)), u instanceof Array) { e = u.shift(); for (s in u) u.hasOwnProperty(s) && (e += b(u[s]) + \"|\"); return (e[e.length - 1] === \"|\" ? e.slice(0, -1) : e) + \"]\" } if (f = u.type, o = u.index, f === \"strings\") return t(o); if (f === \"integers\") return t(p + o); if (f === \"floats\") return t(p + w + o); if (f === \"boolean\") return u.index; if (f === \"null\") return i; if (f === \"undefined\") return r; if (f === \"empty\") return n; throw new TypeError(\"The item is alien!\"); }(y), l && console.log(\"Ending parser\"), h.debug) ? { dictionary: c, ast: y, packed: a } : a }, c = function (t, u) { var p, v, o, w, h, a, k, c; if (u = u || {}, p = t.split(\"^\"), u.verbose && console.log(\"Building dictionary\"), v = [], o = p[0], o !== \"\") for (o = o.split(\"|\"), u.verbose && console.log(\"Parse the strings dictionary\"), h = 0, w = o.length; h < w; h++) v.push(l(o[h])); if (o = p[1], o !== \"\") for (o = o.split(\"|\"), u.verbose && console.log(\"Parse the integers dictionary\"), h = 0, w = o.length; h < w; h++) v.push(s(o[h])); if (o = p[2], o !== \"\") for (o = o.split(\"|\"), u.verbose && console.log(\"Parse the floats dictionary\"), h = 0, w = o.length; h < w; h++) v.push(parseFloat(o[h])); o = null; u.verbose && console.log(\"Tokenizing the structure\"); var b = \"\", y = [], g = p[3].length; for (h = 0; h < g; h++) a = p[3].charAt(h), a === \"|\" || a === \"$\" || a === \"@\" || a === \"]\" ? (b && (y.push(s(b)), b = \"\"), a !== \"|\" && y.push(a)) : b += a; return k = y.length, c = 0, u.verbose && console.log(\"Starting recursive parser\"), function d() { var h = y[c++], t, s, o; if (u.verbose && console.log(\"Reading collection type \" + (h === \"$\" ? \"object\" : \"Array\")), h === \"@\") { for (t = []; c < k; c++) { if (o = y[c], u.verbose && console.log(\"Read \" + o + \" symbol\"), o === \"]\") return t; if (o === \"@\" || o === \"$\") t.push(d()); else switch (o) { case f: t.push(!0); break; case e: t.push(!1); break; case i: t.push(null); break; case r: t.push(undefined); break; case n: t.push(\"\"); break; default: t.push(v[o]) } } return u.verbose && console.log(\"Parsed \" + this.JSON.stringify(t)), t } if (h === \"$\") { for (t = {}; c < k; c++) { if (s = y[c], s === \"]\") return t; if (s = s === n ? \"\" : v[s], o = y[++c], o === \"@\" || o === \"$\") t[s] = d(); else switch (o) { case f: t[s] = !0; break; case e: t[s] = !1; break; case i: t[s] = null; break; case r: t[s] = undefined; break; case n: t[s] = \"\"; break; default: t[s] = v[o] } } return u.verbose && console.log(\"Parsed \" + this.JSON.stringify(t)), t } throw new TypeError(\"Bad token \" + h + \" isn't a type\"); }() }, a = function (s, h) { var c = typeof h, l; if (c === \"boolean\") return h ? f : e; if (h === null) return i; if (typeof h == \"undefined\") return r; if (h === \"\") return n; if (c === \"string\" && (h = o(h), l = u.call(s.strings, h), l === -1 && (s.strings.push(h), l = s.strings.length - 1)), c !== \"string\" && c !== \"number\") throw new Error(\"The type is not a JSON type\"); return c === \"string\" ? h = o(h) : h % 1 == 0 && (h = t(h)), h = c === \"number\" ? t(h) : o(h), l = u.call(s[c], h), l === -1 && (s[c].push(h), l = s[c].length - 1), c === \"number\" ? \"+\" + l : l }, o = function (n) { return typeof n != \"string\" ? n : n.replace(/[\\+ \\|\\^\\%]/g, function (n) { return { \" \": \"+\", \"+\": \"%2B\", \"|\": \"%7C\", \"^\": \"%5E\", \"%\": \"%25\" }[n] }) }, l = function (n) { return typeof n != \"string\" ? n : n.replace(/\\+|%2B|%7C|%5E|%25/g, function (n) { return { \"+\": \" \", \"%2B\": \"+\", \"%7C\": \"|\", \"%5E\": \"^\", \"%25\": \"%\" }[n] }) }, t = function (n) { return Number.prototype.toString.call(n, 36).toUpperCase() }, s = function (n) { return parseInt(n, 36) }, u = Array.prototype.indexOf || function (n, t) { for (var i = t || 0, r = this.length; i < r; i++) if (this[i] === n) return i; return -1 }; return { JSON: JSON, pack: h, unpack: c } }) })(typeof define == \"undefined\" || !define.amd ? function (n, t) { var i = t(), r; if (typeof exports != \"undefined\") for (r in i) exports[r] = i[r]; else self.jsonpack = i } : define);\r\n\r\nonmessage = function (e) {\r\n if (e.data.action) {\r\n try {\r\n const result = jsonpack[e.data.action](e.data.object);\r\n postMessage({\r\n id: e.data.id,\r\n action: e.data.action,\r\n result: result\r\n });\r\n }\r\n catch (error) {\r\n postMessage({\r\n id: e.data.id,\r\n action: e.data.action,\r\n error: error.toString()\r\n });\r\n }\r\n }\r\n};\r\n`], { type: \"text/javascript; charset=utf-8\" });","import localforage from 'localforage';\r\n\r\nimport TC from '../TC';\r\nimport Consts from './Consts';\r\nimport Cfg from './Cfg';\r\nimport Util from './Util';\r\nimport EventTarget from './EventTarget';\r\nimport i18n from './i18n';\r\nimport Layer from '../SITNA/layer/Layer';\r\nimport Raster from '../SITNA/layer/Raster';\r\nimport Vector from '../SITNA/layer/Vector';\r\nimport wrap from './ol/ol';\r\nimport './control/Attribution';\r\nimport './control/BasemapSelector';\r\nimport './control/CacheBuilder';\r\nimport './control/Click';\r\nimport './control/Container';\r\nimport './control/ControlContainer';\r\nimport './control/Coordinates';\r\nimport './control/DataLoader';\r\nimport './control/Download';\r\nimport './control/Draw';\r\nimport './control/DrawMeasureModify';\r\nimport './control/Edit';\r\nimport './control/Elevation';\r\nimport './control/ExternalWMS';\r\nimport './control/FeatureDownloadDialog';\r\nimport './control/FeatureInfo';\r\nimport './control/FeatureInfoCommons';\r\nimport './control/FeatureTools';\r\nimport './control/FileEdit';\r\nimport './control/FileImport';\r\nimport './control/FullScreen';\r\nimport './control/Geolocation';\r\nimport './control/GeometryFeatureInfo';\r\nimport './control/infoShare';\r\nimport './control/LanguageSelector';\r\nimport './control/LayerCatalog';\r\nimport './control/Legend';\r\nimport './control/LineFeatureInfo';\r\nimport './control/ListTOC';\r\nimport './control/LoadingIndicator';\r\nimport './control/MapContents';\r\nimport './control/MapInfo';\r\nimport './control/Measure';\r\nimport './control/Measurement';\r\nimport './control/Modify';\r\nimport './control/MultiFeatureInfo';\r\nimport './control/NavBar';\r\nimport './control/NavBarHome';\r\nimport './control/OfflineMapMaker';\r\nimport './control/OverviewMap';\r\nimport './control/PolygonFeatureInfo';\r\nimport './control/Popup';\r\nimport './control/Print';\r\nimport './control/PrintMap';\r\nimport './control/ProjectionSelector';\r\nimport './control/ResultsPanel';\r\nimport './control/Scale';\r\nimport './control/ScaleBar';\r\nimport './control/ScaleSelector';\r\nimport './control/Search';\r\nimport './control/SelectContainer';\r\nimport './control/Share';\r\nimport './control/StreetView';\r\nimport './control/SWCacheClient';\r\nimport './control/TabContainer';\r\nimport './control/ThreeD';\r\nimport './control/TOC';\r\nimport './control/WFSEdit';\r\nimport './control/WFSQuery';\r\nimport './control/WorkLayerManager';\r\nimport { JL } from 'jsnlog';\r\nimport Point from '../SITNA/feature/Point';\r\nimport MultiPoint from '../SITNA/feature/MultiPoint';\r\nimport Marker from '../SITNA/feature/Marker';\r\nimport MultiMarker from '../SITNA/feature/MultiMarker';\r\nimport Polyline from '../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../SITNA/feature/MultiPolygon';\r\nimport wwBlob from '../workers/tc-jsonpack-web-worker-blob.mjs';\r\n\r\nTC.EventTarget = EventTarget;\r\nTC.i18n = TC.i18n || i18n;\r\nTC.wrap = wrap;\r\nTC.control = TC.control || {};\r\n\r\nTC.inherit = function (childCtor, parentCtor) {\r\n childCtor.prototype = Object.create(parentCtor.prototype);\r\n childCtor.prototype.constructor = childCtor;\r\n childCtor._super = parentCtor.prototype;\r\n};\r\n\r\nTC.mix = function (targetCtor, ...mixins) {\r\n Object.assign(targetCtor.prototype, ...mixins);\r\n};\r\n\r\n(function () {\r\n\r\n // Polyfill de CustomEvent\r\n /*! (c) Andrea Giammarchi - ISC */\r\n var self = this || /* istanbul ignore next */ {};\r\n self.CustomEvent = typeof CustomEvent === 'function' ?\r\n CustomEvent :\r\n (function (__p__) {\r\n CustomEvent[__p__] = new CustomEvent('').constructor[__p__];\r\n return CustomEvent;\r\n function CustomEvent(type, init) {\r\n if (!init) init = {};\r\n var e = document.createEvent('CustomEvent');\r\n e.initCustomEvent(type, !!init.bubbles, !!init.cancelable, init.detail);\r\n return e;\r\n }\r\n }('prototype'));\r\n\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.matchesSelector ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n\r\n /**\r\n *

Objeto principal de la API, instancia un mapa dentro de un elemento del DOM. Nótese que el constructor es asíncrono, por tanto cualquier código que haga uso de este objeto debería\r\n * estar dentro de una función de callback pasada como parámetro al método {{#crossLink \"TC.Map/loaded:method\"}}{{/crossLink}}.

\r\n *

Puede consultar también online el ejemplo 1, el ejemplo 2 y el ejemplo 3.

\r\n * @class TC.Map\r\n * @constructor\r\n * @async\r\n * @param {HTMLElement|string} div Elemento del DOM en el que crear el mapa o valor de atributo id de dicho elemento.\r\n * @param {object} [options] Objeto de opciones de configuración del mapa. Sus propiedades sobreescriben el objeto de configuración global {{#crossLink \"TC.Cfg\"}}{{/crossLink}}.\r\n * @param {string} [options.crs=\"EPSG:25830\"] Código EPSG del sistema de referencia espacial del mapa.\r\n * @param {array} [options.initialExtent] Extensión inicial del mapa definida por x mínima, y mínima, x máxima, y máxima. \r\n * Esta opción es obligatoria si el sistema de referencia espacial del mapa es distinto del sistema por defecto (ver TC.Cfg.{{#crossLink \"TC.Cfg/crs:property\"}}{{/crossLink}}).\r\n * Para más información consultar TC.Cfg.{{#crossLink \"TC.Cfg/initialExtent:property\"}}{{/crossLink}}.\r\n * @param {array} [options.maxExtent] Extensión máxima del mapa definida por x mínima, y mínima, x máxima, y máxima. Para más información consultar TC.Cfg.{{#crossLink \"TC.Cfg/maxExtent:property\"}}{{/crossLink}}.\r\n * @param {string} [options.layout] URL de una carpeta de maquetación. Consultar TC.Cfg.{{#crossLink \"TC.Cfg/layout:property\"}}{{/crossLink}} para ver instrucciones de uso de maquetaciones.\r\n * @param {array} [options.baseLayers] Lista de identificadores de capa o instancias de la clase {{#crossLink \"TC.cfg.LayerOptions\"}}{{/crossLink}} para incluir dichas capas como mapas de fondo. \r\n * @param {array} [options.workLayers] Lista de identificadores de capa o instancias de la clase {{#crossLink \"TC.cfg.LayerOptions\"}}{{/crossLink}} para incluir dichas capas como contenido del mapa. \r\n * @param {SITNA.control.MapControlOptions} [options.controls] Opciones de controles de mapa.\r\n * @param {SITNA.layer.StyleOptions} [options.styles] Opciones de estilo de entidades geográficas.\r\n * @param {string} [options.locale=\"es-ES\"] Código de idioma de la interfaz de usuario. Este código debe ser obedecer la sintaxis definida por la IETF.\r\n * Los valores posibles son es-ES, eu-ES y en-US.\r\n * @param {string} [options.proxy] URL del proxy utilizado para peticiones a dominios remotos (ver TC.Cfg.{{#crossLink \"TC.Cfg/proxy:property\"}}{{/crossLink}}).\r\n * @example\r\n *
\r\n * \r\n * @example\r\n *
\r\n * \r\n * @example\r\n *
\r\n * \r\n */\r\n\r\n var currentState = null;\r\n var previousState = null;\r\n let stateIndex = 0;\r\n let lastStateIndex = 0;\r\n const _setupStateControl = function () {\r\n const self = this;\r\n\r\n var MIN_TIMEOUT_VALUE = 4;\r\n\r\n // eventos a los que estamos suscritos para obtener el estado \r\n var events = [\r\n Consts.event.LAYERADD,\r\n Consts.event.LAYERORDER,\r\n Consts.event.LAYERREMOVE,\r\n //Consts.event.LAYEROPACITY, // Este evento lo vamos a tratar por separado, para evitar exceso de actualizaciones de estado.\r\n Consts.event.LAYERVISIBILITY,\r\n Consts.event.ZOOM,\r\n Consts.event.BASELAYERCHANGE,\r\n Consts.event.UPDATEPARAMS\r\n ].join(' ');\r\n\r\n // gestión siguiente - anterior\r\n\r\n let eventsToMapChange = [\r\n Consts.event.LAYERUPDATE,\r\n Consts.event.FEATUREADD,\r\n Consts.event.FEATUREREMOVE,\r\n Consts.event.FEATUREMODIFY,\r\n Consts.event.FEATURESADD,\r\n Consts.event.FEATURESCLEAR,\r\n Consts.event.UPDATEPARAMS\r\n ].join(' ');\r\n\r\n self.on(eventsToMapChange, () => self.trigger(Consts.event.MAPCHANGE));\r\n\r\n // registramos el estado inicial \r\n self.replaceCurrent = true;\r\n _addToHistory.call(self);\r\n\r\n const fn_addToHistory = _addToHistory.bind(self);\r\n\r\n // nos suscribimos a los eventos para registrar el estado en cada uno de ellos\r\n self.on(events, fn_addToHistory);\r\n\r\n // a la gestión del evento de opacidad le metemos un retardo, para evitar que haya un exceso de actualizaciones de estado.\r\n var layerOpacityHandlerTimeout;\r\n self.on(Consts.event.LAYEROPACITY, function (e) {\r\n clearTimeout(layerOpacityHandlerTimeout);\r\n layerOpacityHandlerTimeout = setTimeout(function () {\r\n _addToHistory.call(self, e);\r\n }, 500);\r\n });\r\n\r\n // gestión siguiente - anterior\r\n window.addEventListener('popstate', function (e) {\r\n var wait;\r\n wait = self.loadingCtrl && self.loadingCtrl.addWait();\r\n setTimeout(async function () {\r\n if (e) {\r\n // eliminamos la suscripción para no registrar el cambio de estado que vamos a provocar\r\n self.off(events, fn_addToHistory);\r\n\r\n var state = e.state;\r\n if (Object.prototype.toString.call(state) === '[object Object]') {\r\n state = await self.checkLocation();\r\n }\r\n\r\n // gestionamos la actualización para volver a suscribirnos a los eventos del mapa \r\n _loadIntoMap.call(self, state).then(function () {\r\n setTimeout(function () {\r\n self.on(events, fn_addToHistory);\r\n }, 200);\r\n self.loadingCtrl && self.loadingCtrl.removeWait(wait);\r\n });\r\n }\r\n }, MIN_TIMEOUT_VALUE);\r\n });\r\n };\r\n\r\n const jsonPackSettleFunctions = {};\r\n const getJsonPackWorker = function () {\r\n const jsonPackWorkerUrl = URL.createObjectURL(wwBlob);\r\n const jsonPackWorker = new Worker(jsonPackWorkerUrl);\r\n jsonPackWorker.onmessage = function (e) {\r\n const settleFunctions = jsonPackSettleFunctions[e.data.id];\r\n if (settleFunctions) {\r\n if (e.data.error) {\r\n settleFunctions.reject(e.data.error);\r\n }\r\n else {\r\n settleFunctions.resolve(e.data.result);\r\n }\r\n jsonPackWorker.terminate();\r\n delete jsonPackSettleFunctions[e.data.id];\r\n }\r\n };\r\n return jsonPackWorker;\r\n };\r\n\r\n const jsonpackProcess = function (action, json) {\r\n return new Promise(function (resolve, reject) {\r\n const worker = getJsonPackWorker();\r\n const workId = TC.getUID();\r\n jsonPackSettleFunctions[workId] = { resolve: resolve, reject: reject };\r\n worker.postMessage({\r\n id: workId,\r\n action: action,\r\n object: json\r\n });\r\n });\r\n };\r\n\r\n const supportsFileSystemAccess = TC.Util.isFunction(DataTransferItem.prototype.getAsFileSystemHandle);\r\n const isStatefulLayer = function (layer) {\r\n return layer.type === Consts.layerType.WMS ||\r\n supportsFileSystemAccess && layer.type === Consts.layerType.VECTOR && layer.options.file\r\n };\r\n\r\n const _addToHistory = async function (e) {\r\n const self = this;\r\n\r\n var { state, index } = await _getMapState.call(self);\r\n if (self.replaceCurrent) {\r\n window.history.replaceState(state, null, null);\r\n delete self.replaceCurrent;\r\n return;\r\n } else {\r\n\r\n /*if (self.registerState != undefined && !self.registerState) {\r\n self.registerState = true;\r\n return;\r\n }*/\r\n\r\n var saveState = function () {\r\n previousState = currentState;\r\n currentState = TC.Util.utf8ToBase64(state);\r\n // Si el estado es distinto y no hay un estado posterior actualmente\r\n if (currentState !== previousState && index > lastStateIndex) {\r\n lastStateIndex = index;\r\n window.history.pushState(state, null, window.location.href.split('#').shift() + '#' + currentState);\r\n }\r\n };\r\n\r\n if (e) {\r\n self.lastEventType = e.type;\r\n\r\n switch (true) {\r\n case e.type === Consts.event.BASELAYERCHANGE:\r\n case e.type === Consts.event.LAYERORDER:\r\n case e.type === Consts.event.ZOOM:\r\n saveState();\r\n break;\r\n case e.type === Consts.event.UPDATEPARAMS:\r\n // unicamente modifico el hash si la capa es WMS\r\n if (e.layer.type === Consts.layerType.WMS) {\r\n saveState();\r\n }\r\n break;\r\n case e.type.toLowerCase().indexOf(\"LAYER\".toLowerCase()) > -1:\r\n // unicamente modifico el hash si la capa es WMS o vectorial de archivos locales\r\n if (isStatefulLayer(e.layer)) {\r\n saveState();\r\n }\r\n break;\r\n }\r\n\r\n self.trigger(Consts.event.MAPCHANGE);\r\n }\r\n }\r\n };\r\n\r\n const _getMapState = async function (options) {\r\n const self = this;\r\n options = options || {};\r\n var state = {};\r\n let index = stateIndex++;\r\n\r\n if (self.crs !== self.options.crs) {\r\n state.crs = self.crs;\r\n }\r\n\r\n var ext = self.getExtent();\r\n for (var i = 0; i < ext.length; i++) {\r\n if (Math.abs(ext[i]) > 180)\r\n ext[i] = Math.floor(ext[i] * 1000) / 1000;\r\n }\r\n state.ext = ext;\r\n\r\n //determinar capa base\r\n var baseLayerData = [];\r\n\r\n // ¿es una capa de respaldo?\r\n if (self.baseLayers) {\r\n baseLayerData = self.baseLayers.filter(function (baseLayer) {\r\n return baseLayer.isRaster() && baseLayer.fallbackLayer;\r\n }).map(function (baseLayer) {\r\n return {\r\n baseLayer: baseLayer, fallbackLayerID: baseLayer.fallbackLayer.id\r\n };\r\n }).filter(function (baseLayerData) {\r\n return baseLayerData.fallbackLayerID === (self.baseLayer ? self.baseLayer.id : self.baseLayers[0].id);\r\n });\r\n }\r\n\r\n if (baseLayerData.length > 0) {\r\n state.base = baseLayerData[0].baseLayer.id;\r\n } else if (self.baseLayer || self.baseLayers && self.baseLayers[0]) {\r\n state.base = (self.baseLayer || self.baseLayers[0]).id;\r\n }\r\n\r\n //capas cargadas\r\n state.layers = [];\r\n\r\n self.workLayers.forEach(function addLayerState(layer) {\r\n if (layer.type === Consts.layerType.WMS && !layer.options.stateless) {\r\n layer.layerNames = layer.names || layer.layerNames;\r\n if (layer.layerNames && layer.layerNames.length || layer.hideTree === false) {\r\n const entry = {\r\n u: TC.Util.isOnCapabilities(layer.url),\r\n n: Array.isArray(layer.names) ? layer.names.join(',') : layer.names,\r\n o: layer.getOpacity(),\r\n v: layer.getVisibility(),\r\n h: layer.options.hideTitle,\r\n ur: layer.unremovable,\r\n f: layer.filter && (layer.filter instanceof TC.filter.Filter ? layer.filter.getText() : layer.filter),\r\n t: layer.title,\r\n i: layer.id\r\n };\r\n //24/11/2021 URI: Añadir el hidetree si no tiene el valor por defecto que es true\r\n if (layer.hideTree === false) {\r\n entry.x = 0;\r\n }\r\n const availableNames = Array.isArray(layer.availableNames) ? layer.availableNames.join(',') : layer.availableNames;\r\n if (entry.n !== availableNames)\r\n entry.a = availableNames;\r\n state.layers.push(entry);\r\n }\r\n }\r\n else if (supportsFileSystemAccess && layer.type === Consts.layerType.VECTOR && layer.options.file) {\r\n const entry = {\r\n o: layer.getOpacity(),\r\n v: layer.getVisibility(),\r\n h: layer.options.hideTitle,\r\n ur: layer.unremovable,\r\n fn: layer.options.file,\r\n t: layer.title,\r\n i: layer.id\r\n };\r\n state.layers.push(entry);\r\n }\r\n });\r\n\r\n if (self.on3DView && self.view3D.cameraControls) {\r\n state.vw3 = self.view3D.cameraControls.getCameraState();\r\n }\r\n\r\n if (options.extraStates) {\r\n TC.Util.extend(state, options.extraStates);\r\n }\r\n\r\n if (!options.cacheResult && self._controlStatesCache) {\r\n delete self._controlStatesCache;\r\n }\r\n\r\n if (self._controlStatesCache) {\r\n return { state: self._controlStatesCache, index: index };\r\n }\r\n\r\n const packed = await jsonpackProcess('pack', state);\r\n if (options.cacheResult) {\r\n self._controlStatesCache = packed;\r\n }\r\n return { state: packed, index: index };\r\n };\r\n\r\n const _loadIntoMap = function (stringOrJson) {\r\n const self = this;\r\n const promises = [];\r\n\r\n if (!stringOrJson) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (!self.loadingctrl) {\r\n self.loadingCtrl = self.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n }\r\n\r\n if (!self.hasWait) {\r\n self.hasWait = self.loadingCtrl && self.loadingCtrl.addWait();\r\n }\r\n\r\n // GLS lo añado para poder gestionar el final de la actualización de estado y volver a suscribirme a los eventos del mapa\r\n return new Promise(function (resolve, _reject) {\r\n var resolved = function () {\r\n self.loadingCtrl && self.loadingCtrl.removeWait(self.hasWait);\r\n delete self.hasWait;\r\n resolve();\r\n };\r\n\r\n let objPromise;\r\n if (typeof stringOrJson === \"string\") {\r\n objPromise = new Promise(function (res, rej) {\r\n jsonpackProcess('unpack', stringOrJson)\r\n .then(obj => res(obj))\r\n .catch(_err => res(JSON.parse(stringOrJson)))\r\n .catch(err => {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'));\r\n rej(err);\r\n });\r\n });\r\n } else {\r\n objPromise = Promise.resolve(stringOrJson);\r\n }\r\n\r\n objPromise.then(function (obj) {\r\n // CRS\r\n if (obj.crs && obj.crs !== self.crs ||\r\n typeof obj.crs === 'undefined' && self.crs !== self.options.crs) {\r\n promises.push(self.setProjection({\r\n crs: obj.crs || self.options.crs,\r\n oldCrs: self.crs,\r\n extent: obj.ext,\r\n baseLayer: self.getLayer(obj.base)\r\n }));\r\n }\r\n else {\r\n //capa base\r\n if (obj.base != self.getBaseLayer().id) {\r\n if (self.getLayer(obj.base)) {\r\n self.setBaseLayer(obj.base);\r\n }\r\n const firstOption = self.baseLayers.filter(function (baseLayer) {\r\n return baseLayer.options.fallbackLayer === obj.base;\r\n })[0];\r\n if (firstOption) {\r\n const fbPromise = self.addLayer(firstOption.getFallbackLayer());\r\n promises.push(fbPromise);\r\n fbPromise.then(function (newLayer) {\r\n self.setBaseLayer(newLayer);\r\n });\r\n }\r\n }\r\n\r\n //extent\r\n if (obj.ext) {\r\n promises.push(self.setExtent(obj.ext, { animate: false }));\r\n }\r\n }\r\n\r\n obj.layers = obj.layers || obj.capas || [];\r\n\r\n if (obj.layers.length > 0) {\r\n\r\n for (var i = 0; i < obj.layers.length; i++) {\r\n var stateLayer = obj.layers[i];\r\n\r\n var layerInConfig = false;\r\n let lyrCfg;\r\n for (var j = 0; j < self.options.workLayers.length; j++) {\r\n\r\n lyrCfg = TC.Util.extend({}, self.options.workLayers[j], { map: self });\r\n\r\n if (stateLayer.u === lyrCfg.url &&\r\n stateLayer.i === lyrCfg.id) {\r\n layerInConfig = true;\r\n lyrCfg.renderOptions = { \"opacity\": stateLayer.o, \"hide\": !stateLayer.v };\r\n lyrCfg.unremovable = stateLayer.ur;\r\n lyrCfg.title = stateLayer.t;\r\n lyrCfg.hideTree = Object.prototype.hasOwnProperty.call(stateLayer, \"x\") ? !!stateLayer.x : true;\r\n if (stateLayer.n)\r\n lyrCfg.layerNames = stateLayer.n;\r\n if (stateLayer.a)\r\n lyrCfg.availableNames = stateLayer.a;\r\n promises.push(self.addOrUpdateLayer(lyrCfg).then(function (layer) {\r\n layer.setVisibility(this.v);\r\n layer.setOpacity(this.o, true);\r\n }.bind(stateLayer)));\r\n }\r\n }\r\n\r\n if (!layerInConfig) {\r\n const lyrCfg = {\r\n id: stateLayer.i || TC.getUID(),\r\n hideTitle: stateLayer.h,\r\n unremovable: stateLayer.ur,\r\n title: stateLayer.t,\r\n hideTree: Object.prototype.hasOwnProperty.call(stateLayer, \"x\") ? !!stateLayer.x : true,\r\n renderOptions: {\r\n opacity: stateLayer.o,\r\n hide: !stateLayer.v\r\n }\r\n };\r\n if (stateLayer.fn) {\r\n // Capa de archivo serializada\r\n lyrCfg.type = Consts.layerType.VECTOR;\r\n lyrCfg.file = stateLayer.fn;\r\n }\r\n else {\r\n lyrCfg.url = TC.Util.isOnCapabilities(stateLayer.u, stateLayer.u.indexOf(window.location.protocol) < 0) || stateLayer.u;\r\n lyrCfg.layerNames = stateLayer.n ? stateLayer.n.split(',') : [];\r\n }\r\n promises.push(self.addOrUpdateLayer(lyrCfg).then(function (layer) {\r\n var rootNode = layer.wrap.getRootLayerNode();\r\n layer.title = rootNode.Title || rootNode.title;\r\n /*URI:el setOpacity recibe un nuevo parametro. Que indica si se no se va a lanzar evento LAYEROPACITY\r\n esto es porque en el loadstate al establecer la opacidad dedido a un timeout pasados X segundos se lanzaba \r\n este evento y producía un push en el state innecesario*/\r\n layer.setOpacity(this.o, true);\r\n layer.setVisibility(this.v);\r\n }.bind(stateLayer)));\r\n }\r\n }\r\n }\r\n\r\n //eliinar las capas añadidas al mapa que desaparecen en el nuevo estado\r\n self.workLayers\r\n .filter(layer => isStatefulLayer(layer) && !obj.layers.some(l => l.i === layer.id))\r\n .forEach(layer => self.removeLayer(layer));\r\n\r\n Promise.all(promises)\r\n .then(function () {\r\n resolved();\r\n })\r\n .catch(function () {\r\n resolved();\r\n });\r\n })\r\n //.catch(err => resolved());\r\n .catch(function () {\r\n resolved();\r\n });\r\n });\r\n };\r\n\r\n const getReduceByValueFunction = function (prop, value) {\r\n return function (prev, cur, idx) {\r\n return cur[prop] === value ? idx : prev;\r\n };\r\n };\r\n\r\n const getReduceByZIndexFunction = function (zIndex) {\r\n return function (prev, cur, idx) {\r\n return cur.zIndex <= zIndex ? idx : prev;\r\n };\r\n };\r\n\r\n const getAvailableBaseLayer = function (id) {\r\n const ablCollection = this instanceof TC.Map ? this.options.availableBaseLayers : TC.Cfg.availableBaseLayers;\r\n return ablCollection.filter(function (abl) {\r\n return abl.id === id;\r\n })[0];\r\n };\r\n\r\n TC.Map = TC.Map || function (div, options) {\r\n ///\r\n ///Constructor\r\n ///\r\n ///Elemento del DOM en el que crear el mapa o valor de atributo id de dicho elemento.\r\n ///Objeto de opciones de configuración del mapa. Sus propiedades sobreescriben el objeto de configuración global TC.Cfg.\r\n ///\r\n ///Indica si todos los controles del mapa están cargados.\r\n ///Indica si todos los controles y todas las capas del mapa están cargados.\r\n ///Control que está activo en el mapa, y que por tanto responderá a los eventos de ratón en su área de visualización.\r\n ///Lista de todas las capas base cargadas en el mapa.\r\n ///Lista de todos los controles del mapa.\r\n const self = this;\r\n TC.EventTarget.call(self);\r\n TC.Map._instances.push(self);\r\n\r\n //TC.Object.apply(self, arguments);\r\n\r\n /**\r\n * Indica si todos los controles del mapa están cargados.\r\n * @property isReady\r\n * @type boolean\r\n * @default false\r\n */\r\n self.isReady = false;\r\n\r\n /**\r\n * Indica si todos los controles y todas las capas del mapa están cargados.\r\n * @property isLoaded\r\n * @type boolean\r\n * @default false\r\n */\r\n self.isLoaded = false;\r\n\r\n /**\r\n * Lista de todos los controles del mapa.\r\n * @property controls\r\n * @type array\r\n * @default []\r\n */\r\n self.controls = [];\r\n\r\n /**\r\n * Control que está activo en el mapa, y que por tanto responderá a los eventos de ratón en su área de visualización.\r\n * @property activeControl\r\n * @type TC.Control\r\n * @default null\r\n */\r\n self.activeControl = null;\r\n\r\n /**\r\n * Lista de todas las capas cargadas en el mapa.\r\n * @property layers\r\n * @type array\r\n * @default []\r\n */\r\n self.layers = [];\r\n\r\n /**\r\n * Lista de todas las capas base cargadas en el mapa.\r\n * @property baseLayers\r\n * @type array\r\n * @default []\r\n */\r\n self.baseLayers = [];\r\n\r\n /**\r\n * Lista de todas las capas de trabajo cargadas en el mapa.\r\n * @property workLayers\r\n * @type array\r\n * @default []\r\n */\r\n self.workLayers = [];\r\n\r\n /**\r\n * Capa base actual del mapa.\r\n * @property baseLayer\r\n * @type TC.Layer\r\n */\r\n self.baseLayer = null;\r\n\r\n /**\r\n * Capa donde se dibujan las entidades geográficas si no se especifica la capa explícitamente. Se instancia en el momento de añadir la primera entidad.\r\n * @property vectors\r\n * @type TC.layer.Vector\r\n * @default null\r\n */\r\n self.vectors = null;\r\n\r\n var loadingLayerCount = 0;\r\n /**\r\n * Elemento del DOM donde se ha creado el mapa.\r\n * @property div\r\n * @type HTMLElement\r\n */\r\n self.div = TC.Util.getDiv(div);\r\n /**\r\n * El mapa ha cargado todas sus capas iniciales y todos sus controles\r\n * @event MAPLOAD\r\n */\r\n /**\r\n * El mapa ha cargado todos sus controles, pero no hay garantía de que estén cargadas las capas\r\n * @event MAPREADY\r\n */\r\n /**\r\n * Se va a añadir una capa al mapa.\r\n * @event BEFORELAYERADD\r\n * @param {TC.Layer} layer Capa que se va a añadir.\r\n */\r\n /**\r\n * Se ha añadido una capa al mapa.\r\n * @event LAYERADD\r\n * @param {TC.Layer} layer Capa que se ha añadido.\r\n */\r\n /**\r\n * Se ha eliminado una capa del mapa.\r\n * @event LAYERREMOVE\r\n * @param {TC.Layer} layer Capa que se ha eliminado.\r\n */\r\n /**\r\n * Se ha cambiado de posición una capa en la lista de capas del mapa.\r\n * @event LAYERORDER\r\n * @param {TC.Layer} layer Capa que se ha eliminado.\r\n * @param {number} oldIndex Índice de la posición antes del cambio.\r\n * @param {number} newIndex Índice de la posición después del cambio.\r\n */\r\n /**\r\n * Se va a actualizar una capa del mapa: se van a modificar sus entidades o se va solicitar una nueva imagen.\r\n * @event BEFORELAYERUPDATE\r\n * @param {TC.Layer} layer Capa que va a actualizarse.\r\n */\r\n /**\r\n * Se ha actualizado una capa del mapa: se ha modificado sus entidades o se ha cargado una imagen nueva.\r\n * @event LAYERUPDATE\r\n * @param {TC.Layer} layer Capa que se ha actualizado.\r\n */\r\n /**\r\n * Ha habido un error al cargar la capa, bien porque no se ha podido obtener su capabilities o porque no soporta CRS compatibles.\r\n * @event LAYERERROR\r\n * @param {TC.Layer} layer Capa que sufre el error.\r\n */\r\n /**\r\n * Se ha establecido una nueva capa como mapa base.\r\n * @event BASELAYERCHANGE\r\n * @param {TC.Layer} layer Capa que es el nuevo mapa base.\r\n */\r\n /**\r\n * Se va a actualizar alguna capa del mapa.\r\n * @event BEFOREUPDATE\r\n */\r\n\r\n self.RECENT_FILES_STORE_KEY_PREFIX = 'TC.fileImportRecent.';\r\n self.recentFiles = [];\r\n self.recentFileCount = 8;\r\n\r\n self.div.classList.add(Consts.classes.LOADING, Consts.classes.MAP);\r\n\r\n // Para gestionar zoomToMarkers\r\n self._markerPromises = [];\r\n\r\n self._layerBuffer = {\r\n layers: [],\r\n contains: function (id) {\r\n return this.layers.some(function (l) {\r\n return l.id === id;\r\n });\r\n },\r\n getIndex: function (id) {\r\n return this.layers.reduce(getReduceByValueFunction('id', id), -1);\r\n },\r\n add: function (id, zIndex, isBase) {\r\n const obj = {\r\n id: id,\r\n pending: true,\r\n zIndex: zIndex,\r\n isBase: isBase\r\n };\r\n this.layers.splice(this.getIndexForZIndex(zIndex), 0, obj);\r\n },\r\n remove: function (id) {\r\n this.layers.splice(this.getIndex(id), 1);\r\n },\r\n getMapLayers: function () {\r\n return this.layers\r\n .filter(l => l.pending === false)\r\n .filter(l => !l.rejected)\r\n .map(l => l.mapLayer);\r\n },\r\n resolve: function (map, layer, isBase) {\r\n const layerObj = this.layers[this.getIndex(layer.id)];\r\n layerObj.mapLayer = layer;\r\n layerObj.pending = false;\r\n map.layers = this.getMapLayers();\r\n if (isBase) {\r\n if (map.baseLayers.length === 0) {\r\n map.baseLayers = new Array(map.options.baseLayers.length);\r\n }\r\n\r\n var index = map.options.baseLayers.map(l => l.id).indexOf(layer.id);\r\n if (index < 0) {\r\n index = map.baseLayers.map(l => l.type).indexOf(Consts.layerType.VECTOR);\r\n if (index < 0) {\r\n map.baseLayers.push(layer);\r\n } else {\r\n map.baseLayers.splice(index, 0, layer);\r\n }\r\n } else {\r\n map.baseLayers.splice(index, 1, layer);\r\n }\r\n }\r\n else {\r\n map.workLayers = map.layers.filter(function (l) {\r\n return !l.isBase;\r\n });\r\n }\r\n },\r\n reject: function (map, error) {\r\n const layerObj = this.layers[this.getIndex(error.layerId)];\r\n layerObj.mapLayer = null;\r\n layerObj.pending = false;\r\n layerObj.rejected = true;\r\n var index = map.options.baseLayers.map(l => l.id).indexOf(error.layerId);\r\n if (index >= 0) {\r\n map.baseLayers.splice(index, 1);\r\n }\r\n },\r\n getResolvedWorkLayerIndex: function (_map, id) {\r\n return this.layers.filter(function (l) {\r\n return l.id === id || !l.isBase && l.pending === false;\r\n }).reduce(getReduceByValueFunction('id', id), -1);\r\n },\r\n getResolvedVisibleLayerIndex: function (map, id) {\r\n var index = this.getResolvedWorkLayerIndex(map, id);\r\n if (map.baseLayer) {\r\n index = index + 1;\r\n }\r\n return index;\r\n },\r\n getIndexForZIndex: function (zIndex) {\r\n return this.layers.reduce(getReduceByZIndexFunction(zIndex), -1) + 1;\r\n },\r\n checkMapLoad: function (map) {\r\n const self = this;\r\n if (map.options.baseLayers\r\n .concat(map.options.workLayers)\r\n .every(function (l) {\r\n return self.contains(l.id || l);\r\n }) && // Si ya se han empezado a procesar todas las capas de las opciones\r\n !this.layers.some(function (layer) {\r\n return layer.pending === true; // Si ya se han terminado de procesar\r\n })) {\r\n const throwMapLoad = async function () {\r\n if (!map.isLoaded) {\r\n const setLoaded = function () {\r\n\r\n // 07/03/2019 GLS: Bug 24832 la gestión del estado comienza después de Consts.event.MAPLOAD, \r\n // como los callbacks a loaded se lanzan según el orden de suscripción, el de script.js de IDENA se lanza antes \r\n // que el de la gestión del estado, lo que provoca que las capas añadidas por queryString no se registren.\r\n if (map.options.stateful) {\r\n _setupStateControl.call(map);\r\n }\r\n\r\n map.isLoaded = true;\r\n // Si hay datos en cache es posible que salte el evento MAPREADY después de MAPLOAD.\r\n // Por eso quitamos la clase LOADING en un callback de ready().\r\n map.ready(() => map.div.classList.remove(Consts.classes.LOADING));\r\n map.trigger(Consts.event.MAPLOAD);\r\n };\r\n // tenemos estado 3d\r\n if (map.state && map.state.vw3) {\r\n if (!map.div.classList.contains(Consts.classes.THREED)) {\r\n map.div.classList.add(Consts.classes.THREED);\r\n\r\n if (!TC.view || !TC.view.ThreeD) {\r\n const module = await import('./view/ThreeD');\r\n TC.view = TC.view || {};\r\n TC.view.ThreeD = module.default;\r\n }\r\n TC.view.ThreeD.apply({\r\n map: map, state: map.state.vw3, callback: function () {\r\n setLoaded();\r\n\r\n map.getControlsByClass(TC.control.ThreeD)[0].button.removeAttribute(\"disabled\");\r\n }\r\n });\r\n }\r\n } else {\r\n setLoaded();\r\n }\r\n }\r\n };\r\n // Gestionamos el final de la carga del mapa\r\n if (map.baseLayer) {\r\n throwMapLoad();\r\n }\r\n else {\r\n //GLS: Si no hay mapa de fondo cargado es posible que se haya añadido desde diálogo modal, lo comprobamos en todos los mapas de fondo disponibles del API\r\n var onAvailables = [];\r\n if (map.state && map.state.base) {\r\n onAvailables = TC.Cfg.availableBaseLayers.filter(l => l.id === map.state.base);\r\n }\r\n\r\n if (onAvailables.length > 0) {\r\n onAvailables[0].isBase = true;\r\n map.addLayer(onAvailables[0]).then(function (_layer) {\r\n throwMapLoad();\r\n });\r\n }\r\n else {\r\n // Si no hay capa base cargada cargamos la primera compatible\r\n const lastResortBaseLayer = map.baseLayers.filter(function (layer) {\r\n return !layer.mustReproject;\r\n }).filter(function (l) {\r\n return l.wrap && l.wrap.layer;\r\n });\r\n\r\n if (lastResortBaseLayer.length > 0) {\r\n map.wrap.setBaseLayer(lastResortBaseLayer[0].wrap.layer);\r\n map.baseLayer = lastResortBaseLayer[0];\r\n }\r\n\r\n throwMapLoad();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n self._layerBuffer.layers = [];\r\n\r\n self._fileHandles = new WeakMap();\r\n\r\n if (!TC.ready) {\r\n TC.Cfg = TC.Util.extend({}, TC.Defaults, Cfg);\r\n TC.ready = true;\r\n }\r\n\r\n // GLS: mergeOptions es inclusivo, para poder sobrescribir los tipos de búsqueda, añado con valor a false las que el usuario no haya configurado.\r\n if (options && options.controls && options.controls.search && options.controls.search.allowedSearchTypes) {\r\n for (var allowed in TC.Cfg.controls.search.allowedSearchTypes) {\r\n if (!Object.prototype.hasOwnProperty.call(options.controls.search.allowedSearchTypes, allowed)) {\r\n options.controls.search.allowedSearchTypes[allowed] = false;\r\n }\r\n }\r\n }\r\n\r\n // Añado las capas disponibles a la configuración general\r\n\r\n /**\r\n * Objeto de opciones del constructor.\r\n * @property options\r\n * @type object\r\n */\r\n options = options || {};\r\n mergeOptions.call(self, options);\r\n\r\n self.id = options.id || TC.getUID({ prefix: 'map-' });\r\n\r\n self.crossOrigin = self.options.crossOrigin;\r\n\r\n var init = async function () {\r\n\r\n self.state = await self.checkLocation();\r\n\r\n if (self.options.layout) {\r\n self.trigger(Consts.event.LAYOUTLOAD, { map: self });\r\n }\r\n\r\n if (options && options.workLayers !== undefined) {\r\n self.options.workLayers = options.workLayers;\r\n }\r\n if (options && options.baseLayers !== undefined) {\r\n self.options.baseLayers = options.baseLayers;\r\n }\r\n\r\n if (self.options.zoomToFeatures) {\r\n // zoom a features solo cuando se cargue el mapa\r\n var handleFeaturesAdd = function handleFeaturesAdd(e) {\r\n clearTimeout(self._zoomToFeaturesTimeout);\r\n\r\n self._zoomToFeaturesTimeout = setTimeout(function () {\r\n self.zoomToFeatures(e.layer.features, { animate: false });\r\n self.off(Consts.event.FEATURESADD, handleFeaturesAdd);\r\n }, 100);\r\n };\r\n self.on(Consts.event.FEATURESADD, handleFeaturesAdd);\r\n }\r\n var _handleLayerAdd = function _handleLayerAdd(e) {\r\n if (e.layer.isBase &&\r\n (e.layer === self.baseLayer ||\r\n self.baseLayer && e.layer.fallbackLayer && e.layer.fallbackLayer.id === self.baseLayer.id)) {\r\n if (typeof self.state !== \"undefined\") {\r\n if (self.state.crs) {\r\n self.loaded(function () {\r\n self.setProjection({\r\n crs: self.state.crs,\r\n extent: self.state.ext\r\n });\r\n });\r\n }\r\n else {\r\n self.setExtent(self.state.ext, { animate: false });\r\n }\r\n }\r\n self.off(Consts.event.LAYERADD, _handleLayerAdd);\r\n }\r\n };\r\n self.on(Consts.event.LAYERADD, _handleLayerAdd);\r\n\r\n /**\r\n * Well-known ID (WKID) del CRS del mapa.\r\n * @property crs\r\n * @type string\r\n */\r\n self.crs = self.options.crs;\r\n self.initialExtent = self.options.initialExtent;\r\n self.maxExtent = self.options.maxExtent;\r\n\r\n self.defaultInfoContainer = self.defaultInfoContainer || self.options.defaultInfoContainer;\r\n // Si no se ha especificado, definimos defaultInfoContainer en base al espacio disponible en pantalla.\r\n if (!self.defaultInfoContainer && window.matchMedia('screen and (max-width: 40em), screen and (max-height: 40em)').matches) {\r\n self.defaultInfoContainer = Consts.infoContainer.RESULTS_PANEL;\r\n }\r\n\r\n\r\n self.wrap = new TC.wrap.Map(self);\r\n\r\n TC.loadProjDef({\r\n crs: self.options.crs,\r\n callback: function () {\r\n self.wrap.setMap();\r\n const ctlPromises = [];\r\n\r\n for (var name in self.options.controls) {\r\n var ctlOptions = self.options.controls[name];\r\n if (ctlOptions) {\r\n ctlOptions = typeof ctlOptions === 'boolean' ? {} : TC.Util.extend(true, {}, ctlOptions);\r\n if (typeof ctlOptions.div === 'string') {\r\n ctlOptions.div = self.div.querySelector('#' + ctlOptions.div) || ctlOptions.div;\r\n }\r\n ctlPromises.push(self.addControl(name, ctlOptions));\r\n }\r\n }\r\n\r\n self.on(Consts.event.BEFORELAYERUPDATE, _triggerLayersBeforeUpdateEvent);\r\n self.on(Consts.event.LAYERUPDATE, _triggerLayersUpdateEvent);\r\n self.on(Consts.event.LAYERERROR, _triggerLayersUpdateEvent);\r\n\r\n var i;\r\n var lyrCfg;\r\n for (i = 0; i < self.options.baseLayers.length; i++) {\r\n lyrCfg = self.options.baseLayers[i];\r\n if (typeof lyrCfg === 'string') {\r\n lyrCfg = getAvailableBaseLayer.call(self, lyrCfg);\r\n }\r\n self.addLayer(TC.Util.extend({}, lyrCfg, { isBase: true, map: self }));\r\n }\r\n\r\n //vamos creando un array de capas a añadir. Primero añadimos las capas de estado\r\n (!self.state || !self.state.layers ? [] : self.state.layers.map(function (stateLayer) {\r\n const lyrCfg = {\r\n id: stateLayer.i || TC.getUID(),\r\n hideTitle: stateLayer.h,\r\n unremovable: stateLayer.ur,\r\n title: stateLayer.t,\r\n filter: stateLayer.f,\r\n hideTree: stateLayer.x !== 0,\r\n renderOptions: {\r\n opacity: stateLayer.o,\r\n hide: !stateLayer.v\r\n }\r\n };\r\n if (stateLayer.u) {\r\n lyrCfg.url = TC.Util.isOnCapabilities(stateLayer.u, stateLayer.u.indexOf(window.location.protocol) < 0) || stateLayer.u;\r\n lyrCfg.layerNames = (stateLayer.a || stateLayer.n) ? (stateLayer.a || stateLayer.n).split(',') : undefined;\r\n }\r\n else {\r\n lyrCfg.type = Consts.layerType.VECTOR;\r\n lyrCfg.file = stateLayer.fn;\r\n }\r\n return lyrCfg;\r\n })).concat(\r\n //Despues las capas de configuración que no estén en el estado\r\n self.options.workLayers.filter(function (workLayer) {\r\n return !self.state || !self.state.layers || !self.state.layers.some((stateLayer) => workLayer.url === stateLayer.u && workLayer.id === stateLayer.i);\r\n })\r\n .map(function (workLayer) {\r\n return TC.Util.extend({}, workLayer, { map: self });\r\n }))\r\n //por ultimo recorremos el Array añadiendo las capas al mapa\r\n .forEach((lyrCfg) => {\r\n self.addLayer(lyrCfg).then(function (layer) {\r\n if (layer.wrap.getRootLayerNode) {\r\n var rootNode = layer.wrap.getRootLayerNode();\r\n }\r\n layer.title = lyrCfg.title || rootNode && (rootNode.Title || rootNode.title);\r\n if (lyrCfg.renderOptions && lyrCfg.renderOptions.opacity < 1) {\r\n layer.setOpacity(lyrCfg.renderOptions.opacity);\r\n }\r\n if (lyrCfg.renderOptions && lyrCfg.renderOptions.hide) {\r\n layer.setVisibility(!lyrCfg.renderOptions.hide);\r\n }\r\n const stateLayer = ((self.state && self.state.layers) || []).find((stateLayer) => stateLayer.u === lyrCfg.url && stateLayer.i === lyrCfg.id)\r\n if (stateLayer && stateLayer.n && stateLayer.a && stateLayer.n !== stateLayer.a)\r\n layer.setLayerNames(stateLayer.n);\r\n }.bind())\r\n .catch(function (error) {\r\n // no hacemos nada porque al llegar a este punto ya hemos gestionado el error en la instrucción crsLayerError(self, lyr); en la línea 4888\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n //URI:Si que hacemos ya que si falla el getCapabilities no hay CRS que valga\r\n self.toast(error.message, { type: Consts.msgType.ERROR });\r\n });\r\n }\r\n );\r\n Promise.all(ctlPromises).finally(function () {\r\n // 13/03/2020 si tenemos estado de controles, pasamos a establecer los estados\r\n if (self.state && self.state.ctl) {\r\n self.importControlStates(self.state.ctl);\r\n }\r\n\r\n self.isReady = true;\r\n self.trigger(Consts.event.MAPREADY);\r\n });\r\n setHeightFix(self.div);\r\n }\r\n });\r\n\r\n self.on(Consts.event.FEATURECLICK, function (e) {\r\n if (!self.activeControl || !self.activeControl.isExclusive()) {\r\n e.feature.showInfo();\r\n }\r\n });\r\n\r\n self.on(Consts.event.NOFEATURECLICK, function (e) {\r\n e.layer._noFeatureClicked = true;\r\n var allLayersClicked = true;\r\n for (var i = 0, len = self.workLayers.length; i < len; i++) {\r\n if (!self.workLayers[i]._noFeatureClicked) {\r\n allLayersClicked = false;\r\n break;\r\n }\r\n }\r\n if (allLayersClicked) {\r\n self.workLayers.forEach(function (wl) {\r\n delete wl._noFeatureClicked;\r\n });\r\n self.getControlsByClass(TC.control.Popup).forEach(function (p) {\r\n if (p.isVisible()) {\r\n p.hide();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n mapProto.getMapState = async function (options) {\r\n const self = this;\r\n\r\n var stateObj = await _getMapState.call(self, options);\r\n return TC.Util.utf8ToBase64(stateObj.state);\r\n };\r\n\r\n mapProto.getPreviousMapState = function () {\r\n return previousState;\r\n };\r\n\r\n mapProto.checkLocation = async function () {\r\n const self = this;\r\n var hash = window.location.hash;\r\n\r\n if (hash && hash.length > 1) {\r\n hash = hash.substr(1);\r\n\r\n var obj;\r\n try {\r\n obj = await jsonpackProcess('unpack', TC.Util.base64ToUtf8(hash));\r\n }\r\n catch (error) {\r\n try {\r\n obj = JSON.parse(TC.Util.base64ToUtf8(hash));\r\n }\r\n catch (err) {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), Consts.msgErrorMode.TOAST);\r\n return;\r\n }\r\n }\r\n\r\n if (TC.Util.detectIE() && window.location.href.length === 2047) {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValidForEdge'), Consts.msgErrorMode.TOAST);\r\n }\r\n\r\n if (obj) {\r\n var inValidState = false;\r\n //chequeo la integriadad del objeto restaurado del State\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"ext\")) {\r\n inValidState = true;\r\n obj.ext = self.options.initialExtent;\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"base\")) {\r\n inValidState = true;\r\n obj.base = self.options.defaultBaseLayer;\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"layers\")) {\r\n inValidState = true;\r\n obj.layers = [];\r\n }\r\n else {\r\n for (var i = obj.layers.length - 1; i >= 0; i--) {\r\n const stateLayer = obj.layers[i];\r\n if (!stateLayer ||\r\n !(Object.prototype.hasOwnProperty.call(stateLayer, \"u\") && Object.prototype.hasOwnProperty.call(stateLayer, \"n\") ||\r\n Object.prototype.hasOwnProperty.call(stateLayer, \"fn\"))) {\r\n inValidState = true;\r\n obj.layers.length = obj.layers.length - 1;\r\n continue;\r\n }\r\n else if (!Object.prototype.hasOwnProperty.call(stateLayer, \"o\") ||\r\n !Object.prototype.hasOwnProperty.call(stateLayer, \"v\") ||\r\n !Object.prototype.hasOwnProperty.call(stateLayer, \"h\")) {\r\n inValidState = true;\r\n TC.Util.extend(stateLayer, {\r\n o: stateLayer.o || 1,\r\n v: stateLayer.v || true,\r\n h: stateLayer.h || false\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (Object.prototype.hasOwnProperty.call(obj, \"vw3\")) {\r\n\r\n if (!obj.vw3) {\r\n inValidState = true;\r\n } else if (!obj.vw3.cp || obj.vw3.cp.length !== 3 ||\r\n !obj.vw3.chpr || obj.vw3.chpr.length !== 3 ||\r\n !obj.vw3.bcpd) {\r\n inValidState = true;\r\n }\r\n }\r\n\r\n if (inValidState)\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), Consts.msgErrorMode.TOAST);\r\n return obj;\r\n }\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), Consts.msgErrorMode.TOAST);\r\n }\r\n return;\r\n };\r\n\r\n /*\r\n * _triggerLayersBeforeUpdateEvent: Triggers map beforeupdate event (jQuery.Event) when any layer starts loading\r\n * Parameters: OpenLayers.Layer, event name ('loadstart', 'loadend')\r\n */\r\n var _triggerLayersBeforeUpdateEvent = function (_e) {\r\n if (loadingLayerCount <= 0) {\r\n loadingLayerCount = 0;\r\n self.trigger(Consts.event.BEFOREUPDATE);\r\n }\r\n loadingLayerCount = loadingLayerCount + 1;\r\n };\r\n\r\n var _triggerLayersUpdateEvent = function (_e) {\r\n loadingLayerCount = loadingLayerCount - 1;\r\n if (loadingLayerCount <= 0) {\r\n loadingLayerCount = 0;\r\n self.trigger(Consts.event.UPDATE);\r\n }\r\n };\r\n\r\n const locale = self.options.locale;\r\n\r\n TC.i18n.loadResources(!TC.i18n[locale], TC.apiLocation + 'resources/', locale).finally(function () {\r\n // Si no hay tamaño definido en el div, lo ponemos a pantalla completa\r\n // Lo ponemos aquí porque es poco antes de cargar markup.html\r\n const divRect = self.div.getBoundingClientRect();\r\n if (divRect.height === 0) {\r\n document.querySelectorAll('html,body').forEach(elm => elm.classList.add(Consts.classes.FULL_SCREEN));\r\n self.div.classList.add(Consts.classes.FULL_SCREEN);\r\n }\r\n // 22/03/2019 GLS: siempre vamos a tener layout porque en sitna.js (1757) se establece por defecto layout/responsive\r\n // si el usuario define otro se sobrescribe\r\n if (self.options.layout) {\r\n var layout = self.options.layout;\r\n\r\n self.trigger(Consts.event.BEFORELAYOUTLOAD, { map: self });\r\n\r\n var layoutURLs = {};\r\n var ignoreError = false;\r\n if (typeof layout === 'string') {\r\n var href = layout.trim();\r\n href += href.match(/\\/$/) ? '' : '/';\r\n\r\n layoutURLs.config = href + 'config.json';\r\n layoutURLs.markup = href + 'markup.html';\r\n layoutURLs.style = href + 'style.css';\r\n layoutURLs.script = href + 'script.js';\r\n layoutURLs.i18n = href + 'resources';\r\n\r\n // Si el layout se define como string, no podemos saber qué archivos a definido y cuales no, \r\n // por eso tampoco podemos saber si es un error de configuración o es que no lo ha definido así que no mostramos error entendiendo que si\r\n // el archivo no está es porque no quiere.\r\n ignoreError = true;\r\n }\r\n else if (\r\n Object.prototype.hasOwnProperty.call(layout, 'config') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'markup') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'style') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'script') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'href') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'i18n')\r\n ) {\r\n layoutURLs = TC.Util.extend({}, layout);\r\n }\r\n\r\n if (layoutURLs.i18n) {\r\n layoutURLs.i18n += layoutURLs.i18n.match(/\\/$/) ? '' : '/';\r\n }\r\n\r\n self.layout = layoutURLs;\r\n\r\n const layoutPromises = [];\r\n const ResponseError = function (status, url) {\r\n this.status = status;\r\n this.url = url;\r\n };\r\n const onError = function (error) {\r\n if (!ignoreError || error.status != 404) {\r\n const mapObj = TC.Map.get(document.querySelector('.' + Consts.classes.MAP));\r\n TC.error(\r\n TC.Util.getLocaleString(mapObj.options.locale, \"urlFailedToLoad\",\r\n { url: error.url }),\r\n [Consts.msgErrorMode.TOAST, Consts.msgErrorMode.EMAIL],\r\n \"Error al cargar \" + error.url);\r\n }\r\n };\r\n\r\n const i18nLayoutPromise = new Promise(function (resolve, _reject) {\r\n if (layoutURLs.config) {\r\n\r\n layoutPromises.push(fetch(layoutURLs.config)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.config);\r\n }\r\n return response.json();\r\n }).then(function (data) {\r\n resolve(data.i18n);\r\n mergeOptions.call(self, data, options);\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve(false);\r\n }));\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n layoutPromises.push(i18nLayoutPromise);\r\n\r\n if (layoutURLs.style) {\r\n layoutPromises.push(new Promise(function (resolve, _reject) {\r\n // Añadimos una clase para hacer más fáciles las reglas del layout\r\n self.div.classList.add('tc-lo');\r\n\r\n // GLS: 28/03/2019 Necesito hacer el HEAD para validar si existe porque si lo hago directamente y lo cargo como BLOB, \r\n // las referencias a las fuentes son relativas al blob por lo que no funcionan, así que HEAD y si existe lo cargo por href\r\n // FLP: 03/11/2022 Las peticiones HEAD no se guardan en la cache, así que offline fallan, por eso la opción GET.\r\n // (Leer navigator.onLine no es fiable, da falsos positivos, así que no condicionamos el si fetch es HEAD o GET a esa propiedad)\r\n fetch(layoutURLs.style, { method: 'GET' })\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.style);\r\n }\r\n return response;\r\n })\r\n .then(function () {\r\n var linkElement = document.createElement('link');\r\n linkElement.rel = 'stylesheet';\r\n linkElement.href = layoutURLs.style;\r\n\r\n document.head.appendChild(linkElement);\r\n resolve();\r\n })\r\n .catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve();\r\n });\r\n }));\r\n }\r\n\r\n if (layoutURLs.markup) {\r\n layoutPromises.push(new Promise(function (resolve, _reject) {\r\n\r\n fetch(layoutURLs.markup)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.markup);\r\n }\r\n return response.text();\r\n }).then(function (data) {\r\n // markup.html puede ser una plantilla para soportar i18n, compilarla si es el caso\r\n i18nLayoutPromise.then(function (i18n) {\r\n if (i18n && locale && layoutURLs.i18n) {\r\n TC.i18n.loadResources(true, layoutURLs.i18n, locale).finally(function () {\r\n const replacerFn = function (_match, grp1, grp2, grp3) {\r\n return TC.Util.getLocaleString(locale, grp1 || grp2 || grp3);\r\n };\r\n //data = data.replace(/\\{\\{([^\\}\\{]+)\\}\\}/g, replacerFn); // Estilo {{key}}\r\n //data = data.replace(/\\{@i18n \\$key=\"([^\\}\\{]+)\"\\/\\}/g, replacerFn); // Estilo {@i18n $key=\"key\"/}\r\n //data = data.replace(/\\{\\{i18n \"([^\\}\\{]+)\"\\}\\}/g, replacerFn); // Estilo {{i18n \"key\"}}\r\n data = data.replace(/\\{\\{i18n \"([^\\}\\{]+)\"\\}\\}|\\{\\{([^\\}\\{]+)\\}\\}|\\{@i18n \\$key=\"([^\\}\\{]+)\"\\/\\}/g, replacerFn); // Los tres estilos anteriores\r\n self.div.insertAdjacentHTML('beforeend', data);\r\n resolve();\r\n });\r\n }\r\n else {\r\n self.div.insertAdjacentHTML('beforeend', data);\r\n resolve();\r\n }\r\n });\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve();\r\n });\r\n }));\r\n }\r\n\r\n Promise.all(layoutPromises).finally(function () {\r\n\r\n if (layoutURLs.script) {\r\n fetch(layoutURLs.script)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.script);\r\n }\r\n return response.blob();\r\n }).then(function (fileBlob) {\r\n var fileURL = URL.createObjectURL(fileBlob);\r\n\r\n var scriptElement = document.createElement('script');\r\n scriptElement.src = fileURL;\r\n\r\n scriptElement.onload = function () {\r\n setHeightFix(self.div);\r\n init();\r\n };\r\n\r\n document.head.appendChild(scriptElement);\r\n\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n init();\r\n });\r\n } else {\r\n init();\r\n }\r\n });\r\n\r\n }\r\n else {\r\n init();\r\n }\r\n });\r\n\r\n // Borramos árboles de capas cacheados\r\n self.on(Consts.event.UPDATEPARAMS, function (e) {\r\n deleteTreeCache(e.layer);\r\n });\r\n self.on(Consts.event.ZOOM, function () {\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n deleteTreeCache(self.workLayers[i]);\r\n }\r\n });\r\n\r\n // Redefinimos TC.error para añadir un aviso en el mapa\r\n /*var oldError = TC.error;\r\n TC.error = function (text) {\r\n oldError(text);\r\n self.toast(text, { type: Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n };*/\r\n var oldError = TC.error;\r\n TC.error = function (text, options, subject) {\r\n if (TC.isDebug && console.trace) {\r\n console.trace();\r\n }\r\n if (!options) {\r\n oldError(text);\r\n self.toast(text, { type: Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n }\r\n else {\r\n var fnc = function (text, mode, subject) {\r\n switch (mode) {\r\n case Consts.msgErrorMode.TOAST:\r\n if (!self.toast) { console.warn(\"No existe el objeto Toast\"); return; }\r\n self.toast(text, { type: Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n break;\r\n case Consts.msgErrorMode.EMAIL:\r\n if (TC.Cfg.loggingErrorsEnabled) {\r\n JL(\"onerrorLogger\").fatalException(!subject ? text : {\r\n \"msg\": subject,\r\n \"errorMsg\": text\r\n }, null);\r\n }\r\n break;\r\n case Consts.msgErrorMode.CONSOLE:\r\n default:\r\n console.error(text);\r\n break;\r\n }\r\n };\r\n if (!Array.isArray(options)) {\r\n fnc(text, options, subject);\r\n }\r\n else {\r\n for (var i = 0; i < options.length; i++) {\r\n fnc(text, options[i], subject);\r\n }\r\n }\r\n }\r\n\r\n };\r\n };\r\n\r\n TC.Map._instances = [];\r\n\r\n TC.Map.get = function (elm) {\r\n for (var i = 0, len = TC.Map._instances.length; i < len; i++) {\r\n const instance = TC.Map._instances[i];\r\n if (instance.div === elm) {\r\n return instance;\r\n }\r\n }\r\n };\r\n\r\n TC.inherit(TC.Map, TC.EventTarget);\r\n\r\n var deleteTreeCache = function (layer) {\r\n if (layer.type === Consts.layerType.WMS) {\r\n layer.tree = null;\r\n }\r\n };\r\n\r\n /*\r\n * Función que mezcla opciones de mapa relativos a capa, teniendo cuidado de que puede haber objetos de opciones de capa o identificadores de capa.\r\n * En este último caso, si no son la opción prioritaria, hay que sustituirlos por los objetos de definiciones de capa.\r\n */\r\n var mergeLayerOptions = function (optionsArray, propertyName) {\r\n const self = this;\r\n // lista de opciones de capa de los argumentos\r\n var layerOptions = Array.prototype.slice.call(optionsArray).map(function (elm) {\r\n var result = {};\r\n if (elm) {\r\n result[propertyName] = elm[propertyName];\r\n }\r\n return result;\r\n });\r\n if (propertyName === 'availableBaseLayers') console.log(\"layerOptions\", layerOptions);\r\n // añadimos las opciones de capa de la configuración general\r\n var layerOption = {};\r\n layerOption[propertyName] = TC.Cfg[propertyName];\r\n layerOptions.unshift(layerOption);\r\n\r\n //Si se han definido baseLayers en el visor, hay que hacer un merge con las predefinidas en la API\r\n if (propertyName === 'baseLayers' && layerOptions[1]['baseLayers']) {\r\n layerOption = layerOptions[1];\r\n\r\n for (var i = 0; i < layerOption.baseLayers.length; i++) {\r\n if (typeof layerOption.baseLayers[i] === 'object') {\r\n TC.Util.extend(layerOption.baseLayers[i], getAvailableBaseLayer.call(self, layerOption.baseLayers[i].id));\r\n }\r\n }\r\n } else {\r\n layerOptions.unshift(true); // Deep merge\r\n layerOption = TC.Util.extend.apply(this, layerOptions);\r\n if (propertyName === 'availableBaseLayers') console.log(\"layerOption\", layerOption);\r\n }\r\n\r\n return layerOption[propertyName];\r\n };\r\n\r\n const mergeControlOptions = function (controlOptions) {\r\n\r\n if (controlOptions.controlContainer) {\r\n\r\n if (Array.isArray(controlOptions.controlContainer.controls)) {\r\n\r\n controlOptions.controlContainer.controls.forEach((ctl) => {\r\n Object.keys(ctl).filter((key) => key !== \"position\").forEach((name) => {\r\n if (controlOptions[name] !== undefined) {\r\n if (typeof ctl[name] === 'boolean') {\r\n ctl[name] = {};\r\n }\r\n TC.Util.extend(ctl[name], controlOptions[name]);\r\n delete controlOptions[name];\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n // GLS compatibilidad hacia atrás\r\n\r\n Object.keys(controlOptions).filter(function (key) {\r\n return Object.keys(controlOptions.controlContainer.controls).indexOf(key) > -1;\r\n }).forEach(function (key) {\r\n const containerControl = controlOptions.controlContainer.controls[key];\r\n if (typeof containerControl.options === 'boolean') {\r\n containerControl.options = {};\r\n }\r\n TC.Util.extend(containerControl.options, controlOptions[key]);\r\n delete controlOptions[key];\r\n });\r\n }\r\n }\r\n\r\n return controlOptions;\r\n };\r\n\r\n const mergeOptions = function () {\r\n const argArray = [true, {}, TC.Cfg].concat(Array.prototype.slice.call(arguments));\r\n const result = this.options = TC.Util.extend.apply(this, argArray);\r\n // Concatenamos las colecciones availableBaseLayers\r\n result.availableBaseLayers = TC.Cfg.availableBaseLayers.concat.apply(TC.Cfg.availableBaseLayers, Array.prototype.map.call(arguments, function (arg) {\r\n return arg.availableBaseLayers || [];\r\n }));\r\n result.baseLayers = mergeLayerOptions.call(this, arguments, 'baseLayers');\r\n result.workLayers = mergeLayerOptions.call(this, arguments, 'workLayers');\r\n\r\n const controls = Array.prototype.slice.call(arguments)\r\n .filter(elem => elem.controls)\r\n .map(elem => elem.controls);\r\n if (controls.length > 0) {\r\n result.controls = TC.Util.extend(true, result.controls, mergeControlOptions(TC.Util.extend(true, controls[0], controls[1])));\r\n }\r\n return result;\r\n };\r\n\r\n var mapProto = TC.Map.prototype;\r\n\r\n var crsLayerError = function (map, layer) {\r\n var errorMessage = 'Layer \"' + layer.title + '\" (\"' + layer.names + '\"): ';\r\n var reason;\r\n if (layer.isValidFromNames()) {\r\n reason = 'layerSrsNotCompatible';\r\n } else {\r\n reason = 'layerNameNotValid';\r\n }\r\n errorMessage += TC.Util.getLocaleString(map.options.locale, reason);\r\n TC.error(errorMessage);\r\n map.trigger(Consts.event.LAYERERROR, { layer: layer, reason: reason });\r\n\r\n const error = Error(errorMessage);\r\n error.layerId = layer.id;\r\n return error;\r\n };\r\n\r\n mapProto.getCrs = mapProto.getCRS = function () {\r\n const self = this;\r\n\r\n if (!self.on3DView) {\r\n return self.crs;\r\n } else {\r\n return self.view3D.crs;\r\n }\r\n };\r\n\r\n mapProto.setCrs = async function (crs, callback) {\r\n const self = this;\r\n await self.setProjection({ crs: crs });\r\n if (TC.Util.isFunction(callback)) {\r\n callback(crs);\r\n }\r\n return crs;\r\n };\r\n\r\n const appendRasterEvents = function (layer) {\r\n layer.wrap.$events.on(Consts.event.TILELOADERROR, function (event) {\r\n if ((event.error.code && event.error.code.toString() != '404') && (event.error.text != 'offline')) {\r\n const wrap = this;\r\n if (!wrap._tileloaderror) {\r\n const path = layer.getPath();\r\n const title = path.length ? path[path.length - 1] : layer.title;\r\n layer.map.toast(TC.Util.getLocaleString(layer.map.options.locale, 'tileload.error',\r\n { name: title, error: event.error.text }),\r\n { type: Consts.msgType.ERROR });\r\n wrap._tileloaderror = true;\r\n const onTileload = function (e) {\r\n if (e.tile.src && e.tile.src !== Consts.BLANK_IMAGE) {\r\n delete wrap._tileloaderror;\r\n wrap.$events.off(Consts.event.TILELOAD, onTileload);\r\n }\r\n };\r\n wrap.$events.on(Consts.event.TILELOAD, onTileload);\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Añade una capa al mapa.\r\n * @method addLayer\r\n * @async\r\n * @param {TC.Layer|TC.cfg.LayerOptions|string} layer Objeto de capa, objeto de opciones del constructor de la capa, o identificador de capa.\r\n * @param {function} [callback] Función de callback.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Layer\"}}{{/crossLink}}\r\n */\r\n mapProto.addLayer = function (layer, callback) {\r\n const self = this;\r\n\r\n const result = new Promise(function (resolve, reject) {\r\n\r\n if (typeof layer === 'object') {\r\n if (!layer.id)\r\n layer.id = TC.getUID();\r\n else {\r\n //URI expresion regular para sacar el prefijo y el número del ID de la capa y setear lista de prefijos\r\n const groups = /(?[-_\\p{Letter}]+(\\u002D\\d)?\\u002D)?(?[\\d]*)?/gu.exec(layer.id).groups;\r\n if (groups[\"num\"] && groups[\"ctl\"])\r\n TC.setUIDStart(parseInt(groups[\"num\"]) + 1, { prefix: groups[\"ctl\"] });\r\n }\r\n\r\n }\r\n\r\n let zIndex = layer.options ? layer.options.zIndex : layer.zIndex;\r\n if (typeof zIndex !== 'number') {\r\n zIndex = layer.stealth ? 1 : 0;\r\n }\r\n\r\n self._layerBuffer.add(layer.id || layer, zIndex, layer.isBase);\r\n\r\n if (self.getLayer(layer.id)) {\r\n // Si ya existe capa con el mismo id, lanzamos error\r\n const error = Error(`Layer \"${layer.id}\" already exists`);\r\n error.layerId = layer.id;\r\n reject(error);\r\n return;\r\n }\r\n\r\n var lyr;\r\n if (typeof layer === 'string') {\r\n lyr = new Raster(TC.Util.extend({}, getAvailableBaseLayer.call(self, layer), { map: self }));\r\n }\r\n else {\r\n if (layer instanceof Layer) {\r\n lyr = layer;\r\n lyr.map = self;\r\n }\r\n else {\r\n layer.map = self;\r\n if (layer.type === Consts.layerType.VECTOR || layer.type === Consts.layerType.KML || layer.type === Consts.layerType.WFS) {\r\n lyr = new Vector(layer);\r\n }\r\n else {\r\n lyr = new Raster(layer);\r\n }\r\n }\r\n }\r\n\r\n Promise.all([self.wrap.getMap(), lyr.wrap.getLayer()]).then(function () {\r\n\r\n self.trigger(Consts.event.BEFORELAYERADD, { layer: lyr });\r\n\r\n // Nos aseguramos de que las capas raster se quedan por debajo de las vectoriales\r\n var idx;\r\n if (isRaster(lyr)) {\r\n appendRasterEvents(lyr);\r\n idx = self.wrap.indexOfFirstVector();\r\n }\r\n if (idx === -1) {\r\n idx = self.wrap.getLayerCount();\r\n }\r\n\r\n const currentCrs = self.state && self.state.crs ? self.state.crs : self.getCRS();\r\n TC.loadProjDef({\r\n crs: currentCrs,\r\n callback: function () {\r\n const isCompatible = lyr.isCompatible(currentCrs);\r\n if (lyr.isBase) {\r\n const baseLayerEndFn = function () {\r\n if (self.state) {\r\n lyr.isDefault = self.state.base === lyr.id ||\r\n self.state.base === lyr.options.fallbackLayer;\r\n }\r\n else if (typeof self.options.defaultBaseLayer === 'string') {\r\n lyr.isDefault = self.options.defaultBaseLayer === lyr.id;\r\n }\r\n else if (typeof self.options.defaultBaseLayer === 'number') {\r\n lyr.isDefault = self.options.defaultBaseLayer === self.baseLayers.length;\r\n }\r\n if (lyr.isDefault) {\r\n var fit;\r\n if (lyr.mustReproject &&\r\n (lyr.type !== Consts.layerType.WMTS || !lyr.wrap.getCompatibleMatrixSets(currentCrs)[0])) {\r\n if (lyr.options.fallbackLayer && lyr.getFallbackLayer) {\r\n\r\n self.addLayer(lyr.getFallbackLayer()).then(function (l) {\r\n self.wrap.setBaseLayer(l.wrap.layer);\r\n self.baseLayer = l.wrap.parent;\r\n // GLS: Tema casita + initialExtent\r\n fitToInitialExtent(fit);\r\n\r\n resolve(lyr);\r\n });\r\n } else {\r\n reject(crsLayerError(self, lyr));\r\n }\r\n }\r\n else {\r\n fit = self.baseLayer === null;\r\n\r\n lyr.wrap.getLayer().then(function (ollyr) {\r\n self.wrap.setBaseLayer(ollyr);\r\n self.baseLayer = lyr;\r\n\r\n // GLS: Tema casita + initialExtent\r\n fitToInitialExtent(fit);\r\n\r\n resolve(lyr);\r\n });\r\n }\r\n }\r\n else {\r\n //self.baseLayers.push(lyr);\r\n resolve(lyr);\r\n }\r\n };\r\n if (isCompatible) {\r\n baseLayerEndFn();\r\n }\r\n else {\r\n // Puede ser que sea una capa nueva en un capabilities nuevo que lo tenemos cacheado\r\n // Antes de lanzar error, nos aseguramos de que tenemos la versión nueva\r\n lyr.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n lyr.capabilities = onlineCapabilities;\r\n if (!lyr.isCompatible(currentCrs)) {\r\n if (lyr.type !== Consts.layerType.WMTS) {\r\n lyr.mustReproject = true;\r\n }\r\n else {\r\n const compatibleMatrixSet = lyr.wrap.getCompatibleMatrixSets(currentCrs)[0];\r\n if (compatibleMatrixSet) {\r\n lyr.wrap.setMatrixSet(compatibleMatrixSet);\r\n }\r\n else {\r\n lyr.mustReproject = true;\r\n }\r\n }\r\n }\r\n baseLayerEndFn();\r\n });\r\n }\r\n }\r\n else {\r\n if (isCompatible) {\r\n lyr.wrap.getLayer().then(function (_l) {\r\n resolve(lyr);\r\n });\r\n }\r\n else {\r\n // Puede ser que sea una capa nueva en un capabilities nuevo que lo tenemos cacheado\r\n // Antes de lanzar error, nos aseguramos de que tenemos la versión nueva\r\n lyr.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n lyr.capabilities = onlineCapabilities;\r\n if (lyr.isCompatible(currentCrs)) {\r\n lyr.wrap.getLayer().then(function (_l) {\r\n resolve(lyr);\r\n });\r\n }\r\n else {\r\n reject(crsLayerError(self, lyr));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }, function (error) {\r\n var err = new Error(error);\r\n err.layerId = layer.id;\r\n reject(err);\r\n });\r\n });\r\n\r\n result\r\n .then(function (l) {\r\n self._layerBuffer.resolve(self, l, l.isBase);\r\n if (!l.isBase) {\r\n self.wrap.insertLayer(l.wrap.layer, self._layerBuffer.getResolvedVisibleLayerIndex(self, l.id));\r\n }\r\n self.trigger(Consts.event.LAYERADD, { layer: l });\r\n self._layerBuffer.checkMapLoad(self);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(l);\r\n }\r\n }, function (err) {\r\n self._layerBuffer.reject(self, err);\r\n self._layerBuffer.checkMapLoad(self);\r\n });\r\n\r\n const fitToInitialExtent = function (fit) {\r\n if (fit) {\r\n self.setExtent(self.initialExtent, { animate: false, contain: true });\r\n }\r\n };\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade o actualiza una capa al mapa.\r\n * @method addLayer\r\n * @async\r\n * @param {TC.Layer|TC.cfg.LayerOptions|string} layer Objeto de capa, objeto de opciones del constructor de la capa, o identificador de capa.\r\n * @param {function} [callback] Función de callback.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Layer\"}}{{/crossLink}}\r\n */\r\n mapProto.addOrUpdateLayer = async function (layer, callback) {\r\n const self = this;\r\n const currentLayer = self.getLayer(layer.id);\r\n if (currentLayer) {\r\n //actualiza\t\t\t\r\n const layerNamesAsArray = Array.isArray(layer.layerNames) ? layer.layerNames :\r\n layer.layerNames ? layer.layerNames.split(',') : [];\r\n switch (currentLayer.type) {\r\n case Consts.layerType.WFS:\r\n break;\r\n case Consts.layerType.WMS:\r\n if (currentLayer.layerNames !== layerNamesAsArray) {\r\n await currentLayer.setLayerNames(layerNamesAsArray);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (layer.visibility != undefined && currentLayer.visibility !== layer.visibility) {\r\n currentLayer.setVisibility(layer.visibility);\r\n currentLayer.renderOptions = Object.assign(layer.renderOptions, { hide: layer.visibility });\r\n }\r\n if (layer.opacity !== undefined && currentLayer.opacity !== layer.opacity) {\r\n currentLayer.setOpacity(layer.opacity, true);\r\n currentLayer.renderOptions = Object.assign(layer.renderOptions, { opacity: layer.opacity });\r\n }\r\n currentLayer.unremovable = layer.unremovable;\r\n currentLayer.title = layer.title;\r\n currentLayer.hideTree = layer.hideTree;\r\n return currentLayer;\r\n }\r\n return await self.addLayer(layer, callback);\r\n };\r\n\r\n mapProto.removeLayer = async function (layer) {\r\n const self = this;\r\n\r\n if (layer.unremovable) {\r\n throw Error(\"Unremovable\");\r\n }\r\n\r\n let found = false;\r\n for (var i = 0; i < self.layers.length; i++) {\r\n if (self.layers[i] === layer) {\r\n self.layers.splice(i, 1);\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n throw Error(`Layer ${layer.id} not found in map`);\r\n }\r\n if (layer.isBase) {\r\n for (i = 0; i < self.baseLayers.length; i++) {\r\n if (self.baseLayers[i] === layer) {\r\n self.baseLayers.splice(i, 1);\r\n if (self.baseLayer === layer) {\r\n self.setBaseLayer(self.baseLayers[0]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (i = 0; i < self.workLayers.length; i++) {\r\n if (self.workLayers[i] === layer) {\r\n self.workLayers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if (layer === self.vectors) {\r\n self.vectors = null;\r\n }\r\n }\r\n\r\n const olLayer = await layer.wrap.getLayer();\r\n self.wrap.removeLayer(olLayer);\r\n self._layerBuffer.remove(layer.id);\r\n self.trigger(Consts.event.LAYERREMOVE, { layer: layer });\r\n self._layerBuffer.checkMapLoad(self);\r\n return layer;\r\n };\r\n\r\n mapProto.insertLayer = async function (layer, idx, callback) {\r\n const self = this;\r\n var beforeIdx = -1;\r\n for (var i = 0; i < self.layers.length; i++) {\r\n if (layer === self.layers[i]) {\r\n beforeIdx = i;\r\n break;\r\n }\r\n }\r\n\r\n const olLayerPromise = layer.wrap.getLayer();\r\n const targetLayer = self.layers[idx];\r\n let olTargetLayer;\r\n if (targetLayer) {\r\n olTargetLayer = await targetLayer.wrap.getLayer();\r\n }\r\n const olLayer = await olLayerPromise;\r\n var olIdx = -1;\r\n if (olTargetLayer) {\r\n olIdx = self.wrap.getLayerIndex(olTargetLayer);\r\n }\r\n else {\r\n olIdx = self.wrap.getLayerCount();\r\n }\r\n if (olIdx >= 0) {\r\n layer.map = self;\r\n self.wrap.insertLayer(olLayer, olIdx);\r\n if (beforeIdx > -1) {\r\n self.layers.splice(beforeIdx, 1);\r\n }\r\n self.layers.splice(idx, 0, layer);\r\n self.workLayers = self.layers.filter(function (elm) {\r\n return !elm.isBase;\r\n });\r\n self.trigger(Consts.event.LAYERORDER, { layer: layer, oldIndex: beforeIdx, newIndex: idx });\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n return layer;\r\n };\r\n\r\n mapProto.setLayerIndex = function (layer, idx) {\r\n const self = this;\r\n const olIdx = idx - self.baseLayers.length + 1;\r\n self.wrap.setLayerIndex(layer.wrap.layer, olIdx);\r\n };\r\n\r\n mapProto.putLayerOnTop = function (layer) {\r\n var self = this;\r\n var n = self.wrap.getLayerCount();\r\n self.wrap.setLayerIndex(layer.wrap.layer, n - 1);\r\n };\r\n\r\n /*\r\n * setBaseLayer: Set a layer as base layer, it is added to layers collection it wasn't before\r\n * Parameters: TC.Layer or string, callback which accepts layer as parameter\r\n * Returns: TC.Layer promise\r\n */\r\n mapProto.setBaseLayer = async function (layer, callback) {\r\n var self = this;\r\n var result = null;\r\n var found = false;\r\n\r\n if (typeof layer === 'string') {\r\n var i;\r\n for (i = 0; i < self.layers.length; i++) {\r\n if (self.layers[i].id === layer) {\r\n layer = self.layers[i];\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n layer = getAvailableBaseLayer.call(self, layer);\r\n if (layer) {\r\n layer = await self.addLayer(TC.Util.extend(true, {}, layer, { isDefault: true, isBase: true, map: self }));\r\n found = true;\r\n }\r\n }\r\n }\r\n else {\r\n if (self.layers.indexOf(layer) < 0) {\r\n layer.isDefault = true;\r\n layer.isBase = true;\r\n layer.map = self;\r\n self.addLayer(layer);\r\n // GLS: comento lo siguiente porque ya se va a tratar en la línea 1838, si no, se lanza el evento 2 veces\r\n //.then(function () { \r\n //self.trigger(Consts.event.BASELAYERCHANGE, { layer: layer });\r\n //if (TC.Util.isFunction(callback)) {\r\n // callback();\r\n //}\r\n //});\r\n\r\n //result = layer;\r\n //return result;\r\n }\r\n found = true;\r\n }\r\n if (!found) {\r\n TC.error('Base layer is not available');\r\n }\r\n else {\r\n if (!layer.isCompatible(self.getCRS()) && (!layer.fallbackLayer || layer.fallbackLayer && !layer.fallbackLayer.isCompatible(self.getCRS()))) {\r\n TC.error('Base layer must be reprojected');\r\n }\r\n else {\r\n self.trigger(Consts.event.BEFOREBASELAYERCHANGE, { oldLayer: self.getBaseLayer(), newLayer: layer });\r\n\r\n result = layer;\r\n await self.wrap.getMap();\r\n const olLayer = await layer.wrap.getLayer();\r\n await self.wrap.setBaseLayer(olLayer);\r\n self.baseLayer = layer;\r\n self.trigger(Consts.event.BASELAYERCHANGE, { layer: layer });\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.setView = function (view) {\r\n const self = this;\r\n\r\n self.view = view;\r\n self.trigger(Consts.event.VIEWCHANGE, { view: view });\r\n };\r\n\r\n /*\r\n * Asigna un callback que se ejecutará cuando los controles del mapa se hayan cargado.\r\n * @method ready\r\n * @async\r\n * @param {function} [callback] Función a ejecutar.\r\n */\r\n mapProto.ready = function (callback) {\r\n var self = this;\r\n if (TC.Util.isFunction(callback)) {\r\n if (self.isReady) {\r\n callback();\r\n }\r\n else {\r\n self.one(Consts.event.MAPREADY, callback);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Asigna un callback que se ejecutará cuando los controles y las capas iniciales del mapa se hayan cargado.\r\n * @method loaded\r\n * @async\r\n * @param {function} [callback] Función a ejecutar.\r\n */\r\n mapProto.loaded = function (callback) {\r\n const self = this;\r\n if (TC.Util.isFunction(callback)) {\r\n if (self.isLoaded) {\r\n callback();\r\n }\r\n else {\r\n self.one(Consts.event.MAPLOAD, callback);\r\n }\r\n }\r\n return new Promise(resolve => {\r\n if (self.isLoaded) {\r\n resolve();\r\n }\r\n else {\r\n self.one(Consts.event.MAPLOAD, resolve);\r\n }\r\n });\r\n };\r\n\r\n\r\n\r\n /*\r\n * Devuelve un árbol de capas del mapa.\r\n * @method getLayerTree\r\n * @return {TC.LayerTree}\r\n */\r\n mapProto.getLayerTree = function () {\r\n const self = this;\r\n const result = { baseLayers: [], workLayers: [] };\r\n if (self.baseLayer) {\r\n result.baseLayers[0] = self.baseLayer.getTree();\r\n }\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n const tree = self.workLayers[i].getTree();\r\n\r\n if (tree) {\r\n result.workLayers.unshift(tree);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade un control al mapa.\r\n * @method addControl\r\n * @async\r\n * @param {TC.Control|string} control Control a añadir o nombre del control\r\n * @param {object} [options] Objeto de opciones de configuración del control. Consultar el parámetro de opciones del constructor del control.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Control\"}}{{/crossLink}}\r\n */\r\n mapProto.addControl = function (control, options) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, reject) {\r\n const _addCtl = function (ctl) {\r\n self.controls.push(ctl);\r\n // Lo envolvemos en Promise.resolve para asegurarse compatibilidad hacia atrás con los controles que devuelven un $.Deferred.\r\n return Promise.resolve(ctl.register(self))\r\n .then(function (c) {\r\n if (ctl.div) {\r\n if (!ctl.div.parentNode) {\r\n self.div.appendChild(ctl.div);\r\n }\r\n }\r\n self.trigger(Consts.event.CONTROLADD, { control: ctl });\r\n return c;\r\n })\r\n .catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n };\r\n if (typeof control === 'string') {\r\n const ctorName = control.substr(0, 1).toUpperCase() + control.substr(1);\r\n const addStringControl = () => _addCtl(new TC.control[ctorName](null, options)).then(resolve);\r\n if (!TC.Control || !TC.control[ctorName]) {\r\n import(/* webpackMode: \"eager\" */ './control/' + ctorName).then(function (module) {\r\n TC.control[ctorName] = module.default;\r\n addStringControl();\r\n });\r\n }\r\n else {\r\n addStringControl();\r\n }\r\n }\r\n else {\r\n _addCtl(control).then(function (ctl) {\r\n resolve(ctl);\r\n });\r\n }\r\n });\r\n };\r\n\r\n /*\r\n * Devuelve la lista de controles que son de la clase especificada.\r\n * @method getControlsByClass\r\n * @param {function|string} classObj Nombre de la clase o función constructora de la clase.\r\n * @return {array}\r\n */\r\n mapProto.getControlsByClass = function (classObj) {\r\n const self = this;\r\n let result = [];\r\n let obj = classObj;\r\n if (typeof classObj === 'string') {\r\n let classStr = classObj;\r\n if (classStr.indexOf('.') < 0) {\r\n classStr = 'TC.control.' + classStr;\r\n }\r\n obj = window;\r\n const namespaces = classStr.split('.');\r\n for (var i = 0; i < namespaces.length; i++) {\r\n obj = obj[namespaces[i]];\r\n if (!obj) {\r\n break;\r\n }\r\n }\r\n }\r\n if (TC.Util.isFunction(obj)) {\r\n self.controls.forEach(ctl => {\r\n if (ctl instanceof obj) {\r\n result.push(ctl);\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n };\r\n\r\n mapProto.getControlById = function (id) {\r\n const self = this;\r\n for (var i = 0, len = self.controls.length; i < len; i++) {\r\n const ctl = self.controls[i];\r\n if (ctl.id === id) {\r\n return ctl;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n mapProto.getDefaultControl = function () {\r\n const self = this;\r\n var candidate;\r\n if (self.options.defaultActiveControl) {\r\n candidate = self.getControlsByClass('TC.control.' + self.options.defaultActiveControl.substr(0, 1).toUpperCase() + self.options.defaultActiveControl.substr(1))[0];\r\n }\r\n if (!candidate) {\r\n candidate = self.getControlsByClass('TC.control.MultiFeatureInfo')[0];\r\n if (candidate) {\r\n candidate = candidate.lastCtrlActive;\r\n }\r\n else {\r\n candidate = self.getControlsByClass('TC.control.FeatureInfo')[0];\r\n }\r\n }\r\n return candidate;\r\n };\r\n\r\n /*\r\n * Devuelve el primer control del mapa que sea de la clase {{#crossLink \"TC.control.LoadingIndicator\"}}{{/crossLink}}.\r\n * @method getLoadingIndicator\r\n * @return {TC.control.LoadingIndicator}\r\n */\r\n mapProto.getLoadingIndicator = function () {\r\n var result = null;\r\n var ctls = this.getControlsByClass('TC.control.LoadingIndicator');\r\n if (ctls.length) {\r\n result = ctls[0];\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.addResultsPanel = function (options) {\r\n const self = this;\r\n const opts = Object.assign({}, options);\r\n const container = self.getControlsByClass(TC.control.ControlContainer)[0];\r\n if (container) {\r\n opts.position = container.POSITION.RIGHT;\r\n return container.addControl('resultsPanel', opts);\r\n }\r\n else {\r\n return self.addControl('resultsPanel', opts);\r\n }\r\n };\r\n\r\n /*\r\n * Establece la extensión del mapa.\r\n * @method setExtent\r\n * @param {array} extent Array de cuatro números que representan las coordenadas x mínima, y mínima, x máxima e y máxima respectivamente.\r\n * @param {object} [options] Objeto de opciones.\r\n * @param {boolean} [options.animate=true] Establece si se realiza una animación al cambiar la extensión.\r\n * La unidad de las coordenadas es la correspondiente al CRS del mapa.\r\n */\r\n mapProto.setExtent = function (extent, options, callback) {\r\n return this.wrap.setExtent(extent, options, callback);\r\n };\r\n\r\n /**\r\n * Obtiene la extensión actual del mapa.\r\n * @method getExtent\r\n * @return {array} Array de cuatro números que representan las coordenadas x mínima, y mínima, x máxima e y máxima respectivamente.\r\n * La unidad de las coordenadas es la correspondiente al CRS del mapa.\r\n */\r\n mapProto.getExtent = function () {\r\n return this.wrap.getExtent();\r\n };\r\n\r\n mapProto.getMaxExtent = function () {\r\n return this.maxExtent || null;\r\n };\r\n\r\n /*\r\n * Establece el centro del mapa.\r\n * @method setCenter\r\n * @param {array} coord Array de dos números que representan la coordenada del punto en las unidades correspondientes al CRS del mapa.\r\n * @param {object} [options] Objeto de opciones.\r\n * @param {boolean} [options.animate=true] Establece si se realiza una animación al centrar.\r\n */\r\n mapProto.setCenter = function (coord, options) {\r\n return this.wrap.setCenter(coord, options);\r\n };\r\n\r\n mapProto.getCenter = function () {\r\n return this.wrap.getCenter();\r\n };\r\n\r\n mapProto.setRotation = function (rotation) {\r\n this.wrap.setRotation(rotation);\r\n };\r\n\r\n mapProto.getRotation = function () {\r\n return this.wrap.getRotation();\r\n };\r\n\r\n mapProto.getViewHTML = function () {\r\n return this.wrap.getViewport();\r\n };\r\n\r\n\r\n mapProto.getCompatibleCRS = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const layers = options.layers || self.workLayers.concat(self.baseLayer);\r\n const crsLists = layers\r\n .filter(function (layer) {\r\n return layer.isRaster();\r\n }) // capas raster\r\n .map(function (layer) {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: options.includeFallbacks });\r\n });\r\n const otherCrsLists = crsLists.slice(1);\r\n return crsLists[0].filter(function (elm) {\r\n return otherCrsLists.every(function (crsList) {\r\n return crsList.indexOf(elm) >= 0;\r\n });\r\n });\r\n };\r\n\r\n mapProto.loadProjections = async function (options) {\r\n options = options || {};\r\n const crsList = options.crsList || [];\r\n const responses = await Promise.all(crsList\r\n .map(function (crs) {\r\n return TC.getProjectionData({\r\n crs: TC.Util.getCRSCode(crs)\r\n });\r\n }));\r\n var projList = responses\r\n .filter(function (response) {\r\n return response.status === 'ok' && response.number_result > 0;\r\n })\r\n .map(function (response, index, array) {\r\n const projData = response.results[0];\r\n const code = 'EPSG:' + projData.code;\r\n TC.loadProjDef({\r\n crs: code,\r\n def: projData.def,\r\n name: projData.name,\r\n silent: index < array.length - 1 // Solo registramos proj4 en la última iteración\r\n });\r\n return {\r\n code: code,\r\n name: projData.name,\r\n proj4: projData.proj4,\r\n unit: projData.unit\r\n };\r\n });\r\n if (options.orderBy) {\r\n projList = projList.sort(TC.Util.getSorterByProperty(options.orderBy));\r\n }\r\n return projList;\r\n };\r\n\r\n mapProto.setProjection = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const oldCrs = self.crs;\r\n return new Promise(function (resolve, reject) {\r\n var baseLayer;\r\n if (options.crs) {\r\n self.isReprojecting = true;\r\n if (options.baseLayer) {\r\n baseLayer = options.baseLayer;\r\n }\r\n else if (options.allowFallbackLayer) {\r\n // Cambiamos de capa de fondo si es mejor o no hay más remedio\r\n if (!self.baseLayer.isCompatible(options.crs) &&\r\n self.baseLayer.wrap.getCompatibleMatrixSets(options.crs).length === 0) {\r\n if (self.baseLayer.options.fallbackLayer) {\r\n baseLayer = self.baseLayer.getFallbackLayer();\r\n }\r\n }\r\n else if (self.baseLayer.firstOption && (self.baseLayer.firstOption.isCompatible(options.crs) ||\r\n self.baseLayer.firstOption.wrap.getCompatibleMatrixSets(options.crs).length > 0)) {\r\n baseLayer = self.baseLayer.firstOption;\r\n }\r\n }\r\n if (!baseLayer) {\r\n baseLayer = self.baseLayer;\r\n }\r\n\r\n const endReproject = () => self.isReprojecting = false;\r\n\r\n const setOptionalExtent = async function () {\r\n if (options.extent) {\r\n await self.setExtent(options.extent);\r\n }\r\n };\r\n\r\n const resolveChange = async function () {\r\n endReproject();\r\n self.trigger(Consts.event.PROJECTIONCHANGE, { oldCrs: oldCrs, newCrs: options.crs });\r\n await setOptionalExtent();\r\n resolve();\r\n };\r\n\r\n // 03/04/2019 GLS: esperamos a que termine de añadirse la capa porque si no se duplica en la gestión de la carga del CRS.\r\n const loadProj = function () {\r\n TC.loadProjDef({\r\n crs: options.crs,\r\n callback: function () {\r\n const setProjection = function (baseLayer) {\r\n\r\n const _setProjection = function () {\r\n const layerProjectionOptions = TC.Util.extend({}, options, { oldCrs: self.crs });\r\n const setLayerProjection = function (layer) {\r\n layer.setProjection(layerProjectionOptions);\r\n };\r\n if (baseLayer.isCompatible(options.crs) || baseLayer.wrap.getCompatibleMatrixSets(options.crs).length > 0) {\r\n baseLayer.setProjection(layerProjectionOptions);\r\n self.wrap.setProjection(TC.Util.extend({}, options, { baseLayer: baseLayer }));\r\n self.crs = options.crs;\r\n // En las capas base disponibles, evaluar su compatibilidad con el nuevo CRS\r\n self.baseLayers\r\n .filter(function (layer) {\r\n return layer !== baseLayer;\r\n })\r\n .forEach(setLayerProjection);\r\n // Reprojectamos capas cargadas\r\n self.workLayers.forEach(setLayerProjection);\r\n if (baseLayer && baseLayer !== self.baseLayer) {\r\n self.setBaseLayer(baseLayer, resolveChange);\r\n }\r\n else {\r\n resolveChange();\r\n }\r\n }\r\n else if (baseLayer.fallbackLayer) {\r\n setProjection(baseLayer.fallbackLayer);\r\n } else {\r\n endReproject();\r\n reject(Error('Layer has no fallback'));\r\n }\r\n };\r\n\r\n if (baseLayer.type === Consts.layerType.WMS || baseLayer.type === Consts.layerType.WMTS) {\r\n baseLayer.getCapabilitiesPromise().then(_setProjection).catch(endReproject);\r\n } else {\r\n _setProjection();\r\n }\r\n };\r\n\r\n setProjection(baseLayer);\r\n }\r\n });\r\n };\r\n\r\n if (self.baseLayers.indexOf(baseLayer) < 0) {\r\n self.addLayer(baseLayer).then(loadProj).catch(endReproject);\r\n } else {\r\n loadProj();\r\n }\r\n }\r\n });\r\n };\r\n\r\n mapProto.getMetersPerUnit = function () {\r\n return this.wrap.getMetersPerUnit();\r\n };\r\n\r\n /**\r\n * Obtiene una coordenada a partir de una posición del área de visualización del mapa en píxeles.\r\n * @method getCoordinateFromPixel\r\n * @param {array} xy Coordenada en píxeles de la posición en el área de visualización.\r\n * @return {array} Array de dos números que representa las coordenada del punto en las unidades correspondientes al CRS del mapa.\r\n */\r\n mapProto.getCoordinateFromPixel = function (xy) {\r\n return this.wrap.getCoordinateFromPixel(xy);\r\n };\r\n\r\n /**\r\n * Obtiene una posición en el área de visualización a partir de una coordenada.\r\n * @method getCoordinateFromPixel\r\n * @param {array} coord Coordenada en el mapa.\r\n * @return {array} Array de dos números que representa las posición del punto en píxeles.\r\n */\r\n mapProto.getPixelFromCoordinate = function (coord) {\r\n return this.wrap.getPixelFromCoordinate(coord);\r\n };\r\n\r\n /**\r\n * Establece la extensión del mapa de forma que abarque todas las entidades geográficas pasadas por parámetro.\r\n * @method zoomToFeatures\r\n * @param {array} features Array de entidades geográficas. Si está vacío este método no hace nada.\r\n * @param {object} [options] Objeto de opciones de zoom.\r\n * @param {number} [options.pointBoundsRadius=30] Radio en metros del área alrededor del punto que se respetará al hacer zoom.\r\n * @param {number} [options.extentMargin=0.2] Tamaño del margen que se aplicará a la extensión total de todas las entidades. \r\n * @param {boolean} [options.animate=false] Realizar animación al hacer el zoom. \r\n * El valor es la relación resultante de la diferencia de dimensiones entre la extensión ampliada y la original relativa a la original.\r\n */\r\n mapProto.zoomToFeatures = function (features, options) {\r\n const self = this;\r\n if (features.length > 0) {\r\n let bounds;\r\n const setExtent = () => {\r\n bounds = [Infinity, Infinity, -Infinity, -Infinity];\r\n var opts = options || {};\r\n opts.contain = true;\r\n var radius = opts.pointBoundsRadius || self.options.pointBoundsRadius;\r\n radius = radius / self.getMetersPerUnit();\r\n var extentMargin = opts.extentMargin;\r\n if (typeof extentMargin !== 'number') {\r\n extentMargin = self.options.extentMargin;\r\n }\r\n for (var i = 0; i < features.length; i++) {\r\n var b = features[i].getBounds();\r\n if (b) {\r\n bounds[0] = Math.min(bounds[0], b[0]);\r\n bounds[1] = Math.min(bounds[1], b[1]);\r\n bounds[2] = Math.max(bounds[2], b[2]);\r\n bounds[3] = Math.max(bounds[3], b[3]);\r\n }\r\n }\r\n if (bounds[2] - bounds[0] === 0) {\r\n bounds[0] = bounds[0] - radius;\r\n bounds[2] = bounds[2] + radius;\r\n }\r\n if (bounds[3] - bounds[1] === 0) {\r\n bounds[1] = bounds[1] - radius;\r\n bounds[3] = bounds[3] + radius;\r\n }\r\n if (extentMargin) {\r\n var dx = (bounds[2] - bounds[0]) * extentMargin / 2;\r\n var dy = (bounds[3] - bounds[1]) * extentMargin / 2;\r\n bounds[0] = bounds[0] - dx;\r\n bounds[1] = bounds[1] - dy;\r\n bounds[2] = bounds[2] + dx;\r\n bounds[3] = bounds[3] + dy;\r\n }\r\n if (self.maxExtent) {\r\n bounds[0] = Math.max(bounds[0], self.maxExtent[0]);\r\n bounds[1] = Math.max(bounds[1], self.maxExtent[1]);\r\n bounds[2] = Math.min(bounds[2], self.maxExtent[2]);\r\n bounds[3] = Math.min(bounds[3], self.maxExtent[3]);\r\n }\r\n self.setExtent(bounds, opts);\r\n };\r\n if (self.isReprojecting) {\r\n self.one(Consts.event.PROJECTIONCHANGE, setExtent);\r\n }\r\n else {\r\n setExtent();\r\n }\r\n\r\n if (self.on3DView) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self._on3DZoomTo({ extent: bounds });\r\n }\r\n }\r\n };\r\n\r\n mapProto._on3DZoomTo = function (options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n\r\n if (self.on3DView && options.extent && options.extent.length === 4) {\r\n // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n if (options.reprojected) {\r\n self.trigger(Consts.event.ZOOMTO, options);\r\n } else {\r\n let extent = options.extent;\r\n let coordsXY = self.view3D.view2DCRS !== self.view3D.crs ?\r\n TC.Util.reproject(extent.slice(0, 2), self.view3D.view2DCRS, self.view3D.crs) :\r\n extent.slice(0, 2);\r\n\r\n let coordsXY2 = self.view3D.view2DCRS !== self.view3D.crs ?\r\n TC.Util.reproject(extent.slice(2), self.view3D.view2DCRS, self.view3D.crs) :\r\n extent.slice(2);\r\n\r\n options.extent = coordsXY.concat(coordsXY2);\r\n\r\n self.trigger(Consts.event.ZOOMTO, options);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Establece la extensión del mapa de forma que abarque todas los marcadores que existen en él.\r\n * El método espera a todos los marcadores pendientes de incluir, dado que el método {{#crossLink \"TC.Map/addMarker:method\"}}{{/crossLink}} es asíncrono.\r\n * @method zoomToMarkers\r\n */\r\n mapProto.zoomToMarkers = function (options) {\r\n var self = this;\r\n Promise.all(self._markerPromises).then(function () {\r\n var markers = [];\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n var layer = self.workLayers[i];\r\n if (layer.type === Consts.layerType.VECTOR) {\r\n for (var j = 0; j < layer.features.length; j++) {\r\n var feature = layer.features[j];\r\n if (feature instanceof Marker) {\r\n markers.push(feature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.zoomToFeatures(markers, options);\r\n self._markerPromises = [];\r\n });\r\n };\r\n\r\n mapProto.zoomToLayer = function (layer, options) {\r\n const self = this;\r\n layer = self.getLayer(layer);\r\n if (layer.isRaster()) {\r\n const extent = layer.getExtent();\r\n if (extent) {\r\n options = options || {};\r\n options.contain = true;\r\n if (typeof options.extentMargin !== 'number') {\r\n options.extentMargin = self.options.extentMargin;\r\n }\r\n self.setExtent(extent, options);\r\n\r\n if (self.on3DView) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self._on3DZoomTo({ extent: extent, reprojected: true });\r\n /* reprojected: true:\r\n Al obtener el extent de la capa desde el capabilities ya se gestiona que el CRS del mapa está en 4326\r\n porque map.getCRS ya gestiona si estamos en 3D o no por lo que el extent ya llega en geográficas.\r\n */\r\n }\r\n }\r\n }\r\n else {\r\n if (layer.features && layer.features.length) {\r\n self.zoomToFeatures(layer.features, options);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Obtiene una capa por su identificador o devuelve la propia capa.\r\n * @method getLayer\r\n * @param {string|TC.Layer} layer Identificador de la capa u objeto de capa.\r\n * @return {TC.Layer}\r\n */\r\n mapProto.getLayer = function (layer) {\r\n const self = this;\r\n if (typeof layer === 'string') {\r\n return self.layers.find(l => l.id === layer) || null;\r\n }\r\n if (layer instanceof Layer && layer.map === self) {\r\n return layer;\r\n }\r\n return null;\r\n };\r\n\r\n var _getVectors = function (map) {\r\n var result;\r\n if (!map.vectors) {\r\n result = map.addLayer({\r\n id: TC.getUID(), title: TC.i18n[map.options.locale].vectorLayer, type: Consts.layerType.VECTOR\r\n });\r\n map.vectors = result;\r\n result.then(function (vectors) {\r\n map.vectors = vectors;\r\n });\r\n }\r\n else {\r\n result = Promise.resolve(map.vectors);\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade un punto al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPoint\r\n * @async\r\n * @param {array} coord Array de dos números representando la coordenada del punto en las unidades del CRS del mapa.\r\n * @param {TC.cfg.PointStyleOptions} [options] Opciones del punto.\r\n */\r\n mapProto.addPoint = function (coord, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPoint(coord, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPoint(coord, options);\r\n });\r\n }\r\n };\r\n\r\n /*\r\n * Añade un marcador puntual al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addMarker\r\n * @async\r\n * @param {array} coord Array de dos números representando la coordenada del punto en las unidades del CRS del mapa.\r\n * @param {TC.cfg.MarkerStyleOptions} [options] Opciones del marcador.\r\n */\r\n mapProto.addMarker = async function (coord, options, callback) {\r\n const self = this;\r\n if (TC.Util.isFunction(options)) {\r\n callback = options;\r\n options = {};\r\n }\r\n else {\r\n options = options || {};\r\n }\r\n let markerPromise;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n markerPromise = layer.addMarker(coord, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n // Se añade una promise más para evitar que zoomToMarkers salte antes de poblarse el array _markerPromises.\r\n const vectorsPromise = _getVectors(self);\r\n self._markerPromises.push(vectorsPromise)\r\n const vectors = await vectorsPromise;\r\n markerPromise = vectors.addMarker(coord, options);\r\n }\r\n self._markerPromises.push(markerPromise);\r\n const marker = await markerPromise;\r\n if (TC.Util.isFunction(callback)) {\r\n callback(marker);\r\n }\r\n return marker;\r\n };\r\n\r\n /**\r\n * Añade una polilínea al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPolyline\r\n * @async\r\n * @param {array} coords Array de arrays de dos números representando las coordenadas de los vértices en las unidades del CRS del mapa.\r\n * @param {object} [options] Opciones de la polilínea.\r\n */\r\n mapProto.addPolyline = function (coords, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPolyline(coords, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPolyline(coords, options);\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Añade un polígono al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPolygon\r\n * @async\r\n * @param {array} coords Array que contiene anillos. Estos a su vez son arrays de arrays de dos números representando las coordenadas de los vértices en las unidades del CRS del mapa.\r\n * El primer anillo es el exterior y el resto son islas. No es necesario cerrar los anillos (poner el mismo vértice al principio y al final).\r\n * @param {object} [options] Opciones del polígono.\r\n */\r\n mapProto.addPolygon = function (coords, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPolygon(coords, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPolygon(coords, options);\r\n });\r\n }\r\n };\r\n\r\n mapProto.removeFeatures = function (features) {\r\n const self = this;\r\n self\r\n .workLayers\r\n .filter(wl => wl instanceof Vector)\r\n .map(function (layer) {\r\n return {\r\n layer: layer,\r\n features: layer.features.filter(f => features.includes(f))\r\n };\r\n })\r\n .forEach(fg => fg.features.forEach(f => fg.layer.removeFeature(f)));\r\n };\r\n\r\n\r\n mapProto.getBaseLayer = function () {\r\n return this.baseLayer || this.baseLayers[0];\r\n };\r\n\r\n mapProto.getResolutions = function () {\r\n return this.wrap.getResolutions();\r\n };\r\n\r\n mapProto.getResolution = function () {\r\n return this.wrap.getResolution();\r\n };\r\n\r\n mapProto.setResolution = function (resolution) {\r\n return this.wrap.setResolution(resolution);\r\n };\r\n\r\n mapProto.exportFeatures = async function (features, options) {\r\n var self = this;\r\n options = options || {};\r\n const featuresToExport = features.filter(f => !f.options.noExport);\r\n var loadingCtl = self.getLoadingIndicator();\r\n var waitId = loadingCtl && loadingCtl.addWait();\r\n // Eliminamos las elevaciones nulas\r\n // En GPX hay un bug con los valores cero, que hace que se tome el valor de elevación del punto previo, por eso ponemos NaN.\r\n const elevSubst = options.format === Consts.format.GPX ? Number.NaN : 0;\r\n featuresToExport.forEach(function (feature, idx) {\r\n // Decodificamos entidades HTML de la feature\r\n const data = feature.getData();\r\n for (let key in data) {\r\n if (/&(\\w+|#\\d{2,4});/g.test(key)) {\r\n const value = data[key];\r\n const newData = {};\r\n const elm = document.createElement('div');\r\n elm.innerHTML = key;\r\n newData[elm.innerText] = value;\r\n feature.unsetData(key);\r\n feature.setData(newData);\r\n }\r\n }\r\n // Formateamos el valor de elevación\r\n var flatCoords = feature.getCoords({ pointArray: true });\r\n if (flatCoords.some(function (point) {\r\n return point[2] === null;\r\n })) {\r\n const newFeature = feature.clone();\r\n newFeature.setId(feature.id);\r\n featuresToExport[idx] = feature = newFeature;\r\n flatCoords = feature.getCoords({ pointArray: true });\r\n flatCoords.forEach(function (point) {\r\n if (point[2] === null) {\r\n point[2] = elevSubst;\r\n }\r\n });\r\n }\r\n });\r\n const format = options.format || \"\";\r\n const fillGroupMap = function (groupMap, feature) {\r\n const ctor = feature.constructor;\r\n let featureList = groupMap.get(ctor);\r\n if (!featureList) {\r\n featureList = [];\r\n groupMap.set(ctor, featureList);\r\n }\r\n featureList.push(feature);\r\n return groupMap;\r\n };\r\n if (format === Consts.format.SHAPEFILE) {\r\n const defaultEncoding = \"ISO-8859-1\";\r\n //generar shape\r\n\r\n //agrupar por capa\r\n const layers = featuresToExport.reduce(function (rv, feature) {\r\n var id = feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n //si el id no tiene parte numérica intentamos agrupar por otro método\r\n if (!id && feature.folders && feature.folders.length)\r\n id = feature.folders[feature.folders.length - 1];\r\n if (!id && feature.layer && feature.layer.title)\r\n id = feature.layer.title.substr(0, feature.layer.title.lastIndexOf(\".\"));\r\n //var id = feature.layer? (typeof(feature.layer)===\"string\"?feature.layer:feature.layer.id) :feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n (rv[id] = rv[id] || []).push(feature);\r\n return rv;\r\n }, {});\r\n\r\n const getInnerType = function (constructor) {\r\n\r\n switch (true) {\r\n case constructor === Point:\r\n case constructor === Marker:\r\n return 'POINT';\r\n case constructor === Polygon:\r\n case constructor === MultiPolygon:\r\n return 'POLYGON';\r\n case constructor === Polyline:\r\n case constructor === MultiPolyline:\r\n return 'POLYLINE';\r\n }\r\n return 'NULL';\r\n };\r\n const proj = await TC.getProjectionData({ crs: self.crs });\r\n\r\n const arrPromises = [];\r\n const shpWrite = (await import('@aleffabricio/shp-write/index')).default;\r\n let layerId;\r\n for (layerId in layers) {\r\n //agrupar las features por tipos\r\n const groups = layers[layerId].reduce(fillGroupMap, new Map());\r\n groups.forEach(function featuresToShp(featureList, constructor, thisMap) {\r\n arrPromises.push(new Promise(function (resolve) {\r\n const data = featureList.reduce(function (prev, curr) {\r\n const data = {};\r\n for (var key in curr.data) {\r\n const val = curr.data[key];\r\n data[key] = typeof val === 'string' ?\r\n val.replace(/•/g, \"•\").replace(/›/g, \"›\") :\r\n val;\r\n }\r\n if (curr.getStyle().label && !curr.data.name)\r\n data.name = curr.getStyle().label;\r\n return prev.concat([data]);\r\n }, []);\r\n const geometries = featureList.reduce(function (prev, curr) {\r\n //No se porque no le gusta las geometrias polyline de la herramienta draw por tanto las convierto a multipolyline\r\n if (curr instanceof Polyline) {\r\n curr = new MultiPolyline(curr.getCoords(), curr.options);\r\n }\r\n //si el sistema de referencia es distinto a EPSG:4326 reproyecto las geometrias\t\t\t\t\t\t\t\r\n return prev.concat([curr.geometry]);\r\n }, []);\r\n //generamos el un shape mas sus allegados por grupo\r\n shpWrite.write(data\r\n , getInnerType(constructor)\r\n , geometries\r\n , function (_empty, content) {\r\n const fileName = layerId + (thisMap.size > 1 ? \"_\" + getInnerType(constructor) : \"\");\r\n resolve({ \"fileName\": fileName, \"content\": content });\r\n });\r\n }));\r\n });\r\n }\r\n\r\n const resolves = [];\r\n for (var i = 0; i < arrPromises.length; i++) {\r\n resolves[i] = await arrPromises[i];\r\n }\r\n\r\n //creamos el fichero zip\r\n const JSZip = (await import(\"jszip\")).default;\r\n const zip = new JSZip();\r\n resolves.forEach(resolve => {\r\n zip.file(resolve.fileName + \".shp\", resolve.content.shp.buffer);\r\n zip.file(resolve.fileName + \".shx\", resolve.content.shx.buffer);\r\n zip.file(resolve.fileName + \".dbf\", resolve.content.dbf.buffer);\r\n zip.file(resolve.fileName + \".prj\", proj.results[0].wkt);\r\n zip.file(resolve.fileName + \".cst\", defaultEncoding);\r\n zip.file(resolve.fileName + \".cpg\", defaultEncoding);\r\n });\r\n try {\r\n const blob = await zip.generateAsync({ type: \"blob\" });\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return blob;\r\n }\r\n catch (err) {\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n throw err;\r\n }\r\n }\r\n if (format === Consts.format.GEOPACKAGE) {\r\n const fieldDataType = function (geopackage, value) {\r\n var name = '';\r\n switch (typeof value) {\r\n case \"string\":\r\n name = geopackage.DataTypes.TEXT;\r\n break;\r\n case \"number\":\r\n if (value % 1 === 0)\r\n name = geopackage.DataTypes.INT;\r\n else\r\n name = geopackage.DataTypes.FLOAT;\r\n break;\r\n case \"boolean\":\r\n name = geopackage.DataTypes.BOOLEAN;\r\n break;\r\n default:\r\n name = geopackage.DataTypes.TEXT;\r\n //date y datetime\r\n }\r\n return name;\r\n };\r\n const currentCrs = self.crs;\r\n await TC.loadJS(!window.geopackage, TC.apiLocation + \"lib/geopackagejs/dist/geopackage-browser.js\");\r\n const geopackage = window.geopackage;\r\n const wkx = (await import('wkx')).default;\r\n //Promise.all([import(\"../lib/geopackagejs/dist/geopackage-browser\"), import(\"wkx/dist/wkx\")]).then(async function (responses) { \r\n const geopackageAPI = geopackage.GeoPackageAPI;\r\n const FeatureColumn = geopackage.FeatureColumn;\r\n const GeometryColumns = geopackage.GeometryColumns;\r\n const myPackage = await geopackageAPI.create();\r\n\r\n var srs_id = currentCrs.substr(currentCrs.indexOf(\":\") + 1);\r\n if (!myPackage.spatialReferenceSystemDao.queryForId(srs_id)) {\r\n var newSRS = myPackage.spatialReferenceSystemDao.createObject();\r\n var projData = await TC.getProjectionData({ crs: currentCrs });\r\n newSRS.srs_name = currentCrs;\r\n newSRS.srs_id = projData.results[0].code;\r\n newSRS.organization = currentCrs.substr(0, currentCrs.indexOf(\":\"));\r\n newSRS.organization_coordsys_id = projData.results[0].code;\r\n newSRS.definition = projData.results[0].proj4.trim();\r\n newSRS.definition_12_063 = projData.results[0].wkt.trim();\r\n newSRS.description = projData.results[0].name;\r\n myPackage.spatialReferenceSystemDao.create(newSRS);\r\n }\r\n //agrupar por capa\r\n //const timestamp = options.fileName.substring(options.fileName.lastIndexOf(\"_\", options.fileName.lastIndexOf(\"_\") - 1) + 1); \r\n const layers = featuresToExport.reduce(function (rv, feature) {\r\n var id = typeof feature.id === \"string\" ? feature.id.substr(0, feature.id.lastIndexOf(\".\")) : options.fileName;\r\n //var id = feature.layer ? (typeof (feature.layer) === \"string\" ? feature.layer : feature.layer.id) : feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n (rv[id] = rv[id] || []).push(feature);\r\n return rv;\r\n }, {});\r\n let layerId;\r\n for (layerId in layers) {\r\n //agrupar las features por tipos\r\n const groups = layers[layerId].reduce(fillGroupMap, new Map());\r\n for (let featureList of groups.values()) {\r\n //crear columnas\r\n\r\n let i = 0;\r\n\r\n let geometryType;\r\n const firstFeature = featureList[0];\r\n switch (true) {\r\n case firstFeature instanceof Polyline:\r\n geometryType = \"LineString\";\r\n break;\r\n case firstFeature instanceof MultiPolyline:\r\n geometryType = \"MultiLineString\";\r\n break;\r\n case firstFeature instanceof Marker:\r\n case firstFeature instanceof Point:\r\n geometryType = \"Point\";\r\n break;\r\n case firstFeature instanceof MultiMarker:\r\n case firstFeature instanceof MultiPoint:\r\n geometryType = \"MultiPoint\";\r\n break;\r\n case firstFeature instanceof Polygon:\r\n geometryType = \"Polygon\";\r\n break;\r\n case firstFeature instanceof MultiPolygon:\r\n geometryType = \"MultiPolygon\";\r\n break;\r\n }\r\n const tableName = layerId + (groups.size > 1 ? \"_\" + geometryType : \"\");// + (timestamp ? \"_\" + timestamp : \"\");\r\n var columns = [];\r\n //var dataColumns = [];\r\n var pkColumnName = \"id\";\r\n\r\n if (Object.prototype.hasOwnProperty.call(featuresToExport[0], \"id\") ||\r\n Object.prototype.hasOwnProperty.call(featuresToExport[0], \"ID\")) {\r\n columns.push(FeatureColumn.createPrimaryKeyColumnWithIndexAndName(i++, pkColumnName));\r\n }\r\n columns.push(FeatureColumn.createGeometryColumn(i++, 'geometry', geometryType.toUpperCase(), true, null));\r\n\r\n var bounds = [Infinity, Infinity, -Infinity, -Infinity];\r\n for (var j = 0; j < featureList.length; j++) {\r\n var b = featureList[j].getBounds();\r\n if (b) {\r\n bounds[0] = Math.min(bounds[0], b[0]);\r\n bounds[1] = Math.min(bounds[1], b[1]);\r\n bounds[2] = Math.max(bounds[2], b[2]);\r\n bounds[3] = Math.max(bounds[3], b[3]);\r\n }\r\n }\r\n\r\n for (var x in firstFeature.data || firstFeature.attributes) {\r\n var fieldName = firstFeature.attributes && firstFeature.attributes[x] ? firstFeature.attributes[x].name : x;\r\n if (fieldName.toLowerCase() === 'id') continue;\r\n var fieldValue = firstFeature.data[fieldName];\r\n const c = FeatureColumn.createColumn(i++, fieldName, fieldDataType(geopackage, fieldValue));\r\n columns.push(c);\r\n //dataColumns.push(c);\r\n }\r\n //si alguna feature tiene simbología de tipo texto se añade como una columna más a la tabla llamada \"name\"\r\n if (featureList.some(f => f.getStyle().label && !f.data.name)) {\r\n const c = FeatureColumn.createColumn(i++, \"name\", geopackage.DataTypes.TEXT);\r\n columns.push(c);\r\n }\r\n\r\n\r\n var geometryColumns = new GeometryColumns();\r\n geometryColumns.table_name = tableName;\r\n geometryColumns.column_name = 'geometry';\r\n geometryColumns.geometry_type_name = geometryType.toUpperCase();\r\n geometryColumns.z = firstFeature.getGeometryStride();\r\n geometryColumns.m = 2;\r\n geometryColumns.srs_id = srs_id;\r\n i = 0;\r\n const boundingBox = new geopackage.BoundingBox(bounds[0], bounds[2], bounds[1], bounds[3]);\r\n await myPackage.createFeatureTable(tableName, geometryColumns, columns, boundingBox, srs_id)\r\n //geopackage.createFeatureTableWithDataColumnsAndBoundingBox(myPackage, tableName, geometryColumns, columns, null, boundingBox, srs_id)\r\n const featureDao = myPackage.getFeatureDao(tableName);\r\n for (let i = 0; i < featureList.length; i++) {\r\n const feature = featureList[i];\r\n const featureRow = featureDao.newRow();\r\n const geometryData = new geopackage.GeometryData();\r\n geometryData.setSrsId(srs_id);\r\n const geometry = wkx.Geometry.parse('SRID=' + srs_id + ';' + new ol.format.WKT().writeFeature(feature.wrap.feature));\r\n //const geometry=(hexString => new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))))(new ol.format.WKB().writeGeometry(feature.wrap.feature.getGeometry(),{featureProjection:currentCrs,dataProjection:currentCrs}));\r\n geometryData.setGeometry(geometry);\r\n featureRow.setValueWithColumnName(featureRow.geometryColumn.name, geometryData);\r\n if (Object.prototype.hasOwnProperty.call(feature, \"id\") ||\r\n Object.prototype.hasOwnProperty.call(feature, \"ID\"))\r\n featureRow.setValueWithColumnName(pkColumnName, typeof feature.id === \"string\" ? feature.id.substring(feature.id.lastIndexOf(\".\") + 1) : feature.id);\r\n else if (Object.prototype.hasOwnProperty.call(feature.data, \"id\") ||\r\n Object.prototype.hasOwnProperty.call(feature.data, \"ID\"))\r\n featureRow.setValueWithColumnName(pkColumnName, typeof feature.id === \"string\" ? feature.id.substring(feature.id.lastIndexOf(\".\") + 1) : feature.id);\r\n for (var y in feature.data || feature.attributes) {\r\n const fieldName = firstFeature.attributes && firstFeature.attributes[y] ? firstFeature.attributes[x].name : y;\r\n if (fieldName.toLowerCase() === 'id') {\r\n continue;\r\n }\r\n const fieldValue = feature.data[fieldName];\r\n featureRow.setValueWithColumnName(fieldName, fieldValue);\r\n }\r\n if (featureDao.columns.indexOf(\"name\") >= 0 && !feature.data.name) {\r\n featureRow.setValueWithColumnName(\"name\", feature.getStyle().label);\r\n }\r\n\r\n featureDao.create(featureRow);\r\n }\r\n }\r\n }\r\n\r\n let data;\r\n\r\n try {\r\n data = await myPackage.export();\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return data;\r\n }\r\n catch (error) {\r\n console.log(error);\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n }\r\n return;\r\n }\r\n const data = self.wrap.exportFeatures(featuresToExport, options);\r\n const mimeType = Consts.mimeType[options.format];\r\n if (format === Consts.format.KMZ) {\r\n const JSZip = (await import(\"jszip\")).default;\r\n const zip = new JSZip();\r\n zip.file((options.fileName || 'doc') + \".kml\", data);\r\n const blob = await zip.generateAsync({ type: \"blob\", mimeType: mimeType, compression: \"DEFLATE\" });\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return blob;\r\n }\r\n else {\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return data;\r\n }\r\n };\r\n\r\n mapProto.exportControlStates = function () {\r\n const self = this;\r\n\r\n return self.controls\r\n .map(function (ctl) {\r\n return ctl.exportState();\r\n })\r\n .filter(function (state) {\r\n // Quitamos los estados nulos o vacíos\r\n if (state) {\r\n for (var key in state) {\r\n if (Object.prototype.hasOwnProperty.call(state, key)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n mapProto.importControlStates = function (controlStates) {\r\n const self = this;\r\n\r\n controlStates.forEach(function (state) {\r\n const ctl = self.getControlById(state.id);\r\n if (ctl) {\r\n self.loaded(function () {\r\n ctl.importState(state);\r\n });\r\n }\r\n });\r\n };\r\n\r\n var toasts = {};\r\n var toastHide = function () {\r\n const toast = this;\r\n var container = toast;\r\n do {\r\n container = container.parentElement;\r\n }\r\n while (container && !container.matches('.' + Consts.classes.TOAST_CONTAINER));\r\n const text = toast.innerHTML;\r\n toast.classList.add(Consts.classes.HIDDEN);\r\n if (toasts[text] !== undefined) {\r\n toasts[text] = undefined;\r\n }\r\n setTimeout(function () {\r\n if (toast.parentElement) {\r\n toast.parentElement.removeChild(toast);\r\n }\r\n if (container && !container.querySelector('.' + Consts.classes.TOAST) && container.parentElement) {\r\n container.parentElement.removeChild(container);\r\n }\r\n }, 1000);\r\n };\r\n\r\n mapProto.toastHide = function (text) {\r\n var toastInfo = toasts[text];\r\n if (toastInfo) {\r\n clearTimeout(toastInfo.timeout);\r\n if (toastInfo.toast && toastInfo.toast.parentElement) {\r\n toastInfo.toast.parentElement.removeChild(toastInfo.toast);\r\n }\r\n toastInfo.toast = null;\r\n }\r\n };\r\n\r\n mapProto.toast = function (text, options) {\r\n const self = this;\r\n var opts = options || {\r\n };\r\n var duration = opts.duration || TC.Cfg.toastDuration;\r\n var toastInfo = toasts[text];\r\n if (toastInfo) {\r\n clearTimeout(toastInfo.timeout);\r\n if (toastInfo.toast && toastInfo.toast.parentElement) {\r\n toastInfo.toast.parentElement.removeChild(toastInfo.toast);\r\n }\r\n toastInfo.toast = null;\r\n }\r\n var container = self.div.querySelector('.' + Consts.classes.TOAST_CONTAINER);\r\n if (!container) {\r\n container = document.createElement('div');\r\n container.classList.add(Consts.classes.TOAST_CONTAINER);\r\n (opts.container ? opts.container : self.div).appendChild(container);\r\n }\r\n const toast = document.createElement('div');\r\n const span = document.createElement('span');\r\n toast.classList.add(Consts.classes.TOAST);\r\n toast.appendChild(span);\r\n const p = document.createElement('p');\r\n p.innerHTML = text;\r\n toast.appendChild(p);\r\n toast.addEventListener(Consts.event.CLICK, toastHide, { passive: true });\r\n container.appendChild(toast);\r\n toastInfo = toasts[text] = {\r\n toast: toast\r\n };\r\n\r\n var className = '';\r\n switch (opts.type) {\r\n case Consts.msgType.INFO:\r\n className = Consts.classes.INFO;\r\n break;\r\n case Consts.msgType.WARNING:\r\n className = Consts.classes.WARNING;\r\n break;\r\n case Consts.msgType.ERROR:\r\n className = Consts.classes.ERROR;\r\n break;\r\n }\r\n if (className.length) {\r\n toastInfo.toast.classList.add(className);\r\n }\r\n\r\n toastInfo.timeout = setTimeout(function () {\r\n toastHide.call(toastInfo.toast);\r\n }, duration);\r\n };\r\n\r\n // iPad iOS7 bug fix\r\n var mapHeightNeedsFix = false;\r\n var setHeightFix = function (div) {\r\n if (/iPad/i.test(navigator.userAgent)) {\r\n var ih = window.innerHeight;\r\n var mh = div.getBoundingClientRect.height;\r\n var dh = matchMedia('only screen and (orientation : landscape)').matches ? 20 : 0;\r\n if (mh === ih + dh) {\r\n mapHeightNeedsFix = true;\r\n }\r\n }\r\n var fix = function () {\r\n div.classList.toggle(Consts.classes.IPAD_IOS7_FIX, matchMedia('only screen and (orientation : landscape)').matches);\r\n };\r\n if (mapHeightNeedsFix) {\r\n fix();\r\n window.addEventListener('resize', fix);\r\n }\r\n else {\r\n window.removeEventListener('resize', fix);\r\n }\r\n };\r\n\r\n var isRaster = function (layer) {\r\n return typeof layer === 'string' ||\r\n layer.type !== Consts.layerType.VECTOR && layer.type !== Consts.layerType.KML && layer.type !== Consts.layerType.WFS;\r\n };\r\n\r\n mapProto.exportImage = function () {\r\n var self = this;\r\n var result = null;\r\n var errorMsg = 'El mapa actual no es compatible con la exportación de imágenes';\r\n var canvas = self.wrap.getViewport({ synchronous: true }).getElementsByTagName('canvas')[0];\r\n if (canvas && self.crossOrigin) {\r\n try {\r\n result = canvas.toDataURL();\r\n }\r\n catch (e) {\r\n TC.error(errorMsg + ': ' + e.message);\r\n }\r\n }\r\n else {\r\n TC.error(errorMsg);\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.loadFiles = function (files, options) {\r\n const self = this;\r\n self.wrap.loadFiles(files, options);\r\n };\r\n\r\n mapProto.getElevationTool = async function () {\r\n const self = this;\r\n if (!self.elevation && !self.options.elevation) {\r\n return null;\r\n }\r\n if (self.elevation) {\r\n return self.elevation;\r\n }\r\n //await TC.loadJS(!TC.tool || !TC.tool.Elevation, TC.apiLocation + 'TC/tool/Elevation');\r\n await import('./tool/Elevation');\r\n if (!self.options.elevation) {\r\n self.elevation = null;\r\n }\r\n else {\r\n const elevationOptions = typeof self.options.elevation === 'boolean' ? {} : self.options.elevation;\r\n if (elevationOptions.services && self.options.googleMapsKey) {\r\n elevationOptions.services = elevationOptions.services.map(function (service) {\r\n const isString = typeof service === 'string';\r\n const serviceName = isString ? service : service.name;\r\n if (serviceName === 'elevationServiceGoogle') {\r\n return TC.Util.extend({\r\n name: serviceName,\r\n googleMapsKey: self.options.googleMapsKey\r\n }, isString ? {} : service);\r\n }\r\n return service;\r\n });\r\n }\r\n self.elevation = new TC.tool.Elevation(elevationOptions);\r\n }\r\n return self.elevation;\r\n };\r\n\r\n\r\n const _checkMaxFeatures = function (numMaxfeatures, urlData, data) {\r\n return new Promise(function (resolve) {\r\n urlData.mapLayer.proxificationTool.fetchXML(urlData.url, {\r\n data: data,\r\n contentType: 'application/xml',\r\n type: 'POST'\r\n }).then(function (response) {\r\n if (response instanceof XMLDocument) {\r\n const exception = response.querySelector(\"ExceptionReport Exception\");\r\n if (exception) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.INDETERMINATE,\r\n params: {\r\n err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n }\r\n }]\r\n });\r\n return;\r\n }\r\n }\r\n var featFounds = parseInt(response.querySelector(\"FeatureCollection\").getAttribute(\"numberMatched\") || response.querySelector(\"FeatureCollection\").getAttribute(\"numberOfFeatures\"), 10);\r\n if (isNaN(featFounds) || featFounds > parseInt(numMaxfeatures, 10)) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.MAX_NUM_FEATURES\r\n }]\r\n });\r\n return;\r\n }\r\n else if (featFounds === 0) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.NO_FEATURES\r\n }]\r\n });\r\n return;\r\n }\r\n else\r\n resolve(featFounds);\r\n\r\n }).catch(function (e) {\r\n //return Promise.reject(error);\r\n\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message }\r\n }]\r\n });\r\n return;\r\n });\r\n\r\n //TC.ajax({\r\n // url: url,\r\n // data: data,\r\n // contentType: 'application/xml',\r\n // responseType: 'application/xml',\r\n // method: 'POST'\r\n //}).then(function (response) {\r\n // const responseData = response.data;\r\n // if (responseData instanceof XMLDocument) {\r\n // const exception = responseData.querySelector(\"ExceptionReport Exception\")\r\n // if (exception) {\r\n // resolve({\r\n // errors: [{\r\n // key: Consts.WFSErrors.INDETERMINATE,\r\n // params: {\r\n // err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n // }\r\n // }]\r\n // })\r\n // return;\r\n // }\r\n // }\r\n // var featFounds = parseInt(responseData.querySelector(\"FeatureCollection\").getAttribute(\"numberMatched\") || responseData.querySelector(\"FeatureCollection\").getAttribute(\"numberOfFeatures\"), 10); \r\n // if (isNaN(featFounds) || featFounds > parseInt(numMaxfeatures, 10)) {\r\n // resolve({\r\n // errors: [{\r\n // key: Consts.WFSErrors.MAX_NUM_FEATURES\r\n // }]\r\n // });\r\n // return;\r\n // }\r\n // else if (featFounds === 0) {\r\n // resolve({\r\n // errors: [{\r\n // key: Consts.WFSErrors.NO_FEATURES\r\n // }]\r\n // });\r\n // return;\r\n // }\r\n // else\r\n // resolve(featFounds);\r\n\r\n //}, function (e) {\r\n // resolve({\r\n // errors: [{\r\n // key: Consts.WFSErrors.INDETERMINATE,\r\n // params: { err: e.name, errorThrown: e.message }\r\n // }]\r\n // });\r\n // return;\r\n //});\r\n });\r\n };\r\n\r\n const _makePostCall = function (objLayer, data) {\r\n return new Promise(function (resolve) {\r\n objLayer.mapLayer.proxificationTool.fetch(objLayer.url, {\r\n data: data,\r\n contentType: 'application/xml',\r\n type: 'POST'\r\n }).then(function (response) {\r\n if (response instanceof XMLDocument) {\r\n const exception = response.querySelector(\"ExceptionReport Exception\");\r\n if (exception) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.INDETERMINATE,\r\n params: {\r\n err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n }\r\n }]\r\n });\r\n return;\r\n }\r\n }\r\n resolve({ response: response });\r\n }).catch(function (e) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message }\r\n }]\r\n });\r\n return;\r\n });\r\n });\r\n };\r\n\r\n const magicFunction = async function (layer, availableLayers, filter) {\r\n //obtenemos el describe featuretype de cada capa\r\n let response = await layer.describeFeatureType(availableLayers);\r\n var returnObject = {};\r\n if (availableLayers.length === 1) {\r\n var obj = {};\r\n obj[availableLayers[0]] = response;\r\n response = obj;\r\n }\r\n //buscamos las geometrías por cada respuesta\r\n for (var layerName in response) {\r\n let _filter;\r\n var geometryFields = [];\r\n for (var k in response[layerName]) {\r\n if (TC.Util.isGeometry(response[layerName][k].type) && !response[layerName][k].nillable && !response[layerName][k].minOccurs) {\r\n //if (/^gml:\\w+PropertyType$/.test(response[layerName][k].type) && !response[layerName][k].nillable && !response[layerName][k].minOccurs) {\r\n geometryFields.push(k);\r\n }\r\n }\r\n //Si solo hay un campo de tipo geometría bsucamos recursivamente entre en los filtros logicos And y or a la caza de filtros espaciales\r\n //para poner el nombre de la geometría\r\n if (geometryFields.length <= 1) {\r\n const recursive = (filter, geomName) => {\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n filter.conditions.forEach((condition) => recursive(condition, geomName));\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n filter.geometryName = geomName;\r\n return filter;\r\n }\r\n };\r\n _filter = Object.assign(new filter.constructor(), recursive(filter, geometryFields.length === 0 ? null : geometryFields[0]));\r\n }\r\n //Si has mas de un campo de tipo geometría bsucamos recursivamente entre en los filtros logicos And y or a la caza de filtros espaciales\r\n //para duplicar el filtro con los nombres de las geometrias y los emvolvemos en un filtro OR\r\n else if (geometryFields.length > 1) {\r\n const recursive = (filter, geomNames) => {\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n filter.conditions.forEach((condition) => recursive(condition, geomNames));\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n return TC.filter.or.apply(null, geomNames.reduce((acc, curr) => {\r\n acc.push(new TC.filter[filter.getTagName()](curr, filter.geometry, filter.srsName));\r\n return acc;\r\n }, []));\r\n }\r\n };\r\n _filter = Object.assign(new filter.constructor(), recursive(filter, geometryFields));\r\n }\r\n //ahora construimos el objeto que de vuelta\r\n returnObject[layerName] = _filter;\r\n }\r\n return returnObject;\r\n };\r\n\r\n mapProto.extractFeatures = function (options) {\r\n const self = this;\r\n const arrPromises = [];\r\n options = options || {};\r\n const filter = options.filter;\r\n const outputFormat = options.outputFormat;\r\n const download = options.download;\r\n const layersToExtract = options.layers || self.layers;\r\n\r\n const services = {};\r\n\r\n const _getServiceTitle = function (service) {\r\n const mapLayer = service.mapLayers[0];\r\n return service.title || service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, '') || mapLayer.tree && mapLayer.tree.title || mapLayer.capabilities.Service.Title;\r\n };\r\n\r\n\r\n const getCRS = function () {\r\n if (download && (outputFormat === Consts.mimeType.JSON || outputFormat === Consts.mimeType.KML))\r\n return Consts.SRSDOWNLOAD_GEOJSON_KML;\r\n return TC.Util.toURNCRS(self.getCRS());\r\n };\r\n const _postOrDownload = function (objlayer, data) {\r\n return new Promise(function (resolve) {\r\n if (!download) {\r\n _makePostCall(objlayer, data).then(function (response) {\r\n if (response.errors && response.errors.length > 0) {\r\n response.errors[0].params.serviceTitle = objlayer.service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, '') || _getServiceTitle(objlayer.service);\r\n resolve(response);\r\n }\r\n else {\r\n resolve(response);\r\n }\r\n });\r\n }\r\n else {\r\n objlayer.mapLayer.proxificationTool.cacheHost.getAction(objlayer.url).then(function (cacheAction) {\r\n resolve({\r\n url: cacheAction.action(objlayer.url),\r\n data: data\r\n });\r\n });\r\n }\r\n });\r\n };\r\n layersToExtract.forEach(function (layer) {\r\n if (!layer.getVisibility() || self.workLayers.indexOf(layer) < 0 || layer.type !== Consts.layerType.WMS) {\r\n return;\r\n }\r\n var availableLayers = layer.getDisgregatedLayerNames() || layer.availableNames;\r\n const url = layer.url.toLowerCase();\r\n var serviceObj = services[url];\r\n if (!serviceObj) {\r\n serviceObj = services[url] = {\r\n url: url,\r\n layers: [],\r\n mapLayers: [layer],\r\n layerNames: []\r\n };\r\n }\r\n for (var i = 0; i < availableLayers.length; i++) {\r\n var name = availableLayers[i];\r\n //URI:se quita la exclusion de capas no visibles por escala\r\n /*if (!layer.isVisibleByScale(name) && !download)\r\n continue;*/\r\n if (!layer.wrap.getInfo(name).queryable)\r\n continue;\r\n serviceObj.layerNames.push(name);\r\n var path = layer.getPath(name);\r\n serviceObj.layers.push({\r\n name: name,\r\n title: path[path.length - 1],\r\n path: path.slice(1),\r\n features: []\r\n });\r\n }\r\n if (serviceObj.layerNames.length === 0) {\r\n return;\r\n }\r\n if (typeof serviceObj.request !== \"undefined\") {\r\n return;\r\n }\r\n serviceObj.request = serviceObj.request || layer.getWFSCapabilities(); //WFSCapabilities.Promises(url);\r\n arrPromises.push(new Promise(function (resolve, _reject) {\r\n serviceObj.request.then(function (capabilities) {\r\n var service = null;\r\n var errors = [];\r\n for (var url in services) {\r\n if (services[url].request && services[url].request === serviceObj.request) {\r\n service = services[url];\r\n }\r\n }\r\n var _numMaxFeatures = null;\r\n var layerList = service.layerNames;\r\n if (!(layerList instanceof Array) || !layerList.length) return;//condici\\u00f3n de salida\r\n //comprobamos que tiene el getfeature habilitado\r\n if (typeof capabilities.Operations.GetFeature === \"undefined\") {\r\n errors.push({ key: Consts.WFSErrors.GETFEATURE_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n var availableLayers = [];\r\n for (var i = 0; i < layerList.length; i++) {\r\n //Comprbamos si la capa en el WMS tiene el mimso nombre que en el WFS\r\n var layer = layerList[i];\r\n //quitamos los ultimos caracteres que sean \"_\" , cosas de Idena\r\n while (layer[layer.length - 1] === \"_\") {\r\n layer = layer.substring(0, layer.lastIndexOf(\"_\"));\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, layer.substring(layerList[i].indexOf(\":\") + 1))) {\r\n var titles = service.mapLayers[0].getPath(layer.substring(layerList[i].indexOf(\":\") + 1));\r\n errors.push({ key: Consts.WFSErrors.LAYERS_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service), \"layerName\": titles[titles.length - 1] } });\r\n continue;\r\n }\r\n if (availableLayers.indexOf(layer) < 0)\r\n availableLayers.push(layer);\r\n }\r\n if (availableLayers.length === 0) {\r\n errors.push({ key: Consts.WFSErrors.NO_VALID_LAYERS, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n if (capabilities.Operations.GetFeature.CountDefault)\r\n _numMaxFeatures = capabilities.Operations.GetFeature.CountDefault.DefaultValue;\r\n //comprobamos si soporta querys \r\n if (\r\n capabilities.version === \"1.0.0\" && !Object.prototype.hasOwnProperty.call(capabilities.Operations.GetFeature.Operations, \"Query\")\r\n ||\r\n (capabilities.version === \"2.0.0\" || capabilities.version === \"1.1.0\") && capabilities.Operations.QueryExpressions.indexOf(\"wfs:Query\") < 0\r\n ) {\r\n errors.push({ key: Consts.WFSErrors.QUERY_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n const operationUrl = capabilities.Operations.GetFeature.DCPType ? capabilities.Operations.GetFeature.DCPType[1].HTTP.Post.onlineResource : capabilities.Operations.GetFeature.DCP.HTTP.Post.href;\r\n\r\n Promise.all([\r\n magicFunction(service.mapLayers[0], availableLayers, filter)//clonar filtro\r\n ]).then(function (response) {\r\n var filter = response[0]; //1\r\n if (_numMaxFeatures) {\r\n _checkMaxFeatures(_numMaxFeatures, { url: operationUrl, mapLayer: service.mapLayers[0] }, TC.Util.WFSQueryBuilder(filter, null, capabilities, outputFormat, true, getCRS())).then(function (response) {\r\n if (response.errors && response.errors.length > 0) {\r\n switch (response.errors[0].key) {\r\n case Consts.WFSErrors.INDETERMINATE:\r\n response.errors[0].params.serviceTitle = service.mapLayers.reduce((prev, cur) => prev || cur.title, '') || _getServiceTitle(service);\r\n break;\r\n case Consts.WFSErrors.MAX_NUM_FEATURES:\r\n response.errors[0].params = { limit: _numMaxFeatures, serviceTitle: _getServiceTitle(service) };\r\n break;\r\n case Consts.WFSErrors.NO_FEATURES:\r\n response.errors[0].params = { serviceTitle: _getServiceTitle(service) };\r\n break;\r\n }\r\n resolve(response);\r\n }\r\n else {\r\n _postOrDownload({ url: operationUrl, mapLayer: service.mapLayers[0], service: service }, TC.Util.WFSQueryBuilder(filter, null, capabilities, download ? outputFormat : Consts.mimeType.JSON, false, getCRS())).then(function (response) {\r\n resolve(Object.assign({ service: service, errors: errors }, response));\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n _postOrDownload({ url: operationUrl, mapLayer: service.mapLayers[0], service: service }, TC.Util.WFSQueryBuilder(filter, null, capabilities, download ? outputFormat : Consts.mimeType.JSON, false, getCRS())).then(function (response) {\r\n resolve(Object.assign({ service: service, errors: errors }, response));\r\n\r\n });\r\n }\r\n }).catch(function (e) {\r\n resolve({\r\n errors: [{\r\n key: Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message, serviceTitle: _getServiceTitle(service) }\r\n }]\r\n });\r\n });\r\n }, function (e) {\r\n var service = null;\r\n for (var title in services)\r\n if (services[title].request && services[title].request === serviceObj.request) {\r\n service = services[title];\r\n }\r\n resolve({ errors: [{ key: Consts.WFSErrors.GETCAPABILITIES, params: { err: e.name, serviceTitle: _getServiceTitle(service) } }] });\r\n });\r\n }));\r\n });\r\n return arrPromises;\r\n };\r\n\r\n mapProto.updateSize = function () {\r\n this.wrap.updateSize();\r\n };\r\n\r\n mapProto.linkTo = function (map) {\r\n this.wrap.linkTo(map);\r\n };\r\n\r\n\r\n mapProto.loadRecentFiles = async function () {\r\n const self = this;\r\n const recentFilePromises = [];\r\n for (var i = 0; i < self.recentFileCount; i++) {\r\n recentFilePromises.push(localforage\r\n .getItem(self.RECENT_FILES_STORE_KEY_PREFIX + i)\r\n .catch(err => console.warn(err)));\r\n }\r\n const results = [];\r\n for await (const entry of recentFilePromises) {\r\n if (entry) {\r\n results.push(entry);\r\n }\r\n }\r\n self.recentFiles = results;\r\n return results;\r\n };\r\n\r\n mapProto.storeRecentFiles = async function (entries) {\r\n const self = this;\r\n entries = entries || self.recentFiles;\r\n for (var i = 0; i < self.recentFileCount; i++) {\r\n if (i < entries.length) {\r\n const entry = entries[i];\r\n await localforage\r\n .setItem(self.RECENT_FILES_STORE_KEY_PREFIX + i, entry)\r\n .catch(err => console.warn(err));\r\n }\r\n else {\r\n await localforage\r\n .removeItem(self.RECENT_FILES_STORE_KEY_PREFIX + i)\r\n .catch(err => console.warn(err));\r\n }\r\n }\r\n self.recentFiles = entries;\r\n };\r\n\r\n const recentFileEntrySemaphore = Util.createSemaphore();\r\n\r\n mapProto.addRecentFileEntry = async function (newEntry) {\r\n // Evitamos llamadas concurrentes, porque si se está cargando un KML con múltiples capas\r\n // se crea una condición de carrera al añadir el archivo a la lista\r\n await recentFileEntrySemaphore.acquire();\r\n const self = this;\r\n let fileExists = false;\r\n for await (const isSame of self.recentFiles.map(entry => {\r\n // Añadida compatibilidad hacia atrás (antes no había propiedad mainHandle)\r\n const handle = entry.mainHandle || entry;\r\n return handle.isSameEntry(newEntry.mainHandle);\r\n })) {\r\n if (isSame) {\r\n fileExists = true;\r\n break;\r\n }\r\n }\r\n if (fileExists) {\r\n // Archivo existente, lo eliminamos del sitio anterior\r\n const fileIndex = self.recentFiles.findIndex(f =>\r\n (f.mainHandle?.name || f.name) === newEntry.mainHandle.name);\r\n self.recentFiles.splice(fileIndex, 1);\r\n }\r\n else {\r\n // Archivo nuevo, corremos lista\r\n if (self.recentFiles.length >= self.recentFileCount) {\r\n self.recentFiles.pop();\r\n }\r\n }\r\n self.recentFiles.unshift(newEntry);\r\n await self.storeRecentFiles(self.recentFiles);\r\n self.trigger(Consts.event.RECENTFILEADD, { file: newEntry });\r\n recentFileEntrySemaphore.release();\r\n };\r\n\r\n mapProto.removeRecentFileEntry = async function (index) {\r\n const self = this;\r\n self.recentFiles.splice(index, 1);\r\n await self.storeRecentFiles(self.recentFiles);\r\n };\r\n\r\n mapProto.loadRecentFileEntry = async function (index) {\r\n const self = this;\r\n const entry = self.recentFiles[index];\r\n if (entry) {\r\n for await (const isSame of self.workLayers\r\n .filter(l => l._fileHandle)\r\n .map(l => {\r\n // Añadida compatibilidad hacia atrás (antes no había propiedad mainHandle)\r\n const handle = entry.mainHandle || entry;\r\n return l._fileHandle.isSameEntry(handle);\r\n })) {\r\n if (isSame) {\r\n self.toast(TC.Util.getLocaleString(self.options.locale, 'fileLoadedMoreThanOnce'), { type: Consts.msgType.WARNING });\r\n }\r\n }\r\n let handles = [entry.mainHandle || entry];\r\n if (entry.additionalHandles) {\r\n handles = handles.concat(entry.additionalHandles);\r\n }\r\n const permissions = [];\r\n for await (let permission of handles.map(h => h.queryPermission())) {\r\n permissions.push(permission);\r\n }\r\n for (var i = 0; i < permissions.length; i++) {\r\n let permission = permissions[i];\r\n if (permission === 'prompt') {\r\n permissions[i] = await handles[i].requestPermission();\r\n }\r\n }\r\n if (permissions.every(p => p === 'granted')) {\r\n self.loadFiles(handles);\r\n return entry;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n})();\r\n\r\n/**\r\n * Árbol de capas del mapa.\r\n * Esta clase no tiene constructor.\r\n * @class TC.LayerTree\r\n * @static\r\n */\r\n/**\r\n * Lista de árboles de (objetos de la clase {{#crossLink \"TC.layer.LayerTree\"}}{{/crossLink}}) de todas las capas base del mapa.\r\n * @property baseLayers\r\n * @type array\r\n */\r\n/**\r\n * Lista de árboles de (objetos de la clase {{#crossLink \"TC.layer.LayerTree\"}}{{/crossLink}}) de todas las capas de trabajo del mapa.\r\n * @property workLayers\r\n * @type array\r\n */\r\n\r\nconst BasicMap = TC.Map;\r\nexport default BasicMap;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport i18n from './i18n';\r\nimport proj4 from 'proj4';\r\nimport UAParser from 'ua-parser-js';\r\nimport Handlebars from '../lib/handlebars/helpers';\r\n\r\nTC.i18n = TC.i18n || i18n;\r\n\r\nString.prototype.soundex = function () {\r\n var a = this.toLowerCase().split(''),\r\n f = a.shift(),\r\n r = '',\r\n codes = {\r\n a: '', e: '', i: '', o: '', u: '',\r\n b: 1, f: 1, p: 1, v: 1,\r\n c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2,\r\n d: 3, t: 3,\r\n l: 4,\r\n m: 5, n: 5,\r\n r: 6\r\n };\r\n\r\n r = f +\r\n a\r\n .map(function (v, _i, _a) { return codes[v]; })\r\n .filter(function (v, i, a) { return i === 0 ? v !== codes[f] : v !== a[i - 1]; })\r\n .join('');\r\n\r\n return (r + '000').slice(0, 4).toUpperCase();\r\n};\r\n\r\n// GLS: Parche: Chrome no formatea correctamente los números en euskera, establece como separador de decimales el (.)\r\nvar toLocaleString = Number.prototype.toLocaleString;\r\nNumber.prototype.toLocaleString = function (locale, _options) {\r\n if (locale === \"eu-ES\" && !TC.Util.detectIE()) {\r\n var sNum = toLocaleString.apply(this, arguments);\r\n sNum = sNum.replace(/,/g, '.');\r\n if (!(Math.floor(this) === this && Number.isInteger(Math.floor(this))))\r\n sNum = sNum.replace(/.([^.]*)$/, \",$1\");\r\n\r\n return sNum;\r\n }\r\n else\r\n return toLocaleString.apply(this, arguments);\r\n};\r\n\r\nvar iconUrlCache = {};\r\nvar markerGroupClassCache = {};\r\n\r\nvar path1 = [\"Capability\", \"Request\", \"GetMap\", \"DCPType\", \"0\", \"HTTP\", \"Get\", \"OnlineResource\"];\r\nvar path2 = [\"OperationsMetadata\", \"GetTile\", \"DCP\", \"HTTP\", \"Get\", \"0\", \"href\"];\r\nvar getOnPath = function (obj, p, i) {\r\n if (i < p.length - 1) {\r\n if (Object.prototype.hasOwnProperty.call(obj, p[i])) {\r\n return getOnPath(obj[p[i]], p, ++i);\r\n }\r\n else {\r\n return null;\r\n }\r\n } else {\r\n return obj[p[i]];\r\n }\r\n};\r\n\r\nconst swipeHandlers = new WeakMap();\r\nconst modalCloseHandlers = new WeakMap();\r\nconst hasOwn = {}.hasOwnProperty;\r\nconst templateCache = new Map();\r\n\r\nconst countDecimals = (value) => {\r\n if (Math.floor(value) !== value)\r\n return value.toString().split(\".\")[1].length || 0;\r\n return 0;\r\n};\r\n\r\nconst stylePropertyNames = new Set([\r\n 'strokeColor',\r\n 'strokeWidth',\r\n 'fillColor',\r\n 'strokeOpacity',\r\n 'fillOpacity',\r\n 'url',\r\n 'radius',\r\n 'anchor',\r\n 'width',\r\n 'height',\r\n 'label',\r\n 'labelKey',\r\n 'labelOutlineWidth',\r\n 'labelOutlineColor',\r\n 'labelOffset',\r\n 'fontColor',\r\n 'fontSize'\r\n]);\r\n\r\n\r\nvar Util = {\r\n\r\n getElevationGain: function (options) {\r\n options = options || {};\r\n const coords = options.coords;\r\n if (coords && coords.length > 0 && coords[0].length > 2) { // si tenemos la Z\r\n var uphill = 0;\r\n var downhill = 0;\r\n const hillDeltaThreshold = options.hillDeltaThreshold || 0;\r\n\r\n var previousHeight;\r\n var sectorMinHeight;\r\n var sectorMaxHeight;\r\n var previousUphill = true;\r\n\r\n for (var c = 0; c < coords.length; c++) {\r\n var point = coords[c];\r\n var height = point[2];\r\n if (height !== null) {\r\n if (previousHeight === undefined) //--inicializar\r\n {\r\n previousHeight = height;\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n\r\n sectorMinHeight = Math.min(sectorMinHeight, height); //--actualizar mínimo y máximo del sector\r\n sectorMaxHeight = Math.max(sectorMaxHeight, height);\r\n\r\n var delta = height - previousHeight; //--calcular desnivel del punto respecto al anterior\r\n // hillDeltaThreshold: altura de los dientes a despreciar\r\n if (delta > hillDeltaThreshold || delta > 0 && c === coords.length - 1) //--Si se sube más del filtro (o se acaba el segmento subiendo)\r\n {\r\n if (previousUphill) //--Si en el segmento anterior también se subía, incrementamos el desnivel positivo acumulado\r\n {\r\n uphill += delta;\r\n }\r\n else //--Si en el segmento anterior se bajaba, incrementamos los desniveles acumulados que no habíamos contabilizado desde el último salto del filtro (sector) \r\n {\r\n downhill -= sectorMinHeight - previousHeight;\r\n uphill += height - sectorMinHeight;\r\n previousUphill = true; //--preparar para el paso siguiente\r\n }\r\n previousHeight = height; //--preparar para el paso siguiente\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n else if (delta < -hillDeltaThreshold || delta < 0 && c === coords.length - 1) //--Si se baja más del filtro (o se acaba el segmento bajando)\r\n {\r\n if (!previousUphill) //--Si en el segmento anterior también se bajaba, incrementamos el desnivel negativo acumulado\r\n {\r\n downhill -= delta;\r\n }\r\n else //--Si en el segmento anterior se subía, incrementamos los desniveles acumulados que no habíamos contabilizado desde el último salto del filtro (sector) \r\n {\r\n uphill += sectorMaxHeight - previousHeight;\r\n downhill -= height - sectorMaxHeight;\r\n previousUphill = false; //--preparar para el paso siguiente\r\n }\r\n previousHeight = height; //--preparar para el paso siguiente\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n upHill: Math.round(uphill),\r\n downHill: Math.round(downhill)\r\n };\r\n\r\n } else { return null; }\r\n },\r\n\r\n isPlainObject: function (obj) {\r\n // Not plain objects:\r\n // - Any object or value whose internal [[Class]] property is not \"[object Object]\"\r\n // - DOM nodes\r\n // - window\r\n if (typeof obj !== 'object' || obj.nodeType || obj.window === obj) {\r\n return false;\r\n }\r\n\r\n if (obj.constructor &&\r\n !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {\r\n return false;\r\n }\r\n\r\n // If the function hasn't returned already, we're confident that\r\n // |obj| is a plain object, created by {} or constructed with new Object\r\n return true;\r\n },\r\n\r\n isEmptyObject: function (obj) {\r\n var name;\r\n for (name in obj) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n isFunction: function (obj) {\r\n return typeof obj === 'function';\r\n },\r\n\r\n extend: function () {\r\n var clone,\r\n target = arguments[0] || {},\r\n i = 1,\r\n deep = false;\r\n\r\n // Comprobar si hay que hacer copia profunda (primer parámetro === true)\r\n if (typeof target === 'boolean') {\r\n deep = target;\r\n\r\n target = arguments[i] || {};\r\n i++;\r\n }\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if (typeof target !== 'object' && !Util.isFunction(target)) {\r\n target = {};\r\n }\r\n\r\n for (var len = arguments.length; i < len; i++) {\r\n // Only deal with non-null/undefined values\r\n const options = arguments[i];\r\n if (options != null) {\r\n // Extend the base object\r\n for (var name in options) {\r\n const src = target[name];\r\n const copy = options[name];\r\n\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n continue;\r\n }\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n const copyIsArray = Array.isArray(copy);\r\n if (deep && copy && (Util.isPlainObject(copy) || copyIsArray)) {\r\n if (copyIsArray) {\r\n clone = src && Array.isArray(src) ? src : [];\r\n\r\n } else {\r\n clone = src && Util.isPlainObject(src) ? src : {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[name] = Util.extend(deep, clone, copy);\r\n\r\n // Don't bring in undefined values\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Return the modified object\r\n return target;\r\n },\r\n\r\n getMapLocale: function (map) {\r\n return map.options && map.options.locale && map.options.locale.replace('_', '-') || \"es-ES\";\r\n },\r\n\r\n regex: {\r\n PROTOCOL: /(^https?:)/i\r\n },\r\n\r\n isOnCapabilities: function (url) {\r\n var withProtocol = arguments.length == 2 ? arguments[1] : true;\r\n var testUrl = !withProtocol ? url.replace(Util.regex.PROTOCOL, \"\") : url;\r\n\r\n let c;\r\n if (withProtocol) {\r\n if (TC.capabilities[testUrl]) {\r\n return url;\r\n }\r\n } else {\r\n for (c in TC.capabilities) {\r\n if (c.replace(Util.regex.PROTOCOL, \"\") == testUrl) {\r\n return c;\r\n }\r\n }\r\n }\r\n\r\n for (c in TC.capabilities) {\r\n var u = getOnPath(TC.capabilities[c], path1, 0) || getOnPath(TC.capabilities[c], path2, 0);\r\n\r\n if (u && withProtocol && url == u) {\r\n return u;\r\n }\r\n else if (u && url.replace(Util.regex.PROTOCOL, \"\") == u.replace(Util.regex.PROTOCOL, \"\")) {\r\n return u;\r\n }\r\n }\r\n\r\n return url;\r\n },\r\n\r\n reqGetMapOnCapabilities: function (url) {\r\n var withProtocol = arguments.length === 2 ? arguments[1] : true;\r\n\r\n var _get = function (caps) {\r\n var u = getOnPath(caps, path1, 0) || getOnPath(caps, path2, 0);\r\n if (u)\r\n return !withProtocol ? u.split('?')[0].replace(Util.regex.PROTOCOL, \"\") : u.split('?')[0];\r\n\r\n return null;\r\n };\r\n if (TC.capabilities[url]) {\r\n return _get(TC.capabilities[url]);\r\n }\r\n\r\n return null;\r\n },\r\n\r\n getFnFromString: function (fnName) {\r\n var scope = window;\r\n var scopeSplit = fnName.split('.');\r\n for (var i = 0; i < scopeSplit.length - 1; i++) {\r\n scope = scope[scopeSplit[i]];\r\n\r\n if (scope == undefined) return;\r\n }\r\n\r\n return scope[scopeSplit[scopeSplit.length - 1]];\r\n },\r\n\r\n isURL: function (text) {\r\n return /^(http|https|ftp|mailto):\\/\\//i.test(text);\r\n },\r\n\r\n isSecureURL: function (url) {\r\n //sino empieza por http ni por https la consideramos segura\r\n if (!/^(f|ht)tps?:\\/\\//i.test(url)) {\r\n return true;\r\n }\r\n return /^(f|ht)tps:\\/\\//i.test(url);\r\n },\r\n\r\n isSameOrigin: function (uri) {\r\n var result = uri.indexOf(\"http\") !== 0 && uri.indexOf(\"//\") !== 0;\r\n var urlParts = !result && uri.match(Consts.url.SPLIT_REGEX);\r\n if (urlParts) {\r\n var location = window.location;\r\n var uProtocol = urlParts[1];\r\n result =\r\n (uProtocol == location.protocol || uProtocol == undefined) &&\r\n urlParts[3] == location.hostname;\r\n var uPort = urlParts[4], lPort = location.port;\r\n if (uPort != 80 && uPort !== \"\" || lPort != \"80\" && lPort !== \"\") {\r\n result = result && uPort == lPort;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n formatNumber: function (value, locale) {\r\n var t = typeof value;\r\n if (t === 'number') {\r\n return value.toLocaleString(locale, { maximumFractionDigits: Math.min(6, countDecimals(value)) });\r\n }\r\n else if (t === 'string') {\r\n const n = parseFloat(value);\r\n if (n === new Number(value).valueOf()) {\r\n return n.toLocaleString(locale, { maximumFractionDigits: Math.min(6, countDecimals(n)) });\r\n }\r\n }\r\n return value;\r\n },\r\n\r\n addProtocol: function (uri) {\r\n var result = uri;\r\n if (uri && uri.indexOf('//') === 0) {\r\n result = location.protocol + uri;\r\n }\r\n return result;\r\n },\r\n\r\n /* \r\n * getDiv: returns HTML element or null if the parameter is invalid\r\n * Parameter: string with element ID or HTML element\r\n */\r\n getDiv: function (div) {\r\n var result;\r\n if (typeof div === 'string') {\r\n result = document.getElementById(div);\r\n }\r\n else if (div instanceof HTMLElement) {\r\n result = div;\r\n }\r\n else if (div && '$' in window && div instanceof $ && div.length) {\r\n result = div[0];\r\n }\r\n else {\r\n result = document.createElement('div');\r\n }\r\n return result;\r\n },\r\n\r\n getScriptLocation: function () {\r\n var src;\r\n var script;\r\n if (document.currentScript) {\r\n script = document.currentScript;\r\n }\r\n else {\r\n var scripts = document.getElementsByTagName('script');\r\n script = scripts[scripts.length - 1];\r\n }\r\n src = script.getAttribute('src');\r\n if (src) {\r\n return src.substr(0, src.lastIndexOf('/') + 1);\r\n }\r\n return \"\";\r\n },\r\n\r\n /* \r\n * getBackgroundUrlFromCss: devuelve la URL de background-image en CSS\r\n * Parameter: string con nombre de clase\r\n */\r\n getBackgroundUrlFromCss: function (cssClass) {\r\n var result = '';\r\n\r\n if (cssClass) {\r\n if (iconUrlCache[cssClass] !== undefined) {\r\n result = iconUrlCache[cssClass];\r\n }\r\n else {\r\n const iconDiv = document.createElement('div');\r\n iconDiv.style.display = 'none';\r\n iconDiv.classList.add(cssClass);\r\n document.body.appendChild(iconDiv);\r\n // The regular expression is nongreedy (.*?), otherwise in FF and IE it gets 'url_to_image\"'\r\n var match = /^url\\(['\"]?(.*?)['\"]?\\)$/gi.exec(window.getComputedStyle(iconDiv, null).backgroundImage);\r\n if (match && match.length > 1) {\r\n result = match[match.length - 1];\r\n }\r\n iconDiv.parentElement.removeChild(iconDiv);\r\n iconUrlCache[cssClass] = result;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n getPointIconUrl: function getPointIconUrl(options) {\r\n var result = null;\r\n if (options.url) {\r\n result = options.url;\r\n if (/Firefox/.test(navigator.userAgent) && location.protocol === 'https:' && result.startsWith(\"http:\")) {\r\n result = result.replace(\"http:\", \"https:\");\r\n }\r\n }\r\n else {\r\n var className;\r\n if (typeof options.cssClass === 'string') {\r\n className = options.cssClass;\r\n }\r\n else {\r\n var classes = options.classes || TC.Cfg.styles.marker.classes;\r\n className = classes[0];\r\n if (options.group) {\r\n if (!Object.prototype.hasOwnProperty.call(markerGroupClassCache, options.group)) {\r\n let i = Object.keys(markerGroupClassCache).length;\r\n i = i % classes.length;\r\n markerGroupClassCache[options.group] = classes[i];\r\n }\r\n className = markerGroupClassCache[options.group];\r\n }\r\n }\r\n result = Util.getBackgroundUrlFromCss(className);\r\n }\r\n if (!result && options !== TC.Cfg.styles.point && options.cssClass !== '') {\r\n result = getPointIconUrl(TC.Cfg.styles.point);\r\n }\r\n return result;\r\n },\r\n\r\n getLegendImageFromStyle: function (style, options) {\r\n let result = null;\r\n options = options || {};\r\n if (style.url) {\r\n result = style.url;\r\n }\r\n else {\r\n let width = options.width || 32;\r\n let height = options.height || 16;\r\n const strokeWidth = style.strokeWidth || 0;\r\n const strokeHalfWidth = strokeWidth / 2;\r\n const fillColor = style.fillColor || 'transparent';\r\n const fillOpacity = style.fillOpacity || 1;\r\n const diameter = (style.radius || 0) * 2 + strokeWidth;\r\n const lineDashText = style.lineDash ? `stroke-dasharray=\"${style.lineDash.join(' ')}\" ` : '';\r\n let body;\r\n width = Math.max(width, diameter);\r\n height = Math.max(height, diameter);\r\n switch (options.geometryType) {\r\n case Consts.geom.POINT:\r\n body = ``;\r\n break;\r\n case Consts.geom.POLYLINE: {\r\n const xStart = strokeHalfWidth;\r\n const yStart = height - strokeHalfWidth;\r\n const xEnd = width - strokeHalfWidth;\r\n const yEnd = strokeHalfWidth;\r\n body = ``;\r\n break;\r\n }\r\n case Consts.geom.POLYGON: {\r\n const x1 = strokeHalfWidth;\r\n const y1 = height - strokeHalfWidth;\r\n const x2 = strokeHalfWidth;\r\n const y2 = strokeHalfWidth;\r\n const x3 = strokeHalfWidth + width * 0.8;\r\n const y3 = strokeHalfWidth;\r\n const x4 = width - strokeHalfWidth;\r\n const y4 = height - strokeHalfWidth;\r\n body = ``;\r\n break;\r\n }\r\n default:\r\n body = ``;\r\n break;\r\n }\r\n result = 'data:image/svg+xml,' + encodeURIComponent(`${body}`);\r\n }\r\n return result;\r\n },\r\n\r\n /* \r\n * addArrayToTree: añade a un array a un árbol, cada elemento en un nivel anidado\r\n * Parameters: array, nodo de árbol, [índice]\r\n * Returns: último nodo insertado, null si ya existía la ruta\r\n */\r\n addArrayToTree: function addArrayToTree(path, treeNode, index) {\r\n var result = null;\r\n var found = false;\r\n index = index || 0;\r\n var name = path[index];\r\n if (name) {\r\n var n;\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n n = treeNode.children[i];\r\n if (n.name === name) {\r\n found = true;\r\n if (index === path.length - 1) {\r\n result = n;\r\n }\r\n else {\r\n const r = addArrayToTree(path, n, index + 1);\r\n if (r) {\r\n result = r;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n n = { name: name, title: name, uid: '/' + path.slice(0, index + 1).join('/'), children: [] };\r\n const r = addArrayToTree(path, n, index + 1);\r\n if (r) {\r\n result = r;\r\n }\r\n else {\r\n result = n;\r\n }\r\n n.parent = treeNode;\r\n treeNode.children.push(n);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n parseCoords: function (text) {\r\n var result = null;\r\n\r\n var _parseGeoCoord = function (text) {\r\n var t = text;\r\n var result = {};\r\n result.type = Consts.GEOGRAPHIC;\r\n var idx = t.indexOf('\\u00B0');\r\n result.value = parseFloat(t.substr(0, idx));\r\n t = t.substr(idx + 1);\r\n idx = t.indexOf('\\'');\r\n if (idx >= 0) {\r\n var v = parseFloat(t.substr(0, idx)) / 60;\r\n if (result.value >= 0) {\r\n result.value += v;\r\n }\r\n else {\r\n result.value -= v;\r\n }\r\n t = t.substr(idx + 1);\r\n idx = t.indexOf('\\'');\r\n if (idx >= 0) {\r\n v = parseFloat(t.substr(0, idx).replace(',', '.')) / 3600;\r\n if (result.value >= 0) {\r\n result.value += v;\r\n }\r\n else {\r\n result.value -= v;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var _parseCoord = function (text) {\r\n var t = text.trim();\r\n // nnºnn'nn''N\r\n if (t.match(/^1?\\d{0,2}\\s*\\u00B0(\\s*\\d{1,2}\\s*'(\\s*\\d{1,2}([.,]\\d+)?\\s*'')?)?\\s*[NnSsWwOoEe]$/g)) {\r\n switch (t[t.length - 1]) {\r\n case 'S':\r\n case 's':\r\n case 'W':\r\n case 'w':\r\n case 'O':\r\n case 'o':\r\n t = '-' + t;\r\n break;\r\n }\r\n t = t.substr(0, t.length - 1);\r\n return _parseGeoCoord(t);\r\n }\r\n // +nnºnn'nn''\r\n if (t.match(/^[+-]?1?\\d{0,2}\\s*\\u00B0(\\s*\\d{1,2}\\s*'(\\s*\\d{1,2}([.,]\\d+)?\\s*'')?)?$/g)) {\r\n return _parseGeoCoord(t);\r\n }\r\n // nn.nn N\r\n if (t.match(/^1?\\d{0,2}([.,]\\d+)?\\s*\\u00B0?\\s*[NnSsWwOoEe]$/g)) {\r\n var result = { type: Consts.GEOGRAPHIC, value: parseFloat(t.substr(0, t.length - 1).replace(',', '.')) };\r\n if (t.match(/[SsWwOo]$/)) {\r\n result.value = -result.value;\r\n }\r\n return result;\r\n }\r\n // +nn.nn\r\n if (t.match(/^[+-]?1?\\d{0,2}([.,]\\d+)?\\s*\\u00B0?$/g)) {\r\n return { type: Consts.GEOGRAPHIC, value: parseFloat(t.replace(',', '.')) };\r\n }\r\n // UTM\r\n if (t.match(/^[-+]?\\d{6,7}([.,]\\d+)?$/g)) {\r\n return { type: Consts.UTM, value: parseFloat(t.replace(',', '.')) };\r\n }\r\n return null;\r\n };\r\n\r\n text = text.trim().toUpperCase();\r\n var xy = text.split(',');\r\n if (xy.length === 4) {\r\n xy = [xy.slice(0, 1).join('.'), xy.slice(2, 3).join('.')];\r\n }\r\n else if (xy.length === 1 || xy.length === 3) {\r\n xy = text.split(' ');\r\n }\r\n if (xy.length === 2) {\r\n var x = _parseCoord(xy[0]);\r\n var y = _parseCoord(xy[1]);\r\n if (x !== null && y !== null) {\r\n result = [x, y];\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n reproject: function (coords, sourceCrs, targetCrs) {\r\n var result;\r\n var multipoint = true;\r\n var multiring = true;\r\n var multipoly = true;\r\n if (Array.isArray(coords[0])) {\r\n if (Array.isArray(coords[0][0])) {\r\n if (!Array.isArray(coords[0][0][0])) {\r\n multipoly = false;\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n multiring = false;\r\n coords = [[coords]];\r\n }\r\n }\r\n else {\r\n multipoint = false;\r\n multiring = false;\r\n multipoly = false;\r\n coords = [[[coords]]];\r\n }\r\n const loadProj = function (crs) {\r\n let result;\r\n const def = proj4.defs[crs];\r\n if (def) {\r\n result = proj4(def);\r\n }\r\n if (!result) {\r\n TC.loadProjDef({ crs: crs, sync: true });\r\n result = proj4(proj4.defs[crs]);\r\n }\r\n return result;\r\n };\r\n var sourcePrj = loadProj(sourceCrs);\r\n var targetPrj = loadProj(targetCrs);\r\n result = new Array(coords.length);\r\n coords.forEach(function (poly, pidx) {\r\n const rp = result[pidx] = [];\r\n poly.forEach(function (ring, ridx) {\r\n const rr = rp[ridx] = [];\r\n ring.forEach(function (coord, cidx) {\r\n if (Array.isArray(coord) && coord.length > 1) {\r\n var point = proj4(sourcePrj, targetPrj, { x: coord[0], y: coord[1] });\r\n rr[cidx] = [point.x, point.y];\r\n if (coord.length > 2) {\r\n for (var i = 2; i < coord.length;i++)\r\n rr[cidx][i] = coord[i];\r\n }\r\n } else {\r\n rr[cidx] = coord;\r\n }\r\n });\r\n });\r\n });\r\n if (!multipoint) {\r\n result = result[0][0][0];\r\n }\r\n else if (!multiring) {\r\n result = result[0][0];\r\n }\r\n else if (!multipoly) {\r\n result = result[0];\r\n }\r\n return result;\r\n },\r\n\r\n getMetersPerDegree: function (extent) {\r\n let result;\r\n const R = 6370997; // m\r\n if (Array.isArray(extent) && extent.length >= 4) {\r\n if (extent[3] === extent[1]) {\r\n result = Math.PI * R * Math.cos(this.degToRad(extent[1])) / 180;\r\n }\r\n else {\r\n const dLat = this.degToRad(extent[3] - extent[1]);\r\n const sindlat2 = Math.sin(dLat / 2);\r\n const a = sindlat2 * sindlat2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n result = R * c / (extent[3] - extent[1]);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n radToDeg: function (rad) { // convert radians to degrees\r\n return rad * 180 / Math.PI;\r\n },\r\n degToRad: function (deg) { // convert degrees to radians\r\n return deg * Math.PI / 180;\r\n },\r\n mod: function (n) { // modulo for negative values\r\n const twoPi = 2 * Math.PI;\r\n return (n % twoPi + twoPi) % twoPi;\r\n },\r\n\r\n getCRSCode: function (crs) {\r\n var result = null;\r\n crs = crs.trim();\r\n if (/^EPSG:\\d{4,6}$/g.test(crs) || //formato EPSG\r\n /^urn:ogc:def:crs:EPSG:.*:\\d{4,6}/g.test(crs) || // formato URN\r\n /http:\\/\\/www.opengis.net\\/gml\\/srs\\/epsg.xml#\\d{4,6}$/g.test(crs)) { // formato GML\r\n var match = crs.trim().match(/^.+[:#](\\d{4,6})$/); // devuelve la parte numérica del código\r\n if (match) {\r\n result = match[1];\r\n }\r\n }\r\n return result;\r\n },\r\n toURNCRS: function (crs) {\r\n return crs.replace(/^(?EPSG):(?\\d{4,6})$/g, \"urn:ogc:def:crs:$::$\");\r\n },\r\n\r\n CRSCodesEqual: function (crs1, crs2) {\r\n if (crs1 === crs2) {\r\n return true;\r\n }\r\n var code1 = this.getCRSCode(crs1);\r\n var code2 = this.getCRSCode(crs2);\r\n return code1 !== null && code2 !== null && code1 === code2;\r\n },\r\n\r\n getLocaleString: function (locale, key, texts) {\r\n var result = key;\r\n if (TC.i18n && TC.i18n[locale]) {\r\n var text = TC.i18n[locale][key];\r\n if (text) {\r\n result = text;\r\n if (texts) {\r\n for (var k in texts) {\r\n result = result.replace('{' + k + '}', texts[k]);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n getRenderedHtml: async function (templateOrId, data, callback) {\r\n const compileTemplate = function (templateId, txt) {\r\n const template = Handlebars.compile(txt); // TODO: add optimization options\r\n Handlebars.registerPartial(templateId, template);\r\n templateCache.set(templateId, template);\r\n return template;\r\n };\r\n const fetchTemplate = async function (templateId) {\r\n let template = templateCache.get(templateId);\r\n if (template) {\r\n return template;\r\n }\r\n else {\r\n templateCache.set(templateId, true);\r\n let response;\r\n try {\r\n response = await TC.ajax({\r\n url: TC.apiLocation + `TC/templates/${templateId}.hbs`,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n }\r\n catch (err) {\r\n console.log(\"Error fetching template: \" + err.message);\r\n throw err;\r\n }\r\n const matches = response.data.match(/{{> ([a-zA-Z\\-]+)(?:(?:\\s[a-zA-Z]+)\\s*)?}}/);\r\n if (matches) {\r\n await Promise.all(matches.slice(1).map(str => fetchTemplate(str.trim())));\r\n }\r\n return compileTemplate(templateId, response.data);\r\n }\r\n };\r\n const endFn = function (template) {\r\n const html = template(data);\r\n if (Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n return html;\r\n };\r\n if (Util.isFunction(templateOrId)) {\r\n return endFn(templateOrId);\r\n }\r\n else {\r\n const template = await fetchTemplate(templateOrId);\r\n return endFn(template);\r\n }\r\n },\r\n\r\n getSimpleMimeType: function (mimeType) {\r\n var result = '';\r\n if (mimeType) {\r\n var end = mimeType.indexOf(';');\r\n if (end > 0) {\r\n mimeType = mimeType.substring(0, end);\r\n }\r\n result = mimeType;\r\n }\r\n return result;\r\n },\r\n\r\n getMimeTypeFromUrl: function (url) {\r\n let idx = url.indexOf('?');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n else {\r\n idx = url.indexOf('#');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n }\r\n switch (url.substr(url.lastIndexOf('.') + 1).toLowerCase()) {\r\n case 'kml':\r\n return Consts.mimeType.KML;\r\n case 'kmz':\r\n return Consts.mimeType.KMZ;\r\n case 'json':\r\n case 'geojson':\r\n return Consts.mimeType.GEOJSON;\r\n case 'gml':\r\n return Consts.mimeType.GML;\r\n case 'gpx':\r\n return Consts.mimeType.GPX;\r\n case 'gpkg':\r\n return Consts.mimeType.GEOPACKAGE;\r\n case 'shp':\r\n case 'dbf':\r\n case 'prj':\r\n case 'cst':\r\n case 'cpg':\r\n return Consts.mimeType.SHAPEFILE;\r\n case 'zip':\r\n return Consts.mimeType.ZIP;\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n getQueryStringParams: function (url) {\r\n var queryString;\r\n if (url) {\r\n var queryIdx = url.indexOf('?');\r\n if (queryIdx >= 0) {\r\n queryString = url.substr(queryIdx);\r\n var fragmentIdx = queryString.indexOf('#');\r\n if (fragmentIdx >= 0) {\r\n queryString = queryString.substr(0, fragmentIdx);\r\n }\r\n }\r\n else {\r\n queryString = '?';\r\n }\r\n }\r\n else {\r\n queryString = location.search;\r\n }\r\n var result = queryString.replace(/(^\\?)/, '').split(\"&\").map(function (elm) {\r\n return elm = elm.split(\"=\"), this[elm[0]] = elm[1], this;\r\n }.bind({}))[0];\r\n delete result[''];\r\n return result;\r\n },\r\n\r\n getParamString: function (obj) {\r\n const arr = [];\r\n for (var key in obj) {\r\n arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));\r\n }\r\n return arr.join('&').replace(/%20/g, '+');\r\n },\r\n\r\n fastUnshift: function (a, elm) {\r\n var len = a.length;\r\n while (len) {\r\n a[len] = a[len - 1];\r\n len--;\r\n }\r\n a[0] = elm;\r\n },\r\n\r\n storage: {\r\n getCookie: function (key) {\r\n return TC.cookie(key);\r\n },\r\n setCookie: function (key, value, options) {\r\n return TC.cookie(key, value, options);\r\n },\r\n getLocalValue: function (key) {\r\n var result = null;\r\n if (localStorage && localStorage instanceof Storage) {\r\n result = localStorage.getItem(key);\r\n }\r\n else {\r\n result = Util.storage.getCookie(key);\r\n }\r\n return result;\r\n },\r\n setLocalValue: function (key, value) {\r\n if (localStorage && localStorage instanceof Storage) {\r\n if (value === undefined) {\r\n localStorage.removeItem(key);\r\n }\r\n else {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n else {\r\n\r\n if (value === undefined) {\r\n var exDate = new Date();\r\n exDate.setDate(exDate.getDate() - 1);\r\n Util.storage.setCookie(key, \"\", { expires: exDate });\r\n }\r\n else {\r\n Util.storage.setCookie(key, value);\r\n }\r\n }\r\n return key;\r\n },\r\n getSessionLocalValue: function (key) {\r\n var result = null;\r\n if (sessionStorage && sessionStorage instanceof Storage) {\r\n result = sessionStorage.getItem(key);\r\n }\r\n else {\r\n result = Util.storage.getCookie(key);\r\n }\r\n return result;\r\n },\r\n setSessionLocalValue: function (key, value) {\r\n if (sessionStorage && sessionStorage instanceof Storage) {\r\n if (value === undefined) {\r\n sessionStorage.removeItem(key);\r\n }\r\n else {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n else {\r\n\r\n if (value === undefined) {\r\n var exDate = new Date();\r\n exDate.setDate(exDate.getDate() - 1);\r\n Util.storage.setCookie(key, \"\", { expires: exDate });\r\n }\r\n else {\r\n Util.storage.setCookie(key, value);\r\n }\r\n }\r\n return key;\r\n }\r\n },\r\n detectFirefox: function () {\r\n if (/Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent)) //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);\r\n return new Number(RegExp.$1); // capture x.x portion and store as a number\r\n else\r\n return false;\r\n },\r\n detectIE: function () {\r\n var ua = window.navigator.userAgent;\r\n\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n\r\n // GLS: 13/02/2019. Comento lo que respecta a Edge, no tiene sentido meterlo en el mismo saco que un navegador obsoleto.\r\n // No lo comento porque en la mesa no hay quorum.\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // IE 12 => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n detectChrome: function () {\r\n return window.chrome;\r\n\r\n },\r\n detectSafari: function () {\r\n return !!navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/);\r\n },\r\n detectMouse: function () {\r\n const matchesCoarse = matchMedia('(pointer:coarse)').matches;\r\n const matchesFine = matchMedia('(pointer:fine)').matches;\r\n if (matchesCoarse && matchesFine) {\r\n return true;\r\n }\r\n if (matchesCoarse && !matchesFine) {\r\n var testHover = function () {\r\n //console.log('estamos en testHover');\r\n var mq = '(hover: hover)',\r\n hover = !TC.browserFeatures.touch(), // fallback if mq4 not supported: no hover for touch\r\n mqResult;\r\n\r\n mqResult = window.matchMedia(mq);\r\n //console.log('resultado de window.matchMedia(mq): ' + mqResult.media);\r\n //console.log('mq: ' + mq);\r\n if (mqResult.media === mq) {\r\n //console.log('es igual');\r\n // matchMedia supports hover detection, so we rely on that\r\n hover = mqResult.matches;\r\n //console.log('va retornar: ' + hover);\r\n }\r\n\r\n return hover;\r\n };\r\n\r\n if (testHover())\r\n return true;\r\n else return false;\r\n }\r\n if (!matchesCoarse && matchesFine) {\r\n return true;\r\n }\r\n if (matchMedia('(pointer:none)').matches) {\r\n return false;\r\n }\r\n if (!TC.browserFeatures.touch()) {\r\n return true;\r\n }\r\n },\r\n detectAndroid: function () {\r\n return navigator.userAgent.match(/Android/i);\r\n },\r\n detectBlackBerry: function () {\r\n return navigator.userAgent.match(/BlackBerry/i);\r\n },\r\n detectIOS: function () {\r\n return navigator.userAgent.match(/iPhone|iPad|iPod/i);\r\n },\r\n detectMobileWindows: function () {\r\n return navigator.userAgent.match(/IEMobile/i);\r\n },\r\n detectMobile: function () {\r\n return Util.detectAndroid() || Util.detectIOS() || Util.detectMobileWindows() || Util.detectBlackBerry();\r\n },\r\n getBrowser: function () {\r\n var parser = new UAParser();\r\n var browser = parser.getBrowser();\r\n return { name: browser.name, version: browser.major };\r\n },\r\n getElementByNodeName: function (parentNode, nodeName) {\r\n var colonIndex = nodeName.indexOf(\":\");\r\n var tag = nodeName.substr(colonIndex + 1);\r\n var nodes = parentNode.getElementsByTagNameNS(\"*\", tag);\r\n\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].nodeName == nodeName) {\r\n return nodes;\r\n }\r\n }\r\n return undefined;\r\n },\r\n addURLParameters: function (url, parameters) {\r\n if (!parameters) {\r\n return url;\r\n }\r\n let urlObj;\r\n let isRelative = false;\r\n try {\r\n urlObj = new URL(url);\r\n }\r\n catch (e) {\r\n if (e instanceof TypeError) {\r\n isRelative = true;\r\n urlObj = new URL(url, window.location.href);\r\n }\r\n }\r\n for (var key in parameters) {\r\n const value = parameters[key];\r\n urlObj.searchParams.set(key, value);\r\n }\r\n const newUrl = urlObj.href;\r\n if (isRelative) {\r\n return newUrl.substr(newUrl.indexOf(urlObj.host) + urlObj.host.length);\r\n }\r\n return newUrl;\r\n },\r\n removeURLParameter: function (url, parameter) {\r\n var urlparts = url.split('?');\r\n if (urlparts.length >= 2) {\r\n\r\n var prefix = encodeURIComponent(parameter.toLowerCase()) + '=';\r\n var pars = urlparts[1].toLowerCase().split(/[&;]/g);\r\n\r\n //reverse iteration as may be destructive\r\n for (var i = pars.length; i-- > 0;) {\r\n //idiom for string.startsWith\r\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\r\n pars.splice(i, 1);\r\n }\r\n }\r\n\r\n url = urlparts[0] + '?' + pars.join('&');\r\n return url;\r\n } else {\r\n return url;\r\n }\r\n },\r\n\r\n showModal: function (contentNode, options) {\r\n options = options || {};\r\n\r\n contentNode.hidden = false;\r\n contentNode.classList.add(Consts.classes.VISIBLE);\r\n const closeButton = contentNode.querySelectorAll('.tc-modal-close');\r\n if (closeButton && closeButton.length > 0) {\r\n for (var i = 0; i < closeButton.length; i++) {\r\n var closeCallback = modalCloseHandlers.get(closeButton[i]);\r\n if (closeCallback) {\r\n modalCloseHandlers.delete(closeButton[i]);\r\n }\r\n else {\r\n closeCallback = function (e) {\r\n e.stopPropagation();\r\n return TC.Util.closeModal(options.closeCallback, e.target);\r\n };\r\n modalCloseHandlers.set(closeButton[i], closeCallback);\r\n }\r\n modalCloseHandlers.set(closeButton[i], closeCallback);\r\n closeButton[i].addEventListener('click', closeCallback);\r\n }\r\n }\r\n\r\n if (Util.isFunction(options.openCallback)) {\r\n options.openCallback();\r\n }\r\n },\r\n\r\n closeModal: function (callback, target) {\r\n\r\n const hide = function (modal) {\r\n modal.classList.remove(Consts.classes.VISIBLE);\r\n };\r\n\r\n var modal;\r\n if (target) {\r\n modal = target;\r\n while (modal && !modal.matches('.tc-modal')) {\r\n modal = modal.parentElement;\r\n }\r\n\r\n hide(modal);\r\n } else {\r\n Array.prototype.forEach.call(document.querySelectorAll('.tc-modal'), function (modal) {\r\n hide(modal);\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n closeAlert: function (btn) {\r\n var elm = btn;\r\n do {\r\n elm = elm.parentElement;\r\n if (elm.matches('.tc-alert')) {\r\n elm.style.display = 'none';\r\n }\r\n }\r\n while (elm);\r\n },\r\n\r\n swipe: function (target, options) {\r\n const addListeners = function (handlers) {\r\n target.addEventListener('mousedown', handlers.start);\r\n target.addEventListener('touchstart', handlers.start, { passive: true });\r\n target.addEventListener('mouseup', handlers.end);\r\n target.addEventListener('touchend', handlers.end, { passive: true });\r\n };\r\n\r\n if (options === 'disable') {\r\n const handlers = swipeHandlers.get(target);\r\n if (handlers) {\r\n target.removeEventListener('mousedown', handlers.start);\r\n target.removeEventListener('touchstart', handlers.start);\r\n target.removeEventListener('mouseup', handlers.end);\r\n target.removeEventListener('touchend', handlers.end);\r\n }\r\n return;\r\n }\r\n else if (options === 'enable') {\r\n const handlers = swipeHandlers.get(target);\r\n if (handlers) {\r\n addListeners(handlers);\r\n }\r\n return;\r\n }\r\n\r\n options = options || {};\r\n const minDistance = options.minDistance || 30;\r\n const maxCrossDistance = options.maxCrossDistance || 30;\r\n const maxAllowedTime = options.maxAllowedTime || 1000;\r\n var touchStartCoords = { 'x': -1, 'y': -1 }, // X and Y coordinates on mousedown or touchstart events.\r\n touchEndCoords = { 'x': -1, 'y': -1 },// X and Y coordinates on mouseup or touchend events.\r\n startTime = 0,// Time on swipeStart\r\n elapsedTime = 0;// Elapsed time between swipeStart and swipeEnd\r\n\r\n const getDirection = function (startCoords, endCoords) {\r\n const dx = endCoords.x - startCoords.x;\r\n const dy = endCoords.y - startCoords.y;\r\n const adx = Math.abs(dx);\r\n const ady = Math.abs(dy);\r\n if (adx > ady && adx > minDistance && ady <= maxCrossDistance) {\r\n return dx < 0 ? 'left' : 'right';\r\n }\r\n if (ady > adx && ady > minDistance && adx <= maxCrossDistance) {\r\n return dy < 0 ? 'up' : 'down';\r\n }\r\n return 'none';\r\n };\r\n\r\n const mustSwipe = function (e) {\r\n if (options.noSwipe) {\r\n var elm = e.target;\r\n while (elm && elm !== target) {\r\n if (elm.matches && elm.matches(options.noSwipe)) {\r\n return false;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const swipeStart = function (e) {\r\n if (mustSwipe(e)) {\r\n e = 'changedTouches' in e ? e.changedTouches[0] : e;\r\n touchStartCoords.x = e.pageX;\r\n touchStartCoords.y = e.pageY;\r\n startTime = new Date().getTime();\r\n }\r\n };\r\n\r\n const swipeEnd = function (e) {\r\n if (startTime) {\r\n e = 'changedTouches' in e ? e.changedTouches[0] : e;\r\n touchEndCoords.x = e.pageX;\r\n touchEndCoords.y = e.pageY;\r\n elapsedTime = new Date().getTime() - startTime;\r\n if (elapsedTime <= maxAllowedTime) {\r\n const callback = options[getDirection(touchStartCoords, touchEndCoords)];\r\n if (callback) {\r\n callback.call(target);\r\n }\r\n }\r\n startTime = 0;\r\n }\r\n };\r\n\r\n const handlers = {\r\n start: swipeStart,\r\n end: swipeEnd\r\n };\r\n swipeHandlers.set(target, handlers);\r\n addListeners(handlers);\r\n },\r\n\r\n getParameterByName: function (name) {\r\n const filter = ([key, value]) => key.toLowerCase() === name.toLowerCase();\r\n const params = new URLSearchParams(location.search);\r\n const paramsArray = Array.from(params);\r\n const result = paramsArray.find(filter);\r\n return result ? result[1] : \"\";\r\n },\r\n\r\n getLocaleUserChoice: function (options) {\r\n var result = 'en-US';\r\n options = options || {};\r\n var cookieName = options.cookieName || 'SITNA.language';\r\n var paramName = options.paramName || 'lang';\r\n // Obtenemos preferencia de lenguaje\r\n var browserLanguage = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language || navigator.userLanguage;\r\n var lang = TC.Util.getParameterByName(paramName) || TC.Util.storage.getCookie(cookieName) || browserLanguage;\r\n var hyphenIdx = lang.indexOf('-');\r\n if (hyphenIdx >= 0) {\r\n lang = lang.substr(0, hyphenIdx);\r\n }\r\n var expirationDate = new Date(new Date().getTime() + 365 * 24 * 60 * 60 * 1000);\r\n TC.Util.storage.setCookie(cookieName, lang, { expires: expirationDate });\r\n\r\n switch (lang) {\r\n case 'eu':\r\n result = 'eu-ES';\r\n break;\r\n case 'es':\r\n result = 'es-ES';\r\n break;\r\n default:\r\n result = 'en-US';\r\n break;\r\n }\r\n return result;\r\n },\r\n\r\n getValidFilename: function (filename) {\r\n return (filename || '').replace(/[/\\\\?%*:|\"<>]/g, '-');\r\n },\r\n\r\n getFormatFromFileExtension: function (extension) {\r\n switch (extension) {\r\n case '.kml':\r\n return Consts.format.KML;\r\n case '.kmz':\r\n return Consts.format.KMZ;\r\n case '.gpx':\r\n return Consts.format.GPX;\r\n case '.json':\r\n case '.geojson':\r\n return Consts.format.GEOJSON;\r\n case '.gml':\r\n return Consts.format.GML;\r\n case '.wkt':\r\n return Consts.format.WKT;\r\n case '.wkb':\r\n return Consts.format.WKB;\r\n case '.topojson':\r\n return Consts.format.TOPOJSON;\r\n case '.gpkg':\r\n return Consts.format.GEOPACKAGE;\r\n case '.shp':\r\n return Consts.format.SHAPEFILE;\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n downloadBlob: function (filename, blob) {\r\n var link = document.createElement(\"a\");\r\n if (link.download !== undefined) {\r\n var url = URL.createObjectURL(blob);\r\n link.setAttribute(\"href\", url);\r\n link.setAttribute(\"download\", TC.Util.getValidFilename(filename));\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n },\r\n\r\n downloadFile: function (filename, type, data) {\r\n var blob = new Blob([data], { type: type });\r\n filename = TC.Util.getValidFilename(filename);\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, filename);\r\n } else {\r\n TC.Util.downloadBlob(filename, blob);\r\n }\r\n },\r\n\r\n downloadDataURI: function (filename, type, dataURI) {\r\n var binary = atob(dataURI.split(',')[1]);\r\n\r\n var array = [];\r\n for (var i = 0; i < binary.length; i++) {\r\n array.push(binary.charCodeAt(i));\r\n }\r\n var blob = new Blob([new Uint8Array(array)], { type: type });\r\n\r\n filename = TC.Util.getValidFilename(filename);\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, filename);\r\n } else {\r\n TC.Util.downloadBlob(filename, blob);\r\n }\r\n },\r\n\r\n /*\r\n * Acorta una URL utilizando el servicio de Bit.ly. No funciona para URLs locales.\r\n */\r\n shortenUrl: function (url) {\r\n return new Promise(function (resolve, reject) {\r\n TC.ajax({\r\n url: \"https://api-ssl.bitly.com/v3/shorten\",\r\n data: { access_token: \"6c466047309f44bd8173d83e81491648b243ee3d\", longUrl: url }\r\n })\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (e) {\r\n reject(e);\r\n });\r\n });\r\n },\r\n\r\n /*\r\n * Convierte a Base64.\r\n */\r\n utf8ToBase64: function (str) {\r\n return window.btoa(unescape(encodeURIComponent(str)));\r\n },\r\n\r\n /*\r\n * Decodifica un string en Base64.\r\n */\r\n base64ToUtf8: function (str) {\r\n var result;\r\n try {\r\n result = decodeURIComponent(escape(window.atob(str)));\r\n }\r\n catch (error) {\r\n result = null;\r\n }\r\n return result;\r\n },\r\n\r\n colorArrayToString: function (color) {\r\n if (Array.isArray(color)) {\r\n color = color\r\n .slice(0, 3)\r\n .reduce(function (prev, cur) {\r\n const str = cur.toString(16);\r\n return prev + '00'.substring(0, 2 - str.length) + str;\r\n }, '#');\r\n }\r\n return color;\r\n },\r\n\r\n // Generic helper function that can be used for the three operations: \r\n operation: function (list1, list2, comparerFn, operationIsUnion) {\r\n var result = [];\r\n\r\n for (var i = 0; i < list1.length; i++) {\r\n var item1 = list1[i],\r\n found = false;\r\n for (var j = 0; j < list2.length; j++) {\r\n if (comparerFn(item1, list2[j])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (found === operationIsUnion) {\r\n result.push(item1);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n // Following functions are to be used:\r\n inBoth: function (list1, list2, comparerFn) {\r\n return this.operation(list1, list2, comparerFn, true);\r\n },\r\n\r\n inFirstOnly: function (list1, list2, comparerFn) {\r\n return this.operation(list1, list2, comparerFn, false);\r\n },\r\n\r\n inSecondOnly: function (list1, list2, comparerFn) {\r\n return this.inFirstOnly(list2, list1, comparerFn);\r\n },\r\n\r\n toDataUrl: function (canvas, backgroundColour) {\r\n var defaultOptions = { type: 'image/png', encoderOptions: 0.92 };\r\n\r\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultOptions,\r\n type = _ref.type,\r\n encoderOptions = _ref.encoderOptions;\r\n\r\n var context = canvas.getContext('2d');\r\n\r\n if (!context) {\r\n return '';\r\n }\r\n\r\n var width = canvas.width;\r\n var height = canvas.height;\r\n\r\n var data = context.getImageData(0, 0, width, height);\r\n var compositeOperation = context.globalCompositeOperation;\r\n\r\n if (backgroundColour) {\r\n\r\n context.globalCompositeOperation = 'destination-over';\r\n context.fillStyle = backgroundColour;\r\n context.fillRect(0, 0, width, height);\r\n }\r\n\r\n var imageData = canvas.toDataURL(type, encoderOptions);\r\n\r\n if (backgroundColour) {\r\n context.clearRect(0, 0, width, height);\r\n context.putImageData(data, 0, 0);\r\n context.globalCompositeOperation = compositeOperation;\r\n }\r\n\r\n return imageData;\r\n },\r\n\r\n imgToDataUrl: function (src, outputFormat) {\r\n\r\n var createCanvas = function (img) {\r\n var canvas = document.createElement('CANVAS');\r\n var ctx = canvas.getContext('2d');\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n\r\n return canvas;\r\n };\r\n\r\n return new Promise(function (resolve, reject) {\r\n if (!outputFormat) {\r\n switch (src.substr(src.lastIndexOf('.') + 1).toLowerCase()) {\r\n case 'svg':\r\n outputFormat = 'image/svg+xml';\r\n break;\r\n case 'png':\r\n outputFormat = 'image/png';\r\n break;\r\n case 'gif':\r\n outputFormat = 'image/gif';\r\n break;\r\n default:\r\n outputFormat = 'image/jpeg';\r\n }\r\n }\r\n\r\n var img = new Image();\r\n img.crossOrigin = 'anonymous';\r\n img.onload = function () {\r\n var canvas = createCanvas(img);\r\n var dataURL;\r\n\r\n try {\r\n dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat,\r\n encoderOptions: 1.0\r\n });\r\n resolve({ dataUrl: dataURL, canvas: canvas });\r\n } catch (error) {\r\n img.src = TC.proxify(src);\r\n }\r\n };\r\n\r\n img.onerror = function (_error) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', TC.proxify(src), true);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function (_e) {\r\n if (this.status === 200) {\r\n var uInt8Array = new Uint8Array(this.response);\r\n var i = uInt8Array.length;\r\n var binaryString = new Array(i);\r\n while (i--) {\r\n binaryString[i] = String.fromCharCode(uInt8Array[i]);\r\n }\r\n var data = binaryString.join('');\r\n var type = xhr.getResponseHeader('content-type');\r\n if (type.indexOf('image') === 0) {\r\n img.src = 'data:' + type + ';base64,' + window.btoa(data);\r\n img.onload = function () {\r\n const canvas = createCanvas(img);\r\n const dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat || 'image/jpeg',\r\n encoderOptions: 1.0\r\n });\r\n resolve({ dataUrl: dataURL, canvas: canvas });\r\n };\r\n }\r\n }\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status !== 200) {\r\n reject(Error('HTTP error ' + xhr.status));\r\n }\r\n }\r\n };\r\n\r\n xhr.send();\r\n };\r\n\r\n img.src = src;\r\n if (img.complete || img.complete === undefined) {\r\n img.src = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\";\r\n img.src = src;\r\n }\r\n });\r\n },\r\n\r\n imgTagToDataUrl: function (img, outputFormat) {\r\n var createCanvas = function (img) {\r\n var canvas = document.createElement('CANVAS');\r\n var ctx = canvas.getContext('2d');\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n\r\n return canvas;\r\n };\r\n\r\n var canvas = createCanvas(img);\r\n var dataURL;\r\n\r\n try {\r\n dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat || 'image/jpeg',\r\n encoderOptions: 1.0\r\n });\r\n return { base64: dataURL, canvas: canvas };\r\n } catch (error) {\r\n return null;\r\n }\r\n },\r\n\r\n addToCanvas: function (canvas, img, position, size) {\r\n var newCanvas = TC.Util.cloneCanvas(canvas);\r\n var context = newCanvas.getContext('2d');\r\n\r\n return new Promise(function (resolve, _reject) {\r\n var newImage = new Image();\r\n newImage.crossOrigin = 'anonymous';\r\n newImage.src = img;\r\n newImage.onload = function () {\r\n if (size) {\r\n context.drawImage(newImage, position.x || 0, position.y || 0, size.width, size.height);\r\n } else {\r\n context.drawImage(newImage, position.x || 0, position.y || 0);\r\n }\r\n resolve(newCanvas);\r\n };\r\n });\r\n },\r\n\r\n cloneCanvas: function (oldCanvas) {\r\n //create a new canvas\r\n var newCanvas = document.createElement('canvas');\r\n var context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = oldCanvas.width;\r\n newCanvas.height = oldCanvas.height;\r\n\r\n //apply the old canvas to the new one\r\n context.drawImage(oldCanvas, 0, 0);\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n },\r\n\r\n mergeCanvases: function (canvases) {\r\n const rects = canvases.map(c => c.parentElement ? c.getBoundingClientRect() : {\r\n top: 0,\r\n left: 0,\r\n bottom: c.height,\r\n right: c.width\r\n });\r\n const bbox = rects.reduce(function (prev, rect) {\r\n return [\r\n Math.min(prev[0], rect.left),\r\n Math.min(prev[1], rect.top),\r\n Math.max(prev[2], rect.right),\r\n Math.max(prev[3], rect.bottom)\r\n ];\r\n }, [\r\n Number.POSITIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY\r\n ]);\r\n const left = bbox[0];\r\n const top = bbox[1];\r\n\r\n //create a new canvas\r\n const newCanvas = document.createElement('canvas');\r\n const context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = bbox[2] - left;\r\n newCanvas.height = bbox[3] - top;\r\n\r\n //apply the old canvases to the new one\r\n canvases.forEach(function (canvas, idx) {\r\n const rect = rects[idx];\r\n context.drawImage(canvas, rect.left - left, rect.top - top, rect.right - rect.left, rect.bottom - rect.top);\r\n });\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n },\r\n\r\n calculateAspectRatioFit: function (srcWidth, srcHeight, maxWidth, maxHeight) {\r\n var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);\r\n\r\n return { width: srcWidth * ratio, height: srcHeight * ratio };\r\n },\r\n\r\n getFormattedDate: function (date, hasTime) {\r\n function pad(s) { return s < 10 ? '0' + s : s; }\r\n\r\n var d = new Date(date);\r\n return [d.getFullYear(), pad(d.getMonth() + 1), pad(d.getDate())].concat(hasTime ? [\"_\", pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())] : []).join('');\r\n\r\n },\r\n\r\n replaceSpecialCharacters: function (t) {\r\n var translate = new Map([\r\n [\"ä\", \"a\"], [\"ö\", \"o\"], [\"ü\", \"u\"],\r\n [\"Ä\", \"A\"], [\"Ö\", \"O\"], [\"Ü\", \"U\"],\r\n [\"á\", \"a\"], [\"é\", \"e\"], [\"i\", \"i\"], [\"ó\", \"o\"], [\"ú\", \"u\"],\r\n [\"Á\", \"A\"], [\"É\", \"E\"], [\"Í\", \"I\"], [\"Ó\", \"O\"], [\"Ú\", \"U\"],\r\n [\"ñ\", \"n\"], [\"Ñ\", \"N\"]\r\n ]);\r\n return t.replace(/[öäüÖÄÜáéíóúÁÉÍÓÚñÑ]/g, function (match) {\r\n return translate.get(match);\r\n });\r\n },\r\n\r\n downloadFileForm: async function (url, data) {\r\n var download = async function (url, data) {\r\n\r\n var response = await new Promise(function (resolve, reject) {\r\n const request = new XMLHttpRequest();\r\n request.responseType = \"blob\";\r\n request.open(\"POST\", url);\r\n request.setRequestHeader('Content-Type', 'application/xml; charset=UTF-8');\r\n\r\n request.onreadystatechange = function (_e) {\r\n if (request.readyState === 4) { // DONE\r\n if (request.status !== 200) {\r\n reject({\r\n status: request.status,\r\n msg: request.statusText,\r\n url: url\r\n });\r\n } else {\r\n\r\n try {\r\n //URI: Miro si devuelve una cabecera content-disposition attachment. Si es asi uso el filenae como nombre de fichero. Esta descarga seguramente venga\r\n //de un proxy con postproceso de zippeado\r\n const contentDispositionHeader = request.getResponseHeader(\"Content-disposition\");\r\n var filename = \"\";\r\n if (contentDispositionHeader) {\r\n filename = contentDispositionHeader.split(\"; \")[1].substring(9);\r\n if (contentDispositionHeader.split(\"; \")[0] !== \"attachment\") {\r\n filename = filename.substring(0, filename.lastIndexOf(\".\"));\r\n }\r\n }\r\n const contentType = request.getResponseHeader(\"Content-type\");\r\n resolve({ data: request.response, contentType: contentType || (request.responseType === \"blob\" ? \"application/zip\" : \"\"), filename: filename });\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n }\r\n };\r\n\r\n try {\r\n request.send(data);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n var format = \"\";\r\n if (response.data.type.indexOf(\"kml\") >= 0)\r\n format = \".kml\";\r\n else if (response.data.type.indexOf(\"json\") >= 0)\r\n format = \".geojson\";\r\n else if (response.data.type.indexOf(\"xml\") >= 0) {\r\n format = \".gml\";\r\n if (/outputFormat=\"\\S{1,}\"/.exec(data)[0].includes(\".kml\") || /outputFormat=\"\\S{1,}\"/.exec(data)[0].includes(\"shape-zip\")) {\r\n throw { key: Consts.DownloadError.MIMETYPE_NOT_SUPORTED, url: url, data: data, format: /outputFormat=\"\\S{1,}\"/.exec(data)[0] };\r\n }\r\n }\r\n TC.Util.downloadFile((response.filename ? response.filename : TC.getUID()) + format, response.contentType, response.data);\r\n\r\n };\r\n var _err;\r\n if (Array.isArray(url)) {\r\n var arrDownloads = url;\r\n for (var i = 0; i < arrDownloads.length; i++) {\r\n try {\r\n await download(arrDownloads[i].url, arrDownloads[i].data);\r\n }\r\n catch (err) {\r\n _err = err;\r\n }\r\n }\r\n if (_err) {\r\n throw _err;\r\n }\r\n }\r\n else {\r\n await download(url, data);\r\n }\r\n },\r\n WFSQueryBuilder: function (layers, filter, capabilities, outputFormat, onlyHits, srsName, maxFeatures, fields) {\r\n const getSRSAttribute = function () {\r\n if (srsName) {\r\n return ' srsName=\"' + srsName + '\"';\r\n }\r\n else\r\n return '';\r\n };\r\n const getFields = function () {\r\n if (!fields) return '';\r\n var tagName = '';\r\n switch (capabilities.version) {\r\n case \"1.0.0\":\r\n tagName = \"ogc:PropertyName\";\r\n break;\r\n case \"1.1.0\":\r\n tagName = \"wfs:PropertyName\";\r\n break;\r\n case \"2.0.0\":\r\n tagName = \"wfs:PropertyName\";\r\n default:\r\n\r\n break;\r\n }\r\n return (fields instanceof Array ? fields : [fields]).reduce(function (vi, va) {\r\n return vi + '<' + tagName + '>' + va + '';\r\n }, '');\r\n\r\n };\r\n if (!Array.isArray(layers) && !(layers instanceof Object))\r\n layers = [layers];\r\n\r\n let query = '';\r\n let queryBody = '';\r\n let queryItem;\r\n if (Array.isArray(layers)) {\r\n queryItem = '{fields}{filter}';\r\n layers.forEach(function (value) {\r\n queryBody += queryItem.format({\r\n typeName: value,\r\n filter: filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\",\r\n fields: getFields()\r\n });\r\n });\r\n }\r\n else {\r\n queryItem = '';\r\n for (var layer in layers) {\r\n queryItem = '{fields}{filter}';\r\n let filter = layers[layer];\r\n queryBody += queryItem.format({\r\n typeName: layer,\r\n filter: filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\",\r\n fields: getFields()\r\n });\r\n }\r\n }\r\n\r\n query += queryBody + '';\r\n return query;\r\n },\r\n\r\n WFGetPropertyValue: function (layer, valueReference, filter, capabilities) {\r\n /*if (capabilities.version === \"2.0.0\") {\r\n var query = '';\r\n var queryBody = '';\r\n var queryItem = ('{filter}');\r\n queryBody += queryItem.format({ typeName: layer, filter: (filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\") });\r\n query += queryBody + ''\r\n return query;\r\n }\r\n else*/\r\n return TC.Util.WFSQueryBuilder([layer], filter, capabilities, \"JSON\", false, null, null, valueReference);\r\n\r\n\r\n },\r\n\r\n WFSFilterBuilder: function (feature, version, srsName) {\r\n var filter = '';\r\n if (Util.isPlainObject(feature)) {\r\n filter = '<{prefix}:Filter><{prefix}:Intersects><{prefix}:Function name=\"querySingle\"><{prefix}:Literal>{clipLayer}<{prefix}:Literal>{geometryName}<{prefix}:Literal>{where}'\r\n .format({\r\n prefix: version === \"2.0.0\" ? \"fes\" : \"ogc\",\r\n clipLayer: feature.clipLayer,\r\n geometryName: feature.geometryName,\r\n where: feature.where\r\n });\r\n }\r\n else {\r\n switch (true) {\r\n case !feature:\r\n break;\r\n case Array.isArray(feature)://bbox\r\n var gmlEnvelope = ('' +\r\n '{lowerCorner}' +\r\n '{upperCorner}' +\r\n '').format({\r\n lowerCorner: feature[0] + ' ' + feature[1],\r\n upperCorner: feature[2] + ' ' + feature[3]\r\n });\r\n switch (true) {\r\n case version === \"1.0.0\":\r\n case version === \"1.1.0\":\r\n filter += '' + gmlEnvelope + '';\r\n break;\r\n case version === \"2.0.0\":\r\n filter += '' + gmlEnvelope + '';\r\n break;\r\n }\r\n break;\r\n case feature instanceof TC.Feature:\r\n switch (true) {\r\n case version === \"1.0.0\":\r\n case version === \"1.1.0\":\r\n filter += '' + TC.Util.writeGMLGeometry(feature, { version: \"2.0\", srsName: srsName }) + '';\r\n break;\r\n case version === \"2.0.0\":\r\n filter += '' + TC.Util.writeGMLGeometry(feature, { version: \"3.2\", srsName: srsName }) + '';\r\n break;\r\n }\r\n\r\n break;\r\n default:\r\n TC.error(\"Geometr\\u00eda no v\\u00e1lida\");\r\n break;\r\n }\r\n }\r\n\r\n return filter;\r\n },\r\n\r\n writeGMLGeometry: function (feature, options) {\r\n options = options || {};\r\n const gmlVersion = options.version;\r\n const getSRSName = function () {\r\n if (options.srsName) {\r\n return ' srsName=\"' + options.srsName + '\"';\r\n }\r\n else\r\n return '';\r\n };\r\n var getGmlCoordinates = function (coords) {\r\n var result;\r\n if (gmlVersion.indexOf('3') === 0) {\r\n result = coords.toString();\r\n while (result.indexOf(\",\") >= 0) {\r\n result = result.replace(\",\", \" \");\r\n }\r\n }\r\n else {\r\n result = coords.map(function (coord) {\r\n return coord.join(',');\r\n }).join(' ');\r\n }\r\n return result;\r\n };\r\n\r\n switch (gmlVersion) {\r\n case \"3.1.1\":\r\n break;\r\n case \"3.2\":\r\n switch (true) {\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry) +\r\n \"\";\r\n default:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n }\r\n break;\r\n case \"2.0\":\r\n default:\r\n switch (true) {\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n default:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n }\r\n break;\r\n }\r\n },\r\n\r\n isServiceWorker: function () {\r\n if (navigator.serviceWorker) {\r\n if (navigator.serviceWorker.controller && navigator.serviceWorker.controller.state === \"activated\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n isSameOriginByLocation: function (uri, location) {\r\n var result = uri.indexOf(\"http\") !== 0 && uri.indexOf(\"//\") !== 0;\r\n var urlParts = !result && uri.match(Consts.url.SPLIT_REGEX);\r\n if (urlParts) {\r\n var uProtocol = urlParts[1];\r\n result = (uProtocol == location.protocol || uProtocol == undefined) && urlParts[3] == location.hostname;\r\n var uPort = urlParts[4], lPort = location.port;\r\n if (uPort != 80 && uPort !== \"\" || lPort != \"80\" && lPort !== \"\") {\r\n result = result && uPort == lPort;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n isSameProtocol: function (uri, location) {\r\n if (uri.match(/^(\\/\\/)/i)) {\r\n return true;\r\n }\r\n var protocolRegex = /^(https?:\\/\\/)/i;\r\n var uriProtocol = uri.match(protocolRegex);\r\n if (uriProtocol && uriProtocol.length > 1) {\r\n var locationProtocol = location.match(protocolRegex);\r\n if (locationProtocol && locationProtocol.length > 1) {\r\n return uriProtocol[0].trim() === locationProtocol[0].trim();\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n consoleRegister: function (msg) {\r\n if (TC.isDebug) {\r\n console.log(msg);\r\n }\r\n },\r\n\r\n getSorterByProperty: function (propName) {\r\n return function (a, b) {\r\n if (a[propName] > b[propName]) {\r\n return 1;\r\n }\r\n if (a[propName] < b[propName]) {\r\n return -1;\r\n }\r\n return 0;\r\n };\r\n },\r\n\r\n getSoundexDifference: function (a, b) {\r\n var res = 0;\r\n\r\n for (var i = 0; i < a.length; i++) {\r\n if (a.charAt(i) === b.charAt(i)) {\r\n res++;\r\n }\r\n }\r\n\r\n return res;\r\n },\r\n\r\n toAbsolutePath: function (href) {\r\n var link = document.createElement(\"a\");\r\n link.href = href;\r\n return link.href;\r\n },\r\n\r\n explodeGeometry: function (obj) {\r\n const origin = obj.origin;\r\n const iterationFunction = function (elm, idx, arr) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(iterationFunction);\r\n }\r\n else {\r\n if (idx === 0) {\r\n arr[0] = elm + origin[0];\r\n }\r\n if (idx === 1) {\r\n arr[1] = elm + origin[1];\r\n }\r\n }\r\n };\r\n obj.geom.forEach(iterationFunction);\r\n return obj.geom;\r\n },\r\n\r\n cloneMappingFunction: function (elm) {\r\n if (Array.isArray(elm)) {\r\n return elm.map(TC.Util.cloneMappingFunction);\r\n }\r\n return elm;\r\n },\r\n\r\n isGeometry: function (type) {\r\n switch (type) {\r\n case 'gml:LinearRingPropertyType':\r\n case 'gml:PolygonPropertyType':\r\n case 'gml:MultiPolygonPropertyType':\r\n case 'gml:MultiSurfacePropertyType':\r\n case 'gml:LineStringPropertyType':\r\n case 'gml:MultiLineStringPropertyType':\r\n case 'gml:PointPropertyType':\r\n case 'gml:MultiPointPropertyType':\r\n case 'gml:BoxPropertyType':\r\n case 'gml:GeometryCollectionPropertyType':\r\n case 'gml:GeometryAssociationType':\r\n case 'gml:GeometryPropertyType':\r\n case 'gml:MultiCurvePropertyType':\r\n case 'gml:CurvePropertyType':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n compactGeometry: function (geometry, precision) {\r\n const origin = [Number.MAX_VALUE, Number.MAX_VALUE];\r\n const newGeom = geometry.map(TC.Util.cloneMappingFunction);\r\n const firstIterationFunction = function (elm, idx) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(firstIterationFunction);\r\n }\r\n else {\r\n if (idx === 0 && elm < origin[0]) {\r\n origin[0] = elm;\r\n }\r\n else if (idx === 1 && elm < origin[1]) {\r\n origin[1] = elm;\r\n }\r\n }\r\n };\r\n newGeom.forEach(firstIterationFunction);\r\n\r\n const round = function (val) {\r\n return Math.round(val * precision) / precision;\r\n };\r\n origin[0] = round(origin[0]);\r\n origin[1] = round(origin[1]);\r\n const secondIterationFunction = function (elm, idx, arr) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(secondIterationFunction);\r\n }\r\n else {\r\n if (idx === 0) {\r\n arr[0] = round(elm - origin[0]);\r\n }\r\n if (idx === 1) {\r\n arr[1] = round(elm - origin[1]);\r\n }\r\n }\r\n };\r\n newGeom.forEach(secondIterationFunction);\r\n return {\r\n origin: origin,\r\n geom: newGeom\r\n };\r\n },\r\n\r\n isStyleOption: function (name) {\r\n return stylePropertyNames.has(name);\r\n },\r\n\r\n hasStyleOptions: function (options) {\r\n for (let value of stylePropertyNames.values()) {\r\n if (Object.prototype.hasOwnProperty.call(options, value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n mergeStyles() {\r\n const styles = Array.from(arguments);\r\n if (styles.some(s => Util.isFunction(s))) {\r\n return function (f) {\r\n return Object.assign({}, ...styles.map(s => Util.isFunction(s) ? s(f) : s));\r\n };\r\n }\r\n return Object.assign({}, ...styles);\r\n },\r\n\r\n formatCoord: function (x, nDecimales) {\r\n return x.toLocaleString(TC.Util.getLocaleUserChoice(), { maximumFractionDigits: nDecimales });\r\n\r\n // No respeta el formato de los números según el idioma\r\n //var result; \r\n //result = x.toFixed(nDecimales);\r\n //if (nDecimales <= 3) {\r\n // result = result.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"|\");\r\n //}\r\n\r\n //result = result.replace(\".\", \",\").replace(/\\|/g, \".\");\r\n //return result;\r\n },\r\n\r\n formatString: function (str, ...values) {\r\n const args = values.length ? values : [\"\"];\r\n return str.replace(/{(\\d+)}/g, function (match, number) {\r\n return typeof args[number] !== 'undefined' ?\r\n args[number]\r\n : match\r\n ;\r\n });\r\n },\r\n\r\n getWebWorkerCrossOriginURL: function (url) {\r\n return new Promise(function (resolve, reject) {\r\n if (Object.prototype.hasOwnProperty.call(window, 'Worker')) {\r\n // Para evitar problemas con IE10 y Opera evitamos el uso de blobs cuando es evitable\r\n if (TC.Util.isSameOrigin(url)) {\r\n resolve(url);\r\n }\r\n else {\r\n TC.ajax({\r\n url: url,\r\n method: 'GET',\r\n responseType: 'text'\r\n }).then(\r\n function (response) {\r\n const data = response.data;\r\n var blob = new Blob([data], { type: \"text/javascript\" });\r\n var url = window.URL.createObjectURL(blob);\r\n resolve(url);\r\n },\r\n function (e) {\r\n reject(Error(e));\r\n }\r\n );\r\n }\r\n }\r\n else {\r\n reject(new Error('No support for service workers'));\r\n }\r\n });\r\n },\r\n\r\n createSemaphore: function (maxConcurrentTasks = 1) {\r\n let count = 0;\r\n let queue = [];\r\n return {\r\n acquire: function () {\r\n if (count < maxConcurrentTasks) {\r\n count++\r\n return Promise.resolve();\r\n } else {\r\n return new Promise((resolve, reject) => {\r\n queue.push({ resolve: resolve, reject: reject });\r\n });\r\n }\r\n },\r\n release: function () {\r\n count--;\r\n if (queue.length > 0 && count < maxConcurrentTasks) {\r\n count++;\r\n let promise = queue.shift();\r\n promise.resolve();\r\n }\r\n },\r\n purge: function () {\r\n let unresolvedCount = queue.length;\r\n\r\n for (let i = 0; i < unresolvedCount; i++) {\r\n queue[i].reject('Task has been purged.');\r\n }\r\n\r\n count = 0;\r\n queue = [];\r\n\r\n return unresolvedCount;\r\n }\r\n };\r\n },\r\n patternFn : function (t) {\r\n t = t.replace(/[^a-z\\dáéíóúüñ]/gi, '\\\\' + '$&');\r\n t = t.replace(/(a|á)/gi, \"(a|á)\");\r\n t = t.replace(/(e|é)/gi, \"(e|é)\");\r\n t = t.replace(/(i|í)/gi, \"(i|í)\");\r\n t = t.replace(/(o|ó)/gi, \"(o|ó)\");\r\n t = t.replace(/(u|ú|ü)/gi, \"(u|ú|ü)\");\r\n t = t.replace(/n/gi, \"(n|ñ)\");\r\n return t;\r\n }\r\n};\r\n\r\nString.prototype.format = function () {\r\n var str = this.toString();\r\n if (!arguments.length)\r\n return str;\r\n var args = typeof arguments[0];\r\n args = \"string\" === args || \"number\" === args ? arguments : arguments[0];\r\n for (var arg in args) {\r\n str = str.replace(RegExp(\"\\\\{\" + arg + \"\\\\}\", \"gi\"), args[arg]);\r\n }\r\n return str;\r\n};\r\nconst _queryHeaderConstructor = function (capabilities) {\r\n var queryHeader = 'xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd\" ' +\r\n ' service=\"WFS\" {resultType} {format} ';\r\n switch (capabilities.version) {\r\n case \"1.0.0\":\r\n case \"1.1.0\":\r\n queryHeader += 'xmlns:gml=\"http://www.opengis.net/gml\" xmlns:wfs=\"http://www.opengis.net/wfs\" ';\r\n break;\r\n case \"2.0.0\":\r\n queryHeader += 'xmlns:wfs=\"http://www.opengis.net/wfs/2.0\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" ';\r\n break;\r\n }\r\n for (var i in capabilities) {\r\n if (typeof capabilities[i] === \"string\" && i.indexOf(\"gml\") < 0 && capabilities[i].indexOf(\"wfs\") < 0)\r\n queryHeader += i + '=\"' + capabilities[i] + '\" ';\r\n }\r\n return queryHeader;\r\n};\r\n\r\nvar fncOvelaps = function (elem1, elem2, comparisonFnc) {\r\n return comparisonFnc(elem1.getBoundingClientRect(), elem2.getBoundingClientRect());\r\n};\r\nif (window.HTMLElement) {\r\n HTMLElement.prototype.colliding = function (other) {\r\n return fncOvelaps(this, other, function (rect1, rect2) {\r\n return !(\r\n rect1.top > rect2.bottom ||\r\n rect1.right < rect2.left ||\r\n rect1.bottom < rect2.top ||\r\n rect1.left > rect2.right\r\n );\r\n });\r\n };\r\n HTMLElement.prototype.containing = function (other) {\r\n fncOvelaps(this, other, function (rect1, rect2) {\r\n return !(\r\n rect1.left <= rect2.left &&\r\n rect2.left < rect1.width &&\r\n rect1.top <= rect2.top &&\r\n rect2.top < rect1.height\r\n );\r\n });\r\n };\r\n HTMLElement.prototype.inside = function (other) {\r\n return fncOvelaps(this, other, function (rect1, rect2) {\r\n return (rect2.top <= rect1.top && rect1.top <= rect2.bottom) &&\r\n (rect2.top <= rect1.bottom && rect1.bottom <= rect2.bottom) &&\r\n (rect2.left <= rect1.left && rect1.left <= rect2.right) &&\r\n (rect2.left <= rect1.right && rect1.right <= rect2.right);\r\n });\r\n };\r\n}\r\n\r\nexport default Util;\r\n","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Layer from '../../SITNA/layer/Layer';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nclass Attribution extends Control {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.apiAttribution = '';\r\n self.mainDataAttribution = null;\r\n self.dataAttributions = [];\r\n if (self.options.dataAttributions) {\r\n self.dataAttributions = self.options.dataAttributions instanceof Array ? self.options.dataAttributions : [self.options.dataAttributions];\r\n }\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-attrib';\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n self.apiAttribution = self.map.options.attribution || self.apiAttribution;\r\n\r\n var addData = function (obj) {\r\n if (obj) {\r\n // TODO: sanitizer\r\n var attr = obj.getAttribution();\r\n if (attr) {\r\n if (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) {\r\n self.mainDataAttribution = {\r\n name: 'IDENA',\r\n site: 'https://idena.navarra.es/'\r\n };\r\n }\r\n else {\r\n var textExists = false;\r\n for (var i = 0; i < self.dataAttributions.length; i++) {\r\n if (attr.name === self.dataAttributions[i].name) {\r\n textExists = true;\r\n break;\r\n }\r\n }\r\n if (!textExists) {\r\n self.dataAttributions.push(attr);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n var removeData = function (obj) {\r\n if (obj) {\r\n\r\n var checkRemoveData = function () {\r\n if (obj.map.workLayers.length > 0) {\r\n const wlArr = obj.map.workLayers\r\n .slice()\r\n .reverse();\r\n for (var i = 0; i < wlArr.length; i++) {\r\n const wl = wlArr[i];\r\n if (wl.url == obj.url && wl.getVisibility()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n if (obj instanceof Layer ? checkRemoveData() : true) {\r\n // TODO: sanitizer\r\n var attr = obj.getAttribution();\r\n\r\n if (attr) {\r\n var index = self.dataAttributions.reduce(function (prev, cur, idx) {\r\n if (cur.name === attr.name) {\r\n return idx;\r\n }\r\n return prev;\r\n }, -1);\r\n\r\n const checkIsSameAttribution = function (toCheckName) {\r\n return (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) &&\r\n (/IDENA/.test(toCheckName) || /Tracasa Instrumental/.test(toCheckName)) ||\r\n attr.name === toCheckName;\r\n };\r\n\r\n // 07/10/2020 Validamos contra el mapa de fondo antes de cambiar de mapa de fondo así que no se borran cuando deberían.\r\n // Validamos que la capa a borrar no sea la de fondo actual\r\n // Validamos si las atribuciones a borrar son también del mapa base\r\n if (self.map.baseLayer && self.map.baseLayer.wrap.getAttribution() && checkIsSameAttribution(self.map.baseLayer.wrap.getAttribution().name) &&\r\n obj.parent.id !== self.map.baseLayer.id) {\r\n return;\r\n } else {\r\n // Validamos si las atribuciones a borrar son también de alguna de las capas raster cargadas\r\n if (self.map.workLayers.filter(function (layer) {\r\n return layer.type === Consts.layerType.WMS || layer.type === Consts.layerType.WMTS;\r\n }).some(function (layer) {\r\n var workLayerAttribution = layer.wrap.getAttribution();\r\n return workLayerAttribution && checkIsSameAttribution(workLayerAttribution.name);\r\n })) {\r\n return;\r\n }\r\n }\r\n\r\n if (index > -1) {\r\n self.dataAttributions.splice(index, 1);\r\n } else if (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) {\r\n self.mainDataAttribution = null;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n //URI: Si las atribuciones están vacias evito hace una llamada al renderizado del control ya que lo obtendría sin datos.\r\n //self.render();\r\n\r\n map.loaded(function () {\r\n if (map.baseLayer.wrap.getAttribution) {\r\n addData(map.baseLayer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(Consts.event.LAYERADD, function (e) {\r\n const layer = e.layer;\r\n if (!layer.isBase && layer.wrap.getAttribution && layer.wrap.getAttribution()) {\r\n addData(layer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(Consts.event.BEFOREBASELAYERCHANGE + \" \" + Consts.event.OVERVIEWBASELAYERCHANGE, function (e) {\r\n const type = e.type;\r\n const newLayer = e.newLayer;\r\n const oldLayer = e.oldLayer;\r\n if (Consts.event.OVERVIEWBASELAYERCHANGE.indexOf(type) > -1) {\r\n self.ignoreLayer = newLayer;\r\n }\r\n\r\n if (oldLayer && oldLayer.wrap.getAttribution) {\r\n removeData(oldLayer.wrap);\r\n }\r\n\r\n if (newLayer && newLayer.wrap.getAttribution) {\r\n addData(newLayer.wrap);\r\n }\r\n\r\n self.render();\r\n });\r\n\r\n map.on(Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n if (layer.wrap.getAttribution) {\r\n removeData(layer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(Consts.event.TERRAINPROVIDERADD, function (e) {\r\n const terrainProvider = e.terrainProvider;\r\n if (terrainProvider.getAttribution) {\r\n addData(terrainProvider);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(Consts.event.TERRAINPROVIDERREMOVE, function (e) {\r\n const terrainProvider = e.terrainProvider;\r\n if (terrainProvider.getAttribution) {\r\n removeData(terrainProvider);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(Consts.event.LAYERVISIBILITY, function (e) {\r\n const layer = e.layer;\r\n if (self.ignoreLayer === layer) {\r\n return;\r\n }\r\n\r\n if (layer.wrap.getAttribution) {\r\n if (layer.getVisibility()) {\r\n addData(layer.wrap);\r\n } else {\r\n removeData(layer.wrap);\r\n }\r\n self.render();\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-attrib.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(self.renderData({\r\n api: typeof self.apiAttribution === 'function' ? self.apiAttribution.apply(self) : self.getLocaleString(self.apiAttribution),\r\n mainData: self.mainDataAttribution,\r\n otherData: self.dataAttributions,\r\n isCollapsed: self.div.querySelector('.' + self.CLASS + '-other') ? self.div.querySelector('.' + self.CLASS + '-other').classList.contains(Consts.classes.COLLAPSED) : true,\r\n lang: self.map?.options.locale\r\n }, function () {\r\n const cmd = self.div.querySelector('.' + self.CLASS + '-cmd');\r\n cmd && cmd.addEventListener(Consts.event.CLICK, function () {\r\n self.toggleOtherAttributions();\r\n }, { passive: true });\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n toggleOtherAttributions() {\r\n const self = this;\r\n const other = self.div.querySelector('.' + self.CLASS + '-other');\r\n other.classList.toggle(Consts.classes.COLLAPSED);\r\n }\r\n}\r\n\r\nTC.control.Attribution = Attribution;\r\nexport default Attribution;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from './MapContents';\r\nimport Raster from '../../SITNA/layer/Raster';\r\nimport Vector from '../../SITNA/layer/Vector';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst BasemapSelector = function () {\r\n var self = this;\r\n //options = options || {};\r\n\r\n MapContents.apply(self, arguments);\r\n\r\n self.layerInfos = {};\r\n\r\n self._cssClasses = {\r\n LOAD_CRS_BUTTON: self.CLASS + '-crs-btn-load',\r\n CRS_DIALOG: self.CLASS + '-crs-dialog',\r\n CRS_LIST: self.CLASS + '-crs-list',\r\n VIEW_BTN: self.CLASS + '-btn-view',\r\n CURRENT_CRS_NAME: self.CLASS + '-cur-crs-name',\r\n CURRENT_CRS_CODE: self.CLASS + '-cur-crs-code',\r\n TREE: self.CLASS + '-tree',\r\n DETAILS: 'tc-details',\r\n GRID: 'tc-grid'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self._dialogDiv.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('button:not(.tc-modal-close)', function (e) {\r\n\r\n if (e.target.classList.contains(self._cssClasses.LOAD_CRS_BUTTON)) {\r\n self.loadFallbackProjections();\r\n return;\r\n }\r\n\r\n TC.Util.closeModal();\r\n const btn = e.target;\r\n const crs = btn.dataset.crsCode;\r\n\r\n // dependerá del que esté activo\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-crs-dialog');\r\n dialog.classList.add(Consts.classes.HIDDEN);\r\n\r\n const layer = self.getLayer(dialog.dataset.layerId);\r\n if (layer) {\r\n if (crs) {\r\n TC.loadProjDef({\r\n crs: crs,\r\n callback: function () {\r\n self.map.setProjection({\r\n crs: crs,\r\n baseLayer: layer\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n const fallbackLayer = self.getFallbackLayer(btn.dataset.fallbackLayerId);\r\n if (fallbackLayer) {\r\n self.map.setBaseLayer(fallbackLayer);\r\n }\r\n }\r\n }\r\n }), { passive: true });\r\n};\r\n\r\nTC.inherit(BasemapSelector, MapContents);\r\n\r\n(function () {\r\n\r\n var ctlProto = BasemapSelector.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-bms';\r\n\r\n const getClosestParent = function (elm, selector) {\r\n while (elm && !elm.matches(selector)) {\r\n elm = elm.parentElement;\r\n }\r\n return elm;\r\n };\r\n\r\n const changeInputRadioBaseMap = function (e, callback) {\r\n const self = this;\r\n var flagToCallback = true;\r\n\r\n var radio = e.target;\r\n\r\n var layer = self.getLayer(getClosestParent(radio, 'li').dataset.layerId);\r\n\r\n if (self.options.dialogMore && getClosestParent(radio, '.' + self.CLASS + '-more-dialog')) {\r\n const radios = self.div.querySelectorAll('input[type=radio]');\r\n for (var i = 0, len = radios.length; i < len; i++) {\r\n const bmsLayer = self.getLayer(getClosestParent(radios[i], 'li').dataset.layerId);\r\n if (bmsLayer) {\r\n switch (true) {\r\n case bmsLayer.id === layer.id:\r\n layer = bmsLayer;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (layer != self.map.getBaseLayer()) {\r\n if (layer.mustReproject) {\r\n\r\n if (self.map.on3DView) {\r\n if (!layer.getFallbackLayer()) {\r\n self._currentSelection.checked = true;\r\n e.stopPropagation();\r\n return;\r\n } else if (layer.getFallbackLayer()) {\r\n const fallbackLayer = layer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n fallbackLayer.getCapabilitiesPromise().then(function () {\r\n if (fallbackLayer.isCompatible(self.map.getCRS())) {\r\n self.map.setBaseLayer(layer);\r\n }\r\n });\r\n }\r\n\r\n flagToCallback = true;\r\n }\r\n } else {\r\n // provisonal\r\n if (self._currentSelection) {\r\n self._currentSelection.checked = true;\r\n }\r\n\r\n // Buscamos alternativa\r\n const dialogOptions = {\r\n layer: layer\r\n };\r\n const fallbackLayer = layer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n fallbackLayer.getCapabilitiesPromise().then(function () {\r\n if (fallbackLayer.isCompatible(self.map.getCRS())) {\r\n dialogOptions.fallbackLayer = fallbackLayer;\r\n }\r\n self.showProjectionChangeDialog(dialogOptions);\r\n });\r\n }\r\n else {\r\n self.showProjectionChangeDialog(dialogOptions);\r\n }\r\n //layer.getCompatibleCRS({ normalized: true });\r\n flagToCallback = false;\r\n }\r\n\r\n }\r\n else {\r\n\r\n if (layer.type === Consts.layerType.WMS || layer.type === Consts.layerType.WMTS && layer.getProjection() !== self.map.crs) {\r\n layer.setProjection({ crs: self.map.crs });\r\n }\r\n\r\n self.map.setBaseLayer(layer);\r\n }\r\n }\r\n\r\n if (this._currentSelection) {\r\n this._currentSelection.checked = true;\r\n }\r\n\r\n\r\n if (callback) {\r\n callback(flagToCallback);\r\n }\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n const ctl = await MapContents.prototype.register.call(self, map);\r\n self.div.querySelector(`.${self._cssClasses.VIEW_BTN}`).addEventListener(Consts.event.CLICK, function (e) {\r\n self.toggleView();\r\n e.target.blur();\r\n }, { passive: true });\r\n\r\n if (self.options.dialogMore) {\r\n map.on(Consts.event.VIEWCHANGE, function () {\r\n self._getMoreBaseLayers();\r\n });\r\n }\r\n\r\n map.on(Consts.event.BASELAYERCHANGE + ' ' + Consts.event.PROJECTIONCHANGE + ' ' + Consts.event.VIEWCHANGE, function (e) {\r\n self.update(self.div, e.layer);\r\n });\r\n\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=radio]', function (e) {\r\n\r\n if (e.target.value === \"moreLayers\") {\r\n self.showMoreLayersDialog();\r\n } else {\r\n changeInputRadioBaseMap.call(self, e);\r\n }\r\n\r\n e.stopPropagation();\r\n }));\r\n\r\n return ctl;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-bms.mjs');\r\n const nodeTemplatePromise = import('../templates/tc-ctl-bms-node.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-bms-dialog.mjs');\r\n\r\n const template = {};\r\n template[ctlProto.CLASS] = (await mainTemplatePromise).default;\r\n template[ctlProto.CLASS + '-node'] = (await nodeTemplatePromise).default;\r\n template[ctlProto.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const result = MapContents.prototype.render.call(self, callback, TC.Util.extend({}, self.options, { controlId: self.id }));\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n\r\n if (self.options.dialogMore) {\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-more-dialog');\r\n\r\n dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`).addEventListener(Consts.event.CLICK, function (e) {\r\n self.toggleMoreLayersDialogView();\r\n e.target.blur();\r\n e.stopPropagation();\r\n }, { passive: true });\r\n\r\n dialog.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=radio]', function (e) {\r\n changeInputRadioBaseMap.call(self, e, function (close) {\r\n if (close) {\r\n TC.Util.closeModal();\r\n }\r\n });\r\n\r\n e.stopPropagation();\r\n }));\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.update = async function (div, baseLayer) {\r\n const self = this;\r\n\r\n div = div || self.div;\r\n\r\n await (self._moreBaseLayersPromise || self._getMoreBaseLayers());\r\n Array.from(div.querySelectorAll(`ul.${self.CLASS}-branch li`)).forEach(function (li, _idx, arr) {\r\n const layer = self.getLayer(li.dataset.layerId);\r\n if (layer) {\r\n const curBaseLayer = baseLayer || self.map.baseLayer;\r\n const radio = li.querySelector('input[type=radio]');\r\n const fbLayer = layer.getFallbackLayer && layer.getFallbackLayer();\r\n let checked = curBaseLayer && (curBaseLayer === layer || curBaseLayer.id === layer.id);\r\n if (!checked) {\r\n const otherLayerIsFallback = fbLayer && arr\r\n .filter(elm => elm !== li)\r\n .some(elm => elm.dataset.layerId === fbLayer.id);\r\n checked = !otherLayerIsFallback && curBaseLayer && (curBaseLayer === fbLayer || fbLayer && curBaseLayer.id === fbLayer.id);\r\n }\r\n\r\n if (self.map.on3DView && layer.mustReproject && fbLayer) {\r\n fbLayer.getCapabilitiesPromise().then(function () {\r\n var mustReproject = !layer.getFallbackLayer().isCompatible(self.map.getCRS());\r\n\r\n radio.checked = checked;\r\n if (mustReproject) {\r\n radio.classList.add(Consts.classes.DISABLED);\r\n li.setAttribute('title', self.map.on3DView ? self.getLocaleString('notAvailableTo3D') : self.getLocaleString('reprojectionNeeded'));\r\n }\r\n else {\r\n radio.classList.remove(Consts.classes.DISABLED);\r\n li.removeAttribute('title');\r\n }\r\n });\r\n } else {\r\n radio.checked = checked;\r\n if (layer.mustReproject) {\r\n radio.classList.add(Consts.classes.DISABLED);\r\n li.setAttribute('title', self.map.on3DView ? self.getLocaleString('notAvailableTo3D') : self.getLocaleString('reprojectionNeeded'));\r\n }\r\n else {\r\n radio.classList.remove(Consts.classes.DISABLED);\r\n li.removeAttribute('title');\r\n }\r\n }\r\n\r\n if (checked) {\r\n self._currentSelection = radio;\r\n }\r\n }\r\n });\r\n\r\n self.updateScale();\r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n const self = this; \r\n // Actuamos cuando la capa es base y es visible en tablas de contenidos o es hija de una visible\r\n if (layer.isBase && (!layer.options.stealth || layer.firstOption && !layer.firstOption.options.stealth)) {\r\n MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n const displayLayer = layer.firstOption || layer;\r\n\r\n if (displayLayer !== layer) {\r\n self.layerTrees[displayLayer.id] = displayLayer.getTree();\r\n }\r\n\r\n if (displayLayer.getInfo) {\r\n self.layerInfos[displayLayer.id] = displayLayer.getInfo(displayLayer.names[0]);\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS + '-node', { layer: self.layerTrees[displayLayer.id], info: self.layerInfos[displayLayer.id], controlId: self.id }).then(function (out) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n var uid = newLi.dataset.layerUid;\r\n const ul = self.div.querySelector('.' + self.CLASS + '-branch');\r\n const currentLi = ul.querySelector('li[data-layer-uid=\"' + uid + '\"]');\r\n if (currentLi) {\r\n currentLi.innerHTML = newLi.innerHTML;\r\n }\r\n else {\r\n newLi.dataset.layerId = displayLayer.id;\r\n\r\n // Insertamos elemento en el lugar correcto, según indica la colección baseLayers\r\n const setLayerIds = self.map.baseLayers\r\n .map(baseLayer => baseLayer.firstOption || baseLayer)\r\n .filter(baseLayer => baseLayer && !baseLayer.stealth) // Buscamos capas que deban mostrarse\r\n .map(baseLayer => baseLayer.id);\r\n const idx = setLayerIds.indexOf(displayLayer.id);\r\n let inserted = false;\r\n let i;\r\n for (i = idx - 1; i >= 0; i--) {\r\n const curLi = ul.querySelector(`li[data-layer-id=\"${setLayerIds[i]}\"]`);\r\n if (curLi) {\r\n curLi.insertAdjacentElement('afterend', newLi);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n for (i = idx + 1; i < setLayerIds.length; i++) {\r\n const curLi = ul.querySelector(`li[data-layer-id=\"${setLayerIds[i]}\"]`);\r\n if (curLi) {\r\n curLi.insertAdjacentElement('beforebegin', newLi);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n const moreLabel = ul.querySelector(`.${self.CLASS}-more-node`);\r\n if (moreLabel) {\r\n moreLabel.parentElement.insertAdjacentElement('beforebegin', newLi);\r\n }\r\n else {\r\n ul.appendChild(newLi);\r\n }\r\n }\r\n }\r\n self.update();\r\n }\r\n }).catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.updateLayerOrder = function (_layer, _oldIdx, _newIdx) {\r\n // no hace nada\r\n };\r\n\r\n ctlProto.removeLayer = function (layer) {\r\n const self = this;\r\n if (layer.isBase) {\r\n const lis = self.div.querySelector('.' + self.CLASS + '-branch').querySelectorAll('li');\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n if (li.dataset.layerId === layer.id) {\r\n li.parentElement.removeChild(li);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.onErrorLayer = function (layer) {\r\n const self = this;\r\n\r\n if (layer.isBase && !layer.options.stealth) {\r\n self.map.toast(self.getLocaleString('baseLayerNotAvailable', { mapName: layer.title }), { type: Consts.msgType.ERROR });\r\n }\r\n };\r\n\r\n ctlProto.getFallbackLayer = function (id) {\r\n const self = this;\r\n const filterFn = function (layer) {\r\n return layer.fallbackLayer && layer.fallbackLayer.id === id;\r\n };\r\n let baseLayersWithFallback = self.map.baseLayers.filter(filterFn);\r\n let result = baseLayersWithFallback.length ? baseLayersWithFallback[0].fallbackLayer : null;\r\n if (!result && self._moreBaseLayers) {\r\n baseLayersWithFallback = self._moreBaseLayers.filter(filterFn);\r\n result = baseLayersWithFallback.length ? baseLayersWithFallback[0].fallbackLayer : null;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.loadFallbackProjections = function () {\r\n const self = this;\r\n const lis = self._dialogDiv\r\n .querySelector('.' + self._cssClasses.CRS_DIALOG)\r\n .querySelectorAll('ul.' + self._cssClasses.CRS_LIST + ' li');\r\n lis.forEach(function (li) {\r\n li.classList.remove(Consts.classes.HIDDEN);\r\n if (li.querySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON)) {\r\n li.classList.add(Consts.classes.HIDDEN);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.showProjectionChangeDialog = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const layer = options.layer;\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-crs-dialog');\r\n const modalBody = dialog.querySelector('.tc-modal-body');\r\n modalBody.classList.add(Consts.classes.LOADING);\r\n const blCRSList = layer.getCompatibleCRS();\r\n\r\n dialog.classList.remove(Consts.classes.HIDDEN);\r\n\r\n dialog.dataset.layerId = layer.id;\r\n const ul = dialog.querySelector('ul.' + self.CLASS + '-crs-list');\r\n ul.innerHTML = '';\r\n self.map.loadProjections({\r\n crsList: self.map.getCompatibleCRS({\r\n layers: self.map.workLayers.concat(layer),\r\n includeFallbacks: true\r\n }),\r\n orderBy: 'name'\r\n }).then(function (projList) {\r\n var hasFallbackCRS = false;\r\n const fragment = document.createDocumentFragment();\r\n projList\r\n .forEach(function (projObj) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n\r\n if (blCRSList.filter(function (crs) {\r\n return TC.Util.CRSCodesEqual(crs, projObj.code);\r\n }).length === 0) {\r\n // Es un CRS del fallback\r\n hasFallbackCRS = true;\r\n\r\n button.innerHTML = projObj.name + ' (' + projObj.code + ')';\r\n if (options.layer.fallbackLayer) {\r\n button.dataset.fallbackLayerId = options.layer.fallbackLayer.id;\r\n }\r\n button.dataset.crsCode = projObj.code;\r\n button.classList.add(Consts.classes.WARNING);\r\n li.classList.add(Consts.classes.HIDDEN);\r\n } else {\r\n button.innerHTML = self.getLocaleString('changeMapToCrs', { crs: projObj.name + ' (' + projObj.code + ')' });\r\n button.dataset.crsCode = projObj.code;\r\n }\r\n\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n });\r\n\r\n if (options.fallbackLayer) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.innerHTML = self.getLocaleString('reprojectOnTheFly');\r\n button.dataset.fallbackLayerId = options.fallbackLayer.id;\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n }\r\n\r\n if (hasFallbackCRS) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.classList.add(self._cssClasses.LOAD_CRS_BUTTON);\r\n button.innerHTML = self.getLocaleString('showOnTheFlyProjections');\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n }\r\n ul.appendChild(fragment);\r\n\r\n modalBody.classList.remove(Consts.classes.LOADING);\r\n });\r\n dialog.querySelector('.' + self.CLASS + '-name').innerHTML = layer.title || layer.name;\r\n TC.Util.showModal(dialog);\r\n };\r\n\r\n ctlProto.showMoreLayersDialog = function () {\r\n const self = this;\r\n\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-more-dialog');\r\n\r\n dialog.classList.toggle(Consts.classes.THREED, !!self.map.on3DView);\r\n\r\n const modalBody = dialog.querySelector('.tc-modal-body');\r\n modalBody.innerHTML = '';\r\n modalBody.classList.add(Consts.classes.LOADING);\r\n dialog.classList.remove(Consts.classes.HIDDEN);\r\n\r\n TC.Util.showModal(dialog, {\r\n closeCallback: function () {\r\n // no hay selección, vuelvo a seleccionar el mapa de fondo actual del mapa.\r\n this.update().then(() => this._currentSelection.checked = true);\r\n }.bind(self)\r\n });\r\n\r\n const parentTree = self.div.querySelector(`.${self._cssClasses.TREE}`);\r\n const isGrid = parentTree.classList.contains(self._cssClasses.GRID);\r\n const button = dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`);\r\n button.classList.toggle(self._cssClasses.DETAILS, isGrid);\r\n button.classList.toggle(self._cssClasses.GRID, !isGrid);\r\n button.setAttribute('title', self.getLocaleString(isGrid ? 'showDetailsView' : 'showGridView'));\r\n\r\n const processLayer = bl => {\r\n if (bl) {\r\n const info = bl.getInfo ? bl.getInfo(bl.names[0]) : null;\r\n return { layer: bl, info: info, controlId: self.id };\r\n }\r\n return {};\r\n };\r\n const renderBody = function () {\r\n const isGrid = dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`).classList.contains(self._cssClasses.DETAILS);\r\n const moreBaseLayers = self._moreBaseLayers.slice();\r\n for (var i = 0, ii = moreBaseLayers.length; i < ii; i++) {\r\n if (!moreBaseLayers[i]) {\r\n moreBaseLayers[i] = false;\r\n }\r\n }\r\n self.getRenderedHtml(self.CLASS, {\r\n baseLayers: moreBaseLayers.map(processLayer),\r\n controlId: self.id\r\n }, function (html) {\r\n modalBody.innerHTML = html;\r\n const tree = modalBody.querySelector(`.${self._cssClasses.TREE}`);\r\n tree.classList.toggle(self._cssClasses.DETAILS, !isGrid);\r\n tree.classList.toggle(self._cssClasses.GRID, isGrid);\r\n modalBody.classList.remove(Consts.classes.LOADING);\r\n\r\n self.update(modalBody);\r\n });\r\n };\r\n self._getMoreBaseLayers(function (layerIdx) {\r\n if (modalBody.classList.contains(Consts.classes.LOADING)) {\r\n renderBody();\r\n }\r\n else {\r\n const li = modalBody.querySelector(`li.${self.CLASS}-node:nth-child(${layerIdx + 1})`);\r\n const bl = self._moreBaseLayers[layerIdx];\r\n if (bl) {\r\n self.getRenderedHtml(self.CLASS + '-node', processLayer(bl), function (html) {\r\n li.insertAdjacentHTML('beforebegin', html);\r\n li.remove();\r\n self.update(modalBody);\r\n });\r\n }\r\n }\r\n }).then(function () {\r\n renderBody();\r\n });\r\n };\r\n\r\n const toggleUI = function (ctl, container) {\r\n const tree = container.querySelector(`.${ctl._cssClasses.TREE}`);\r\n if (tree) {\r\n const btn = container.querySelector(`.${ctl._cssClasses.VIEW_BTN}`);\r\n const isGrid = btn.classList.toggle(ctl._cssClasses.DETAILS);\r\n btn.setAttribute('title', ctl.getLocaleString(btn.classList.toggle(ctl._cssClasses.GRID) ? 'showGridView' : 'showDetailsView'));\r\n tree.classList.remove(ctl._cssClasses.DETAILS, ctl._cssClasses.GRID);\r\n setTimeout(() => tree.classList.add(isGrid ? ctl._cssClasses.GRID : ctl._cssClasses.DETAILS), 20);\r\n }\r\n };\r\n\r\n ctlProto.toggleView = function () {\r\n const self = this;\r\n toggleUI(self, self.div);\r\n };\r\n\r\n ctlProto.toggleMoreLayersDialogView = function () {\r\n const self = this;\r\n if (self._dialogDiv) {\r\n toggleUI(self, self._dialogDiv);\r\n }\r\n };\r\n\r\n ctlProto.getLayer = function (id) {\r\n const self = this;\r\n return self.map && (self.map.getLayer(id) || self._moreBaseLayers && self._moreBaseLayers.find(layer => layer.id === id));\r\n };\r\n\r\n const getTo3DVIew = function (baseLayer) {\r\n return Promise.all([\r\n baseLayer.getCapabilitiesPromise(),\r\n baseLayer.getFallbackLayer() ? baseLayer.getFallbackLayer().getCapabilitiesPromise() : Promise.resolve()\r\n ]);\r\n };\r\n\r\n ctlProto._getMoreBaseLayers = function (partialCallback) {\r\n const self = this;\r\n\r\n if (!self._moreBaseLayers && !self._moreBaseLayersPromise) {\r\n\r\n self._moreBaseLayersPromise = new Promise(function (resolve, _reject) {\r\n\r\n // GLS: Carlos no quiere que se muestren los respectivos dinámicos así que los filtro.\r\n var noDyn = TC.Cfg.availableBaseLayers\r\n .filter(function (lyr) {\r\n return TC.Cfg.availableBaseLayers\r\n .filter(l => l.fallbackLayer)\r\n .map(l => l.fallbackLayer)\r\n .indexOf(lyr.id) === -1;\r\n })\r\n .map(function (baseLayer) {\r\n if (baseLayer.type === Consts.layerType.WMS || baseLayer.type === Consts.layerType.WMTS) {\r\n return new Raster(baseLayer);\r\n } else if (baseLayer.type === Consts.layerType.VECTOR) {\r\n return new Vector(baseLayer);\r\n }\r\n });\r\n\r\n self._moreBaseLayers = new Array(noDyn.length);\r\n\r\n const resolvePromise = function () {\r\n self._moreBaseLayers = self._moreBaseLayers.filter(function (baseLayer) {\r\n return baseLayer !== null;\r\n });\r\n\r\n resolve(self._moreBaseLayers);\r\n };\r\n const addLayer = async function (i) {\r\n const baseLayer = this;\r\n\r\n baseLayer.map = self.map;\r\n baseLayer.isBase = baseLayer.options.isBase = true;\r\n\r\n if (baseLayer.type === Consts.layerType.WMTS) {\r\n await baseLayer.getCapabilitiesPromise();\r\n var matrixSet = baseLayer.wrap.getCompatibleMatrixSets(self.map.getCRS())[0];\r\n baseLayer.mustReproject = !matrixSet;\r\n } else if (baseLayer.type === Consts.layerType.WMS) {\r\n await baseLayer.getCapabilitiesPromise();\r\n baseLayer.mustReproject = !baseLayer.isCompatible(self.map.getCRS());\r\n }\r\n\r\n if (self.map.on3DView && baseLayer.mustReproject && baseLayer.getFallbackLayer) {\r\n const fbLayer = baseLayer.getFallbackLayer();\r\n if (fbLayer) {\r\n await fbLayer.getCapabilitiesPromise();\r\n baseLayer.mustReproject = !fbLayer.isCompatible(self.map.getCRS());\r\n }\r\n }\r\n\r\n self._moreBaseLayers.splice(i, 1, baseLayer);\r\n if (TC.Util.isFunction(partialCallback)) {\r\n partialCallback(i);\r\n }\r\n };\r\n\r\n Promise.all(noDyn.map(function (baseLayer, i) {\r\n return new Promise(function (res, _rej) {\r\n if (baseLayer.type === Consts.layerType.WMS || baseLayer.type === Consts.layerType.WMTS) {\r\n var promise = self.map.on3DView ? getTo3DVIew(baseLayer) : baseLayer.getCapabilitiesPromise();\r\n promise.then(\r\n function () {\r\n addLayer.call(baseLayer, i).then(res);\r\n },\r\n function (_fail) {\r\n self._moreBaseLayers.splice(i, 1, null);\r\n if (TC.Util.isFunction(partialCallback)) {\r\n partialCallback(i);\r\n }\r\n res();\r\n });\r\n } else {\r\n addLayer.call(baseLayer, i).then(res);\r\n }\r\n });\r\n })).finally(resolvePromise);\r\n });\r\n\r\n } else if (self._moreBaseLayers) {\r\n\r\n return new Promise(function (resolve, _reject) {\r\n Promise.all(self._moreBaseLayers.filter(function (baseLayer) {\r\n return baseLayer.type === Consts.layerType.WMS || baseLayer.type === Consts.layerType.WMTS;\r\n }).map(function (baseLayer) {\r\n return self.map.on3DView ? getTo3DVIew(baseLayer) : baseLayer.getCapabilitiesPromise();\r\n })).then(function () {\r\n\r\n self._moreBaseLayers = self._moreBaseLayers.map(function (baseLayer) {\r\n\r\n if (baseLayer.type === Consts.layerType.WMTS) {\r\n var matrixSet = baseLayer.wrap.getCompatibleMatrixSets(self.map.getCRS())[0];\r\n baseLayer.mustReproject = !matrixSet;\r\n } else if (baseLayer.type === Consts.layerType.WMS) {\r\n baseLayer.mustReproject = !baseLayer.isCompatible(self.map.getCRS());\r\n }\r\n if (self.map.on3DView && baseLayer.mustReproject && baseLayer.getFallbackLayer && baseLayer.getFallbackLayer()) {\r\n baseLayer.mustReproject = !baseLayer.getFallbackLayer().isCompatible(self.map.getCRS());\r\n\r\n return baseLayer;\r\n }\r\n\r\n return baseLayer;\r\n });\r\n\r\n resolve(self._moreBaseLayers);\r\n });\r\n });\r\n }\r\n\r\n return self._moreBaseLayersPromise;\r\n };\r\n})();\r\n\r\nTC.control.BasemapSelector = BasemapSelector;\r\nexport default BasemapSelector;","import TC from '../../TC';\r\nimport OfflineMapMaker from './OfflineMapMaker';\r\nTC.control = TC.control || {};\r\nTC.control.CacheBuilder = OfflineMapMaker;\r\nconst CacheBuilder = TC.control.CacheBuilder;\r\nexport default CacheBuilder;","\r\n/**\r\n * Opciones de control de clics de usuario.\r\n * @typedef ClickOptions\r\n * @memberof SITNA.control\r\n * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a los clics hechos en el mapa desde el que se carga.\r\n * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n * @property {SITNA.Map~ClickCallback} callback - Función de callback que gestiona la respuesta al clic.\r\n */\r\n\r\n/**\r\n * Función de callback que gestiona los clic del usuario en la ventana de visualización del mapa.\r\n * @callback SITNA.Map~ClickCallback\r\n * @param {number[]} coords - Coordenadas del punto donde se ha realizado clic, en las unidades del sistema de referencia de coordenadas del mapa (Ver propiedad `crs`de {@link SITNA.MapOptions}). Array de dos números correspondientes a las coordenadas x e y.\r\n * @example [Ver en vivo](../examples/cfg.ClickOptions.html) {@lang html} \r\n *
\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport wrap from '../ol/ol';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.wrap = wrap;\r\n\r\nconst Click = function () {\r\n var self = this;\r\n\r\n Control.apply(self, arguments);\r\n\r\n if (self.options && self.options.callback) {\r\n self.callback = self.options.callback;\r\n }\r\n\r\n self.wrap = new TC.wrap.control.Click(self);\r\n};\r\n\r\nTC.inherit(Click, Control);\r\n\r\n(function () {\r\n var ctlProto = Click.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-click';\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n self.wrap.register(map);\r\n return Control.prototype.register.call(self, map);\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n Control.prototype.activate.call(self);\r\n self.wrap.activate();\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n self.wrap.deactivate();\r\n Control.prototype.deactivate.call(self);\r\n };\r\n\r\n ctlProto.callback = function (coord, point) {\r\n console.log('[Click][' + coord[0] + ', ' + coord[1] + '][' + point[0] + ', ' + point[1] + ']');\r\n };\r\n})();\r\n\r\nTC.control.Click = Click;\r\nexport default Click;","import TC from '../../TC';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst Container = function () {\r\n var self = this;\r\n\r\n Control.apply(self, arguments); \r\n\r\n self.controlOptions = self.options.controls || [];\r\n\r\n self.ctlCount = self.controlOptions instanceof Array ? self.controlOptions.length : Object.keys(self.controlOptions).length; \r\n self.defaultSelection = self.options.defaultSelection;\r\n\r\n self._ctlPromises = new Array(self.ctlCount);\r\n};\r\n\r\nTC.inherit(Container, Control);\r\n\r\n(function () {\r\n var ctlProto = Container.prototype;\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n const ctlRegister = Control.prototype.register.call(self, map);\r\n\r\n self.uids = new Array(self.ctlCount);\r\n self.uids.forEach(function (_elm, idx, arr) {\r\n arr[idx] = self.getUID();\r\n });\r\n\r\n await Promise.all([ctlRegister, self.renderPromise()]);\r\n const ctl = await self.onRender();\r\n return ctl;\r\n };\r\n\r\n ctlProto.onRender = function () {\r\n return Promise.resolve(this);\r\n };\r\n\r\n ctlProto.render = function (_callback) { };\r\n\r\n ctlProto.getControl = function (idx) {\r\n var promise = this._ctlPromises[idx];\r\n if (!promise) {\r\n return Promise.reject(Error('No control found')); \r\n }\r\n\r\n return promise;\r\n };\r\n\r\n ctlProto.getControls = function () {\r\n return Promise.all(this._ctlPromises);\r\n };\r\n\r\n ctlProto.onControlDisable = function (_control) {\r\n };\r\n\r\n ctlProto.onControlEnable = function (_control) {\r\n };\r\n})();\r\n\r\nTC.control.Container = Container;\r\nexport default Container;\r\n","import TC from '../../TC';\r\nimport Container from './Container';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst ControlContainer = function () {\r\n var self = this;\r\n\r\n Container.apply(self, arguments);\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n if (!Array.isArray(self.controlOptions)) {\r\n console.log('Gestionamos config de controlContainer antiguo');\r\n\r\n var controlOptions = [];\r\n\r\n Object.keys(self.controlOptions).forEach((key) => {\r\n const ctl = self.controlOptions[key];\r\n var newCtl = {\r\n position: ctl.side\r\n };\r\n\r\n newCtl[key] = ctl.options;\r\n\r\n controlOptions.push(newCtl);\r\n });\r\n\r\n self.controlOptions = controlOptions;\r\n }\r\n};\r\n\r\nTC.inherit(ControlContainer, Container);\r\n\r\n(function () {\r\n var ctlProto = ControlContainer.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-cctr';\r\n ctlProto.POSITION = {\r\n LEFT: \"left\",\r\n RIGHT: \"right\"\r\n };\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n ctlProto.SIDE = ctlProto.POSITION;\r\n\r\n ctlProto.onRender = async function () {\r\n const self = this;\r\n\r\n self.controlOptions.forEach(function addCtl(ctl, i) {\r\n const ctlName = Object.keys(ctl).find(key => [\"position\", \"index\"].indexOf(key) < 0);\r\n self._ctlPromises[i] = self.map.addControl(ctlName, TC.Util.extend({\r\n id: self.uids[i],\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + i).querySelector('div')\r\n }, ctl[ctlName]));\r\n });\r\n\r\n await Promise.all(self._ctlPromises);\r\n for (var i = 0, len = arguments.length; i < len; i++) {\r\n var ctl = arguments[i];\r\n ctl.containerControl = self;\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-cctr.mjs');\r\n const nodeTemplatePromise = import('../templates/tc-ctl-cctr-node.mjs');\r\n\r\n const template = {};\r\n template[ctlProto.CLASS] = (await mainTemplatePromise).default;\r\n template[ctlProto.CLASS + '-node'] = (await nodeTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({\r\n controls: Object.keys(self.controlOptions).map(function (key, i) {\r\n return TC.Util.extend(self.controlOptions[key], { index: i });\r\n })\r\n }, callback));\r\n };\r\n\r\n ctlProto.addControl = async function (control, options) {\r\n const self = this;\r\n options.position = options.position || options.side || self.POSITION.LEFT;\r\n\r\n const idx = ++self.ctlCount;\r\n await self.renderPromise();\r\n const html = await self.getRenderedHtml(self.CLASS + '-node', { index: idx });\r\n var template = document.createElement('template');\r\n template.innerHTML = html.trim();\r\n\r\n self.div.querySelector('ul.' + self.CLASS + '-' + options.position).appendChild(template.content ? template.content.firstChild : template.firstChild);\r\n const ctrl = await self.map.addControl(control, TC.Util.extend({\r\n id: self.getUID(),\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + idx).querySelector('div')\r\n }, options));\r\n return ctrl;\r\n };\r\n\r\n ctlProto.addElement = function (options) {\r\n const self = this;\r\n\r\n options.position = options.position || options.side || self.POSITION.LEFT;\r\n\r\n var li = document.createElement('li');\r\n li.setAttribute('class', self.CLASS + '-elm ' + (self.CLASS + '-elm-' + self.ctlCount++ + ' '));\r\n\r\n self.div.querySelector('ul.' + self.CLASS + '-' + options.position).appendChild(li);\r\n\r\n var addedElement = li.appendChild(options.htmlElement);\r\n addedElement.setAttribute('class', addedElement.getAttribute('class') + ' tc-ctl');\r\n return addedElement;\r\n };\r\n})();\r\n\r\nTC.control.ControlContainer = ControlContainer;\r\nexport default ControlContainer;","/**\r\n * Opciones de control de coordenadas.\r\n * @typedef CoordinatesOptions\r\n * @memberof SITNA.control\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [showGeo] - Determina si se muestran coordenadas geográficas (en EPSG:4326) además de las del mapa, que por defecto son UTM (EPSG:25830).\r\n * @example [Ver en vivo](../examples/cfg.CoordinatesOptions.html) {@lang html} \r\n *
\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Util from '../Util';\r\nimport ProjectionSelector from './ProjectionSelector';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass Coordinates extends ProjectionSelector {\r\n #cssClasses;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.remove(super.CLASS);\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.crs = '';\r\n self.xy = [0, 0, 0];\r\n self.latLon = [0, 0, 0];\r\n self.x = 0;\r\n self.y = 0;\r\n self.lat = 0;\r\n self.lon = 0;\r\n self.units = Consts.units.METERS;\r\n self.isGeo = false;\r\n self.allowReprojection = Object.prototype.hasOwnProperty.call(self.options, 'allowReprojection') ? self.options.allowReprojection : true;\r\n\r\n self.#cssClasses = {\r\n CRS: self.CLASS + '-crs',\r\n GEOCRS: self.CLASS + '-geocrs',\r\n MAIN: self.CLASS + '-main',\r\n ALTERNATE: self.CLASS + '-alt',\r\n XY: self.CLASS + '-xy',\r\n X: self.CLASS + '-x',\r\n Y: self.CLASS + '-y',\r\n LATLON: self.CLASS + '-latlon',\r\n LAT: self.CLASS + '-lat',\r\n LON: self.CLASS + '-lon',\r\n ELEVATION: self.CLASS + '-elevation',\r\n ELEVATION_CONTAINER: self.CLASS + '-elev-container',\r\n THREEDMARKER: self.CLASS + '-threed'\r\n };\r\n\r\n self.geoCrs = self.options.geoCrs || Cfg.geoCrs;\r\n self.wrap = new TC.wrap.control.Coordinates(self);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-coords';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register.call(self, map);\r\n\r\n self.crs = self.map.crs;\r\n\r\n self.clear();\r\n\r\n map.on(Consts.event.VIEWCHANGE, function (e) {\r\n const view = e.view;\r\n if (view === Consts.view.PRINTING) {\r\n return;\r\n }\r\n\r\n const _3dContainerListener = function (e) {\r\n if (!self.isPointerOver(e)) {\r\n self.clear();\r\n }\r\n };\r\n\r\n if (view === Consts.view.THREED) {\r\n self.isGeo = true;\r\n self.units = Consts.units.DEGREES;\r\n self.crs = self.map.view3D.crs;\r\n\r\n self.map.view3D.container.addEventListener('mouseout', _3dContainerListener);\r\n\r\n /* provisional: faltaría el off cuando pasemos a default*/\r\n self.map.view3D.on(Consts.event.MOUSEMOVE, function (coords) {\r\n if (coords) {\r\n if (Util.detectMobile()) { // si estamos en móvil añadimos marcador al mapa 3D \r\n\r\n self.clear();\r\n\r\n self.coordsToClick({ coordinate: [coords.lon, coords.lat, coords.ele], cssClass: self._cssClasses.THREEDMARKER });\r\n }\r\n\r\n self.latLon = [coords.lat, coords.lon];\r\n if (coords.ele > 0) {\r\n var locale = Util.getMapLocale(self.map);\r\n self.latLon.push(coords.ele.toLocaleString(locale) + \"m\");\r\n }\r\n\r\n self.update();\r\n } else {\r\n self.clear();\r\n }\r\n });\r\n\r\n } else if (view === Consts.view.DEFAULT) {\r\n self.isGeo = self.map.wrap.isGeo();\r\n self.units = Consts.units.METERS;\r\n self.crs = self.map.crs;\r\n\r\n if (self.map.view3D) {\r\n self.map.view3D.container.removeEventListener('mouseout', _3dContainerListener);\r\n }\r\n }\r\n\r\n if (self.map.view3D) {\r\n self.geoCrs = self.map.view3D.crs;\r\n self.render();\r\n }\r\n });\r\n\r\n map.loaded(function () {\r\n // Se espera antes de registrar el control a que se cargue el mapa para evitar que muestre valores extraños\r\n self.wrap.register(map).then(function () {\r\n self.render(function () {\r\n //self.update();\r\n self.clear();\r\n });\r\n });\r\n\r\n if (Util.detectMobile()) {\r\n self.renderPromise().then(function () {\r\n self.getLayer();\r\n self.activateCoords();\r\n });\r\n }\r\n\r\n map.on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (!map.on3DView) {\r\n self.isGeo = map.wrap.isGeo();\r\n self.crs = e.newCrs;\r\n self.render();\r\n }\r\n });\r\n\r\n self.map.wrap.getViewport().then(function (viewport) {\r\n self.renderPromise().then(function () {\r\n viewport.addEventListener(Consts.event.MOUSEMOVE, function (e) {\r\n if (self.map.on3DView) {\r\n return;\r\n }\r\n\r\n self.onMouseMove(e);\r\n });\r\n viewport.addEventListener(Consts.event.MOUSELEAVE, function (e) {\r\n self.onMouseLeave(e);\r\n });\r\n });\r\n });\r\n });\r\n\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-coords.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-coords-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n\r\n const renderPromise = self.getRenderedHtml(self.CLASS + '-dialog', null);\r\n self._set1stRenderPromise(renderPromise);\r\n const html = await renderPromise;\r\n self._dialogDiv.innerHTML = html;\r\n await TC.Control.prototype.renderData.call(self, {\r\n x: self.x,\r\n y: self.y,\r\n lat: self.lat,\r\n lon: self.lon,\r\n ele: self.isGeo && self.latLon.length > 2 ? self.latLon[2] : !self.isGeo && self.xy.length > 2 ? self.xy[2] : null,\r\n crs: self.crs,\r\n geoCrs: self.geoCrs,\r\n isGeo: self.isGeo,\r\n showGeo: !self.isGeo && self.options.showGeo,\r\n allowReprojection: self.allowReprojection\r\n });\r\n const crsButton = self.div.querySelector('button.' + self.#cssClasses.CRS);\r\n if (crsButton) {\r\n crsButton.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.showProjectionChangeDialog();\r\n }, { passive: true });\r\n }\r\n\r\n const closeBtn = self.div.querySelector('sitna-button[icon=\"close\"]');\r\n if (Util.detectMobile()) {\r\n closeBtn.addEventListener('click', function () {\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n self.clear();\r\n });\r\n\r\n closeBtn.style.display = '';\r\n }\r\n else {\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n self.div.style.visibility = 'visible';\r\n closeBtn.style.display = 'none';\r\n }\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n\r\n onMouseMove(e) {\r\n this.wrap.onMouseMove(e);\r\n }\r\n\r\n onMouseLeave(e) {\r\n const self = this;\r\n setTimeout(function () {\r\n if (!self.isPointerOver(e)) {\r\n self.div.style.visibility = 'hidden';\r\n self.clear();\r\n }\r\n }, 200);\r\n }\r\n\r\n isPointerOver(e) {\r\n const self = this;\r\n\r\n const clientRect = self.div.getBoundingClientRect();\r\n return clientRect.left <= e.clientX &&\r\n clientRect.left + clientRect.width >= e.clientX &&\r\n clientRect.top <= e.clientY &&\r\n clientRect.top + clientRect.height >= e.clientY;\r\n }\r\n\r\n update() {\r\n const self = this;\r\n\r\n self.renderPromise().then(function () {\r\n if (!self.isGeo && self.options.showGeo) {\r\n self.latLon = Util.reproject(self.xy, self.crs, self.geoCrs).reverse();\r\n }\r\n\r\n const mainElement = self.div.querySelector(`.${self.#cssClasses.MAIN}`);\r\n const xyElement = mainElement.querySelector(`.${self.#cssClasses.XY}`);\r\n const latLonElement = mainElement.querySelector(`.${self.#cssClasses.LATLON}`);\r\n xyElement.classList.toggle(Consts.classes.HIDDEN, self.isGeo);\r\n latLonElement.classList.toggle(Consts.classes.HIDDEN, !self.isGeo);\r\n\r\n if (self.isGeo || self.options.showGeo) {\r\n self.lat = Util.formatCoord(self.latLon[0], Consts.DEGREE_PRECISION);\r\n self.lon = Util.formatCoord(self.latLon[1], Consts.DEGREE_PRECISION);\r\n }\r\n if (self.isGeo) {\r\n latLonElement.querySelector(`.${self.#cssClasses.LAT}`).innerHTML = self.lat;\r\n latLonElement.querySelector(`.${self.#cssClasses.LON}`).innerHTML = self.lon;\r\n if (!latLonElement.querySelector(`.${self.#cssClasses.ELEVATION_CONTAINER}`)\r\n .classList.toggle(Consts.classes.HIDDEN, self.latLon.length <= 2)) {\r\n self.ele = self.latLon[2];\r\n latLonElement.querySelector(`.${self.#cssClasses.ELEVATION}`).innerHTML = self.ele;\r\n }\r\n }\r\n else {\r\n self.x = Util.formatCoord(self.xy[0], Consts.METER_PRECISION);\r\n self.y = Util.formatCoord(self.xy[1], Consts.METER_PRECISION);\r\n self.div.querySelector(`.${self.#cssClasses.X}`).innerHTML = self.x;\r\n self.div.querySelector(`.${self.#cssClasses.Y}`).innerHTML = self.y;\r\n if (!xyElement.querySelector(`.${self.#cssClasses.ELEVATION_CONTAINER}`)\r\n .classList.toggle(Consts.classes.HIDDEN, self.xy.length <= 2)) {\r\n self.ele = self.xy[2];\r\n xyElement.querySelector(`.${self.#cssClasses.ELEVATION}`).innerHTML = self.ele;\r\n }\r\n }\r\n\r\n if (!self.isGeo && self.options.showGeo) {\r\n const altElement = self.div.querySelector(`.${self.#cssClasses.ALTERNATE}`);\r\n altElement.querySelector(`.${self.#cssClasses.LAT}`).innerHTML = self.lat;\r\n altElement.querySelector(`.${self.#cssClasses.LON}`).innerHTML = self.lon;\r\n }\r\n\r\n if (!Util.detectMobile()) {\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n self.div.style.visibility = 'visible';\r\n }\r\n });\r\n }\r\n\r\n clear() {\r\n const self = this;\r\n\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n self.div.style.visibility = 'hidden';\r\n\r\n delete self.currentCoordsMarker;\r\n self.getLayer().then(function (layer) {\r\n if (layer.features.length) {\r\n layer.clearFeatures();\r\n }\r\n });\r\n }\r\n\r\n deactivateCoords() {\r\n const self = this;\r\n\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n self.clear();\r\n\r\n self.wrap.coordsDeactivate();\r\n }\r\n\r\n activateCoords() {\r\n const self = this;\r\n\r\n self.wrap.coordsActivate();\r\n }\r\n\r\n getCoords() {\r\n const self = this;\r\n // si hay visible un popup, establecemos la posición de la cruz en el punto en el cual se ha abierto el popup\r\n const popups = self.map.getControlsByClass('TC.control.Popup');\r\n if (popups?.length > 0 && popups[0].isVisible()) {\r\n self.coordsToPopup(popups[0]);\r\n }\r\n else { // si no hay popup, calculamos el centro del mapa \r\n self.updateCoordsCtrl([(self.map.getExtent()[0] + self.map.getExtent()[2]) / 2, (self.map.getExtent()[1] + self.map.getExtent()[3]) / 2]);\r\n\r\n self.coordsToClick.call(self, { coordinate: self.xy });\r\n }\r\n }\r\n\r\n coordsToPopup(popup) {\r\n const self = this;\r\n\r\n if (popup) {\r\n self.updateCoordsCtrl(popup.wrap.popup.getPosition());\r\n }\r\n }\r\n\r\n updateCoordsCtrl(position) {\r\n const self = this;\r\n\r\n if (position) {\r\n if (!self.isGeo) {\r\n self.x = position[0];\r\n self.y = position[1];\r\n self.xy = [self.x, self.y];\r\n\r\n if (position.length > 2) {\r\n self.xy.push(position[2]);\r\n }\r\n }\r\n if (self.isGeo || self.options.showGeo) {\r\n self.lat = position[0];\r\n self.lon = position[1];\r\n self.latLon = [self.lat, self.lon];\r\n\r\n if (position.length > 2) {\r\n self.latLon.push(position[2]);\r\n }\r\n }\r\n\r\n self.update();\r\n }\r\n }\r\n\r\n // Establece la posición de la cruz en la posición recibida\r\n //var animationTimeout;\r\n coordsToClick(e) {\r\n const self = this;\r\n\r\n // Si streetView está activo, no responde al click\r\n if (!self.map.div.classList.contains('tc-ctl-sv-active') || !self.map.div.classList.contains(Consts.classes.COLLAPSED)) {\r\n\r\n var coordsBounding = self.div.getBoundingClientRect();\r\n if (coordsBounding.left <= e.clientX && e.clientX <= coordsBounding.right && coordsBounding.top <= e.clientY && e.clientY <= coordsBounding.bottom) {\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n self.clear();\r\n\r\n return;\r\n }\r\n\r\n self.div.classList.remove('tc-fading');\r\n setTimeout(function () {\r\n self.div.classList.add('tc-fading');\r\n // El siguiente código es para quitar el marcador al mismo tiempo que desaparece\r\n // el indicador de coordenadas\r\n const durationValue = getComputedStyle(self.div).getPropertyValue('animation-duration');\r\n let duration = 0;\r\n let match = durationValue.match(/^(\\d+)(m?s)$/i);\r\n if (match) {\r\n duration = parseInt(match[1]);\r\n if (match[2] === 's')\r\n duration = duration * 1000;\r\n }\r\n if (duration !== 0) {\r\n clearTimeout(self._markerRemoveTimeout);\r\n self._markerRemoveTimeout = setTimeout(() => {\r\n if (self.currentCoordsMarker) {\r\n self.getLayer().then(layer => {\r\n layer.removeFeature(self.currentCoordsMarker);\r\n self.currentCoordsMarker = null;\r\n });\r\n }\r\n }, duration);\r\n }\r\n }, 10);\r\n\r\n self.updateCoordsCtrl(e.coordinate);\r\n\r\n if (!self.map.on3DView) {\r\n self.coordsMarkerAdd(e.coordinate, e.cssClass);\r\n }\r\n\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n //self.div.style.visibility = 'visible';\r\n\r\n //self.div.style.opacity = '0.7';\r\n\r\n //animationTimeout = setTimeout(function () {\r\n // $(self.div).animate({ opacity: 0 }, 3000, \"linear\",\r\n // function () {\r\n // self.clear();\r\n // });\r\n //}, 5000);\r\n }\r\n }\r\n\r\n coordsMarkerAdd(position, cssClass) {\r\n const self = this;\r\n\r\n if (!self.currentCoordsMarker) {\r\n self.getLayer().then(function (layer) {\r\n layer.addMarker(position, { title: 'Coord', showsPopup: false, cssClass: cssClass || Consts.classes.POINT, anchor: [0.5, 0.5] })\r\n .then(function (marker) {\r\n self.currentCoordsMarker = marker;\r\n });\r\n });\r\n } else {\r\n self.currentCoordsMarker.setCoords(position);\r\n }\r\n }\r\n\r\n async getLayer() {\r\n const self = this;\r\n if (self.layer == undefined) {\r\n self.layer = await self.map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n stealth: true,\r\n owner: self,\r\n title: 'Coordenadas'\r\n });\r\n self.layer.map.putLayerOnTop(self.layer);\r\n }\r\n return self.layer;\r\n }\r\n}\r\n\r\nTC.control.Coordinates = Coordinates;\r\nexport default Coordinates;","\r\n/**\r\n * Opciones de control para añadir datos geográficos.\r\n * \r\n * En el control se pueden añadir WMS escribiendo la dirección del servicio o eligiendo un servicio de la lista de sugerencias de servicios de interés.\r\n *\r\n * También se pueden añadir datos de archivos buscándolos en el cuadro de diálogo que se abre tras pulsar _Abrir archivo_ o arrastrándolos y soltándolos dentro del área del mapa.\r\n * @typedef DataLoaderOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [enableDragAndDrop] - Propiedad que establece si está permitido arrastrar y soltar archivos al área del mapa, además de abrirlos de la manera convencional abriendo el cuadro de diálogo de búsqueda de archivos.\r\n * @property {SITNA.layer.WmsGroupOptions[]} [wmsSuggestions] - Lista de grupos de sugerencias de servicios WMS ofrecidos por el control. Por ejemplo se puede establecer un grupo de servicios WMS estatales y otro de servicios WMS mundiales.\r\n * @example [Ver en vivo](../examples/cfg.DataLoaderOptions.html) {@lang html} \r\n *
\r\n * \r\n */\r\n\r\n/**\r\n * Opciones de sugerencia de servicio externo WMS.\r\n * @typedef WmsOptions\r\n * @memberof SITNA.layer\r\n * @see SITNA.layer.WmsGroupOptions\r\n * @property {string} name - Nombre del servicio WMS. Se mostrará como un elemento en la lista de opciones del control.\r\n * @property {string} url - URL de acceso al servicio WMS.\r\n */\r\n\r\n/**\r\n * Opciones de grupo de sugerencias de servicios externos WMS.\r\n * @typedef WmsGroupOptions\r\n * @memberof SITNA.layer\r\n * @see SITNA.control.DataLoaderOptions\r\n * @property {string} group - Nombre del grupo de sugerencias. Se mostrará como una sección en la lista de opciones del control.\r\n * @property {SITNA.layer.WmsOptions[]} items - Lista de sugerencias de servicios externos WMS.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport TabContainer from './TabContainer';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass DataLoader extends TabContainer {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n self.controlOptions = [\r\n {\r\n title: 'addWMS',\r\n externalWMS: { suggestions: self.options.wmsSuggestions }\r\n },\r\n {\r\n fileImport: { enableDragAndDrop: self.options.enableDragAndDrop }\r\n }\r\n ];\r\n self.defaultSelection = 0;\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n self.map = map;\r\n self.title = self.getLocaleString('addMaps');\r\n const ctl = await super.register.call(self, map);\r\n ctl.div.classList.add(self.CLASS + '-datldr');\r\n return ctl;\r\n }\r\n}\r\n\r\nTC.control.DataLoader = DataLoader;\r\nexport default DataLoader;","\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport MapInfo from './MapInfo';\r\nimport filter from '../filter';\r\n\r\nTC.control = TC.control || {};\r\nTC.filter = filter;\r\n\r\nconst Download = function (options) {\r\n var self = this;\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n Control.apply(self, arguments);\r\n\r\n self._hiddenElms = [];\r\n\r\n var opts = options || {};\r\n self._dialogDiv = TC.Util.getDiv(opts.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!opts.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n } \r\n};\r\n\r\nTC.inherit(Download, MapInfo);\r\n\r\n(function () {\r\n var ctlProto = Download.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-download';\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-download.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-download-dialog.mjs');\r\n\r\n const template = {};\r\n template[ctlProto.CLASS] = (await mainTemplatePromise).default;\r\n template[ctlProto.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }).then(function () {\r\n return Control.prototype.renderData.call(self, {\r\n controlId: self.id,\r\n deselectableTabs: self.options.deselectableTabs\r\n }, function () {\r\n const cs = 'tctr'; \r\n self.div.querySelectorAll(`.tc-ctl-${cs}-select sitna-tab`).forEach(function (tab) {\r\n tab.callback = function () {\r\n const target = this.target;\r\n if (target) {\r\n self._activeElm = target;\r\n }\r\n };\r\n });\r\n const firstTab = self.div.querySelector(`.tc-ctl-${cs}-select sitna-tab:first-of-type`);\r\n if (firstTab && firstTab.attributes[\"for\"]) {\r\n self._activeElm = document.getElementById(firstTab.attributes[\"for\"].value);\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n }));\r\n };\r\n\r\n const toFixed = function (number) {\r\n let result = number.toFixed(20);\r\n if (result.indexOf('.') >= 0) {\r\n result = result.replace(/0+$/, '').replace(/\\.$/, '');\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n const result = MapInfo.prototype.register.call(self, map);\r\n\r\n // GLS: Añado el flag al mapa para tenerlo en cuenta cuando se establece la función de carga de imágenes\r\n self.map.crossOrigin = 'anonymous';\r\n\r\n const downLoadImage = function (format) {\r\n const li = self.map.getLoadingIndicator();\r\n const wait = li && li.addWait();\r\n const extent = self.map.getExtent();\r\n const doneQR = new Promise(function (resolve, _reject) {\r\n var canvases = self.map.wrap.getCanvas();\r\n var newCanvas = canvases.length > 1 ? TC.Util.mergeCanvases(canvases) : canvases[0];\r\n\r\n var sb = self.map.getControlsByClass(TC.control.ScaleBar);\r\n if (sb && !self.map.on3DView) {\r\n self.drawScaleBarIntoCanvas({ canvas: newCanvas, fill: true });\r\n }\r\n\r\n if (!self._activeElm.querySelector(`.${self.CLASS}-image-qr:disabled`) &&\r\n self._activeElm.querySelector(`.${self.CLASS}-image-qr:checked`)) {\r\n const codeContainerId = 'qrcode';\r\n var codeContainer = document.getElementById(codeContainerId);\r\n if (codeContainer) {\r\n codeContainer.innerHTML = '';\r\n }\r\n else {\r\n codeContainer = document.createElement('div');\r\n codeContainer.setAttribute('id', codeContainerId);\r\n document.body.appendChild(codeContainer);\r\n }\r\n\r\n codeContainer.style.top = '-200px';\r\n codeContainer.style.left = '-200px';\r\n codeContainer.style.position = 'absolute';\r\n\r\n self.makeQRCode(codeContainer, 87).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n var ctx = newCanvas.getContext(\"2d\");\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.fillRect(newCanvas.width - 91, newCanvas.height - 91, 91, 91);\r\n\r\n TC.Util.addToCanvas(newCanvas, qrCodeBase64, { x: newCanvas.width - 88, y: newCanvas.height - 88 }).then(function (mapCanvas) {\r\n resolve(mapCanvas);\r\n });\r\n } else { \r\n li && li.removeWait(wait);\r\n }\r\n });\r\n } else {\r\n resolve(newCanvas);\r\n }\r\n });\r\n\r\n doneQR.then(function (_canvas) {\r\n const fileName = window.location.hostname + '_' + self.map.crs.replace(':', '') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n const fileExtension = '.' + format.split('/')[1];\r\n const worldFileExtension = format === TC.Consts.mimeType.JPEG ? '.jgw' : '.pgw';\r\n if (self._activeElm.querySelector(`.${self.CLASS}-image-wld:checked`) && !self.map.on3DView) {\r\n import('jszip').then(module => {\r\n const JSZip = module.default;\r\n const xScale = (extent[2] - extent[0]) / _canvas.width;\r\n const ySkew = 0;\r\n const xSkew = 0;\r\n const yScale = (extent[1] - extent[3]) / _canvas.height;\r\n const xOrigin = extent[0];\r\n const yOrigin = extent[3];\r\n const zip = new JSZip();\r\n _canvas.toBlob(function (blob) {\r\n zip.file(fileName + fileExtension, blob);\r\n zip.file(fileName + worldFileExtension, `${toFixed(xScale)}\r\n${ySkew.toFixed(1)}\r\n${xSkew.toFixed(1)}\r\n${toFixed(yScale)}\r\n${toFixed(xOrigin)}\r\n${toFixed(yOrigin)}`);\r\n zip.generateAsync({ type: \"blob\" }).then(function (blob) {\r\n TC.Util.downloadBlob(fileName + \".zip\", blob);\r\n li && li.removeWait(wait);\r\n }, function (err) {\r\n TC.error(self.getLocaleString('dl.export.map.error') + ': ' + err.message);\r\n li && li.removeWait(wait);\r\n });\r\n }, format);\r\n });\r\n }\r\n else {\r\n try {\r\n const res = _canvas.toDataURL(format);\r\n TC.Util.downloadDataURI(fileName + fileExtension, format, res);\r\n } catch (e) {\r\n TC.error(self.getLocaleString('dl.export.map.error') + ': ' + e.message);\r\n }\r\n li && li.removeWait(wait);\r\n }\r\n });\r\n };\r\n\r\n\r\n /*\r\n * Descarga las features de las capas de trabajo actualmente seleccionadas. Comprueba que el número de features a descargar\r\n * no excede el límite impuesto por el servidor.\r\n */\r\n\r\n const downloadFeatures = function (format) {\r\n const li = self.map.getLoadingIndicator();\r\n const wait = li && li.addWait();\r\n\r\n const _filterBuilder = function () {\r\n if (self.map.on3DView) {\r\n return new filter.Within(null, new polygon(self.map.view3D.getFovCoords(self.map.view3D.crs)), self.map.view3D.crs);\r\n }\r\n else {\r\n return new filter.bbox(self.map.getExtent(), self.map.getCRS());\r\n }\r\n }\r\n\r\n const arrPromises = self.map.extractFeatures({\r\n filter: _filterBuilder(),\r\n outputFormat: format,\r\n download: true\r\n });\r\n Promise.all(arrPromises).then(async function (responseArray) {\r\n\r\n var responses = responseArray.filter(item => !!item);\r\n if (responses.length === 0) {\r\n _showAlertMsg({ key: Consts.WFSErrors.NO_LAYERS }, wait);\r\n return;\r\n }\r\n var arrDownloads = [];\r\n for (var i = 0; i < responses.length; i++) {\r\n //errores del WFS\r\n if (responses[i].errors && responses[i].errors.length) {\r\n for (var j = 0; j < responses[i].errors.length; j++) {\r\n var error = responses[i].errors[j];\r\n _showAlertMsg(error, wait);\r\n }\r\n continue;\r\n }\r\n var data = responses[i].data;\r\n var url = responses[i].url;\r\n if (data && url)\r\n arrDownloads.push({ url: url + \"?download=zip\", data: data });\r\n }\r\n try {\r\n await TC.Util.downloadFileForm(arrDownloads);\r\n }\r\n catch (err) {\r\n if (err.key === Consts.DownloadError.MIMETYPE_NOT_SUPORTED) {\r\n const service = responseArray.find(response => response.data === err.data).service;\r\n const params = {\r\n plural: service.layers.length > 1 ? self.getLocaleString(\"dl.format.notSupported.plural\") : \"\",\r\n layerNames: service.layers.reduce(function (vi, va, i, array) {\r\n return (vi instanceof Array ? vi : [vi]).concat([va.title]).join(i < array.length - 1 ? \", \" : \" \" + self.getLocaleString(\"dl.format.notSupported.conjunction\") + \" \");\r\n }, []),\r\n serviceTitle: service.mapLayers[0].title,\r\n format: format\r\n };\r\n self.map.toast(self.getLocaleString(\"dl.format.notSupported\").format(params), { type: Consts.msgType.ERROR });\r\n }\r\n }\r\n\r\n li && li.removeWait(wait);\r\n });\r\n };\r\n\r\n var _download = function () {\r\n var format = '';\r\n if (self._activeElm) {\r\n format = self._activeElm.querySelector('select').value;\r\n }\r\n if (format.indexOf('image') > -1) {\r\n downLoadImage(format);\r\n }\r\n else {\r\n downloadFeatures(format);\r\n }\r\n };\r\n\r\n var _showAlertMsg = function (error, wait) {\r\n const alert = self.div.querySelector('.tc-alert-warning:not(.' + self.CLASS + '-alert)');\r\n var errorMsg;\r\n switch (error.key) {\r\n case Consts.WFSErrors.MAX_NUM_FEATURES:\r\n errorMsg = alert.querySelector(\"#zoom-msg-\" + self.id).innerHTML.format({ serviceName: error.params.serviceTitle });\r\n break;\r\n case Consts.WFSErrors.NO_LAYERS:\r\n errorMsg = self.getLocaleString('noLayersLoaded');\r\n break;\r\n case Consts.WFSErrors.GETCAPABILITIES:\r\n errorMsg = alert.querySelector(\"#novalid-msg-\" + self.id).innerHTML.format({ serviceName: error.params.serviceTitle });\r\n break;\r\n case Consts.WFSErrors.NO_FEATURES:\r\n errorMsg = alert.querySelector(\"#noFeatures-msg-\" + self.id).innerHTML;\r\n break;\r\n case Consts.WFSErrors.INDETERMINATE:\r\n errorMsg = self.getLocaleString(\"wfs.IndeterminateError\");\r\n self.map.toast(errorMsg, { type: Consts.msgType.ERROR });\r\n TC.error(\"Error:{error} \\r\\n Descripcion:{descripcion} \\r\\n Servicio:{serviceName}\".format({ error: error.params.err, descripcion: error.params.errorThrown, serviceName: error.params.serviceTitle }), Consts.msgErrorMode.CONSOLE);\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n return;\r\n default:\r\n errorMsg = self.getLocaleString(\"wfs.\" + error.key, error.params);\r\n break;\r\n }\r\n self.map.toast(errorMsg, { type: Consts.msgType.WARNING });\r\n\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n };\r\n\r\n var _showHelp = function (evt) {\r\n evt.stopPropagation();\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-help-dialog'));\r\n };\r\n\r\n self.div.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('.tc-ctl-download-btn', _download), { passive: true });\r\n self.div.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('.tc-ctl-download-help', _showHelp), { passive: true });\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`.${self.CLASS}-image-qr`, function (e) {\r\n if (e.target.checked) {\r\n self.generateLink();\r\n } else {\r\n self.div.querySelector('.' + self.CLASS + '-alert').classList.add(Consts.classes.HIDDEN);\r\n }\r\n }));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('h2', function (_evt) { \r\n if (!self.registeredListeners) {\r\n self.generateLink();\r\n }\r\n self.registerListeners();\r\n }));\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.manageMaxLengthExceed = function (maxLengthExceed) {\r\n const self = this;\r\n const alert = self.div.querySelector('.' + self.CLASS + '-alert');\r\n const checkboxQR = self.div.querySelector(`.${self.CLASS}-image-qr`);\r\n\r\n checkboxQR.disabled = maxLengthExceed.qr;\r\n\r\n if (checkboxQR.checked) {\r\n alert.classList.toggle(Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n } else {\r\n alert.classList.add(Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.generateLink = async function () {\r\n const self = this;\r\n const checkbox = self.div.querySelector(`.${self.CLASS}-div input.${self.CLASS}-image-qr`);\r\n const label = self.div.querySelector(`label.${self.CLASS}-image-qr-label`);\r\n checkbox.disabled = true;\r\n label.classList.add(Consts.classes.LOADING);\r\n const result = await MapInfo.prototype.generateLink.call(self);\r\n label.classList.remove(Consts.classes.LOADING);\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nTC.control.Download = Download;\r\nexport default Download;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport { Defaults } from '../Cfg';\r\nimport Util from '../Util';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport './FeatureStyler';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.DRAWSTART = 'drawstart.tc';\r\nConsts.event.DRAWEND = 'drawend.tc';\r\nConsts.event.DRAWCANCEL = 'drawcancel.tc';\r\nConsts.event.DRAWUNDO = 'drawundo.tc';\r\nConsts.event.DRAWREDO = 'drawredo.tc';\r\nConsts.event.POINT = 'point.tc';\r\nConsts.event.MEASURE = 'measure.tc';\r\nConsts.event.MEASUREPARTIAL = 'measurepartial.tc';\r\nConsts.event.STYLECHANGE = 'stylechange.tc';\r\nConsts.event.CHANGE = 'change';\r\n\r\nconst className = 'tc-ctl-draw';\r\nconst elementName = 'sitna-draw';\r\n\r\nclass Draw extends WebComponentControl {\r\n CLASS = className;\r\n #classSelector = '.' + className;\r\n #style;\r\n #styler;\r\n #pointClass = className + '-point';\r\n #lineClass = className + '-line';\r\n #polygonClass = className + '-polygon';\r\n #rectangleClass = className + '-rectangle';\r\n #hasOwnLayer;\r\n #layerPromise;\r\n #cancelClick;\r\n #newBtn;\r\n #cancelBtn;\r\n #endBtn;\r\n #undoBtn;\r\n #redoBtn;\r\n #previousStyles = new WeakMap();\r\n\r\n static extensibility = {\r\n DISABLED: 'disabled',\r\n ENABLED: 'enabled',\r\n EXTEND_ONLY: 'extend_only'\r\n };\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n self.styles = self.options.styles || Util.extend(true, {}, Defaults.styles);\r\n self\r\n .initProperty('measurer')\r\n .initProperty('stylable')\r\n .initProperty('singleSketch')\r\n .initProperty('extensibleSketch')\r\n .initProperty('snapping')\r\n .initProperty('mode');\r\n // Si self.options.layer === false se instancia el control sin capa asociada\r\n self.#hasOwnLayer = !(self.options.layer === false);\r\n\r\n self.history = [];\r\n self.historyIndex = 0;\r\n self.exportsState = true;\r\n\r\n self.#layerPromise = null;\r\n\r\n self\r\n .on(Consts.event.DRAWSTART, function (e) {\r\n self.resetValues();\r\n if (e.feature) {\r\n self.history = e.feature.getCoordinates();\r\n self.historyIndex = self.history.length;\r\n }\r\n })\r\n .on(Consts.event.POINT, function (e) {\r\n if (self.layer && self.singleSketch && self.layer.features && self.layer.features.length > 0) {\r\n self.layer.clearFeatures();\r\n }\r\n\r\n self.history.length = self.historyIndex;\r\n self.history[self.historyIndex++] = e.point;\r\n\r\n self.#setDrawState();\r\n })\r\n .on(Consts.event.DRAWEND, function (e) {\r\n self.#setFeatureAddReadyState();\r\n\r\n const featureId = TC.getUID({\r\n prefix: self.getLocaleString('sketch') + '.',\r\n banlist: self.layer.features.map(f => f.getId())\r\n });\r\n e.feature.setId(featureId);\r\n\r\n if (self.callback) {\r\n self.callback(e.feature);\r\n }\r\n });\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n const self = this;\r\n self.#hasOwnLayer = !self.hasAttribute('borrowed-layer');\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['mode', 'stylable'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'stylable') {\r\n self.#onStylableChange();\r\n }\r\n if (name === 'mode') {\r\n self.#onModeChange();\r\n }\r\n }\r\n\r\n getClassName() {\r\n return className;\r\n }\r\n\r\n get mode() {\r\n const self = this;\r\n if (self.hasAttribute('mode')) {\r\n return self.getAttribute('mode');\r\n }\r\n return Consts.geom.POLYLINE;\r\n }\r\n\r\n set mode(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('mode', value);\r\n }\r\n else {\r\n self.removeAttribute('mode');\r\n }\r\n }\r\n\r\n async #onModeChange() {\r\n const self = this;\r\n const mode = self.mode;\r\n await self.renderPromise();\r\n (await self.getStyler()).mode = mode;\r\n }\r\n\r\n get stylable() {\r\n return this.hasAttribute('stylable');\r\n }\r\n\r\n set stylable(value) {\r\n this.toggleAttribute('stylable', !!value);\r\n }\r\n\r\n async #onStylableChange() {\r\n const self = this;\r\n await self.renderPromise();\r\n self.querySelector(`.${self.CLASS}-style`).classList.toggle(Consts.classes.HIDDEN, !self.stylable);\r\n }\r\n\r\n get measurer() {\r\n return this.hasAttribute('measurer');\r\n }\r\n\r\n set measurer(value) {\r\n this.toggleAttribute('measurer', !!value);\r\n }\r\n\r\n get singleSketch() {\r\n return this.hasAttribute('single-sketch');\r\n }\r\n\r\n set singleSketch(value) {\r\n this.toggleAttribute('single-sketch', !!value);\r\n }\r\n\r\n get extensibleSketch() {\r\n return this.hasAttribute('extensible-sketch');\r\n }\r\n\r\n set extensibleSketch(value) {\r\n this.toggleAttribute('extensible-sketch', !!value);\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-draw.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n let strToolTip;\r\n switch (self.mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n strToolTip = self.getLocaleString('drawLine');\r\n self.classList.add(self.#lineClass);\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n strToolTip = self.getLocaleString('drawPolygon');\r\n self.classList.add(self.#polygonClass);\r\n break;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n strToolTip = self.getLocaleString('drawPoint');\r\n self.classList.add(self.#pointClass);\r\n break;\r\n case Consts.geom.RECTANGLE:\r\n strToolTip = self.getLocaleString('drawRectangle');\r\n self.classList.add(self.#rectangleClass);\r\n break;\r\n default:\r\n strToolTip = self.getLocaleString('draw');\r\n break;\r\n }\r\n const renderObject = {\r\n tooltip: strToolTip,\r\n stylable: self.stylable\r\n };\r\n return self._set1stRenderPromise(self.renderData(renderObject, function () {\r\n self.reset = true;\r\n self.callback = null;\r\n self.#cancelClick = false;\r\n\r\n if (Util.isFunction(self.options.callback)) {\r\n self.callback = self.options.callback;\r\n }\r\n\r\n self.wrap = new TC.wrap.control.Draw(self);\r\n\r\n self.getStyler().then(styler => {\r\n styler.setStyles(self.styles);\r\n styler.addEventListener(Consts.event.STYLECHANGE, e => {\r\n self.wrap.setStyle();\r\n const eventData = {};\r\n eventData[e.detail.property] = e.detail.value;\r\n self.trigger(Consts.event.STYLECHANGE, eventData);\r\n });\r\n });\r\n\r\n self.#newBtn = self.querySelector(self.#classSelector + '-btn-new');\r\n self.#newBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.new();\r\n }, { passive: true });\r\n\r\n self.#cancelBtn = self.querySelector(self.#classSelector + '-btn-cancel');\r\n self.#cancelBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.cancel();\r\n }, { passive: true });\r\n\r\n self.#endBtn = self.querySelector(self.#classSelector + '-btn-end');\r\n self.#endBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.end();\r\n }, { passive: true });\r\n\r\n self.#undoBtn = self.querySelector(self.#classSelector + '-btn-undo');\r\n self.#undoBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.undo();\r\n }, { passive: true });\r\n\r\n self.#redoBtn = self.querySelector(self.#classSelector + '-btn-redo');\r\n self.#redoBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.redo();\r\n }, { passive: true });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n self.styles = Util.extend(true, {}, map.options.styles, self.options.styles);\r\n await super.register(map);\r\n\r\n const styler = await self.getStyler();\r\n styler.setStyles(self.styles);\r\n\r\n self.map\r\n .on(Consts.event.VIEWCHANGE, function () {\r\n if (self.map.view === Consts.view.PRINTING) {\r\n self.end();\r\n\r\n // No lanzo el evento porque da error al no llegar una feature\r\n // self.trigger(Consts.event.DRAWEND);\r\n }\r\n })\r\n .on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n self.history.forEach(function (point, idx, arr) {\r\n arr[idx] = Util.reproject(point, e.oldCrs, e.newCrs);\r\n });\r\n });\r\n\r\n self.#layerPromise = new Promise(function (resolve, _reject) {\r\n map.loaded(function () {\r\n if (self.options.layer) {\r\n self.setLayer(self.options.layer);\r\n resolve(self.layer);\r\n }\r\n else {\r\n if (!self.#hasOwnLayer) {\r\n resolve(null);\r\n }\r\n else {\r\n map.addLayer({\r\n id: self.getUID(),\r\n title: 'DrawControl',\r\n stealth: true,\r\n owner: self,\r\n type: Consts.layerType.VECTOR,\r\n styles: {\r\n point: Object.assign({}, self.styles.point),\r\n line: Object.assign({}, self.styles.line),\r\n polygon: Object.assign({}, self.styles.polygon)\r\n }\r\n }).then(function (layer) {\r\n map.putLayerOnTop(layer);\r\n self.setLayer(layer);\r\n resolve(self.layer);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n return self;\r\n }\r\n\r\n new() {\r\n const self = this;\r\n if (self.layer && self.singleSketch) {\r\n self.layer.clearFeatures();\r\n }\r\n self.#cancelBtn.disabled = false;\r\n self.setMode(self.mode, true);\r\n return self;\r\n }\r\n\r\n undo() {\r\n const self = this;\r\n let result = self.wrap.undo();\r\n if (result) {\r\n self.historyIndex--;\r\n self.#setDrawState();\r\n\r\n if (self.historyIndex <= 0) {\r\n self.resetValues();\r\n }\r\n self.trigger(Consts.event.DRAWUNDO);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n redo() {\r\n const self = this;\r\n let result = this.wrap.redo();\r\n if (result) {\r\n self.historyIndex++;\r\n self.#setDrawState();\r\n self.trigger(Consts.event.DRAWREDO);\r\n }\r\n return result;\r\n }\r\n\r\n cancel() {\r\n const self = this;\r\n self.#cancelClick = true;\r\n self.resetValues();\r\n self.#setFeatureAddReadyState();\r\n self.#cancelBtn.disabled = true;\r\n self.trigger(Consts.event.DRAWCANCEL, { ctrl: self });\r\n return self;\r\n }\r\n\r\n activate() {\r\n const self = this;\r\n self.#newBtn.classList.add(Consts.classes.ACTIVE);\r\n self.#cancelBtn.disabled = false;\r\n super.activate.call(self);\r\n self.wrap.activate(self.mode);\r\n self.classList.remove(self.#pointClass, self.#lineClass, self.#polygonClass, self.#rectangleClass);\r\n self.getStyler().then(styler => styler.mode = self.mode);\r\n switch (self.mode) {\r\n case Consts.geom.POINT:\r\n self.classList.add(self.#pointClass);\r\n break;\r\n case Consts.geom.POLYLINE:\r\n self.classList.add(self.#lineClass);\r\n break;\r\n case Consts.geom.POLYGON:\r\n self.classList.add(self.#polygonClass);\r\n break;\r\n case Consts.geom.RECTANGLE:\r\n self.classList.add(self.#rectangleClass);\r\n break;\r\n default:\r\n break;\r\n }\r\n return self;\r\n }\r\n\r\n deactivate() {\r\n const self = this;\r\n if (self.#newBtn) {\r\n self.#newBtn.classList.remove(Consts.classes.ACTIVE);\r\n }\r\n if (self.#cancelBtn) {\r\n self.#cancelBtn.disabled = true;\r\n }\r\n super.deactivate.call(self, !self.#cancelClick);\r\n if (self.wrap) {\r\n self.wrap.deactivate();\r\n }\r\n self.resetValues();\r\n //self.trigger(Consts.event.DRAWCANCEL, { ctrl: self });\r\n self.#cancelClick = false;\r\n return self;\r\n }\r\n\r\n clear() {\r\n const self = this;\r\n if (self.layer) {\r\n self.layer.clearFatures();\r\n }\r\n self.resetValues();\r\n return self;\r\n }\r\n\r\n isExclusive() {\r\n return true;\r\n }\r\n\r\n end() {\r\n const self = this;\r\n self.wrap.end();\r\n self.resetValues();\r\n return self;\r\n }\r\n\r\n setMode(mode, activate) {\r\n const self = this;\r\n\r\n self.mode = mode;\r\n if (activate && mode) {\r\n //if (self.layer) {\r\n //self.layer.map.putLayerOnTop(self.layer);\r\n //}\r\n self.activate();\r\n }\r\n else {\r\n if (self.isActive) {\r\n self.deactivate();\r\n }\r\n }\r\n return self;\r\n }\r\n\r\n setStyle(style) {\r\n const self = this;\r\n style = Util.extend(self.#style, style);\r\n\r\n switch (self.mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n case Consts.geom.RECTANGLE:\r\n self.styles.line = style;\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n self.styles.polygon = style;\r\n break;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n self.styles.point = style;\r\n break;\r\n default:\r\n style = {};\r\n break;\r\n }\r\n self.getStyler().then(styler => {\r\n styler.setStyles(styles);\r\n self.wrap.setStyle();\r\n });\r\n }\r\n\r\n getStyle() {\r\n return this.#styler?.getStyle();\r\n }\r\n\r\n resetStyle() {\r\n const self = this;\r\n self.getStyler().then(styler => styler.resetStyle());\r\n return self;\r\n }\r\n\r\n setStrokeColor(color) {\r\n const self = this;\r\n self.styler.setStrokeColor(color);\r\n return self;\r\n }\r\n\r\n setFillColor(color) {\r\n const self = this;\r\n self.styler.setFillColor(color);\r\n return self;\r\n }\r\n\r\n setFillOpacity(alpha) {\r\n const self = this;\r\n self.styler.setFillOpacityWatch(alpha);\r\n return self;\r\n }\r\n\r\n setStrokeWidth(width) {\r\n const self = this;\r\n self.styler.setStrokeWidth(width);\r\n return self;\r\n }\r\n\r\n #toggleTools(tools, visible) {\r\n if (tools) {\r\n const classToggle = visible !== undefined ? !visible : undefined;\r\n tools.classList.toggle(Consts.classes.HIDDEN, classToggle);\r\n }\r\n }\r\n\r\n toggleStyleTools(visible) {\r\n const self = this;\r\n self.#toggleTools(self.querySelector(`.${self.CLASS}-style`), visible);\r\n return self;\r\n }\r\n\r\n getLayer() {\r\n const self = this;\r\n if (self.layer) {\r\n return Promise.resolve(self.layer);\r\n }\r\n return this.#layerPromise;\r\n }\r\n\r\n setLayer(layer) {\r\n const self = this;\r\n if (self.map) {\r\n if (self.layer) {\r\n self.#previousStyles.set(self.layer, Object.assign({}, self.#style));\r\n }\r\n if (typeof layer === \"string\") {\r\n self.layer = self.map.getLayer(layer);\r\n }\r\n else {\r\n self.layer = layer;\r\n }\r\n\r\n self.getStyler().then(function (styler) {\r\n styler.setLayer(layer);\r\n });\r\n\r\n\r\n //self.styles = {};\r\n //const previousStyle = self.#previousStyles.get(layer);\r\n //if (previousStyle) {\r\n // self.setStyle(previousStyle);\r\n //}\r\n //else {\r\n // const layerStyles = self.layer && self.layer.styles || Cfg.styles;\r\n // Util.extend(true, self.styles, self.options.styles || layerStyles);\r\n // self.resetStyle();\r\n //}\r\n if (!layer && self.isActive) {\r\n self.deactivate();\r\n }\r\n }\r\n return self;\r\n }\r\n\r\n setFeature(feature) {\r\n this.getStyler().then(styler => styler.setFeature(feature));\r\n return self;\r\n }\r\n\r\n resetValues() {\r\n const self = this;\r\n self.history.length = 0;\r\n self.historyIndex = 0;\r\n self.#setDrawState();\r\n return self;\r\n }\r\n\r\n async getStyler() {\r\n const self = this;\r\n await self.renderPromise();\r\n self.#styler = self.querySelector('sitna-feature-styler');\r\n return self.#styler;\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n if (self.exportsState && self.layer) {\r\n return {\r\n id: self.id,\r\n layer: self.layer.exportState()\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n importState(state) {\r\n const self = this;\r\n self.getLayer().then(function (layer) {\r\n layer.importState(state.layer);\r\n });\r\n return self;\r\n }\r\n\r\n async #setDrawState() {\r\n const self = this;\r\n await self.renderPromise();\r\n const mode = self.mode;\r\n self.#endBtn.disabled =\r\n self.historyIndex === 0 ||\r\n mode === Consts.geom.POLYGON && self.historyIndex < 3 ||\r\n mode === Consts.geom.POLYLINE && self.historyIndex < 2 || \r\n mode === Consts.geom.RECTANGLE;\r\n self.#redoBtn.disabled = self.history.length === self.historyIndex;\r\n self.#undoBtn.disabled = self.historyIndex === 0 || self.mode === Consts.geom.RECTANGLE;\r\n }\r\n\r\n\r\n async #setFeatureAddReadyState() {\r\n const self = this;\r\n await self.renderPromise();\r\n self.resetValues();\r\n self.#endBtn.disabled = true;\r\n self.#cancelBtn.disabled = false;\r\n }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, Draw);\r\nTC.control.Draw = Draw;\r\nexport default Draw;","\r\n/**\r\n * Opciones del control de dibujo, medida y modificación de geometrías en el mapa.\r\n * @typedef DrawMeasureModifyOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean|SITNA.ElevationOptions} [displayElevation=false] - Si se establece a un valor verdadero, los puntos dibujados mostrarán la elevación del mapa en las \r\n * coordenadas del punto, y las líneas dibujadas mostrarán un gráfico con su perfil de elevación.\r\n * @property {string} [mode] - Modo de dibujo, es decir, qué tipo de geometría se va a dibujar.\r\n * \r\n * Para establecer el modo hay que darle un valor de [SITNA.Consts.geom]{@link SITNA.Consts}. Este control tiene tres modos:\r\n * punto, línea y polígono, correspondientes con los valores [SITNA.Consts.geom.POINT]{@link SITNA.Consts},\r\n * [SITNA.Consts.geom.POLYLINE]{@link SITNA.Consts} y [SITNA.Consts.geom.POLYGON]{@link SITNA.Consts}.\r\n * \r\n * Si esta opción no se especifica, se mostrarán los tres modos en tres pestañas de la interfaz de usuario del control.\r\n * @example [Ver en vivo](../examples/cfg.DrawMeasureModifyOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Measure from './Measure';\r\nimport './Modify';\r\nimport './Measurement';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\n\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst DrawMeasureModify = function () {\r\n var self = this;\r\n\r\n Measure.apply(self, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n const cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]',\r\n MODE_RADIO_BUTTON: `input[type=radio][name=\"${self.id}-mode\"]`\r\n };\r\n\r\n self.persistentDrawControls = true;\r\n\r\n self.renderPromise().then(function () {\r\n self._1stCoordText = self.div.querySelector('.tc-ctl-meas-val-coord-1-t');\r\n self._2ndCoordText = self.div.querySelector('.tc-ctl-meas-val-coord-2-t');\r\n self._1stCoordValue = self.div.querySelector('.tc-ctl-meas-val-coord-1-v');\r\n self._2ndCoordValue = self.div.querySelector('.tc-ctl-meas-val-coord-2-v');\r\n self._elevationText = self.div.querySelector('.tc-ctl-meas-val-coord-ele-t');\r\n self._elevationValue = self.div.querySelector('.tc-ctl-meas-val-coord-ele-v');\r\n });\r\n\r\n};\r\n\r\nTC.inherit(DrawMeasureModify, Measure);\r\n\r\n(function () {\r\n var ctlProto = DrawMeasureModify.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-dmm';\r\n\r\n Consts.event.RESULTSPANELCLOSE = Consts.event.RESULTSPANELCLOSE || 'resultspanelclose.tc';\r\n Consts.event.FEATURESSELECT = Consts.event.FEATURESSELECT || \"featuresselect.tc\";\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-dmm.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const promise = self._set1stRenderPromise(Measure.prototype.render.call(self, function () {\r\n self.pointMeasurementControl = self.div.querySelector('sitna-measurement[mode=\"point\"]');\r\n self.pointMeasurementControl.containerControl = self;\r\n self._clearBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-clr');\r\n self._clearBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n TC.confirm(self.getLocaleString('deleteAll.confirm'), function () {\r\n self.clear();\r\n cancelDraw.apply(self);\r\n });\r\n }, { passive: true });\r\n self._downloadBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-dl');\r\n self._downloadBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.showSketchDownloadDialog();\r\n }, { passive: true });\r\n\r\n const showHideBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n showHideBtn.addEventListener(Consts.event.CLICK, function (e) {\r\n const visibility = !e.target.classList.contains(Consts.classes.ACTIVE);\r\n self.drawControls.forEach(function (dv) {\r\n dv.layer.setVisibility(visibility);\r\n if (dv.isActive)\r\n dv.wrap.setVisibility(visibility);\r\n });\r\n e.target.title = self.getLocaleString(visibility ? \"hideSketch\":\"showSketch\");\r\n e.target.classList.toggle(Consts.classes.ACTIVE);\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n \r\n return promise;\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n await Measure.prototype.register.call(self, map);\r\n const modifyId = self.getUID();\r\n const pointDrawControlId = self.getUID();\r\n\r\n const objects = await Promise.all([self.layerPromise, self.renderPromise(), self.getElevationTool()]);\r\n const layer = objects[0];\r\n self.elevationProfileActive = !!objects[2];\r\n if (layer) {\r\n layer.title = self.getLocaleString('sketch');\r\n }\r\n\r\n const modify = await self.getModifyControl();\r\n self.modify = modify;\r\n modify.containerControl = self;\r\n modify.id = modifyId;\r\n modify.snapping = self.snapping;\r\n modify.setLayer(layer);\r\n modify\r\n .on(Consts.event.FEATURESSELECT, function (e) {\r\n const feature = e.features[e.features.length - 1];\r\n self.displayFeatureMode(feature);\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel && !e.features.some(function (feature) {\r\n return ctl.resultsPanel.currentFeature === feature;\r\n })) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n });\r\n })\r\n .on(Consts.event.FEATURESUNSELECT, function (_e) {\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n })\r\n .on(Consts.event.FEATUREMODIFY, function (e) {\r\n if (e.layer === self.layer) {\r\n const setMeasures = function (feature) {\r\n const measureData = self.getFeatureMeasurementData(feature);\r\n self.displayMeasurements(measureData);\r\n self.setFeatureMeasurementData(feature);\r\n };\r\n setMeasures(e.feature);\r\n\r\n // Si es un punto metemos la elevación en la geometría (porque la mostramos en las medidas)\r\n if (e.feature instanceof Point) {\r\n self.getElevationTool().then(function (tool) {\r\n if (tool) {\r\n tool\r\n .setGeometry({\r\n features: [e.feature],\r\n crs: self.map.getCRS()\r\n })\r\n .then(\r\n function (features) {\r\n setMeasures(features[0]);\r\n },\r\n function (e) {\r\n console.warn(e.message);\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n const popups = self.map.getControlsByClass('TC.control.Popup');\r\n popups.forEach(function (pu) {\r\n if (pu.currentFeature === e.feature && pu.isVisible()) {\r\n pu.hide();\r\n }\r\n });\r\n }\r\n });\r\n\r\n map\r\n .on(Consts.event.CONTROLDEACTIVATE, function (e) {\r\n const control = e.control;\r\n if (control === self.modify || control === self.lineDrawControl) {\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n if (control === self.modify) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n }\r\n })\r\n .on(Consts.event.POPUP + ' ' + Consts.event.DRAWTABLE, function (e) {\r\n // En líneas queremos mostrar el perfil en vez del popup\r\n const feature = e.control.currentFeature;\r\n if (feature instanceof Polyline && self.layer.features.indexOf(feature) >= 0) {\r\n if (self.elevationProfileActive) {\r\n e.control.hide();\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.setCurrentFeature(feature);\r\n if (ctl.resultsPanel.isMinimized()) {\r\n ctl.resultsPanel.maximize();\r\n }\r\n }\r\n ctl.displayElevationProfile(feature);\r\n });\r\n }\r\n }\r\n })\r\n .on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (self.elevationChartData) {\r\n self.elevationChartData.coords = TC.Util.reproject(self.elevationChartData.coords, e.oldCrs, e.newCrs);\r\n }\r\n });\r\n\r\n\r\n const lineDrawControl = await self.getLineDrawControl();\r\n lineDrawControl\r\n .on(Consts.event.DRAWSTART, function () {\r\n //self.resetElevationProfile();\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel && ctl.resultsPanel.currentFeature) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n self.resetValues();\r\n });\r\n //beginDraw.apply(self);\r\n })\r\n .on(Consts.event.DRAWUNDO + ' ' + Consts.event.DRAWREDO, function () {\r\n const lineDrawControl = this;\r\n self.getElevationControl().then(function (ctl) {\r\n if (self.elevationProfileActive) {\r\n if (lineDrawControl.historyIndex) {\r\n ctl.displayElevationProfile(lineDrawControl.history.slice(0, lineDrawControl.historyIndex));\r\n }\r\n else {\r\n ctl.closeElevationProfile();\r\n }\r\n }\r\n });\r\n cancelDraw.apply(self);\r\n })\r\n .on(Consts.event.DRAWEND, function (e) {\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.currentFeature = e.feature;\r\n }\r\n });\r\n })\r\n .on(Consts.event.POINT, function (e) {\r\n const lineDrawControl = this;\r\n const coords = lineDrawControl.history.slice(0, lineDrawControl.historyIndex);\r\n const lastCoord = coords[coords.length - 1];\r\n if (lastCoord[0] !== e.point[0] || lastCoord[1] !== e.point[1]) {\r\n coords.push(e.point);\r\n\r\n }\r\n self.getElevationControl().then(function (ctl) {\r\n if (self.elevationProfileActive) {\r\n if (navigator.onLine) {\r\n ctl.displayElevationProfile(coords);\r\n }\r\n else {\r\n ctl.closeElevationProfile();\r\n }\r\n }\r\n });\r\n if (e.target.historyIndex === 1)\r\n beginDraw.apply(self);\r\n })\r\n .on(Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n }).on(Consts.event.DRAWCANCEL, function () {\r\n cancelDraw.apply(self);\r\n });\r\n\r\n const polygonDrawControl = await self.getPolygonDrawControl();\r\n polygonDrawControl\r\n .on(Consts.event.DRAWSTART, function () {\r\n self.resetValues();\r\n //beginDraw.apply(self);\r\n })\r\n .on(Consts.event.POINT, function (e) {\r\n if (e.target.historyIndex === 1)\r\n beginDraw.apply(self);\r\n })\r\n //.on(Consts.event.DRAWEND, function (e) {\r\n // self.getElevationTool().then(function (tool) {\r\n // if (tool) {\r\n // tool.setGeometry({\r\n // features: [e.feature],\r\n // crs: self.map.crs\r\n // });\r\n // }\r\n // }\r\n //})\r\n .on(Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n })\r\n .on(Consts.event.DRAWCANCEL + ' ' + Consts.event.DRAWUNDO, function () {\r\n cancelDraw.apply(self);\r\n });\r\n\r\n const pointDrawControl = await self.getPointDrawControl();\r\n\r\n pointDrawControl.containerControl = self;\r\n pointDrawControl.id = pointDrawControlId;\r\n pointDrawControl.snapping = self.snapping;\r\n pointDrawControl.setLayer(self.layer);\r\n self.drawControls.push(pointDrawControl);\r\n self.pointDrawControl = pointDrawControl;\r\n\r\n self.resetValues();\r\n\r\n pointDrawControl\r\n .on(Consts.event.DRAWEND, function (e) {\r\n const updateChanges = function (feat) {\r\n self.displayMeasurements({ coordinates: feat.geometry, units: map.wrap.isGeo() || map.on3DView ? 'degrees' : 'm' });\r\n self.setFeatureMeasurementData(feat);\r\n };\r\n updateChanges(e.feature);\r\n self.getElevationTool().then(function (tool) {\r\n if (tool) {\r\n tool.setGeometry({\r\n features: [e.feature],\r\n crs: self.map.getCRS()\r\n }).then(function (features) {\r\n updateChanges(features[0]);\r\n }, function (e) {\r\n console.log(e.message);\r\n });\r\n }\r\n });\r\n beginDraw.apply(self);\r\n })\r\n .on(Consts.event.DRAWCANCEL, function (_e) {\r\n // Alerta de condición de carrera si no ponemos un timeout:\r\n // 1- Se llama a cancel de un control Draw.\r\n // 2- Se llama a deactivate (como es mediante cancel, no se se corta la cadena de activación controles).\r\n // 3- Si el control activo anterior era otro de los modos de dibujo de Measure, se activa.\r\n // 4- Se llama a cancel desde aquí.\r\n // 5- Se llama a deactivate del control que acabamos de activar en 3.\r\n // El activate de 3 y el deactivate de 5 sobre el mismo control entran en condición de carrera al crear/destruir la interaction\r\n // por tanto se puede quedar en un estado inconsistente. Para evitar eso, separamos 3 de 5 por el siguiente timeout.\r\n setTimeout(function () {\r\n self.cancel();\r\n }, 100);\r\n cancelDraw.apply(self);\r\n })\r\n .on(Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n });\r\n // Desactivamos el método exportState que ya se encarga el control padre de ello\r\n pointDrawControl.exportsState = false;\r\n\r\n self._elevationControlPromise = map.addControl('elevation', self.options.displayElevation);\r\n\r\n self.setMode(self.options.mode);\r\n\r\n map\r\n .on(Consts.event.FEATUREADD, function (e) {\r\n const layer = e.layer;\r\n const feature = e.feature;\r\n if (layer === self.layer) {\r\n self.setFeatureMeasurementData(feature);\r\n\r\n self.getModifyControl().then(function (modify) {\r\n modify.displayLabelText(feature.getStyle().label);\r\n });\r\n self._clearBtn.disabled = false;\r\n self._downloadBtn.disabled = false;\r\n }\r\n })\r\n .on(Consts.event.FEATUREREMOVE + ' ' + Consts.event.FEATURESCLEAR, function (e) {\r\n const layer = e.layer;\r\n if (layer === self.layer) {\r\n if (self.layer.features.length === 0) {\r\n self._clearBtn.disabled = true;\r\n self._downloadBtn.disabled = true;\r\n self.resetValues();\r\n cancelDraw.apply(self);\r\n }\r\n }\r\n })\r\n .on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl === e.control) {\r\n ctl.setCurrentFeature(null);\r\n }\r\n });\r\n });\r\n\r\n return self;\r\n };\r\n\r\n ctlProto.displayMode = function (mode) {\r\n const self = this;\r\n if (mode === Consts.geom.POINT) {\r\n self._activeMode = self.div.querySelector('.tc-ctl-meas-pt');\r\n }\r\n if (self.modify) {\r\n self.modify.div.classList.remove(Consts.classes.COLLAPSED);\r\n }\r\n return Measure.prototype.displayMode.call(self, mode);\r\n };\r\n\r\n ctlProto.displayFeatureMode = function (feature) {\r\n const self = this;\r\n if (feature) {\r\n self.displayMeasurements(self.getFeatureMeasurementData(feature));\r\n switch (true) {\r\n case feature instanceof Polygon:\r\n case feature instanceof MultiPolygon:\r\n self.displayMode(Consts.geom.POLYGON);\r\n self.polygonDrawControl.setFeature(feature);\r\n break;\r\n case feature instanceof Polyline:\r\n case feature instanceof MultiPolyline:\r\n self.displayMode(Consts.geom.POLYLINE);\r\n self.lineDrawControl.setFeature(feature);\r\n if (self.elevationProfileActive) {\r\n self.getElevationControl().then(ctl => ctl.displayElevationProfile(feature));\r\n }\r\n break;\r\n case feature instanceof Point:\r\n case feature instanceof MultiPoint:\r\n self.displayMode(Consts.geom.POINT);\r\n self.pointDrawControl.setFeature(feature);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n ctlProto.setMode = function (mode) {\r\n const self = this;\r\n if (mode === Consts.geom.POINT) {\r\n self.getPointDrawControl().then(function (ctl) {\r\n ctl.activate();\r\n Measure.prototype.setMode.call(self, mode);\r\n cancelDraw.apply(self);\r\n });\r\n }\r\n else {\r\n Measure.prototype.setMode.call(self, mode);\r\n cancelDraw.apply(self); \r\n }\r\n \r\n };\r\n\r\n ctlProto.constrainModes = function (modes) {\r\n const self = this;\r\n if (!Array.isArray(modes)) {\r\n modes = [];\r\n }\r\n if (modes.indexOf(self.mode) < 0) {\r\n self.setMode(null);\r\n }\r\n const selector = modes.map(m => `[value=${m}]`).join() || '[value]';\r\n self.div.querySelectorAll(self._selectors.MODE_RADIO_BUTTON).forEach(function (rb) {\r\n rb.disabled = !rb.matches(selector);\r\n });\r\n };\r\n\r\n ctlProto.setLayer = async function (layer) {\r\n const self = this;\r\n await Measure.prototype.setLayer.call(self, layer);\r\n for await (const control of [self.getPointDrawControl(), self.getModifyControl()]) {\r\n control.setLayer(self.layer);\r\n }\r\n if (self.layer?.features.length) {\r\n self.displayFeatureMode(self.layer.features[0]);\r\n }\r\n };\r\n\r\n ctlProto.setFeatureMeasurementData = function (feature) {\r\n const self = this;\r\n switch (self.mode) {\r\n case Consts.geom.POINT:\r\n self.pointMeasurementControl.setFeatureMeasurementData(feature);\r\n break;\r\n case Consts.geom.POLYLINE:\r\n self.lineMeasurementControl.setFeatureMeasurementData(feature);\r\n break;\r\n case Consts.geom.POLYGON:\r\n self.polygonMeasurementControl.setFeatureMeasurementData(feature);\r\n break;\r\n default:\r\n break;\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getFeatureMeasurementData = function (feature) {\r\n const self = this;\r\n const result = {\r\n units: self.map.wrap.isGeo() || self.map.on3DView ? 'degree' : 'm'\r\n };\r\n const measureOptions = {\r\n crs: self.map.options.utmCrs\r\n };\r\n switch (true) {\r\n case feature instanceof Polygon:\r\n case feature instanceof MultiPolygon:\r\n result.area = feature.getArea(measureOptions);\r\n result.perimeter = feature.getLength(measureOptions);\r\n break;\r\n case feature instanceof Polyline:\r\n case feature instanceof MultiPolyline:\r\n result.length = feature.getLength(measureOptions);\r\n self.getElevationControl().then(ctl => {\r\n if (self.elevationProfileActive) {\r\n ctl.displayElevationProfile(feature);\r\n }\r\n });\r\n break;\r\n case feature instanceof Point:\r\n result.coordinates = feature.geometry;\r\n break;\r\n default:\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getPointMeasurementControl = async function () {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.div.querySelector('sitna-measurement[mode=\"point\"]');\r\n };\r\n\r\n ctlProto.displayMeasurements = function (options) {\r\n const self = this;\r\n Measure.prototype.displayMeasurements.call(self, options);\r\n options = options || {};\r\n if (options.coordinates) {\r\n self.pointMeasurementControl.displayMeasurement(options);\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.resetValues = function () {\r\n const self = this;\r\n Measure.prototype.resetValues.call(self);\r\n self.getPointMeasurementControl().then(ctl => ctl.clearMeasurement());\r\n return self;\r\n };\r\n\r\n ctlProto.clear = function () {\r\n const self = this;\r\n self.resetValues();\r\n self.layer.clearFeatures();\r\n if (self.modify.isActive) {\r\n self.modify.deactivate();\r\n }\r\n if (self.options.displayElevation) {\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n }\r\n self._clearBtn.disabled = true;\r\n self._downloadBtn.disabled = true;\r\n return self;\r\n };\r\n\r\n ctlProto.showSketchDownloadDialog = function (_options) {\r\n const self = this;\r\n\r\n self.getDownloadDialog().then(function (control) {\r\n var options = {\r\n title: self.getLocaleString(\"downloadSketch\"),\r\n fileName: self.getLocaleString('sketch').toLowerCase().replace(' ', '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true)\r\n };\r\n //si el control tiene su propia configuración de elevacion la pasamos para que sobrescriba a la del mapa\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n control.open(self.layer.features, options);\r\n \r\n });\r\n return self;\r\n \r\n };\r\n\r\n ctlProto.onStyleChange = function (e) {\r\n const self = this;\r\n var featureCtor;\r\n switch (e.target.mode) {\r\n case Consts.geom.POLYGON:\r\n featureCtor = Polygon;\r\n break;\r\n case Consts.geom.POLYLINE:\r\n featureCtor = Polyline;\r\n break;\r\n case Consts.geom.POINT:\r\n featureCtor = Point;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (featureCtor) {\r\n self.modify.getSelectedFeatures().forEach(function (feature) {\r\n if (feature instanceof featureCtor) {\r\n const styleOptions = {};\r\n if (e.strokeWidth)\r\n styleOptions[\"strokeWidth\"] = e.strokeWidth;\r\n if (e.strokeColor)\r\n styleOptions[\"strokeColor\"] = e.strokeColor;\r\n if (e.fillColor)\r\n styleOptions[\"fillColor\"] = e.fillColor;\r\n if (e.fillOpacity)\r\n styleOptions[\"fillOpacity\"] = e.fillOpacity;\r\n if (e.fontColor)\r\n styleOptions[\"fontColor\"] = e.fontColor;\r\n if (e.fontSize)\r\n styleOptions[\"fontSize\"] = e.fontSize;\r\n if (e.labelOutlineColor)\r\n styleOptions[\"labelOutlineColor\"] = e.labelOutlineColor;\r\n if (e.labelOutlineWidth)\r\n styleOptions[\"labelOutlineWidth\"] = e.labelOutlineWidth;\r\n\r\n //feature._originalStyle[e.property] = e.value;\r\n feature.setStyle(styleOptions);\r\n //clearTimeout(feature._selectionStyleTimeout);\r\n //feature._selectionStyleTimeout = setTimeout(function () {\r\n // feature.setStyle(self.modify.styleFunction(feature));\r\n //}, self.options.styleChangeDisplayTimeout || 1000);\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctlProto.activateElevationProfile = async function () {\r\n const self = this;\r\n self.elevationProfileActive = true;\r\n var profileDrawn = false;\r\n const elevationControl = await self.getElevationControl();\r\n if (self.lineDrawControl.historyIndex > 1) {\r\n elevationControl.displayElevationProfile(self.lineDrawControl.history.slice(0, self.lineDrawControl.historyIndex));\r\n profileDrawn = true;\r\n }\r\n else {\r\n const features = self.modify.getActiveFeatures().filter(function (feat) {\r\n return feat instanceof Polyline;\r\n });\r\n if (features.length) {\r\n const feature = features[features.length - 1];\r\n elevationControl.displayElevationProfile(feature.geometry);\r\n profileDrawn = true;\r\n }\r\n }\r\n if (!profileDrawn) {\r\n elevationControl.resetElevationProfile();\r\n }\r\n if (elevationControl.resultsPanel) {\r\n elevationControl.resultsPanel.show();\r\n }\r\n };\r\n\r\n ctlProto.deactivateElevationProfile = async function () {\r\n const self = this;\r\n self.elevationProfileActive = false;\r\n const elevationControl = await self.getElevationControl();\r\n elevationControl.resetElevationProfile();\r\n if (elevationControl.resultsPanel) {\r\n elevationControl.resultsPanel.close();\r\n }\r\n };\r\n\r\n ctlProto.resetElevationProfile = function () {\r\n const self = this;\r\n if (self.options.displayElevation && self.resultsPanelChart) {\r\n self.elevationChartData = {\r\n x: [0],\r\n ele: [0],\r\n coords: [0, 0, 0],\r\n upHill: 0,\r\n downHill: 0\r\n };\r\n self.resultsPanelChart.openChart(self.elevationChartData);\r\n }\r\n };\r\n\r\n ctlProto.getElevationControl = function () {\r\n return this._elevationControlPromise;\r\n };\r\n\r\n ctlProto.getPointDrawControl = async function () {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.div.querySelector('.' + Measure.prototype.CLASS + '-pt sitna-draw');\r\n };\r\n\r\n ctlProto.getModifyControl = async function () {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.div.querySelector('.' + self.CLASS + '-mod sitna-modify');\r\n };\r\n\r\n const beginDraw = function () {\r\n const self = this;\r\n const showHideBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n if (showHideBtn) showHideBtn.disabled = false;\r\n };\r\n\r\n const cancelDraw = function () {\r\n const self = this;\r\n const showHideBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n if (showHideBtn) {\r\n const layerPromises = this.drawControls.reduce(function (i, a) { return i.concat([a.getLayer()]) }, []);\r\n Promise.all(layerPromises).then(function () {\r\n showHideBtn.disabled = !self.drawControls.some(dc => dc.layer.features.length || (dc.isActive && dc.historyIndex > 0));\r\n showHideBtn.classList.add(Consts.classes.ACTIVE);\r\n showHideBtn.title = self.getLocaleString(\"hideSketch\");\r\n });\r\n }\r\n };\r\n\r\n})();\r\n\r\nTC.control.DrawMeasureModify = DrawMeasureModify;\r\nexport default DrawMeasureModify;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Util from '../Util';\r\nimport wrap from '../ol/ol';\r\nimport './Draw';\r\nimport './Modify';\r\nimport './Measurement';\r\nimport Geometry from '../Geometry';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\nimport WebComponentControl from './WebComponentControl';\r\n\r\nTC.wrap = wrap;\r\n\r\nconst className = 'tc-ctl-edit';\r\nconst elementName = 'sitna-edit';\r\n\r\nclass Edit extends WebComponentControl {\r\n CLASS = className;\r\n #classSelector;\r\n #selectors;\r\n #previousActiveControl;\r\n #featureImportPanelPromise;\r\n #highlightsLayerPromise;\r\n #measurementControl;\r\n #originalFeatures = new WeakMap();\r\n\r\n static mode = {\r\n MODIFY: 'modify',\r\n ADDPOINT: 'addpoint',\r\n ADDLINE: 'addline',\r\n ADDPOLYGON: 'addpolygon',\r\n CUT: 'cut',\r\n OTHER: 'other'\r\n };\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n self.#classSelector = '.' + self.CLASS;\r\n\r\n self.#selectors = {\r\n MODE_TAB: `.${self.CLASS}-mode sitna-tab`\r\n };\r\n\r\n self.mode = self.options.mode \r\n self\r\n .initProperty('stylable')\r\n .initProperty('snapping')\r\n .initProperty('mode')\r\n .initProperty('otherToolsIncluded');\r\n self.wrap = new TC.wrap.control.Edit(self);\r\n self.layer = null;\r\n //self.feature = self.options.feature ? self.options.feature : null;\r\n self.callback = Util.isFunction(arguments[2]) ? arguments[2] : (self.options.callback ? self.options.callback : null);\r\n self.cancelActionConfirmTxt = self.options.cancelText ? self.options.eraseText : \"Si continua todos los cambios se perderán. ¿Desea continuar?\";\r\n self.layersEditData = {};\r\n self.pointDrawControl = null;\r\n self.lineDrawControl = null;\r\n self.polygonDrawControl = null;\r\n //self.cutDrawControl = null;\r\n self.modifyControl = null;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['mode', 'stylable'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'stylable') {\r\n self.#onStylableChange();\r\n }\r\n if (name === 'mode') {\r\n self.#onModeChange();\r\n }\r\n if (name == 'snapping') {\r\n self.#onSnappingChange();\r\n }\r\n }\r\n\r\n getClassName() {\r\n return className;\r\n }\r\n\r\n get stylable() {\r\n return this.hasAttribute('stylable');\r\n }\r\n\r\n set stylable(value) {\r\n this.toggleAttribute('stylable', !!value);\r\n }\r\n\r\n async #onStylableChange() {\r\n const self = this;\r\n const controls = await Promise.all([\r\n self.getModifyControl(),\r\n self.getPointDrawControl(),\r\n self.getLineDrawControl(),\r\n self.getPolygonDrawControl()\r\n ]);\r\n const isStylable = self.stylable;\r\n controls.forEach(c => c.stylable = isStylable);\r\n }\r\n\r\n get snapping() {\r\n return this.hasAttribute('snapping');\r\n }\r\n\r\n set snapping(value) {\r\n this.toggleAttribute('snapping', !!value);\r\n }\r\n\r\n async #onSnappingChange() {\r\n const self = this;\r\n const snapping = self.snapping;\r\n (await self.getPointDrawControl()).snapping = snapping;\r\n (await self.getLineDrawControl()).snapping = snapping;\r\n (await self.getPolygonDrawControl()).snapping = snapping;\r\n }\r\n\r\n get mode() {\r\n const self = this;\r\n if (self.hasAttribute('mode')) {\r\n return self.getAttribute('mode');\r\n }\r\n return Edit.mode.MODIFY;\r\n }\r\n\r\n set mode(value) {\r\n this.setAttribute('mode', value || '');\r\n }\r\n\r\n get otherToolsIncluded() {\r\n const self = this;\r\n return !self.hasAttribute('no-other-tools');\r\n }\r\n\r\n set otherToolsIncluded(value) {\r\n this.toggleAttribute('no-other-tools', !value);\r\n }\r\n\r\n #onModeChange() {\r\n const self = this;\r\n const mode = self.mode;\r\n //setFeatureSelectReadyState(self);\r\n\r\n var activateDraw = function (draw) {\r\n if (draw) {\r\n if (self.snapping) {\r\n draw.snapping = self.layer;\r\n }\r\n draw.activate();\r\n }\r\n };\r\n\r\n Promise.all([\r\n self.getPointDrawControl(),\r\n self.getLineDrawControl(),\r\n self.getPolygonDrawControl(),\r\n //self._cutDrawCtlPromise,\r\n self.getModifyControl()\r\n ]).then(function (controls) {\r\n const pointDrawControl = controls[0];\r\n const lineDrawControl = controls[1];\r\n const polygonDrawControl = controls[2];\r\n //const cutDrawControl = controls[3];\r\n const modifyControl = controls[3];\r\n switch (mode) {\r\n case Edit.mode.MODIFY:\r\n modifyControl.activate();\r\n break;\r\n case Edit.mode.ADDPOINT:\r\n activateDraw(pointDrawControl);\r\n self.#measurementControl.mode = Consts.geom.POINT;\r\n break;\r\n case Edit.mode.ADDLINE:\r\n activateDraw(lineDrawControl);\r\n self.#measurementControl.mode = Consts.geom.POLYLINE;\r\n break;\r\n case Edit.mode.ADDPOLYGON:\r\n activateDraw(polygonDrawControl);\r\n self.#measurementControl.mode = Consts.geom.POLYGON;\r\n break;\r\n case Edit.mode.OTHER:\r\n if (controls.indexOf(self.map.activeControl) >= 0) {\r\n self.map.activeControl.deactivate();\r\n }\r\n break;\r\n default:\r\n if (controls.indexOf(self.map.activeControl) >= 0) {\r\n self.map.activeControl.deactivate();\r\n }\r\n //if (cutDrawControl.isActive) {\r\n // cutDrawControl.deactivate();\r\n //}\r\n break;\r\n }\r\n\r\n if (mode) {\r\n const tab = self.querySelector(`${self.#selectors.MODE_TAB}[for=\"${self.id}-mode-${mode}\"]`);\r\n tab.selected = true;\r\n }\r\n else {\r\n self.querySelectorAll(self.#selectors.MODE_TAB).forEach(function (tab) {\r\n tab.selected = false;\r\n });\r\n }\r\n });\r\n }\r\n\r\n /* Extendemos el método register. \r\n La lógica del control suele definirse aquí. */\r\n async register(map) {\r\n const self = this;\r\n\r\n await super.register.call(self, map);\r\n\r\n self.#measurementControl = self.querySelector('sitna-measurement');\r\n self.#measurementControl.displayElevation = self.options.displayElevation;\r\n\r\n //self._cutDrawCtlPromise = map.addControl(DRAW, {\r\n // id: self.getUID(),\r\n // div: self.querySelector(`.${self.CLASS}-cut`),\r\n // mode: Consts.geom.POLYLINE,\r\n // snapping: true,\r\n // styles: {\r\n // line: {\r\n // lineDash: [5, 5]\r\n // }\r\n // },\r\n // layer: false\r\n //});\r\n\r\n\r\n if (Array.isArray(self.options.modes) && self.options.modes.length == 1) {\r\n self.mode = self.options.modes[0];\r\n }\r\n\r\n map.loaded(function () {\r\n self.setLayer(self.options.layer);\r\n });\r\n\r\n map\r\n .on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === self.featureImportPanel) {\r\n self.featuresToImport = [];\r\n self.getHighlightsLayer().then(l => l.clearFeatures());\r\n }\r\n })\r\n .on(Consts.event.LAYERREMOVE + ' ' + Consts.event.FEATURESCLEAR, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n self.getHighlightsLayer().then(function (hlLayer) {\r\n for (let i = self.featuresToImport.length - 1; i >= 0; i--) {\r\n const fti = self.featuresToImport[i];\r\n if (fti.layer === e.layer || (fti.original && fti.original.layer === e.layer)) {\r\n self.featuresToImport.splice(i, 1);\r\n hlLayer.removeFeature(fti);\r\n }\r\n }\r\n const li = self.featureImportPanel.getInfoContainer().querySelector(`li[data-layer-id=\"${e.layer.id}\"]`);\r\n if (li) {\r\n li.remove();\r\n }\r\n });\r\n }\r\n })\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n self.getHighlightsLayer().then(function (hlLayer) {\r\n for (var i = 0, ii = self.featuresToImport.length; i < ii; i++) {\r\n const fti = self.featuresToImport[i];\r\n if (fti === e.feature || fti.original === e.feature) {\r\n self.featuresToImport.splice(i, 1);\r\n hlLayer.removeFeature(fti);\r\n const lli = self.featureImportPanel.getInfoContainer().querySelector(`li[data-layer-id=\"${e.layer.id}\"]`);\r\n if (lli) {\r\n const fli = lli.querySelector(`#tc-ctl-edit-import-list-cb-${e.layer.id}-${e.feature.id}`);\r\n if (fli) {\r\n fli.remove();\r\n }\r\n if (!lli.children.length) {\r\n lli.remove();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n })\r\n .on(Consts.event.LAYERUPDATE, function (e) { // TODO: Actualizar cuando la capa ya existe en la lista\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n const layerObj = self.getAvailableFeaturesToImport().find(l => l.id === e.layer.id);\r\n if (layerObj) {\r\n self.getRenderedHtml(self.CLASS + '-import-layer', layerObj, function (html) {\r\n const list = self\r\n .featureImportPanel\r\n .getInfoContainer()\r\n .querySelector(`.${self.CLASS}-import-list .tc-layers`);\r\n if (!list.querySelector(`li[data-layer-id=\"${e.layer.id}\"]`)) {\r\n list.insertAdjacentHTML('beforeend', html);\r\n }\r\n });\r\n }\r\n }\r\n })\r\n .on(Consts.event.FEATUREADD + ' ' + Consts.event.FEATURESADD, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n const layer = e.layer;\r\n const features = (e.feature ? [e.feature] : e.features).filter(f => self.isFeatureAllowed(f));\r\n if (features.length) {\r\n self.displayLayerToImport({\r\n id: layer.id,\r\n title: layer.title,\r\n features: features\r\n });\r\n }\r\n }\r\n })\r\n .on(Consts.event.CONTROLACTIVATE, function (e) {\r\n switch (e.control) {\r\n case self.pointDrawControl:\r\n self.#measurementControl.setMode(Consts.geom.POINT);\r\n break;\r\n case self.lineDrawControl:\r\n self.#measurementControl.setMode(Consts.geom.POLYLINE);\r\n break;\r\n case self.polygonDrawControl:\r\n self.#measurementControl.setMode(Consts.geom.POLYGON);\r\n break;\r\n default:\r\n self.#measurementControl.clear();\r\n break;\r\n }\r\n });\r\n return self;\r\n }\r\n\r\n #getModeTab(mode) {\r\n const self = this;\r\n return self.querySelector(`sitna-tab[for=\"${self.id}-mode-${mode}\"]`);\r\n }\r\n\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n\r\n const mainTemplatePromise = import('../templates/tc-ctl-edit.mjs');\r\n const attributesTemplatePromise = import('../templates/tc-ctl-edit-attr.mjs');\r\n const importTemplatePromise = import('../templates/tc-ctl-edit-import.mjs');\r\n const importLayerTemplatePromise = import('../templates/tc-ctl-edit-import-layer.mjs');\r\n const importFeatureTemplatePromise = import('../templates/tc-ctl-edit-import-feature.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-attr'] = (await attributesTemplatePromise).default;\r\n template[self.CLASS + '-import'] = (await importTemplatePromise).default;\r\n template[self.CLASS + '-import-layer'] = (await importLayerTemplatePromise).default;\r\n template[self.CLASS + '-import-feature'] = (await importFeatureTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n await self._set1stRenderPromise(super.renderData.call(self, {\r\n controlId: self.id,\r\n stylable: self.stylable,\r\n snapping: self.snapping,\r\n otherToolsIncluded: self.otherToolsIncluded\r\n }));\r\n\r\n const controls = await Promise.all([\r\n self.getPointDrawControl(),\r\n self.getLineDrawControl(),\r\n self.getPolygonDrawControl(),\r\n //self._cutDrawCtlPromise,\r\n self.getModifyControl()\r\n ]);\r\n self.pointDrawControl = controls[0];\r\n self.lineDrawControl = controls[1];\r\n self.polygonDrawControl = controls[2];\r\n self.pointDrawControl.id = self.getUID();\r\n self.lineDrawControl.id = self.getUID();\r\n self.polygonDrawControl.id = self.getUID();\r\n self.pointDrawControl.snapping = self.snapping;\r\n self.lineDrawControl.snapping = self.snapping;\r\n self.polygonDrawControl.snapping = self.snapping;\r\n //self.cutDrawControl = controls[3];\r\n self.modifyControl = controls[3];\r\n self.modifyControl.id = self.getUID();\r\n\r\n const addElevation = async function (feature) {\r\n if (self.map.options.elevation && feature.getGeometryStride() > 2) {\r\n let changed = false;\r\n let elevationTool;\r\n for (const point of Geometry.iterateCoordinates(feature.geometry)) {\r\n if (!point[2]) {\r\n elevationTool = elevationTool || await self.map.getElevationTool();\r\n const newCoords = await elevationTool.getElevation({\r\n coordinates: [point]\r\n });\r\n if (newCoords?.length) {\r\n changed = true;\r\n point[2] = newCoords[0][2];\r\n }\r\n }\r\n }\r\n if (changed) {\r\n feature.setCoordinates(feature.geometry);\r\n }\r\n }\r\n };\r\n\r\n const drawstartHandler = function (e) {\r\n self.#measurementControl.clearMeasurement();\r\n if (e.feature) {\r\n self.#cacheOriginalFeature(e.feature);\r\n }\r\n };\r\n const drawendHandler = async function (e) {\r\n await addElevation(e.feature);\r\n self.trigger(Consts.event.DRAWEND, { feature: e.feature });\r\n };\r\n const drawcancelHandler = function () {\r\n self.cancel();\r\n };\r\n const measureHandler = function (e) {\r\n self.#measurementControl.displayMeasurement(e);\r\n };\r\n self.pointDrawControl\r\n .on(Consts.event.DRAWEND, drawendHandler)\r\n .on(Consts.event.DRAWCANCEL, drawcancelHandler)\r\n .on(Consts.event.MEASURE + ' ' + Consts.event.MEASUREPARTIAL, measureHandler);\r\n self.lineDrawControl\r\n .on(Consts.event.DRAWSTART, drawstartHandler)\r\n .on(Consts.event.DRAWEND, drawendHandler)\r\n .on(Consts.event.DRAWCANCEL, drawcancelHandler)\r\n .on(Consts.event.MEASURE + ' ' + Consts.event.MEASUREPARTIAL, measureHandler);\r\n self.polygonDrawControl\r\n .on(Consts.event.DRAWSTART, drawstartHandler)\r\n .on(Consts.event.DRAWEND, drawendHandler)\r\n .on(Consts.event.DRAWCANCEL, drawcancelHandler)\r\n .on(Consts.event.MEASURE + ' ' + Consts.event.MEASUREPARTIAL, measureHandler);\r\n //self.cutDrawControl\r\n // .on(Consts.event.DRAWEND, function (e) {\r\n // //TC.loadJS(\r\n // // !window.turf && !turf.lineSplit,\r\n // // [TC.apiLocation + 'lib/turf/line-split'],\r\n // // function () {\r\n\r\n // // }\r\n // //);\r\n\r\n // //self.layer.features.filter(f => f)\r\n // })\r\n // .on(Consts.event.DRAWCANCEL, drawcancelHandler);\r\n self.modifyControl\r\n .on(Consts.event.FEATUREMODIFY, async function onFeatureModify(e) {\r\n if (e.layer === self.layer) {\r\n self.#measurementControl.displayMeasurement(e.feature);\r\n }\r\n await addElevation(e.feature);\r\n self.trigger(Consts.event.FEATUREMODIFY, { feature: e.feature, layer: e.layer });\r\n })\r\n .on(Consts.event.FEATUREADD, function (e) {\r\n self.trigger(Consts.event.FEATUREADD, { feature: e.feature, layer: e.layer });\r\n })\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n self.trigger(Consts.event.FEATUREREMOVE, { feature: e.feature, layer: e.layer });\r\n })\r\n .on(Consts.event.FEATURESSELECT + ' ' + Consts.event.FEATURESUNSELECT, function (_e) {\r\n const features = self.modifyControl.getSelectedFeatures();\r\n if (features.length) {\r\n self.#measurementControl.displayMeasurement(features[features.length - 1]);\r\n }\r\n else {\r\n self.#measurementControl.clearMeasurement();\r\n }\r\n });\r\n\r\n self.modifyControl.displayAttributes = function () {\r\n const selectedFeatures = self.getSelectedFeatures();\r\n const feature = selectedFeatures[selectedFeatures.length - 1];\r\n if (feature) {\r\n const data = feature.getData() || {};\r\n self\r\n .modifyControl\r\n .querySelector('.' + self.modifyControl.CLASS + '-btn-attr')\r\n .classList.add(Consts.classes.ACTIVE);\r\n let attributes = self.getLayerEditData(feature.layer).attributes;\r\n if (!Object.keys(attributes).length) {\r\n // No hay información de capa concerniente a atributos. \r\n // Tomamos los de la entidad seleccionada\r\n const feature = self.getSelectedFeatures()[0];\r\n if (feature && Object.keys(data).length) {\r\n attributes = {};\r\n for (var key in data) {\r\n attributes[key] = { name: key, value: data[key] };\r\n }\r\n }\r\n }\r\n const attrArray = Object.keys(attributes).map(k => attributes[k]);\r\n const jfa = self._joinedFeatureAttributes || [];\r\n\r\n attrArray.forEach(function (attributeObj) {\r\n attributeObj.value = data[attributeObj.name];\r\n if (attributeObj.name === 'id') {\r\n attributeObj.readOnly = true;\r\n }\r\n attributeObj.availableValues = [];\r\n jfa.forEach(function (jfaObj) {\r\n const val = jfaObj[attributeObj.name];\r\n if (val !== undefined && val !== '') {\r\n attributeObj.availableValues.push(val);\r\n }\r\n });\r\n });\r\n\r\n attrArray.forEach(function (attributeObj) {\r\n if (attributeObj.type === 'date') {\r\n if (attributeObj.value) {\r\n attributeObj.value = new Date(attributeObj.value).toISOString().substr(0, 10);\r\n }\r\n }\r\n else if (attributeObj.type === 'dateTime') {\r\n if (attributeObj.value) {\r\n attributeObj.value = new Date(attributeObj.value).toISOString().substr(0, 19);\r\n }\r\n }\r\n });\r\n\r\n attrArray.sort(function (a, b) {\r\n if (a.readOnly ? !b.readOnly : b.readOnly) { //XOR\r\n return !a.readOnly - !b.readOnly; // Primero readOnly\r\n }\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n self.getRenderedHtml(self.CLASS + '-attr', { data: attrArray }, function (html) {\r\n const contentDiv = self.getAttributeDisplayTarget();\r\n contentDiv.classList.remove(Consts.classes.HIDDEN);\r\n contentDiv.innerHTML = html;\r\n const inputs = contentDiv.querySelectorAll('input');\r\n const selects = contentDiv.querySelectorAll('select');\r\n inputs.forEach(function (elm) {\r\n elm.addEventListener('input', function (e) {\r\n const input = e.target;\r\n for (var i = 0, len = selects.length; i < len; i++) {\r\n const select = selects[i];\r\n if (select.matches(`[name=${e.target.getAttribute('name')}]`) && select.value !== input.value) {\r\n select.value = '';\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n selects.forEach(function (elm) {\r\n elm.addEventListener('change', function (e) {\r\n const select = e.target;\r\n for (var i = 0, len = inputs.length; i < len; i++) {\r\n const input = inputs[i];\r\n if (input.matches(`[name=${e.target.getAttribute('name')}]`)) {\r\n input.value = select.value;\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n\r\n contentDiv.querySelector(`.${self.modifyControl.CLASS}-btn-attr-ok`).addEventListener(Consts.event.CLICK, function (_e) {\r\n self.modifyControl._onAttrOK();\r\n }, { passive: true });\r\n\r\n contentDiv.querySelector(`.${self.modifyControl.CLASS}-btn-attr-cancel`).addEventListener(Consts.event.CLICK, function (_e) {\r\n self.modifyControl.closeAttributes();\r\n }, { passive: true });\r\n });\r\n }\r\n };\r\n\r\n self.modifyControl._onAttrOK = function () {\r\n const that = this;\r\n const feature = that.getSelectedFeatures()[0];\r\n if (feature) {\r\n const data = {};\r\n const attributes = self.getLayerEditData(feature.layer).attributes;\r\n const layerHasInfo = Object.keys(attributes).length > 0;\r\n const inputs = that.getAttributeDisplayTarget().querySelectorAll('input');\r\n inputs.forEach(function (input) {\r\n var name = input.getAttribute('name');\r\n var value = input.value;\r\n if (layerHasInfo) {\r\n switch (attributes[name].type) {\r\n case 'int':\r\n case 'integer':\r\n case 'byte':\r\n case 'long':\r\n case 'negativeInteger':\r\n case 'nonNegativeInteger':\r\n case 'nonPositiveInteger':\r\n case 'positiveInteger':\r\n case 'short':\r\n case 'unsignedLong':\r\n case 'unsignedInt':\r\n case 'unsignedShort':\r\n case 'unsignedByte':\r\n value = parseInt(value);\r\n if (!Number.isNaN(value)) {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'double':\r\n case 'float':\r\n case 'decimal':\r\n value = parseFloat(value);\r\n if (!Number.isNaN(value)) {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'date':\r\n // Obtiene el valor yyyy-mm-dd\r\n if (value) {\r\n data[name] = new Date(value).toISOString().substr(0, 10);\r\n }\r\n else {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'dateTime':\r\n // Obtiene el valor yyyy-mm-ddThh:mm:ss\r\n if (value) {\r\n data[name] = new Date(value).toISOString().substr(0, 19);\r\n }\r\n else {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'boolean':\r\n data[name] = !!value;\r\n break;\r\n case undefined:\r\n break;\r\n default:\r\n data[name] = value;\r\n break;\r\n }\r\n }\r\n else {\r\n data[name] = value;\r\n }\r\n });\r\n feature.setData(data);\r\n that.trigger(Consts.event.FEATUREMODIFY, { feature: feature, layer: that.layer });\r\n that.closeAttributes();\r\n }\r\n };\r\n\r\n\r\n //control de renderizado enfunción del modo de edicion\r\n if (Array.isArray(self.options.modes) && self.options.modes.length > 0) {\r\n for (var m in Edit.mode) {\r\n if (typeof m === 'string' && self.options.modes.indexOf(Edit.mode[m]) < 0) {\r\n const tab = self.#getModeTab(Edit.mode[m]);\r\n const div = tab.target;\r\n div.parentElement.removeChild(div);\r\n tab.parentElement.removeChild(tab);\r\n }\r\n }\r\n if (self.options.modes.length === 1) {\r\n var mode = self.options.modes[0];\r\n const tab = self.#getModeTab(mode);\r\n tab.parentElement.removeChild(tab);\r\n }\r\n }\r\n\r\n self.querySelectorAll(self.#selectors.MODE_TAB).forEach(function (tab) {\r\n tab.callback = function () {\r\n const targetId = this.target?.getAttribute('id');\r\n if (targetId) {\r\n const newMode = targetId.substr(targetId.lastIndexOf('-') + 1);\r\n self.mode = this.selected ? newMode : null;\r\n }\r\n }\r\n });\r\n\r\n self.querySelector(self.#classSelector + '-btn-import').addEventListener(Consts.event.CLICK, function (_e) {\r\n self.showFeatureImportPanel();\r\n }, { passive: true });\r\n\r\n self.querySelector(self.#classSelector + '-btn-dl').addEventListener(Consts.event.CLICK, function (_e) {\r\n self.getDownloadDialog().then(function (dialog) {\r\n const options = {\r\n title: self.getLocaleString('download'),\r\n fileName: self.layer.id.toLowerCase().replace(' ', '_') + '_' + Util.getFormattedDate(new Date().toString(), true),\r\n elevation: self.options.downloadElevation\r\n };\r\n dialog.open(self.layer.features, options);\r\n });\r\n }, { passive: true });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n return self;\r\n }\r\n\r\n getGeometryType(geometryType) {\r\n switch (geometryType) {\r\n case 'gml:LinearRingPropertyType':\r\n case 'gml:PolygonPropertyType':\r\n case 'LinearRingPropertyType':\r\n case 'PolygonPropertyType':\r\n return Consts.geom.POLYGON;\r\n case 'gml:MultiPolygonPropertyType':\r\n case 'gml:MultiSurfacePropertyType':\r\n case 'MultiPolygonPropertyType':\r\n case 'MultiSurfacePropertyType':\r\n return Consts.geom.MULTIPOLYGON;\r\n case 'gml:LineStringPropertyType':\r\n case 'gml:CurvePropertyType':\r\n case 'LineStringPropertyType':\r\n case 'CurvePropertyType':\r\n return Consts.geom.POLYLINE;\r\n case 'gml:MultiLineStringPropertyType':\r\n case 'gml:MultiCurvePropertyType':\r\n case 'MultiLineStringPropertyType':\r\n case 'MultiCurvePropertyType':\r\n return Consts.geom.MULTIPOLYLINE;\r\n case 'gml:PointPropertyType':\r\n case 'gml:MultiPointPropertyType':\r\n case 'PointPropertyType':\r\n case 'MultiPointPropertyType':\r\n return Consts.geom.POINT;\r\n case 'gml:BoxPropertyType':\r\n case 'BoxPropertyType':\r\n return Consts.geom.RECTANGLE;\r\n case 'gml:GeometryCollectionPropertyType':\r\n case 'gml:GeometryAssociationType':\r\n case 'gml:GeometryPropertyType':\r\n case 'GeometryCollectionPropertyType':\r\n case 'GeometryAssociationType':\r\n case 'GeometryPropertyType':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n setLayer(layer) {\r\n const self = this;\r\n self.modifyControl && self.modifyControl.unselectFeatures(self.getSelectedFeatures());\r\n self.layer = self.map.getLayer(layer);\r\n if (self.layer) {\r\n layer.describeFeatureType()\r\n .then(function (attributes) {\r\n const layerEditData = {\r\n attributes: {}\r\n };\r\n // recogemos los atributos no geométricos y definimos la geometría\r\n let key;\r\n for (key in attributes) {\r\n const attr = attributes[key];\r\n const geometryType = self.getGeometryType(attr.type);\r\n if (geometryType) {\r\n layerEditData.geometryName = attr.name;\r\n layerEditData.geometryType = typeof geometryType === 'boolean' ? null : geometryType;\r\n }\r\n else {\r\n layerEditData.attributes[key] = attr;\r\n }\r\n }\r\n for (key in layerEditData.attributes) {\r\n const attr = layerEditData.attributes[key];\r\n attr.type = attr.type.substr(attr.type.indexOf(':') + 1);\r\n }\r\n self.layersEditData[layer.id] = layerEditData;\r\n })\r\n .catch(function (_err) {\r\n self.layersEditData[layer.id] = {\r\n geometryType: null,\r\n attributes: {}\r\n };\r\n });\r\n }\r\n const setLayer = c => c.setLayer(self.layer);\r\n self.getModifyControl().then(setLayer);\r\n self.getPointDrawControl().then(setLayer);\r\n self.getLineDrawControl().then(setLayer);\r\n self.getPolygonDrawControl().then(setLayer);\r\n //self.getCutDrawControl().then(setLayer);\r\n self.mode = self.layer ? Edit.mode.MODIFY : null;\r\n self.#setEditState(self.layer);\r\n return self;\r\n }\r\n\r\n constrainModes(modes) {\r\n const self = this;\r\n if (!Array.isArray(modes)) {\r\n modes = [];\r\n }\r\n if (!modes.length) {\r\n modes = Object.values(Edit.mode);\r\n }\r\n self.modes = modes\r\n .filter(function (m) {\r\n // Quitamos los valores que no sean modos de edición\r\n for (var key in Edit.mode) {\r\n if (Edit.mode[key] === m) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n })\r\n .filter(function (m) {\r\n // Quitamos los modos de edición que no se definieron en la configuración\r\n if (!Array.isArray(self.options.modes)) {\r\n return true;\r\n }\r\n return self.options.modes.indexOf(m) >= 0;\r\n });\r\n if (self.modes.indexOf(self.mode) < 0) {\r\n self.mode = null;\r\n }\r\n const selector = self.modes.map(m => `[for=\"${self.id}-mode-${m}\"]`).join() || '[for]';\r\n self.querySelectorAll(self.#selectors.MODE_TAB).forEach(function (tab) {\r\n tab.disabled = !tab.matches(selector);\r\n });\r\n return self;\r\n }\r\n\r\n isFeatureAllowed(feature) {\r\n const self = this;\r\n switch (true) {\r\n case feature instanceof Point:\r\n return self.modes.includes(Edit.mode.ADDPOINT);\r\n case feature instanceof Polyline:\r\n return self.modes.includes(Edit.mode.ADDLINE);\r\n case feature instanceof MultiPolyline:\r\n return self.modes.includes(Edit.mode.ADDLINE) && self.isMultiple;\r\n case feature instanceof Polygon:\r\n return self.modes.includes(Edit.mode.ADDPOLYGON);\r\n case feature instanceof MultiPolygon:\r\n return self.modes.includes(Edit.mode.ADDPOLYGON) && self.isMultiple;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n async setComplexGeometry(isMultiple) {\r\n const self = this;\r\n self.isMultiple = isMultiple;\r\n //(await self.getPointDrawControl()).setMode(isMultiple ? Consts.geom.MULTIPOINT : Consts.geom.POINT);\r\n (await self.getLineDrawControl()).setMode(isMultiple ? Consts.geom.MULTIPOLYLINE : Consts.geom.POLYLINE);\r\n (await self.getPolygonDrawControl()).setMode(isMultiple ? Consts.geom.MULTIPOLYGON : Consts.geom.POLYGON);\r\n }\r\n\r\n getLayerEditData(optionalLayer) {\r\n const self = this;\r\n const layer = optionalLayer || self.layer;\r\n if (!layer) {\r\n return null;\r\n }\r\n return self.layersEditData[layer.id] = self.layersEditData[layer.id] || {\r\n checkedOut: false\r\n };\r\n }\r\n\r\n cancel() {\r\n const self = this;\r\n if (Array.isArray(self.options.modes) && self.options.modes.length == 1) {\r\n self.mode = self.options.modes[0];\r\n }\r\n else {\r\n self.mode = null;\r\n }\r\n self.wrap.cancel(true, self.cancelActionConfirmTxt);\r\n return self;\r\n }\r\n\r\n async activate(options) {\r\n const self = this;\r\n options = options || {};\r\n let ctl;\r\n switch (options.mode) {\r\n case Edit.mode.ADDPOINT:\r\n ctl = await self.getPointDrawControl();\r\n break;\r\n case Edit.mode.ADDLINE:\r\n ctl = await self.getLineDrawControl();\r\n break;\r\n case Edit.mode.ADDPOLYGON:\r\n ctl = await self.getPolygonDrawControl();\r\n break;\r\n default:\r\n ctl = await self.getModifyControl();\r\n break;\r\n }\r\n\r\n if (ctl !== self.map.activeControl) {\r\n self.#previousActiveControl = self.map.activeControl;\r\n }\r\n }\r\n\r\n deactivate() {\r\n const self = this;\r\n if (self.#previousActiveControl) {\r\n self.map.previousActiveControl = self.#previousActiveControl;\r\n switch (self.map.activeControl) {\r\n case self.pointDrawControl:\r\n self.pointDrawControl.deactivate();\r\n break;\r\n case self.lineDrawControl:\r\n self.lineDrawControl.deactivate();\r\n break;\r\n case self.polygonDrawControl:\r\n self.polygonDrawControl.deactivate();\r\n break;\r\n case self.modifyControl:\r\n self.modifyControl.deactivate();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n self.modifyControl && self.modifyControl.closeAttributes();\r\n return self;\r\n }\r\n\r\n isExclusive() {\r\n return true;\r\n }\r\n\r\n getAttributeDisplayTarget() {\r\n return this.modifyControl?.getAttributeDisplayTarget();\r\n }\r\n\r\n //joinFeatures(features) {\r\n // const self = this;\r\n // if (self.geometryType === Consts.geom.MULTIPOLYLINE ||\r\n // self.geometryType === Consts.geom.MULTIPOLYGON ||\r\n // self.geometryType === Consts.geom.MULTIPOINT) {\r\n // self._joinedFeatureAttributes = [];\r\n // if (features.length > 1) {\r\n // var geometries = features.map(function (elm) {\r\n // self._joinedFeatureAttributes.push(elm.getData());\r\n // return elm.geometry;\r\n // });\r\n // var newGeometry = geometries.reduce(function (a, b) {\r\n // return a.concat(b);\r\n // });\r\n // var newFeature = new features[0].constructor(newGeometry);\r\n // for (var i = 0, len = features.length; i < len; i++) {\r\n // var feature = features[i];\r\n // self.layer.removeFeature(feature);\r\n // self.trigger(Consts.event.FEATUREREMOVE, { feature: feature });\r\n // }\r\n // self.layer.addFeature(newFeature).then(function (feat) {\r\n // self.setSelectedFeatures([newFeature]);\r\n // self.trigger(Consts.event.FEATUREADD, { feature: feat });\r\n // feat.showPopup(self.attributeEditor);\r\n // });\r\n // }\r\n // setFeatureSelectedState(self, [newFeature]);\r\n // }\r\n // return self;\r\n //}\r\n\r\n //splitFeatures(features) {\r\n // const self = this;\r\n // var complexFeatures = features.filter(complexGeometryFilter);\r\n // var geometries = complexFeatures.map(function (elm) {\r\n // return elm.geometry;\r\n // });\r\n // var newFeatures = [];\r\n // for (var i = 0, ii = complexFeatures.length; i < ii; i++) {\r\n // var feature = complexFeatures[i];\r\n // var data = feature.getData();\r\n // var geometry = geometries[i];\r\n // for (var j = 0, jj = geometry.length; j < jj; j++) {\r\n // newFeatures.push(new feature.constructor([geometry[j]], { data: data }));\r\n // }\r\n // }\r\n // for (var i = 0, len = complexFeatures.length; i < len; i++) {\r\n // var feature = complexFeatures[i];\r\n // self.layer.removeFeature(feature);\r\n // self.trigger(Consts.event.FEATUREREMOVE, { feature: feature });\r\n // }\r\n // var newFeatPromises = new Array(newFeatures.length);\r\n // for (var i = 0, len = newFeatures.length; i < len; i++) {\r\n // const promise = newFeatPromises[i] = self.layer.addFeature(newFeatures[i]);\r\n // promise.then(function (feat) {\r\n // self.trigger(Consts.event.FEATUREADD, { feature: feat });\r\n // });\r\n // }\r\n // Promise.all(newFeatPromises).then(function() {\r\n // self.setSelectedFeatures(newFeatures);\r\n // });\r\n // setFeatureSelectedState(self, newFeatures);\r\n // return self;\r\n //}\r\n\r\n //deleteFeatures(features) {\r\n // const self = this;\r\n // self.wrap.deleteFeatures(features);\r\n // if (self.layer.features.length === 0) {\r\n // self._deleteBtn.disabled = true;\r\n // }\r\n // return self;\r\n //}\r\n\r\n getSelectedFeatures() {\r\n return this.modifyControl?.getSelectedFeatures();\r\n }\r\n\r\n setSelectedFeatures(features) {\r\n return this.modifyControl?.setSelectedFeatures(features);\r\n }\r\n\r\n async getLayer() {\r\n const self = this;\r\n if (self.layer) {\r\n return self.layer;\r\n }\r\n return await self.layerPromise;\r\n }\r\n\r\n async getModifyControl() {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.querySelector(`.${self.CLASS}-modify sitna-modify`);\r\n }\r\n\r\n async getPointDrawControl() {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.querySelector(`.${self.CLASS}-point sitna-draw`);\r\n }\r\n\r\n async getLineDrawControl() {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.querySelector(`.${self.CLASS}-line sitna-draw`);\r\n }\r\n\r\n async getPolygonDrawControl() {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.querySelector(`.${self.CLASS}-polygon sitna-draw`);\r\n }\r\n\r\n //async getCutDrawControl() {\r\n // const self = this;\r\n // if (self._cutDrawCtlPromise) {\r\n // return await self._cutDrawCtlPromise;\r\n // await self.renderPromise();\r\n // return self.cutDrawControl;\r\n //}\r\n\r\n async getFeatureImportPanel() {\r\n const self = this;\r\n if (!self.#featureImportPanelPromise) {\r\n self.#featureImportPanelPromise = self.map.addControl('resultsPanel', {\r\n titles: {\r\n main: self.getLocaleString('importFromOtherLayer')\r\n }\r\n });\r\n self.featureImportPanel = await self.#featureImportPanelPromise;\r\n }\r\n return await self.#featureImportPanelPromise;\r\n }\r\n\r\n async getHighlightsLayer() {\r\n const self = this;\r\n if (!self.#highlightsLayerPromise) {\r\n self.#highlightsLayerPromise = self.map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n title: 'Highlights Layer',\r\n stealth: true,\r\n styles: self.map.options.styles.selection || Cfg.styles.selection\r\n });\r\n self.highlightsLayer = await self.#highlightsLayerPromise;\r\n }\r\n return self.#highlightsLayerPromise;\r\n }\r\n\r\n async highlightFeatures(features) {\r\n const self = this;\r\n const highlightsLayer = await self.getHighlightsLayer();\r\n const featuresToHighlight = self.featuresToImport.concat(features);\r\n highlightsLayer.features.slice().forEach(function (feature) {\r\n if (!feature.original || featuresToHighlight.indexOf(feature.original) < 0) {\r\n highlightsLayer.removeFeature(feature);\r\n }\r\n });\r\n await highlightsLayer.addFeatures(featuresToHighlight\r\n .filter(function (feature) {\r\n return !highlightsLayer.features.some(function (f) {\r\n return f.original && f.original === feature;\r\n });\r\n })\r\n .map(function (feature) {\r\n const newFeature = feature.clone();\r\n newFeature.toggleSelectedStyle(true);\r\n newFeature.original = feature;\r\n return newFeature;\r\n }));\r\n }\r\n\r\n getAvailableFeaturesToImport() {\r\n const self = this;\r\n return self.map.workLayers\r\n .filter(l => !l.isRaster())\r\n .filter(l => l !== self.layer)\r\n .filter(l => l !== self.highlightsLayer)\r\n .map(function (l) {\r\n return {\r\n id: l.id,\r\n title: l.title,\r\n features: l.features.filter(function (f) {\r\n return self.isFeatureAllowed(f);\r\n })\r\n };\r\n })\r\n .filter(l => l.features.length);\r\n }\r\n\r\n importFeatures(features) {\r\n const self = this;\r\n let failure = false;\r\n const layerEditData = self.getLayerEditData();\r\n const featuresToImport = (features || self.featuresToImport || [])\r\n .filter(f => {\r\n const result = self.isFeatureAllowed(f);\r\n if (!result) {\r\n failure = true;\r\n }\r\n return result;\r\n });\r\n featuresToImport.map(function (feature) {\r\n let newFeature;\r\n const featureOptions = {\r\n data: feature.data,\r\n geometryName: layerEditData.geometryName\r\n };\r\n if (self.isMultiple) {\r\n switch (true) {\r\n case feature instanceof Polygon:\r\n newFeature = new MultiPolygon([feature.geometry], featureOptions);\r\n break;\r\n case feature instanceof Polyline:\r\n newFeature = new MultiPolyline([feature.geometry], featureOptions);\r\n break;\r\n default:\r\n newFeature = feature.clone();\r\n break;\r\n }\r\n }\r\n else {\r\n switch (true) {\r\n case feature instanceof MultiPolygon:\r\n newFeature = new Polygon(feature.geometry[0], featureOptions);\r\n break;\r\n case feature instanceof MultiPolyline:\r\n newFeature = new Polyline(feature.geometry[0], featureOptions);\r\n break;\r\n default:\r\n newFeature = feature.clone();\r\n break;\r\n }\r\n }\r\n newFeature.setStyle(null);\r\n return newFeature;\r\n }).forEach(function (feature) {\r\n self.layer.addFeature(feature);\r\n self.trigger(Consts.event.FEATUREADD, { feature: feature, layer: self.layer });\r\n });\r\n\r\n if (failure) {\r\n self.map.toast(self.getLocaleString('importFromOtherLayer.warning'), { type: Consts.msgType.WARNING });\r\n }\r\n return self;\r\n }\r\n\r\n #getFeatureFromImportList(elm) {\r\n const self = this;\r\n const cb = elm.querySelector('input');\r\n const layer = self.map.getLayer(elm.parentElement.parentElement.dataset.layerId);\r\n if (layer) {\r\n return layer.getFeatureById(cb.value);\r\n }\r\n return null;\r\n }\r\n\r\n #setEditState(state) {\r\n const self = this;\r\n self.querySelectorAll(self.#selectors.MODE_RADIO_BUTTON).forEach(r => r.disabled = !state);\r\n }\r\n\r\n #handleCheck(checkbox) {\r\n const self = this;\r\n const feature = self.#getFeatureFromImportList(checkbox.parentElement);\r\n if (checkbox.checked) {\r\n self.featuresToImport.push(feature);\r\n }\r\n else {\r\n const idx = self.featuresToImport.indexOf(feature);\r\n if (idx >= 0) {\r\n self.featuresToImport.splice(idx, 1);\r\n }\r\n }\r\n }\r\n\r\n #addImportLayerEvents(li) {\r\n const self = this;\r\n\r\n li.querySelector('input').addEventListener('change', function (_e) {\r\n const cb = this;\r\n cb.parentElement.querySelectorAll('li.tc-feature input').forEach(function (ccb) {\r\n if (ccb.checked !== cb.checked) {\r\n ccb.checked = cb.checked;\r\n self.#handleCheck(ccb);\r\n }\r\n });\r\n self.highlightFeatures([]);\r\n });\r\n\r\n li.querySelectorAll('li.tc-feature').forEach(function (elm) {\r\n self.#addImportFeatureEvents(elm);\r\n });\r\n }\r\n\r\n #addImportFeatureEvents(li) {\r\n const self = this;\r\n const highlightListener = function (_e) {\r\n const feature = self.#getFeatureFromImportList(this);\r\n if (feature) {\r\n self.highlightFeatures([feature]);\r\n }\r\n };\r\n li.addEventListener(Consts.event.CLICK, highlightListener, { passive: true });\r\n li.addEventListener('mouseover', highlightListener);\r\n li.querySelector('input').addEventListener('change', function (_e) {\r\n self.#handleCheck(this);\r\n });\r\n }\r\n\r\n showFeatureImportPanel() {\r\n const self = this;\r\n\r\n self.featuresToImport = [];\r\n\r\n self.getFeatureImportPanel().then(function (panel) {\r\n const container = panel.getInfoContainer();\r\n self.getRenderedHtml(self.CLASS + '-import', { layers: self.getAvailableFeaturesToImport() }, function (html) {\r\n panel.open(html, container);\r\n container.querySelector('ul').addEventListener('mouseout', function (_e) {\r\n self.highlightFeatures([]);\r\n });\r\n container.querySelectorAll('li.tc-layer').forEach(function (elm) {\r\n self.#addImportLayerEvents(elm);\r\n });\r\n container.querySelector(`.${self.CLASS}-import-btn-ok`).addEventListener(Consts.event.CLICK, function (_e) {\r\n self.importFeatures();\r\n self.featureImportPanel.close();\r\n }, { passive: true });\r\n });\r\n });\r\n }\r\n\r\n async displayLayerToImport(layer) {\r\n const self = this;\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n const container = self.featureImportPanel.getInfoContainer();\r\n const list = container.querySelector(`.${self.CLASS}-import-list .tc-layers`);\r\n const layerElementSelector = `li[data-layer-id=\"${layer.id}\"]`;\r\n const li = list.querySelector(layerElementSelector);\r\n if (li) {\r\n layer.features.forEach(function (feature) {\r\n if (self.isFeatureAllowed(feature)) {\r\n self.getRenderedHtml(self.CLASS + '-import-feature', layer, function (html) {\r\n li.insertAdjacentHTML('beforeend', html);\r\n self.#addImportFeatureEvents(li.querySelector('li:last-child'));\r\n });\r\n }\r\n });\r\n return li;\r\n }\r\n else {\r\n const html = await self.getRenderedHtml(self.CLASS + '-import-layer', { id: layer.id, title: layer.title, features: layer.features });\r\n list.insertAdjacentHTML('beforeend', html);\r\n const newLi = list.querySelector(layerElementSelector);\r\n self.#addImportLayerEvents(newLi);\r\n return newLi;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n #cacheOriginalFeature(feature) {\r\n const self = this;\r\n self.#originalFeatures.set(feature, feature.clone());\r\n }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, Edit);\r\nexport default Edit;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Util from '../Util';\r\nimport Control from '../Control';\r\nimport Feature from '../../SITNA/feature/Feature';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Geometry from '../Geometry';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst Elevation = function () {\r\n const self = this;\r\n\r\n Control.apply(self, arguments);\r\n\r\n self.displayElevation = true;\r\n self.resultsPanel = null;\r\n};\r\n\r\nTC.inherit(Elevation, Control);\r\n\r\n(function () {\r\n const ctlProto = Elevation.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-elev';\r\n\r\n const pointElevationCache = new WeakMap();\r\n const elevationProfileCache = new Map();\r\n\r\n const getElevationProfileFromCache = function (feature) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n return elevationProfileCache.get(coords.toString());\r\n }\r\n return null;\r\n }\r\n };\r\n\r\n const cacheElevationProfile = function (feature, data) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n elevationProfileCache.set(coords.toString(), data);\r\n }\r\n }\r\n };\r\n\r\n const removeElevationProfileFromCache = function (feature) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n elevationProfileCache.delete(coords.toString());\r\n }\r\n }\r\n };\r\n\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-ftools.mjs');\r\n const valueTemplatePromise = import('../templates/tc-ctl-elev-val.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-val'] = (await valueTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n await Control.prototype.register.call(self, map);\r\n\r\n map\r\n .on(Consts.event.FEATUREMODIFY + ' ' + Consts.event.FEATUREREMOVE, function (e) {\r\n removeElevationProfileFromCache(e.feature);\r\n })\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n removeElevationProfileFromCache(e.feature);\r\n })\r\n .on(Consts.event.LAYERREMOVE, function (e) {\r\n e.layer.features && e.layer.features.forEach(feat => removeElevationProfileFromCache(feat));\r\n })\r\n .on(Consts.event.POPUP + ' ' + Consts.event.DRAWTABLE, function (e) {\r\n // Añadimos datos de elevación si se han añadido previamente\r\n if (pointElevationCache.has(e.control.currentFeature)) {\r\n self.displayElevationValue(e.control.currentFeature);\r\n }\r\n });\r\n\r\n return self;\r\n };\r\n\r\n ctlProto.getElevationTool = async function () {\r\n const self = this;\r\n const proxyObj = {\r\n options: {\r\n displayElevation: self.options || true\r\n },\r\n elevation: self.elevation,\r\n map: self.map\r\n };\r\n const ctl = await Control.prototype.getElevationTool.call(proxyObj);\r\n self.elevation = ctl;\r\n return ctl;\r\n };\r\n\r\n ctlProto.setElevationToolOptions = function (options) {\r\n const self = this;\r\n Util.extend(self.options, options);\r\n if (self.elevation) {\r\n Util.extend(self.elevation.options, self.options);\r\n }\r\n };\r\n\r\n ctlProto.displayElevationValue = async function (feature, options) {\r\n const self = this;\r\n options = options || {};\r\n if (feature instanceof Point) {\r\n let elevationValues;\r\n if (options.ignoreCache) {\r\n pointElevationCache.delete(feature);\r\n }\r\n else {\r\n elevationValues = pointElevationCache.get(feature);\r\n }\r\n if (!elevationValues) {\r\n const tool = await self.getElevationTool();\r\n const elevation = await tool.getElevation({\r\n crs: self.map.crs,\r\n coordinates: [feature.geometry]\r\n });\r\n if (elevation.length) {\r\n const point = elevation[0];\r\n const tValue = point[2];\r\n const sValue = point.length > 3 ? point[3] : null;\r\n elevationValues = {\r\n elevation: tValue,\r\n height: sValue\r\n };\r\n pointElevationCache.set(feature, elevationValues);\r\n }\r\n }\r\n if (elevationValues) {\r\n const targets = [];\r\n let target;\r\n const locale = self.map.options.locale || Cfg.locale;\r\n const displayControls = self.map.getControlsByClass('TC.control.Popup')\r\n .concat(self.map.getControlsByClass('TC.control.ResultsPanel'));\r\n displayControls\r\n .filter(ctl => ctl.caller && ctl.caller.highlightedFeature === feature)\r\n .forEach(function addElevElmToGfiCtl(ctl) {\r\n const featElm = ctl.caller.getFeatureElement(feature);\r\n if (featElm) {\r\n target = featElm.querySelector('tbody');\r\n targets.push(target);\r\n }\r\n });\r\n displayControls\r\n .filter(ctl => ctl.currentFeature === feature)\r\n .forEach(function addElevElmToCtl(ctl) {\r\n let container;\r\n switch (true) {\r\n case TC.control.Popup && ctl instanceof TC.control.Popup:\r\n container = ctl.getContainerElement();\r\n break;\r\n case TC.control.ResultsPanel && ctl instanceof TC.control.ResultsPanel:\r\n container = ctl.getInfoContainer();\r\n break;\r\n default:\r\n break;\r\n }\r\n if (container) {\r\n target = container.querySelector('tbody');\r\n targets.push(target);\r\n }\r\n });\r\n\r\n const renderOptions = {\r\n elevationValue: elevationValues.elevation !== null ? Util.formatNumber(Math.round(elevationValues.elevation), locale) : '',\r\n heightValue: elevationValues.height ? elevationValues.height.toLocaleString(locale, { maximumFractionDigits: 1 }) : ''\r\n };\r\n // Si la geometría ya tiene elevación y es distinta de la obtenida por MDT, la mostramos\r\n const geometryElevation = feature.geometry[2];\r\n if (typeof geometryElevation === 'number' && geometryElevation !== elevationValues.elevation) {\r\n renderOptions.originalValue = Util.formatNumber(Math.round(geometryElevation));\r\n }\r\n targets.forEach(function addElevElmToTarget(target) {\r\n self.getRenderedHtml(self.CLASS + '-val', renderOptions, function (html) {\r\n target.querySelectorAll(`tr[class|=${self.CLASS}-pair]`).forEach(elm => elm.remove());\r\n target.insertAdjacentHTML('beforeend', html);\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.displayElevationProfile = async function (featureOrCoords, opts) {\r\n const self = this;\r\n const options = opts || {};\r\n let lines;\r\n switch (true) {\r\n case featureOrCoords instanceof Polyline:\r\n lines = [featureOrCoords.geometry];\r\n break;\r\n case featureOrCoords instanceof MultiPolyline:\r\n lines = featureOrCoords.geometry;\r\n break;\r\n case featureOrCoords instanceof Feature:\r\n return;\r\n default:\r\n lines = [featureOrCoords];\r\n }\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.open();\r\n });\r\n const renderProfile = function (profile) {\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.renderPromise().then(function () {\r\n self.renderElevationProfile(profile);\r\n });\r\n });\r\n };\r\n if (featureOrCoords instanceof Feature) {\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.setCurrentFeature(featureOrCoords);\r\n });\r\n const profile = getElevationProfileFromCache(featureOrCoords);\r\n if (profile) {\r\n renderProfile(profile);\r\n return;\r\n }\r\n }\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n const render = function (elevCoordLines, options) {\r\n let elevLines = elevCoordLines;\r\n let maxElevation = Number.NEGATIVE_INFINITY;\r\n let minElevation = Number.POSITIVE_INFINITY;\r\n if (self.map.getCRS() !== self.map.options.utmCrs) {\r\n elevLines = Util.reproject(elevCoordLines, self.map.getCRS(), self.map.options.utmCrs);\r\n }\r\n const profile = elevLines\r\n .map(line => {\r\n let distance = 0.0;\r\n return line.map(function calculateDistanceAndExtremes(point, idx, arr) {\r\n let prev = idx === 0 ? point : arr[idx - 1];\r\n distance += Math.hypot(point[0] - prev[0], point[1] - prev[1]);\r\n var ele = point[2] || 0;\r\n if (typeof ele === 'number') {\r\n maxElevation = Math.max(ele, maxElevation);\r\n minElevation = Math.min(ele, minElevation);\r\n }\r\n return [distance, ele];\r\n });\r\n })\r\n .reduce(function (prev, curr) {\r\n const lastDistance = prev[prev.length - 1][0];\r\n curr.forEach(elm => elm[0] += lastDistance);\r\n return prev.concat(curr);\r\n });\r\n\r\n if (profile.length === 1) {\r\n // Espera una línea, duplicamos el punto para que no se rompa el renderizado del gráfico\r\n profile.push(profile[0]);\r\n }\r\n const coords = elevLines.flat();\r\n let elevationData = {\r\n x: profile.map(function (elm) {\r\n return elm[0];\r\n }),\r\n ele: profile.map(function (elm) {\r\n return elm[1] || 0;\r\n }),\r\n coords: coords,\r\n min: minElevation,\r\n max: maxElevation\r\n };\r\n\r\n const elevationGainOptions = {\r\n coords: coords\r\n };\r\n if (typeof self.options === 'object' && self.map.options.elevation) {\r\n elevationGainOptions.hillDeltaThreshold = self.options.hillDeltaThreshold || self.map.options.elevation.hillDeltaThreshold;\r\n }\r\n if (minElevation === 0 && maxElevation === 0 && options.onlyOriginalElevation) {\r\n elevationData = {\r\n msg: self.getLocaleString(\"geo.trk.chart.chpe.empty\")\r\n };\r\n }\r\n Util.extend(elevationData, TC.tool.Elevation.getElevationGain(elevationGainOptions), options);\r\n\r\n if (options.isSecondary && self.elevationProfileChartData) {\r\n if (!self.elevationProfileChartData.secondaryElevationProfileChartData) {\r\n self.elevationProfileChartData.showLegend = true;\r\n self.elevationProfileChartData.secondaryElevationProfileChartData = [];\r\n self.elevationProfileChartData.secondaryElevationProfileChartData.push(elevationData);\r\n } else {\r\n self.elevationProfileChartData.secondaryElevationProfileChartData[0] = elevationData;\r\n }\r\n }\r\n\r\n // Cacheamos el perfil\r\n if (featureOrCoords instanceof Feature && !options.ignoreCaching) {\r\n cacheElevationProfile(featureOrCoords, elevationData);\r\n }\r\n\r\n renderProfile(elevationData);\r\n };\r\n\r\n const tool = await self.getElevationTool();\r\n\r\n if (options.originalElevation) {\r\n render(lines, options);\r\n }\r\n if (options.onlyOriginalElevation) {\r\n li && li.removeWait(waitId);\r\n return;\r\n }\r\n\r\n const timestamp = Date.now();\r\n self._depTimestamp = timestamp;\r\n const elevationOptionsTemplate = {\r\n crs: self.map.getCRS()\r\n };\r\n\r\n if (Object.prototype.hasOwnProperty.call(tool.options, \"resolution\")) {\r\n elevationOptionsTemplate.resolution = tool.options.resolution;\r\n }\r\n const sampleNumber = Object.prototype.hasOwnProperty.call(tool.options, \"sampleNumber\") ? tool.options.sampleNumber : 0;\r\n if (sampleNumber > 0) {\r\n elevationOptionsTemplate.resolution = 0;\r\n }\r\n\r\n // Repartimos las muestras proporcionalmente entre todas las líneas\r\n const sampleNumberCollection = new Array(lines.length);\r\n sampleNumberCollection.fill(sampleNumber);\r\n if (sampleNumber > 0) {\r\n const lineDistances = new Array(lines.length);\r\n let totalDistance = 0;\r\n lines.forEach((line, idx) => {\r\n const pl = new Polyline(line);\r\n const lineDistance = pl.getLength();\r\n lineDistances[idx] = lineDistance;\r\n totalDistance += lineDistance;\r\n });\r\n sampleNumberCollection.forEach((sn, idx, arr) => {\r\n arr[idx] = Math.floor(sn * lineDistances[idx] / totalDistance);\r\n });\r\n }\r\n const interpolatedLines = lines.map((line, idx) => {\r\n const interpolationOptions = Object.assign({}, elevationOptionsTemplate, {\r\n sampleNumber: sampleNumberCollection[idx]\r\n });\r\n return Geometry.interpolate(line, interpolationOptions);\r\n });\r\n\r\n const elevationPromises = interpolatedLines.map((interpolatedLine, idx) => {\r\n const elevationOptions = Object.assign({}, elevationOptionsTemplate, {\r\n coordinates: interpolatedLine,\r\n partialCallback: function (elevCoords) {\r\n if (timestamp === self._depTimestamp) { // Evitamos que una petición anterior machaque una posterior\r\n interpolatedLines[idx] = elevCoords;\r\n render(interpolatedLines, {\r\n isSecondary: Object.keys(options).length === 0 ? false : true,\r\n ignoreCaching: options.ignoreCaching\r\n });\r\n }\r\n },\r\n resolution: 0,\r\n sampleNumber: 0\r\n });\r\n return tool.getElevation(elevationOptions);\r\n });\r\n\r\n try {\r\n await Promise.all(elevationPromises);\r\n if (options.callback && Util.isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n li?.removeWait(waitId);\r\n }\r\n catch (_error) {\r\n self.resetElevationProfile();\r\n li?.removeWait(waitId);\r\n }\r\n };\r\n\r\n ctlProto.createProfilePanel = async function () {\r\n const self = this;\r\n\r\n const resultsPanelOptions = {\r\n id: self.getUID(),\r\n content: \"chart\",\r\n titles: {\r\n main: self.getLocaleString(\"geo.trk.chart.chpe\"),\r\n max: self.getLocaleString(\"geo.trk.chart.chpe\")\r\n },\r\n chart: {\r\n ctx: self,\r\n onmouseout: ctlProto.removeElevationTooltip,\r\n tooltip: ctlProto.getElevationTooltip\r\n }\r\n };\r\n\r\n let addControlPromise;\r\n const addResultsPanelChart = function (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n addControlPromise = controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n };\r\n\r\n if (self.options.displayOn) {\r\n let controlContainer = self.map.getControlsByClass('TC.control.' + self.options.displayOn[0].toUpperCase() + self.options.displayOn.substring(1))[0];\r\n if (!controlContainer) {\r\n controlContainer = await self.map.addControl(self.options.displayOn);\r\n }\r\n addResultsPanelChart(controlContainer);\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n addControlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n const resultsPanel = await addControlPromise;\r\n resultsPanel.caller = self;\r\n self.resultsPanel = resultsPanel;\r\n self._decorateChartPanel();\r\n return resultsPanel;\r\n };\r\n\r\n ctlProto.getProfilePanel = async function () {\r\n const self = this;\r\n if (!self._resultsPanelPromise) {\r\n self._resultsPanelPromise = self.createProfilePanel();\r\n }\r\n return await self._resultsPanelPromise;\r\n };\r\n\r\n ctlProto.resetElevationProfile = function () {\r\n const self = this;\r\n if (self.options.displayElevation && self.resultsPanel) {\r\n self.elevationProfileChartData = {\r\n x: [0],\r\n ele: [0],\r\n coords: [0, 0, 0],\r\n upHill: 0,\r\n downHill: 0\r\n };\r\n self.resultsPanel.openChart(self.elevationProfileChartData);\r\n }\r\n };\r\n\r\n ctlProto.renderElevationProfile = function (profileData) {\r\n const self = this;\r\n if (!profileData.isSecondary) {\r\n self.elevationProfileChartData = profileData || self.elevationProfileChartData;\r\n }\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n if (!resultsPanel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n if (profileData.isSecondary) {\r\n resultsPanel.loadDataOnChart(self.elevationProfileChartData);\r\n } else {\r\n resultsPanel.openChart(self.elevationProfileChartData);\r\n }\r\n if (!resultsPanel.isMinimized()) {\r\n resultsPanel.doVisible();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.closeElevationProfile = function () {\r\n const self = this;\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.close();\r\n });\r\n };\r\n\r\n ctlProto._decorateChartPanel = function () {\r\n const self = this;\r\n self.resultsPanel.setCurrentFeature = function (feature) {\r\n const that = this;\r\n if (that.currentFeature) {\r\n that.currentFeature.toggleSelectedStyle(false);\r\n }\r\n that.currentFeature = feature;\r\n if (feature) {\r\n feature.toggleSelectedStyle(true);\r\n }\r\n };\r\n\r\n const oldClose = self.resultsPanel.close;\r\n self.resultsPanel.close = function () {\r\n const that = this;\r\n if (that.currentFeature) {\r\n that.currentFeature.toggleSelectedStyle(false);\r\n }\r\n oldClose.call(that);\r\n };\r\n };\r\n\r\n ctlProto.getElevationTooltip = function (d) {\r\n const self = this;\r\n self.resultsPanel.wrap.showElevationMarker({\r\n data: d,\r\n layer: self.resultsPanel.currentFeature && self.resultsPanel.currentFeature.layer,\r\n coords: self.elevationProfileChartData.coords\r\n });\r\n\r\n return self.resultsPanel.getElevationChartTooltip(d);\r\n };\r\n\r\n ctlProto.removeElevationTooltip = function () {\r\n const self = this;\r\n if (self.resultsPanel) {\r\n if (self.resultsPanel.chart && self.resultsPanel.chart.chart) {\r\n self.resultsPanel.chart.chart.tooltip.hide();\r\n }\r\n self.resultsPanel.wrap.hideElevationMarker();\r\n }\r\n };\r\n})();\r\n\r\nTC.control.Elevation = Elevation;\r\nexport default Elevation;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Raster from '../../SITNA/layer/Raster';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass ExternalWMS extends Control {\r\n #addedUrls = [];\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.count = 0;\r\n\r\n self.allowReprojection = Object.prototype.hasOwnProperty.call(self.options, 'allowReprojection') ? self.options.allowReprojection : true;\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-xwms';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register.call(self, map);\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('select', function (evt) {\r\n if (evt.target.value !== '') {\r\n var url = evt.target.value;\r\n if (url.indexOf('//') === 0) {\r\n url = location.protocol + url;\r\n }\r\n self.div.querySelector('input').value = url;\r\n evt.target.value = '';\r\n }\r\n }));\r\n\r\n /*\r\n * Borra parámetros no necesarios de la URL del servicio WMS.\r\n */\r\n const removeParamsFromUrl = function (url, unwantedParams) {\r\n for (var i = 0; i < unwantedParams.length; i++) {\r\n url = TC.Util.removeURLParameter(url, unwantedParams[i]);\r\n }\r\n if (url.match(/\\?$/)) {\r\n url = url.substr(0, url.length - 1);\r\n }\r\n return url;\r\n };\r\n\r\n const addWMS = function () {\r\n var url = self.div.querySelector('input').value.trim();\r\n\r\n if (!url) {\r\n TC.alert(self.getLocaleString('typeAnAddress'));\r\n }\r\n else if (!/^((https?|ftp):)?(\\/\\/)?(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(url)) {\r\n TC.alert(self.getLocaleString('typeAValidAddress'));\r\n }\r\n else {\r\n if (self.#addedUrls.some(function (addedUrl) {\r\n return addedUrl.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '');\r\n })) {\r\n TC.alert(self.getLocaleString('serviceAlreadyAdded'));\r\n }\r\n else {\r\n var loadingCtrl = self.map.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n loadingCtrl.show();\r\n var params = TC.Util.getQueryStringParams(url);\r\n\r\n if (!/https?:\\/\\/|\\/\\//i.test(url)) {\r\n url = \"//\" + url;\r\n }\r\n\r\n //Extraemos sólo los parámetros adicionales\r\n var unwantedParams = [\"version\", \"service\", \"request\"];\r\n var urlWithoutParams = removeParamsFromUrl(url, Object.keys(params));\r\n\r\n for (var item in params) {\r\n if (unwantedParams.indexOf(item.toLowerCase()) >= 0) {\r\n delete params[item];\r\n }\r\n }\r\n\r\n const addButton = self.div.querySelector('button');\r\n addButton.setAttribute('type', 'button');\r\n addButton.disabled = true;\r\n\r\n var obj = {\r\n id: 'xwms' + (++self.count),\r\n //\"title\": \"Servicio externo\",\r\n type: 'WMS',\r\n url: urlWithoutParams,\r\n hideTree: false,\r\n queryParams: params\r\n };\r\n //URI: recorremos las opciones buscando el servicio que se va a agregar a ver si tiene parametro layerNames\r\n for (var i = 0; i < self.options.suggestions.length; i++) {\r\n var _current = self.options.suggestions[i].items.filter(item => item.url === url);\r\n if (_current.length > 0 && _current[0].layerNames) {\r\n obj.layerNames = _current[0].layerNames;\r\n break;\r\n }\r\n }\r\n\r\n var layer = new Raster(obj);\r\n layer.getCapabilitiesPromise().then(function (cap) {\r\n if (typeof cap.Capability === 'undefined') {\r\n TC.alert(self.getLocaleString('noLayersFoundInService'));\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n return;\r\n } else {\r\n var root = cap.Capability.Layer;\r\n if (root.CRS && root.CRS.indexOf(self.map.crs) === -1 && !self.allowReprojection) {\r\n //no soportado. avisar y fallar\r\n TC.alert(self.getLocaleString('serviceSrsNotCompatible'));\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n return;\r\n }\r\n\r\n self.map.trigger(Consts.event.EXTERNALSERVICEADDED, { layer: layer });\r\n self.div.querySelector('input').value = '';\r\n\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (option.value.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '')) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n self.markServicesAsSelected(selectedOptions);\r\n self.#addedUrls.push(url);\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n }\r\n },\r\n function (error) {\r\n TC.alert(self.getLocaleString('serviceCouldNotBeLoaded') + \":\\n\" + error);\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n });\r\n }\r\n }\r\n };\r\n\r\n await self.renderPromise();\r\n self.div.querySelector('input').addEventListener('keyup', (e) => {\r\n if (e.key && e.key.toLowerCase() === \"enter\" && self.div.querySelector('input').value.trim().length > 0) {\r\n addWMS();\r\n }\r\n });\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('button[name=\"agregar\"]', addWMS));\r\n\r\n map.on(Consts.event.LAYERADD, function (e) {\r\n const layer = e.layer;\r\n if (layer && !layer.isBase) {\r\n var url = layer.url;\r\n\r\n if (url) {\r\n self.pending_markServicesAsSelected = self.pending_markServicesAsSelected || [];\r\n if (self.div.querySelectorAll('select option').length === 0 && url && self.pending_markServicesAsSelected.indexOf(url) === -1) {\r\n self.pending_markServicesAsSelected.push(url);\r\n }\r\n\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (option.value.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '')) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n self.markServicesAsSelected(selectedOptions);\r\n self.#addedUrls.push(url);\r\n }\r\n }\r\n });\r\n\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-xwms.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(self.options, function () {\r\n self.pending_markServicesAsSelected = self.pending_markServicesAsSelected || [];\r\n\r\n self.pending_markServicesAsSelected.forEach(function (elemUrl) {\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (TC.Util.addProtocol(option.value) === TC.Util.addProtocol(elemUrl)) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n\r\n self.markServicesAsSelected(selectedOptions);\r\n self.#addedUrls.push(elemUrl);\r\n });\r\n\r\n self.pending_markServicesAsSelected = [];\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n /*\r\n * Marca como seleccionadas aquellas opciones del desplegable correspondientes a servicios WMS ya añadidos al TOC.\r\n */\r\n markServicesAsSelected(options) {\r\n if (options.length > 0) {\r\n const selectedOption = options[0];\r\n selectedOption.disabled = true;\r\n selectedOption.classList.add('tc-ctl-xwms-option-selected');\r\n }\r\n }\r\n}\r\n\r\nTC.control.ExternalWMS = ExternalWMS;\r\nexport default ExternalWMS;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass FeatureDownloadDialog extends Control {\r\n #displayElevation;\r\n #interpolation = false;\r\n #interpolationDistance = null;\r\n #formats = [\"KMZ\",/*\"KML\",*/ \"GML\", \"GeoJSON\", \"WKT\", \"WKB\", \"GPX\", \"SHP\", \"GPKG\"];\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.title = self.options.title;\r\n self.cssClass = self.options.cssClass || \"\";\r\n\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: \".\" + self.CLASS + '-elev input[type=checkbox]',\r\n INTERPOLATION_PANEL: \".\" + self.CLASS + '-ip',\r\n INTERPOLATION_RADIO: `input[type=radio][name=${self.id}-finfo-ip-coords]`,\r\n INTERPOLATION_DISTANCE: \".\" + self.CLASS + '-ip-m'\r\n };\r\n self.features = [];\r\n self.options = {};\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-dldlog';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-dldlog.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return super.renderData.call(self, { controlId: self.id }, callback);\r\n }\r\n\r\n #hasPoints() {\r\n return this.getFeatures().some(feature => feature instanceof Point ||\r\n feature instanceof MultiPoint);\r\n }\r\n\r\n #hasLines() {\r\n return this.getFeatures().some(feature => feature instanceof Polyline ||\r\n feature instanceof MultiPolyline);\r\n }\r\n\r\n #hasPolygons() {\r\n return this.getFeatures().some(feature => feature instanceof Polygon ||\r\n feature instanceof MultiPolygon);\r\n }\r\n\r\n async #addElevationAndInterpolation(features, options) {\r\n const self = this;\r\n options = options || {};\r\n const cloneWithId = function (feat) {\r\n const result = feat.clone();\r\n result.id = feat.id;\r\n return result;\r\n };\r\n //si no se incluyen las elevaciones quito las Z de las geometrias que las tuvieran\r\n if (!options.displayElevation) {\r\n return features.map(function (feat) {\r\n if (feat.getGeometryStride() > 2) {\r\n const f = cloneWithId(feat);\r\n f.id = feat.id;\r\n f.layer = feat.layer;\r\n f.removeZ();\r\n return f;\r\n }\r\n return feat;\r\n });\r\n }\r\n\r\n let mustInterpolate = options.elevation && options.elevation.resolution;\r\n // Array con features sin altura y nulo donde habia feature con alturas\r\n let featuresToAddElevation = mustInterpolate ? features.map(f => cloneWithId(f)) : features.map(f => {\r\n return f.getCoordsArray().every(p => !p[2]) ? cloneWithId(f) : null;\r\n });\r\n\r\n if (mustInterpolate || featuresToAddElevation.some(f => f !== null)) {\r\n const elevOptions = {\r\n crs: self.map.getCRS(),\r\n features: featuresToAddElevation,\r\n maxCoordQuantity: options.elevation && options.elevation.maxCoordQuantity,\r\n resolution: options.elevation.resolution,\r\n sampleNumber: options.elevation.sampleNumber || 0\r\n };\r\n const processedFeatures = await (self.map.elevation || new TC.tool.Elevation(typeof options.elevation === 'boolean' ? {} : options.elevation)).setGeometry(elevOptions);\r\n // Recombinamos features procesadas y sin procesar\r\n processedFeatures.forEach((f, index) => {\r\n if (!f) {\r\n processedFeatures[index] = features[index];\r\n }\r\n });\r\n return processedFeatures;\r\n }\r\n else {\r\n return features;\r\n }\r\n }\r\n\r\n open(featureOrFeatures, options) {\r\n const self = this;\r\n\r\n self.close();\r\n\r\n self.setFeatures(featureOrFeatures);\r\n options = options || {};\r\n options = Object.assign({}, {\r\n controlId: self.id,\r\n cssClass: self.cssClass,\r\n checkboxId: self.getUID(),\r\n elevation: options.elevation//options.elevation ? (options.elevation instanceof Object ? options.elevation : self.map.elevation.options) : options.elevation,\r\n }, options);\r\n //si solo hay poligonos ocultamos el botón de formato GPX\r\n const excludedFormats = options.excludedFormats ? options.excludedFormats.slice() : [];\r\n if (!self.#hasPoints(self) && !self.#hasLines(self) && self.#hasPolygons(self)) {\r\n excludedFormats.push(Consts.format.GPX);\r\n }\r\n options.formats = self.#formats.filter(item => excludedFormats.indexOf(item) < 0);\r\n self.setOptions(options);\r\n\r\n self.getRenderedHtml(self.CLASS, options, function (html) {\r\n const template = document.createElement('template');\r\n template.innerHTML = html;\r\n self.modal = template.content ? template.content.firstChild : template.firstChild;\r\n document.body.appendChild(self.modal);\r\n\r\n const modalBody = self.modalBody = self.modal.getElementsByClassName(\"tc-modal-body\")[0];\r\n modalBody.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('button[data-format]', function (e) {\r\n\r\n var resolution = self.#displayElevation && self.#interpolation ? parseFloat(modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + ' input[type=number]').value) || (self.options.elevation || self.map.elevation && self.map.elevation.options).resolution : 0;\r\n\r\n const endExport = async (features, opts) => {\r\n\r\n //checkear si son features con datos complejos\r\n var cancel = false;\r\n if (format !== Consts.format.GEOJSON && opts.format !== Consts.format.WKT && features.some(function (feat) {\r\n for (var attr in feat.getData()) {\r\n if (feat.data[attr] instanceof Object)\r\n return true;\r\n }\r\n return false;\r\n }))\r\n await TC.confirm(self.getLocaleString(\"dl.export.complexAttr\").format(format), null,\r\n function () {\r\n cancel = true;\r\n });\r\n if (cancel) {\r\n return;\r\n }\r\n\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n\r\n\r\n TC.Util.closeModal();\r\n self.#addElevationAndInterpolation(features, {\r\n displayElevation: self.#displayElevation,\r\n elevation: self.#displayElevation ? Object.assign({}, opts.elevation || self.map.elevation && self.map.elevation.options, { resolution: resolution }) : null\r\n }).then(\r\n function (features) {\r\n const innerFileName = opts.fileName ||\r\n (opts.title ? opts.title.toLowerCase().replace(/ /g, '_') : 'download');\r\n let fileName = opts.fileName || innerFileName + ' ' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n self.map.exportFeatures(features, {\r\n fileName: innerFileName,\r\n format: format\r\n }).then(data => {\r\n fileName = fileName || TC.getUID();\r\n switch (format) {\r\n case Consts.format.SHAPEFILE:\r\n TC.Util.downloadBlob(fileName + \".zip\", data);\r\n break;\r\n case Consts.format.GEOPACKAGE:\r\n TC.Util.downloadFile(fileName + \".gpkg\", \"application/geopackage+sqlite3\", data);\r\n break;\r\n case Consts.format.KMZ:\r\n TC.Util.downloadBlob(fileName + \".kmz\", data);\r\n break;\r\n default: {\r\n const mimeType = Consts.mimeType[options.format];\r\n TC.Util.downloadFile(fileName + '.' + format.toLowerCase(), mimeType, data);\r\n break;\r\n }\r\n }\r\n });\r\n },\r\n function (error) {\r\n self.open(features, opts);\r\n if (TC.tool.Elevation && error.message === TC.tool.Elevation.errors.MAX_COORD_QUANTITY_EXCEEDED) {\r\n TC.alert(self.getLocaleString('tooManyCoordinatesForElevation.warning'));\r\n return;\r\n }\r\n TC.error(self.getLocaleString('elevation.error'));\r\n }\r\n ).finally(function () {\r\n li && li.removeWait(waitId);\r\n });\r\n };\r\n\r\n const format = e.target.dataset.format;\r\n if (format === Consts.format.GPX) {\r\n if (self.#hasPolygons()) {\r\n TC.confirm(self.getLocaleString('gpxNotCompatible.confirm'), function () {\r\n endExport(self.getFeatures().filter(function (feature) {\r\n return !(feature instanceof Polygon) && !(feature instanceof MultiPolygon);\r\n }), self.getOptions());\r\n });\r\n }\r\n else {\r\n endExport(self.getFeatures(), self.getOptions());\r\n }\r\n }\r\n else {\r\n endExport(self.getFeatures(), self.getOptions());\r\n }\r\n\r\n\r\n }), { passive: true });\r\n\r\n const interpolationPanel = modalBody.querySelector(self._selectors.INTERPOLATION_PANEL);\r\n const elevationCheckbox = modalBody.querySelector(self._selectors.ELEVATION_CHECKBOX);\r\n\r\n if (options.elevation) {\r\n self.#displayElevation = options.elevation.checked ? options.elevation.checked : self.#displayElevation;\r\n\r\n elevationCheckbox.checked = self.#displayElevation;\r\n\r\n if (interpolationPanel) {\r\n if (self.#displayElevation) {\r\n interpolationPanel.classList.remove(Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n if (self.#displayElevation && (self.#hasLines() || self.#hasPolygons()) && options.elevation.resolution) {\r\n interpolationPanel.classList.remove(Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n modalBody.querySelectorAll(self._selectors.INTERPOLATION_RADIO)[self.#interpolation ? 1 : 0].checked = true;\r\n if (self.#interpolation) {\r\n modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE).classList.remove(Consts.classes.HIDDEN);\r\n modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value = self.#interpolationDistance || modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value;\r\n }\r\n }\r\n }\r\n\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.ELEVATION_CHECKBOX, function (_e) {\r\n //self.showDownloadDialog(); // Recalculamos todo el aspecto del diálogo de descarga\r\n\r\n self.#displayElevation = !self.#displayElevation;\r\n\r\n if (interpolationPanel) {\r\n if (self.#displayElevation) {\r\n interpolationPanel.classList.remove(Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n if (self.#displayElevation && (self.#hasLines() || self.#hasPolygons())) {\r\n interpolationPanel.classList.remove(Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n }\r\n\r\n }));\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.INTERPOLATION_RADIO, function (_e) {\r\n const idDiv = modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE);\r\n idDiv.classList.toggle(Consts.classes.HIDDEN);\r\n self.#interpolation = !self.#interpolation;\r\n if (self.#interpolation) modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value = self.#interpolationDistance || modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value;\r\n }));\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.INTERPOLATION_DISTANCE, function (e) {\r\n self.#interpolationDistance = e.target.value;\r\n }));\r\n\r\n let modalOptions = {\r\n closeCallback: function () {\r\n self.modal.parentElement.removeChild(self.modal);\r\n }\r\n };\r\n\r\n if (options.openCallback) {\r\n modalOptions.openCallback = options.openCallback;\r\n }\r\n\r\n TC.Util.showModal(self.modal, modalOptions);\r\n });\r\n }\r\n\r\n close(_callback) {\r\n const self = this;\r\n\r\n if (self.modal && self.modal.parentElement) {\r\n Util.closeModal();\r\n self.modal.parentElement.removeChild(self.modal);\r\n }\r\n }\r\n\r\n setFeatures(features) {\r\n this.features = Array.isArray(features) ? features : [features];\r\n }\r\n\r\n getFeatures() {\r\n return this.features;\r\n }\r\n\r\n setOptions(options) {\r\n this.options = Object.assign(this.options, options);\r\n }\r\n\r\n getOptions() {\r\n return this.options;\r\n }\r\n}\r\n\r\nTC.control.FeatureDownloadDialog = FeatureDownloadDialog;\r\nexport default FeatureDownloadDialog;","\r\n/**\r\n * Opciones de control de obtención de información de entidades de mapa por click.\r\n * @typedef FeatureInfoOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @see SITNA.control.MultiFeatureInfoModeOptions\r\n * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a los clics hechos en el mapa desde el que se carga.\r\n * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n * @property {boolean} [persistentHighlights] - Cuando el control `featureInfo` muestra los resultados de la consulta, si el servicio lo soporta, mostrará resaltadas sobre el mapa las geometrías\r\n * de las entidades geográficas de la respuesta. Si este valor es `true`, dichas geometrías se quedan resaltadas en el mapa indefinidamente. En caso contrario, las geometrías resaltadas se borran en el \r\n * momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n * @example [Ver en vivo](../examples/cfg.FeatureInfoOptions.persistentHighlights.html) {@lang html} \r\n *
\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\nimport md5 from 'md5';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst FeatureInfo = function () {\r\n var self = this;\r\n FeatureInfoCommons.apply(this, arguments);\r\n self.wrap = new TC.wrap.control.FeatureInfo(self);\r\n\r\n Consts.classes.FROMLEFT = 'tc-fromleft';\r\n Consts.classes.FROMRIGHT = 'tc-fromright';\r\n};\r\n\r\nTC.inherit(FeatureInfo, FeatureInfoCommons);\r\n\r\n(function () {\r\n\r\n var ctlProto = FeatureInfo.prototype;\r\n\r\n var roundCoordinates = function roundCoordinates(obj, precision) {\r\n var result;\r\n if (Array.isArray(obj)) {\r\n result = obj.slice();\r\n for (var i = 0, len = result.length; i < len; i++) {\r\n result[i] = roundCoordinates(result[i]);\r\n }\r\n }\r\n else if (typeof obj === \"number\") {\r\n result = Math.round(obj.toFixed(precision));\r\n }\r\n else {\r\n result = obj;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n const ctl = await FeatureInfoCommons.prototype.register.call(self, map);\r\n // Le ponemos un padre al div. Evitamos con esto que se añada el div al mapa (no es necesario, ya que es un mero buffer)\r\n document.createElement('div').appendChild(self.div);\r\n return ctl;\r\n };\r\n\r\n ctlProto.callback = function (coords, _xy) {\r\n const self = this;\r\n\r\n self.querying = true;\r\n return new Promise(function (resolve, _reject) {\r\n const elevationTool = self.getElevationTool();\r\n elevationTool.then(function (tool) {\r\n if (tool) {\r\n self.elevationRequest = tool.getElevation({\r\n crs: self.map.crs,\r\n coordinates: [coords]\r\n });\r\n }\r\n });\r\n\r\n if (self.map && self.filterLayer) {\r\n //aquí se pone el puntito temporal\r\n var title = self.getLocaleString('featureInfo');\r\n var markerOptions = TC.Util.extend({}, self.map.options.styles.marker, self.markerStyle, { title: title, set: title, showsPopup: false });\r\n self.filterLayer.clearFeatures();\r\n self.highlightedFeature = null;\r\n self.filterFeature = null;\r\n self.filterLayer.addMarker(coords, markerOptions).then(function afterMarkerAdd(marker) {\r\n ////cuando se queda el puntito es porque esto sucede tras el cierre de la popup\r\n ////o sea\r\n ////lo normal es que primero se ejecute esto, y luego se procesen los eventos FEATUREINFO o NOFEATUREINFO\r\n ////pero en el caso raro (la primera vez), ocurre al revés. Entonces, ya se habrá establecido lastFeatureCount (no será null)\r\n //if (self.lastFeatureCount === null) {\r\n // self.map.putLayerOnTop(self.filterLayer);\r\n // self.filterFeature = marker;\r\n //}\r\n //else {\r\n // self.filterLayer.clearFeatures();\r\n //}\r\n self.map.putLayerOnTop(self.filterLayer);\r\n self.filterFeature = marker;\r\n\r\n elevationTool.then(function (tool) {\r\n self.renderResults({ coords: marker.geometry, displayElevation: tool, loading: true }, function () {\r\n self.displayResults();\r\n });\r\n });\r\n\r\n var visibleLayers = false;\r\n for (var i = 0; i < self.map.workLayers.length; i++) {\r\n var layer = self.map.workLayers[i];\r\n if (layer.type === Consts.layerType.WMS) {\r\n if (layer.getVisibility() && layer.names.length > 0) {\r\n visibleLayers = true;\r\n break;\r\n }\r\n }\r\n }\r\n self.queryResolution = self.map.getResolution();\r\n if (visibleLayers) {\r\n self.wrap.getFeatureInfo(coords, self.queryResolution).then(() => resolve());\r\n }\r\n else {\r\n // Metemos setTimeout para salirnos del hilo. Sin él se corre el riesgo de que se ejecute esto antes del evento BEFOREFEATUREINFO\r\n setTimeout(function () {\r\n self.responseCallback({ coords: coords });\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.sendRequest = function (filter) {\r\n const self = this;\r\n return self.callback(filter.getCoordinates());\r\n };\r\n\r\n ctlProto.responseCallback = function (options) {\r\n const self = this;\r\n\r\n FeatureInfoCommons.prototype.responseCallback.call(self, options);\r\n if (self.filterFeature) {\r\n var services = options.services;\r\n\r\n // Eliminamos capas sin resultados\r\n if (services) {\r\n for (var i = 0; i < services.length; i++) {\r\n var service = services[i];\r\n for (var j = 0; j < service.layers.length; j++) {\r\n if (!service.layers[j].features.length) {\r\n service.layers.splice(j, 1);\r\n j = j - 1;\r\n }\r\n }\r\n if (!service.layers.length) {\r\n services.splice(i, 1);\r\n i = i - 1;\r\n }\r\n }\r\n }\r\n\r\n self.info.defaultFeature = options.defaultFeature;\r\n\r\n if (self.elevationRequest) {\r\n options.displayElevation = true;\r\n }\r\n self.renderResults(options, function () {\r\n self.insertLinks();\r\n\r\n if (self.sharedFeatureInfo) {\r\n self.div.querySelectorAll('ul.' + self.CLASS + '-services li').forEach(function (li) {\r\n li.classList.add(Consts.classes.CHECKED);\r\n });\r\n var sharedFeature;\r\n var featureObj = self.sharedFeatureInfo;\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n var service = self.info.services[i];\r\n if (service.mapLayers.some(ml => ml.url === featureObj.s)) {\r\n for (var j = 0, jj = service.layers.length; j < jj; j++) {\r\n var layer = service.layers[j];\r\n if (layer.name === featureObj.l) {\r\n for (var k = 0, kk = layer.features.length; k < kk; k++) {\r\n var feature = layer.features[k];\r\n if (feature.id === featureObj.f) {\r\n sharedFeature = feature;\r\n var hash = md5(JSON.stringify({\r\n data: feature.getData(),\r\n geometry: roundCoordinates(feature.geometry, Consts.DEGREE_PRECISION) // Redondeamos a la precisión más fina (grado)\r\n }));\r\n if (featureObj.h !== hash) {\r\n TC.alert(self.getLocaleString('finfo.featureChanged.warning'));\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (sharedFeature) {\r\n self.highlightedFeature = sharedFeature;\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n owner: self,\r\n stealth: true\r\n }).then(function (layer) {\r\n self.sharedFeatureLayer = layer;\r\n self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n layer.addFeature(sharedFeature);\r\n self.map.zoomToFeatures([sharedFeature]);\r\n });\r\n }\r\n delete self.sharedFeatureInfo;\r\n }\r\n else {\r\n self.displayResults();\r\n }\r\n //capturamos el click de label y enlaces para no propagarlos a las tablas y que haga zoom cuando no se quiere\r\n self.div.querySelectorAll('ul.' + self.CLASS + '-services label, ul.' + self.CLASS + '-services a').forEach(function (label) {\r\n label.addEventListener(Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n }); \r\n });\r\n }\r\n };\r\n\r\n ctlProto.displayResultsCallback = function () {\r\n const self = this;\r\n FeatureInfoCommons.prototype.displayResultsCallback.call(self);\r\n\r\n if (self.elevationRequest) {\r\n const ctl = self.getDisplayControl();\r\n self.getDisplayTarget().querySelectorAll(`.${self.CLASS}-elev,.${self.CLASS}-height`).forEach(elm => elm.classList.add(Consts.classes.HIDDEN));\r\n self.elevationRequest.then(function (elevationCoords) {\r\n if (ctl.currentFeature && elevationCoords?.length) {\r\n const currentCoords = ctl.currentFeature.geometry;\r\n const elevPoint = elevationCoords[0];\r\n if (currentCoords[0] === elevPoint[0] && currentCoords[1] === elevPoint[1]) {\r\n const elevationValues = elevationCoords.length ? elevationCoords[0].slice(2) : null;\r\n self.displayElevationValues(elevationValues);\r\n }\r\n }\r\n //self.elevationRequest = null;\r\n });\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n entry.target.querySelectorAll('ul.' + self.CLASS + '-services label, ul.' + self.CLASS + '-services h4, ul.' + self.CLASS + '-services h3 span').forEach(function (h4) {\r\n h4.addEventListener(\"mouseenter\", function (_e) {\r\n if (this.offsetWidth < this.scrollWidth) {\r\n this.title = this.childNodes.item(this.tagName === \"H4\" ? 2 : 0).textContent;\r\n }\r\n else {\r\n this.title = \"\";\r\n }\r\n }, { passive: true });\r\n });\r\n }\r\n });\r\n resizeObserver.observe(self.getDisplayTarget()); \r\n\r\n // 26/04/2021 ahora siempre mostramos XY aunque no haya elevación o resultado GFI\r\n //else if (!self.querying && (!self.info || !self.info.services)) {\r\n // self.closeResults();\r\n //}\r\n };\r\n\r\n ctlProto.renderResults = function (options, callback) {\r\n const self = this;\r\n if (self.filterFeature) {\r\n const currentCoords = self.filterFeature.geometry;\r\n if (options.coords && currentCoords[0] === options.coords[0] && currentCoords[1] === options.coords[1]) {\r\n options.isGeo = self.map.wrap.isGeo();\r\n if (options.coords) {\r\n options.crs = self.map.crs;\r\n options.coords = options.coords.map(function (value) {\r\n const precision = options.isGeo ? Consts.DEGREE_PRECISION : Consts.METER_PRECISION;\r\n return TC.Util.formatCoord(value, precision);\r\n });\r\n }\r\n self.renderData(options, callback);\r\n }\r\n }\r\n };\r\n\r\n ctlProto.displayElevationValues = function (value) {\r\n const self = this;\r\n let tValue, sValue;\r\n if (Array.isArray(value)) {\r\n tValue = value[0];\r\n sValue = value.length > 1 ? value[1] : null;\r\n }\r\n else {\r\n tValue = value;\r\n sValue = null;\r\n }\r\n const locale = self.map.options.locale || Cfg.locale;\r\n let elevationString = tValue === null ? '-' : TC.Util.formatNumber(Math.round(tValue), locale) + ' m';\r\n let heightString = sValue ? sValue.toLocaleString(locale, { maximumFractionDigits: 1 }) + ' m' : '-';\r\n const elevationDisplay = self.getDisplayTarget().querySelector(`.${self.CLASS}-elev`);\r\n const heightDisplay = self.getDisplayTarget().querySelector(`.${self.CLASS}-height`);\r\n if (elevationDisplay && heightDisplay) {\r\n elevationDisplay.classList.toggle(Consts.classes.HIDDEN, tValue === null);\r\n heightDisplay.classList.toggle(Consts.classes.HIDDEN, !sValue);\r\n elevationDisplay.querySelector(`.${self.CLASS}-coords-val`).innerHTML = elevationString;\r\n heightDisplay.querySelector(`.${self.CLASS}-coords-val`).innerHTML = heightString;\r\n }\r\n };\r\n\r\n ctlProto.loadSharedFeature = function (featureObj) {\r\n // Función para dar compatibilidad hacia atrás, ahora las features se comparten por URL\r\n const self = this;\r\n if (featureObj) {\r\n //buscamos si la feature compartida pertenece a alguna de las capas añadidas\r\n if (self.map.workLayers.filter(function (item, _i) {\r\n return item.type === Consts.layerType.WMS && item.url === featureObj.s && item.getDisgregatedLayerNames().indexOf(featureObj.l) >= 0;\r\n }).length === 0) {\r\n TC.error(self.getLocaleString('sharedFeatureNotValid'), Consts.msgErrorMode.TOAST);\r\n return;\r\n }\r\n self.sharedFeatureInfo = featureObj;\r\n // Creamos una consulta getFeatureInfo ad-hoc, con la resolución a la que estaba la consulta original.\r\n const coords = [-100, -100];\r\n self.beforeRequest({ xy: coords }); // xy negativo para que no se vea el marcador, ya que no sabemos dónde ponerlo.\r\n //aquí se pone el puntito temporal\r\n self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n self.filterLayer.addMarker(coords).then(function (marker) {\r\n self.filterFeature = marker;\r\n self.wrap.getFeatureInfo(featureObj.xy, featureObj.r, {\r\n serviceUrl: featureObj.s,\r\n layerName: featureObj.l,\r\n featureId: featureObj.f\r\n });\r\n });\r\n }\r\n };\r\n\r\n ctlProto.exportQuery = function () {\r\n const self = this;\r\n const result = FeatureInfoCommons.prototype.exportQuery.call(self);\r\n result.res = self.queryResolution;\r\n return result;\r\n };\r\n\r\n ctlProto.importQuery = function (query) {\r\n const self = this;\r\n if (query.filter) {\r\n self.map.setResolution(query.res)\r\n .then(() => FeatureInfoCommons.prototype.importQuery.call(self, query));\r\n }\r\n };\r\n\r\n})();\r\n\r\nTC.control.FeatureInfo = FeatureInfo;\r\nexport default FeatureInfo;","\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Click from './Click';\r\nimport Print from './Print';\r\nimport infoShare from './infoShare';\r\nimport Feature from '../../SITNA/feature/Feature';\r\nimport Point from '../../SITNA/feature/Point';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.POPUP = Consts.event.POPUP || 'popup.tc';\r\nConsts.event.POPUPHIDE = Consts.event.POPUPHIDE || 'popuphide.tc';\r\nConsts.event.DRAWCHART = Consts.event.DRAWCHART || 'drawchart.tc';\r\nConsts.event.DRAWTABLE = Consts.event.DRAWTABLE || 'drawtable.tc';\r\nConsts.event.RESULTSPANELCLOSE = Consts.event.RESULTSPANELCLOSE || 'resultspanelclose.tc';\r\nConsts.event.FEATUREHIGHLIGHT = 'featurehighlight.tc';\r\nConsts.event.FEATUREDOWNPLAY = 'featuredownplay.tc';\r\n\r\nconst FeatureInfoCommons = function () {\r\n const self = this;\r\n Click.apply(self, arguments);\r\n\r\n self._selectors = {\r\n LIST_ITEM: `ul.${self.CLASS}-features li`,\r\n SHOW_ALL_CHECKBOX: `.${self.CLASS}-btn input[type=\"checkbox\"].${self.CLASS}-btn-show-all`,\r\n ZOOM_ALL_BUTTON: `.${self.CLASS}-btn .${self.CLASS}-btn-zoom-all`,\r\n DEL_ALL_BUTTON: `.${self.CLASS}-btn .${self.CLASS}-btn-del-all`\r\n };\r\n\r\n self.resultsLayer = null;\r\n self.filterLayer = null;\r\n self._layersPromise = null;\r\n self.filterFeature = null;\r\n self.info = null;\r\n self._infoHistory = {};\r\n self.popup = null;\r\n self.resultsPanel = null;\r\n self.lastFeatureCount = null;\r\n self.exportsState = true;\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n};\r\n\r\n(function () {\r\n\r\n var layerCount = function (ctl) {\r\n return ctl.info && ctl.info.services ?\r\n ctl.info.services.reduce(function (sCount, service) {\r\n return sCount + service.layers.reduce(function (lCount, _layer) {\r\n return lCount + 1;\r\n }, 0);\r\n }, 0) : 0;\r\n };\r\n\r\n TC.inherit(FeatureInfoCommons, Click);\r\n TC.mix(FeatureInfoCommons, infoShare);\r\n\r\n var ctlProto = FeatureInfoCommons.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-finfo';\r\n\r\n ctlProto.CURRENT_CLASS = 'tc-current';\r\n\r\n ctlProto.TITLE_SEPARATOR = ' › ';\r\n ctlProto.DEFAULT_STROKE_COLOR = '#0000ff';\r\n\r\n const setShowAllUI = function () {\r\n const self = this;\r\n const menu = self.getMenuTarget();\r\n const showAllCb = menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX);\r\n if (showAllCb) {\r\n showAllCb.checked = true;\r\n const text = self.getLocaleString('doNotShowOnMapAllResults');\r\n showAllCb.innerHTML = text;\r\n showAllCb.setAttribute('title', text);\r\n }\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).classList.remove(Consts.classes.HIDDEN);\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).classList.remove(Consts.classes.HIDDEN);\r\n };\r\n\r\n const setNotShowAllUI = function () {\r\n const self = this;\r\n const menu = self.getMenuTarget();\r\n const showAllCb = menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX);\r\n if (showAllCb) {\r\n showAllCb.checked = false;\r\n const text = self.getLocaleString('showOnMapAllResults');\r\n showAllCb.innerHTML = text;\r\n showAllCb.setAttribute('title', text);\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).classList.add(Consts.classes.HIDDEN);\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).classList.add(Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n const clickRegisterPromise = Click.prototype.register.call(self, map);\r\n self._createLayers();\r\n\r\n map.loaded(function () {\r\n const shareCtl = map.getControlsByClass('TC.control.Share')[0];\r\n if (shareCtl) {\r\n self.loadSharedFeature(shareCtl.loadParamFeature());\r\n }\r\n self.setDisplayMode(self.options.displayMode || map.defaultInfoContainer || Consts.infoContainer.POPUP);\r\n });\r\n\r\n map\r\n .on(Consts.event.POPUPHIDE + ' ' + Consts.event.RESULTSPANELCLOSE, function (e) { \r\n self?.highlightedFeature?.toggleSelectedStyle(false);\r\n if (e.control === self.getDisplayControl() && self.resultsLayer) { \r\n if (self.highlightedFeature && !self.options.persistentHighlights) {\r\n self.downplayFeature(self.highlightedFeature);\r\n self.highlightedFeature = null;\r\n }\r\n if (!self.querying && e.feature) {\r\n self.filterLayer.removeFeature(e.feature);\r\n }\r\n }\r\n })\r\n //.on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n // self.highlightedFeature = null;\r\n //})\r\n .on(Consts.event.POPUP + ' ' + Consts.event.DRAWTABLE + ' ' + Consts.event.DRAWCHART, function (e) {\r\n const control = e.control; \r\n if (control.currentFeature !== self.filterFeature) {\r\n self.highlightedFeature = control.currentFeature;\r\n }\r\n\r\n // GLS: si la feature es resultado de GFI decoramos\r\n if (e.control.caller === self) {\r\n self._decorateDisplay(control);\r\n }\r\n\r\n })\r\n .on(Consts.event.DRAWCHART, function (e) {\r\n setTimeout(function () {\r\n self.highlightedFeature = e.control.currentFeature;\r\n }, 50);\r\n })\r\n .on(Consts.event.LAYERREMOVE, function () {\r\n if (Object.keys(self._infoHistory).length) {\r\n const services = {};\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return layer.type === Consts.layerType.WMS;\r\n })\r\n .forEach(function (layer) {\r\n const names = services[layer.url] || [];\r\n services[layer.url] = names.concat(layer.getDisgregatedLayerNames());\r\n });\r\n let featuresDeleted = false;\r\n for (let url in self._infoHistory) {\r\n const historyService = self._infoHistory[url];\r\n if (Object.prototype.hasOwnProperty.call(services, url)) {\r\n const service = services[url];\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n if (service.indexOf(name) < 0) {\r\n historyLayer.slice().forEach(f => self.downplayFeature(f));\r\n historyLayer.length = 0;\r\n featuresDeleted = true;\r\n }\r\n }\r\n }\r\n else {\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n historyLayer.slice().forEach(f => self.downplayFeature(f));\r\n featuresDeleted = true;\r\n }\r\n delete self._infoHistory[url];\r\n }\r\n }\r\n if (featuresDeleted) {\r\n self.closeResults();\r\n }\r\n }\r\n })\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n // Quitamos del historial de resaltes las entidades que se borran\r\n if (e.layer === self.resultsLayer) {\r\n for (let url in self._infoHistory) {\r\n const historyService = self._infoHistory[url];\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n historyService[name] = historyLayer.filter(f => f !== e.feature); \r\n }\r\n }\r\n }\r\n })\r\n .on(Consts.event.FEATURESCLEAR, function (e) {\r\n if (e.layer === self.resultsLayer) {\r\n self._infoHistory = {};\r\n }\r\n })\r\n .on(Consts.event.VIEWCHANGE, function (_e) {\r\n self.closeResults();\r\n });\r\n\r\n await clickRegisterPromise;\r\n if (self.options.share) {\r\n await self.getShareDialog();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-finfo.mjs');\r\n const attributesTemplatePromise = import('../templates/tc-ctl-finfo-attr.mjs');\r\n const objectTemplatePromise = import('../templates/tc-ctl-finfo-object.mjs');\r\n const buttonsTemplatePromise = import('../templates/tc-ctl-finfo-buttons.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-finfo-dialog.mjs');\r\n const valueTemplatePromise = import('../templates/tc-ctl-finfo-attr-val.mjs');\r\n const videoTemplatePromise = import('../templates/tc-ctl-finfo-attr-video.mjs');\r\n const imageTemplatePromise = import('../templates/tc-ctl-finfo-attr-image.mjs');\r\n const audioTemplatePromise = import('../templates/tc-ctl-finfo-attr-audio.mjs');\r\n const embedTemplatePromise = import('../templates/tc-ctl-finfo-attr-embed.mjs');\r\n\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-attr'] = (await attributesTemplatePromise).default;\r\n template[self.CLASS + '-object'] = (await objectTemplatePromise).default;\r\n template[self.CLASS + '-buttons'] = (await buttonsTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n template[self.CLASS + '-attr-val'] = (await valueTemplatePromise).default;\r\n template[self.CLASS + '-attr-video'] = (await videoTemplatePromise).default;\r\n template[self.CLASS + '-attr-image'] = (await imageTemplatePromise).default;\r\n template[self.CLASS + '-attr-audio'] = (await audioTemplatePromise).default;\r\n template[self.CLASS + '-attr-embed'] = (await embedTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n // Este div se usa como buffer, así que no debe ser visible.\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', {\r\n checkboxId: self.getUID(),\r\n elevation: self.options.displayElevation\r\n }, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }));\r\n };\r\n\r\n ctlProto.responseCallback = function (options) {\r\n const self = this;\r\n self.querying = false;\r\n\r\n if (self.filterFeature) {\r\n self.info = { services: options.services };\r\n if (self.options.persistentHighlights) {\r\n // Eliminamos de la respuesta las entidades que ya están resaltadas\r\n for (let url in self._infoHistory) {\r\n const infoService = (self.info.services || []).find(s => s.url === url);\r\n if (infoService) {\r\n const historyService = self._infoHistory[url];\r\n for (let name in historyService) {\r\n const infoLayer = infoService.layers.find(l => l.name === name);\r\n if (infoLayer) {\r\n const historyLayer = historyService[name];\r\n historyLayer.forEach(function (feature) {\r\n const id = feature.wrap.getId();\r\n const idx = infoLayer.features.findIndex(f => f.wrap.getId() === id);\r\n if (idx !== -1) {\r\n infoLayer.features.splice(idx, 1);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!options.featureCount) {\r\n self.lastFeatureCount = 0;\r\n self.map.trigger(Consts.event.NOFEATUREINFO, { control: self });\r\n }\r\n else {\r\n self._addSourceAttributes();\r\n self.lastFeatureCount = options.featureCount;\r\n self.map.trigger(Consts.event.FEATUREINFO, TC.Util.extend({ control: self }, options));\r\n }\r\n };\r\n\r\n ctlProto.responseError = function (options) {\r\n const self = this;\r\n if (options.status === 404) {\r\n self.map.toast(self.getLocaleString(\"featureInfo.tooManyLayers\"), { type: Consts.msgType.ERROR });\r\n }\r\n self.responseCallback({});\r\n };\r\n\r\n ctlProto.markerStyle = {\r\n cssClass: Consts.classes.POINT,\r\n anchor: [0.5, 0.5],\r\n width: 15,\r\n height: 15,\r\n noPrint: true\r\n };\r\n\r\n ctlProto.setDisplayMode = async function (mode) {\r\n const self = this;\r\n self.displayMode = mode;\r\n switch (mode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n await self.getResultsPanel();\r\n break;\r\n default:\r\n self.displayMode = Consts.infoContainer.POPUP;\r\n await self.getPopup();\r\n break;\r\n }\r\n };\r\n\r\n ctlProto.getPopup = async function () {\r\n const self = this;\r\n if (!self.popup) {\r\n self.popup = await self.map.addControl('popup', {\r\n closeButton: true,\r\n draggable: self.options.draggable,\r\n share: self.options.share\r\n });\r\n self.popup.caller = self;\r\n self.map.on(Consts.event.POPUP, function (e) {\r\n self.onShowPopup(e);\r\n });\r\n }\r\n return self.popup;\r\n };\r\n\r\n ctlProto.getResultsPanel = async function () {\r\n const self = this;\r\n if (!self.resultsPanel) {\r\n let ctlPromise;\r\n const resultsPanelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: self.getLocaleString(\"threed.rs.panel.gfi\"),\r\n max: self.getLocaleString(\"threed.rs.panel.gfi\")\r\n },\r\n share: self.options.share\r\n };\r\n const container = self.map.getControlsByClass('TC.control.ControlContainer')[0];\r\n if (container) {\r\n resultsPanelOptions.position = container.POSITION.RIGHT;\r\n ctlPromise = container.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n ctlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n self.resultsPanel = await ctlPromise;\r\n self.resultsPanel.caller = self;\r\n }\r\n return self.resultsPanel;\r\n };\r\n\r\n ctlProto.getDisplayControl = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel;\r\n default:\r\n return self.popup;\r\n }\r\n };\r\n\r\n ctlProto.getDisplayTarget = function (options) {\r\n var self = this;\r\n options = options || {};\r\n if (options.control) {\r\n switch (true) {\r\n case TC.control.Popup && options.control instanceof TC.control.Popup:\r\n return options.control.getContainerElement();\r\n case TC.control.ResultsPanel && options.control instanceof TC.control.ResultsPanel:\r\n return options.control.getInfoContainer();\r\n default:\r\n return null;\r\n }\r\n }\r\n switch (self.displayMode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel.getInfoContainer();\r\n default:\r\n return self.popup.getContainerElement();\r\n }\r\n };\r\n\r\n ctlProto.getMenuTarget = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel.getMenuElement();\r\n default:\r\n return self.popup.getMenuElement();\r\n }\r\n };\r\n\r\n ctlProto.displayResults = function () {\r\n var self = this;\r\n const clone = self.div.cloneNode(true);\r\n clone.classList.remove(Consts.classes.HIDDEN);\r\n self.filterFeature.data = clone.outerHTML;\r\n switch (self.displayMode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n if (self.resultsPanel) {\r\n // GLS: si contamos con el control de controles no es necesario cerrar los paneles visibles ya que no habría solape\r\n if (self.map.getControlsByClass(TC.control.ControlContainer).length === 0) {\r\n self.map.getControlsByClass(TC.control.ResultsPanel).forEach(function (p) {\r\n if (p.isVisible()) {\r\n p.close();\r\n }\r\n });\r\n }\r\n\r\n // cerramos los paneles con feature asociada\r\n const panels = self.map.getControlsByClass('TC.control.ResultsPanel');\r\n panels.forEach(function (p) {\r\n if (p !== self.resultsPanel && p.currentFeature && !p.chart) {\r\n p.close();\r\n }\r\n });\r\n\r\n self.resultsPanel.currentFeature = self.filterFeature;\r\n self.resultsPanel.open(self.filterFeature.data, self.resultsPanel.getInfoContainer());\r\n \r\n self.getMenuTarget().innerHTML = \"\";\r\n self.displayResultsCallback();\r\n \r\n }\r\n\r\n break;\r\n default:\r\n self.getPopup().then(popup => self.filterFeature.showPopup(popup));\r\n break;\r\n }\r\n };\r\n\r\n const getElementIndex = function (elm) {\r\n return Array.from(elm.parentElement.children).indexOf(elm);\r\n };\r\n\r\n const getParentElement = function (elm, tagName) {\r\n var result = elm;\r\n do {\r\n result = result.parentElement;\r\n }\r\n while (result && result.tagName !== tagName);\r\n return result;\r\n };\r\n\r\n const getFeatureFromListItem = function (ctl, li) {\r\n const currentFeatureLi = li;\r\n const currentLayerLi = getParentElement(li, 'LI');\r\n const currentServiceLi = getParentElement(currentLayerLi, 'LI');\r\n return ctl.getFeature(getElementIndex(currentServiceLi), getElementIndex(currentLayerLi), getElementIndex(currentFeatureLi));\r\n };\r\n\r\n ctlProto.getFeatureElement = function (feature) {\r\n const self = this;\r\n let result;\r\n\r\n const lis = self.getDisplayTarget().querySelectorAll(self._selectors.LIST_ITEM);\r\n for (var i = 0, ii = lis.length; i < ii; i++) {\r\n const li = lis[i];\r\n const feat = getFeatureFromListItem(self, li);\r\n if (feat === feature) {\r\n result = li;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getNextFeatureElement = function (delta) {\r\n const self = this;\r\n const lis = self.getDisplayTarget().querySelectorAll('ul.' + self.CLASS + '-features > li');\r\n const length = lis.length;\r\n for (var i = 0; i < length; i++) {\r\n if (lis[i].matches('.' + self.CURRENT_CLASS)) {\r\n return lis[(i + delta + length) % length];\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.getFeaturePath = function (feature) {\r\n const self = this;\r\n if (self.info && self.info.services) {\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n const service = self.info.services[i];\r\n for (var j = 0, jj = service.layers.length; j < jj; j++) {\r\n const layer = service.layers[j];\r\n for (var k = 0, kk = layer.features.length; k < kk; k++) {\r\n if (layer.features[k] === feature) {\r\n return {\r\n service: service.title || service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, ''),\r\n layer: layer.path\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.closeResults = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case Consts.infoContainer.RESULTS_PANEL:\r\n if (self.resultsPanel && self.resultsPanel.isVisible()) {\r\n self.resultsPanel.close();\r\n }\r\n break;\r\n default:\r\n if (self.popup && self.popup.isVisible()) {\r\n self.popup.hide();\r\n }\r\n break;\r\n }\r\n };\r\n\r\n ctlProto.displayResultsCallback = function () {\r\n var self = this;\r\n const content = self.getDisplayTarget().querySelector('.' + self.CLASS);\r\n\r\n //// Evento para resaltar una feature\r\n //const onListItemClick = function (e) {\r\n // self.highlightFeature(e.target);\r\n //};\r\n //// En iPad se usa click en vez de touchstart para evitar que se resalte una feature al hacer scroll\r\n //content.querySelectorAll(self._selectors.LIST_ITEM).forEach(li => li.addEventListener('click', onListItemClick));\r\n\r\n // Evento para ir a la siguiente feature\r\n const nextBtn = content.querySelector(`.${self.CLASS}-btn-next`);\r\n if (nextBtn) {\r\n nextBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.highlightFeature(self.getNextFeatureElement(1), 1);\r\n return false;\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para ir a la feature anterior\r\n const prevBtn = content.querySelector(`.${self.CLASS}-btn-prev`);\r\n if (prevBtn) {\r\n prevBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.highlightFeature(self.getNextFeatureElement(-1), -1);\r\n return false;\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para desplegar/replegar features de capa\r\n const onTitleClick = function (e) {\r\n const li = getParentElement(e.target, 'LI');\r\n if (li.classList.contains(Consts.classes.CHECKED)) {\r\n // Si no está en modo móvil ocultamos la capa (si hay más de una)\r\n const anotherLayer = content.querySelector(`.${self.CLASS}-layers li:not(.tc-checked)`);\r\n if (anotherLayer && getComputedStyle(anotherLayer).display !== 'none') {\r\n self.downplayFeatures();\r\n }\r\n }\r\n else {\r\n self.highlightFeature(li.querySelector(self._selectors.LIST_ITEM));\r\n if (self.displayMode === Consts.infoContainer.POPUP) {\r\n self.popup.fitToView(true);\r\n }\r\n }\r\n };\r\n content.querySelectorAll(`ul.${self.CLASS}-layers h4`).forEach(h => h.addEventListener(Consts.event.CLICK, onTitleClick, { passive: true }));\r\n if (self.displayMode === Consts.infoContainer.POPUP) {\r\n content.querySelectorAll('img').forEach(img => img.addEventListener('load', () => self.popup.fitToView()));\r\n }\r\n\r\n // Evento para borrar la feature resaltada\r\n //selector = '.' + self.CLASS + '-del-btn';\r\n //content.addEventListener(eventType, TC.EventTarget.listenerBySelector(selector, function (e) {\r\n // self.downplayFeatures();\r\n // self.closeResults();\r\n //}));\r\n\r\n if (self.info) {\r\n const features = self.getFeatures();\r\n const menu = self.getMenuTarget();\r\n if (features.length > 1) {\r\n // Hay más de una feature\r\n self.getRenderedHtml(`${self.CLASS}-buttons`, { id: self.id }).then(function (html) {\r\n if (!menu.querySelector(`.${self.CLASS}-btn-dl`)) {\r\n menu.insertAdjacentHTML('beforeend', html);\r\n menu.querySelector(`.${self.CLASS}-btn-dl`).addEventListener(Consts.event.CLICK, async function (_e) {\r\n const downloadDialog = await self.getDownloadDialog();\r\n let options = {\r\n title: self.getLocaleString(\"featureInfo\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self._getFileName()\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n downloadDialog.open(self.getFeatures(), options);\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX).addEventListener('change', function (e) {\r\n if (e.target.checked) {\r\n self.showAllFeatures();\r\n }\r\n else {\r\n self.hideAllFeatures();\r\n }\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).addEventListener(Consts.event.CLICK, function (_e) {\r\n self.map.zoomToFeatures(features);\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).addEventListener(Consts.event.CLICK, function (_e) {\r\n self.downplayFeatures();\r\n self.filterLayer.removeFeature(self.filterFeature);\r\n }, { passive: true });\r\n }\r\n });\r\n }\r\n else {\r\n const button = menu.querySelector(`.${self.CLASS}-btn`);\r\n if (button) {\r\n button.remove();\r\n }\r\n }\r\n if (self.info.defaultFeature && self.getFeatureElement(self.info.defaultFeature)) {\r\n self.getFeatureElement(self.info.defaultFeature).classList.add(Consts.classes.DEFAULT);\r\n self.highlightFeature(self.info.defaultFeature);\r\n }\r\n else if (content.querySelector(self._selectors.LIST_ITEM)) {\r\n self.highlightFeature(content.querySelector(self._selectors.LIST_ITEM));\r\n }\r\n }\r\n\r\n content.querySelectorAll('table:not(.tc-complex-attr)').forEach(function (table) {\r\n if (!table.parentElement.classList.contains(Consts.classes.CHECKED)) {\r\n table.setAttribute('title', self.getLocaleString('clickToShowOnMap'));\r\n }\r\n // En iPad se usa click en vez de touchstart para evitar que se resalte una feature al hacer scroll\r\n table.addEventListener('click', function (e) {\r\n const li = this.parentElement;\r\n if (li.classList.contains(Consts.classes.DISABLED)) {\r\n return;\r\n }\r\n if (li.classList.contains(Consts.classes.CHECKED)) {\r\n // Si ya está seleccionada hacemos zoom\r\n const feature = getFeatureFromListItem(self, li);\r\n if (feature && window.getSelection() && window.getSelection().toString().trim().length === 0) {\r\n // Proceso para desactivar highlightFeature mientras hacemos zoom\r\n var zoomHandler = function zoomHandler() {\r\n self._zooming = false;\r\n self.map.off(Consts.event.ZOOM, zoomHandler);\r\n };\r\n self.map.on(Consts.event.ZOOM, zoomHandler);\r\n self._zooming = true;\r\n ///////\r\n\r\n self.map.zoomToFeatures([feature], { animate: true });\r\n }\r\n }\r\n else {\r\n // Si no está seleccionada la seleccionamos\r\n self.highlightFeature(li);\r\n }\r\n e.stopPropagation();\r\n }, { passive: true });\r\n });\r\n content.querySelectorAll('table a, table label, table input').forEach(function (a) {\r\n a.addEventListener(Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n });\r\n\r\n if (TC.browserFeatures.touch() && self.displayMode === Consts.infoContainer.RESULTS_PANEL) {\r\n const prevBtn = content.querySelector('.' + self.CLASS + '-btn-prev');\r\n if (!prevBtn || prevBtn.style.display !== 'none') { // Si los botones de anterior/siguiente están visibles, montamos el swipe\r\n if (self.resultsPanel) {\r\n TC.Util.swipe(self.resultsPanel.div, 'disable');\r\n }\r\n\r\n if (layerCount(self) > 1) {\r\n TC.Util.swipe(content, {\r\n left: function () {\r\n self.highlightFeature(self.getNextFeatureElement(1), 1);\r\n },\r\n right: function () {\r\n self.highlightFeature(self.getNextFeatureElement(-1), -1);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.onShowPopup = function (e) {\r\n const self = this;\r\n if (e.control === self.popup) {\r\n self.displayResultsCallback();\r\n }\r\n };\r\n\r\n ctlProto.loadSharedFeature = function (_featureObj) {\r\n\r\n };\r\n\r\n ctlProto.insertLinks = function () {\r\n var self = this;\r\n const linkText = self.getLocaleString('open');\r\n const titleText = self.getLocaleString('linkInNewWindow');\r\n self.div.querySelectorAll('td.' + self.CLASS + '-val').forEach(function (td) {\r\n const text = td.textContent;\r\n if (TC.Util.isURL(text)) {\r\n td.innerHTML = '' + linkText + '';\r\n }\r\n });\r\n };\r\n\r\n ctlProto.highlightFeature = function (featureOrElement, delta) {\r\n const self = this;\r\n var feature;\r\n if (!self._zooming) {\r\n var featureLi;\r\n // this puede ser o el elemento HTML de la lista correspondiente a la feature o la feature en sí\r\n if (featureOrElement instanceof Feature) {\r\n feature = featureOrElement;\r\n featureLi = self.getFeatureElement(feature);\r\n }\r\n else {\r\n featureLi = featureOrElement;\r\n while (featureLi && featureLi.tagName !== 'LI') {\r\n featureLi = featureLi.parentElement;\r\n }\r\n }\r\n const layerLi = getParentElement(featureLi, 'LI');\r\n const serviceLi = getParentElement(layerLi, 'LI');\r\n\r\n const serviceIdx = getElementIndex(serviceLi);\r\n const layerIdx = getElementIndex(layerLi);\r\n const featureIdx = getElementIndex(featureLi);\r\n feature = feature || self.getFeature(serviceIdx, layerIdx, featureIdx);\r\n\r\n self.downplayFeatures({ exception: feature });\r\n\r\n // Añadimos feature al historial de features resaltadas\r\n const service = self.info.services[serviceIdx];\r\n if (!Object.prototype.hasOwnProperty.call(self._infoHistory, service.url)) {\r\n self._infoHistory[service.url] = {};\r\n }\r\n const historyService = self._infoHistory[service.url];\r\n const layer = service.layers[layerIdx];\r\n const historyLayer = historyService[layer.name] || [];\r\n if (!historyLayer.includes(feature)) {\r\n historyService[layer.name] = historyLayer.concat(feature);\r\n }\r\n\r\n const displayTarget = self.getDisplayTarget();\r\n displayTarget.querySelectorAll('li').forEach(elm => elm.classList.remove(self.CURRENT_CLASS));\r\n featureLi.classList.add(Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n layerLi.classList.add(Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n serviceLi.classList.add(Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n if (delta > 0) {\r\n featureLi.classList.add(Consts.classes.FROMLEFT);\r\n layerLi.classList.add(Consts.classes.FROMLEFT);\r\n serviceLi.classList.add(Consts.classes.FROMLEFT);\r\n }\r\n else if (delta < 0) {\r\n featureLi.classList.add(Consts.classes.FROMRIGHT);\r\n layerLi.classList.add(Consts.classes.FROMRIGHT);\r\n serviceLi.classList.add(Consts.classes.FROMRIGHT);\r\n }\r\n\r\n if (featureLi.querySelector('table')) {\r\n featureLi.querySelector('table').setAttribute('title', self.getLocaleString('clickToCenter'));\r\n }\r\n\r\n // Añadida esta condición porque si el servicio no devuelve datos parseables como feature se devuelve una pseudofeature sin geometría\r\n if (!(feature instanceof Feature)) {\r\n feature = null;\r\n }\r\n\r\n //Si la feature a resaltar ya está resaltada, no hacemos nada. Así evitamos parpadeo\r\n if (feature && feature === self.highlightedFeature) {\r\n return;\r\n }\r\n\r\n self.highlightedFeature = feature;\r\n\r\n const counter = displayTarget.querySelector('.' + self.CLASS + '-counter-current');\r\n if (counter) {\r\n counter.innerHTML = self.getFeatureIndex(serviceIdx, layerIdx, featureIdx) + 1;\r\n }\r\n\r\n\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => {\r\n if (f !== feature) {\r\n self.downplayFeature(f);\r\n }\r\n });\r\n }\r\n if (feature) {\r\n const triggerEvent = f => self.map.trigger(Consts.event.FEATUREHIGHLIGHT, { feature: f, control: self });\r\n if (feature.geometry) {\r\n feature.showsPopup = self.options.persistentHighlights;\r\n // Si persistentHighlights == true, es posible que la entidad que queremos añadir ya está en la capa de una consulta anterior\r\n // En ese caso, no añadimos entidad nueva\r\n let prevFeat;\r\n if (self.options.persistentHighlights) {\r\n prevFeat = self.resultsLayer.getFeatureById(feature.wrap.getId());\r\n if (prevFeat) {\r\n triggerEvent(prevFeat);\r\n }\r\n }\r\n if (!prevFeat) {\r\n self.resultsLayer.addFeature(feature).then(function (_f) {\r\n triggerEvent(feature);\r\n });\r\n }\r\n }\r\n else {\r\n featureLi.classList.add(Consts.classes.DISABLED);\r\n triggerEvent(feature);\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.downplayFeature = function (feature) {\r\n const self = this;\r\n const li = self.getFeatureElement(feature);\r\n if (li) {\r\n li.classList.remove(Consts.classes.CHECKED);\r\n }\r\n // Si persistentHighlights = true, puede que la entidad a borrar sea una persistida de una petición anterior\r\n let prevFeat;\r\n if (self.options.persistentHighlights) {\r\n prevFeat = self.resultsLayer.getFeatureById(feature.wrap.getId());\r\n }\r\n self.resultsLayer.removeFeature(prevFeat || feature);\r\n for (var url in self._infoHistory) {\r\n const service = self._infoHistory[url];\r\n for (var name in service) {\r\n let layer = service[name];\r\n layer = service[name] = layer.filter(f => f !== feature);\r\n if (!layer.length) {\r\n delete service[name];\r\n }\r\n }\r\n }\r\n if (self.highlightedFeature === feature) {\r\n self.highlightedFeature = null;\r\n }\r\n self.map.trigger(Consts.event.FEATUREDOWNPLAY, { feature: feature, control: self });\r\n };\r\n\r\n ctlProto.downplayFeatures = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const prevHlFeature = self.highlightedFeature;\r\n if (prevHlFeature && prevHlFeature !== options.exception) {\r\n self.downplayFeature(prevHlFeature);\r\n self.highlightedFeature = null;\r\n }\r\n self.getFeatures()\r\n .filter(f => f !== prevHlFeature)\r\n .forEach(f => self.resultsLayer.removeFeature(f));\r\n\r\n const exceptionFLi = options.exception ? self.getFeatureElement(options.exception) : undefined;\r\n var exceptionLLi, exceptionSLi;\r\n if (exceptionFLi) {\r\n exceptionLLi = getParentElement(exceptionFLi, 'LI');\r\n exceptionSLi = getParentElement(exceptionLLi, 'LI');\r\n }\r\n\r\n const target = self.getDisplayTarget();\r\n Array.from(target.querySelectorAll('ul.' + self.CLASS + '-services li'))\r\n .filter(function (li) {\r\n return li !== exceptionFLi && li !== exceptionLLi && li !== exceptionSLi;\r\n })\r\n .forEach(function (li) {\r\n li.classList.remove(\r\n Consts.classes.CHECKED,\r\n Consts.classes.DISABLED,\r\n Consts.classes.FROMLEFT,\r\n Consts.classes.FROMRIGHT);\r\n });\r\n target.querySelectorAll('.' + self.CLASS + '-features table:not(.tc-complex-attr)').forEach(function (table) {\r\n table.setAttribute('title', self.getLocaleString('clickToShowOnMap'));\r\n });\r\n\r\n setNotShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.showAllFeatures = function () {\r\n const self = this;\r\n if (self.highlightedFeature) {\r\n self.downplayFeature(self.highlightedFeature);\r\n }\r\n\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n const currentService = self.info.services[i];\r\n const historyService = self._infoHistory[currentService.url] = self._infoHistory[currentService.url] || {};\r\n for (var j = 0, jj = currentService.layers.length; j < jj; j++) {\r\n const currentLayer = currentService.layers[j];\r\n let historyLayer = historyService[currentLayer.name] || [];\r\n for (var k = 0, kk = currentLayer.features.length; k < kk; k++) {\r\n const currentFeature = currentLayer.features[k];\r\n currentFeature.showsPopup = self.options.persistentHighlights;\r\n if (!historyLayer.includes(currentFeature)) {\r\n historyService[currentLayer.name] = historyLayer = historyLayer.concat(currentFeature);\r\n }\r\n if (!self.resultsLayer.features.includes(currentFeature)) {\r\n self.resultsLayer.addFeature(currentFeature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.hideAllFeatures = function () {\r\n const self = this;\r\n const checkedLayer = self.getDisplayTarget().querySelector(`ul.${self.CLASS}-layers > li.${Consts.classes.CHECKED}`);\r\n self.downplayFeatures();\r\n if (checkedLayer) {\r\n checkedLayer.classList.add(Consts.classes.CHECKED);\r\n }\r\n //setNotShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.getFeature = function (serviceIdx, layerIdx, featureIdx) {\r\n const self = this;\r\n var result;\r\n const info = self.info;\r\n if (info && info.services) {\r\n result = info.services[serviceIdx];\r\n if (result) {\r\n result = result.layers[layerIdx];\r\n if (result) {\r\n result = result.features[featureIdx];\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getFeatures = function () {\r\n const self = this;\r\n let result = [];\r\n const info = self.info;\r\n if (info && info.services) {\r\n result = info.services.reduce((prev, cur) => {\r\n return prev.concat(cur.layers.reduce((p, c) => {\r\n return p.concat(c.features);\r\n }, []));\r\n }, result);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getFeatureIndex = function (serviceIdx, layerIdx, featureIdx) {\r\n const self = this;\r\n var result = -1;\r\n const info = self.info;\r\n if (info) {\r\n for (var i = 0; i <= serviceIdx; i++) {\r\n var service = info.services[i];\r\n var maxj = i === serviceIdx ? layerIdx : service.layers.length - 1;\r\n for (var j = 0; j <= maxj; j++) {\r\n var layer = service.layers[j];\r\n var maxk = j === layerIdx && i === serviceIdx ? featureIdx : layer.features.length - 1;\r\n for (var k = 0; k <= maxk; k++) {\r\n result = result + 1;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.removeFeature = function (feature) {\r\n const self = this;\r\n const info = self.info;\r\n if (info) {\r\n let features = self.getFeatures();\r\n const featureIndex = features.indexOf(feature);\r\n for (var i = 0; i < self.info.services.length; i++) {\r\n for (var j = 0; j < self.info.services[i].layers.length; j++) {\r\n const position = self.info.services[i].layers[j].features.findIndex((f) => f.id === feature.id);\r\n if (position >= 0) { \r\n if (self.info.services[i].layers[j].features.splice(position, 1).length) {\r\n features = self.getFeatures();\r\n self.responseCallback(Object.assign(self.info, {\r\n coords: self.filterFeature.geometry,\r\n defaultFeature: features[featureIndex === features.length ? featureIndex-1 :featureIndex],\r\n featureCount: features.length,\r\n\r\n })); \r\n return true;\r\n }\r\n \r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n ctlProto.beforeRequest = function (options) {\r\n var self = this;\r\n self.querying = true;\r\n self.map.trigger(Consts.event.BEFOREFEATUREINFO, {\r\n xy: options.xy,\r\n control: self\r\n });\r\n self.closeResults();\r\n if (self.map && self.resultsLayer) {\r\n self.lastFeatureCount = null;\r\n\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => self.downplayFeature(f));\r\n }\r\n self.info = null;\r\n }\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n if (self.wrap) {\r\n self.wrap.activate();\r\n }\r\n Control.prototype.activate.call(self);\r\n };\r\n\r\n ctlProto.deactivate = function (stopChain) {\r\n var self = this;\r\n if (self.popup && self.popup.isVisible()) {\r\n self.popup.hide();\r\n }\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => self.downplayFeature(f));\r\n self.info = null;\r\n self._infoHistory = {};\r\n }\r\n self.filterLayer && self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n if (self.wrap) {\r\n self.wrap.deactivate();\r\n }\r\n Control.prototype.deactivate.call(self, stopChain);\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState && self.resultsLayer) {\r\n const exportStateOptions = {};\r\n // Si exportamos una consulta, tenemos que quitar las entidades resaltadas para evitar exportarlas dos veces\r\n if (self.toShare) {\r\n exportStateOptions.features = [];\r\n }\r\n return {\r\n id: self.id,\r\n layer: self.resultsLayer.exportState(exportStateOptions),\r\n query: self.toShare\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n self._layersPromise.then(function () {\r\n self.resultsLayer.importState(state.layer);\r\n if (state.query) {\r\n self.importQuery(state.query);\r\n }\r\n });\r\n };\r\n\r\n ctlProto._createLayers = function () {\r\n const self = this;\r\n\r\n var resultsLayer;\r\n if (self.options.resultsLayer) { // En caso de que se haya indicado una capa por configuración, la utilizamos\r\n resultsLayer = self.options.resultsLayer;\r\n } else {\r\n resultsLayer = {\r\n id: self.getUID(),\r\n title: self.CLASS + ': Results layer',\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true\r\n };\r\n }\r\n var filterLayer;\r\n if (self.options.filterLayer) {\r\n filterLayer = self.options.filterLayer;\r\n }\r\n else {\r\n const styles = {};\r\n if (self.geometryType === Consts.geom.POLYLINE) {\r\n styles.line = self.style;\r\n }\r\n if (self.geometryType === Consts.geom.POLYGON) {\r\n styles.polygon = self.style;\r\n }\r\n\r\n filterLayer = {\r\n id: self.getUID(),\r\n title: self.CLASS + ': Filter layer',\r\n owner: self,\r\n stealth: true,\r\n type: Consts.layerType.VECTOR,\r\n styles: styles\r\n };\r\n }\r\n\r\n const map = self.map;\r\n self._layersPromise = new Promise(function (resolve, _reject) {\r\n map.loaded(function () {\r\n const rlPromise = map.layers.indexOf(resultsLayer) >= 0 ?\r\n Promise.resolve(resultsLayer) : map.addLayer(resultsLayer);\r\n const flPromise = map.layers.indexOf(filterLayer) >= 0 ?\r\n Promise.resolve(filterLayer) : map.addLayer(filterLayer);\r\n Promise.all([rlPromise, flPromise]).then(function (layers) {\r\n self.resultsLayer = layers[0];\r\n self.filterLayer = layers[1];\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return self._layersPromise;\r\n };\r\n\r\n ctlProto._decorateDisplay = function (displayControl) {\r\n const self = this;\r\n\r\n const resultsContainer = self.getMenuTarget({ control: displayControl });\r\n\r\n // Añadimos botón de imprimir\r\n const printBtn = resultsContainer.querySelector('.' + Print.prototype.CLASS + '-btn');\r\n if (printBtn) {\r\n // Si no hay datos porque el popup es de un GFI sin éxito y no es de una feature resaltada borramos impresora\r\n if (!self.lastFeatureCount && (!displayControl.currentFeature || displayControl.currentFeature.showsPopup !== true)) {\r\n printBtn.remove();\r\n }\r\n }\r\n else {\r\n var printTitle = self.getLocaleString(\"feature\");\r\n if (displayControl === self.getDisplayControl()) {\r\n if (self.filterFeature instanceof Point) {\r\n const geom = self.filterFeature.geometry;\r\n printTitle = self.getLocaleString('featuresAt', {\r\n crs: self.map.crs,\r\n x: TC.Util.formatCoord(geom[0], self.map.wrap.isGeo() ? Consts.DEGREE_PRECISION : Consts.METER_PRECISION),\r\n y: TC.Util.formatCoord(geom[1], self.map.wrap.isGeo() ? Consts.DEGREE_PRECISION : Consts.METER_PRECISION)\r\n });\r\n }\r\n else {\r\n printTitle = self.getLocaleString('spatialQueryResults');\r\n }\r\n }\r\n else if (displayControl.currentFeature) {\r\n printTitle = displayControl.currentFeature.id;\r\n }\r\n\r\n // Si hay datos porque el popup es de un GFI con éxito o es de una feature resaltada damos la opción de imprimirlos\r\n if (self.lastFeatureCount || displayControl.currentFeature && displayControl.currentFeature.showsPopup === true) {\r\n new Print({\r\n target: resultsContainer,\r\n printableElement: self.getDisplayTarget({ control: displayControl }),\r\n title: printTitle\r\n });\r\n }\r\n }\r\n\r\n FeatureInfoCommons.addSpecialAttributeEventListeners(displayControl.getContainerElement());\r\n\r\n };\r\n\r\n ctlProto._addSourceAttributes = function () {\r\n const self = this;\r\n const serviceAttrName = 'h3_' + self.getLocaleString('service');\r\n const layerAttrName = 'h4_' + self.getLocaleString('layer');\r\n // Añadimos como atributos los títulos de servicio y capa\r\n if (self.info && self.info.services) {\r\n self.info.services.forEach(function (service) {\r\n service.layers.forEach(function (layer) {\r\n layer.features.forEach(function (feature) {\r\n if (feature instanceof Feature) {\r\n const path = self.getFeaturePath(feature);\r\n if (path) {\r\n const newData = {};\r\n newData[serviceAttrName] = path.service;\r\n if (path.layer) {\r\n newData[layerAttrName] = path.layer.join(self.TITLE_SEPARATOR);\r\n }\r\n const allData = TC.Util.extend(newData, feature.getData());\r\n feature.clearData();\r\n feature.setData(allData);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n };\r\n\r\n ctlProto._getFileName = function () {\r\n const self = this;\r\n return self.getLocaleString('featureInfo').toLowerCase().replace(/\\s/gi, '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n };\r\n\r\n ctlProto.showShareDialog = function (dialogDiv) {\r\n const self = this;\r\n self.toShare = self.exportQuery();\r\n return infoShare.showShareDialog.call(self, dialogDiv);\r\n };\r\n\r\n ctlProto.exportQuery = function () {\r\n const self = this;\r\n const result = {};\r\n if (self.filterFeature) {\r\n const filterLayerState = self.filterLayer.exportState();\r\n filterLayerState.features.forEach(f => delete f.data);\r\n result.filter = filterLayerState;\r\n if (self.highlightedFeature) {\r\n result.hlf = self.highlightedFeature.getId();\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.importQuery = function (query) {\r\n const self = this;\r\n if (query.filter) {\r\n self.activate();\r\n self.filterLayer.importState(query.filter)\r\n .then(function () {\r\n self.filterFeature = self.filterLayer.features[0];\r\n self.sendRequest(self.filterFeature);\r\n const onFeatureHighlight = function (e) {\r\n if (e.control === self) {\r\n const feature = self.getFeatures().find(f => f.getId() === query.hlf);\r\n if (feature) {\r\n self.highlightFeature(feature);\r\n }\r\n else {\r\n if (!Object.prototype.hasOwnProperty.call(query, \"hlf\")) {\r\n // timeout porque se está generando asíncronamente el botón de mostrar todas\r\n setTimeout(() => self.showAllFeatures(), 100);\r\n }\r\n }\r\n self.map.off(Consts.event.FEATUREHIGHLIGHT, onFeatureHighlight);\r\n }\r\n };\r\n self.map.on(Consts.event.FEATUREHIGHLIGHT, onFeatureHighlight);\r\n });\r\n }\r\n };\r\n\r\n const staticMethodMock = { CLASS: ctlProto.CLASS };\r\n\r\n FeatureInfoCommons.renderFeatureAttributeTable = async function (options) {\r\n if (!staticMethodMock.template) {\r\n await ctlProto.loadTemplates.call(staticMethodMock);\r\n }\r\n return await ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-attr', options);\r\n };\r\n\r\n FeatureInfoCommons.renderFeatureAttribute = async function (options) {\r\n if (!staticMethodMock.template) {\r\n await ctlProto.loadTemplates.call(staticMethodMock);\r\n }\r\n return await ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-attr-val', options);\r\n };\r\n\r\n FeatureInfoCommons.showImageDialog = async function (img) {\r\n if (!staticMethodMock.template) {\r\n await ctlProto.loadTemplates.call(staticMethodMock);\r\n }\r\n const html = await ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-dialog', {\r\n src: img.getAttribute('src')\r\n });\r\n const container = document.createElement('div');\r\n document.body.appendChild(container);\r\n container.innerHTML = html;\r\n TC.Util.showModal(container.querySelector(`.${ctlProto.CLASS}-img-dialog`), {\r\n closeCallback: () => container.remove()\r\n });\r\n container.querySelector('.tc-modal-img img').addEventListener(Consts.event.CLICK, function (_e) {\r\n TC.Util.closeModal();\r\n }, { passive: true });\r\n return container;\r\n };\r\n\r\n FeatureInfoCommons.addSpecialAttributeEventListeners = function (container) {\r\n container.querySelectorAll('img.tc-img-attr').forEach(function (img) {\r\n img.addEventListener(Consts.event.CLICK, function (e) {\r\n setTimeout(() => FeatureInfoCommons.showImageDialog(e.target), 50);\r\n e.stopPropagation(); // No queremos zoom si pulsamos en una imagen\r\n }, { passive: true });\r\n });\r\n };\r\n\r\n})();\r\n\r\nTC.control.FeatureInfoCommons = FeatureInfoCommons;\r\nexport default FeatureInfoCommons;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport { Defaults } from '../Cfg';\r\nimport Util from '../Util';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\n\r\nConsts.event.STYLECHANGE = 'stylechange.tc';\r\n\r\nconst className = 'tc-ctl-fstyler';\r\nconst elementName = 'sitna-feature-styler';\r\n\r\nconst formatColor = function (color) {\r\n if (color) {\r\n const match = color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n if (match && match.length) {\r\n return '#' + match[1] + match[1] + match[2] + match[2] + match[3] + match[3];\r\n }\r\n }\r\n return color;\r\n};\r\n\r\nclass FeatureStyler extends WebComponentControl {\r\n CLASS = className;\r\n #classSelector = '.' + className;\r\n #style;\r\n #strokeColorPicker;\r\n #strokeWidthSelector;\r\n #strokeWidthWatch;\r\n #fillColorPicker;\r\n #fillOpacitySelector;\r\n #radiusSelector;\r\n #initialStyles;\r\n #previousStyles = new WeakMap();\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n\r\n self.#initialStyles = self.options.styles || Util.extend(true, {}, Defaults.styles);\r\n self.styles = self.#initialStyles;\r\n self.initProperty('mode');\r\n self.setStyle(self.getModeStyle());\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['mode', 'disabled'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'mode') {\r\n self.#onModeChange();\r\n }\r\n if (name === 'disabled') {\r\n self.#onDisabledChange();\r\n }\r\n }\r\n\r\n getClassName() {\r\n return className;\r\n }\r\n\r\n get mode() {\r\n const self = this;\r\n if (self.hasAttribute('mode')) {\r\n return self.getAttribute('mode');\r\n }\r\n return Consts.geom.POINT;\r\n }\r\n\r\n set mode(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('mode', value);\r\n }\r\n else {\r\n self.removeAttribute('mode');\r\n }\r\n }\r\n\r\n #onModeChange() {\r\n const self = this;\r\n const mode = self.mode;\r\n self.#style = self.getModeStyle(mode);\r\n self.#toggleFillStyleTools(mode !== Consts.geom.POLYLINE &&\r\n mode !== Consts.geom.MULTIPOLYLINE &&\r\n mode !== Consts.geom.RECTANGLE);\r\n self.#toggleRadiusStyleTools(mode === Consts.geom.POINT ||\r\n mode === Consts.geom.MULTIPOINT);\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n this.toggleAttribute('disabled', !!value);\r\n }\r\n\r\n #onDisabledChange() {\r\n const self = this;\r\n self.querySelectorAll('input').forEach(i => i.disabled = self.disabled);\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-fstyler.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n let strokeColor;\r\n let strokeWidth;\r\n let fillColor;\r\n let fillOpacity;\r\n let radius;\r\n const styles = self.styles;\r\n switch (self.mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n strokeColor = styles.line.strokeColor;\r\n strokeWidth = styles.line.strokeWidth;\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n strokeColor = styles.polygon.strokeColor;\r\n strokeWidth = styles.polygon.strokeWidth;\r\n fillColor = styles.polygon.fillColor;\r\n fillOpacity = styles.polygon.fillOpacity;\r\n break;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n strokeColor = styles.point.strokeColor;\r\n strokeWidth = styles.point.strokeWidth;\r\n fillColor = styles.point.fillColor;\r\n fillOpacity = styles.point.fillOpacity;\r\n radius = styles.point.radius;\r\n break;\r\n case Consts.geom.RECTANGLE:\r\n strokeColor = styles.line.strokeColor;\r\n strokeWidth = styles.line.strokeWidth;\r\n fillColor = styles.polygon?.fillColor;\r\n fillOpacity = 0;\r\n break;\r\n default:\r\n strokeColor = styles.line?.strokeColor;\r\n strokeWidth = styles.line?.strokeWidth;\r\n fillColor = styles.polygon?.fillColor;\r\n fillOpacity = styles.polygon?.fillOpacity;\r\n break;\r\n }\r\n const renderObject = {\r\n strokeColor: formatColor(strokeColor),\r\n strokeWidth: strokeWidth,\r\n fillColor: formatColor(fillColor),\r\n fillOpacity: (fillOpacity || 0) * 100,\r\n radius: radius\r\n };\r\n return self._set1stRenderPromise(self.renderData(renderObject, function () {\r\n self.#onModeChange();\r\n self.#onDisabledChange();\r\n self.#strokeColorPicker = self.querySelector(self.#classSelector + '-str-c');\r\n self.#strokeColorPicker.addEventListener(Consts.event.CHANGE, function (e) {\r\n self.setStrokeColor(e.target.value);\r\n });\r\n\r\n self.#strokeWidthSelector = self.querySelector(self.#classSelector + '-str-w');\r\n self.#strokeWidthSelector.addEventListener(Consts.event.CHANGE, function (e) {\r\n self.setStrokeWidth(e.target.value);\r\n });\r\n self.#strokeWidthWatch = self.querySelector(self.#classSelector + '-str-w-watch');\r\n\r\n self.#fillColorPicker = self.querySelector(self.#classSelector + '-fll-c');\r\n self.#fillColorPicker.addEventListener(Consts.event.CHANGE, function (e) {\r\n self.setFillColor(e.target.value);\r\n });\r\n self.#fillOpacitySelector = self.querySelector(self.#classSelector + '-fll-w');\r\n self.#fillOpacitySelector.addEventListener(Consts.event.CHANGE, function (e) {\r\n self.setFillOpacity(parseFloat(e.target.value) / 100);\r\n });\r\n self.#radiusSelector = self.querySelector(self.#classSelector + '-rad-w');\r\n self.#radiusSelector.addEventListener(Consts.event.CHANGE, function (e) {\r\n self.setRadius(parseFloat(e.target.value));\r\n });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n setStyles(styles) {\r\n const self = this;\r\n self.styles = Util.extend(true, {}, styles);\r\n self.setStyle(self.getModeStyle());\r\n return self;\r\n }\r\n\r\n setStyle(style) {\r\n const self = this;\r\n const appliedStyle = Util.extend(self.#style, style);\r\n let newStyle = {};\r\n for (var key in appliedStyle) {\r\n if (self.#isSupportedProperty(key)) {\r\n newStyle[key] = appliedStyle[key];\r\n }\r\n }\r\n self.#style = newStyle;\r\n switch (self.mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n case Consts.geom.RECTANGLE:\r\n self.styles.line = newStyle;\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n self.styles.polygon = newStyle;\r\n break;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n self.styles.point = newStyle;\r\n break;\r\n default:\r\n newStyle = {};\r\n break;\r\n }\r\n self.renderPromise().then(function () {\r\n switch (self.mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n case Consts.geom.RECTANGLE:\r\n const lineStyle = self.styles.line;\r\n if (lineStyle.strokeColor) {\r\n self.setStrokeColor(lineStyle.strokeColor);\r\n }\r\n if (lineStyle.strokeWidth) {\r\n self.setStrokeWidth(lineStyle.strokeWidth);\r\n }\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n const polygonStyle = self.styles.polygon;\r\n if (polygonStyle.strokeColor) {\r\n self.setStrokeColor(polygonStyle.strokeColor);\r\n }\r\n if (polygonStyle.strokeWidth) {\r\n self.setStrokeWidth(polygonStyle.strokeWidth);\r\n }\r\n if (polygonStyle.fillColor) {\r\n self.setFillColor(polygonStyle.fillColor);\r\n }\r\n if (polygonStyle.fillOpacity) {\r\n self.setFillOpacity(polygonStyle.fillOpacity);\r\n }\r\n break;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n const pointStyle = self.styles.point;\r\n if (pointStyle.strokeColor) {\r\n self.setStrokeColor(pointStyle.strokeColor);\r\n }\r\n if (pointStyle.strokeWidth) {\r\n self.setStrokeWidth(pointStyle.strokeWidth);\r\n }\r\n if (pointStyle.fillColor) {\r\n self.setFillColor(pointStyle.fillColor);\r\n }\r\n if (pointStyle.fillOpacity) {\r\n self.setFillOpacity(pointStyle.fillOpacity);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n self.#cacheStyles();\r\n });\r\n return self;\r\n }\r\n\r\n getStyle() {\r\n const self = this;\r\n return self.#style;\r\n }\r\n\r\n resetStyle() {\r\n const self = this;\r\n self.setStyle(self.getModeStyle());\r\n return self;\r\n }\r\n\r\n getModeStyle(mode) {\r\n const self = this;\r\n mode = mode || self.mode;\r\n switch (mode) {\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n case Consts.geom.RECTANGLE:\r\n return self.styles.line;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n return self.styles.polygon;\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n return self.styles.point;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n #cacheStyles() {\r\n const self = this;\r\n if (self.layer) {\r\n self.#previousStyles.set(self.layer, self.styles);\r\n }\r\n }\r\n\r\n setLayer(layer) {\r\n const self = this;\r\n self.layer = layer;\r\n if (!layer) {\r\n return self;\r\n }\r\n let styles = self.#previousStyles.get(layer);\r\n if (!styles) {\r\n if (layer.styles) {\r\n styles = [{}, self.#initialStyles, layer.styles];\r\n }\r\n else {\r\n styles = [{}, self.#initialStyles].concat(layer\r\n .features\r\n .map(f => {\r\n const style = f.getStyle();\r\n if (Object.keys(style).length === 0) {\r\n return null;\r\n }\r\n const styleObj = {};\r\n switch (true) {\r\n case f instanceof Polyline:\r\n case f instanceof MultiPolyline:\r\n styleObj.line = style;\r\n break;\r\n case f instanceof Polygon:\r\n case f instanceof MultiPolygon:\r\n styleObj.polygon = style;\r\n break;\r\n case f instanceof Point:\r\n case f instanceof MultiPoint:\r\n styleObj.point = style;\r\n break;\r\n default:\r\n return null;\r\n }\r\n return styleObj;\r\n })\r\n .filter(style => !!style));\r\n }\r\n styles = TC.Util.extend(...styles);\r\n }\r\n self.setStyles(styles);\r\n return self;\r\n }\r\n\r\n #isSupportedProperty(name) {\r\n return name === 'strokeColor' || name === 'strokeWidth' ||\r\n name === 'fillColor' || name === 'fillOpacity' || \r\n name === 'radius';\r\n }\r\n\r\n setFeature(feature) {\r\n const self = this;\r\n self.layer = null;\r\n const style = feature?.getStyle();\r\n switch (true) {\r\n case feature instanceof Polyline:\r\n case feature instanceof MultiPolyline:\r\n self.mode = Consts.geom.POLYLINE;\r\n break;\r\n case feature instanceof Point:\r\n case feature instanceof MultiPoint:\r\n self.mode = Consts.geom.POINT;\r\n break;\r\n default:\r\n self.mode = Consts.geom.POLYGON;\r\n }\r\n if (style && Object.keys(style).length > 0) {\r\n self.setStyle(style);\r\n }\r\n return self;\r\n }\r\n\r\n #setColorWatch(colorPicker, color) {\r\n const toHex = c => new Number(c).toString(16).padStart(2, '0');\r\n if (Array.isArray(color)) {\r\n color = `#${toHex(color[0])}${toHex(color[1])}${toHex(color[2])}`;\r\n }\r\n else {\r\n const match = color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n if (match && match.length) {\r\n color = '#' + match[1] + match[1] + match[2] + match[2] + match[3] + match[3];\r\n }\r\n }\r\n colorPicker.value = color;\r\n if (!TC.browserFeatures.inputTypeColor()) {\r\n const input = colorPicker;\r\n input.style.backgroundColor = color;\r\n input.blur();\r\n }\r\n }\r\n\r\n setStrokeColorWatch(color) {\r\n const self = this;\r\n if (color === undefined) {\r\n color = self.getModeStyle().strokeColor;\r\n }\r\n self.#setColorWatch(self.#strokeColorPicker, color);\r\n return self;\r\n }\r\n\r\n setFillColorWatch(color) {\r\n const self = this;\r\n if (color === undefined) {\r\n color = self.getModeStyle().fillColor;\r\n }\r\n self.#setColorWatch(self.#fillColorPicker, color);\r\n return self;\r\n }\r\n\r\n #setPropertyColor(property, watchFn, color) {\r\n const self = this;\r\n const style = self.#style;\r\n if (style) {\r\n watchFn.call(self, color);\r\n const currentValue = style[property];\r\n if (currentValue === color) {\r\n return self;\r\n }\r\n style[property] = color;\r\n }\r\n\r\n self.#triggerStyleChange({ property: property, value: color });\r\n return self;\r\n }\r\n\r\n setStrokeColor(color) {\r\n const self = this;\r\n return self.#setPropertyColor('strokeColor', self.setStrokeColorWatch, color);\r\n }\r\n\r\n setFillColor(color) {\r\n const self = this;\r\n return self.#setPropertyColor('fillColor', self.setFillColorWatch, color);\r\n }\r\n\r\n setFillOpacityWatch(percentage) {\r\n const self = this;\r\n if (percentage === undefined) {\r\n percentage = Math.round(self.getModeStyle().fillOpacity * 100);\r\n }\r\n percentage = parseInt(percentage, 10);\r\n if (!Number.isNaN(percentage)) {\r\n self.#fillOpacitySelector.value = percentage;\r\n }\r\n return self;\r\n }\r\n\r\n setFillOpacity(alpha) {\r\n const self = this;\r\n if (!Number.isNaN(alpha)) {\r\n self.setFillOpacityWatch(Math.round(alpha * 100));\r\n const style = self.#style;\r\n if (style) {\r\n if (style.fillOpacity === alpha) {\r\n return self;\r\n }\r\n style.fillOpacity = alpha;\r\n }\r\n\r\n self.#triggerStyleChange({ property: 'fillOpacity', value: alpha });\r\n }\r\n return self;\r\n }\r\n\r\n setStrokeWidthWatch(width) {\r\n const self = this;\r\n if (width === undefined) {\r\n width = self.getModeStyle().strokeWidth;\r\n }\r\n width = parseInt(width, 10);\r\n if (!Number.isNaN(width)) {\r\n self.#strokeWidthSelector.value = width;\r\n self.#strokeWidthWatch.style.borderBottomWidth = width + 'px';\r\n }\r\n return self;\r\n }\r\n\r\n setStrokeWidth(width) {\r\n const self = this;\r\n width = parseInt(width, 10);\r\n if (!Number.isNaN(width)) {\r\n self.setStrokeWidthWatch(width);\r\n const style = self.#style;\r\n if (style) {\r\n if (style.strokeWidth === width) {\r\n return self;\r\n }\r\n style.strokeWidth = width;\r\n }\r\n\r\n self.#triggerStyleChange({ property: 'strokeWidth', value: width });\r\n }\r\n return self;\r\n }\r\n\r\n setRadiusWatch(radius) {\r\n const self = this;\r\n if (radius === undefined) {\r\n radius = self.getModeStyle().radius;\r\n }\r\n radius = parseInt(radius, 10);\r\n if (!Number.isNaN(radius)) {\r\n self.#radiusSelector.value = radius;\r\n }\r\n return self;\r\n }\r\n\r\n setRadius(radius) {\r\n const self = this;\r\n radius = parseInt(radius, 10);\r\n if (!Number.isNaN(radius)) {\r\n self.setRadiusWatch(radius);\r\n const style = self.#style;\r\n if (style) {\r\n if (style.radius === radius) {\r\n return self;\r\n }\r\n style.radius = radius;\r\n }\r\n\r\n self.#triggerStyleChange({ property: 'radius', value: radius });\r\n }\r\n return self;\r\n }\r\n\r\n #toggleTools(tools, visible) {\r\n if (tools) {\r\n const classToggle = visible !== undefined ? !visible : undefined;\r\n tools.classList.toggle(Consts.classes.HIDDEN, classToggle);\r\n }\r\n }\r\n\r\n #getFillStyleTools() {\r\n const self = this;\r\n return self.querySelector(`.${self.CLASS}-fill`);\r\n }\r\n\r\n #getRadiusStyleTools() {\r\n const self = this;\r\n return self.querySelector(`.${self.CLASS}-radius`);\r\n }\r\n\r\n #toggleFillStyleTools(visible) {\r\n const self = this;\r\n self.#toggleTools(self.#getFillStyleTools(), visible);\r\n return self;\r\n }\r\n\r\n #toggleRadiusStyleTools(visible) {\r\n const self = this;\r\n self.#toggleTools(self.#getRadiusStyleTools(), visible);\r\n return self;\r\n }\r\n\r\n #triggerStyleChange(data) {\r\n const self = this;\r\n const event = new CustomEvent(Consts.event.STYLECHANGE, { detail: data });\r\n self.dispatchEvent(event);\r\n }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, FeatureStyler);\r\nTC.control.FeatureStyler = FeatureStyler;\r\nexport default FeatureStyler;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\nimport Print from './Print';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\n\r\nTC.control = TC.control || {};\r\nTC.control.infoShare = infoShare;\r\nTC.control.Print = Print;\r\nTC.Control = Control;\r\n\r\nConsts.event.POPUP = Consts.event.POPUP || 'popup.tc';\r\nConsts.event.POPUPHIDE = Consts.event.POPUPHIDE || 'popuphide.tc';\r\nConsts.event.DRAWCHART = Consts.event.DRAWCHART || 'drawchart.tc';\r\nConsts.event.DRAWTABLE = Consts.event.DRAWTABLE || 'drawtable.tc';\r\nConsts.event.DIALOG = Consts.event.DIALOG || 'dialog.tc';\r\nConsts.event.FEATUREHIGHLIGHT = Consts.event.FEATUREHIGHLIGHT || 'featurehighlight.tc';\r\nConsts.event.FEATUREDOWNPLAY = Consts.event.FEATUREDOWNPLAY || 'featuredownplay.tc';\r\n\r\nconst getSingleClusteredFeature = function (feature) {\r\n if (feature && Array.isArray(feature.features)) {\r\n if (feature.features.length === 1) {\r\n return feature.features[0];\r\n }\r\n return null;\r\n }\r\n return feature;\r\n};\r\n\r\nconst getClusteredFeatures = function (feature) {\r\n if (feature) {\r\n if (Array.isArray(feature.features)) {\r\n return feature.features;\r\n }\r\n return [feature];\r\n }\r\n return [];\r\n};\r\n\r\nclass FeatureTools extends Control {\r\n TITLE_SEPARATOR = ' › ';\r\n FILE_TITLE_SEPARATOR = '__';\r\n #selectors;\r\n #classSelector;\r\n _dialogDiv;\r\n _parentCtl;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.exportsState = true;\r\n const cs = self.#classSelector = '.' + self.CLASS;\r\n self.#selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]',\r\n INTERPOLATION_RADIO: 'input[type=radio][name=finfo-ip-coords]',\r\n INTERPOLATION_DISTANCE: cs + '-dialog-ip-m'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-ftools';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n map\r\n .on(Consts.event.POPUP + ' ' + Consts.event.DRAWTABLE + ' ' + Consts.event.DRAWCHART, function (e) {\r\n const control = e.control;\r\n if (control.caller || control.currentFeature) {\r\n self.addUI(control);\r\n }\r\n // TODO: ¿Y si miramos si la feature del control ya está asociada a otro control abierto para decir si decoramos o no?\r\n })\r\n .on(Consts.event.FEATUREHIGHLIGHT, function (e) {\r\n self.addUI(e.control.getDisplayControl());\r\n e.feature.toggleSelectedStyle(true);\r\n })\r\n .on(Consts.event.FEATUREDOWNPLAY, function (e) {\r\n self.updateUI(e.control.getDisplayControl());\r\n e.feature.toggleSelectedStyle(false);\r\n });\r\n\r\n await Promise.all([TC.Control.prototype.register.call(self, map), self.renderPromise()]);\r\n await self.getShareDialog();\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-ftools.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-ftools-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n self.renderData({ elevation: self.options.displayElevation }),\r\n self.getRenderedHtml(self.CLASS + '-dialog', {\r\n checkboxId: self.getUID(),\r\n elevation: self.options.displayElevation\r\n }, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n }\r\n\r\n addUI(ctl) {\r\n const self = this;\r\n self._parentCtl = ctl;\r\n const menuContainer = ctl.getMenuElement();\r\n // Nos aseguramos de que el se decora el control una sola vez\r\n const menuIsMissing = function () {\r\n return menuContainer && !menuContainer.querySelector('.' + self.CLASS);\r\n };\r\n\r\n if (self.getCurrentFeature(ctl)) {\r\n if (menuIsMissing()) {\r\n // Añadimos los botones de herramientas\r\n self.getRenderedHtml(self.CLASS, null, function (html) {\r\n\r\n // Añadimos botón de imprimir\r\n if (menuIsMissing()) {\r\n let endAddUIPromise = Promise.resolve();\r\n const container = ctl.getContainerElement();\r\n if (!container.querySelectorAll('.' + TC.control.Print.prototype.CLASS + '-btn').length) {\r\n const highlightedFeature = !ctl.caller && ctl.currentFeature ? ctl.currentFeature : ctl.caller.highlightedFeature;\r\n if (highlightedFeature && highlightedFeature.showsPopup === true) {\r\n self.printControl = new TC.control.Print({\r\n target: menuContainer,\r\n printableElement: container,\r\n title: highlightedFeature.id\r\n });\r\n endAddUIPromise = self.printControl.renderPromise();\r\n }\r\n }\r\n\r\n endAddUIPromise.then(function endAddUI() {\r\n if (menuIsMissing()) {\r\n const parser = new DOMParser();\r\n const tools = parser.parseFromString(html, 'text/html').body.firstChild;\r\n menuContainer.appendChild(tools);\r\n\r\n self.updateUI(ctl);\r\n\r\n self.#setToolButtonHandlers(ctl);\r\n\r\n self.#decorateDisplay(ctl);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n self.updateUI(ctl);\r\n }\r\n }\r\n }\r\n\r\n #decorateDisplay(displayControl) {\r\n const self = this;\r\n\r\n displayControl.getContainerElement().querySelectorAll('table.tc-attr').forEach(function (attributeTable) {\r\n if (!displayControl.caller && displayControl.currentFeature) { // Si es un popup/panel propio de la feature\r\n\r\n // Añadimos un zoom a la feature al pulsar en la tabla\r\n attributeTable.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.zoomToFeatures([self.getCurrentFeature(displayControl)]);\r\n }, { passive: true });\r\n\r\n attributeTable.classList.add(self.CLASS + '-zoom');\r\n attributeTable.setAttribute('title', self.getLocaleString('clickToCenter'));\r\n }\r\n\r\n attributeTable.querySelectorAll('a, label, input, video, audio').forEach(function (a) {\r\n a.addEventListener(Consts.event.CLICK, function (e) {\r\n e.stopPropagation(); // No queremos zoom si pulsamos en un enlace\r\n }, { passive: true });\r\n });\r\n });\r\n const table = displayControl.getContainerElement().querySelector(`.${displayControl.CLASS}-body > table`);\r\n if (table) table.parentElement.classList.add(self.CLASS + '-zoom');\r\n }\r\n\r\n updateUI(ctl) {\r\n const self = this;\r\n const uiDiv = ctl.getMenuElement().querySelector('.' + self.CLASS);\r\n const currentFeature = self.getCurrentFeature(ctl);\r\n // Primer caso para que isActive == true: que esté resaltada una feature.\r\n // Segundo caso: que la feature no sea de GFI.\r\n // Se puede haber llamado a updateUI después de haber eliminado la feature(FEATUREDOWNPLAY)\r\n // por es necesario que la feature tenga capa para considerar isActive == true.\r\n const isActive = currentFeature && currentFeature.layer && currentFeature.layer.owner ?\r\n currentFeature.layer.owner.filterLayer !== currentFeature.layer : currentFeature && !!currentFeature.layer;\r\n if (isActive) {\r\n if (currentFeature) {\r\n uiDiv.dataset.layerId = currentFeature.layer.id;\r\n uiDiv.dataset.featureId = currentFeature.id;\r\n\r\n const isCluster = !!currentFeature.layer.cluster && currentFeature.features.length > 1;\r\n const shareBtn = uiDiv.querySelector(`.${self.CLASS}-share-btn`);\r\n shareBtn && shareBtn.classList.toggle(Consts.classes.HIDDEN, isCluster);\r\n uiDiv.querySelector(`.${self.CLASS}-dl-btn`).classList.toggle(Consts.classes.HIDDEN, isCluster);\r\n uiDiv.querySelector(`.${self.CLASS}-del-btn`).classList.toggle(Consts.classes.HIDDEN, isCluster);\r\n\r\n self.getElevationTool().then(function (tool) {\r\n const profileBtn = uiDiv.querySelector(`.${self.CLASS}-prof-btn`);\r\n if (profileBtn) {\r\n profileBtn.classList.toggle(Consts.classes.HIDDEN,\r\n !tool ||\r\n !(currentFeature instanceof Polyline || currentFeature instanceof MultiPolyline) ||\r\n !!ctl.chart);\r\n }\r\n const elevBtn = uiDiv.querySelector(`.${self.CLASS}-elev-btn`);\r\n if (elevBtn) {\r\n elevBtn.classList.toggle(Consts.classes.HIDDEN, !tool ||\r\n !(currentFeature instanceof Point) ||\r\n isCluster);\r\n }\r\n });\r\n }\r\n else {\r\n delete uiDiv.dataset.layerId;\r\n delete uiDiv.dataset.featureId;\r\n }\r\n }\r\n if (self.printControl && currentFeature) {\r\n self.printControl.title = currentFeature.id;\r\n }\r\n if (uiDiv) {\r\n uiDiv.classList.remove(Consts.classes.ACTIVE);\r\n setTimeout(function () {\r\n uiDiv.classList.toggle(Consts.classes.ACTIVE, !!isActive);\r\n }, 100);\r\n }\r\n }\r\n\r\n onDownloadButtonClick(e) {\r\n const self = this;\r\n const feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n if (feature) {\r\n self.showDownloadDialog(feature);\r\n }\r\n }\r\n\r\n onShareButtonClick(e) {\r\n const self = this;\r\n const feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n if (feature) {\r\n self.#prepareFeatureToShare({ feature: feature }).then(async function (f) {\r\n self.toShare = {\r\n feature: f\r\n };\r\n\r\n self.showShareDialog();\r\n });\r\n } else {\r\n throw Error(\"FeatureTools: there is no feature to share\");\r\n }\r\n }\r\n\r\n onZoomButtonClick(e) {\r\n const self = this;\r\n const features = getClusteredFeatures(self.getFeatureFromElement(e.target.parentElement));\r\n if (features.length) {\r\n self.zoomToFeatures(features);\r\n }\r\n }\r\n\r\n onDeleteButtonClick(e) {\r\n const self = this;\r\n self.removeFeature(self.getFeatureFromElement(e.target.parentElement));\r\n }\r\n\r\n onProfileButtonClick(e) {\r\n const self = this;\r\n const feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n const depOptions = {};\r\n if (feature) {\r\n self.getElevationControl().then(function (elevCtl) {\r\n if (elevCtl) {\r\n if (feature.getGeometryStride() > 2) {\r\n depOptions.originalElevation = true;\r\n depOptions.onlyOriginalElevation = false;\r\n\r\n elevCtl.setElevationToolOptions({\r\n resolution: self.options.resolution || 0,\r\n sampleNumber: self.options.sampleNumber || 0\r\n });\r\n } else {\r\n elevCtl.setElevationToolOptions(Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation));\r\n }\r\n elevCtl.displayElevationProfile(feature, depOptions);\r\n }\r\n });\r\n }\r\n }\r\n\r\n onElevationButtonClick(e) {\r\n const self = this;\r\n self.getElevationControl().then(elevCtl => elevCtl &&\r\n elevCtl.displayElevationValue(getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement)), {\r\n ignoreCache: true\r\n }));\r\n }\r\n\r\n #setToolButtonHandlers(ctl) {\r\n const self = this;\r\n\r\n const container = ctl.getMenuElement();\r\n\r\n // Evento para mostrar diálogo modal de descarga\r\n container.querySelector('.' + self.CLASS + '-dl-btn').addEventListener(Consts.event.CLICK, function (e) {\r\n self.onDownloadButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para mostrar diálogo modal de compartir\r\n container.querySelector('.' + self.CLASS + '-share-btn').addEventListener(Consts.event.CLICK, function (e) {\r\n self.onShareButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para hacer zoom\r\n container.querySelector('.' + self.CLASS + '-zoom-btn').addEventListener(Consts.event.CLICK, function (e) {\r\n self.onZoomButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para hacer ver perfil\r\n const profileBtn = container.querySelector(`.${self.CLASS}-prof-btn`);\r\n if (profileBtn) {\r\n profileBtn.addEventListener(Consts.event.CLICK, function (e) {\r\n self.onProfileButtonClick(e);\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para hacer ver elevación\r\n const elevBtn = container.querySelector(`.${self.CLASS}-elev-btn`);\r\n if (elevBtn) {\r\n elevBtn.addEventListener(Consts.event.CLICK, function (e) {\r\n self.onElevationButtonClick(e);\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para borrar la feature\r\n container.querySelector('.' + self.CLASS + '-del-btn').addEventListener(Consts.event.CLICK, function (e) {\r\n self.onDeleteButtonClick(e);\r\n }, { passive: true });\r\n }\r\n\r\n async getElevationControl() {\r\n const self = this;\r\n if (!self.options.displayElevation) {\r\n return null;\r\n }\r\n if (!self.elevationControl) {\r\n self.elevationControl = await self.map.addControl('elevation', self.options.displayElevation);\r\n }\r\n return self.elevationControl;\r\n }\r\n\r\n async showDownloadDialog(feature) {\r\n const self = this;\r\n\r\n const downloadDialog = await self.getDownloadDialog();\r\n\r\n var options = {\r\n title: self.getLocaleString(\"feature\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self.#getFeatureFilename(feature)\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n\r\n options.openCallback = function () {\r\n self.map.trigger(Consts.event.DIALOG, { control: downloadDialog, action: \"download\" });\r\n };\r\n\r\n downloadDialog.open(feature, options);\r\n }\r\n\r\n getCurrentFeature(ctl) {\r\n return ctl?.caller?.highlightedFeature || ctl?.currentFeature;\r\n }\r\n\r\n getFeatureFromElement(elm) {\r\n const self = this;\r\n const layer = self.map.getLayer(elm.dataset.layerId);\r\n if (layer) {\r\n return layer.getFeatureById(elm.dataset.featureId);\r\n }\r\n return null;\r\n }\r\n\r\n zoomToFeatures(features) {\r\n const self = this;\r\n if (self.map) {\r\n self.map.zoomToFeatures(features, { animate: true });\r\n }\r\n }\r\n\r\n removeFeature(feature) {\r\n const self = this;\r\n const removeFeature = function () {\r\n if (feature && feature.layer) {\r\n feature.layer.removeFeature(feature);\r\n }\r\n };\r\n // No pedimos confirmación para borrar si es un resalte de GFI.\r\n if (feature && feature.layer && feature.layer.owner && feature.layer === feature.layer.owner.resultsLayer) {\r\n removeFeature();\r\n //closeDisplay();\r\n if (self._parentCtl?.caller?.removeFeature) self._parentCtl?.caller?.removeFeature(feature);\r\n }\r\n else {\r\n TC.confirm(self.getLocaleString('deleteFeature.confirm'), function () {\r\n removeFeature();\r\n //closeDisplay();\r\n if (self._parentCtl?.caller?.removeFeature)self._parentCtl?.caller?.removeFeature(feature);\r\n });\r\n }\r\n }\r\n\r\n async #prepareFeatureToShare(options) {\r\n const self = this;\r\n options = options || {};\r\n const currentFeature = options.feature;\r\n if (currentFeature) {\r\n const feature = currentFeature.clone();\r\n feature.setId(currentFeature.id);\r\n feature.layer = currentFeature.layer;\r\n if (options.elevation) {\r\n var mustGetElevations = true;\r\n if (!options.elevation.resolution && feature.getGeometryStride() > 2) {\r\n mustGetElevations = false;\r\n }\r\n if (mustGetElevations) {\r\n const elevOptions = {\r\n crs: self.map.crs,\r\n features: [feature],\r\n maxCoordQuantity: self.options.displayElevation?.maxCoordQuantity,\r\n resolution: options.elevation.resolution,\r\n sampleNumber: 0 // No queremos determinar el número de muestras\r\n };\r\n const tool = await self.getElevationTool();\r\n const features = await tool.setGeometry(elevOptions);\r\n return features[0];\r\n }\r\n else {\r\n return feature;\r\n }\r\n }\r\n else {\r\n feature.removeZ();\r\n return feature;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getFeatureTitle(feature) {\r\n var result = \"\";\r\n if (feature) {\r\n result = feature.id;\r\n }\r\n return result;\r\n }\r\n\r\n #getFeatureFilename(feature) {\r\n const self = this;\r\n const layerTitle = self.getFeatureTitle(feature).toString().replace(new RegExp(self.TITLE_SEPARATOR, 'g'), self.FILE_TITLE_SEPARATOR) || self.getLocaleString('feature');\r\n return layerTitle.toLowerCase().replace(/\\s/gi, '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n\r\n if (self.toShare) {\r\n const state = {};\r\n if (self.toShare.doZoom) {\r\n state.doZoom = self.toShare.doZoom;\r\n }\r\n state.id = self.id;\r\n if (self.toShare.feature) {\r\n let layerState;\r\n const featureToShare = self.toShare.feature.clone();\r\n featureToShare.showsPopup = true;\r\n featureToShare.autoPopup = true;\r\n layerState = self.toShare.feature.layer.exportState({\r\n features: [featureToShare]\r\n });\r\n state.features = layerState.features;\r\n if (layerState.crs) {\r\n state.crs = layerState.crs;\r\n }\r\n } else if (self.toShare.features) {\r\n state.features = self.toShare.features;\r\n if (self.sharedFeaturesLayer) {\r\n let layerState = self.sharedFeaturesLayer.exportState();\r\n state.features = layerState.features;\r\n }\r\n if (self.toShare.crs) {\r\n state.crs = self.toShare.crs;\r\n }\r\n }\r\n return state;\r\n\r\n }\r\n return null;\r\n }\r\n\r\n importState(state) {\r\n const self = this;\r\n if (self.map && state.features && state.features.length) {\r\n self.toShare = {\r\n features: state.features\r\n };\r\n if (state.crs) {\r\n self.toShare.crs = state.crs;\r\n }\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n owner: self,\r\n type: Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n stealth: true\r\n }).then(function (layer) {\r\n self.sharedFeaturesLayer = layer;\r\n layer.importState({ features: state.features, crs: state.crs }).then(function () {\r\n if (state.doZoom) {\r\n self.map.zoomToFeatures(layer.features);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\nTC.mix(FeatureTools, infoShare);\r\n\r\nTC.control.FeatureTools = FeatureTools;\r\nexport default FeatureTools;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Edit from './Edit';\r\nimport Geometry from '../Geometry';\r\nimport Util from '../Util';\r\nimport filter from '../filter';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport '../../SITNA/feature/Marker';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport '../../SITNA/feature/Polygon';\r\nimport '../../SITNA/feature/MultiPoint';\r\nimport '../../SITNA/feature/MultiMarker';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport '../../SITNA/feature/MultiPolygon';\r\n\r\nTC.control = TC.control || {};\r\nTC.Geometry = Geometry;\r\nTC.filter = filter;\r\n\r\nconst editedLayers = new Set();\r\nwindow.addEventListener('beforeunload', function onBeforeunload(e) {\r\n if (editedLayers.size > 0) {\r\n e.preventDefault();\r\n e.returnValue = '';\r\n }\r\n}, { capture: true });\r\n\r\nconst elementName = 'sitna-file-edit';\r\n\r\nclass FileEdit extends WebComponentControl {\r\n\r\n TITLE_SEPARATOR = ' › ';\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n self.initProperty('snapping');\r\n\r\n self.layer = null;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['stylable'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'stylable') {\r\n self.#onStylableChange();\r\n }\r\n if (name == 'snapping') {\r\n self.#onSnappingChange();\r\n }\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-fedit';\r\n }\r\n\r\n get stylable() {\r\n return this.hasAttribute('stylable');\r\n }\r\n\r\n set stylable(value) {\r\n this.toggleAttribute('stylable', !!value);\r\n }\r\n\r\n async #onStylableChange() {\r\n const self = this;\r\n const editControl = await self.getEditControl();\r\n editControl.stylable = self.stylable;\r\n }\r\n\r\n get snapping() {\r\n return this.hasAttribute('snapping');\r\n }\r\n\r\n set snapping(value) {\r\n this.toggleAttribute('snapping', !!value);\r\n }\r\n\r\n async #onSnappingChange() {\r\n const self = this;\r\n const snapping = self.snapping;\r\n (await self.getEditControl()).snapping = snapping;\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n const result = await super.register.call(self, map);\r\n\r\n self.editControl = await self.getEditControl();\r\n if (self.editControl) {\r\n self.editControl.styles = self.options.styles;\r\n }\r\n\r\n map\r\n .on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === self.panel) {\r\n self.closeEditSession();\r\n }\r\n })\r\n .on(Consts.event.LAYERREMOVE + ' ' + Consts.event.FEATURESCLEAR, function (e) {\r\n editedLayers.delete(e.layer);\r\n self.getLayer().then(function (ownLayer) {\r\n if (e.layer === ownLayer) {\r\n self.closeEditSession();\r\n }\r\n });\r\n })\r\n .on(Consts.event.FEATUREADD, function (e) {\r\n self.getLayer().then(function (ownLayer) {\r\n if (e.layer === ownLayer) {\r\n const firstFeature = e.layer.features[0];\r\n if (firstFeature !== e.feature) {\r\n e.feature.folders = firstFeature?.folders?.slice();\r\n e.feature.wrap.feature._folders = e.feature.folders;\r\n }\r\n }\r\n });\r\n })\r\n .on(Consts.event.FEATUREADD + ' ' + Consts.event.FEATUREREMOVE, function (e) {\r\n self.getLayer().then(function (ownLayer) {\r\n if (e.layer === ownLayer) {\r\n if (!editedLayers.has(e.layer)) {\r\n editedLayers.add(e.layer);\r\n }\r\n }\r\n });\r\n });\r\n\r\n const editCtlPromise = self.getEditControl();\r\n editCtlPromise.then(editCtl => {\r\n editCtl.on(Consts.event.FEATUREMODIFY + ' ' + Consts.event.DRAWEND, function (e) {\r\n if (e.feature.layer && !editedLayers.has(e.feature.layer)) {\r\n editedLayers.add(e.feature.layer);\r\n }\r\n });\r\n });\r\n\r\n map.ready(function () {\r\n if (self.options.caller) {\r\n self.#registerTool(self.options.caller);\r\n }\r\n else {\r\n map.getControlsByClass(TC.control.WorkLayerManager)\r\n .concat(map.getControlsByClass(TC.control.Geolocation))\r\n .forEach(function (ctl) {\r\n self.#registerTool(ctl);\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n #registerTool(ctl) {\r\n const self = this;\r\n if (ctl.options.fileEditing) {\r\n\r\n // Sacamos el carácter unicode de la variable CSS\r\n let editIconText;\r\n const editIconUcodeString = getComputedStyle(document.querySelector(':root'))\r\n .getPropertyValue('--icon-edit');\r\n const match = editIconUcodeString.match(/\\\\([a-f0-9]+)/i);\r\n if (match) {\r\n editIconText = String.fromCharCode(parseInt(match[1], 16));\r\n }\r\n else {\r\n editIconText = editIconUcodeString.replace(/['\"]/g, '');\r\n }\r\n\r\n\r\n if (ctl instanceof TC.control.WorkLayerManager) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const layer = self.map.getLayer(layerId);\r\n if (layer.type !== Consts.layerType.VECTOR) {\r\n return;\r\n }\r\n const className = self.CLASS + '-btn-edit';\r\n let checkbox = container.querySelector('sitna-toggle.' + className);\r\n if (!checkbox) {\r\n const text = self.getLocaleString('editFeatures');\r\n checkbox = new Toggle();\r\n checkbox.text = text;\r\n checkbox.checkedIconText = editIconText;\r\n checkbox.uncheckedIconText = editIconText;\r\n checkbox.dataset.layerId = layerId;\r\n }\r\n return checkbox;\r\n },\r\n updateEvents: [Consts.event.CONTROLACTIVATE, Consts.event.CONTROLDEACTIVATE],\r\n updateFn: function (_e) {\r\n const checkbox = this;\r\n const layer = self.map.getLayer(checkbox.dataset.layerId);\r\n self.getLayer().then(function (ownLayer) {\r\n checkbox.checked = ownLayer === layer;\r\n });\r\n },\r\n actionFn: function () {\r\n const checkbox = this;\r\n const layer = self.map.getLayer(checkbox.dataset.layerId);\r\n if (!layer.isRaster()) {\r\n self.closeEditSession();\r\n if (checkbox.checked) {\r\n self.setLayer(layer).then(() => {\r\n self.openEditSession();\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n else if (ctl instanceof TC.control.Geolocation) {\r\n const editCtlPromise = self.getEditControl();\r\n editCtlPromise.then(function (editCtl) {\r\n editCtl.on(Consts.event.DRAWEND + ' ' + Consts.event.FEATUREMODIFY, function (e) {\r\n if (e.feature.layer === ctl.trackLayer) {\r\n if (e.feature instanceof Polyline || e.feature instanceof MultiPolyline) {\r\n ctl.updateEndMarkers();\r\n const selectedTrackItem = ctl.getSelectedTrackItem();\r\n if (selectedTrackItem) {\r\n ctl.displayTrackProfile(selectedTrackItem, { forceRefresh: true });\r\n }\r\n }\r\n }\r\n });\r\n editCtl.on(Consts.event.DRAWEND, function (e) {\r\n if (e.feature.layer === ctl.trackLayer) {\r\n if (e.feature instanceof Point) {\r\n e.feature.setData({ name: '' }); // Atributo necesario en un waypoint\r\n const style = e.feature.getStyle() || {};\r\n style.label = ctl.trackLayer.styles?.point?.label;\r\n e.feature.setStyle(style);\r\n }\r\n }\r\n });\r\n editCtl.getLineDrawControl().then(function (lineCtl) {\r\n lineCtl.on(Consts.event.POINT + ' ' + Consts.event.DRAWUNDO +\r\n ' ' + Consts.event.DRAWREDO + ' ' + Consts.event.DRAWCANCEL, function (_e) {\r\n ctl.displayTrackProfile(ctl.getSelectedTrackItem(), {\r\n forceRefresh: true,\r\n feature: lineCtl.wrap.getSketch()\r\n });\r\n });\r\n });\r\n });\r\n\r\n ctl.addItemTool({\r\n renderFn: function (container) {\r\n const className = self.CLASS + '-btn-edit';\r\n let checkbox = container.querySelector('sitna-toggle.' + className);\r\n if (!checkbox) {\r\n const text = self.getLocaleString('editTrack');\r\n checkbox = new Toggle();\r\n checkbox.text = text;\r\n checkbox.checkedIconText = editIconText;\r\n checkbox.uncheckedIconText = editIconText;\r\n self.getLayer().then(function (ownLayer) {\r\n checkbox.checked = ownLayer === ctl.trackLayer;\r\n });\r\n }\r\n return checkbox;\r\n },\r\n updateEvents: [Consts.event.CONTROLACTIVATE, Consts.event.CONTROLDEACTIVATE, , Consts.event.LAYERUPDATE],\r\n updateFn: function (_e) {\r\n const checkbox = this;\r\n self.getLayer().then(function (ownLayer) {\r\n checkbox.checked = ownLayer === ctl.trackLayer;\r\n });\r\n },\r\n actionFn: function () {\r\n const checkbox = this;\r\n const openSessionFn = async function () {\r\n self.closeEditSession();\r\n await self.setLayer(ctl.trackLayer);\r\n self.openEditSession({\r\n stylable: false,\r\n extensibleSketch: true, // Permitimos prolongar un track\r\n modes: [\r\n Edit.mode.MODIFY,\r\n Edit.mode.ADDPOINT,\r\n Edit.mode.ADDLINE\r\n ]\r\n });\r\n };\r\n if (checkbox.checked) {\r\n const hasElevations = ctl.trackLayer.features.some(f => f.getGeometryStride() > 2);\r\n if (hasElevations) {\r\n TC.confirm(self.getLocaleString('elevationsWillBeRequested.confirm'),\r\n openSessionFn,\r\n () => checkbox.checked = !checkbox.checked);\r\n }\r\n else {\r\n openSessionFn();\r\n }\r\n }\r\n else {\r\n self.closeEditSession();\r\n }\r\n }\r\n });\r\n\r\n\r\n // Añadimos código para impedir segmentos separados en la ruta\r\n editCtlPromise.then(editCtl => {\r\n editCtl.getLineDrawControl().then(lineDrawCtl => {\r\n lineDrawCtl.on(Consts.event.DRAWSTART, function (e) {\r\n if (lineDrawCtl.layer === ctl.trackLayer &&\r\n !e.extending &&\r\n ctl.trackLayer.features.some(f => f instanceof Polyline || f instanceof MultiPolyline)) {\r\n // Cancelamos dibujo y avisamos\r\n lineDrawCtl.new();\r\n self.map.toast(self.getLocaleString('cannotAddSeparateLines.warning'), {\r\n type: Consts.msgType.WARNING\r\n });\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const panelTemplatePromise = import('../templates/tc-ctl-fedit.mjs');\r\n const template = {};\r\n template[self.CLASS] = (await panelTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n const includeSaveAsButton = !!window.showSaveFilePicker;\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData({\r\n editControlId: self.getUID(),\r\n stylable: self.stylable,\r\n snapping: self.snapping,\r\n includeSaveAs: includeSaveAsButton\r\n }, function () {\r\n if (self.map) {\r\n self.map.addResultsPanel({\r\n resize: false,\r\n content: 'table',\r\n titles: {\r\n main: self.getLocaleString('editFeatures')\r\n }\r\n }).then(panel => {\r\n self.panel = panel;\r\n self.panel.div.querySelector('.' + self.panel.CLASS + '-info').insertAdjacentElement('beforeend', self);\r\n self.saveButton = self.panel.div.querySelector(`.${self.CLASS}-actions sitna-button.${self.CLASS}-btn-save`);\r\n self.saveButton.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.getEditControl().then(function (editControl) {\r\n editControl.getModifyControl().then(function (modifyControl) {\r\n modifyControl.unselectFeatures(modifyControl.getSelectedFeatures());\r\n self.save();\r\n });\r\n });\r\n }, { passive: true });\r\n if (includeSaveAsButton) {\r\n self.saveAsButton = self.panel.div.querySelector(`.${self.CLASS}-actions sitna-button.${self.CLASS}-btn-saveas`);\r\n self.saveAsButton.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.getEditControl().then(function (editControl) {\r\n editControl.getModifyControl().then(function (modifyControl) {\r\n modifyControl.unselectFeatures(modifyControl.getSelectedFeatures());\r\n self.save({ showDialog: true });\r\n });\r\n });\r\n }, { passive: true });\r\n }\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n }\r\n });\r\n }));\r\n }\r\n\r\n async getEditControl() {\r\n const self = this;\r\n await self.renderPromise();\r\n return self.panel?.div.querySelector(`.${self.CLASS}-edit sitna-edit`);\r\n }\r\n\r\n async openEditSession(options) {\r\n const self = this;\r\n const modes = options?.modes;\r\n await self.renderPromise();\r\n const layer = await self.getLayer();\r\n const editControl = await self.getEditControl();\r\n const lineControl = await editControl.getLineDrawControl();\r\n if (options?.extensibleSketch) {\r\n // OpenLayers tiene la limitación de solamente permitir \r\n // extender LineStrings.\r\n let hasPolyline = layer.features.some(f => f instanceof Polyline);\r\n let hasMultiPolyline = layer.features.some(f => f instanceof MultiPolyline);\r\n if (hasPolyline && hasMultiPolyline) {\r\n TC.Error('extensibleSketch option is not possible on this file');\r\n return;\r\n }\r\n if (hasPolyline) {\r\n lineControl.setMode(Consts.geom.POLYLINE);\r\n lineControl.extensibleSketch = options?.extensibleSketch;\r\n }\r\n else if (hasMultiPolyline) {\r\n lineControl.setMode(Consts.geom.MULTIPOLYLINE);\r\n lineControl.extensibleSketch = options?.extensibleSketch;\r\n }\r\n }\r\n editControl.constrainModes(modes);\r\n self.stylable = options?.stylable ?? true;\r\n self.#setSaveButtonState();\r\n self.panel.open();\r\n }\r\n\r\n closeEditSession() {\r\n const self = this;\r\n if (self.editControl) {\r\n self.editControl.setLayer(null);\r\n }\r\n if (self.panel && !self.panel.div.classList.contains(Consts.classes.HIDDEN)) {\r\n self.panel.close();\r\n }\r\n }\r\n\r\n setLayer(layer) {\r\n const self = this;\r\n if (self.editControl) {\r\n self.editControl.setLayer(layer);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(new Error('Edit control not initialized'));\r\n }\r\n\r\n async getLayer() {\r\n return await (await this.getEditControl()).getLayer();\r\n }\r\n\r\n isStylable(layer) {\r\n const name = layer._fileHandle?.name;\r\n return !name || name.endsWith('.kml') || name.endsWith('.kmz');\r\n }\r\n\r\n async save(options) {\r\n const self = this;\r\n options = options || {};\r\n const layer = options.layer || await self.getLayer();\r\n let endFn;\r\n let filterFn;\r\n let fileName;\r\n let format;\r\n let features;\r\n let permission;\r\n let fileHandle;\r\n let oldFileHandle;\r\n const cleanEditedLayerList = async function () {\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n filteredLayers.forEach(l => editedLayers.delete(l));\r\n };\r\n if (layer._fileHandle) {\r\n // Con File System Access API: guardamos archivo\r\n oldFileHandle = layer._fileHandle;\r\n fileHandle = oldFileHandle;\r\n fileName = fileHandle.name;\r\n filterFn = async function (layers) {\r\n const results = await Promise.all(layers.map(l => l._fileHandle?.isSameEntry(oldFileHandle)));\r\n return layers.filter((_l, idx) => results[idx]);\r\n };\r\n const getPermission = async function (handle) {\r\n const permissionDescriptor = { mode: 'readwrite' };\r\n let result = await handle.queryPermission(permissionDescriptor);\r\n if (result !== 'granted') {\r\n result = await handle.requestPermission(permissionDescriptor);\r\n }\r\n return result;\r\n };\r\n if (!options.showDialog) {\r\n // El fileHandle no ha cambiado. \r\n // Pedimos ahora permiso porque estamos en una ruta\r\n // directa desde la intervención del usuario.\r\n permission = await getPermission(fileHandle);\r\n }\r\n endFn = async function () {\r\n if (options.showDialog) {\r\n if (window.showSaveFilePicker) {\r\n const mimeType = Util.getMimeTypeFromUrl(fileHandle.name);\r\n const extension = fileHandle.name.substr(fileHandle.name.lastIndexOf('.'));\r\n try {\r\n fileHandle = await window.showSaveFilePicker({\r\n suggestedName: fileHandle.name,\r\n types: [{\r\n accept: {\r\n [mimeType]: [extension]\r\n }\r\n }]\r\n });\r\n permission = await getPermission(fileHandle);\r\n }\r\n catch (e) {\r\n console.log(e.message);\r\n return;\r\n }\r\n }\r\n }\r\n if (permission === 'granted') {\r\n const writable = await fileHandle.createWritable();\r\n const data = await self.map.exportFeatures(features, {\r\n fileName: fileName,\r\n format: format\r\n });\r\n try {\r\n await writable.write(data);\r\n writable.close();\r\n const fileSaveEventData = { fileHandle: fileHandle };\r\n if (options.showDialog) {\r\n fileSaveEventData.oldFileHandle = oldFileHandle;\r\n }\r\n self.map.trigger(Consts.event.FILESAVE, fileSaveEventData);\r\n await cleanEditedLayerList();\r\n // Reasignamos el índice de grupo, porque es un achivo nuevo ahora\r\n let groupIndex = 0;\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n filteredLayers.forEach(async l => {\r\n // Si hemos \"guardado como\", asignamos el nuevo fileHandle\r\n if (options.showDialog) {\r\n l._fileHandle = fileHandle;\r\n }\r\n l.options.groupIndex = groupIndex++;\r\n });\r\n // Si hemos \"guardado como\", metemos el nuevo archivo en la lista de archivos recientes\r\n if (options.showDialog) {\r\n await self.map.addRecentFileEntry({ mainHandle: fileHandle });\r\n }\r\n self.map.toast(self.getLocaleString('fileSaved'), { type: Consts.msgType.INFO });\r\n }\r\n catch (e) {\r\n TC.error(e.message);\r\n }\r\n }\r\n };\r\n }\r\n else {\r\n // Sin File System Access API: descargamos archivo\r\n fileName = layer.options.fileSystemFile || layer.options.file;\r\n filterFn = async function (layers) {\r\n return layers.filter(l => layer.options.fileSystemFile ?\r\n l.options.fileSystemFile === layer.options.fileSystemFile :\r\n l.options.file === layer.options.file);\r\n };\r\n endFn = async function () {\r\n const data = await self.map.exportFeatures(features, {\r\n fileName: fileName,\r\n format: format\r\n })\r\n cleanEditedLayerList();\r\n switch (format) {\r\n case Consts.format.SHAPEFILE:\r\n TC.Util.downloadBlob(fileName, data);\r\n break;\r\n case Consts.format.GEOPACKAGE:\r\n TC.Util.downloadFile(fileName, \"application/geopackage+sqlite3\", data);\r\n break;\r\n case Consts.format.KMZ:\r\n TC.Util.downloadBlob(fileName, data);\r\n break;\r\n default: {\r\n const mimeType = Consts.mimeType[format];\r\n TC.Util.downloadFile(fileName, mimeType, data);\r\n break;\r\n }\r\n }\r\n };\r\n }\r\n if (fileName) {\r\n format = TC.Util.getFormatFromFileExtension(fileName.substr(fileName.lastIndexOf('.')));\r\n if (!format) {\r\n format = TC.Util.getFormatFromFileExtension(layer.options.file.substr(layer.options.file.lastIndexOf('.')));\r\n }\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n features = filteredLayers\r\n .map(l => l.features)\r\n .flat();\r\n const siblings = await filterFn(self.map.workLayers.filter(l => l !== layer));\r\n if (siblings.length) {\r\n TC.confirm(self.getLocaleString(\"fileSave.otherLayers.confirm\", {\r\n layerList: siblings.map(l => {\r\n if (l.features.length) {\r\n return l.features[0].getPath().join(self.TITLE_SEPARATOR);\r\n }\r\n return l.title;\r\n }).join(', ')\r\n }), endFn);\r\n }\r\n else {\r\n endFn();\r\n }\r\n }\r\n }\r\n\r\n async #setSaveButtonState() {\r\n const self = this;\r\n const layer = await self.getLayer();\r\n const isDisabled = !layer || !((layer._fileHandle && !layer._additionaFileHandles) || layer.options.fileSystemFile || layer.options.file);\r\n self.saveButton.disabled = isDisabled;\r\n if (self.saveAsButton) {\r\n self.saveAsButton.disabled = isDisabled;\r\n }\r\n }\r\n}\r\ncustomElements.get(elementName) || customElements.define(elementName, FileEdit);\r\nTC.control.FileEdit = FileEdit;\r\nexport default FileEdit;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Button from '../../SITNA/ui/Button';\r\nimport layerOwner from './layerOwner';\r\nimport Util from '../Util';\r\nimport localforage from 'localforage';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\n\r\nTC.control = TC.control || {};\r\nTC.Util = Util;\r\n\r\nconst elementName = 'sitna-file-import';\r\n\r\nclass FileImport extends WebComponentControl {\r\n\r\n #layerMetadataCache = new Map();\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n self.LAYER_METADATA_STORE_KEY_PREFIX = 'TC.fileLayerMetadata.';\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.fileTypes = [\r\n {\r\n accept: {\r\n [Consts.mimeType.KML]: ['.' + Consts.format.KML]\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.KMZ]: ['.' + Consts.format.KMZ]\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.GML]: ['.' + Consts.format.GML, '.' + Consts.format.GML2]\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.GEOJSON]: ['.' + Consts.format.GEOJSON, '.' + Consts.format.JSON]\r\n }\r\n },\r\n {\r\n accept: {\r\n 'text/plain': ['.' + Consts.format.WKT]\r\n }\r\n },\r\n {\r\n accept: {\r\n 'text/plain': ['.' + Consts.format.WKB]\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.ZIP]: ['.zip']\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.GEOPACKAGE]: ['.' + Consts.format.GEOPACKAGE]\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.SHAPEFILE]: ['.shp', '.dbf', '.prj', '.cst', '.cpg']\r\n }\r\n },\r\n {\r\n accept: {\r\n [Consts.mimeType.GPX]: ['.' + Consts.format.GPX]\r\n }\r\n }\r\n ];\r\n\r\n if (Array.isArray(self.options.formats)) {\r\n self.formats = self.options.formats;\r\n const mimeTypes = self.format.map(f => TC.Util.getMimeTypeFromUrl(f));\r\n self.fileTypes = self.fileTypes.filter(ft => {\r\n ft.accept.keys.some(key => mimeTypes.includes(key));\r\n });\r\n }\r\n else {\r\n self.formats = self.fileTypes.reduce((acc, ft) => {\r\n for (var key in ft.accept) {\r\n acc = acc.concat(ft.accept[key].map(ext => ext.substr(1)));\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n self.apiAttribution = '';\r\n self.mainDataAttribution = '';\r\n self.dataAttributions = [];\r\n\r\n self.exportsState = true;\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-file';\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n self.registerLayerAdd();\r\n\r\n if (self.options.enableDragAndDrop) {\r\n map.wrap.enableDragAndDrop(self.options);\r\n }\r\n\r\n map._bufferFeatures = [];\r\n\r\n document.addEventListener('paste', async e => {\r\n if (e.clipboardData.files && e.clipboardData.files.length) {\r\n let files = e.clipboardData.files;\r\n if (DataTransferItem.prototype.getAsFileSystemHandle) {\r\n // Ruta de File System Access API\r\n files = [];\r\n for (var i = 0, ii = e.clipboardData.items.length; i < ii; ++i) {\r\n const item = e.clipboardData.items[i];\r\n const handle = await item.getAsFileSystemHandle();\r\n if (handle)files.push(handle);\r\n }\r\n }\r\n self.loadFiles(files);\r\n }\r\n else {\r\n if (!e.clipboardData.items.length) {\r\n map.toast(self.getLocaleString('fileImport.pasteNotSupported'), { type: Consts.msgType.WARNING });\r\n }\r\n }\r\n });\r\n map\r\n .on(Consts.event.FEATURESIMPORT, async function (e) {\r\n const fileName = e.fileName;\r\n const fileHandle = e.fileHandle;\r\n const target = e.dropTarget;\r\n const features = e.features;\r\n const timeStamp = e.timeStamp;\r\n const groupIndex = e.groupIndex;\r\n const fileSystemFile = e.fileSystemFile && e.fileSystemFile.name;\r\n\r\n const projectGeom = function (feature) {\r\n const geogCrs = 'EPSG:4326';\r\n const geom = feature.geometry;\r\n if (geom) {\r\n var coordinates;\r\n switch (true) {\r\n case feature instanceof Point:\r\n coordinates = [geom];\r\n break;\r\n case feature instanceof MultiPoint:\r\n case feature instanceof Polyline:\r\n coordinates = geom;\r\n break;\r\n case feature instanceof MultiPolyline:\r\n case feature instanceof Polygon:\r\n coordinates = geom.flat();\r\n break;\r\n case feature instanceof MultiPolygon:\r\n coordinates = geom.flat(2);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (coordinates && coordinates.every(function (coord) {\r\n return Math.abs(coord[0]) <= 180 && Math.abs(coord[1]) <= 90; // Parecen geográficas\r\n })) {\r\n feature.setCoords(TC.Util.reproject(geom, geogCrs, self.map.crs));\r\n }\r\n }\r\n\r\n return feature;\r\n };\r\n // Ignoramos los GPX (se supone que los gestionará Geolocation)\r\n var gpxPattern = '.' + Consts.format.GPX.toLowerCase();\r\n if (fileName.toLowerCase().indexOf(gpxPattern) === fileName.length - gpxPattern.length ||\r\n target && target !== self.map.div && target !== self) {\r\n self.renderRecentFileList();\r\n return;\r\n }\r\n\r\n const addLayer = id => {\r\n if (!id) {\r\n do {\r\n id = self.getUID(fileHandle || timeStamp);\r\n }\r\n while (self.map.getLayer(id));\r\n }\r\n return map.addLayer({\r\n id: id,\r\n title: fileName,\r\n owner: self,\r\n type: Consts.layerType.VECTOR,\r\n file: fileName,\r\n groupIndex: groupIndex,\r\n fileSystemFile: fileSystemFile\r\n });\r\n };\r\n\r\n let targetLayers = e.targetLayers || [];\r\n if (!targetLayers.length) {\r\n targetLayers.push(await addLayer());\r\n }\r\n for (var i = 0; i < targetLayers.length; i++) {\r\n const targetLayer = targetLayers[i];\r\n const mapLayer = self.map.getLayer(targetLayer) || await addLayer(targetLayer.id);\r\n const metadata = await self.loadLayerMetadata(mapLayer);\r\n if (!metadata || metadata.groupIndex === groupIndex) {\r\n targetLayers[i] = mapLayer;\r\n }\r\n else {\r\n // Este grupo de entidades no es para esta capa\r\n targetLayers[i] = false;\r\n }\r\n }\r\n targetLayers = targetLayers.filter(tl => tl);\r\n\r\n map._fileDropLoadingIndicator = map.getLoadingIndicator().addWait(map._fileDropLoadingIndicator);\r\n\r\n targetLayers.forEach(async function (layer) {\r\n if (fileHandle) {\r\n layer._fileHandle = fileHandle;\r\n if (e.additionalFileHandles) {\r\n layer._additionalFileHandles = e.additionalFileHandles;\r\n }\r\n await self.saveLayerMetadata(layer);\r\n }\r\n layer._timeStamp = timeStamp;\r\n layer.owner = self;\r\n self.getLayers().push(layer);\r\n\r\n const uidPrefix = layer.id + '.';\r\n const ids = features.map(f => f.getId());\r\n const fixId = function (feature, idx) {\r\n const id = feature.getId();\r\n // Si está el id en el array de ids sin contar el índice del elemento actual\r\n if (ids.filter((_v, i) => i !== idx).includes(id)) {\r\n const newId = TC.getUID({\r\n prefix: uidPrefix,\r\n banlist: ids\r\n });\r\n ids[idx] = newId;\r\n feature.setId(newId);\r\n }\r\n return feature;\r\n };\r\n layer.addFeatures(\r\n features\r\n .map(projectGeom)\r\n .map(fixId)\r\n )\r\n .then(() => self.subtrackPendingFile());\r\n\r\n if (!e.targetLayer) {\r\n map._bufferFeatures = map._bufferFeatures.concat(layer.features);\r\n }\r\n });\r\n\r\n self.renderRecentFileList();\r\n })\r\n .on(Consts.event.FEATURESIMPORTERROR, function (e) {\r\n var dictKey;\r\n var fileName = e.file.name;\r\n if (fileName.toLowerCase().substr(fileName.length - 4) === '.kmz') {\r\n dictKey = 'fileImport.error.reasonKmz';\r\n }\r\n else {\r\n dictKey = 'fileImport.error.reasonUnknown';\r\n }\r\n\r\n TC.error(e.message ? self.getLocaleString(e.message) : self.getLocaleString(dictKey, { fileName: fileName }), Consts.msgErrorMode.TOAST);\r\n\r\n var reader = new FileReader();\r\n reader.onload = function (event) {\r\n TC.error(\"Nombre del archivo: \" + fileName + \" \\n Contenido del archivo: \\n\\n\" + event.target.result, Consts.msgErrorMode.EMAIL, \"Error en la subida de un archivo\");\r\n };\r\n self.subtrackPendingFile();\r\n })\r\n .on(Consts.event.FEATURESIMPORTPARTIAL, function (e) {\r\n self.map.toast(self.getLocaleString(\"fileImport.partial.problem\", { fileName: e.file.name, table: e.table, reason: e.reason }), { type: Consts.msgType.ERROR });\r\n })\r\n .on(Consts.event.FEATURESIMPORTWARN, function (e) {\r\n self.map.toast(self.getLocaleString(\"fileImport.geomEmpty\", { fileName: e.file.name }), { type: Consts.msgType.WARNING });\r\n })\r\n .on(Consts.event.RECENTFILEADD, function (_e) {\r\n self.renderRecentFileList();\r\n })\r\n .on(Consts.event.LAYERADD, function (e) {\r\n self.loadLayersFromFile([e.layer]);\r\n })\r\n .on(Consts.event.LAYERREMOVE, function (e) {\r\n if (e.layer.owner === self) {\r\n self.deleteLayerMetadata(e.layer);\r\n }\r\n const ownLayers = self.getLayers();\r\n const idx = ownLayers.indexOf(e.layer);\r\n if (idx >= 0) {\r\n ownLayers.splice(idx, 1);\r\n }\r\n });\r\n\r\n map.loaded(() => {\r\n self.loadLayersFromFile(map.workLayers);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-file.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-file-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData({ formats: self.formats }, function () {\r\n const fileInput = self.querySelector('input[type=file]');\r\n // GLS: Eliminamos el archivo subido, sin ello no podemos subir el mismo archivo seguido varias veces\r\n fileInput.addEventListener(Consts.event.CLICK, async function (e) {\r\n const input = this;\r\n // Envolvemos el input en un form\r\n const form = document.createElement('form');\r\n const parent = input.parentElement;\r\n parent.insertBefore(form, input);\r\n form.appendChild(input);\r\n form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', input);\r\n parent.removeChild(form);\r\n\r\n if (Util.isFunction(window.showOpenFilePicker)) {\r\n e.preventDefault();\r\n let fileHandles;\r\n try {\r\n fileHandles = await window.showOpenFilePicker({\r\n multiple: true\r\n });\r\n }\r\n catch (e) {\r\n if (e instanceof DOMException && window.parent !== window) {\r\n // No se permite ejecutar showOpenFilePicker si estamos en un frame con CORS\r\n let messageText = self.getLocaleString('cannotOpenFileIfEmbedded');\r\n if (self.options.enableDragAndDrop) {\r\n messageText += '

' + self.getLocaleString('alternativelyYouCanDropFile');\r\n }\r\n self.map.toast(messageText, { type: Consts.msgType.WARNING });\r\n }\r\n else if (e.name !== 'AbortError') {\r\n throw e;\r\n }\r\n }\r\n if (fileHandles) {\r\n self.loadFiles(fileHandles);\r\n }\r\n }\r\n });\r\n fileInput.addEventListener('change', function (e) {\r\n if (self.map) {\r\n self.loadFiles(e.target.files);\r\n }\r\n });\r\n\r\n self.renderRecentFileList();\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n resolve(self);\r\n });\r\n });\r\n }));\r\n }\r\n\r\n loadFiles(files) {\r\n const self = this;\r\n self.map.loadFiles(files, { control: self });\r\n return self;\r\n }\r\n\r\n async loadLayersFromFile(layers) {\r\n const self = this;\r\n // Verificamos si son capas propias y si son de archivo local serializadas\r\n const ownLayers = layers.filter(l => self.getIdCount(l.id) && !l.options.owner && l.options.file);\r\n if (ownLayers.length) {\r\n const fileHandles = [];\r\n const idCount = Math.max(...ownLayers.map(l => self.getIdCount(l.id)));\r\n TC.setUIDStart(idCount + 1, { prefix: self.id + '-' });\r\n const layersMetadata = await Promise.all(ownLayers.map(l => self.loadLayerMetadata(l)));\r\n ownLayers.forEach((l, idx) => {\r\n l.options.groupIndex = layersMetadata[idx]?.groupIndex;\r\n });\r\n const layerGroups = new Map();\r\n const additionalFileHandleDictionary = new Map();\r\n for (var i = 0; i < layersMetadata.length; i++) {\r\n const metadata = layersMetadata[i];\r\n if (metadata?.fileHandle) {\r\n let group;\r\n for (const [fileHandle, currentGroup] of layerGroups.entries()) {\r\n if (await fileHandle.isSameEntry(metadata.fileHandle)) {\r\n group = currentGroup;\r\n break;\r\n }\r\n }\r\n if (!group) {\r\n group = [];\r\n layerGroups.set(metadata.fileHandle, group);\r\n fileHandles.push(metadata.fileHandle);\r\n if (metadata.additionalFileHandles) {\r\n additionalFileHandleDictionary.set(metadata.fileHandle, metadata.additionalFileHandles);\r\n }\r\n }\r\n group.push(ownLayers[i]);\r\n }\r\n else {\r\n // Error: no existe el archivo en este navegador, por tanto eliminamos capa\r\n const layerToRemove = layers[i];\r\n if (self.map.getLayer(layerToRemove)) {\r\n self.map.removeLayer(layerToRemove);\r\n }\r\n }\r\n }\r\n await self.renderPromise();\r\n const dialog = self._dialogDiv.querySelector(`.tc-ctl-file-dialog`);\r\n const title = dialog.querySelector('h3');\r\n const button = self._dialogDiv.querySelector('sitna-button.tc-ctl-file-dialog-ok');\r\n\r\n const endFn = handles => {\r\n self.map.loadFiles(handles, {\r\n layers: layerGroups.get(handles[0]),\r\n target: self\r\n });\r\n };\r\n\r\n for (const fileHandle of layerGroups.keys()) {\r\n let fileHandles = [fileHandle];\r\n const additionalFileHandles = additionalFileHandleDictionary.get(fileHandle);\r\n if (additionalFileHandles) {\r\n fileHandles = fileHandles.concat(additionalFileHandles);\r\n }\r\n\r\n const permissions = [];\r\n for await (let permission of fileHandles.map(h => h.queryPermission())) {\r\n permissions.push(permission);\r\n }\r\n let promptRequired = false;\r\n for (var j = 0; j < permissions.length; j++) {\r\n let permission = permissions[j];\r\n if (permission === 'prompt') {\r\n promptRequired = true;\r\n const pendingFileHandle = fileHandles[j];\r\n if (title.innerHTML.length) {\r\n const separator = ',
';\r\n const files = title.innerHTML.split(separator);\r\n if (!files.includes(pendingFileHandle.name)) {\r\n title.innerHTML = title.innerHTML + separator + pendingFileHandle.name;\r\n }\r\n }\r\n else {\r\n title.innerHTML = pendingFileHandle.name;\r\n }\r\n }\r\n }\r\n const isPermissionGranted = p => p === 'granted';\r\n if (promptRequired) {\r\n const onCloseClick = async function (_e) {\r\n for (var k = 0; k < permissions.length; k++) {\r\n permissions[k] = await fileHandles[k].requestPermission();\r\n }\r\n if (permissions.every(isPermissionGranted)) {\r\n endFn(fileHandles);\r\n }\r\n else {\r\n // No hemos obtenido permiso, la capa se va a quedar vacía, así que la eliminamos\r\n const layersToRemove = layerGroups.get(fileHandle);\r\n layersToRemove.forEach(l => self.map.removeLayer(l));\r\n }\r\n title.innerHTML = '';\r\n Util.closeModal();\r\n };\r\n Util.showModal(dialog, {\r\n closeCallback: onCloseClick\r\n });\r\n button.addEventListener('click', onCloseClick);\r\n }\r\n else if (permissions.every(isPermissionGranted)) {\r\n endFn(fileHandles);\r\n }\r\n }\r\n }\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n if (self.exportsState && self.getLayers().length) {\r\n return {\r\n id: self.id,\r\n layers: self.getLayers().map(function (layer) {\r\n const layerState = {\r\n title: layer.title,\r\n state: TC.Util.extend(layer.exportState(), { path: layer.features?.length ? layer.features[0].getPath() : undefined })\r\n };\r\n if (layer._fileHandle) {\r\n layerState.file = layer._fileHandle.name;\r\n }\r\n return layerState;\r\n })\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n async importState(state) {\r\n const self = this;\r\n if (self.map) {\r\n const layerPromises = [];\r\n await self.loadLayersFromFile(self.map.workLayers);\r\n state.layers\r\n .filter(function (layer) {\r\n return !self.map.workLayers.some(l => l.options.file && layer.file === l.options.file);\r\n })\r\n .forEach(function (layerData) {\r\n layerPromises.push(self.map.addLayer({\r\n id: self.getUID(),\r\n title: layerData.title,\r\n owner: self,\r\n type: Consts.layerType.VECTOR\r\n }));\r\n });\r\n\r\n const layers = await Promise.all(layerPromises);\r\n for (var i = 0, len = layers.length; i < len; i++) {\r\n const layer = layers[i];\r\n const ii = i;\r\n layer.importState(state.layers[i].state).then(function () {\r\n for (var j = 0; j < layer.features.length; j++) {\r\n layer.features[j].folders = state.layers[ii].state.path;\r\n }\r\n });\r\n self.getLayers().push(layer);\r\n }\r\n }\r\n }\r\n\r\n async saveLayerMetadata(layer) {\r\n const self = this;\r\n const storageItem = {\r\n fileHandle: layer._fileHandle,\r\n groupIndex: layer.options.groupIndex\r\n };\r\n if (layer._additionalFileHandles) {\r\n storageItem.additionalFileHandles = layer._additionalFileHandles;\r\n }\r\n self.#layerMetadataCache.set(layer.id, storageItem);\r\n return await localforage\r\n .setItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-' + layer.id, storageItem)\r\n .catch(e => console.warn(e));\r\n }\r\n\r\n async loadLayerMetadata(layer) {\r\n const self = this;\r\n let metadata = await localforage\r\n .getItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-' + layer.id)\r\n .catch(err => console.warn(err));\r\n if (metadata) {\r\n self.#layerMetadataCache.set(layer.id, metadata);\r\n }\r\n else {\r\n metadata = self.#layerMetadataCache.get(layer.id);\r\n }\r\n return metadata;\r\n }\r\n\r\n deleteLayerMetadata(layer) {\r\n const self = this;\r\n localforage.removeItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-' + layer.id)\r\n .catch(function (e) {\r\n console.warn(e.message);\r\n });\r\n return self;\r\n }\r\n\r\n async addRecentFileEntry(newEntry) {\r\n const self = this;\r\n await self.map.addRecentFileEntry(newEntry);\r\n }\r\n\r\n async removeRecentFileEntry(index) {\r\n const self = this;\r\n await self.map.removeRecentFileEntry(index);\r\n self.renderRecentFileList();\r\n }\r\n\r\n async renderRecentFileList(fileList) {\r\n const self = this;\r\n const onLinkClick = function (e) {\r\n self.map.loadRecentFileEntry(e.target.dataset.fileIndex);\r\n };\r\n const onButtonClick = function (e) {\r\n self.removeRecentFileEntry(e.target.dataset.fileIndex);\r\n };\r\n const list = self.querySelector('.tc-ctl-file-recent');\r\n if (list) {\r\n const buttonText = self.getLocaleString('removeFromList');\r\n const entries = await (fileList ? Promise.resolve(fileList) : (self.map && self.map.loadRecentFiles()) || []);\r\n list.replaceChildren ? list.replaceChildren() : list.innerHTML=\"\";\r\n if (entries.length) {\r\n const li = document.createElement('li');\r\n const header = document.createElement('h3');\r\n header.innerHTML = self.getLocaleString('recentFiles');\r\n li.appendChild(header);\r\n list.appendChild(li);\r\n }\r\n entries.forEach((entry, index) => {\r\n const li = document.createElement('li');\r\n const link = document.createElement('sitna-button');\r\n link.dataset.fileIndex = index;\r\n link.addEventListener(Consts.event.CLICK, onLinkClick);\r\n link.setAttribute('variant', Button.variant.LINK);\r\n // Añadida compatibilidad hacia atrás (antes no había propiedad mainHandle)\r\n link.setAttribute('text', entry.mainHandle?.name || entry.name);\r\n li.appendChild(link);\r\n const button = document.createElement('sitna-button');\r\n button.text = buttonText;\r\n button.dataset.fileIndex = index;\r\n button.addEventListener(Consts.event.CLICK, onButtonClick);\r\n button.setAttribute('variant', Button.variant.MINIMAL);\r\n button.setAttribute('icon', Button.action.CLOSE);\r\n li.appendChild(button);\r\n list.appendChild(li);\r\n });\r\n }\r\n }\r\n\r\n subtrackPendingFile() {\r\n const self = this;\r\n window.dropFilesCounter--;\r\n if (window.dropFilesCounter === 0) {\r\n self.map.zoomToFeatures(self.map._bufferFeatures);\r\n self.map._bufferFeatures = [];\r\n delete window.dropFilesCounter;\r\n }\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n if (self.map._featureImportWaitId) {\r\n li.removeWait(self.map._featureImportWaitId);\r\n }\r\n if (self.map._fileDropLoadingIndicator) {\r\n li.removeWait(self.map._fileDropLoadingIndicator);\r\n }\r\n }\r\n return self;\r\n }\r\n \r\n getUID(fileHandleOrTimestamp) {\r\n const self = this;\r\n if (fileHandleOrTimestamp) {\r\n const propertyname = Object.prototype.hasOwnProperty.call(window, \"FileSystemFileHandle\") ? \"_fileHandle\" : \"_timeStamp\";\r\n const grouped = self.getLayers().reduce((vi, va) => {\r\n return vi.findByProperty(propertyname, va[propertyname]) &&\r\n vi.some(l => /^[\\w]*-\\d-\\d/gi.exec(va.id)[0] === /^[\\w]*-\\d-\\d/gi.exec(l.id)[0]) ? vi : vi.concat(va);\r\n }, []);\r\n return TC.getUID({\r\n prefix: `${self.id}-${grouped.filter(l => l[propertyname] != fileHandleOrTimestamp).length + 1}-`\r\n });\r\n }\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n }\r\n}\r\n\r\nTC.mix(FileImport, layerOwner);\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, FileImport);\r\nTC.control.FileImport = FileImport;\r\nexport default FileImport;\r\n","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Util from '../Util';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst FullScreen = function () {\r\n var self = this;\r\n\r\n Control.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(FullScreen, Control);\r\n\r\n(function () {\r\n var ctlProto = FullScreen.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-fscreen';\r\n\r\n const key = {\r\n fullscreenEnabled: 0,\r\n fullscreenElement: 1,\r\n requestFullscreen: 2,\r\n exitFullscreen: 3,\r\n fullscreenchange: 4,\r\n fullscreenerror: 5\r\n };\r\n\r\n const webkit = [\r\n 'webkitFullscreenEnabled',\r\n 'webkitFullscreenElement',\r\n 'webkitRequestFullscreen',\r\n 'webkitExitFullscreen',\r\n 'webkitfullscreenchange',\r\n 'webkitfullscreenerror'\r\n ];\r\n\r\n const moz = [\r\n 'mozFullScreenEnabled',\r\n 'mozFullScreenElement',\r\n 'mozRequestFullScreen',\r\n 'mozCancelFullScreen',\r\n 'mozfullscreenchange',\r\n 'mozfullscreenerror'\r\n ];\r\n\r\n const ms = [\r\n 'msFullscreenEnabled',\r\n 'msFullscreenElement',\r\n 'msRequestFullscreen',\r\n 'msExitFullscreen',\r\n 'MSFullscreenChange',\r\n 'MSFullscreenError'\r\n ];\r\n\r\n const document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\r\n\r\n const vendor = 'fullscreenEnabled' in document && Object.keys(key) ||\r\n webkit[0] in document && webkit ||\r\n moz[0] in document && moz ||\r\n ms[0] in document && ms ||\r\n [];\r\n\r\n ctlProto.fscreen = {\r\n inFullscreen: false,\r\n requestFullscreen: element => element[vendor[key.requestFullscreen]](),\r\n requestFullscreenFunction: element => element[vendor[key.requestFullscreen]],\r\n get exitFullscreen() { return document[vendor[key.exitFullscreen]].bind(document); },\r\n addEventListener: (type, handler, options) => document.addEventListener(vendor[key[type]], handler, options),\r\n removeEventListener: (type, handler, options) => document.removeEventListener(vendor[key[type]], handler, options),\r\n get fullscreenEnabled() { return Boolean(document[vendor[key.fullscreenEnabled]]); },\r\n set fullscreenEnabled(val) { },\r\n get fullscreenElement() { return document[vendor[key.fullscreenElement]]; },\r\n set fullscreenElement(val) { },\r\n get onfullscreenchange() { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()]; },\r\n set onfullscreenchange(handler) { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler; },\r\n get onfullscreenerror() { return document[\"on\" + vendor[key.fullscreenerror].toLowerCase()]; },\r\n set onfullscreenerror(handler) { return document[\"on\" + vendor[key.fullscreenerror].toLowerCase()] = handler; }\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-fscreen.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n result.then(function () {\r\n const btn = self.div.querySelector('.' + self.CLASS + '-btn');\r\n\r\n if (self.fscreen.fullscreenEnabled) {\r\n\r\n const doFullscreenChange = () => {\r\n btn.classList.toggle(Consts.classes.ACTIVE, self.fscreen.inFullscreen);\r\n btn.setAttribute('title', self.fscreen.inFullscreen ? self.getLocaleString(\"fscreen.tip.return\") : self.getLocaleString(\"fscreen.tip\"));\r\n };\r\n\r\n self.fscreen.addEventListener('fullscreenchange', () => {\r\n self.fscreen.inFullscreen = self.fscreen.fullscreenElement !== null;\r\n doFullscreenChange();\r\n }, false);\r\n\r\n btn.addEventListener('click', function () {\r\n self.byBtn = true;\r\n if (!self.fscreen.inFullscreen) {\r\n self.fscreen.requestFullscreen(document.body);\r\n } else {\r\n self.fscreen.exitFullscreen();\r\n }\r\n }, false);\r\n\r\n if (!Util.detectMobile()) {\r\n window.addEventListener('resize', () => {\r\n if (self.byBtn) {\r\n self.byBtn = false;\r\n return;\r\n }\r\n\r\n const windowWidth = window.innerWidth * window.devicePixelRatio;\r\n const windowHeight = window.innerHeight * window.devicePixelRatio;\r\n const screenWidth = window.screen.width;\r\n const screenHeight = window.screen.height;\r\n\r\n if (windowWidth / screenWidth >= 0.95 && windowHeight / screenHeight >= 0.95) {\r\n self.fscreen.inFullscreen = true;\r\n } else {\r\n self.fscreen.inFullscreen = false;\r\n }\r\n\r\n doFullscreenChange();\r\n\r\n let header = document.body.getElementsByTagName('header');\r\n if (self.fscreen.inFullscreen) {\r\n btn.setAttribute('disabled', 'disabled');\r\n\r\n if (header.length > 0) {\r\n header[0].classList.add(\"tc-ctl-fscreenToHeader\");\r\n }\r\n\r\n self.map.div.classList.add(\"tc-ctl-fscreenToMap\");\r\n if (self.map.view3D) {\r\n self.map.view3D.container.classList.add(\"tc-ctl-fscreenToMap\");\r\n }\r\n\r\n } else {\r\n btn.removeAttribute('disabled');\r\n\r\n if (header.length > 0) {\r\n header[0].classList.remove(\"tc-ctl-fscreenToHeader\");\r\n }\r\n\r\n self.map.div.classList.remove(\"tc-ctl-fscreenToMap\");\r\n if (self.map.view3D) {\r\n self.map.view3D.container.classList.remove(\"tc-ctl-fscreenToMap\");\r\n }\r\n }\r\n\r\n btn.setAttribute('title', self.fscreen.inFullscreen ? self.getLocaleString('fscreen.tip.keyboard') : self.getLocaleString(\"fscreen.tip\"));\r\n\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n self.map.div.dispatchEvent(resizeEvent); // Para evitar que el mapa quede estirado o achatado después de gestionar la cabecera.\r\n });\r\n }\r\n } else {\r\n // GLS: 19/02/2019 en lugar de ocultar el botón, deshabilitamos el control para que no quede espacio de más entre los botones\r\n self.disable();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nTC.control.FullScreen = FullScreen;\r\nexport default FullScreen;","/**\r\n * Opciones del control GPS y rutas.\r\n * @typedef GeolocationOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [displayElevation=true] - Si se establece a `true`, se completará el gráfico del perfil de elevación de la ruta (si esta cuenta con datos de elevación) añadiendo el perfil de elevación resultante del MDT (Modelo Digital de Terreno)\r\n \r\n * @example [Ver en vivo](../examples/cfg.GeolocationOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\nimport localforage from 'localforage';\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport LoadingIndicator from './LoadingIndicator';\r\nimport Util from '../Util';\r\nimport infoShare from './infoShare';\r\nimport itemToolContainer from './itemToolContainer';\r\nimport Feature from '../../SITNA/feature/Feature';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Marker from '../../SITNA/feature/Marker';\r\nimport md5 from 'md5';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.TOOLSCLOSE = Consts.event.TOOLSCLOSE || 'toolsclose.tc';\r\nConsts.event.TOOLSOPEN = Consts.event.TOOLSOPEN || 'toolsopen.tc';\r\nConsts.event.DIALOG = Consts.event.DIALOG || 'dialog.tc';\r\nConsts.classes.UNPLUGGED = \"tc-unplugged\";\r\n\r\nconst isPolyline = feat => feat instanceof Polyline;\r\nconst isMultiPolyline = feat => feat instanceof MultiPolyline;\r\nconst isAnyLine = feat => isPolyline(feat) || isMultiPolyline(feat);\r\nconst getFirstPoint = feat => isMultiPolyline(feat) ? feat.geometry[0][0] : feat.geometry[0];\r\nconst getLastPoint = feat => isMultiPolyline(feat) ? feat.geometry[0][feat.geometry[0].length - 1] : feat.geometry[feat.geometry.length - 1];\r\n\r\nlet lastMapCenter = null;\r\nlet followingZoom = false;\r\n\r\nconst zoomHandler = function () {\r\n if (!lastMapCenter || (lastMapCenter[0] !== this.getCenter()[0] && lastMapCenter[1] !== this.getCenter()[1])) {\r\n lastMapCenter = this.getCenter();\r\n if (!followingZoom) {\r\n this.getControlsByClass(Geolocation)[0].setFollowing(false);\r\n }\r\n }\r\n};\r\n\r\n/* inicio gestión suspensión de la pantalla en móviles */\r\nconst wakeLockSupported = 'wakeLock' in navigator;\r\nlet wakeLock = null;\r\nlet notifications = null;\r\n\r\nconst getHiddenProperty = function () {\r\n const prefixes = ['webkit', 'moz', 'ms', 'o'];\r\n if ('hidden' in document) {\r\n return 'hidden';\r\n }\r\n for (var i = 0; i < prefixes.length; i++) {\r\n if (prefixes[i] + 'Hidden' in document) {\r\n return prefixes[i] + 'Hidden';\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n/*\r\n * Recibe una sucesión de tracks y la ordena por nombre.\r\n */\r\nconst orderTracks = function (tracks) {\r\n var tracksArray = [];\r\n\r\n for (var index in tracks) {\r\n if (tracks[index] && typeof tracks[index] === \"object\") {\r\n tracksArray.push(tracks[index]);\r\n tracksArray.sort(function (a, b) {\r\n if (typeof a.name === \"string\") {\r\n return Util.isFunction(a.name.localeCompare) ? a.name.localeCompare(b.name) : 0;\r\n } else { return 0; }\r\n });\r\n }\r\n }\r\n\r\n return tracksArray;\r\n};\r\n\r\nclass Geolocation extends Control {\r\n const = {\r\n className: {\r\n ACTIVE: 'tc-ctl-geolocation-active',\r\n DRAWACTIVATED: 'draw-activated',\r\n SIMULATIONACTIVATED: 'simulation-activated',\r\n PLAY: 'tc-play',\r\n PAUSE: 'tc-pause'\r\n },\r\n selector: {\r\n //SIMULATE: '.tc-btn-simulate',\r\n ACTIVATOR: 'sitna-button[variant=\"link\"]',\r\n EDIT: '.tc-btn-edit',\r\n DELETE: '.tc-btn-delete',\r\n DELETEALL: '.tc-btn-delete-all',\r\n SAVE: '.tc-btn-save',\r\n CANCEL: '.tc-btn-cancel',\r\n EXPORT: '.tc-btn-export',\r\n SHARE: '.tc-btn-share',\r\n STOP: '.tc-btn-stop',\r\n PAUSE: '.tc-btn-pause',\r\n BACKWARD: '.tc-btn-backward',\r\n FORWARD: '.tc-btn-forward',\r\n SPEED: '.tc-spn-speed',\r\n VISIBILITY: 'sitna-toggle.tc-chk-track-visibility'\r\n },\r\n localStorageKey: {\r\n GEOTRACKING: 'trk',\r\n GEOTRACKINGTEMP: 'trktemp',\r\n GEOTRACKINGSHOWADVERTISEMENT: 'trkAdvertisement',\r\n GPSSHOWADVERTISEMENT: 'gpsAdvertisement',\r\n TEST: 'test'\r\n },\r\n event: {\r\n POSITIONCHANGE: 'positionchange.tc.geolocation',\r\n GPSPOSITIONCHANGE: 'gpspositionchange.tc.geolocation',\r\n GPSPOSITIONERROR: 'positionerror.tc.geolocation',\r\n STATEUPDATED: 'stateupdated.tc.geolocation',\r\n GPSADD: 'gpsadd.tc.geolocation',\r\n TRACKSNAPPING: 'tracksnapping.tc.geolocation',\r\n DRAWTRACK: 'drawtrack.tc.geolocation',\r\n CLEARTRACK: 'cleartrack.tc.geolocation',\r\n IMPORTEDTRACK: 'importedtrack.tc.geolocation'\r\n },\r\n supportedFileExtensions: [\r\n '.gpx',\r\n '.kml',\r\n '.kmz'\r\n ],\r\n layer: {\r\n GPS: \"gps\",\r\n TRACK: \"track\",\r\n GEOTRACKING: \"geotracking\"\r\n }\r\n };\r\n markerStyle = {\r\n radius: 10,\r\n fillColor: [255, 0, 0, 100],\r\n strokeColor: [255, 255, 255, 255],\r\n strokeWidth: 2\r\n };\r\n lineStyle = {\r\n strokeWidth: 2,\r\n strokeColor: [0, 206, 209, 255]\r\n };\r\n delta = 500;\r\n walkingSpeed = 5000;\r\n notificationConfig = {};\r\n storageCrs = 'EPSG:4326';\r\n snappingTolerance;\r\n featuresToShare = [];\r\n #dialogDiv;\r\n #shareDialogDiv;\r\n #interpolationPanel;\r\n #elevationsCheckbox;\r\n #trackVisibility = true;\r\n #isFollowing = true;\r\n #onWindowBlurred;\r\n #onWindowFocused;\r\n #onWindowVisibility;\r\n #onResize;\r\n #elevationProfileCache = new Map();\r\n #elevationFromServiceCache = [];\r\n #startMarker;\r\n #finishMarker;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.#dialogDiv = Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self.#dialogDiv);\r\n }\r\n\r\n self.#shareDialogDiv = Util.getDiv({});\r\n document.body.appendChild(self.#shareDialogDiv);\r\n\r\n self.snappingTolerance = self.options.snappingTolerance || 50;\r\n\r\n self.exportsState = true;\r\n\r\n self.simulationStopped = true;\r\n\r\n self._uiElementSelector = 'ol > li[data-id]';\r\n self._toolContainerSelector = `.${self.CLASS}-tools-active`;\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-geolocation';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register(map);\r\n\r\n self.wrap = new TC.wrap.control.Geolocation(self);\r\n self.wrap.register(map);\r\n\r\n if (self.options.fileEditing) {\r\n await map.addControl('fileEdit', { caller: self, snapping: true });\r\n }\r\n\r\n map._bufferFeatures = [];\r\n\r\n self.hillDeltaThreshold = self.options && self.options.hillDeltaThreshold ||\r\n self.map.options.elevation && self.map.options.elevation.hillDeltaThreshold ||\r\n 20;\r\n\r\n const gpsLayerPromise = map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.GPS'\r\n });\r\n\r\n const geotrackingLayerPromise = map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.Geotracking',\r\n styles: function (feature) {\r\n let name = feature.getData().name;\r\n if (name && (name + '').trim().length > 0) {\r\n name = (name + '').trim().toLowerCase();\r\n } else {\r\n name = '';\r\n }\r\n return {\r\n point: {\r\n radius: 6,\r\n fillColor: \"#00ced1\",\r\n fillOpacity: self.track.renderTrack.checked ? 1 : 0,\r\n strokeColor: \"#ffffff\",\r\n fontColor: \"#00ced1\",\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 1,\r\n label: name\r\n },\r\n line: [\r\n {\r\n strokeOpacity: self.track.renderTrack.checked ? 1 : 0,\r\n strokeWidth: 8,\r\n strokeColor: \"#ffffff\"\r\n },\r\n {\r\n strokeOpacity: self.track.renderTrack.checked ? 1 : 0,\r\n strokeWidth: 4,\r\n strokeColor: \"#00ced1\"\r\n }]\r\n }\r\n }\r\n });\r\n const trackLayerPromise = map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.Track',\r\n styles: {\r\n line: {\r\n strokeWidth: 2,\r\n strokeColor: \"#C52737\"\r\n },\r\n point: {\r\n radius: 6,\r\n fillColor: \"#C52737\",\r\n fillOpacity: 0.5,\r\n strokeColor: \"#27C537\",\r\n strokeWidth: 2,\r\n fontColor: \"#C52737\",\r\n fontSize: 10,\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 2,\r\n labelOffset: [0, -12],\r\n label: '${name}'\r\n }\r\n }\r\n });\r\n\r\n const endPointLayerPromise = map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.Extremos'\r\n });\r\n\r\n map.on(Consts.event.FEATURESIMPORT, function (e) {\r\n const self = this;\r\n\r\n const featuresImport = function (e) {\r\n const fileName = e.fileName;\r\n const target = e.dropTarget;\r\n var kmlPattern = '.' + Consts.format.KML.toLowerCase();\r\n var gpxPattern = '.' + Consts.format.GPX.toLowerCase();\r\n\r\n // GLS: ¿es un GPX?\r\n if (fileName.toLowerCase().indexOf(gpxPattern) === fileName.length - gpxPattern.length ||\r\n // GLS: ¿es un KML y viene desde el upload de Geolocation?\r\n fileName.toLowerCase().indexOf(kmlPattern) === fileName.length - kmlPattern.length && target === self) {\r\n\r\n self.clear(self.const.layer.TRACK);\r\n const importedGPX = function () {\r\n //Controlamos que todo ha acabado para hacer zoom a las features y ocultar el loading\r\n setTimeout(function () {\r\n self.map._bufferFeatures = self.map._bufferFeatures.concat(e.features);\r\n window.dropFilesCounter--;\r\n if (window.dropFilesCounter === 0) {\r\n self.map.zoomToFeatures(self.map._bufferFeatures);\r\n self.map._bufferFeatures = [];\r\n delete window.dropFilesCounter;\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n li.removeWait(self.map._fileDropLoadingIndicator);\r\n }\r\n self.off(self.const.event.IMPORTEDTRACK, importedGPX);\r\n }\r\n }, 0);\r\n };\r\n self.on(self.const.event.IMPORTEDTRACK, importedGPX);\r\n self.importTrack(e);\r\n\r\n if (/.kml$/g.test(fileName.toLowerCase()) && self.trackLayer) {\r\n if (self.trackLayer.styles) {\r\n self.trackLayer.features.forEach(function (feature) {\r\n if (!feature.getStyle()) {\r\n if (feature instanceof Point && self.trackLayer.styles.point) {\r\n feature.setStyle(self.trackLayer.styles.point);\r\n } else if (isAnyLine(feature) && self.trackLayer.styles.line) {\r\n feature.setStyle(self.trackLayer.styles.line);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n } else {\r\n //GLS: si es un KML pero viene desde el mapa o es otro tipo de archivo que no es ni GPX ni KML, lo ignoramos\r\n return;\r\n }\r\n };\r\n\r\n if (self.working && Util.isFunction(self.working.then)) {\r\n self.working.then(featuresImport(e));\r\n } else {\r\n self.working = true;\r\n featuresImport(e);\r\n }\r\n\r\n }.bind(self));\r\n\r\n map.on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (self.elevationChartData) {\r\n self.elevationChartData.coords = Util.reproject(self.elevationChartData.coords, e.oldCrs, e.newCrs);\r\n if (self.elevationChartData.secondaryElevationProfileChartData && self.elevationChartData.secondaryElevationProfileChartData.length)\r\n self.elevationChartData.secondaryElevationProfileChartData.forEach((secElevChartData) => {\r\n secElevChartData.eleCoordinates = Util.reproject(secElevChartData.eleCoordinates, e.oldCrs, e.newCrs);\r\n });\r\n }\r\n });\r\n\r\n map.on(Consts.event.DIALOG, function (e) {\r\n if (e.control) {\r\n switch (e.action) {\r\n case \"share\":\r\n if (e.control.caller !== self) {\r\n self.#onShowShareDialog(e.control.caller);\r\n }\r\n break;\r\n case \"download\":\r\n self.#onShowDownloadDialog(e.control.caller);\r\n break;\r\n }\r\n }\r\n });\r\n\r\n map.on(Consts.event.FILESAVE, function (e) {\r\n const newFile = Object.prototype.hasOwnProperty.call(e, 'oldFileHandle');\r\n const eventFileHandle = newFile ? e.oldFileHandle : e.fileHandle;\r\n if (self.trackLayer._fileHandle) {\r\n self.trackLayer._fileHandle.isSameEntry(eventFileHandle).then(result => {\r\n if (result) {\r\n const trackItem = self.getSelectedTrackItem();\r\n const saveTrackOptions = { uid: trackItem.dataset.uid };\r\n if (newFile) {\r\n // El handle ha cambiado, hay que actualizarlo\r\n saveTrackOptions.fileHandle = e.fileHandle;\r\n }\r\n self.saveTrack(saveTrackOptions).then(function () {\r\n if (newFile) {\r\n self.availableTracks = null;\r\n if (trackItem.querySelector('input').value === e.oldFileHandle?.name) {\r\n self.editTrackName(saveTrackOptions.uid, saveTrackOptions.fileHandle.name);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n map.on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (e.layer === self.trackLayer && isAnyLine(e.feature)) {\r\n self.updateEndMarkers();\r\n }\r\n });\r\n\r\n self.notificationConfig = Object.assign(self.options.notification || {}, {\r\n tag: \"Geolocation Track\",\r\n vibrate: [200],\r\n renotify: true,\r\n requireInteraction: true,\r\n body: self.getLocaleString(\"geo.trk.notification.body\")\r\n }, {\r\n title: self.options.notification && self.options.notification.title ? self.getLocaleString(self.options.notification.title) : document.title\r\n });\r\n\r\n self.gpsLayer = await gpsLayerPromise;\r\n self.geotrackingLayer = await geotrackingLayerPromise;\r\n self.trackLayer = await trackLayerPromise;\r\n self.endPointLayer = await endPointLayerPromise;\r\n\r\n const newPosition = self.map.layers.indexOf(self.trackLayer);\r\n self.map.insertLayer(self.gpsLayer, newPosition)\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-geolocation.mjs');\r\n const trackNodeTemplatePromise = import('../templates/tc-ctl-geolocation-track-node.mjs');\r\n const trackSnappingTemplatePromise = import('../templates/tc-ctl-geolocation-track-snapping-node.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-geolocation-dialog.mjs');\r\n const trackingToastTemplatePromise = import('../templates/tc-ctl-geolocation-tracking-toast.mjs');\r\n const downloadDialogTemplatePromise = import('../templates/tc-ctl-geolocation-ext-dldlog.mjs');\r\n const shareDialogTemplatePromise = import('../templates/tc-ctl-geolocation-share-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-track-node'] = (await trackNodeTemplatePromise).default;\r\n template[self.CLASS + '-track-snapping-node'] = (await trackSnappingTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n template[self.CLASS + '-tracking-toast'] = (await trackingToastTemplatePromise).default;\r\n template[self.CLASS + '-ext-dldlog'] = (await downloadDialogTemplatePromise).default;\r\n template[self.CLASS + '-share-dialog'] = (await shareDialogTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n\r\n self.#dialogDiv.innerHTML = await self.getRenderedHtml(self.CLASS + '-dialog', null);\r\n await self.getDownloadDialog();\r\n self._downloadDialog.caller = self;\r\n const template = document.createElement('template');\r\n template.innerHTML = await self.getRenderedHtml(self.CLASS + '-ext-dldlog', { controlId: self.id });\r\n self._downloadDialogExtNode = template.content ? template.content.firstChild : template.firstChild;\r\n self.#shareDialogDiv.innerHTML = await self.getRenderedHtml(self.CLASS + '-share-dialog', {});\r\n\r\n return await self._set1stRenderPromise(self.renderData({ controlId: self.id }, function () {\r\n self.div.querySelector(self.const.selector.DELETEALL).addEventListener(\"click\", function (e) {\r\n self.removeAllTracks(e.target);\r\n e.stopPropagation();\r\n });\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n #getDownloadFileName = function (elem) {\r\n const self = this;\r\n var filename = elem.querySelector(self.const.selector.ACTIVATOR).text;\r\n var regex = new RegExp(self.const.supportedFileExtensions.join('|'), 'gi');\r\n return filename.replace(regex, '') + \"_\" + Util.getFormattedDate(new Date(), true);\r\n }\r\n\r\n async #getElevationFromService(feature) {\r\n const self = this;\r\n let cachedFeature = self.#getElevationFromServiceOnCache(feature);\r\n if (cachedFeature) {\r\n console.log('Tengo datos en cache');\r\n return cachedFeature.data;\r\n } else {\r\n console.log('NO tengo datos en cache');\r\n const tool = await self.getElevationTool();\r\n if (tool) {\r\n let cloned = feature.clone();\r\n try {\r\n let toDownload = await tool.setGeometry({ features: [cloned], crs: self.map.crs });\r\n self.#cacheElevationFromService(feature, toDownload[0]);\r\n return toDownload[0];\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n async getElevationControl() {\r\n const self = this;\r\n\r\n if (!self.elevationControl) {\r\n let options = {};\r\n if (!self.options.displayElevation && self.options.displayOn) {\r\n options.displayOn = self.options.displayOn;\r\n } else if (self.options.displayElevation) {\r\n options = self.options.displayElevation;\r\n }\r\n if (Object.prototype.hasOwnProperty.call(self.options, 'resolution')) { // la configuración de la resolución es distinta al obtener el perfil (0) que para la descarga (20). La configuración para la descarga se gestiona en getDownloadDialog...\r\n options.resolution = self.options.resolution;\r\n } else {\r\n options.resolution = 0;\r\n }\r\n self.elevationControl = await self.map.addControl('elevation', options);\r\n\r\n self.elevationControl._decorateChartPanel = function () {\r\n this.resultsPanel.setCurrentFeature = function (_feature) {\r\n const that = this;\r\n that.currentFeature = self.trackLayer.features.find((feature) => {\r\n return !(feature instanceof Marker) && !(feature instanceof Point);\r\n });\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n if (selectedTrackItem && that.currentFeature) {\r\n that.currentFeature.uid = selectedTrackItem.dataset.uid;\r\n that.currentFeature.fileName = self.#getDownloadFileName(selectedTrackItem);\r\n }\r\n\r\n };\r\n };\r\n\r\n }\r\n return self.elevationControl;\r\n }\r\n\r\n importTrack(options) {\r\n const self = this;\r\n if (!self.isDisabled) {\r\n if (options.fileName && options.features && options.features.length > 0) {\r\n const wait = self.getLoadingIndicator().addWait();\r\n self.importedFileName = options.fileName;\r\n const addPromises = [];\r\n for (var i = 0, len = options.features.length; i < len; i++) {\r\n addPromises.push(self.trackLayer.addFeature(options.features[i]));\r\n }\r\n Promise.all(addPromises).then(function () {\r\n self.wrap.processImportedFeatures({\r\n wait: wait,\r\n notReproject: options.notReproject,\r\n fileHandle: options.fileHandle\r\n });\r\n if (self.trackLayer) { // Si tenemos capa es que todo ha ido bien y gestionamos el despliegue del control\r\n // Desplegamos el control \"ubicar\" al importar mediante drag&drop\r\n self.highlight();\r\n\r\n if (options.fileHandle) {\r\n self.trackLayer._fileHandle = options.fileHandle\r\n }\r\n\r\n self.div.querySelector(`sitna-tab[for=\"${self.id}-tracks-panel\"]`).selected = true;\r\n\r\n if (!options.isShared) {\r\n // abrimos el panel de herramientas\r\n self.map.trigger(Consts.event.TOOLSOPEN);\r\n }\r\n }\r\n });\r\n }\r\n } else if (/.gpx$/g.test(options.fileName.toLowerCase())) {\r\n self.map.toast(self.getLocaleString(\"geo.trk.import.disabled\"), { type: Consts.msgType.WARNING });\r\n }\r\n }\r\n\r\n async #prepareFeaturesToShare(options) {\r\n const self = this;\r\n let trackUid = options.uid;\r\n if (trackUid) {\r\n const availableTracks = await self.getAvailableTracks();\r\n const storageData = availableTracks.find(function (saved) {\r\n return saved.uid.toString() === trackUid.toString();\r\n }).data;\r\n\r\n const storageFeatures = new ol.format.GeoJSON().readFeatures(storageData);\r\n const tcFeatures = storageFeatures.map(f => TC.wrap.Feature.createFeature(f));\r\n let features = tcFeatures.map(function (f) {\r\n const fObj = {};\r\n switch (true) {\r\n case f instanceof Marker:\r\n fObj.type = Consts.geom.MARKER;\r\n break;\r\n case f instanceof Point:\r\n fObj.type = Consts.geom.POINT;\r\n break;\r\n case f instanceof Polyline:\r\n fObj.type = Consts.geom.POLYLINE;\r\n break;\r\n case f instanceof MultiPolyline:\r\n fObj.type = Consts.geom.MULTIPOLYLINE;\r\n break;\r\n }\r\n fObj.id = f.id;\r\n fObj.geom = f.geometry; // El redondeo hace que ya no podamos validar con los tracks existentes.\r\n fObj.data = f.getData();\r\n\r\n return fObj;\r\n });\r\n\r\n if (options.setFeaturesToShare) {\r\n self.featuresToShare = features;\r\n }\r\n return features;\r\n } else {\r\n throw Error('No track uid');\r\n }\r\n }\r\n\r\n #onShowShareDialog(caller) {\r\n const self = this;\r\n if (caller instanceof Element || caller instanceof HTMLDocument) {\r\n if (caller.classList.contains(self.CLASS + '-share-dialog')) {\r\n return infoShare.onShowShareDialog.call(self);\r\n } else {\r\n return Promise.resolve();\r\n }\r\n } else if (caller === self) {\r\n return infoShare.onShowShareDialog.call(self);\r\n }\r\n else if (caller !== self &&\r\n caller.toShare &&\r\n caller.toShare.feature &&\r\n caller.toShare.feature.layer === self.trackLayer) {\r\n // cerramos el diálogo abierto por featureTools para mostrar el de geolocation\r\n Util.closeModal(function () {\r\n infoShare.onCloseShareDialog.call(caller);\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n if (selectedTrackItem) {\r\n return self.#setTrackToShare(selectedTrackItem).then(function () {\r\n const shareDialog = self.#shareDialogDiv.querySelector('.' + self.CLASS + '-share-dialog');\r\n Util.showModal(shareDialog, {\r\n openCallback: function () {\r\n return infoShare.onShowShareDialog.call(self);\r\n },\r\n closeCallback: function () {\r\n infoShare.onCloseShareDialog.call(self);\r\n }\r\n });\r\n\r\n });\r\n } else {\r\n return Promise.resolve();\r\n }\r\n });\r\n }\r\n }\r\n\r\n #onShowDownloadDialog(caller, allFeatures) {\r\n const self = this;\r\n const RADIO_TRACK = \"track\";\r\n const RADIO_MDT = \"mdt\";\r\n const originalDialogFeatures = self._downloadDialog.getFeatures();\r\n\r\n // llega desde el panel del perfil del track: hacemos que el diálogo sea igual que cuando llega desde la lista aunque lo invoque featureTools\r\n if (caller !== self && self._downloadDialog.getFeatures().every(f => f && f.layer === self.trackLayer)) {\r\n let currentOptions = self._downloadDialog.getOptions();\r\n let controlOptions = self.getDownloadDialogOptions();\r\n currentOptions.elevation = controlOptions.elevation;\r\n delete currentOptions.openCallback;\r\n\r\n self._downloadDialog.open(self._downloadDialog.getFeatures(), currentOptions);\r\n }\r\n\r\n // normalizamos el nombre del archivo de la descarga\r\n if (originalDialogFeatures.length === 1 && originalDialogFeatures.every((f) => f && f.fileName)) {\r\n self._downloadDialog.setOptions({ fileName: originalDialogFeatures[0].fileName });\r\n }\r\n\r\n // si no tenemos configurada la opción del perfil desde MDT retornamos sin gestionar nada más\r\n if (!self.options.displayElevation) {\r\n return;\r\n }\r\n\r\n // llega desde la lista de tracks || llega desde el panel del perfil de un track \r\n if (caller === self || self._downloadDialog.getFeatures().every(f => f && f.layer === self.trackLayer)) {\r\n if (!self._downloadDialog.modalBody.querySelector('.' + self.CLASS + \"-ext-dldlog\")) {\r\n let divToExtensions = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-ext\");\r\n if (divToExtensions) {\r\n divToExtensions.appendChild(self._downloadDialogExtNode);\r\n\r\n self.#elevationsCheckbox = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-elev input[type='checkbox']\");\r\n self.#interpolationPanel = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-ip\");\r\n const radioDlSource = self._downloadDialog.modalBody.querySelectorAll(`input[type=radio][name=\"${self.id}-dldlog-source\"]`);\r\n\r\n // si el track no tiene elevaciones y solo contamos con las del MDT ocultamos el botón de descargar originales \r\n const disableOriginalsRadio = function (condition) {\r\n const originalsRadio = radioDlSource[0];\r\n if (condition) {\r\n if (!originalsRadio.classList.contains(Consts.classes.DISABLED)) {\r\n originalsRadio.classList.add(Consts.classes.DISABLED);\r\n }\r\n } else {\r\n originalsRadio.classList.remove(Consts.classes.DISABLED);\r\n }\r\n };\r\n let feature = originalDialogFeatures.filter(isAnyLine)[0];\r\n const firstPoint = getFirstPoint(feature);\r\n let noZ = firstPoint.length === 2;\r\n if (noZ) {\r\n disableOriginalsRadio(noZ);\r\n } else if (firstPoint.length > 2) {\r\n const coordinates = isMultiPolyline(feature) ? feature.geometry.flat() : feature.geometry;\r\n disableOriginalsRadio(coordinates.map(c => c[2]).every(val => val === 0));\r\n }\r\n\r\n\r\n const interpolationPanelIsHidden = function () {\r\n return self.#interpolationPanel && self.#interpolationPanel.classList.contains(Consts.classes.HIDDEN);\r\n };\r\n const setInterpolationPanelVisibility = function () {\r\n if (radioDlSource[0].checked && !interpolationPanelIsHidden()) {\r\n self.#interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n } else if (radioDlSource[0].checked) {\r\n let observer = new MutationObserver(function (mutations) {\r\n mutations.filter(m => m.attributeName === \"class\").forEach(function (mutation) {\r\n if (mutation.oldValue.indexOf(Consts.classes.HIDDEN) > -1) {\r\n if (radioDlSource[0].checked) {\r\n self.#interpolationPanel.classList.add(Consts.classes.HIDDEN);\r\n observer.disconnect();\r\n } else {\r\n observer.disconnect();\r\n }\r\n }\r\n });\r\n });\r\n\r\n let config = { attributes: true, attributeOldValue: true };\r\n observer.observe(self.#interpolationPanel, config);\r\n } else {\r\n if (interpolationPanelIsHidden() && self.#elevationsCheckbox.checked) {\r\n self.#interpolationPanel.classList.remove(Consts.classes.HIDDEN);\r\n }\r\n }\r\n };\r\n\r\n if (self.#elevationsCheckbox) {\r\n if (self.#elevationsCheckbox.checked) {\r\n setInterpolationPanelVisibility();\r\n self._downloadDialogExtNode.classList.remove(Consts.classes.HIDDEN);\r\n } else if (!self._downloadDialogExtNode.classList.contains(Consts.classes.HIDDEN)) {\r\n self._downloadDialogExtNode.classList.add(Consts.classes.HIDDEN);\r\n }\r\n self.#elevationsCheckbox.addEventListener(\"change\", function () {\r\n setInterpolationPanelVisibility();\r\n self._downloadDialogExtNode.classList.toggle(Consts.classes.HIDDEN);\r\n });\r\n }\r\n\r\n if (radioDlSource) {\r\n setInterpolationPanelVisibility();\r\n radioDlSource.forEach(item => {\r\n if (item.dataset.hasChangeEvent) {\r\n return;\r\n }\r\n item.dataset.hasChangeEvent = true;\r\n item.addEventListener(\"change\", async function (e) {\r\n if (e.target.checked) {\r\n setInterpolationPanelVisibility();\r\n let featuresToDownload;\r\n if (e.target.value === RADIO_TRACK) {\r\n featuresToDownload = originalDialogFeatures;\r\n } else {\r\n let featuresFromDialog = originalDialogFeatures;\r\n let feature = featuresFromDialog.filter(isAnyLine)[0];\r\n\r\n if (allFeatures) {\r\n featuresToDownload = featuresFromDialog.filter((feat) => {\r\n return feat instanceof Point;\r\n });\r\n }\r\n\r\n let uid = feature.uid;\r\n let cachedProfile = self.#getElevationProfileFromCache(uid);\r\n if (cachedProfile) {\r\n // Clonamos la feature para presevar la geometría original por si el usuario cambia de nuevo a track\r\n let toDownload = feature.clone();\r\n toDownload.setCoords(cachedProfile.secondaryElevationProfileChartData[0].coords);\r\n if (allFeatures) {\r\n if (!featuresToDownload) {\r\n featuresToDownload = self.#getCurrentPoints() || [];\r\n }\r\n featuresToDownload.push(toDownload);\r\n } else {\r\n featuresToDownload = toDownload;\r\n }\r\n } else {\r\n self._downloadDialog.modalBody.classList.add(Consts.classes.LOADING);\r\n\r\n let toDownload = await self.#getElevationFromService(feature);\r\n if (toDownload) {\r\n if (allFeatures) {\r\n featuresToDownload.push(toDownload);\r\n } else {\r\n featuresToDownload = toDownload;\r\n }\r\n } else {\r\n self.map.toast(self.getLocaleString(\"elevation.error\"), { type: Consts.msgType.ERROR, duration: 5000 });\r\n radioDlSource[0].checked = true;\r\n }\r\n\r\n self._downloadDialog.modalBody.classList.remove(Consts.classes.LOADING);\r\n }\r\n }\r\n\r\n self._downloadDialog.setFeatures(featuresToDownload);\r\n }\r\n });\r\n });\r\n\r\n if (radioDlSource[0].classList.contains(Consts.classes.DISABLED) ||\r\n document.querySelector('.' + self.CLASS + '-ext-dldlog input[type=radio]:checked').value === RADIO_MDT) {\r\n const mdtRadio = radioDlSource[1];\r\n mdtRadio.checked = true;\r\n mdtRadio.dispatchEvent(new Event('change'));\r\n }\r\n }\r\n\r\n if (originalDialogFeatures.length === 1 && originalDialogFeatures[0].fileName) {\r\n self._downloadDialog.setOptions({ fileName: originalDialogFeatures[0].fileName });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getDownloadDialogOptions(fileName) {\r\n const self = this;\r\n\r\n const options = {\r\n title: self.getLocaleString('download'),\r\n fileName: fileName,\r\n openCallback: function () {\r\n self.#onShowDownloadDialog(self, true);\r\n }\r\n };\r\n if (self.options.displayElevation) {\r\n options.elevation = {\r\n resolution: self.options.displayElevation && self.options.displayElevation.resolution || self.map.options.elevation && self.map.options.elevation.resolution || 20,\r\n sampleNumber: self.options.displayElevation && self.options.displayElevation.sampleNumber || self.map.options.elevation && self.map.options.elevation.sampleNumber || 0,\r\n checked: true\r\n };\r\n } else {\r\n options.elevation = {\r\n checked: true\r\n };\r\n }\r\n\r\n return options;\r\n }\r\n\r\n #showAlert = function () {\r\n const self = this;\r\n self.map.toast(self.div.querySelector(\".tc-alert-warning\").innerHTML, {\r\n duration: 10000\r\n });\r\n }\r\n\r\n #activateGeotrackingState() {\r\n const self = this;\r\n self.track.activateButton.classList.add(Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.remove(Consts.classes.HIDDEN);\r\n }\r\n\r\n #deactivateGeotrackingState() {\r\n const self = this;\r\n self.track.activateButton.classList.remove(Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.add(Consts.classes.HIDDEN);\r\n }\r\n\r\n renderData(data, callback) {\r\n const self = this;\r\n\r\n const sel = self.const.selector;\r\n\r\n return super.renderData(data, function () {\r\n\r\n //const options = self.div.querySelectorAll(`.${self.CLASS}-panel`);\r\n //self.div.querySelectorAll('.' + self.CLASS + '-select span').forEach(function (span) {\r\n // span.addEventListener(Consts.event.CLICK, function (e) {\r\n // var label = e.target;\r\n // while (label && label.tagName !== 'LABEL') {\r\n // label = label.parentElement;\r\n // }\r\n // const newFormat = label.querySelector(`input[type=radio][name=\"${self.id}-mode\"]`).value;\r\n\r\n // options.forEach(function (option) {\r\n // option.classList.toggle(Consts.classes.HIDDEN, !option.matches('.' + self.CLASS + '-' + newFormat));\r\n // });\r\n // }, { passive: true });\r\n //});\r\n\r\n self.track = {\r\n activateButton: self.div.querySelector(`.${self.CLASS}-track-ui-activate`),\r\n deactivateButton: self.div.querySelector(`.${self.CLASS}-track-ui-deactivate`),\r\n trackSearch: self.div.querySelector(`.${self.CLASS}-track-available-srch`),\r\n trackImportFile: self.div.querySelector(`.${self.CLASS}-track-import`),\r\n trackSave: self.div.querySelector(`.${self.CLASS}-track-save`),\r\n trackAdd: self.div.querySelector(`.${self.CLASS}-track-add-wpt`),\r\n trackContinue: self.#dialogDiv.querySelector(`.${self.CLASS}-track-continue`),\r\n trackRenew: self.#dialogDiv.querySelector(`.${self.CLASS}-track-new`),\r\n trackClose: self.#dialogDiv.querySelector(`.${self.CLASS}-continue-track-dialog button.tc-modal-close`),\r\n //trackAddSegment: self.div.querySelector('#tc-ctl-geolocation-track-segment'),\r\n trackAdvertisementOK: self.#dialogDiv.querySelector(`.${self.CLASS}-track-advert-ok`)\r\n };\r\n\r\n self.track.trackList = self.div.querySelector(`.${self.CLASS}-track-available-lst`);\r\n\r\n self.track.trackToolPanelOpened = self.div.querySelector(`.${self.CLASS}-track-panel-block input[type=\"checkbox\"]`);\r\n\r\n self.div.querySelector('.' + self.CLASS + '-track-panel-help').addEventListener('click', function () {\r\n self.#showAlert();\r\n });\r\n\r\n self.track.trackName = self.div.querySelector(`.${self.CLASS}-track-title`);\r\n\r\n self.track.trackWPT = self.div.querySelector(`.${self.CLASS}-track-waypoint`);\r\n\r\n if (Util.detectMobile()) {\r\n if (matchMedia('screen and (max-height: 50em) and (max-width: 50em)').matches)\r\n self.track.trackToolPanelOpened.checked = false;\r\n }\r\n\r\n if (window.File && window.FileReader && window.FileList && window.Blob) {\r\n self.track.trackImportFile.disabled = false;\r\n self.track.trackImportFile.addEventListener(Consts.event.CLICK, async function (e) {\r\n if (Util.isFunction(window.showOpenFilePicker)) {\r\n // Gestión vía File System Access API\r\n e.preventDefault();\r\n let fileHandles;\r\n try {\r\n fileHandles = await window.showOpenFilePicker({\r\n types: self.const.supportedFileExtensions.map(txt => {\r\n const result = {\r\n accept: {}\r\n };\r\n result.accept[Consts.mimeType[txt.substr(1).toUpperCase()]] = [txt];\r\n return result;\r\n })\r\n });\r\n }\r\n catch (e) {\r\n if (e instanceof DOMException && window.parent !== window) {\r\n // No se permite ejecutar showOpenFilePicker si estamos en un frame con CORS\r\n let messageText = self.getLocaleString('cannotOpenFileIfEmbedded');\r\n self.map.toast(messageText, { type: Consts.msgType.WARNING });\r\n }\r\n else if (e.name !== 'AbortError') {\r\n throw e;\r\n }\r\n }\r\n if (fileHandles) {\r\n self.loadFile(fileHandles[0], { control: self });\r\n }\r\n }\r\n\r\n // GLS: Eliminamos el archivo subido, sin ello no podemos subir el mismo archivo seguido varias veces\r\n // Envolvemos el input en un form\r\n const input = this;\r\n const form = document.createElement('form');\r\n const parent = input.parentElement;\r\n parent.insertBefore(form, input);\r\n form.appendChild(input);\r\n //form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', input);\r\n parent.removeChild(form);\r\n });\r\n\r\n self.track.trackImportFile.addEventListener('change', function (e) {\r\n self.loadFile(e.target.files[0]);\r\n });\r\n } else {\r\n console.log('no es posible la importación');\r\n }\r\n\r\n self.track.activateButton.addEventListener('click', function () {\r\n self.activateGeotracking();\r\n });\r\n self.track.deactivateButton.addEventListener('click', function () {\r\n self.deactivateGeotracking();\r\n });\r\n\r\n const filter = function (searchTerm) {\r\n searchTerm = searchTerm.toLowerCase();\r\n //tc-ctl-geolocation-track-available-empty\r\n const lis = Array.from(self.track.trackList.querySelectorAll('li'));\r\n lis.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n const trackLis = lis.filter(function (li) {\r\n return li.matches('li:not([class]),li.' + Consts.classes.CHECKED);\r\n });\r\n\r\n const searchIcon = self.div.querySelector(`.${self.CLASS}-track-search-icon`);\r\n if (searchTerm.length === 0) {\r\n trackLis.forEach(function (li) {\r\n li.style.display = '';\r\n });\r\n searchIcon.style.visibility = 'visible';\r\n } else {\r\n searchIcon.style.visibility = 'hidden';\r\n var r = new RegExp(searchTerm, 'i');\r\n trackLis.forEach(function (li) {\r\n li.style.display = r.test(li.querySelector(self.const.selector.ACTIVATOR).text) ? '' : 'none';\r\n });\r\n\r\n if (!trackLis.some(function (li) {\r\n return li.style.display === '';\r\n })) {\r\n lis.forEach(function (li) {\r\n if (li.matches('[class^=\"tc-ctl-geolocation-track-not\"]')) {\r\n li.style.display = '';\r\n }\r\n });\r\n }\r\n }\r\n };\r\n const trackSearchListener = function () {\r\n filter(this.value.toLowerCase().trim());\r\n };\r\n self.track.trackSearch.addEventListener(\"keyup\", trackSearchListener);\r\n self.track.trackSearch.addEventListener(\"search\", trackSearchListener);\r\n\r\n // en el panel\r\n self.track.trackSave.addEventListener('click', self.saveTrack.bind(self));\r\n self.track.trackAdd.addEventListener('click', self.addWaypoint.bind(self));\r\n\r\n const list = self.div.querySelector(`.${self.CLASS}-track-available-lst`);\r\n\r\n // en lista\r\n const editName = function (edit, elm) {\r\n if (elm.tagName !== 'LI') {\r\n elm = elm.parentElement.parentElement;\r\n }\r\n\r\n const input = elm.querySelector('input');\r\n const btn = elm.querySelector(self.const.selector.ACTIVATOR);\r\n\r\n if (edit) {\r\n\r\n input.classList.remove(Consts.classes.HIDDEN);\r\n input.focus();\r\n input.value = btn.text;\r\n btn.classList.add(Consts.classes.HIDDEN);\r\n elm.dataset.title = elm.title;\r\n elm.title = \"\";\r\n\r\n //elm.querySelector(sel.SIMULATE).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EDIT).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DELETE).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.ACTIVATOR).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EXPORT).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.SHARE).classList.add(Consts.classes.HIDDEN);\r\n\r\n elm.querySelector(sel.SAVE).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.CANCEL).classList.remove(Consts.classes.HIDDEN);\r\n } else {\r\n\r\n input.classList.add(Consts.classes.HIDDEN);\r\n btn.classList.remove(Consts.classes.HIDDEN);\r\n elm.title = elm.dataset.title;\r\n delete elm.dataset.title;\r\n\r\n //elm.querySelector(sel.SIMULATE).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EDIT).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DELETE).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.ACTIVATOR).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EXPORT).classList.remove(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.SHARE).classList.remove(Consts.classes.HIDDEN);\r\n\r\n elm.querySelector(sel.SAVE).classList.add(Consts.classes.HIDDEN);\r\n elm.querySelector(sel.CANCEL).classList.add(Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n self.uiSimulate = function (_simulate, elm) {\r\n if (elm) {\r\n\r\n var cnt = elm.tagName === 'LI' ? elm : elm.parentNode;\r\n const btnPause = cnt.querySelector(sel.PAUSE);\r\n btnPause.classList.add(self.const.className.PLAY);\r\n btnPause.setAttribute('title', self.getLocaleString(\"tr.lst.start\"));\r\n self.simulationStopped = true;\r\n\r\n }\r\n };\r\n\r\n //list.addEventListener('click', TC.EventTarget.listenerBySelector(sel.SIMULATE, function (e) {\r\n // var wait = self.getLoadingIndicator().addWait();\r\n\r\n // e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n\r\n // loadTrack(self, e.target).then(function () { //Para evitar el bloqueo de la interfaz en móviles\r\n // self.getLoadingIndicator().removeWait(wait);\r\n // });\r\n //}));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(sel.ACTIVATOR, function (e) {\r\n var wait = self.getLoadingIndicator().addWait();\r\n\r\n drawTrack(self, e.target).then(function () {\r\n self.getLoadingIndicator().removeWait(wait);\r\n });\r\n }));\r\n\r\n self.on(self.const.event.IMPORTEDTRACK, function (e) {\r\n if (!self.isDisabled) {\r\n const listElement = self.track.trackList.querySelector('li[data-id=\"' + e.index + '\"]');\r\n drawTrack(self, listElement.querySelector(sel.ACTIVATOR)).then(function () {\r\n if (self.loadingState) {\r\n delete self.loadingState;\r\n delete self.toShare;\r\n }\r\n });\r\n const transitionEvent = function (_event) {\r\n if (!HTMLElement.prototype.scrollIntoView) {\r\n self.track.trackList.scrollTop = e.index * listElement.offsetHeight;\r\n }\r\n else {\r\n listElement.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n }\r\n listElement.removeEventListener(\"transitionend\", transitionEvent, false);\r\n };\r\n listElement.addEventListener(\"transitionend\", transitionEvent, false);\r\n } else {\r\n self.map.toast(self.getLocaleString(\"geo.trk.import.disabled\"), { type: Consts.msgType.WARNING });\r\n }\r\n });\r\n\r\n const _stopOtherTracks = function (self, trackLiId) {\r\n self.track.trackList.querySelectorAll('li[data-id]').forEach(function (listItem) {\r\n if (listItem.dataset.id !== trackLiId) {\r\n //const btnSimulate = listItem.querySelector(sel.SIMULATE);\r\n const btnPause = listItem.querySelector(sel.PAUSE);\r\n self.simulationStopped = true;\r\n\r\n //btnSimulate.classList.remove(self.const.className.SIMULATIONACTIVATED);\r\n //btnSimulate.setAttribute('title', self.getLocaleString(\"tr.lst.simulate\"));\r\n btnPause.classList.add(self.const.className.PLAY);\r\n btnPause.setAttribute('title', self.getLocaleString(\"tr.lst.start\"));\r\n\r\n //self.uiSimulate(false, listItem);\r\n editName(false, listItem);\r\n }\r\n });\r\n\r\n // para el resize no me va bien aquí\r\n //self.clear(self.const.layer.TRACK);\r\n };\r\n\r\n const drawTrack = function (self, btnDraw) {\r\n return new Promise(function (resolve, _reject) {\r\n\r\n const trackLi = btnDraw.parentElement.parentElement;\r\n\r\n setTimeout(function () {\r\n if (trackLi.classList.contains(Consts.classes.CHECKED)) {\r\n //self.uiSimulate(false, btnDraw);\r\n\r\n self.clear(self.const.layer.TRACK);\r\n\r\n btnDraw.removeAttribute('title');\r\n //\r\n }\r\n else if (self.getSelectedTrackItem()) { // GLS: si hay elemento seleccionado actuamos\r\n _stopOtherTracks(self, trackLi.dataset.id);\r\n self.working = self.drawTrack(trackLi);\r\n } else {\r\n self.working = self.drawTrack(trackLi);\r\n }\r\n\r\n /* GLS: 15/02/2019 Preparamos la feature por si se comparte, necesito hacerlo aquí \r\n porque la gestión en asíncrona y todo el flujo de exportación es síncrono */\r\n if (trackLi.classList.contains(Consts.classes.CHECKED)) {\r\n self.#prepareFeaturesToShare({ uid: trackLi.dataset.uid, setFeaturesToShare: true }).then(function () {\r\n resolve();\r\n });\r\n } else {\r\n resolve();\r\n }\r\n }, 0);\r\n });\r\n };\r\n\r\n const loadTrack = function (self, btnSimulate) {\r\n return new Promise(function (resolve, _reject) {\r\n setTimeout(function () {\r\n const trackLi = btnSimulate.closest(\"li\");\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n _stopOtherTracks(self, trackLi.dataset.id);\r\n //self.uiSimulate(false, selectedTrackItem);\r\n //self.uiSimulate(true, btnSimulate);\r\n\r\n // para el resize con película mejor así\r\n if (selectedTrackItem && trackLi.dataset.id !== selectedTrackItem.dataset.id) {\r\n self.clear(self.const.layer.TRACK);\r\n }\r\n\r\n self.simulate_paused = false;\r\n self.simulateTrack(trackLi);\r\n\r\n resolve();\r\n }, 0);\r\n });\r\n };\r\n\r\n const getParentListElement = function (elm) {\r\n let result = elm;\r\n while (result.tagName !== 'LI') {\r\n result = result.parentElement;\r\n }\r\n return result;\r\n };\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.EDIT}`, function (e) {\r\n editName(true, e.target);\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.DELETE}`, function (e) {\r\n self.removeTrack(getParentListElement(e.target)).then(function (deleted) {\r\n if (deleted && !self.availableTracks.length) {\r\n self.div.querySelector(self.const.selector.DELETEALL).disabled=true;\r\n }\r\n })\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.SAVE}`, function (e) {\r\n const li = getParentListElement(e.target);\r\n var newName = li.querySelector('input').value;\r\n if (newName.trim().length === 0) {\r\n TC.alert(self.getLocaleString('geo.trk.edit.alert'));\r\n }\r\n else {\r\n self.editTrackName(li.dataset.uid, li.querySelector('input').value);\r\n editName(false, e.target);\r\n }\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.CANCEL}`, function (e) {\r\n editName(false, e.target);\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.SHARE}`, function (e) {\r\n self.#setTrackToShare(getParentListElement(e.target)).then(function () {\r\n self.showShareDialog(self.#shareDialogDiv);\r\n });\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.EXPORT}`, function (e) {\r\n const parent = getParentListElement(e.target);\r\n e.target.setAttribute('disabled', \"\");\r\n\r\n self.export(parent).then((features) => {\r\n self.getDownloadDialog().then(function (dialog) {\r\n const options = self.getDownloadDialogOptions(self.#getDownloadFileName(parent));\r\n dialog.open(features.map((f) => { f.uid = parent.dataset.uid; return f; }), options);\r\n\r\n e.target.removeAttribute('disabled');\r\n });\r\n });\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.STOP}`, function (e) {\r\n //self.uiSimulate(false, e.target);\r\n self.wrap.simulateTrackEnd();\r\n const btnPause = e.target.parentElement.querySelector(sel.PAUSE);\r\n btnPause.classList.add(self.const.className.PLAY);\r\n btnPause.setAttribute('title', self.getLocaleString('tr.lst.start'));\r\n if (!self.simulationStopped)\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n self.simulationSpeed = 1;\r\n self.simulationStopped = true;\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.PAUSE}`, function (e) {\r\n self.simulate_paused = !e.target.classList.contains(self.const.className.PLAY);\r\n if (self.simulate_paused)\r\n self.simulate_pausedElapse = -1;\r\n else {\r\n\r\n if (self.simulationStopped) {\r\n var wait = self.getLoadingIndicator().addWait();\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n loadTrack(self, e.target).then(function () { //Para evitar el bloqueo de la interfaz en móviles\r\n self.getLoadingIndicator().removeWait(wait);\r\n self.simulationStopped = false;\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n e.target.setAttribute('title', self.getLocaleString(self.simulate_paused ? 'tr.lst.play' : 'tr.lst.pause'));\r\n e.target.classList.toggle(self.const.className.PLAY, !!self.simulate_paused);\r\n }));\r\n\r\n var lapse = 0.5;\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.BACKWARD}`, function (e) {\r\n if (self.simulationSpeed === 1)\r\n self.simulationSpeed = lapse;\r\n else self.simulationSpeed = self.simulationSpeed / 2;\r\n\r\n e.target.parentElement.querySelector(`.${self.CLASS} ${sel.FORWARD}`).disabled = false;\r\n\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = self.simulationSpeed < 1 ? '/ ' + 1 / self.simulationSpeed : 'x ' + self.simulationSpeed;\r\n\r\n if (self.simulationSpeed === 0.000244140625) {\r\n e.target.disabled = true;\r\n }\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS} ${sel.FORWARD}`, function (e) {\r\n self.simulationSpeed = self.simulationSpeed / lapse;\r\n\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = self.simulationSpeed < 1 ? '/ ' + 1 / self.simulationSpeed : 'x ' + self.simulationSpeed;\r\n\r\n e.target.parentElement.querySelector(`.${self.CLASS} ${sel.BACKWARD}`).disabled = false;\r\n\r\n if (self.simulationSpeed === 4096) {\r\n e.target.disabled = true;\r\n }\r\n }));\r\n\r\n\r\n // popup\r\n self.track.trackContinue.addEventListener('click', function () {\r\n // cerramos popup y continuamos con el track de session y almacenando en session\r\n Util.closeModal();\r\n // al obtener la posición se almacena en session y continuamos almacenando en session mientras se mueve\r\n self.setGeotracking();\r\n });\r\n self.track.trackRenew.addEventListener('click', function () {\r\n // eliminamos el track actual de session - restablecemos el geotracking\r\n delete self.geotrackingSession;\r\n Util.storage.setSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP, undefined);\r\n localforage\r\n .removeItem(self.const.localStorageKey.GEOTRACKINGTEMP)\r\n .catch(err => console.warn(err));\r\n // cerramos el popup\r\n Util.closeModal();\r\n // al obtener la posición se almacena en session y continuamos almacenando en session mientras se mueve\r\n self.setGeotracking();\r\n });\r\n self.track.trackClose.addEventListener('click', function () {\r\n self.#deactivateGeotrackingState();\r\n });\r\n //self.track.trackAddSegment.addEventListener('click', function () {\r\n // TC.alert('pendiente');\r\n // // cerramos el popup\r\n // Util.closeModal();\r\n //});\r\n\r\n // popup advertencia\r\n self.track.trackAdvertisementOK.addEventListener('click', function () {\r\n\r\n const checkboxes = document.body.querySelectorAll('input[name*=\"Advertisement\"]:checked');\r\n\r\n if (checkboxes.length > 0) {\r\n localforage\r\n .setItem(checkboxes[0].getAttribute('name'), false)\r\n .catch(err => console.warn(err));\r\n }\r\n\r\n Util.closeModal();\r\n });\r\n\r\n self.track.renderTrack = self.div.querySelector('#tc-ctl-geolocation-track-render-' + self.id);\r\n self.track.renderTrack.addEventListener('change', function () {\r\n if (self.track.activateButton.classList.contains(Consts.classes.HIDDEN)) {\r\n self.geotrackingLayer.setVisibility(this.checked);\r\n }\r\n\r\n self.#trackVisibility = this.checked;\r\n });\r\n\r\n self.#bindTracks();\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n #getCurrentPoints = function () {\r\n return this.trackLayer.features\r\n .filter(feat => feat instanceof Point);\r\n }\r\n\r\n async #setTrackToShare(li) {\r\n const self = this;\r\n await self.getShareDialog(self.#shareDialogDiv);\r\n const features = await self.#prepareFeaturesToShare({ uid: li.dataset.uid, setFeaturesToShare: false });\r\n self.toShare = {\r\n trackName: li.querySelector(self.const.selector.ACTIVATOR).text,\r\n features: features\r\n };\r\n }\r\n\r\n activate() {\r\n //super.activate();\r\n }\r\n\r\n deactivate() {\r\n const self = this;\r\n\r\n Util.closeModal();\r\n self.clearSelection();\r\n self.deactivateGeotracking();\r\n //super.deactivate();\r\n }\r\n\r\n #setFormatInfoNewPosition(newPosition) {\r\n const self = this;\r\n\r\n const data = {};\r\n const locale = Util.getMapLocale(self.map);\r\n\r\n if (self.map.on3DView) {\r\n var geoCoords = self.map.crs !== self.map.view3D.crs ? Util.reproject(newPosition.position, self.map.crs, self.map.view3D.crs) : newPosition.position;\r\n data.x = geoCoords[0].toLocaleString(locale);\r\n data.y = geoCoords[1].toLocaleString(locale);\r\n\r\n data.mdt = Math.round(self.map.view3D.getHeightFromMDT(geoCoords)).toLocaleString(locale);\r\n\r\n data.isGeo = true;\r\n\r\n } else {\r\n data.x = newPosition.position[0].toLocaleString(locale);\r\n data.y = newPosition.position[1].toLocaleString(locale);\r\n }\r\n\r\n data.z = Math.round(newPosition.altitude).toLocaleString(locale);\r\n data.accuracy = Math.round(newPosition.accuracy).toLocaleString(locale);\r\n data.speed = newPosition.speed.toLocaleString(locale, { minimumFractionDigits: 1, maximumFractionDigits: 1 });\r\n\r\n return data;\r\n }\r\n\r\n getTrackInfoPanel() {\r\n const self = this;\r\n if (!self.track._infoPanelPromise) {\r\n self.track._infoPanelPromise = new Promise(function (resolve, _reject) {\r\n if (!self.track.infoPanel) {\r\n\r\n const resultsPanelOptions = {\r\n content: \"table\",\r\n resize: false,\r\n titles: {\r\n main: self.getLocaleString(\"geo.mylocation\"),\r\n max: self.getLocaleString(\"geo.mylocation.show\")\r\n },\r\n classes: {\r\n collapsed: \"tc-tracking\"\r\n }\r\n };\r\n\r\n let ctlPromise;\r\n const addResultsPanelInfo = function (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n ctlPromise = controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n };\r\n\r\n let displayOn;\r\n if (!self.options.displayElevation && self.options.displayOn) {\r\n displayOn = self.options.displayOn;\r\n } else if (self.options.displayElevation) {\r\n displayOn = self.options.displayElevation.displayOn;\r\n }\r\n if (displayOn) {\r\n const controlContainer = self.map.getControlsByClass('TC.control.' + displayOn[0].toUpperCase() + displayOn.substring(1))[0];\r\n if (controlContainer) {\r\n addResultsPanelInfo(controlContainer);\r\n } else {\r\n self.map.addControl(displayOn).then(addResultsPanelInfo);\r\n }\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n ctlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n ctlPromise.then(function (resultsPanelInfo) {\r\n self.track.infoPanel = resultsPanelInfo;\r\n resolve(resultsPanelInfo);\r\n });\r\n } else {\r\n resolve(self.track.infoPanel);\r\n }\r\n });\r\n }\r\n return self.track._infoPanelPromise;\r\n }\r\n\r\n renderInfoNewPosition = function (d) {\r\n const self = this;\r\n\r\n self.getRenderedHtml(self.CLASS + '-tracking-toast', self.#setFormatInfoNewPosition(d.pd), function (html) {\r\n self.getTrackInfoPanel().then(function (infoPanel) {\r\n if (!infoPanel.isMinimized()) {\r\n infoPanel.renderPromise().then(function () {\r\n infoPanel.options.collidingPriority = infoPanel.COLLIDING_PRIORITY.IGNORE;\r\n infoPanel.open(html);\r\n });\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n #updateGeotrackingToolsState() {\r\n const self = this;\r\n\r\n if (!self.track.trackToolPanelOpened.checked) {\r\n self.map.trigger(Consts.event.TOOLSCLOSE);\r\n }\r\n }\r\n\r\n setFollowing(value) {\r\n const self = this;\r\n self.#isFollowing = value;\r\n if (self.trackCenterButton) {\r\n const btn = self.trackCenterButton.querySelector(\"button\");\r\n btn.classList.toggle(Consts.classes.UNPLUGGED, !value);\r\n btn.title = self.getLocaleString(value ? \"geo.trk.notCenter\" : \"geo.trk.center\")\r\n }\r\n !value && self.trackCenterButton && self.trackCenterButton.querySelector(\"button\").classList.add(Consts.classes.UNPLUGGED);\r\n value && self.trackCenterButton && self.trackCenterButton.querySelector(\"button\").classList.remove(Consts.classes.UNPLUGGED);\r\n }\r\n\r\n async moveTo(where) {\r\n const self = this;\r\n if (where && Array.isArray(where) && where.length > 0) {\r\n followingZoom = true;\r\n if (where[0] instanceof Feature) {\r\n await self.map.zoomToFeatures(where, { animate: false });\r\n }\r\n else {\r\n await self.map.setCenter(where, { animate: false })\r\n }\r\n setTimeout(function () {\r\n followingZoom = false;\r\n }, 300);\r\n }\r\n }\r\n\r\n setGeotracking() {\r\n const self = this;\r\n\r\n self.activate();\r\n self.#isFollowing = true;\r\n self.#activateGeotrackingState();\r\n self.#updateGeotrackingToolsState();\r\n\r\n self.map.on(Consts.event.ZOOM, zoomHandler)\r\n\r\n self.on(self.const.event.POSITIONCHANGE, function (d) {\r\n if (self.currentPoint && (self.currentPoint.position[0] !== d.pd.position[0] && self.currentPoint.position[1] !== d.pd.position[1])) {\r\n //cambio real de coordenadas\r\n if (self.#isFollowing) {\r\n self.moveTo(d.pd.position);\r\n }\r\n }\r\n self.currentPoint = d.pd;\r\n self.renderInfoNewPosition(d);\r\n\r\n self.track.trackName.disabled = false;\r\n self.track.trackSave.disabled = false;\r\n\r\n self.track.trackWPT.disabled = false;\r\n self.track.trackAdd.disabled = false;\r\n\r\n // cada vez que se registra una nueva posición almacenamos en sessionStorage\r\n Util.storage.setSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP, self.wrap.formattedToStorage(self.geotrackingLayer).features);\r\n });\r\n self.on(self.const.event.STATEUPDATED, function (_data) {\r\n //self.track.htmlMarker.setAttribute('src', data.moving ? 'layout/idena/img/geo-marker-heading.png' : 'layout/idena/img/geo-marker.png');\r\n });\r\n\r\n self.clear(self.const.layer.GEOTRACKING);\r\n\r\n self.#advertisement(self.const.localStorageKey.GEOTRACKINGSHOWADVERTISEMENT);\r\n\r\n self.wrap.setGeotracking(true);\r\n }\r\n\r\n #keepWakeLock() {\r\n const self = this;\r\n if (wakeLockSupported) {\r\n // create an async function to request a wake lock\r\n const requestWakeLock = async () => {\r\n try {\r\n wakeLock = await navigator.wakeLock.request('screen');\r\n console.log(\"Wake Lock active\");\r\n wakeLock.addEventListener('release', () => {\r\n // if wake lock is released alter the button accordingly\r\n console.log(\"Wake Lock released\");\r\n });\r\n } catch (err) {\r\n // if wake lock request fails - usually system related, such as battery\r\n console.error(err);\r\n }\r\n };\r\n requestWakeLock();\r\n //al cambiar de pestaña volvemos a activar el wakeLock\r\n //document.addEventListener('visibilitychange', handleVisibilityChange);\r\n }\r\n else {\r\n self.#addVideoKeepScreenOn();\r\n }\r\n }\r\n\r\n #releaseLock() {\r\n const self = this;\r\n if (wakeLockSupported) {\r\n //document.removeEventListener('visibilitychange', handleVisibilityChange);\r\n wakeLock.release()\r\n .then(() => {\r\n wakeLock = null;\r\n });\r\n }\r\n else {\r\n self.#removeVideoKeepScreenOn();\r\n }\r\n }\r\n\r\n #addVideoKeepScreenOn() {\r\n const self = this;\r\n\r\n if (!self.videoScreenOn) {\r\n var media = {\r\n WebM: \"data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=\",\r\n MP4: \"data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw==\"\r\n };\r\n\r\n self.videoScreenOn = document.createElement('video');\r\n self.videoScreenOn.setAttribute(\"loop\", \"\");\r\n self.videoScreenOn.setAttribute(\"muted\", \"\");\r\n self.videoScreenOn.setAttribute(\"webkit-playsinline\", \"\");\r\n self.videoScreenOn.setAttribute(\"playsinline\", \"\");\r\n self.videoScreenOn.setAttribute(\"style\", \"transform: translateZ(0px);\");\r\n\r\n var sourceWebM = document.createElement('source');\r\n sourceWebM.src = media.WebM;\r\n sourceWebM.type = \"video/webm\";\r\n self.videoScreenOn.appendChild(sourceWebM);\r\n\r\n var sourceMP4 = document.createElement('source');\r\n sourceMP4.src = media.MP4;\r\n sourceMP4.type = \"video/mp4\";\r\n self.videoScreenOn.appendChild(sourceMP4);\r\n }\r\n\r\n self.videoScreenOn.play();\r\n }\r\n\r\n #removeVideoKeepScreenOn() {\r\n const self = this;\r\n if (self.videoScreenOn) {\r\n self.videoScreenOn.pause();\r\n }\r\n }\r\n\r\n #setOnWindowBlurred() {\r\n const self = this;\r\n if (!self.#onWindowBlurred) {\r\n self.#onWindowBlurred = function () {\r\n const self = this;\r\n self.#fromSessionToStorage();\r\n }.bind(self);\r\n }\r\n\r\n if ('onpagehide' in window) {\r\n window.addEventListener('pagehide', self.#onWindowBlurred, false);\r\n } else {\r\n window.addEventListener('blur', self.#onWindowBlurred, false);\r\n }\r\n }\r\n\r\n #setOnWindowFocused() {\r\n const self = this;\r\n if (!self.#onWindowFocused) {\r\n self.#onWindowFocused = function () {\r\n const self = this;\r\n if (self.videoScreenOn && self.videoScreenOn.paused) {\r\n self.videoScreenOn.play();\r\n }\r\n self.#fromStorageToSession();\r\n }.bind(self);\r\n }\r\n\r\n if ('onpageshow' in window) {\r\n window.addEventListener('pageshow', self.#onWindowFocused, false);\r\n } else {\r\n window.addEventListener('focus', self.#onWindowFocused, false);\r\n }\r\n }\r\n\r\n #setOnWindowVisibility() {\r\n const self = this;\r\n if (!self.#onWindowVisibility) {\r\n self.#onWindowVisibility = async function () {\r\n var self = this;\r\n\r\n var hidden = getHiddenProperty();\r\n\r\n if (!document[hidden]) {\r\n if (wakeLock !== null) {\r\n self.#keepWakeLock();\r\n }\r\n else {\r\n self.#onWindowFocused();\r\n }\r\n }\r\n else if (notifications) {\r\n if (navigator.serviceWorker &&\r\n //si se pulta shift + F5 el objeto controller de serviceWorkerContainer es null\r\n (navigator.serviceWorker.controller ||\r\n //entonces ontenemos el SW del control SWCache client si existe y miramos si está activo\r\n self.map.getControlsByClass(TC.control.SWCacheClient).length && (await self.map.getControlsByClass(TC.control.SWCacheClient)[0].getServiceWorker()).state === \"activated\"))\r\n try {\r\n const registration = await navigator.serviceWorker.ready;\r\n registration.showNotification(self.notificationConfig.title, Object.assign(self.notificationConfig, {\r\n actions: [{\r\n action: \"back\",\r\n title: self.getLocaleString(\"geo.trk.notification.backButton\")\r\n }], data: {\r\n \"url\": document.location.href\r\n }\r\n }));\r\n }\r\n catch (ex) {\r\n new Notification(self.notificationConfig.title, self.notificationConfig);\r\n }\r\n else {\r\n new Notification(self.notificationConfig.title, self.notificationConfig);\r\n }\r\n }\r\n if (!wakeLock && self.videoScreenOn) {\r\n console.log('video is: ' + self.videoScreenOn.paused);\r\n }\r\n\r\n }.bind(self);\r\n }\r\n\r\n window.addEventListener('visibilitychange', self.#onWindowVisibility, false);\r\n }\r\n\r\n #addWindowEvents() {\r\n const self = this;\r\n self.#setOnWindowVisibility();\r\n self.#setOnWindowBlurred();\r\n self.#setOnWindowFocused();\r\n }\r\n\r\n #removeWindowEvents = function () {\r\n const self = this;\r\n window.removeEventListener('visibilitychange', self.#onWindowVisibility, false);\r\n self.#onWindowVisibility = null;\r\n\r\n if ('onpagehide' in window) {\r\n window.removeEventListener('pagehide', self.#onWindowBlurred, false);\r\n } else {\r\n window.removeEventListener('blur', self.#onWindowBlurred, false);\r\n }\r\n if ('onpageshow' in window) {\r\n window.removeEventListener('pageshow', self.#onWindowFocused, false);\r\n } else {\r\n window.removeEventListener('focus', self.#onWindowFocused, false);\r\n }\r\n }\r\n\r\n #fromSessionToStorage() {\r\n const self = this;\r\n\r\n var geotrackingSession = Util.storage.getSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP);\r\n if (geotrackingSession && geotrackingSession.length > 0)\r\n localforage\r\n .setItem(self.const.localStorageKey.GEOTRACKINGTEMP, typeof geotrackingSession === \"string\" ? geotrackingSession : JSON.stringify(geotrackingSession))\r\n .catch(err => console.warn(err));\r\n }\r\n\r\n #fromStorageToSession() {\r\n const self = this;\r\n\r\n localforage.getItem(self.const.localStorageKey.GEOTRACKINGTEMP).then(function (storageData) {\r\n if (storageData !== null && storageData !== \"null\" && storageData.length > 0) {\r\n Util.storage.setSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP, storageData);\r\n }\r\n }, err => console.warn(err));\r\n }\r\n\r\n /* final gestión suspensión de la pantalla en móviles */\r\n\r\n #advertisement(showAdvertisement) {\r\n const self = this;\r\n\r\n localforage.getItem(showAdvertisement).then(function (registeredShowAdvertisement) {\r\n if (registeredShowAdvertisement == null) {\r\n const dialog = self.#dialogDiv.querySelector('.tc-ctl-geolocation-track-advert-dialog');\r\n const checkbox = dialog.querySelector('input[type=\"checkbox\"]');\r\n checkbox.setAttribute('name', showAdvertisement);\r\n checkbox.checked = false;\r\n\r\n document.querySelector('#pageBlurMsg').textContent = Util.detectMobile() ? self.getLocaleString('geo.trk.page.blur') : self.getLocaleString('geo.trk.page.blur.desktop');\r\n\r\n dialog.querySelector('h3').textContent = showAdvertisement === self.const.localStorageKey.GPSSHOWADVERTISEMENT ?\r\n self.getLocaleString(\"geo.track.activate\") + \" \" + self.getLocaleString(\"geo.gps\") :\r\n self.getLocaleString('geo.track.activate.title');\r\n\r\n Util.showModal(self.#dialogDiv.querySelector('.tc-ctl-geolocation-track-advert-dialog'));\r\n }\r\n }, err => console.warn(err));\r\n\r\n self.map.toast(!Util.detectMobile() ? self.getLocaleString('geo.trk.page.blur.desktop') : self.getLocaleString('geo.trk.page.blur'), {\r\n type: Consts.msgType.WARNING\r\n });\r\n }\r\n\r\n #askGeotracking(callback) {\r\n const self = this;\r\n\r\n Util.showModal(self.#dialogDiv.querySelector('.tc-ctl-geolocation-continue-track-dialog'), {\r\n closeCallback: function () {\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n activateGeotracking() {\r\n const self = this;\r\n self.#activateGeotrackingState();\r\n var geotrackingAvailable = true;\r\n\r\n if (!self.isActive) {\r\n self.activate();\r\n }\r\n\r\n self.clear(self.const.layer.GEOTRACKING);\r\n\r\n try {\r\n Util.storage.setSessionLocalValue(self.const.localStorageKey.TEST, self.const.localStorageKey.TEST);\r\n } catch (error) {\r\n if (error.code === DOMException.QUOTA_EXCEEDED_ERR)\r\n TC.alert(self.getLocaleString(\"geo.error.trackinglocalstorage\"));\r\n else TC.error(error);\r\n\r\n geotrackingAvailable = false;\r\n }\r\n\r\n if (geotrackingAvailable) {\r\n if (window.Notification || window.webkitNotifications) {\r\n var checkNotificationsReply = function (permission) {\r\n if (permission === \"granted\") notifications = _notifications;\r\n };\r\n const _notifications = window.Notification || window.webkitNotifications;\r\n if (_notifications.permission === \"denied\") {\r\n notifications = null;\r\n } else if (_notifications.permission === \"granted\") notifications = _notifications;\r\n else _notifications.requestPermission(checkNotificationsReply);\r\n }\r\n self.#keepWakeLock();\r\n self.#addWindowEvents();\r\n\r\n self.geotrackingSession = Util.storage.getSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP);\r\n if (self.geotrackingSession) {\r\n var asked = self.#askGeotracking(function () {\r\n self.#deactivateGeotrackingState();\r\n });\r\n\r\n if (!asked) {\r\n self.track.trackRenew.click();\r\n }\r\n } else {\r\n self.setGeotracking();\r\n }\r\n } else {\r\n self.#deactivateGeotrackingState();\r\n }\r\n }\r\n\r\n deactivateGeotracking() {\r\n const self = this;\r\n\r\n const _deactivateGeotracking = function () {\r\n\r\n self.getTrackInfoPanel().then(panel => panel.close());\r\n\r\n self.#fromSessionToStorage();\r\n\r\n self.wrap.setGeotracking(false);\r\n\r\n\r\n delete self.geotrackingPosition;\r\n\r\n if (!self.#trackVisibility) {\r\n self.div.querySelector(`.${self.CLASS}-track-render`).querySelector('label').click();\r\n }\r\n\r\n self.#releaseLock();\r\n self.#removeWindowEvents();\r\n\r\n self.off(self.const.event.POSITIONCHANGE);\r\n self.off(self.const.event.STATEUPDATED);\r\n\r\n self.#deactivateGeotrackingState();\r\n\r\n self.track.trackName.value = '';\r\n self.track.trackName.disabled = true;\r\n self.track.trackSave.disabled = true;\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n self.clear(self.const.layer.GEOTRACKING);\r\n self.clear(self.const.layer.GPS);\r\n\r\n\r\n self.map.off(Consts.event.ZOOM, zoomHandler)\r\n\r\n //Control.prototype.deactivate.call(self);\r\n\r\n return true;\r\n };\r\n\r\n if (self.wrap.hasCoordinates()) {\r\n self.map.toast(self.getLocaleString(\"geo.trk.deactivate.alert\"), {\r\n duration: 10000\r\n });\r\n //TC.alert(self.getLocaleString(\"geo.trk.deactivate.alert\"));\r\n return _deactivateGeotracking();\r\n } else {\r\n return _deactivateGeotracking();\r\n }\r\n }\r\n\r\n /* Obtengo los tracks desde localForage */\r\n async getStoredTracks() {\r\n const self = this;\r\n let tracks = [];\r\n\r\n const onResolve = function (toResolve) {\r\n // estamos en la carga inicial\r\n if (self.#elevationProfileCache.size === 0) {\r\n toResolve\r\n .filter(elm => elm.profile)\r\n .forEach((elm) => self.#elevationProfileCache.set(elm.uid, JSON.parse(elm.profile)));\r\n }\r\n return toResolve;\r\n };\r\n\r\n let keys;\r\n try {\r\n keys = await localforage.keys();\r\n }\r\n catch (_err) {\r\n console.log('Capturamos error que se produce por configuración del navegador.');\r\n TC.error(self.getLocaleString('couldNotAccessLocalStorage'));\r\n }\r\n keys = keys?.filter(function (k) {\r\n if (k.indexOf(self.const.localStorageKey.GEOTRACKINGTEMP) !== 0 && k.indexOf(self.const.localStorageKey.GEOTRACKING) === 0) {\r\n return /trk#\\d/i.exec(k);\r\n }\r\n return false;\r\n });\r\n\r\n if (!keys || keys.length === 0) {\r\n self.availableTracks = tracks;\r\n return onResolve(tracks);\r\n }\r\n\r\n const promises = new Array(keys.length);\r\n keys.forEach(function (key, idx) {\r\n promises[idx] = localforage.getItem(key);\r\n });\r\n\r\n const results = await Promise.all(promises);\r\n if (results && results.length) {\r\n results.forEach(function (res) {\r\n if (typeof res === 'string') {\r\n res = JSON.parse(res);\r\n }\r\n if (res instanceof Array) {\r\n tracks = tracks.concat(res);\r\n } else {\r\n tracks.push(res);\r\n }\r\n });\r\n\r\n const tracksArray = tracks.length > 1 ? orderTracks(tracks) : tracks;\r\n self.availableTracks = tracksArray;\r\n return onResolve(tracksArray);\r\n }\r\n }\r\n\r\n /* Almaceno los tracks mediante localForage, actualizo la vble availableTracks y actualizo la lista de tracks */\r\n async setStoredTracks(tracks) {\r\n const self = this;\r\n const promises = [];\r\n tracks.forEach(function (t) {\r\n promises.push(localforage.setItem(self.const.localStorageKey.GEOTRACKING + \"#\" + t.uid, t).catch(err => {\r\n console.warn(err);\r\n }));\r\n });\r\n\r\n await Promise.all(promises);\r\n await self.getStoredTracks();\r\n self.#bindTracks();\r\n }\r\n\r\n /* Obtengo los tracks desde vble local */\r\n async getAvailableTracks() {\r\n const self = this;\r\n if (!self.availableTracks) {\r\n return await self.getStoredTracks();\r\n }\r\n else {\r\n return self.availableTracks;\r\n }\r\n }\r\n\r\n async #bindTracks() {\r\n const self = this;\r\n\r\n const listItems = self.track.trackList.querySelectorAll('li');\r\n listItems.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n\r\n const tracks = await self.getAvailableTracks();\r\n\r\n const isEmpty = function (obj) {\r\n return !obj || obj.length === 0;\r\n };\r\n\r\n if (isEmpty(tracks)) {\r\n self.track.trackList.querySelectorAll('li[class^=\"tc-ctl-geolocation-track-available-empty\"]').forEach(function (li) {\r\n li.style.display = '';\r\n });\r\n self.track.trackSearch.disabled = true;\r\n }\r\n else {\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n var selectedTrackId;\r\n if (selectedTrackItem) {\r\n selectedTrackId = selectedTrackItem.dataset.uid;\r\n }\r\n self.track.trackList.querySelectorAll('li[data-id]').forEach(function (li) {\r\n self.track.trackList.removeChild(li);\r\n });\r\n\r\n const parser = new DOMParser();\r\n for (var i = 0; i < tracks.length; i++) {\r\n var t = tracks[i];\r\n if (t && typeof t === \"object\") {\r\n const html = await self.getRenderedHtml(self.CLASS + '-track-node', {\r\n id: i, uid: t.uid, name: t.name ? t.name.trim() : ''\r\n });\r\n const newLi = parser.parseFromString(html, 'text/html').body.firstChild;\r\n self.getItemTools().forEach(tool => self.addItemToolUI(newLi, tool));\r\n self.track.trackList.appendChild(newLi);\r\n newLi.querySelector(self.const.selector.VISIBILITY).addEventListener('change', function (e) {\r\n self.trackLayer.setVisibility(e.target.checked);\r\n self.endPointLayer.setVisibility(e.target.checked);\r\n });\r\n }\r\n }\r\n\r\n self.div.querySelector(self.const.selector.DELETEALL).disabled=false;\r\n\r\n if (selectedTrackId) {\r\n self.setSelectedTrack(self.track.trackList.querySelector('li[data-uid=\"' + selectedTrackId + '\"]'));\r\n }\r\n\r\n self.track.trackSearch.disabled = false;\r\n }\r\n }\r\n\r\n clearChartProgress() {\r\n const self = this;\r\n self.getElevationControl().then(elevCtl => elevCtl && elevCtl.removeElevationTooltip());\r\n }\r\n\r\n setChartProgress = function (previous, _current, _distance, _doneTime) {\r\n const self = this;\r\n\r\n if (self.elevationControl && self.elevationControl.resultsPanel && (!self.elevationControl.resultsPanel.isVisible() || self.elevationControl.resultsPanel.isMinimized())) {\r\n return;\r\n }\r\n\r\n var done = previous.d;\r\n //var locale = self.map.options.locale && self.map.options.locale.replace('_', '-') || undefined;\r\n\r\n if (self.elevationChartData) {\r\n self.setSecondaryElevationProfileCoordinates(self.elevationChartData.coords);\r\n\r\n let iX = 0;\r\n while (self.elevationChartData.x[iX] <= done) {\r\n iX++;\r\n }\r\n\r\n self.getElevationControl().then(elevCtl => elevCtl &&\r\n elevCtl.getProfilePanel().then(function (panel) {\r\n if (panel) {\r\n panel.chart.chart.tooltip.show({ x: self.elevationChartData.x[iX === 0 ? 0 : iX - 1] });\r\n panel.wrap.hideElevationMarker();\r\n }\r\n }));\r\n }\r\n }\r\n\r\n setSecondaryElevationProfileCoordinates(sourceCoordinates) {\r\n const self = this;\r\n const secProfileData = self.elevationChartData?.secondaryElevationProfileChartData?.[0];\r\n\r\n if (secProfileData?.ele && !secProfileData?.eleCoordinates) {\r\n\r\n // Aplanamos a una lista de puntos\r\n let level = -2;\r\n let levelElm = sourceCoordinates;\r\n do {\r\n level++;\r\n levelElm = levelElm[0];\r\n }\r\n while (Array.isArray(levelElm));\r\n secProfileData.eleCoordinates = sourceCoordinates\r\n .flat(level)\r\n .map((c, i) => [c[0], c[1], secProfileData.ele[i]]);\r\n }\r\n }\r\n\r\n getTimeInterval(timeFrom, timeTo) {\r\n let diff = timeTo - timeFrom;\r\n const d = {};\r\n var daysDifference = Math.floor(diff / 1000 / 60 / 60 / 24);\r\n diff -= daysDifference * 1000 * 60 * 60 * 24;\r\n\r\n var hoursDifference = Math.floor(diff / 1000 / 60 / 60);\r\n diff -= hoursDifference * 1000 * 60 * 60;\r\n\r\n d.h = hoursDifference + daysDifference * 24;\r\n\r\n var minutesDifference = Math.floor(diff / 1000 / 60);\r\n diff -= minutesDifference * 1000 * 60;\r\n\r\n d.m = minutesDifference;\r\n\r\n d.s = Math.floor(diff / 1000);\r\n\r\n return Util.extend({}, d, { toString: (\"00000\" + d.h).slice(-2) + ':' + (\"00000\" + d.m).slice(-2) + ':' + (\"00000\" + d.s).slice(-2) });\r\n }\r\n\r\n async simulateTrack(li) {\r\n const self = this;\r\n\r\n const elevCtl = await self.getElevationControl();\r\n elevCtl.removeElevationTooltip();\r\n self.simulationSpeed = 1;\r\n if (self.getSelectedTrackItem() === li && // si el usuario a activado la película del track ya seleccionado no repintamos\r\n elevCtl.resultsPanel && elevCtl.resultsPanel.chart && elevCtl.resultsPanel.chart.chart) {\r\n if (!self.hasElevation) {\r\n self.hasElevation = elevCtl.elevationProfileChartData.min === 0 && elevCtl.elevationProfileChartData.max === 0 ? false : true;\r\n }\r\n self.wrap.simulateTrack();\r\n } else {\r\n self.drawTrack(li, false).then(function () {\r\n if (self.elevationChartData &&\r\n self.elevationChartData.min === 0 &&\r\n self.elevationChartData.max === 0) { // no tenemos elevación original\r\n self.map.toast(self.getLocaleString(\"geo.trk.simulate.empty\"), { duration: 10000 });\r\n self.hasElevation = false; // establecemos a false para que no muestra el progreso en el perfil ya que siempre será elevación 0\r\n } else if (!(self.elevationChartData.min === 0 && self.elevationChartData.max === 0)) {\r\n self.hasElevation = true;\r\n }\r\n\r\n self.wrap.simulateTrack();\r\n });\r\n }\r\n }\r\n\r\n async drawTrack(li, _activateSnapping) {\r\n const self = this;\r\n\r\n self.clear(self.const.layer.TRACK);\r\n\r\n self.#updateGeotrackingToolsState();\r\n self.setSelectedTrack(li);\r\n await self.drawTrackData(li);\r\n await self.displayTrackProfile(li);\r\n self.activate();\r\n }\r\n\r\n #getElevationProfileFromCache(uid) {\r\n return this.#elevationProfileCache.get(uid);\r\n }\r\n\r\n #cacheElevationProfile(data, trackUID) {\r\n const self = this;\r\n let result = self.#getElevationProfileFromCache(trackUID);\r\n if (!result) {\r\n self.#elevationProfileCache.set(trackUID, data);\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n let index = tracks.findIndex(t => t.uid.toString() === trackUID);\r\n if (index > -1) {\r\n tracks[index].profile = JSON.stringify(data);\r\n self.setStoredTracks(tracks);\r\n }\r\n }\r\n });\r\n result = data;\r\n }\r\n return result;\r\n }\r\n\r\n #removeElevationProfileFromCache(uid) {\r\n this.#elevationProfileCache.delete(uid);\r\n }\r\n\r\n #getElevationFromServiceOnCache(feature) {\r\n const self = this;\r\n const cachedElevation = self.#elevationFromServiceCache.find(function (elm) {\r\n return elm.feature === feature;\r\n });\r\n if (!cachedElevation) {\r\n const arr_diff = function (a1, a2) {\r\n var a = [], diff = [];\r\n\r\n for (var i = 0; i < a1.length; i++) {\r\n a[a1[i]] = true;\r\n }\r\n\r\n for (i = 0; i < a2.length; i++) {\r\n if (a[a2[i]]) {\r\n delete a[a2[i]];\r\n } else {\r\n a[a2[i]] = true;\r\n }\r\n }\r\n\r\n for (var k in a) {\r\n diff.push(k);\r\n }\r\n\r\n return diff;\r\n };\r\n return self.#elevationFromServiceCache.find(function (elm) {\r\n return arr_diff(elm.feature.geometry, feature.geometry).length === 0;\r\n //return elm.feature.geometry === feature.geometry; aunque sean iguales da falso ¿?¿?¿?\r\n });\r\n }\r\n return cachedElevation;\r\n }\r\n\r\n #cacheElevationFromService = function (feature, data) {\r\n const self = this;\r\n let result = self.#getElevationFromServiceOnCache(feature);\r\n if (!result) {\r\n result = {\r\n feature: feature\r\n };\r\n self.#elevationFromServiceCache.push(result);\r\n }\r\n result.data = data;\r\n return result;\r\n }\r\n\r\n async displayTrackProfile(li, options) {\r\n const self = this;\r\n\r\n if (options?.resized) {\r\n self.wrap.simulateTrackEnd(options.resized);\r\n //self.uiSimulate(false, li);\r\n return;\r\n }\r\n if (!self.#onResize) {\r\n self.#onResize = self.displayTrackProfile.bind(self, li, { resize: true });\r\n window.addEventListener(\"resize\", self.#onResize, false);\r\n }\r\n const elevCtl = await self.getElevationControl();\r\n if (elevCtl) {\r\n let cachedProfile;\r\n if (options?.forceRefresh) {\r\n self.#removeElevationProfileFromCache(li.dataset.uid);\r\n }\r\n else {\r\n cachedProfile = self.#getElevationProfileFromCache(li.dataset.uid);\r\n }\r\n if (!cachedProfile) {\r\n const track = await self.getTrackData(li);\r\n if (self.trackLayer?.features) {\r\n // track con tiempo\r\n const hasTime = track.layout === ol.geom.GeometryLayout.XYZM ||\r\n track.layout === ol.geom.GeometryLayout.XYM;\r\n const longLayout = hasTime || self.options.displayElevation;\r\n let features = self.trackLayer.features.filter(f => {\r\n return longLayout && isAnyLine(f);\r\n });\r\n\r\n let line = options?.feature || features[0];\r\n\r\n if (line) {\r\n let time = {};\r\n if (hasTime) {\r\n let diff = 0;\r\n const firstPoint = getFirstPoint(line);\r\n const lastPoint = getLastPoint(line);\r\n if (track.layout === ol.geom.GeometryLayout.XYZM) {\r\n diff = lastPoint[3] - firstPoint[3];\r\n } else {\r\n diff = lastPoint[2] - firstPoint[2];\r\n }\r\n time = {\r\n s: Math.floor(diff / 1000 % 60),\r\n m: Math.floor(diff / (1000 * 60) % 60),\r\n h: Math.floor(diff / (1000 * 60 * 60) % 24)\r\n };\r\n }\r\n\r\n let elevOptions = {\r\n originalElevation: true,\r\n onlyOriginalElevation: !self.options.displayElevation ? true : false,\r\n ignoreCaching: true,\r\n time: time,\r\n callback: function () {\r\n self.elevationChartData = elevCtl.elevationProfileChartData;\r\n self.hasElevation = elevCtl.elevationProfileChartData.min === 0 && elevCtl.elevationProfileChartData.max === 0 ? false : true;\r\n self.#cacheElevationProfile(elevCtl.elevationProfileChartData, li.dataset.uid);\r\n\r\n self.resultsPanelChart.div.addEventListener('mouseover', function (_e) {\r\n if (self.trackLayer && self.trackLayer.getVisibility() && self.trackLayer.getOpacity() > 0)\r\n self.wrap.activateSnapping.call(self.wrap);\r\n });\r\n self.resultsPanelChart.div.addEventListener('mouseout', function (_e) {\r\n if (self.trackLayer && (!self.trackLayer.getVisibility() && self.trackLayer.getOpacity() == 0))\r\n self.wrap.deactivateSnapping.call(self.wrap);\r\n });\r\n\r\n self.map\r\n .on(Consts.event.RESULTSPANELMIN, function () { self.clearChartProgress(); })\r\n .on(Consts.event.RESULTSPANELCLOSE, function () { self.clearChartProgress(); });\r\n\r\n // mantenemos el mismo nombre de archivo al descargar desde panel y desde la lista.\r\n elevCtl.getProfilePanel().then(function (resultsPanel) {\r\n let selectedTrackItem = self.getSelectedTrackItem();\r\n if (selectedTrackItem) {\r\n resultsPanel.currentFeature.fileName = self.#getDownloadFileName(selectedTrackItem);\r\n }\r\n });\r\n }\r\n };\r\n elevCtl.displayElevationProfile(line, elevOptions);\r\n } else {\r\n throw Error('No features have compatible geometry layout');\r\n }\r\n } else {\r\n throw Error('No features available');\r\n }\r\n } else {\r\n if (!self.options.displayElevation) {\r\n delete cachedProfile.secondaryElevationProfileChartData[0];\r\n }\r\n self.elevationChartData = cachedProfile;\r\n const resultsPanel = await elevCtl.getProfilePanel();\r\n await resultsPanel.renderPromise();\r\n resultsPanel.doVisible();\r\n elevCtl.renderElevationProfile(self.elevationChartData);\r\n resultsPanel.setCurrentFeature();\r\n }\r\n return;\r\n } else {\r\n throw Error('No elevation control');\r\n }\r\n }\r\n\r\n clear(layerType) {\r\n const self = this;\r\n\r\n if (self.#onResize) {\r\n window.removeEventListener(\"resize\", self.#onResize, false);\r\n self.#onResize = undefined;\r\n }\r\n\r\n if (layerType === self.const.layer.TRACK) {\r\n\r\n self.trackLayer.clearFeatures();\r\n self.endPointLayer.clearFeatures();\r\n self.#startMarker = null;\r\n self.#finishMarker = null;\r\n delete self.trackLayer._fileHandle;\r\n\r\n // gráfico perfil de elevación\r\n self.getElevationControl().then(elevCtl => elevCtl && elevCtl.closeElevationProfile());\r\n delete self.elevationChartData;\r\n\r\n // overlay de la simulación\r\n self.wrap.simulateTrackEnd();\r\n\r\n self.wrap.clear();\r\n\r\n // eliminamos la selección en la lista de tracks\r\n self.track.trackList.querySelectorAll('li').forEach(function (li) {\r\n li.classList.remove(Consts.classes.CHECKED);\r\n });\r\n\r\n self.map.trigger(self.const.event.CLEARTRACK);\r\n\r\n self.featuresToShare = [];\r\n\r\n if (!self.loadingState) {\r\n delete self.toShare;\r\n }\r\n\r\n //Control.prototype.deactivate.call(self);\r\n\r\n } else {\r\n self.geotrackingLayer.clearFeatures();\r\n self.gpsLayer.clearFeatures();\r\n }\r\n }\r\n\r\n #onLayerError() {\r\n const self = this;\r\n self.map.off(Consts.event.LAYERERROR, self.#onLayerError);\r\n self.clearFileInput(self.track.trackImportFile);\r\n\r\n TC.alert(self.getLocaleString(\"geo.trk.upload.error3\"));\r\n };\r\n\r\n\r\n loadFile(file) {\r\n const self = this;\r\n if (!self._cleaning) { // Valido que el evento import no lo provoco yo al limpiar el fileinput (al limpiar se lanza el change)\r\n self.clear(self.const.layer.TRACK);\r\n\r\n if (self.map) {\r\n self.map.on(Consts.event.LAYERERROR, self.#onLayerError);\r\n self.map.wrap.loadFiles([file], { control: self });\r\n }\r\n }\r\n return self;\r\n }\r\n\r\n async saveTrack(options) {\r\n const self = this;\r\n let message = options.message || self.getLocaleString(\"geo.trk.save.alert\");\r\n\r\n const save = async function (layer) {\r\n let wait;\r\n wait = self.getLoadingIndicator().addWait();\r\n\r\n let trackName = options.importedFileName || self.track.trackName.value.trim();\r\n\r\n let tracks = await self.getAvailableTracks();\r\n\r\n let formatted = self.wrap.formattedToStorage(layer, true, options.notReproject);\r\n\r\n let clean = function (wait) {\r\n self.track.trackName.value = '';\r\n self.track.trackName.disabled = true;\r\n self.track.trackSave.disabled = true;\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n self.getLoadingIndicator().removeWait(wait);\r\n\r\n self.#updateGeotrackingToolsState();\r\n };\r\n\r\n let mustAdd = false;\r\n let newTrack;\r\n if (options.uid) {\r\n newTrack = tracks.find(t => t.uid == options.uid);\r\n }\r\n else if (options.fileHandle) {\r\n for (var i = 0, ii = tracks.length; i < ii; i++) {\r\n const sameEntry = await options.fileHandle.isSameEntry(tracks[i].fileHandle);\r\n if (sameEntry) {\r\n newTrack = tracks[i];\r\n break;\r\n }\r\n }\r\n }\r\n if (!newTrack) {\r\n mustAdd = true;\r\n newTrack = {\r\n name: trackName,\r\n layout: formatted.layout,\r\n crs: self.storageCrs\r\n };\r\n }\r\n newTrack.data = formatted.features;\r\n\r\n if (options.fileHandle) {\r\n newTrack.fileHandle = options.fileHandle;\r\n }\r\n\r\n const getHashToCompare = function (trackObject) {\r\n // reemplazamos los ids contenidos en la geomtría que provocan falsos negativos.\r\n let toGetHash = JSON.parse(JSON.stringify(trackObject));\r\n const regex = /(\\\"id\\\"\\s?\\:\\s?\\\"[a-z0-9]+\\\")/gi;\r\n toGetHash.data = toGetHash.data.replace(regex, '\"\"');\r\n\r\n return md5(JSON.stringify(toGetHash));\r\n };\r\n\r\n const jsonFormat = new ol.format.GeoJSON();\r\n\r\n const serializeFeatures = function (features) {\r\n // Aplicamos una precisión un dígito mayor que la del mapa, si no, al compartir algunas parcelas se deforman demasiado\r\n let precision = Math.pow(10, Consts.DEGREE_PRECISION + 1);\r\n\r\n features.forEach(function (feature) {\r\n let geom = Util.explodeGeometry(Util.compactGeometry(feature.getGeometry().getCoordinates(), precision));\r\n feature.getGeometry().setCoordinates(geom);\r\n });\r\n\r\n return jsonFormat.writeFeatures(features);\r\n };\r\n\r\n let hash = getHashToCompare(newTrack);\r\n\r\n let sameTrackUID;\r\n if (mustAdd) {\r\n // Guardamos un track si no existe ya\r\n sameTrackUID = tracks.map(function (savedTrack) {\r\n let clonedTrack = JSON.parse(JSON.stringify(savedTrack));\r\n delete clonedTrack.uid;\r\n delete clonedTrack.profile;\r\n\r\n if (hash === getHashToCompare(clonedTrack)) {\r\n return savedTrack.uid;\r\n } else {\r\n // validamos si se trata de un track exportado/importado ya que se compacta la geometría\r\n clonedTrack.data = serializeFeatures(jsonFormat.readFeatures(clonedTrack.data));\r\n if (hash === md5(JSON.stringify(clonedTrack))) {\r\n return savedTrack.uid;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n }).find(function (uid) {\r\n return uid !== null;\r\n });\r\n }\r\n\r\n const getTrackIndex = async function (uid) {\r\n await self.getStoredTracks();\r\n await self.#bindTracks();\r\n\r\n let index;\r\n for (var i = 0; i < self.availableTracks.length; i++) {\r\n if (self.availableTracks[i].uid === uid) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n return index;\r\n };\r\n\r\n if (!sameTrackUID) {\r\n if (mustAdd) {\r\n newTrack.uid = options.uid || (Date.now() + Math.random());\r\n tracks.push(newTrack);\r\n }\r\n tracks = orderTracks(tracks);\r\n\r\n try {\r\n await self.setStoredTracks(tracks);\r\n self.map.toast(message, { duration: 3000 });\r\n\r\n clean(wait);\r\n\r\n const index = await getTrackIndex(newTrack.uid);\r\n return index;\r\n }\r\n catch (error) {\r\n TC.alert(self.getLocaleString(\"geo.error.savelocalstorage\") + ': ' + error.message);\r\n clean(wait);\r\n throw error;\r\n }\r\n } else {\r\n console.log('Ya existe un track con ese mismo hash');\r\n\r\n clean(wait);\r\n\r\n const index = await getTrackIndex(sameTrackUID);\r\n return index;\r\n }\r\n };\r\n\r\n if (self.importedFileName || options.uid) {\r\n return await save(self.trackLayer);\r\n }\r\n if (self.track.trackName.value.trim().length === 0) {\r\n self.track.trackName.value = new Date().toLocaleString();\r\n return await save(self.geotrackingLayer);\r\n }\r\n return await save(self.geotrackingLayer);\r\n }\r\n\r\n addWaypoint() {\r\n const self = this;\r\n\r\n let waypointName = self.track.trackWPT.value.trim();\r\n if (!waypointName) {\r\n waypointName = new Date().toLocaleString();\r\n }\r\n\r\n const wait = self.getLoadingIndicator().addWait();\r\n\r\n self.#updateGeotrackingToolsState();\r\n\r\n self.wrap.addWaypoint(self.currentPoint.position, {\r\n name: waypointName,\r\n ele: self.currentPoint.heading,\r\n time: new Date().getTime() // GLS: lo quito ya que hemos actualizado la función que gestiona la fechas para la exportación a GPX - espera la fecha en segundos -> / 1000 // para la exportación a GPX - espera la fecha en segundos\r\n });\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n // cada vez que se añade un waypoint almacenamos en sessionStorage\r\n Util.storage.setSessionLocalValue(self.const.localStorageKey.GEOTRACKINGTEMP, self.wrap.formattedToStorage(self.geotrackingLayer).features);\r\n\r\n self.getLoadingIndicator().removeWait(wait);\r\n }\r\n\r\n async editTrackName(trackId, newName) {\r\n const self = this;\r\n\r\n const tracks = await self.getAvailableTracks();\r\n if (tracks) {\r\n const track = tracks.find(t => t.uid == trackId);\r\n if (track) {\r\n track.name = newName;\r\n await self.setStoredTracks(tracks);\r\n }\r\n }\r\n }\r\n\r\n removeTrack = function (li, options) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n var dataId = li.dataset.id;\r\n if (tracks[dataId]) {\r\n var uid = tracks[dataId].uid;\r\n\r\n const okFn = function () {\r\n\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n if (selectedTrackItem && selectedTrackItem.dataset.id === dataId) {\r\n self.clear(self.const.layer.TRACK);\r\n }\r\n\r\n localforage.removeItem(self.const.localStorageKey.GEOTRACKING + '#' + uid).then(function () {\r\n self.getStoredTracks().then(function () {\r\n self.#bindTracks().then(() => resolve(true));\r\n });\r\n }).catch(function (err) {\r\n console.warn(err);\r\n resolve(false);\r\n });\r\n\r\n };\r\n\r\n if (options?.silent) {\r\n okFn();\r\n }\r\n else {\r\n TC.confirm(self.getLocaleString(\"geo.trk.delete.alert\"), okFn, () => resolve(false));\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n removeAllTracks = function (button) {\r\n const self = this;\r\n TC.confirm(self.getLocaleString('geo.trk.delete.all.alert'), function () {\r\n self.div.querySelectorAll(`.${self.CLASS}-track-available-lst li[data-id]`).forEach(function (li) {\r\n self.removeTrack(li, { silent: true });\r\n button.disabled = true;\r\n }) \r\n });\r\n };\r\n\r\n setSelectedTrack = function (li) {\r\n const self = this;\r\n\r\n if (!self.isActive) {\r\n self.activate();\r\n }\r\n\r\n self.track.trackList.querySelectorAll('li').forEach(function (li) {\r\n li.classList.remove(Consts.classes.CHECKED);\r\n li.querySelector(self.const.selector.ACTIVATOR)?.removeAttribute('title');\r\n });\r\n\r\n li.classList.add(Consts.classes.CHECKED);\r\n\r\n const btn = li.querySelector(self.const.selector.ACTIVATOR);\r\n\r\n const transitionEvent = function (_event) {\r\n li.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n li.removeEventListener(\"transitionend\", transitionEvent, false);\r\n };\r\n li.addEventListener(\"transitionend\", transitionEvent, false);\r\n\r\n li.setAttribute('title', self.getLocaleString(\"tr.lst.clear\") + \" \" + btn.text);\r\n btn.setAttribute('title', li.getAttribute('title'));\r\n\r\n if (!self.loadingState) {\r\n delete self.toShare;\r\n }\r\n }\r\n\r\n getSelectedTrackItem = function () {\r\n const self = this;\r\n return self.track.trackList.querySelector('li.' + Consts.classes.CHECKED);\r\n }\r\n\r\n clearSelectedTrack() {\r\n const self = this;\r\n\r\n const selected = self.getSelectedTrackItem();\r\n if (selected) {\r\n\r\n if (self.#onResize) {\r\n window.removeEventListener('resize', self.#onResize, false);\r\n self.#onResize = undefined;\r\n }\r\n\r\n selected.classList.remove(Consts.classes.CHECKED);\r\n selected.setAttribute('title', selected.textContent);\r\n selected.querySelector(self.const.selector.ACTIVATOR).removeAttribute('title');\r\n\r\n delete self.toShare;\r\n }\r\n }\r\n\r\n clearSelection() {\r\n\r\n self.wrap.deactivateSnapping();\r\n var selected = self.getSelectedTrackItem();\r\n if (selected) {\r\n self.clearSelectedTrack();\r\n }\r\n if (self.resultsPanelChart) {\r\n\r\n self.resultsPanelChart.div.removeEventListener('mouseover', self.resultsPanelChart.deactivateSnapping);\r\n self.resultsPanelChart.div.removeEventListener('mouseout', self.resultsPanelChart.activateSnapping);\r\n\r\n self.resultsPanelChart.close();\r\n }\r\n\r\n self.clear(self.const.layer.TRACK);\r\n }\r\n\r\n async drawTrackData(li) {\r\n const self = this;\r\n\r\n self.wrap.clear();\r\n\r\n const track = await self.getTrackData(li);\r\n if (track && track.data) {\r\n await self.wrap.drawTrackData(track);\r\n self.updateEndMarkers();\r\n if (track.fileHandle) {\r\n self.trackLayer._fileHandle = track.fileHandle;\r\n }\r\n self.trackLayer.setVisibility(true);\r\n }\r\n }\r\n\r\n async getTrackData(li) {\r\n const self = this;\r\n const tracks = await self.getAvailableTracks();\r\n if (tracks) {\r\n const dataId = li.dataset.id;\r\n const track = tracks[dataId];\r\n if (track) {\r\n let trackData = track.data;\r\n // GLS: tengo que transformar de 4326 al crs del mapa en el momento de pintar, porque si lo hacemos al cargar la lista\r\n // y después hay cambio de crs, en el momento de pintar no sé desde qué crs debo tranformar\r\n trackData = self.wrap.formattedFromStorage(trackData);\r\n return {\r\n data: trackData,\r\n layout: track.layout,\r\n fileHandle: track.fileHandle\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async updateEndMarkers() {\r\n const self = this;\r\n var showFeatures = self.trackLayer.features;\r\n if (showFeatures && showFeatures.length > 0) {\r\n\r\n showFeatures.forEach(f => {\r\n f.showsPopup = (f instanceof Point);\r\n });\r\n const lineFeature = showFeatures.find(function (feature) {\r\n if (isAnyLine(feature)) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (lineFeature) {\r\n let coordinates;\r\n if (isMultiPolyline(lineFeature)) {\r\n coordinates = lineFeature.geometry.flat();\r\n } else {\r\n coordinates = lineFeature.geometry;\r\n }\r\n\r\n const first = coordinates[0];\r\n const last = coordinates[coordinates.length - 1];\r\n\r\n if (first && first !== last) {\r\n const markerCoords = first.slice().splice(0, 2);\r\n if (self.#startMarker) {\r\n self.#startMarker.setCoordinates(markerCoords);\r\n }\r\n else {\r\n self.#startMarker = await self.endPointLayer.addMarker(markerCoords, {\r\n showsPopup: false,\r\n width: 32,\r\n height: 32,\r\n cssClass: self.CLASS + '-track-marker-icon-end',\r\n anchor: [0.5, 1],\r\n noExport: true\r\n });\r\n }\r\n }\r\n\r\n if (last) {\r\n const markerCoords = last.slice().splice(0, 2);\r\n if (self.#finishMarker) {\r\n self.#finishMarker.setCoordinates(markerCoords);\r\n }\r\n else {\r\n self.#finishMarker = await self.endPointLayer.addMarker(markerCoords, {\r\n showsPopup: false,\r\n width: 32,\r\n height: 32,\r\n cssClass: self.CLASS + '-track-marker-icon',\r\n anchor: [0.5, 1],\r\n noExport: true\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n if (self.#startMarker) {\r\n self.endPointLayer.removeFeature(self.#startMarker);\r\n self.#startMarker = null;\r\n }\r\n if (self.#finishMarker) {\r\n self.endPointLayer.removeFeature(self.#finishMarker);\r\n self.#finishMarker = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n export(li) {\r\n const self = this;\r\n return self.wrap.export(li);\r\n }\r\n\r\n clearFileInput(fileInput) {\r\n const form = document.createElement('form');\r\n const parent = fileInput.parentElement;\r\n parent.insertBefore(form, fileInput);\r\n form.appendChild(fileInput);\r\n form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', fileInput);\r\n parent.removeChild(form);\r\n }\r\n\r\n getLoadingIndicator() {\r\n const self = this;\r\n\r\n if (!self.loading) {\r\n self.loading = self.map.getControlsByClass(LoadingIndicator);\r\n if (self.loading && self.loading.length > 0)\r\n self.loading = self.loading[0];\r\n }\r\n\r\n return self.loading;\r\n }\r\n\r\n onGeolocateError(error) {\r\n const self = this;\r\n\r\n if (navigator.geolocation) {\r\n if (self.currentPosition)\r\n navigator.geolocation.clearWatch(self.currentPosition);\r\n if (self.currentPositionTrk) {\r\n self.currentPositionTrk = self.currentPositionTrk instanceof Array ? self.currentPositionTrk : [self.currentPositionTrk];\r\n\r\n self.currentPositionTrk.forEach(function (watch) {\r\n navigator.geolocation.clearWatch(watch);\r\n });\r\n\r\n self.currentPositionTrk = [];\r\n }\r\n }\r\n\r\n if (self.currentPositionWaiting)\r\n self.getLoadingIndicator().removeWait(self.currentPositionWaiting);\r\n\r\n var errorMsg;\r\n switch (error.code) {\r\n case error.PERMISSION_DENIED:\r\n errorMsg = self.getLocaleString(\"geo.error.permission_denied\");\r\n break;\r\n case error.POSITION_UNAVAILABLE:\r\n errorMsg = self.getLocaleString(\"geo.error.position_unavailable\");\r\n break;\r\n case error.TIMEOUT:\r\n errorMsg = self.getLocaleString(\"geo.error.timeout\");\r\n break;\r\n default:\r\n errorMsg = self.getLocaleString(\"geo.error.default\");\r\n break;\r\n }\r\n\r\n self.map.toast(errorMsg, { type: Consts.msgType.WARNING });\r\n\r\n if (!self.geotrackingPosition && self.track) {\r\n self.track.activateButton.classList.remove(Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n\r\n if (self.trackLayer && self.track || self.toShare) {\r\n let state = {\r\n id: self.id\r\n };\r\n if (!self.toShare || self.toShare && !self.toShare.doZoom) { // caso compartir general \r\n self.toShare = { doZoom: false };\r\n let clonedToShare = Object.assign({}, self.toShare);\r\n let features = self.trackLayer.features;\r\n\r\n if (features.length > 0 && self.featuresToShare && self.featuresToShare.length > 0) {\r\n clonedToShare.features = self.featuresToShare;\r\n } else {\r\n const layerState = self.trackLayer.exportState({\r\n features: features\r\n });\r\n\r\n clonedToShare.features = layerState.features;\r\n }\r\n\r\n const selectedTrackItem = self.getSelectedTrackItem();\r\n if (selectedTrackItem) {\r\n clonedToShare.trackName = selectedTrackItem.querySelector(self.const.selector.ACTIVATOR).text;\r\n }\r\n state.trackResult = JSON.stringify(clonedToShare);\r\n } else { // compartir desde lista de rutas \r\n state.trackResult = JSON.stringify(self.toShare);\r\n }\r\n\r\n return state;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n importState(state) {\r\n const self = this;\r\n if (self.map) {\r\n if (state.trackResult && state.trackResult.length) {\r\n self.enable();\r\n let sharedTrackResult = JSON.parse(state.trackResult);\r\n\r\n if (sharedTrackResult.features && sharedTrackResult.features.length > 0) {\r\n const promises = new Array(sharedTrackResult.features.length);\r\n sharedTrackResult.features.forEach(function (f, idx) {\r\n const featureOptions = { data: f.data, id: f.id, showsPopup: f.showsPopup };\r\n var geom = f.geom; // El redondeo hace que ya no podamos validar con los tracks existentes.\r\n switch (f.type) {\r\n case Consts.geom.POLYLINE:\r\n promises[idx] = new Polyline(geom, featureOptions);\r\n break;\r\n case Consts.geom.MULTIPOLYLINE:\r\n promises[idx] = new MultiPolyline(geom, featureOptions);\r\n break;\r\n case Consts.geom.MARKER:\r\n promises[idx] = new Marker(geom, featureOptions);\r\n break;\r\n case Consts.geom.POINT:\r\n promises[idx] = new Point(geom, featureOptions);\r\n break;\r\n }\r\n });\r\n\r\n if (Object.prototype.hasOwnProperty.call(sharedTrackResult, \"doZoom\")) {\r\n self.loadingState = true;\r\n self.toShare = { doZoom: sharedTrackResult.doZoom };\r\n }\r\n\r\n Promise.all(promises).then(function (tcFeatures) {\r\n var options = { features: tcFeatures, fileName: sharedTrackResult.trackName, notReproject: true, isShared: true };\r\n if (!self.availableTracks) {\r\n self.getStoredTracks().then(function () {\r\n self.importTrack(options);\r\n });\r\n } else {\r\n self.importTrack(options);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nTC.mix(Geolocation, infoShare);\r\nTC.mix(Geolocation, itemToolContainer);\r\n\r\nTC.control.Geolocation = Geolocation;\r\nexport default Geolocation;","\r\n/**\r\n * Opciones de control de obtención de información de entidades de mapa por línea o por recinto.\r\n * @typedef GeometryFeatureInfoOptions\r\n * @extends FeatureInfoOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MultiFeatureInfoModeOptions\r\n * @property {PolylineStyleOptions|PolygonStyleOptions} [filterStyle] - Estilo de la entidad cuya geometría servirá de filtro espacial para la consulta.\r\n * @property {boolean} [persistentHighlights] - Cuando el control muestra los resultados de la consulta muestra también resaltadas sobre el mapa las geometrías\r\n * de las entidades geográficas de la respuesta. Si este valor es verdadero, dichas geometrías se quedan resaltadas en el mapa indefinidamente. \r\n * En caso contrario, las geometrías resaltadas se borran en el momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n */\r\n\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\nimport filter from '../filter';\r\n\r\nTC.control = TC.control || {};\r\nTC.filter = filter;\r\n\r\nclass GeometryFeatureInfo extends FeatureInfoCommons {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.wrap = new TC.wrap.control.GeometryFeatureInfo(self);\r\n self._isDrawing = false;\r\n self._isSearching = false;\r\n self._drawToken = false;\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n\r\n self.on(Consts.event.CONTROLDEACTIVATE, function (_e) {\r\n self.wrap.cancelDraw();\r\n });\r\n\r\n return await result;\r\n }\r\n\r\n callback(coords, _xy) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self._drawToken) {\r\n resolve();\r\n return;\r\n }\r\n self.closeResults();\r\n if (self.filterFeature) {\r\n self.filterLayer.removeFeature(self.filterFeature);\r\n self.filterFeature = null;\r\n }\r\n self.highlightedFeature = null;\r\n var visibleLayers = false;\r\n for (var i = 0; i < self.map.workLayers.length; i++) {\r\n var layer = self.map.workLayers[i];\r\n if (layer.type === Consts.layerType.WMS) {\r\n if (layer.getVisibility() && layer.names.length > 0) {\r\n visibleLayers = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (visibleLayers) {\r\n self.closeResults();\r\n self.wrap.beginDraw({\r\n geometryType: self.geometryType,\r\n xy: coords,\r\n layer: self.filterLayer,\r\n callback: function (feature) {\r\n self.wrap.getFeaturesByGeometry(feature).then(resolve);\r\n }\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n sendRequest(filter) {\r\n return this.wrap.getFeaturesByGeometry(filter);\r\n }\r\n\r\n responseCallback(options) {\r\n const self = this;\r\n\r\n super.responseCallback.call(self, options);\r\n\r\n if (self.filterFeature) {\r\n var services = options.services;\r\n\r\n // Eliminamos capas sin resultados a no ser que tenga un error\r\n for (var i = 0; i < services.length; i++) {\r\n var service = services[i];\r\n if (service.hasLimits) {\r\n delete service.layers;\r\n //service.hasLimits = service.hasLimits;\r\n }\r\n else {\r\n for (var j = 0; j < service.layers.length; j++) {\r\n if (!service.layers[j].features.length) {\r\n service.layers.splice(j, 1);\r\n j = j - 1;\r\n }\r\n }\r\n if (!service.layers.length) {\r\n services.splice(i, 1);\r\n i = i - 1;\r\n }\r\n }\r\n\r\n }\r\n self.renderData(options, function () {\r\n if (services.length) {\r\n self.insertLinks();\r\n }\r\n self.div.querySelector(`.${self.CLASS}-coords`).classList.add(Consts.classes.HIDDEN);\r\n if (!self.info || !self.info.services.length) {\r\n self.map.toast(self.getLocaleString('query.msgNoResults'), { type: Consts.msgType.INFO });\r\n return;\r\n }\r\n self.displayResults();\r\n });\r\n }\r\n }\r\n}\r\n\r\nTC.control.GeometryFeatureInfo = GeometryFeatureInfo;\r\nexport default GeometryFeatureInfo;","import WebComponentControl from './WebComponentControl';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\nimport TC from '../../TC';\r\n\r\nconst optionElementName = 'sitna-language-option';\r\n\r\nclass LanguageOption extends HTMLElement {\r\n #link;\r\n\r\n constructor(options) {\r\n super();\r\n\r\n const self = this;\r\n self.CLASS = 'tc-ctl-lang-link';\r\n self.#link = self.querySelector(`a.${self.CLASS}`);\r\n if (!self.#link) {\r\n self.#link = document.createElement('a');\r\n self.#link.classList.add(self.CLASS);\r\n self.appendChild(self.#link);\r\n }\r\n\r\n if (options) {\r\n self.fullCode = options.fullCode;\r\n self.shortCode = options.shortCode;\r\n self.description = options.description;\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.fullCode = self.fullCode;\r\n self.shortCode = self.shortCode;\r\n self.description = self.description;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['full-code', 'short-code', 'description', 'href'];\r\n }\r\n\r\n get fullCode() {\r\n return this.getAttribute('full-code');\r\n }\r\n\r\n set fullCode(value) {\r\n const self = this;\r\n self.setAttribute('full-code', value);\r\n }\r\n\r\n get shortCode() {\r\n return this.getAttribute('short-code');\r\n }\r\n\r\n set shortCode(value) {\r\n const self = this;\r\n self.setAttribute('short-code', value);\r\n self.#link.dataset.langCode = value;\r\n let parent = self;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n while (parent && !(parent instanceof LanguageSelector));\r\n self.#link.href = parent?.getUrl(value);\r\n self.#link.innerHTML = value;\r\n }\r\n\r\n get description() {\r\n return this.getAttribute('description');\r\n }\r\n\r\n set description(value) {\r\n const self = this;\r\n self.setAttribute('description', value);\r\n self.#link.setAttribute('title', value);\r\n }\r\n\r\n get href() {\r\n return this.#link.getAttribute('href');\r\n }\r\n\r\n set href(value) {\r\n this.#link.setAttribute('href', value);\r\n }\r\n}\r\n\r\ncustomElements.get(optionElementName) || customElements.define(optionElementName, LanguageOption);\r\n\r\nconst controlElementName = 'sitna-language-select'\r\n\r\nclass LanguageSelector extends WebComponentControl {\r\n static PARAMETER_NAME = \"lang\";\r\n static COOKIE_NAME = 'SITNA.language';\r\n static #currentLocale;\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n\r\n self.languages = [];\r\n if (self.options.static) {\r\n self.static = true;\r\n }\r\n self.tagAttributeName = self.options.tagAttributeName || 'data-sitna-i18n';\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n super.connectedCallback();\r\n self.languages = Array.from(self.querySelectorAll('sitna-language-option'));\r\n\r\n if (!self.languages.length) {\r\n const languageOptions = self.options.languages || [\r\n {\r\n fullCode: 'es-ES',\r\n shortCode: 'es',\r\n description: 'Ver en castellano'\r\n },\r\n {\r\n fullCode: 'eu-ES',\r\n shortCode: 'eu',\r\n description: 'Euskaraz ikusi'\r\n },\r\n {\r\n fullCode: 'en-US',\r\n shortCode: 'en',\r\n description: 'View in English'\r\n }\r\n ];\r\n self.languages = languageOptions.map(languageOptions => new LanguageOption(languageOptions));\r\n self.render();\r\n }\r\n self.static = self.static;\r\n if (!self.static) {\r\n self.collapsed = self.collapsed || true;\r\n }\r\n const languages = Array.from(self.querySelectorAll('sitna-language-option'));\r\n if (languages.length) {\r\n self.languages = languages;\r\n }\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['static', 'collapsed'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'static') {\r\n self.static = self.hasAttribute(name);\r\n }\r\n if (name === 'collapsed') {\r\n self.collapsed = self.hasAttribute(name);\r\n }\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-lang-select';\r\n }\r\n\r\n get static() {\r\n return this.hasAttribute('static');\r\n }\r\n\r\n set static(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('static', '');\r\n }\r\n else {\r\n self.removeAttribute('static');\r\n }\r\n }\r\n\r\n get collapsed() {\r\n return this.hasAttribute('collapsed');\r\n }\r\n\r\n set collapsed(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('collapsed', '');\r\n }\r\n else {\r\n self.removeAttribute('collapsed');\r\n }\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n map.ready(() => LanguageSelector.setDocumentTexts());\r\n return result;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-lang-select.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData({ languages: self.languages }, function () {\r\n const linkContainer = self.querySelector(`.${self.CLASS}-links`);\r\n let activeLink;\r\n self.languages.forEach(language => {\r\n linkContainer.appendChild(language);\r\n const link = language.querySelector(`a.${language.CLASS}`);\r\n link.addEventListener(Consts.event.CLICK, function (e) {\r\n e.preventDefault();\r\n self.setLanguage(e.target.dataset.langCode);\r\n });\r\n if (LanguageSelector.currentLocale === language.fullCode) {\r\n activeLink = link;\r\n }\r\n });\r\n activeLink ??= self.languages[0]?.querySelector(`a.${language.CLASS}`);\r\n activeLink?.classList.add(Consts.classes.ACTIVE);\r\n self.toggle = self.querySelector(`.${self.CLASS}-toggle`);\r\n\r\n self.toggle.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.collapsed = !self.collapsed;\r\n });\r\n\r\n resolve(self);\r\n });\r\n }));\r\n }\r\n\r\n getUrl(code) {\r\n return Util.addURLParameters(window.location.href, {\r\n [LanguageSelector.PARAMETER_NAME]: code\r\n });\r\n }\r\n\r\n setLanguage(code) {\r\n const self = this;\r\n const links = self.languages.map(language => language.querySelector(`a.${language.CLASS}`));\r\n links.forEach(link => link.classList.remove(Consts.classes.ACTIVE));\r\n links.find(link => link.dataset.langCode === code)?.classList.add(Consts.classes.ACTIVE);\r\n window.location.href = self.getUrl(code);\r\n }\r\n\r\n static setDocumentTexts() {\r\n document.querySelectorAll(`[${self.tagAttributeName}]`).forEach(function (elm) {\r\n let html = elm.innerHTML;\r\n const braces = html.match(/\\{\\{([^\\{\\}]+)\\}\\}/g);\r\n if (braces) {\r\n for (var i = 0, len = braces.length; i < len; i++) {\r\n const b = braces[i];\r\n const key = b.match(/[^\\{\\}]+/)[0];\r\n html = html.replace(b, Util.getLocaleString(LanguageSelector.currentLocale, key));\r\n }\r\n }\r\n if (elm.innerHTML !== html) {\r\n elm.innerHTML = html;\r\n }\r\n });\r\n }\r\n\r\n static get currentLocale() {\r\n if (!LanguageSelector.#currentLocale) {\r\n LanguageSelector.#currentLocale = Util.getLocaleUserChoice({\r\n cookieName: LanguageSelector.COOKIE_NAME,\r\n paramName: LanguageSelector.PARAMETER_NAME\r\n });\r\n }\r\n return LanguageSelector.#currentLocale;\r\n }\r\n}\r\n\r\nLanguageSelector.currentLocale;\r\n\r\nTC.control = TC.control || {};\r\nTC.control.LanguageSelector = LanguageSelector;\r\ncustomElements.get(controlElementName) || customElements.define(controlElementName, LanguageSelector);\r\nexport default LanguageSelector;\r\n","\r\n/**\r\n * Opciones de control de catálogo de capas disponibles. \r\n * \r\n * Con este control se dispone de las siguientes funcionalidades:\r\n *\r\n * - Consultar las capas disponibles en uno o varios WMS.\r\n * - Buscar capas mediante texto libre. Se busca el texto en los títulos y los resúmenes descriptivos de cada capa, que se publican en el [documento de capacidades](https://github.com/7o9/implementer-friendly-standards/blob/master/introduction.rst#getcapabilities) del servicio.\r\n * - Añadir capas al mapa como capas de trabajo.\r\n * @typedef LayerCatalogOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [enableSearch] - Propiedad que establece si se puede buscar capas por texto. La búsqueda del texto se realiza en los títulos \r\n * y los resúmenes descriptivos de cada capa, que se publican en el [documento de capacidades](https://github.com/7o9/implementer-friendly-standards/blob/master/introduction.rst#getcapabilities) del servicio.\r\n * @property {LayerOptions[]} layers - Lista de objetos de definición de las con capas de servicios WMS que queremos añadir al catálogo.\r\n * \r\n * En estos objetos, si se asigna un valor a la propiedad `layerNames`, solo las capas especificadas y sus hijas estarán disponibles para ser añadidas al mapa. \r\n * Sin embargo, si esta propiedad se deja sin asignar, todas las capas publicadas en el servicio WMS estarán disponibles para ser añadidas.\r\n * @example [Ver en vivo](../examples/cfg.MapControlOptions.layerCatalog_workLayerManager.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport ProjectionSelector from './ProjectionSelector';\r\nimport Layer from '../../SITNA/layer/Layer';\r\nimport Raster from '../../SITNA/layer/Raster';\r\nimport autocomplete from '../ui/autocomplete';\r\n\r\nTC.control = TC.control || {};\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\n\r\nconst LayerCatalog = function () {\r\n var self = this;\r\n\r\n self.layers = [];\r\n self.searchInit = false;\r\n\r\n ProjectionSelector.apply(self, arguments);\r\n\r\n self._selectors = {\r\n LAYER_ROOT: 'div.' + self.CLASS + '-tree > ul.' + self.CLASS + '-branch > li.' + self.CLASS + '-node'\r\n };\r\n\r\n if (!Consts.classes.SELECTABLE) {\r\n Consts.classes.SELECTABLE = 'tc-selectable';\r\n }\r\n if (!Consts.classes.INCOMPATIBLE) {\r\n Consts.classes.INCOMPATIBLE = 'tc-incompatible';\r\n }\r\n if (!Consts.classes.ACTIVE) {\r\n Consts.classes.ACTIVE = 'tc-active';\r\n }\r\n};\r\n\r\nTC.inherit(LayerCatalog, ProjectionSelector);\r\n\r\n(function () {\r\n\r\n var ctlProto = LayerCatalog.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-lcat';\r\n\r\n const showProjectionChangeDialog = function (ctl, layer) {\r\n ctl.showProjectionChangeDialog({\r\n layer: layer,\r\n closeCallback: function () {\r\n ctl.getLayerNodes(ctl._layerToAdd).forEach(function (node) {\r\n node.classList.remove(Consts.classes.LOADING);\r\n node.querySelector('span').dataset.tooltip = ctl.getLocaleString('clickToAddToMap');\r\n });\r\n }\r\n });\r\n };\r\n\r\n var SEARCH_MIN_LENGTH = 3;\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n await ProjectionSelector.prototype.register.call(self, map);\r\n\r\n const load = function (resolve, _reject) {\r\n if (Array.isArray(self.options.layers)) {\r\n for (var i = 0; i < self.options.layers.length; i++) {\r\n var layer = self.options.layers[i];\r\n if (!layer.type || layer.type === Consts.layerType.WMS) {\r\n if (!layer.id) {\r\n layer.id = TC.getUID();\r\n } \r\n if (TC.Util.isPlainObject(layer)) {\r\n layer = new Raster(layer);\r\n } \r\n self.layers.push(layer);\r\n }\r\n }\r\n self.render(function () {\r\n resolve();\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n };\r\n\r\n self._readyPromise = new Promise(function (resolve, reject) {\r\n const waitLoad = function (e) {\r\n if (e.layer === map.baseLayer) {\r\n load(resolve, reject);\r\n map.off(Consts.event.LAYERUPDATE, waitLoad);\r\n }\r\n };\r\n\r\n map.loaded(function () {\r\n if (!map.baseLayer.state || map.baseLayer.state === Layer.state.IDLE) {\r\n load(resolve, reject);\r\n }\r\n else {\r\n map.on(Consts.event.LAYERUPDATE, waitLoad);\r\n }\r\n });\r\n });\r\n\r\n const findResultNodes = function (layer) {\r\n const result = [];\r\n if (!layer.isBase) {\r\n var url = layer.options.url;\r\n if (self.list) {\r\n self.list.querySelectorAll('li').forEach(function (li) {\r\n const lyr = self.getLayer(li.dataset.layerId);\r\n if (lyr && lyr.type === layer.type && lyr.options.url === url) {\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (li.dataset.layerName === layer.names[i]) {\r\n result.push(li);\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * Marca todas las capas del TOC como añadidas excepto la que se está borrando que se recibe como parámetro.\r\n */\r\n const _markWorkLayersAsAdded = function (layerRemoved) {\r\n var wlCtrl = self.map.getControlsByClass(TC.control.WorkLayerManager)[0];\r\n if (wlCtrl) {\r\n var layers = wlCtrl.layers;\r\n\r\n for (var i = 0; i < layers.length; i++) {\r\n var layer = layers[i];\r\n\r\n if (layer !== layerRemoved) {\r\n self.getLayerNodes(layer).forEach(function (node) {\r\n node.classList.add(Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var clickToAddText = self.getLocaleString('clickToAddToMap');\r\n\r\n map\r\n .on(Consts.event.BEFORELAYERADD + ' ' + Consts.event.BEFOREUPDATEPARAMS, function (e) {\r\n self.getLayerNodes(e.layer).forEach(function (node) {\r\n node.classList.add(Consts.classes.LOADING);\r\n delete node.querySelector('span').dataset.tooltip;\r\n });\r\n })\r\n .on(Consts.event.LAYERADD + ' ' + Consts.event.UPDATEPARAMS, function (e) {\r\n const layer = e.layer;\r\n if (!layer.isBase && layer.type === Consts.layerType.WMS) {\r\n self.loaded().then(function () { // Esperamos a que cargue primero las capas de la configuración\r\n\r\n if (self.getLayerRootNode(layer)) {\r\n updateControl.call(self, layer);\r\n }\r\n else {\r\n // la capa no está renderizada, pero podría estar en proceso, comprobamos que no está en la lista de capas del control\r\n var layerAlreadyAdded = false;\r\n for (var i = 0, len = self.layers.length; i < len; i++) {\r\n var lyr = self.layers[i];\r\n if (lyr.type === layer.type && lyr.options.url === layer.options.url) {\r\n layerAlreadyAdded = true;\r\n break;\r\n }\r\n }\r\n\r\n // 12/03/2019 GLS la capa forma parte de los servicios configurados pero el nodo aún no se ha cargado, la guardamos\r\n if (layerAlreadyAdded) {\r\n if (!self.layersToSetChecked) {\r\n self.layersToSetChecked = [];\r\n }\r\n\r\n self.layersToSetChecked.push(layer);\r\n } else {\r\n self.addLayer(new Raster({\r\n url: layer.options.url,\r\n type: layer.type,\r\n layerNames: [],\r\n title: layer.title || layer.wrap.getServiceTitle(),\r\n hideTitle: true,\r\n hideTree: false\r\n })).then(function () {\r\n updateControl.call(self, layer);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n })\r\n .on(Consts.event.LAYERERROR, function (e) {\r\n const reason = e.reason;\r\n if (self.layers.some(f => f === e.layer)) {\r\n if (reason) {\r\n TC.alert(self.getLocaleString(reason, { url: e.layer.url }));\r\n }\r\n self.getLayerNodes(e.layer).forEach(function (node) {\r\n node.classList.remove(Consts.classes.LOADING);\r\n });\r\n } \r\n })\r\n .on(Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n self.getLayerNodes(layer).forEach(function (node) {\r\n node.classList.remove(Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip = clickToAddText;\r\n });\r\n findResultNodes(layer).forEach(function (node) {\r\n node.classList.remove(Consts.classes.CHECKED);\r\n node.querySelector('h5').dataset.tooltip = clickToAddText;\r\n });\r\n\r\n //Marcamos como añadidas aquellas capas que estén en el control de capas cargadas. Esto previene que si borramos una capa padre, todas\r\n //sus hijas aparezcan como no añadidas, a pesar que que alguna de ellas haya sido añadida previamente de manera individual\r\n _markWorkLayersAsAdded(layer);\r\n\r\n //refresh del searchList \r\n _refreshResultList.call(self);\r\n })\r\n .on(Consts.event.EXTERNALSERVICEADDED, function (e) {\r\n if (e && e.layer) {\r\n self.addLayer(e.layer);\r\n self.div.classList.remove(Consts.classes.COLLAPSED);\r\n }\r\n })\r\n .on(Consts.event.PROJECTIONCHANGE, function (_e) {\r\n self.update();\r\n });\r\n\r\n return self;\r\n };\r\n\r\n const onCollapseButtonClick = function (e) {\r\n e.target.blur();\r\n e.stopPropagation();\r\n const li = e.target.parentElement;\r\n if (li.tagName === 'LI' && !li.classList.contains(ctlProto.CLASS + '-leaf')) {\r\n li.classList.toggle(Consts.classes.COLLAPSED);\r\n const ul = li.querySelector('ul');\r\n ul.classList.toggle(Consts.classes.COLLAPSED);\r\n }\r\n };\r\n\r\n const onSpanClick = function (e, ctl, getLayerObject) {\r\n const li = e.target.closest(\"li\");\r\n if (!li.classList.contains(Consts.classes.LOADING) && !li.classList.contains(Consts.classes.CHECKED)) {\r\n e.preventDefault;\r\n\r\n var layerName = li.dataset.layerName;\r\n layerName = layerName !== undefined ? layerName.toString() : '';\r\n var layer = getLayerObject.call(ctl,li); \r\n if (layer && layerName) {\r\n var redrawTime = 1;\r\n\r\n if (/iPad/i.test(navigator.userAgent))\r\n redrawTime = 10;\r\n else if (TC.Util.detectFirefox())\r\n redrawTime = 250;\r\n\r\n if (!layer.title) {\r\n layer.title = layer.getTree().title;\r\n }\r\n\r\n li.classList.add(Consts.classes.LOADING);\r\n li.querySelector('span,h5').dataset.tooltip = '';\r\n\r\n const reDraw = function (element) {\r\n return new Promise(function (resolve, _reject) {\r\n setTimeout(function () {\r\n element.setAttribute('offsetHeight', element.offsetHeight);\r\n element.setAttribute('offsetWidth', element.offsetWidth);\r\n\r\n resolve();\r\n }, redrawTime);\r\n });\r\n };\r\n\r\n reDraw(li).then(function () {\r\n ctl.addLayerToMap(layer, layerName);\r\n });\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n\r\n const createSearchAutocomplete = function () {\r\n const self = this;\r\n\r\n self.textInput = self.div.querySelector(\".\" + self.CLASS + \"-input\");\r\n self.list = self.div.querySelector(\".\" + self.CLASS + \"-search ul\");\r\n // Clear results list when x button is pressed in the search input\r\n self.textInput.addEventListener('mouseup', function (_e) {\r\n var oldValue = self.textInput.value;\r\n\r\n if (oldValue === '') {\r\n return;\r\n }\r\n\r\n // When this event is fired after clicking on the clear button\r\n // the value is not cleared yet. We have to wait for it.\r\n setTimeout(function () {\r\n var newValue = self.textInput.value;\r\n\r\n if (newValue === '') {\r\n self.list.innerHTML = '';\r\n }\r\n }, 1);\r\n });\r\n\r\n var layerCheckedList = [];\r\n //Definir el autocomplete del buscador de capas por texto\r\n TC._search = TC._search || {};\r\n TC._search.retryTimeout = null;\r\n\r\n TC.UI.autocomplete.call(self.textInput, {\r\n link: '#',\r\n target: self.list,\r\n minLength: 0,\r\n source: function (text, callback) {\r\n //lista de capas marcadas\r\n layerCheckedList = [];\r\n self._roots.forEach(function (root) {\r\n root.querySelectorAll(\"li.\" + Consts.classes.CHECKED).forEach(function (item) {\r\n layerCheckedList.push(item.dataset.layerName);\r\n });\r\n });\r\n\r\n //con texto vacío, limpiar y ocultar la lista de resultados\r\n text = text.trim();\r\n if (text.length < SEARCH_MIN_LENGTH) {\r\n self.list.innerHTML = '';\r\n }\r\n else if (text.length >= SEARCH_MIN_LENGTH) {\r\n if (TC._search.retryTimeout)\r\n clearTimeout(TC._search.retryTimeout);\r\n TC._search.retryTimeout = setTimeout(function () {\r\n var results = [];\r\n for (var i = 0, ii = self.sourceLayers.length; i < ii; i++) {\r\n const sourceLayer = self.sourceLayers[i];\r\n var _founds = sourceLayer.searchSubLayers(text);\r\n if (_founds.length) {\r\n results.push({\r\n service: {\r\n id: sourceLayer.id,\r\n title: sourceLayer.title || sourceLayer.id\r\n },\r\n founds: _founds\r\n });\r\n }\r\n }\r\n callback({ servicesFound: results, servicesLooked: self.sourceLayers.length });\r\n }, TC._search.interval);\r\n }\r\n },\r\n callback: function (e) {\r\n self.textInput.value = e.target.text || e.target.innerText;\r\n TC._search.lastPattern = self.textInput.value;\r\n self.goToResult(unescape(e.target.hash).substring(1));\r\n TC.UI.autocomplete.call(self.textInput, 'clear');\r\n },\r\n buildHTML: function (data) {\r\n var container = this.target;\r\n //si hay resultados, mostramos la lista\r\n if (data.results && data.results.servicesFound.length > 0) {\r\n var workLayers = self.map.getLayerTree().workLayers;\r\n for (var k = 0; k < data.results.servicesFound.length; k++) {\r\n var founds = data.results.servicesFound[k].founds;\r\n for (var j = 0; j < founds.length; j++) {\r\n delete founds[j].alreadyAdded;\r\n for (var i = 0; i < workLayers.length; i++) {\r\n //if (workLayers[i].title == data.results[j].Title ) {\r\n if (layerCheckedList.indexOf(founds[j].Name) >= 0) {\r\n founds[j].alreadyAdded = true;\r\n break;\r\n }\r\n }\r\n //Si la capa no tiene Name, no se puede añadir al TOC\r\n if (!founds[j].Name) {\r\n founds.splice(j, 1);\r\n j--;\r\n }\r\n }\r\n if (!data.results.servicesFound[k].founds.length) {\r\n data.results.servicesFound.splice(k, 1);\r\n continue;\r\n }\r\n //si estaba collapsado mantenemos el estado\r\n if (self.div.querySelectorAll(\".tc-ctl-lcat-search-group\")[k]) {\r\n data.results.servicesFound[k].service.isCollapsed = self.div.querySelectorAll(\".tc-ctl-lcat-search-group\")[k].classList.contains(Consts.classes.COLLAPSED);\r\n }\r\n }\r\n }\r\n var ret = '';\r\n self.getRenderedHtml(self.CLASS + '-results', data.results).then(function (out) {\r\n //URI: Expresión regular que busca la cadena de filtrado pero distinguiend si se trata de un titulo de capa es decier está entre\r\n //caracteres > y < y no se trada de un atributo data\r\n const cojoExpRegular = new RegExp('(?
[\\\\;|\\\\>][\\\\w\\\\s\\\\\\\\r\\\\\\\\n\\\\t\\\\(\\\\)\\\\.\\\\:\\\\\\\\(À-ÿ]*)(?' + TC.Util.patternFn(self.textInput.value) + ')(?[\\\\w\\\\s\\\\\\\\r\\\\n\\\\t\\\\(\\\\)\\\\.\\\\:\\\\\\\\À-ÿ)]*[\\\\<|\\\\&])', 'gi');\r\n                    container.innerHTML = ret = out.replace(cojoExpRegular,\"$
$$\");\r\n                    // Marcamos el botón \"i\" correspondiente si el panel de info está abierto\r\n                    const visibleInfoPane = self.div.querySelector(`.${self.CLASS}-info`);\r\n                    if (visibleInfoPane) {\r\n                        const serviceId = visibleInfoPane.dataset.serviceId;\r\n                        const layerName = visibleInfoPane.dataset.layerName;\r\n                        let selector = `li[data-layer-name=\"${layerName}\"] input[type=\"checkbox\"].${self.CLASS}-search-btn-info`;\r\n                        if (self.sourceLayers.length > 1) {\r\n                            selector = `li[data-service-id=\"${serviceId}\"] ${selector}`;\r\n                        }\r\n                        const infoCheckbox = container.querySelector(selector);\r\n                        if (infoCheckbox) {\r\n                            infoCheckbox.checked = true;\r\n                        }\r\n                    }\r\n                });\r\n                return ret;\r\n            }\r\n        });\r\n\r\n\r\n        if (!self.searchInit) {\r\n            //botón de la lupa para alternar entre búsqueda y árbol\r\n            self.div.querySelector('h2 button').addEventListener(Consts.event.CLICK, function (e) {\r\n                e.target.blur();\r\n                \r\n                const searchPane = self.div.querySelector('.' + self.CLASS + '-search');\r\n                const treePane = self.div.querySelector('.' + self.CLASS + '-tree');\r\n                const infoPane = self.div.querySelector('.' + self.CLASS + '-info');\r\n\r\n                const searchPaneMustShow = searchPane.classList.contains(Consts.classes.HIDDEN);\r\n                searchPane.classList.toggle(Consts.classes.HIDDEN, !searchPaneMustShow);\r\n                treePane.classList.toggle(Consts.classes.HIDDEN, searchPaneMustShow);\r\n                e.target.classList.toggle(self.CLASS + '-btn-tree', searchPaneMustShow);\r\n                e.target.classList.toggle(self.CLASS + '-btn-search', !searchPaneMustShow);\r\n                if (searchPaneMustShow) {\r\n                    self.textInput.focus();\r\n                    e.target.setAttribute('title', self.getLocaleString('viewAvailableLayersTree'));\r\n                }\r\n                else {\r\n                    e.target.setAttribute('title', self.getLocaleString('searchLayersByText'));\r\n\r\n                    //Si hay resaltados en el árbol, mostramos el panel de info\r\n                    const selectedCount = self.div.querySelectorAll('.tc-ctl-lcat-tree li input[type=checkbox]:checked').length;\r\n                    if (selectedCount > 0) {\r\n                        infoPane.classList.remove(Consts.classes.HIDDEN);\r\n                    }\r\n                }\r\n            }, { passive: true });\r\n\r\n\r\n            //evento de expandir nodo de info\r\n            //self._$div.off(\"click\", \".tc-ctl-lcat-search button\");                        \r\n            self.div.addEventListener(\"change\", TC.EventTarget.listenerBySelector(\".\" + self.CLASS + \"-search input[type=checkbox].\" + self.CLASS + \"-search-btn-info\", function (evt) {\r\n                evt.stopPropagation();\r\n                const target = evt.target;\r\n                if (target.checked) {\r\n                    const li = target.parentElement;\r\n                    var parent = li;\r\n                    do {\r\n                        parent = parent.parentElement;\r\n                    }\r\n                    while (parent && parent.tagName !== 'LI');\r\n                    self.showLayerInfo(self.layers.length > 1 ? self.layers.filter(l => l.id === parent.dataset.serviceId)[0] : self.layers[0], li.dataset.layerName);\r\n\r\n                } else {\r\n                    self.hideLayerInfo();\r\n                }\r\n            }));\r\n\r\n            self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\".\" + self.CLASS + \"-search input[type=checkbox].\" + self.CLASS + \"-search-btn-info\", function (evt) {\r\n                evt.stopPropagation();\r\n            }));\r\n\r\n            //click en un resultado - añadir capa\r\n            const searchListElementSelector = '.' + self.CLASS + '-search li';\r\n            self.div.addEventListener('click', TC.EventTarget.listenerBySelector(searchListElementSelector, function (evt) {\r\n                evt.stopPropagation();\r\n                var li = evt.target;\r\n                while (li && !li.matches(searchListElementSelector)) {\r\n                    li = li.parentElement;\r\n                }\r\n                if (li.classList.contains(self.CLASS + '-no-results')) {\r\n                    return; //si clicko en el li de \"no hay resultados\" rompo el ciclo de ejecución\r\n                }\r\n                if (li.classList.contains(self.CLASS + '-search-group')) {\r\n                    li.classList.toggle(Consts.classes.COLLAPSED);\r\n                    return;\r\n                }\r\n                onSpanClick(evt, self, function () {\r\n                    if (this.layers.length === 1) {\r\n                        return this.layers[0];\r\n                    }\r\n                    return this.getLayer(li.closest(\".tc-ctl-lcat-search-group\") && li.closest(\".tc-ctl-lcat-search-group\").dataset.serviceId);\r\n                });               \r\n               \r\n            }));\r\n\r\n            self.searchInit = true;\r\n        }\r\n    };\r\n\r\n    const getLayerTree = function (layer) {\r\n        var result = layer.getTree();\r\n        const makeNodeVisible = function makeNodeVisible(node) {\r\n            var childrenVisible = false;\r\n            for (var i = 0; i < node.children.length; i++) {\r\n                if (makeNodeVisible(node.children[i])) {\r\n                    childrenVisible = true;\r\n                }\r\n            }\r\n            if (Object.prototype.hasOwnProperty.call(node, 'isVisible')) {\r\n                node.isVisible = !layer.names || !layer.names.length || childrenVisible || node.isVisible;\r\n            }\r\n            return node.isVisible;\r\n        };\r\n        const expandNode = function (node, level) {\r\n            if (layer.options.expandedNodeLevel > level) {\r\n                node.expanded = true;\r\n                for (var i = 0; i < node.children.length; i++) {\r\n                    expandNode(node.children[i], level + 1);\r\n                }\r\n            }\r\n        };\r\n        makeNodeVisible(result);\r\n        expandNode(result, 0);\r\n        return result;\r\n    };\r\n\r\n    const _refreshResultList = function () {\r\n        const self = this;\r\n\r\n        if (\"createEvent\" in document) {\r\n            var evt = document.createEvent(\"HTMLEvents\");\r\n            evt.initEvent(\"keyup\", false, true);\r\n            if (self.textInput) {\r\n                self.textInput.dispatchEvent(evt);\r\n            }\r\n        }\r\n        else {\r\n            if (self.textInput) {\r\n                self.textInput.fireEvent(\"keyup\");\r\n            }\r\n        }\r\n    };\r\n\r\n    const updateControl = function (layer) {\r\n        const self = this;\r\n\r\n        const lisToCheck = self.map.workLayers\r\n            .filter(l => l.type === layer.type && l.url === layer.url) // Capas del mismo servicio\r\n            .map(l => self.getLayerNodes(l)) // Elementos li de esas capas\r\n            .flat();\r\n        lisToCheck.forEach(function (node) {\r\n            node.classList.remove(Consts.classes.LOADING);\r\n            node.classList.add(Consts.classes.CHECKED);\r\n            node.querySelector('span').dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n        });\r\n        self.getLayerRootNode(layer).querySelectorAll(\"li.tc-ctl-lcat-node.tc-ctl-lcat-leaf.tc-checked\").forEach(function (node) {\r\n            if (!lisToCheck.find(n => n === node)) {\r\n                node.classList.remove(Consts.classes.CHECKED);\r\n                node.querySelector('span').dataset.tooltip=self.getLocaleString('clickToAddToMap');\r\n            }\r\n        });\r\n        _refreshResultList.call(self);\r\n    };\r\n\r\n    const setCheckedLayersOnNode = function () {\r\n        const self = this;\r\n\r\n        if (self.layersToSetChecked && self.layersToSetChecked.length > 0) {\r\n            self.layersToSetChecked.forEach(function (layer, index, array) {\r\n                if (self.getLayerRootNode(layer)) {\r\n                    updateControl.call(self, layer);\r\n\r\n                    array.splice(index, 1);\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    const addLogicToNode = function (node, layer) {\r\n        const self = this;\r\n\r\n        node.querySelectorAll('li > button.' + self.CLASS + '-collapse-btn').forEach(function (btn) {\r\n            btn.addEventListener('click', onCollapseButtonClick);\r\n        });\r\n\r\n        node.querySelectorAll('span').forEach(function (span) {\r\n            span.addEventListener('click', function (e) {\r\n                onSpanClick(e, self, function (li) {\r\n                    for (var i = 0, len = this._roots.length; i < len; i++) {\r\n                        const root = this._roots[i];\r\n                        if (root.contains(li)) {\r\n                            return this.getLayer(root.dataset.layerId);\r\n                        }\r\n                    }\r\n                    return self.getLayer(li.dataset.layerId);\r\n                });\r\n            });\r\n        });\r\n\r\n        self._roots = self.div.querySelectorAll(self._selectors.LAYER_ROOT);                \r\n        \r\n        node.dataset.layerId = layer.id;\r\n\r\n        node.querySelectorAll('.' + self.CLASS + '-btn-info').forEach(function (a) {\r\n            const span = a.parentElement.querySelector('span');\r\n            const name = a.parentElement.dataset.layerName;\r\n            if (name) {\r\n                span.classList.add(Consts.classes.SELECTABLE);\r\n                var info = layer.getInfo(name);\r\n                if (!Object.prototype.hasOwnProperty.call(info, 'abstract') &&\r\n                    !Object.prototype.hasOwnProperty.call(info, 'legend') &&\r\n                    !Object.prototype.hasOwnProperty.call(info, 'metadata')) {\r\n                    a.parentElement.removeChild(a);\r\n                }\r\n                else {                    \r\n                    a.addEventListener('change', function (e) {\r\n                        e.stopPropagation();\r\n                        const elm = this;\r\n                        if (elm.checked) {\r\n                            self.showLayerInfo(layer, name);\r\n                        } else {\r\n                            self.hideLayerInfo();\r\n                        }\r\n                    }, { passive: true });\r\n                    a.addEventListener(Consts.event.CLICK, function (e) {\r\n                        e.stopPropagation();\r\n                    }, { passive: true });\r\n                }\r\n                if (layer.compatibleLayers && layer.compatibleLayers.indexOf(name) < 0) {\r\n                    span.classList.add(Consts.classes.INCOMPATIBLE);\r\n                    span.setAttribute('title', self.getLocaleString('reprojectionNeeded'));\r\n                    //console.log(\"capa \" + name + \" incompatible\");\r\n                }\r\n                if (self.map) {\r\n                    for (var j = 0, len = self.map.workLayers.length; j < len; j++) {\r\n                        var wl = self.map.workLayers[j];\r\n                        if (wl.type === Consts.layerType.WMS && wl.url === layer.url && wl.names.length === 1 && wl.names[0] === name) {\r\n                            span.parentElement.classList.add(Consts.classes.CHECKED);\r\n                            span.dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                a.addEventListener('change', function (e) {\r\n                    e.stopPropagation();\r\n                    const elm = this;\r\n                    if (elm.checked) {\r\n                        self.showLayerInfo(layer, name, span.innerText);\r\n                    } else {\r\n                        self.hideLayerInfo();\r\n                    }\r\n                }, { passive: true });\r\n\r\n                a.addEventListener(Consts.event.CLICK, function (e) {\r\n                    e.stopPropagation();\r\n                }, { passive: true });\r\n            }\r\n        });        \r\n\r\n        setCheckedLayersOnNode.call(self);\r\n\r\n        self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n            self._dialogDiv.innerHTML = html;\r\n        });\r\n    };\r\n\r\n    ctlProto.renderBranch = function (layer, callback, promiseRenderResolve) {\r\n        const self = this;\r\n\r\n        self.sourceLayers.unshift(layer);\r\n        layer.getCapabilitiesPromise()\r\n            .then(function (_result) {\r\n\r\n                self.getRenderedHtml(self.CLASS + '-branch', getLayerTree(this), function (html) {\r\n                    var template = document.createElement('template');\r\n                    template.innerHTML = html;\r\n\r\n                    const branch = self.div.querySelector('.' + self.CLASS + '-branch');\r\n                    var newChild = template.content ? template.content.firstChild : template.firstChild;\r\n                    var oldChild = branch.querySelector('li.' + self.CLASS + '-loading-node[data-layer-id=\"' + this.id + '\"]');\r\n\r\n                    if (oldChild) {\r\n                        branch.replaceChild(newChild, oldChild);\r\n                    } else {\r\n                        branch.insertAdjacentElement('afterbegin', newChild);\r\n                    }\r\n\r\n                    addLogicToNode.call(self, newChild, this);\r\n\r\n                    if (branch.childElementCount === 1) {\r\n                        promiseRenderResolve();\r\n                    }\r\n\r\n                    if (TC.Util.isFunction(callback)) {\r\n                        // pasamos el callback el item \r\n                        callback(self.sourceLayers[self.sourceLayers.map(l => l && l.id).indexOf(this.id)]);\r\n                    }\r\n\r\n                }.bind(this));\r\n\r\n            }.bind(layer))\r\n            .catch(function (_error) {\r\n                var index = self.layers.map(l => l.id).indexOf(this.id);\r\n                self.layers.splice(index, 1);\r\n\r\n                var errorMessage = self.getLocaleString(\"lyrCtlg.errorLoadingNode\", { serviceName: this.title });\r\n                var liError = self.div.querySelector('.' + self.CLASS + '-branch').querySelector('li.' + self.CLASS + '-loading-node[data-layer-id=\"' + this.id + '\"]');\r\n                liError.classList.add('tc-error');\r\n                liError.setAttribute('title', errorMessage);\r\n\r\n                self.map.toast(errorMessage, { type: Consts.msgType.ERROR });\r\n\r\n            }.bind(layer));\r\n    };\r\n\r\n    ctlProto.loadTemplates = async function () {\r\n        const self = this;\r\n        const mainTemplatePromise = import('../templates/tc-ctl-lcat.mjs');\r\n        const branchTemplatePromise = import('../templates/tc-ctl-lcat-branch.mjs');\r\n        const nodeTemplatePromise = import('../templates/tc-ctl-lcat-node.mjs');\r\n        const infoTemplatePromise = import('../templates/tc-ctl-lcat-info.mjs');\r\n        const resultsTemplatePromise = import('../templates/tc-ctl-lcat-results.mjs');\r\n        const pathResultsTemplatePromise = import('../templates/tc-ctl-lcat-results-path.mjs');\r\n        const dialogTemplatePromise = import('../templates/tc-ctl-lcat-dialog.mjs');\r\n\r\n        const template = {};\r\n        template[self.CLASS] = (await mainTemplatePromise).default;\r\n        template[self.CLASS + '-branch'] = (await branchTemplatePromise).default;\r\n        template[self.CLASS + '-node'] = (await nodeTemplatePromise).default;\r\n        template[self.CLASS + '-info'] = (await infoTemplatePromise).default;\r\n        template[self.CLASS + '-results'] = (await resultsTemplatePromise).default;\r\n        template[self.CLASS + '-results-path'] = (await pathResultsTemplatePromise).default;\r\n        template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n        self.template = template;\r\n    };\r\n\r\n    ctlProto.render = function (callback) {\r\n        const self = this;\r\n\r\n        self.sourceLayers = [];\r\n\r\n        return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n            if (self.layers.length === 0) {\r\n                self.renderData({ layerTrees: [], enableSearch: false }, function () {\r\n\r\n                    if (TC.Util.isFunction(callback)) {\r\n                        callback();\r\n                    }\r\n\r\n                    resolve();\r\n                });\r\n            } else {\r\n                self.renderData({ layers: self.layers, enableSearch: true }, function () {\r\n\r\n                    createSearchAutocomplete.call(self);\r\n\r\n                    self.layers.forEach(function (layer) {\r\n                        self.renderBranch(layer, callback, resolve);\r\n                    });\r\n                });\r\n            }\r\n        }));\r\n    };\r\n\r\n    ctlProto.getLayerRootNode = function (layer) {\r\n        const self = this;\r\n        var result = null;\r\n        if (!layer.isBase) {\r\n            var url = layer.options.url;\r\n            if (self._roots) {\r\n                self._roots.forEach(function (li) {\r\n                    const lyr = self.getLayer(li.dataset.layerId);\r\n                    if (lyr && lyr.type === layer.type && lyr.options.url.toLowerCase() === url.toLowerCase()) {\r\n                        result = li;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        return result;\r\n    };\r\n\r\n    ctlProto.getLayerNodes = function (layer) {\r\n        const self = this;\r\n        const result = [];\r\n        const rootNode = self.getLayerRootNode(layer);\r\n        if (rootNode) {\r\n            for (var i = 0; i < layer.names.length; i++) {\r\n                const liLayer = rootNode.querySelector('li[data-layer-name=\"' + layer.names[i] + '\"]');\r\n                if (!liLayer) {\r\n                    continue;\r\n                }\r\n                result.push(liLayer);\r\n                liLayer.querySelectorAll('li').forEach(function (li) {\r\n                    result.push(li);\r\n                });\r\n            }\r\n        }\r\n        return result;\r\n    };\r\n\r\n    ctlProto.showLayerInfo = function (layer, name, title) {\r\n        const self = this;\r\n        var result = null;\r\n\r\n        var info = self.div.querySelector('.' + self.CLASS + '-info');\r\n\r\n        const toggleInfo = function (layerName, infoObj) {\r\n            var result = false;\r\n            //if (lName !== undefined && lName.toString() === layerName) {\r\n            //    info.dataset.layerName = '';\r\n            //    $info.removeClass(Consts.classes.HIDDEN);\r\n            //}\r\n            //else {\r\n            if (infoObj) {\r\n                result = true;\r\n                info.dataset.serviceId = layer.id;\r\n                info.dataset.layerName = layerName;\r\n                info.classList.remove(Consts.classes.HIDDEN);\r\n                self.getRenderedHtml(self.CLASS + '-info', infoObj)\r\n                    .then(function (out) {\r\n                        info.innerHTML = out;\r\n                        info.querySelector('.' + self.CLASS + '-info-close').addEventListener(Consts.event.CLICK, function () {\r\n                            self.hideLayerInfo();\r\n                        }, { passive: true });\r\n                    })\r\n                    .catch(function (err) {\r\n                        TC.error(err);\r\n                    });\r\n            }\r\n            //}\r\n            return result;\r\n        };\r\n\r\n        self.div.querySelectorAll('.' + self.CLASS + '-btn-info, .' + self.CLASS + '-search-btn-info').forEach(function (btn) {\r\n            btn.checked = false;\r\n        });        \r\n\r\n        const getInfoByTitle = function (layer, title) {\r\n            if (layer.Title === title) {\r\n                return {\r\n                    title: title,\r\n                    abstract: layer.Abstract,\r\n                    metadata: !layer.MetadataURL ? null : layer.MetadataURL.reduce(function (vi, va) {\r\n                        vi.push({\r\n                            format: va.Format,\r\n                            formatDescription: TC.Util.getLocaleString(self.map.options.locale, TC.Util.getSimpleMimeType(va.Format)) ||\r\n                                TC.Util.getLocaleString(self.map.options.locale, 'viewMetadata'),\r\n                            type: va.type,\r\n                            url: va.OnlineResource\r\n                        });\r\n                        return vi;\r\n                    }, [])\r\n                };\r\n            }\r\n            if (layer.Layer) {\r\n                for (var i = 0; i < layer.Layer.length; i++) {\r\n                    const res = getInfoByTitle(layer.Layer[i], title);\r\n                    if (res) {\r\n                        return res;\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        for (var i = 0, ii = self._roots.length; i < ii; i++) {\r\n            const root = self._roots[i];\r\n            if (root.dataset.layerId === layer.id) {\r\n                const infoToggles = root.querySelectorAll('.' + self.CLASS + '-btn-info');\r\n                for (var j = 0, jj = infoToggles.length; j < jj; j++) {\r\n                    const infoToggle = infoToggles[j];\r\n                    var n = infoToggle.parentElement.dataset.layerName;\r\n                    if (name && n === name) {\r\n                        const info = layer.getInfo(name);\r\n                        const infoBtn = self.div.querySelector('li[data-layer-name=\"' + n + '\"] > input[type=\"checkbox\"].' + self.CLASS + '-btn-info');\r\n                        infoBtn.checked = toggleInfo(n, info);\r\n                        const infoSearchBtn = self.div.querySelector('li[data-layer-name=\"' + n + '\"] > input[type=\"checkbox\"].' + self.CLASS + '-search-btn-info');\r\n                        if (infoSearchBtn) {\r\n                            infoSearchBtn.checked = infoBtn.checked;\r\n                        }\r\n                        result = info;\r\n                        break;\r\n                    }\r\n                    const t = infoToggle.parentElement.querySelector('span').innerText;\r\n                    if (!name && title && t === title){\r\n                        //buscar en el capapabilities por nombre de capa;\r\n                        const info = getInfoByTitle(layer.capabilities.Capability.Layer, title);\r\n                        //const infoBtn = self.div.querySelector('li [data-layer-name=\"' + n + '\"] > button.' + self.CLASS + '-btn-info');\r\n                        infoToggle.checked = toggleInfo(t, info);\r\n                        result = info;\r\n                        break;\r\n                    }\r\n                }\r\n                break;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n    ctlProto.update = function () {\r\n        const self = this;\r\n        self.sourceLayers.forEach(function (layer) {\r\n            layer.getCapabilitiesPromise().then(function () {\r\n                layer.compatibleLayers = layer.wrap.getCompatibleLayers(self.map.crs);\r\n\r\n                const rootNode = self.getLayerRootNode(layer);\r\n                if (rootNode) {\r\n                    rootNode\r\n                        .querySelectorAll('li[data-layer-name]')\r\n                        .forEach(function (li) {\r\n                            const name = li.dataset.layerName;\r\n                            const span = li.querySelector('span.' + Consts.classes.SELECTABLE);\r\n                            if (layer.compatibleLayers.indexOf(name) < 0) {\r\n                                span.classList.add(Consts.classes.INCOMPATIBLE);\r\n                                span.setAttribute('title', self.getLocaleString('reprojectionNeeded'));\r\n                            }\r\n                            else {\r\n                                span.classList.remove(Consts.classes.INCOMPATIBLE);\r\n                                span.removeAttribute('title');\r\n                            }\r\n                        });\r\n                }\r\n            });\r\n        });\r\n    };\r\n\r\n    ctlProto.hideLayerInfo = function () {\r\n        var self = this;\r\n        self.div.querySelectorAll('.' + self.CLASS + '-btn-info, .' + self.CLASS + '-search-btn-info').forEach(function (btn) {\r\n            btn.checked = false;\r\n        });\r\n        const infoPanel = self.div.querySelector('.' + self.CLASS + '-info');\r\n        delete infoPanel.dataset.serviceId;\r\n        delete infoPanel.dataset.layerName;\r\n        infoPanel.classList.add(Consts.classes.HIDDEN);\r\n    };\r\n\r\n    ctlProto.addLayer = function (layer) {\r\n        const self = this;\r\n        return new Promise(function (resolve, _reject) {\r\n            var fromLayerCatalog = [];\r\n\r\n            if (self.options.layers && self.options.layers.length) {\r\n                fromLayerCatalog = self.options.layers.filter(function (l) {\r\n                    var getMap = TC.Util.reqGetMapOnCapabilities(l.url);\r\n                    return getMap && getMap.replace(TC.Util.regex.PROTOCOL) === layer.url.replace(TC.Util.regex.PROTOCOL);\r\n                });\r\n            }\r\n\r\n            if (fromLayerCatalog.length === 0)\r\n                fromLayerCatalog = self.layers.filter(function (l) {\r\n                    return l.url.replace(TC.Util.regex.PROTOCOL) === layer.url.replace(TC.Util.regex.PROTOCOL);\r\n                });\r\n\r\n            if (fromLayerCatalog.length === 0) {\r\n                self.layers.unshift(layer);\r\n                layer.getCapabilitiesPromise().then(function () {\r\n                    layer.compatibleLayers = layer.wrap.getCompatibleLayers(self.map.crs);\r\n                    layer.title = layer.title || layer.wrap.getServiceTitle();\r\n                    self.renderBranch(layer, function () {\r\n                        resolve(); //ver linea 55 y por ahí\r\n                    });\r\n                });\r\n            } else { resolve(); }\r\n        });\r\n    };\r\n\r\n    ctlProto.getLayer = function (id) {\r\n        const self = this;\r\n        for (var i = 0, len = self.layers.length; i < len; i++) {\r\n            const layer = self.layers[i];\r\n            if (layer.id === id) {\r\n                // 10/04/2019 GLS: validamos si es una capa que viene de configuración o es un WMS externo o por estado \r\n                // para decidir si mostramos el título del servicio o no\r\n                var configLayer = self.options.layers.filter(l => l.id === id);\r\n\r\n                if (configLayer.length > 0) {\r\n                    layer.hideTitle = layer.options.hideTitle = configLayer[0].hideTitle;\r\n                } else {\r\n                    layer.hideTitle = layer.options.hideTitle = false;\r\n                }                \r\n                \r\n                return layer;\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n\r\n    ctlProto.addLayerToMap = function (layer, layerName) {\r\n        const self = this;\r\n        const layerOptions = TC.Util.extend({}, layer.options);\r\n        layerOptions.id = self.getUID();\r\n        layerOptions.layerNames = [layerName];\r\n        layerOptions.title = layer.title;\r\n        layerOptions.hideTree = true;\r\n        const newLayer = new Raster(layerOptions);\r\n        if (newLayer.isCompatible(self.map.crs)) {\r\n            self.map.addLayer(layerOptions);\r\n        }\r\n        else {\r\n            showProjectionChangeDialog(self, newLayer);\r\n        }\r\n    };\r\n\r\n    ctlProto.loaded = function () {\r\n        return this._readyPromise;\r\n    };\r\n\r\n    ctlProto.getAvailableCRS = function (options) {\r\n        const self = this;\r\n        options = options || {};\r\n        return self.map.getCompatibleCRS({\r\n            layers: self.map.workLayers.concat(self.map.baseLayer, options.layer),\r\n            includeFallbacks: true\r\n        });\r\n    };\r\n\r\n    ctlProto.setProjection = function (options) {\r\n        const self = this;\r\n        options = options || {};\r\n\r\n        TC.loadProjDef({\r\n            crs: options.crs,\r\n            callback: function () {\r\n                self.map.setProjection(options).then(function () {\r\n                    if (self._layerToAdd) {\r\n                        self.map.addLayer(self._layerToAdd);\r\n                    }\r\n                    TC.Util.closeModal();\r\n                });\r\n            }\r\n        });\r\n    };\r\n\r\n    ctlProto.showProjectionChangeDialog = function (options) {\r\n        const self = this;\r\n        self._layerToAdd = options.layer;\r\n        ProjectionSelector.prototype.showProjectionChangeDialog.call(self, options);\r\n    };\r\n\r\n})();\r\n\r\nTC.control.LayerCatalog = LayerCatalog;\r\nexport default LayerCatalog;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from './MapContents';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst Legend = function () {\r\n    MapContents.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(Legend, MapContents);\r\n\r\n(function () {\r\n    var ctlProto = Legend.prototype;\r\n\r\n    ctlProto.CLASS = 'tc-ctl-legend';\r\n\r\n    ctlProto.register = function (map) {\r\n        const self = this;\r\n\r\n        map.on(Consts.event.VIEWCHANGE, function (e) {\r\n            const view = e.view;\r\n            const onLayerAdd = self.loadGraphics.bind(self);\r\n\r\n            if (view === Consts.view.THREED) {                \r\n                map.on(Consts.event.LAYERADD, onLayerAdd);\r\n            } else if (view === Consts.view.DEFAULT) {\r\n                map.off(Consts.event.LAYERADD, onLayerAdd);\r\n            }\r\n        });\r\n\r\n        return MapContents.prototype.register.call(self, map);\r\n    };\r\n\r\n    ctlProto.loadTemplates = async function () {\r\n        const self = this;\r\n        const mainTemplatePromise = import('../templates/tc-ctl-legend.mjs');\r\n        const nodeTemplatePromise = import('../templates/tc-ctl-legend-node.mjs');\r\n\r\n        const template = {};\r\n        template[self.CLASS] = (await mainTemplatePromise).default;\r\n        template[self.CLASS + '-node'] = (await nodeTemplatePromise).default;\r\n        self.template = template;\r\n    };\r\n\r\n    ctlProto.loadGraphics = function () {\r\n        const self = this;\r\n        self.getLayerUIElements().forEach(function (li) {\r\n            const layer = self.map.getLayer(li.dataset.layerId);\r\n            if (layer) {\r\n                li.querySelectorAll('li.' + self.CLASS + '-node-visible').forEach(function (l) {\r\n                    l.querySelectorAll('img').forEach(function (img) {\r\n                        if (img && img.hasAttribute('src') && img.getAttribute('src').length === 0) {\r\n                            self.styleLegendImage(img, layer);\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        });\r\n    };\r\n\r\n    ctlProto.updateScale = function () {\r\n        const self = this;\r\n        const inScale = self.CLASS + '-node-inscale';\r\n        const outOfScale = self.CLASS + '-node-outofscale';\r\n\r\n        self.getLayerUIElements().forEach(function (li) {\r\n            const layer = self.map.getLayer(li.dataset.layerId);\r\n\r\n            if (layer && !layer.customLegend ) {\r\n                let layersInScale = false;\r\n                const lis = li.querySelectorAll('li');\r\n                lis.forEach(function (l) {\r\n                    if (l.classList.contains(self.CLASS + '-node-visible')) {\r\n                        const uid = l.dataset.layerUid;\r\n                        if (layer.isVisibleByScale(uid)) {\r\n                            layersInScale = true;\r\n                            l.classList.remove(outOfScale);\r\n                            l.classList.add(inScale);\r\n                            l.querySelectorAll('img').forEach(function (img) {\r\n                                self.styleLegendImage(img, layer);\r\n                            });\r\n                        }\r\n                        else {\r\n                            l.classList.add(outOfScale);\r\n                            l.classList.remove(inScale);\r\n                        }\r\n                    }\r\n                });\r\n                layersInScale = layersInScale || !lis.length;\r\n                if (!lis.length) {\r\n                    li.querySelectorAll('img').forEach(function (img) {\r\n                        self.styleLegendImage(img, layer);\r\n                    });\r\n                }\r\n                li.classList.toggle(inScale, layersInScale);\r\n                li.classList.toggle(outOfScale, !layersInScale);\r\n            }\r\n        });\r\n    };\r\n\r\n    ctlProto.update = function () {\r\n        const self = this;\r\n\r\n        self.getLayerUIElements().forEach(function (li) {\r\n            const layer = self.map.getLayer(li.dataset.layerId);\r\n            if (layer && (!layer.customLegend || !layer.getVisibility())) {\r\n                const tree = layer.getTree(false, true);\r\n\r\n                li.querySelectorAll('li').forEach(function (l) {\r\n                    const visible = self.CLASS + '-node-visible';\r\n                    const notVisible = self.CLASS + '-node-notvisible';\r\n                    const hasVisible = self.CLASS + '-node-hasvisible';\r\n\r\n                    switch (layer.getNodeVisibility(l.dataset.layerUid, tree)) {\r\n                        case Consts.visibility.VISIBLE:\r\n                            l.classList.remove(notVisible, hasVisible);\r\n                            l.classList.add(visible);\r\n                            break;\r\n                        case Consts.visibility.NOT_VISIBLE:\r\n                            l.classList.remove(visible, hasVisible);\r\n                            l.classList.add(notVisible);\r\n                            break;\r\n                        case Consts.visibility.HAS_VISIBLE:\r\n                            l.classList.remove(visible, notVisible);\r\n                            l.classList.add(hasVisible);                            \r\n                            break;\r\n                        case null:\r\n                            // No encuentro nodo: no visible\r\n                            l.classList.remove(visible, hasVisible);\r\n                            l.classList.add(notVisible);\r\n                            break;\r\n                        default:\r\n                            // Estado no definido: por defecto visible\r\n                            l.classList.remove(notVisible, hasVisible);\r\n                            l.classList.add(visible);                            \r\n                            break;\r\n                    }\r\n                });\r\n\r\n                self.updateLayerVisibility(layer);\r\n            }\r\n        });\r\n        self.updateScale();\r\n    };\r\n\r\n    ctlProto.updateLayerTree = function (layer) {\r\n        var self = this;        \r\n\r\n        if (!layer.isBase && !layer.options.stealth) {\r\n            \r\n            //// 09/04/2019 GLS: ignoramos el atributo que venga en la capa porque en la leyenda queremos que el árbol se muestre siempre y \r\n            //// nos ahorramos el tener que pasarlo en el estado del mapa\r\n            if (layer.hideTree || layer.options.hideTree) {\r\n                // 21/10/2021 URI: El Parche anterior estropeaba el funcionamiento del TOC ya que modificaba la propiedad de configuracion de la capa \"hideTree\"\r\n                //He implementado una funcion llamada getFullTree que obtiene el arbol completo sin importar la configracion y sin modificar la propiedad \"tree\" de la capa\r\n                //que es donde se guarda cacheada la estructura del albol de capas hijas.\r\n                /*layer.tree = null;\r\n                layer.hideTree = layer.options.hideTree = false;*/\r\n            }      \r\n\r\n            self.div.querySelector('.' + self.CLASS + '-empty').classList.add(Consts.classes.HIDDEN);            \r\n            var params = layer.getNestedTree ? layer.getNestedTree() : layer.getTree();//self.layerTrees[layer.id];\r\n            if (layer._title && layer._title !== layer.title)\r\n                params = Object.assign(params,{ \"title\": layer._title });\r\n            self.getRenderedHtml(self.CLASS + '-node', params)\r\n                .then(function (out) {\r\n                    const parser = new DOMParser();\r\n                    const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n                    const uid = newLi.dataset.layerUid;\r\n                    const ul = self.div.querySelector('ul.' + self.CLASS + '-branch');\r\n                    const lis = ul.querySelectorAll('li[data-layer-uid=\"' + uid + '\"]');\r\n                    if (lis.length === 1) {\r\n                        const li = lis[0];\r\n                        if (li.innerHTML !== newLi.innerHTML) {//URI: Si el html nuevo y el viejo son iguales no copio para no hacer un parpadeo en el navegador.\r\n                            li.innerHTML = newLi.innerHTML;\r\n                            li.setAttribute('class', newLi.getAttribute('class')); // Esto actualiza si un nodo deja de ser hoja o pasa a ser hoja\r\n                        }\r\n                        \r\n                    }\r\n                    else {\r\n                        newLi.dataset.layerId = layer.id;\r\n                        ul.insertBefore(newLi, ul.firstChild);\r\n                    }\r\n\r\n                    self.update();\r\n                })\r\n                .catch(function (err) {\r\n                    TC.error(err);\r\n                });\r\n        }\r\n    };\r\n\r\n    ctlProto.removeLayer = function (layer) {\r\n        if (!layer.isBase) {\r\n            MapContents.prototype.removeLayer.call(this, layer);\r\n        }\r\n    };\r\n\r\n    ctlProto.updateLayerVisibility = function (layer) {\r\n        var self = this;\r\n        self.getLayerUIElements().forEach(function (li) {\r\n            if (li.dataset.layerId === layer.id) {\r\n                li.classList.toggle(self.CLASS + '-node-notvisible', !layer.getVisibility());\r\n            }\r\n        });\r\n    };\r\n\r\n    ctlProto.getLayerUIElements = function () {\r\n        const self = this;\r\n        return self.div.querySelector('ul.' + self.CLASS + '-branch').querySelectorAll('li.' + self.CLASS + '-node');\r\n    };\r\n})();\r\n\r\nTC.control.Legend = Legend;\r\nexport default Legend;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport GeometryFeatureInfo from './GeometryFeatureInfo';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass LineFeatureInfo extends GeometryFeatureInfo {\r\n    constructor() {\r\n        super(...arguments);\r\n        const self = this;\r\n        self.geometryType = Consts.geom.POLYLINE;\r\n        self.style = TC.Util.extend(true, { strokeColor: self.DEFAULT_STROKE_COLOR, strokeWidth: 2 }, self.options.style);\r\n    }\r\n}\r\n\r\nTC.control.LineFeatureInfo = LineFeatureInfo;\r\nexport default LineFeatureInfo;","import TC from '../../TC';\r\nimport WorkLayerManager from './WorkLayerManager';\r\nTC.control = TC.control || {};\r\nTC.control.ListTOC = WorkLayerManager;\r\nconst ListTOC = TC.control.ListTOC;\r\nexport default ListTOC;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass LoadingIndicator extends Control {\r\n    #waits = {};\r\n\r\n    constructor() {\r\n        super(...arguments);\r\n        const self = this;\r\n        self.div.classList.add(self.CLASS);\r\n\r\n        window.addEventListener('error', function () {\r\n            self.reset();\r\n            // Tell browser to run its own error handler as well\r\n            return false;\r\n        }, false);\r\n    }\r\n\r\n    getClassName() {\r\n        return 'tc-ctl-load';\r\n    }\r\n\r\n    async loadTemplates() {\r\n        const self = this;\r\n        const module = await import('../templates/tc-ctl-load.mjs');\r\n        self.template = module.default;\r\n    }\r\n\r\n    async register(map) {\r\n        const self = this;\r\n        await super.register.call(self, map);\r\n        map\r\n            .on(Consts.event.BEFORELAYERADD + ' ' +\r\n                Consts.event.BEFORELAYERUPDATE + ' ' +\r\n                Consts.event.BEFOREFEATURESADD, function (e) {\r\n                    self.startWait(e);\r\n                })\r\n            .on(Consts.event.LAYERADD + ' ' +\r\n                Consts.event.LAYERERROR + ' ' +\r\n                Consts.event.LAYERUPDATE + ' ' +\r\n                Consts.event.FEATURESADD, function (e) {\r\n                    self.stopWait(e);\r\n                })\r\n            .on(Consts.event.BEFOREFEATUREINFO, function () {\r\n                self.addWait(Consts.event.FEATUREINFO);\r\n            })\r\n            .on(Consts.event.FEATUREINFO + ' ' +\r\n                Consts.event.NOFEATUREINFO + ' ' +\r\n                Consts.event.FEATUREINFOERROR, function () {\r\n                    self.removeWait(Consts.event.FEATUREINFO);\r\n                })\r\n            .on(Consts.event.LAYERREMOVE, function (e) {\r\n                self.endWait(e);\r\n            });\r\n\r\n        if (!TC.isDebug) {\r\n            //Para evitar que se quede el indicador indefinidamente activo cuando hay un error en la página\r\n            window.addEventListener('error', function (_msg, _url, _line, _col, _error) {\r\n                self.reset();\r\n                return false;\r\n            });\r\n        }\r\n\r\n        return self;\r\n    }\r\n\r\n    startWait(e) {\r\n        const self = this;\r\n        const layerId = e.layer.id;\r\n        if (self.#waits[layerId] === undefined) {\r\n            self.#waits[layerId] = 0;\r\n        }\r\n        self.#waits[layerId] = self.#waits[layerId] + 1;\r\n        self.show();\r\n\r\n        self.map.trigger(Consts.event.STARTLOADING);\r\n    }\r\n\r\n    stopWait(e) {\r\n        const self = this;\r\n        const layerId = e.layer.id;\r\n        var wait = self.#waits[layerId];\r\n        if (wait > 0) {\r\n            wait = self.#waits[layerId] = wait - 1;\r\n        }\r\n        if (!wait) {\r\n            delete self.#waits[layerId];\r\n        }\r\n        const count = Object.keys(self.#waits).length;\r\n        if (!count) {\r\n            self.hide();\r\n            self.map.trigger(Consts.event.STOPLOADING);\r\n        }\r\n    }\r\n\r\n    endWait(e) {\r\n        const self = this;\r\n        const layerId = e.layer.id;\r\n        var wait = self.#waits[layerId];\r\n        if (wait > 0) {\r\n            delete self.#waits[layerId];\r\n        }\r\n        const count = Object.keys(self.#waits).length;\r\n        if (!count) {\r\n            self.hide();\r\n            self.map.trigger(Consts.event.STOPLOADING);\r\n        }\r\n    }\r\n\r\n    reset(_e) {\r\n        const self = this;\r\n        self.#waits = {};\r\n        self.hide();\r\n        self.map && self.map.trigger(Consts.event.STOPLOADING);\r\n    }\r\n\r\n    addWait(uid) {\r\n        const self = this;\r\n        const result = uid || TC.getUID();\r\n        self.startWait({ layer: { id: result } });\r\n        return result;\r\n    }\r\n\r\n    removeWait(uid) {\r\n        this.stopWait({ layer: { id: uid } });\r\n    }\r\n}\r\n\r\nTC.control.LoadingIndicator = LoadingIndicator;\r\nexport default LoadingIndicator;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Proxification from '../tool/Proxification';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst MapContents = function () {\r\n    var self = this;\r\n\r\n    Control.apply(self, arguments);\r\n\r\n    self.layerTrees = {};\r\n};\r\n\r\nTC.inherit(MapContents, Control);\r\n\r\n(function () {\r\n    var ctlProto = MapContents.prototype;\r\n\r\n    ctlProto.CLASS = 'tc-ctl-mc';\r\n\r\n    ctlProto.render = function (callback, options) {\r\n        const self = this;\r\n        return self._set1stRenderPromise(self.map ? self.renderData(options ? TC.Util.extend(self.map.getLayerTree(), options) : self.map.getLayerTree(), function () {\r\n            self.addUIEventListeners();\r\n            if (typeof callback === 'function') {\r\n                callback();\r\n            }\r\n        }) : Promise.reject(Error('Cannot render: control has no map')));\r\n    };\r\n\r\n    ctlProto.register = async function (map) {\r\n        const self = this;\r\n        await Promise.all([Control.prototype.register.call(self, map), self.renderPromise()]);\r\n        for (var i = 0, len = map.layers.length; i < len; i++) {\r\n            self.updateLayerTree(map.layers[i]);\r\n        }\r\n\r\n        map\r\n            .on(Consts.event.ZOOM + ' ' + Consts.event.PROJECTIONCHANGE, function () {\r\n                self.updateScale();\r\n            })\r\n            .on(Consts.event.UPDATEPARAMS, function (e) {\r\n                const layer = e.layer;\r\n                var names = layer.names;\r\n                var containsName = function containsName(node) {\r\n                    var result = false;\r\n                    if (node) {\r\n                        if (names.indexOf(node.name) >= 0) {\r\n                            result = true;\r\n                        }\r\n                        else {\r\n                            for (var i = 0; i < node.children.length; i++) {\r\n                                if (containsName(node.children[i])) {\r\n                                    result = true;\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    return result;\r\n                };\r\n                if (containsName(self.layerTrees[layer.id]) || names.length === 0) {\r\n                    self.update(self instanceof TC.control.BasemapSelector ? undefined : layer);\r\n                }\r\n                else {\r\n                    self.updateLayerTree(layer);\r\n                }\r\n            })\r\n            .on(Consts.event.LAYERVISIBILITY, function (e) {\r\n                self.updateLayerVisibility(e.layer);\r\n            })\r\n            .on(Consts.event.LAYERADD, function (e) {\r\n                self.updateLayerTree(e.layer);\r\n            })\r\n            .on(Consts.event.VECTORUPDATE + ' ' + Consts.event.FEATUREADD + ' ' + Consts.event.FEATURESADD, function (e) {\r\n                const layer = e.layer;\r\n                // Se introduce un timeout porque pueden venir muchos eventos de este tipo seguidos y no tiene sentido actualizar con cada uno\r\n                self._updateLayerTreeTimeouts = self._updateLayerTreeTimeouts || {};\r\n                if (self._updateLayerTreeTimeouts[layer.id]) {\r\n                    clearTimeout(self._updateLayerTreeTimeouts[layer.id]);\r\n                }\r\n                self._updateLayerTreeTimeouts[layer.id] = setTimeout(function () {\r\n                    if (self.map.workLayers.indexOf(layer) > -1) {\r\n                        // GLS: Validamos si la capa que ha provocado el evento sigue en worklayers, si es borrada debido a la espera del timeout el TOC puede reflejar capas que ya no están\r\n                        self.updateLayerTree(layer);\r\n                        delete self._updateLayerTreeTimeouts[layer.id];\r\n                    }\r\n                }, 100);\r\n            })\r\n            .on(Consts.event.LAYERREMOVE, function (e) {\r\n                self.removeLayer(e.layer);\r\n            })\r\n            .on(Consts.event.LAYERORDER, function (e) {\r\n                self.updateLayerOrder(e.layer, e.oldIndex, e.newIndex);\r\n            })\r\n            .on(Consts.event.LAYERERROR, function (e) {\r\n                self.onErrorLayer(e.layer);\r\n            });\r\n\r\n        return self;\r\n    };\r\n\r\n    ctlProto.updateScale = function () {\r\n    };\r\n\r\n    ctlProto.updateLayerVisibility = function (_layer) {\r\n    };\r\n\r\n    ctlProto.updateLayerTree = function (layer) {\r\n        layer.tree = null;\r\n        this.layerTrees[layer.id] = layer.getTree();\r\n    };\r\n\r\n    ctlProto.updateLayerOrder = function (layer, oldIdx, newIdx, collection) {\r\n        const self = this;\r\n        if (oldIdx >= 0 && oldIdx !== newIdx) {\r\n            var currentElm, previousElm;\r\n            const elms = self.getLayerUIElements();\r\n\r\n            collection = collection || self.map.workLayers;\r\n\r\n            for (var i = collection.length - 1; i >= 0; i--) {\r\n                const l = collection[i];\r\n                previousElm = currentElm;\r\n                for (var j = 0, jj = elms.length; j < jj; j++) {\r\n                    const elm = elms[j];\r\n                    if (elm.dataset.layerId === l.id) {\r\n                        currentElm = elm;\r\n                        break;\r\n                    }\r\n                }\r\n                if (l === layer) {\r\n                    if (currentElm) {\r\n                        if (previousElm) {\r\n                            previousElm.insertAdjacentElement('afterend', currentElm);\r\n                        }\r\n                        else {\r\n                            currentElm.parentElement.firstChild.insertAdjacentElement('beforebegin', currentElm);\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    ctlProto.removeLayer = function (layer) {\r\n        const self = this;\r\n        const liCollection = self.getLayerUIElements();\r\n        for (var i = 0, len = liCollection.length; i < len; i++) {\r\n            const li = liCollection[i];\r\n            if (li.dataset.layerId === layer.id) {\r\n                li.parentElement.removeChild(li);\r\n                break;\r\n            }\r\n        }\r\n        if (self.getLayerUIElements().length === 0) {\r\n            self.div.querySelector('.' + self.CLASS + '-empty').classList.remove(Consts.classes.HIDDEN);\r\n        }\r\n    };\r\n\r\n    ctlProto.onErrorLayer = function (_layer) { };\r\n\r\n    ctlProto.getLayerUIElements = function () {\r\n        return this.div.querySelector('ul').children;\r\n    };\r\n\r\n    var isGetLegendGraphic = function (url) {\r\n        return /[&?]REQUEST=getLegendGraphic/i.test(url);\r\n    };\r\n\r\n    /*\r\n     * Carga y le da estilo a la imagen de la leyenda.\r\n     * @param {string} requestMethod Si queremos pedir la imagen de la leyenda por POST, podemos especificarlo utilizando el parámetro requestMethod.\r\n     */\r\n    ctlProto.styleLegendImage = function (img, layer) {\r\n        if (!img.getAttribute('src')) {\r\n            var imgSrc = img.dataset.img;\r\n\r\n            const proxificationTool = new Proxification(TC.proxify);\r\n\r\n            if (layer && layer.options.method && layer.options.method === \"POST\") {\r\n                layer.getLegendGraphicImage()\r\n                    .then(function (src) {\r\n                        img.src = src; // ya se ha validado en getLegendGraphicImage\r\n                    }).catch(function (err) {\r\n                        TC.error(err.statusText || err);\r\n                    });\r\n            } else {\r\n                if (isGetLegendGraphic(imgSrc)) {\r\n                    const watch = img.parentElement;\r\n                    // A\\u00f1adimos el par\\u00e1metro que define el estilo de los textos en la imagen\r\n                    var colorStr = watch.style.color;\r\n                    // Convertimos el color de formato rgb(r,g,b) a 0xRRGGBB\r\n                    var openIdx = colorStr.indexOf('(');\r\n                    var closeIdx = colorStr.indexOf(')');\r\n                    if (openIdx >= 0 && closeIdx > openIdx) {\r\n                        let color = colorStr\r\n                            .substr(0, closeIdx)\r\n                            .substr(openIdx + 1)\r\n                            .split(',');\r\n                        colorStr = '0x';\r\n                        for (var i = 0; i < 3; i++) {\r\n                            var component = parseInt(color[i]).toString(16);\r\n                            colorStr += component.length === 1 ? '0' + component : component;\r\n                        }\r\n                    }\r\n                    else {\r\n                        colorStr.replace('#', '0x');\r\n                    }\r\n                    imgSrc += '&LEGEND_OPTIONS=fontName:' + watch.style.fontFamily +\r\n                        ';fontSize:' + parseInt(watch.style.fontSize) +\r\n                        ';fontColor:' + colorStr +\r\n                        ';fontAntiAliasing:true';\r\n                    if (layer.params && layer.params.sld_body) {\r\n                        imgSrc = TC.Util.addURLParameters(imgSrc, { sld_body: layer.params.sld_body });\r\n                    }\r\n\r\n                    proxificationTool.fetchImage(imgSrc).then(function (img) {\r\n                        img.dataset.img = img.src;\r\n                    }).catch(function (err) {\r\n                        TC.error(err.statusText || err);\r\n                    });\r\n                }\r\n\r\n                proxificationTool.fetchImage(imgSrc).then(function (i) {\r\n                    img.src = i.src;\r\n                }).catch(function (err) {\r\n                    if (err.status && (err.status === 404 || err.status === 401))\r\n                        TC.error(TC.Util.getLocaleString(layer.map.options.locale, 'simbologyImgNotFound',\r\n                            { url: imgSrc }));\r\n                    else if (proxificationTool._image.ErrorType.UNEXPECTEDCONTENTTYPE === err.message) {\r\n                        TC.error(TC.Util.getLocaleString(layer.map.options.locale, 'simbologyNotCompatible'));\r\n                        //URI:Añado este atributo data para que no se intente obtener la leyenda cade vez que se cambia el zoom del mapa\r\n                        img.src = Consts.BLANK_IMAGE\r\n                    }\r\n                    else\r\n                        TC.error(err);\r\n                });                \r\n            }\r\n        }\r\n    };\r\n\r\n})();\r\n\r\nTC.control.MapContents = MapContents;\r\nexport default MapContents;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Proxification from '../tool/Proxification';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst MapInfo = function () {\r\n    var self = this;\r\n\r\n    Control.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(MapInfo, Control);\r\n\r\n(function () {\r\n    var ctlProto = MapInfo.prototype;\r\n\r\n    ctlProto.CLASS = 'tc-ctl-mi';\r\n\r\n    ctlProto.register = function (map) {\r\n        const self = this;\r\n\r\n        const result = Control.prototype.register.call(self, map);\r\n\r\n        self.QR_MAX_URL_LENGTH = 150;\r\n        self.SHORTEN_URL_LENGTH = 16000;\r\n\r\n        self.exportsState = false;\r\n\r\n        self.includeControls = self.options.includeControls === undefined || self.options.includeControls;\r\n\r\n        return result;\r\n    };\r\n\r\n    ctlProto.exportControlStates = function () {\r\n        const self = this;\r\n        if (self.map) {\r\n            return self.map.exportControlStates();\r\n        }\r\n        return [];\r\n    };\r\n\r\n    ctlProto.importControlStates = function (stateArray) {\r\n        const self = this;\r\n        if (self.map) {\r\n            self.map.importControlStates(stateArray);\r\n        }\r\n    };\r\n\r\n    ctlProto.exportState = function () {\r\n        const self = this;\r\n        if (self.exportsState) {\r\n            const state = {};\r\n            if (self.featureToShare || self.sharedFeaturesLayer) {\r\n                var layerState;\r\n                state.id = self.id;\r\n                if (self.featureToShare) {\r\n                    const featureToShare = self.featureToShare.clone();\r\n                    featureToShare.showsPopup = true;\r\n                    layerState = self.featureToShare.layer.exportState({\r\n                        features: [featureToShare]\r\n                    });\r\n                } else {\r\n                    layerState = self.sharedFeaturesLayer.exportState();\r\n                }\r\n                state.features = layerState.features;\r\n                if (layerState.crs) {\r\n                    state.crs = layerState.crs;\r\n                }\r\n            }\r\n            return state;\r\n        }\r\n        return null;\r\n    };\r\n\r\n    ctlProto.importState = function (state) {\r\n        const self = this;\r\n        if (self.map && state.features.length) {\r\n            self.map.addLayer({\r\n                id: self.getUID(),\r\n                owner: self,\r\n                type: Consts.layerType.VECTOR,\r\n                title: self.getLocaleString('foi'),\r\n                stealth: true\r\n            }).then(function (layer) {\r\n                self.sharedFeaturesLayer = layer;\r\n                layer.importState({ features: state.features, crs: state.crs }).then(function () {\r\n                    self.map.zoomToFeatures(layer.features);\r\n                });\r\n            });\r\n        }\r\n    };\r\n\r\n    ctlProto.manageMaxLengthExceed = function () {\r\n        throw \"Falta implementación del método manageMaxLengthExceed\";\r\n    };\r\n\r\n    ctlProto.generateLink = async function () {\r\n        var self = this;\r\n\r\n        var currentUrl = window.location.href;\r\n        var hashPosition = currentUrl.indexOf('#');\r\n        if (hashPosition > 0) {\r\n            currentUrl = currentUrl.substring(0, hashPosition);\r\n        }\r\n\r\n        if (self.extraParams) {\r\n            // Hacemos merge de parámetros de URL\r\n            var params = TC.Util.getQueryStringParams(currentUrl);\r\n            TC.Util.extend(params, self.extraParams);\r\n            var qsPosition = currentUrl.indexOf('?');\r\n            if (qsPosition >= 0) {\r\n                currentUrl = currentUrl.substring(0, qsPosition);\r\n            }\r\n            currentUrl = currentUrl.concat('?', TC.Util.getParamString(params));\r\n        }\r\n        else {\r\n            //eliminamos todos los paramaertos por querystring\r\n            var start = currentUrl.indexOf('?');\r\n\r\n            //Borramos los parámetros de la URL y dejamos sólo el hash\r\n            if (start > 0) {\r\n                currentUrl = currentUrl.replace(currentUrl.substring(start), '');\r\n            }\r\n        }       \r\n\r\n        const controlStates = self.includeControls ? self.exportControlStates() : [];\r\n        if (!self.includeControls && self.exportsState && (self.featureToShare || self.sharedFeaturesLayer || self.caller && self.caller.toShare)) {\r\n            if (self.caller && self.caller.toShare) {\r\n                controlStates.push(self.caller.exportState());\r\n            } else {\r\n                controlStates.push(self.exportState());\r\n            }\r\n        }\r\n        const extraStates = controlStates.length ? { ctl: controlStates } : undefined;\r\n\r\n        var hashState = await self.map.getMapState({ extraStates: extraStates, cacheResult: self.includeControls });\r\n\r\n        var url = currentUrl.concat(\"#\", hashState);\r\n        self.manageMaxLengthExceed({ browser: url.length > Consts.URL_MAX_LENGTH, qr: url.length > self.SHORTEN_URL_LENGTH });\r\n        return url;\r\n    };\r\n\r\n    ctlProto.shortenedLink = async function () {\r\n        const self = this;\r\n        var wait;\r\n\r\n        //const generateLinkWithoutParams = async function () {\r\n        //    var url = await self.generateLink();\r\n        //    var start = url.indexOf('?');\r\n        //    var end = url.indexOf('#');\r\n\r\n        //    //Borramos los parámetros de la URL y dejamos sólo el hash\r\n        //    if (start > 0) {\r\n        //        if (start < end) {\r\n        //            url = url.replace(url.substring(start, end), '');\r\n        //        } else {\r\n        //            url = url.replace(url.substring(start, url.length - 1), '');\r\n        //        }\r\n        //    }\r\n\r\n        //    return url;\r\n        //};\r\n        const shortenUrl = function (url) {\r\n            var shortenServiceUrl = \"https://tinyurl.com/api-create.php\";\r\n\r\n            var data = new FormData();\r\n            data.append(\"url\", url);\r\n\r\n            const proxificationTool = new Proxification(TC.proxify, { allowedMixedContent: false });\r\n            return proxificationTool.fetch(shortenServiceUrl, {\r\n                type: 'POST',\r\n                data: data\r\n            }).then(function (data) {\r\n                return data;\r\n            }).catch(function (_error) {\r\n                return null;\r\n            });\r\n        };\r\n\r\n        const onError = function () {\r\n            self.map.toast(self.getLocaleString(\"urlTooLongForShortener\"), { type: Consts.msgType.ERROR });\r\n            self.map.getLoadingIndicator().removeWait(wait);\r\n            return \"\";\r\n        };\r\n\r\n        const url = await self.generateLink();\r\n        if (url.length > self.QR_MAX_URL_LENGTH && url.length < self.SHORTEN_URL_LENGTH) {\r\n\r\n            wait = self.map.getLoadingIndicator().addWait();\r\n\r\n            const response = await shortenUrl(url);\r\n            if (response && response.responseText) {\r\n                self.map.getLoadingIndicator().removeWait(wait);\r\n                return response.responseText.replace('http://', 'https://');\r\n            } else {\r\n                return onError();\r\n            }\r\n        } else {\r\n            if (url.length >= self.SHORTEN_URL_LENGTH) {\r\n                return onError();\r\n            }\r\n\r\n            return \"\";\r\n        }\r\n    };\r\n\r\n    ctlProto.makeQRCode = async function (codeContainer, width) {\r\n        const self = this;\r\n        const modulePromise = import('qrcode');\r\n        const url = await self.shortenedLink() || '';\r\n        if (url.length > 0) {\r\n            const options = {\r\n                text: url,\r\n                margin: 2\r\n            };\r\n\r\n            if (width) {\r\n                options.width = width;\r\n            }\r\n\r\n            codeContainer.innerHTML = '';\r\n            const img = document.createElement('img');\r\n            const QRCode = (await modulePromise).default;\r\n            img.src = await QRCode.toDataURL(url, options);\r\n            codeContainer.appendChild(img);\r\n            return img.src;\r\n        }\r\n    };\r\n\r\n    ctlProto.drawScaleBarIntoCanvas = function (options) {\r\n        const self = this;\r\n        var canvas;\r\n        var sb = self.map.getControlsByClass(TC.control.ScaleBar);\r\n        if (sb.length === 0) {\r\n            return null;\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        const drawFill = function (ctx, width, height) {\r\n            var elem = document.getElementsByClassName(sb[0].CLASS);\r\n            var fillnode = elem.item(0);\r\n            var fillBoundingCR = TC.Util.extend({}, fillnode.getBoundingClientRect());\r\n\r\n            fillBoundingCR.left = (options.left || 15) - 2;\r\n\r\n            fillBoundingCR.top = options.top || 15;\r\n            fillBoundingCR.top--;\r\n\r\n            ctx.globalAlpha = 0.5;\r\n            ctx.fillStyle = window.getComputedStyle(fillnode).backgroundColor;\r\n            width += 4;\r\n            height += 4;\r\n            ctx.fillRect(fillBoundingCR.left, fillBoundingCR.top, width, height);\r\n        };\r\n\r\n        if (!options.canvas) {\r\n            canvas = document.createElement('CANVAS');\r\n        } else {\r\n            canvas = options.canvas;\r\n        }\r\n\r\n        var ctx = canvas.getContext(\"2d\");\r\n        ctx.save();\r\n\r\n        var elem = document.getElementsByClassName(\"ol-scale-line-inner\");\r\n        var node = elem.item(0);\r\n        var boundingCR = TC.Util.extend({}, node.getBoundingClientRect());\r\n\r\n        var text = node.textContent;\r\n\r\n        ctx.beginPath();\r\n        ctx.strokeStyle = window.getComputedStyle(node).borderColor;\r\n\r\n        var width, height;\r\n\r\n        if (boundingCR.width > boundingCR.height) {\r\n\r\n            width = boundingCR.width;\r\n            height = boundingCR.height;\r\n        }\r\n        else {\r\n\r\n            width = boundingCR.height;\r\n            height = boundingCR.width;\r\n        }\r\n\r\n        if (options.setSize) {\r\n            canvas.width = width;\r\n            canvas.height = height;\r\n        }\r\n\r\n        boundingCR.left = options.left !== undefined ? options.left : 15;\r\n        boundingCR.top = options.top !== undefined ? options.top : 15;\r\n\r\n        ctx.moveTo(boundingCR.left, boundingCR.top);\r\n        ctx.lineTo(boundingCR.left, boundingCR.top + height);\r\n        ctx.lineTo(boundingCR.left + width, boundingCR.top + height);\r\n        ctx.lineTo(boundingCR.left + width, boundingCR.top);\r\n\r\n        ctx.stroke();\r\n\r\n        var textPosition = {\r\n            x: boundingCR.left + width / 2,\r\n            y: boundingCR.top + height / 2\r\n        };\r\n\r\n        if (options.fill) {\r\n            drawFill(ctx, width, height);\r\n        }\r\n\r\n        ctx.globalAlpha = 1.0;\r\n        ctx.fillStyle = options.textColor !== undefined ? options.textColor : window.getComputedStyle(node).color;\r\n\r\n        ctx.font = options.font !== undefined ? options.font : window.getComputedStyle(node).fontSize + \" \" + window.getComputedStyle(node).fontFamily;\r\n        ctx.textAlign = \"center\";\r\n        ctx.textBaseline = \"middle\";\r\n        ctx.fillText(text, textPosition.x, textPosition.y);\r\n\r\n        return canvas;\r\n    };\r\n\r\n    ctlProto.registerListeners = function () {\r\n        const self = this;\r\n        if (!self.registeredListeners) {\r\n            let handlerTimeout;\r\n            const handler = function (_e) {\r\n                clearTimeout(handlerTimeout);\r\n                // generateLink puede ser tardar mucho, así que no lo llamamos innecesariamente cuando se están cargando varias features\r\n                handlerTimeout = setTimeout(function () {\r\n                    delete self.map._controlStatesCache;\r\n                    self.renderPromise().then(function () {\r\n                        self.generateLink();\r\n                    });\r\n                }, 100);\r\n            };\r\n            self.map.on(Consts.event.LAYERADD, handler)\r\n                .on(Consts.event.LAYERREMOVE, handler)\r\n                .on(Consts.event.FEATUREADD, handler)\r\n                .on(Consts.event.FEATUREREMOVE + ' ' + Consts.event.FEATURESCLEAR, handler);\r\n\r\n            self.registeredListeners = true;\r\n        }\r\n    };\r\n\r\n})();\r\n\r\nTC.control.MapInfo = MapInfo;\r\nexport default MapInfo;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport './Draw';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst Measure = function () {\r\n    var self = this;\r\n\r\n    Control.apply(self, arguments);\r\n    self.snapping = self.options.snapping;\r\n\r\n    self.drawControls = [];\r\n    self.persistentDrawControls = false;\r\n    self.NOMEASURE = '-';\r\n\r\n    self.exportsState = true;\r\n\r\n    this.renderPromise().then(function () {\r\n        self.measureMode = self.options.mode;\r\n\r\n        self.history = [];\r\n        self.historyIndex = 0;\r\n        self.reset = true;\r\n\r\n        self.wrap = new TC.wrap.control.Measure(self);\r\n    });\r\n};\r\n\r\nTC.inherit(Measure, Control);\r\n\r\n(function () {\r\n    var ctlProto = Measure.prototype;\r\n\r\n    ctlProto.CLASS = 'tc-ctl-meas';\r\n\r\n    ctlProto.loadTemplates = async function () {\r\n        const self = this;\r\n        const module = await import('../templates/tc-ctl-meas.mjs');\r\n        self.template = module.default;\r\n    };\r\n\r\n    ctlProto.render = function (callback) {\r\n        const self = this;\r\n        return self._set1stRenderPromise(Control.prototype.renderData.call(self, {\r\n            controlId: self.id,\r\n            displayElevation: self.options.displayElevation,\r\n            singleSketch: !self.persistentDrawControls,\r\n            extensibleSketch: self.persistentDrawControls,\r\n            stylable: self.persistentDrawControls\r\n        }, function () {\r\n            if (self.options.mode) {\r\n                self.div.querySelector('.tc-ctl-meas-select').classList.add(Consts.classes.HIDDEN);\r\n            }\r\n\r\n            self.lineMeasurementControl = self.div.querySelector('sitna-measurement[mode=\"polyline\"]')\r\n            self.polygonMeasurementControl = self.div.querySelector('sitna-measurement[mode=\"polygon\"]')\r\n            self.lineMeasurementControl.containerControl = self;\r\n            self.lineMeasurementControl.displayElevation = self.options.displayElevation;\r\n            self.polygonMeasurementControl.containerControl = self;\r\n\r\n            self.div.querySelectorAll(`.${Measure.prototype.CLASS}-select sitna-tab`).forEach(function (tab) {\r\n                tab.callback = function () {\r\n                    const target = this.target;\r\n                    if (target) {\r\n                        self.setMode(target.id.substr(target.id.indexOf('-mode-') + 6), true);\r\n                    }\r\n                };\r\n            });\r\n\r\n            if (TC.Util.isFunction(callback)) {\r\n                callback();\r\n            }\r\n        }));\r\n    };\r\n\r\n    ctlProto.register = async function (map) {\r\n        const self = this;\r\n        await Control.prototype.register.call(self, map);\r\n        self.map.on(Consts.event.VIEWCHANGE, function () {\r\n            if (self.map.view === Consts.view.PRINTING) {\r\n                self.trigger(Consts.event.DRAWEND);\r\n            }\r\n        });\r\n\r\n        const layerId = self.getUID();\r\n        const drawLinesId = self.getUID();\r\n        const drawPolygonsId = self.getUID();\r\n\r\n        self.units = self.options.units ? self.options.units : [\"m\", \"km\"];\r\n\r\n        if (self.options.layerLess) {\r\n            self.layerPromise = Promise.resolve(null);\r\n        }\r\n        else {\r\n            self.layerPromise = map.addLayer({\r\n                id: layerId,\r\n                title: self.getLocaleString('measure'),\r\n                owner: self,\r\n                stealth: true,\r\n                type: Consts.layerType.VECTOR,\r\n                styles: {\r\n                    point: map.options.styles.point,\r\n                    line: map.options.styles.line,\r\n                    polygon: map.options.styles.polygon\r\n                }\r\n            });\r\n        }\r\n        self.layer = await self.layerPromise;\r\n        await self.renderPromise();\r\n        if (self.layer) {\r\n            map.putLayerOnTop(self.layer);\r\n        }\r\n\r\n        const controls = await Promise.all([self.getLineDrawControl(), self.getPolygonDrawControl()]);\r\n        self.lineDrawControl = controls[0];\r\n        self.polygonDrawControl = controls[1];\r\n        self.lineDrawControl.id = drawLinesId;\r\n        self.polygonDrawControl.id = drawPolygonsId;\r\n        self.lineDrawControl.setLayer(self.layer);\r\n        self.polygonDrawControl.setLayer(self.layer);\r\n        self.lineDrawControl.snapping = self.snapping;\r\n        self.polygonDrawControl.snapping = self.snapping;\r\n        controls.forEach(function (ctl) {\r\n            ctl.containerControl = self;\r\n            self.drawControls.push(ctl);\r\n            ctl\r\n                .on(Consts.event.DRAWSTART, function (_e) {\r\n                    self.resetValues();\r\n                })\r\n                .on(Consts.event.MEASURE + ' ' + Consts.event.MEASUREPARTIAL, function (e) {\r\n                    self.displayMeasurements(e);\r\n                })\r\n                .on(Consts.event.DRAWCANCEL, function (_e) {\r\n                    // Alerta de condición de carrera si no ponemos un timeout:\r\n                    // 1- Se llama a cancel de un control Draw.\r\n                    // 2- Se llama a deactivate (como es mediante cancel, no se se corta la cadena de activación controles).\r\n                    // 3- Si el control activo anterior era otro de los modos de dibujo de Measure, se activa.\r\n                    // 4- Se llama a cancel desde aquí.\r\n                    // 5- Se llama a deactivate del control que acabamos de activar en 3.\r\n                    // El activate de 3 y el deactivate de 5 sobre el mismo control entran en condición de carrera al crear/destruir la interaction\r\n                    // por tanto se puede quedar en un estado inconsistente. Para evitar eso, separamos 3 de 5 por el siguiente timeout.\r\n                    setTimeout(function () {\r\n                        self.cancel();\r\n                    }, 100);\r\n                });\r\n            // Desactivamos el método exportState que ya se encarga el control padre de ello\r\n            ctl.exportsState = false;\r\n        });\r\n\r\n        self.setMode(self.options.mode);\r\n        return self;\r\n    };\r\n\r\n    ctlProto.displayMode = function (mode) {\r\n        const self = this;\r\n\r\n        const modes = [];\r\n        self.div.querySelectorAll('.tc-ctl-meas-mode').forEach(function (elm) {\r\n            modes.push(elm);\r\n        });\r\n        switch (mode) {\r\n            case Consts.geom.POLYLINE:\r\n                self._activeMode = modes.find(function (elm) {\r\n                    return elm.matches('.tc-ctl-meas-len');\r\n                });\r\n                break;\r\n            case Consts.geom.POLYGON:\r\n                self._activeMode = modes.find(function (elm) {\r\n                    return elm.matches('.tc-ctl-meas-area');\r\n                });\r\n                break;\r\n            case null:\r\n            case undefined:\r\n                self._activeMode = null;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        const hiddenModes = modes.filter(function (elm) {\r\n            return elm !== self._activeMode;\r\n        });\r\n\r\n        if (mode) {\r\n            const tab = self.div.querySelector(`sitna-tab[group=\"${self.id}-mode\"][for=\"${self.id}-mode-${mode}\"]`);\r\n            tab.selected = true;\r\n        }\r\n        else {\r\n            self.div.querySelectorAll(`sitna-tab[group=\"${self.id}-mode\"]`).forEach(function (tab) {\r\n                tab.selected = false;\r\n            });\r\n        }\r\n        if (self._activeMode) {\r\n            self._activeMode.classList.remove(Consts.classes.HIDDEN);\r\n            self._activeMode.querySelector('.tc-ctl').classList.remove(Consts.classes.COLLAPSED);\r\n        }\r\n        hiddenModes.forEach(function (elm) {\r\n            elm.classList.add(Consts.classes.HIDDEN);\r\n        });\r\n        return self;\r\n    };\r\n\r\n    ctlProto.setMode = function (mode) {\r\n        const self = this;\r\n\r\n        self.mode = mode;\r\n        self.displayMode(mode);\r\n\r\n        var event;\r\n        switch (mode) {\r\n            case Consts.geom.POLYLINE:\r\n                self.lineDrawControl.activate();\r\n                event = Consts.event.CONTROLACTIVATE;\r\n                break;\r\n            case Consts.geom.POLYGON:\r\n                self.polygonDrawControl.activate();\r\n                event = Consts.event.CONTROLACTIVATE;\r\n                break;\r\n            case null:\r\n            case undefined:\r\n                self.drawControls.forEach(function (ctl) {\r\n                    if (ctl.isActive) {\r\n                        ctl.deactivate();\r\n                    }\r\n                });\r\n                event = Consts.event.CONTROLDEACTIVATE;\r\n                break;\r\n            default:\r\n                event = Consts.event.CONTROLACTIVATE;\r\n                break;\r\n        }\r\n\r\n        self.resetValues();\r\n\r\n        if (event && self.map) {\r\n            self.map.trigger(event, { control: self });\r\n        }\r\n    };\r\n\r\n    ctlProto.cancel = function () {\r\n        this.setMode(null, false);\r\n        return this;\r\n    };\r\n\r\n    ctlProto.displayMeasurements = function (options) {\r\n        const self = this;\r\n        options = options || {};\r\n        if (Object.prototype.hasOwnProperty.call(options, 'area')) {\r\n            self.polygonMeasurementControl.displayMeasurement(options);\r\n        }\r\n        if (Object.prototype.hasOwnProperty.call(options, 'length')) {\r\n            self.lineMeasurementControl.displayMeasurement(options);\r\n        }\r\n        return self;\r\n    };\r\n\r\n    ctlProto.getLineMeasurementControl = async function () {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        return self.div.querySelector('sitna-measurement[mode=\"polyline\"]');\r\n    };\r\n\r\n    ctlProto.getPolygonMeasurementControl = async function () {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        return self.div.querySelector('sitna-measurement[mode=\"polygon\"]');\r\n    };\r\n\r\n    ctlProto.resetValues = function () {\r\n        const self = this;\r\n        self.getLineMeasurementControl().then(ctl => ctl.clearMeasurement());\r\n        self.getPolygonMeasurementControl().then(ctl => ctl.clearMeasurement());\r\n        return self;\r\n    };\r\n\r\n    ctlProto.getDrawLines = function () {\r\n\r\n    };\r\n\r\n    ctlProto.getLayer = function () {\r\n        const self = this;\r\n        if (self.layer) {\r\n            return Promise.resolve(self.layer);\r\n        }\r\n        return self.layerPromise;\r\n    };\r\n\r\n    ctlProto.setLayer = async function (layer) {\r\n        const self = this;\r\n        self.layer = layer;\r\n        for await (const control of [self.getLineDrawControl(), self.getPolygonDrawControl()]) {\r\n            control.setLayer(self.layer);\r\n        }\r\n    };\r\n\r\n    ctlProto.getLineDrawControl = async function () {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        return self.div.querySelector('.tc-ctl-meas-len sitna-draw');\r\n    };\r\n\r\n    ctlProto.getPolygonDrawControl = async function () {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        return self.div.querySelector('.tc-ctl-meas-area sitna-draw');\r\n    };\r\n\r\n    ctlProto.exportState = function () {\r\n        const self = this;\r\n        if (self.exportsState && self.layer) {\r\n            return {\r\n                id: self.id,\r\n                layer: self.layer.exportState()\r\n            };\r\n        }\r\n        return null;\r\n    };\r\n\r\n    ctlProto.importState = function (state) {\r\n        const self = this;\r\n        self.layerPromise.then(function (layer) {\r\n            layer.importState(state.layer);\r\n        });\r\n    };\r\n\r\n})();\r\n\r\nTC.control.Measure = Measure;\r\nexport default Measure;","import WebComponentControl from './WebComponentControl';\r\nimport TC from '../../TC';\r\nimport Feature from '../../SITNA/feature/Feature';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\nimport Cfg from '../Cfg';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst elementName = 'sitna-measurement';\r\n\r\nclass Measurement extends WebComponentControl {\r\n\r\n    static units = {\r\n        m: { weight: 0, abbr: \"m²\" },\r\n        dam: { weight: 1, abbr: \"dam²\", precision: 2 },\r\n        hm: { weight: 2, abbr: \"hm²\", precision: 2 },\r\n        ha: { weight: 2, abbr: \"ha\", precision: 3 },\r\n        km: { weight: 3, abbr: \"km²\", precision: 3 }\r\n    };\r\n\r\n    NOMEASURE = '-';\r\n\r\n    #c1Value;\r\n    #c1Text;\r\n    #c2Value;\r\n    #c2Text;\r\n    #elevationText;\r\n    #elevationValue;\r\n    #lengthValue;\r\n    #perimeterValue;\r\n    #areaValue;\r\n    #profileButton;\r\n    #measurementData;\r\n\r\n    constructor() {\r\n        super(...arguments);\r\n        const self = this;\r\n        self\r\n            .initProperty('enabledProfile')\r\n            .initProperty('mode')\r\n            .initProperty('units');\r\n    }\r\n\r\n    static get observedAttributes() {\r\n        return ['mode', 'enabled-profile'];\r\n    }\r\n\r\n    attributeChangedCallback(name, oldValue, newValue) {\r\n        if (oldValue === newValue) {\r\n            return;\r\n        }\r\n        const self = this;\r\n        if (name === 'enabled-profile') {\r\n            self.#onEnabledProfileChange();\r\n        }\r\n        if (name === 'mode') {\r\n            self.#onModeChange();\r\n        }\r\n    }\r\n\r\n    getClassName() {\r\n        return 'tc-ctl-msmt';\r\n    }\r\n\r\n    get enabledProfile() {\r\n        return this.hasAttribute('enabled-profile');\r\n    }\r\n\r\n    set enabledProfile(value) {\r\n        this.toggleAttribute('enabled-profile', !!value);\r\n    }\r\n\r\n    #onEnabledProfileChange() {\r\n        this.render();\r\n    }\r\n\r\n    get mode() {\r\n        return this.getAttribute('mode');\r\n    }\r\n\r\n    set mode(value) {\r\n        if (value) {\r\n            this.setAttribute('mode', value);\r\n        }\r\n        else {\r\n            this.removeAttribute('mode');\r\n        }\r\n    }\r\n\r\n    #onModeChange() {\r\n        this.render();\r\n    }\r\n\r\n    setMode(value) {\r\n        const self = this;\r\n        return new Promise(function (resolve, _reject) {\r\n            const oldMode = self.mode;\r\n            if (oldMode === value) {\r\n                self.renderPromise().then(() => resolve(value));\r\n            }\r\n            self.mode = value;\r\n            self.render().then(() => resolve(value));\r\n        });\r\n    }\r\n\r\n    get units() {\r\n        const self = this;\r\n        const attributeValue = self.getAttribute('units');\r\n        if (attributeValue) {\r\n            return attributeValue.split(',');\r\n        }\r\n        return [\"m\", \"km\"];\r\n    }\r\n\r\n    set units(value) {\r\n        const self = this;\r\n        if (Array.isArray(value)) {\r\n            self.setAttribute('units', value.join());\r\n        }\r\n        else {\r\n            self.setAttribute('units', value);\r\n        }\r\n    }\r\n\r\n    async loadTemplates() {\r\n        const self = this;\r\n        const module = await import('../templates/tc-ctl-msmt.mjs');\r\n        self.template = module.default;\r\n    }\r\n\r\n    render(callback) {\r\n        const self = this;\r\n        const dataObj = {\r\n            enabledProfile: self.enabledProfile\r\n        };\r\n        const mode = self.mode;\r\n        if (mode) {\r\n            dataObj[mode] = true;\r\n        }\r\n        return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n            self.renderData(dataObj, function () {\r\n                self.#c1Text = self.querySelector(`.${self.CLASS}-val-coord-1-t`);\r\n                self.#c1Value = self.querySelector(`.${self.CLASS}-val-coord-1-v`);\r\n                self.#c2Text = self.querySelector(`.${self.CLASS}-val-coord-2-t`);\r\n                self.#c2Value = self.querySelector(`.${self.CLASS}-val-coord-2-v`);\r\n                self.#elevationText = self.querySelector(`.${self.CLASS}-val-coord-ele-t`);\r\n                self.#elevationValue = self.querySelector(`.${self.CLASS}-val-coord-ele-v`);\r\n                self.#lengthValue = self.querySelector(`.${self.CLASS}-val-len`);\r\n                self.#areaValue = self.querySelector(`.${self.CLASS}-val-area`);\r\n                self.#perimeterValue = self.querySelector(`.${self.CLASS}-val-peri`);\r\n                self.#profileButton = self.querySelector('sitna-toggle.tc-ctl-msmt-prof-btn');\r\n                self.addUIEventListeners();\r\n                self.clearMeasurement();\r\n                if (typeof callback === 'function') {\r\n                    callback();\r\n                }\r\n                resolve();\r\n            });\r\n        }));\r\n    }\r\n\r\n    addUIEventListeners() {\r\n        const self = this;\r\n        self.#profileButton?.addEventListener('change', function (e) {\r\n            const containerControl = self.containerControl;\r\n            if (e.target.checked) {\r\n                containerControl.activateElevationProfile();\r\n                e.target.setAttribute('text', self.getLocaleString('deactivateElevationProfile'));\r\n            }\r\n            else {\r\n                containerControl.deactivateElevationProfile();\r\n                e.target.setAttribute('text', self.getLocaleString('activateElevationProfile'));\r\n            }\r\n        }, { passive: true });\r\n    }\r\n\r\n    getFeatureMeasurementData(feature) {\r\n        const self = this;\r\n        const result = {\r\n            units: 'm'\r\n        };\r\n        const measureOptions = {\r\n            crs: self.map.options.utmCrs\r\n        };\r\n        switch (true) {\r\n            case feature instanceof Polygon:\r\n            case feature instanceof MultiPolygon:\r\n                result.area = feature.getArea(measureOptions);\r\n                result.perimeter = feature.getLength(measureOptions);\r\n                break;\r\n            case feature instanceof Polyline:\r\n            case feature instanceof MultiPolyline:\r\n                result.length = feature.getLength(measureOptions);\r\n                break;\r\n            case feature instanceof Point:\r\n                result.coordinates = feature.geometry;\r\n                result.units = self.map.wrap.isGeo() ? 'degrees' : 'm';\r\n                break;\r\n            case feature instanceof MultiPoint:\r\n                result.coordinates = feature.geometry[0];\r\n                result.units = self.map.wrap.isGeo() ? 'degrees' : 'm';\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return result;\r\n    }\r\n\r\n    setFeatureMeasurementData(feature) {\r\n        const self = this;\r\n        const data = {};\r\n        switch (true) {\r\n            case feature instanceof Point: {\r\n                const firstCoordText = self.#measurementData.coord1Text;\r\n                const secondCoordText = self.#measurementData.coord2Text;\r\n                const elevationText = self.#measurementData.elevationText;\r\n                if (Object.prototype.hasOwnProperty.call(self.#measurementData, \"coord1\") &&\r\n                    Object.prototype.hasOwnProperty.call(self.#measurementData, \"coord2\")) {\r\n                    data.CRS = self.map.getCRS();\r\n                    data[firstCoordText.substr(0, firstCoordText.indexOf(':'))] = self.#measurementData.coord1;\r\n                    data[secondCoordText.substr(0, secondCoordText.indexOf(':'))] = self.#measurementData.coord2;\r\n                    if (elevationText) {\r\n                        data[self.getLocaleString('ele')] = self.#measurementData.elevation;\r\n                    }\r\n                    feature.setData(data);\r\n                }\r\n                break;\r\n            }\r\n            case feature instanceof Polyline:\r\n                if (Object.prototype.hasOwnProperty.call(self.#measurementData, \"length\")) {                    \r\n                    data[self.getLocaleString('2dLength')] = self.#measurementData.length;\r\n                    feature.setData(data);\r\n                }\r\n                break;\r\n            case feature instanceof Polygon:\r\n                if (Object.prototype.hasOwnProperty.call(self.#measurementData, \"area\") &&\r\n                    Object.prototype.hasOwnProperty.call(self.#measurementData, \"perimeter\")) {\r\n                    data[self.getLocaleString('area')] = self.#measurementData.area;\r\n                    data[self.getLocaleString('2dPerimeter')] = self.#measurementData.perimeter;                    \r\n                    feature.setData(data);\r\n                }\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return self;\r\n    }\r\n\r\n    displayMeasurement(featureOrOptions) {\r\n        const self = this;\r\n        let options = featureOrOptions;\r\n        let mode;\r\n        let precision;\r\n        let feature;\r\n        if (featureOrOptions instanceof Feature) {\r\n            feature = featureOrOptions;\r\n            options = self.getFeatureMeasurementData(featureOrOptions);\r\n        }\r\n        self.currentFeature = feature;\r\n        self.#measurementData = {};\r\n        let units = options.units;\r\n        if (options.coordinates) {\r\n            mode = Consts.geom.POINT;\r\n            const round = function (val, precision) {\r\n                const factor = Math.pow(10, precision);\r\n                return Math.round(val * factor) / factor;\r\n            };\r\n            if (units === 'm') {\r\n                precision = Consts.METER_PRECISION;\r\n                self.#measurementData.coord1 = options.coordinates[0];\r\n                self.#measurementData.coord2 = options.coordinates[1];\r\n                self.#measurementData.coord1Text = 'x: ';\r\n                self.#measurementData.coord2Text = 'y: ';\r\n            }\r\n            else {\r\n                precision = Consts.DEGREE_PRECISION;\r\n                self.#measurementData.coord1 = options.coordinates[1];\r\n                self.#measurementData.coord2 = options.coordinates[0];\r\n                self.#measurementData.coord1Text = 'lat: ';\r\n                self.#measurementData.coord2Text = 'lon: ';\r\n            }\r\n            self.#measurementData.coord1 = round(self.#measurementData.coord1, precision);\r\n            self.#measurementData.coord2 = round(self.#measurementData.coord2, precision);\r\n\r\n            if (options.coordinates.length > 2) {\r\n                self.#measurementData.elevation = Math.round(options.coordinates[2]);\r\n                self.#measurementData.elevationText = self.getLocaleString('ele').toLowerCase() + ': ';\r\n            }\r\n        }\r\n        else if (Object.prototype.hasOwnProperty.call(options, 'area')) {\r\n            mode = Consts.geom.POLYGON;\r\n            self.#measurementData.area = options.area;\r\n            self.#measurementData.perimeter = options.perimeter;\r\n        }\r\n        else {\r\n            mode = Consts.geom.POLYLINE;\r\n            self.#measurementData.length = options.length;\r\n        }\r\n        self.setMode(mode).then(function () {\r\n            const locale = self.map.options.locale || Cfg.locale;\r\n            if (mode === Consts.geom.POLYGON) {\r\n                let area = self.#measurementData.area;\r\n                self.units.forEach(function (unit, _index, array) {\r\n                    const key = unit.trim();\r\n                    const weightDiff = Measurement.units[key].weight - Measurement.units.m.weight;\r\n                    let precision = Measurement.units[key].precision ? Measurement.units[key].precision : 0;\r\n                    if (array.length === 1 ||\r\n                        area >= Math.pow(100, weightDiff) / Math.pow(10, precision ? precision - 1 : precision)) {\r\n                        self.#areaValue.innerHTML = Util.formatNumber((area / Math.pow(100, weightDiff)).toFixed(precision), locale) +\r\n                            ' ' + Measurement.units[unit].abbr;\r\n                    }\r\n                });\r\n                let perimeter = self.#measurementData.perimeter;\r\n                if (perimeter > 1000) {\r\n                    perimeter = perimeter / 1000;\r\n                    units = 'km';\r\n                }\r\n                precision = units === 'm' ? 0 : 3;\r\n                self.#perimeterValue.innerHTML = Util.formatNumber(perimeter.toFixed(precision), locale) + ' ' + units;\r\n            }\r\n            else if (mode === Consts.geom.POLYLINE) {\r\n                let length = self.#measurementData.length;\r\n                if (length > 1000) {\r\n                    length = length / 1000;\r\n                    units = 'km';\r\n                }\r\n                precision = units === 'm' ? 0 : 3;\r\n                self.#lengthValue.innerHTML = Util.formatNumber(length.toFixed(precision), locale) + ' ' + units;\r\n            }\r\n            else if (mode === Consts.geom.POINT) {\r\n                self.#c1Text.innerHTML = self.#measurementData.coord1Text;\r\n                self.#c2Text.innerHTML = self.#measurementData.coord2Text;\r\n                self.#c1Value.innerHTML = Util.formatNumber(self.#measurementData.coord1.toFixed(precision), locale);\r\n                self.#c1Value.dataset.value = self.#measurementData.coord1;\r\n                self.#c2Value.innerHTML = Util.formatNumber(self.#measurementData.coord2.toFixed(precision), locale);\r\n                self.#c2Value.dataset.value = self.#measurementData.coord2;\r\n                if (Object.prototype.hasOwnProperty.call(self.#measurementData, 'elevation')) {\r\n                    self.#elevationText.innerHTML = self.#measurementData.elevationText;\r\n                    self.#elevationValue.innerHTML = Util.formatNumber(self.#measurementData.elevation.toFixed(Consts.METER_PRECISION), locale) + ' m';\r\n                    self.#elevationValue.dataset.value = self.#measurementData.elevation;\r\n                }\r\n                else {\r\n                    self.#elevationText.innerHTML = '';\r\n                    self.#elevationValue.innerHTML = '';\r\n                    self.#elevationValue.dataset.value = '';\r\n                }\r\n            }\r\n        });\r\n        return self;\r\n    }\r\n\r\n    getFormattedCoordinates() {\r\n\r\n    }\r\n\r\n    clearMeasurement() {\r\n        const self = this;\r\n        if (self.#c1Value) {\r\n            self.#c1Value.innerHTML = self.NOMEASURE;\r\n        }\r\n        if (self.#c2Value) {\r\n            self.#c2Value.innerHTML = self.NOMEASURE;\r\n        }\r\n        if (self.#elevationText) {\r\n            self.#elevationText.innerHTML = '';\r\n        }\r\n        if (self.#elevationValue) {\r\n            self.#elevationValue.innerHTML = '';\r\n        }\r\n        if (self.#lengthValue) {\r\n            self.#lengthValue.innerHTML = self.NOMEASURE;\r\n        }\r\n        if (self.#perimeterValue) {\r\n            self.#perimeterValue.innerHTML = self.NOMEASURE;\r\n        }\r\n        if (self.#areaValue) {\r\n            self.#areaValue.innerHTML = self.NOMEASURE;\r\n        }\r\n\r\n    }\r\n\r\n    clear() {\r\n        this.mode = null;\r\n    }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, Measurement);\r\nTC.control.Measurement = Measurement;\r\nexport default Measurement;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\nimport './FeatureStyler';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.BEFOREFEATUREMODIFY = \"beforefeaturemodify.tc\";\r\nConsts.event.FEATUREMODIFY = \"featuremodify.tc\";\r\nConsts.event.FEATURESSELECT = \"featuresselect.tc\";\r\nConsts.event.FEATURESUNSELECT = \"featuresunselect.tc\";\r\nConsts.event.CHANGE = 'change';\r\n\r\n//const styleFunction = function (feature, mapStyles) {\r\n//    var result;\r\n//    switch (true) {\r\n//        case feature instanceof Polygon:\r\n//        case feature instanceof MultiPolygon:\r\n//            result = TC.Util.extend({}, mapStyles.polygon);\r\n//            break;\r\n//        case feature instanceof Point:\r\n//        case feature instanceof MultiPoint:\r\n//            result = TC.Util.extend({}, mapStyles.point);\r\n//            break;\r\n//        default:\r\n//            result = TC.Util.extend({}, mapStyles.line);\r\n//            break;\r\n//    }\r\n//    const style = feature.getStyle();\r\n//    if (style.label) {\r\n//        result.label = style.label;\r\n//        result.fontSize = style.fontSize;\r\n//        result.fontColor = style.fontColor;\r\n//        result.labelOutlineColor = style.labelOutlineColor;\r\n//        result.labelOutlineWidth = style.labelOutlineWidth;\r\n//    }\r\n//    return result;\r\n//};\r\n\r\n//const setFeatureSelectedStyle = function (ctl, features) {\r\n//    const mapStyles = ctl.map.options.styles.selection;\r\n//    features.forEach(function (feature) {\r\n//        feature._originalStyle = TC.Util.extend({}, feature.getStyle());\r\n//        feature.setStyle(ctl.styleFunction(feature));\r\n//    });\r\n//};\r\n\r\n//const setFeatureUnselectedStyle = function (ctl, features) {\r\n//    features.forEach(function (feature) {\r\n//        if (feature._originalStyle) {\r\n//            const style = feature.getStyle();\r\n//            if (style.label) {\r\n//                const originalStyle = feature._originalStyle;\r\n//                originalStyle.label = style.label;\r\n//                originalStyle.fontSize = style.fontSize;\r\n//                originalStyle.fontColor = style.fontColor;\r\n//                originalStyle.labelOutlineColor = style.labelOutlineColor;\r\n//                originalStyle.labelOutlineWidth = style.labelOutlineWidth;\r\n//            }\r\n//            feature.setStyle(feature._originalStyle);\r\n//            feature._originalStyle = undefined;\r\n//        }\r\n//    })\r\n//};\r\n\r\nconst complexGeometryFilter = function (elm) {\r\n    var result = false;\r\n    if (elm instanceof MultiPolygon || elm instanceof MultiPolyline) {\r\n        if (elm.geometry.length > 1) {\r\n            result = true;\r\n        }\r\n    }\r\n    return result;\r\n};\r\n\r\nconst vertexGeometryFilter = function (elm) {\r\n    return elm instanceof Polygon ||\r\n        elm instanceof Polyline ||\r\n        elm instanceof MultiPolygon ||\r\n        elm instanceof MultiPolyline;\r\n};\r\n\r\nconst className = 'tc-ctl-mod';\r\nconst elementName = 'sitna-modify';\r\n\r\nclass Modify extends WebComponentControl {\r\n    CLASS = className;\r\n    #classSelector = '.' + className;\r\n    #deleteBtn;\r\n    #selectBtn;\r\n    #deleteVertexBtn;\r\n    #editAttrBtn;\r\n    #attributesSection;\r\n    #joinBtn;\r\n    #splitBtn;\r\n    #textBtn;\r\n    #textInput;\r\n    #fontColorPicker;\r\n    #labelSection;\r\n    #styler;\r\n    #fontSizeSelector;\r\n    #layerPromise;\r\n\r\n    static mode = {\r\n        SELECT: 'select',\r\n        VERTEX_DELETE: 'vertex_delete'\r\n    };\r\n\r\n    constructor() {\r\n        super(...arguments);\r\n        const self = this;\r\n\r\n        self.wrap = new TC.wrap.control.Modify(self);\r\n        self\r\n            .initProperty('mode')\r\n            .initProperty('snapping')\r\n            .initProperty('stylable');\r\n    }\r\n\r\n    static get observedAttributes() {\r\n        return ['mode', 'stylable'];\r\n    }\r\n\r\n    attributeChangedCallback(name, oldValue, newValue) {\r\n        if (oldValue === newValue) {\r\n            return;\r\n        }\r\n        const self = this;\r\n        if (name === 'stylable') {\r\n            self.#onStylableChange();\r\n        }\r\n        if (name === 'mode') {\r\n            self.#onModeChange();\r\n        }\r\n    }\r\n\r\n    getClassName() {\r\n        return className;\r\n    }\r\n\r\n    get snapping() {\r\n        return this.hasAttribute('snapping');\r\n    }\r\n\r\n    set snapping(value) {\r\n        this.toggleAttribute('snapping', !!value);\r\n    }\r\n\r\n    get mode() {\r\n        const self = this;\r\n        if (self.hasAttribute('mode')) {\r\n            return self.getAttribute('mode');\r\n        }\r\n        return Modify.mode.SELECT;\r\n    }\r\n\r\n    set mode(value) {\r\n        this.setAttribute('mode', value || Modify.mode.SELECT);\r\n    }\r\n\r\n    async #onModeChange() {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        self.#setVertexDeleteModeState(self.getSelectedFeatures());\r\n    }\r\n\r\n    get stylable() {\r\n        return this.hasAttribute('stylable');\r\n    }\r\n\r\n    set stylable(value) {\r\n        this.toggleAttribute('stylable', !!value);\r\n    }\r\n\r\n    #onStylableChange() {\r\n        const self = this;\r\n        self.#getStylingElement()?.classList\r\n            .toggle(Consts.classes.HIDDEN, !(self.stylable && self.getSelectedFeatures().length));\r\n    }\r\n\r\n    #getStylingElement() {\r\n        const self = this;\r\n        return self.querySelector(`.${self.CLASS}-style`);\r\n    }\r\n\r\n    #setFeatureSelectedState(features) {\r\n        const self = this;\r\n        self.#deleteBtn.disabled = features.length === 0;\r\n        self.#deleteVertexBtn.disabled = !features.some(vertexGeometryFilter);\r\n        self.#editAttrBtn.disabled = features.length !== 1;\r\n        self.#joinBtn.disabled = features.length < 2;\r\n        self.#splitBtn.disabled = !features.some(complexGeometryFilter);\r\n        self.displayLabelText();\r\n        self.#onStylableChange();\r\n        self.getStyler().then(styler => styler.setFeature(features[0]));\r\n    }\r\n\r\n    #setVertexDeleteModeState(features) {\r\n        const self = this;\r\n        self.#deleteVertexBtn.disabled = !features.some(vertexGeometryFilter);\r\n        const mode = self.mode;\r\n        self.#deleteVertexBtn.classList.toggle(Consts.classes.ACTIVE, mode === Modify.mode.VERTEX_DELETE);\r\n        self.#selectBtn.classList.toggle(Consts.classes.ACTIVE, mode !== Modify.mode.VERTEX_DELETE);\r\n    }\r\n\r\n    register(map) {\r\n        const self = this;\r\n\r\n        self.styles = TC.Util.extend(true, {}, Cfg.styles.selection, map.options.styles?.selection, self.options.styles);\r\n        self.styles.snapping = TC.Util.extend(true, {}, Cfg.styles.snapping, map.options.styles?.snapping, self.options.styles?.snapping);\r\n        self.styles.text = self.styles.text || {\r\n            fontSize: self.styles.line.fontSize,\r\n            fontColor: self.styles.line.fontColor,\r\n            labelOutlineColor: self.styles.line.labelOutlineColor,\r\n            labelOutlineWidth: self.styles.line.labelOutlineWidth\r\n        };\r\n\r\n        const result = super.register.call(self, map);\r\n        if (self.options.layer) {\r\n            self.setLayer(self.options.layer);\r\n        }\r\n\r\n        map\r\n            .on(Consts.event.FEATUREADD + ' ' + Consts.event.FEATURESADD, function (e) {\r\n                Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n                    const layer = objects[0];\r\n                    if (e.layer === layer) {\r\n                        self.setSelectableState(true);\r\n                    }\r\n                });\r\n            })\r\n            .on(Consts.event.FEATUREREMOVE + ' ' + Consts.event.FEATURESCLEAR, function (e) {\r\n                const layer = e.layer;\r\n                const feature = e.feature;\r\n                Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n                    if (layer === objects[0]) {\r\n                        if (feature) {\r\n                            self.unselectFeatures([feature]);\r\n                        }\r\n                        else {\r\n                            self.unselectFeatures();\r\n                        }\r\n                        self.#setFeatureSelectedState(self.getSelectedFeatures());\r\n                        if (layer.features.length === 0) {\r\n                            self.setSelectableState(false);\r\n                            self.setTextMode(false);\r\n                        }\r\n                    }\r\n                });\r\n            })\r\n            .on(Consts.event.LAYERUPDATE, function (e) {\r\n                const layer = e.layer;\r\n                Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n                    if (layer === objects[0]) {\r\n                        self.#setFeatureSelectedState(self.getSelectedFeatures());\r\n                    }\r\n                });\r\n            });\r\n\r\n        self.on(Consts.event.FEATURESSELECT + ' ' + Consts.event.FEATURESUNSELECT, function () {\r\n            const selectedFeatures = self.getSelectedFeatures();\r\n            self.#setFeatureSelectedState(selectedFeatures);\r\n            const unselectedFeatures = self.layer.features.filter(function (feature) {\r\n                return selectedFeatures.indexOf(feature) < 0;\r\n            });\r\n            unselectedFeatures.forEach(function (feature) {\r\n                feature.toggleSelectedStyle(false);\r\n            });\r\n            selectedFeatures.forEach(function (feature) {\r\n                feature.toggleSelectedStyle(true);\r\n            });\r\n\r\n            if (!self.getAttributeDisplayTarget().classList.contains(Consts.classes.HIDDEN)) {\r\n                self.displayAttributes();\r\n            }\r\n            if (!selectedFeatures.length) {\r\n                self.closeAttributes();\r\n            }\r\n        });\r\n\r\n        return result;\r\n    }\r\n\r\n    async loadTemplates() {\r\n        const self = this;\r\n        const mainTemplatePromise = import('../templates/tc-ctl-mod.mjs');\r\n        const attributesTemplatePromise = import('../templates/tc-ctl-mod-attr.mjs');\r\n\r\n        const template = {};\r\n        template[self.CLASS] = (await mainTemplatePromise).default;\r\n        template[self.CLASS + '-attr'] = (await attributesTemplatePromise).default;\r\n        self.template = template;\r\n    }\r\n\r\n    render(callback) {\r\n        const self = this;\r\n\r\n        const renderCallback = function () {\r\n            self.#selectBtn = self.querySelector('.' + self.CLASS + '-btn-select');\r\n            self.#selectBtn.addEventListener(Consts.event.CLICK, function (e) {\r\n                if (!e.target.disabled) {\r\n                    if (self.isActive) {\r\n                        if (self.mode !== Modify.mode.VERTEX_DELETE) {\r\n                            self.deactivate();\r\n                        }\r\n                        else {\r\n                            self.setMode(Modify.mode.SELECT, true);\r\n                        }\r\n                    }\r\n                    else {\r\n                        self.activate();\r\n                    }\r\n                }\r\n            }, { passive: true });\r\n            self.#deleteBtn = self.querySelector('.' + self.CLASS + '-btn-delete');\r\n            self.#deleteBtn.addEventListener(Consts.event.CLICK, function () {\r\n                self.deleteSelectedFeatures();\r\n            }, { passive: true });\r\n            self.#deleteVertexBtn = self.querySelector('.' + self.CLASS + '-btn-del-vertex');\r\n            self.#deleteVertexBtn.addEventListener(Consts.event.CLICK, function () {\r\n                const newMode = self.mode === Modify.mode.VERTEX_DELETE ?\r\n                    Modify.mode.SELECT : Modify.mode.VERTEX_DELETE;\r\n                self.setMode(newMode, true);\r\n            }, { passive: true });\r\n            self.#textBtn = self.querySelector('.' + self.CLASS + '-btn-text');\r\n            self.#textBtn.addEventListener(Consts.event.CLICK, function () {\r\n                self.setTextMode(!self.textActive);\r\n            }, { passive: true });\r\n            self.#joinBtn = self.querySelector('.' + self.CLASS + '-btn-join');\r\n            self.#splitBtn = self.querySelector('.' + self.CLASS + '-btn-split');\r\n            self.#editAttrBtn = self.querySelector('.' + self.CLASS + '-btn-attr');\r\n            self.#editAttrBtn.addEventListener(Consts.event.CLICK, function () {\r\n                self.toggleAttributes();\r\n            }, { passive: true });\r\n            self.#textInput = self.querySelector('input.' + self.CLASS + '-txt');\r\n            self.#textInput.addEventListener('input', function (e) {\r\n                self.labelFeatures(e.target.value);\r\n            });\r\n            self.#labelSection = self.querySelector('.' + self.CLASS + '-style-label');\r\n\r\n            self.#fontColorPicker = self.querySelector(self.#classSelector + '-fnt-c');\r\n            self.#fontColorPicker.addEventListener(Consts.event.CHANGE, function (e) {\r\n                self.setFontColor(e.target.value);\r\n            });\r\n\r\n            self.#fontSizeSelector = self.querySelector('.' + self.CLASS + '-fnt-s');\r\n            self.#fontSizeSelector.addEventListener(Consts.event.CHANGE, function (e) {\r\n                self.setFontSize(e.target.value);\r\n            });\r\n\r\n            self.#attributesSection = self.querySelector('.' + self.CLASS + '-attr');\r\n\r\n            self.getStyler().then(styler => styler.addEventListener(Consts.event.STYLECHANGE, e => {\r\n                self.getSelectedFeatures().forEach(f => {\r\n                    const newData = {};\r\n                    newData[e.detail.property] = e.detail.value;\r\n                    const newStyle = Object.assign({}, f.getStyle(), newData);\r\n                    f.setStyle(newStyle);\r\n                });\r\n            }));\r\n\r\n            if (TC.Util.isFunction(callback)) {\r\n                callback();\r\n            }\r\n        };\r\n\r\n        const styles = self.styles || {};\r\n        const renderObject = {\r\n            stylable: self.stylable,\r\n            fontSize: styles.text?.fontSize,\r\n            fontColor: styles.text?.fontColor,\r\n            labelOutlineColor: styles.text?.labelOutlineColor,\r\n            labelOutlineWidth: styles.text?.labelOutlineWidth\r\n        };\r\n\r\n        return self._set1stRenderPromise(self.renderData(renderObject, renderCallback));\r\n    }\r\n\r\n    activate() {\r\n        const self = this;\r\n        self.#selectBtn.classList.add(Consts.classes.ACTIVE);\r\n        super.activate.call(self);\r\n        self.wrap.activate(self.mode);\r\n        self.#setVertexDeleteModeState(self.getSelectedFeatures());\r\n    }\r\n\r\n    deactivate() {\r\n        const self = this;\r\n        super.deactivate.call(self);\r\n        if (self.#selectBtn) {\r\n            self.#setFeatureSelectedState([]);\r\n        }\r\n        if (self.#selectBtn) {\r\n            self.#selectBtn.classList.remove(Consts.classes.ACTIVE);\r\n            if (self.layer) {\r\n                self.unselectFeatures(self.getSelectedFeatures());\r\n            }\r\n        }\r\n        if (self.wrap) {\r\n            self.wrap.deactivate();\r\n        }\r\n        self.mode = Modify.mode.SELECT;\r\n    }\r\n\r\n    clear() {\r\n        const self = this;\r\n        if (self.layer) {\r\n            self.layer.clearFatures();\r\n        }\r\n        return self;\r\n    }\r\n\r\n    isExclusive() {\r\n        return true;\r\n    }\r\n\r\n    end() {\r\n        const self = this;\r\n        self.wrap.end();\r\n        return self;\r\n    }\r\n\r\n    setMode(mode, activate) {\r\n        const self = this;\r\n\r\n        if (mode) {\r\n            self.mode = mode;\r\n        }\r\n\r\n        if (activate && mode) {\r\n            if (self.layer) {\r\n                self.layer.map.putLayerOnTop(self.layer);\r\n            }\r\n            self.activate();\r\n        }\r\n        else {\r\n            self.deactivate();\r\n        }\r\n        return self;\r\n    }\r\n\r\n    getLayer() {\r\n        var self = this;\r\n        // Se ha instanciado un control sin capa asociada\r\n        if (self.options && typeof self.options.layer === 'boolean' && !self.options.layer) {\r\n            return Promise.resolve(null);\r\n        }\r\n        if (self.layer) {\r\n            return Promise.resolve(self.layer);\r\n        }\r\n        return self.#layerPromise;\r\n    }\r\n\r\n    setLayer(layer) {\r\n        const self = this;\r\n        if (self.map) {\r\n            self.setSelectedFeatures([]);\r\n            self.#layerPromise = new Promise(function (resolve, _reject) {\r\n                if (typeof (layer) === \"string\") {\r\n                    self.map.loaded(function () {\r\n                        self.layer = self.map.getLayer(layer);\r\n                        resolve(self.layer);\r\n                    });\r\n                }\r\n                else {\r\n                    if (!layer && self.isActive) {\r\n                        self.deactivate();\r\n                    }\r\n                    self.layer = layer;\r\n                    resolve(self.layer);\r\n                }\r\n            });\r\n            Promise.all([self.#layerPromise, self.renderPromise()]).then(function (objs) {\r\n                const layer = objs[0];\r\n                self.setSelectableState(layer && layer.features.length > 0);\r\n            });\r\n        }\r\n    }\r\n\r\n    setSelectableState(active) {\r\n        const self = this;\r\n        self.#selectBtn.disabled = !active;\r\n        self.#textBtn.disabled = !active;\r\n    }\r\n\r\n    getSelectedFeatures() {\r\n        return this.wrap.getSelectedFeatures();\r\n    }\r\n\r\n    setSelectedFeatures(features) {\r\n        const self = this;\r\n        const result = self.wrap.setSelectedFeatures(features);\r\n        self.displayLabelText();\r\n        return result;\r\n    }\r\n\r\n    getActiveFeatures() {\r\n        const self = this;\r\n        const result = self.getSelectedFeatures();\r\n        if (!result.length && self.layer.features.length) {\r\n            result.push(self.layer.features[self.layer.features.length - 1]);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    unselectFeatures(features) {\r\n        features = features || [];\r\n        this.wrap.unselectFeatures(features.map(function (feat) {\r\n            return feat.wrap.feature;\r\n        }));\r\n        return this;\r\n    }\r\n\r\n    deleteSelectedFeatures() {\r\n        const self = this;\r\n        const features = self.getSelectedFeatures();\r\n        self.wrap.unselectFeatures(features);\r\n        features.forEach(function (feature) {\r\n            self.layer.removeFeature(feature);\r\n            self.trigger(Consts.event.FEATUREREMOVE, { feature: feature });\r\n        });\r\n        return self;\r\n    }\r\n\r\n    styleFunction(feature, _resolution) {\r\n        const self = this;\r\n        var result;\r\n        const mapStyles = self.map.options.styles.selection;\r\n        switch (true) {\r\n            case feature instanceof Polygon:\r\n            case feature instanceof MultiPolygon:\r\n                result = TC.Util.extend({}, mapStyles.polygon);\r\n                break;\r\n            case feature instanceof Point:\r\n            case feature instanceof MultiPoint:\r\n                result = TC.Util.extend({}, mapStyles.point);\r\n                break;\r\n            default:\r\n                result = TC.Util.extend({}, mapStyles.line);\r\n                break;\r\n        }\r\n        const style = feature.getStyle();\r\n        if (style.label) {\r\n            result.label = style.label;\r\n            result.fontSize = style.fontSize;\r\n            result.fontColor = style.fontColor;\r\n            result.labelOutlineColor = style.labelOutlineColor;\r\n            result.labelOutlineWidth = style.labelOutlineWidth;\r\n        }\r\n        return result;\r\n    }\r\n\r\n    setTextMode(active) {\r\n        const self = this;\r\n        self.textActive = active;\r\n        if (active) {\r\n            self.#textBtn.classList.add(Consts.classes.ACTIVE, active);\r\n            self.#labelSection.classList.remove(Consts.classes.HIDDEN);\r\n        }\r\n        else {\r\n            self.#textBtn.classList.remove(Consts.classes.ACTIVE, active);\r\n            self.#labelSection.classList.add(Consts.classes.HIDDEN);\r\n        }\r\n        self.displayLabelText();\r\n        return self;\r\n    }\r\n\r\n    setFontColorWatch(color, outlineColor) {\r\n        const self = this;\r\n        if (color === undefined) {\r\n            color = self.styles.text.fontColor;\r\n        }\r\n        color = TC.Util.colorArrayToString(color);\r\n        outlineColor = outlineColor || self.getLabelOutlineColor(color);\r\n        self.renderPromise().then(function () {\r\n            self.#fontColorPicker.value = color;\r\n            self.#textInput.style.color = color;\r\n            self.#textInput.style.textShadow = '0 0 ' + self.styles.text.labelOutlineWidth + 'px ' + outlineColor;\r\n            if (!TC.browserFeatures.inputTypeColor()) {\r\n                self.#fontColorPicker.style.backgroundColor = color;\r\n                self.#fontColorPicker.blur();\r\n            }\r\n        });\r\n        return self;\r\n    }\r\n\r\n    setFontColor(color) {\r\n        const self = this;\r\n        self.styles.text.fontColor = color;\r\n        self.styles.text.labelOutlineColor = self.getLabelOutlineColor(color);\r\n        self.setFontColorWatch(color, self.styles.text.labelOutlineColor);\r\n        const features = self.getActiveFeatures();\r\n        features.forEach(function (feature) {\r\n            const style = feature.getStyle();\r\n            style.fontColor = color;\r\n            style.labelOutlineColor = self.styles.text.labelOutlineColor;\r\n            feature.setStyle(style);\r\n        });\r\n        return self;\r\n    }\r\n\r\n    setFontSizeWatch(size) {\r\n        const self = this;\r\n        if (size === undefined) {\r\n            size = self.styles.text.fontSize;\r\n        }\r\n        const sizeValue = parseInt(size);\r\n        if (!Number.isNaN(sizeValue)) {\r\n            self.renderPromise().then(function () {\r\n                self.#fontSizeSelector.value = sizeValue;\r\n                self.#textInput.style.fontSize = sizeValue + 'pt';\r\n            });\r\n        }\r\n        return self;\r\n    }\r\n\r\n    setFontSize(size) {\r\n        const self = this;\r\n        const sizeValue = parseInt(size);\r\n        if (!Number.isNaN(sizeValue)) {\r\n            self.styles.text.fontSize = sizeValue;\r\n            self.setFontSizeWatch(sizeValue);\r\n            const features = self.getActiveFeatures();\r\n            features.forEach(function (feature) {\r\n                const style = feature.getStyle();\r\n                style.fontSize = sizeValue;\r\n                if (style.font)\r\n                    style.font = style.font.replace(/^\\d+/, sizeValue);\r\n                feature.setStyle(style);\r\n            });\r\n        }\r\n        return self;\r\n    }\r\n\r\n    getLabelOutlineColor(fontColor) {\r\n        if (fontColor) {\r\n            fontColor = TC.Util.colorArrayToString(fontColor);\r\n            const matchForShort = fontColor.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n            if (matchForShort && matchForShort.length) {\r\n                fontColor = '#' + matchForShort[1] + matchForShort[1] + matchForShort[2] + matchForShort[2] + matchForShort[3] + matchForShort[3];\r\n            }\r\n            const matchForLong = fontColor.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\r\n            if (matchForLong && matchForLong.length) {\r\n                const r = parseInt(matchForLong[1], 16);\r\n                const g = parseInt(matchForLong[2], 16);\r\n                const b = parseInt(matchForLong[3], 16);\r\n                return (r + g + b) / 3 < 128 ? '#ffffff' : '#000000';\r\n            }\r\n        }\r\n        return '#ffffff';\r\n    }\r\n\r\n    displayLabelText() {\r\n        const self = this;\r\n        const features = self.getSelectedFeatures();\r\n        var text;\r\n        var size;\r\n        var color;\r\n        if (self.isActive && features.length) {\r\n            const feature = features[features.length - 1];\r\n            const style = feature.getStyle();\r\n            text = style.label;\r\n            color = style.fontColor;\r\n            size = style.fontSize;\r\n        }\r\n        else {\r\n            text = '';\r\n            color = self.styles.text.fontColor;\r\n            size = self.styles.text.fontSize;\r\n        }\r\n        self.renderPromise().then(function () {\r\n            self\r\n                .setFontSizeWatch(size)\r\n                .setFontColorWatch(color)\r\n                .#textInput.value = text || '';\r\n        });\r\n        return self;\r\n    }\r\n\r\n    labelFeatures(text) {\r\n        const self = this;\r\n        const features = self.getActiveFeatures();\r\n        if (features.length) {\r\n            const style = features[0].getStyle();\r\n            features.forEach(function (feature) {\r\n                const textStyle = TC.Util.extend({}, self.styles.text, style);\r\n                style.label = text;\r\n                style.labelOffset = textStyle.labelOffset;\r\n                style.fontColor = textStyle.fontColor;\r\n                style.fontSize = textStyle.fontSize;\r\n                style.labelOutlineColor = textStyle.labelOutlineColor;\r\n                style.labelOutlineWidth = textStyle.labelOutlineWidth;\r\n                feature.setStyle(style);\r\n            });\r\n        }\r\n        return self;\r\n    }\r\n\r\n    getAttributeDisplayTarget() {\r\n        return this.#attributesSection;\r\n    }\r\n\r\n    async getStyler() {\r\n        const self = this;\r\n        await self.renderPromise();\r\n        self.#styler = self.querySelector('sitna-feature-styler');\r\n        return self.#styler;\r\n    }\r\n\r\n    displayAttributes() {\r\n        const self = this;\r\n        const selectedFeatures = self.getSelectedFeatures();\r\n        const feature = selectedFeatures[selectedFeatures.length - 1];\r\n        if (feature) {\r\n            self.getRenderedHtml(self.CLASS + '-attr', { data: feature.getData() }, function (html) {\r\n                const attributesSection = self.getAttributeDisplayTarget();\r\n                attributesSection.innerHTML = html;\r\n                attributesSection.classList.remove(Consts.classes.HIDDEN);\r\n                self.#editAttrBtn.classList.add(Consts.classes.ACTIVE);\r\n\r\n                attributesSection.querySelector(`${self.CLASS}-btn-attr-ok`).addEventListener(Consts.event.CLICK, function (_e) {\r\n                    self._onAttrOK();\r\n                }, { passive: true });\r\n\r\n                attributesSection.querySelector(`.${self.modifyControl.CLASS}-btn-attr-cancel`).addEventListener(Consts.event.CLICK, function () {\r\n                    self.closeAttributes();\r\n                }, { passive: true });\r\n            });\r\n        }\r\n    }\r\n\r\n    closeAttributes() {\r\n        const self = this;\r\n        self.#attributesSection?.classList.add(Consts.classes.HIDDEN);\r\n        self.#editAttrBtn?.classList.remove(Consts.classes.ACTIVE);\r\n    }\r\n\r\n    toggleAttributes() {\r\n        const self = this;\r\n        if (self.#editAttrBtn.classList.toggle(Consts.classes.ACTIVE)) {\r\n            self.displayAttributes();\r\n        }\r\n        else {\r\n            self.closeAttributes();\r\n        }\r\n    }\r\n\r\n    _onAttrOK() {\r\n        const self = this;\r\n        const feature = self.getSelectedFeatures()[0];\r\n        if (feature) {\r\n            const data = {};\r\n            self.getAttributeDisplayTarget().querySelectorAll('input').forEach(function (input) {\r\n                data[input.getAttribute('name')] = input.value;\r\n            });\r\n            feature.setData(data);\r\n            self.trigger(Consts.event.FEATUREMODIFY, { feature: feature, layer: self.layer });\r\n            self.closeAttributes();\r\n        }\r\n    }\r\n\r\n    joinFeatures(features) {\r\n        const self = this;\r\n        if (self.geometryType === Consts.geom.MULTIPOLYLINE ||\r\n            self.geometryType === Consts.geom.MULTIPOLYGON ||\r\n            self.geometryType === Consts.geom.MULTIPOINT) {\r\n            self._joinedFeatureAttributes = [];\r\n            let newFeature;\r\n            if (features.length > 1) {\r\n                var geometries = features.map(function (elm) {\r\n                    self._joinedFeatureAttributes.push(elm.getData());\r\n                    return elm.geometry;\r\n                });\r\n                var newGeometry = geometries.reduce(function (a, b) {\r\n                    return a.concat(b);\r\n                });\r\n                newFeature = new features[0].constructor(newGeometry);\r\n                for (var i = 0, len = features.length; i < len; i++) {\r\n                    var feature = features[i];\r\n                    self.layer.removeFeature(feature);\r\n                    self.trigger(Consts.event.FEATUREREMOVE, { feature: feature });\r\n                }\r\n                self.layer.addFeature(newFeature).then(function (feat) {\r\n                    self.setSelectedFeatures([newFeature]);\r\n                    self.trigger(Consts.event.FEATUREADD, { feature: feat });\r\n                    feat.showPopup(self.attributeEditor);\r\n                });\r\n            }\r\n            self.#setFeatureSelectedState([newFeature]);\r\n        }\r\n    }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, Modify);\r\nTC.control.Modify = Modify;\r\nexport default Modify;","\r\n/**\r\n  * Opciones de control de obtención de información de entidades de mapa en el que el método de selección es dibujar una \r\n  * geometría en el mapa. El control ofrece como resultados todas las entidades que se intersecan con esa geometría.\r\n  * Las geometrías de selección pueden ser puntos, líneas o polígonos.\r\n  * \r\n  * Este control utiliza las funcionalidades de los servicios OGC para realizar su cometido. En concreto, la selección por punto \r\n  * hace uso de la petición `GetFeatureInfo` de los servicios WMS. Por otro lado, las selecciones por línea y polígono emplean la petición\r\n  * `GetFeature` de los servicios WFS. Esto implica que en este caso debe existir un servicio WFS asociado al servicio WMS que ofrezca \r\n  * los mismos datos que este. Servidores de mapas como GeoServer tienen este comportamiento por defecto. \r\n  * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n  * @typedef MultiFeatureInfoOptions\r\n  * @extends FeatureInfoOptions\r\n  * @memberof SITNA.control\r\n  * @see SITNA.control.MapControlOptions\r\n  * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a las pulsaciones hechas en el mapa desde el que se carga.\r\n  * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n  * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n  * @property {SITNA.control.MultiFeatureInfoModeOptions} [modes] - Opciones de configuración de los modos disponibles de selección.\r\n  * @property {boolean} [persistentHighlights] - Cuando el control muestra los resultados de la consulta, si el servicio lo soporta, mostrará resaltadas sobre el mapa las geometrías\r\n  * de las entidades geográficas de la respuesta. Si el valor de esta propiedad es `true`, dichas geometrías se quedan resaltadas en el mapa indefinidamente. \r\n  * En caso contrario, las geometrías resaltadas se borran en el momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n  * @example [Ver en vivo](../examples/cfg.MultiFeatureInfoOptions.html) {@lang html} \r\n  * 
\r\n * \r\n */\r\n\r\n/**\r\n * Opciones de los distintos modos de consulta espacial (por click, por línea o por recinto)\r\n * del [control de obtención de información de entidades de mapa por geometría]{@linkplain MultiFeatureInfoOptions}.\r\n * @typedef MultiFeatureInfoModeOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MultiFeatureInfoOptions\r\n * @property {boolean|SITNA.control.FeatureInfoOptions} [point=true] - Si se establece a un valor verdadero, el control permite la selección de entidades por punto.\r\n * @property {boolean|SITNA.control.GeometryFeatureInfoOptions} [polyline] - Si se establece a un valor verdadero, el control permite la selección de entidades por línea.\r\n * @property {boolean|SITNA.control.GeometryFeatureInfoOptions} [polygon=true] - Si se establece a un valor verdadero, el control permite la selección de entidades por polígono.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\nimport Control from '../Control';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst mergeOptions = function (opt1, opt2) {\r\n if (opt1) {\r\n if (opt1 === true) {\r\n opt1 = {};\r\n }\r\n return Util.extend(true, opt1, opt2);\r\n }\r\n return opt1;\r\n};\r\n\r\nclass MultiFeatureInfo extends FeatureInfoCommons {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.remove(super.CLASS);\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.modes = self.options.modes || {};\r\n if (typeof self.modes[Consts.geom.POINT] === 'undefined') {\r\n self.modes[Consts.geom.POINT] = true;\r\n }\r\n if (typeof self.modes[Consts.geom.POLYGON] === 'undefined') {\r\n self.modes[Consts.geom.POLYGON] = true;\r\n }\r\n self.featureInfoControl = null;\r\n self.lineFeatureInfoControl = null;\r\n self.polygonFeatureInfoControl = null;\r\n self.featureInfoControls = [];\r\n self.lastCtrlActive = null;\r\n self.popup = null;\r\n self.exportsState = false; // Los controles que exportan estado son los hijos\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-m-finfo';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n\r\n self.div.querySelectorAll('input[type=radio]').forEach(function (input) {\r\n input.checked = false;\r\n });\r\n\r\n const ctlPromises = [Control.prototype.register.call(self, map)];\r\n const styles = self.options.styles || {};\r\n const pointMode = self.modes[Consts.geom.POINT];\r\n const polylineMode = self.modes[Consts.geom.POLYLINE];\r\n const polygonMode = self.modes[Consts.geom.POLYGON];\r\n if (pointMode) {\r\n ctlPromises.push(map.addControl(\"featureInfo\", mergeOptions(self.modes[Consts.geom.POINT],\r\n {\r\n id: self.getUID(),\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share\r\n })).then(function (control) {\r\n self.featureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n if (self.modes[Consts.geom.POLYLINE]) {\r\n ctlPromises.push(map.addControl(\"lineFeatureInfo\", mergeOptions(self.modes[Consts.geom.POLYLINE],\r\n {\r\n id: self.getUID(),\r\n active: polylineMode.active,\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share,\r\n style: polylineMode.filterStyle || styles.line\r\n })).then(function (control) {\r\n self.lineFeatureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n if (self.modes[Consts.geom.POLYGON]) {\r\n ctlPromises.push(map.addControl(\"polygonFeatureInfo\", mergeOptions(self.modes[Consts.geom.POLYGON],\r\n {\r\n id: self.getUID(),\r\n active: polygonMode.active,\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share,\r\n style: polygonMode.filterStyle || styles.polygon\r\n })).then(function (control) {\r\n self.polygonFeatureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n\r\n map.on(`${Consts.event.LAYERADD} ${Consts.event.LAYERREMOVE} ${Consts.event.LAYERVISIBILITY}`, function (_e) {\r\n self.updateUI();\r\n });\r\n\r\n map.on(`${Consts.event.CONTROLACTIVATE} ${Consts.event.CONTROLDEACTIVATE}`, function (e) {\r\n if (e.control === self.featureInfoControl || e.control === self.lineFeatureInfoControl || e.control === self.polygonFeatureInfoControl) {\r\n self.updateUI();\r\n }\r\n });\r\n\r\n await Promise.all(ctlPromises);\r\n if (self.featureInfoControl) {\r\n self.featureInfoControl.activate();\r\n self.lastCtrlActive = self.featureInfoControl;\r\n }\r\n self.updateUI();\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-m-finfo.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n var renderData = { controlId: self.id };\r\n if (self.modes[Consts.geom.POINT]) {\r\n renderData.pointSelectValue = Consts.geom.POINT;\r\n }\r\n if (self.modes[Consts.geom.POLYLINE]) {\r\n renderData.lineSelectValue = Consts.geom.POLYLINE;\r\n }\r\n if (self.modes[Consts.geom.POLYGON]) {\r\n renderData.polygonSelectValue = Consts.geom.POLYGON;\r\n }\r\n return self._set1stRenderPromise(self.renderData(renderData,\r\n function () {\r\n var changeEvent = function () {\r\n switch (this.value) {\r\n case Consts.geom.POLYLINE:\r\n //modo línea\r\n self.lineFeatureInfoControl.activate();\r\n self.lastCtrlActive = self.lineFeatureInfoControl;\r\n break;\r\n case Consts.geom.POLYGON:\r\n //modo poligono\r\n self.polygonFeatureInfoControl.activate();\r\n self.lastCtrlActive = self.polygonFeatureInfoControl;\r\n break;\r\n default:\r\n //modo point\r\n self.featureInfoControl.activate();\r\n self.lastCtrlActive = self.featureInfoControl;\r\n break;\r\n }\r\n };\r\n self.div.querySelectorAll('input[type=radio]').forEach(function (input) {\r\n input.addEventListener('change', changeEvent);\r\n });\r\n\r\n //URI bind del click del boton de borrar seleccionadas\r\n const delFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-remove`);\r\n delFeaturesBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.featureInfoControls.forEach(ctl => {\r\n ctl.resultsLayer.features.slice().forEach(f => ctl.downplayFeature(f));\r\n ctl.filterLayer.features.slice().forEach(f => f.layer.removeFeature(f));\r\n });\r\n }, { passive: true });\r\n\r\n self.div.querySelector(`.${self.CLASS}-btn-dl`).addEventListener(Consts.event.CLICK, async function (_e) {\r\n const downloadDialog = await self.getDownloadDialog();\r\n let options = {\r\n title: self.getLocaleString(\"featureInfo\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self._getFileName()\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n downloadDialog.open(Array.prototype.concat.apply([], self.featureInfoControls.map(ctl => ctl.resultsLayer.features)), options);\r\n }, { passive: true });\r\n self.div.querySelector(`.${self.CLASS}-btn-zoom`).addEventListener(Consts.event.CLICK, function (_e) {\r\n var features = self.featureInfoControls.reduce((i, a) => {\r\n return i.concat(a.resultsLayer.features);\r\n }, [])\r\n self.map.zoomToFeatures(features);\r\n\r\n }, { passive: true });\r\n self.map\r\n //.on(Consts.event.FEATUREINFO, function () {\r\n // delFeaturesBtn.disabled = false;\r\n //})\r\n //.on(Consts.event.NOFEATUREINFO, function (e) {\r\n // if (e.control && e.control.filterFeature) {\r\n // delFeaturesBtn.disabled = false;\r\n // }\r\n //})\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.featureInfoControls.some(ctl => ctl.resultsLayer === e.layer || ctl.filterLayer === e.layer)) {\r\n self.updateUI();\r\n }\r\n })\r\n .on(Consts.event.FEATUREADD + ' ' + Consts.event.FEATURESADD, function (e) {\r\n if (self.featureInfoControls.some(ctl => ctl.resultsLayer === e.layer || ctl.filterLayer === e.layer)) {\r\n self.updateUI();\r\n }\r\n });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n activate() {\r\n const self = this;\r\n if (self.lastCtrlActive) {\r\n self.lastCtrlActive.activate();\r\n }\r\n }\r\n\r\n deactivate() {\r\n const self = this;\r\n self.lastCtrlActive.deactivate(false);\r\n }\r\n\r\n updateUI() {\r\n const self = this;\r\n self.renderPromise().then(function () {\r\n const enabled = self.map.workLayers.some(l => l.type === Consts.layerType.WMS && l.getVisibility());\r\n self.div.querySelectorAll('input').forEach(function (input) {\r\n input.disabled = !enabled;\r\n });\r\n if (self.featureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${Consts.geom.POINT}]`);\r\n if (input) {\r\n if (!enabled && (self.lineFeatureInfoControl.isActive || self.polygonFeatureInfoControl.isActive)) {\r\n // Si no hay capas válidas para línea o polígono volvemos a GFI por punto\r\n self.featureInfoControl.activate();\r\n }\r\n input.checked = self.featureInfoControl.isActive;\r\n }\r\n }\r\n if (self.lineFeatureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${Consts.geom.POLYLINE}]`);\r\n if (input) {\r\n input.checked = self.lineFeatureInfoControl.isActive;\r\n }\r\n }\r\n if (self.polygonFeatureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${Consts.geom.POLYGON}]`);\r\n if (input) {\r\n input.checked = self.polygonFeatureInfoControl.isActive;\r\n }\r\n }\r\n\r\n const persistentHighlights = self.featureInfoControls.some(c => c.options.persistentHighlights);\r\n const featuresUnavailable = self.featureInfoControls.every(ctl => (!ctl.resultsLayer || ctl.resultsLayer.features.length === 0) &&\r\n (!ctl.filterLayer || ctl.filterLayer.features.length === 0));\r\n const delFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-remove`);\r\n delFeaturesBtn.classList.toggle(Consts.classes.HIDDEN, !persistentHighlights);\r\n delFeaturesBtn.disabled = featuresUnavailable;\r\n const dlFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-dl`);\r\n dlFeaturesBtn.classList.toggle(Consts.classes.HIDDEN, !persistentHighlights);\r\n dlFeaturesBtn.disabled = featuresUnavailable;\r\n\r\n const zoomFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-zoom`);\r\n zoomFeaturesBtn.classList.toggle(Consts.classes.HIDDEN, !persistentHighlights);\r\n zoomFeaturesBtn.disabled = featuresUnavailable;\r\n\r\n // Hack para compensar bug de Edge: no se actualiza el estilo al cambiar el estado del radio.\r\n const displayValue = self.div.style.display;\r\n self.div.style.display = 'none';\r\n if (displayValue) {\r\n self.div.style.display = displayValue;\r\n }\r\n else {\r\n self.div.style.removeProperty('display');\r\n }\r\n });\r\n }\r\n}\r\n\r\nTC.control.MultiFeatureInfo = MultiFeatureInfo;\r\nexport default MultiFeatureInfo;","import TC from '../../TC';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass NavBar extends Control {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-nav';\r\n }\r\n\r\n render() {\r\n const self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.NavBar(self);\r\n }\r\n return self._set1stRenderPromise(Promise.resolve());\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n const superRegisterPromise = super.register.call(self, map);\r\n self.wrap.register(map);\r\n\r\n if (self.options.home === undefined || self.options.home) {\r\n await map.addControl('navBarHome');\r\n }\r\n\r\n //esta chama es para que la primera vez se ajuste la barrita de escala (debido a otra chama con el maxResolution, que es culpa de OL)\r\n map.loaded(function () {\r\n self.wrap.refresh();\r\n });\r\n\r\n await superRegisterPromise;\r\n return self;\r\n }\r\n}\r\n\r\nTC.control.NavBar = NavBar;\r\nexport default NavBar;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass NavBarHome extends Control {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-nav-home';\r\n }\r\n\r\n render() {\r\n const self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.NavBarHome(self);\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register.call(self, map);\r\n self.wrap.register(map);\r\n\r\n map.on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n const crs = e.newCrs;\r\n const bottomLeft = TC.Util.reproject([map.options.initialExtent[0], map.options.initialExtent[1]], map.options.crs, crs);\r\n const topRight = TC.Util.reproject([map.options.initialExtent[2], map.options.initialExtent[3]], map.options.crs, crs);\r\n self.wrap.setInitialExtent([bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]);\r\n });\r\n\r\n return self;\r\n }\r\n}\r\n\r\nTC.control.NavBarHome = NavBarHome;\r\nexport default NavBarHome;","\r\n/**\r\n * Opciones del creador de mapas sin conexión.\r\n * \r\n * Para que ese control funcione correctamente, es necesario cumplir estos dos requisitos:\r\n * 1. Debe instalarse en el ámbito de la aplicación que contiene el visor el _[Service Worker](https://developer.mozilla.org/es/docs/Web/API/Service_Worker_API)_ creado para el funcionamiento de este control.\r\n * Para ello basta con copiar el archivo [tc-cb-service-worker.js](https://raw.githubusercontent.com/sitna/api-sitna/master/workers/tc-cb-service-worker.js) a la carpeta raíz de dicha aplicación.\r\n * 2. Debe incluirse en la carpeta de la aplicación un archivo de texto con el nombre `manifest.appcache`. \r\n * Este archivo es un documento de manifiesto de [caché de aplicaciones](https://developer.mozilla.org/es/docs/Web/HTML/Using_the_application_cache#habilitando_cach%C3%A9_de_aplicaciones)[*] \r\n * que contiene una lista de las URL de todos los recursos que tienen que almacenarse en la cache del navegador y así asegurar la carga de la aplicación\r\n * en ausencia de conexión a Internet.\r\n * \r\n * [*]: El estándar de caché de aplicaciones está obsoleto hoy en día y este control no hace realmente uso de él para ejercer su función, pero para funcionar necesita\r\n * una lista de todos los recursos a cargar en la cache del navegador, y un manifiesto de caché de aplicaciones es precisamente una lista de ese tipo. \r\n * Se usa este formato por compatibilidad hacia atrás y por ser de un estándar bien documentado.\r\n * @typedef OfflineMapMakerOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {number} [averageTileSize=31000] - Tamaño medio estimado en bytes para cada una de las teselas del mapa. Este valor se utiliza para estimar el tamaño total que tendrá en disco el mapa sin conexión.\r\n * @property {HTMLElement|string} [offlineMapHintDiv] - Elemento del DOM en el que crear el indicador de que se está en un mapa offline. Si no se especifica dicho indicador se mostrará superpuesto al área del mapa.\r\n * @example [Ver en vivo](../examples/cfg.OfflineMapMakerOptions.html) {@lang html}\r\n *
\r\n * \r\n * @example Documento de manifiesto [manifest.appcache](../examples/manifest.appcache) {@lang plain}\r\n * CACHE MANIFEST\r\n * # Documento de manifiesto para el ejemplo de uso del control offlineMapMaker\r\n *\r\n * CACHE:\r\n * cfg.MapControlOptions.offlineMapMaker.html\r\n * examples.css\r\n * examples.js\r\n * ../\r\n * ../css/tcmap.css\r\n * ../resources/es-ES.json\r\n * ../config/browser-versions.js\r\n * ../layout/responsive/style.css\r\n * ../css/fonts/sitna.woff\r\n * ../css/fonts/mapskin.woff\r\n * ../layout/responsive/fonts/fontawesome-webfont.woff?v=4.5.0\r\n * ../css/img/thumb-orthophoto.jpg\r\n * ../css/img/thumb-bta.png\r\n * ../css/img/thumb-basemap.png\r\n * ../css/img/thumb-cadaster.png\r\n * layout/ctl-container/config.json\r\n * layout/ctl-container/style.css\r\n * layout/ctl-container/script.js\r\n * layout/ctl-container/markup.html\r\n * layout/ctl-container/resources/es-ES.json\r\n * https://idena.navarra.es/ogc/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Control from '../Control';\r\nimport SWCacheClient from './SWCacheClient';\r\nimport md5 from 'md5';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst getExtentFromString = function (str) {\r\n return decodeURIComponent(str).split(',').map(function (elm) {\r\n return parseFloat(elm);\r\n });\r\n};\r\n\r\nconst OfflineMapMaker = function () {\r\n var self = this;\r\n\r\n SWCacheClient.apply(this, arguments);\r\n\r\n var cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n DRAW: cs + '-draw',\r\n DRAWING: cs + '-drawing',\r\n PROGRESS: cs + '-progress',\r\n NEW: cs + '-new',\r\n LIST: cs + '-list',\r\n LISTITEM: cs + '-list > li',\r\n OKBTN: cs + '-btn-ok',\r\n NEWBTN: cs + '-btn-new',\r\n SAVEBTN: '.tc-btn-save',\r\n CANCELBTN: '.tc-btn-cancel',\r\n EDITBTN: '.tc-btn-edit',\r\n VIEWBTN: '.tc-btn-view',\r\n DELETEBTN: '.tc-btn-delete',\r\n TILECOUNT: cs + '-tile-count',\r\n NAMETB: cs + '-txt-name',\r\n TEXTBOX: 'input.tc-textbox',\r\n EXIT: cs + '-link-exit',\r\n OFFPANEL: cs + '-off-panel',\r\n RESOLUTIONPANEL: cs + '-res-panel',\r\n BLLIST: cs + '-bl-list',\r\n BLLISTITEM: cs + '-bl-list > li',\r\n BLLISTTEXT: cs + '-bl-panel-txt',\r\n RNGMAXRES: cs + '-rng-maxres',\r\n SEARCH: cs + '-map-available-srch',\r\n EMPTYLIST: cs + '-map-available-empty',\r\n OFFLINEHIDDEN: '[data-no-cb]'\r\n };\r\n\r\n self.storedMaps = [];\r\n\r\n const mapDefString = TC.Util.getParameterByName(self.MAP_DEFINITION_PARAM_NAME);\r\n const extentString = TC.Util.getParameterByName(self.MAP_EXTENT_PARAM_NAME);\r\n self.mapIsOffline = !!mapDefString;\r\n if (mapDefString) {\r\n self.currentMapDefinition = JSON.parse(window.atob(decodeURIComponent(mapDefString)));\r\n }\r\n if (extentString) {\r\n self.currentMapExtent = getExtentFromString(extentString);\r\n }\r\n\r\n // Comprobación de disponibilidad de localStorage\r\n try {\r\n self.localStorage = window.localStorage;\r\n const key = \"__delete_me__\";\r\n self.localStorage.setItem(key, key);\r\n self.localStorage.removeItem(key);\r\n }\r\n catch (e) {\r\n self.localStorage = null;\r\n TC.error(self.getLocaleString('couldNotAccessLocalStorage'));\r\n }\r\n\r\n // Carga de mapas guardados\r\n if (self.localStorage) {\r\n for (var i = 0, len = self.localStorage.length; i < len; i++) {\r\n var key = self.localStorage.key(i);\r\n if (key.indexOf(self.LOCAL_STORAGE_KEY_PREFIX) === 0 && key !== self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME + '.hash') {\r\n // Es un nombre de mapa y no es el hash de integridad de la cache root\r\n var values = self.localStorage.getItem(key).split(\" \");\r\n var extent = getExtentFromString(values.shift());\r\n var name = values.join(\" \");\r\n var map = {\r\n name: name,\r\n extent: extent,\r\n url: decodeURIComponent(key.substr(self.LOCAL_STORAGE_KEY_PREFIX.length))\r\n };\r\n self.storedMaps.push(map);\r\n }\r\n }\r\n self.storedMaps.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n var options = TC.Util.extend({}, arguments.length > 1 ? arguments[1] : arguments[0]);\r\n self._dialogDiv = TC.Util.getDiv(options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n if (self.mapIsOffline) {\r\n document.querySelectorAll(self._selectors.OFFLINEHIDDEN).forEach(function (elm) {\r\n elm.classList.add(Consts.classes.HIDDEN);\r\n });\r\n }\r\n\r\n Control.apply(self, arguments);\r\n self.wrap = new TC.wrap.control.OfflineMapMaker(self);\r\n\r\n self.isDownloading = false;\r\n self.baseLayers = [];\r\n\r\n self.options.averageTileSize = self.options.averageTileSize || Cfg.averageTileSize;\r\n self.requestSchemas = [];\r\n self.minResolution = 0;\r\n self.currentMap = null;\r\n\r\n self._loadedCount = 0;\r\n\r\n // Actualización del enlace al modo online\r\n // Parche para detectar cambios en el hash. Lo usamos para actualizar los enlaces a los idiomas\r\n var pushState = history.pushState;\r\n history.pushState = function (_state) {\r\n var result;\r\n //if (typeof history.onpushstate == \"function\") {\r\n // history.onpushstate({ state: state });\r\n //}\r\n result = pushState.apply(history, arguments);\r\n if (self._offlineMapHintDiv) {\r\n self._offlineMapHintDiv.querySelector(self._selectors.EXIT).setAttribute('href', self.getOnlineMapUrl());\r\n }\r\n return result;\r\n };\r\n\r\n // Detección de estado de conexión\r\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {};\r\n const onlineHandler = function () {\r\n if (self._offlineMapHintDiv) {\r\n const panel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n panel.classList.remove(\r\n Consts.classes.CONNECTION_OFFLINE,\r\n Consts.classes.CONNECTION_MOBILE,\r\n Consts.classes.CONNECTION_WIFI);\r\n\r\n var type = connection.type;\r\n switch (type) {\r\n case 1:\r\n case 2:\r\n case undefined:\r\n panel.classList.add(Consts.classes.CONNECTION_WIFI);\r\n break;\r\n default:\r\n panel.classList.add(Consts.classes.CONNECTION_MOBILE);\r\n break;\r\n }\r\n }\r\n };\r\n const offlineHandler = function () {\r\n if (self._offlineMapHintDiv) {\r\n const panel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n panel.classList.add(Consts.classes.CONNECTION_OFFLINE);\r\n panel.classList.remove(Consts.classes.CONNECTION_MOBILE, Consts.classes.CONNECTION_WIFI);\r\n }\r\n };\r\n if (connection.addEventListener) {\r\n connection.addEventListener('typechange', onlineHandler);\r\n }\r\n window.addEventListener('online', onlineHandler);\r\n window.addEventListener('offline', offlineHandler);\r\n self.renderPromise().then(() => {\r\n if (!navigator.onLine) {\r\n offlineHandler();\r\n }\r\n });\r\n};\r\n\r\nTC.inherit(OfflineMapMaker, SWCacheClient);\r\n\r\n(function () {\r\n\r\n Consts.classes.CONNECTION_OFFLINE = Consts.classes.CONNECTION_OFFLINE || 'tc-conn-offline';\r\n Consts.classes.CONNECTION_WIFI = Consts.classes.CONNECTION_WIFI || 'tc-conn-wifi';\r\n Consts.classes.CONNECTION_MOBILE = Consts.classes.CONNECTION_MOBILE || 'tc-conn-mobile';\r\n Consts.classes.OFFLINE = Consts.classes.OFFLINE || 'tc-offline';\r\n\r\n var ALREADY_EXISTS = 'already_exists';\r\n\r\n var requestManifest = async function () {\r\n const manifestFile = document.documentElement.getAttribute('manifest') || 'manifest.appcache';\r\n const response = await TC.ajax({\r\n url: TC.Util.addURLParameters(manifestFile, { ts: Date.now() }),\r\n method: 'GET',\r\n responseType: 'text'\r\n });\r\n let data = response.data.normalize();\r\n var hash = md5(data);\r\n var idxEnd = data.indexOf('NETWORK:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n idxEnd = data.indexOf('FALLBACK:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n idxEnd = data.indexOf('SETTINGS:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n var lines = data.split(/[\\n\\r]/).filter(function (elm) {\r\n return elm.length > 0 && elm.indexOf('#') !== 0 && elm !== 'CACHE:';\r\n });\r\n // Eliminamos la primera línea porque siempre es CACHE MANIFEST\r\n lines.shift();\r\n return {\r\n hash: hash,\r\n urls: lines\r\n };\r\n };\r\n\r\n var ctlProto = OfflineMapMaker.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-omm';\r\n ctlProto.MAP_DEFINITION_PARAM_NAME = \"map-def\";\r\n ctlProto.MAP_EXTENT_PARAM_NAME = \"map-extent\";\r\n ctlProto.LOCAL_STORAGE_KEY_PREFIX = \"TC.offline.map.\";\r\n ctlProto.ROOT_CACHE_NAME = \"root\";\r\n ctlProto.SERVICE_WORKER_FLAG = 'sw';\r\n ctlProto._states = {\r\n READY: 'ready',\r\n EDIT: 'editing',\r\n DOWNLOADING: 'downloading',\r\n DELETING: 'deleting'\r\n };\r\n ctlProto._actions = {\r\n CREATE: 'create',\r\n DELETE: 'delete'\r\n };\r\n ctlProto.offlineControls = [\r\n 'attribution',\r\n 'basemapSelector',\r\n 'offlineMapMaker',\r\n 'click',\r\n 'coordinates',\r\n 'dataLoader',\r\n 'draw',\r\n 'edit',\r\n 'fileImport',\r\n 'fullScreen',\r\n 'geolocation',\r\n 'loadingIndicator',\r\n 'measure',\r\n 'modify',\r\n 'navBar',\r\n 'popup',\r\n 'print',\r\n 'scale',\r\n 'scaleBar',\r\n 'scaleSelector',\r\n 'state',\r\n 'workLayerManager'\r\n ];\r\n\r\n Consts.event.MAPCACHEDOWNLOAD = Consts.event.MAPCACHEDOWNLOAD || 'mapcachedownload.tc';\r\n Consts.event.MAPCACHEDELETE = Consts.event.MAPCACHEDELETE || 'mapcachedelete.tc';\r\n Consts.event.MAPCACHEPROGRESS = Consts.event.MAPCACHEPROGRESS || 'mapcacheprogress.tc';\r\n Consts.event.MAPCACHEERROR = Consts.event.MAPCACHEERROR || 'mapcacheerror.tc';\r\n\r\n const setDownloadingState = function (ctl) {\r\n ctl._state = ctl._states.DOWNLOADING;\r\n TC.Util.closeModal();\r\n ctl.showDownloadProgress(0, 1);\r\n ctl.div.querySelector(ctl._selectors.NEW).classList.add(Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.DRAWING).classList.add(Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.PROGRESS).classList.remove(Consts.classes.HIDDEN);\r\n ctl._dialogDiv.querySelector(ctl._selectors.OKBTN).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.NEWBTN).disabled = true;\r\n ctl.layer.clearFeatures();\r\n ctl.boxDraw.cancel();\r\n };\r\n\r\n const setDeletingState = function (ctl) {\r\n ctl._state = ctl._states.DELETING;\r\n ctl.showDownloadProgress(0, 1);\r\n ctl.div.querySelector(ctl._selectors.DRAWING).classList.add(Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.PROGRESS).classList.add(Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.NEW).classList.remove(Consts.classes.HIDDEN);\r\n ctl.div.querySelectorAll(ctl._selectors.LISTITEM).forEach(function (li) {\r\n li.classList.add(Consts.classes.DISABLED);\r\n });\r\n ctl._dialogDiv.querySelector(ctl._selectors.OKBTN).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.NEWBTN).disabled = false;\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).innerHTML = '';\r\n ctl.boxDraw.cancel();\r\n };\r\n\r\n const setNameEditingState = function (ctl, li) {\r\n li.querySelector('span').classList.add(Consts.classes.HIDDEN);\r\n const textbox = li.querySelector(ctl._selectors.TEXTBOX);\r\n textbox.classList.remove(Consts.classes.HIDDEN);\r\n textbox.value = li.querySelector('span a').innerHTML;\r\n textbox.focus();\r\n li.querySelector(ctl._selectors.SAVEBTN).classList.remove(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.CANCELBTN).classList.remove(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.EDITBTN).classList.add(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.VIEWBTN).classList.add(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.DELETEBTN).classList.add(Consts.classes.HIDDEN);\r\n };\r\n\r\n const setNameReadyState = function (ctl, li) {\r\n li.querySelector('span').classList.remove(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.TEXTBOX).classList.add(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.SAVEBTN).classList.add(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.CANCELBTN).classList.add(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.EDITBTN).classList.remove(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.VIEWBTN).classList.remove(Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.DELETEBTN).classList.remove(Consts.classes.HIDDEN);\r\n };\r\n\r\n var formatNumber = function (number) {\r\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \".\");\r\n };\r\n\r\n var updateResolutions = function (ctl, options) {\r\n var opts = options || {};\r\n const resDiv = ctl._dialogDiv.querySelector(ctl._classSelector + '-res');\r\n const range = ctl._dialogDiv.querySelector(ctl._selectors.RNGMAXRES);\r\n var resolutions = ctl.getResolutions();\r\n var resText, resLevel, resLeft;\r\n if (resolutions.length) {\r\n range.setAttribute('max', resolutions.length - 1);\r\n if (ctl.minResolution) {\r\n // Si ya había resolución previa y no se ha tocado el slider, se actualiza su valor\r\n if (opts.rangeValue === undefined) {\r\n for (var i = 0, len = resolutions.length; i < len; i++) {\r\n if (ctl.minResolution >= resolutions[i]) {\r\n range.value = i;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (opts.rangeValue === undefined) {\r\n // Si no había resolución previa se selecciona un valor inicial igual a la resolución actual\r\n const currentResolution = ctl.map.getResolution();\r\n range.value = resolutions.filter(r => r > currentResolution).length;\r\n }\r\n }\r\n resLevel = parseInt(range.value);\r\n var resValue = Math.floor(new Number(resolutions[resLevel]) * 1000) / 1000;\r\n resText = ctl.getLocaleString('metersPerPixel', {\r\n value: resValue.toLocaleString((ctl.map ? ctl.map.options.locale : Cfg.locale).replace('_', '-'))\r\n });\r\n resLeft = (resLevel + 1) * 100 / (resolutions.length + 1) + '%';\r\n range.disabled = false;\r\n ctl.minResolution = resolutions[range.value];\r\n }\r\n else {\r\n resLevel = 0;\r\n resText = '';\r\n range.value = 0;\r\n resLeft = '0';\r\n ctl.minResolution = 0;\r\n range.disabled = true;\r\n }\r\n ctl._dialogDiv.querySelector(ctl._selectors.RESOLUTIONPANEL).classList.toggle(Consts.classes.HIDDEN, !!range.disabled);\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).classList.toggle(Consts.classes.HIDDEN, !!range.disabled);\r\n\r\n resDiv.style.left = resLeft;\r\n resDiv.innerHTML = resText;\r\n };\r\n\r\n const findTileMatrixLimits = function (schema, resolution) {\r\n var result = null;\r\n for (var i = 0, len = schema.tileMatrixLimits.length; i < len; i++) {\r\n result = schema.tileMatrixLimits[i];\r\n if (result.res <= resolution) {\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n const updateThumbnails = function (ctl) {\r\n ctl._dialogDiv.querySelectorAll(ctl._classSelector + '-bl-node input[type=checkbox]').forEach(function (cb, _idx) {\r\n if (cb.checked) {\r\n var schema = ctl.requestSchemas.find(function (elm) {\r\n return elm.layerId === cb.value;\r\n });\r\n if (schema) {\r\n var tml = findTileMatrixLimits(schema, ctl.minResolution);\r\n if (tml) {\r\n const tmsKey = '{TileMatrixSet}';\r\n const tmKey = '{TileMatrix}';\r\n const trKey = '{TileRow}';\r\n const tcKey = '{TileCol}';\r\n var url = schema.url;\r\n if (url.indexOf(tmKey) < 0) {\r\n // Caso KVP\r\n var qsIdx = url.indexOf('?');\r\n if (qsIdx >= 0) {\r\n url = url.substr(0, qsIdx);\r\n }\r\n for (var j = 0, lenj = ctl.baseLayers.length; j < lenj; j++) {\r\n var l = ctl.baseLayers[j];\r\n if (l.id === schema.layerId) {\r\n url = url + '?layer=' + l.layerNames + '&style=default&tilematrixset=' + tmsKey +\r\n '&Service=WMTS&Request=GetTile&Version=1.0.0&Format=' + l.format +\r\n '&TileMatrix=' + tmKey + '&TileRow=' + trKey + '&TileCol=' + tcKey;\r\n break;\r\n }\r\n }\r\n }\r\n while (cb && cb.tagName !== 'LABEL') {\r\n cb = cb.parentElement;\r\n }\r\n if (cb) {\r\n cb.style.backgroundSize = 'auto';\r\n cb.style.backgroundPosition = 'left bottom';\r\n cb.style.backgroundImage = 'url(' + url\r\n .replace(tmsKey, schema.tileMatrixSet)\r\n .replace(tmKey, tml.mId)\r\n .replace(trKey, tml.rt)\r\n .replace(tcKey, tml.cl) + ')';\r\n }\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n const formatSize = function (ctl, size) {\r\n var result;\r\n if (size < 1) {\r\n result = ctl.getLocaleString('lessThan1Mb');\r\n }\r\n else {\r\n result = ctl.getLocaleString('approxXMb', { quantity: formatNumber(size) });\r\n }\r\n return result;\r\n };\r\n\r\n const showEstimatedMapSize = function (ctl) {\r\n var text = '';\r\n ctl.tileCount = 0;\r\n for (var i = 0, ii = ctl.requestSchemas.length; i < ii; i++) {\r\n var schema = ctl.requestSchemas[i];\r\n for (var j = 0, jj = schema.tileMatrixLimits.length; j < jj; j++) {\r\n var tml = schema.tileMatrixLimits[j];\r\n if (tml.res < ctl.minResolution) {\r\n break;\r\n }\r\n ctl.tileCount += (tml.cr - tml.cl + 1) * (tml.rb - tml.rt + 1);\r\n }\r\n }\r\n if (ctl.tileCount) {\r\n ctl.estimatedMapSize = Math.round(ctl.tileCount * ctl.options.averageTileSize / 1048576);\r\n text = ctl.getLocaleString('xTiles', { quantity: formatNumber(ctl.tileCount) }) + ' (' + formatSize(ctl, ctl.estimatedMapSize) + ')';\r\n }\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).innerHTML = text;\r\n };\r\n\r\n const getListElementByMapName = function (ctl, name) {\r\n const lis = ctl.div.querySelectorAll(ctl._selectors.LISTITEM);\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n const anchor = li.querySelector('a');\r\n if (anchor && anchor.innerHTML === name) {\r\n return li;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const getListElementByMapUrl = function (ctl, url) {\r\n var hashIdx = url.indexOf('#');\r\n if (hashIdx >= 0) {\r\n url = url.substr(0, hashIdx);\r\n }\r\n const lis = ctl.div.querySelectorAll(ctl._selectors.LISTITEM);\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n const anchor = li.querySelector('a');\r\n if (anchor && anchor.getAttribute('href') === url) {\r\n return li;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n var saveMapToStorage = function (ctl, map) {\r\n var result = false;\r\n if (ctl.localStorage) {\r\n ctl.localStorage.setItem(ctl.LOCAL_STORAGE_KEY_PREFIX + encodeURIComponent(map.url), map.extent + \" \" + map.name);\r\n result = true;\r\n }\r\n return result;\r\n };\r\n\r\n var removeMapFromStorage = function (ctl, url) {\r\n var result = false;\r\n if (ctl.localStorage) {\r\n ctl.localStorage.removeItem(ctl.LOCAL_STORAGE_KEY_PREFIX + encodeURIComponent(url));\r\n result = true;\r\n }\r\n return result;\r\n };\r\n\r\n const addMap = function (ctl) {\r\n const map = ctl.currentMap;\r\n if (saveMapToStorage(ctl, map)) {\r\n ctl.getRenderedHtml(ctl.CLASS + '-map-node', { name: map.name, url: map.url }, function (html) {\r\n const parser = new DOMParser();\r\n ctl.div.querySelector(ctl._selectors.LIST).appendChild(parser.parseFromString(html, 'text/html').body.firstChild);\r\n ctl.div.querySelector(ctl._selectors.EMPTYLIST).setAttribute('hidden', 'hidden');\r\n ctl.div.querySelector(ctl._selectors.SEARCH).disabled = false;\r\n });\r\n ctl.storedMaps.push(map);\r\n }\r\n };\r\n\r\n const removeMap = function (ctl, url) {\r\n const map = ctl.findStoredMap({ url: url });\r\n if (map) {\r\n if (removeMapFromStorage(ctl, url)) {\r\n const li = getListElementByMapName(ctl, map.name);\r\n if (li) {\r\n li.parentElement.removeChild(li);\r\n }\r\n }\r\n var idx = ctl.storedMaps.indexOf(map);\r\n ctl.storedMaps.splice(idx, 1);\r\n if (!ctl.storedMaps.length) {\r\n ctl.div.querySelector(ctl._selectors.SEARCH).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.EMPTYLIST).removeAttribute('hidden');\r\n }\r\n\r\n ctl.layer.features\r\n .filter(f => f.data.map === map.name)\r\n .forEach(f => ctl.layer.removeFeature(f));\r\n\r\n return map.name;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-omm.mjs');\r\n const mapNodeTemplatePromise = import('../templates/tc-ctl-omm-map-node.mjs');\r\n const baseLayerNodeTemplatePromise = import('../templates/tc-ctl-omm-bl-node.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-omm-dialog.mjs');\r\n const offlinePanelTemplatePromise = import('../templates/tc-ctl-omm-off-panel.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-map-node'] = (await mapNodeTemplatePromise).default;\r\n template[self.CLASS + '-bl-node'] = (await baseLayerNodeTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n template[self.CLASS + '-off-panel'] = (await offlinePanelTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n var renderObject = { storedMaps: self.storedMaps, listId: self.CLASS + '-list-' + TC.getUID() };\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).addEventListener(Consts.event.CLICK, function (e) {\r\n e.preventDefault();\r\n this.selectionStart = 0;\r\n this.selectionEnd = this.value.length;\r\n this.focus();\r\n\r\n });\r\n }).then(function () {\r\n self.renderData(renderObject, function () {\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).addEventListener(Consts.event.CLICK, function () {\r\n self.generateCache();\r\n }, { passive: true });\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).addEventListener('input', function () {\r\n self._updateReadyState();\r\n });\r\n self.div.querySelector(self._selectors.NEWBTN).addEventListener(Consts.event.CLICK, function () {\r\n self.setEditState();\r\n }, { passive: true });\r\n self.div.querySelector(self._classSelector + '-btn-cancel-draw').addEventListener(Consts.event.CLICK, function () {\r\n self.setReadyState();\r\n }, { passive: true });\r\n\r\n self.div.querySelector(self._classSelector + '-btn-cancel-dl').addEventListener(Consts.event.CLICK, function () {\r\n self.cancelCacheRequest();\r\n }, { passive: true });\r\n\r\n const list = self.div.querySelector(self._selectors.LIST);\r\n list.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.DELETEBTN, function (e) {\r\n self.startDeleteMap(e.target.parentElement.querySelector('a').innerHTML);\r\n }), { passive: true });\r\n list.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.EDITBTN, function (e) {\r\n setNameEditingState(self, e.target.parentElement);\r\n }), { passive: true });\r\n list.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.CANCELBTN, function (e) {\r\n const li = e.target.parentElement;\r\n li.querySelector(self._selectors.TEXTBOX).value = li.querySelector('a').innerHTML;\r\n setNameReadyState(self, li);\r\n }), { passive: true });\r\n list.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.SAVEBTN, function (e) {\r\n const li = e.target.parentElement;\r\n setNameReadyState(self, li);\r\n const anchor = li.querySelector('a');\r\n const newName = li.querySelector(self._selectors.TEXTBOX).value;\r\n const map = self.findStoredMap({ url: anchor.getAttribute('href') });\r\n if (map) {\r\n map.name = newName;\r\n anchor.innerHTML = newName;\r\n anchor.setAttribute('title', newName);\r\n saveMapToStorage(self, map);\r\n }\r\n }), { passive: true });\r\n list.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.VIEWBTN, function (e) {\r\n const btn = e.target;\r\n var showExtent = !btn.classList.contains(Consts.classes.ACTIVE);\r\n self.div.querySelectorAll(self._selectors.VIEWBTN).forEach(b => b.classList.remove(Consts.classes.ACTIVE));\r\n const mapName = btn.parentElement.querySelector('a').innerHTML;\r\n if (mapName) {\r\n var map = self.findStoredMap({ name: mapName });\r\n if (map) {\r\n var extent = getExtentFromString(map.extent);\r\n self.layer.clearFeatures();\r\n if (showExtent) {\r\n self.layer.addPolygon(\r\n [\r\n [\r\n [extent[0], extent[1]],\r\n [extent[0], extent[3]],\r\n [extent[2], extent[3]],\r\n [extent[2], extent[1]]\r\n ]\r\n ]\r\n , {\r\n showsPopup: false,\r\n data: {\r\n map: map.name\r\n }\r\n }).then(function () {\r\n self.layer.map.zoomToFeatures(self.layer.features);\r\n });\r\n btn.classList.add(Consts.classes.ACTIVE);\r\n btn.setAttribute('title', self.getLocaleString('removeMapExtent'));\r\n }\r\n }\r\n }\r\n }), { passive: true });\r\n\r\n var _filter = function (searchTerm) {\r\n searchTerm = searchTerm.toLowerCase();\r\n //tc-ctl-omm-map-available-empty\r\n const lis = self.div.querySelectorAll(self._selectors.LISTITEM);\r\n lis.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n const mapLis = [];\r\n lis.forEach(function (li) {\r\n if (li.matches('li:not([class]),li.' + Consts.classes.ACTIVE)) {\r\n mapLis.push(li);\r\n }\r\n });\r\n\r\n if (searchTerm.length === 0) {\r\n mapLis.forEach(function (li) {\r\n li.style.removeProperty('display');\r\n });\r\n self.div.querySelector(self._classSelector + '-map-search-icon').style.visibility = 'visible';\r\n } else {\r\n self.div.querySelector(self._classSelector + '-map-search-icon').style.visibility = 'hidden';\r\n var r = new RegExp(searchTerm, 'i');\r\n mapLis.forEach(function (li) {\r\n li.style.display = r.test(li.querySelector('a').textContent) ? '' : 'none';\r\n });\r\n\r\n if (!mapLis.some(function (li) {\r\n return !li.hidden;\r\n })) {\r\n lis.forEach(function (li) {\r\n if (li.matches('[class^=\"tc-ctl-omm-map-not\"]')) {\r\n li.style.removeProperty('display');\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n const trackSearch = self.div.querySelector(self._selectors.SEARCH);\r\n const searchListener = function () {\r\n _filter(this.value.toLowerCase().trim());\r\n };\r\n trackSearch.addEventListener('keyup', searchListener);\r\n trackSearch.addEventListener('search', searchListener);\r\n\r\n self._dialogDiv.querySelector(self._selectors.BLLIST).addEventListener('change', TC.EventTarget.listenerBySelector('input[type=checkbox]', function (e) {\r\n const checkbox = e.target;\r\n if (checkbox.checked) {\r\n self.baseLayers.push(self.map.getLayer(checkbox.value));\r\n }\r\n else {\r\n for (var i = 0, ii = self.baseLayers.length; i < ii; i++) {\r\n const bl = self.baseLayers[i];\r\n if (bl.id === checkbox.value) {\r\n self.baseLayers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n self.updateRequestSchemas();\r\n updateResolutions(self);\r\n updateThumbnails(self);\r\n self._updateReadyState();\r\n showEstimatedMapSize(self);\r\n }));\r\n\r\n const range = self._dialogDiv.querySelector(self._selectors.RNGMAXRES);\r\n const rangeListener = function (e) {\r\n updateResolutions(self, {\r\n rangeValue: e.target.value\r\n });\r\n updateThumbnails(self);\r\n showEstimatedMapSize(self);\r\n };\r\n range.addEventListener('input', rangeListener);\r\n range.addEventListener('change', rangeListener);\r\n\r\n const li = getListElementByMapUrl(self, location.href);\r\n if (li) {\r\n li.classList.add(Consts.classes.ACTIVE);\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n })\r\n .then(function () {\r\n resolve();\r\n })\r\n .catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n\r\n // Control para evitar que se cancele una descarga de cache al salir de la página\r\n window.addEventListener('beforeunload', function (e) {\r\n if (self.isDownloading) {\r\n var msg = self.getLocaleString('cb.mapDownloading.warning');\r\n e.returnValue = msg;\r\n return msg;\r\n }\r\n }, true);\r\n }));\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n const swCacheClientPromise = SWCacheClient.prototype.register.call(self, map);\r\n\r\n self.getServiceWorker().then(\r\n function () {\r\n navigator.serviceWorker.ready.then(function () {\r\n navigator.serviceWorker.addEventListener('message', function (event) {\r\n switch (event.data.event) {\r\n case 'progress':\r\n self.trigger(Consts.event.MAPCACHEPROGRESS, {\r\n url: event.data.name,\r\n requestId: event.data.requestId,\r\n loaded: event.data.count,\r\n total: event.data.total\r\n });\r\n break;\r\n case 'cached':\r\n self.trigger(Consts.event.MAPCACHEDOWNLOAD, {\r\n url: event.data.name,\r\n requestId: event.data.requestId\r\n });\r\n break;\r\n case 'deleted':\r\n self.trigger(Consts.event.MAPCACHEDELETE, { url: event.data.name });\r\n break;\r\n case 'error':\r\n if (event.data.action === self._actions.CREATE) {\r\n TC.error(self.getLocaleString('cb.resourceDownload.error', { url: event.data.url }));\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n });\r\n\r\n if (navigator.onLine) {\r\n // Cacheamos mediante service worker las URLs del manifiesto\r\n requestManifest().then(function (obj) {\r\n const hashStorageKey = self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME + '.hash';\r\n var hash;\r\n if (self.localStorage) {\r\n hash = self.localStorage.getItem(hashStorageKey);\r\n }\r\n if (hash !== obj.hash) {\r\n const firstLoad = !hash;\r\n const requestId = self.cacheUrlList(obj.urls);\r\n const onCacheDownload = function (e) {\r\n if (e.requestId === requestId) {\r\n if (self.localStorage) {\r\n self.localStorage.setItem(hashStorageKey, obj.hash);\r\n }\r\n if (!firstLoad) {\r\n TC.confirm(self.getLocaleString('newAppVersionAvailable'), function () {\r\n location.reload();\r\n });\r\n }\r\n self.off(Consts.event.MAPCACHEDOWNLOAD, onCacheDownload);\r\n }\r\n };\r\n self.on(Consts.event.MAPCACHEDOWNLOAD, onCacheDownload);\r\n }\r\n });\r\n }\r\n },\r\n function (error) {\r\n self.renderPromise().then(function () {\r\n const container = self.div.querySelector(`.${self.CLASS}-new`);\r\n const warning = document.createElement('div');\r\n warning.classList.add('tc-alert', 'tc-alert-warning');\r\n const header = document.createElement('p');\r\n const text = document.createElement('strong');\r\n text.innerHTML = self.getLocaleString('offlineMap.error');\r\n header.appendChild(text);\r\n const reason = document.createElement('p');\r\n reason.innerHTML = error.message;\r\n warning.appendChild(header);\r\n warning.appendChild(reason);\r\n container.querySelector(self._selectors.NEWBTN).classList.add(Consts.classes.HIDDEN);\r\n container.appendChild(warning);\r\n });\r\n }\r\n ).catch(() => console.log(\"No SW available: no events handled\"));\r\n\r\n if (self.mapIsOffline) {\r\n map.div.classList.add(Consts.classes.OFFLINE);\r\n\r\n self.getRenderedHtml(self.CLASS + '-off-panel', { url: self.getOnlineMapUrl() }, function (html) {\r\n // Si no está especificado, el panel de aviso offline se cuelga del div del mapa\r\n self._offlineMapHintDiv = TC.Util.getDiv(self.options.offlineMapHintDiv);\r\n if (!self.options.offlineMapHintDiv) {\r\n map.div.appendChild(self._offlineMapHintDiv);\r\n }\r\n self._offlineMapHintDiv.innerHTML = html;\r\n if (!navigator.onLine) {\r\n const offPanel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n offPanel.classList.add(Consts.classes.CONNECTION_OFFLINE);\r\n offPanel.classList.remove(Consts.classes.CONNECTION_MOBILE, Consts.classes.CONNECTION_WIFI);\r\n }\r\n self._offlineMapHintDiv.querySelector(self._selectors.EXIT).addEventListener(Consts.event.CLICK, function (e) {\r\n TC.confirm(self.getLocaleString('offlineMapExit.confirm'),\r\n null,\r\n function () {\r\n e.preventDefault();\r\n });\r\n });\r\n });\r\n }\r\n\r\n const drawId = self.getUID();\r\n const layerId = self.getUID();\r\n self.layerPromise = map.addLayer({\r\n id: layerId,\r\n type: Consts.layerType.VECTOR,\r\n stealth: true,\r\n owner: self,\r\n styles: {\r\n line: map.options.styles.line\r\n }\r\n });\r\n self.layer = null;\r\n const objects = await Promise.all([\r\n self.layerPromise,\r\n self.renderPromise()\r\n ]);\r\n const layer = self.layer = objects[0];\r\n self.boxDraw = await map.addControl('draw', {\r\n id: drawId,\r\n div: self.div.querySelector(self._selectors.DRAW),\r\n mode: Consts.geom.RECTANGLE,\r\n singleSketch: true\r\n });\r\n self.boxDraw.setLayer(layer);\r\n self.boxDraw\r\n .on(Consts.event.DRAWSTART, function (_e) {\r\n self.map.toast(self.getLocaleString('clickOnDownloadAreaOppositeCorner'), { type: Consts.msgType.INFO });\r\n })\r\n .on(Consts.event.DRAWEND, function (e) {\r\n var points = e.feature.geometry[0];\r\n var pStart = points[0];\r\n var pEnd = points[2];\r\n var minx = Math.min(pStart[0], pEnd[0]);\r\n var maxx = Math.max(pStart[0], pEnd[0]);\r\n var miny = Math.min(pStart[1], pEnd[1]);\r\n var maxy = Math.max(pStart[1], pEnd[1]);\r\n self.setExtent([minx, miny, maxx, maxy]);\r\n const checkboxes = self._dialogDiv.querySelectorAll('input[type=checkbox]');\r\n checkboxes.forEach(function (checkbox) {\r\n // Comprobamos que la extensión del mapa está disponible a alguna resolución\r\n const layer = self.map.getLayer(checkbox.value);\r\n var li = checkbox;\r\n while (li && li.tagName !== 'LI') {\r\n li = li.parentElement;\r\n }\r\n if (layer.wrap.getCompatibleMatrixSets(map.crs).includes(layer.matrixSet)) {\r\n const tml = self.wrap.getRequestSchemas({\r\n extent: self.extent,\r\n layers: [layer]\r\n })[0].tileMatrixLimits;\r\n\r\n li.classList.toggle(Consts.classes.HIDDEN, !tml.length);\r\n }\r\n else {\r\n li.classList.add(Consts.classes.HIDDEN);\r\n }\r\n });\r\n const visibleLi = self._dialogDiv.querySelector(self._selectors.BLLISTITEM + ':not(.' + Consts.classes.HIDDEN + ')');\r\n self._dialogDiv.querySelector(self._selectors.BLLISTTEXT).innerHTML = self.getLocaleString(visibleLi ? 'selectAtLeastOne' : 'cb.noMapsAtSelectedExtent');\r\n\r\n updateThumbnails(self);\r\n showEstimatedMapSize(self);\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-dialog'), {\r\n openCallback: function () {\r\n setTimeout(function () { // Este timeout evita el pulsado accidental cuando sale el diálogo\r\n checkboxes.forEach(function (cb) {\r\n cb.disabled = false;\r\n });\r\n }, 100);\r\n var time;\r\n if (Date.prototype.toLocaleString) {\r\n var opt = {};\r\n opt.year = opt.month = opt.day = opt.hour = opt.minute = opt.second = 'numeric';\r\n time = new Date().toLocaleString(self.map.options.locale.replace('_', '-'), opt);\r\n }\r\n else {\r\n time = new Date().toString();\r\n }\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value = time;\r\n self._updateReadyState();\r\n },\r\n closeCallback: function () {\r\n checkboxes.forEach(function (cb) {\r\n cb.disabled = true;\r\n });\r\n self.boxDraw.layer.clearFeatures();\r\n }\r\n });\r\n });\r\n\r\n map.on(Consts.event.CONTROLDEACTIVATE, function (e) {\r\n if (self.boxDraw === e.control) {\r\n if (self._state === self._states.EDITING) {\r\n self.setReadyState();\r\n }\r\n }\r\n });\r\n\r\n var addRenderedListNode = function (layer) {\r\n var result = false;\r\n const blList = self._dialogDiv.querySelector(self._selectors.BLLIST);\r\n const isLayerAdded = function () {\r\n return !!blList.querySelector('li[data-layer-uid=\"' + layer.id + '\"]');\r\n };\r\n var isValidLayer = layer.type === Consts.layerType.WMTS && !layer.mustReproject;\r\n if (TC.Util.detectSafari() && TC.Util.detectIOS()) {\r\n isValidLayer = isValidLayer && TC.Util.isSameOrigin(layer.url);\r\n }\r\n if (isValidLayer && !isLayerAdded()) {\r\n result = true;\r\n self.getRenderedHtml(self.CLASS + '-bl-node', layer, function (html) {\r\n if (!isLayerAdded()) {\r\n const parser = new DOMParser();\r\n blList.appendChild(parser.parseFromString(html, 'text/html').body.firstChild);\r\n }\r\n });\r\n }\r\n return result;\r\n };\r\n\r\n const addLayer = function (layer) {\r\n if (layer.isBase && self.mapIsOffline) {\r\n // Capamos las resoluciones de la capa\r\n const resolutions = layer.getResolutions();\r\n if (resolutions) {\r\n const cachedResolutions = resolutions.filter(r => r >= self.currentMapDefinition.res);\r\n if (cachedResolutions.length) {\r\n layer.setResolutions(cachedResolutions);\r\n }\r\n }\r\n }\r\n //14/03/2019 GLS: esperamos a que se haya renderizado el dialogo para obtener la lista\r\n self.renderPromise().then(function () {\r\n addRenderedListNode(layer);\r\n });\r\n };\r\n\r\n map\r\n .on(Consts.event.LAYERADD, function (e) {\r\n addLayer(e.layer);\r\n })\r\n .on(Consts.event.LAYERREMOVE, function (e) {\r\n //14/03/2019 GLS: esperamos a que se haya renderizado el dialogo para obtener la lista\r\n self.renderPromise().then(function () {\r\n const layer = e.layer;\r\n if (layer.type === Consts.layerType.WMTS) {\r\n const li = self._dialogDiv\r\n .querySelector(self._selectors.BLLIST)\r\n .querySelector('li[data-layer-uid=\"' + layer.id + '\"]');\r\n li.parentElement.removeChild(li);\r\n }\r\n });\r\n })\r\n .on(Consts.event.PROJECTIONCHANGE, function (_e) {\r\n map.baseLayers.forEach(l => addLayer(l));\r\n });\r\n\r\n map.ready(function () {\r\n if (self.mapIsOffline) {\r\n // Deshabilitamos los controles que no son usables en modo offline\r\n var offCtls = [];\r\n self.offlineControls.forEach(function (offCtl) {\r\n offCtl = offCtl.substr(0, 1).toUpperCase() + offCtl.substr(1);\r\n offCtls = offCtls.concat(map.getControlsByClass('TC.control.' + offCtl));\r\n });\r\n\r\n const disablingReason = self.getLocaleString('thisControlCannotBeUsedInOfflineMode');\r\n\r\n map.controls.forEach(function enableOrDisable(control) {\r\n if (offCtls.indexOf(control) < 0) {\r\n control.disable({ reason: disablingReason });\r\n }\r\n });\r\n\r\n document.querySelectorAll(self._selectors.OFFLINEHIDDEN).forEach(function (elm) {\r\n elm.classList.add(Consts.classes.HIDDEN);\r\n });\r\n }\r\n });\r\n\r\n map.loaded(function () {\r\n\r\n self.layerPromise.then(function (layer) {\r\n map.putLayerOnTop(layer);\r\n });\r\n\r\n self.renderPromise().then(function () {\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = false;\r\n map.baseLayers.forEach(addRenderedListNode);\r\n });\r\n\r\n if (self.mapIsOffline) {\r\n const mapDef = self.currentMapDefinition;\r\n const isSameLayer = function (layer, mapDefLayer) {\r\n const layerUrl = layer.url.indexOf('//') === 0 ? location.protocol + layer.url : layer.url;\r\n return layerUrl === mapDef.url[mapDefLayer.urlIdx] && layer.layerNames === mapDefLayer.id && layer.matrixSet === mapDef.tms[mapDefLayer.tmsIdx];\r\n };\r\n // Añadimos al mapa las capas guardadas que no están por defecto\r\n const missingLayers = map.options.availableBaseLayers\r\n .filter((abl) => abl.type === Consts.layerType.WMTS) // Capas cacheables\r\n .filter((abl) => { // Que estén en el mapa sin conexión\r\n return mapDef.layers.some((l) => isSameLayer(abl, l));\r\n })\r\n .filter((abl) => { // Que no estén en las capas por defecto\r\n return !map.baseLayers.some((l) => l.id === abl.id);\r\n });\r\n Promise.all(missingLayers.map((layer) => {\r\n return map.addLayer(TC.Util.extend({}, layer, { isBase: true }));\r\n })).finally(function () {\r\n // Obtenemos las capas cacheadas\r\n const cachedLayers = [];\r\n for (var i = 0, ii = mapDef.layers.length; i < ii; i++) {\r\n for (var j = 0, jj = map.baseLayers.length; j < jj; j++) {\r\n const baseLayer = map.baseLayers[j];\r\n if (baseLayer && baseLayer.type === Consts.layerType.WMTS && isSameLayer(baseLayer, mapDef.layers[i])) {\r\n cachedLayers.push(baseLayer);\r\n break;\r\n }\r\n }\r\n }\r\n if (cachedLayers.length) {\r\n map.setBaseLayer(cachedLayers[0], function () {\r\n // Quitamos las capas no disponibles (la capa en blanco la mantenemos)\r\n for (var i = map.baseLayers.length - 1; i >= 0; i--) {\r\n const baseLayer = map.baseLayers[i];\r\n if (baseLayer && baseLayer.type !== Consts.layerType.VECTOR && !cachedLayers.includes(baseLayer)) {\r\n map.removeLayer(baseLayer);\r\n }\r\n }\r\n\r\n map.setExtent(self.currentMapExtent, { animate: false, contain: true });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n self\r\n .on(Consts.event.MAPCACHEDOWNLOAD, function (e) {\r\n self.isDownloading = false;\r\n const removeHash = function (url) {\r\n const hashIdx = url.indexOf('#');\r\n return hashIdx >= 0 ? url.substr(0, hashIdx) : url;\r\n };\r\n const url = removeHash(e.url);\r\n const li = getListElementByMapUrl(self, url);\r\n if (li && !self.serviceWorkerEnabled) {\r\n // Se ha descargado un mapa cuando se quería borrar. Pasa cuando la cache ya estaba borrada pero la entrada en localStorage no.\r\n li.classList.remove(Consts.classes.DISABLED);\r\n TC.alert(self.getLocaleString('cb.delete.error'));\r\n }\r\n else {\r\n if (self.currentMap && url === self.currentMap.url) {\r\n addMap(self);\r\n map.toast(self.getLocaleString('mapDownloaded', { mapName: self.currentMap.name }));\r\n }\r\n }\r\n self.currentMap = null;\r\n self.setReadyState();\r\n })\r\n .on(Consts.event.MAPCACHEDELETE, function (e) {\r\n self.isDownloading = false;\r\n var mapName = removeMap(self, e.url) || self.currentMap && self.currentMap.name;\r\n self.currentMap = null;\r\n if (mapName) {\r\n map.toast(self.getLocaleString('mapDeleted', { mapName: mapName }));\r\n }\r\n self.setReadyState();\r\n })\r\n .on(Consts.event.MAPCACHEPROGRESS, function (e) {\r\n var total = e.total;\r\n if (!total && self.requestSchemas) {\r\n total = self.requestSchemas[0].tileCount;\r\n }\r\n var loaded = e.loaded;\r\n if (loaded) {\r\n self._loadedCount = loaded;\r\n }\r\n else {\r\n self._loadedCount += 1;\r\n loaded = self._loadedCount;\r\n }\r\n self.showDownloadProgress(loaded, total);\r\n })\r\n .on(Consts.event.MAPCACHEERROR, function (e) {\r\n self.isDownloading = false;\r\n self.setReadyState();\r\n var msg = self.getLocaleString('cb.mapCreation.error');\r\n var handleError = true;\r\n switch (e.reason) {\r\n case 'quota':\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonQuota');\r\n break;\r\n case 'resource':\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonResource');\r\n break;\r\n case 'manifest':\r\n if (e.status == '410') {\r\n removeMap(self, e.url);\r\n }\r\n handleError = false;\r\n break;\r\n case ALREADY_EXISTS:\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonAlreadyExists');\r\n break;\r\n default:\r\n break;\r\n }\r\n if (handleError) {\r\n if (TC.Util.detectIE()) {\r\n TC.error(msg);\r\n TC.alert(self.getLocaleString('cb.mapCreation.error.reasonEdge'));\r\n }\r\n else {\r\n TC.alert(msg);\r\n }\r\n }\r\n self.currentMap = null;\r\n });\r\n\r\n await swCacheClientPromise;\r\n return self;\r\n };\r\n\r\n ctlProto.setExtent = function (extent) {\r\n var self = this;\r\n if (Array.isArray(extent) && extent.length >= 4) {\r\n self.extent = extent;\r\n self.updateRequestSchemas();\r\n }\r\n };\r\n\r\n ctlProto._updateReadyState = function () {\r\n const self = this;\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled =\r\n !self.extent ||\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value.length === 0 ||\r\n self._dialogDiv.querySelector(self._selectors.RNGMAXRES).disabled;\r\n };\r\n\r\n ctlProto.setReadyState = function () {\r\n const self = this;\r\n self._state = self._states.READY;\r\n self.showDownloadProgress(0, 1);\r\n self.div.querySelector(self._selectors.DRAWING).classList.add(Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.PROGRESS).classList.add(Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.NEW).classList.remove(Consts.classes.HIDDEN);\r\n self.div.querySelectorAll(self._selectors.LISTITEM).forEach(function (li) {\r\n li.classList.remove(Consts.classes.DISABLED);\r\n });\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled = true;\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = false;\r\n self._dialogDiv.querySelector(self._selectors.TILECOUNT).innerHTML = '';\r\n self.extent = null;\r\n self._loadedCount = 0;\r\n if (self.boxDraw) {\r\n self.boxDraw.cancel();\r\n }\r\n };\r\n\r\n ctlProto.setEditState = function () {\r\n const self = this;\r\n self._state = self._states.EDITING;\r\n self.showDownloadProgress(0, 1);\r\n self.div.querySelector(self._selectors.NEW).classList.add(Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.PROGRESS).classList.add(Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.DRAWING).classList.remove(Consts.classes.HIDDEN);\r\n self.map.toast(self.getLocaleString('clickOnDownloadAreaFirstCorner'), { type: Consts.msgType.INFO });\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled = true;\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = true;\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value = '';\r\n self.boxDraw.activate();\r\n };\r\n\r\n ctlProto.generateCache = function () {\r\n const self = this;\r\n const options = {\r\n mapName: self._dialogDiv.querySelector(self._selectors.NAMETB).value\r\n };\r\n if (self.findStoredMap({ name: options.mapName })) {\r\n TC.alert(self.getLocaleString('cb.mapNameAlreadyExists.error', options));\r\n }\r\n else {\r\n var startRequest = function () {\r\n self.div.querySelector(self._classSelector + '-name').innerHTML = options.mapName;\r\n self.map.toast(self.getLocaleString('downloadingMap', { mapName: options.mapName }));\r\n setDownloadingState(self);\r\n self.requestCache(options);\r\n };\r\n\r\n // Usamos Storage API si existe\r\n if (navigator.storage && navigator.storage.estimate) {\r\n navigator.storage.estimate().then(function (estimate) {\r\n const availableMB = (estimate.quota - estimate.usage) / 1048576;\r\n if (self.estimatedMapSize < availableMB) {\r\n startRequest();\r\n }\r\n else {\r\n TC.confirm(self.getLocaleString('cb.mapCreation.warning.reasonSize', {\r\n mapName: options.mapName,\r\n mapSize: formatSize(self, self.estimatedMapSize),\r\n availableStorage: formatSize(self, Math.round(availableMB))\r\n }), startRequest);\r\n }\r\n });\r\n }\r\n else {\r\n startRequest();\r\n }\r\n }\r\n };\r\n\r\n ctlProto.cacheUrlList = function (urlList, options) {\r\n var self = this;\r\n var opts = options || {};\r\n const requestId = Date.now().toString();\r\n self.createCache(opts.name || self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME, {\r\n requestId: requestId,\r\n urlList: urlList,\r\n silent: opts.silent\r\n });\r\n return requestId;\r\n };\r\n\r\n ctlProto.requestCache = function (options) {\r\n var self = this;\r\n var opts = options || {};\r\n if (self.map) {\r\n var extent = opts.extent || self.extent || self.map.getExtent();\r\n self.updateRequestSchemas({ extent: extent });\r\n\r\n if (self.requestSchemas) {\r\n var filterTml = function (elm, i, arr) {\r\n var result = elm.res >= self.minResolution;\r\n if (!result && i > 0) {\r\n result = arr[i - 1].res > self.minResolution;\r\n }\r\n return result;\r\n };\r\n var trimTml = function (tml) {\r\n return {\r\n mId: tml.mId,\r\n cl: tml.cl,\r\n cr: tml.cr,\r\n rt: tml.rt,\r\n rb: tml.rb\r\n };\r\n };\r\n // Solo mantenemos los esquemas hasta el nivel de resolución mínima o el inmediatamente inferior a ella si no lo tiene\r\n var requestSchemas = self.requestSchemas.map(function (schema) {\r\n return {\r\n layerId: schema.layerId,\r\n tileMatrixSet: schema.tileMatrixSet,\r\n tileMatrixLimits: schema.tileMatrixLimits.filter(filterTml)\r\n };\r\n });\r\n // Actualizamos el extent para que coincida con las teselas del último nivel de los esquemas\r\n // También eliminamos del esquema todo lo irrelevante para la petición\r\n var intersectionExtent = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n requestSchemas.forEach(function updateExtent(rs) {\r\n const tml = rs.tileMatrixLimits[rs.tileMatrixLimits.length - 1];\r\n const unitsPerTile = tml.res * tml.tSize;\r\n intersectionExtent[0] = Math.min(intersectionExtent[0], tml.origin[0] + unitsPerTile * tml.cl);\r\n intersectionExtent[1] = Math.min(intersectionExtent[1], tml.origin[1] - unitsPerTile * (tml.rb + 1));\r\n intersectionExtent[2] = Math.max(intersectionExtent[2], tml.origin[0] + unitsPerTile * (tml.cr + 1));\r\n intersectionExtent[3] = Math.max(intersectionExtent[3], tml.origin[1] - unitsPerTile * tml.rt);\r\n rs.tileMatrixLimits = rs.tileMatrixLimits.map(trimTml);\r\n });\r\n\r\n // Redondeamos previamente para que por errores de redondeo no haya confusión al identificar un mapa\r\n var precision = Math.pow(10, self.map.wrap.isGeo() ? Consts.DEGREE_PRECISION : Consts.METER_PRECISION);\r\n intersectionExtent = intersectionExtent.map(function (elm, idx) {\r\n var round = idx < 3 ? Math.ceil : Math.floor;\r\n return round(elm * precision) / precision;\r\n });\r\n\r\n var mapDefinition = {\r\n bBox: intersectionExtent,\r\n res: Math.floor(self.minResolution * 1000) / 1000, // Redondeamos previamente para que por errores de redondeo no haya confusión al identificar un mapa\r\n url: [],\r\n tms: [],\r\n format: [],\r\n layers: new Array(self.baseLayers.length)\r\n };\r\n self.baseLayers.forEach(function addMapDefinitionLayer(layer, idx) {\r\n var layerUrl = layer.url.indexOf('//') === 0 ? location.protocol + layer.url : layer.url;\r\n var urlIdx = mapDefinition.url.indexOf(layerUrl);\r\n if (urlIdx < 0) {\r\n urlIdx = mapDefinition.url.push(layerUrl) - 1;\r\n }\r\n var tmsIdx = mapDefinition.tms.indexOf(layer.matrixSet);\r\n if (tmsIdx < 0) {\r\n tmsIdx = mapDefinition.tms.push(layer.matrixSet) - 1;\r\n }\r\n var shortFormat = layer.format.substr(layer.format.indexOf('/') + 1);\r\n var formatIdx = mapDefinition.format.indexOf(shortFormat);\r\n if (formatIdx < 0) {\r\n formatIdx = mapDefinition.format.push(shortFormat) - 1;\r\n }\r\n mapDefinition.layers[idx] = {\r\n urlIdx: urlIdx,\r\n id: layer.layerNames,\r\n tmsIdx: tmsIdx,\r\n formatIdx: formatIdx\r\n };\r\n });\r\n\r\n var params = TC.Util.getQueryStringParams();\r\n var e = params[self.MAP_EXTENT_PARAM_NAME] = intersectionExtent.toString();\r\n params[self.MAP_DEFINITION_PARAM_NAME] = btoa(JSON.stringify(mapDefinition));\r\n if (self.serviceWorkerEnabled) {\r\n params[self.SERVICE_WORKER_FLAG] = 1;\r\n }\r\n const u = location.origin + location.pathname + '?' + TC.Util.getParamString(params);\r\n self.currentMap = { name: opts.mapName, extent: e, url: u };\r\n self.isDownloading = true;\r\n\r\n // Guardado mediante service workers\r\n if (self.serviceWorkerEnabled) {\r\n const urlList = [];\r\n for (var i = 0, len = requestSchemas.length; i < len; i++) {\r\n var schema = requestSchemas[i];\r\n var urlPattern = null;\r\n for (var j = 0, lenj = self.baseLayers.length; j < lenj; j++) {\r\n var l = self.baseLayers[j];\r\n if (l.id === schema.layerId) {\r\n urlPattern = self.wrap.getGetTilePattern(l);\r\n if (l.getFallbackLayer) {\r\n // Esto se usa para meter en almacenamiento local el capabilities de la capa de fallback y evitar errores cuando no haya red\r\n l.getFallbackLayer();\r\n }\r\n if (l.thumbnail) {\r\n urlList.push(l.thumbnail);\r\n }\r\n break;\r\n }\r\n }\r\n if (urlPattern) {\r\n for (var k = 0, lenk = schema.tileMatrixLimits.length; k < lenk; k++) {\r\n const tml = schema.tileMatrixLimits[k];\r\n for (var r = tml.rt; r <= tml.rb; r++) {\r\n for (var c = tml.cl; c <= tml.cr; c++) {\r\n urlList.push(urlPattern.replace('{TileMatrixSet}', schema.tileMatrixSet).replace('{TileMatrix}', tml.mId).replace('{TileCol}', c).replace('{TileRow}', r));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n urlList.push(u);\r\n self.cacheUrlList(urlList, { name: u });\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.cancelCacheRequest = function () {\r\n var self = this;\r\n if (self.currentMap) {\r\n self.deleteCache(self.currentMap.url).then(function (obj) {\r\n if (!obj) {\r\n self.currentMap = null;\r\n }\r\n });\r\n }\r\n self.isDownloading = false;\r\n self.setReadyState();\r\n };\r\n\r\n ctlProto.deleteMap = function (name) {\r\n var self = this;\r\n\r\n var map = self.findStoredMap({ name: name });\r\n if (map) {\r\n self.deleteCache(map.url);\r\n }\r\n };\r\n\r\n ctlProto.startDeleteMap = function (name) {\r\n const self = this;\r\n if (navigator.onLine) {\r\n if (name) {\r\n var confirmText = self.getLocaleString('cb.delete.confirm', { mapName: name });\r\n if (!self.serviceWorkerEnabled) {\r\n confirmText = confirmText + \" \" + self.getLocaleString('cb.delete.confirm.connect.warning');\r\n }\r\n if (confirm(confirmText)) {\r\n if (navigator.onLine) {\r\n setDeletingState(self);\r\n self.deleteMap(name);\r\n } else {\r\n TC.alert(self.getLocaleString('cb.delete.conn.alert'));\r\n }\r\n }\r\n }\r\n } else {\r\n TC.alert(self.getLocaleString('cb.delete.conn.alert'));\r\n }\r\n };\r\n\r\n ctlProto.findStoredMap = function (options) {\r\n var self = this;\r\n return self.storedMaps.find(function (elm) {\r\n var result = true;\r\n if (options.name && options.name !== elm.name) {\r\n result = false;\r\n }\r\n if (result && options.url && options.url !== elm.url) {\r\n result = false;\r\n }\r\n return result;\r\n });\r\n };\r\n\r\n ctlProto.showDownloadProgress = function (current, total) {\r\n const self = this;\r\n const cs = self._classSelector;\r\n const count = self.div.querySelector(cs + '-progress-count');\r\n if (total) {\r\n var percent = Math.min(Math.round(current * 100 / total), 100);\r\n var percentString = percent + '%';\r\n const pr = self.div.querySelector(cs + '-progress-ratio');\r\n if (pr) {\r\n pr.style.width = percentString;\r\n }\r\n if (count) {\r\n count.innerHTML = percentString;\r\n }\r\n }\r\n else {\r\n const pb = self.div.querySelector(cs + '-progress-bar');\r\n if (pb) {\r\n pb.classList.add(Consts.classes.HIDDEN);\r\n }\r\n if (count) {\r\n count.innerHTML = self.getLocaleString('xFiles', { quantity: current });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.updateRequestSchemas = function (options) {\r\n var self = this;\r\n var opts = options || {};\r\n opts.extent = opts.extent || self.extent;\r\n opts.layers = opts.layers || self.baseLayers;\r\n self.requestSchemas = self.wrap.getRequestSchemas(opts);\r\n return self.requestSchemas;\r\n };\r\n\r\n ctlProto.getResolutions = function () {\r\n const self = this;\r\n var result = [];\r\n\r\n const resolutionMapper = function (tml) {\r\n return tml.res;\r\n };\r\n // Obtenemos un array de resoluciones por cada esquema de cada capa\r\n const allResolutions = self.requestSchemas.map(function (schema) {\r\n return schema.tileMatrixLimits.map(resolutionMapper);\r\n });\r\n\r\n // \"Hacemos la cremallera\" con los arrays de resoluciones de todas las capas y añadimos resoluciones al array de resultados\r\n result = result\r\n .concat.apply(result, allResolutions)\r\n .sort((a, b) => b - a)\r\n .filter((elm, idx, arr) => idx === 0 || arr[idx - 1] !== elm);\r\n return result;\r\n };\r\n\r\n ctlProto.getOnlineMapUrl = function () {\r\n const self = this;\r\n const params = TC.Util.getQueryStringParams();\r\n delete params[self.MAP_DEFINITION_PARAM_NAME];\r\n delete params[self.MAP_EXTENT_PARAM_NAME];\r\n delete params[self.SERVICE_WORKER_FLAG];\r\n var newParams = TC.Util.getParamString(params);\r\n if (newParams.length) {\r\n newParams = '?' + newParams;\r\n }\r\n return location.pathname + newParams + location.hash;\r\n };\r\n\r\n})();\r\n\r\nTC.control.OfflineMapMaker = OfflineMapMaker;\r\nexport default OfflineMapMaker;","\r\n/**\r\n * Opciones de control de mapa de situación.\r\n * @typedef OverviewMapOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @see SITNA.control.MapControlOptions\r\n * @memberof SITNA.control\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string|object} layer - Identificador de capa para usar como mapa de fondo u objeto de opciones de capa.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\nimport Control from '../Control';\r\nimport Raster from '../../SITNA/layer/Raster';\r\nimport Vector from '../../SITNA/layer/Vector';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nclass OverviewMap extends Control {\r\n #wrapPromise;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.isLoaded = false;\r\n self.layer = null;\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-ovmap';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-ovmap.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n\r\n const instanceLayer = function (layer) {\r\n var lyr;\r\n\r\n var findLayerById = function (id, layers) {\r\n var result = null;\r\n for (var i = 0; i < layers.length; i++) {\r\n var lyr = layers[i];\r\n var l = lyr.id || lyr;\r\n if (l === id) {\r\n result = lyr;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n if (typeof layer === 'string') {\r\n var lyrObj = findLayerById(layer, map.options.availableBaseLayers);\r\n if (!Util.isPlainObject(lyrObj)) {\r\n lyrObj = findLayerById(layer, map.options.baseLayers);\r\n }\r\n if (Util.isPlainObject(lyrObj)) {\r\n lyr = new Raster(lyrObj);\r\n }\r\n }\r\n else {\r\n if (layer instanceof Raster || layer instanceof Vector) {\r\n lyr = layer;\r\n }\r\n else if (layer.type === Consts.layerType.VECTOR || layer.type === Consts.layerType.KML || layer.type === Consts.layerType.WFS) {\r\n lyr = new Vector(layer);\r\n }\r\n else {\r\n lyr = new Raster(layer);\r\n }\r\n }\r\n\r\n return lyr;\r\n };\r\n\r\n const registerLayer = function (layer) {\r\n var lyr;\r\n\r\n lyr = instanceLayer(layer);\r\n\r\n return lyr;\r\n };\r\n\r\n const resetOVMapProjection = function (_e) {\r\n const resetOptions = {};\r\n self.layer.getCapabilitiesPromise().then(function () {\r\n if (!self.layer.isCompatible(map.crs) && self.layer.wrap.getCompatibleMatrixSets(map.crs).length === 0) {\r\n resetOptions.layer = self.layer.getFallbackLayer();\r\n }\r\n self.wrap.reset(resetOptions);\r\n });\r\n };\r\n\r\n const changeBaseLayer = function (e) {\r\n const self = this;\r\n\r\n if (self.map.baseLayer.type === Consts.layerType.WMS || self.map.baseLayer.type === Consts.layerType.WMTS || self.options.layer) {\r\n var newLayer = self.map.baseLayer.overviewMapLayer || self.options.layer;\r\n let ovMapLayer;\r\n if (self.layer.id !== newLayer) {\r\n ovMapLayer = registerLayer(newLayer);\r\n } else if (Consts.event.PROJECTIONCHANGE.includes(e.type)) {\r\n ovMapLayer = self.layer;\r\n }\r\n if (ovMapLayer) {\r\n self.wrap.reset({\r\n layer: ovMapLayer\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n });\r\n }\r\n }\r\n };\r\n\r\n const ctl = await super.register.call(self, map);\r\n self.wrap = new TC.wrap.control.OverviewMap(self);\r\n map.loaded(function () {\r\n self.defaultLayer = registerLayer(self.options.layer);\r\n self.layer = registerLayer(map.baseLayer.overviewMapLayer || self.options.layer || map.options.baseLayers[0] || map.options.availableBaseLayers[0]);\r\n\r\n self.#registerWrap().then(() => resetOVMapProjection({ crs: map.crs }));\r\n\r\n map.on(Consts.event.PROJECTIONCHANGE + ' ' + Consts.event.BASELAYERCHANGE, changeBaseLayer.bind(self));\r\n });\r\n\r\n return ctl;\r\n }\r\n\r\n loaded(callback) {\r\n const self = this;\r\n\r\n if (Util.isFunction(callback)) {\r\n if (self.isLoaded && self.map && self.map.isLoaded) {\r\n callback();\r\n }\r\n else {\r\n self.on(Consts.event.MAPLOAD, callback);\r\n }\r\n }\r\n }\r\n\r\n activate() {\r\n this.enable();\r\n }\r\n\r\n deactivate() {\r\n this.disable();\r\n }\r\n\r\n enable() {\r\n const self = this;\r\n super.enable.call(self);\r\n self.#registerWrap().then(() => self.wrap.enable());\r\n }\r\n\r\n disable() {\r\n const self = this;\r\n super.disable.call(self);\r\n self.#registerWrap().then(() => self.wrap.disable());\r\n }\r\n\r\n #registerWrap() {\r\n const self = this;\r\n if (!self.#wrapPromise && self.map) {\r\n self.#wrapPromise = self.wrap.register(self.map);\r\n }\r\n return self.#wrapPromise;\r\n }\r\n}\r\n\r\nTC.control.OverviewMap = OverviewMap;\r\nexport default OverviewMap;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport GeometryFeatureInfo from './GeometryFeatureInfo';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass PolygonFeatureInfo extends GeometryFeatureInfo {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.geometryType = Consts.geom.POLYGON;\r\n self.style = TC.Util.extend(true, { strokeColor: self.DEFAULT_STROKE_COLOR, strokeWidth: 2, fillColor: \"#000\", fillOpacity: 0.3 }, self.options.style);\r\n }\r\n}\r\n\r\nTC.control.PolygonFeatureInfo = PolygonFeatureInfo;\r\nexport default PolygonFeatureInfo;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.POPUP = Consts.event.POPUP || 'popup.tc';\r\nConsts.event.POPUPHIDE = Consts.event.POPUPHIDE || 'popuphide.tc';\r\nConsts.classes.DRAG = Consts.classes.DRAG || 'tc-drag';\r\nConsts.classes.DRAGGED = Consts.classes.DRAGGED || 'tc-dragged';\r\nConsts.classes.DRAGGABLE = Consts.classes.DRAGGABLE || 'tc-draggable';\r\n\r\nconst Popup = function () {\r\n var self = this;\r\n\r\n Control.apply(self, arguments);\r\n self.currentFeature = null;\r\n //self.wrap = { popup: null }; \r\n self.wrap = new TC.wrap.control.Popup(self);\r\n};\r\n\r\nTC.inherit(Popup, Control);\r\n\r\n(function () {\r\n var ctlProto = Popup.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-popup';\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n Control.prototype.renderData.call(self, {\r\n closeButton: self.options.closeButton || self.options.closeButton === undefined,\r\n shareButton: self.options.share\r\n })\r\n .then(function addPopup() {\r\n self.popupDiv = self.div.querySelector(`.${ctlProto.CLASS}`);\r\n self.contentDiv = self.popupDiv.querySelector(`.${ctlProto.CLASS}-content`);\r\n self.menuDiv = self.popupDiv.querySelector(`.${ctlProto.CLASS}-menu`);\r\n self.addUIEventListeners();\r\n\r\n self.map.wrap.addPopup(self).then(function endRender() {\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n })\r\n .catch(err => reject(err instanceof Error ? err : Error(err)));\r\n }));\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-popup.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n await Control.prototype.register.call(self, map);\r\n await self.renderPromise();\r\n map.on(Consts.event.VIEWCHANGE, function () {\r\n if (map.view === Consts.view.PRINTING) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(Consts.event.LAYERVISIBILITY, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer && !e.layer.getVisibility()) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(Consts.event.LAYERREMOVE + ' ' + Consts.event.FEATURESCLEAR, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(Consts.event.UPDATE, function () {\r\n if (!self.currentFeature || self.currentFeature.getVisibilityState() === Consts.visibility.NOT_VISIBLE) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.currentFeature === e.feature) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n /*\r\n GLS: Controlamos el ancla del popup cuando hay zoom in/out de pantalla o navegador, debería hacerlo OL pero no lo gestiona.\r\n No funciona, sólo salta la primera vez, paso a sobrescribir el método de OL\r\n */\r\n //var config = { attributes: true, attributeFilter: ['style', 'class'], childList: false, subtree: false };\r\n //var observer = new MutationObserver(function (mutationsList, observer) {show\r\n // //var positionMutation = mutationsList.filter(function (mutation) {\r\n // // return mutation.type === \"attributes\"\r\n // //}).filter(function (mutation) {\r\n // // return ['top', 'right', 'bottom', 'left', 'style'].indexOf(mutation.attributeName) > -1;\r\n // //});\r\n\r\n // if (mutationsList.length > 0) {\r\n // // me desconecto para no entrar en un bucle infinito\r\n // //observer.disconnect();\r\n\r\n // var top = mutationsList[0].target[mutationsList[0].attributeName].top;\r\n // var right = mutationsList[0].target[mutationsList[0].attributeName].right;\r\n // var bottom = mutationsList[0].target[mutationsList[0].attributeName].bottom;\r\n // var left = mutationsList[0].target[mutationsList[0].attributeName].left;\r\n\r\n // [{ top: top }, { right: right }, { bottom: bottom }, { left: left }].forEach(function (elm) {\r\n // var key = Object.keys(elm)[0];\r\n // if (elm[key].length > 0) {\r\n // document.querySelector('.ol-overlay-container').style[key] = parseFloat(elm[key].replace('px', '')) / window.devicePixelRatio + 'px';\r\n // }\r\n // });\r\n\r\n // // volvemos a observar\r\n // //observer.observe(document.querySelector('.ol-overlay-container'), config);\r\n // }\r\n //});\r\n //observer.observe(document.querySelector('.ol-overlay-container'), config);\r\n\r\n return self;\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n const closeBtn = self.menuDiv.querySelector(`.${self.CLASS}-close`);\r\n if (closeBtn) {\r\n closeBtn.addEventListener(Consts.event.CLICK, function () {\r\n self.hide();\r\n }, { passive: true });\r\n }\r\n const shareBtn = self.menuDiv.querySelector(`.${self.CLASS}-share`);\r\n if (shareBtn) {\r\n shareBtn.addEventListener(Consts.event.CLICK, function () {\r\n if (self.caller) {\r\n self.caller.showShareDialog();\r\n }\r\n }, { passive: true });\r\n }\r\n };\r\n\r\n ctlProto.fitToView = function (delayed) {\r\n var self = this;\r\n if (delayed) {\r\n setTimeout(function () {\r\n self.wrap.fitToView();\r\n }, 1000);\r\n }\r\n else {\r\n self.wrap.fitToView();\r\n }\r\n };\r\n\r\n ctlProto.hide = function () {\r\n var self = this;\r\n if (self.map) {\r\n const data = {\r\n control: self,\r\n feature: self.currentFeature\r\n };\r\n self.setDragged(false);\r\n self.map.wrap.hidePopup(self);\r\n self.getContainerElement().innerHTML = '';\r\n self.map.trigger(Consts.event.POPUPHIDE, data);\r\n }\r\n };\r\n\r\n ctlProto.getContainerElement = function () {\r\n return this.contentDiv || null;\r\n };\r\n\r\n ctlProto.getMenuElement = function () {\r\n return this.menuDiv || null;\r\n };\r\n\r\n ctlProto.setDragged = function (dragged) {\r\n const self = this;\r\n self.dragged = dragged;\r\n if (self.popupDiv) {\r\n self.popupDiv.classList.toggle(Consts.classes.DRAGGED, !!dragged);\r\n }\r\n self.wrap.setDragged(dragged);\r\n };\r\n\r\n ctlProto.setDragging = function (dragging) {\r\n const self = this;\r\n if (dragging) {\r\n self.setDragged(true);\r\n self.popupDiv.classList.add(Consts.classes.DRAG);\r\n }\r\n else {\r\n self.popupDiv.classList.remove(Consts.classes.DRAG);\r\n }\r\n };\r\n\r\n ctlProto.isVisible = function () {\r\n const self = this;\r\n\r\n return self.popupDiv && self.popupDiv.classList.contains(Consts.classes.VISIBLE);\r\n };\r\n\r\n})();\r\n\r\nTC.control.Popup = Popup;\r\nexport default Popup;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.classes.PRINTABLE = 'tc-printable';\r\n\r\nconst Print = function (options)\r\n{\r\n const self = this;\r\n self.options = options || {};\r\n\r\n self.ready = false;\r\n\r\n self.title = self.options.title || TC.Util.getLocaleString(Cfg.locale, 'printPage');\r\n self.cssUrl = self.options.cssUrl || TC.apiLocation + 'css/print.css';\r\n\r\n if (self.options.target) {\r\n (self.options.printableElement || self.options.target).classList.add(Consts.classes.PRINTABLE);\r\n self.render();\r\n }\r\n};\r\n\r\nTC.inherit(Print, Control);\r\n\r\n(function () {\r\n const ctlProto = Print.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-print';\r\n\r\n ctlProto.renderPrintPage = function () {\r\n const self = this;\r\n const page = open(null, self.CLASS);\r\n const content = (self.options.printableElement || self.options.target).innerHTML;\r\n self.getRenderedHtml(self.CLASS + '-page', { title: self.title, content: content, cssUrl: self.cssUrl })\r\n .then(function (out) {\r\n page.document.write(out);\r\n page.document.close();\r\n page.focus();\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n };\r\n\r\n ctlProto.getRenderTarget = function () {\r\n const self = this;\r\n return self.options.target || self.div;\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n if (self._mustAddListeners) {\r\n const target = self.getRenderTarget();\r\n if (target) {\r\n const btn = target.querySelector('.' + self.CLASS + '-btn');\r\n if (btn) {\r\n btn.addEventListener('click', function (_e) {\r\n self.renderPrintPage();\r\n });\r\n delete self._mustAddListeners;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-print.mjs');\r\n const pageTemplatePromise = import('../templates/tc-ctl-print-page.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-page'] = (await pageTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.renderData = async function (data, callback) {\r\n const self = this;\r\n if (self.div) {\r\n await Control.prototype.renderData.call(self, data, callback);\r\n return;\r\n }\r\n const target = self.getRenderTarget();\r\n if (target) {\r\n const html = await self.getRenderedHtml(self.CLASS, null);\r\n if (!target.querySelector('.' + self.CLASS + '-btn')) {\r\n self._mustAddListeners = true;\r\n target.insertAdjacentHTML('beforeend', html);\r\n }\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n };\r\n\r\n})();\r\n\r\nTC.control.Print = Print;\r\nexport default Print;","\r\n/**\r\n * Opciones de control de impresión.\r\n * @typedef PrintMapOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string} [logo] - URL del archivo de imagen del logo a añadir a la hoja de impresión.\r\n * @property {PrintMapLegendOptions} [legend] - Opciones de configuración para mostrar la leyenda del mapa en una segunda página de impresión.\r\n */\r\n\r\n/**\r\n * Opciones de leyenda para la impresión.\r\n * @typedef PrintMapLegendOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.PrintMapOptions\r\n * @property {boolean} [visible=false] - Determina si junto a la página del mapa se imprime una segunda página con la leyenda.\r\n * @property {string} [orientation=\"portrait\"] - Determina la orientación de la página de impresión que contiene la leyenda. Puede tomar el valor `portrait` (vertical) o `landscape` (horizontal).\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport MapInfo from './MapInfo';\r\nimport Proxification from '../tool/Proxification';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst ORIENTATION = {\r\n PORTRAIT: 'portrait',\r\n LANDSCAPE: 'landscape'\r\n};\r\nconst PAGE_SIZE = {\r\n A4: 'A4',\r\n A3: 'A3'\r\n};\r\n\r\n/*\r\n GLS:\r\n La librería makePDF se basa en la librería PDFKit explicación sobre la unidad de medida que usa:\r\n PDF points (72 per inch)\r\n https://stackoverflow.com/questions/51540144/pdfkit-node-js-measurement-unit\r\n https://www.ninjaunits.com/converters/pixels/points-pixels/\r\n https://www.ninjaunits.com/converters/pixels/pixels-points/\r\n\r\n La clave es mantener las dimensiones del mapa en px enteros (canvas sólo admite px enteros), ajustando el layout que está en puntos y que sí admite decimales\r\n*/\r\n\r\n/* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-portrait-a4 indicando el valor en px la sección del mapa */\r\nconst a4_portrait = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 595,\r\n height: 842\r\n },\r\n pageMargins: [29.5, 14, 29.5, 22.5],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0]\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 534,\r\n height: 775.5\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0]\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 534,\r\n height: 775.5\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n};\r\n/* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-landscape-a4 indicando el valor en px la sección del mapa */\r\nconst a4_landscape = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 842,\r\n height: 595\r\n },\r\n pageMargins: [30, 14, 30, 22],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 528\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 528\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n};\r\n\r\n/* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-portrait-a3 indicando el valor en px la sección del mapa */\r\nconst a3_portrait = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 841.89,\r\n height: 1190.55\r\n },\r\n pageMargins: [29.954, 14, 29.954, 21.55],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n margin: [0, 10, 0, 0],\r\n alignment: 'center'\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 1125\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n margin: [0, 10, 0, 0],\r\n alignment: 'center'\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 1125\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n};\r\n/* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-landscape-a3 indicando el valor en px la sección del mapa */\r\nconst a3_landscape = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 1190.55,\r\n height: 841.89\r\n },\r\n pageMargins: [28.775, 14, 28.775, 14.89],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 1131,\r\n height: 783\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 1131,\r\n height: 783\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n};\r\n\r\nconst getLayout = function (orientation, format) {\r\n switch (orientation) {\r\n case ORIENTATION.PORTRAIT: {\r\n switch (format) {\r\n case PAGE_SIZE.A4: {\r\n return a4_portrait;\r\n }\r\n case PAGE_SIZE.A3: {\r\n return a3_portrait;\r\n }\r\n default:\r\n }\r\n break;\r\n }\r\n case ORIENTATION.LANDSCAPE: {\r\n switch (format) {\r\n case PAGE_SIZE.A4: {\r\n return a4_landscape;\r\n }\r\n case PAGE_SIZE.A3: {\r\n return a3_landscape;\r\n }\r\n default:\r\n }\r\n break;\r\n }\r\n default:\r\n return a4_portrait;\r\n }\r\n};\r\n\r\nconst getLogoColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[0];\r\n};\r\nconst getTitleColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[1];\r\n};\r\nconst getScaleBarColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[2];\r\n};\r\nconst getMap = function (layout) {\r\n return layout.layoutPDF.content[1].table.body[0][0];\r\n};\r\n\r\nconst options = {\r\n qrCode: {\r\n sideLength: 85\r\n }\r\n};\r\n\r\nclass PrintMap extends MapInfo {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-prnmap';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-prnmap.mjs');\r\n const viewTemplatePromise = import('../templates/tc-ctl-prnmap-view.mjs');\r\n const toolsTemplatePromise = import('../templates/tc-ctl-prnmap-tools.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-view'] = (await viewTemplatePromise).default;\r\n template[self.CLASS + '-tools'] = (await toolsTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(super.renderData.call(self, { controlId: self.id }, callback));\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n\r\n // GLS: Añado el flag al mapa para tenerlo en cuenta cuando se establece la función de carga de imágenes\r\n self.map.crossOrigin = 'anonymous';\r\n\r\n const manageLegendOnZoom = function () {\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n layout.reset();\r\n };\r\n\r\n const print = function () {\r\n const div = self.getContainer();\r\n\r\n self.map.setView(Consts.view.PRINTING);\r\n\r\n var codeContainer = document.querySelector('.' + self.CLASS + '-qrcode');\r\n const cb = self.div.querySelector(`.${self.CLASS}-image-qr`);\r\n if (!cb.disabled && cb.checked) {\r\n if (!codeContainer) {\r\n codeContainer = document.createElement('div');\r\n codeContainer.classList.add(self.CLASS + '-qrcode');\r\n self.getContainer().appendChild(codeContainer);\r\n }\r\n\r\n codeContainer.innerHTML = '';\r\n self.makeQRCode(codeContainer, options.qrCode.sideLength);\r\n } else {\r\n if (codeContainer) {\r\n codeContainer.innerHTML = '';\r\n }\r\n }\r\n\r\n const printBtnSelector = '.' + self.CLASS + '-btn';\r\n self.map.on(Consts.event.STARTLOADING, function () {\r\n const printBtn = self.div.querySelector(printBtnSelector);\r\n printBtn.classList.add(Consts.classes.DISABLED);\r\n printBtn.disabled = true;\r\n });\r\n\r\n self.map.on(Consts.event.STOPLOADING, function () {\r\n const printBtn = self.div.querySelector(printBtnSelector);\r\n printBtn.classList.remove(Consts.classes.DISABLED);\r\n printBtn.disabled = false;\r\n });\r\n\r\n if (self.#hasLegend()) {\r\n // GLS: controlamos si una capa deja de verse por la escala para resetear la leyenda \r\n self.map.on(Consts.event.ZOOM, manageLegendOnZoom);\r\n }\r\n\r\n const updateCanvas = function (printFormat) {\r\n\r\n if (printFormat) {\r\n div.classList.add(printFormat);\r\n /*\r\n * Validamos que el resultado en pixels sean valores enteros, si no lo son, redondeamos y establecemos evitando estiramiento del canvas /\r\n */\r\n var bounding = div.getBoundingClientRect();\r\n if (!Number.isInteger(bounding.width)) {\r\n div.style.width = Math.round(bounding.width) + 'px';\r\n }\r\n if (!Number.isInteger(bounding.height)) {\r\n div.style.height = Math.round(bounding.height) + 'px';\r\n }\r\n\r\n const newWidth = `calc(50% - ${bounding.width / 2}px)`;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-left`).style.width = newWidth;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-right`).style.width = newWidth;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-bottom`).style.top = bounding.height + 'px';\r\n\r\n self.map.toast(self.getLocaleString('print.advice.title') + ': ' + self.getLocaleString('print.advice.desc'), { type: Consts.msgType.INFO, duration: 7000 });\r\n\r\n // En móviles no se ve el mapa entero, así que escalamos el viewport\r\n bounding = div.getBoundingClientRect();\r\n if (window.screen.width < bounding.width) {\r\n const zoomOut = window.screen.width / bounding.width;\r\n const zoomIn = bounding.width / window.screen.width;\r\n const viewportMeta = document.querySelector('meta[name=\"viewport\"]');\r\n self._viewportMeta = viewportMeta.getAttribute('content');\r\n viewportMeta.setAttribute('content', `user-scalable=yes, initial-scale=${zoomOut}, minimum-scale=${zoomOut}`);\r\n const toolsStyle = self.getToolsElement().style;\r\n self._toolsTransform = toolsStyle.transform;\r\n self._toolsTransformOrigin = toolsStyle.transformOrigin;\r\n toolsStyle.transform = `scale(${zoomIn}, ${zoomIn})`;\r\n toolsStyle.transformOrigin = '100% 0%';\r\n const toast = document.querySelector('.' + Consts.classes.TOAST_CONTAINER);\r\n if (toast) {\r\n const toastStyle = toast.style;\r\n self._toastTransform = toastStyle.transform;\r\n self._toastTransformOrigin = toastStyle.transformOrigin;\r\n toastStyle.transform = `scale(${zoomIn}, ${zoomIn})`;\r\n toastStyle.transformOrigin = '0% 100%';\r\n }\r\n }\r\n\r\n }\r\n if (!self.map.on3DView)\r\n self.map.wrap.map.updateSize();\r\n else\r\n self.map.view3D.getScene().render();\r\n };\r\n\r\n const resetPrinting = function () {\r\n\r\n // Deshacemos el reescalado para la previsualización en móviles\r\n if (Object.prototype.hasOwnProperty.call(self, '_viewportMeta')) {\r\n document.querySelector('meta[name=\"viewport\"]').setAttribute('content', self._viewportMeta);\r\n delete self._viewportMeta;\r\n const toolsStyle = self.getToolsElement().style;\r\n toolsStyle.transform = self._toolsTransform;\r\n toolsStyle.transformOrigin = self._toolsTransformOrigin;\r\n delete self._toolsTransform;\r\n delete self._toolsTransformOrigin;\r\n const toast = document.querySelector('.' + Consts.classes.TOAST_CONTAINER);\r\n if (toast) {\r\n toast.style.transform = self._toastTransform;\r\n toast.style.transformOrigin = self._toastTransformOrigin;\r\n }\r\n delete self._toastTransform;\r\n delete self._toastTransformOrigin;\r\n }\r\n\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n layout.reset();\r\n\r\n if (self.#hasLegend()) {\r\n self.map.off(Consts.event.ZOOM, manageLegendOnZoom);\r\n }\r\n\r\n self.map.toastHide(self.getLocaleString('print.advice.title') + ': ' + self.getLocaleString('print.advice.desc'));\r\n\r\n const div = self.getContainer();\r\n\r\n div.classList.remove(self.currentFormat, self.CLASS + '-printing');\r\n\r\n div.style.removeProperty('width');\r\n div.style.removeProperty('height');\r\n\r\n updateCanvas();\r\n\r\n self.map.setView(Consts.view.DEFAULT);\r\n\r\n self._viewDiv.classList.add(Consts.classes.HIDDEN);\r\n };\r\n\r\n if (!self._viewDiv) {\r\n self._viewDiv = Util.getDiv();\r\n document.body.appendChild(self._viewDiv);\r\n\r\n self.getRenderedHtml(self.CLASS + '-view', null, function (html) {\r\n self._viewDiv.innerHTML = html;\r\n });\r\n\r\n self.getRenderedHtml(self.CLASS + '-tools', null, function (html) {\r\n div.insertAdjacentHTML('beforeend', html);\r\n\r\n div.querySelector('.' + self.CLASS + '-btn-close').addEventListener('click', resetPrinting);\r\n\r\n div.querySelector('.' + self.CLASS + '-btn-pdf').addEventListener('click', self.createPdf.bind(self));\r\n });\r\n }\r\n\r\n self.orientation = self.div.querySelector(\"#print-design\").value;\r\n self.format = self.div.querySelector(\"#print-size\").value;\r\n\r\n self.currentFormat = self.CLASS + '-' + self.orientation + '-' + self.format;\r\n\r\n self._viewDiv.classList.remove(Consts.classes.HIDDEN);\r\n\r\n self.getContainer().classList.add(self.CLASS + \"-printing\");\r\n updateCanvas(self.currentFormat);\r\n };\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('.' + self.CLASS + '-btn', print));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector(`.${self.CLASS}-image-qr`, function (_evt) {\r\n self.generateLink();\r\n }));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('h2', function (_evt) {\r\n if (!self.registeredListeners) {\r\n self.generateLink();\r\n }\r\n self.registerListeners();\r\n }));\r\n\r\n return result;\r\n }\r\n\r\n #hasLegend() {\r\n const self = this;\r\n\r\n return self.map.workLayers.some(function (layer) {\r\n return layer.type === Consts.layerType.WMS && layer.getVisibility();\r\n });\r\n }\r\n\r\n #hasLegendToPrint() {\r\n const self = this;\r\n\r\n return self.map.workLayers.some(function (layer) {\r\n if (layer.type === Consts.layerType.WMS && layer.getVisibility()) {\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (layer.isVisibleByScale(layer.names[i])) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n getContainer() {\r\n return this.map.on3DView ? this.map.view3D.container : this.map.div\r\n }\r\n\r\n async createPdf() {\r\n const self = this;\r\n\r\n var loadingCtrl = self.map.getControlsByClass(TC.control.LoadingIndicator)[0];\r\n var hasWait = loadingCtrl.addWait();\r\n await import(\"pdfmake/build/pdfmake\");\r\n let pdfFonts = await import(\"pdfmake/build/vfs_fonts\");\r\n pdfMake.vfs = pdfFonts.pdfMake.vfs;\r\n let result;\r\n var canvases = self.map.wrap.getCanvas();\r\n self.canvas = Util.mergeCanvases(canvases);\r\n //self.canvas = Util.mergeCanvases(self.map.wrap.getCanvas());\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n var printLayout = layout.layoutPDF;\r\n\r\n const createPDF = function (printLayout) {\r\n var filename = window.location.host + '_';\r\n var title = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n\r\n if (title) {\r\n filename += title;\r\n } else {\r\n var currentDate = Util.getFormattedDate(new Date().toString(), true);\r\n filename += currentDate;\r\n }\r\n\r\n try {\r\n pdfMake.createPdf(printLayout).download(filename.replace(/[\\\\\\/:*?\"<>\\|]/g, \"\") + '.pdf');\r\n } catch (error) {\r\n self.map.toast(self.getLocaleString('print.error'), { type: Consts.msgType.ERROR });\r\n TC.error(error.message + ' ' + error.stack, Consts.msgErrorMode.EMAIL);\r\n }\r\n\r\n loadingCtrl.removeWait(hasWait);\r\n };\r\n\r\n const imageErrorHandling = function (imageUrl) {\r\n TC.error(self.getLocaleString('print.error'));\r\n TC.error('No se ha podido generar el base64 correspondiente a la imagen: ' + imageUrl, Consts.msgErrorMode.EMAIL, 'Error en la impresión'); //Correo de error\r\n };\r\n\r\n const getLogo = function () {\r\n\r\n const onLogoError = function () {\r\n var logoColumn = getLogoColumn(layout);\r\n delete logoColumn.image;\r\n logoColumn.text = \"\";\r\n logoColumn.width = 0;\r\n return logoColumn;\r\n };\r\n\r\n if (self.options.logo) {\r\n return Util.imgToDataUrl(self.options.logo).then(function (result) {\r\n const canvas = result.canvas;\r\n const dataUrl = result.dataUrl;\r\n\r\n var logoColumn = getLogoColumn(layout);\r\n //URI: si no se define la anchura en el layout calcula la anchura en función de proporción entre ancho y alto de la imagen y el alto de su posición en el PDF\r\n if (!logoColumn.width)\r\n logoColumn.width = (canvas.width / canvas.height) * logoColumn.height;\r\n logoColumn.image = dataUrl;\r\n return logoColumn;\r\n\r\n }, function () {\r\n imageErrorHandling(self.options.logo);\r\n\r\n return onLogoError();\r\n });\r\n } else {\r\n return onLogoError();\r\n }\r\n };\r\n const getScaleBar = function () {\r\n var scaleBarColumn = getScaleBarColumn(layout);\r\n const onError = function () {\r\n delete scaleBarColumn.image;\r\n scaleBarColumn.text = \"\";\r\n scaleBarColumn.width = \"auto\";\r\n return scaleBarColumn;\r\n };\r\n\r\n if (self.map.on3DView) {\r\n scaleBarColumn.table = { widths: [0], body: [{ border: [false, false, false, false], text: \"\" }] };\r\n //scaleBarColumn.table = {\r\n // widths: [layout.layoutPDF.pageSize.width - layout.layoutPDF.pageMargins[0] - layout.layoutPDF.pageMargins[2] - layout.logoWidth],\r\n // body: [\r\n // [{ border: [false, false, false, false], text: formatCameraData(), fontSize: 10, alignment: 'right' }]\r\n // ]\r\n //};\r\n }\r\n else {\r\n let scaleCtrl = self.map.getControlsByClass(TC.control.ScaleBar)[0];\r\n if (scaleCtrl) {\r\n var elem = document.getElementsByClassName(\"ol-scale-line-inner\"); // no cogemos el DIV del control ya que contiene los bordes y suman al ancho total\r\n var bounding = elem[0].getBoundingClientRect();\r\n if (bounding) {\r\n var styling = getComputedStyle(elem[0], null);\r\n var leftBorder = parseInt(styling.getPropertyValue('border-left-width').replace('px', '')) || 0;\r\n var rightBorder = parseInt(styling.getPropertyValue('border-right-width').replace('px', '')) || 0;\r\n\r\n scaleBarColumn.table = {\r\n widths: [((bounding.width > bounding.height ? bounding.width : bounding.height) - leftBorder - rightBorder) * 0.75], // lo pasamos a pt\r\n body: [\r\n [{ border: [true, false, true, true], text: scaleCtrl.getText(), fontSize: 10, alignment: 'center' }]\r\n ]\r\n };\r\n\r\n scaleBarColumn.layout = {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n };\r\n\r\n\r\n } else {\r\n return onError();\r\n }\r\n } else {\r\n return onError();\r\n }\r\n }\r\n return scaleBarColumn;\r\n\r\n\r\n };\r\n const formatCameraData = function () {\r\n const cameraData = self.map.view3D.getCameraData();\r\n return self.getLocaleString(\"printCameraCoords\", {\r\n x: Util.formatCoord(cameraData.latitude, Consts.DEGREE_PRECISION),\r\n y: Util.formatCoord(cameraData.longitude, Consts.DEGREE_PRECISION),\r\n z: Util.formatCoord(cameraData.height, Consts.METER_PRECISION),\r\n head: Math.round(cameraData.heading),\r\n pitch: Math.round(cameraData.pitch),\r\n })\r\n }\r\n const getLegend = function () {\r\n var content = [];\r\n var layers = self.map.workLayers.filter(function (layer) {\r\n return layer.type === Consts.layerType.WMS && layer.getVisibility();\r\n });\r\n var legendByGroup = [];\r\n\r\n var _process = function (value, parentLayer, treeLevel) {\r\n if (parentLayer.isVisibleByScale(value.name)) { //Si la capa es visible, la mostramos en la leyenda\r\n var src,\r\n srcBase64;\r\n\r\n //Para las capas cargadas por POST (por ejemplo la búsquedas de Comercio Pamplona)\r\n if (parentLayer.options && parentLayer.options.params && parentLayer.options.params.base64LegendSrc) {\r\n srcBase64 = parentLayer.options.params.base64LegendSrc;\r\n }\r\n else if (value.legend) {\r\n src = value.legend.src;\r\n }\r\n\r\n result.push({ src: src, title: value.title, level: treeLevel, srcBase64: srcBase64 });\r\n }\r\n };\r\n var _traverse = function (o, func, parentLayer, treeLevel) {\r\n if (Array.isArray(o)) {\r\n for (var i = 0; i < o.length; i++) {\r\n _traverse(o[i], func, parentLayer, treeLevel);\r\n }\r\n } else {\r\n if (o && Object.prototype.hasOwnProperty.call(o, 'children') && o.children.length > 0) {\r\n if (o.title || o.name) {\r\n result.push({ header: o.title || o.name, level: treeLevel });\r\n }\r\n _traverse(o.children, func, parentLayer, ++treeLevel);\r\n }\r\n }\r\n\r\n if (o && Object.prototype.hasOwnProperty.call(o, 'children') && o.children.length === 0) {\r\n func.apply(this, [o, parentLayer, treeLevel]);\r\n treeLevel--;\r\n }\r\n };\r\n var _getLegendImages = function () {\r\n var imagePromises = [];\r\n\r\n for (var i = 0; i < legendByGroup.length; i++) {\r\n var layers = legendByGroup[i].layers;\r\n\r\n for (var j = 0; j < layers.length; j++) {\r\n (function (k, l) {\r\n var layer = legendByGroup[k].layers[l];\r\n var src = layer.src || layer.srcBase64;\r\n\r\n if (src) {\r\n\r\n imagePromises.push(new Promise(function (resolve, reject) {\r\n const proxificationTool = new Proxification(TC.proxify, { allowedMixedContent: true });\r\n proxificationTool.fetchImage(src, { exportable: true }).then(function (img) {\r\n if (img.complete) {\r\n var imageDetail = Util.imgTagToDataUrl(img, 'image/png');\r\n layer.image = { base64: imageDetail.base64, canvas: imageDetail.canvas, height: img.height, width: img.width };\r\n } else {\r\n imageErrorHandling(src);\r\n }\r\n\r\n resolve();\r\n\r\n }, function (error) {\r\n imageErrorHandling(src);\r\n reject(error);\r\n });\r\n }));\r\n }\r\n })(i, j);\r\n }\r\n }\r\n\r\n return imagePromises;\r\n };\r\n layers.forEach(function (layer) {\r\n result = [];\r\n if (!layer.layerNames || layer.layerNames.length === 0) return;\r\n var hideTree = layer.hideTree;\r\n\r\n layer.tree = null;\r\n layer.hideTree = true;\r\n\r\n _traverse(layer.getNestedTree(), _process, layer, 0);\r\n\r\n layer.hideTree = hideTree;\r\n\r\n if (result.length > 0) {\r\n legendByGroup.push({ title: layer.title, layers: result });\r\n }\r\n });\r\n\r\n return new Promise(function (resolve, reject) {\r\n Promise.all(_getLegendImages()).then(function () {\r\n\r\n const getGroupTable = function (group, index) {\r\n var rows = [[{ text: group.title, fontSize: 13, style: [\"tablegroup\"], margin: [0, index > 0 ? 10 : 0, 0, 2] }]];\r\n var indentation = 10;\r\n rows = rows.concat(group.layers.filter(function (item) {\r\n return Object.prototype.hasOwnProperty.call(item, 'header') && item.header.trim().toLowerCase() !== group.title.trim().toLowerCase();\r\n }).map(function (item, _index) {\r\n return [{ text: item.header.trim(), fontSize: Math.max(9, 14 - item.level), margin: [indentation * item.level, 0, 0, 2] }];\r\n }));\r\n\r\n const headerRows = rows.length;\r\n var headerItem = null;\r\n var itemIndex = null;\r\n\r\n const getLayerTable = function (item, _index) {\r\n if (item.header) {\r\n headerItem = item;\r\n\r\n if (itemIndex) {\r\n itemIndex = null;\r\n }\r\n } else {\r\n if (!itemIndex) {\r\n itemIndex = 1;\r\n }\r\n\r\n var position;\r\n if (headerItem) {\r\n var headerIndex = rows.map(item => item[0].text || \"\").indexOf(headerItem.header);\r\n position = headerIndex + itemIndex++;\r\n }\r\n\r\n if (item.image) {\r\n itemIndex++;\r\n var imageWidth = item.image.width * 0.75;//item.image.canvas.width / 2;\r\n var imageHeight = item.image.height * 0.75;//(imageWidth * item.image.canvas.height / item.image.canvas.width);\r\n\r\n const dataLayer = [{\r\n \"ul\": [{\r\n \"text\": item.title,\r\n \"fontSize\": Math.max(9, 14 - item.level),\r\n \"margin\": [0 - indentation, 0, 0, 5]\r\n }, {\r\n \"image\": item.image.base64,\r\n \"width\": imageWidth,\r\n \"height\": imageHeight,\r\n \"margin\": [0, 0, 0, 2]\r\n }\r\n ],\r\n \"type\": \"none\",\r\n \"margin\": [indentation * item.level, 0, 0, 2],\r\n }];\r\n\r\n if (position) {\r\n rows.splice(position, 0, dataLayer);\r\n //rows.splice(position + 1, 0, imageLayer);\r\n } else {\r\n rows.push(dataLayer);\r\n //rows.push(imageLayer);\r\n }\r\n\r\n } else {\r\n const data = [{\r\n text: item.title,\r\n fontSize: 11,\r\n margin: [indentation * item.level, 0, 0, 2]\r\n }];\r\n\r\n if (position) {\r\n rows.splice(position, 0, data);\r\n } else {\r\n rows.push(data);\r\n }\r\n }\r\n }\r\n };\r\n\r\n group.layers.forEach(getLayerTable);\r\n\r\n content.push({\r\n layout: 'noBorders',\r\n table: {\r\n dontBreakRows: true,\r\n keepWithHeaderRows: 1,\r\n headerRows: headerRows,\r\n body: rows\r\n }\r\n });\r\n };\r\n\r\n legendByGroup.map(function (group, index) {\r\n return {\r\n groupIndex: index,\r\n height: group.layers.filter(function (item) {\r\n return item.image && item.image.canvas;\r\n }).reduce(function (prev, current, index, vector) {\r\n return prev + vector[index].image.canvas.height;\r\n }, 0)\r\n }\r\n }).sort(function (a, b) {\r\n if (a.height > b.height) {\r\n return 1;\r\n }\r\n if (a.height < b.height) {\r\n return -1;\r\n }\r\n return 0;\r\n }).forEach(function (groupWithHeight, index) {\r\n getGroupTable(legendByGroup[groupWithHeight.groupIndex], index)\r\n });\r\n\r\n resolve(content);\r\n\r\n }, function () {\r\n reject([]);\r\n });\r\n });\r\n };\r\n const drawQR = function () {\r\n // GLS: añadimos el QR\r\n //QR\r\n const cb = self.div.querySelector(`.${self.CLASS}-image-qr`);\r\n if (!cb.disabled && cb.checked) {\r\n const qrTarget = document.querySelector('.' + self.CLASS + '-qrcode');\r\n qrTarget.innerHTML = '';\r\n return self.makeQRCode(qrTarget, options.qrCode.sideLength).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n return Util.addToCanvas(self.canvas, qrCodeBase64, { x: self.canvas.width - options.qrCode.sideLength, y: self.canvas.height - options.qrCode.sideLength }, { width: options.qrCode.sideLength, height: options.qrCode.sideLength }).then(function (mapCanvas) {\r\n return mapCanvas;\r\n });\r\n } else {\r\n return self.canvas;\r\n }\r\n });\r\n } else {\r\n return self.canvas;\r\n }\r\n };\r\n\r\n const basics = [getLogo, function () {\r\n var titleColumn = getTitleColumn(layout);\r\n titleColumn.text = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n return titleColumn;\r\n }, getScaleBar, drawQR];\r\n\r\n Promise.all(basics.map(function (fn) {\r\n return fn();\r\n })).then(function (basicsDone) {\r\n\r\n if (basicsDone[2].table) { // GLS: ajustamos el ancho del título para arrinconar la escala\r\n const totalWidth = layout.layoutPDF.pageSize.width - (layout.layoutPDF.pageMargins[0] + layout.layoutPDF.pageMargins[2]);\r\n const logoWidth = layout.layoutPDF.content[0].columns[0].width || 0;\r\n const scaleBarColumn = layout.layoutPDF.content[0].columns[2];\r\n const scaleBarWidth = scaleBarColumn.table.widths[0] + 2;\r\n const titleColumn = layout.layoutPDF.content[0].columns[1];\r\n titleColumn.width = totalWidth - logoWidth - scaleBarWidth;\r\n if (logoWidth === 0) {\r\n // Si no hay logo reajustamos texto de título y margen de barra de escala\r\n titleColumn.alignment = \"left\";\r\n scaleBarColumn.margin[3] = 2;\r\n }\r\n }\r\n\r\n var mapPlace = getMap(layout);\r\n var canvas = basicsDone[3] || self.canvas;\r\n\r\n mapPlace.image = canvas.toDataURL();\r\n\r\n if (self.#hasLegendToPrint() && // GLS: validamos que haya capas visibles por escala \r\n printLayout.content.length === 2) { // GLS: es la primera descarga o hemos resetado la leyenda por algún zoom por lo que no tenemos la leyenda en el layout\r\n\r\n const title = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n printLayout.content.push({\r\n pageBreak: 'before',\r\n pageOrientation: (self.options.legend && self.options.legend.orientation) || ORIENTATION.PORTRAIT,\r\n text: title.length > 0 ? title : '',\r\n fontSize: 14,\r\n margin: [0, 20, 0, 10]\r\n });\r\n printLayout.styles = {\r\n \"tablegroup\": {\r\n bold: true\r\n }\r\n }\r\n printLayout.defaultStyle = {\r\n alignment: 'left'\r\n }\r\n\r\n getLegend().then(function (content) {\r\n printLayout.content = printLayout.content.concat(content);\r\n createPDF(printLayout);\r\n });\r\n } else {\r\n createPDF(printLayout);\r\n }\r\n });\r\n }\r\n\r\n manageMaxLengthExceed(maxLengthExceed) {\r\n const self = this;\r\n const alertElm = self.div.querySelector('.' + self.CLASS + '-alert');\r\n const checkboxQR = self.div.querySelector(`.${self.CLASS}-image-qr`);\r\n\r\n checkboxQR.disabled = maxLengthExceed.qr;\r\n\r\n if (checkboxQR.checked) {\r\n alertElm.classList.toggle(Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n } else {\r\n alertElm.classList.add(Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n async generateLink() {\r\n const self = this;\r\n const checkbox = self.div.querySelector(`.${self.CLASS}-div input.${self.CLASS}-image-qr`);\r\n const label = self.div.querySelector(`label.${self.CLASS}-image-qr-label`);\r\n checkbox.disabled = true;\r\n label.classList.add(Consts.classes.LOADING);\r\n const result = await MapInfo.prototype.generateLink.call(self);\r\n label.classList.remove(Consts.classes.LOADING);\r\n return result;\r\n }\r\n\r\n getToolsElement() {\r\n const self = this;\r\n return self.getContainer().querySelector(`.${self.CLASS}-tools`);\r\n }\r\n}\r\n\r\nTC.control.PrintMap = PrintMap;\r\nexport default PrintMap;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst ProjectionSelector = function () {\r\n const self = this;\r\n\r\n Control.apply(self, arguments);\r\n\r\n self._cssClasses = {\r\n LOAD_CRS_BUTTON: self.CLASS + '-crs-btn-load',\r\n CRS_DIALOG: self.CLASS + '-crs-dialog',\r\n CRS_LIST: self.CLASS + '-crs-list',\r\n CURRENT_CRS_NAME: self.CLASS + '-cur-crs-name',\r\n CURRENT_CRS_CODE: self.CLASS + '-cur-crs-code',\r\n CHANGE: self.CLASS + '-change',\r\n NO_CHANGE: self.CLASS + '-no-change'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self._dialogDiv.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('button:not(.' + self._cssClasses.LOAD_CRS_BUTTON + ')', function (e) {\r\n const crs = e.target.dataset.crsCode;\r\n if (crs) {\r\n self.setProjection({\r\n crs: crs,\r\n allowFallbackLayer: true\r\n });\r\n }\r\n }), { passive: true });\r\n\r\n self._dialogDiv.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON, function () {\r\n self.loadFallbackProjections();\r\n }), { passive: true });\r\n};\r\n\r\nTC.inherit(ProjectionSelector, Control);\r\n\r\n(function () {\r\n\r\n const ctlProto = ProjectionSelector.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-projs';\r\n\r\n ctlProto.render = async function (callback) {\r\n const self = this;\r\n await Control.prototype.render.call(self, callback);\r\n\r\n self._dialogDiv.innerHTML = await self.getRenderedHtml(self.CLASS + '-dialog', null);\r\n };\r\n\r\n ctlProto.getAvailableCRS = function (options) {\r\n return this.map.getCompatibleCRS(TC.Util.extend(options || {}, { includeFallbacks: true }));\r\n };\r\n\r\n ctlProto.showProjectionChangeDialog = function (options) {\r\n const self = this;\r\n\r\n const dialog = self._dialogDiv.querySelector('.' + self._cssClasses.CRS_DIALOG);\r\n const body = dialog.querySelector('.tc-modal-body');\r\n body.classList.add(Consts.classes.LOADING);\r\n const ul = body.querySelector('ul.' + self._cssClasses.CRS_LIST);\r\n ul.innerHTML = '';\r\n const blFirstOption = self.map.baseLayer.firstOption || self.map.baseLayer;\r\n const blFallback = blFirstOption.isRaster() ? blFirstOption.getFallbackLayer() : null;\r\n\r\n const loadProjs = function () {\r\n var crsList = [];\r\n var blCRSList = [];\r\n\r\n options = options || {};\r\n\r\n if (blFirstOption.isRaster()) {\r\n blCRSList = blFirstOption.getCompatibleCRS();\r\n crsList = self.getAvailableCRS(TC.Util.extend(options, {}));\r\n } else {\r\n blCRSList = self.map.baseLayers\r\n .filter((layer) => {\r\n return layer.isRaster();\r\n })\r\n .map((layer) => {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: true });\r\n })\r\n .reduce((prev, current) => {\r\n return prev.concat(current.filter(l => prev.indexOf(l) < 0));\r\n });\r\n\r\n const crsLists = (options.layer ? self.map.workLayers.concat(options.layer) : self.map.workLayers)\r\n .filter(function (layer) {\r\n return layer.isRaster();\r\n })\r\n .map(function (layer) {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: true });\r\n });\r\n\r\n crsList = blCRSList.filter((crs) => {\r\n return crsLists.every((elm) => {\r\n return elm.indexOf(crs) > -1;\r\n });\r\n });\r\n }\r\n\r\n self.map.loadProjections({\r\n crsList: crsList,\r\n orderBy: 'name'\r\n }).then(function (projList) {\r\n var hasFallbackCRS = false;\r\n var currentCRSName = dialog.querySelector('.' + self._cssClasses.CURRENT_CRS_NAME);\r\n var currentCRSCode = dialog.querySelector('.' + self._cssClasses.CURRENT_CRS_CODE);\r\n projList\r\n .forEach(function (projObj) {\r\n if (currentCRSName && currentCRSCode && TC.Util.CRSCodesEqual(self.map.crs, projObj.code)) {\r\n currentCRSName.textContent = projObj.name;\r\n currentCRSCode.textContent = projObj.code;\r\n }\r\n else {\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.textContent = projObj.name + ' (' + projObj.code + ')';\r\n button.dataset.crsCode = projObj.code;\r\n const li = document.createElement('li');\r\n li.appendChild(button);\r\n if (blCRSList.filter(function (crs) {\r\n return TC.Util.CRSCodesEqual(crs, projObj.code);\r\n }).length === 0) {\r\n // Es un CRS del fallback\r\n hasFallbackCRS = true;\r\n li.classList.add(Consts.classes.HIDDEN);\r\n button.classList.add(Consts.classes.WARNING);\r\n }\r\n ul.appendChild(li);\r\n }\r\n });\r\n if (hasFallbackCRS) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.classList.add(self._cssClasses.LOAD_CRS_BUTTON);\r\n button.innerHTML = self.getLocaleString('showOnTheFlyProjections');\r\n li.appendChild(button);\r\n ul.appendChild(li);\r\n }\r\n\r\n // Mostramos un aviso si no hay CRS compatibles\r\n if (ul.querySelectorAll('li').length === 0) {\r\n const li = document.createElement('li');\r\n li.innerHTML = self.getLocaleString('thereAreNoCompatibleCRS');\r\n ul.appendChild(li);\r\n }\r\n const visibleLi = ul.querySelectorAll('li:not(.' + Consts.classes.HIDDEN + ')');\r\n dialog.querySelectorAll('.' + self._cssClasses.CHANGE).forEach(function (elm) {\r\n elm.style.display = visibleLi.length > 1 ? '' : 'none';\r\n });\r\n dialog.querySelectorAll('.' + self._cssClasses.NO_CHANGE).forEach(function (elm) {\r\n elm.style.display = visibleLi.length > 1 ? 'none' : '';\r\n });\r\n dialog.querySelector('ul.' + self._cssClasses.CRS_LIST).style.display = visibleLi.length > 0 || hasFallbackCRS ? '' : 'none';\r\n body.classList.remove(Consts.classes.LOADING);\r\n });\r\n };\r\n\r\n if (blFallback) {\r\n blFallback.getCapabilitiesPromise().then(loadProjs);\r\n }\r\n else {\r\n loadProjs();\r\n }\r\n TC.Util.showModal(dialog, options);\r\n };\r\n\r\n ctlProto.setProjection = function (options) {\r\n const self = this;\r\n options = options || {};\r\n\r\n TC.loadProjDef({\r\n crs: options.crs,\r\n callback: function () {\r\n self.map.setProjection(options);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.loadFallbackProjections = function () {\r\n const self = this;\r\n const lis = self._dialogDiv\r\n .querySelector('.' + self._cssClasses.CRS_DIALOG)\r\n .querySelectorAll('ul.' + self._cssClasses.CRS_LIST + ' li');\r\n lis.forEach(function (li) {\r\n li.classList.remove(Consts.classes.HIDDEN);\r\n if (li.querySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON)) {\r\n li.classList.add(Consts.classes.HIDDEN);\r\n }\r\n });\r\n self._dialogDiv.querySelectorAll('p.' + Consts.classes.WARNING).forEach(function (p) {\r\n p.classList.remove(Consts.classes.HIDDEN);\r\n });\r\n self._dialogDiv.querySelectorAll('.' + self._cssClasses.CHANGE).forEach(function (elm) {\r\n elm.style.display = lis.length > 1 ? '' : 'none';\r\n });\r\n self._dialogDiv.querySelectorAll('.' + self._cssClasses.NO_CHANGE).forEach(function (elm) {\r\n elm.style.display = lis.length > 1 ? 'none' : '';\r\n });\r\n };\r\n\r\n})();\r\n\r\nTC.control.ProjectionSelector = ProjectionSelector;\r\nexport default ProjectionSelector;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Point from '../../SITNA/feature/Point';\r\n/*import mainTemplate from '../templates/tc-ctl-rpanel.mjs';\r\nimport tableTemplate from '../templates/tc-ctl-rpanel-table.mjs';\r\nimport chartTemplate from '../templates/tc-ctl-rpanel-chart.mjs';*/\r\nimport itemToolContainer from './itemToolContainer';\r\nimport Button from '../../SITNA/ui/Button';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.event.DRAWCHART = 'drawchart.tc';\r\nConsts.event.DRAWTABLE = 'drawtable.tc';\r\nConsts.event.RESULTSPANELMIN = 'resultspanelmin.tc';\r\nConsts.event.RESULTSPANELMAX = 'resultspanelmax.tc';\r\nConsts.event.RESULTSPANELCLOSE = 'resultspanelclose.tc';\r\nConsts.event.RESULTSPANELRESIZE = 'resultspanelresize.tc';\r\n\r\nconst ResultsPanel = function () {\r\n var self = this;\r\n\r\n Control.apply(self, arguments);\r\n\r\n self.wrap = new TC.wrap.control.ResultsPanel(self);\r\n\r\n self.data = {};\r\n self.classes = {\r\n SHOW_IN: 'tc-show-in',\r\n SHOW_OUT: 'tc-show-out',\r\n RESIZABLE: 'tc-resizable',\r\n POSITION_BOTTOM: 'tc-pos-bottom',\r\n POSITION_TOP: 'tc-pos-top'\r\n };\r\n\r\n self.content = self.contentType.TABLE;\r\n\r\n self._toolContainerSelector = `.${self.CLASS}-tools`;\r\n\r\n if (TC.Util.isEmptyObject(self.options)) {\r\n self.options = { content: \"table\" };\r\n }\r\n\r\n if (self.options || { content: \"table\" }) {\r\n if (self.options.content)\r\n self.content = self.contentType[self.options.content.toUpperCase()];\r\n\r\n if (self.options.chart)\r\n self.chart = self.options.chart;\r\n\r\n if (self.options.table)\r\n self.table = self.options.table;\r\n\r\n if (self.options.save)\r\n self.save = self.options.save;\r\n\r\n if (self.options.share)\r\n self.share = self.options.share;\r\n\r\n }\r\n};\r\n\r\nTC.inherit(ResultsPanel, Control);\r\n\r\n(function () {\r\n\r\n const ctlProto = ResultsPanel.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-rpanel';\r\n\r\n ctlProto.COLLIDING_PRIORITY = {\r\n IGNORE: 0,\r\n LOW: 1,\r\n MEDIUM: 2,\r\n HIGH: 3\r\n };\r\n\r\n ctlProto.CHART_SIZE = {\r\n MIN_HEIGHT: 75,\r\n MAX_HEIGHT: 128,\r\n\r\n MIN_WIDTH: 215,\r\n MEDIUM_WIDTH: 310,\r\n MAX_WIDTH: 445\r\n };\r\n\r\n const isElementVisible = function (elm) {\r\n const computedStyle = getComputedStyle(elm);\r\n return elm && !elm.hidden && computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden';\r\n };\r\n\r\n ctlProto.isVisible = function () {\r\n const self = this;\r\n const bodyElm = self.div.querySelector('.tc-ctl-rpanel-sidebar-body');\r\n const maximizeElm = self.div.querySelector('.tc-ctl-rpanel-minimized-max');\r\n return isElementVisible(bodyElm) || isElementVisible(maximizeElm);\r\n };\r\n\r\n ctlProto.isMinimized = function () {\r\n const self = this;\r\n const bodyElm = self.div.querySelector('.tc-ctl-rpanel-sidebar-body');\r\n const maximizeElm = self.div.querySelector('.tc-ctl-rpanel-minimized-max');\r\n return isElementVisible(maximizeElm) && !isElementVisible(bodyElm);\r\n };\r\n\r\n const manageClassList = function (classElement, toAdd, toRemove) {\r\n const self = this;\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm) {\r\n elm.classList.add(toAdd);\r\n elm.classList.remove(toRemove);\r\n }\r\n };\r\n\r\n ctlProto.show = function (classElement) {\r\n const self = this;\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm && elm.style.display === 'none') {\r\n elm.style.display = '';\r\n }\r\n\r\n manageClassList.call(self, classElement, self.classes.SHOW_IN, self.classes.SHOW_OUT);\r\n };\r\n\r\n ctlProto.hide = function (classElement) {\r\n const self = this;\r\n\r\n manageClassList.call(self, classElement, self.classes.SHOW_OUT, self.classes.SHOW_IN);\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm) {\r\n elm.style.display = 'none';\r\n }\r\n };\r\n\r\n ctlProto.doVisible = function () {\r\n const self = this;\r\n\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n self.show('tc-ctl-rpanel-sidebar-body');\r\n };\r\n\r\n const hideResizeHandlers = function (ctl) {\r\n document.querySelectorAll('.' + ctl.CLASS + '-resize-handler').forEach((el) => {\r\n el.classList.add(Consts.classes.HIDDEN);\r\n });\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-rpanel.mjs');\r\n const tableTemplatePromise = import('../templates/tc-ctl-rpanel-table.mjs');\r\n const chartTemplatePromise = import('../templates/tc-ctl-rpanel-chart.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-table'] = (await tableTemplatePromise).default;\r\n template[self.CLASS + '-chart'] = (await chartTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n const _addItemTool = function (classNamePartial, localeKey, actionFn) {\r\n const self = this;\r\n self.addItemTool({\r\n renderFn: function (container) {\r\n //\r\n const className = self.CLASS + classNamePartial;\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (button) {\r\n button.remove();\r\n button = null;\r\n }\r\n const text = self.getLocaleString(localeKey);\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.classList.add(className);\r\n return button;\r\n }, \r\n actionFn: actionFn\r\n });\r\n }\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n\r\n return Control.prototype.render.call(self, function () {\r\n\r\n /* --- LEGACY --- */\r\n self.mainTitleElm = self.div.querySelector('.tc-ctl-rpanel-title-text') ||\r\n self.div.querySelector('.prpanel-title-text');\r\n\r\n /* --- LEGACY --- */\r\n self.minimizeButton = self.div.querySelector('.tc-ctl-rpanel-btn-min') ||\r\n self.div.querySelector('.prcollapsed-slide-submenu-min');\r\n self.minimizeButton.addEventListener('click', function () {\r\n self.minimize();\r\n });\r\n\r\n /* --- LEGACY --- */\r\n self.closeButton = self.div.querySelector('.tc-ctl-rpanel-btn-close') ||\r\n self.div.querySelector('.prcollapsed-slide-submenu-close');\r\n self.closeButton.addEventListener('click', function () {\r\n self.close();\r\n const resizedTarget = self.div.querySelector(`${self.classes.RESIZABLE}.tc-ctl-rpanel-main`);\r\n if (resizedTarget) {\r\n // si el usuario cierra el panel desde el aspa, eliminamos el rastro del redimensionado para empezar de cero\r\n delete resizedTarget.style.removeProperty(\"width\");\r\n delete resizedTarget.style.removeProperty(\"height\");\r\n delete resizedTarget.dataset.chartSizeWidth;\r\n delete resizedTarget.dataset.chartSizeHeight;\r\n delete resizedTarget.dataset.panelSizeWidth;\r\n delete resizedTarget.dataset.panelSizeHeight;\r\n }\r\n });\r\n\r\n /* --- LEGACY --- */\r\n self.maximizeButton = self.div.querySelector('.tc-ctl-rpanel-minimized-max') ||\r\n self.div.querySelector('.prcollapsed-max');\r\n self.maximizeButton.addEventListener('click', function () {\r\n self.maximize();\r\n });\r\n //\r\n if (self.save) {\r\n _addItemTool.apply(self, ['-btn-csv', 'export.excel', function () {\r\n self.exportToExcel();\r\n }]);\r\n }\r\n \r\n if (self.options.download && self.options.content === \"table\") {\r\n _addItemTool.apply(self,['-btn-dwn', 'download', function () {\r\n if (TC.Util.isFunction(self.options.download)) {\r\n self.options.download.apply(self, []);\r\n }\r\n }]);\r\n }\r\n if (self.options.share) {\r\n _addItemTool.apply(self, ['-btn-share', 'shareQuery', function () {\r\n if (self.caller) {\r\n self.caller.showShareDialog();\r\n }\r\n }]);\r\n }\r\n if (self.content) {\r\n self.content = self.content;\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n self.mainTitleElm.setAttribute('title', self.options.titles.main);\r\n self.mainTitleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n self.maximizeButton.setAttribute('title', self.options.titles.max);\r\n }\r\n } else {\r\n self.mainTitleElm.setAttribute('title', self.getLocaleString(\"rsp.title\"));\r\n self.mainTitleElm.innerHTML = self.getLocaleString(\"rsp.title\");\r\n }\r\n }\r\n\r\n /* --- LEGACY --- */\r\n self.infoDiv = self.div.querySelector('.tc-ctl-rpanel-info') ||\r\n self.div.querySelector('.tc-ctl-p-result-info');\r\n /* --- LEGACY --- */\r\n self.tableDiv = self.div.querySelector('.tc-ctl-rpanel-table') || \r\n self.div.querySelector('.tc-ctl-p-result-table');\r\n //self.$divChart = self._$div.find('.' + self.CLASS + '-chart');\r\n /* --- LEGACY --- */\r\n self.menuDiv = self.div.querySelector('.tc-ctl-rpanel-menu') || \r\n self.div.querySelector('.tc-ctl-p-result-menu');\r\n\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(self.div, {\r\n left: function () {\r\n self.minimize();\r\n }\r\n });\r\n }\r\n\r\n if (!TC.Util.detectMobile()) {\r\n const doResizable = !(Object.prototype.hasOwnProperty.call(self.options, \"resize\") && !self.options.resize);\r\n switch (true) {\r\n case self.options.content === \"chart\" && doResizable: // si es un perfil de elevación\r\n case self.options.resize: // si está configurado a true\r\n case self.options.content === \"table\" && self.infoDiv && self.infoDiv.childElementCount > 0 && doResizable: // si es una tabla y es el renderizado de GFI\r\n self.resizable = true;\r\n self.div.classList.add(self.classes.RESIZABLE);\r\n break;\r\n default:\r\n self.resizable = false;\r\n break;\r\n }\r\n } else {\r\n hideResizeHandlers(self);\r\n }\r\n\r\n if (callback && typeof callback === \"function\") {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.renderPanelResizable = function (options) {\r\n const self = this;\r\n options = options || {};\r\n import('interactjs').then(function (module) {\r\n const interact = module.default;\r\n const target = \".\" + self.classes.RESIZABLE;\r\n const targetNodeSelector = '.tc-ctl-rpanel-main';\r\n const targetNode = options.target && options.target.querySelector(targetNodeSelector) ||\r\n document.querySelector(targetNodeSelector);\r\n targetNode.classList.add(self.classes.RESIZABLE);\r\n targetNode.closest('.tc-ctl-rpanel').classList.add(self.classes.RESIZABLE);\r\n if (!interact.isSet(target)) {\r\n const svg = document.querySelector('.tc-chart.c3 svg');\r\n if (svg) {\r\n svg.parentElement.style.maxHeight = 'unset';\r\n svg.removeAttribute('max-height');\r\n svg.removeAttribute('max-width');\r\n svg.removeAttribute('min-height');\r\n svg.removeAttribute('min-width');\r\n }\r\n const interactable = interact(target)\r\n .resizable({\r\n preserveAspectRatio: options.preserveAspectRatio || true,\r\n edges: {\r\n right: '.tc-ctl-rpanel-resize-handler',\r\n bottom: '.tc-ctl-rpanel-resize-handler'\r\n },\r\n cursorChecker(_action, _interactable, element, _interacting) {\r\n let cursor = \"\";\r\n let currentHandlers = element.querySelectorAll(':hover');\r\n currentHandlers.forEach(function (handler) {\r\n switch (true) {\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerRight\") > -1:\r\n cursor = 'w-resize';\r\n break;\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerBottom\") > -1:\r\n cursor = 'n-resize';\r\n break;\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerDiagonal\") > -1:\r\n cursor = 'nw-resize';\r\n break;\r\n default:\r\n cursor = 'pointer';\r\n }\r\n });\r\n return cursor;\r\n },\r\n listeners: {\r\n end: function (event) {\r\n self.onResize(event);\r\n },\r\n move(event) {\r\n switch (true) {\r\n case event.target.style.cursor === 'w-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.rect.width}px`,\r\n height: `${event.target.getBoundingClientRect().height}px`\r\n });\r\n break;\r\n case event.target.style.cursor === 'nw-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.rect.width}px`,\r\n height: `${event.rect.height}px`\r\n });\r\n break;\r\n case event.target.style.cursor === 'n-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.target.getBoundingClientRect().width}px`,\r\n height: `${event.rect.height}px`\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (event.target.querySelector('.tc-chart.c3')) {\r\n event.target.classList.add(Consts.classes.LOADING);\r\n }\r\n }\r\n },\r\n modifiers: [\r\n interact.modifiers.restrict({\r\n restriction: 'body'\r\n })\r\n ]\r\n });\r\n\r\n if (options.callback && TC.Util.isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getResizableChartSize = function (target) {\r\n if (target) {\r\n let chartWrapperBounding = target.querySelector('.tc-chart.c3').getBoundingClientRect();\r\n const newSize = {\r\n width: chartWrapperBounding.width,\r\n height: chartWrapperBounding.height\r\n };\r\n return newSize;\r\n }\r\n };\r\n\r\n ctlProto.getResultsPanelFromElement = function (element) {\r\n const self = this;\r\n\r\n let resultsPanels = self.map.getControlsByClass(ResultsPanel);\r\n for (var i = 0; i < resultsPanels.length; i++) {\r\n if (resultsPanels[i].div.querySelector(`.${self.classes.RESIZABLE}.tc-ctl-rpanel-main`) === element) {\r\n return resultsPanels[i];\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.onResize = function (e) {\r\n const self = this;\r\n const target = e.target;\r\n if (target.querySelector('.tc-chart.c3')) {\r\n target.classList.remove(Consts.classes.LOADING);\r\n const newSize = self.getResizableChartSize(target);\r\n if (newSize) {\r\n let resultsPanel = self.getResultsPanelFromElement(target);\r\n if (resultsPanel) {\r\n resultsPanel.chart.chart.resize(newSize);\r\n }\r\n }\r\n }\r\n self.map.trigger(Consts.event.RESULTSPANELRESIZE, {\r\n control: self, size: {\r\n width: target.getBoundingClientRect().width,\r\n height: target.getBoundingClientRect().height\r\n }\r\n });\r\n };\r\n\r\n ctlProto.minimize = function () {\r\n const self = this;\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (collapsedElm.classList.contains(Consts.classes.HIDDEN)) { // ya está minimizado\r\n collapsedElm.classList.remove(Consts.classes.HIDDEN);\r\n\r\n self.hide('tc-ctl-rpanel-sidebar-body');\r\n self.show('tc-ctl-rpanel-minimized-max');\r\n\r\n self.map.trigger(Consts.event.RESULTSPANELMIN, { control: self });\r\n collidingManagement.remove(self);\r\n }\r\n };\r\n\r\n ctlProto.maximize = function () {\r\n const self = this;\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (!collapsedElm.classList.contains(Consts.classes.HIDDEN)) { // ya está maximizado\r\n collapsedElm.classList.add(Consts.classes.HIDDEN);\r\n\r\n self.show('tc-ctl-rpanel-sidebar-body');\r\n self.hide('tc-ctl-rpanel-minimized-max');\r\n\r\n self.map.trigger(Consts.event.RESULTSPANELMAX, { control: self });\r\n collidingManagement.add(self);\r\n }\r\n };\r\n\r\n ctlProto.close = function () {\r\n const self = this;\r\n\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n\r\n if (self.chart && self.chart.chart) {\r\n // preservamos el tamaño redimensionado por el usuario\r\n const resizedTarget = self.div.querySelector(`${self.classes.RESIZABLE}.tc-ctl-rpanel-main`);\r\n if (resizedTarget && resizedTarget.style && resizedTarget.style.width && resizedTarget.style.height) {\r\n const chartElement = resizedTarget.querySelector('.tc-chart');\r\n const chartBounding = chartElement.getBoundingClientRect();\r\n // cuando el panel está colapsado no tenemos disponible el tamaño del perfil\r\n if (parseInt(chartBounding.width) > 0 && parseInt(chartBounding.height) > 0) {\r\n resizedTarget.dataset.chartSizeWidth = chartBounding.width;\r\n resizedTarget.dataset.chartSizeHeight = chartBounding.height;\r\n }\r\n resizedTarget.dataset.panelSizeWidth = resizedTarget.style.width;\r\n resizedTarget.dataset.panelSizeHeight = resizedTarget.style.height;\r\n }\r\n self.chart.chart = self.chart.chart.destroy();\r\n }\r\n\r\n const body = self.getContainerElement();\r\n if (body) {\r\n body.style.display = 'none';\r\n self.div.querySelector('.tc-ctl-rpanel-minimized-max').style.display = 'none';\r\n body.querySelectorAll('video,audio,iframe').forEach(elm => elm.remove());\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n collapsedElm.classList.add(Consts.classes.HIDDEN);\r\n\r\n let resizable = document.querySelector(\".\" + self.classes.RESIZABLE);\r\n if (resizable) {\r\n resizable.style = \"\";\r\n }\r\n self.map.trigger(Consts.event.RESULTSPANELCLOSE, { control: self, feature: self.currentFeature });\r\n\r\n //URI: Resetear el bottom de los paneles \r\n collidingManagement.remove(self);\r\n \r\n }\r\n };\r\n\r\n ctlProto.openChart = function (data) {\r\n const self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n\r\n // Cerramos el resto de los perfiles\r\n self.map.getControlsByClass(ResultsPanel)\r\n .filter(function (ctl) {\r\n return ctl !== self;\r\n })\r\n .filter(function (ctl) {\r\n return ctl.options.content === 'chart';\r\n })\r\n .forEach(function (ctl) {\r\n ctl.close();\r\n });\r\n\r\n if (data) {\r\n\r\n if (data.msg) {\r\n self.map.toast(data.msg);\r\n if (self.isVisible()) {\r\n self.hide('tc-ctl-rpanel-sidebar-body');\r\n }\r\n }\r\n else {\r\n self.elevationProfileChartData = data;\r\n self.renderElevationProfileChart({\r\n data: data,\r\n div: self.div.querySelector('.' + ctlProto.CLASS + '-chart')\r\n });\r\n }\r\n }\r\n };\r\n\r\n const formatYAxis = function (d, locale) {\r\n let y = parseInt(d.toFixed(0)) || 0;\r\n return y.toLocaleString(locale) + ' m';\r\n };\r\n\r\n ctlProto.renderElevationProfileChart = async function (options) {\r\n const self = this;\r\n options = options || {};\r\n const c3 = (await import(/* webpackMode: \"lazy-once\" */ 'c3')).default;\r\n const data = options.data;\r\n data.ele = data.ele.map(val => val === null ? 0 : val);\r\n const div = options.div;\r\n let locale = TC.Util.getMapLocale(self.map);\r\n\r\n const titleBar = self.div.querySelector('.tc-ctl-rpanel-title');\r\n self.getItemTools().forEach(tool => self.addItemToolUI(titleBar, tool));\r\n\r\n var templateData = {\r\n upHill: data.upHill ? data.upHill.toLocaleString(locale) : '0',\r\n downHill: data.downHill ? data.downHill.toLocaleString(locale) : '0'\r\n };\r\n\r\n const hasSecondaryElevationProfileChartData = data.secondaryElevationProfileChartData &&\r\n Array.isArray(data.secondaryElevationProfileChartData) &&\r\n data.secondaryElevationProfileChartData.length > 0 && data.secondaryElevationProfileChartData[0];\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n templateData.min = formatYAxis(data.min, locale);\r\n templateData.max = formatYAxis(data.max, locale);\r\n\r\n templateData.secondChart = {\r\n upHill: data.secondaryElevationProfileChartData[0].upHill ? data.secondaryElevationProfileChartData[0].upHill.toLocaleString(locale) : '0',\r\n downHill: data.secondaryElevationProfileChartData[0].downHill ? data.secondaryElevationProfileChartData[0].downHill.toLocaleString(locale) : '0',\r\n min: formatYAxis(data.secondaryElevationProfileChartData[0].min, locale),\r\n max: formatYAxis(data.secondaryElevationProfileChartData[0].max, locale)\r\n };\r\n }\r\n\r\n self.getRenderedHtml(ctlProto.CLASS + '-chart', templateData, function (out) {\r\n\r\n div.innerHTML = out;\r\n div.style.display = '';\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n const titleElm = self.div.querySelector('.tc-ctl-rpanel-title-text');\r\n titleElm.setAttribute('title', self.options.titles.main);\r\n titleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n self.div.querySelector('.tc-ctl-rpanel-minimized-max').setAttribute('title', self.options.titles.max);\r\n }\r\n }\r\n\r\n var legendOptions = { show: false };\r\n if (hasSecondaryElevationProfileChartData) {\r\n legendOptions = {\r\n position: 'inset',\r\n inset: {\r\n anchor: \"bottom-left\",\r\n x: -55,\r\n y: -30,\r\n step: 1\r\n }\r\n };\r\n }\r\n let chartOptions = TC.Util.extend({\r\n bindto: div.querySelector('.tc-chart'),\r\n padding: {\r\n top: 13, // por el nuevo diseño del tooltip añado 13 //data.secondaryElevationProfileChartData[0] ? 10 : 0,\r\n right: 15,\r\n bottom: 0,\r\n left: 45\r\n },\r\n legend: legendOptions\r\n }, self.createChartOptions(data));\r\n\r\n // preservamos el tamaño redimensionado por el usuario\r\n const resizedTarget = self.div.querySelector(`${self.classes.RESIZABLE}.tc-ctl-rpanel-main`);\r\n if (resizedTarget &&\r\n resizedTarget.dataset.chartSizeWidth && parseInt(resizedTarget.dataset.chartSizeWidth) > 0 &&\r\n resizedTarget.dataset.chartSizeHeight && parseInt(resizedTarget.dataset.chartSizeHeight) > 0) {\r\n TC.Util.extend(chartOptions.size, { width: resizedTarget.dataset.chartSizeWidth, height: resizedTarget.dataset.chartSizeHeight });\r\n\r\n if (resizedTarget.dataset.panelSizeWidth && parseInt(resizedTarget.dataset.panelSizeWidth) > 0 &&\r\n resizedTarget.dataset.panelSizeHeight && parseInt(resizedTarget.dataset.panelSizeHeight) > 0) {\r\n resizedTarget.style.width = resizedTarget.dataset.panelSizeWidth;\r\n resizedTarget.style.height = resizedTarget.dataset.panelSizeHeight;\r\n }\r\n }\r\n if (self.chart.tooltip) {\r\n chartOptions.tooltip = {\r\n position: function (_data, _width, _height, element) {\r\n let container = document.querySelector('.c3-tooltip-container');\r\n let chartOffsetX = document.querySelector(\".c3\").getBoundingClientRect().left;\r\n let graphOffsetX = document.querySelector(\".c3 g.c3-axis-y\").getBoundingClientRect().right;\r\n let tooltipWidth = container.clientWidth;\r\n let x = parseInt(d3.mouse(element)[0]) + graphOffsetX - chartOffsetX - Math.floor(tooltipWidth / 2);\r\n\r\n // alto del tooltipOnBottom\r\n let xAxisHeight = document.querySelector(\".c3 g.c3-axis-x\").getBoundingClientRect().height + 2;\r\n let onBottom = container.querySelector(`.${self.classes.POSITION_BOTTOM}`);\r\n if (onBottom && xAxisHeight) {\r\n onBottom.style.height = xAxisHeight + 'px';\r\n }\r\n return { top: 0, left: x };\r\n },\r\n contents: function (d) {\r\n var fn = self.chart.tooltip;\r\n if (typeof fn !== \"function\")\r\n fn = TC.Util.getFnFromString(self.chart.tooltip);\r\n return fn.call(eval(self.chart.ctx), d);\r\n }\r\n };\r\n }\r\n\r\n if (self.chart && self.chart.onmouseout) {\r\n chartOptions.onmouseout = function () {\r\n var fn = self.chart.onmouseout;\r\n if (typeof fn !== \"function\")\r\n fn = TC.Util.getFnFromString(self.chart.onmouseout);\r\n fn.call(eval(self.chart.ctx));\r\n };\r\n }\r\n\r\n chartOptions.onrendered = function () {\r\n if (TC.Util.isFunction(chartOptions._onrendered)) {\r\n chartOptions._onrendered.call(this);\r\n }\r\n self.map.trigger(Consts.event.DRAWCHART, { control: self, svg: this.svg[0][0], chart: this });\r\n };\r\n\r\n if (!c3._isOverriden) {\r\n // GLS: Override de la función generateDrawLine y generateDrawArea para establecer otro tipo de interpolación en la línea\r\n c3.chart.internal.fn.generateDrawLine = function (lineIndices, isSub) {\r\n var $$ = this, config = $$.config,\r\n line = $$.d3.svg.line(),\r\n getPoints = $$.generateGetLinePoints(lineIndices, isSub),\r\n yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\r\n xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\r\n yValue = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);\r\n };\r\n line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);\r\n if (!config.line_connectNull) { line = line.defined(function (d) { return d.value != null; }); }\r\n return function (d) {\r\n var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\r\n x = isSub ? $$.x : $$.subX, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;\r\n if ($$.isLineType(d)) {\r\n if (config.data_regions[d.id]) {\r\n path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\r\n } else {\r\n if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\r\n path = line.interpolate('linear')(values);\r\n }\r\n } else {\r\n if (values[0]) {\r\n x0 = x(values[0].x);\r\n y0 = y(values[0].value);\r\n }\r\n path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\r\n }\r\n return path ? path : \"M 0 0\";\r\n };\r\n };\r\n c3.chart.internal.fn.generateDrawArea = function (areaIndices, isSub) {\r\n var $$ = this, config = $$.config, area = $$.d3.svg.area(),\r\n getPoints = $$.generateGetAreaPoints(areaIndices, isSub),\r\n yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\r\n xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\r\n value0 = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(0);\r\n },\r\n value1 = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);\r\n };\r\n area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(value0).y1(value1);\r\n if (!config.line_connectNull) {\r\n area = area.defined(function (d) { return d.value !== null; });\r\n }\r\n return function (d) {\r\n var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\r\n x0 = 0, y0 = 0, path;\r\n if ($$.isAreaType(d)) {\r\n if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\r\n path = area.interpolate('linear')(values);\r\n } else {\r\n if (values[0]) {\r\n x0 = $$.x(values[0].x);\r\n y0 = $$.getYScale(d.id)(values[0].value);\r\n }\r\n path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\r\n }\r\n return path ? path : \"M 0 0\";\r\n };\r\n };\r\n c3._isOverriden = true;\r\n }\r\n\r\n self.chart.chart = c3.generate(chartOptions);\r\n });\r\n };\r\n\r\n const closeOpenedTableResultsPanel = function () {\r\n const self = this;\r\n\r\n self.map.getControlsByClass(ResultsPanel)\r\n .filter(function (ctl) {\r\n return ctl !== self && ctl.isVisible();\r\n })\r\n .filter(function (ctl) {\r\n return ctl.options.content !== 'chart';\r\n })\r\n .forEach(function (ctl) {\r\n ctl.close();\r\n });\r\n };\r\n\r\n ctlProto.openTable = function () {\r\n var self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n\r\n var data = arguments[0];\r\n if (data) {\r\n\r\n var css;\r\n if (data.css) {\r\n css = data.css;\r\n }\r\n var callback = data.callback;\r\n var columns = data.columns;\r\n\r\n if (data.data && data.data.length > 0) {\r\n //Si no recibe columnas, las extrae de las claves del primer objeto de la colección de datos\r\n if (!columns) {\r\n columns = [];\r\n for (var k in data.data[0]) {\r\n columns.push(k);\r\n }\r\n }\r\n\r\n //deleteColumns();\r\n\r\n self.tableData = {\r\n columns: columns,\r\n results: data.data,\r\n css: css,\r\n callback: callback,\r\n sort: data.sort ? {} : null\r\n };\r\n var scrollPosition = null;\r\n const _sort = (tableData, field, order) => {\r\n var sortedDataTable = tableData;\r\n if (field) {\r\n const mappedArr = self.tableData.results.map(function (el, i) {\r\n return { index: i, properties: el };\r\n });\r\n mappedArr.sort((a, b) => {\r\n const valorA = a.properties[field] || \"\";\r\n const valorB = b.properties[field] || \"\";\r\n if (order)\r\n if (typeof (valorA) === \"string\")\r\n return valorA.localeCompare(valorB)\r\n else\r\n return valorA < valorB ? -1 : (valorA == valorB ? 0 : 1);\r\n else\r\n if (typeof (valorB) === \"string\")\r\n return valorB.localeCompare(valorA)\r\n else\r\n return valorA < valorB ? 1 : (valorA == valorB ? 0 : -1);\r\n });\r\n\r\n sortedDataTable = Object.assign({}, tableData, {\r\n results: mappedArr.map(function (el) {\r\n return Object.assign({}, el.properties, { index: el.index });\r\n })\r\n });\r\n sortedDataTable.sort = { field: field, order: order };\r\n }\r\n self.getRenderedHtml(self.CLASS + '-table', sortedDataTable).then(function (html) {\r\n const table = self.div.querySelector('.tc-ctl-rpanel-table');\r\n const parent = table.parentElement;\r\n parent.removeChild(table);\r\n table.innerHTML = html;\r\n parent.appendChild(table);\r\n if (tableData.callback) {\r\n tableData.callback(table);\r\n }\r\n if (sortedDataTable.sort) {\r\n table.querySelectorAll(\"thead th\").forEach(th => {\r\n th.addEventListener(\"click\", e => {\r\n scrollPosition = e.target.offsetParent.scrollLeft;\r\n const field = e.target.dataset.orderField || e.target.innerText\r\n\r\n if (sortedDataTable.sort.field === field && sortedDataTable.sort.order)\r\n _sort(tableData, field, false);\r\n else if (sortedDataTable.sort.field === field && !sortedDataTable.sort.order) {\r\n _sort(tableData, field, true);\r\n } else {\r\n _sort(tableData, field, true);\r\n }\r\n });\r\n });\r\n }\r\n closeOpenedTableResultsPanel.call(self);\r\n\r\n const titleBar=self.div.querySelector('.tc-ctl-rpanel-title');\r\n self.getItemTools().forEach(tool => self.addItemToolUI(titleBar, tool));\r\n\r\n self.map.trigger(Consts.event.DRAWTABLE, { control: self });\r\n if (scrollPosition) {\r\n table.scrollLeft = scrollPosition;\r\n }\r\n\r\n });\r\n };\r\n _sort(self.tableData);\r\n\r\n self.div.querySelector('.tc-ctl-rpanel-chart').style.display = 'none';\r\n self.div.querySelector('.tc-ctl-rpanel-info').style.display = 'none';\r\n\r\n self.show('tc-ctl-rpanel-sidebar-body');\r\n }\r\n }\r\n };\r\n\r\n const collidingManagement = {\r\n add: function (currentPanel) {\r\n const pbody = currentPanel.div.querySelector(\".tc-ctl-rpanel-sidebar-body\");\r\n pbody.style.bottom = \"\";\r\n const bottom = currentPanel.map.getControlsByClass(ResultsPanel)\r\n .filter(panel => panel.content === panel.contentType.TABLE && panel !== currentPanel)\r\n .filter(panel => pbody.colliding(panel.div.querySelector(\".tc-ctl-rpanel-sidebar-body\"))).reduce((prevVal, currVal) => {\r\n return prevVal + currVal.div.querySelector(\".tc-ctl-rpanel-sidebar-body\").clientHeight\r\n }, 0);\r\n if (bottom) pbody.style.bottom = bottom + \"px\";\r\n },\r\n remove: function (currentPanel) {\r\n currentPanel.map.getControlsByClass(ResultsPanel)\r\n .filter(panel => panel.content === panel.contentType.TABLE && panel !== currentPanel)\r\n .forEach((panel) => {\r\n panel.div.querySelector(\".tc-ctl-rpanel-sidebar-body\").style.bottom = \"\";\r\n });\r\n\r\n }\r\n }\r\n\r\n ctlProto.open = function (html, container) {\r\n const self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n\r\n const toCheck = container || self.div.querySelector('.tc-ctl-rpanel-table');\r\n var checkIsRendered = function () {\r\n var clientRect = toCheck.getBoundingClientRect();\r\n if (clientRect && clientRect.width > 100) {\r\n window.cancelAnimationFrame(this.requestIsRendered);\r\n\r\n const titleBar = self.div.querySelector('.tc-ctl-rpanel-title');\r\n self.getItemTools().forEach(tool => self.addItemToolUI(titleBar, tool));\r\n //closeOpenedTableResultsPanel.call(self);\r\n this.map.trigger(Consts.event.DRAWTABLE, { control: self });\r\n }\r\n };\r\n\r\n self.requestIsRendered = window.requestAnimationFrame(checkIsRendered.bind(self));\r\n\r\n const chartElm = self.div.querySelector('.tc-ctl-rpanel-chart');\r\n chartElm.style.display = 'none';\r\n const tableElm = self.div.querySelector('.tc-ctl-rpanel-table');\r\n tableElm.style.display = 'none';\r\n const infoElm = self.div.querySelector('.tc-ctl-rpanel-info');\r\n infoElm.style.display = 'none';\r\n\r\n if (html) {\r\n if (container) {\r\n self.getTableContainer = function () {\r\n return container;\r\n };\r\n container.innerHTML = html;\r\n container.style.display = '';\r\n } else {\r\n tableElm.innerHTML = html;\r\n tableElm.style.display = '';\r\n }\r\n }\r\n else {\r\n if (chartElm.childElementCount) {\r\n chartElm.style.display = '';\r\n }\r\n else if (tableElm.childElementCount) {\r\n tableElm.style.display = '';\r\n }\r\n else if (infoElm.childElementCount) {\r\n infoElm.style.display = '';\r\n }\r\n }\r\n\r\n const maximizeElm = self.div.querySelector('.tc-ctl-rpanel-minimized-max');\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n const titleElm = self.div.querySelector('.tc-ctl-rpanel-title-text');\r\n titleElm.setAttribute('title', self.options.titles.main);\r\n titleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n maximizeElm.setAttribute('title', self.options.titles.max);\r\n }\r\n }\r\n\r\n if (self.options.classes) {\r\n if (self.options.classes.collapsed) {\r\n maximizeElm.querySelector('span.tc-ctl-rpanel-minimized-max-table').classList.add(self.options.classes.collapsed);\r\n }\r\n }\r\n\r\n // si está minimizado\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (isElementVisible(collapsedElm)) {\r\n self.maximize();\r\n }\r\n\r\n self.show('tc-ctl-rpanel-sidebar-body');\r\n self.hide('tc-ctl-rpanel-minimized-max');\r\n //URI: Evitar solapamentos entre paneles en modo móvil\r\n collidingManagement.add(self); \r\n };\r\n\r\n ctlProto.onOpen = function () {\r\n const self = this;\r\n if (self.resizable) {\r\n self.renderPanelResizable({ target: self.div, preserveAspectRatio: true });\r\n }\r\n else {\r\n hideResizeHandlers(self);\r\n }\r\n };\r\n\r\n ctlProto.loadDataOnChart = function (data) {\r\n const self = this;\r\n const endFn = function () {\r\n self.elevationProfileChartData = data;\r\n self.renderElevationProfileChart({\r\n data: data,\r\n div: self.div.querySelector('.' + ctlProto.CLASS + '-chart')\r\n });\r\n };\r\n // puede llegar aquí después de borrar un track.\r\n if (self.chart && self.chart.chart) {\r\n self.chart.chart.unload({\r\n done: endFn\r\n });\r\n }\r\n else {\r\n endFn();\r\n }\r\n };\r\n\r\n ctlProto.createChartOptions = function (options) {\r\n const self = this;\r\n var result = {};\r\n options = options || {};\r\n const locale = options.locale || TC.Util.getMapLocale(self.map);\r\n switch (options.chartType) {\r\n default:\r\n if (options.ele != null) {\r\n const getChartSize = function () {\r\n const panelStyle = getComputedStyle(self.getContainerElement());\r\n const docWidth = document.documentElement.clientWidth / 100 * 40; // css panel contendor\r\n const r = {\r\n height: docWidth > 445 ? options.maxHeight || self.CHART_SIZE.MAX_HEIGHT : options.minHeight || self.CHART_SIZE.MIN_HEIGHT\r\n };\r\n // Si el panel ocupa el ancho del mapa dejamos el ancho del perfil que ocupe todo, en cualquier otro caso tenemos tres anchos predefinidos.\r\n if (panelStyle.width === getComputedStyle(self.map.div).width) {\r\n r.width = parseFloat(panelStyle.width) * 0.95;\r\n }\r\n else {\r\n r.width = docWidth > 445 ? options.maxWidth || self.CHART_SIZE.MAX_WIDTH : docWidth > 310 ? options.mediumWidth || self.CHART_SIZE.MEDIUM_WIDTH : options.minWidth || self.CHART_SIZE.MIN_WIDTH;\r\n }\r\n return r;\r\n };\r\n const gradIds = ['grad' + TC.getUID()];\r\n\r\n let maxy = Number.NEGATIVE_INFINITY;\r\n let miny = Number.POSITIVE_INFINITY;\r\n options.ele.forEach(function (y) {\r\n if (typeof y === 'number') {\r\n maxy = Math.max(y, maxy);\r\n miny = Math.min(y, miny);\r\n }\r\n });\r\n\r\n let xColumn = [...options.x];\r\n let eleColumn = [...options.ele];\r\n\r\n result = {\r\n data: {\r\n x: 'x',\r\n columns: [\r\n ['x'].concat(xColumn),\r\n ['ele'].concat(eleColumn)\r\n ],\r\n types: {\r\n 'ele': 'area-spline'\r\n },\r\n colors: {\r\n \"ele\": 'url(#' + gradIds[0] + ')'\r\n }\r\n },\r\n size: getChartSize(),\r\n point: {\r\n show: false\r\n },\r\n axis: {\r\n x: {\r\n tick: {\r\n outer: false,\r\n count: 5, format: function (d) {\r\n d = d / 1000;\r\n var dist;\r\n var measure;\r\n if (d < 1) {\r\n dist = Math.round(d * 1000);\r\n measure = ' m';\r\n } else {\r\n dist = Math.round(d * 100) / 100;\r\n measure = ' km';\r\n }\r\n\r\n dist = dist.toLocaleString(locale);\r\n return dist + measure;\r\n }\r\n }\r\n },\r\n y: {\r\n padding: {\r\n top: 0, bottom: 0\r\n },\r\n max: maxy,\r\n min: miny,\r\n tick: {\r\n count: 2,\r\n format: function (d) {\r\n return formatYAxis(d, locale);\r\n }\r\n }\r\n }\r\n },\r\n onresize: function () {\r\n let size;\r\n let targetNode = this.config.bindto.closest(`${self.classes.RESIZABLE}.tc-ctl-rpanel-main`);\r\n if (targetNode) {\r\n size = self.getResizableChartSize(targetNode);\r\n } else {\r\n size = getChartSize();\r\n }\r\n if (size) {\r\n this.api.resize(size);\r\n }\r\n }\r\n };\r\n\r\n const hasSecondaryElevationProfileChartData = options.secondaryElevationProfileChartData &&\r\n Array.isArray(options.secondaryElevationProfileChartData) &&\r\n options.secondaryElevationProfileChartData.length > 0 && options.secondaryElevationProfileChartData[0];\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n result.data.names = {\r\n ele: self.getLocaleString(\"geo.profile.fromTrack\"),\r\n ele2: self.getLocaleString(\"mdt\")\r\n };\r\n result.data.columns.push(['ele2'].concat(options.secondaryElevationProfileChartData[0].ele));\r\n\r\n result.data.types.ele2 = result.data.types.ele;\r\n gradIds.push('grad' + TC.getUID());\r\n result.data.colors.ele2 = 'url(#' + gradIds[gradIds.length - 1] + ')';\r\n result.data.axes = {\r\n ele: 'y'\r\n };\r\n\r\n if (eleColumn.every((val) => val === 0)) {\r\n result.axis.y.min = options.secondaryElevationProfileChartData[0].min;\r\n result.axis.y.max = options.secondaryElevationProfileChartData[0].max;\r\n } else if (options.secondaryElevationProfileChartData[0].ele.every((val) => val === 0)) {\r\n result.axis.y.min = Math.min(...eleColumn);\r\n result.axis.y.max = Math.max(...eleColumn);\r\n } else {\r\n result.axis.y.min = Math.min(...eleColumn.concat(options.secondaryElevationProfileChartData[0].min));\r\n result.axis.y.max = Math.max(...eleColumn.concat(options.secondaryElevationProfileChartData[0].max));\r\n }\r\n }\r\n\r\n if (options.time) result.time = (\"00000\" + options.time.h).slice(-2) + ':' + (\"00000\" + options.time.m).slice(-2) + ':' + (\"00000\" + options.time.s).slice(-2);\r\n\r\n var rendered = false;\r\n result._onrendered = function () {\r\n if (!rendered) {\r\n rendered = true;\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n // redondeamos los cuadritos de la leyenda.\r\n document.querySelectorAll('.c3-legend-item-tile').forEach((item) => {\r\n item.setAttribute('rx', 5);\r\n item.setAttribute('ry', 1);\r\n });\r\n // añdimos title a los elementos de la leyenda\r\n document.querySelectorAll('.c3-legend-item').forEach((item) => {\r\n var title = document.createElementNS('http://www.w3.org/2000/svg', 'title');\r\n title.textContent = self.getLocaleString(\"hide\");\r\n item.appendChild(title);\r\n\r\n item.addEventListener(Consts.event.CLICK, function () {\r\n if (item.classList.contains(Consts.classes.HIDDEN)) {\r\n item.querySelector('title').textContent = self.getLocaleString(\"hide\");\r\n } else {\r\n item.querySelector('title').textContent = self.getLocaleString(\"show\");\r\n }\r\n\r\n item.classList.toggle(Consts.classes.HIDDEN);\r\n }, { passive: true });\r\n });\r\n }\r\n }\r\n\r\n if (!this.svg) {\r\n return; // es posible que lleguemos aquí y el usuario justo haya deseleccionado el track de la lista.\r\n }\r\n\r\n const svg = this.svg[0][0];\r\n var svgDefsElement = svg.getElementsByTagName('defs')[0];\r\n var xmlns = \"http://www.w3.org/2000/svg\";\r\n\r\n const createLinearGradient = function (id, colors) {\r\n var grad = document.createElementNS(xmlns, \"linearGradient\");\r\n grad.setAttributeNS(null, \"id\", id);\r\n grad.setAttributeNS(null, \"x1\", \"0%\");\r\n grad.setAttributeNS(null, \"x2\", \"0%\");\r\n grad.setAttributeNS(null, \"y1\", \"0%\");\r\n grad.setAttributeNS(null, \"y2\", \"100%\");\r\n grad.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\r\n\r\n const stop0 = document.createElementNS(xmlns, \"stop\");\r\n stop0.setAttributeNS(null, \"offset\", \"0%\");\r\n stop0.setAttributeNS(null, \"stop-color\", colors[0]);\r\n stop0.setAttributeNS(null, \"stop-opacity\", \"0.7\");\r\n grad.appendChild(stop0);\r\n\r\n const stop50 = document.createElementNS(xmlns, \"stop\");\r\n stop50.setAttributeNS(null, \"offset\", \"50%\");\r\n stop50.setAttributeNS(null, \"stop-color\", colors[1]);\r\n stop50.setAttributeNS(null, \"stop-opacity\", \"0.9\");\r\n grad.appendChild(stop50);\r\n\r\n const stop100 = document.createElementNS(xmlns, \"stop\");\r\n stop100.setAttributeNS(null, \"offset\", \"100%\");\r\n stop100.setAttributeNS(null, \"stop-color\", colors[2]);\r\n stop100.setAttributeNS(null, \"stop-opacity\", \"1\");\r\n grad.appendChild(stop100);\r\n\r\n svgDefsElement.appendChild(grad);\r\n };\r\n\r\n createLinearGradient(gradIds[0], [\"red\", \"orange\", \"green\"]);\r\n if (options.secondaryElevationProfileChartData) {\r\n createLinearGradient(gradIds[gradIds.length - 1], [\"blue\", \"cian\", \"green\"]);\r\n }\r\n\r\n const d3Node = d3.select(\".c3-brush\").node();\r\n if (d3Node) {\r\n d3Node.parentNode.removeChild(d3Node);\r\n }\r\n\r\n d3.select(\".c3-event-rects,.c3-event-rects-single\")\r\n .selectAll(\"rect\")\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"click\", function (e) {\r\n d3.event.stopPropagation();\r\n let point = self.elevationProfileChartData.coords[e.index];\r\n if (point) {\r\n point = point.slice(0, 2);\r\n if (self.map.crs !== self.map.options.utmCrs) {\r\n point = TC.Util.reproject(point, self.map.options.utmCrs, self.map.crs);\r\n }\r\n self.map.zoomToFeatures([new Point(point, {})]);\r\n }\r\n });\r\n\r\n const path = d3.select('.c3-axis.c3-axis-x').select('path');\r\n if (!path.empty()) {\r\n let pattern = path.attr('d');\r\n let match = /^M\\d\\,(\\d)V\\dH\\d{3}V(\\d)$/i.exec(pattern);\r\n if (match) { // quitamos las barritas de los extremos del axis-x\r\n pattern = pattern.replace(/(M\\d\\,)\\d/i, \"$10\").replace(/(H\\d{3}V)(\\d)/i, \"$10\");\r\n path.attr('d', pattern);\r\n } else {\r\n let match = /^M\\s\\d\\s(\\d)\\sV\\s\\d\\sH\\s\\d{3}\\sV\\s(\\d)$/i.exec(pattern);\r\n if (match) { // quitamos las barritas de los extremos del axis-x\r\n pattern = pattern.replace(/(M\\s\\d\\s)\\d/i, \"$10\").replace(/(H\\s\\d{3}\\sV\\s)(\\d)/i, \"$10\");\r\n path.attr('d', pattern);\r\n }\r\n }\r\n }\r\n\r\n\r\n const svgRect = svg.getBoundingClientRect();\r\n const chartSize = {\r\n width: svgRect.width,\r\n height: svgRect.height\r\n };\r\n\r\n // revisar\r\n //svg.removeAttribute('height');\r\n //svg.removeAttribute('width');\r\n\r\n //svg.setAttribute('viewbox', '0 0 ' + chartSize.width + ' ' + chartSize.height);\r\n\r\n // ¿es necesario pasar los labels a multiline?\r\n var setMultilineLabels = function () {\r\n var x = d3.scale.ordinal().rangeRoundBands([0, chartSize.width], .1, .3);\r\n d3.select('.c3-axis-x').selectAll('text:not(.c3-axis-x-label)')\r\n .call(function (textNode, _width) {\r\n textNode.each(function () {\r\n textNode.each(function (d, i) {\r\n if (i === 0) {\r\n return;\r\n }\r\n\r\n const d3text = d3.select(this);\r\n\r\n if (d3text.node().childNodes.length === 1) {\r\n var clone = d3text.select('tspan').node().cloneNode();\r\n var words = d3text.text().split(' ');\r\n\r\n d3text.select('tspan').text(words[0]);\r\n clone.textContent = words[1];\r\n var dy = clone.getAttribute('dy');\r\n dy = dy ? parseFloat(clone.getAttribute('dy')) : .71;\r\n dy = dy + 0.18 + 'em';\r\n clone.setAttribute('dy', dy);\r\n d3text.node().appendChild(clone);\r\n }\r\n });\r\n });\r\n }, x.rangeBand());\r\n };\r\n\r\n const xAxisNodeRect = d3.select('.c3-axis-x').node().getBoundingClientRect();\r\n if (!xAxisNodeRect.width) {\r\n\r\n if (self.elevationChartLabelsRAF) {\r\n window.cancelAnimationFrame(self.elevationChartLabelsRAF);\r\n self.elevationChartLabelsRAF = undefined;\r\n }\r\n\r\n const hasSize = function () {\r\n const xAxis = d3.select('.c3-axis-x');\r\n const xAxisNode = xAxis.node();\r\n if (xAxis.length && !xAxisNode) {\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n }\r\n else if (xAxis.length && xAxisNode &&\r\n !xAxisNode.getBoundingClientRect().width) {\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n } else {\r\n window.cancelAnimationFrame(self.elevationChartLabelsRAF);\r\n self.elevationChartLabelsRAF = undefined;\r\n\r\n const _xAxisNodeRect = xAxisNode.getBoundingClientRect();\r\n const _yAxisNodeRect = d3.select('.c3-axis-y').node().getBoundingClientRect();\r\n if (_xAxisNodeRect.width >= chartSize.width - _yAxisNodeRect.width ||\r\n _xAxisNodeRect.width * 100 / (chartSize.width - _yAxisNodeRect.width) > 90) {\r\n setMultilineLabels();\r\n }\r\n }\r\n };\r\n\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n }\r\n else {\r\n const yAxisNodeRect = d3.select('.c3-axis-y').node().getBoundingClientRect();\r\n if (xAxisNodeRect.width >= chartSize.width - yAxisNodeRect.width ||\r\n xAxisNodeRect.width * 100 / (chartSize.width - yAxisNodeRect.width) > 90) {\r\n setMultilineLabels();\r\n }\r\n }\r\n\r\n // pasamos el perfil original adelante si no no se aprecian bien las diferencias por el color y si lo gestionamos antes afecta a la leyenda\r\n d3.select('svg').select(\".c3-chart-lines\").selectAll(\".c3-target-ele\").each(function () {\r\n this.parentNode.appendChild(this);\r\n });\r\n\r\n if (!self.isMinimized()) {\r\n self.show('tc-ctl-rpanel-sidebar-body');\r\n self.hide('tc-ctl-rpanel-minimized-max');\r\n }\r\n\r\n\r\n self.div.querySelector('.tc-ctl-rpanel-table').style.display = '';\r\n self.div.querySelector('.tc-ctl-rpanel-info').style.display = '';\r\n };\r\n }\r\n else {\r\n result = {\r\n msg: self.getLocaleString(\"geo.trk.chart.chpe.empty\")\r\n };\r\n }\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n const getTime = function (timeFrom, timeTo) {\r\n var diff = timeTo - timeFrom;\r\n var d = {};\r\n var daysDifference = Math.floor(diff / 1000 / 60 / 60 / 24);\r\n diff -= daysDifference * 1000 * 60 * 60 * 24;\r\n\r\n var hoursDifference = Math.floor(diff / 1000 / 60 / 60);\r\n diff -= hoursDifference * 1000 * 60 * 60;\r\n\r\n d.h = hoursDifference + daysDifference * 24;\r\n\r\n var minutesDifference = Math.floor(diff / 1000 / 60);\r\n diff -= minutesDifference * 1000 * 60;\r\n\r\n d.m = minutesDifference;\r\n\r\n d.s = Math.floor(diff / 1000);\r\n\r\n return TC.Util.extend({}, d, { toString: (\"00000\" + d.h).slice(-2) + ':' + (\"00000\" + d.m).slice(-2) + ':' + (\"00000\" + d.s).slice(-2) });\r\n };\r\n\r\n ctlProto.getElevationChartTooltip = function (data) {\r\n const self = this;\r\n\r\n const locale = self.map.options.locale && self.map.options.locale.replace('_', '-') || undefined;\r\n const coords = self.elevationProfileChartData.coords;\r\n const getElevationByDataElem = function (dataElem) {\r\n return dataElem.value ? parseInt(dataElem.value.toFixed(0)).toLocaleString(locale) : \"0\";\r\n };\r\n const p = coords[data[0].index];\r\n let doneTime;\r\n if (coords[0].length === 4 && coords[0][3] > 0 && p) {\r\n doneTime = getTime(coords[0][3], p[3]);\r\n }\r\n let distance = data[0].x / 1000;\r\n let distanceFormatted = (distance < 1 ? Math.round(distance * 1000) : Math.round(distance * 100) / 100).toLocaleString(locale) + (distance < 1 ? ' m' : ' km');\r\n\r\n let elevationDiv = `
` +\r\n '' +\r\n data.map((elem, index) => {\r\n if (elem) {\r\n return index === 0 ? '' + getElevationByDataElem(elem) + ' m' + '' :\r\n '' + getElevationByDataElem(elem) + ' m ' + '';\r\n } else {\r\n return \"\";\r\n }\r\n }).join('') +\r\n '' +\r\n '
';\r\n\r\n let distanceAndTimeDiv = `
${distanceFormatted} ` +\r\n (doneTime ? '' + doneTime.toString + '
' : '
');\r\n\r\n\r\n return elevationDiv + distanceAndTimeDiv;\r\n };\r\n\r\n ctlProto.getTableContainer = function () {\r\n return this.tableDiv;\r\n };\r\n\r\n ctlProto.getInfoContainer = function () {\r\n return this.infoDiv;\r\n };\r\n\r\n ctlProto.getMenuElement = function () {\r\n return this.menuDiv;\r\n };\r\n\r\n ctlProto.getContainerElement = function () {\r\n return this.div.querySelector('.tc-ctl-rpanel-sidebar-body');\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n self.wrap.register(map);\r\n\r\n if (self.openOn) {\r\n self.map.one(self.openOn, function (e, _args) {\r\n self.content.fnOpen.call(self, e.data);\r\n });\r\n }\r\n\r\n if (self.closeOn) {\r\n self.map.one(self.closeOn, function (_e, _args) {\r\n self.close();\r\n });\r\n }\r\n\r\n if (self.options.openOn) {\r\n self.map.on(self.options.openOn, function (e, _args) {\r\n self.content.fnOpen.call(self, e.data);\r\n });\r\n }\r\n\r\n if (self.options.closeOn) {\r\n self.map.on(self.options.closeOn, function (_e, _args) {\r\n self.close();\r\n });\r\n }\r\n\r\n map\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.currentFeature === e.feature && self.isVisible()) {\r\n self.close();\r\n }\r\n })\r\n .on(Consts.event.FEATURESCLEAR + ' ' + Consts.event.LAYERREMOVE, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer && self.isVisible()) {\r\n self.close();\r\n }\r\n });\r\n\r\n //map.on(Consts.event.VIEWCHANGE, function () {\r\n\r\n // map.getControlsByClass(ResultsPanel).filter(function (ctl) {\r\n // return ctl.options.content !== \"chart\" && ($(ctl.div).find('.' + ctl.CLASS + '-info:visible').length === 1 || $(ctl.div).find('.' + ctl.CLASS + '-table:visible').length === 1);\r\n // }).forEach(function (ctl) {\r\n // ctl.close();\r\n // });\r\n //});\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.exportToExcel = function () {\r\n const self = this;\r\n\r\n var rows = [self.tableData.columns];\r\n\r\n self.tableData.results.forEach(function (value) {\r\n var row = [];\r\n for (var k in value) {\r\n if (Object.prototype.hasOwnProperty.call(value, k) && k !== \"Id\" && k !== \"Geom\") { //Las columnas ID y Geom no aparece en la exportaci\\u00f3n\r\n row.push(value[k]);\r\n }\r\n }\r\n rows.push(row);\r\n });\r\n import('../tool/ExcelExport').then(function saveToExcel(module) {\r\n const ExcelExport = module.default;\r\n const exporter = new ExcelExport();\r\n var fileName = self.save.fileName ? self.save.fileName : 'resultados.xls';\r\n var title = self.options.titles && self.options.titles.main ? self.options.titles.main : null;\r\n exporter.Save(fileName, rows, title);\r\n });\r\n };\r\n\r\n ctlProto.contentType = {\r\n TABLE: {\r\n fnOpen: ctlProto.openTable,\r\n collapsedClass: `.${ctlProto.CLASS}-minimized-max-table`\r\n },\r\n CHART: {\r\n fnOpen: ctlProto.openChart,\r\n collapsedClass: `.${ctlProto.CLASS}-minimized-max-chart`\r\n }\r\n };\r\n})();\r\n\r\nTC.control.ResultsPanel = ResultsPanel;\r\nTC.mix(ResultsPanel, itemToolContainer);\r\nexport default ResultsPanel;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst SWCacheClient = function () {\r\n const self = this;\r\n Control.apply(this, arguments);\r\n self.serviceWorkerEnabled = false;\r\n self.serviceWorkerIsRequired = self.options.serviceWorkerIsRequired || true;\r\n};\r\n\r\nTC.inherit(SWCacheClient, Control);\r\n\r\n(function () {\r\n\r\n var ctlProto = SWCacheClient.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-swcc';\r\n ctlProto.SW_URL = 'tc-cb-service-worker.js';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n // Si el navegador es compatible, añadimos el service worker.\r\n self._swPromise = new Promise(function (resolve, reject) {\r\n if (navigator.serviceWorker) {\r\n\r\n navigator.serviceWorker.register(self.SW_URL, {\r\n scope: './'\r\n }).then(\r\n function (reg) {\r\n self.serviceWorkerEnabled = true;\r\n if (reg.installing) {\r\n resolve(reg.installing);\r\n } else if (reg.waiting) {\r\n resolve(reg.waiting);\r\n } else if (reg.active) {\r\n resolve(reg.active);\r\n }\r\n console.log(reg.scope, 'register');\r\n },\r\n function (reason) {\r\n self.serviceWorkerEnabled = false;\r\n reject(new Error(reason));\r\n console.error('Could not register service worker: ' + reason);\r\n });\r\n }\r\n else { \r\n reject(new Error(\"Browser does not support service workers\"));\r\n }\r\n });\r\n\r\n self._swPromise.catch(() => {\r\n let unsafeProtocol = false;\r\n const isFrame = window.parent !== window;\r\n for (var scope = window; !unsafeProtocol; scope = scope.parent) {\r\n try {\r\n if (scope.location.protocol !== 'https:') {\r\n unsafeProtocol = true;\r\n }\r\n }\r\n catch (e) {\r\n }\r\n if (scope === scope.parent) {\r\n break;\r\n }\r\n }\r\n if (unsafeProtocol) {\r\n map.toast(self.getLocaleString('httpsRequired.warning', { url: location.href.replace(location.protocol, '') }), { type: Consts.msgType.WARNING });\r\n }\r\n else if (isFrame) {\r\n map.toast(self.getLocaleString('frameOrNotCompatible.warning'), { type: Consts.msgType.WARNING });\r\n }\r\n else {\r\n if (self.serviceWorkerIsRequired) {\r\n map.toast(self.getLocaleString('browserNotCompatible.warning'), { type: Consts.msgType.WARNING });\r\n }\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n ctlProto.getServiceWorker = function () {\r\n if (!this._swPromise) {\r\n return Promise.reject(new Error('No service worker available'));\r\n }\r\n return this._swPromise;\r\n };\r\n\r\n var addMessageEventListener = function (resolve, reject, cacheName, action, eventName) {\r\n var MESSAGE = 'message';\r\n var messageHandler = function messageHandler(event) {\r\n if (event.data.name === cacheName) {\r\n if (event.data.action === action && event.data.event === eventName) {\r\n resolve(cacheName);\r\n }\r\n else if (event.data.event === 'error') {\r\n reject(Error(`Error message from service worker [${event.data.url} - ${event.data.action} - ${event.data.name}]`));\r\n }\r\n if (event.data.event !== 'progress') {\r\n navigator.serviceWorker.removeEventListener(MESSAGE, messageHandler);\r\n }\r\n }\r\n };\r\n navigator.serviceWorker.addEventListener(MESSAGE, messageHandler);\r\n };\r\n\r\n ctlProto.createCache = function (name, options) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n self.getServiceWorker().then(function (sw) {\r\n var ACTION = 'create';\r\n var opts = options || {};\r\n addMessageEventListener(resolve, reject, name, ACTION, 'cached');\r\n sw.postMessage({\r\n action: ACTION,\r\n name: name,\r\n requestId: opts.requestId,\r\n list: opts.urlList || [],\r\n silent: opts.silent\r\n });\r\n }, function () {\r\n resolve(false);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.deleteCache = function (name, options) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n self.getServiceWorker().then(function (sw) {\r\n var ACTION = 'delete';\r\n var opts = options || {};\r\n addMessageEventListener(resolve, reject, name, ACTION, 'deleted');\r\n sw.postMessage({\r\n action: ACTION,\r\n requestId: opts.requestId,\r\n name: name,\r\n silent: opts.silent\r\n });\r\n }, function () {\r\n resolve(false);\r\n });\r\n });\r\n };\r\n\r\n})();\r\n\r\nTC.control.SWCacheClient = SWCacheClient;\r\nexport default SWCacheClient;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Util from '../Util';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.SCREEN_SIZE_KEY = 'TC.Map.screenSize';\r\n\r\nclass Scale extends Control {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-scl';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-scl.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({ scale: self.getScale(), screenSize: Cfg.screenSize }, function () {\r\n\r\n const span = self.div.querySelector('span');\r\n span.textContent = '1:' + self.format(span.textContent.substr(2));\r\n\r\n self.div.querySelector('input[type=\"button\"]').addEventListener(Consts.event.CLICK, function () {\r\n self.setScreenSize();\r\n }, { passive: true });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n let screenSize = Util.storage.getLocalValue(Consts.SCREEN_SIZE_KEY);\r\n if (screenSize) {\r\n Cfg.screenSize = screenSize;\r\n }\r\n self.render(function () {\r\n map.on(Consts.event.ZOOM, function () {\r\n delete self.metersPerDegree;\r\n self.update();\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n update() {\r\n this.render();\r\n }\r\n\r\n /*\r\n * setScreenSize: Prompts for screen size in inches, updates and stores value\r\n */\r\n setScreenSize() {\r\n const self = this;\r\n TC.prompt(self.getLocaleString('selectScreenSize'), Cfg.screenSize, function (value) {\r\n if (value) {\r\n Cfg.screenSize = parseFloat(value);\r\n Util.storage.setLocalValue(Consts.SCREEN_SIZE_KEY, Cfg.screenSize);\r\n self.update();\r\n }\r\n });\r\n }\r\n\r\n /*\r\n * getScale: Gets scale denominator with a resolution or current map resolution and estimated screen DPI\r\n * Parameters: number (optional), the resolution to get scale from. If no parameter is given, current map resolution is used\r\n * Returns: number\r\n */\r\n getScale(resolution) {\r\n const self = this;\r\n var result = 0;\r\n var res = !resolution && self.map ? self.map.wrap.getResolution() : resolution;\r\n if (res) {\r\n result = res * self.getDpi(Cfg.screenSize) / .0254;\r\n if (window.devicePixelRatio) {\r\n result = result * window.devicePixelRatio;\r\n }\r\n }\r\n if (self.map && self.map.wrap.isGeo()) {\r\n if (!self.metersPerDegree) {\r\n var extent = self.map.getExtent();\r\n if (extent) {\r\n self.metersPerDegree = Util.getMetersPerDegree(extent);\r\n }\r\n }\r\n if (self.metersPerDegree) {\r\n result = result * self.metersPerDegree;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /*\r\n * getDpi: Gets estimated DPI based on screen resolution and screenSize value\r\n * Returns: number\r\n */\r\n getDpi(screenSize) {\r\n const self = this;\r\n self.dpi = Math.sqrt(screen.width * screen.width + screen.height * screen.height) / screenSize;\r\n return self.dpi;\r\n }\r\n\r\n format(number) {\r\n var n = (new Number(number)).toFixed(0);\r\n var a = [];\r\n while (n.length > 3) {\r\n var l = n.length - 3;\r\n a.unshift(n.substr(l));\r\n n = n.substr(0, l);\r\n }\r\n if (n) {\r\n a.unshift(n);\r\n }\r\n return a.join('.');\r\n }\r\n}\r\n\r\nTC.control.Scale = Scale;\r\nexport default Scale;","import TC from '../../TC';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass ScaleBar extends Control {\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-sb';\r\n }\r\n\r\n render() {\r\n const self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.ScaleBar(self);\r\n }\r\n self.wrap.render();\r\n return self._set1stRenderPromise(Promise.resolve());\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n const objects = await Promise.all([super.register.call(self, map), map.wrap.getMap()]);\r\n objects[1].addControl(self.wrap.ctl);\r\n return self;\r\n }\r\n\r\n getText() {\r\n const self = this;\r\n\r\n return self.wrap.getText();\r\n }\r\n}\r\n\r\nTC.control.ScaleBar = ScaleBar;\r\nexport default ScaleBar;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Util from '../Util';\r\nimport Scale from './Scale';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass ScaleSelector extends Scale {\r\n scales = null;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-ss';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-ss.mjs');\r\n self.template = module.default;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n if (self.map) {\r\n if (!self.scales && self.map.options.resolutions) {\r\n self.scales = self.map.options.resolutions.map(self.getScale, self);\r\n }\r\n var render = function () {\r\n self.scales = self.map.wrap.getResolutions().map(self.getScale, self);\r\n self.renderData({ scale: self.getScale(), screenSize: Cfg.screenSize, scales: self.scales }, function () {\r\n\r\n self.div.querySelectorAll('option').forEach(function (option) {\r\n option.textContent = '1:' + self.format(option.textContent.substr(2));\r\n });\r\n\r\n self.div.querySelector('input[type=\"button\"]').addEventListener(Consts.event.CLICK, function () {\r\n self.setScreenSize();\r\n }, { passive: true });\r\n\r\n self.div.querySelector('select').addEventListener('change', function () {\r\n self.setScale(this.value);\r\n });\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n };\r\n if (self.scales) {\r\n render();\r\n }\r\n else {\r\n self.map.wrap.getMap().then(render);\r\n }\r\n }\r\n else {\r\n reject(Error('ScaleSelector no registrado'));\r\n }\r\n }));\r\n }\r\n\r\n/*\r\n * setScale: Sets the resolution of the map from a scale denominator and estimated screen DPI\r\n * Parameters: number, the scale denominator\r\n * Returns: number, the resolution\r\n */\r\n setScale(scale) {\r\n const self = this;\r\n let result = scale * .0254 / self.getDpi(Cfg.screenSize);\r\n if (window.devicePixelRatio) {\r\n result = result / window.devicePixelRatio;\r\n }\r\n if (self.metersPerDegree) {\r\n result = result / self.metersPerDegree;\r\n }\r\n self.map.wrap.setResolution(result);\r\n return result;\r\n }\r\n\r\n}\r\n\r\n\r\nTC.control.ScaleSelector = ScaleSelector;\r\nexport default ScaleSelector;","\r\n/**\r\n * Opciones de control de búsquedas. La configuración por defecto tiene como origen de datos el WFS de IDENA. \r\n * Es posible establecer un origen de datos distinto en el que consultar, para ello en lugar de asignar un booleano a la propiedad, que activa o desactiva la búsqueda, \r\n * se asignará un objeto con las propiedades a sobrescribir. Las propiedades a sobrescribir no siempre serán las mismas, variarán en función de la configuración que tenga la búsqueda que se quiera modificar.\r\n * @typedef SearchOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean|SITNA.control.CadastralSearchOptions} [cadastralParcel=true] - Esta propiedad activa/desactiva la búsqueda de parcelas catastrales en el buscador del mapa. Formato: municipio, polígono, parcela.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link CadastralSearchOptions}.\r\n *\r\n * @property {boolean} [coordinates=true] - Esta propiedad activa/desactiva la localización de coordenadas en Sistema de Referencia ETRS89, bien UTM Huso 30 Norte (EPSG:25830) o latitud-longitud (EPSG:4258, EPSG:4326 o CRS:84) en el buscador del mapa.\r\n * @property {string} [instructions=\"Buscar municipio, casco urbano, calle, dirección, referencia catastral, coordenadas UTM o latitud-longitud\"] - Esta propiedad establece el atributo `title` del cajetín y del botón del buscador del mapa.\r\n * @property {boolean|SITNA.control.MunicipalitySearchOptions} [municipality=true] - Esta propiedad activa/desactiva la búsqueda de municipios en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link MunicipalitySearchOptions}.\r\n * @property {boolean|SITNA.control.PlaceNameSearchOptions} [placeName=false] - Esta propiedad activa/desactiva la búsqueda de topónimos en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PlaceNameSearchOptions}.\r\n * @property {boolean|SITNA.control.PlaceNameMunicipalitySearchOptions} [placeNameMunicipality=false] - Esta propiedad activa/desactiva la búsqueda de topónimo en un municipio en el buscador del mapa. Formato: municipio, topónimo.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PlaceNameMunicipalitySearchOptions}.\r\n * @property {boolean|SITNA.control.PostalAddressSearchOptions} [postalAddress=true] - Esta propiedad activa/desactiva la búsqueda de direcciones postales en el buscador del mapa. Formato: entidad de población, vía, portal.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PostalAddressSearchOptions}.\r\n * @property {boolean|SITNA.control.RoadSearchOptions} [road=false] - Esta propiedad activa/desactiva la búsqueda de carreteras en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link RoadSearchOptions}.\r\n * @property {boolean|SITNA.control.RoadMilestoneSearchOptions} [roadMilestone=false] - Esta propiedad activa/desactiva la búsqueda de punto kilométrico en una carretera en el buscador del mapa. Formato: carretera, pk.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link RoadMilestoneSearchOptions}.\r\n * @property {boolean|SITNA.control.StreetSearchOptions} [street=true] - Esta propiedad activa/desactiva la búsqueda de vías en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link StreetSearchOptions}.\r\n * @property {boolean|SITNA.control.UrbanAreaSearchOptions} [town=true] - Esta propiedad activa/desactiva de cascos urbanos en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link UrbanAreaSearchOptions}.\r\n * @example [Ver en vivo](../examples/cfg.SearchOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de parcelas catastrales.\r\n * @typedef CadastralSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la parcela catastral.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {CadastralSearchOptionsExt} municipality - Definición de la fuente de datos para la búsqueda de parcela por nombre de municipio en lugar de por código del mismo.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de parcelas.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos en los que buscar el código de municipio.\r\n * - `secondQueryWord`: se indicará el campo o campos en los que buscar el polígono.\r\n * - `thirdQueryWord`: se indicará el campo o campos en los que buscar la parcela.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto,\r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible `cluster`.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchCadastralSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Configuración del origen de datos auxiliar a la búsqueda de parcelas catastrales para la codificación de los nombres de municipio.\r\n * @typedef CadastralSearchOptionsExt\r\n * @memberof SITNA.control\r\n * @see SITNA.control.CadastralSearchOptions\r\n * @property {string[]} featureType - Colección de nombre de capa o capas a consultar.\r\n * @property {string} idProperty - Nombre de campo que identifica unívocamente el municipio cuyos valores deben coincidir con los posibles valores del campo indicado en firstQueryWord.\r\n * @property {string} labelProperty - Nombre de campo en el que buscar el texto indicado.\r\n * @example\r\n * {\r\n * url: '//miServicioWFS/ogc/wfs',\r\n * featurePrefix: 'IDENA', \r\n * featureType: ['Pol_ParcelaUrbana', 'Pol_ParcelaRustica', 'Pol_ParcelaMixta'],\r\n * municipality: {\r\n * featureType: 'Pol_Municipio',\r\n * labelProperty: 'MUNICIPIO',\r\n * idProperty: 'COD_MUNICIPIO' \r\n * },\r\n * queryProperties: {\r\n * firstQueryWord: 'COD_MUNICIPIO',\r\n * secondQueryWord: 'POLIGONO',\r\n * thirdQueryWord: 'PARCELA'\r\n * }\r\n * }\r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de una búsqueda.\r\n * @typedef SearchQueryPropertyOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.CadastralSearchOptions\r\n * @see SITNA.control.MunicipalitySearchOptions\r\n * @see SITNA.control.PostalAddressSearchOptions\r\n * @see SITNA.control.RoadSearchOptions\r\n * @see SITNA.control.RoadMilestoneSearchOptions\r\n * @see SITNA.control.StreetSearchOptions\r\n * @see SITNA.control.UrbanAreaSearchOptions\r\n * @property {string[]} firstQueryWord - Colección de nombre de campo o campos a consultar para el 1º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n * @property {string[]} secondQueryWord - Colección de nombre de campo o campos a consultar para el 2º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n * @property {string[]} thirdQueryWord - Colección de nombre de campo o campos a consultar para el 3º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n */\r\n\r\n/**\r\n * Opciones de configuración para la composición de la cabecera de una lista de sugerencias de búsqueda.\r\n * @typedef SearchSuggestionHeaderOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.CadastralSearchOptions\r\n * @see SITNA.control.MunicipalitySearchOptions\r\n * @see SITNA.control.PostalAddressSearchOptions\r\n * @see SITNA.control.RoadSearchOptions\r\n * @see SITNA.control.RoadMilestoneSearchOptions\r\n * @see SITNA.control.StreetSearchOptions\r\n * @see SITNA.control.UrbanAreaSearchOptions\r\n * @property {string} label - Clave del diccionario de traducciones que indica qué tipo de búsqueda es: Parcela Catastral, Municipio, Calle… Revisar la sección **Soporte multiidioma** en {@tutorial layout_cfg}.\r\n * @property {SearchResultColorDictionary|SearchResultColor|string} color - Configuración para obtener el color que representa al tipo de búsqueda.\r\n * Se establece como color la primera coincidencia en `styles` que cumpla con la configuración.\r\n * \r\n * La definición como string ha de ser para indicar el nombre de una propiedad presente en {@link PointStyleOptions}, {@link LineStyleOptions} o {@link PolygonStyleOptions}.\r\n * @example\r\n * {\r\n * label: \"search.list.town\",\r\n * color: \"strokeColor\"\r\n * }\r\n */\r\n\r\n/**\r\n * Algunas búsquedas hacen la consulta sobre varias capas. Este objeto define el color de los resultados de la búsqueda de cada capa. Estos colores también se mostrarán en la leyenda de la lista de sugerencias de resultados posibles de la búsqueda.\r\n * @typedef SearchResultColorDictionary\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchSuggestionHeaderOptions\r\n * @property {SearchResultColor} color - Configuración para obtener el color.\r\n * @property {string} title - Title para identificar al color. Se define con la clave del diccionario de traducciones. Revisar la sección **Soporte multiidioma** en {@tutorial layout_cfg}.\r\n * @example\r\n * CATAST_Pol_ParcelaUrba: {\r\n * title: \"search.list.cadastral.urban\",\r\n * color: {\r\n * geomType: \"polygon\",\r\n * css: \"strokeColor\"\r\n * } \r\n * }\r\n */\r\n\r\n/**\r\n * Definición del color con el que se dibujará los resultados de la búsqueda en el mapa. Este color también se mostrará en la leyenda de la lista de sugerencias de resultados posibles de la búsqueda.\r\n * @typedef SearchResultColor\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchSuggestionHeaderOptions\r\n * @property {string} css - Nombre de la propiedad de los estilos de la cual extraer el color. Ha de ser alguna de las distintas propiedades de colores presentes en {@link PointStyleOptions}, \r\n * {@link PolylineStyleOptions} o {@link PolygonStyleOptions}.\r\n * @property {string} geomType - Nombre del tipo de geometría (el valor es un miembro de [SITNA.Consts.geom]{@link SITNA.Consts}).\r\n * @example\r\n * color: {\r\n * geomType: \"point\",\r\n * css: \"fontColor\"\r\n * } \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de municipios.\r\n * @typedef MunicipalitySearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un municipio. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del municipio.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[NombreMunicipio]` y `outputFormatLabel` como `“{0}”` para un resultado con valor del campo `NombreMunicipio` a `Pamplona` mostrará en la lista resultados del tipo: *Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de municipios.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la propiedad `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del municipio.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto,\r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible `cluster`.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchMunicipalitySource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de direcciones postales.\r\n * @typedef PostalAddressSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a la dirección postal. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la dirección postal.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[EntidadPoblacion, Via, Numero]` y `outputFormatLabel` como `“{1} {2}, {0}”` para un resultado con valor del campo `EntidadPoblacion` a `Pamplona`, valor del campo `Via` a `Calle Estafeta` y valor del campo `Numero` a 13 mostrará en la lista resultados del tipo: *Calle Estafeta 13, Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de direcciones postales.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la entidad de población.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la vía.\r\n * - `thirdQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el número de portal.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto,\r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPostalAddressSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de topónimo.\r\n * @typedef PlaceNameSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un topónimo. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del topónimo.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['MUNICIPIO', 'TOPONIMO']` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `MUNICIPIO` a `Aranguren` y valor del campo `TOPONIMO` a `Camino de Pamplona` mostrará en la lista resultados del tipo: *Camino de Pamplona (Aranguren)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de topónimo.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la siguiente propiedad:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del topónimo.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType`\r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPlacenameSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de topónimo en un municipio.\r\n * @typedef PlaceNameMunicipalitySearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un topónimo en un municipio. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del topónimo.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO']` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `MUNICIPIO` a `Aranguren` y valor del campo `TOPONIMO` a `Camino de Pamplona` mostrará en la lista resultados del tipo: *Camino de Pamplona (Aranguren)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de topónimo en un municipio.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del municipio.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del topónimo.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType`\r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPlacenameMunicipalitySource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de carreteras.\r\n * @typedef RoadSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a una carretera. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la carretera.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['Carretera']` y `outputFormatLabel` como `“{0}”` para un resultado con valor del campo `Carretera` a `N-121` mostrará en la lista resultados del tipo: *N-121*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de carreteras.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la siguiente propiedad:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la carretera. \r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType`\r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchRoadSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de punto kilométrico de carretera.\r\n * @typedef RoadMilestoneSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un punto kilométrico de una carretera. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del punto kilométrico.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['Carretera', 'PK']` y `outputFormatLabel` como `“{0}: PK {1}”` para un resultado con valor del campo `Carretera` a `AP-15` y valor del campo `PK` a `10` mostrará en la lista resultados del tipo: *AP-15: PK 10*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de punto kilométrico.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la carretera.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el número del punto kilométrico.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType`\r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchRoadMilestoneSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de vías.\r\n * @typedef StreetSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a una vía. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la vía.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts}, \r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[EntidadPoblacion, Via]` y `outputFormatLabel` como `“{1}, {0}”` para un resultado con valor del campo `EntidadPoblacion` a `Pamplona` y valor del campo `Via` a `Calle Estafeta` mostrará en la lista resultados del tipo: *Calle Estafeta, Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de vías.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la entidad de población.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la vía.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {SITNA.layer.StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType`\r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchStreetSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de cascos urbanos.\r\n * @typedef UrbanAreaSearchOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un casco urbano. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del casco urbano.\r\n * @property {string} [outputFormat=[SITNA.Consts.format.JSON]{@link SITNA.Consts}] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: [SITNA.Consts.format.JSON]{@link SITNA.Consts},\r\n * [SITNA.Consts.format.GML3]{@link SITNA.Consts}, [SITNA.Consts.format.GML32]{@link SITNA.Consts} o [SITNA.Consts.format.GML]{@link SITNA.Consts}\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[NombreMunicipio, NombreCascoUrbano]` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `NombreMunicipio` a `Galar` y valor del campo `NombreCascoUrbano` a `Salinas de Pamplona` mostrará en la lista resultados del tipo: *Salinas de Pamplona (Galar)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de vías.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la propiedad `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del casco urbano.\r\n * @property {SITNA.layer.StyleOptions[]} styles - La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto, deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchTownSource.html) {@lang html}\r\n
\r\n \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport { Defaults } from '../Cfg';\r\nimport Control from '../Control';\r\nimport Feature from '../../SITNA/feature/Feature';\r\nimport infoShare from './infoShare';\r\nimport filter from '../filter';\r\nimport autocomplete from '../ui/autocomplete';\r\n\r\nTC.control = TC.control || {};\r\nTC.filter = filter;\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\nTC.Defaults = Defaults;\r\nTC.control.infoShare = infoShare;\r\nTC.Control = Control;\r\n\r\n(function () {\r\n // Polyfill window.performance.now\r\n if (!window.performance) {\r\n window.performance = {\r\n offset: Date.now(),\r\n now: function () {\r\n return Date.now() - this.offset;\r\n }\r\n };\r\n } else if (window.performance && !window.performance.now) {\r\n window.performance.offset = Date.now();\r\n window.performance.now = function () {\r\n return Date.now() - window.performance.offset;\r\n };\r\n }\r\n}());\r\n\r\nconst SearchType = function (type, options, parent) {\r\n var self = this;\r\n\r\n self.parent = parent;\r\n\r\n self._featureTypes = [];\r\n\r\n TC.Util.extend(self, options);\r\n\r\n self.typeName = type;\r\n\r\n self._throwConfigError = function () {\r\n var self = this;\r\n\r\n throw new Error('Error en la configuración de la búsqueda: ' + self.typeName);\r\n };\r\n\r\n self.getFeatureTypes = function (toFilter) {\r\n var self = this;\r\n\r\n if (toFilter) {\r\n return self.featureType instanceof Array ? self.featureType : [self.featureType];\r\n }\r\n\r\n if (self._featureTypes.length === 0) {\r\n var type_featureType = self.featureType instanceof Array ? self.featureType : [self.featureType];\r\n var type_renderFeatureType = self.renderFeatureType ? self.renderFeatureType instanceof Array ? self.renderFeatureType : [self.renderFeatureType] : [];\r\n self._featureTypes = type_featureType.concat(type_renderFeatureType);\r\n }\r\n\r\n return self._featureTypes;\r\n };\r\n\r\n self.isFeatureOfThisType = function (id) {\r\n var self = this;\r\n\r\n return self.getFeatureTypes().indexOf(id) > -1;\r\n };\r\n\r\n self.getStyleByFeatureType = function (featureType) {\r\n var self = this;\r\n\r\n if (self.getFeatureTypes().indexOf(featureType) > -1) {\r\n return self.styles[self.getFeatureTypes().indexOf(featureType)];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n var getColor = function (css, geomType, featureType) {\r\n var self = this;\r\n\r\n var getValue = function (style, geomType, css) {\r\n if (geomType) {\r\n if (Object.prototype.hasOwnProperty.call(style, geomType) && Object.prototype.hasOwnProperty.call(style[geomType], css)) {\r\n return style[geomType][css];\r\n }\r\n } else {\r\n for (var gType in style) {\r\n if (Object.prototype.hasOwnProperty.call(style[gType], css)) {\r\n return style[gType][css];\r\n }\r\n }\r\n }\r\n };\r\n\r\n if (featureType) {\r\n const style = self.getStyleByFeatureType(featureType);\r\n return getValue(style, geomType, css);\r\n } else {\r\n for (var i = 0; i < self.styles.length; i++) {\r\n const style = self.styles[i];\r\n const color = getValue(style, geomType, css);\r\n if (color) {\r\n return color;\r\n }\r\n }\r\n }\r\n };\r\n\r\n self.getSuggestionListHead = function () {\r\n var self = this;\r\n\r\n var headerData, label, color;\r\n\r\n if (typeof self.suggestionListHead === \"function\") {\r\n headerData = self.suggestionListHead();\r\n label = headerData.label;\r\n color = [{\r\n color: headerData.color,\r\n title: headerData.label\r\n }];\r\n } else {\r\n headerData = self.suggestionListHead;\r\n label = self.parent.getLocaleString(headerData.label);\r\n\r\n // color es string que es el atributo CSS. El valor se obtiene de la 1º coincidencia encontrada en styles\r\n if (typeof headerData.color === \"string\") {\r\n color = [{\r\n color: getColor.call(self, headerData.color),\r\n title: label\r\n }];\r\n } else if (headerData.color instanceof Array) { // color es un array de objetos, con nombre de featureType como clave\r\n var featureTypes = self.getFeatureTypes();\r\n if (headerData.color.length === featureTypes.length) {\r\n color = headerData.color.map(function (elm, i) {\r\n return {\r\n color: getColor.call(self, elm[featureTypes[i]].color.css, elm[featureTypes[i]].color.geomType, featureTypes[i]),\r\n title: self.parent.getLocaleString(elm[featureTypes[i]].title) || label\r\n };\r\n });\r\n } else {\r\n self._throwConfigError();\r\n }\r\n } else if (typeof headerData.color === \"object\") { // color es un objeto con atributo css y tipo de geometría\r\n color = [{\r\n color: getColor.call(self, headerData.color.css, headerData.color.geomType),\r\n title: label\r\n }];\r\n }\r\n }\r\n\r\n if (label && color) {\r\n var liHTML = '
  • ' + label + '';\r\n\r\n liHTML += color.map(function (elm) {\r\n if (elm.color) {\r\n return '';\r\n }\r\n }).join('') + '
  • ';\r\n\r\n return liHTML;\r\n\r\n } else {\r\n self._throwConfigError();\r\n }\r\n };\r\n\r\n self.getSuggestionListElements = function (data) {\r\n var self = this;\r\n var results = [];\r\n\r\n var areSame = function (a, b) {\r\n switch (true) {\r\n case typeof a === \"number\":\r\n if (a === b) {\r\n return true;\r\n }\r\n break;\r\n case typeof a === \"string\":\r\n if (!isNaN(a) || !isNaN(b)) {\r\n if (a === b) {\r\n return true;\r\n }\r\n } else {\r\n if (a.trim() === b.trim()) {\r\n return true;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return false;\r\n };\r\n var getUnique = function (inputArray) {\r\n var outputArray = [];\r\n for (var i = 0; i < inputArray.length; i++) {\r\n if (outputArray.indexOf(inputArray[i]) === -1) {\r\n outputArray.push(inputArray[i]);\r\n }\r\n }\r\n\r\n return outputArray;\r\n };\r\n var intoResults = function (compareData) {\r\n for (var r = 0; r < results.length; r++) {\r\n var length = 0;\r\n var isThere = [];\r\n for (var property in compareData) {\r\n isThere.push(areSame(compareData[property], results[r].properties[property]));\r\n length++;\r\n }\r\n if (isThere.filter(function (i) { return i; }).length === length) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var features = self.parseFeatures(data);\r\n\r\n features.forEach(function (feature) {\r\n var attributes = [], ids = [];\r\n var valueToAdd = '';\r\n\r\n var properties = self.outputProperties;\r\n var dataIdProperties = self.dataIdProperty;\r\n\r\n var strFormat = self.outputFormatLabel;\r\n var dataLayer = feature.id.split('.').slice(0, 1).shift();\r\n\r\n if (!(self.outputProperties instanceof Array)) {\r\n properties = self.outputProperties[dataLayer];\r\n dataIdProperties = self.dataIdProperty[dataLayer];\r\n strFormat = strFormat[dataLayer];\r\n }\r\n\r\n for (var j = 0; j < properties.length; j++) {\r\n attributes.push(feature.data[properties[j]]);\r\n }\r\n\r\n for (j = 0; j < dataIdProperties.length; j++) {\r\n ids.push(feature.data[dataIdProperties[j]]);\r\n }\r\n\r\n var compareData = {};\r\n for (var p = 0; p < self.outputProperties.length; p++) {\r\n compareData[self.outputProperties[p]] = attributes[p];\r\n }\r\n\r\n if (attributes instanceof Array && strFormat && getUnique(attributes).length > 1) {\r\n valueToAdd = strFormat.tcFormat(attributes);\r\n }\r\n else if (attributes instanceof Array && getUnique(attributes).length === 1) {\r\n valueToAdd = attributes[0];\r\n }\r\n\r\n var text = valueToAdd.toCamelCase();\r\n\r\n if (!intoResults(compareData)) {\r\n\r\n results.push({\r\n text: text,\r\n label: text,\r\n id: ids.join('#'),\r\n dataRole: self.typeName,\r\n dataLayer: dataLayer,\r\n properties: compareData\r\n });\r\n }\r\n });\r\n\r\n return results;\r\n };\r\n\r\n self.parseFeatures = function (data) {\r\n var parser;\r\n if (self.outputFormat === Consts.format.JSON) {\r\n parser = new TC.wrap.parser.JSON();\r\n }\r\n else {\r\n parser = new TC.wrap.parser.WFS({\r\n featureNS: self.featurePrefix,\r\n featureType: self.featureType\r\n });\r\n }\r\n return parser.read(data);\r\n };\r\n\r\n self.getPattern = function () {\r\n var self = this;\r\n\r\n if (typeof self.pattern === \"function\") {\r\n return self.pattern();\r\n } else {\r\n return self.pattern;\r\n }\r\n };\r\n\r\n self.filter = (function (self) {\r\n\r\n const bindRootFilterNode = function (filtersArr, dataT) {\r\n var rootFilters = [];\r\n\r\n if (dataT != self.parent.rootCfg.active.root) {\r\n // GLS: Si llego aquí, significa que el usuario está indicando la población\r\n if (dataT.indexOf('#') === -1 && !self.parent.rootCfg.active.limit) { // si no está limitada la búsqueda, indico la población\r\n\r\n var filterNode = self.parent.rootCfg.active.queryProperties.firstQueryWord.map(function (queryWord) {\r\n return self.filter.getFilterNode(queryWord, self.parent._LIKE_PATTERN + dataT + self.parent._LIKE_PATTERN);\r\n });\r\n\r\n if (filterNode.length > 1) {\r\n rootFilters.push('');\r\n rootFilters = rootFilters.concat(filterNode);\r\n rootFilters.push('');\r\n } else {\r\n rootFilters = rootFilters.concat(filterNode);\r\n }\r\n\r\n } else { // por tanto no añado todas las raíces posibles, añado la población que ha indicado (validando antes contra rootLabel) \r\n const item = dataT.split('#');\r\n\r\n self.parent.rootCfg.active.dataIdProperty.forEach(function addAnd(dataIdProperty, idx, arr) {\r\n if (idx === 0 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n rootFilters.push(self.filter.getFilterNode(dataIdProperty, item.length > idx ? item[idx] : item[0]));\r\n\r\n if (idx === arr.length - 1 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n });\r\n }\r\n } else {\r\n self.parent.rootCfg.active.root.forEach(function addOr(item, idx, arr) {\r\n if (idx === 0 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n self.parent.rootCfg.active.dataIdProperty.forEach(function addAnd(dataIdProperty, i, a) {\r\n if (i === 0 && a.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n rootFilters.push(self.filter.getFilterNode(dataIdProperty, item.length > i ? item[i] : item[0]));\r\n\r\n if (i === a.length - 1 && a.length > 1) {\r\n rootFilters.push('');\r\n }\r\n });\r\n });\r\n\r\n if (self.parent.rootCfg.active.root.length > 1) {\r\n rootFilters.push('');\r\n }\r\n }\r\n\r\n return filtersArr.concat(rootFilters);\r\n };\r\n\r\n return {\r\n getPropertyValue: function (role, propertyName) {\r\n return self.getSearchTypeByRole(role)[propertyName];\r\n },\r\n getIsLikeNode: function (name, value) {\r\n var toEscape = /([\\-\\\"\\.\\xba\\(\\)\\/])/g;\r\n if (toEscape.test(value)) {\r\n value = value.replace(toEscape, \"\\\\$1\");\r\n }\r\n\r\n if (value.toString().indexOf(self.parent._LIKE_PATTERN) > -1)\r\n return '' +\r\n '' + name + '' +\r\n '' + value.toLowerCase().replace(/\\/gi, \">\") + '' +\r\n '' +\r\n '' +\r\n '' + name + '' +\r\n '' + value.toUpperCase().replace(/\\/gi, \">\") + '' +\r\n '';\r\n else\r\n return '' +\r\n '' + name + '' +\r\n '' + value.replace(/\\/gi, \">\") + '' +\r\n '';\r\n },\r\n getFunctionStrMatches: function (name, value) {\r\n var toEscape = /([\\-\\\"\\xba\\(\\)\\/])/g;\r\n if (toEscape.test(value)) {\r\n value = value.replace(toEscape, \"\\\\$1\");\r\n }\r\n\r\n if (value.toString().indexOf(self.parent._LIKE_PATTERN) > -1) {\r\n\r\n var pattern = value;\r\n pattern = pattern.replace(/a/gi, \"[aáà]\");\r\n pattern = pattern.replace(/e/gi, \"[eéè]\");\r\n pattern = pattern.replace(/i/gi, \"[iíì]\");\r\n pattern = pattern.replace(/o/gi, \"[oóò]\");\r\n pattern = pattern.replace(/u/gi, \"[uúüù]\");\r\n\r\n return ' ' +\r\n ' ' +\r\n '' + name + ' ' +\r\n '' + '(?i)' + pattern.replace(/\\/gi, \">\") + ' ' +\r\n ' ' +\r\n 'true ' +\r\n '';\r\n }\r\n else {\r\n return '' +\r\n '' + name + '' +\r\n '' + value.replace(/\\/gi, \">\") + '' +\r\n '';\r\n }\r\n },\r\n getFilterNode: function (propertyName, propertyValue) {\r\n var r;\r\n\r\n var fn = self.filter.getIsLikeNode;\r\n\r\n if (self.filterByMatch) {\r\n\r\n fn = self.filter.getFunctionStrMatches;\r\n\r\n var regex = new RegExp('\\\\' + self.parent._LIKE_PATTERN, 'gi');\r\n propertyValue = propertyValue.replace(regex, self.parent._MATCH_PATTERN);\r\n }\r\n\r\n if (!(propertyName instanceof Array) && typeof propertyName !== 'string') {\r\n var f = [];\r\n for (var key in propertyName) {\r\n if (propertyName[key] instanceof Array && propertyName[key].length > 1) {\r\n r = '';\r\n propertyName[key].forEach(pName => {\r\n r += fn(pName.trim(), propertyValue);\r\n });\r\n\r\n r += '';\r\n f.push('(' + r + ')');\r\n } else {\r\n var propName = propertyName[key];\r\n if (propertyName[key] instanceof Array && propertyName[key].length === 1) {\r\n propName = propertyName[key][0];\r\n }\r\n\r\n f.push('(' +\r\n '' + fn(propName.trim(), propertyValue) + '' +\r\n ')');\r\n }\r\n }\r\n\r\n return f.join('');\r\n\r\n } else if (propertyName instanceof Array && propertyName.length > 1) {\r\n r = '';\r\n propertyName.forEach(pName => {\r\n r += fn(pName.trim(), propertyValue);\r\n });\r\n return r += '';\r\n } else {\r\n return fn(propertyName instanceof Array && propertyName.length === 1 ? propertyName[0].trim() : propertyName.trim(), propertyValue);\r\n }\r\n },\r\n getFilter: function (data) {\r\n var r = {};\r\n r.multiL = false;\r\n r.f = '';\r\n\r\n var _f;\r\n\r\n switch (true) {\r\n case self.typeName === Consts.searchType.NUMBER:\r\n _f = [];\r\n if (!self.parent.rootCfg.active && (/(\\<|\\>|\\<\\>)/gi.exec(data.t) || /(\\<|\\>|\\<\\>)/gi.exec(data.s))) {\r\n let match = /(\\<|\\>|\\<\\>)/gi.exec(data.t);\r\n if (match)\r\n\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t.substring(0, data.t.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n }\r\n\r\n match = /(\\<|\\>|\\<\\>)/gi.exec(data.s);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s.substring(0, data.s.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n } else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n\r\n _f.push(self.filter.getFilterNode(self.queryProperties.thirdQueryWord, data.p + self.parent._LIKE_PATTERN));\r\n\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n\r\n break;\r\n case self.typeName === Consts.searchType.STREET:\r\n _f = [];\r\n\r\n if (!self.parent.rootCfg.active && (/(\\<|\\>|\\<\\>)/gi.exec(data.t) || /(\\<|\\>|\\<\\>)/gi.exec(data.s))) {\r\n let match = /(\\<|\\>|\\<\\>)/gi.exec(data.t);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t.substring(0, data.t.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n }\r\n\r\n match = /(\\<|\\>|\\<\\>)/gi.exec(data.s);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s.substring(0, data.s.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n } else {\r\n\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n break;\r\n case self.typeName === Consts.searchType.LOCALITY:\r\n r.f = self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN);\r\n r.multiL = true;\r\n break; // GLS: consulta de 2 niveles (carretera con pk / topónimo con municipio)\r\n case Object.prototype.hasOwnProperty.call(self.queryProperties, 'secondQueryWord'):\r\n _f = [];\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n break;\r\n default: // GLS: consulta de 1 único nivel (municipio, casco urbano, carretera)\r\n r.f = '' + self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN) + '';\r\n break;\r\n }\r\n\r\n return r;\r\n },\r\n getParams: function (data) {\r\n var filters = self.filter.getFilter(data);\r\n\r\n var params = {\r\n REQUEST: 'GetFeature',\r\n SERVICE: 'WFS',\r\n MAXFEATURES: 500,\r\n VERSION: self.version,\r\n OUTPUTFORMAT: self.outputFormat\r\n };\r\n\r\n var featureTypes = self.getFeatureTypes(true);\r\n if (!(featureTypes instanceof Array))\r\n params.TYPENAME = self.featurePrefix ? self.featurePrefix + ':' + featureTypes.trim() : featureTypes.trim();\r\n else {\r\n var ft = featureTypes.map(featureType => self.featurePrefix ?\r\n self.featurePrefix + ':' + featureType.trim() :\r\n featureType.trim());\r\n\r\n params.TYPENAME = ft.join(',');\r\n }\r\n\r\n var _getProperties = function (properties) {\r\n if ((properties || '') !== '') {\r\n if (!(properties instanceof Array)) {\r\n var p = [];\r\n if (properties instanceof Object) {\r\n for (var key in properties) {\r\n var prop = properties[key][0];\r\n if (properties[key].length > 1)\r\n prop = properties[key].join(',');\r\n\r\n p.push(prop);\r\n }\r\n }\r\n return p;\r\n }\r\n else {\r\n return properties.join(',');\r\n }\r\n }\r\n };\r\n var _properties = _getProperties(self.outputProperties);\r\n var _ids = _getProperties(self.dataIdProperty);\r\n\r\n const removeDuplicates = (toCheck) => {\r\n const arr = toCheck.split(',');\r\n return arr.filter((item, i) => {\r\n return arr.indexOf(item) === i;\r\n }).join(',');\r\n };\r\n\r\n if (_properties instanceof Array && _ids instanceof Array) {\r\n params.PROPERTYNAME = '';\r\n for (var i = 0; i < _properties.length; i++) {\r\n params.PROPERTYNAME += '(' + removeDuplicates(_properties[i] + ',' + _ids[i]) + ')';\r\n }\r\n } else {\r\n params.PROPERTYNAME = removeDuplicates(_properties + ',' + _ids);\r\n }\r\n\r\n params.FILTER = filters.f;\r\n\r\n return TC.Util.getParamString(params);\r\n },\r\n getGoToFilter: function (id) {\r\n var props = [];\r\n var _id = id.split('#');\r\n\r\n var source = self.dataIdProperty;\r\n var dataLayer = self.getFeatureTypes();\r\n\r\n if (source && dataLayer) {\r\n\r\n if (id.indexOf('#') > -1 && dataLayer instanceof Array && dataLayer.length > 1) {\r\n dataLayer.forEach(dLayer => {\r\n source[dLayer].forEach((src, idx) => {\r\n props.push({ name: src, value: _id[idx] });\r\n });\r\n });\r\n } else if (id.indexOf('#') === -1 && dataLayer instanceof Array) {\r\n let src = source;\r\n\r\n dataLayer.forEach(dLayer => {\r\n if (!Object.prototype.hasOwnProperty.call(props, dLayer)) {\r\n\r\n if (src instanceof Object && Object.prototype.hasOwnProperty.call(source, dLayer)) {\r\n src = source[dLayer];\r\n }\r\n\r\n src.forEach((s, idx) => {\r\n if (idx < _id.length) {\r\n props.push({ name: s, value: _id[idx] });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n if (source instanceof Object && Object.prototype.hasOwnProperty.call(source, dataLayer)) {\r\n source = source[dataLayer];\r\n }\r\n\r\n source.forEach((src, idx) => {\r\n props.push({ name: src, value: _id[idx] });\r\n });\r\n }\r\n }\r\n\r\n return self.filter.transformFilter(props);\r\n },\r\n transformFilter: function (properties) {\r\n\r\n if (properties && properties instanceof Array) {\r\n var filters = properties.map(function (elm) {\r\n if (Object.prototype.hasOwnProperty.call(elm, \"type\")) {\r\n switch (true) {\r\n case elm.type === Consts.comparison.EQUAL_TO: {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n }\r\n } else {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n });\r\n\r\n if (filters.length > 1) {\r\n return TC.filter.and.apply(null, filters);\r\n } else {\r\n return filters[0];\r\n }\r\n }\r\n }\r\n };\r\n })(self);\r\n};\r\n\r\nTC.control.Search = function () {\r\n var self = this;\r\n TC.Control.apply(self, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.exportsState = true;\r\n\r\n Consts.event.TOOLSCLOSE = Consts.event.TOOLSCLOSE || 'toolsclose.tc';\r\n\r\n self.url = '//idena.navarra.es/ogc/wfs';\r\n self.version = '1.1.0';\r\n self.featurePrefix = 'IDENA';\r\n\r\n if (self.options && self.options.url) {\r\n self.url = self.options.url;\r\n }\r\n\r\n self._LIKE_PATTERN = '*';\r\n self._MATCH_PATTERN = '.*';\r\n\r\n self.UTMX = 'X';\r\n self.UTMY = 'Y';\r\n self.LON = 'Lon';\r\n self.LAT = 'Lat';\r\n\r\n self.UTMX_LABEL = 'X: ';\r\n self.UTMY_LABEL = 'Y: ';\r\n self.LON_LABEL = 'Lon: ';\r\n self.LAT_LABEL = 'Lat: ';\r\n\r\n self.MUN = 'Mun';\r\n self.POL = 'Pol';\r\n self.PAR = 'Par';\r\n\r\n self.MUN_LABEL = 'Mun: ';\r\n self.POL_LABEL = 'Pol: ';\r\n self.PAR_LABEL = 'Par: ';\r\n\r\n self._search = { data: [] };\r\n\r\n self.EMPTY_RESULTS_LABEL = self.getLocaleString('noResults');\r\n self.EMPTY_RESULTS_TITLE = self.getLocaleString('checkCriterion');\r\n self.OUTBBX_LABEL = self.getLocaleString('outsideOfLimits');\r\n self.WFS_TYPE_ATTRS = [\"url\", \"version\", \"geometryName\", \"featurePrefix\", \"featureType\", \"properties\", \"outputFormat\"];\r\n\r\n self.availableSearchTypes = {};\r\n\r\n self.availableSearchTypes[Consts.searchType.CADASTRAL] = {\r\n suggestionRoot: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n searchWeight: 3,\r\n featureType: ['CATAST_Pol_ParcelaUrba', 'CATAST_Pol_ParcelaRusti', 'CATAST_Pol_ParcelaMixta'],\r\n municipality: {\r\n featureType: 'CATAST_Pol_Municipio',\r\n labelProperty: 'MUNICIPIO',\r\n idProperty: 'CMUNICIPIO'\r\n },\r\n queryProperties: {\r\n firstQueryWord: 'CMUNICIPIO',\r\n secondQueryWord: 'POLIGONO',\r\n thirdQueryWord: 'PARCELA'\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.cadastral\",\r\n color: [\r\n {\r\n CATAST_Pol_ParcelaUrba: {\r\n title: \"search.list.cadastral.urban\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n },\r\n {\r\n CATAST_Pol_ParcelaRusti: {\r\n title: \"search.list.cadastral.rustic\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n },\r\n {\r\n CATAST_Pol_ParcelaMixta: {\r\n title: \"search.list.cadastral.mixed\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#136278',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n },\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#0c8b3d',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n },\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#e5475f',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getCadastralRef,\r\n goTo: self.goToCadastralRef,\r\n goToIdFormat: self.MUN + '{0}' + self.POL + '{1}' + self.PAR + '{2}',\r\n idPropertiesIdentifier: '#'\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.COORDINATES] = {\r\n parser: self.getCoordinates,\r\n goTo: self.goToCoordinates,\r\n searchWeight: 4,\r\n label: null,\r\n suggestionListHead: function (_text) {\r\n return {\r\n label: self.availableSearchTypes[Consts.searchType.COORDINATES].label || self.getLocaleString('search.list.coordinates')\r\n };\r\n }\r\n };\r\n\r\n self.queryProperties = {\r\n QUERYWORD: 'QueryWord',\r\n FIRST: 'first',\r\n SECOND: 'second',\r\n THIRD: 'third'\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.MUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Municipio',\r\n dataIdProperty: ['CMUNICIPIO'],\r\n queryProperties: {\r\n firstQueryWord: ['MUNINOAC', 'MUNICIPIO']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.municipality\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['MUNICIPIO'],\r\n outputFormatLabel: '{0}',\r\n searchWeight: 1,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#fe06a5',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.MUNICIPALITY]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n //self.availableSearchTypes[Consts.searchType.LOCALITY] = {\r\n // root: null,\r\n // limit: false,\r\n // url: self.url || '//idena.navarra.es/ogc/wfs',\r\n // version: self.version || '1.1.0',\r\n // outputFormat: Consts.format.JSON,\r\n // featurePrefix: self.featurePrefix || 'IDENA',\r\n // geometryName: 'the_geom',\r\n // featureType: ['CATAST_Pol_Municipio', 'ESTADI_Pol_EntidadPob'],\r\n // renderFeatureType: ['CATAST_Pol_Municipio'],\r\n // dataIdProperty: {\r\n // CATAST_Pol_Municipio: ['CMUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['CMUNICIPIO', 'CENTIDAD']\r\n // },\r\n // queryProperties: {\r\n // firstQueryWord: {\r\n // CATAST_Pol_Municipio: ['MUNINOAC', 'MUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['ENTINOAC', 'ENTIDAD']\r\n // }\r\n // },\r\n // suggestionListHead: {\r\n // label: \"search.list.locality\",\r\n // color: \"strokeColor\"\r\n // },\r\n // outputProperties: {\r\n // CATAST_Pol_Municipio: ['MUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['MUNICIPIO', 'ENTIDAD']\r\n // },\r\n // outputFormatLabel: {\r\n // CATAST_Pol_Municipio: '{0}',\r\n // ESTADI_Pol_EntidadPob: '{1} ({0})'\r\n // },\r\n // searchWeight: 1,\r\n // styles: [\r\n // {\r\n // polygon: {\r\n // fillColor: '#000000',\r\n // fillOpacity: 0,\r\n // strokeColor: '#ffffff',\r\n // strokeWidth: 5,\r\n // strokeOpacity: 1\r\n // }\r\n // },\r\n // {\r\n // polygon: {\r\n // fillColor: '#000000',\r\n // fillOpacity: 0.1,\r\n // strokeColor: '#feba1e',\r\n // strokeWidth: 2,\r\n // strokeOpacity: 1\r\n // }\r\n // }\r\n // ],\r\n // parser: self.getStringPattern.bind(this, [Consts.searchType.LOCALITY]),\r\n // goTo: self.goToStringPattern\r\n //};\r\n\r\n self.availableSearchTypes[Consts.searchType.COUNCIL] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Concejo',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CCONCEJO'],\r\n queryProperties: {\r\n firstQueryWord: ['CONCEJO']\r\n },\r\n outputProperties: ['MUNICIPIO', 'CONCEJO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 4,\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.COUNCIL]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern,\r\n idPropertiesIdentifier: '#',\r\n suggestionListHead: {\r\n label: \"search.list.council\",\r\n color: \"strokeColor\"\r\n },\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#49006a',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ]\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.STREET] = {\r\n root: null,\r\n limit: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n renderFeatureType: 'CATAST_Txt_Calle',\r\n featureType: 'CATAST_Lin_CalleEje',\r\n dataIdProperty: ['CVIA'],\r\n searchWeight: 5,\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC', 'ENTIDADC'],\r\n secondQueryWord: ['VIA', 'VIANOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.street\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['ENTIDADC', 'VIA', 'CVIA', 'CENTIDADC', 'CMUNICIPIO'],\r\n outputFormatLabel: '{1}, {0}',\r\n styles: [\r\n {\r\n line: {\r\n strokeColor: \"#CB0000\",\r\n strokeOpacity: 1,\r\n strokeWidth: 2,\r\n strokeLinecap: \"round\",\r\n strokeDashstyle: \"solid\"\r\n }\r\n },\r\n {\r\n point: {\r\n label: \"VIA\",\r\n labelRotationKey: \"CADANGLE\",\r\n fontColor: \"#000000\",\r\n fontSize: 10,\r\n fontWeight: \"bold\",\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.STREET]),\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.NUMBER] = {\r\n root: null,\r\n limit: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Txt_Portal',\r\n renderFeatureType: '',\r\n searchWeight: 6,\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDADC', 'CVIA', 'PORTAL'],\r\n queryProperties: {\r\n firstQueryWord: ['ENTIDADC', 'ENTINOAC'],\r\n secondQueryWord: ['VIA', 'VIANOAC'],\r\n thirdQueryWord: ['PORTAL']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.number\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['ENTIDADC', 'VIA', 'PORTAL', 'CVIA', 'CENTIDADC', 'CMUNICIPIO'],\r\n outputFormatLabel: '{1} {2}, {0}',\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"PORTAL\",\r\n labelRotationKey: \"CADANGLE\",\r\n fontColor: \"#CB0000\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.NUMBER]),\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.URBAN] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'ESTADI_Pol_EntidadPob',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDAD'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC', 'ENTIDAD']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.urban\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'ENTIDAD'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 2,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#feba1e',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.URBAN]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.PLACENAME] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'TOPONI_Txt_Toponimos',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CTOPONIMO'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['TOPONIMO', 'TOPONINOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.placeName\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 7,\r\n /*filterByMatch: true, // si queremos que filtre por expresión regular */\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"TOPONIMO\",\r\n labelRotationKey: \"CADANGLE\",\r\n fontColor: \"#ff5722\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.PLACENAME]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.PLACENAMEMUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'TOPONI_Txt_Toponimos',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CTOPONIMO'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['MUNICIPIO', 'MUNINOAC'],\r\n secondQueryWord: ['TOPONIMO', 'TOPONINOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.placeName\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 8,\r\n /*filterByMatch: true, si queremos que filtre por expresión regular */\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"TOPONIMO\",\r\n labelRotationKey: \"CADANGLE\",\r\n fontColor: \"#ff5722\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [Consts.searchType.PLACENAMEMUNICIPALITY]),\r\n stringPatternToCheck: [self.stringPatternsValidators.ts, self.stringPatternsValidators.st],\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.COMMONWEALTH] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: ['POLUCI_Pol_MancoRSUg'],\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMANCOMUNI'],\r\n queryProperties: {\r\n firstQueryWord: ['MANCOMUNID']\r\n },\r\n outputProperties: ['MANCOMUNID'],\r\n outputFormatLabel: '{0}',\r\n searchWeight: 9,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#fc4e2a',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ]\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.ROAD] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'INFRAE_Lin_CtraEje',\r\n dataIdProperty: ['DCARRETERA'],\r\n queryProperties: {\r\n firstQueryWord: ['DCARRETERA']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.road\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['DCARRETERA'],\r\n outputFormatLabel: self.getLocaleString('search.list.road.shorter') + ': ' + '{0}',\r\n searchWeight: 10,\r\n styles: [\r\n {\r\n polygon: {\r\n strokeColor: \"#00b2fc\",\r\n strokeOpacity: 1,\r\n strokeWidth: 5\r\n },\r\n line: {\r\n strokeColor: \"#00b2fc\",\r\n strokeOpacity: 1,\r\n strokeWidth: 5,\r\n strokeLinecap: \"round\",\r\n strokeDashstyle: \"solid\"\r\n }\r\n }\r\n ],\r\n parser: self.getRoad,\r\n goTo: self.goToRoad,\r\n pattern: function () {\r\n return new RegExp(\"^(?:(?:\" + self.getLocaleString(\"search.list.road\") + \"|\" + self.getLocaleString(\"search.list.road.shorter\") + \")\\\\:?)?\\\\s*((A?|AP?|N?|R?|E?|[A-Z]{2}?|[A-Z]{1}?)\\\\s*\\\\-?\\\\s*(\\\\d{1,4})\\\\s*\\\\-?\\\\s*(A?|B?|C?|R?))$\", \"i\");\r\n }\r\n };\r\n\r\n self.availableSearchTypes[Consts.searchType.ROADMILESTONE] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'INFRAE_Sym_CtraPK',\r\n dataIdProperty: ['DCARRETERA', 'CPK'],\r\n queryProperties: {\r\n firstQueryWord: ['DCARRETERA'],\r\n secondQueryWord: ['PK']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.milestone.larger\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['DCARRETERA', 'PK'],\r\n outputFormatLabel: self.getLocaleString('search.list.road.shorter') + ': {0} ' + self.getLocaleString('search.list.milestone') + ': {1}',\r\n searchWeight: 11,\r\n styles: [\r\n {\r\n point: {\r\n label: [\"DCARRETERA\", \"PK\"],\r\n fontColor: \"#00b2fc\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 2\r\n }\r\n }\r\n ],\r\n parser: self.getMilestone,\r\n goTo: self.goToMilestone,\r\n pattern: function () {\r\n return new RegExp(\"^(?:(?:\" + self.getLocaleString(\"search.list.road\") + \"|\" + self.getLocaleString(\"search.list.road.shorter\") + \")\\\\:?)?\\\\s*((A?|AP?|N?|R?|E?|[A-Z]{2}?|[A-Z]{1}?)\\\\s*\\\\-?\\\\s*(\\\\d{1,4})\\\\s*\\\\-?\\\\s*(A?|B?|C?|R?))\\\\s*\\\\,*\\\\s*(?:(?:\" + self.getLocaleString(\"search.list.milestone\") + \"\\\\:?)|(?:P\\\\:?)|(?:K\\\\:?)|(?:KM\\\\:?)|(?:\\\\s+|\\\\,+))\\\\s*(\\\\d{1,4})$\", \"i\");\r\n }\r\n };\r\n\r\n self.rootCfg = {};\r\n self.rootCfg[Consts.searchType.MUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Municipio',\r\n dataIdProperty: ['CMUNICIPIO'],\r\n queryProperties: {\r\n firstQueryWord: ['MUNICIPIO']\r\n },\r\n outputProperties: ['MUNICIPIO'],\r\n outputFormatLabel: '{0}',\r\n getRootLabel: function () {\r\n return new Promise(function (resolve, _reject) {\r\n\r\n if (self.rootCfg.active && !self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel) {\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = self.rootCfg[Consts.searchType.MUNICIPALITY].version;\r\n params.REQUEST = 'GetFeature';\r\n params.TYPENAME = self.rootCfg[Consts.searchType.MUNICIPALITY].featurePrefix + ':' + self.rootCfg[Consts.searchType.MUNICIPALITY].featureType;\r\n params.OUTPUTFORMAT = self.rootCfg[Consts.searchType.MUNICIPALITY].outputFormat;\r\n params.PROPERTYNAME = ['CMUNICIPIO'].concat(self.rootCfg[Consts.searchType.MUNICIPALITY].outputProperties).join(',');\r\n\r\n params.CQL_FILTER = self.rootCfg[Consts.searchType.MUNICIPALITY].root.map(function (elem) {\r\n return ['CMUNICIPIO'].map(function (id, index) {\r\n return id + '=' + elem[index];\r\n }).join(' AND ');\r\n });\r\n\r\n params.CQL_FILTER = params.CQL_FILTER.join(' OR ');\r\n\r\n TC.ajax({\r\n url: self.rootCfg[Consts.searchType.MUNICIPALITY].url + '?' + TC.Util.getParamString(params),\r\n method: 'GET',\r\n responseType: Consts.mimeType.JSON\r\n }).then(function (response) {\r\n const data = response.data;\r\n if (data.totalFeatures > 0) {\r\n\r\n self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel = data.features.map(function (feature) {\r\n return {\r\n id: ['CMUNICIPIO'].map(function (elem) {\r\n return feature.properties[elem];\r\n }).join('#'),\r\n label: feature.properties[self.rootCfg[Consts.searchType.MUNICIPALITY].outputProperties[0]].toLowerCase()\r\n };\r\n });\r\n\r\n resolve(self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel);\r\n\r\n } else {\r\n self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel = [];\r\n resolve(self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel);\r\n }\r\n }).catch(function () {\r\n resolve([]);\r\n });\r\n }\r\n else {\r\n resolve(self.rootCfg[Consts.searchType.MUNICIPALITY].rootLabel);\r\n }\r\n });\r\n }\r\n };\r\n self.rootCfg[Consts.searchType.LOCALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: ['ESTADI_Pol_EntidadPob'],\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDADC'],\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC']\r\n },\r\n outputProperties: ['ENTINOAC'],\r\n getRootLabel: function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (self.rootCfg.active && !self.rootCfg[Consts.searchType.LOCALITY].rootLabel) {\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = self.rootCfg[Consts.searchType.LOCALITY].version;\r\n params.REQUEST = 'GetFeature';\r\n params.TYPENAME = self.rootCfg[Consts.searchType.LOCALITY].featurePrefix + ':' + self.rootCfg[Consts.searchType.LOCALITY].featureType;\r\n params.OUTPUTFORMAT = self.rootCfg[Consts.searchType.LOCALITY].outputFormat;\r\n params.PROPERTYNAME = ['CMUNICIPIO', 'CENTIDAD'].concat(self.rootCfg[Consts.searchType.LOCALITY].outputProperties).join(',');\r\n\r\n params.CQL_FILTER = self.rootCfg[Consts.searchType.LOCALITY].root.map(function (elem) {\r\n return ['CMUNICIPIO', 'CENTIDAD'].map(function (id, index) {\r\n return id + '=' + elem[index];\r\n }).join(' AND ');\r\n });\r\n\r\n params.CQL_FILTER = params.CQL_FILTER.join(' OR ');\r\n\r\n TC.ajax({\r\n url: self.rootCfg[Consts.searchType.LOCALITY].url + '?' + TC.Util.getParamString(params),\r\n method: 'GET',\r\n responseType: Consts.mimeType.JSON\r\n }).then(function (response) {\r\n const data = response.data;\r\n if (data.totalFeatures > 0) {\r\n\r\n self.rootCfg[Consts.searchType.LOCALITY].rootLabel = data.features.map(function (feature) {\r\n return {\r\n id: ['CMUNICIPIO', 'CENTIDAD'].map(function (elem) {\r\n return feature.properties[elem];\r\n }).join('#'),\r\n label: feature.properties[self.rootCfg[Consts.searchType.LOCALITY].outputProperties[0]].toLowerCase()\r\n };\r\n });\r\n\r\n resolve(self.rootCfg[Consts.searchType.LOCALITY].rootLabel);\r\n\r\n } else {\r\n self.rootCfg[Consts.searchType.LOCALITY].rootLabel = [];\r\n resolve(self.rootCfg[Consts.searchType.LOCALITY].rootLabel);\r\n }\r\n }).catch(function () {\r\n resolve([]);\r\n });\r\n }\r\n else {\r\n resolve(self.rootCfg[Consts.searchType.LOCALITY].rootLabel);\r\n }\r\n });\r\n }\r\n };\r\n\r\n self.allowedSearchTypes = [];\r\n\r\n if (self.options.allowedSearchTypes) {\r\n for (var allowed in self.options.allowedSearchTypes) {\r\n\r\n if (self.availableSearchTypes[allowed] && !TC.Util.isEmptyObject(self.options.allowedSearchTypes[allowed])) {\r\n\r\n // GLS: gestionamos el override de featureType y renderFeatureType.\r\n // Si por defecto cuenta con renderFeatureType y sobrescribe featureType y no renderFeatureType, \r\n // elimino la propiedad renderFeatureType y elimino el último estilo definido, que se corresponde con el de renderFeatureType.\r\n if (self.availableSearchTypes[allowed].renderFeatureType && self.availableSearchTypes[allowed].renderFeatureType.length > 0 &&\r\n self.options.allowedSearchTypes[allowed].featureType && !self.options.allowedSearchTypes[allowed].renderFeatureType) {\r\n\r\n delete self.availableSearchTypes[allowed].renderFeatureType;\r\n self.availableSearchTypes[allowed].styles = self.availableSearchTypes[allowed].styles.slice(0, self.availableSearchTypes[allowed].styles.length - 1);\r\n }\r\n\r\n // GLS: override de la configuración por defecto con la del config.JSON\r\n TC.Util.extend(self.availableSearchTypes[allowed], self.options.allowedSearchTypes[allowed]);\r\n\r\n\r\n // GLS: Limitamos la búsqueda en portales y calles cuando así se establezca en la configuración de las búsquedas\r\n if (self.options.allowedSearchTypes[allowed].root &&\r\n (allowed !== Consts.searchType.MUNICIPALITY && self.options.allowedSearchTypes[allowed].rootType === Consts.searchType.MUNICIPALITY) ||\r\n allowed !== Consts.searchType.LOCALITY && self.options.allowedSearchTypes[allowed].rootType === Consts.searchType.LOCALITY) {\r\n\r\n self.rootCfg.active = self.rootCfg[self.options.allowedSearchTypes[allowed].rootType];\r\n self.rootCfg.active.root = self.options.allowedSearchTypes[allowed].root;\r\n self.rootCfg.active.limit = self.options.allowedSearchTypes[allowed].limit;\r\n\r\n self.availableSearchTypes[Consts.searchType.STREET].queryProperties.firstQueryWord =\r\n self.availableSearchTypes[Consts.searchType.NUMBER].queryProperties.firstQueryWord =\r\n self.rootCfg.active.dataIdProperty;\r\n }\r\n }\r\n\r\n // Si esta a false lo borramos de las disponibles\r\n if (!self.options.allowedSearchTypes[allowed]) {\r\n delete self.options.allowedSearchTypes[allowed];\r\n } else {\r\n self.addAllowedSearchType(allowed, self.availableSearchTypes[allowed] ? self.availableSearchTypes[allowed] : self.options.allowedSearchTypes[allowed], self);\r\n }\r\n }\r\n }\r\n\r\n if (self.rootCfg.active) {\r\n self.rootCfg.active.getRootLabel();\r\n }\r\n\r\n self.queryableFeatures = self.options.queryableFeatures || false;\r\n\r\n self.UTMX_LEN = 6;\r\n self.UTMY_LEN = 7;\r\n\r\n self.wrap = new TC.wrap.control.Search(self);\r\n\r\n self.interval = 500;\r\n\r\n self.NORMAL_PATTERNS = {\r\n ROMAN_NUMBER: /M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3}){1,}?\\S?\\./i,\r\n ABSOLUTE_NOT_DOT: /[`~!@#$%^&*_|+\\=?;:'\"\\{\\}\\[\\]\\\\]/gi,\r\n ABSOLUTE: /[`~!@#$%^&*_|+\\=?;:'.\\{\\}\\[\\]\\\\]/gi\r\n };\r\n};\r\n\r\nTC.inherit(TC.control.Search, TC.Control);\r\nTC.mix(TC.control.Search, TC.control.infoShare);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Search.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-search';\r\n\r\n Consts.event.SEARCHQUERYEMPTY = Consts.event.SEARCHQUERYEMPTY || 'searchqueryempty.tc';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n Promise.all([TC.Control.prototype.register.call(self, map), self.renderPromise()]).then(function () {\r\n if (self.options && self.options.share) {\r\n self.getShareDialog().then(function () {\r\n resolve(self);\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n } else {\r\n resolve(self);\r\n }\r\n });\r\n });\r\n };\r\n\r\n const highlighting = function (elm) {\r\n const self = this;\r\n\r\n var highlighted = elm.label;\r\n var strReg = [];\r\n\r\n // eliminamos caracteres extraños del patrón ya analizado\r\n\r\n if (self.lastPattern.trim().length === 0 && self.textInput.value.trim().length > 0) {\r\n self.lastPattern = self.textInput.value.trim();\r\n }\r\n\r\n var normalizedLastPattern = self.lastPattern;\r\n if (self.NORMAL_PATTERNS.ROMAN_NUMBER.test(normalizedLastPattern))\r\n normalizedLastPattern = normalizedLastPattern.replace(self.NORMAL_PATTERNS.ABSOLUTE_NOT_DOT, '');\r\n else\r\n normalizedLastPattern = normalizedLastPattern.replace(self.NORMAL_PATTERNS.ABSOLUTE, '');\r\n\r\n\r\n var querys = [];\r\n var separatorChar = ',';\r\n if (normalizedLastPattern.indexOf(separatorChar) === -1) {\r\n separatorChar = ' ';\r\n }\r\n\r\n querys = normalizedLastPattern.trim().split(separatorChar);\r\n\r\n // si estamos tratando con coordenadas el separador es el espacio, no la coma\r\n if (elm.label.indexOf(self.LAT_LABEL) > -1 && elm.label.indexOf(self.LON_LABEL) > -1 ||\r\n elm.label.indexOf(self.UTMX_LABEL) > -1 && elm.label.indexOf(self.UTMY_LABEL) > -1) {\r\n querys = self.lastPattern.split(' ');\r\n\r\n for (var t = 0; t < querys.length; t++) {\r\n if (querys[t].trim().slice(-1) === ',') {\r\n querys[t] = querys[t].slice(0, -1);\r\n }\r\n }\r\n }\r\n\r\n for (var q = 0; q < querys.length; q++) {\r\n if (querys[q].trim().length > 0) {\r\n strReg.push('(' + querys[q].trim().replace(/\\(/gi, \"\").replace(/\\)/gi, \"\") + ')');\r\n const match = /((\\<)|(\\>)|(\\<\\>))/gi.exec(querys[q].trim());\r\n if (match) {\r\n var _strReg = querys[q].trim().replace(/((\\<)|(\\>)|(\\<\\>))/gi, '').split(' ');\r\n for (var st = 0; st < _strReg.length; st++) {\r\n if (_strReg[st].trim().length > 0)\r\n strReg.push('(' + _strReg[st].trim().replace(/\\(/gi, \"\\\\(\").replace(/\\)/gi, \"\\\\)\") + ')');\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (elm.dataRole === Consts.searchType.ROAD || elm.dataRole === Consts.searchType.ROADMILESTONE) {\r\n var rPattern = self.getSearchTypeByRole(elm.dataRole).getPattern();\r\n const match = rPattern.exec(self.lastPattern);\r\n\r\n if (match) {\r\n strReg = [];\r\n\r\n if (match[2] && match[3] && match[4]) {\r\n strReg.push('(' + match[2] + \"-\" + match[3] + \"-\" + match[4] + ')');\r\n } else if (match[2] && match[3]) {\r\n strReg.push('(' + match[2] + \"-\" + match[3] + ')');\r\n } else if (match[3] && match[4]) {\r\n strReg.push('(' + match[3] + \"-\" + match[4] + ')');\r\n } else if (match[2] || match[3]) {\r\n strReg.push('(' + (match[2] || match[3]) + ')');\r\n }\r\n\r\n if (match[5]) {\r\n strReg.push(\"(?:\" + self.getLocaleString(\"search.list.milestone\") + \"\\\\:\\\\s\\\\d*)\" + \"(\" + match[5] + \")\" + \"\\\\d*\");\r\n }\r\n }\r\n }\r\n\r\n var pattern = '(' + strReg.join('|') + ')';\r\n\r\n pattern = pattern.replace(/á|à/gi, \"a\");\r\n pattern = pattern.replace(/é|è/gi, \"e\");\r\n pattern = pattern.replace(/í|ì/gi, \"i\");\r\n pattern = pattern.replace(/ó|ò/gi, \"o\");\r\n pattern = pattern.replace(/ú|ù/gi, \"u\");\r\n pattern = pattern.replace(/ü/gi, \"u\");\r\n\r\n pattern = pattern.replace(/a/gi, \"[a|á|à]\");\r\n pattern = pattern.replace(/e/gi, \"[e|é|è]\");\r\n pattern = pattern.replace(/i/gi, \"[i|í|ì]\");\r\n pattern = pattern.replace(/o/gi, \"[o|ó|ò]\");\r\n pattern = pattern.replace(/u/gi, \"[u|ú|ü|ù]\");\r\n var rex = new RegExp(pattern, \"gi\");\r\n\r\n var label = elm.label;\r\n\r\n if (elm.dataRole !== Consts.searchType.ROAD || elm.dataRole !== Consts.searchType.ROADMILESTONE) {\r\n highlighted = label.replace(rex,\r\n function () {\r\n var params = Array.prototype.slice.call(arguments, 0);\r\n\r\n if (params[params.length - 3]) {\r\n return params[0].replace(params[params.length - 3], \"\" + params[params.length - 3] + \"\");\r\n } else {\r\n return \"\" + params[0] + \"\";\r\n }\r\n });\r\n } else {\r\n highlighted = label.replace(rex, \"$1\");\r\n }\r\n\r\n return highlighted;\r\n };\r\n\r\n const selectionCallback = function (e) {\r\n const self = this;\r\n var _target = e.target;\r\n\r\n if (_target.tagName.toLowerCase() !== 'a') {\r\n let el = e.target;\r\n const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\r\n\r\n while (el) {\r\n if (matchesSelector.call(el, 'a')) {\r\n _target = el;\r\n break;\r\n } else {\r\n el = el.parentElement;\r\n }\r\n }\r\n }\r\n\r\n if (_target.querySelector('span[hidden]')) {\r\n self.textInput.value = _target.querySelector('span[hidden]').textContent;\r\n self.lastPattern = self.textInput.value;\r\n self._goToResult(unescape(_target.getAttribute('href')).substring(1), _target.parentNode.getAttribute('dataRole'));\r\n TC.UI.autocomplete.call(self.textInput, 'clear');\r\n\r\n self.shareButton && self.shareButton.classList.remove(Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n const sortAlphaNum = function (a, b) {\r\n const reA = /[^a-zA-Z]/g;\r\n const reN = /[^0-9]/g;\r\n\r\n var AInt = parseInt(a, 10);\r\n var BInt = parseInt(b, 10);\r\n\r\n if (isNaN(AInt) && isNaN(BInt)) {\r\n var aA = a.replace(reA, \"\");\r\n var bA = b.replace(reA, \"\");\r\n if (aA === bA) {\r\n var aN = parseInt(a.replace(reN, \"\"), 10);\r\n var bN = parseInt(b.replace(reN, \"\"), 10);\r\n return aN === bN ? 0 : aN > bN ? 1 : -1;\r\n } else {\r\n return aA > bA ? 1 : -1;\r\n }\r\n } else if (isNaN(AInt)) {//A is not an Int\r\n return 1;//to make alphanumeric sort first return -1 here\r\n } else if (isNaN(BInt)) {//B is not an Int\r\n return -1;//to make alphanumeric sort first return 1 here\r\n } else {\r\n return AInt > BInt ? 1 : -1;\r\n }\r\n };\r\n\r\n const sortByRoleAndAlphabet = function (a, b) {\r\n const self = this;\r\n\r\n if (self.getSearchTypeByRole(a.dataRole).searchWeight && self.getSearchTypeByRole(b.dataRole).searchWeight) {\r\n if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) > (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return 1;\r\n } else if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) < (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return -1;\r\n }\r\n else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n } else {\r\n if (a.dataRole > b.dataRole) {\r\n return 1;\r\n }\r\n else if (a.dataRole < b.dataRole)\r\n return -1;\r\n else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n }\r\n };\r\n\r\n const sortByRoot = function (a, b) {\r\n const self = this;\r\n\r\n const sort_ = function () {\r\n var first = self.rootCfg.active.root[0] instanceof Array ? self.rootCfg.active.root[0].join('-') : self.rootCfg.active.root[0];\r\n\r\n var aRoot, bRoot;\r\n if (a.properties && a.properties.length > 0 && b.properties && b.properties.length > 0) {\r\n aRoot = self.rootCfg.active.dataIdProperty.map(function (elem) { return a.properties[elem].toString(); }).join('-');\r\n bRoot = self.rootCfg.active.dataIdProperty.map(function (elem) { return b.properties[elem].toString(); }).join('-');\r\n } else {\r\n aRoot = a.id;\r\n bRoot = b.id;\r\n }\r\n\r\n if (aRoot !== first && bRoot === first) {\r\n return 1;\r\n } else if (aRoot === first && bRoot !== first) {\r\n return -1;\r\n } else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n }.bind(this);\r\n\r\n if (self.getSearchTypeByRole(a.dataRole).searchWeight && self.getSearchTypeByRole(b.dataRole).searchWeight) {\r\n if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) > (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return 1;\r\n } else if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) < (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return -1;\r\n }\r\n else {\r\n return sort_();\r\n }\r\n }\r\n else {\r\n return sort_();\r\n }\r\n };\r\n\r\n const buildHTML = function (results) {\r\n const self = this;\r\n\r\n var html = [];\r\n var dataRoles = [];\r\n\r\n // ordenamos por roles y alfabéticamente\r\n var data = results.results.sort(sortByRoleAndAlphabet.bind(self));\r\n\r\n if (self.rootCfg.active) {// si hay root, aplicamos el orden por entidades \r\n data = data.sort(sortByRoot.bind(self));\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var elm = data[i];\r\n\r\n if (dataRoles.indexOf(elm.dataRole) === -1) {\r\n html.push(self.getSearchTypeByRole(elm.dataRole).getSuggestionListHead());\r\n dataRoles.push(elm.dataRole);\r\n }\r\n\r\n html.push(`
  • ${highlighting.call(self, elm)}
  • `);\r\n }\r\n\r\n Array.prototype.map.call(self.resultsList.querySelectorAll('li[dataRole]'), (elm) => {\r\n return elm.getAttribute('dataRole');\r\n }).filter((dataRole, i, liDataRoles) => {\r\n return liDataRoles.indexOf(dataRole) === i && !dataRoles.includes(dataRole);\r\n }).forEach(dataRole => {\r\n html.push(self.getSearchTypeByRole(dataRole).getSuggestionListHead());\r\n html.push(`
  • ${self.getLocaleString('searching')}
  • `);\r\n });\r\n\r\n return html.join('');\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-search.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-search-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n self.renderData(),\r\n self.getRenderedHtml(self.CLASS + '-dialog', {}, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n var self = this;\r\n self._search = self._search || {};\r\n var _search = function () {\r\n self.search(self.textInput.value, function (list) {\r\n if (list.length === 1) {\r\n self.textInput.value = list[0].label;\r\n self._goToResult(list[0].id, self.resultsList.querySelector('li:not([header])').getAttribute('dataRole'));\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n }\r\n else if (list.length === 0) {\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n }\r\n });\r\n };\r\n self.layerStyleFN = (function () {\r\n function getFeatureType(idFeature) {\r\n return idFeature.indexOf('.') > -1 ? idFeature.split('.')[0] : idFeature;\r\n }\r\n function getStyle(property, geomType, id) {\r\n var type = self.getSearchTypeByFeature(id);\r\n if (type) {\r\n var style = type.getStyleByFeatureType(getFeatureType(id));\r\n if (style && Object.prototype.hasOwnProperty.call(style, geomType)) {\r\n return style[geomType][property];\r\n }\r\n }\r\n return Cfg.styles[geomType][property];\r\n }\r\n return function (geomType, property, extractValue, f) {\r\n var self = this;\r\n if (!(f instanceof Feature)) {\r\n self.map.trigger(Consts.event.FEATURESADD, { layer: self.layer, geom: f.geom });\r\n }\r\n var prop = getStyle(property, geomType, getFeatureType(f.id));\r\n if (extractValue) {\r\n if (prop instanceof Array) {\r\n var values = prop.map(function (p) {\r\n const data = f.getData();\r\n return Object.prototype.hasOwnProperty.call(data, p) ? data[p] : '';\r\n });\r\n var searchType = this.getSearchTypeByFeature(getFeatureType(f.id));\r\n if (searchType) {\r\n return searchType.outputFormatLabel.tcFormat(values);\r\n } else {\r\n return values.join(' ');\r\n }\r\n } else {\r\n const data = f.getData();\r\n return Object.prototype.hasOwnProperty.call(data, prop) ? data[prop] : '';\r\n }\r\n }\r\n else {\r\n return prop;\r\n }\r\n };\r\n }());\r\n return new Promise(function (resolve, reject) {\r\n TC.Control.prototype.renderData.call(self, Object.assign(data || {}, { share: self.options.share }), function () {\r\n if (self.map) {\r\n self.layerPromise = self.map.addLayer({\r\n id: self.getUID(),\r\n title: 'Búsquedas',\r\n owner: self,\r\n stealth: true,\r\n declutter: true,\r\n type: Consts.layerType.VECTOR,\r\n styles: {\r\n polygon: {\r\n fillColor: self.layerStyleFN.bind(self, 'polygon', 'fillColor', false),\r\n fillOpacity: self.layerStyleFN.bind(self, 'polygon', 'fillOpacity', false),\r\n strokeColor: self.layerStyleFN.bind(self, 'polygon', 'strokeColor', false),\r\n strokeOpacity: self.layerStyleFN.bind(self, 'polygon', 'strokeOpacity', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'polygon', 'strokeWidth', false)\r\n },\r\n line: {\r\n strokeColor: self.layerStyleFN.bind(self, 'line', 'strokeColor', false),\r\n strokeOpacity: self.layerStyleFN.bind(self, 'line', 'strokeOpacity', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'line', 'strokeWidth', false)\r\n },\r\n marker: {\r\n anchor: TC.Defaults.styles.marker.anchor,\r\n height: TC.Defaults.styles.marker.height,\r\n width: TC.Defaults.styles.marker.width\r\n },\r\n point: {\r\n radius: self.layerStyleFN.bind(self, 'point', 'radius', false),\r\n height: self.layerStyleFN.bind(self, 'point', 'height', false),\r\n width: self.layerStyleFN.bind(self, 'point', 'width', false),\r\n fillColor: self.layerStyleFN.bind(self, 'point', 'fillColor', false),\r\n fillOpacity: self.layerStyleFN.bind(self, 'point', 'fillOpacity', false),\r\n strokeColor: self.layerStyleFN.bind(self, 'point', 'strokeColor', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'point', 'strokeWidth', false),\r\n fontSize: self.layerStyleFN.bind(self, 'point', 'fontSize', false),\r\n fontColor: self.layerStyleFN.bind(self, 'point', 'fontColor', false),\r\n labelOutlineColor: self.layerStyleFN.bind(self, 'point', 'labelOutlineColor', false),\r\n labelOutlineWidth: self.layerStyleFN.bind(self, 'point', 'labelOutlineWidth', false),\r\n label: self.layerStyleFN.bind(self, 'point', 'label', true),\r\n labelRotationKey: self.layerStyleFN.bind(self, 'point', 'labelRotationKey', true)\r\n }\r\n }\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n return self.layer;\r\n });\r\n }\r\n else {\r\n self.layerPromise = Promise.reject(new Error('Control not registered to map'));\r\n }\r\n\r\n // desde keypress y desde la lupa\r\n var _research = function () {\r\n self.textInput.value = self.resultsList.label || self.resultsList.querySelector('li:not([header]) > a > span').textContent;\r\n self.lastPattern = self.textInput.value;\r\n self._goToResult(self.resultsList.id || unescape(self.resultsList.querySelector('li:not([header]) > a').getAttribute('href')).substring(1), self.resultsList.querySelector('li:not([header])').getAttribute('dataRole'));\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n };\r\n\r\n self.textInput = self.div.querySelector('input.' + self.CLASS + '-txt');\r\n if (self.options && self.options.placeHolder) {\r\n self.textInput.setAttribute('placeHolder', self.options.placeHolder.trim());\r\n }\r\n\r\n self.resultsList = self.div.querySelector('.' + self.CLASS + '-list');\r\n self.button = self.div.querySelector('.' + self.CLASS + '-btn');\r\n self.button.addEventListener(Consts.event.CLICK, function () {\r\n self.getLayer().then(function (l) {\r\n if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length > 1) { }\r\n else if (l.features.length > 0) {\r\n l.map.zoomToFeatures(l.features);\r\n }\r\n else if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length === 1) {\r\n _research();\r\n }\r\n else {\r\n self.textInput.dispatchEvent(new Event(\"keyup\"));\r\n }\r\n });\r\n }, { passive: true });\r\n if (self.options.instructions) {\r\n self.textInput.setAttribute('title', self.options.instructions.trim());\r\n self.button.setAttribute('title', self.options.instructions.trim());\r\n }\r\n\r\n // GLS: añadimos la funcionalidad al mensaje de \"No hay resultados\", al hacer click repliega el mensaje.\r\n self.resultsList.addEventListener(Consts.event.CLICK, TC.EventTarget.listenerBySelector('a.' + self.CLASS + '-li-empty', function () {\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n self.textInput.focus();\r\n }), { passive: true });\r\n\r\n self.textInput.addEventListener('keypress', function (e) {\r\n if (e.which == 13) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n self.lastPattern = \"\";\r\n\r\n if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length === 1) {\r\n _research();\r\n } else {\r\n _search();\r\n }\r\n return false;\r\n }\r\n });\r\n self.textInput.addEventListener(\"search\", function () {\r\n if (self.textInput.value.length === 0) {\r\n delete self.toShare;\r\n self.shareButton && self.shareButton.classList.add(Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n _search();\r\n }\r\n });\r\n self.textInput.addEventListener(\"input\", function () {\r\n if (self.textInput.value.length === 0) {\r\n self.shareButton && self.shareButton.classList.add(Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n _search();\r\n }\r\n });\r\n self.textInput.addEventListener(\"targetCleared.autocomplete\", function () {\r\n self.shareButton && self.shareButton.classList.add(Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n });\r\n self.textInput.addEventListener(\"targetUpdated.autocomplete\", function () {\r\n if (self.resultsList.querySelectorAll('li').length > 0) {\r\n self.resultsList.classList.remove(Consts.classes.HIDDEN);\r\n }\r\n });\r\n\r\n\r\n if (self.options.share) {\r\n self.shareButton = self.div.querySelector('.' + self.CLASS + '-share-btn');\r\n self.shareButton.addEventListener(Consts.event.CLICK, function () {\r\n self.showShareDialog();\r\n }, { passive: true });\r\n }\r\n\r\n self.lastPattern = '';\r\n self.retryTimeout = null;\r\n var searchDelay;\r\n\r\n const source = function (_text, callback) {\r\n self.lastpress = performance.now();\r\n\r\n if (!searchDelay) {\r\n const step = function () {\r\n var criteria = self.textInput.value.trim();\r\n\r\n if (criteria.length > 0 &&\r\n (!self.lastPattern || criteria !== self.lastPattern) &&\r\n performance.now() - self.lastpress > self.interval) {\r\n\r\n window.cancelAnimationFrame(searchDelay);\r\n searchDelay = undefined;\r\n\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n\r\n // Pendiente de afinar\r\n //if (self.lastPattern && criteria.substring(0, criteria.lastIndexOf(' ')) == self.lastPattern) { \r\n\r\n // // Si el patrón de búsqueda anterior y actual es el mismo más algo nuevo (típico en la búsqueda de un portal), lo nuevo lo separo por coma\r\n // // self.lastPattern: \"Calle Cataluña/Katalunia Kalea, Pamplona\"\r\n // // text: \"Calle Cataluña/Katalunia Kalea, Pamplona 18\"\r\n\r\n // criteria = criteria.substring(0, criteria.lastIndexOf(' ')) + (self.lastPattern.trim().endsWith(',') ? \"\" : \",\") + criteria.substring(criteria.lastIndexOf(' '));\r\n //}\r\n\r\n self.lastPattern = criteria;\r\n\r\n self.search(criteria, callback);\r\n } else {\r\n searchDelay = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n searchDelay = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n TC.UI.autocomplete.call(self.textInput, {\r\n link: '#',\r\n target: self.resultsList,\r\n minLength: 2,\r\n ctx: self,\r\n source: source,\r\n callback: selectionCallback.bind(self),\r\n buildHTML: buildHTML.bind(self)\r\n });\r\n\r\n const getNextSibling = function (elem, selector) {\r\n // Get the next sibling element\r\n var sibling = elem.nextElementSibling;\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.nextElementSibling;\r\n }\r\n };\r\n\r\n const getPreviousSibling = function (elem, selector) {\r\n // Get the next sibling element\r\n var sibling = elem.previousElementSibling;\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.previousElementSibling;\r\n }\r\n };\r\n\r\n // Detect up/down arrow\r\n const onKeydown = function (e) {\r\n if (!e.ctrlKey && !e.altKey && !e.shiftKey) {\r\n if (e.keyCode === 40) { // down arrow\r\n if (self.textInput == document.activeElement && self.resultsList.querySelector('li:not([header]) a')) {\r\n // Scenario 1: We're focused on the search input; move down to the first li\r\n self.resultsList.querySelector('li:not([header]) a').focus();\r\n } else if (self.resultsList.querySelector('li:not([header]):last-child a') === document.activeElement) { //} else if (self.resultsList.querySelector('li:not([header]):last a').is(':focus')) {\r\n // Scenario 2: We're focused on the last li; move up to search input\r\n self.textInput.focus();\r\n } else {\r\n // Scenario 3: We're in the list but not on the last element, simply move down\r\n getNextSibling(document.activeElement.parentElement, 'li:not([header])')\r\n .querySelector('a').focus();\r\n }\r\n e.preventDefault(); // Stop page from scrolling\r\n e.stopPropagation();\r\n } else if (e.keyCode === 38) { // up arrow\r\n if (self.textInput == document.activeElement) {\r\n // Scenario 1: We're focused on the search input; move down to the last li\r\n self.resultsList.querySelector('li:not([header]):last-child a').focus();\r\n } else if (document.activeElement == self.resultsList.querySelector('li:not([header]) a')) {\r\n self.resultsList.querySelector('li:not([header]):last-child a').focus();\r\n } else {\r\n // Scenario 3: We're in the list but not on the first element, simply move up\r\n getPreviousSibling(document.activeElement.parentElement, 'li:not([header])')\r\n .querySelector('a').focus();\r\n }\r\n e.preventDefault(); // Stop page from scrolling\r\n e.stopPropagation();\r\n }\r\n }\r\n e.stopPropagation();\r\n };\r\n\r\n self.textInput.addEventListener('keydown', onKeydown);\r\n self.resultsList.addEventListener('keydown', onKeydown);\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n\r\n self.layerPromise.then(resolve).catch(reject);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addAllowedSearchType = function (name, options) {\r\n var self = this;\r\n\r\n self.allowedSearchTypes.push(new SearchType(name, options, self));\r\n };\r\n\r\n ctlProto.getSearchTypeByRole = function (type) {\r\n var self = this;\r\n\r\n return self.allowedSearchTypes.filter(function (allowed) {\r\n return allowed.typeName == type;\r\n })[0];\r\n };\r\n\r\n ctlProto.getSearchTypeByFeature = function (id) {\r\n var self = this;\r\n\r\n var type = self.allowedSearchTypes.filter(function (allowed) {\r\n return allowed.isFeatureOfThisType(id);\r\n });\r\n\r\n if (type.length > 0) {\r\n return type[0];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.getElementOnSuggestionList = function (id, dataRole) {\r\n const self = this;\r\n\r\n for (var i = 0; i < self.searchRequestsResults.length; i++) {\r\n if (self.searchRequestsResults[i].id == id && (!dataRole || (dataRole && self.searchRequestsResults[i].dataRole === dataRole)))\r\n return self.searchRequestsResults[i];\r\n }\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n const self = this;\r\n return self.layerPromise;\r\n };\r\n\r\n ctlProto.getFeatures = function () {\r\n const self = this;\r\n return self.layer.features;\r\n };\r\n\r\n ctlProto.cleanMap = function () {\r\n const self = this;\r\n\r\n if (self.layer) {\r\n const l = self.layer;\r\n var features = l.features.slice();\r\n l.clearFeatures();\r\n\r\n if (features && features.length > 0) {\r\n self.map.trigger(Consts.event.FEATUREREMOVE, { layer: l, feature: features[0] });\r\n }\r\n\r\n for (var i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(l, self.WFS_TYPE_ATTRS[i])) {\r\n delete l[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.getMunicipalities = function () {\r\n var self = this;\r\n\r\n TC.cache.search = TC.cache.search || {};\r\n self._municipalitiesPromise = new Promise(function (resolve, _reject) {\r\n if (TC.cache.search.municipalities) {\r\n resolve(TC.cache.search.municipalities);\r\n }\r\n else {\r\n var type = self.getSearchTypeByRole(Consts.searchType.CADASTRAL);\r\n\r\n if (type.municipality && type.municipality.featureType && type.municipality.labelProperty && type.municipality.idProperty) {\r\n var params = {\r\n REQUEST: 'GetFeature',\r\n SERVICE: 'WFS',\r\n TYPENAME: type.municipality.featureType,\r\n VERSION: type.version,\r\n PROPERTYNAME: type.municipality.labelProperty + \",\" + type.municipality.idProperty,\r\n OUTPUTFORMAT: type.outputFormat\r\n };\r\n if (type.featurePrefix) {\r\n params.TYPENAME = type.featurePrefix + ':' + params.TYPENAME;\r\n }\r\n var url = type.url + '?' + TC.Util.getParamString(params);\r\n TC.ajax({\r\n url: url,\r\n method: 'GET',\r\n responseType: 'text'\r\n }).then(function (response) {\r\n const data = response.data;\r\n var parser;\r\n if (type.outputFormat === Consts.format.JSON) {\r\n parser = new TC.wrap.parser.JSON();\r\n }\r\n else {\r\n parser = new TC.wrap.parser.WFS({\r\n featureNS: type.municipality.featurePrefix,\r\n featureType: type.municipality.featureType\r\n });\r\n }\r\n var features = parser.read(data);\r\n TC.cache.search.municipalities = [];\r\n for (var i = 0; i < features.length; i++) {\r\n var feature = features[i];\r\n TC.cache.search.municipalities.push({ label: feature.data[type.municipality.labelProperty], id: feature.data[type.municipality.idProperty] });\r\n }\r\n\r\n TC.cache.search.municipalities.sort(function (a, b) {\r\n var result;\r\n if (a.label < b.label) {\r\n result = -1;\r\n }\r\n else if (a.label > b.label) {\r\n result = 1;\r\n }\r\n else {\r\n result = 0;\r\n }\r\n return result;\r\n });\r\n\r\n resolve(TC.cache.search.municipalities);\r\n }).catch(function () {\r\n resolve();\r\n });\r\n } else {\r\n throw new Error(\"Error en la configuración de la búsqueda: \" + type.typeName + \". Error en el objeto municipality\");\r\n }\r\n }\r\n });\r\n return self._municipalitiesPromise;\r\n };\r\n\r\n ctlProto.getCoordinates = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n var match = pattern.match(new RegExp('^' + self.UTMX_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*' + self.UTMY_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$'));\r\n if (match) {\r\n pattern = match[1] + ' ' + match[2];\r\n }\r\n\r\n match = pattern.match(new RegExp('^' + self.LAT_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LON_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n pattern = match[1] + ' ' + match[3];\r\n }\r\n\r\n if (/\\d/.test(pattern) && (new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$').test(pattern) || /^([-+]?\\d{1,3}([.,]\\d+)?)\\,?\\s*([-+]?\\d{1,2}([.,]\\d+)?)$/.test(pattern))) {\r\n match = /^([-+]?\\d{1,3}([.,]\\d+)?)\\,?\\s*([-+]?\\d{1,2}([.,]\\d+)?)$/.exec(pattern);\r\n if (match && (match[1].indexOf(',') > -1 || match[3].indexOf(',') > -1)) {\r\n match[1] = match[1].replace(',', '.');\r\n match[3] = match[3].replace(',', '.');\r\n\r\n pattern = match[1] + ' ' + match[3];\r\n }\r\n\r\n if (!match || match && (match[1].indexOf(',') > -1 ? match[1].replace(',', '.') : match[1]) <= 180 && (match[3].indexOf(',') > -1 ? match[3].replace(',', '.') : match[3]) <= 90) {\r\n\r\n match = new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$').exec(pattern);\r\n if (match && (match[1].indexOf(',') > -1 || match[2].indexOf(',') > -1)) {\r\n match[1] = match[1].replace(',', '.');\r\n match[2] = match[2].replace(',', '.');\r\n\r\n pattern = match[1] + ' ' + match[2];\r\n }\r\n\r\n // parse coordinates\r\n pattern = pattern.replace(self.UTMX_LABEL, '').replace(self.UTMY_LABEL, '').replace(self.LON_LABEL, '').replace(self.LAT_LABEL, '');\r\n var coords = TC.Util.parseCoords(pattern);\r\n if (coords) {\r\n var xValue = coords[0].value;\r\n var yValue = coords[1].value;\r\n var xLabel = coords[0].type === Consts.UTM ? self.UTMX : self.LAT;\r\n var yLabel = coords[1].type === Consts.UTM ? self.UTMY : self.LON;\r\n var id = xLabel + xValue + yLabel + yValue;\r\n\r\n var point = self.getPoint(id);\r\n if (point && !self.insideLimit(point)) {\r\n xValue = coords[1].value;\r\n yValue = coords[0].value;\r\n xLabel = coords[1].type === Consts.UTM ? self.UTMX : self.LAT;\r\n yLabel = coords[0].type === Consts.UTM ? self.UTMY : self.LON;\r\n id = xLabel + xValue + yLabel + yValue;\r\n point = self.getPoint(id);\r\n }\r\n\r\n if (point) {\r\n self.availableSearchTypes[Consts.searchType.COORDINATES].label = /^X([-+]?\\d+(?:\\.\\d+)?)Y([-+]?\\d+(?:\\.\\d+)?)$/.test(id) ? self.getLocaleString('search.list.coordinates.utm') + self.map.crs : self.getLocaleString('search.list.coordinates.geo');\r\n\r\n //console.log('getCoordinates promise resuelta');\r\n resolve([{\r\n id: id, label: self.getLabel(id), dataRole: Consts.searchType.COORDINATES\r\n }]);\r\n }\r\n else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getCadastralRef = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n var match = pattern.match(new RegExp(self.MUN_LABEL.trim().toLowerCase() + '?\\\\s(.*)\\\\,\\\\s?' + self.POL_LABEL.trim().toLowerCase() + '?\\\\s(\\\\d{1,2})\\\\,\\\\s?' + self.PAR_LABEL.trim().toLowerCase() + '?\\\\s(\\\\d{1,4})'));\r\n if (match) {\r\n pattern = match[1] + ', ' + match[2] + ', ' + match[3];\r\n }\r\n\r\n var _pattern = pattern;\r\n if (!/^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.test(pattern) && self.getSearchTypeByRole(Consts.searchType.CADASTRAL).suggestionRoot)\r\n _pattern = self.getSearchTypeByRole(Consts.searchType.CADASTRAL).suggestionRoot + ', ' + pattern;\r\n\r\n if (/^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.test(_pattern) && !new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '})\\\\s*\\\\,\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '})$').test(pattern)) {\r\n self.getMunicipalities().then(function (list) {\r\n var match = /^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.exec(_pattern);\r\n if (match) {\r\n var matcher = new RegExp(match[1].trim().replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\"), \"i\");\r\n var results = [];\r\n\r\n const getItem = function (mun, munLabel, pol, par) {\r\n var properties = [];\r\n\r\n properties.push[self.MUN] = mun;\r\n properties.push[self.POL] = pol;\r\n properties.push[self.PAR] = par;\r\n\r\n return {\r\n id: self.MUN + mun + self.POL + pol + self.PAR + par,\r\n label: self.getLabel(self.MUN + munLabel + self.POL + pol + self.PAR + par),\r\n dataRole: Consts.searchType.CADASTRAL,\r\n properties: properties\r\n };\r\n };\r\n\r\n results = list.filter(function (value) {\r\n value = value.label || value.id || value;\r\n return matcher.test(value) || matcher.test(self.removePunctuation(value));\r\n });\r\n\r\n if (results.length > 0) {\r\n for (var i = 0; i < results.length; i++) {\r\n results[i] = getItem(results[i].id, results[i].label, match[2].trim(), match[3].trim());\r\n }\r\n }\r\n\r\n if (/^[0-9]*$/g.test(match[1])) {\r\n\r\n if (match[1].trim() === self.getSearchTypeByRole(Consts.searchType.CADASTRAL).suggestionRoot) {\r\n\r\n var suggestionRoot = list.filter(function (elm) {\r\n return parseInt(elm.id) === parseInt(self.getSearchTypeByRole(Consts.searchType.CADASTRAL).suggestionRoot);\r\n })[0];\r\n\r\n if (suggestionRoot) {\r\n resolve([getItem(suggestionRoot.id, suggestionRoot.label, match[2].trim(), match[3].trim())]);\r\n }\r\n }\r\n\r\n results.push(getItem(match[1].trim(), match[1].trim(), match[2].trim(), match[3].trim()));\r\n }\r\n\r\n //console.log('getCadastralRef promise resuelta');\r\n resolve(results);\r\n }\r\n });\r\n } else {\r\n //console.log('getCadastralRef promise resuelta - no es ref catastral');\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.stringPatternsValidators = {\r\n tsp: function (text, result, root, limit) {\r\n const self = this;\r\n // town, street, portal - street, town, portal\r\n var match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n if (match && match[1] && match[2]) {\r\n\r\n var getPortal = function () {\r\n return formatStreetNumber.call(self, (match[3] || match[4] || match[5] || match[6]).trim());\r\n };\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[1].trim()) && /^([^0-9]+)$/i.test(match[2].trim())) {\r\n result.push({\r\n t: match[1].trim(), s: match[2].trim(), p: getPortal()\r\n });\r\n result.push({\r\n t: match[2].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n if (/^([^0-9]+)$/i.test(match[1].trim())) result.push({\r\n t: match[1].trim(), s: match[2].trim(), p: getPortal()\r\n });\r\n else result.push({\r\n s: match[1].trim(), t: match[2].trim(), p: getPortal()\r\n });\r\n }\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n spt: function (text, result, root, limit) {\r\n const self = this;\r\n // street, portal, town\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))(?:\\s*\\,\\s*)([^0-9\\,]+)$/i.exec(text);\r\n if (match && match[6] && match[1]) {\r\n\r\n var getPortal = function () {\r\n return formatStreetNumber.call(self, (match[2] || match[3] || match[4] || match[5]).trim());\r\n };\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[6].trim()) && /^([^0-9]+)$/i.test(match[1].trim())) {\r\n result.push({\r\n t: match[6].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n result.push({\r\n t: match[1].trim(), s: match[6].trim(), p: getPortal()\r\n });\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n if (/^([^0-9]+)$/i.test(match[6].trim())) result.push({\r\n t: match[6].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n else result.push({\r\n s: match[6].trim(), t: match[1].trim(), p: getPortal()\r\n });\r\n }\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n tnsp: function (text, result, root, limit) {\r\n const self = this;\r\n // town, numbers street, portal\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)([^0-9\\,]+)(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n\r\n if (match && match[1] && match[2]) {\r\n result.push({\r\n t: match[2].trim(), s: match[1].trim(), p: formatStreetNumber.call(self, (match[3] || match[4] || match[5] || match[6]).trim())\r\n });\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n ts: function (text, result, root, limit) {\r\n const self = this;\r\n // town, street\r\n var match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(text);\r\n\r\n // topónimo, municipio\r\n if (!match && /^[^0-9]*$/i.test(text.trim())) { // si no hay números reviso dándole la vuelta, si hay números que lo trate la función st\r\n var criteria = text.split(',').reverse();\r\n match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(criteria.join(','));\r\n }\r\n\r\n if (match && match[1] && match[2]) {\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[1].trim()) && /^([^0-9]+)$/i.test(match[2].trim())) {\r\n result.push({\r\n t: match[1].trim(), s: match[2].trim()\r\n });\r\n result.push({\r\n s: match[1].trim(), t: match[2].trim()\r\n });\r\n\r\n bindRoot.call(this, result, root, limit);\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n\r\n var getStreet = function (s) {\r\n var revS = s.split(' ').reverse();\r\n // validamos si el criterio es compuesto \r\n var fs = [];\r\n for (var si = 0; si < revS.length; si++) {\r\n if (revS[si].length === 1) {\r\n fs.push(revS[si]);\r\n revS[si] = '';\r\n }\r\n }\r\n\r\n return fs.length > 0 ? revS.reverse().join(' ').trim() + self._LIKE_PATTERN + fs.reverse().join(self._LIKE_PATTERN) : revS.reverse().join(' ').trim();\r\n };\r\n\r\n if (/^([^0-9]+)$/i.test(match[1].trim()))\r\n result.push({\r\n t: match[1].trim(), s: getStreet(match[2].trim())\r\n });\r\n else result.push({\r\n s: getStreet(match[1].trim()), t: match[2].trim()\r\n });\r\n\r\n bindRoot.call(this, result, root, limit, true);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n st: function (text, result, root, limit) {\r\n const self = this;\r\n // street, town\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)([^0-9\\,]+)$/i.exec(text);\r\n\r\n if (!match) {\r\n const criteria = text.split(',').reverse();\r\n match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(criteria.join(','));\r\n }\r\n\r\n if (match) { // puede generar falsos positivos cuando el portal llega seguido de la calle -> calle mayor 14, pamplona\r\n var data = {\r\n };\r\n const criteria = text.split(',').reverse();\r\n for (var i = 0; i < criteria.length; i++) {\r\n if (/^([^0-9\\,]+)$/i.test(criteria[i].trim())) { // si no hay números se trata de municipio\r\n data.t = criteria[i].trim();\r\n }\r\n else if (/(\\s*\\d+)/i.test(criteria[i].trim())) { // si contiene número, puede ser calle o calle + portal\r\n if (criteria[i].trim().indexOf(' ') === -1) { // si no contiene espacios se trata de calle compuesta por números\r\n data.s = criteria[i].trim();\r\n } else { // si contiene espacio puede contener calle + portal\r\n var _criteria = criteria[i].trim().split(' ').reverse();\r\n\r\n var isPortal = function (c) {\r\n var m = /^(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(c.trim());\r\n if (m) {\r\n data.p = formatStreetNumber.call(self, c.trim());\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var x = 0;\r\n var p = _criteria[x].trim();\r\n while (x < _criteria.length && !isPortal(p)) {\r\n x++;\r\n if (x < _criteria.length)\r\n p = p + _criteria[x];\r\n\r\n }\r\n\r\n if (data.p) {\r\n var _cr = _criteria;\r\n for (var h = 0; h < _cr.length; h++) {\r\n // validamos que lo que hemos deducido como portal, está en portal para no añadirlo a calle\r\n var inPortal = false;\r\n for (var c = 0; c < _cr[h].split('').length; c++) {\r\n if (data.p.indexOf(_cr[h][c]) > -1)\r\n inPortal = true;\r\n }\r\n\r\n if (inPortal) {\r\n _cr[h] = '';\r\n if (data.p == formatStreetNumber.call(self, p)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (/^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+)$/i.test(_criteria.reverse().join(' ').trim())) {\r\n var fs = [];\r\n var criteriaRev = _criteria.reverse();\r\n for (var chs = 0; chs < criteriaRev.length; chs++) {\r\n if (criteriaRev[chs].trim().length === 1) {\r\n fs.push(criteriaRev[chs].trim());\r\n criteriaRev[chs] = '';\r\n }\r\n }\r\n\r\n data.s = fs.length > 0 ? criteriaRev.reverse().join(' ').trim() + self._LIKE_PATTERN + fs.reverse().join(self._LIKE_PATTERN) : criteriaRev.reverse().join(' ').trim();\r\n }\r\n\r\n\r\n // nombre_de_calle = 137, 1, 20...\r\n // duplico la búsqueda para el caso de [Calle nombre_de_calle], municipio\r\n result.push({\r\n t: data.t,\r\n s: data.s + ' ' + data.p\r\n });\r\n } else {\r\n data.s = criteria[i].trim();\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.push(data);\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n s_or_t: function (text, result, root, _limit) {\r\n var match = /^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9\\<\\>]+)$/i.exec(text);\r\n if (match && match[1]) {\r\n if (root) {\r\n result.push({\r\n t: match[1].trim()\r\n });\r\n\r\n result.push({\r\n t: root,\r\n s: match[1].trim()\r\n });\r\n }\r\n else result.push({\r\n t: match[1].trim()\r\n });\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n sp: function (text, result, root, _limit) {\r\n const self = this;\r\n var match = /^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/]+)\\s*\\,?\\s*((\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n if (match && match[1] && match[2]) { // && text.indexOf(',') > -1 && text.split(',').length < 3) {\r\n if (root)\r\n result.push({\r\n t: root,\r\n s: match[1].trim(),\r\n p: formatStreetNumber.call(self, match[2].trim())\r\n });\r\n else\r\n result.push({\r\n t: match[1].trim(),\r\n s: match[2].trim()\r\n });\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n snp: function (text, result, root, _limit) { // calle puede contener números con portal (cuando exista un municipio root establecido)\r\n const self = this;\r\n var match = /^([^\\,][0-9\\s*\\-\\.\\(\\)\\/]+)\\s*\\,?\\s*(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.exec(text);\r\n if (match && match[1] && match[2] && root) {\r\n result.push({\r\n t: root,\r\n s: match[1].trim(),\r\n p: formatStreetNumber.call(self, match[2].trim())\r\n });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n };\r\n\r\n /* métodos auxiliares de getStringPattern */\r\n\r\n const normalizedCriteria = function (value) {\r\n const self = this;\r\n\r\n value = self.removePunctuation(value);\r\n\r\n // elimino los caracteres especiales\r\n if (self.NORMAL_PATTERNS.ROMAN_NUMBER.test(value)) {\r\n value = value.replace(self.NORMAL_PATTERNS.ABSOLUTE_NOT_DOT, '');\r\n }\r\n else {\r\n value = value.replace(self.NORMAL_PATTERNS.ABSOLUTE, '');\r\n }\r\n return value.toLowerCase();\r\n };\r\n\r\n const formatStreetNumber = function (value) {\r\n const self = this;\r\n\r\n var is_nc_c = function (value) {\r\n return /^(\\d{1,3})\\s?\\-?\\s?([a-z]{0,4})\\s?\\-?\\s?([a-z]{0,4})$/i.test(value);\r\n };\r\n var nc_c = function (value) {\r\n var f = [];\r\n var m = /^(\\d{1,3})\\s?\\-?\\s?([a-z]{0,4})\\s?\\-?\\s?([a-z]{0,4})$/i.exec(value);\r\n if (m) {\r\n for (var i = 1; i < m.length; i++) {\r\n if (m[i].trim().length > 0)\r\n f.push(m[i].trim());\r\n }\r\n\r\n return f.join(self._LIKE_PATTERN);\r\n }\r\n return value;\r\n };\r\n\r\n var is_cn = function (value) {\r\n return /^([a-z]{1,4})\\s?\\-?\\s?(\\d{1,3})$/i.test(value);\r\n };\r\n var cn = function (value) {\r\n var f = [];\r\n var m = /^([a-z]{1,4})\\s?\\-?\\s?(\\d{1,3})$/i.exec(value);\r\n if (m) {\r\n for (var i = 1; i < m.length; i++) {\r\n if (m[i].trim().length > 0)\r\n f.push(m[i].trim());\r\n }\r\n\r\n return f.join(self._LIKE_PATTERN);\r\n }\r\n return value;\r\n };\r\n\r\n var is_sn = function (value) {\r\n return /^(sn|S\\/N|s\\/n|s\\-n)$/i.test(value);\r\n };\r\n var sn = function (value) {\r\n var m = /^(sn|S\\/N|s\\/n|s\\-n)$/i.exec(value);\r\n if (m) {\r\n return 's*n';\r\n }\r\n return value;\r\n };\r\n\r\n\r\n var is_cmc = function (value) {\r\n return /^([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.test(value);\r\n };\r\n var cmc = function (value) {\r\n var m = /^([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.exec(value);\r\n if (m) {\r\n return value;\r\n }\r\n return value;\r\n };\r\n\r\n var isCheck = [is_nc_c, is_cn, is_sn, is_cmc];\r\n var check = [nc_c, cn, sn, cmc];\r\n var ch = 0;\r\n while (ch < check.length && !isCheck[ch].call(self, value)) {\r\n ch++;\r\n }\r\n\r\n if (ch < check.length)\r\n return check[ch].call(self, value);\r\n else return value;\r\n };\r\n\r\n const bindRoot = function (result, root, limit, addRoot) {\r\n const self = this;\r\n\r\n if (root) {\r\n var i = result.length;\r\n while (i--) {\r\n if (!addRoot) {\r\n if (result[i].t) {\r\n var indicatedRoot = self.rootCfg.active.rootLabel.filter(function (elem) {\r\n return elem.label.indexOf(self.removePunctuation(result[i].t).toLowerCase()) > -1;\r\n }.bind(self));\r\n\r\n if (indicatedRoot.length === 1) {\r\n result[i].t = indicatedRoot[0].id;\r\n } else if (indicatedRoot.length > 1) {\r\n\r\n indicatedRoot.map(function (elem) {\r\n var newResult = TC.Util.extend({\r\n }, result[i]);\r\n newResult.t = elem.id;\r\n\r\n result.push(newResult);\r\n });\r\n\r\n } else if (indicatedRoot.length === 0 && limit) {\r\n result.splice(i, 1);\r\n }\r\n }\r\n }\r\n else {\r\n result.push(TC.Util.extend({}, result[i], { t: root }));\r\n }\r\n }\r\n }\r\n };\r\n\r\n const getObjectsFromStringToQuery = function (allowedRoles, text) {\r\n const self = this;\r\n const root = self.rootCfg.active && self.rootCfg.active.root || '';\r\n const limit = self.rootCfg.active && self.rootCfg.active.limit || false;\r\n\r\n var result = [];\r\n\r\n const test = function () {\r\n var tests = [function (text) {\r\n return text.length >= 3;\r\n },\r\n function (text) {\r\n return /^\\d+$/.test(text) ?\r\n false :\r\n /^\\d+\\,\\s*\\d+$/.test(text) ? false : true;\r\n }];\r\n\r\n for (var i = 0; i < tests.length; i++) {\r\n if (!tests[i].call(self, text))\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // eliminamos espacios en blanco\r\n text = text.trim();\r\n\r\n // comprobamos si acaba con coma, si es así, la eliminamos\r\n if (text.charAt(text.length - 1) === ',') {\r\n text = text.substring(0, text.length - 1);\r\n }\r\n\r\n if (test(text)) {\r\n var check = [];\r\n\r\n check = allowedRoles.map(function (dataRole) {\r\n return self.getSearchTypeByRole(dataRole);\r\n }).filter(function (searchType) {\r\n return searchType.stringPatternToCheck;\r\n }).map(function (searchType) {\r\n return searchType.stringPatternToCheck;\r\n }).flat();\r\n\r\n if (check.length === 0) {\r\n check = [self.stringPatternsValidators.tsp, self.stringPatternsValidators.spt, self.stringPatternsValidators.tnsp, self.stringPatternsValidators.ts, self.stringPatternsValidators.st];\r\n if (root && text.split(',').length < 3) {\r\n check = [self.stringPatternsValidators.sp, self.stringPatternsValidators.snp, self.stringPatternsValidators.s_or_t].concat(check);\r\n }\r\n else {\r\n check = check.concat([self.stringPatternsValidators.sp, self.stringPatternsValidators.snp, self.stringPatternsValidators.s_or_t]);\r\n }\r\n }\r\n\r\n var ch = 0;\r\n try {\r\n while (ch < check.length && !check[ch].call(self, text, result, root, limit)) {\r\n ch++;\r\n }\r\n }\r\n catch (ex) {\r\n TC.error(\"Error según el patrón: \" + text, Consts.msgErrorMode.EMAIL, \"Error en la búsqueda del callejero\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const requestToWFS = function (type, signal, doneCallback, data) {\r\n\r\n return fetch(type.url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\r\n },\r\n body: type.filter.getParams(data),\r\n signal: signal\r\n })\r\n .then(function (response) {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error requestToWFS\";\r\n }\r\n })\r\n .then(doneCallback)\r\n .catch(function (err) {\r\n if (err.name === 'AbortError') {\r\n console.log('Search: petición abortada');\r\n } else {\r\n TC.error(err);\r\n throw err;\r\n }\r\n\r\n //console.log('getStringPattern promise resuelta - data.statusText: ' + data.statusText);\r\n });\r\n };\r\n\r\n ctlProto.getStringPattern = function (allowedRoles, pattern) {\r\n const self = this;\r\n\r\n return new Promise((resolve, reject) => {\r\n let toQuery = [];\r\n let requestsQuery = [];\r\n\r\n pattern = normalizedCriteria.call(self, pattern);\r\n\r\n /* gestionamos:\r\n Entidad de población: Irisarri Auzoa (Igantzi)\r\n Topónimo: Aldabeko Bidea (Arbizu)\r\n */\r\n let combinedCriteria = /(.*)\\((.*)\\)?/.exec(pattern);\r\n if (combinedCriteria && combinedCriteria.length > 2) {\r\n // búsqueda de entidad de población\r\n toQuery = getObjectsFromStringToQuery.call(self, allowedRoles, combinedCriteria[1]) || [];\r\n // búsqueda de topónimo\r\n let toQueryCombined = getObjectsFromStringToQuery.call(self, allowedRoles, combinedCriteria[1] + ',' + combinedCriteria[2]) || [];\r\n\r\n toQuery = toQuery.concat(toQueryCombined);\r\n } else {\r\n toQuery = getObjectsFromStringToQuery.call(self, allowedRoles, pattern) || [];\r\n }\r\n\r\n if (toQuery.length > 0) {\r\n let pendingSuggestionLstHead = [];\r\n let filterRoles = (dataToQuery) => {\r\n return allowedRoles.filter(function (elm) {\r\n return Object.keys(self.getSearchTypeByRole(elm).queryProperties).length === Object.keys(dataToQuery).length;\r\n });\r\n };\r\n let pendingHeaderRoles = [];\r\n\r\n for (var i = 0; i < toQuery.length; i++) {\r\n let dataToQuery = toQuery[i];\r\n let roles = filterRoles(dataToQuery);\r\n\r\n for (var r = 0; r < roles.length; r++) {\r\n let type = self.getSearchTypeByRole(roles[r]);\r\n\r\n if (pendingHeaderRoles.indexOf(type.typeName) < 0) {\r\n pendingSuggestionLstHead.push(type.getSuggestionListHead());\r\n pendingSuggestionLstHead.push('
  • ' + self.getLocaleString('searching') + '
  • ');\r\n\r\n pendingHeaderRoles.push(type.typeName);\r\n }\r\n\r\n let responseToSuggestionLstElmt = (response) => {\r\n return type.getSuggestionListElements(response);\r\n };\r\n\r\n requestsQuery.push(requestToWFS.call(self, type, self.searchRequestsAbortController.signal, responseToSuggestionLstElmt, dataToQuery));\r\n }\r\n }\r\n\r\n if (requestsQuery.length > 0) {\r\n self.resultsList.innerHTML += pendingSuggestionLstHead.join('');\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n Promise.all(requestsQuery)\r\n .then((results) => {\r\n //console.log('getStringPattern promise resuelta'); \r\n resolve([].concat.apply([], results));\r\n }).catch((_error) => {\r\n reject();\r\n });\r\n } else {\r\n reject();\r\n }\r\n } else {\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getRoad = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n pattern = pattern.trim();\r\n if (pattern.length < 2) {\r\n resolve([]);\r\n } else {\r\n var type = self.getSearchTypeByRole(Consts.searchType.ROAD);\r\n\r\n var roadPattern = type.getPattern();\r\n var match = roadPattern.exec(pattern);\r\n if (match && match[3]) {\r\n\r\n var _pattern = match[2] ? match[2].trim() + \"-\" + match[3].trim() : match[3].trim();\r\n if (match[4] && match[4].length > 0) {\r\n _pattern = _pattern + \"-\" + match[4].trim();\r\n }\r\n\r\n self.resultsList.innerHTML = type.getSuggestionListHead() +\r\n '
  • ' + self.getLocaleString('searching') + '
  • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n //console.log('getRoad new');\r\n fetch(type.url + '?' + type.filter.getParams({ t: _pattern }), {\r\n signal: self.searchRequestsAbortController.signal\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error getRoad\";\r\n }\r\n }).then((response) => {\r\n let result = [];\r\n let data = type.parseFeatures(response);\r\n if (data.length > 0) {\r\n data.map(function (feature) {\r\n var properties = type.outputProperties;\r\n if (!result.some(function (elem) {\r\n return (elem.text == feature.data[properties[0]]);\r\n })) {\r\n var label = type.outputFormatLabel.tcFormat(type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }));\r\n\r\n var text = type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }).join('-');\r\n\r\n result.push({\r\n id: type.dataIdProperty.map(function (elem) {\r\n return feature.data[elem];\r\n }).join('#'),\r\n label: label,\r\n text: text,\r\n dataLayer: feature.id.split('.')[0],\r\n dataRole: type.typeName\r\n });\r\n }\r\n });\r\n\r\n //console.log('getRoad promise resuelta');\r\n resolve(result);\r\n } else {\r\n //console.log('getRoad promise resuelta');\r\n reject();\r\n }\r\n }).catch(function (_data) {\r\n //console.log('getRoad promise resuelta - xhr fail');\r\n reject();\r\n });\r\n } else {\r\n //console.log('getRoad promise resuelta - no encaja en road');\r\n reject();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getMilestone = function (pattern) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n pattern = pattern.trim();\r\n if (pattern.length < 3) {\r\n resolve([]);\r\n } else {\r\n\r\n var type = self.getSearchTypeByRole(Consts.searchType.ROADMILESTONE);\r\n\r\n var roadMilestonePattern = type.getPattern();\r\n var match = roadMilestonePattern.exec(pattern);\r\n if (match && match[3] && match[5]) {\r\n\r\n var _pattern = match[2] ? match[2].trim() + \"-\" + match[3].trim() : match[3].trim();\r\n if (match[4] && match[4].length > 0) {\r\n _pattern = _pattern + \"-\" + match[4].trim();\r\n }\r\n\r\n self.resultsList.innerHTML = type.getSuggestionListHead() +\r\n '
  • ' + self.getLocaleString('searching') + '
  • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n //console.log('getMilestone new');\r\n\r\n fetch(type.url + '?' + type.filter.getParams({ t: _pattern, s: match[5].trim() }), {\r\n signal: self.searchRequestsAbortController.signal\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error getMilestone\";\r\n }\r\n }).then(function (response) {\r\n let result = [];\r\n let data = type.parseFeatures(response);\r\n if (data.length > 0) {\r\n data.map(function (feature) {\r\n var properties = type.outputProperties;\r\n if (!result.some(function (elem) {\r\n return (elem.label == feature.data[properties[0]]);\r\n })) {\r\n var text = type.outputFormatLabel.tcFormat(type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }));\r\n result.push({\r\n id: type.dataIdProperty.map(function (elem) {\r\n return feature.data[elem];\r\n }).join('#'),\r\n label: text,\r\n text: text,\r\n dataLayer: feature.id.split('.')[0],\r\n dataRole: type.typeName\r\n });\r\n }\r\n });\r\n //console.log('getMilestone promise resuelta');\r\n resolve(result);\r\n } else {\r\n //console.log('getMilestone promise resuelta');\r\n reject();\r\n }\r\n }).catch(function (_data) {\r\n //console.log('getMilestone promise resuelta - xhr fail');\r\n reject();\r\n });\r\n } else {\r\n //console.log('getMilestone promise resuelta - no encaja en pk');\r\n reject();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.search = function (pattern, callback) {\r\n var self = this;\r\n\r\n pattern = pattern.trim();\r\n if (pattern.length > 0) {\r\n pattern = pattern.toLowerCase();\r\n\r\n if (self.searchRequestsAbortController) {\r\n self.searchRequestsAbortController.abort();\r\n }\r\n\r\n self.resultsList.innerHTML = '';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n self.searchRequestsResults = [];\r\n\r\n let onAbort = () => {\r\n self.searchRequestsAbortController.signal.removeEventListener('abort', onAbort);\r\n };\r\n\r\n self.searchRequestsAbortController = new AbortController();\r\n self.searchRequestsAbortController.signal.addEventListener('abort', onAbort);\r\n\r\n let toRender = 0;\r\n let renderingEnd = () => {\r\n toRender--;\r\n if (toRender === 0) {\r\n // si al término de las peticiones ya estamos con otro patrón no hacemos nada\r\n if (pattern !== self.textInput.value.trim().toLowerCase()) {\r\n return;\r\n }\r\n else {\r\n if (self.searchRequestsResults.length === 0) {\r\n self.cleanMap();\r\n\r\n if (!self.layer || self.layer.features.length === 0) {\r\n\r\n self.resultsList.innerHTML = '
  • ' + self.EMPTY_RESULTS_LABEL + '
  • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n }\r\n }\r\n\r\n self.lastPattern = \"\";\r\n }\r\n }\r\n };\r\n\r\n let renderResultsOnSuggestionList = () => {\r\n if (self.searchRequestsResults) {\r\n self.searchRequestsResults = self.searchRequestsResults.sort(function (a, b) {\r\n var pattern = /(\\d+)/;\r\n var _a, _b = '';\r\n if (pattern.test(a.label) && pattern.test(b.label)) {\r\n _a = a.label.match(pattern)[1];\r\n _b = b.label.match(pattern)[1];\r\n } else {\r\n _a = a.label;\r\n _b = b.label;\r\n }\r\n\r\n if (_a > _b)\r\n return 1;\r\n else\r\n if (_a < _b)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n\r\n // compatibilidad hacia atrás\r\n self._search.data = self.searchRequestsResults;\r\n\r\n if (callback) {\r\n callback(self.searchRequestsResults);\r\n }\r\n }\r\n };\r\n\r\n self.allowedSearchTypes.forEach(function (allowed) {\r\n if (allowed.parser) {\r\n toRender++;\r\n\r\n //console.log('registramos promesa: ' + allowed.typeName);\r\n\r\n allowed.parser.call(self, pattern)\r\n .then(function (dataRole, result) {\r\n\r\n let manageLoadingByDataRole = () => {\r\n let loadingElemOfDataRole = self.resultsList.querySelector('li[dataRole=\"' + dataRole + '\"]');\r\n if (loadingElemOfDataRole) {\r\n let indexLoadingElemOfDataRole = Array.prototype.indexOf.call(loadingElemOfDataRole.parentElement.childNodes, loadingElemOfDataRole);\r\n let headerElemOfDataRole = self.resultsList.childNodes[indexLoadingElemOfDataRole - 1];\r\n\r\n self.resultsList.removeChild(headerElemOfDataRole);\r\n self.resultsList.removeChild(loadingElemOfDataRole);\r\n }\r\n };\r\n\r\n //console.log('resulta promesa: ' + dataRole);\r\n\r\n if (result && result.length > 0) {\r\n\r\n // caso topónimo con y sin municipio Irisarri Auzoa (Igantzi)\r\n let toConcat = result.filter(elm => self.searchRequestsResults.findIndex((srrElm) => srrElm.id === elm.id) === -1);\r\n if (toConcat.length === result.length) {\r\n self.searchRequestsResults = self.searchRequestsResults.concat(toConcat);\r\n\r\n renderResultsOnSuggestionList();\r\n } else if (result.length === 1) {\r\n manageLoadingByDataRole();\r\n }\r\n } else {\r\n manageLoadingByDataRole();\r\n }\r\n\r\n renderingEnd();\r\n\r\n //resolve(result);\r\n }.bind(self, allowed.typeName)).catch(function (_dataRole) {\r\n //reject();\r\n //console.log('reject promesa: ' + dataRole);\r\n renderingEnd();\r\n }.bind(self, allowed.typeName));\r\n } else {\r\n console.log('Falta implementación del método parser');\r\n }\r\n });\r\n }\r\n else {\r\n self.lastPattern = \"\";\r\n\r\n self.cleanMap();\r\n }\r\n };\r\n\r\n var setQueryableFeatures = function (features) {\r\n const self = this;\r\n\r\n if (features && features.length > 0) {\r\n const setShowPopup = function (features) {\r\n for (var i = 0; i < features.length; i++) {\r\n if (features[i].showsPopup != self.queryableFeatures)\r\n features[i].showsPopup = self.queryableFeatures;\r\n }\r\n };\r\n setShowPopup(features);\r\n // salta el evento con la primera feature y es la que llega aquí pero se pintan más y no asignamos el showPopup a todas \r\n setShowPopup(self.layer.features);\r\n }\r\n };\r\n ctlProto._goToResult = function (id, dataRole) {\r\n const self = this;\r\n\r\n self.toShare = { id: id, dataRole: dataRole };\r\n\r\n var goTo = null;\r\n\r\n //02/03/2020 cuando selecciona un elemento abortamos peticiones pendientes\r\n if (self.searchRequestsAbortController) {\r\n self.searchRequestsAbortController.abort();\r\n }\r\n\r\n return new Promise(function (resolve, reject) {\r\n if (!self.loading)\r\n self.loading = self.map.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n\r\n var wait;\r\n wait = self.loading.addWait();\r\n\r\n // en pantallas pequeñas, colapsamos el panel de herramientas\r\n if (matchMedia('(max-width: 30em)').matches) {\r\n self.textInput.blur();\r\n self.map.trigger(Consts.event.TOOLSCLOSE);\r\n }\r\n\r\n self.cleanMap();\r\n\r\n var customSearchType = false;\r\n\r\n for (var i = 0, ii = self.allowedSearchTypes.length; i < ii; i++) {\r\n const allowed = self.allowedSearchTypes[i];\r\n if (!self.availableSearchTypes[allowed.typeName]) {\r\n\r\n if (allowed.goTo) {\r\n customSearchType = true;\r\n\r\n goTo = allowed.goTo.call(self, id);\r\n if (goTo !== null) {\r\n break;\r\n }\r\n } else {\r\n console.log('Falta implementación del método goTo');\r\n }\r\n\r\n } else {\r\n\r\n const dr = dataRole || self.getElementOnSuggestionList.call(self, id).dataRole;\r\n if (dr) {\r\n const searchType = self.getSearchTypeByRole(dr);\r\n\r\n if (self.availableSearchTypes[dr] && searchType && searchType.goTo) {\r\n goTo = searchType.goTo.call(self, id, dr);\r\n if (goTo !== null) {\r\n break;\r\n }\r\n } else if (!self.availableSearchTypes[dr] && searchType && searchType.goTo) {\r\n customSearchType = true;\r\n\r\n goTo = searchType.goTo.call(self, id, dr);\r\n if (goTo !== null) {\r\n break;\r\n }\r\n } else {\r\n console.log('Falta implementación del método goTo');\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.loading.removeWait(wait);\r\n\r\n if (goTo) {\r\n self.getLayer().then(function (layer) {\r\n var i;\r\n switch (true) {\r\n case goTo.params.type === Consts.layerType.VECTOR:\r\n for (i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(layer, self.WFS_TYPE_ATTRS[i])) {\r\n delete layer[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n }\r\n break;\r\n case goTo.params.type === Consts.layerType.WFS:\r\n for (i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n layer[self.WFS_TYPE_ATTRS[i]] = goTo.params[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n layer.type = goTo.params.type;\r\n\r\n const onFeaturesAdd = function (e) {\r\n if (e.layer === self.layer) {\r\n self.map.off(Consts.event.FEATURESADD, onFeaturesAdd);\r\n setQueryableFeatures.call(self, e.features);\r\n }\r\n };\r\n self.map.on(Consts.event.FEATURESADD, onFeaturesAdd);\r\n\r\n const layerEventHandler = function (e) {\r\n if (e.layer === layer) {\r\n self.map.off(Consts.event.LAYERUPDATE, layerEventHandler);\r\n // Salta cuando se pinta una feature que no es de tipo API porque la gestión de estilos salta antes (no es controlable)\r\n self.map.one(Consts.event.FEATURESADD, function (e) {\r\n if (e.layer === layer) {\r\n if (!e.layer.features || e.layer.features.length === 0 && e.layer.wrap.layer.getSource().getFeatures()) {\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n var bounds = e.layer.wrap.layer.getSource().getExtent();\r\n var radius = e.layer.map.options.pointBoundsRadius;\r\n\r\n if (bounds[2] - bounds[0] === 0) {\r\n bounds[0] = bounds[0] - radius;\r\n bounds[2] = bounds[2] + radius;\r\n }\r\n if (bounds[3] - bounds[1] === 0) {\r\n bounds[1] = bounds[1] - radius;\r\n bounds[3] = bounds[3] + radius;\r\n }\r\n e.layer.map.setExtent(bounds);\r\n\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (self.map.on3DView && !self.loadingState) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self.map._on3DZoomTo({ extent: bounds, layer: e.layer });\r\n }\r\n }\r\n else if (e.layer.features && e.layer.features.length > 0) {\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (!self.loadingState) {\r\n self.layer.map.zoomToFeatures(e.layer.features);\r\n }\r\n\r\n self.map.trigger(Consts.event.FEATURESADD, { layer: self.layer, features: self.layer.features });\r\n\r\n } else if (e.layer.features && e.layer.features.length === 0 && goTo.params.type === Consts.layerType.WFS) {\r\n self.resultsList.inner = goTo.emptyResultHTML;\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n self.map.trigger(Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n }\r\n\r\n self.loading.removeWait(wait);\r\n });\r\n\r\n if (e.layer.features && e.layer.features.length > 0) {\r\n self.resultsList.classList.add(Consts.classes.HIDDEN);\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (!self.loadingState) {\r\n self.layer.map.zoomToFeatures(self.layer.features);\r\n }\r\n\r\n self.map.trigger(Consts.event.FEATURESADD, { layer: self.layer, features: self.layer.features });\r\n\r\n self.loading.removeWait(wait);\r\n } else if (e.layer.features && e.layer.features.length === 0 && goTo.params.type === Consts.layerType.WFS) {\r\n self.resultsList.innerHTML = goTo.emptyResultHTML;\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n if (!(e.newData && e.newData.features && e.newData.features.length > 0)) {\r\n self.map.trigger(Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n\r\n self.loading.removeWait(wait);\r\n }\r\n\r\n resolve(goTo);\r\n }\r\n };\r\n self.map.on(Consts.event.LAYERUPDATE, layerEventHandler);\r\n layer.wrap.reloadSource();\r\n });\r\n } else {\r\n reject(Error('Method goTo has no implementation'));\r\n if (!customSearchType) {\r\n self.map.trigger(Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.goToResult = function (id, dataRole) {\r\n var self = this;\r\n // si está habilitada\r\n if (self.getSearchTypeByRole(dataRole)) {\r\n return self._goToResult(id, dataRole);\r\n // si no está habilitada pero está disponible\r\n } else if (self.availableSearchTypes[dataRole]) {\r\n self.addAllowedSearchType(dataRole, self.availableSearchTypes[dataRole], self);\r\n return self._goToResult(id, dataRole);\r\n } else {\r\n alert('No se reconoce el tipo de búsqueda: ' + dataRole);\r\n }\r\n };\r\n\r\n var drawPoint = function (id) {\r\n var self = this;\r\n\r\n let wait = self.loading.addWait();\r\n\r\n var point = self.getPoint(id);\r\n var title;\r\n var promise;\r\n\r\n if (point) {\r\n title = self.getLabel(id);\r\n promise = self.layer.addMarker(point, TC.Util.extend({}, self.map.options.styles.point, { title: title, group: title }));\r\n } else {\r\n var match = /^Lat((?:[+-]?)\\d+(?:\\.\\d+)?)Lon((?:[+-]?)\\d+(?:\\.\\d+)?)$/.exec(id);\r\n id = self.LAT + match[2] + self.LON + match[1];\r\n point = self.getPoint(id);\r\n\r\n if (point) {\r\n title = self.getLabel(id);\r\n promise = self.layer.addMarker(point, TC.Util.extend({}, self.map.options.styles.point, { title: title, group: title }));\r\n\r\n self.textInput.value = title;\r\n }\r\n }\r\n const promiseTemp = new Promise((resolve) => {\r\n setTimeout(() => { resolve(); },100)\r\n })\r\n Promise.all([promise, promiseTemp]).then(function (param) {\r\n self.map.trigger(Consts.event.LAYERUPDATE, {\r\n layer: self.layer, newData: param[0]\r\n });\r\n\r\n self.map.trigger(Consts.event.FEATURESADD, {\r\n layer: self.layer, features: [param[0]]\r\n });\r\n \r\n\r\n self.map.zoomToFeatures([param[0]]);\r\n\r\n self.loading.removeWait(wait);\r\n });\r\n\r\n };\r\n ctlProto.goToCoordinates = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n if (/^X([-+]?\\d+(?:[\\.\\,]\\d+)?)Y([-+]?\\d+(?:[\\.\\,]\\d+)?)$/.test(id) || /^Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.test(id)) {\r\n\r\n goTo.params = {\r\n type: Consts.layerType.VECTOR,\r\n styles: {\r\n marker: {\r\n url: self.layerStyleFN.bind(self, 'marker', 'url', true)\r\n }\r\n }\r\n };\r\n\r\n goTo.emptyResultHTML = '
  • ' + self.OUTBBX_LABEL + '
  • ';\r\n\r\n drawPoint.call(self, id);\r\n\r\n return goTo;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.goToCadastralRef = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var regex = new RegExp(\"^\" + self.MUN + \"(\\\\d+)\" + self.POL + \"(\\\\d{1,2})\" + self.PAR + \"{1}(\\\\d{1,4})\");\r\n if (regex.test(id)) {\r\n var match = regex.exec(id);\r\n\r\n var type = self.getSearchTypeByRole(Consts.searchType.CADASTRAL);\r\n\r\n goTo.params = {\r\n type: Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.featureType,\r\n properties: new TC.filter.and(\r\n new TC.filter.equalTo(type.queryProperties.firstQueryWord, match[1].trim()),\r\n new TC.filter.equalTo(type.queryProperties.secondQueryWord, match[2].trim()),\r\n new TC.filter.equalTo(type.queryProperties.thirdQueryWord, match[3].trim())),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
  • ' + self.EMPTY_RESULTS_LABEL + '
  • ';\r\n\r\n return goTo;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.goToRoad = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(Consts.searchType.ROAD);\r\n\r\n goTo.params = {\r\n type: Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
  • ' + self.EMPTY_RESULTS_LABEL + '
  • ';\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.goToMilestone = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(Consts.searchType.ROADMILESTONE);\r\n\r\n goTo.params = {\r\n type: Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
  • ' + self.EMPTY_RESULTS_LABEL + '
  • ';\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.goToStringPattern = function (id, dataRole) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(dataRole);\r\n\r\n goTo.params = {\r\n type: Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.getPoint = function (pattern) {\r\n var self = this;\r\n var isMapGeo = self.map.wrap.isGeo();\r\n var point;\r\n var match = /^X([-+]?\\d+(?:\\.\\d+)?)Y([-+]?\\d+(?:\\.\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[1]), parseFloat(match[2])];\r\n if (isMapGeo) {\r\n point = TC.Util.reproject(point, self.map.options.utmCrs, self.map.crs);\r\n }\r\n }\r\n else {\r\n match = /^Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[2]), parseFloat(match[1])];\r\n if (!isMapGeo) {\r\n return TC.Util.reproject(point, self.map.options.geoCrs, self.map.crs);\r\n }\r\n }\r\n\r\n match = /^Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[2]), parseFloat(match[1])];\r\n if (!isMapGeo) {\r\n return TC.Util.reproject(point, self.map.options.geoCrs, self.map.crs);\r\n }\r\n }\r\n }\r\n\r\n return point;\r\n };\r\n\r\n ctlProto.insideLimit = function (point) {\r\n var self = this;\r\n var getIntersectsBounds = function (extent, point) {\r\n if (extent instanceof Array)\r\n return point[0] >= extent[0] && point[0] <= extent[2] && point[1] >= extent[1] && point[1] <= extent[3];\r\n else return true;\r\n };\r\n\r\n if (getIntersectsBounds(self.map.options.maxExtent, point)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n ctlProto.getPattern = function () {\r\n var self = this;\r\n return self.textInput.value;\r\n };\r\n\r\n ctlProto.getLabel = function (id) {\r\n var self = this;\r\n var result = id;\r\n var locale = TC.Util.getMapLocale(self.map);\r\n\r\n const geoCoordsLabel = function (result, match) {\r\n let parsedCoords = TC.Util.parseCoords(match[1] + ',' + match[3]);\r\n result = result.replace(match[1], parsedCoords[0].value.toLocaleString(locale, { minimumFractionDigits: Consts.DEGREE_PRECISION, maximumFractionDigits: Consts.DEGREE_PRECISION }));\r\n result = result.replace(match[3], parsedCoords[1].value.toLocaleString(locale, { minimumFractionDigits: Consts.DEGREE_PRECISION, maximumFractionDigits: Consts.DEGREE_PRECISION }));\r\n\r\n return result;\r\n };\r\n\r\n if (id.match(new RegExp('^(?:' + self.LAT + '[-\\\\d])|(?:' + self.UTMX + '[-+]?[\\\\d])'))) {\r\n result = result.replace(self.LAT, self.LAT_LABEL).replace(self.LON, ' ' + self.LON_LABEL).replace(self.UTMX, self.UTMX_LABEL).replace(self.UTMY, ' ' + self.UTMY_LABEL);\r\n let match = result.match(new RegExp('^' + self.LAT_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LON_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n result = geoCoordsLabel(result, match);\r\n }\r\n\r\n var localeDecimalSeparator = 1.1.toLocaleString(locale).substring(1, 2);\r\n match = result.match(new RegExp('^' + self.UTMX_LABEL.trim() + '*\\\\s*([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*' + self.UTMY_LABEL.trim() + '*\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$'));\r\n if (match) {\r\n if (!Number.isInteger(parseFloat(match[1])))\r\n result = result.replace(match[1], match[1].replace('.', localeDecimalSeparator));\r\n if (!Number.isInteger(parseFloat(match[2])))\r\n result = result.replace(match[2], match[2].replace('.', localeDecimalSeparator));\r\n }\r\n\r\n } else if (id.match(new RegExp('^(?:' + self.LON + '[-\\\\d])'))) {\r\n result = result.replace(self.LON, self.LON_LABEL).replace(self.LAT, ' ' + self.LAT_LABEL);\r\n\r\n const match = result.match(new RegExp('^' + self.LON_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LAT_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n result = geoCoordsLabel(result, match);\r\n }\r\n\r\n } else if (id.match(new RegExp('^(?:(\\\\' + self.MUN + '{1})(.*)' + '(\\\\' + self.POL + '{1})' + '(\\\\d{1,2})' + '(\\\\' + self.PAR + '{1})' + '(\\\\d{1,4}))'))) {\r\n const match = id.match(new RegExp('^(?:(\\\\' + self.MUN + '{1})(.*)' + '(\\\\' + self.POL + '{1})' + '(\\\\d{1,2})' + '(\\\\' + self.PAR + '{1})' + '(\\\\d{1,4}))'));\r\n result = self.MUN_LABEL + match[2] + ', ' + self.POL_LABEL + match[4] + ', ' + self.PAR_LABEL + match[6];\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.removePunctuation = function (text) {\r\n text = text || '';\r\n var result = new Array(text.length);\r\n var map = new Map([\r\n ['á', 'a'],\r\n ['à', 'a'],\r\n ['Á', 'A'],\r\n ['À', 'A'],\r\n ['é', 'e'],\r\n ['è', 'e'],\r\n ['É', 'E'],\r\n ['È', 'E'],\r\n ['í', 'i'],\r\n ['ì', 'i'],\r\n ['Í', 'I'],\r\n ['Ì', 'I'],\r\n ['ó', 'o'],\r\n ['ò', 'o'],\r\n ['Ó', 'O'],\r\n ['Ò', 'O'],\r\n ['ú', 'u'],\r\n ['ù', 'u'],\r\n ['ü', 'u'],\r\n ['Ú', 'U'],\r\n ['Ù', 'U'],\r\n ['Ü', 'U']\r\n ]);\r\n for (var i = 0, len = text.length; i < len; i++) {\r\n result[i] = map.get(text.charAt(i)) || text.charAt(i);\r\n }\r\n return result.join('');\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.toShare) {\r\n return {\r\n id: self.id,\r\n searchText: self.textInput && self.textInput.value,\r\n searchResult: JSON.stringify(self.toShare)\r\n };\r\n }\r\n //else if (self.exportsState && self.layer) {\r\n // return {\r\n // id: self.id,\r\n // searchText: self.textInput && self.textInput.value,\r\n // layer: self.layer.exportState({\r\n // exportStyles: false\r\n // })\r\n // };\r\n //}\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n if (state.searchResult) {\r\n let sharedSearchResult = JSON.parse(state.searchResult);\r\n if (sharedSearchResult.id && sharedSearchResult.dataRole) {\r\n if (sharedSearchResult.doZoom) {\r\n self.map.one(Consts.event.FEATURESADD, function (e) {\r\n if (e.layer === self.layer) {\r\n self.layer.map.zoomToFeatures(e.layer.features);\r\n }\r\n });\r\n }\r\n self.loadingState = true;\r\n self.goToResult(sharedSearchResult.id, sharedSearchResult.dataRole).then(function () {\r\n delete self.loadingState;\r\n self.textInput.value = state.searchText;\r\n self.shareButton && self.shareButton.classList.remove(Consts.classes.HIDDEN);\r\n self.loading.reset();\r\n });\r\n } else {\r\n alert('shared results error');\r\n }\r\n }\r\n //else {\r\n // self.textInput.value = state.searchText;\r\n // self.layer.importState(state.layer).then(function () {\r\n // self.layer.features.forEach(function (f) {\r\n // f.setStyle(null); // Los estilos vienen dados exclusivamente por la capa, borramos estilos propios de la feature\r\n // });\r\n // });\r\n //}\r\n };\r\n\r\n})();\r\n\r\n\r\nif (!String.prototype.tcFormat) {\r\n String.prototype.tcFormat = function () {\r\n var args = (arguments || [\"\"])[0];\r\n return this.replace(/{(\\d+)}/g, function (match, number) {\r\n return typeof args[number] !== 'undefined' ?\r\n args[number]\r\n : match\r\n ;\r\n });\r\n };\r\n}\r\n\r\n\r\nif (!String.prototype.splitRemoveWhiteSpaces) {\r\n String.prototype.splitRemoveWhiteSpaces = function (separator) {\r\n var _arr = [];\r\n var arr = this.split(separator);\r\n for (var i = 0; i < arr.length; i++)\r\n if (arr[i].trim().length > 0)\r\n _arr.push(arr[i].trim());\r\n\r\n return _arr;\r\n };\r\n}\r\n\r\n\r\nif (!String.prototype.toCamelCase) {\r\n String.prototype.toCamelCase = function () {\r\n var _value = this.toLowerCase();\r\n var match = this.toLowerCase().match(/[^A-ZÁÉÍÓÚÜÀÈÌÒÙáéíóúüàèìòùa-z0-9_]+(.)/g);\r\n if (match) {\r\n for (var i = 0; i < match.length; i++) {\r\n if (/[-;:.<>\\{\\}\\[\\]\\/\\s()]/g.test(match[i]))\r\n _value = _value.replace(match[i], match[i].toUpperCase());\r\n }\r\n }\r\n\r\n return _value.charAt(0).toUpperCase() + _value.substring(1);\r\n };\r\n}\r\n\r\n\r\nif (!Object.prototype.hasOwnProperty.call(Array.prototype, 'findByProperty')) {\r\n Object.defineProperty(Array.prototype, \"findByProperty\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (propertyName, value) {\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i][propertyName] == value)\r\n return this[i];\r\n }\r\n }\r\n });\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (searchString, position) {\r\n var subjectString = this.toString();\r\n if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n };\r\n}\r\n\r\nconst Search = TC.control.Search;\r\nexport default Search;","import TC from '../../TC';\r\nimport TabContainer from './TabContainer';\r\nTC.control = TC.control || {};\r\nTC.control.SelectContainer = TabContainer;\r\nconst SelectContainer = TC.control.SelectContainer;\r\nexport default SelectContainer;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport MapInfo from './MapInfo';\r\n\r\nTC.control = TC.control || {};\r\n\r\nclass Share extends MapInfo {\r\n MAILTO_MAX_LENGTH = 256;\r\n IFRAME_WIDTH = '600px';\r\n IFRAME_HEIGHT = '450px';\r\n FEATURE_PARAM = 'showfeature';\r\n MOBILEFAV;\r\n NAVALERT;\r\n #dialogDiv;\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.#dialogDiv = Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self.#dialogDiv);\r\n }\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-share';\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n\r\n await super.register.call(self, map);\r\n self.exportsState = true;\r\n\r\n self.MOBILEFAV = self.getLocaleString('mobileBookmarks.instructions');\r\n self.NAVALERT = self.getLocaleString('bookmarks.instructions');\r\n\r\n self.map.on(Consts.event.MAPCHANGE, function (_e) {\r\n const self = this;\r\n const input = self.div.querySelector('.tc-url input[type=text]');\r\n if (input) {\r\n input.dataset.update = true;\r\n }\r\n\r\n delete self.map._controlStatesCache;\r\n }.bind(self));\r\n\r\n //Cuando se añada o borre una capa, comprobamos de nuevo si la URL cumple los requisitos de longitud para habilitar el control\r\n //map.on(Consts.event.MAPLOAD, function () {\r\n // map.on(Consts.event.LAYERREMOVE + ' ' + Consts.event.LAYERADD, function (e) {\r\n // self.generateLink();\r\n // });\r\n //}); \r\n\r\n map.loaded(() => {\r\n if (!self.div.classList.contains(Consts.classes.COLLAPSED)) {\r\n self.update();\r\n }\r\n });\r\n\r\n return self;\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-share.mjs');\r\n const dialogTemplatePromise = import('../templates/tc-ctl-share-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n self.#dialogDiv.innerHTML = await self.getRenderedHtml(self.CLASS + '-dialog', null);\r\n const renderPromise = super.renderData.call(self, { controlId: self.id });\r\n self._set1stRenderPromise(renderPromise);\r\n await renderPromise;\r\n\r\n //Si el navegador no soporta copiar al portapapeles, ocultamos el botón de copiar\r\n if (document.queryCommandSupported && document.queryCommandSupported('copy')) {\r\n self.div.querySelectorAll('button').forEach(function (btn) {\r\n btn.classList.remove('hide');\r\n });\r\n self.div.querySelectorAll('input[type=text]').forEach(function (input) {\r\n delete input.dataset.dataOriginalTitle;\r\n });\r\n }\r\n\r\n self.div.querySelector('h2').addEventListener('click', function (_e) {\r\n self.update();\r\n });\r\n\r\n // Si el SO no es móvil, ocultamos el botón de compartir a WhatsApp\r\n if (!Util.detectMobile()) {\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-whatsapp`).classList.add(Consts.classes.HIDDEN);\r\n }\r\n\r\n self.div.querySelector(`.${self.CLASS}-url-box button.${self.CLASS}-btn-shorten`).addEventListener('click', function (e) {\r\n const btn = e.target;\r\n self.#selectInputField(btn, true);\r\n });\r\n\r\n self.div.querySelectorAll(`.${self.CLASS}-url-box button.${self.CLASS}-btn-copy`).forEach(elm => {\r\n elm.addEventListener('click', async function (e) {\r\n const btn = e.target;\r\n\r\n await self.#selectInputField(btn);\r\n\r\n document.execCommand('copy');\r\n\r\n btn.textContent = self.getLocaleString('copied');\r\n\r\n setTimeout(function () {\r\n btn.textContent = self.getLocaleString('copy');\r\n self.#unselectInputField();\r\n }, 1000);\r\n });\r\n });\r\n\r\n self.div.querySelector('input[type=text]').addEventListener('click', function (e) {\r\n self.#selectInputField(e.target);\r\n });\r\n\r\n //Enviar por e-mail\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-email`).addEventListener('click', async function (_e) {\r\n const url = await self.shortenedLink();\r\n if (url) {\r\n const body = encodeURIComponent(url + \"\\n\");\r\n if (body.length > self.MAILTO_MAX_LENGTH) {\r\n self.map.toast(self.getLocaleString('urlTooLongForMailto'), { type: Consts.msgType.WARNING });\r\n }\r\n window.location.href = 'mailto:?body=' + body;\r\n }\r\n });\r\n\r\n //Generar código QR \r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-qr`).addEventListener(\"click\", function (_e) {\r\n const qrContainer = self.#dialogDiv.querySelector(`.${self.CLASS}-qrcode`);\r\n qrContainer.innerHTML = '';\r\n\r\n if (self.#dialogDiv.querySelector(`.${self.CLASS}-qr-alert`).classList.contains(Consts.classes.HIDDEN)) {\r\n self.makeQRCode(qrContainer, 256).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n Util.showModal(self.#dialogDiv.querySelector(`.${self.CLASS}-qr-dialog`));\r\n }\r\n });\r\n } else {\r\n Util.showModal(self.#dialogDiv.querySelector(`.${self.CLASS}-qr-dialog`));\r\n }\r\n });\r\n\r\n const openSocialMedia = function (win, url, process) {\r\n if (url && url.trim().length > 0) {\r\n win.location.href = process(url);\r\n } else {\r\n TC.error(self.getLocaleString('urlTooLongForShortener'));\r\n win.close();\r\n }\r\n };\r\n\r\n //Compartir en Facebook\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-facebook`).addEventListener(\"click\", function (_e) {\r\n const w = window.open();\r\n self.shortenedLink().then(function (url) {\r\n openSocialMedia(w, url, function (url) {\r\n return \"https://www.facebook.com/sharer/sharer.php?u=\" + encodeURIComponent(url);\r\n });\r\n });\r\n });\r\n\r\n //Compartir en Twitter\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-twitter`).addEventListener(\"click\", function (_e) {\r\n const w = window.open();\r\n self.shortenedLink().then(function (url) {\r\n openSocialMedia(w, url, function (url) {\r\n var titulo = encodeURIComponent(window.document.title ? window.document.title : \"Visor API SITNA\");\r\n return \"https://twitter.com/intent/tweet?text=\" + titulo + \"&url=\" + encodeURIComponent(url);\r\n });\r\n });\r\n });\r\n\r\n //Compartir en Whatsapp\r\n if (Util.detectMobile()) {\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-whatsapp`).addEventListener(\"click\", function (_e) {\r\n self.shortenedLink().then(async function (url) {\r\n var waText = 'whatsapp://send?text=';\r\n if (url !== undefined) {\r\n location.href = waText + encodeURIComponent(url);\r\n } else {\r\n location.href = waText + encodeURIComponent(await self.generateLink());\r\n }\r\n });\r\n });\r\n }\r\n\r\n //Guardar en marcadores\r\n self.div.querySelector(`sitna-button.${self.CLASS}-btn-bookmark`).addEventListener(\"click\", async function (_e) {\r\n var bookmarkURL = await self.generateLink();\r\n var bookmarkTitle = document.title;\r\n\r\n if (Util.detectMobile()) {\r\n // Mobile browsers\r\n alert(self.MOBILEFAV);\r\n } else if (window.sidebar && window.sidebar.addPanel) {\r\n // Firefox version < 23\r\n window.sidebar.addPanel(bookmarkTitle, bookmarkURL, '');\r\n } else if (window.sidebar && /Firefox/i.test(navigator.userAgent) || window.opera && window.print) {\r\n // Firefox version >= 23 and Opera Hotlist \r\n\r\n window.location.href = bookmarkURL;\r\n alert((/Mac/i.test(navigator.userAgent) ? 'Cmd' : 'Ctrl') + self.NAVALERT);\r\n\r\n } else if (window.external && 'AddFavorite' in window.external) {\r\n // IE Favorite\r\n window.external.AddFavorite(bookmarkURL, bookmarkTitle);\r\n } else {\r\n // Other browsers (mainly WebKit - Chrome/Safari) \r\n window.location.href = bookmarkURL;\r\n alert((/Mac/i.test(navigator.userAgent) ? 'Cmd' : 'Ctrl') + self.NAVALERT);\r\n }\r\n });\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n\r\n async #selectInputField(elm, shorten) {\r\n const self = this;\r\n const input = elm.parentElement.querySelector(\"input[type=text]\");\r\n\r\n if (shorten) {\r\n if (input.dataset.update || !input.dataset.shortened) {\r\n const value = await self.shortenedLink();\r\n if (value && value.trim().length > 0) {\r\n\r\n elm.textContent = self.getLocaleString('shortened');\r\n setTimeout(function () {\r\n elm.textContent = self.getLocaleString('shorten');\r\n self.#unselectInputField();\r\n }, 1000);\r\n\r\n delete input.dataset.update;\r\n input.dataset.shortened = true;\r\n input.value = value;\r\n\r\n input.select();\r\n\r\n } else {\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n input.value = await self.generateLink();\r\n }\r\n }\r\n } else {\r\n if (!input.classList.contains('tc-url')) {\r\n input.value = await self.generateIframe();\r\n } else {\r\n if (input.dataset.update) {\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n input.value = await self.generateLink();\r\n }\r\n }\r\n\r\n input.select();\r\n }\r\n }\r\n\r\n #unselectInputField() {\r\n document.getSelection().removeAllRanges();\r\n document.getSelection().addRange(document.createRange());\r\n }\r\n\r\n /*\r\n * Obtiene una URL \"limpia\" para compartir el mapa.\r\n */\r\n getLocation() {\r\n var result = window.location.href;\r\n if (window.location.hash) {\r\n result = result.substr(0, result.indexOf(window.location.hash));\r\n }\r\n return result;\r\n }\r\n\r\n manageMaxLengthExceed(maxLengthExceed) {\r\n const self = this;\r\n\r\n const browserAlert = self.div.querySelector(`.${self.CLASS}-alert`);\r\n //Si la URL sobrepasa el tamaño máximo avisamos que puede fallar en Edge\r\n browserAlert.classList.toggle(Consts.classes.HIDDEN, !maxLengthExceed.browser);\r\n\r\n const qrAlert = self.#dialogDiv.querySelector(`.${self.CLASS}-qr-alert`);\r\n qrAlert.classList.toggle(Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n }\r\n\r\n async generateIframe(url) {\r\n const self = this;\r\n const urlString = url || await self.generateLink();\r\n if (urlString) {\r\n return '';\r\n }\r\n return '';\r\n }\r\n\r\n loadParamFeature() {\r\n const self = this;\r\n let result = null;\r\n const featureToShow = Util.getParameterByName(self.FEATURE_PARAM);\r\n if (featureToShow) {\r\n let featureObj;\r\n try {\r\n featureObj = JSON.parse(decodeURIComponent(escape(window.atob(featureToShow))));\r\n }\r\n catch (error) {\r\n TC.error(self.getLocaleString('sharedFeatureNotValid'), Consts.msgErrorMode.TOAST);\r\n }\r\n if (featureObj && self.map) {\r\n if (featureObj.geom) {\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n type: Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n owner: self,\r\n stealth: true\r\n }).then(function (layer) {\r\n self.paramFeatureLayer = layer;\r\n layer.importState({ features: [featureObj] }).then(function () {\r\n self.map.zoomToFeatures(layer.features);\r\n });\r\n });\r\n }\r\n else {\r\n result = featureObj;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n async update() {\r\n const self = this;\r\n const input = self.div.querySelector('.tc-url input[type=text]');\r\n if (input.value.trim().length === 0) {\r\n const link = await self.generateLink();\r\n self.registerListeners();\r\n input.value = link;\r\n self.div.querySelector('.tc-iframe input[type=text]').value = await self.generateIframe(link);\r\n }\r\n }\r\n\r\n async generateLink() {\r\n const self = this;\r\n const shareIconContainer = self.div.querySelector(`.${self.CLASS}-icons`);\r\n const textboxes = self.div.querySelectorAll(`.${self.CLASS}-url-box tc-textbox`);\r\n const buttons = self.div.querySelectorAll(`.${self.CLASS}-url-box button`);\r\n const alert = self.div.querySelector('.' + self.CLASS + '-alert');\r\n shareIconContainer.classList.add(Consts.classes.LOADING);\r\n textboxes.forEach(tb => tb.disabled = true);\r\n buttons.forEach(btn => {\r\n btn.classList.add(Consts.classes.LOADING);\r\n btn.disabled = true;\r\n });\r\n alert.classList.add(Consts.classes.LOADING);\r\n const result = await MapInfo.prototype.generateLink.call(self);\r\n textboxes.forEach(tb => tb.disabled = false);\r\n buttons.forEach(btn => {\r\n btn.disabled = false;\r\n btn.classList.remove(Consts.classes.LOADING);\r\n });\r\n shareIconContainer.classList.remove(Consts.classes.LOADING);\r\n alert.classList.remove(Consts.classes.LOADING);\r\n return result;\r\n }\r\n\r\n}\r\n\r\nTC.control.Share = Share;\r\nexport default Share;","\r\n/**\r\n * Opciones de control de StreetView.\r\n * @typedef StreetViewOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string} [googleMapsKey] - El control de StreetView hace uso de la API de Google Maps para funcionar. \r\n * Esta propiedad establece la clave de uso asociada al sitio donde está alojada la aplicación que usa la API SITNA. \r\n * No es necesaria para hacer funcionar el control pero es recomendable obtener una para garantizar el servicio por parte de Google.\r\n * \r\n * Puede obtener más información en el [sitio para desarrolladores de Google](https://developers.google.com/maps/documentation/javascript/get-api-key).\r\n * @property {HTMLElement|string} [viewDiv] - Elemento del DOM en el que mostrar la vista de StreetView o valor de atributo id de dicho elemento.\r\n * @example [Ver en vivo](../examples/cfg.StreetViewOptions.html) {@lang html}\r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst StreetView = function () {\r\n var self = this;\r\n self._sv = null;\r\n self._mapActiveControl = null;\r\n\r\n Control.apply(self, arguments);\r\n\r\n self.viewDiv = null;\r\n self._startLonLat = null;\r\n};\r\n\r\nTC.inherit(StreetView, Control);\r\n\r\n(function () {\r\n Consts.url.GOOGLEMAPS = '//maps.googleapis.com/maps/api/js?v=3';\r\n var gMapsUrl = Consts.url.GOOGLEMAPS;\r\n Cfg.proxyExceptions = Cfg.proxyExceptions || [];\r\n Cfg.proxyExceptions.push(Consts.url.GOOGLEMAPS);\r\n\r\n var ctlProto = StreetView.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-sv';\r\n\r\n const dispatchCanvasResize = function () {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent('resize', true, false);\r\n const elm = this.map.div.querySelector('canvas') || window;\r\n elm.dispatchEvent(event);\r\n };\r\n\r\n var preset = function (ctl) {\r\n ctl.div.querySelector('.' + ctl.CLASS + '-btn').classList.add(Consts.classes.CHECKED);\r\n ctl.mapDiv.classList.add(ctl.CLASS + '-active');\r\n };\r\n\r\n var reset = function (ctl) {\r\n const view = ctl.viewDiv;\r\n const onTransitionend = function () {\r\n view.removeEventListener('transitionend', onTransitionend);\r\n dispatchCanvasResize.call(ctl);\r\n };\r\n\r\n view.addEventListener('transitionend', onTransitionend);\r\n\r\n // Por si no salta transitionend\r\n setTimeout(function () {\r\n dispatchCanvasResize.call(ctl);\r\n }, 1000);\r\n\r\n if (ctl.map.on3DView && ctl.ThreeDMarker) {\r\n ctl.ThreeDMarker.show = false;\r\n ctl.map.view3D.getScene().requestRender();\r\n }\r\n else\r\n ctl.layer.clearFeatures();\r\n ctl.div.querySelector('.' + ctl.CLASS + '-btn').classList.remove(Consts.classes.CHECKED);\r\n ctl.div.querySelector('.' + ctl.CLASS + '-drag').classList.remove(Consts.classes.HIDDEN);\r\n ctl.mapDiv.classList.remove(ctl.CLASS + '-active');\r\n ctl._startLonLat = null;\r\n };\r\n\r\n var resolve = function (ctl) {\r\n var result = false;\r\n const btn = ctl.div.querySelector('.' + ctl.CLASS + '-btn');\r\n const drag = ctl.div.querySelector('.' + ctl.CLASS + '-drag');\r\n\r\n var btnRect = btn.getBoundingClientRect();\r\n var dragRect = drag.getBoundingClientRect();\r\n drag.classList.add(Consts.classes.HIDDEN);\r\n if (dragRect.top < btnRect.top || dragRect.top > btnRect.bottom ||\r\n dragRect.left < btnRect.left || dragRect.left > btnRect.right) {\r\n // Hemos soltado fuera del botón: activar StreetView\r\n result = true;\r\n // Precarga de marcadores\r\n var extent = ctl.map.getExtent();\r\n var xy = [extent[2], extent[3]];\r\n if (!ctl.map.on3DView)\r\n for (var i = 0; i < 16; i++) {\r\n ctl.layer.addMarker(xy, {\r\n id: 'pegman',\r\n cssClass: 'tc-marker-sv-' + i,\r\n width: 48,\r\n height: 48,\r\n anchor: [0, 1]\r\n });\r\n }\r\n /////////////////////\r\n // Activamos StreetView\r\n var mapRect = ctl.mapDiv.getBoundingClientRect();\r\n var xpos = (dragRect.left + dragRect.right) / 2 - mapRect.left;\r\n var ypos = dragRect.bottom - mapRect.top;\r\n var coords = ctl.getCoordinateFromPixel([xpos, ypos]);\r\n ctl.callback(coords);\r\n }\r\n else {\r\n reset(ctl);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n if (!self.viewDiv) {\r\n self.viewDiv = TC.Util.getDiv(self.options.viewDiv);\r\n self.viewDiv.classList.add(self.CLASS + '-view', Consts.classes.HIDDEN);\r\n if (!self.options.viewDiv) {\r\n map.div.insertAdjacentElement('beforebegin', self.viewDiv);\r\n }\r\n }\r\n\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n self.mapDiv = self.map.div;\r\n\r\n self.getCoordinateFromPixel = self.map.wrap.getCoordinateFromPixel;\r\n //ahora google pide en la url de google maps una función función global que se llamará una vez que la API de Maps JavaScript se cargue por completo.\r\n let fnCallBackSV = \"SV_\" + (Math.random() + 1).toString(36).substring(7);\r\n\r\n window[fnCallBackSV] = function () {\r\n delete window[fnCallBackSV];\r\n }\r\n const googleMapsKey = self.options.googleMapsKey || map.options.googleMapsKey;\r\n if (googleMapsKey) {\r\n gMapsUrl += '&key=' + googleMapsKey + \"&callback=\" + fnCallBackSV;\r\n }\r\n\r\n self.layer = null;\r\n self.ThreeDMarker = null;\r\n var layerId = self.getUID();\r\n for (var i = 0; i < map.workLayers.length; i++) {\r\n var layer = map.workLayers[i];\r\n if (layer.type === Consts.layerType.VECTOR && layer.id === layerId) {\r\n self.layer = layer;\r\n break;\r\n }\r\n }\r\n if (!self.layer) {\r\n map.loaded(function () {\r\n map.addLayer({\r\n id: layerId,\r\n owner: self,\r\n stealth: true,\r\n type: Consts.layerType.VECTOR\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n });\r\n });\r\n }\r\n\r\n self.renderPromise().then(function () {\r\n import(\"draggabilly\").then(function (module) {\r\n const Draggabilly = module.default;\r\n const drag = new Draggabilly(self.div.querySelector('.' + self.CLASS + '-drag'), {\r\n containment: (self.getMapDiv && self.mapDiv) || self.map.div\r\n });\r\n drag.on('dragStart', function (_e) {\r\n preset(self);\r\n });\r\n drag.on('dragEnd', function (_e) {\r\n resolve(self);\r\n drag.setPosition(0, 0);\r\n });\r\n });\r\n\r\n const view = self.viewDiv;\r\n view.querySelector('.' + self.CLASS + '-btn-close').addEventListener(Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n self.closeView();\r\n }, { passive: true });\r\n }\r\n , function () {\r\n TC.error(\"Error de renderizado StreetView\");\r\n });\r\n\r\n map.on(Consts.event.VIEWCHANGE, function (e) {\r\n const view = e.view;\r\n\r\n if (view === Consts.view.THREED) {\r\n self.mapDiv = this.view3D.container;\r\n self.getCoordinateFromPixel = (coords) => {\r\n const _coords = this.view3D.Coordinates2DTo3D(coords);\r\n return [_coords.lon, _coords.lat];\r\n }\r\n\r\n } else if (view === Consts.view.DEFAULT) {\r\n self.mapDiv = this.div;\r\n self.getCoordinateFromPixel = self.map.wrap.getCoordinateFromPixel;\r\n }\r\n });\r\n map.on(Consts.event.THREED_DRAG, function (e) {\r\n if (e.pickedFeature === self.ThreeDMarker) {\r\n self._startLonLat = e.oldCoords;\r\n self._sv.setPosition({ lng: e.newCoords[0], lat: e.newCoords[1] });\r\n }\r\n })\r\n return result;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-sv.mjs');\r\n const viewTemplatePromise = import('../templates/tc-ctl-sv-view.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-view'] = (await viewTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData(null, function () {\r\n self.getRenderedHtml(self.CLASS + '-view', null).then(function (out) {\r\n //lo normal sería hacer el resolve después de volcar out en viewDiv\r\n //pero a veces fallaba\r\n //no se detonaba, sin dar error alguno\r\n //así que lo arreglo como a mí me gusta:\r\n setTimeout(function () {\r\n self.viewDiv.innerHTML = out;\r\n resolve(self);\r\n }\r\n , 300);\r\n\r\n\r\n //console.log(\"Casi resuelto... \" + out.length);\r\n //self._$viewDiv.html(out);\r\n //if (err)\r\n //{\r\n // TC.error(err);\r\n //}\r\n //resolve(self);\r\n //console.log(\"Resuelto!\");\r\n\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n });\r\n }));\r\n };\r\n\r\n var waitId = 0;\r\n\r\n ctlProto.callback = function (coords) {\r\n var self = this;\r\n var geogCrs = 'EPSG:4326'; \r\n var ondrop = function (feature) {\r\n if (self._sv) {\r\n var bounds = feature.getBounds();\r\n const lonLat = TC.Util.reproject([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2], self.map.getCrs(), geogCrs);\r\n self._sv.setPosition({ lng: lonLat[0], lat: lonLat[1] });\r\n }\r\n };\r\n\r\n var ondrag = function (feature) {\r\n if (self._sv) {\r\n var bounds = feature.getBounds();\r\n self._startLonLat = TC.Util.reproject([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2], self.map.getCrs(), geogCrs);\r\n }\r\n };\r\n\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n waitId = li.addWait(waitId);\r\n }\r\n\r\n const mapDiv = self.mapDiv;\r\n\r\n var setMarker = function (sv, center) {\r\n\r\n self.layer.clearFeatures();\r\n\r\n var xy;\r\n var heading;\r\n if (sv) {\r\n var latLon = sv.getPosition();\r\n xy = TC.Util.reproject([latLon.lng(), latLon.lat()], geogCrs, self.map.getCrs());\r\n heading = sv.getPov().heading;\r\n }\r\n else {\r\n xy = coords;\r\n heading = 0;\r\n }\r\n if (self.map.on3DView) {\r\n self.ThreeDMarker = self.map.view3D.setMarker(xy,\r\n TC.Util.getBackgroundUrlFromCss('tc-marker-sv-' + (Math.round(16.0 * heading / 360) + 16) % 16),\r\n self.ThreeDMarker);\r\n\r\n }\r\n else {\r\n self.map.addMarker(xy, {\r\n cssClass: 'tc-marker-sv-' + (Math.round(16.0 * heading / 360) + 16) % 16,\r\n width: 48,\r\n height: 48,\r\n anchor: [0.4791666666666667, 0.7083333333333333],\r\n layer: self.layer,\r\n showsPopup: false\r\n });\r\n Promise.all(self.map._markerPromises).then(function () {\r\n // Para poder arrastrar a pegman \r\n self.layer.wrap.setDraggable(true, ondrop, ondrag);\r\n });\r\n }\r\n\r\n if (center) {\r\n var setCenter = function () {\r\n if (!self.map.on3DView)\r\n self.map.setCenter(xy);\r\n else {\r\n self.map.view3D.setCenter(xy);\r\n }\r\n };\r\n // Esperamos a que el mapa esté colapsado para centrarnos: ahorramos ancho de banda\r\n if (mapDiv.classList.contains(Consts.classes.COLLAPSED)) {\r\n setCenter();\r\n }\r\n else {\r\n setTimeout(setCenter, 1200);\r\n }\r\n }\r\n };\r\n var changeMarker = function (cssClass) {\r\n if (!self.map.on3DView) {\r\n if (self.layer.features && self.layer.features.length > 0) {\r\n var pegmanMarker = self.layer.features[0];\r\n delete pegmanMarker.options.url;\r\n pegmanMarker.options.cssClass = cssClass\r\n //pegmanMarker.options.cssClass = 'tc-marker-sv-' + (Math.round(16.0 * self._sv.getPov().heading / 360) + 16) % 16;\r\n pegmanMarker.setStyle(pegmanMarker.options);\r\n }\r\n }\r\n else {\r\n self.ThreeDMarker?.setImage(Math.random() * 1000, TC.Util.getBackgroundUrlFromCss(cssClass));\r\n }\r\n\r\n }\r\n\r\n TC.loadJS(\r\n !window.google || !google.maps,\r\n gMapsUrl,\r\n function () {\r\n\r\n if (window.google) {\r\n setMarker();\r\n const view = self.viewDiv;\r\n const lonLat = TC.Util.reproject(coords, self.map.getCrs(), geogCrs);\r\n const mapsLonLat = new google.maps.LatLng(lonLat[1], lonLat[0]);\r\n\r\n // Comprobamos si hay datos de SV en el sitio elegido.\r\n const svService = new google.maps.StreetViewService();\r\n svService.getPanorama({\r\n location: mapsLonLat,\r\n preference: google.maps.StreetViewPreference.BEST\r\n }, function (svPanoramaData, svStatus) {\r\n if (svStatus !== google.maps.StreetViewStatus.OK) {\r\n if (li) {\r\n li.removeWait(waitId);\r\n }\r\n setTimeout(function () { // Timeout para dar tiempo a ocultarse a LoadingIndicator\r\n TC.alert(svStatus === google.maps.StreetViewStatus.ZERO_RESULTS ? self.getLocaleString('noStreetView') : self.getLocaleString('streetViewUnknownError'));\r\n self.layer.wrap.setDraggable(false);\r\n reset(self);\r\n }, 100);\r\n }\r\n else {\r\n const onTransitionend = function (e) {\r\n if (!self._transitioning) {\r\n return;\r\n }\r\n\r\n if (e.propertyName === 'width' || e.propertyName === 'height') {\r\n\r\n self._transitioning = false;\r\n\r\n if (li) {\r\n li.removeWait(waitId);\r\n }\r\n\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n mapDiv.dispatchEvent(resizeEvent);\r\n\r\n dispatchCanvasResize.call(self);\r\n view.removeEventListener('transitionend', onTransitionend);\r\n\r\n var svOptions = {\r\n position: mapsLonLat,\r\n pov: {\r\n heading: 0,\r\n pitch: 0\r\n },\r\n zoom: 1,\r\n fullscreenControl: false,\r\n zoomControlOptions: {\r\n position: google.maps.ControlPosition.LEFT_TOP\r\n },\r\n panControlOptions: {\r\n position: google.maps.ControlPosition.LEFT_TOP\r\n },\r\n imageDateControl: true\r\n };\r\n\r\n if (!self._sv) {\r\n self._sv = new google.maps.StreetViewPanorama(view, svOptions);\r\n google.maps.event.addListener(self._sv, 'position_changed', function () {\r\n setMarker(self._sv, view.classList.contains(Consts.classes.VISIBLE));\r\n });\r\n self.managePOVChange = function () {\r\n var heading\r\n if (self.map.on3DView)\r\n heading = (self._sv.getPov().heading || 360) - self.map.view3D.getCameraData().heading\r\n else {\r\n heading = self._sv.getPov().heading;\r\n }\r\n changeMarker('tc-marker-sv-' + (Math.round(16.0 * heading / 360) + 16) % 16);\r\n }\r\n self.map.on(Consts.event.CAMERACHANGE, self.managePOVChange);\r\n google.maps.event.addListener(self._sv, 'pov_changed', self.managePOVChange);\r\n google.maps.event.addListener(self._sv, 'status_changed', function () {\r\n var svStatus = self._sv.getStatus();\r\n\r\n if (svStatus !== google.maps.StreetViewStatus.OK) {\r\n self._sv.setVisible(false);\r\n TC.alert(svStatus === google.maps.StreetViewStatus.ZERO_RESULTS ? self.getLocaleString('noStreetView') : self.getLocaleString('streetViewUnknownError'));\r\n if (self._startLonLat) {\r\n self._sv.setVisible(true);\r\n self._sv.setPosition({ lng: self._startLonLat[0], lat: self._startLonLat[1] });\r\n }\r\n else {\r\n self.layer.wrap.setDraggable(false);\r\n self.closeView();\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n self._sv.setOptions(svOptions);\r\n self._sv.setVisible(true);\r\n }\r\n }\r\n };\r\n\r\n self._transitioning = true;\r\n view.addEventListener('transitionend', onTransitionend);\r\n\r\n if (!self.options.viewDiv || !mapDiv.classList.contains(Consts.classes.FULL_SCREEN)) {\r\n // No había definida una vista. Para hacer el control compatible con mapas incrustados,\r\n // en este caso a la vista nueva le asignamos el tamaño del mapa.\r\n const mapRect = mapDiv.getBoundingClientRect();\r\n self.viewDiv.style.height = mapRect.height + 'px';\r\n self.viewDiv.style.width = mapRect.width + 'px';\r\n }\r\n const zIndexMap = parseInt(window.getComputedStyle(mapDiv).zIndex, 10);\r\n\r\n mapDiv.classList.add(Consts.classes.COLLAPSED);\r\n mapDiv.style.width = self.options.ovmapW || \"25vh\";\r\n mapDiv.style.height = self.options.ovmapH || \"25vh\";\r\n if (self.map.on3DView)//si es en modo 3d se oculta el mapa 2D para que no interfiera\r\n self.map.div.style.display = \"none\"\r\n view.style.left = '';\r\n view.style.top = '';\r\n view.classList.remove(Consts.classes.HIDDEN);\r\n view.classList.add(Consts.classes.VISIBLE);\r\n\r\n const zIndexView = parseInt(window.getComputedStyle(view).zIndex, 10);\r\n if (zIndexMap <= zIndexView)\r\n mapDiv.style.zIndex = (zIndexView + 1)\r\n\r\n\r\n // Por si no salta transitionend\r\n setTimeout(function () {\r\n onTransitionend({ propertyName: 'width' });\r\n }, 1000);\r\n\r\n const header = document.body.querySelector('header');\r\n if (header) {\r\n header.style.display = 'none';\r\n }\r\n\r\n //apagar lo que sea que esté encendido (probablemente featInfo)\r\n //al cerrar con el aspa, volverá a detonarse StreetView.deactivate()\r\n //que, a su vez, restaurará el control anterior (FeatureInfo)\r\n if (self.map.activeControl) {\r\n self._previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate(true);\r\n }\r\n\r\n setMarker(self._sv);\r\n }\r\n });\r\n }\r\n else {\r\n reset(self);\r\n }\r\n }, false, true);\r\n };\r\n\r\n ctlProto.closeView = function () {\r\n const self = this;\r\n const mapDiv = self.mapDiv;\r\n const view = self.viewDiv;\r\n\r\n const endProcess = function () {\r\n mapDiv.classList.remove(Consts.classes.COLLAPSED);\r\n mapDiv.style.width = mapDiv.style.height = mapDiv.style.zIndex = \"\";\r\n if (self.map.on3DView)//si es en modo 3d se oculta el mapa 2D para que no interfiera\r\n self.map.div.style.display = '';\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n mapDiv.dispatchEvent(resizeEvent); // Para evitar que salga borroso el mapa tras cerrar SV.\r\n self.map.off(Consts.event.CAMERACHANGE, self.managePOVChange);\r\n };\r\n const transitionend = 'transitionend';\r\n const onTransitionend = function (e) {\r\n if (e.propertyName === 'width' || e.propertyName === 'height') {\r\n view.removeEventListener(transitionend, onTransitionend);\r\n endProcess();\r\n }\r\n };\r\n view.removeEventListener(transitionend, onTransitionend);\r\n view.addEventListener(transitionend, onTransitionend);\r\n setTimeout(endProcess, 1000); // backup por si falla la transición.\r\n\r\n if (!self.options.viewDiv) {\r\n // No había definida una vista. Para hacer el control compatible con mapas incrustados,\r\n // en este caso a la vista nueva le habíamos asignado el tamaño del mapa.\r\n self.viewDiv.style.removeProperty('height');\r\n self.viewDiv.style.removeProperty('width');\r\n }\r\n view.classList.add(Consts.classes.HIDDEN);\r\n view.classList.remove(Consts.classes.VISIBLE);\r\n view.style.height = view.style.width = \"\";\r\n self.div.querySelector('.' + self.CLASS + '-drag').classList.remove(Consts.classes.HIDDEN);\r\n self.layer.wrap.setDraggable(false);\r\n reset(self);\r\n self._sv.setVisible(false);\r\n const header = document.body.querySelector('header');\r\n if (header) {\r\n header.style.display = '';\r\n }\r\n\r\n if (self._previousActiveControl) {\r\n self._previousActiveControl.activate();\r\n }\r\n };\r\n})();\r\n\r\nTC.control.StreetView = StreetView;\r\nexport default StreetView;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\nimport Control from '../Control';\r\nimport MapContents from './MapContents';\r\nimport Raster from '../../SITNA/layer/Raster';\r\nimport Vector from '../../SITNA/layer/Vector';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst TOC = function () {\r\n const self = this;\r\n MapContents.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(TOC, MapContents);\r\n\r\n(function () {\r\n var ctlProto = TOC.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-toc';\r\n\r\n var CLICKEVENT = 'click';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = MapContents.prototype.register.call(self, map);\r\n\r\n map.on(Consts.event.EXTERNALSERVICEADDED, function (e) {\r\n self.onExternalServiceAdded(e);\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.onExternalServiceAdded = function (e) {\r\n const self = this;\r\n if (e && e.layer) {\r\n e.layer.map = self.map;\r\n self.map.addLayer(e.layer).then(function (_layer) {\r\n self.updateLayerTree(e.layer);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n self.div.addEventListener(CLICKEVENT, TC.EventTarget.listenerBySelector('input[type=checkbox]', function (e) { // No usamos Consts.event.CLICK porque en iPad los eventos touchstart no van bien en los checkbox\r\n const checkbox = e.target;\r\n var ul = checkbox;\r\n\r\n //Si es un nodo raiz...\r\n if (checkbox.parentElement.dataset.layerId) {\r\n const layer = self.map.getLayer(checkbox.parentElement.dataset.layerId); \r\n //y está chequeado y tiene algún nodo desmarcado\r\n if (checkbox.checked && checkbox.parentElement.querySelectorAll(\"ul input:not(:checked\").length > 0) {\r\n //marcamos todos los checkbox que estén desmarcados\r\n const selectorCSS = \"ul \" + (layer instanceof Raster ? (\"li.\" + self.CLASS + \"-leaf \"):\"\") + \"input:not(:checked)\"; \r\n const uids = Array.from(e.target.parentElement.querySelectorAll(selectorCSS)).map((cb) => {\r\n return cb.parentElement.dataset.layerUid;\r\n });\r\n layer.setNodeVisibility(uids, checkbox.checked); \r\n \r\n } \r\n }\r\n while (ul && !ul.matches('ul.' + self.CLASS + '-wl')) {\r\n ul = ul.parentElement;\r\n }\r\n const lis = [];\r\n var i;\r\n for (i = 0; i < ul.children.length; i++) {\r\n const child = ul.children[i];\r\n if (child.tagName === 'LI') {\r\n lis.push(child);\r\n }\r\n }\r\n for (i = 0; i < lis.length; i++) {\r\n const li = lis[i];\r\n if (li.contains(checkbox)) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n var parent = checkbox;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n //URI: El arbol de capas vecotriales falla si tiene una profuncidad de 2 o mas nodos\r\n while (parent && parent.tagName !== 'LI' && !layer.getNodeVisibility(parent.dataset.layerUid));\r\n const uid = parent.dataset.layerUid;\r\n if (!layer.getVisibility() && checkbox.checked) layer.setVisibility(checkbox.checked);\r\n layer.setNodeVisibility(uid, checkbox.checked);\r\n break;\r\n }\r\n }\r\n\r\n e.stopPropagation();\r\n }));\r\n self.div.addEventListener(Consts.event.MOUSEUP, TC.EventTarget.listenerBySelector('button.' + self.CLASS + '-collapse-btn', function (e) {\r\n e.target.blur();\r\n const li = e.target.parentElement;\r\n if (!li.classList.contains(self.CLASS + '-leaf')) {\r\n li.classList.toggle(Consts.classes.COLLAPSED);\r\n const ul = li.querySelector('ul');\r\n ul.classList.toggle(Consts.classes.COLLAPSED);\r\n e.stopPropagation();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.update = function (layer) {\r\n var self = this;\r\n\r\n var _getCheckbox = function (li) {\r\n for (var i = 0, len = li.children.length; i < len; i++) {\r\n const child = li.children[i];\r\n if (child.matches('input[type=checkbox]')) {\r\n return child;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const li = self.getLayerUIElements().find(ui => ui.dataset.layerId === layer.id);\r\n if (!li) return;\r\n\r\n layer.tree = null;\r\n const tree = layer.getTree(false);\r\n const rootCheck = _getCheckbox(li); \r\n rootCheck.checked = layer.getVisibility();\r\n //si la capa está visible pero alguno de los hijos está oculto le ponemos como indeterminado\r\n if (rootCheck.checked && layer.getNodeVisibility(tree.uid, tree) === Consts.visibility.HAS_VISIBLE) {\r\n rootCheck.checked = false;\r\n rootCheck.indeterminate = true;\r\n }\r\n if (rootCheck.checked && layer.getNodeVisibility(tree.uid, tree) === Consts.visibility.NOT_VISIBLE) {\r\n rootCheck.checked = rootCheck.indeterminate = false;\r\n } \r\n li.querySelectorAll('li').forEach(function (l) {\r\n const checkbox = _getCheckbox(l);\r\n const uid = l.dataset.layerUid;\r\n switch (layer.getNodeVisibility(uid, tree)) {\r\n case Consts.visibility.VISIBLE:\r\n checkbox.checked = true;\r\n checkbox.indeterminate = false;\r\n break;\r\n case Consts.visibility.NOT_VISIBLE:\r\n checkbox.checked = false;\r\n checkbox.indeterminate = false;\r\n break;\r\n case Consts.visibility.NOT_VISIBLE_AT_RESOLUTION:\r\n checkbox.checked = true;\r\n checkbox.indeterminate = false;\r\n break;\r\n case Consts.visibility.HAS_VISIBLE:\r\n checkbox.checked = false;\r\n checkbox.indeterminate = true;\r\n break;\r\n case null:\r\n // Nodo no encontrado, no visible\r\n checkbox.checked = false;\r\n checkbox.indeterminate = true;\r\n break;\r\n default: {\r\n // visibilityState no establecido, miramos isVisible\r\n const node = layer.findNode(uid, tree);\r\n const isVisible = Object.prototype.hasOwnProperty.call(node, \"isVisible\") ? node.isVisible : true;\r\n if (node.children && node.children.length && !(layer instanceof Vector)) {\r\n const isAllChildrenVisibles = node.children.every(c => c.isVisible || (c.visibilityState && c.visibilityState === Consts.visibility.VISIBLE));\r\n const isAllChildrenHidden = node.children.every(c => !c.isVisible || (c.visibilityState && c.visibilityState === Consts.visibility.NOT_VISIBLE));\r\n checkbox.checked = isAllChildrenVisibles;\r\n checkbox.indeterminate = !isAllChildrenVisibles && !isAllChildrenHidden;\r\n }\r\n else {\r\n checkbox.checked = isVisible;\r\n checkbox.indeterminate = false;\r\n }\r\n \r\n }\r\n }\r\n });\r\n Array.from(li.parentElement.querySelectorAll('li:not(.' + self.CLASS + '-leaf)')).reverse().forEach((l) => {\r\n const someChecked = !!li.parentElement.querySelector(\"li[data-layer-uid='\" + l.dataset.layerUid + \"'] > ul > li > input:checked\");\r\n const someNotChecked = !!li.parentElement.querySelector(\"li[data-layer-uid='\" + l.dataset.layerUid + \"'] > ul > li > input:not(:checked)\");\r\n const someIndeterminated = !!li.parentElement.querySelector(\"li[data-layer-uid='\" + l.dataset.layerUid + \"'] > ul > li > input:indeterminate\");\r\n l.querySelector(\"input\").indeterminate = (someChecked && someNotChecked) || someIndeterminated;\r\n l.querySelector(\"input\").checked = someChecked && !someNotChecked && !someIndeterminated;\r\n });\r\n };\r\n\r\n ctlProto.updateScale = function (layer) {\r\n const self = this;\r\n const setVisibilityByScale = function (li, layer) {\r\n if (!li) return;\r\n li.querySelectorAll('li').forEach(function (elm) {\r\n const uid = elm.dataset.layerUid;\r\n elm.classList.toggle(self.CLASS + '-node-notvisible', !layer.isVisibleByScale(uid));\r\n });\r\n };\r\n if (!layer)\r\n self.getLayerUIElements().forEach(function (li) {\r\n setVisibilityByScale(li, self.map.getLayer(li.dataset.layerId));\r\n\r\n });\r\n else\r\n setVisibilityByScale(self.getLayerUIElements().find(ui => ui.dataset.layerId === layer.id), layer); \r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n var self = this;\r\n\r\n if (!layer.isBase && !layer.options.stealth) { \r\n MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n self.div.querySelector('.' + self.CLASS + '-empty').classList.add(Consts.classes.HIDDEN);\r\n self.getRenderedHtml(self.CLASS + '-branch', self.layerTrees[layer.id])\r\n .then(function (out) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n const uid = newLi.dataset.layerUid;\r\n const li = self.div.querySelector('.' + self.CLASS + '-wl li[data-layer-uid=\"' + uid + '\"]') ||\r\n self.div.querySelector('.' + self.CLASS + '-wl li[data-layer-id=\"' + layer.id + '\"]');\r\n if (!li) {\r\n newLi.dataset.layerId = layer.id;\r\n const ul = self.div.querySelector('.' + self.CLASS + '-wl');\r\n //politica de ordenacion según se defina en el config.json\r\n //ul.insertAdjacentElement('afterbegin', newLi);\r\n const index = self.map.workLayers.indexOf(layer);\r\n if (!index) {\r\n ul.insertAdjacentElement('afterbegin', newLi);\r\n }\r\n else {\r\n ul.children[index - 1].insertAdjacentElement('afterend', newLi);\r\n }\r\n\r\n const wl = 'ul.' + self.CLASS + '-wl';\r\n const branch = 'ul.' + self.CLASS + '-branch';\r\n const node = 'li.' + self.CLASS + '-node';\r\n const leaf = 'li.' + self.CLASS + '-leaf';\r\n newLi.querySelectorAll(wl + ' ' + branch + ' ' + branch + ',' + wl + ' ' + branch + ' ' + node).forEach(function (node_) {\r\n if (!node_.matches(leaf)) {\r\n node_.classList.add(Consts.classes.COLLAPSED);\r\n }\r\n });\r\n if (layer instanceof Raster) {\r\n newLi.querySelector(\"input[type='checkbox']\").classList.add(Consts.classes.HIDDEN);\r\n }\r\n } else if (layer instanceof Vector) {\r\n const wl = 'ul.' + self.CLASS + '-wl';\r\n const branch = 'ul.' + self.CLASS + '-branch';\r\n const node = 'li.' + self.CLASS + '-node';\r\n const leaf = 'li.' + self.CLASS + '-leaf';\r\n //guardo los no collapsados\r\n const notCollapsedNodesUid = Array.from(li.querySelectorAll(\"li.tc-ctl-toc-node:not(.tc-ctl-toc-leaf):not(.tc-collapsed)\")).reduce(function (previousValue, currentValue) { \r\n previousValue.push(currentValue.dataset.layerUid);\r\n return previousValue;\r\n }, []);\r\n li.innerHTML = newLi.innerHTML;\r\n li.setAttribute('class', newLi.getAttribute('class')); // Esto actualiza si un nodo deja de ser hoja o pasa a ser hoja\r\n if (!li.dataset.layerId) {\r\n li.dataset.layerId = layer.id;\r\n }\r\n li.querySelectorAll(wl + ' ' + branch + ' ' + branch + ',' + wl + ' ' + branch + ' ' + node).forEach(function (node_) {\r\n //colapso todos los nodos que no son hoja y que previamente no estaban collapsados\r\n if (!node_.matches(leaf) &&\r\n !(node_.tagName === \"LI\" && notCollapsedNodesUid.some(notCollapsedUid => notCollapsedUid === node_.dataset.layerUid) ||\r\n node_.tagName === \"UL\" && notCollapsedNodesUid.some(notCollapsedUid => notCollapsedUid === node_.parentElement.dataset.layerUid)\r\n )) {\r\n node_.classList.add(Consts.classes.COLLAPSED);\r\n }\r\n });\r\n } \r\n \r\n self.update(layer);\r\n self.updateScale(layer);\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n }; \r\n ctlProto.removeLayer = function (layer) {\r\n if (!layer.isBase) { \r\n MapContents.prototype.removeLayer.call(this, layer);\r\n }\r\n };\r\n\r\n ctlProto.updateLayerVisibility = function (layer) {\r\n const self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n if (li.dataset.layerId === layer.id) {\r\n var isHidden = !layer.getVisibility(); \r\n if (isHidden) {\r\n li.querySelectorAll('input[type=checkbox]').forEach(function (checkbox) {\r\n checkbox.checked = !isHidden;\r\n if (layer instanceof Vector) {\r\n layer.setNodeVisibility(checkbox.parentElement.dataset.layerUid, false);\r\n }\r\n });\r\n if (layer instanceof Raster) {\r\n self.map.getLayer(\"idena\").setLayerNames(\"\");\r\n }\r\n }\r\n else {\r\n if (layer instanceof Raster && li.querySelector(\"input.tc-ctl-toc-branch-cb:checked\")) {\r\n layer.setLayerNames(Array.from(li.querySelectorAll('li.' + self.CLASS + '-leaf'))\r\n .reduce((vi, va) => { return vi.concat(va.dataset.layerName) }, []));\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.updateLayerOrder = function (_layer, _oldIdx, _newIdx) {\r\n // Este control no tiene que hacer nada\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-toc.mjs');\r\n const branchTemplatePromise = import('../templates/tc-ctl-toc-branch.mjs');\r\n const nodeTemplatePromise = import('../templates/tc-ctl-toc-node.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-branch'] = (await branchTemplatePromise).default;\r\n template[self.CLASS + '-node'] = (await nodeTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n return Control.prototype.render.call(self, function () {\r\n\r\n var controlOptions = self.options.controls || [];\r\n\r\n if (controlOptions.length > 0) {\r\n var ctl = controlOptions[0];\r\n var newDiv = document.createElement(\"div\");\r\n self.div.appendChild(newDiv);\r\n self.map.addControl(ctl.name, Util.extend({ 'div': newDiv }, ctl.options));\r\n }\r\n\r\n if (Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getLayerUIElements = function () {\r\n const self = this;\r\n const result = [];\r\n const children = self.div.querySelector('ul.' + self.CLASS + '-wl').children;\r\n for (var i = 0, len = children.length; i < len; i++) {\r\n const child = children[i];\r\n if (child.tagName === 'LI') {\r\n result.push(child);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n };\r\n\r\n ctlProto.importState = function (_state) {\r\n };\r\n \r\n})();\r\n\r\nTC.control.TOC = TOC;\r\nexport default TOC;","\r\n/**\r\n * Opciones de un control que contiene pestañas de selección.\r\n * @typedef TabContainerOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [deselectableTabs=false] - Si se establece a `true`, las pestañas se pueden deseleccionar pulsando sobre ellas \r\n * cuando ya estaban seleccionadas previamente.\r\n * @example [Ver en vivo](../examples/cfg.TabContainerOptions.html) {@lang html}\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Container from './Container';\r\n\r\nTC.control = TC.control || {};\r\n\r\nconst TabContainer = function () {\r\n const self = this;\r\n\r\n Container.apply(self, arguments);\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n};\r\n\r\nTC.inherit(TabContainer, Container);\r\n\r\n(function () {\r\n var ctlProto = TabContainer.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-tctr';\r\n\r\n ctlProto.onRender = async function () {\r\n const self = this;\r\n\r\n self.title = self.title || self.getLocaleString(self.options.title || 'moreControls');\r\n self.div.querySelector('h2').innerHTML = self.title;\r\n\r\n self.controlOptions.forEach((ctl, i) => {\r\n let ctlName = \"\";\r\n let ctlOptions = {};\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n if (ctl.name !== undefined && ctl.options !== undefined) {\r\n console.log('Gestionamos config de tabContainer antiguo');\r\n\r\n ctlName = ctl.name;\r\n ctlOptions = ctl.options;\r\n } else {\r\n ctlName = Object.keys(ctl).find(key => key !== \"title\");\r\n ctlOptions = ctl[ctlName];\r\n }\r\n\r\n self._ctlPromises[i] = self.map.addControl(ctlName, TC.Util.extend({\r\n id: self.uids[i],\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + i)\r\n }, ctlOptions));\r\n });\r\n\r\n const writeTitle = async function (ctl, idx) {\r\n await ctl.renderPromise();\r\n const title = self.getLocaleString(self.controlOptions[idx].title) || ctl.div.querySelector('h2').innerHTML;\r\n var parent = ctl.div;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n while (parent && !parent.matches(self._classSelector));\r\n parent.querySelector(`sitna-tab[for=\"${self.id}-sel-${idx}\"]`).text = title;\r\n };\r\n\r\n const controls = await Promise.all(self._ctlPromises);\r\n for (var i = 0, len = controls.length; i < len; i++) {\r\n const ctl = controls[i];\r\n ctl.containerControl = self;\r\n await writeTitle(ctl, i);\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-tctr.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({\r\n controlId: self.id,\r\n title: self.title,\r\n deselectableTabs: self.options.deselectableTabs,\r\n controls: self.controlOptions\r\n }, function () {\r\n\r\n self.div.querySelectorAll('sitna-tab').forEach(tab => {\r\n const target = tab.target;\r\n\r\n // GLS 24/01/2020 necesitamos un mutation observer para poder quitar el tc.collapsed cuando volvamos de \r\n // otro control ya que no hay click porque la pestaña ya está activa.\r\n const observerTabElementAddCollapsedClass = new MutationObserver(function (mutations) {\r\n mutations.forEach(function (mutation) {\r\n if (mutation.target.classList.contains(Consts.classes.COLLAPSED)) {\r\n mutation.target.classList.remove(Consts.classes.COLLAPSED);\r\n }\r\n });\r\n });\r\n observerTabElementAddCollapsedClass.observe(target, { attributes: true });\r\n\r\n tab.callback = function () {\r\n if (this.selected) {\r\n target.classList.remove(Consts.classes.COLLAPSED);\r\n }\r\n };\r\n });\r\n\r\n // GLS: Si en el register de control se llama a render, ¿por qué volvemos a llamarlo aquí?\r\n //for (var i = 0, len = self._ctlPromises.length; i < len; i++) {\r\n // self.getControl(i).then(function (ctl) {\r\n // ctl.render();\r\n // });\r\n //}\r\n\r\n if (typeof self.defaultSelection === 'number') {\r\n self.div.querySelectorAll('sitna-tab')[self.defaultSelection].onClick();\r\n }\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.selectTab = function (index) {\r\n const self = this;\r\n const tab = self.div.querySelectorAll('sitna-tab')[index];\r\n if (tab) {\r\n tab.selected = true;\r\n }\r\n };\r\n\r\n ctlProto.onControlDisable = function (control) {\r\n const self = this;\r\n self.getControls().then(controls => {\r\n const controlIndex = controls.indexOf(control);\r\n if (controlIndex >= 0) {\r\n let nextControlIndex = controlIndex;\r\n let nextControl = control;\r\n do {\r\n nextControlIndex = (nextControlIndex + 1) % controls.length;\r\n nextControl = controls[nextControlIndex];\r\n }\r\n while (nextControl.isDisabled && nextControl !== control);\r\n if (nextControlIndex !== controlIndex) {\r\n self.selectTab(nextControlIndex);\r\n }\r\n }\r\n });\r\n };\r\n})();\r\n\r\nTC.control.TabContainer = TabContainer;\r\nexport default TabContainer;","/**\r\n * Opciones básicas de vista. \r\n * @_typedef ViewOptions \r\n * @_see SITNA.ThreeDViewOptions\r\n * @_property {HTMLElement|string} [div] - Elemento del DOM en el que crear la vista o valor de atributo id de dicho elemento. \r\n */\r\n\r\n/**\r\n * Configuración adicional necesaria del control 3D en el mapa. Se define el elemento del DOM en el cual se renderizará la vista 3D.\r\n * @typedef ThreeDViewOptions\r\n * @memberof SITNA\r\n * @_extends ViewOptions\r\n * @see SITNA.MapViewOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear la vista o valor de atributo id de dicho elemento. \r\n *\r\n * @example Definición de objeto SITNA.ThreeDViewOptions {@lang javascript}\r\n * { \r\n * div: \"IDElementoDOM\"\r\n * }\r\n * @example [Ver en vivo](../examples/cfg.ThreeDOptions.html) {@lang html}\r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport ThreeDView from '../view/ThreeD';\r\n\r\nTC.control = TC.control || {};\r\nTC.view = TC.view || {};\r\nTC.view.ThreeD = ThreeDView;\r\n\r\nconst ThreeD = function () {\r\n Control.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(ThreeD, Control);\r\n\r\n(function () {\r\n\r\n var ctlProto = ThreeD.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-3d';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = Control.prototype.register.call(self, map);\r\n\r\n map.on(Consts.event.VIEWCHANGE, function (e) {\r\n if (e.view === Consts.view.THREED) { // cargamos la vista 3D desde el estado actualizamos el estado del botón\r\n self.activate();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-3d.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n const self = this;\r\n\r\n return Control.prototype.renderData.call(self, data, function () {\r\n self.button = self.div.querySelector('.' + self.CLASS + '-btn');\r\n\r\n self.button.addEventListener(Consts.event.CLICK, function () {\r\n\r\n if (self.button.disabled) {\r\n return;\r\n }\r\n\r\n if (!self.map.on3DView) {\r\n self.activate();\r\n } else {\r\n self.button.disabled = true;\r\n\r\n TC.view.ThreeD.unapply({\r\n callback: function () {\r\n self.button.setAttribute('title', self.getLocaleString(\"threed.tip\"));\r\n\r\n self.button.classList.remove(Consts.classes.CHECKED);\r\n\r\n self.button.disabled = false;\r\n }\r\n });\r\n }\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n\r\n if (!self.map.on3DView) {\r\n self.button.disabled = true;\r\n }\r\n\r\n self.browserSupportWebGL.call(self);\r\n\r\n const manageButton = function () {\r\n self.button.setAttribute('title', self.getLocaleString('threed.two.tip'));\r\n\r\n self.button.classList.add(Consts.classes.CHECKED);\r\n };\r\n\r\n const removeDisabled = function () {\r\n self.button.disabled = false;\r\n };\r\n\r\n if (!self.map.view3D || !self.map.on3DView) {\r\n TC.view.ThreeD.apply({ map: self.map, options: self.options, getRenderedHtml: self.getRenderedHtml, callback: removeDisabled });\r\n }\r\n\r\n manageButton();\r\n\r\n //Control.prototype.activate.call(self);\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n\r\n Control.prototype.deactivate.call(self);\r\n };\r\n\r\n ctlProto.browserSupportWebGL = function () {\r\n var self = this;\r\n var result = false;\r\n\r\n //Check for webgl support and if not, then fall back to leaflet\r\n if (!window.WebGLRenderingContext) {\r\n // Browser has no idea what WebGL is. Suggest they\r\n // get a new browser by presenting the user with link to\r\n // http://get.webgl.org\r\n result = false;\r\n } else {\r\n var canvas = document.createElement('canvas');\r\n\r\n var webglOptions = {\r\n alpha: false,\r\n stencil: false,\r\n failIfMajorPerformanceCaveat: true\r\n };\r\n\r\n try {\r\n var gl = canvas.getContext(\"webgl\", webglOptions) ||\r\n canvas.getContext(\"experimental-webgl\", webglOptions) ||\r\n canvas.getContext(\"webkit-3d\", webglOptions) ||\r\n canvas.getContext(\"moz-webgl\", webglOptions);\r\n if (!gl) {\r\n // We couldn't get a WebGL context without a major performance caveat. Let's see if we can get one at all.\r\n webglOptions.failIfMajorPerformanceCaveat = false;\r\n gl = canvas.getContext(\"webgl\", webglOptions) ||\r\n canvas.getContext(\"experimental-webgl\", webglOptions) ||\r\n canvas.getContext(\"webkit-3d\", webglOptions) ||\r\n canvas.getContext(\"moz-webgl\", webglOptions);\r\n if (!gl) {\r\n // No WebGL at all.\r\n result = false;\r\n } else {\r\n // We can do WebGL, but only with software rendering (or similar).\r\n result = 'slow';\r\n self.isSlower = true;\r\n }\r\n } else {\r\n // WebGL is good to go!\r\n result = true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (result === \"slow\" || !result) {\r\n var warning = result === \"slow\" ? \"threed.slowSupport.supported\" : \"threed.not.supported\";\r\n self.map.toast(self.getLocaleString(warning), {\r\n type: Consts.msgType.WARNING,\r\n duration: 10000\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n };\r\n\r\n})();\r\n\r\nTC.control.ThreeD = ThreeD;\r\nexport default ThreeD;","\r\n/**\r\n * Opciones del editor de capas WFS.\r\n * \r\n * Si se desea que este control pueda funcionar en sesiones sin acceso a Internet, es necesario instalar \r\n * en el ámbito de la aplicación que contiene el visor el _[Service Worker](https://developer.mozilla.org/es/docs/Web/API/Service_Worker_API)_ \r\n * creado para el funcionamiento de este control en modo desconectado.\r\n * Para ello basta con copiar el archivo [tc-cb-service-worker.js](https://raw.githubusercontent.com/sitna/api-sitna/master/TC/workers/tc-cb-service-worker.js) a la carpeta raíz de dicha aplicación.\r\n * @typedef WFSEditOptions\r\n * @extends SITNA.control.ControlOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {SITNA.ElevationOptions|boolean} [downloadElevation=false] - Si se establece a un valor verdadero, el control ofrecerá la opción de añadir elevaciones\r\n * a las geometrías cuando se descarguen las entidades.\r\n * @property {boolean} [highlightChanges=true] - Si se establece a un valor verdadero, se resaltarán en el mapa con estilo distintivo\r\n * las entidades modificadas, con un estilo distinto según el tipo de edición (entidad añadida, modificada o eliminada).\r\n * @property {boolean} [showOriginalFeatures=false] - Si se establece a un valor verdadero, se mostrarán en el mapa las entidades\r\n * modificadas junto con las mismas entidades antes de ser modificadas, para poder establecer comparaciones.\r\n * @property {boolean} [snapping=true] - Si se establece a un valor verdadero, la edición de geometrías tendrá un comportamiento \r\n * en el que los vértices se \"pegarán\" y alinearán con otros vértices y aristas al acercarlos a ellos, a la manera de imanes.\r\n * @property {SITNA.layer.StyleOptions} [styles] - Opciones de los estilos de las entidades editadas, por tipo de geometría.\r\n * @example [Ver en vivo](../examples/cfg.WFSEditOptions.html) {@lang html}\r\n *
    \r\n * \r\n */\r\n\r\nimport localforage from 'localforage';\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport SWCacheClient from './SWCacheClient';\r\nimport Edit from './Edit';\r\nimport Geometry from '../Geometry';\r\nimport Layer from '../../SITNA/layer/Layer';\r\nimport Vector from '../../SITNA/layer/Vector';\r\nimport filter from '../filter';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport MultiPoint from '../../SITNA/feature/MultiPoint';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\n\r\nTC.control = TC.control || {};\r\nTC.Geometry = Geometry;\r\nTC.filter = filter;\r\n\r\n\r\nconst WFSEdit = function () {\r\n const self = this;\r\n\r\n SWCacheClient.apply(this, arguments);\r\n self.serviceWorkerIsRequired = self.options.serviceWorkerIsRequired || false;\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self.layer = null;\r\n //self.feature = self.options.feature ? self.options.feature : null;\r\n self.callback = TC.Util.isFunction(arguments[2]) ?\r\n arguments[2] :\r\n self.options.callback ? self.options.callback : null;\r\n self.layersEditData = {};\r\n self.showsOriginalFeatures = typeof self.options.showOriginalFeatures === 'boolean' ? self.options.showOriginalFeatures : false;\r\n self.highlightsAdded = self.highlightsModified = self.highlightsRemoved = typeof self.options.highlightChanges === 'boolean' ? self.options.highlightChanges : true;\r\n if (!TC.Util.isFunction(self.options.getBeforeEditLayerStyleFunction)) {\r\n self.getBeforeEditLayerStyleFunction = self.getBeforeEditLayerStyle;\r\n }\r\n self.styles = self.options.styles || {\r\n point: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n radius: 6\r\n },\r\n line: {\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n },\r\n polygon: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n };\r\n};\r\n\r\nTC.inherit(WFSEdit, SWCacheClient);\r\n\r\n(function () {\r\n var newFeatureIdNumber = 0;\r\n const getNewFeatureId = function () {\r\n return \"NewFeature.\" + newFeatureIdNumber++;\r\n };\r\n\r\n const setSyncState = function (ctl) {\r\n const layerEditData = ctl.getLayerEditData();\r\n ctl._saveBtn.disabled = !(navigator.onLine && layerEditData && layerEditData.checkedOut) || ctl.isSyncing;\r\n };\r\n\r\n const setEditState = function (ctl, enabled) {\r\n ctl.div.querySelector(ctl._classSelector + '-view').classList.toggle(Consts.classes.HIDDEN, !enabled || !ctl.layer || !(ctl.layer.type === Consts.layerType.WFS || ctl.layer.type === Consts.layerType.WMS));\r\n if (ctl.layer && ctl.layer.wfsLayer) {\r\n const isLayerCropped = TC.filter && TC.filter.Bbox && ctl.layer.wfsLayer.properties instanceof TC.filter.Bbox;\r\n ctl._recropBtn.classList.toggle(Consts.classes.HIDDEN, !isLayerCropped);\r\n }\r\n ctl.div.querySelector(ctl._classSelector + '-edit').classList.toggle(Consts.classes.HIDDEN, !enabled);\r\n };\r\n\r\n const setChangesButtonsState = function (ctl) {\r\n setSyncState(ctl);\r\n const layerEditData = ctl.getLayerEditData();\r\n ctl._discardBtn.disabled = !layerEditData || !layerEditData.checkedOut;\r\n };\r\n\r\n const setChangedState = function (ctl, isChanged) {\r\n if (ctl.layer) {\r\n const layerEditData = ctl.getLayerEditData();\r\n if (typeof isChanged !== 'undefined') {\r\n layerEditData.checkedOut = isChanged;\r\n setChangesButtonsState(ctl);\r\n }\r\n else {\r\n var storagePrefix = getStoragePrefix(ctl);\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n var disabled = true;\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n if (keys[i].indexOf(storagePrefix) === 0) {\r\n disabled = false;\r\n break;\r\n }\r\n }\r\n layerEditData.checkedOut = !disabled;\r\n setChangesButtonsState(ctl);\r\n }\r\n }, err => console.warn(err));\r\n }\r\n }\r\n else {\r\n setChangesButtonsState(ctl);\r\n }\r\n };\r\n\r\n const storeFeature = async function (key, feature) {\r\n var obj;\r\n var geometryType;\r\n switch (true) {\r\n case feature instanceof Polygon:\r\n geometryType = Consts.geom.POLYGON;\r\n break;\r\n case feature instanceof Polyline:\r\n geometryType = Consts.geom.POLYLINE;\r\n break;\r\n case feature instanceof Point:\r\n geometryType = Consts.geom.POINT;\r\n break;\r\n case feature instanceof MultiPolygon:\r\n geometryType = Consts.geom.MULTIPOLYGON;\r\n break;\r\n case feature instanceof MultiPolyline:\r\n geometryType = Consts.geom.MULTIPOLYLINE;\r\n break;\r\n case feature instanceof MultiPoint:\r\n geometryType = Consts.geom.MULTIPOINT;\r\n break;\r\n }\r\n obj = {\r\n id: feature.id || feature.provId,\r\n attributes: feature.data,\r\n type: geometryType,\r\n geometry: feature.geometry\r\n };\r\n try {\r\n await localforage.setItem(key, obj);\r\n return { feature: feature };\r\n }\r\n catch (error) {\r\n throw { feature: feature, error: error };\r\n }\r\n };\r\n\r\n\r\n const deleteFeature = async function (key) {\r\n await localforage.removeItem(key);\r\n return key;\r\n };\r\n\r\n const readFeature = async function (key) {\r\n const value = await localforage.getItem(key);\r\n return {\r\n key: key,\r\n feature: value\r\n };\r\n };\r\n\r\n const getLayerStoreID = function (layer) {\r\n let featureType = layer.options.featureType[0];\r\n if (featureType.indexOf(':') < 0) {\r\n featureType = layer.options.featureNS + ':' + featureType;\r\n }\r\n return featureType + '@' + layer.options.url;\r\n };\r\n\r\n const getStoragePrefix = function (ctl, layer) {\r\n return ctl.LOCAL_STORAGE_KEY_PREFIX + getLayerStoreID(layer || ctl.layer.wfsLayer || ctl.layer);\r\n };\r\n\r\n const getAddedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_ADDED_KEY_PREFIX;\r\n };\r\n\r\n const getModifiedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_MODIFIED_KEY_PREFIX;\r\n };\r\n\r\n const getRemovedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_REMOVED_KEY_PREFIX;\r\n };\r\n\r\n const getLayerTitle = function (layer) {\r\n return layer.getPath ? layer.getPath().join(' • ') : layer.title || layer.id;\r\n };\r\n\r\n const ctlProto = WFSEdit.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-wfsedit';\r\n\r\n ctlProto.LOCAL_STORAGE_KEY_PREFIX = \"TC.offline.edit.\";\r\n ctlProto.LOCAL_STORAGE_ADDED_KEY_PREFIX = \".added.\";\r\n ctlProto.LOCAL_STORAGE_MODIFIED_KEY_PREFIX = \".modified.\";\r\n ctlProto.LOCAL_STORAGE_REMOVED_KEY_PREFIX = \".removed.\";\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n await SWCacheClient.prototype.register.call(self, map);\r\n\r\n window.addEventListener('online', function () {\r\n setSyncState(self);\r\n });\r\n window.addEventListener('offline', function () {\r\n setSyncState(self);\r\n });\r\n\r\n map.loaded(function () {\r\n self._layerSelect.disabled = false;\r\n\r\n if (self.options.layer) {\r\n self.setLayer(self.options.layer);\r\n }\r\n else {\r\n const wfsLayers = map.workLayers.filter(function (elm) {\r\n return elm.type === Consts.layerType.WFS && !elm.options.stealth;\r\n });\r\n if (wfsLayers.length === 1) {\r\n self.setLayer(wfsLayers[0].id);\r\n }\r\n else {\r\n self.setLayer(null);\r\n }\r\n }\r\n\r\n self.showOriginalFeatures(self.showsOriginalFeatures);\r\n });\r\n\r\n map.ready(function () {\r\n map.getControlsByClass('TC.control.WorkLayerManager').forEach(function (ctl) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-edit';\r\n let button = container.querySelector('sitna-toggle.' + className);\r\n if (!button) {\r\n const text = self.getLocaleString('featureEditing');\r\n button = new Toggle();\r\n button.text = text;\r\n button.classList.add(className);\r\n button.checkedIconText = getComputedStyle(document.querySelector(':root'))\r\n .getPropertyValue('--icon-edit')\r\n .replaceAll('\"', '');\r\n button.uncheckedIconText = button.checkedIconText;\r\n button.dataset.layerId = layerId;\r\n const layer = map.getLayer(layerId);\r\n if (layer.type === Consts.layerType.WMS) {\r\n button.classList.add(Consts.classes.LOADING);\r\n layer.getWFSCapabilities()\r\n .catch(() => button.classList.add(Consts.classes.HIDDEN))\r\n .finally(() => button.classList.remove(Consts.classes.LOADING));\r\n }\r\n }\r\n return button;\r\n },\r\n updateEvents: [Consts.event.BEFORELAYERUPDATE, Consts.event.LAYERUPDATE, Consts.event.LAYERERROR, Consts.event.CONTROLACTIVATE, Consts.event.CONTROLDEACTIVATE],\r\n updateFn: function (_e) {\r\n const button = this;\r\n const layer = map.getLayer(button.dataset.layerId);\r\n setTimeout(() => {\r\n button.classList.toggle(Consts.classes.ACTIVE, self.layer === layer);\r\n }, 500);\r\n button.disabled = !layer || layer.isRaster() && layer.names.length !== 1;\r\n },\r\n actionFn: function () {\r\n const button = this;\r\n const layer = map.getLayer(button.dataset.layerId);\r\n const prevLayer = self.layer;\r\n button.classList.remove(Consts.classes.ACTIVE);\r\n if (layer.names && layer.names.length === 1 || !layer.isRaster()) {\r\n if (layer && prevLayer !== layer) {\r\n self.setLayer(layer).then(() => {\r\n //button.classList.toggle(Consts.classes.ACTIVE, self.layer === layer);\r\n self.openEditSession();\r\n });\r\n }\r\n else {\r\n self.setLayer(null);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n });\r\n\r\n self._editPromise = map.addControl('edit', {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-edit`),\r\n styles: self.styles,\r\n downloadElevation: self.options.downloadElevation,\r\n snapping: self.options.snapping\r\n });\r\n\r\n self.editControl = await self._editPromise;\r\n\r\n self.editControl.getAvailableFeaturesToImport = function () {\r\n const candidates = Object.getPrototypeOf(self.editControl).getAvailableFeaturesToImport.call(self.editControl);\r\n const layerEditData = self.getLayerEditData();\r\n return candidates.filter(obj => {\r\n const layer = map.getLayer(obj.id);\r\n return layer !== layerEditData.addedFeaturesLayer &&\r\n layer !== layerEditData.modifiedFeaturesLayer &&\r\n layer !== layerEditData.removedFeaturesLayer &&\r\n layer !== layerEditData.beforeEditLayer;\r\n });\r\n };\r\n self.editControl.importFeatures = function (features) {\r\n const featuresToImport = features || this.featuresToImport || [];\r\n const layerEditData = self.getLayerEditData();\r\n const newFeatures = layerEditData.attributes ? featuresToImport.map(function (feature) {\r\n const properties = {};\r\n for (let key in layerEditData.attributes) {\r\n properties[key] = feature.data[key];\r\n }\r\n return new feature.constructor(feature.geometry, { geometryName: layerEditData.geometryName, data: properties });\r\n }) : features;\r\n Object.getPrototypeOf(self.editControl).importFeatures.call(self.editControl, newFeatures);\r\n };\r\n self.editControl\r\n .on(Consts.event.DRAWEND, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureAdd(e.feature);\r\n }\r\n })\r\n .on(Consts.event.FEATUREMODIFY, function (e) {\r\n const feat = e.feature;\r\n const fid = feat.provId || feat.id;\r\n const storeSuccess = function () {\r\n setChangedState(self, true);\r\n };\r\n const storeFailure = function () {\r\n TC.error(self.getLocaleString('failedWhenSavingModifyOperationInSession'));\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n let storedFeature = layerEditData.addedFeaturesLayer.getFeatureById(fid);\r\n if (storedFeature) {\r\n storedFeature.setCoords(feat.geometry);\r\n storedFeature.setData(feat.getData());\r\n storeFeature(getAddedStoragePrefix(self) + fid, feat).then(storeSuccess, storeFailure);\r\n }\r\n else {\r\n storedFeature = layerEditData.modifiedFeaturesLayer.getFeatureById(fid);\r\n if (storedFeature) {\r\n storedFeature.setCoords(feat.geometry);\r\n storedFeature.setData(feat.getData());\r\n }\r\n else {\r\n layerEditData.modifiedFeaturesLayer.addFeature(self._createAuxFeature(feat));\r\n }\r\n storeFeature(getModifiedStoragePrefix(self) + fid, feat).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n })\r\n .on(Consts.event.FEATUREADD, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureAdd(e.feature);\r\n }\r\n })\r\n .on(Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureRemove(e.feature);\r\n }\r\n });\r\n\r\n map.workLayers.forEach(layer => self.addLayer(layer));\r\n\r\n map\r\n .on(Consts.event.LAYERUPDATE, function (e) {\r\n const layer = e.layer;\r\n if (layer.type === Consts.layerType.WFS && !layer.options.readOnly) {\r\n self.getEditableLayer(layer)\r\n .then(l => self.cacheLayer(l))\r\n .catch(_err => console.log('Layer not editable: ' + layer.id));\r\n }\r\n })\r\n .on(Consts.event.ZOOM, function (_e) {\r\n map.workLayers\r\n .filter(l => l.wfsLayer)\r\n .filter(l => self.layer !== l)\r\n .forEach(function (layer) {\r\n layer.wfsLayer = null;\r\n self.getEditableLayer(layer);\r\n });\r\n })\r\n .on(Consts.event.LAYERADD, function (e) {\r\n self.addLayer(e.layer);\r\n })\r\n .on(Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n if (self._removingLayer === layer) {\r\n return;\r\n }\r\n if (self.layer === layer || layer.wmsLayer && self.layer === layer.wmsLayer) {\r\n self.setLayer(null);\r\n }\r\n const option = self._layerSelect.querySelector(`option[value=\"${layer.id}\"]`);\r\n if (option) {\r\n option.parentElement.removeChild(option);\r\n }\r\n })\r\n .on(Consts.event.LAYERERROR, function (e) {\r\n const layer = e.layer;\r\n if (layer.type === Consts.layerType.WFS && !layer.options.readOnly) {\r\n if (e.reason === Consts.WFSErrors.MAX_NUM_FEATURES) {\r\n map.toast(self.getLocaleString('query.msgTooManyResults', { limit: e.data.limit }), { type: Consts.msgType.WARNING });\r\n }\r\n if (self.layer === layer || self.layer && self.layer.wfsLayer === layer) {\r\n delete self.layersEditData[self.layer.id];\r\n self.setLayer(null);\r\n }\r\n if (layer.wmsLayer) {\r\n map.removeLayer(layer);\r\n layer.wmsLayer.wfsLayer = null;\r\n }\r\n }\r\n });\r\n\r\n return self;\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const module = await import('../templates/tc-ctl-wfsedit.mjs');\r\n self.template = module.default;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n var editLayers = [];\r\n if (self.map) {\r\n for (var i = 0, len = self.map.workLayers.length; i < len; i++) {\r\n var wl = self.map.workLayers[i];\r\n if (wl.type === Consts.layerType.WFS && !wl.options.stealth) {\r\n editLayers.push({\r\n id: wl.id,\r\n title: wl.title || wl.id\r\n });\r\n }\r\n }\r\n }\r\n return self._set1stRenderPromise(Control.prototype.renderData.call(self, {\r\n layers: editLayers,\r\n showOriginalFeatures: self.showsOriginalFeatures,\r\n highlightChanges: self.highlightsAdded || self.highlightsModified || self.highlightsRemoved,\r\n controlId: self.id\r\n }, function () {\r\n\r\n self._layerDiv = self.div.querySelector(self._classSelector + '-layer');\r\n self._layerSelect = self._layerDiv.querySelector(self._classSelector + '-layer-sel');\r\n self._layerSelect.addEventListener('change', function (_e) {\r\n setEditState(self, false);\r\n self.getEditableLayer(self._layerSelect.value)\r\n .then(function (layer) {\r\n self.setLayer(layer.wmsLayer || layer).then(function () {\r\n if (self.layer) {\r\n self.openEditSession();\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n self.setLayer(null);\r\n });\r\n });\r\n\r\n const viewToolsDiv = self.div.querySelector(self._classSelector + '-view');\r\n\r\n self._editingWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-watch`);\r\n self._beforeEditLayerWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-original-watch`);\r\n self._addedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-added-watch`);\r\n self._modifiedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-modified-watch`);\r\n self._removedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-removed-watch`);\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-original-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.showOriginalFeatures(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-added-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightAdded(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-modified-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightModified(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-removed-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightRemoved(e.target.checked);\r\n });\r\n\r\n const colorRegExp = new RegExp(`${self.CLASS}-view-clr-(.+)-${self.id}`);\r\n const onColorClick = function (_e) {\r\n const input = this.parentElement.querySelector('input[type=color]');\r\n const layerEditData = self.getLayerEditData();\r\n const layer = layerEditData[input.id.match(colorRegExp)[1] + 'FeaturesLayer'];\r\n switch (layerEditData.geometryType) {\r\n case Consts.geom.POINT:\r\n input.value = layer.styles.point.strokeColor;\r\n break;\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n input.value = layer.styles.line.strokeColor;\r\n break;\r\n default:\r\n input.value = layer.styles.polygon.strokeColor;\r\n break;\r\n }\r\n input.click();\r\n };\r\n\r\n const onColorChange = function (e) {\r\n const input = e.target;\r\n const layerEditData = self.getLayerEditData();\r\n const prefix = input.id.match(colorRegExp)[1];\r\n const layer = layerEditData[prefix + 'FeaturesLayer'];\r\n const newColor = layerEditData[prefix + 'CustomColor'] = input.value;\r\n switch (layerEditData.geometryType) {\r\n case Consts.geom.POINT:\r\n layer.styles.point.strokeColor = newColor;\r\n break;\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n layer.styles.line.strokeColor = newColor;\r\n break;\r\n default:\r\n layer.styles.polygon.strokeColor = newColor;\r\n layer.styles.polygon.fillColor = newColor;\r\n break;\r\n }\r\n layer.setStyles(layer.styles);\r\n self[`_${prefix}Watch`].src = getLegendImage(layer, layerEditData.geometryType);\r\n };\r\n\r\n const addedColorInputId = `${self.CLASS}-view-clr-added-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${addedColorInputId}\"]`).addEventListener(Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(addedColorInputId).addEventListener('change', onColorChange);\r\n\r\n const modifiedColorInputId = `${self.CLASS}-view-clr-modified-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${modifiedColorInputId}\"]`).addEventListener(Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(modifiedColorInputId).addEventListener('change', onColorChange);\r\n\r\n const removedColorInputId = `${self.CLASS}-view-clr-removed-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${removedColorInputId}\"]`).addEventListener(Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(removedColorInputId).addEventListener('change', onColorChange);\r\n\r\n self._saveBtn = self.div.querySelector(self._classSelector + '-btn-save');\r\n self._saveBtn.addEventListener(Consts.event.CLICK, function () {\r\n TC.confirm(self.getLocaleString('edit.applyEdits.confirm', { layerTitle: getLayerTitle(self.layer) }), function () {\r\n self.applyEdits();\r\n });\r\n }, { passive: true });\r\n \r\n self._discardBtn = self.div.querySelector(self._classSelector + '-btn-discard');\r\n self._discardBtn.addEventListener(Consts.event.CLICK, function () {\r\n TC.confirm(self.getLocaleString('edit.discardEdits.confirm', { layerTitle: getLayerTitle(self.layer) }), function () {\r\n self.discardEdits();\r\n });\r\n }, { passive: true });\r\n\r\n self._recropBtn = self.div.querySelector(`.${self.CLASS}-view button.${self.CLASS}-btn-crop`);\r\n self._recropBtn.addEventListener(Consts.event.CLICK, function () {\r\n if (self.layer) {\r\n const reload = () => {\r\n if (self.layer && self.layer.wfsLayer && TC.filter && TC.filter.Bbox && self.layer.wfsLayer.properties instanceof TC.filter.Bbox) {\r\n const layerEditData = self.getLayerEditData();\r\n self.layer.wfsLayer.properties = new TC.filter.Bbox(null, self.map.getExtent(), self.map.getCRS());\r\n self.layer.wfsLayer.refresh();\r\n if (layerEditData.beforeEditLayer) {\r\n layerEditData.beforeEditLayer.properties = self.layer.wfsLayer.properties;\r\n layerEditData.beforeEditLayer.refresh();\r\n }\r\n }\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n const editedFeatures = layerEditData.addedFeaturesLayer.features.concat(layerEditData.modifiedFeaturesLayer.features, layerEditData.removedFeaturesLayer.features);\r\n if (editedFeatures.length) {\r\n let featuresOutside = false;\r\n const extent = self.map.getExtent();\r\n const bbox = [[extent[0], extent[1]], [extent[0], extent[3]], [extent[2], extent[3]], [extent[2], extent[1]]];\r\n for (var i = 0, ii = editedFeatures.length; i < ii; i++) {\r\n if (!TC.Geometry.intersects(editedFeatures[i].geometry, bbox)) {\r\n featuresOutside = true;\r\n break;\r\n }\r\n }\r\n if (featuresOutside) {\r\n TC.confirm(self.getLocaleString('refreshLayerToCurrentExtent.confirm'), function () {\r\n reload();\r\n });\r\n }\r\n else {\r\n reload();\r\n }\r\n }\r\n else {\r\n reload();\r\n }\r\n \r\n }\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.addLayer = function (layer) {\r\n const self = this;\r\n const appendOption = function (layer) {\r\n const option = document.createElement('option');\r\n option.setAttribute('value', layer.id);\r\n option.innerHTML = getLayerTitle(layer);\r\n self.renderPromise().then(function () {\r\n self._layerSelect.appendChild(option);\r\n });\r\n };\r\n if (!layer.isBase && !layer.options.readOnly && !layer.options.stealth) {\r\n self.getEditableLayer(layer)\r\n .then(function (l) {\r\n // Añadimos opción cuando es una capa WMS con WFS asociado o una capa WFS independiente\r\n if (layer.isRaster() || !l.wmsLayer) {\r\n appendOption(layer);\r\n }\r\n })\r\n .catch((err) => console.log(`Layer ${layer.id} not editable. Reason: ${err.message}`));\r\n }\r\n };\r\n\r\n ctlProto.setLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n\r\n const map = self.map;\r\n const selector = self.div.querySelector(self._classSelector + '-layer-sel');\r\n\r\n layer = map.getLayer(layer);\r\n const mapLayer = map.workLayers.find(l => l === layer);\r\n\r\n const setNewLayer = function () {\r\n if (mapLayer) {\r\n self.getEditableLayer(mapLayer)\r\n .then(function (editableLayer) {\r\n const endProcess = function () {\r\n self.layer = mapLayer;\r\n self._enableEditSerialization(mapLayer)\r\n .then(function () {\r\n self.getEditControl().then(c => {\r\n selector.value = self.layer.id;\r\n c.mode = null;\r\n c.setLayer(editableLayer);\r\n resolve(self.layer);\r\n });\r\n })\r\n .catch((err) => {\r\n self.setLayer(null);\r\n reject(err);\r\n });\r\n };\r\n\r\n if (map.workLayers.indexOf(editableLayer) >= 0) {\r\n endProcess();\r\n }\r\n else {\r\n map.addLayer(editableLayer).then(endProcess);\r\n }\r\n })\r\n .catch(() => {\r\n self.setLayer(null);\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n if (self.layer && self.layer.wfsLayer) {\r\n self._removingLayer = self.layer.wfsLayer;\r\n }\r\n self.getEditControl().then(c => {\r\n setEditState(self, false);\r\n //setChangedState(self, false);\r\n self.closeEditSession()\r\n .then(() => {\r\n selector.value = '';\r\n c.mode = null;\r\n c.setLayer(null);\r\n self.layer = null;\r\n resolve(null);\r\n })\r\n .finally(() => {\r\n delete self._removingLayer;\r\n });\r\n });\r\n }\r\n };\r\n\r\n if (layer === null || !self.layer) {\r\n setNewLayer();\r\n }\r\n else {\r\n if (self.layer.wfsLayer) {\r\n self._removingLayer = self.layer.wfsLayer;\r\n }\r\n self.closeEditSession().then(() => {\r\n if (mapLayer) {\r\n setNewLayer();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctlProto._storeFeatureAdd = function (feature) {\r\n const self = this;\r\n feature.provId = getNewFeatureId();\r\n const layerEditData = self.getLayerEditData();\r\n const newFeature = self._createAuxFeature(feature);\r\n layerEditData.addedFeaturesLayer.addFeature(newFeature);\r\n storeFeature(getAddedStoragePrefix(self) + feature.provId, newFeature).then(function () {\r\n setChangedState(self, true);\r\n //self.map.toast(self.getLocaleString('addOperationSavedInSession'));\r\n }, function () {\r\n TC.error(self.getLocaleString('failedWhenSavingAddOperationInSession'));\r\n });\r\n };\r\n\r\n ctlProto._storeFeatureRemove = function (feature) {\r\n const self = this;\r\n var fid = feature.provId || feature.id;\r\n var storeSuccess = function () {\r\n setChangedState(self);\r\n //self.map.toast(self.getLocaleString('removeOperationSavedInSession'));\r\n };\r\n var storeFailure = function () {\r\n TC.error(self.getLocaleString('failedWhenSavingRemoveOperationInSession'));\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n let storedFeature = layerEditData.addedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n var removedStoragePrefix = getRemovedStoragePrefix(self);\r\n storedFeature = layerEditData.modifiedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n storedFeature = layerEditData.removedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n layerEditData.removedFeaturesLayer.addFeature(self._createAuxFeature(feature));\r\n storeFeature(removedStoragePrefix + fid, feature).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n else {\r\n layerEditData.modifiedFeaturesLayer.removeFeature(storedFeature);\r\n layerEditData.removedFeaturesLayer.addFeature(self._createAuxFeature(feature));\r\n deleteFeature(getModifiedStoragePrefix(self) + fid).then(function () {\r\n storeSuccess();\r\n storeFeature(removedStoragePrefix + fid, feature).then(storeSuccess, storeFailure);\r\n }, storeFailure);\r\n }\r\n }\r\n else {\r\n layerEditData.addedFeaturesLayer.removeFeature(storedFeature);\r\n deleteFeature(getAddedStoragePrefix(self) + fid).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n };\r\n\r\n ctlProto._createAuxFeature = function (feature) {\r\n const self = this;\r\n const fid = feature.provId || feature.id;\r\n const layerEditData = self.getLayerEditData();\r\n const result = new feature.constructor(feature.geometry, { geometryName: layerEditData.geometryName, data: feature.getData() });\r\n result.setStyle(null);\r\n result.setId(fid);\r\n return result;\r\n };\r\n\r\n ctlProto.getEditControl = function () {\r\n const self = this;\r\n return self._editPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.editControl));\r\n });\r\n };\r\n\r\n ctlProto.cacheLayer = async function (layer) {\r\n const self = this;\r\n await self.getServiceWorker();\r\n if (navigator.onLine) {\r\n const gfUrl = layer.wrap.getGetFeatureUrl();\r\n const dftUrl = await layer.getDescribeFeatureTypeUrl();\r\n if (gfUrl && dftUrl) {\r\n await self.createCache(getStoragePrefix(self, layer), {\r\n urlList: [gfUrl, dftUrl]\r\n });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.getFeatureType = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n layer = layer || self.layer;\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n layer.describeFeatureType()\r\n .then(function (attributes) {\r\n self.getEditControl().then(function (editControl) {\r\n const layerEditData = self.getLayerEditData(layer);\r\n // recogemos los atributos no geométricos y definimos la geometría\r\n layerEditData.attributes = {};\r\n let key;\r\n for (key in attributes) {\r\n const attr = attributes[key];\r\n const geometryType = editControl.getGeometryType(attr.type);\r\n if (geometryType) {\r\n layerEditData.geometryName = attr.name;\r\n layerEditData.geometryType = typeof geometryType === 'boolean' ? null : geometryType;\r\n }\r\n else {\r\n layerEditData.attributes[key] = attr;\r\n }\r\n }\r\n for (key in layerEditData.attributes) {\r\n const attr = layerEditData.attributes[key];\r\n attr.type = attr.type.substr(attr.type.indexOf(':') + 1);\r\n }\r\n resolve(layerEditData);\r\n });\r\n })\r\n .catch(function (err) {\r\n reject(err);\r\n })\r\n .finally(() => li && li.removeWait(waitId));\r\n });\r\n };\r\n\r\n ctlProto._addAuxLayersToMap = async function (layer) {\r\n const self = this;\r\n const map = self.map;\r\n layer = layer || self.layer;\r\n const layerEditData = self.getLayerEditData(layer);\r\n const beLayer = layerEditData.beforeEditLayer;\r\n if (beLayer) {\r\n const onLayerUpdate = function (e) {\r\n if (e.layer === beLayer) {\r\n beLayer.setVisibility(self.showsOriginalFeatures);\r\n beLayer.setOpacity(1);\r\n map.off(Consts.event.LAYERUPDATE, onLayerUpdate);\r\n }\r\n };\r\n map.on(Consts.event.LAYERUPDATE, onLayerUpdate);\r\n const afLayer = layerEditData.addedFeaturesLayer;\r\n const mfLayer = layerEditData.modifiedFeaturesLayer;\r\n const rfLayer = layerEditData.removedFeaturesLayer;\r\n await Promise.all([\r\n beLayer.setOpacity(0),\r\n map.addLayer(beLayer),\r\n map.addLayer(afLayer),\r\n map.addLayer(mfLayer),\r\n map.addLayer(rfLayer)\r\n ]);\r\n const editableLayer = await self.getEditableLayer(layer);\r\n let idx = map.layers.indexOf(editableLayer);\r\n afLayer.setVisibility(self.highlightsAdded);\r\n mfLayer.setVisibility(self.highlightsModified);\r\n rfLayer.setVisibility(self.highlightsRemoved);\r\n await map.insertLayer(beLayer, ++idx);\r\n const newIdx = idx + 1;\r\n map.insertLayer(afLayer, newIdx);\r\n map.insertLayer(mfLayer, newIdx);\r\n map.insertLayer(rfLayer, newIdx);\r\n\r\n beLayer.setStyles(self.getBeforeEditLayerStyle(editableLayer));\r\n afLayer.setStyles(self.getAddedFeaturesLayerStyle(editableLayer));\r\n mfLayer.setStyles(self.getModifiedFeaturesLayerStyle(editableLayer));\r\n rfLayer.setStyles(self.getRemovedFeaturesLayerStyle(editableLayer));\r\n self._editingWatch.src = getLegendImage(editableLayer, layerEditData.geometryType);\r\n self._beforeEditLayerWatch.src = getLegendImage(beLayer, layerEditData.geometryType);\r\n self._addedWatch.src = getLegendImage(afLayer, layerEditData.geometryType);\r\n self._modifiedWatch.src = getLegendImage(mfLayer, layerEditData.geometryType);\r\n self._removedWatch.src = getLegendImage(rfLayer, layerEditData.geometryType);\r\n }\r\n else {\r\n throw Error(`No auxiliary layers for ${layer.id}`);\r\n }\r\n };\r\n\r\n ctlProto.openEditSession = function () {\r\n const self = this;\r\n if (!self.layer) {\r\n return Promise.reject(Error('No layer set for editing'));\r\n }\r\n return new Promise(function (resolve, reject) {\r\n\r\n self.getFeatureType() // Obtenemos datos de los atributos y la geometría\r\n .then(function (layerEditData) {\r\n\r\n self.getEditControl().then(function (editControl) {\r\n self.getEditableLayer(self.layer).then(function (editableLayer) {\r\n editControl.setLayer(editableLayer);\r\n switch (layerEditData.geometryType) {\r\n case Consts.geom.MULTIPOLYLINE:\r\n case Consts.geom.MULTIPOLYGON:\r\n editControl.setComplexGeometry(true);\r\n break;\r\n default:\r\n editControl.setComplexGeometry(false);\r\n break;\r\n }\r\n editControl.activate();\r\n setEditState(self, true);\r\n setChangedState(self);\r\n\r\n const modes = [Edit.mode.MODIFY, Edit.mode.OTHER];\r\n switch (layerEditData.geometryType) {\r\n case Consts.geom.POINT:\r\n modes.push(Edit.mode.ADDPOINT);\r\n break;\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n modes.push(Edit.mode.ADDLINE);\r\n //modes.push(Edit.mode.CUT);\r\n break;\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n modes.push(Edit.mode.ADDPOLYGON);\r\n //modes.push(Edit.mode.CUT);\r\n break;\r\n default:\r\n break;\r\n }\r\n editControl.constrainModes(modes);\r\n editControl.mode = Edit.mode.MODIFY;\r\n\r\n self._addAuxLayersToMap()\r\n .then(() => resolve())\r\n .catch((err) => reject(err));\r\n });\r\n });\r\n })\r\n .catch(function (err) {\r\n if (self.layer && self.layer.type === Consts.layerType.VECTOR) {\r\n self.getEditControl().then(function (editControl) {\r\n editControl.activate();\r\n setEditState(self, true);\r\n editControl.mode = Edit.mode.MODIFY;\r\n resolve();\r\n });\r\n }\r\n else {\r\n reject(err);\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.closeEditSession = async function () {\r\n const self = this;\r\n await self.renderPromise();\r\n setChangedState(self, false);\r\n self.getEditControl().then(c => c.deactivate());\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData?.beforeEditLayer) {\r\n self._editingWatch.src = Consts.BLANK_IMAGE;\r\n self._beforeEditLayerWatch.src = Consts.BLANK_IMAGE;\r\n self._addedWatch.src = Consts.BLANK_IMAGE;\r\n self._modifiedWatch.src = Consts.BLANK_IMAGE;\r\n self._removedWatch.src = Consts.BLANK_IMAGE;\r\n const previousLayer = self.layer;\r\n const editableLayer = await self.getEditableLayer(self.layer);\r\n const removePromises = [];\r\n const removeLayer = function (layer) {\r\n if (self.map.workLayers.indexOf(layer) >= 0) {\r\n removePromises.push(self.map.removeLayer(layer));\r\n }\r\n };\r\n removeLayer(layerEditData.beforeEditLayer);\r\n removeLayer(layerEditData.beforeEditLayer);\r\n removeLayer(layerEditData.addedFeaturesLayer);\r\n removeLayer(layerEditData.modifiedFeaturesLayer);\r\n removeLayer(layerEditData.removedFeaturesLayer);\r\n if (previousLayer !== editableLayer) {\r\n previousLayer.wfsLayer = null;\r\n removeLayer(editableLayer);\r\n }\r\n await Promise.all(removePromises);\r\n }\r\n };\r\n\r\n ctlProto.getEditableLayer = async function (layer) {\r\n const self = this;\r\n const notEditableErrorMsg = `Layer ${layer.id} not editable`;\r\n const map = self.map;\r\n layer = map ? map.getLayer(layer) : layer;\r\n if (layer) {\r\n if (layer.type === Consts.layerType.WFS && (layer.wmsLayer || !layer.options.stealth && !layer.options.readOnly)) {\r\n await layer.getCapabilitiesPromise();\r\n return layer;\r\n }\r\n else if (layer.type === Consts.layerType.WMS) {\r\n if (layer.wfsLayer) {\r\n await layer.wfsLayer.getCapabilitiesPromise();\r\n return layer.wfsLayer;\r\n }\r\n else {\r\n const capabilities = await layer.getWFSCapabilities();\r\n //comprobamos que la solo es una capa y existe en el capabilities del WFS\r\n const layers = layer.getDisgregatedLayerNames();\r\n let fullLayerName = layers[0];\r\n let colonIdx = fullLayerName.indexOf(':');\r\n if (colonIdx < 0) {\r\n fullLayerName = await layer.getWFSFeatureType();\r\n colonIdx = fullLayerName.indexOf(':');\r\n }\r\n const prefix = fullLayerName.substr(0, colonIdx);\r\n const shortLayerName = fullLayerName.substring(colonIdx + 1);\r\n if (layers.length !== 1 || Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, shortLayerName)) {\r\n const wfsLayerOptions = {\r\n id: self.getUID(),\r\n type: Consts.layerType.WFS,\r\n url: await layer.getWFSURL(),\r\n properties: map ? new TC.filter.Bbox(null, map.getExtent(), map.getCRS()) : null,\r\n outputFormat: Consts.format.JSON,\r\n title: `${layer.getPath().join(' • ')} - ${self.getLocaleString('featureEditing')}`,\r\n geometryName: 'geom',\r\n featureType: [shortLayerName],\r\n featureNS: prefix,\r\n styles: self.styles,\r\n stealth: true\r\n };\r\n layer.wfsLayer = new Vector(wfsLayerOptions);\r\n layer.wfsLayer.wmsLayer = layer;\r\n return layer.wfsLayer;\r\n }\r\n else {\r\n throw Error(notEditableErrorMsg);\r\n }\r\n }\r\n }\r\n else if (layer.type === Consts.layerType.VECTOR) {\r\n return layer;\r\n }\r\n else {\r\n throw Error(notEditableErrorMsg);\r\n }\r\n }\r\n else {\r\n throw Error('No layer to edit');\r\n }\r\n };\r\n\r\n ctlProto.isLayerEdited = async function (layer) {\r\n const self = this;\r\n const storagePrefix = getStoragePrefix(self, layer);\r\n try {\r\n const keys = await localforage.keys();\r\n if (keys) {\r\n return keys.some(key => key.indexOf(storagePrefix) === 0);\r\n }\r\n return false;\r\n }\r\n catch (err) {\r\n console.warn(err);\r\n return false;\r\n }\r\n };\r\n\r\n ctlProto.getLayerEditData = function (optionalLayer) {\r\n const self = this;\r\n const layer = optionalLayer || self.layer;\r\n if (!layer) {\r\n return null;\r\n }\r\n return self.layersEditData[layer.id] = self.layersEditData[layer.id] || {\r\n checkedOut: false\r\n };\r\n };\r\n\r\n const getLegendImage = function (layer, geometryType) {\r\n switch (geometryType) {\r\n case Consts.geom.POINT:\r\n case Consts.geom.MULTIPOINT:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.point, { geometryType: Consts.geom.POINT });\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.line, { geometryType: Consts.geom.POLYLINE });\r\n default:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.polygon, { geometryType: Consts.geom.POLYGON });\r\n }\r\n };\r\n\r\n ctlProto._enableEditSerialization = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.getEditableLayer(layer)\r\n .then(function (editableLayer) {\r\n\r\n const endProcess = function () {\r\n const layerEditData = self.getLayerEditData(layer);\r\n\r\n const baseTitle = getLayerTitle(layer);\r\n\r\n var beforeEditLayer = layerEditData.beforeEditLayer;\r\n if (!beforeEditLayer) {\r\n beforeEditLayer = layerEditData.beforeEditLayer = new Vector(TC.Util.extend({}, editableLayer.options, {\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('dataBeforeEdits')}`,\r\n readOnly: true,\r\n owner: self,\r\n stealth: true\r\n }));\r\n }\r\n\r\n var addedFeaturesLayer = layerEditData.addedFeaturesLayer;\r\n let aflIsOld = true;\r\n if (!addedFeaturesLayer) {\r\n aflIsOld = false;\r\n addedFeaturesLayer = layerEditData.addedFeaturesLayer = new Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('addedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n var modifiedFeaturesLayer = layerEditData.modifiedFeaturesLayer;\r\n let mflIsOld = true;\r\n if (!modifiedFeaturesLayer) {\r\n mflIsOld = false;\r\n modifiedFeaturesLayer = layerEditData.modifiedFeaturesLayer = new Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('modifiedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n var removedFeaturesLayer = layerEditData.removedFeaturesLayer;\r\n let rflIsOld = true;\r\n if (!removedFeaturesLayer) {\r\n rflIsOld = false;\r\n removedFeaturesLayer = layerEditData.removedFeaturesLayer = new Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('removedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n const featurePromises = [];\r\n if (aflIsOld && mflIsOld && rflIsOld) {\r\n // Existen de antes las capas de adiciones, modificaciones y eliminaciones. Leemos de ahí.\r\n removedFeaturesLayer.features.forEach(function (removedFeature) {\r\n const f = editableLayer.getFeatureById(removedFeature.id);\r\n if (f) {\r\n editableLayer.removeFeature(f);\r\n }\r\n });\r\n modifiedFeaturesLayer.features.forEach(function (modifiedFeature) {\r\n const f = editableLayer.getFeatureById(modifiedFeature.id);\r\n if (f) {\r\n f.setCoords(modifiedFeature.geometry);\r\n f.setData(modifiedFeature.getData());\r\n }\r\n });\r\n addedFeaturesLayer.features.forEach(function (addedFeature) {\r\n if (!editableLayer.getFeatureById(addedFeature.id)) {\r\n featurePromises.push(editableLayer.addFeature(self._createAuxFeature(addedFeature)));\r\n }\r\n });\r\n Promise.all(featurePromises).then(() => {\r\n layerEditData.serializable = true;\r\n resolve(editableLayer);\r\n });\r\n }\r\n else {\r\n // Las capas de adiciones, modificaciones y eliminaciones son nuevas. Leemos de local storage.\r\n const storagePrefix = getStoragePrefix(self, editableLayer);\r\n const addedStoragePrefix = getAddedStoragePrefix(self, editableLayer);\r\n const modifiedStoragePrefix = getModifiedStoragePrefix(self, editableLayer);\r\n const removedStoragePrefix = getRemovedStoragePrefix(self, editableLayer);\r\n //var li = map.getLoadingIndicator();\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n keys\r\n .filter(key => key.indexOf(storagePrefix) === 0)\r\n .forEach(function (key) {\r\n //li && li.addWait(uid);\r\n featurePromises.push(new Promise(function (res, _rej) {\r\n readFeature(key).then(function (obj) {\r\n var id;\r\n var k = obj.key;\r\n if (k.indexOf(removedStoragePrefix) === 0) {\r\n id = k.substr(removedStoragePrefix.length);\r\n const feature = editableLayer.getFeatureById(id);\r\n editableLayer.removeFeature(feature);\r\n removedFeaturesLayer.addFeature(feature).then(() => res(feature));\r\n //li && li.removeWait(uid);\r\n }\r\n else if (k.indexOf(modifiedStoragePrefix) === 0) {\r\n id = k.substr(modifiedStoragePrefix.length);\r\n const feature = editableLayer.getFeatureById(id);\r\n if (feature) {\r\n feature.setCoords(obj.feature.geometry);\r\n feature.setData(obj.feature.attributes);\r\n const newFeature = feature.clone();\r\n newFeature.setId(feature.id);\r\n modifiedFeaturesLayer.addFeature(newFeature).then(() => res(feature));\r\n //li && li.removeWait(uid);\r\n }\r\n else {\r\n res(feature);\r\n }\r\n }\r\n else if (k.indexOf(addedStoragePrefix) === 0) {\r\n id = k.substr(addedStoragePrefix.length);\r\n var idNumber = parseInt(id.substr(id.lastIndexOf('.') + 1));\r\n newFeatureIdNumber = Math.max(newFeatureIdNumber, idNumber + 1);\r\n var addPromise;\r\n switch (obj.feature.type) {\r\n case Consts.geom.POINT:\r\n addPromise = editableLayer.addPoint(obj.feature.geometry);\r\n break;\r\n case Consts.geom.POLYLINE:\r\n addPromise = editableLayer.addPolyline(obj.feature.geometry);\r\n break;\r\n case Consts.geom.POLYGON:\r\n addPromise = editableLayer.addPolygon(obj.feature.geometry);\r\n break;\r\n case Consts.geom.MULTIPOLYLINE:\r\n addPromise = editableLayer.addMultiPolyline(obj.feature.geometry);\r\n break;\r\n case Consts.geom.MULTIPOLYGON:\r\n addPromise = editableLayer.addMultiPolygon(obj.feature.geometry);\r\n break;\r\n default:\r\n break;\r\n }\r\n addPromise.then(function (feat) {\r\n //feat.setStyle(TC.Util.extend({}, layer.styles.line, layer.styles.polygon));\r\n feat.provId = id;\r\n feat.setData(obj.feature.attributes);\r\n const newFeat = feat.clone();\r\n newFeat.setStyle(null);\r\n newFeat.setId(feat.provId);\r\n addedFeaturesLayer.addFeature(newFeat).then(() => res(newFeat));\r\n //li && li.removeWait(uid);\r\n });\r\n }\r\n });\r\n }));\r\n });\r\n }\r\n Promise.all(featurePromises).then(() => {\r\n layerEditData.serializable = true;\r\n resolve(editableLayer);\r\n });\r\n });\r\n }\r\n };\r\n\r\n if (editableLayer.type === Consts.layerType.WFS) {\r\n if (editableLayer.state === Layer.state.IDLE) {\r\n endProcess();\r\n }\r\n else {\r\n const onLayerUpdate = function (e) {\r\n if (e.layer === editableLayer) {\r\n endProcess();\r\n self.map.off(Consts.event.LAYERUPDATE, onLayerUpdate);\r\n }\r\n };\r\n self.map.on(Consts.event.LAYERUPDATE, onLayerUpdate);\r\n }\r\n }\r\n else {\r\n resolve(editableLayer);\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.applyEdits = function () {\r\n const self = this;\r\n if (self.layer) {\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n self.isSyncing = true;\r\n setSyncState(self);\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n // Copiamos modificadas para ponerle el nombre de atributo de geometría descrito en DescribeFeatureType.\r\n const modified = layerEditData.modifiedFeaturesLayer.features.map(function (feature) {\r\n const unmodifiedFeature = layerEditData.beforeEditLayer.features.filter(f => f.id === feature.id)[0];\r\n let newData;\r\n let newGeometry;\r\n if (unmodifiedFeature) {\r\n newGeometry = Geometry.equals(feature.geometry, unmodifiedFeature.geometry) ?\r\n null : feature.geometry;\r\n newData = {};\r\n for (var key in feature.data) {\r\n if (key !== 'id') {\r\n const oldValue = unmodifiedFeature.data[key];\r\n const newValue = feature.data[key];\r\n if (oldValue !== newValue) {\r\n newData[key] = newValue;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n newGeometry = feature.geometry;\r\n newData = feature.data;\r\n }\r\n const result = new feature.constructor(newGeometry, { geometryName: layerEditData.geometryName });\r\n result.setData(newData);\r\n result.setId(feature.id);\r\n return result;\r\n });\r\n self.getEditableLayer(self.layer)\r\n .then(function (l) {\r\n l.applyEdits(layerEditData.addedFeaturesLayer.features, modified, layerEditData.removedFeaturesLayer.features)\r\n .then(function (_response) {\r\n if (self.layer.type === Consts.layerType.WMS) {\r\n self.layer.refresh();\r\n }\r\n layerEditData.beforeEditLayer.clearFeatures();\r\n l.features.forEach(f => {\r\n const beLayerFeatures = layerEditData.beforeEditLayer.features;\r\n beLayerFeatures[beLayerFeatures.length] = f.clone();\r\n });\r\n self.deleteCache(getStoragePrefix(self)).then(function () {\r\n self.cacheLayer(l).finally(function () {\r\n self.isSyncing = false;\r\n li && li.removeWait(waitId);\r\n // Las acciones a realizar a partir de este punto son las mismas que al descartar una edición\r\n self.discardEdits();\r\n self.map.toast(self.getLocaleString('changesSuccessfullySyncedWithServer'), { type: Consts.msgType.INFO });\r\n });\r\n });\r\n })\r\n .catch(function (obj) {\r\n self.isSyncing = false;\r\n setSyncState(self);\r\n li && li.removeWait(waitId);\r\n TC.error(self.getLocaleString('errorSyncingChanges', { code: obj.code, reason: obj.reason }), [Consts.msgErrorMode.TOAST, Consts.msgErrorMode.CONSOLE]);\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.discardEdits = function () {\r\n var self = this;\r\n self._joinedFeatureAttributes = [];\r\n var storagePrefix = getStoragePrefix(self);\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var key = keys[i];\r\n if (key.indexOf(storagePrefix) === 0) {\r\n localforage.removeItem(key);\r\n }\r\n }\r\n if (self.layer) {\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n layerEditData.addedFeaturesLayer.clearFeatures();\r\n layerEditData.modifiedFeaturesLayer.clearFeatures();\r\n layerEditData.removedFeaturesLayer.clearFeatures();\r\n self.editControl.setSelectedFeatures([]);\r\n self.editControl.modifyControl.closeAttributes();\r\n self.getEditableLayer(self.layer).then(l => l.refresh());\r\n }\r\n }\r\n setChangedState(self, false);\r\n }\r\n }, err => console.warn(err));\r\n self.editControl.mode = null;\r\n };\r\n\r\n ctlProto.showOriginalFeatures = function (show) {\r\n const self = this;\r\n self.showsOriginalFeatures = show;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData) {\r\n layerEditData.beforeEditLayer.setVisibility(show);\r\n }\r\n };\r\n\r\n ctlProto.highlightAdded = function (highlight) {\r\n const self = this;\r\n self.highlightsAdded = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.addedFeaturesLayer) {\r\n layerEditData.addedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n ctlProto.highlightModified = function (highlight) {\r\n const self = this;\r\n self.highlightsModified = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.modifiedFeaturesLayer) {\r\n layerEditData.modifiedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n ctlProto.highlightRemoved = function (highlight) {\r\n const self = this;\r\n self.highlightsRemoved = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.removedFeaturesLayer) {\r\n layerEditData.removedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n const getStyleFromFeatureType = function (ctl, layer) {\r\n const result = {};\r\n const layerEditData = ctl.getLayerEditData(layer.wmsLayer || layer);\r\n switch (layerEditData.geometryType) {\r\n case Consts.geom.POLYGON:\r\n case Consts.geom.MULTIPOLYGON:\r\n result.polygon = layer.map.options.styles.polygon;\r\n break;\r\n case Consts.geom.POLYLINE:\r\n case Consts.geom.MULTIPOLYLINE:\r\n result.line = layer.map.options.styles.line;\r\n break;\r\n default:\r\n result.point = layer.map.options.styles.point;\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getBeforeEditLayerStyle = function (layer) {\r\n const self = this;\r\n const getNegativeColor = function (color) {\r\n const rgba = layer.wrap.getRGBA(color);\r\n for (var i = 0; i < 3; i++) {\r\n rgba[i] = 255 - rgba[i];\r\n }\r\n return '#' + (rgba[0] * 65536 + rgba[1] * 256 + rgba[2]).toString(16).padStart(6, '0');\r\n };\r\n\r\n const dash = [1, 3];\r\n const result = TC.Util.extend(true, {}, layer.options.styles || getStyleFromFeatureType(self, layer));\r\n if (result.point) {\r\n result.point.strokeColor = getNegativeColor(result.point.strokeColor);\r\n result.point.lineDash = dash;\r\n }\r\n if (result.line) {\r\n result.line.strokeColor = getNegativeColor(result.line.strokeColor);\r\n result.line.lineDash = dash;\r\n }\r\n if (result.polygon) {\r\n result.polygon.strokeColor = getNegativeColor(result.polygon.strokeColor);\r\n result.polygon.lineDash = dash;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const colorizeLayer = function (ctl, layer, color) {\r\n const result = TC.Util.extend(true, {}, layer.options.styles || getStyleFromFeatureType(ctl, layer));\r\n if (result.point) {\r\n result.point.strokeColor = color;\r\n result.point.fillColor = color;\r\n }\r\n if (result.line) {\r\n result.line.strokeColor = color;\r\n }\r\n if (result.polygon) {\r\n result.polygon.strokeColor = color;\r\n result.polygon.fillColor = color;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.getAddedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.addedCustomColor || '#00ff00');\r\n };\r\n\r\n ctlProto.getModifiedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.modifiedCustomColor || '#ff7f00');\r\n };\r\n\r\n ctlProto.getRemovedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.removedCustomColor || '#ff0000');\r\n };\r\n\r\n})();\r\n\r\nTC.control.WFSEdit = WFSEdit;\r\nexport default WFSEdit;","/// \r\n\r\n/**\r\n * Opciones de control de consultas.\r\n * \r\n * Algunos servidores tienen servicios WMS y WFS que actúan en paralelo, es decir, están alojados dentro del mismo nombre de host y publican las mismas capas.\r\n * Si el control `WFSQuery` está en el mapa, verifica si las capas de servicios WMS están asociadas a un WFS paralelo. Si es así, ofrece un interfaz de usuario\r\n * para poder hacer consultas a la capa en base a los valores de las propiedades de los elementos de la capa. Esta interfaz de usuario es accesible desde el control\r\n * `workLayerManager`.\r\n * @typedef WFSQueryOptions\r\n * @memberof SITNA.control\r\n * @see SITNA.control.MapControlOptions\r\n * @property {SITNA.layer.StyleOptions} [styles] - Opciones de estilo de las geometrías de las entidades resultado de la consulta.\r\n * @property {SITNA.layer.StyleOptions} [highlightStyles] - Opciones de estilo de las geometrías de las entidades resaltadas.\r\n * @example [Ver en vivo](../examples/cfg.WFSQueryOptions.html) {@lang html}\r\n *
    \r\n * \r\n */\r\n\r\nTC.control = TC.control || {};\r\n\r\n/*pollyfill*/\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\nimport filter from '../filter';\r\nimport autocomplete from '../ui/autocomplete';\r\n//cargo los objetos features, si no, no resaltara las geometrías\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\nimport Button from '../../SITNA/ui/Button';\r\n\r\n\r\nTC.control = TC.control || {};\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\nTC.Control = Control;\r\nTC.filter = filter;\r\n\r\nconst WFSQuery = function (_options) {\r\n var self = this;\r\n\r\n Control.apply(this, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.exportsState = true;\r\n\r\n self.styles = self.options.styles;\r\n self.highlightStyles = self.options.highlightStyles || self.options.highLightStyles;\r\n self.download = self.options.download;\r\n self.resultsPanel = null;\r\n self.geometryPanel = null;\r\n self.deletedFeatures = [];\r\n self.styles = TC.Util.extend(true, {\r\n polygon: {\r\n strokeColor: self.DEFAULT_STROKE_COLOR,\r\n strokeWidth: 2, fillColor: \"#000\",\r\n fillOpacity: 0\r\n },\r\n line: {\r\n strokeColor: self.DEFAULT_STROKE_COLOR,\r\n strokeWidth: 2, fillColor: \"#000\"\r\n }\r\n }, self.options.styles);\r\n\r\n const cs = '.' + self.CLASS;\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]',\r\n INTERPOLATION_RADIO: 'input[type=radio][name=finfo-ip-coords]',\r\n INTERPOLATION_DISTANCE: cs + '-dialog-ip-m'\r\n };\r\n};\r\n\r\nTC.inherit(WFSQuery, Control);\r\nTC.mix(WFSQuery, infoShare);\r\n\r\n(function () {\r\n const ctlProto = WFSQuery.prototype;\r\n ctlProto.DEFAULT_STROKE_COLOR = '#0000ff';\r\n\r\n const loadingCssClass = Consts.classes.LOADING;\r\n const hiddenCssClass = Consts.classes.HIDDEN;\r\n const spatialCssClass = 'tc-spatial';\r\n var modalBody = null;\r\n var timer = null;\r\n var timerAutocomplete = null;\r\n var controller = null;\r\n var locale = null;\r\n\r\n const empty = function (node) {\r\n if (node)\r\n while (node.children.length) {\r\n node.removeChild(node.children[0]);\r\n }\r\n };\r\n\r\n const getTemplateObjFromFilter = function (ctl, filter) {\r\n const isSpatial = filter instanceof TC.filter.Spatial;\r\n return {\r\n field: isSpatial ? ctl.getLocaleString('geometry') : filter.propertyName,\r\n opText: ctl.getLocaleString(filterByOperation[filter._abbr].key),\r\n valueToShow: filter._valueToShow,\r\n isSpatial: isSpatial\r\n };\r\n };\r\n\r\n const filterByOperation = {\r\n eq: {\r\n Ctor: TC.filter.equalTo,\r\n key: 'query.equalTo'\r\n },\r\n neq: {\r\n Ctor: TC.filter.notEqualTo,\r\n key: 'query.notEqualTo'\r\n },\r\n gt: {\r\n Ctor: TC.filter.greaterThan,\r\n key: 'query.greaterThan'\r\n },\r\n lt: {\r\n Ctor: TC.filter.lessThan,\r\n key: 'query.lowerThan'\r\n },\r\n gte: {\r\n Ctor: TC.filter.greaterThanOrEqualTo,\r\n key: 'query.greaterThanOrEqualTo'\r\n },\r\n lte: {\r\n Ctor: TC.filter.lessThanOrEqualTo,\r\n key: 'query.lowerThanOrEqualTo'\r\n },\r\n contains: {\r\n Ctor: TC.filter.like,\r\n key: 'query.contains'\r\n },\r\n starts: {\r\n Ctor: TC.filter.like,\r\n key: 'query.startsBy'\r\n },\r\n ends: {\r\n Ctor: TC.filter.like,\r\n key: 'query.endsBy'\r\n },\r\n btw: {\r\n Ctor: TC.filter.between,\r\n key: 'query.equalTo'\r\n },\r\n nbtw: {\r\n key: 'query.notEqualTo'\r\n },\r\n intersects: {\r\n Ctor: TC.filter.like,\r\n key: 'query.intersects'\r\n },\r\n within: {\r\n Ctor: TC.filter.between,\r\n key: 'query.within'\r\n },\r\n empty: {\r\n Ctor: TC.filter.equalTo,\r\n key: 'query.empty'\r\n },\r\n null: {\r\n Ctor: TC.filter.isNull,\r\n key: 'query.empty'\r\n }\r\n };\r\n const _cache = {\r\n current: {\r\n layer: null,\r\n name: null,\r\n capabilities: null,\r\n title: null,\r\n URL: null,\r\n filter:[]\r\n },\r\n queried: null\r\n }\r\n \r\n var _getStyles = function () { return null; };\r\n var _getHighLightStyles = function () { return null; };\r\n var getLocaleString = null;\r\n var type = null;\r\n ctlProto.CLASS = 'tc-ctl-wfsquery';\r\n\r\n var checkInput = function (type) {\r\n var input = document.createElement(\"input\");\r\n input.setAttribute(\"type\", type);\r\n return input.type == type;\r\n };\r\n\r\n var _loadDatePolyFill = function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (typeof IMask !== \"undefined\") {\r\n setTimeout(function () {\r\n resolve();\r\n }, 10);\r\n }\r\n else {\r\n TC.loadJS(true,\r\n [TC.apiLocation + '/lib/polyfill/imask'],\r\n function () {\r\n console.log(\"Imask loaded\");\r\n resolve();\r\n });\r\n }\r\n });\r\n };\r\n var _loadNumberPolyFill = function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (typeof IMask !== \"undefined\") {\r\n setTimeout(function () {\r\n resolve();\r\n }, 10);\r\n }\r\n else {\r\n TC.loadJS(true,\r\n [TC.apiLocation + '/lib/polyfill/imask'],\r\n function () {\r\n console.log(\"Imask loaded\");\r\n resolve();\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _getValue = function (input) {\r\n if (inputMaskNumber) {\r\n return inputMaskNumber.unmaskedValue;\r\n\r\n } else if (dateInputMask) {\r\n //si es texto con mascara de fecha convertierto la fecha de dd/mm/yyyy a yyyy-mm-dd\r\n return dateInputMask.unmaskedValue.substring(4) + \"-\" + dateInputMask.unmaskedValue.substring(2, 4) + \"-\" + dateInputMask.unmaskedValue.substring(0, 2);\r\n }\r\n return input.value;//en el resto de los casos la devuelvo tal cual\r\n\r\n };\r\n var _getValueToShow = function (input) {\r\n if (inputMaskNumber) {\r\n return inputMaskNumber.value;\r\n }\r\n else if (dateInputMask) {\r\n //si es de tipo date devolvemos la fecha en formato dd/mm/yyyy\r\n return dateInputMask.value;\r\n }\r\n else if (input.type === \"date\") {\r\n return new Date(input.value).toLocaleDateString(locale, { timeZone: \"UTC\" });\r\n }\r\n else if (input.type === \"number\") {\r\n var dotOrComma = 1.1.toLocaleString(locale).substring(1, 2);\r\n return input.value.replace(\".\", dotOrComma);\r\n }\r\n return input.value;//en el resto de los casos la devuelvo tal cual\r\n\r\n };\r\n var dateInputMask = null;\r\n var inputMaskNumber = null;\r\n var _createDateMask = function (txtBox) {\r\n if (checkInput(\"date\"))\r\n txtBox.type = \"date\";\r\n else {\r\n txtBox.type = \"search\";\r\n _loadDatePolyFill().then(function () {\r\n //construir el polyfill\r\n dateInputMask = new IMask(txtBox, {\r\n mask: Date,\r\n pattern: !locale || locale === \"es-ES\" ?\r\n 'd/`m/`Y'\r\n : locale === \"eu-ES\" ? 'Y/`m/`d' : 'm/`d/`Y',\r\n lazy: false,\r\n format: function (date) {\r\n var day = date.getDate();\r\n var month = date.getMonth() + 1;\r\n var year = date.getFullYear();\r\n if (day < 10) day = \"0\" + day;\r\n if (month < 10) month = \"0\" + month;\r\n switch (locale) {\r\n case \"eu-ES\":\r\n return [year, month, day].join('/');\r\n case \"en-US\":\r\n return [month, day, year].join('/');\r\n case \"es-ES\":\r\n default:\r\n return [day, month, year].join('/');\r\n }\r\n\r\n },\r\n // define str -> date convertion\r\n parse: function (str) {\r\n switch (locale) {\r\n case \"eu-ES\":\r\n return new Date(str.split('/')[1] + \"/\" + str.split('/')[2] + \"/\" + str.split('/')[0]);\r\n case \"en-US\":\r\n return new Date(str);\r\n case \"es-ES\":\r\n default:\r\n return new Date(str.split('/')[1] + \"/\" + str.split('/')[0] + \"/\" + str.split('/')[2]);\r\n }\r\n\r\n },\r\n blocks: {\r\n d: {\r\n mask: IMask.MaskedRange,\r\n from: 1,\r\n to: 31,\r\n maxLength: 2\r\n },\r\n m: {\r\n mask: IMask.MaskedRange,\r\n from: 1,\r\n to: 12,\r\n maxLength: 2\r\n },\r\n Y: {\r\n mask: IMask.MaskedRange,\r\n from: 1900,\r\n to: 9999\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n var _destroyDateMask = function () {\r\n if (dateInputMask) {\r\n var input = dateInputMask.el.input;\r\n dateInputMask.destroy();\r\n dateInputMask = null;\r\n input.value = \"\";\r\n input.type = \"search\";\r\n }\r\n };\r\n var destroyNumberMask = function () {\r\n if (inputMaskNumber) {\r\n var input = inputMaskNumber.el.input;\r\n inputMaskNumber.destroy();\r\n inputMaskNumber = null;\r\n input.value = \"\";\r\n input.type = \"search\";\r\n }\r\n };\r\n\r\n let _internalGetDataTypes;\r\n var _getDataTypes = function () {\r\n return _internalGetDataTypes();\r\n };\r\n\r\n var _manageComplexTypes = function (type, form) {\r\n\r\n var html = '';\r\n html += '';\r\n for (var key in type) {\r\n if (!type[key].type || TC.Util.isGeometry(type[key].type)) continue;\r\n html += '';\r\n }\r\n var container = document.createElement(\"div\");\r\n container.insertAdjacentHTML('beforeend', '');\r\n this.parentNode.parentNode.insertBefore(container, this.parentNode.nextSibling).firstElementChild.addEventListener(\"change\", function () {\r\n _changeAttributeEvent.apply(this, [form, type]);\r\n });\r\n\r\n };\r\n\r\n const _changeAttributeEvent = function (form, data) {\r\n //borrar los hijos\t\t\r\n var combo = this;\r\n combo.parentElement.parentElement.querySelectorAll(\"select\").forEach(function (element) {\r\n if (combo.offsetTop < element.offsetTop) {\r\n element.parentElement.parentElement.removeChild(element.parentElement);\r\n }\r\n });\r\n\r\n const numericSection = form.querySelector(`.${ctlProto.CLASS}-numeric`);\r\n const textSection = form.querySelector(`.${ctlProto.CLASS}-text`);\r\n const dateSection = form.querySelector(`.${ctlProto.CLASS}-date`);\r\n const geomSection = form.querySelector(`.${ctlProto.CLASS}-geom`);\r\n const whereSection = form.querySelector(`.${ctlProto.CLASS}-where`);\r\n const opSection = form.querySelector(`.${ctlProto.CLASS}-op`);\r\n var valueField = whereSection.querySelector(\".tc-textbox\");\r\n valueField.disabled = false;\r\n if (valueField.dataset.autocomplete) {\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n }\r\n numericSection.classList.add(hiddenCssClass);\r\n dateSection.classList.add(hiddenCssClass);\r\n textSection.classList.add(hiddenCssClass);\r\n geomSection.classList.add(hiddenCssClass);\r\n whereSection.classList.add(hiddenCssClass);\r\n if (!data[this.selectedOptions[0].value.substring(this.selectedOptions[0].value.indexOf(\":\") + 1)]) {\r\n opSection.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n type = data[this.selectedOptions[0].value.substring(this.selectedOptions[0].value.indexOf(\":\") + 1)].type;\r\n opSection.classList.remove(hiddenCssClass);\r\n TC.UI.autocomplete.call(valueField, \"destroy\");\r\n //$(valueField).unbind(\"keydown\");\r\n destroyNumberMask();\r\n valueField.type = \"search\";\r\n switch (true) {\r\n case !type:\r\n console.log(\"type es nulo\");\r\n break;\r\n case type instanceof Object:\r\n _manageComplexTypes.apply(this, [type, form]);\r\n break;\r\n case TC.Util.isGeometry(type):\r\n geomSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.add(spatialCssClass);\r\n\r\n if (geomSection.querySelectorAll(\"input:checked\").length === 0) {\r\n geomSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n //const value = [].slice.call(form.querySelectorAll('select[name=' + this.name + ']')).reduce(function (vi, va) { return vi + (vi ? \"/\" : \"\") + va.value; }, \"\");\r\n //_autocompleteConstructor(valueField, value, form.getElementsByClassName(ctlProto.CLASS + \"-list tc-ctl-search-list\")[0]);\r\n break;\r\n case type.indexOf(\"int\") >= 0:\r\n case type.indexOf(\"float\") >= 0:\r\n case type.indexOf(\"double\") >= 0:\r\n case type.indexOf(\"long\") >= 0:\r\n case type.indexOf(\"decimal\") >= 0:\r\n numericSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (numericSection.querySelectorAll(\"input:checked\").length === 0) {\r\n numericSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n\r\n if (checkInput(\"number\")) {\r\n if (TC.Util.detectIE()) {\r\n valueField.type = \"text\";\r\n _loadNumberPolyFill().then(function () {\r\n inputMaskNumber = new IMask(valueField, {\r\n mask: Number, // enable number mask\r\n scale: type.indexOf(\"int\") >= 0 || type.indexOf(\"long\") >= 0 ? 0 : 2, // digits after point, 0 for integers\r\n signed: false, // disallow negative\r\n thousandsSeparator: locale && locale === \"en-US\" ? ',' : '.', // any single char\r\n padFractionalZeros: false, // if true, then pads zeros at end to the length of scale\r\n normalizeZeros: true, // appends or removes zeros at ends\r\n radix: locale && locale === \"en-US\" ? '.' : ',' // fractional delimiter\r\n });\r\n });\r\n }\r\n else {\r\n valueField.type = \"number\";\r\n if (type.indexOf(\"int\") >= 0 || type.indexOf(\"long\") >= 0)\r\n valueField.step = \"1\";\r\n else\r\n valueField.step = \"0.0001\";\r\n }\r\n }\r\n break;\r\n case type.indexOf(\"dateTime\") >= 0:\r\n case type.indexOf(\"date\") >= 0:\r\n\r\n dateSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (dateSection.querySelectorAll(\"input:checked\").length === 0) {\r\n dateSection.firstElementChild.checked = true;\r\n }\r\n _createDateMask(valueField);\r\n break;\r\n case type.indexOf(\"string\") >= 0: {\r\n textSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (textSection.querySelectorAll(\"input:checked\").length === 0) {\r\n textSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n const value = [].slice.call(form.querySelectorAll('select[name=' + this.name + ']')).reduce(function (vi, va) { return vi + (vi ? \"/\" : \"\") + va.value; }, \"\");\r\n _autocompleteConstructor(valueField, value, form.getElementsByClassName(ctlProto.CLASS + \"-list tc-ctl-search-list\")[0]);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const _renderFilterConditions = function () {\r\n const self = this;\r\n\r\n const form = self.getForm();\r\n const whereDiv = form.querySelector(`.${self.CLASS}-where-list`);\r\n empty(whereDiv);\r\n ctlProto.getRenderedHtml(self.CLASS + \"-filter\", {\r\n conditions: _cache.current.filter.map(f => getTemplateObjFromFilter(self, f)),\r\n locale: self.map.options.locale\r\n }, function (html) {\r\n whereDiv.innerHTML = html;\r\n whereDiv.querySelectorAll(`.${self.CLASS}-where-cond-view`).forEach(function (btn, idx) {\r\n btn.addEventListener(Consts.event.CLICK, function () {\r\n self.map.zoomToFeatures([_cache.current.filter.filter(f => f instanceof TC.filter.Spatial)[idx].geometry]);\r\n self.showGeometryPanel();\r\n }, { passive: true });\r\n });\r\n form.querySelectorAll(`.${self.CLASS}-del-cond`).forEach(function (btn, idx) {\r\n btn.addEventListener(Consts.event.CLICK, function () {\r\n self.removeFilter(idx);\r\n }, { passive: true });\r\n });\r\n });\r\n };\r\n\r\n var _validate = function (form) {\r\n const self = this;\r\n var option = form.querySelector('.tc-ctl-wfsquery input[type=\"radio\"]:checked');\r\n\r\n if (dateInputMask && !dateInputMask.masked.isComplete) {\r\n if (/^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/.test(str) === false)\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidDate\"));\r\n return false;\r\n }\r\n if (option.length === 0) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoCondition\"));\r\n return false;\r\n }\r\n if (form.querySelectorAll('input[type=\\'date\\']').length && !form.querySelector('input[type=\\'date\\']').checkValidity()) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidDate\"));\r\n return false;\r\n }\r\n var number;\r\n if (form.querySelectorAll('input[type=\\'number\\']').length && (number = form.querySelector('input[type=\\'number\\']')) !== null && !number.checkValidity()) {\r\n if (number.step === \"1\")\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidNumberMustInt\"));\r\n else\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidNumber\"));\r\n return false;\r\n }\r\n if (form.querySelector('input.tc-textbox').value.trim() === \"\" && (option.value !== \"empty\" && option.value !== \"null\")) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValueCondition\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n const _getLayerName = () => _cache.current.title;\r\n\r\n var _createResultPanel = async function (layerName) {\r\n const self = this;\r\n var _layerName = layerName;\r\n var _downloadClickHandler = function (_self, layerName) {\r\n const self = _self;\r\n self.getDownloadDialog().then(function (control) {\r\n var options = {\r\n title: layerName()\r\n };\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n\r\n control.open(self.resultsLayer.features, options);\r\n });\r\n };\r\n if (!self.resultsPanel) {\r\n var ccontainer = self.map.getControlsByClass(TC.control.ControlContainer);\r\n const panelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: \"\",\r\n max: \"\"\r\n },\r\n save: {\r\n fileName: _layerName + \".xls\"\r\n },\r\n download: () => _downloadClickHandler(self, _getLayerName),\r\n share: true,\r\n resize: true\r\n };\r\n if (ccontainer.length === 0) {\r\n self.resultsPanel = await self.map.addControl('resultsPanel', panelOptions);\r\n self.resultsPanel.caller = self;\r\n }\r\n else {\r\n panelOptions.position = \"right\";\r\n self.resultsPanel = await ccontainer[0].addControl('resultsPanel', panelOptions);\r\n self.resultsPanel.caller = self;\r\n }\r\n self.resultsPanel.template[self.resultsPanel.CLASS + \"-table\"] = self.template[self.CLASS + \"-table\"];\r\n\r\n self.resultsPanel.addItemTool({\r\n renderFn: function (container) {\r\n const className = self.CLASS + '-btn-zoom';\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (button) {\r\n button.remove();\r\n button = null;\r\n }\r\n const text = self.getLocaleString('query.zoomToExtent');\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.iconText = '\\ue917';\r\n button.classList.add(className);\r\n return button;\r\n },\r\n updateEvents: [],\r\n actionFn: function () {\r\n self.map.zoomToLayer(self.resultsLayer);\r\n }\r\n });\r\n self.resultsPanel.addItemTool({\r\n renderFn: function (container) {\r\n const className = self.CLASS + '-btn-chng';\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (button) {\r\n button.remove();\r\n button = null;\r\n }\r\n const text = \"Cambiar criterios\";\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.iconText = '\\uf0b0';\r\n button.classList.add(className);\r\n return button;\r\n },\r\n updateEvents: [],\r\n actionFn: async function () { \r\n //self.resultsPanel.close();\r\n _cache.current = Object.assign({}, _cache.queried, { filter: [..._cache.queried.filter] });\r\n await beginProcess.apply(self, [_cache.current]);\r\n }\r\n });\r\n }\r\n else {\r\n self.resultsPanel.options.save.fileName = _layerName + \".xls\";\r\n }\r\n self.resultsPanel.options.titles.max = self.resultsPanel.getLocaleString('geo.trk.chart.exp');\r\n };\r\n\r\n var _showMessage = function (Message, type) {\r\n //URI:Compruebao si existe modalbody para saber si la consulta viene de una URL comprtida\r\n if (modalBody) {\r\n var messageDiv = modalBody.getElementsByClassName(\"tc-ctl-wfsquery-message\")[0];\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n else {\r\n messageDiv.innerHTML = Message;\r\n switch (type) {\r\n case Consts.msgType.INFO:\r\n messageDiv.classList.add(\"tc-msg-info\");\r\n break;\r\n case Consts.msgType.WARNING:\r\n messageDiv.classList.add(\"tc-msg-warning\");\r\n break;\r\n case Consts.msgType.ERROR:\r\n default:\r\n messageDiv.classList.add(\"tc-msg-error\");\r\n break;\r\n }\r\n messageDiv.classList.remove(hiddenCssClass);\r\n }\r\n timer = setTimeout(function () {\r\n timer = null;\r\n messageDiv.classList.add(hiddenCssClass);\r\n }, 3000);\r\n }\r\n else {\r\n this.map.toast(Message, { type: type });\r\n }\r\n };\r\n var _getPossibleValues = async function (field, value) {\r\n const self = this;\r\n var _capabilities = Object.assign({}, _cache.current.capabilities);\r\n switch (document.querySelector(\".tc-ctl-wfsquery.tc-ctl-wfsquery-text input:checked\").value) {\r\n case \"starts\":\r\n value = value + \"*\";\r\n break;\r\n case \"contains\":\r\n case \"eq\":\r\n case \"neq\":\r\n value = \"*\" + value + \"*\";\r\n break;\r\n case \"ends\":\r\n value = \"*\" + value;\r\n break;\r\n }\r\n\r\n if (controller) {\r\n controller.abort();\r\n }\r\n controller = new AbortController();\r\n let signal = controller.signal;\r\n\r\n try {\r\n var data = await _cache.current.layer.proxificationTool.fetch(_cache.current.URL, {\r\n //URI:si el valor de field contiene \"/\" se supone que es un dato compuesto entonces no establezco propiedades a devolver sino que se deja vacío para que devuelva todos.\r\n data: TC.Util.WFGetPropertyValue(_cache.current.name, field.indexOf(\"/\") >= 0 ? false : field, TC.filter.like(field, value, undefined, undefined, undefined, false), _capabilities),//TC.Util.WFSQueryBuilder([_currentLayerName], TC.filter.like(field, value, undefined, undefined, undefined, false), _capabilities, \"JSON\", false),\r\n contentType: \"application/xml\",\r\n method: \"POST\",\r\n signal: signal\r\n });\r\n\r\n if (data.contentType.startsWith(\"application/xml\") || data.contentType.startsWith(\"text/xml\")) {\r\n let xmlDoc = new DOMParser().parseFromString(data.responseText, \"text/xml\");\r\n let error = xmlDoc.querySelector(\"Exception ExceptionText\");\r\n if (error) {\r\n _showMessage.call(self, error.innerHTML, Consts.msgType.ERROR);\r\n return [];\r\n }\r\n //parser de features XML\r\n const arr = [];\r\n xmlDoc.querySelectorAll(\"member > *\").forEach(function (item) {\r\n if (arr.indexOf(item.innerHTML) < 0) {\r\n arr[arr.length] = item.innerHTML;\r\n }\r\n });\r\n return arr;\r\n\r\n }\r\n if (data.contentType.startsWith(\"application/json\")) {\r\n data = JSON.parse(data.responseText);\r\n }\r\n if (data.features && data.features.length > 0) {\r\n let arr;\r\n if (data.features.length === 1) {\r\n arr = [field.split(\"/\").reduce(function (vi, va) { return vi[va.substring(va.indexOf(\":\") + 1)]; }, data.features[0].properties)];\r\n }\r\n if (data.features.length > 1) {\r\n arr = data.features.reduce(function (pv, cv) {\r\n if (pv && pv instanceof Array) {\r\n if (pv.indexOf(cv.properties[field]) < 0)\r\n return pv.concat(field.split(\"/\").reduce(function (vi, va) { return vi[va.substring(va.indexOf(\":\") + 1)]; }, cv.properties));\r\n else\r\n return pv;\r\n }\r\n }, []);\r\n }\r\n //arr.sort();\r\n return arr;\r\n } else\r\n return [];\r\n }\r\n catch (err) {\r\n if (err instanceof DOMException && err.name !== \"AbortError\")\r\n _showMessage.call(self, err, Consts.msgType.ERROR);\r\n return null;\r\n }\r\n };\r\n var _autocompleteConstructor = function (control, property, listCtrl) {\r\n\r\n TC.UI.autocomplete.call(control, {\r\n minLength: 3,\r\n target: listCtrl,\r\n source: function (text, callback) {\r\n var _self = this;\r\n _self.target.innerHTML = '
  • ' + getLocaleString(\"searching\") + '
  • ';\r\n _self.target.classList.remove(hiddenCssClass);\r\n if (timerAutocomplete)\r\n window.clearTimeout(timerAutocomplete);\r\n timerAutocomplete = window.setTimeout(async function () {\r\n if (!document.querySelector(\".tc-ctl-wfsquery.tc-ctl-wfsquery-text\").classList.contains(Consts.classes.HIDDEN)) {\r\n var data = await _getPossibleValues.call(_self, property, text);\r\n if (data) {\r\n if (data.length)\r\n callback(data.sort());\r\n else\r\n _self.target.classList.add(hiddenCssClass);\r\n }\r\n }\r\n }, 500);\r\n },\r\n callback: function (e) {\r\n control.value = e.currentTarget.dataset.value;\r\n this.target.classList.add(hiddenCssClass);\r\n },\r\n buildHTML: function (data) {\r\n var pattern = control.value;\r\n this.target.style.maxHeight = \"\";\r\n if (data.results.length > 1)\r\n return data.results.reduce(function (pv, cp, i) {\r\n return (i > 1 ? pv : _highlightText(pv, pattern)) + _highlightText(cp, pattern);\r\n });\r\n else\r\n return _highlightText(data.results[0], pattern);\r\n }\r\n });\r\n control.addEventListener(\"targetCleared.autocomplete\", function () {\r\n listCtrl.classList.add(hiddenCssClass);\r\n });\r\n control.addEventListener('keypress', function (e) {\r\n if (e.which == 13) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n control.addEventListener(\"search\", function (_e) {\r\n if (control.value.length === 0) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n control.addEventListener(\"input\", function (_e) {\r\n if (control.value.length === 0) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n };\r\n var _highlightText = function (text, pattern) {\r\n pattern = new RegExp(pattern.replace(/\\W/g, ''), \"gi\");\r\n return \"
  • \" + text.replace(pattern, '$&') + \"
  • \";\r\n };\r\n\r\n var _select = function (feature) {\r\n const self = this;\r\n var _addFeature = function (layer, feature) {\r\n var result;\r\n if (feature instanceof Point) {\r\n result = layer.addPoint(feature.getCoords());\r\n }\r\n else if (feature instanceof Polyline) {\r\n result = layer.addPolyline(feature.getCoords());\r\n }\r\n else if (feature instanceof Polygon) {\r\n result = layer.addPolygon(feature.getCoords());\r\n }\r\n else if (feature instanceof MultiPolygon) {\r\n result = layer.addMultiPolygon(feature.getCoords());\r\n }\r\n else if (feature instanceof MultiPolyline) {\r\n result = layer.addMultiPolyline(feature.getCoords());\r\n }\r\n return result;\r\n };\r\n if (!feature.layer)\r\n return;\r\n var layer = feature.layer.map.getLayer(\"WFSQueryResultsHighlight\");\r\n if (!layer) {\r\n feature.layer.map.addLayer({\r\n id: \"WFSQueryResultsHighlight\",\r\n type: Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n styles: _getHighLightStyles()\r\n }, function (layer) {\r\n _addFeature(layer, feature);\r\n });\r\n }\r\n else\r\n _addFeature(layer, feature);\r\n };\r\n var _unselect = function (feature) {\r\n var layer = feature.layer.map.getLayer(\"WFSQueryResultsHighlight\");\r\n if (layer) {\r\n layer.clearFeatures();\r\n }\r\n };\r\n\r\n ctlProto.loadTemplates = async function () {\r\n const self = this;\r\n const dialogTemplatePromise = import('../templates/tc-ctl-wfsquery-dialog.mjs');\r\n const formTemplatePromise = import('../templates/tc-ctl-wfsquery-form.mjs');\r\n const filterTemplatePromise = import('../templates/tc-ctl-wfsquery-filter.mjs');\r\n const tableTemplatePromise = import('../templates/tc-ctl-wfsquery-table.mjs');\r\n const valueTemplatePromise = import('../templates/tc-ctl-finfo-attr-val.mjs');\r\n const objectTemplatePromise = import('../templates/tc-ctl-finfo-object.mjs');\r\n const geometryTemplatePromise = import('../templates/tc-ctl-wfsquery-geom.mjs');\r\n const shareDialogTemplatePromise = import('../templates/tc-ctl-wfsquery-share-dialog.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS + '-dialog'] = (await dialogTemplatePromise).default;\r\n template[self.CLASS + '-form'] = (await formTemplatePromise).default;\r\n template[self.CLASS + '-filter'] = (await filterTemplatePromise).default;\r\n template[self.CLASS + '-table'] = (await tableTemplatePromise).default;\r\n template['tc-ctl-finfo-attr-val'] = (await valueTemplatePromise).default;\r\n template['tc-ctl-finfo-object'] = (await objectTemplatePromise).default;\r\n template[self.CLASS + '-geom'] = (await geometryTemplatePromise).default;\r\n template[self.CLASS + '-share-dialog'] = (await shareDialogTemplatePromise).default;\r\n self.template = template;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n Control.prototype.render.call(self, callback),\r\n self.getRenderedHtml(self.CLASS + '-share-dialog', {}, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n map.on(Consts.event.LAYERERROR, (e) => {\r\n if (e.layer === self.resultsLayer) {\r\n if (self.modalDialog) {\r\n self.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.remove(loadingCssClass);\r\n }\r\n if (e.reason === Consts.WFSErrors.MAX_NUM_FEATURES) {\r\n _showMessage.call(self, getLocaleString(\"query.msgTooManyResults\", { limit: e.data.limit }), Consts.msgType.WARNING);\r\n }\r\n else {\r\n //console.error(e.reason);\r\n _showMessage.call(self, getLocaleString(\"query.errorUndefined\"), Consts.msgType.ERROR);\r\n throw new Error(e.reason);\r\n }\r\n }\r\n });\r\n map.on(Consts.event.BEFOREFEATUREREMOVE, (e) => {\r\n if (e.layer === self.resultsLayer) {\r\n const index = e.layer.features.indexOf(e.feature);\r\n self.deletedFeatures.push(index);\r\n const tr = self.resultsPanel.div.querySelector(\"table tbody tr:not(.\" + Consts.classes.DISABLED + \")[data-index='\" + index + \"']\");\r\n delete tr.dataset.index;\r\n tr.removeAttribute(\"title\");\r\n tr.classList.add(Consts.classes.DISABLED);\r\n for (let j = index + 1; j < e.layer.features.length; j++) {\r\n const tr2 = self.resultsPanel.div.querySelector(\"table tbody tr[data-index='\" + j + \"']\");\r\n if (tr2 && tr2.dataset.index)\r\n tr2.dataset.index = parseInt(tr2.dataset.index, 10) - 1;\r\n }\r\n }\r\n })\r\n\r\n await Control.prototype.register.call(self, map);\r\n\r\n _getStyles = function () {\r\n var styleFN = function (geomType, property) {\r\n return this.options.styles && this.options.styles[geomType] ? this.options.styles[geomType][property] || Cfg.styles[geomType][property] : Cfg.styles[geomType][property];\r\n };\r\n return {\r\n polygon: {\r\n fillColor: styleFN.bind(self, 'polygon', 'fillColor'),\r\n fillOpacity: styleFN.bind(self, 'polygon', 'fillOpacity'),\r\n strokeColor: styleFN.bind(self, 'polygon', 'strokeColor'),\r\n strokeOpacity: styleFN.bind(self, 'polygon', 'strokeOpacity'),\r\n strokeWidth: styleFN.bind(self, 'polygon', 'strokeWidth')\r\n },\r\n line: {\r\n strokeColor: styleFN.bind(self, 'line', 'strokeColor'),\r\n strokeOpacity: styleFN.bind(self, 'line', 'strokeOpacity'),\r\n strokeWidth: styleFN.bind(self, 'line', 'strokeWidth')\r\n },\r\n point: {\r\n radius: styleFN.bind(self, 'point', 'radius'),\r\n height: styleFN.bind(self, 'point', 'height'),\r\n width: styleFN.bind(self, 'point', 'width'),\r\n fillColor: styleFN.bind(self, 'point', 'fillColor'),\r\n fillOpacity: styleFN.bind(self, 'point', 'fillOpacity'),\r\n strokeColor: styleFN.bind(self, 'point', 'strokeColor'),\r\n strokeWidth: styleFN.bind(self, 'point', 'strokeWidth'),\r\n fontSize: styleFN.bind(self, 'point', 'fontSize'),\r\n fontColor: styleFN.bind(self, 'point', 'fontColor'),\r\n labelOutlineColor: styleFN.bind(self, 'point', 'labelOutlineColor'),\r\n labelOutlineWidth: styleFN.bind(self, 'point', 'labelOutlineWidth'),\r\n label: styleFN.bind(self, 'point', 'label'),\r\n labelRotationKey: styleFN.bind(self, 'point', 'labelRotationKey')\r\n }\r\n };\r\n };\r\n _getHighLightStyles = function () {\r\n var _default = {\r\n \"polygon\": TC.Util.extend(true, {}, Cfg.styles.polygon, {\r\n fillColor: \"#0099FF\",\r\n fillOpacity: 1,\r\n strokeColor: \"#0099FF\",\r\n strokeWidth: 2\r\n }),\r\n \"line\": TC.Util.extend(true, {}, Cfg.styles.line, {\r\n strokeColor: \"#0099FF\",\r\n strokeWidth: 2\r\n }),\r\n \"point\": TC.Util.extend(true, {}, Cfg.styles.point, {\r\n strokeColor: \"#0099FF\"\r\n })\r\n };\r\n return self.highlightStyles ? {\r\n \"polygon\": TC.Util.extend(true, {}, _default.polygon, self.highlightStyles.polygon ? self.highlightStyles.polygon : {}),\r\n \"line\": TC.Util.extend(true, {}, _default.line, self.highlightStyles.line ? self.highlightStyles.line : {}),\r\n \"point\": TC.Util.extend(true, {}, _default.point, self.highlightStyles.point ? self.highlightStyles.point : {})\r\n } : _default;\r\n };\r\n\r\n locale = map.options.locale;\r\n\r\n getLocaleString = function (key, texts) {\r\n return TC.Util.getLocaleString(locale, key, texts);\r\n };\r\n\r\n map.ready(function () {\r\n map.getControlsByClass('TC.control.WorkLayerManager').forEach(function (ctl) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-open';\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (button) {\r\n button.remove();\r\n button = null;\r\n }\r\n const layer = map.getLayer(layerId);\r\n if (layer.type === Consts.layerType.WMS || layer.type === Consts.layerType.WFS) {\r\n const text = self.getLocaleString('query.tooltipMagnifBtn');\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.iconText = '\\ue916';\r\n button.classList.add(className);\r\n button.dataset.layerId = layerId;\r\n if (layer.type === Consts.layerType.WMS) {\r\n button.classList.add(loadingCssClass);\r\n layer.getWFSCapabilities().then((WFSCapabilities) => {\r\n //check si tiene GetFeature Disponible\r\n if (!WFSCapabilities.Operations.GetFeature) {\r\n button.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n //check si las capas hijas están en capabilties WFS\r\n var layers = layer.getDisgregatedLayerNames ? layer.getDisgregatedLayerNames() : layer.featureType;\r\n layers = layers.filter(function (l) {\r\n return Object.prototype.hasOwnProperty.call(WFSCapabilities.FeatureTypes, l.substring(l.indexOf(\":\") + 1));\r\n });\r\n if (!layers.length) {\r\n button.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n }).catch(() => button.classList.add(hiddenCssClass))\r\n .finally(() => button.classList.remove(loadingCssClass));\r\n }\r\n }\r\n return button;\r\n },\r\n updateEvents: [],\r\n actionFn: function () {\r\n const button = this;\r\n if (button.classList.contains('tc-unavailable') || button.classList.contains('tc-loading')) {\r\n return;\r\n }\r\n const layer = self.map.getLayer(button.dataset.layerId);\r\n if (_cache.queried)\r\n _cache.current = Object.assign({}, _cache.queried, { filter: [..._cache.queried.filter] });\r\n if (!_cache.current.layer || _cache.current.layer != layer) {\r\n _cache.current.layer = layer;\r\n _cache.current.name = \"\";\r\n _cache.current.filter = []; \r\n self.modalDialog = null;\r\n }\r\n else if (_cache.current?.layer === layer && !_cache.current.filter.length) {\r\n _cache.current.name = \"\";\r\n }\r\n beginProcess.apply(self, [_cache.current]);\r\n }\r\n });\r\n });\r\n });\r\n\r\n await self.getShareDialog();\r\n return self;\r\n };\r\n\r\n const _onFeaturesUpdate = function (e) {\r\n const ctl = e.layer.owner;\r\n if (ctl && e.layer === ctl.resultsLayer) {\r\n if (e.newData && e.newData.totalFeatures === 0) {\r\n ctl.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.remove(loadingCssClass);\r\n _showMessage.call(ctl, getLocaleString(\"query.msgNoResults\"), Consts.msgType.INFO);\r\n return;\r\n }\r\n var features = e.layer.features;\r\n if (features.length > 0) {\r\n if (ctl.toShare && ctl.toShare.doZoom) {\r\n ctl._setQueryToSearch({ doZoom: false });\r\n ctl.map.zoomToFeatures(features);\r\n }\r\n const serviceAttrName = 'h3_' + ctl.getLocaleString('service');\r\n const layerAttrName = 'h4_' + ctl.getLocaleString('layer');\r\n const title_separator = ctl.map.getControlsByClass(TC.control.Click).some(c => c.TITLE_SEPARATOR) ?\r\n ctl.map.getControlsByClass(TC.control.Click).find(c => c.TITLE_SEPARATOR).TITLE_SEPARATOR :\r\n ' • ';\r\n\r\n for (var i = 0; i < features.length; i++) {\r\n const path = _cache.current.layer.getPath(_cache.current.name).slice(1);\r\n if (path) {\r\n const newData = {};\r\n newData[serviceAttrName] = _cache.current.title;\r\n newData[layerAttrName] = path.join(title_separator);\r\n const allData = TC.Util.extend(newData, features[i].getData());\r\n features[i].clearData();\r\n features[i].setData(allData);\r\n }\r\n }\r\n ctl.showResultsPanel(\r\n features.length > 1 ?\r\n features.reduce(function (vi, va) {\r\n return (vi instanceof Array ? vi : [vi.data]).concat([va.data]);\r\n })\r\n :\r\n [features[0].data],\r\n _cache.current.title);\r\n }\r\n\r\n e.layer.map.off(Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n }\r\n };\r\n\r\n const _onBeforeApplyQuery = function (e) {\r\n const ctl = e.layer.owner;\r\n if (ctl && e.layer === ctl.resultsLayer && e.query) {\r\n ctl._setQueryToSearch({ filter: e.query });\r\n }\r\n };\r\n\r\n ctlProto._sendQuery = async function (filter) {\r\n const self = this;\r\n\r\n if (_cache.current.layer && _cache.current.name && _cache.current.title && filter) {\r\n var _url = await _cache.current.layer.getWFSURL();\r\n self.definitiveFilters = [filter];\r\n _cache.queried = _cache.current;\r\n await _createResultPanel.apply(self, [_cache.current.title]);\r\n _cache.current.layer.proxificationTool.cacheHost.getAction(_url).then(function (cacheHost) {\r\n const url = cacheHost.action(_url);\r\n if (self.resultsLayer && self.resultsLayer.url !== url) {\r\n self.map.removeLayer(self.resultsLayer);\r\n self.resultsLayer = null;\r\n }\r\n if (!self.resultsLayer) {\r\n self.map.on(Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.map\r\n .addLayer({\r\n id: \"WFSQueryResults\",\r\n type: Consts.layerType.WFS,\r\n url: url,\r\n owner: self,\r\n stealth: true,\r\n geometryName: \"the_geom\",\r\n featurePrefix: _cache.current.name.substring(0, _cache.current.name.indexOf(\":\")),\r\n featureType: _cache.current.name.substring(_cache.current.name.indexOf(\":\") + 1),\r\n properties: filter,\r\n outputFormat: Consts.format.JSON,\r\n styles: _getStyles()\r\n })\r\n .then(function (layer) {\r\n self.resultsLayer = layer;\r\n layer.map.on(Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n });\r\n\r\n self.map.on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control !== self.resultsPanel)\r\n return;\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(e.control.div, \"enable\");\r\n }\r\n self.resultsLayer.clearFeatures();\r\n self.resultsLayer.setVisibility(false);\r\n self.clearFilters();\r\n _cache.current.name = \"\";\r\n _cache.queried = null;\r\n self.modalDialog = null;\r\n self.map.off(Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.map.off(Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n delete self.toShare;\r\n });\r\n }\r\n else {\r\n self.map.off(Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.map.on(Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.resultsLayer.setVisibility(false);\r\n self.resultsLayer.clearFeatures();\r\n //borro el evento featureUpdate por si hago una búsqueda sin cerra el panel previamente\r\n self.map.off(Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.map.on(Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.resultsLayer.url = url;\r\n self.resultsLayer.featurePrefix = _cache.current.name.substring(0, _cache.current.name.indexOf(\":\"));\r\n self.resultsLayer.featureType = _cache.current.name.substring(_cache.current.name.indexOf(\":\") + 1);\r\n self.resultsLayer.properties = filter;\r\n self.resultsLayer.setVisibility(true);\r\n self.resultsLayer.refresh();\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctlProto.sendQuery = async function () {\r\n const self = this;\r\n if (!self.validateQuery()) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoQueryFilter\"));\r\n return;\r\n }\r\n self.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.add(loadingCssClass);\r\n\r\n let filter;\r\n if (_cache.current.filter.length > 1) {\r\n const condition = self.modalDialog.querySelector(\".tc-ctl-wfsquery-logOpRadio:checked\").value;\r\n filter = TC.filter[Consts.logicalOperator[condition]].apply(null, _cache.current.filter);\r\n }\r\n else {\r\n filter = _cache.current.filter[0];\r\n }\r\n\r\n self._sendQuery.call(self, filter);\r\n };\r\n\r\n ctlProto._setQueryToSearch = function (options) {\r\n const self = this;\r\n if (Object.keys(options).length === 1 && Object.prototype.hasOwnProperty.call(options, \"doZoom\")) {\r\n self.toShare = TC.Util.extend(self.toShare, { doZoom: options.doZoom });\r\n } else if (options.filter || self.resultsLayer && self.resultsLayer.properties instanceof TC.filter.Filter) {\r\n self.toShare = TC.Util.extend(self.toShare, {\r\n wms: {\r\n url: _cache.current.layer.url, names: _cache.current.layer.names\r\n },\r\n title: _cache.current.title,\r\n name: _cache.current.name,\r\n filter: options.filter ? options.filter : self.resultsLayer.properties.getText(),\r\n doZoom: Object.prototype.hasOwnProperty.call(options, 'doZoom') ? options.doZoom : true\r\n });\r\n }\r\n };\r\n\r\n ctlProto._getQueryToSearch = function () {\r\n const self = this;\r\n return self.toShare;\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.toShare) {\r\n return {\r\n id: self.id,\r\n queryResult: JSON.stringify(self.toShare)\r\n };\r\n }\r\n //else if (self.exportsState && self.resultsLayer) {\r\n // return {\r\n // id: self.id,\r\n // layer: self.resultsLayer.exportState({\r\n // exportStyles: false\r\n // })\r\n // };\r\n //}\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n\r\n if (state.queryResult) {\r\n let wait = self.map.getLoadingIndicator().addWait();\r\n self.map.loaded(function () {\r\n let sharedQueryToSearch = JSON.parse(state.queryResult);\r\n if (sharedQueryToSearch.wms && sharedQueryToSearch.filter) {\r\n let wmsLayer = self.map.workLayers.filter(l => l.url && l.url === sharedQueryToSearch.wms.url &&\r\n l.names.join() === sharedQueryToSearch.wms.names.join());\r\n if (wmsLayer.length > 0) {\r\n _cache.current.layer = wmsLayer[0];\r\n _cache.current.name = sharedQueryToSearch.name;\r\n _cache.current.title = sharedQueryToSearch.title;\r\n \r\n self._setQueryToSearch({ doZoom: sharedQueryToSearch.doZoom });\r\n\r\n _cache.current.layer.describeFeatureType(_cache.current.name).then(function (data) {\r\n manageDescribeFeature.apply(self, [data, false]);\r\n self._sendQuery(sharedQueryToSearch.filter);\r\n // registramos el estado compartido por si se comparte de nuevo sin hacer uso del control\r\n self._setQueryToSearch({ filter: sharedQueryToSearch.filter, doZoom: sharedQueryToSearch.doZoom }); \r\n _cache.current.filter = [TC.filter.Filter.fromText(sharedQueryToSearch.filter)];\r\n _cache.queried = _cache.current = Object.assign({}, _cache.current, { filter: [..._cache.current.filter] }); \r\n self.map.getLoadingIndicator().removeWait(wait);\r\n });\r\n }\r\n } else {\r\n alert('shared query error');\r\n }\r\n });\r\n }\r\n //else if (self.resultsLayer) {\r\n // self.resultsLayer.then(function () {\r\n // self.resultsLayer.importState(state.layer).then(function () {\r\n // self.resultsLayer.features.forEach(function (f) {\r\n // f.setStyle(null); // Los estilos vienen dados exclusivamente por la capa, borramos estilos propios de la feature\r\n // });\r\n // });\r\n // });\r\n //}\r\n };\r\n\r\n ctlProto.validateQuery = function () {\r\n return _cache.current.filter.length > 0;\r\n };\r\n\r\n ctlProto.showResultsPanel = function (data, layername) {\r\n const self = this;\r\n self.deletedFeatures = [];\r\n //en funcion del número de elementos cargo un título en singular o plural\r\n\r\n self.resultsPanel.div.querySelector(`.${self.resultsPanel.CLASS}-title-text`).innerText = self.resultsPanel.getLocaleString(data.length > 1 ? 'query.titleResultPaneMany' : 'query.titleResultPanelOne', { \"numero\": data.length, \"layerName\": layername });\r\n\r\n self.resultsPanel.div.classList.add(\"tc-ctl-wfsquery-results\");\r\n\r\n if (self.modalDialog) {\r\n self.modalDialog.parentElement.removeChild(self.modalDialog);\r\n }\r\n\r\n const dataTypes = _getDataTypes();\r\n \r\n\r\n self.resultsPanel.openTable({\r\n data: data,\r\n css: {\r\n trClass: \"trClass\",\r\n tdClass: \"tdClass\",\r\n thClass: \"thClass\"\r\n },\r\n sort: true,\r\n callback: function (tabla) {\r\n\r\n self.resultsPanel.maximize();\r\n console.log(\"render del panel de resultados\");\r\n var col = tabla.querySelectorAll(\".tc-table > tbody > tr\");\r\n var j = 1;\r\n for (var key in data[0]) {\r\n if (Object.prototype.hasOwnProperty.call(dataTypes, key)) {\r\n const dataType = dataTypes[key].type;\r\n if (dataType && !(dataType instanceof Object)) {\r\n if (dataType.indexOf(\"int\") >= 0 ||\r\n dataType.indexOf(\"float\") >= 0 ||\r\n dataType.indexOf(\"double\") >= 0 ||\r\n dataType.indexOf(\"long\") >= 0 ||\r\n dataType.indexOf(\"decimal\") >= 0) {\r\n var tdNumeric = tabla.querySelectorAll(\"td:nth-child(\" + j + \")\");\r\n for (var k = 0; k < tdNumeric.length; k++) {\r\n tdNumeric[k].classList.add(\"tc-numeric\");\r\n }\r\n }\r\n }\r\n if (dataType && dataType instanceof Object) {\r\n console.log(\"aki lo que sea\");\r\n }\r\n j++;\r\n }\r\n }\r\n\r\n for (var i = 0; i < col.length; i++) {\r\n col[i].addEventListener(\"click\", function (e) {\r\n e.stopPropagation();\r\n if (this.classList.contains(Consts.classes.DISABLED)) return;\r\n var index = this.dataset.index;\r\n if (index != undefined)\r\n self.resultsLayer.map.zoomToFeatures([self.resultsLayer.features[index]]);\r\n });\r\n col[i].addEventListener(\"mouseenter\", function () {\r\n if (this.classList.contains(Consts.classes.DISABLED)) return;\r\n var index = this.dataset.index;\r\n if (index == undefined) return;\r\n var feat = self.resultsLayer.features[index];\r\n if (feat && feat.geometry) {\r\n //feat.select();\r\n _select.call(self, feat);\r\n }\r\n var celdasHoja = this.querySelectorAll(\"td.tc-value div\");\r\n if (celdasHoja.length > 0) {\r\n celdasHoja.forEach(function (celda) {\r\n if (celda.offsetWidth < celda.scrollWidth)\r\n celda.title = celda.innerText;\r\n });\r\n }\r\n else\r\n this.querySelectorAll(\"td\").forEach(function (td) {\r\n if (td.offsetWidth < td.scrollWidth)\r\n td.title = td.innerText;\r\n });\r\n\r\n });\r\n col[i].addEventListener(\"mouseleave\", function () {\r\n var index = this.dataset.index;\r\n if (index == undefined) return;\r\n var feat = self.resultsLayer.features[index];\r\n if (feat && feat.geometry) {\r\n //feat.unselect();\r\n _unselect(feat);\r\n //esto es porque el unselect no devulve al estilo por defecto\r\n //feat.setStyle(Cfg.styles[feat.STYLETYPE]);\r\n }\r\n });\r\n }\r\n tabla.querySelectorAll(\".tc-complex-attr label,.tc-complex-attr input\").forEach(function (label) {\r\n label.addEventListener(\"click\", function (e) {\r\n e.stopPropagation();\r\n });\r\n });\r\n tabla.querySelectorAll(\".tc-complex-attr input\").forEach(function (chkBox) {\r\n chkBox.addEventListener(\"change\", function (_e) {\r\n if (this.checked) {\r\n this.nextElementSibling.querySelectorAll(\"td.tc-value div\").forEach(function (div) {\r\n if (div.offsetWidth < div.scrollWidth)\r\n div.title = div.innerText;\r\n });\r\n }\r\n });\r\n });\r\n\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners(tabla);\r\n tabla.querySelectorAll(\"td > img, td > video, td > audio, td > iframe\").forEach((e) => e.parentNode.classList.add(\"tc-multimedia\"));\r\n tabla.querySelectorAll(\"video\").forEach((v) => {\r\n v.addEventListener(Consts.event.CLICK, function (e) {\r\n e.stopPropagation(); // No queremos zoom si pulsamos en un enlace\r\n }, { passive: true });\r\n });\r\n //URI:Si hay features eliminadas las marcamos como tal\r\n if (self.deletedFeatures.length > 0) {\r\n self.deletedFeatures.sort().forEach((f) => {\r\n const tr = self.resultsPanel.div.querySelector(\"table tbody tr[data-index='\" + f + \"']\");\r\n delete tr.dataset.index;\r\n tr.removeAttribute(\"title\");\r\n tr.classList.add(Consts.classes.DISABLED);\r\n });\r\n //rellenamos los huecos de data-index\r\n Array.from(self.resultsPanel.div.querySelectorAll(\"table tbody tr:not(.\" + Consts.classes.DISABLED + \")\")).forEach((notDeleted) => {\r\n const index = parseInt(notDeleted.dataset.index, 10);\r\n notDeleted.dataset.index = index - self.deletedFeatures.filter((x) => x < index).length;\r\n });\r\n\r\n }\r\n ////se deshabilita el swipe para que se pueda hacer scroll horizontal del panel de resultados\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(self.resultsPanel.div, 'disable');\r\n }\r\n }\r\n });\r\n\r\n };\r\n\r\n ctlProto.showGeometryPanel = function (mode,start=true) {\r\n const self = this;\r\n return new Promise( async function (resolve) {\r\n TC.Util.closeModal();\r\n if (!self.geometryPanel) {\r\n const ctlOptions = {\r\n titles: {\r\n main: self.getLocaleString('query.spatialFilter')\r\n }\r\n };\r\n const ctlContainer = self.map.getControlsByClass(TC.control.ControlContainer)[0];\r\n if (ctlContainer) {\r\n ctlOptions.position = ctlContainer.POSITION.RIGHT;\r\n self.geometryPanel = await ctlContainer.addControl('resultsPanel', ctlOptions);\r\n }\r\n else {\r\n self.geometryPanel = await self.map.addControl('resultsPanel', ctlOptions);\r\n }\r\n self.map\r\n .on(Consts.event.RESULTSPANELCLOSE, function onResultsPanelClose(e) {\r\n if (e.control === self.geometryPanel) {\r\n setTimeout(() => self.drawControl.cancel(), 500); // timeout para evitar una llamada indeseada a GFI.\r\n TC.Util.showModal(self.modalDialog, {\r\n closeCallback: () => self.clearFilters()\r\n });\r\n }\r\n });\r\n const html = await self.getRenderedHtml(self.CLASS + '-geom');\r\n self.geometryPanel.open(html);\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-btn-ok`).addEventListener(Consts.event.CLICK, function () {\r\n self.geometryPanel.close();\r\n }, { passive: true }); \r\n if (!self.drawControl) {\r\n self.drawControl = await self.map.addControl('draw', {\r\n div: self.geometryPanel.getTableContainer().querySelector(`.${self.CLASS}-geom-draw`),\r\n styles: self.styles\r\n });\r\n resolve(self.drawControl.layer);\r\n self.drawControl.on(Consts.event.DRAWEND, function (e) {\r\n e.feature.showsPopup = false;\r\n self.geometryPanel.close();\r\n\r\n const op = self.modalDialog.querySelector(`input[name=\"${self.id}-condition\"]:checked`).value;\r\n let filter;\r\n switch (op) {\r\n case 'intersects':\r\n filter = new TC.filter.Intersects(null, e.feature, self.map.crs);\r\n break;\r\n default:\r\n filter = new TC.filter.Within(null, e.feature, self.map.crs);\r\n }\r\n filter._abbr = op;\r\n switch (e.target.mode) {\r\n case 'polygon':\r\n filter._valueToShow = self.getLocaleString('polygon');\r\n break;\r\n case 'line':\r\n case 'polyline':\r\n filter._valueToShow = self.getLocaleString('line');\r\n break;\r\n case 'rectangle':\r\n filter._valueToShow = self.getLocaleString('box');\r\n break;\r\n }\r\n _cache.current.filter.push(filter);\r\n _renderFilterConditions.apply(self);\r\n TC.Util.showModal(self.modalDialog, {\r\n closeCallback: () =>self.clearFilters()\r\n });\r\n });\r\n self.drawControl.on(Consts.event.DRAWCANCEL, function (e) {\r\n e.ctrl.deactivate();\r\n });\r\n }\r\n }\r\n else {\r\n self.geometryPanel.open();\r\n resolve(self.drawControl.layer);\r\n }\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-draw`).classList.toggle(Consts.classes.HIDDEN, !mode);\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-btn`).classList.toggle(Consts.classes.HIDDEN, !!mode);\r\n if (mode) {\r\n self.drawControl.setMode(mode, start);\r\n }\r\n });\r\n \r\n };\r\n\r\n const manageDescribeFeature = function (data, renderForm) {\r\n\r\n const self = this;\r\n\r\n _internalGetDataTypes = function () {\r\n return data;\r\n };\r\n \r\n for (var key in data) {\r\n const value = data[key];\r\n if (TC.Util.isGeometry(value.type)) {\r\n value.isGeometry = true;\r\n }\r\n }\r\n\r\n if (renderForm) {\r\n //self.clearFilters();\r\n return new Promise(function (resolve) {\r\n ctlProto.getRenderedHtml(ctlProto.CLASS + \"-form\",\r\n {\r\n operators: filterByOperation,\r\n attributes: data,\r\n controlId: self.id\r\n }, function (html) {\r\n const dialog = self.modalDialog;\r\n const form = self.getForm();\r\n empty(form);\r\n form.insertAdjacentHTML('beforeend', html);\r\n modalBody.classList.remove(loadingCssClass);\r\n var combo = form.getElementsByClassName(\"tc-combo\");\r\n if (combo.length === 0)\r\n dialog.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].setAttribute(\"disabled\", \"\");\r\n else {\r\n dialog.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].removeAttribute(\"disabled\");\r\n combo[0].addEventListener(\"change\", function () {\r\n _changeAttributeEvent.apply(this, [form, data]);\r\n })\r\n\r\n form.querySelectorAll(`input[name=\"${self.id}-condition\"]`).forEach(ipt => {\r\n ipt.addEventListener('change', async function (e) {\r\n form.querySelector(`.${ctlProto.CLASS}-geomtype-line-btn`).disabled = e.target.value === 'within';\r\n const valueField = modalBody.querySelector(\".tc-ctl-wfsquery-value input\");\r\n valueField.disabled = false;\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-text\") && this.value === \"empty\") {\r\n valueField.value = \"\";\r\n valueField.disabled = true;\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n }\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-date\") && this.value === \"null\") {\r\n valueField.value = \"\";\r\n valueField.disabled = true;\r\n }\r\n if (valueField.value.trim() !== \"\") {\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-text\") && this.value !== \"empty\") {\r\n var evt = document.createEvent('HTMLEvents');\r\n evt.initEvent(\"keyup\", false, true);\r\n valueField.dispatchEvent(evt);\r\n }\r\n }\r\n });\r\n });\r\n\r\n form.querySelector(\".tc-button\").addEventListener(Consts.event.CLICK, function () {\r\n var valueField = form.querySelector('input.tc-textbox');\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n if (inputMaskNumber)\r\n inputMaskNumber.masked.remove();\r\n if (!_validate.call(self, form)) {\r\n return;\r\n }\r\n var field = [].reduce.call(form.querySelectorAll('.tc-combo'), function (vi, va) {\r\n return vi + (vi ? \"/\" : \"\") + va.value;\r\n }, '');\r\n const checkedOp = form.querySelector('.tc-ctl-wfsquery input[type=\"radio\"]:checked');\r\n var op = checkedOp.value;\r\n\r\n createFilterCondition.apply(self, [valueField, field, op, type]);\r\n\r\n _renderFilterConditions.apply(self);\r\n valueField.value = \"\";\r\n }, { passive: true });\r\n\r\n const onGeomClick = function (e) {\r\n self.showGeometryPanel(e.target.value);\r\n };\r\n form.querySelectorAll(\"button[name='geometry']\").forEach(btn => btn.addEventListener(Consts.event.CLICK, onGeomClick, { passive: true }));\r\n resolve(form);\r\n }\r\n });\r\n });\r\n \r\n }\r\n };\r\n const createFilterCondition = function (valueField,field,operation,type) {\r\n const self = this;\r\n let value = _getValue(valueField);\r\n let valueToShow = _getValueToShow(valueField);\r\n switch (true) {\r\n case type.indexOf(\"xsd:int\") >= 0:\r\n valueToShow = parseInt(value, 10);\r\n break;\r\n case type.indexOf(\"xsd:float\") >= 0:\r\n case type.indexOf(\"xsd:double\") >= 0:\r\n case type.indexOf(\"xsd:long\") >= 0:\r\n case type.indexOf(\"xsd:decimal\") >= 0:\r\n valueToShow = parseFloat(value, 10);\r\n break;\r\n case type.indexOf(\"xsd:string\") >= 0 && operation !== \"empty\":\r\n valueToShow = '\"' + valueToShow + '\"';\r\n break;\r\n case type.indexOf(\"xsd:date\") >= 0 && operation === \"null\":\r\n valueToShow = '';\r\n break;\r\n }\r\n\r\n //se añade asterisco al principio y/o final del valor para las busquedas: \"empieza por\", \"termina en\" o \"contiene\"\r\n var f;\r\n if (type.indexOf(\"dateTime\") >= 0 || type.indexOf(\"date\") >= 0) {\r\n if (value) {\r\n const from = new Date(value + \"T00:00:00\").toISOString();\r\n const to = new Date(value + \"T23:59:59\").toISOString();\r\n if (operation === \"nbtw\") {\r\n //el not bettween es un caso es especial por que concatena un filtro not y otro between\r\n f = new TC.filter.not(TC.filter.between(field, from, to));\r\n }\r\n else {\r\n f = new filterByOperation[operation].Ctor(field, from, to);\r\n }\r\n }\r\n else {\r\n f = new filterByOperation[operation].Ctor(field);\r\n }\r\n\r\n }\r\n else {\r\n f = new filterByOperation[operation].Ctor(\r\n field,\r\n (operation === \"ends\" || operation === \"contains\" ? '*' : '') +\r\n value +\r\n (operation === \"starts\" || operation === \"contains\" ? '*' : ''));\r\n }\r\n f.matchCase = false;\r\n f._abbr = operation;\r\n f._valueToShow = valueToShow;\r\n _cache.current.filter.push(f);\r\n }\r\n\r\n const renderQueryForm = async function (layer, dialog, capabilities) {\r\n const self = this;\r\n self.modalDialog = dialog;\r\n _cache.current.layer = layer;\r\n _cache.current.capabilities = capabilities;\r\n _cache.current.URL = capabilities.Operations.DescribeFeatureType.DCP.HTTP.Get.href;\r\n if (new URL(_cache.current.URL).host === document.location.host) {\r\n _cache.current.URL = _cache.current.URL.substring(_cache.current.URL.indexOf(\":\") + 1);\r\n }\r\n\r\n //analizamos si es una o varias capas, si es una agrupación la disgregamos\r\n var layers = layer.getDisgregatedLayerNames ? layer.getDisgregatedLayerNames() : layer.featureType;\r\n //quitamos aquellas que no estén disponibles en el WFS\r\n layers = layers.filter(function (l) {\r\n return Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, l.substring(l.indexOf(\":\") + 1));\r\n }); \r\n if (layers.length > 1) {\r\n modalBody.classList.remove(loadingCssClass);\r\n const combo = dialog.getElementsByClassName(\"tc-combo\")[0];\r\n //bindeamos el onchange de combo\r\n combo.addEventListener(\"change\", function () {\r\n if (!this.value) {\r\n var form = self.getForm();\r\n empty(form);\r\n for (var i = 0; i < form.children.length; i++) form.removeChild(form.children[i]);\r\n self.clearFilters();\r\n return;\r\n }\r\n dialog.querySelector(\".tc-modal-body .tc-ctl-wfsquery-message\", dialog).classList.add(hiddenCssClass);\r\n _cache.current.title = this.options[this.selectedIndex].text;\r\n modalBody.classList.add(loadingCssClass);\r\n _cache.current.name = this.value;\r\n chooseLeafLayer.apply(self, [_cache.current.layer, _cache.current.name, dialog]) \r\n\r\n }); \r\n }\r\n else if (layers.length === 1) { \r\n //comprabamos que la capa existe en el capabilities\r\n var layerCapabilities = capabilities.FeatureTypes[layers[0].substring(layers[0].indexOf(\":\") + 1)];\r\n if (layerCapabilities) {\r\n _cache.current.title = capabilities.FeatureTypes[layers[0].substring(layers[0].indexOf(\":\") + 1)].Title;\r\n _cache.current.name = layers[0];\r\n await chooseLeafLayer.apply(self, [_cache.current.layer, _cache.current.name, dialog]) \r\n }\r\n else {\r\n var tbody = dialog.getElementsByClassName(\"tc-modal-body\")[0];\r\n tbody.classList.remove(loadingCssClass);\r\n tbody.insertAdjacentHTML('beforeend', \"
    \" + getLocaleString(\"query.LayerNotAvailable\") + \"
    \");\r\n //TC.Util.closeModal();\r\n //layer.map.toast(\"Mal\", { type: Consts.msgType.WARNING });\r\n }\r\n }\r\n else {\r\n TC.Util.closeModal();\r\n layer.map.toast(TC.Util.getLocaleString(layer.map.options.locale, \"query.LayerNotAvailable\"), { type: Consts.msgType.ERROR });\r\n }\r\n };\r\n const chooseLeafLayer = async function (layer,layerName, dialog) {\r\n const self = this; \r\n try {\r\n const data = await layer.describeFeatureType(layerName)\r\n const form = await manageDescribeFeature.apply(self, [data, true]);\r\n return ({ attributes: data, form: form });\r\n }\r\n catch (err) {\r\n var tbody = dialog.getElementsByClassName(\"tc-modal-body\")[0];\r\n tbody.classList.remove(loadingCssClass);\r\n if (!err)\r\n tbody.insertAdjacentHTML('beforeend', \"
    \" + getLocaleString(\"query.LayerNotAvailable\") + \"
    \");\r\n else\r\n tbody.insertAdjacentHTML('beforeend', \"
    \" + err + \"
    \");\r\n throw err;\r\n }\r\n \r\n }\r\n const beginProcess =async function (_state/*layer, filter*/) {\r\n const self = this;\r\n if (self.modalDialog && !self.modalDialog.parentElement) {\r\n document.body.appendChild(self.modalDialog);\r\n self.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.remove(loadingCssClass);\r\n _cache.current = _state;\r\n _cache.current.filter.filter((f) => f instanceof TC.filter.Spatial).forEach((f) => {\r\n if (f.geometry instanceof SITNA.feature.Polygon && !f.geometry.layer)\r\n self.drawControl.layer.addPolygon(f.geometry);\r\n if (f.geometry instanceof SITNA.feature.Polyline && !f.geometry.layer)\r\n self.drawControl.layer.addPolyline(f.geometry);\r\n });\r\n return self.modalDialog\r\n }\r\n else {\r\n const capabilities = await getCapabilities.apply(self, [_state.layer]);\r\n const modal = await renderModalDialog.apply(self, [_state.layer, capabilities, _state.name]);\r\n const dialog = await renderQueryForm.apply(self, [_state.layer, modal, capabilities]);\r\n if (_state.filter?.length) {\r\n const filter = [..._state.filter]\r\n self.clearFilters();\r\n const data = await chooseLeafLayer.apply(self, [_state.layer, _state.name, dialog]); \r\n const comboAttr = data.form.querySelector(\".tc-combo[name='attributes']\");\r\n const geomName = Object.entries(data.attributes).find((d) => TC.Util.isGeometry(d[1].type))[0];\r\n if (comboAttr) {\r\n var index = Object.keys(data.attributes).filter((k) => k !== \"FEATURE\").indexOf(filter[0].propertyName || geomName);\r\n comboAttr.options[index + 1].selected = true;\r\n _changeAttributeEvent.apply(comboAttr, [data.form, data.attributes]);\r\n }\r\n const conjuncion = filter[0] instanceof TC.filter.LogicalNary ? filter[0].getTagName() : \"And\";\r\n data.form.querySelector(\".\" + self.CLASS + \"-logOpRadio[value='\" + conjuncion.toUpperCase() + \"']\").checked = true;\r\n const _filters = filter.reduce((vi, va) => { return vi.concat(va instanceof TC.filter.LogicalNary ? va.conditions : va) }, []);\r\n for (var i in _filters) {\r\n const f = _filters[i];\r\n const _opAbbr = _getFilterAbbr(f);\r\n const type = data.attributes[f.propertyName || geomName].type;\r\n const valueField = await _makeInputField.apply(self, [f, _opAbbr, data, geomName]);\r\n if (!(f instanceof TC.filter.Spatial)) {\r\n createFilterCondition.apply(self, [valueField, f.propertyName, _opAbbr, type]);\r\n }\r\n }\r\n _renderFilterConditions.apply(self);\r\n }\r\n return modal;\r\n }\r\n \r\n }\r\n const getCapabilities = function (layer) {\r\n let title;\r\n let capabilitiesPromise;\r\n if (layer.type === Consts.layerType.WMS) {\r\n const path = layer.getPath();\r\n title = path[path.length - 1];\r\n capabilitiesPromise = layer.getWFSCapabilities();\r\n }\r\n else if (layer.type === Consts.layerType.WFS) {\r\n title = layer.title;\r\n capabilitiesPromise = layer.getCapabilitiesPromise();\r\n }\r\n else {\r\n return;\r\n }\r\n return capabilitiesPromise\r\n }\r\n\r\n const renderModalDialog = async function (layer, capabilities,layerName) {\r\n const self = this;\r\n let title;\r\n if (layer.type === Consts.layerType.WMS) {\r\n const path = layer.getPath();\r\n title = path[path.length - 1]; \r\n }\r\n else if (layer.type === Consts.layerType.WFS) {\r\n title = layer.title; \r\n }\r\n else {\r\n return;\r\n }\r\n \r\n let layers;\r\n return new Promise(function (resolve) {\r\n if (layer.getDisgregatedLayerNames) {\r\n layers = [];\r\n layer.getDisgregatedLayerNames().forEach(function (value, _index) {\r\n var path = layer.getPath(value);\r\n //quitamos aquellas que no estén disponibles en el WFS\r\n if (Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, value.substring(value.indexOf(\":\") + 1)))\r\n layers.push({ name: value, title: path[path.length - 1] });\r\n });\r\n layers.sort(function (a, b) {\r\n if (a.title < b.title) return -1;\r\n if (a.title > b.title) return 1;\r\n return 0;\r\n });\r\n }\r\n else {\r\n layers = layer.featureType;\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS + \"-dialog\",\r\n {\r\n layerName: getLocaleString(\"query.titleDialog\", { \"layerName\": title }),\r\n layers: layers\r\n }, function (html) {\r\n // Borramos diálogos previos\r\n document.body.querySelectorAll(`.${self.CLASS}-dialog`).forEach(elm => elm.remove());\r\n\r\n var d = document.createElement(\"div\");\r\n d.insertAdjacentHTML('beforeEnd', html);\r\n var modal = null;\r\n if (d.childNodes.length > 0) {\r\n modal = d.firstChild;\r\n document.body.appendChild(modal);\r\n }\r\n modalBody = modal.getElementsByClassName(\"tc-modal-body\")[0];\r\n modalBody.classList.add(loadingCssClass);\r\n //TC.Util.showModal(modal);\r\n TC.Util.showModal(modal, {\r\n closeCallback: () => self.clearFilters()\r\n });\r\n //IE me hace la puñeta con los estilos, no me fuciona el calc el el max-height así que lo calculo cada vez que muestro el dialogo\r\n if (TC.Util.detectIE()) {\r\n var coef = 1;\r\n switch (true) {\r\n case document.body.clientWidth > 768 && document.body.clientWidth < document.body.clientHeight:\r\n case document.body.clientWidth > 1024:\r\n case document.body.clientWidth > 1140:\r\n coef = 0.7;\r\n break;\r\n }\r\n modalBody.style.maxHeight = document.body.clientHeight * coef - modalBody.nextElementSibling.clientHeight - modalBody.previousElementSibling.clientHeight;\r\n }\r\n self.modalDialog = modal;\r\n modal.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].addEventListener(\"click\", function () {\r\n self.sendQuery();\r\n });\r\n if (layerName && layers.length > 1)\r\n Array.from(modal.querySelector(\".tc-combo[name='availableLayers']\")).find((opt) => opt.value === layerName).selected = true; \r\n resolve(modal);\r\n });\r\n });\r\n \r\n };\r\n\r\n ctlProto.removeFilter = function (filter) {\r\n const self = this;\r\n let idx = filter;\r\n if (filter instanceof TC.filter.Filter) {\r\n idx = _cache.current.filter.indexOf(filter);\r\n }\r\n if (idx >= 0 && idx < _cache.current.filter.length) {\r\n const removedFilter = _cache.current.filter.splice(idx, 1)[0]; \r\n if (removedFilter instanceof TC.filter.Spatial) {\r\n removedFilter.geometry.layer.removeFeature(removedFilter.geometry);\r\n }\r\n _renderFilterConditions.apply(self);\r\n }\r\n };\r\n\r\n ctlProto.clearFilters = function () {\r\n _cache.current.filter\r\n .filter(f => f instanceof TC.filter.Spatial)\r\n .forEach(f => f.geometry?.layer?.removeFeature(f.geometry));\r\n _cache.current.filter.length = 0;\r\n };\r\n\r\n ctlProto.getForm = function () {\r\n const self = this;\r\n return self.modalDialog && self.modalDialog.querySelector('.tc-modal-form');\r\n };\r\n\r\n const _getFilterAbbr = function (f) {\r\n switch (true) {\r\n case f instanceof TC.filter.EqualTo:\r\n return \"eq\";\r\n case f instanceof TC.filter.NotEqualTo:\r\n return \"neq\";\r\n case f instanceof TC.filter.GreaterThan:\r\n return \"gt\";\r\n case f instanceof TC.filter.LessThan:\r\n return \"lt\";\r\n case f instanceof TC.filter.GreaterThanOrEqualTo:\r\n return \"lt\";\r\n case f instanceof TC.filter.LessThanOrEqualTo:\r\n return \"lt\";\r\n case f instanceof TC.filter.IsLike:\r\n var pattern = /.*?)\\]\\]>/gm.exec(f.pattern)?.groups?.content || f.pattern;\r\n f.expression = pattern.replace(/\\*/g, \"\");\r\n if (pattern.startsWith(\"*\"))\r\n return pattern.endsWith(\"*\") ? \"contains\" : \"ends\";\r\n else\r\n return pattern.endsWith(\"*\") ? \"starts\" : \"\";\r\n case f instanceof TC.filter.IsNull:\r\n return \"null\";\r\n case f instanceof TC.filter.IsBetween:\r\n f.expression = new Date(f.LowerBoundary).getFullYear() + \"-\" + new Date(f.LowerBoundary).getMonth() + 1 + \"-\" + new Date(f.LowerBoundary).getDate()\r\n return \"btw\";\r\n case f instanceof TC.filter.Intersects:\r\n return \"intersects\";\r\n case f instanceof TC.filter.Within:\r\n return \"within\";\r\n }\r\n };\r\n const _makeInputField = async function (f, operation, data, geomName) {\r\n const self = this;\r\n const valueField = document.createElement(\"input\");\r\n valueField.value = /.*?)\\]\\]>/gm.exec(f.expression)?.groups?.content || f.expression;\r\n const type = data.attributes[f.propertyName || geomName].type\r\n\r\n switch (true) {\r\n case TC.Util.isGeometry(type):\r\n var layer = await self.showGeometryPanel(f.geometry.STYLETYPE,false);\r\n self.geometryPanel.close();\r\n var filter = new f.constructor(null, f.geometry, self.map.crs);\r\n filter._abbr = operation;\r\n switch (f.geometry.STYLETYPE) {\r\n case 'polygon':\r\n var coords = f.geometry.getCoordinates()[0];\r\n if (coords[0][0] === coords[1][0] && coords[0][1] === coords[3][1] &&\r\n coords[3][0] === coords[3][0] && coords[1][1] === coords[1][1])\r\n filter._valueToShow = self.getLocaleString('box');\r\n else\r\n filter._valueToShow = self.getLocaleString('polygon');\r\n break;\r\n case 'line':\r\n filter._valueToShow = self.getLocaleString('line');\r\n break;\r\n\r\n }\r\n _cache.current.filter.push(filter);\r\n layer.addFeature(f.geometry);\r\n break;\r\n case type.indexOf(\"int\") >= 0:\r\n case type.indexOf(\"float\") >= 0:\r\n case type.indexOf(\"double\") >= 0:\r\n case type.indexOf(\"long\") >= 0:\r\n case type.indexOf(\"decimal\") >= 0:\r\n valueField.type = \"number\";\r\n if (type.indexOf(\"int\") >= 0 || type.indexOf(\"long\") >= 0)\r\n valueField.step = \"1\";\r\n else\r\n valueField.step = \"0.0001\";\r\n break;\r\n case type.indexOf(\"dateTime\") >= 0:\r\n case type.indexOf(\"date\") >= 0:\r\n valueField.type = \"date\";\r\n break;\r\n case type.indexOf(\"string\") >= 0:\r\n valueField.type = \"text\";\r\n break;\r\n }\r\n return valueField;\r\n }\r\n\r\n})();\r\n\r\nTC.control.WFSQuery = WFSQuery;\r\nexport default WFSQuery;","import TC from '../../TC';\r\nimport BasicMap from '../Map';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport Cfg from '../Cfg';\r\nimport i18n from '../i18n';\r\nimport Handlebars from '../../lib/handlebars/helpers';\r\n\r\nTC.control = TC.control || {};\r\nTC.i18n = TC.i18n || i18n;\r\n\r\nconst elementName = 'sitna-control';\r\n\r\nclass WebComponentControl extends HTMLElement {\r\n template;\r\n control;\r\n #onBySelectorMap = new WeakMap();\r\n static CLASS = 'tc-ctl';\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n\r\n self.map = null;\r\n self.isActive = false;\r\n self.isDisabled = false;\r\n self.CLASS = self.getClassName();\r\n\r\n var len = arguments.length;\r\n\r\n self.options = Util.extend({}, len > 1 ? arguments[1] : arguments[0]);\r\n\r\n const divOption = self.options.div || arguments[0];\r\n if (divOption) {\r\n const parentElement = Util.getDiv(divOption);\r\n self.div = parentElement;\r\n }\r\n else {\r\n self.div = self.parentElement;\r\n }\r\n\r\n self.template = self.options.template || self.template;\r\n self.exportsState = false;\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.classList.add(WebComponentControl.CLASS, self.CLASS);\r\n if (self.map instanceof BasicMap) {\r\n return;\r\n }\r\n const mapOption = self.getAttribute('for');\r\n let map;\r\n if (mapOption) {\r\n const mapElement = document.getElementById(mapOption);\r\n if (mapElement) {\r\n map = BasicMap.get(mapElement);\r\n if (map) {\r\n map.addControl(self);\r\n }\r\n else {\r\n const observer = new MutationObserver(function (mutationList, observer) {\r\n for (const mutation of mutationList) {\r\n if (mutation.type === 'childList') {\r\n map = BasicMap.get(mapElement);\r\n if (map) {\r\n map.addControl(self);\r\n observer.disconnect();\r\n }\r\n }\r\n }\r\n });\r\n observer.observe(mapElement, { childList: true });\r\n }\r\n }\r\n }\r\n else {\r\n let element = self;\r\n do {\r\n element = element.parentElement;\r\n if (!self.containerControl && element instanceof WebComponentControl) {\r\n self.containerControl = element;\r\n }\r\n }\r\n while (element && !element.classList.contains(Consts.classes.MAP));\r\n map = BasicMap.get(element);\r\n if (map) {\r\n map.addControl(self);\r\n }\r\n else {\r\n self.renderPromise();\r\n }\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n this.unregister();\r\n }\r\n\r\n getClassName() {\r\n return this.CLASS;\r\n }\r\n\r\n initProperty(name) {\r\n const self = this;\r\n if (Object.prototype.hasOwnProperty.call(self.options, name)) {\r\n self[name] = self.options[name];\r\n }\r\n return self;\r\n }\r\n\r\n show() {\r\n this.style.display = '';\r\n return this;\r\n }\r\n\r\n hide() {\r\n const self = this;\r\n self.style.display = 'none';\r\n self.unhighlight();\r\n return self;\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(null, function () {\r\n self.addUIEventListeners();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n async loadTemplates() {\r\n\r\n }\r\n\r\n _set1stRenderPromise(promise) {\r\n const self = this;\r\n if (!self._firstRender) {\r\n self._firstRender = promise;\r\n }\r\n return promise;\r\n }\r\n\r\n async renderData(data, callback) {\r\n const self = this;\r\n if (self.map) {\r\n self.trigger(Consts.event.BEFORECONTROLRENDER, { dataObject: data });\r\n }\r\n self.classList.toggle(Consts.classes.DISABLED, self.isDisabled);\r\n\r\n let template;\r\n if (!self.template) {\r\n await self.loadTemplates();\r\n }\r\n if (typeof self.template === 'object' && !self.template.compiler) {\r\n template = self.template[self.CLASS];\r\n }\r\n else {\r\n template = self.template;\r\n self.template = {};\r\n self.template[self.CLASS] = template;\r\n }\r\n\r\n const html = await self.getRenderedHtml(self.CLASS, data);\r\n self.innerHTML = html;\r\n if (!self.parentElement && self.div) {\r\n self.div.appendChild(self);\r\n }\r\n if (self.map) {\r\n self.trigger(Consts.event.CONTROLRENDER);\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n\r\n async getRenderedHtml(templateId, data, callback) {\r\n const self = this;\r\n\r\n const endFn = function (template) {\r\n if (typeof template === 'undefined') {\r\n return '';\r\n }\r\n const html = template(data);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n return html;\r\n };\r\n\r\n if (!self.template) {\r\n await self.loadTemplates();\r\n }\r\n const template = self.template[templateId];\r\n if (typeof template !== 'function') {\r\n await self.#processTemplates({ locale: self.map && self.map.options.locale, className: self.CLASS });\r\n return endFn(self.template[templateId]);\r\n }\r\n else {\r\n return endFn(template);\r\n }\r\n }\r\n\r\n async #processTemplates(options) {\r\n const self = this;\r\n options = options || {};\r\n const templates = self.template;\r\n\r\n const templatePromises = [];\r\n for (var key in templates) {\r\n const templateName = key;\r\n let template = templates[templateName];\r\n if (typeof template === 'string') {\r\n templatePromises.push(new Promise(function (res, rej) {\r\n TC.ajax({\r\n url: template,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n .then(function (response) {\r\n templates[templateName] = template = Handlebars.compile(response.data); // TODO: add optimization options\r\n res(template);\r\n })\r\n .catch(function (err) {\r\n console.log(\"Error fetching template: \" + err);\r\n rej(err);\r\n });\r\n }));\r\n }\r\n else {\r\n if (typeof template === 'object') {\r\n templates[key] = template = Handlebars.template(template);\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(templatePromises);\r\n for (var key in templates) {\r\n const t = templates[key];\r\n if (t && key !== options.className) {\r\n Handlebars.registerPartial(key, templates[key]);\r\n }\r\n }\r\n\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n if (!self.id) {\r\n self.id = self.options.id || TC.getUID({\r\n prefix: self.CLASS.substr('tc-ctl'.length + 1) + '-'\r\n });\r\n }\r\n self.map = map;\r\n await self.render();\r\n if (!self.parentElement) {\r\n map.div.appendChild(self);\r\n self.div = map.div;\r\n }\r\n if (self.options.active) {\r\n self.activate();\r\n }\r\n return self;\r\n }\r\n\r\n unregister() {\r\n const self = this;\r\n if (self.map) {\r\n self.map.layers.slice().forEach(layer => {\r\n if (layer.owner === self) {\r\n self.map.removeLayer(layer);\r\n }\r\n });\r\n const idx = self.map.controls.indexOf(self);\r\n if (idx >= 0) {\r\n self.map.controls.splice(idx, 1);\r\n }\r\n self.map = null;\r\n }\r\n return self;\r\n }\r\n\r\n activate() {\r\n const self = this;\r\n if (self.map && self.map.activeControl && self.map.activeControl !== self) {\r\n self.map.previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate();\r\n }\r\n self.isActive = true;\r\n if (self.map) {\r\n self.map.activeControl = self;\r\n self.map.trigger(Consts.event.CONTROLACTIVATE, { control: self });\r\n self.trigger(Consts.event.CONTROLACTIVATE, { control: self });\r\n }\r\n return self;\r\n }\r\n\r\n deactivate(stopChain) {\r\n if (arguments.length === 0) {\r\n stopChain = false;\r\n }\r\n\r\n const self = this;\r\n self.isActive = false;\r\n if (self.map) {\r\n self.map.activeControl = null;\r\n\r\n if (!stopChain) {\r\n //determinar cuál es el control predeterminado para reactivarlo\r\n //salvo que sea yo mismo, claro\r\n var nextControl = self.map.getDefaultControl();\r\n if (nextControl === self) nextControl = null;\r\n else if (self.map.previousActiveControl === self) // GLS: Validamos antes de activar que el control activo anterior sea distinto al control actual\r\n nextControl = null;\r\n else if (!nextControl) {\r\n nextControl = self.map.previousActiveControl;\r\n }\r\n\r\n if (nextControl)\r\n nextControl.activate();\r\n }\r\n self.map.trigger(Consts.event.CONTROLDEACTIVATE, { control: self });\r\n self.trigger(Consts.event.CONTROLDEACTIVATE, { control: self });\r\n }\r\n return self;\r\n }\r\n\r\n enable() {\r\n const self = this;\r\n self.isDisabled = false;\r\n self.classList.remove(Consts.classes.DISABLED);\r\n delete self.dataset.tcMessage;\r\n if (self.containerControl && self.containerControl.onControlEnable) {\r\n self.containerControl.onControlEnable(self);\r\n }\r\n return self;\r\n }\r\n\r\n disable(options) {\r\n const self = this;\r\n options = options || {};\r\n self.isDisabled = true;\r\n self.classList.add(Consts.classes.DISABLED);\r\n let message = self.getLocaleString('disabledControl');\r\n if (options.reason) {\r\n message = `${message} - ${options.reason}`;\r\n }\r\n self.dataset.tcMessage = message;\r\n if (self.containerControl && self.containerControl.onControlDisable) {\r\n self.containerControl.onControlDisable(self);\r\n }\r\n return self;\r\n }\r\n\r\n highlight() {\r\n const self = this;\r\n if (self.div) {\r\n self.div.classList.add(Consts.classes.HIGHLIGHTED);\r\n }\r\n if (self.map) {\r\n self.map.trigger(Consts.event.CONTROLHIGHLIGHT, { control: self });\r\n }\r\n return self;\r\n }\r\n\r\n unhighlight() {\r\n const self = this;\r\n if (self.div) {\r\n self.div.classList.remove(Consts.classes.HIGHLIGHTED);\r\n }\r\n if (self.map) {\r\n self.map.trigger(Consts.event.CONTROLUNHIGHLIGHT, { control: self });\r\n }\r\n return self;\r\n }\r\n\r\n isHighlighted() {\r\n const self = this;\r\n if (self.div) {\r\n return self.div.classList.contains(Consts.classes.HIGHLIGHTED);\r\n }\r\n return false;\r\n }\r\n\r\n renderPromise() {\r\n const self = this;\r\n return self._firstRender || new Promise(function (resolve, _reject) {\r\n self.one(Consts.event.CONTROLRENDER, function () {\r\n resolve(self);\r\n });\r\n });\r\n }\r\n\r\n addUIEventListener(selector, event, listener) {\r\n const self = this;\r\n const elements = selector ? self.querySelectorAll(selector) : [self];\r\n elements.forEach(function (elm) {\r\n elm.addEventListener(event, listener);\r\n });\r\n return self;\r\n }\r\n\r\n addUIEventListeners() {\r\n return this;\r\n }\r\n\r\n isExclusive() {\r\n return false;\r\n }\r\n\r\n getLocaleString(key, texts) {\r\n const self = this;\r\n const locale = self.map ? self.map.options.locale : Cfg.locale;\r\n return Util.getLocaleString(locale, key, texts);\r\n }\r\n\r\n getUID() {\r\n const self = this;\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n if (self.exportsState) {\r\n return {};\r\n }\r\n return null;\r\n }\r\n\r\n importState(_state) {\r\n return this;\r\n }\r\n\r\n async getDownloadDialog() {\r\n const self = this;\r\n self._downloadDialog = self._downloadDialog || self.map.getControlsByClass('TC.control.FeatureDownloadDialog')[0];\r\n if (!self._downloadDialog) {\r\n self._downloadDialog = await self.map.addControl('FeatureDownloadDialog');\r\n }\r\n self._downloadDialog.caller = self;\r\n return self._downloadDialog;\r\n }\r\n\r\n async getElevationTool() {\r\n const self = this;\r\n if (!self.displayElevation && !self.options.displayElevation) {\r\n return null;\r\n }\r\n if (self.elevation) {\r\n return self.elevation;\r\n }\r\n if (!TC.tool.Elevation) {\r\n await import('../tool/Elevation');\r\n }\r\n if (typeof self.options.displayElevation === 'boolean') {\r\n if (self.map) {\r\n const mapElevation = await self.map.getElevationTool();\r\n if (mapElevation) {\r\n self.elevation = mapElevation;\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n }\r\n else {\r\n if (self.map) {\r\n const mapElevation = await self.map.getElevationTool();\r\n if (mapElevation) {\r\n self.elevation = new TC.tool.Elevation(TC.Util.extend(true, {}, mapElevation.options, self.options.displayElevation));\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n }\r\n return self.elevation;\r\n }\r\n\r\n #getNativeListener(evt, callback) {\r\n const self = this;\r\n const result = function (evt) {\r\n const cbParameter = {\r\n type: evt.type,\r\n target: self,\r\n currentTarget: self\r\n };\r\n if (evt.detail) {\r\n Object.keys(evt.detail).forEach(function (key) {\r\n if (!(key in cbParameter)) {\r\n cbParameter[key] = evt.detail[key];\r\n }\r\n });\r\n }\r\n return callback.call(self, cbParameter);\r\n }.bind(this);\r\n self._listeners = self._listeners || [];\r\n const stack = self._listeners[evt] = this._listeners[evt] || new Map();\r\n stack.set(callback, result);\r\n return result;\r\n }\r\n\r\n #onInternal(events, callback, options) {\r\n const self = this;\r\n events.split(' ').forEach(function (evt) {\r\n self.addEventListener(evt, self.#getNativeListener(evt, callback), options);\r\n });\r\n return self;\r\n }\r\n\r\n on(events, callback) {\r\n return this.#onInternal(events, callback);\r\n }\r\n\r\n one(events, callback) {\r\n return this.#onInternal(events, callback, { once: true });\r\n }\r\n\r\n off(events, callback) {\r\n const self = this;\r\n const eventList = events.split(' ');\r\n if (callback) {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack && stack.has(callback)) {\r\n self.removeEventListener(evt, stack.get(callback));\r\n }\r\n });\r\n }\r\n else {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack) {\r\n stack.forEach(function (cb) {\r\n self.removeEventListener(evt, cb);\r\n });\r\n stack.clear();\r\n }\r\n });\r\n }\r\n return self;\r\n }\r\n\r\n trigger(type, options) {\r\n const self = this;\r\n let ceOptions;\r\n if (options) {\r\n ceOptions = {\r\n detail: options\r\n };\r\n }\r\n const event = new CustomEvent(type, ceOptions);\r\n self.dispatchEvent(event);\r\n }\r\n\r\n listenerBySelector(selector, callback) {\r\n const self = this;\r\n // Crea una estructura a partir de un mapa cuyas claves son los elementos.\r\n // Los valores son objetos cuyas claves son tipos de eventos\r\n // y cuyos valores son objetos que tienen como claves los selectores\r\n // y cuyos valores son las funciones de callback.\r\n // Se crea una función que va buscando la primera correspondencia con un selector.\r\n // En cuanto la encuentra, ejecuta el callback y deja de procesar.\r\n return function (e) {\r\n const element = this;\r\n const eventType = e.type;\r\n var eventTypes = self.#onBySelectorMap.get(element);\r\n if (!eventTypes) {\r\n eventTypes = {};\r\n self.#onBySelectorMap.set(element, eventTypes);\r\n }\r\n var selectors = eventTypes[eventType];\r\n if (!selectors) {\r\n eventTypes[eventType] = selectors = {};\r\n }\r\n if (!selectors[selector]) {\r\n selectors[selector] = callback;\r\n }\r\n // Para cada evento en cada elemento hay que llamar una sola vez al callback que toque.\r\n // Así que si se ejecuta un callback, prohibimos al resto de los listeners resolverse.\r\n if (!e._listenerBySelectorCalled) {\r\n var matches = false;\r\n var elm = e.target;\r\n var result;\r\n while (elm && elm !== element) {\r\n for (selector in selectors) {\r\n if (elm.matches && elm.matches(selector)) {\r\n matches = true;\r\n result = selectors[selector].call(element, e);\r\n e._listenerBySelectorCalled = true;\r\n }\r\n }\r\n if (matches) {\r\n return result;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static async create(type, options) {\r\n const ctorName = type.substr(0, 1).toUpperCase() + type.substr(1);\r\n if (!TC.control[ctorName]) {\r\n const module = await import('./' + ctorName);\r\n TC.control[ctorName] = module.default;\r\n }\r\n return new TC.control[ctorName](null, options);\r\n }\r\n}\r\n\r\ncustomElements.get(elementName) || customElements.define(elementName, WebComponentControl);\r\nTC.control.WebComponentControl = WebComponentControl;\r\nexport default WebComponentControl;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport TOC from './TOC';\r\nimport Button from '../../SITNA/ui/Button';\r\nimport '../../SITNA/ui/Toggle';\r\nimport MapContents from './MapContents';\r\nimport Vector from '../../SITNA/layer/Vector';\r\nimport itemToolContainer from './itemToolContainer';\r\n\r\nTC.control = TC.control || {};\r\n\r\nConsts.classes.DRAG = Consts.classes.DRAG || 'tc-drag';\r\nConsts.classes.DRAGEND = Consts.classes.DRAGEND || 'tc-dragend';\r\nConsts.event.TOOLSOPEN = Consts.event.TOOLSOPEN || 'toolsopen.tc';\r\n\r\n//const fileOriginCompare = async function (l1, l2) {\r\n// if (l1._fileHandle && l2._fileHandle) {\r\n// return l1._fileHandle == l2._fileHandle;\r\n// //const aaa = (await l1._fileHandle.isSameEntry(l2._fileHandle));\r\n// //return aaa;\r\n// }\r\n\r\n// else\r\n// return l1._timeStamp === l2._timeStamp\r\n//};\r\n\r\nclass WorkLayerManager extends TOC {\r\n CLICKEVENT = 'click';\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.remove(super.CLASS);\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.layers = [];\r\n\r\n self._uiElementSelector = `ul > li.${self.CLASS}-elm`;\r\n self._toolContainerSelector = `.${self.CLASS}-tools`;\r\n\r\n self.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-dl';\r\n\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (!button) {\r\n const layer = self.map.getLayer(layerId);\r\n if (layer instanceof Vector) {\r\n const text = self.getLocaleString('downloadFeatures');\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.icon = Button.action.DOWNLOAD_ALL;\r\n button.setAttribute('title', text);\r\n button.dataset.layerId = layerId;\r\n }\r\n }\r\n return button;\r\n },\r\n actionFn: function () {\r\n const button = this;\r\n var li = button;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const layer = self.map.getLayer(button.dataset.layerId);\r\n self.getDownloadDialog().then(function (control) {\r\n const title = layer.title || '';\r\n const options = {\r\n title: `${title} - ${self.getLocaleString('downloadFeatures')}`,\r\n fileName: /\\.[a-z0-9]+$/i.test(title) ? title.substr(0, title.lastIndexOf('.')) : title,\r\n elevation: self.map.elevation && self.map.elevation.options\r\n };\r\n control.open(layer.features, options);\r\n });\r\n }\r\n });\r\n }\r\n\r\n getClassName() {\r\n return 'tc-ctl-wlm';\r\n }\r\n\r\n async loadTemplates() {\r\n const self = this;\r\n const mainTemplatePromise = import('../templates/tc-ctl-wlm.mjs');\r\n const elementTemplatePromise = import('../templates/tc-ctl-wlm-elm.mjs');\r\n const singleTemplatePromise = import('../templates/tc-ctl-wlm-type-sgl.mjs');\r\n const groupTemplatePromise = import('../templates/tc-ctl-wlm-type-grp.mjs');\r\n const groupNodeTemplatePromise = import('../templates/tc-ctl-wlm-type-grp-node.mjs');\r\n\r\n const template = {};\r\n template[self.CLASS] = (await mainTemplatePromise).default;\r\n template[self.CLASS + '-elm'] = (await elementTemplatePromise).default;\r\n template[self.CLASS + '-type-sgl'] = (await singleTemplatePromise).default;\r\n template[self.CLASS + '-type-grp'] = (await groupTemplatePromise).default;\r\n template[self.CLASS + '-type-grp-node'] = (await groupNodeTemplatePromise).default;\r\n self.template = template;\r\n }\r\n\r\n render(callback, options) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.map ?\r\n self.renderData(options ? TC.Util.extend(self.map.getLayerTree(), options) : self.map.getLayerTree(), function () {\r\n self.addUIEventListeners();\r\n import('sortablejs').then(function (module) {\r\n const Sortable = module.default;\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return !layer.stealth;\r\n })\r\n .forEach(function (layer) {\r\n self.updateLayerTree(layer);\r\n });\r\n\r\n\r\n const ul = self.div.querySelector('ul');\r\n self._sortable = Sortable.create(ul, {\r\n handle: '.' + self.CLASS + '-dd',\r\n animation: 150,\r\n onSort: function (e) {\r\n self.#moveLayer(e.item, e.oldIndex, e.newIndex);\r\n }\r\n });\r\n\r\n ul.addEventListener('keydown', TC.EventTarget.listenerBySelector('li', function (e) {\r\n // Para mover capas con el teclado.\r\n var elm = e.target;\r\n while (elm.tagName !== 'LI') {\r\n elm = elm.parentElement;\r\n if (!elm) {\r\n return;\r\n }\r\n }\r\n const swap = function (oldIdx, newIdx) {\r\n const sortableItems = self._sortable.toArray();\r\n const buffer = sortableItems[oldIdx];\r\n sortableItems[oldIdx] = sortableItems[newIdx];\r\n sortableItems[newIdx] = buffer;\r\n self._sortable.sort(sortableItems);\r\n self.#moveLayer(elm, oldIdx, newIdx);\r\n };\r\n const listItems = self.getLayerUIElements();\r\n const elmIdx = listItems.indexOf(elm);\r\n switch (true) {\r\n case /Up$/.test(e.key):\r\n if (elmIdx > 0) {\r\n swap(elmIdx, elmIdx - 1);\r\n elm.focus();\r\n e.stopPropagation();\r\n }\r\n break;\r\n case /Down$/.test(e.key):\r\n if (elmIdx < listItems.length - 1) {\r\n swap(elmIdx, elmIdx + 1);\r\n elm.focus();\r\n e.stopPropagation();\r\n }\r\n break;\r\n case /Enter$/.test(e.key):\r\n elm.blur();\r\n e.stopPropagation();\r\n break;\r\n default:\r\n break;\r\n }\r\n }));\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n );\r\n }) :\r\n Promise.reject(Error('Cannot render: control has no map')));\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register(map);\r\n\r\n if (self.options.fileEditing) {\r\n await map.addControl('fileEdit', { caller: self, snapping: true });\r\n }\r\n\r\n map.loaded(function () {\r\n self.updateScale();\r\n });\r\n\r\n map\r\n .on(Consts.event.LAYEROPACITY, function (e) {\r\n const li = self.#findLayerElement(e.layer);\r\n if (li) {\r\n li.querySelector('input[type=range]').value = Math.round(e.opacity * 100);\r\n }\r\n })\r\n .on(Consts.event.FEATURESIMPORT, function (e) {\r\n var fileName = e.fileName;\r\n if (e.features && e.features.length > 0) { // GLS: Escuchamos al evento FEATURESIMPORT para poder desplegar el control de capas cargadas\r\n // Ignoramos los GPX (se supone que los gestionará Geolocation)\r\n var pattern = '.' + Consts.format.GPX.toLowerCase();\r\n if (e.fileName.toLowerCase().indexOf(pattern) === e.fileName.length - pattern.length) {\r\n return;\r\n }\r\n\r\n map.one(Consts.event.LAYERADD, function (e) {\r\n if (e && e.layer && e.layer.title === fileName) {\r\n // Desplegamos el control capas cargadas\r\n self.highlight();\r\n\r\n // abrimos el panel de herramientas\r\n self.map.trigger(Consts.event.TOOLSOPEN);\r\n }\r\n });\r\n }\r\n });\r\n return self;\r\n }\r\n\r\n onExternalServiceAdded(_e) {\r\n // Este control no tiene que aceptar servicios externos directamente\r\n }\r\n\r\n addUIEventListeners() {\r\n const self = this;\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`sitna-toggle.${self.CLASS}-cb-visibility`, function (e) {\r\n // al estar en ipad el evento pasa a ser touchstart en la constante: Consts.event.CLICK, los checkbox no funcionan bien con este evento\r\n const checkbox = e.target;\r\n var li = checkbox;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && !li.matches('li.' + self.CLASS + '-elm'));\r\n\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n layer.setVisibility(checkbox.checked);\r\n e.stopPropagation();\r\n }));\r\n\r\n const inputRangeListener = function (e) {\r\n const range = e.target;\r\n var li = range;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n layer.setOpacity(range.value / 100);\r\n };\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=range]', inputRangeListener));\r\n self.div.addEventListener('input', TC.EventTarget.listenerBySelector('input[type=range]', inputRangeListener));\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`.${self.CLASS}-cb-info`, function (e) {\r\n const checkbox = e.target;\r\n var li = checkbox;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const info = li.querySelector('.' + self.CLASS + '-info');\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n // Cargamos la imagen de la leyenda\r\n info.querySelectorAll('.' + self.CLASS + '-legend img').forEach(function (img) {\r\n self.styleLegendImage(img, layer);\r\n });\r\n info.classList.toggle(Consts.classes.HIDDEN, !checkbox.checked);\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector(`.${self.CLASS}-btn-del:not(:disabled)`, function (e) {\r\n var li = e.target;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n self.map.removeLayer(layer);\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector('.' + self.CLASS + '-del-all', function (e) {\r\n TC.confirm(self.getLocaleString('layersRemove.confirm'), function () {\r\n self.getLayerUIElements()\r\n .map(function (li) {\r\n return self.map.getLayer(li.dataset.layerId);\r\n })\r\n .forEach(function (layer) {\r\n self.map.removeLayer(layer);\r\n });\r\n });\r\n e.stopPropagation();\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector(`.${self.CLASS}-btn-more`, function (e) {\r\n const button = e.target;\r\n const container = button.parentElement;\r\n const isExpanded = container.classList.toggle('tc-expanded');\r\n button.text = self.getLocaleString(isExpanded ? 'collapse' : 'otherTools');\r\n button.iconText = isExpanded ? '\\u2bc7' : '\\u2022\\u2022\\u2022';\r\n }));\r\n }\r\n\r\n updateLayerVisibility(layer) {\r\n const self = this;\r\n const li = self.#findLayerElement(layer);\r\n if (li) {\r\n const visible = layer.getVisibility();\r\n li.querySelector(`sitna-toggle.${self.CLASS}-cb-visibility`).checked = visible;\r\n }\r\n }\r\n\r\n updateLayerTree(layer) {\r\n const self = this;\r\n\r\n var getLegendImgByPost = async function (layer) {\r\n if (layer && layer.options.method && layer.options.method === \"POST\") {\r\n try {\r\n const src = await layer.getLegendGraphicImage();\r\n return src;\r\n }\r\n catch (err) {\r\n TC.error(err);\r\n }\r\n }\r\n };\r\n\r\n if (!layer.isBase && !layer.options.stealth) {\r\n MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n var alreadyExists = false;\r\n for (var i = 0, len = self.layers.length; i < len; i++) {\r\n if (layer === self.layers[i]) {\r\n alreadyExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n self.layers.push(layer);\r\n\r\n var domReadyPromise;\r\n const layerTitle = layer.title || layer.wrap.getServiceTitle && layer.wrap.getServiceTitle();\r\n layer._title = layerTitle;\r\n var layerData = {\r\n title: layer.hideTitle ? '' : layerTitle,\r\n hide: layer.renderOptions && layer.renderOptions.hide ? true : false,\r\n opacity: layer.renderOptions && layer.renderOptions.opacity ? layer.renderOptions.opacity * 100 : 100,\r\n customLegend: layer.customLegend,\r\n unremovable: layer.unremovable,\r\n id: layer.id\r\n };\r\n var isRaster = layer.isRaster();\r\n if (isRaster) {\r\n layerData.hasExtent = !!layer.getExtent();\r\n layerData.layerNames = layer.layerNames;\r\n const path = layer.names.map(n => layer.getPath(n));\r\n path.forEach(p => p.shift());\r\n layerData.path = path;\r\n layerData.legend = [];\r\n layerData.abstract = [];\r\n layerData.metadata = [];\r\n layer.names.forEach(function (name) {\r\n var info = layer.getInfo(name);\r\n info.legend && layerData.legend.push(info.legend);\r\n info.abstract && layerData.abstract.push(info.abstract);\r\n info.metadata && layerData.metadata.push(info.metadata);\r\n });\r\n\r\n const info = layer.getInfo();\r\n layerData.hasInfo = Object.prototype.hasOwnProperty.call(info, 'abstract') ||\r\n Object.prototype.hasOwnProperty.call(info, 'legend') ||\r\n Object.prototype.hasOwnProperty.call(info, 'metadata');\r\n }\r\n else {\r\n layerData.hasExtent = true;\r\n layerData.hasInfo = false;\r\n }\r\n\r\n getLegendImgByPost(layer).then(function (_src) {\r\n\r\n self.getRenderedHtml(self.CLASS + '-elm', layerData).then(function (out) {\r\n const parser = new DOMParser();\r\n const li = parser.parseFromString(out, 'text/html').body.firstChild;\r\n var layerNode;\r\n var isGroup = false;\r\n var i;\r\n if (isRaster) {\r\n isGroup = layer.names.length > 1;\r\n if (!isGroup) {\r\n const name = layer.names[0];\r\n const layerNodes = layer.wrap.getAllLayerNodes();\r\n for (i = 0; i < layerNodes.length; i++) {\r\n var node = layerNodes[i];\r\n if (layer.wrap.getName(node) === name) {\r\n layerNode = node;\r\n if (layer.wrap.getLayerNodes(node).length > 0) {\r\n isGroup = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const typeElm = li.querySelector('.' + self.CLASS + '-type');\r\n const className = isGroup ? self.CLASS + '-type-grp' : self.CLASS + '-type-sgl';\r\n typeElm.classList.add(className);\r\n\r\n const zoomBtn = li.querySelector(`.${self.CLASS}-btn-zoom`);\r\n if (zoomBtn) {\r\n zoomBtn.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.map.zoomToLayer(li.dataset.layerId, { animate: true });\r\n }, { passive: true });\r\n }\r\n\r\n if (layerNode) {\r\n layer.wrap.normalizeLayerNode(layerNode);\r\n\r\n self.getRenderedHtml(className, layerNode).then(function (out) {\r\n var tip;\r\n\r\n typeElm.addEventListener('mouseover', function (_e) {\r\n const mapDiv = self.map.div;\r\n const typeElmRect = typeElm.getBoundingClientRect();\r\n tip = document.createElement('div');\r\n tip.classList.add(self.CLASS + '-tip');\r\n tip.innerHTML = out;\r\n tip.style.top = typeElmRect.top - mapDiv.offsetTop + 'px';\r\n tip.style.right = mapDiv.offsetWidth - (typeElmRect.left - mapDiv.offsetLeft) + 'px';\r\n mapDiv.appendChild(tip);\r\n });\r\n typeElm.addEventListener('mouseout', function (_e) {\r\n tip.parentElement.removeChild(tip);\r\n });\r\n });\r\n }\r\n const ul = self.div.querySelector('ul');\r\n li.dataset.layerId = layer.id;\r\n\r\n const lis = self.getLayerUIElements();\r\n const layerList = self.map.workLayers\r\n .filter(function (l) {\r\n return !l.stealth;\r\n });\r\n const layerIdx = layerList.indexOf(layer);\r\n\r\n self.getItemTools().forEach(tool => self.addItemToolUI(li, tool));\r\n\r\n var inserted = false;\r\n for (i = 0; i < lis.length; i++) {\r\n const referenceLi = lis[i];\r\n const referenceLayerIdx = layerList.indexOf(self.map.getLayer(referenceLi.dataset.layerId));\r\n if (referenceLayerIdx < layerIdx) {\r\n referenceLi.insertAdjacentElement('beforebegin', li);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n ul.appendChild(li);\r\n }\r\n\r\n if (domReadyPromise) domReadyPromise(li);\r\n self.updateScale();\r\n });\r\n });\r\n\r\n var elligibleLayersNum = self.#getElligibleLayersNumber();\r\n const numElm = self.div.querySelector('.' + self.CLASS + '-n');\r\n const emptyElm = self.div.querySelector('.' + self.CLASS + '-empty');\r\n const contentElm = self.div.querySelector('.' + self.CLASS + '-content');\r\n numElm.textContent = elligibleLayersNum;\r\n if (elligibleLayersNum > 0) {\r\n numElm.classList.add(Consts.classes.VISIBLE);\r\n emptyElm.classList.add(Consts.classes.HIDDEN);\r\n contentElm.classList.remove(Consts.classes.HIDDEN);\r\n }\r\n else {\r\n numElm.classList.remove(Consts.classes.VISIBLE);\r\n emptyElm.classList.remove(Consts.classes.HIDDEN);\r\n contentElm.classList.add(Consts.classes.HIDDEN);\r\n }\r\n\r\n const deleteAllElm = self.div.querySelector('.' + self.CLASS + '-del-all');\r\n deleteAllElm.classList.toggle(Consts.classes.HIDDEN, !self.#shouldBeDelAllVisible());\r\n }\r\n else {\r\n let layerTitle = layer.title || layer.wrap.getServiceTitle && layer.wrap.getServiceTitle();\r\n //comprobar si hay capas con títulos repetidos \r\n const regExpConstr = function () {\r\n return new RegExp(layer.id.replace(/([\\w]*-\\d)(-\\d)*/gi, \"$1-\\\\d\"), \"gi\");\r\n };\r\n //filtramos las capas por aquellas que sean hermanas es decir file-1-[numero_fichero]-[numero capa] y busco la posición de la capa actual\r\n //en el array filtrado\r\n const index = (self.layers.filter((l) => l.title === layer.title).reduce((vi, va) => {\r\n const layerIdRoot = regExpConstr().exec(va.id) ? regExpConstr().exec(va.id)[0] : va.id;\r\n return vi.indexOf(layerIdRoot) >= 0 ? vi : vi.concat(layerIdRoot);\r\n }, []).findIndex((l) => { const _match = /^[\\w]*-\\d-\\d/gi.exec(layer.id); return l === (_match ? _match[0] : layer.id) }));\r\n //Si la posición es mayor que 0, añado el ordinal al titulo de capa\r\n if (index > 0)\r\n layer._title = layerTitle = layerTitle + \" (\" + (index + 1) + \")\";\r\n const prevLi = self.div.querySelector(\"ul li[data-layer-id='\" + layer.id + \"']\");\r\n if (layer.features?.length) {\r\n if (layer.features.some(f => f.getPath().length)) {\r\n prevLi.querySelector(\".tc-ctl-wlm-lyr\").innerHTML = layerTitle;\r\n prevLi.querySelector(\".tc-ctl-wlm-lyr\").title = layerTitle;\r\n // Obtenemos las rutas de todas las entidades y eliminamos los duplicados\r\n const uniquePaths = [...new Set(layer.features.map(f => f.getPath().join(' › ')))];\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").innerHTML = uniquePaths.join(' • ');\r\n }\r\n else {\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").innerHTML = layerTitle;\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").title = layerTitle;\r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n updateScale() {\r\n const self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n var layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer && layer.names) {\r\n var isVisible = false;\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (layer.isVisibleByScale(layer.names[i])) {\r\n isVisible = true;\r\n break;\r\n }\r\n }\r\n li.classList.toggle(self.CLASS + '-elm-notvisible', !isVisible);\r\n }\r\n });\r\n }\r\n\r\n update() {\r\n const self = this;\r\n\r\n self.getLayerUIElements().forEach(function (li) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer) {\r\n li.querySelector(`sitna-toggle.${self.CLASS}-cb-visibility`).checked = layer.getVisibility();\r\n layer.tree = null;\r\n }\r\n });\r\n\r\n self.updateScale();\r\n }\r\n\r\n updateLayerOrder(_layer, _oldIdx, _newIdx) {\r\n const self = this;\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return !layer.stealth;\r\n })\r\n .forEach(function (layer) {\r\n const li = self.#findLayerElement(layer);\r\n if (li) {\r\n li.parentElement.firstChild.insertAdjacentElement('beforebegin', li);\r\n }\r\n });\r\n }\r\n\r\n removeLayer(layer) {\r\n const self = this;\r\n const idx = self.layers.indexOf(layer);\r\n if (idx >= 0) {\r\n self.layers.splice(idx, 1);\r\n }\r\n self.getLayerUIElements().forEach(function (li) {\r\n if (li.dataset.layerId === layer.id) {\r\n li.parentElement.removeChild(li);\r\n }\r\n });\r\n const contentElm = self.div.querySelector('.' + self.CLASS + '-content');\r\n const emptyElm = self.div.querySelector('.' + self.CLASS + '-empty');\r\n const numberElm = self.div.querySelector('.' + self.CLASS + '-n');\r\n var nChildren = self.#getElligibleLayersNumber();\r\n numberElm.textContent = nChildren;\r\n if (nChildren > 0) {\r\n contentElm.classList.remove(Consts.classes.HIDDEN);\r\n emptyElm.classList.add(Consts.classes.HIDDEN);\r\n numberElm.classList.add(Consts.classes.VISIBLE);\r\n }\r\n else {\r\n if (self.#shouldBeDelAllVisible()) {\r\n self.div.querySelector('.' + self.CLASS + '-del-all').classList.add(Consts.classes.HIDDEN);\r\n }\r\n contentElm.classList.add(Consts.classes.HIDDEN);\r\n emptyElm.classList.remove(Consts.classes.HIDDEN);\r\n numberElm.classList.remove(Consts.classes.VISIBLE);\r\n }\r\n }\r\n\r\n getLayerUIElements() {\r\n const self = this;\r\n return Array.from(self.div.querySelectorAll(`ul > li.${self.CLASS}-elm`));\r\n }\r\n\r\n #findLayerElement(layer) {\r\n this.getLayerUIElements().find(li => li.dataset.layerId === layer.id);\r\n }\r\n\r\n #shouldBeDelAllVisible = function () {\r\n return !this.layers.some(layer => layer.unremovable);\r\n }\r\n\r\n #getElligibleLayersNumber() {\r\n return this.layers.length;\r\n }\r\n\r\n #moveLayer = function (listItem, oldIndex, newIndex, callback) {\r\n const self = this;\r\n const layerItems = self.getLayerUIElements();\r\n var targetItem;\r\n if (newIndex > oldIndex) {\r\n targetItem = layerItems[newIndex - 1];\r\n }\r\n else if (newIndex < oldIndex) {\r\n targetItem = layerItems[newIndex + 1];\r\n }\r\n else {\r\n return;\r\n }\r\n const sourceLayer = self.map.getLayer(listItem.dataset.layerId);\r\n const targetLayer = self.map.getLayer(targetItem.dataset.layerId);\r\n const newIdx = self.map.layers.indexOf(targetLayer);\r\n if (newIdx >= 1 && newIdx < self.map.layers.length) {\r\n self.map.insertLayer(sourceLayer, newIdx, callback);\r\n }\r\n }\r\n}\r\n\r\nTC.mix(WorkLayerManager, itemToolContainer);\r\n\r\nTC.control.WorkLayerManager = WorkLayerManager;\r\nexport default WorkLayerManager;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\n\r\nTC.Util = Util;\r\nTC.control = TC.control || {};\r\n\r\n// Mixin\r\nTC.control.infoShare = {\r\n\r\n getDiv: function (divElement) {\r\n const self = this;\r\n return divElement ? divElement : self._dialogDiv;\r\n },\r\n\r\n getShareDialog: async function (divElement) {\r\n const self = this;\r\n const dialogDiv = self.getDiv(divElement);\r\n if (!self._shareCtl) {\r\n self._shareCtl = await self.map.addControl('share', {\r\n id: self.getUID(),\r\n div: dialogDiv.querySelector('.tc-modal-body .' + self.CLASS + '-share-dialog-ctl'),\r\n includeControls: false\r\n });\r\n self._shareCtl.caller = self;\r\n self._shareCtl.extraParams = null;\r\n }\r\n return self._shareCtl;\r\n },\r\n\r\n onShowShareDialog: async function () {\r\n const self = this;\r\n self.toShare = self.toShare || {};\r\n self.toShare.doZoom = true;\r\n // para gestionar el zoom a la feature al compartir desde el control o el general, ya que la capa que contiene la feature no cambia por lo que no salta.\r\n self.map.trigger(Consts.event.MAPCHANGE);\r\n const shareCtl = self._shareCtl;\r\n const shareDiv = shareCtl.div;\r\n const link = await shareCtl.generateLink();\r\n const input = shareDiv.querySelector(\".tc-url input[type=text]\");\r\n input.value = link;\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n shareDiv.querySelector(\".tc-iframe input[type=text]\").value = await shareCtl.generateIframe(link);\r\n },\r\n\r\n showShareDialog: function (divElement) {\r\n const self = this;\r\n const dialogDiv = self.getDiv(divElement);\r\n const shareDialog = dialogDiv.querySelector('.' + self.CLASS + '-share-dialog');\r\n TC.Util.showModal(shareDialog, {\r\n openCallback: function () {\r\n self.onShowShareDialog(shareDialog).then(function () {\r\n self.map.trigger(Consts.event.DIALOG, { control: self._shareCtl, action: \"share\" });\r\n });\r\n },\r\n closeCallback: function () {\r\n self.onCloseShareDialog();\r\n }\r\n });\r\n },\r\n\r\n onCloseShareDialog: function () {\r\n const self = this;\r\n self.toShare = self.toShare || {};\r\n self.toShare.doZoom = false;\r\n // para gestionar el zoom a la feature al compartir desde el control o el general, ya que la capa que contiene la feature no cambia por lo que no salta.\r\n self.map.trigger(Consts.event.MAPCHANGE);\r\n }\r\n\r\n};\r\n\r\nconst infoShare = TC.control.infoShare;\r\nexport default infoShare;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\n\r\nTC.Util = Util;\r\nTC.control = TC.control || {};\r\n\r\n// Mixin\r\nconst itemToolContainer = {\r\n\r\n _uiElementSelector: `ul > li`,\r\n _toolContainerSelector: '.tc-item-tools',\r\n isItemToolContainer: true,\r\n\r\n getItemTools: function () {\r\n const self = this;\r\n if (!self.itemTools) {\r\n self.itemTools = [];\r\n }\r\n return self.itemTools;\r\n },\r\n\r\n getItemUIElements: function (selector) {\r\n const self = this;\r\n if (selector) {\r\n self._uiElementSelector = selector;\r\n }\r\n return Array.from(self.div.querySelectorAll(self._uiElementSelector));\r\n },\r\n\r\n getToolContainer: function (itemElement) {\r\n const self = this;\r\n return itemElement.querySelector(self._toolContainerSelector);\r\n },\r\n\r\n addItemToolUI: function(elm, tool) {\r\n const self = this;\r\n if (Util.isFunction(tool.renderFn)) {\r\n const container = self.getToolContainer(elm);\r\n const button = tool.renderFn(container, elm.dataset.layerId);\r\n if (button) {\r\n const lastButton = container.querySelector(`.tc-item-tool-last`);\r\n if (lastButton) {\r\n lastButton.insertAdjacentElement('beforebegin', button);\r\n }\r\n else {\r\n container.appendChild(button);\r\n }\r\n if (Util.isFunction(tool.actionFn)) {\r\n const eventName = (button instanceof Toggle) ? 'change' : Consts.event.CLICK;\r\n button.addEventListener(eventName, function (_e) {\r\n tool.actionFn.call(button);\r\n }, { passive: true });\r\n }\r\n if (Util.isFunction(tool.updateFn) && tool.updateEvents) {\r\n self.map.on(tool.updateEvents.join(' '), function (e) {\r\n if (!e.layer || e.layer.id === button.dataset.layerId) {\r\n tool.updateFn.call(button, e);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n addItemTool: function(options) {\r\n const self = this;\r\n self.getItemTools().push(options);\r\n self.getItemUIElements().forEach(function (elm) {\r\n self.addItemToolUI(elm, options);\r\n });\r\n }\r\n\r\n};\r\n\r\nTC.control.itemToolContainer = itemToolContainer;\r\nexport default itemToolContainer;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\n\r\n\r\n// Mixin\r\nconst layerOwner = {\r\n\r\n getLayers: function () {\r\n const self = this;\r\n if (!self.layers) {\r\n self.layers = [];\r\n }\r\n return self.layers;\r\n },\r\n\r\n registerLayerAdd: function () {\r\n const self = this;\r\n self.map.on(Consts.event.LAYERADD, function (e) {\r\n const match = self.getIdCount(e.layer.id);\r\n if (match) {\r\n TC.setUIDStart(match + 1, { prefix: self.id + '-' });\r\n e.layer.owner = self;\r\n }\r\n });\r\n },\r\n\r\n getIdCount: function (id) {\r\n const self = this;\r\n const regEx = new RegExp(`^${self.id}(-(\\\\d+))*$`);\r\n const match = id.match(regEx);\r\n if (match) {\r\n return parseInt(match[1]);\r\n }\r\n return 0;\r\n }\r\n\r\n};\r\n\r\nexport default layerOwner;","import TC from '../TC';\r\nTC.filter = {};\r\n\r\nTC.filter.Operators = [\r\n \"PropertyIsEqualTo\",\r\n \"PropertyIsGreaterThan\",\r\n \"PropertyIsGreaterThanOrEqualTo\",\r\n \"PropertyIsLessThan\",\r\n \"PropertyIsLessThanOrEqualTo\",\r\n \"PropertyIsNotEqualTo\",\r\n \"PropertyIsLike\",\r\n \"PropertyIsNull\",\r\n \"PropertyIsBetween\",\r\n \"Within\",\r\n \"Intersects\",\r\n \"Bbox\"\r\n]\r\n\r\nTC.filter.Filter = function (tagName) {\r\n this.tagName_ = tagName;\r\n \r\n this._defaultNSURL = \"http://www.opengis.net/ogc\";\r\n this._defaultPrefixNS = this._wfsPrefixNS = \"ogc\";\r\n this._fieldTitle = \"PropertyName\";\r\n\r\n this._defaultNSURL = this._wfsNSURL = \"http://www.opengis.net/ogc\";\r\n this._wfs2prefixNS = \"fes\";\r\n this._wfs2NSURL = \"http://www.opengis.net/fes/2.0\";\r\n this._wfs2FieldTitle = \"ValueReference\";\r\n this._escapeAttrName = \"escape\";\r\n this._wfs2EscapeAttrName = \"escapeChar\"; \r\n};\r\n\r\n\r\n\r\nTC.filter.Filter.prototype.getTagName = function () {\r\n return this.tagName_;\r\n};\r\nTC.filter.Filter.prototype.setTagName = function (_text) { \r\n return this.tagName_;\r\n};\r\n\r\nTC.filter.Filter.prototype.writeFilterCondition_ = function () {\r\n\r\n //return '<{prefix}:{tag}>{childs}'.format({prefix:\"ogc\",tag:filter.getTagName(),childs:\"\"});\r\n var filter = this;\r\n return '<{prefix}:Filter xmlns:{prefix}=\\\"{NSURL}\" xmlns:gml=\\\"http://www.opengis.net/gml{gmlversion}\">{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n NSURL: this._defaultNSURL,\r\n tag: filter.getTagName(),\r\n inner: this.writeInnerCondition_(filter),\r\n gmlVersion: (this._defaultNSURL === this._wfs2NSURL ? '/3.2' : '')\r\n });\r\n\r\n /*ol.xml.pushSerializeAndPop(item,\r\n ol.format.WFS.GETFEATURE_SERIALIZERS_,\r\n ol.xml.makeSimpleNodeFactory(filter.getTagName()),\r\n [filter], objectStack);*/\r\n}\r\nTC.filter.Filter.prototype.writeInnerCondition_ = function (filter) {\r\n if (filter != this) {\r\n filter._defaultNSURL = this._defaultNSURL;\r\n filter._defaultPrefixNS = this._defaultPrefixNS;\r\n filter._fieldTitle = this._fieldTitle;\r\n }\r\n\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n return filter.write()\r\n }\r\n else if (filter instanceof TC.filter.ComparisonBinary) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Comparison) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Function) {\r\n return filter.write();\r\n }\r\n else\r\n return filter.write();\r\n};\r\nTC.filter.Filter.prototype.writeInnerArrayCondition_ = function (_filters) {\r\n const parent = this;\r\n return parent.conditions.reduce(function (vi, va, _index) {\r\n return (vi instanceof TC.filter.Filter ? parent.writeInnerCondition_(vi) : vi) + parent.writeInnerCondition_(va);\r\n });\r\n}\r\n\r\nTC.filter.Filter.prototype.getText = function (wfsVersion) { \r\n if (wfsVersion && parseFloat(wfsVersion,10) >= 2) {\r\n this._defaultPrefixNS = this._wfs2prefixNS;\r\n this._defaultNSURL = this._wfs2NSURL;\r\n this._fieldTitle = this._wfs2FieldTitle;\r\n this._escapeAttrName = this._wfs2EscapeAttrName;\r\n }\r\n return this.writeFilterCondition_();\r\n};\r\n\r\nTC.filter.Filter.prototype.readText = function (text) {\r\n if (text.indexOf(this._wfs2prefixNS) > -1 && \r\n text.indexOf(this._wfs2NSURL) > -1 &&\r\n text.indexOf(this._wfs2FieldTitle) > -1 &&\r\n text.indexOf(this._wfs2EscapeAttrName) > -1) {\r\n this._defaultPrefixNS = this._wfs2prefixNS;\r\n this._defaultNSURL = this._wfs2NSURL;\r\n this._fieldTitle = this._wfs2FieldTitle;\r\n this._escapeAttrName = this._wfs2EscapeAttrName;\r\n }\r\n\r\n return this.readFilterCondition_(text); \r\n};\r\n\r\nTC.filter.Filter.prototype.readFilterCondition_ = function (text) {\r\n this.setTagName(text);\r\n return this.readInnerCondition_(text); \r\n}\r\nTC.filter.Filter.prototype.readInnerCondition_ = function (text) {\r\n //if (filter != this) { \r\n // filter._fieldTitle = this._fieldTitle;\r\n //}\r\n\r\n //if (filter instanceof TC.filter.LogicalNary) {\r\n // return filter.write()\r\n //}\r\n //else if (filter instanceof TC.filter.ComparisonBinary) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Comparison) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Spatial) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Function) {\r\n // return filter.write();\r\n //}\r\n //else\r\n return filter.read(text);\r\n};\r\n\r\nTC.filter.and = function (_conditions) {\r\n var params = [null].concat(Array.prototype.slice.call(arguments));\r\n return new (Function.prototype.bind.apply(TC.filter.And, params))();\r\n};\r\n\r\nTC.filter.or = function (_conditions) {\r\n var params = [null].concat(Array.prototype.slice.call(arguments));\r\n return new (Function.prototype.bind.apply(TC.filter.Or, params))();\r\n};\r\n\r\nTC.filter.not = function (condition) {\r\n return new TC.filter.Not(condition);\r\n};\r\n\r\n\r\nTC.filter.intersects = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Intersects(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Intersects(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\n\r\nTC.filter.within = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Within(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Within(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\n\r\nTC.filter.equalTo = function (propertyName, expression, opt_matchCase) {\r\n return new TC.filter.EqualTo(propertyName, expression, opt_matchCase);\r\n};\r\n\r\nTC.filter.notEqualTo = function (propertyName, expression, opt_matchCase) {\r\n return new TC.filter.NotEqualTo(propertyName, expression, opt_matchCase);\r\n};\r\n\r\nTC.filter.lessThan = function (propertyName, expression) {\r\n return new TC.filter.LessThan(propertyName, expression);\r\n};\r\n\r\nTC.filter.lessThanOrEqualTo = function (propertyName, expression) {\r\n return new TC.filter.LessThanOrEqualTo(propertyName, expression);\r\n};\r\n\r\nTC.filter.greaterThan = function (propertyName, expression) {\r\n return new TC.filter.GreaterThan(propertyName, expression);\r\n};\r\n\r\nTC.filter.greaterThanOrEqualTo = function (propertyName, expression) {\r\n return new TC.filter.GreaterThanOrEqualTo(propertyName, expression);\r\n};\r\n\r\nTC.filter.isNull = function (propertyName) {\r\n return new TC.filter.IsNull(propertyName);\r\n};\r\n\r\nTC.filter.between = function (propertyName, lowerBoundary, upperBoundary) {\r\n return new TC.filter.IsBetween(propertyName, lowerBoundary, upperBoundary);\r\n};\r\n\r\nTC.filter[\"function\"] = function (functionName, params) {\r\n return new TC.filter.Function(functionName, params);\r\n};\r\n\r\nTC.filter.like = function (propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\r\n return new TC.filter.IsLike(propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase);\r\n};\r\n\r\nTC.filter.LogicalNary = function (tagName, _conditions) {\r\n\r\n TC.filter.Filter.call(this, tagName);\r\n\r\n this.conditions = Array.prototype.slice.call(arguments, 1);\r\n};\r\nTC.inherit(TC.filter.LogicalNary, TC.filter.Filter);\r\n\r\nTC.filter.And = function (_conditions) {\r\n var params = ['And'].concat(Array.prototype.slice.call(arguments));\r\n TC.filter.LogicalNary.apply(this, params);\r\n};\r\nTC.inherit(TC.filter.And, TC.filter.LogicalNary);\r\n\r\nTC.filter.Or = function (_conditions) {\r\n var params = ['Or'].concat(Array.prototype.slice.call(arguments));\r\n TC.filter.LogicalNary.apply(this, params);\r\n};\r\nTC.inherit(TC.filter.Or, TC.filter.LogicalNary);\r\n\r\nTC.filter.LogicalNary.prototype.write = function () {\r\n return '<{prefix}:{tag}>{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: this.writeInnerArrayCondition_()\r\n });\r\n}\r\n\r\nTC.filter.Not = function (condition) {\r\n this.condition = condition;\r\n TC.filter.Filter.call(this, 'Not');\r\n \r\n};\r\nTC.inherit(TC.filter.Not, TC.filter.Filter);\r\n\r\nTC.filter.Filter.prototype.write=function () {\r\n return '<{prefix}:{tag}>{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: this.writeInnerCondition_(this.condition)\r\n });\r\n}\r\n\r\nTC.filter.Comparison = function (tagName, propertyName) {\r\n\r\n TC.filter.Filter.call(this, tagName);\r\n\r\n this.propertyName = propertyName;\r\n};\r\nTC.inherit(TC.filter.Comparison, TC.filter.Filter);\r\n\r\nTC.filter.Comparison.prototype.write = function () {\r\n var values = '';\r\n //isbetween\r\n if (this.LowerBoundary && this.UpperBoundary)\r\n values = '<{prefix}:LowerBoundary><{prefix}:Literal>{LowerBoundary}<{prefix}:UpperBoundary><{prefix}:Literal>{UpperBoundary}'.format({\r\n prefix:this._defaultPrefixNS,\r\n LowerBoundary: this.LowerBoundary,\r\n UpperBoundary: this.UpperBoundary\r\n });\r\n if (this.pattern)\r\n values = '<{prefix}:Literal>'.format({\r\n prefix: this._defaultPrefixNS,\r\n Pattern: this.pattern\r\n });\r\n if (this.params)\r\n if (Array.isArray(this.params))\r\n values = this.params.reduce(function (a, b, i) {\r\n var fmt = function (text) {\r\n return '<{prefix}:Literal>'.format({ prefix: this._defaultPrefixNS, value: text });\r\n }\r\n return (i > 0 ? a : fmt(a)) + fmt(b);\r\n });\r\n else\r\n values = '<{prefix}:Literal>'.format({ prefix: this._defaultPrefixNS, value: this.params });\r\n\r\n return '<{prefix}:{tag}{matchCase}{escape}{singleChar}{wildCard}><{prefix}:{fieldTitle}>{name}{values}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n matchCase: (typeof (this.matchCase) !== \"undefined\" ? \" matchCase=\\\"\" + this.matchCase + \"\\\"\" : \"\"),\r\n escape: (typeof (this.escapeChar) !== \"undefined\" ? (\" \" + this._escapeAttrName +\"=\\\"\" + this.escapeChar + \"\\\"\") : \"\"),\r\n singleChar: (typeof (this.singleChar) !== \"undefined\" ? \" singleChar=\\\"\" + this.singleChar + \"\\\"\" : \"\"),\r\n wildCard: (typeof (this.wildCard) !== \"undefined\" ? \" wildCard=\\\"\" + this.wildCard + \"\\\"\" : \"\"),\r\n name: this.propertyName,\r\n values: values,\r\n fieldTitle: this._fieldTitle\r\n });\r\n}\r\n\r\nTC.filter.ComparisonBinary = function (\r\n tagName, propertyName, expression, opt_matchCase) {\r\n\r\n TC.filter.Comparison.call(this, tagName, propertyName);\r\n\r\n this.expression = expression;\r\n\r\n this.matchCase = opt_matchCase;\r\n};\r\nTC.inherit(TC.filter.ComparisonBinary, TC.filter.Comparison);\r\n\r\nTC.filter.ComparisonBinary.prototype.write = function () {\r\n var _str = '<{prefix}:{tag}{matchCase}>' + (this.propertyName instanceof TC.filter.Filter ? '{name}' : '<{prefix}:{fieldTitle}>{name}') + '<{prefix}:Literal>';\r\n return _str.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n matchCase: (typeof (this.matchCase) !== \"undefined\" ? \" matchCase=\\\"\" + this.matchCase + \"\\\"\" : \"\"),\r\n //escape:(typeof(this.escapeChar)!==\"undefined\"? \" escape=\\\"\" + this.escapeChar+ \"\\\"\":\"\"),\r\n //singleChar:(typeof(this.singleChar)!==\"undefined\"? \" singleChar=\\\"\" + this.singleChar+ \"\\\"\":\"\"),\r\n //wildCard:(typeof(this.wildCard)!==\"undefined\"? \" wildCard=\\\"\" + this.wildCard+ \"\\\"\":\"\"),\r\n name: this.propertyName instanceof TC.filter.Filter ? this.propertyName.write() : this.propertyName,\r\n value: this.expression,\r\n fieldTitle: this._fieldTitle\r\n });\r\n}\r\nTC.filter.EqualTo = function (propertyName, expression, opt_matchCase) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsEqualTo', propertyName, expression, opt_matchCase);\r\n};\r\nTC.inherit(TC.filter.EqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.GreaterThan = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThan', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.GreaterThan, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.GreaterThanOrEqualTo = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThanOrEqualTo', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.GreaterThanOrEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.LessThan = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsLessThan', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.LessThan, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.LessThanOrEqualTo = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsLessThanOrEqualTo', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.LessThanOrEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.NotEqualTo = function (propertyName, expression, opt_matchCase) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsNotEqualTo', propertyName, expression, opt_matchCase);\r\n};\r\nTC.inherit(TC.filter.NotEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.IsLike = function (propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\r\n TC.filter.Comparison.call(this, 'PropertyIsLike', propertyName);\r\n\r\n this.pattern = pattern;\r\n\r\n this.wildCard = (opt_wildCard !== undefined) ? opt_wildCard : '*';\r\n\r\n this.singleChar = (opt_singleChar !== undefined) ? opt_singleChar : '.';\r\n\r\n this.escapeChar = (opt_escapeChar !== undefined) ? opt_escapeChar : '!';\r\n\r\n this.matchCase = opt_matchCase;\r\n};\r\nTC.inherit(TC.filter.IsLike, TC.filter.Comparison);\r\n\r\nTC.filter.IsNull = function (propertyName) {\r\n TC.filter.Comparison.call(this, 'PropertyIsNull', propertyName);\r\n};\r\nTC.inherit(TC.filter.IsNull, TC.filter.Comparison);\r\n\r\nTC.filter.IsBetween = function (propertyName, lowerBoundary, upperBoundary) {\r\n TC.filter.Comparison.call(this, 'PropertyIsBetween', propertyName);\r\n this.LowerBoundary = lowerBoundary;\r\n this.UpperBoundary = upperBoundary;\r\n};\r\nTC.inherit(TC.filter.IsBetween, TC.filter.Comparison);\r\n\r\nTC.filter.Function = function (functionName, params) {\r\n TC.filter.Filter.call(this, functionName);\r\n this.params = params\r\n};\r\nTC.inherit(TC.filter.Function, TC.filter.Filter);\r\n\r\nTC.filter.Filter.fromText = function (gml) {\r\n //var cntrtr = function (node) {\r\n // const tagName = node.tagName;\r\n // const filter = fnc(tagName.substring(tagName.indexOf(\":\") + 1));\r\n // filter._defaultNSURL = tagName.substring(0, tagName.indexOf(\":\"));\r\n // return filter;\r\n //}\r\n var fnc = (node) => {\r\n const filterType = node.tagName.substring(node.tagName.indexOf(\":\") + 1);\r\n var filter;\r\n \r\n switch (filterType) {\r\n case \"PropertyIsEqualTo\":\r\n filter = new TC.filter.EqualTo();\r\n break;\r\n case \"PropertyIsGreaterThan\":\r\n filter = new TC.filter.GreaterThan();\r\n break;\r\n case \"PropertyIsGreaterThanOrEqualTo\":\r\n filter = new TC.filter.GreaterThanOrEqualTo();\r\n break;\r\n case \"PropertyIsLessThan\":\r\n filter = new TC.filter.LessThan();\r\n break;\r\n case \"PropertyIsLessThanOrEqualTo\":\r\n filter = new TC.filter.LessThanOrEqualTo();\r\n break;\r\n case \"PropertyIsNotEqualTo\":\r\n filter = new TC.filter.NotEqualTo();\r\n break;\r\n case \"PropertyIsLike\":\r\n filter = new TC.filter.IsLike();\r\n break;\r\n case \"PropertyIsNull\":\r\n filter = new TC.filter.IsNull();\r\n break;\r\n case \"PropertyIsBetween\":\r\n filter = new TC.filter.IsBetween();\r\n break;\r\n default:\r\n filter = new TC.filter[filterType]();\r\n }\r\n\r\n const propertyName = node.querySelector(filter._fieldTitle + \",\" + filter._wfs2FieldTitle)?.innerHTML;\r\n const propertyValue = node.querySelector(\"Literal\")?.innerHTML;\r\n filter._defaultNSURL = node.tagName.substring(0, tagName.indexOf(\":\"));\r\n\r\n if (propertyName)\r\n filter.propertyName = propertyName;\r\n if (filter instanceof TC.filter.IsLike) {\r\n filter.pattern = propertyValue;\r\n }\r\n if (filter instanceof TC.filter.IsBetween) {\r\n filter.LowerBoundary = node.querySelector(\"LowerBoundary > Literal\")?.innerHTML;\r\n filter.UpperBoundary = node.querySelector(\"UpperBoundary > Literal\")?.innerHTML;\r\n }\r\n if (filter instanceof TC.filter.ComparisonBinary) {\r\n filter.expression = propertyValue;\r\n }\r\n if (filter instanceof TC.filter.Spatial) {\r\n const coordinates = node.childNodes[1].textContent.split(\" \").reduce((vi, va, index, array) =>\r\n {\r\n if (index % 2 === 1)\r\n vi.push([\r\n parseFloat(array[index - 1]),\r\n parseFloat(va)\r\n ]);\r\n return vi;\r\n }, [])\r\n switch (node.childNodes[1].tagName.substr(4)) {\r\n case \"Polygon\":\r\n filter.geometry = new SITNA.feature.Polygon(coordinates);\r\n break;\r\n case \"LineString\":\r\n filter.geometry = new SITNA.feature.Polyline(coordinates);\r\n break;\r\n //TODO: El resto...\r\n }\r\n }\r\n\r\n filter.conditions = Array.from(node.childNodes).filter((c) => \r\n TC.filter.Operators.includes(c.tagName.substring(c.tagName.indexOf(\":\") + 1))\r\n ).reduce(function (vi, va) {\r\n vi.push(fnc(va)); return vi;\r\n }, []);\r\n return filter;\r\n };\r\n var doc = new DOMParser().parseFromString(gml, \"application/xml\");\r\n const tagName = doc.firstElementChild.firstElementChild.tagName; \r\n const filter = fnc(doc.firstElementChild.firstElementChild); \r\n \r\n return filter;\r\n}\r\n\r\nTC.filter.Function.prototype.write = function () {\r\n var values = '';\r\n if (this.params) {\r\n var _paramsToText = function (param, prefix) {\r\n if (typeof (param) === \"string\") {\r\n return '<{prefix}:Literal>'.format({ prefix: prefix, value: param });\r\n }\r\n if (typeof (param) === \"object\") {\r\n var _text = '';\r\n for (var attr in param) {\r\n _text = _text + '<{prefix}:{key}>{value}'.format({ prefix: prefix, value: param[attr], key: attr })\r\n }\r\n return _text;\r\n }\r\n }\r\n if (Array.isArray(this.params)) {\r\n var prefix = this._defaultPrefixNS;\r\n values = this.params.reduce(function (a, b, i) {\r\n var fmt = function (param) {\r\n return _paramsToText(param, prefix);\r\n }\r\n return (i > 1 ? a : fmt(a)) + fmt(b);\r\n });\r\n }\r\n else\r\n values = _paramsToText(this.params, this._defaultPrefixNS);\r\n }\r\n return '<{prefix}:Function name=\"{tag}\">{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: values\r\n });\r\n};\r\n\r\nTC.filter.Spatial = function (tagName, geometryName, geometry, opt_srsName) {\r\n TC.filter.Filter.call(this, tagName);\r\n this.geometryName = geometryName;\r\n this.geometry = geometry;\r\n this.srsName = opt_srsName;\r\n this.wrap = new TC.wrap.Filter(this);\r\n};\r\n\r\nTC.wrap.Filter = function (filter) {\r\n this.parent = filter;\r\n};\r\n\r\nTC.wrap.Filter.prototype.getAxisOrientation = function () {\r\n // Establecemos el srsName a EPSG:xxxx o urn:x-ogc:def:crs:EPSG:xxxx dependiendo del orden de eje de coordenadas del CRS.\r\n // Esto se debe a que GeoServer hace asunciones en el orden de los ejes dependiendo del formato de srsName que se use.\r\n // Más información: https://docs.geoserver.org/latest/en/user/services/wfs/basics.html#wfs-basics-axis\r\n var srsName = this.parent.srsName;\r\n if (srsName) {\r\n const match = srsName.match(/\\d{4,6}$/);\r\n if (match) {\r\n const code = match[0];\r\n const def = ol.proj.get(srsName);\r\n if (def) {\r\n return ((def.axisOrientation_ === 'neu' ? 'urn:x-ogc:def:crs:EPSG:' : 'EPSG:') + code);\r\n }\r\n }\r\n }\r\n return srsName;\r\n};\r\n\r\nTC.inherit(TC.filter.Spatial, TC.filter.Filter);\r\n\r\nTC.filter.Spatial.prototype.write = function () {\r\n var pattern = null;\r\n if (this.geometryName) {\r\n pattern = '<{prefix}:{tag}><{prefix}:{fieldTitle}>{name}{geometry}';\r\n }\r\n else {\r\n pattern = '<{prefix}:{tag}><{prefix}:{fieldTitle}/>{geometry}';\r\n }\r\n\r\n return pattern.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n name: this.geometryName,\r\n geometry: (this.geometry instanceof TC.filter.Function ? this.writeInnerCondition_(this.geometry) : this.geometry.wrap.toGML(undefined, this.wrap.getAxisOrientation())),\r\n fieldTitle: this._fieldTitle\r\n });\r\n};\r\n\r\nTC.filter.bbox = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Bbox(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Bbox(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\nTC.filter.Bbox = function (geometryName, extent, opt_srsName) {\r\n TC.filter.Filter.call(this, 'BBOX');\r\n this.geometryName = geometryName;\r\n this.extent = extent;\r\n this.srsName = opt_srsName;\r\n};\r\nTC.inherit(TC.filter.Bbox, TC.filter.Spatial);\r\n\r\nTC.filter.Bbox.prototype.write = function () {\r\n var bbox = '{lowerCorner}{upperCorner}'\r\n\t.format({\r\n srsName: (typeof (this.srsName) !== \"undefined\" ? \" srsName=\\\"\" + this.srsName + \"\\\"\" : \"\"),\r\n lowerCorner: (this.extent[0] + ' ' + this.extent[1]),\r\n upperCorner: (this.extent[2] + ' ' + this.extent[3])\r\n\t});\r\n var pattern = null;\r\n if (this.geometryName)\r\n pattern='<{prefix}:{tag}><{prefix}:{fieldTitle}>{name}{BBOX}';\r\n else\r\n pattern='<{prefix}:{tag}><{prefix}:{fieldTitle}/>{BBOX}';\r\n return pattern.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n fieldTitle: this._fieldTitle,\r\n name: this.geometryName,\r\n BBOX: bbox\r\n });\r\n};\r\n\r\nTC.filter.Intersects = function (geometryName, geometry, opt_srsName) {\r\n TC.filter.Spatial.call(this, 'Intersects', geometryName, geometry, opt_srsName);\r\n};\r\nTC.inherit(TC.filter.Intersects, TC.filter.Spatial);\r\n\r\nTC.filter.Within = function (geometryName, geometry, opt_srsName) {\r\n TC.filter.Spatial.call(this, 'Within', geometryName, geometry, opt_srsName);\r\n};\r\nTC.inherit(TC.filter.Within, TC.filter.Spatial);\r\n\r\nconst filter = TC.filter;\r\nexport default filter;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nconst i18n = {};\r\ni18n.loadResources = async function (condition, path, locale) {\r\n if (condition) {\r\n const response = await TC.ajax({\r\n url: path + locale + '.json',\r\n method: 'GET',\r\n responseType: Consts.mimeType.JSON\r\n })\r\n const data = response.data;\r\n i18n[locale] = i18n[locale] || {};\r\n Object.assign(i18n[locale], data);\r\n i18n.currentLocale = i18n[locale];\r\n i18n.currentLocaleKey = locale;\r\n } else {\r\n i18n.currentLocale = i18n[locale];\r\n }\r\n};\r\n\r\nexport default i18n;","/**\n * @module ol/util\n */\n\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n return /** @type {?} */ (\n (function () {\n throw new Error('Unimplemented abstract method.');\n })()\n );\n}\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nlet uidCounter_ = 0;\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport const VERSION = 'latest';\n","/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n constructor() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n\n /**\n * Clean up.\n */\n dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n }\n\n /**\n * Extension point for disposable objects.\n * @protected\n */\n disposeInternal() {}\n}\n\nexport default Disposable;\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [opt_comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n let mid, cmp;\n const comparator = opt_comparator || numberSafeCompareFunction;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n const n = arr.length;\n if (arr[0] <= target) {\n return 0;\n } else if (target <= arr[n - 1]) {\n return n - 1;\n } else {\n let i;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n } else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n } else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n } else if (arr[i] < target) {\n if (typeof direction === 'function') {\n if (direction(target, arr[i - 1], arr[i]) > 0) {\n return i - 1;\n } else {\n return i;\n }\n } else if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n } else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n const length = arr.length >>> 0;\n let value;\n\n for (let i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n let index;\n const found = !arr.every(function (el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [opt_func] Comparison function.\n * @param {boolean} [opt_strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n const compare = opt_func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (opt_strict && res === 0));\n });\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n let called = false;\n\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array} */\n let lastArgs;\n\n let lastThis;\n\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","/**\n * @module ol/has\n */\n\nconst ua =\n typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport const FIREFOX = ua.indexOf('firefox') !== -1;\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n\n/**\n * https://bugs.webkit.org/show_bug.cgi?id=237906\n * @type {boolean}\n */\nexport const SAFARI_BUG_237906 =\n SAFARI &&\n !!(\n ua.indexOf('version/15.4') >= 0 ||\n ua.match(/cpu (os|iphone os) 15_4 like mac os x/)\n );\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.indexOf('macintosh') !== -1;\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO =\n typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport const WORKER_OFFSCREEN_CANVAS =\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport const IMAGE_DECODE =\n typeof Image !== 'undefined' && Image.prototype.decode;\n\n/**\n * @type {boolean}\n */\nexport const PASSIVE_EVENT_LISTENERS = (function () {\n let passive = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n } catch (error) {\n // passive not supported\n }\n return passive;\n})();\n","/**\n * @module ol/AssertionError\n */\nimport {VERSION} from './util.js';\n\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nclass AssertionError extends Error {\n /**\n * @param {number} code Error code.\n */\n constructor(code) {\n const path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n const message =\n 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n\n super(message);\n\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n this.code = code;\n\n /**\n * @type {string}\n */\n this.name = 'AssertionError';\n\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n this.message = message;\n }\n}\n\nexport default AssertionError;\n","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n","/**\n * @module ol/transform\n */\nimport {WORKER_OFFSCREEN_CANVAS} from './has.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {HTMLElement}\n * @private\n */\nlet transformStringDiv;\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString = 'matrix(' + mat.join(', ') + ')';\n if (WORKER_OFFSCREEN_CANVAS) {\n return transformString;\n }\n const node =\n transformStringDiv || (transformStringDiv = document.createElement('div'));\n node.style.transform = transformString;\n return node.style.transform;\n}\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [opt_extent] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0] - value;\n opt_extent[1] = extent[1] - value;\n opt_extent[2] = extent[2] + value;\n opt_extent[3] = extent[3] + value;\n return opt_extent;\n } else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n }\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent.slice();\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = minX;\n opt_extent[1] = minY;\n opt_extent[2] = maxX;\n opt_extent[3] = maxY;\n return opt_extent;\n } else {\n return [minX, minY, maxX, maxY];\n }\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, opt_extent);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n opt_extent\n) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n assert(false, 13); // Invalid corner\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(\n center,\n resolution,\n rotation,\n size,\n opt_extent\n) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n opt_extent\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [opt_extent] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n const intersection = opt_extent ? opt_extent : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent;\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [opt_extent] Destination extent.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n let coordinates = [];\n if (opt_stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < opt_stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / opt_stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / opt_stops,\n extent[2] - (width * i) / opt_stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / opt_stops\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, opt_extent);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n } else if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n } else if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport const cosh = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n let cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n } else {\n // … else, use the reference implementation of MDN:\n cosh = function (x) {\n const y = /** @type {Math} */ (Math).exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n})();\n\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport const log2 = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n let log2;\n if ('log2' in Math) {\n // The environment supports the native Math.log2 function, use it…\n log2 = Math.log2;\n } else {\n // … else, use the reference implementation of MDN:\n log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n }\n return log2;\n})();\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n","/**\n * @module ol/color\n */\nimport {assert} from './asserts.js';\nimport {clamp} from './math.js';\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nconst HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nconst NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n } else {\n return toString(color);\n }\n}\n\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n const el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n const rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n } else {\n return '';\n }\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport const fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n\n /**\n * @const\n * @type {number}\n */\n const MAX_CACHE_SIZE = 1024;\n\n /**\n * @type {Object}\n */\n const cache = {};\n\n /**\n * @type {number}\n */\n let cacheSize = 0;\n\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n let color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n } else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n }\n );\n})();\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n } else {\n return fromString(color);\n }\n}\n\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n let r, g, b, a, color;\n\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n const n = s.length - 1; // number of hex digits\n let d; // number of digits per channel\n if (n <= 4) {\n d = 1;\n } else {\n d = 2;\n }\n const hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n } else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n } else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n } else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n } else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n const a = color[3] === undefined ? 1 : Math.round(color[3] * 100) / 100;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (\n HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0\n );\n}\n","/**\n * @module ol/style/IconImageCache\n */\nimport {asString} from '../color.js';\n\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache.shared}.\n */\nclass IconImageCache {\n constructor() {\n /**\n * @type {!Object}\n * @private\n */\n this.cache_ = {};\n\n /**\n * @type {number}\n * @private\n */\n this.cacheSize_ = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.maxCacheSize_ = 32;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.cache_ = {};\n this.cacheSize_ = 0;\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.cacheSize_ > this.maxCacheSize_;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n expire() {\n if (this.canExpireCache()) {\n let i = 0;\n for (const key in this.cache_) {\n const iconImage = this.cache_[key];\n if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n delete this.cache_[key];\n --this.cacheSize_;\n }\n }\n }\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n get(src, crossOrigin, color) {\n const key = getKey(src, crossOrigin, color);\n return key in this.cache_ ? this.cache_[key] : null;\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n */\n set(src, crossOrigin, color, iconImage) {\n const key = getKey(src, crossOrigin, color);\n this.cache_[key] = iconImage;\n ++this.cacheSize_;\n }\n\n /**\n * Set the cache size of the icon cache. Default is `32`. Change this value when\n * your map uses more than 32 different icon images and you are not caching icon\n * styles on the application level.\n * @param {number} maxCacheSize Cache max size.\n * @api\n */\n setSize(maxCacheSize) {\n this.maxCacheSize_ = maxCacheSize;\n this.expire();\n }\n}\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n const colorString = color ? asString(color) : 'null';\n return crossOrigin + ':' + src + ':' + colorString;\n}\n\nexport default IconImageCache;\n\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport const shared = new IconImageCache();\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n /**\n * Stop event propagation.\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\n\nexport default BaseEvent;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n\n/**\n * @typedef {'propertychange'} Types\n */\n","/**\n * @module ol/obj\n */\n\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport const assign =\n typeof Object.assign === 'function'\n ? Object.assign\n : function (target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n const output = Object(target);\n for (let i = 1, ii = arguments.length; i < ii; ++i) {\n const source = arguments[i];\n if (source !== undefined && source !== null) {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (const property in object) {\n delete object[property];\n }\n}\n\n/**\n * Polyfill for Object.values(). Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} object The object from which to get the values.\n * @return {!Array} The property values.\n * @template K,V\n */\nexport const getValues =\n typeof Object.values === 'function'\n ? Object.values\n : function (object) {\n const values = [];\n for (const property in object) {\n values.push(object[property]);\n }\n return values;\n };\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n let property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport {VOID} from '../functions.js';\nimport {clear} from '../obj.js';\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends Disposable {\n /**\n * @param {*} [opt_target] Default event target for dispatched events.\n */\n constructor(opt_target) {\n super();\n\n /**\n * @private\n * @type {*}\n */\n this.eventTarget_ = opt_target;\n\n /**\n * @private\n * @type {Object}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>}\n */\n this.listeners_ = null;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n addEventListener(type, listener) {\n if (!type || !listener) {\n return;\n }\n const listeners = this.listeners_ || (this.listeners_ = {});\n const listenersForType = listeners[type] || (listeners[type] = []);\n if (listenersForType.indexOf(listener) === -1) {\n listenersForType.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n dispatchEvent(event) {\n const isString = typeof event === 'string';\n const type = isString ? event : event.type;\n const listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n\n const evt = isString ? new Event(event) : /** @type {Event} */ (event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n const dispatching = this.dispatching_ || (this.dispatching_ = {});\n const pendingRemovals =\n this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n let propagate;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (\n listeners[i]\n ).handleEvent(evt);\n } else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (\n listeners[i]\n ).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n let pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.listeners_ && clear(this.listeners_);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n getListeners(type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n }\n\n /**\n * @param {string} [opt_type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(opt_type) {\n if (!this.listeners_) {\n return false;\n }\n return opt_type\n ? opt_type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n }\n}\n\nexport default Target;\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [opt_once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n if (opt_this && opt_this !== target) {\n listener = listener.bind(opt_this);\n }\n if (opt_once) {\n const originalListener = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(this, arguments);\n };\n }\n const eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n","/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {listen, listenOnce, unlistenByKey} from './events.js';\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends EventTarget {\n constructor() {\n super();\n\n this.on =\n /** @type {ObservableOnSignature} */ (\n this.onInternal\n );\n\n this.once =\n /** @type {ObservableOnSignature} */ (\n this.onceInternal\n );\n\n this.un = /** @type {ObservableOnSignature} */ (this.unInternal);\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onInternal(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n } else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onceInternal(type, listener) {\n let key;\n if (Array.isArray(type)) {\n const len = type.length;\n key = new Array(len);\n for (let i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n } else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n unInternal(type, listener) {\n const key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n } else if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n } else {\n this.removeEventListener(type, listener);\n }\n }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n } else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\n\nexport default Observable;\n","/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport {assign, isEmpty} from './obj.js';\nimport {getUid} from './util.js';\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nexport class ObjectEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nclass BaseObject extends Observable {\n /**\n * @param {Object} [opt_values] An object with key-value pairs.\n */\n constructor(opt_values) {\n super();\n\n /***\n * @type {ObjectOnSignature}\n */\n this.on;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.once;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.un;\n\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(this);\n\n /**\n * @private\n * @type {Object}\n */\n this.values_ = null;\n\n if (opt_values !== undefined) {\n this.setProperties(opt_values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return (this.values_ && Object.keys(this.values_)) || [];\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return (this.values_ && assign({}, this.values_)) || {};\n }\n\n /**\n * @return {boolean} The object has properties.\n */\n hasProperties() {\n return !!this.values_;\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = `change:${key}`;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = ObjectEventType.PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n addChangeListener(key, listener) {\n this.addEventListener(`change:${key}`, listener);\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n removeChangeListener(key, listener) {\n this.removeEventListener(`change:${key}`, listener);\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n set(key, value, opt_silent) {\n const values = this.values_ || (this.values_ = {});\n if (opt_silent) {\n values[key] = value;\n } else {\n const oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n setProperties(values, opt_silent) {\n for (const key in values) {\n this.set(key, values[key], opt_silent);\n }\n }\n\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n applyProperties(source) {\n if (!source.values_) {\n return;\n }\n assign(this.values_ || (this.values_ = {}), source.values_);\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [opt_silent] Unset without triggering an event.\n * @api\n */\n unset(key, opt_silent) {\n if (this.values_ && key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n\nexport default BaseObject;\n","/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n MAP: 'map',\n};\n","/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport {abstract} from '../util.js';\nimport {assert} from '../asserts.js';\nimport {assign} from '../obj.js';\nimport {clamp} from '../math.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [opt_managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(opt_managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: opt_managed === undefined ? true : opt_managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [opt_array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [opt_states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the visibility of the layer (`true` or `false`).\n * @return {boolean} The visibility of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. The default Z-index is 0.\n * @return {number} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [opt_background] Background color.\n */\n setBackground(opt_background) {\n this.background_ = opt_background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 64); // Layer opacity must be a number\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n","/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered before layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n\n /**\n * Triggered after layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n","/**\n * @module ol/layer/Layer\n */\nimport BaseLayer from './Base.js';\nimport EventType from '../events/EventType.js';\nimport LayerProperty from './Property.js';\nimport RenderEventType from '../render/EventType.js';\nimport {assert} from '../asserts.js';\nimport {assign} from '../obj.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {function(import(\"../PluggableMap.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../PluggableMap.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link import(\"../PluggableMap.js\").default#addLayer map.addLayer()}. Components\n * like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * {@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * Please note that for performance reasons several layers might get rendered to\n * the same HTML element, which will cause {@link import(\"../PluggableMap.js\").default#forEachLayerAtPixel map.forEachLayerAtPixel()} to\n * give false positives. To avoid this, apply different `className` properties to the\n * layers at creation time.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @api\n */\nclass Layer extends BaseLayer {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n const baseOptions = assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /***\n * @type {LayerOnSignature}\n */\n this.on;\n\n /***\n * @type {LayerOnSignature}\n */\n this.once;\n\n /***\n * @type {LayerOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n /**\n * @private\n * @type {RendererType}\n */\n this.renderer_ = null;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.rendered = false;\n\n // Overwrite default render method with a custom one\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n this.addChangeListener(\n LayerProperty.SOURCE,\n this.handleSourcePropertyChange_\n );\n\n const source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n this.setSource(source);\n }\n\n /**\n * @param {Array} [opt_array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n const array = opt_array ? opt_array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @param {Array} [opt_states] Optional list of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states ? opt_states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {SourceType|null} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n }\n\n /**\n * @return {SourceType|null} The source being rendered.\n */\n getRenderSource() {\n return this.getSource();\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? 'undefined' : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this\n );\n }\n this.changed();\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n if (!this.renderer_) {\n return new Promise((resolve) => resolve([]));\n }\n return this.renderer_.getFeatures(pixel);\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n if (!this.renderer_ || !this.rendered) {\n return null;\n }\n return this.renderer_.getData(pixel);\n }\n\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement} The rendered element.\n */\n render(frameState, target) {\n const layerRenderer = this.getRenderer();\n\n if (layerRenderer.prepareFrame(frameState)) {\n this.rendered = true;\n return layerRenderer.renderFrame(frameState, target);\n }\n }\n\n /**\n * Called when a layer is not visible during a map render.\n */\n unrender() {\n this.rendered = false;\n }\n\n /**\n * For use inside the library only.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n */\n setMapInternal(map) {\n if (!map) {\n this.unrender();\n }\n this.set(LayerProperty.MAP, map);\n }\n\n /**\n * For use inside the library only.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n */\n getMapInternal() {\n return this.get(LayerProperty.MAP);\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection, and the callback in\n * {@link module:ol/Map~Map#forEachLayerAtPixel} will receive `null` as layer. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map~Map#addLayer} instead.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(\n map,\n RenderEventType.PRECOMPOSE,\n function (evt) {\n const renderEvent =\n /** @type {import(\"../render/Event.js\").default} */ (evt);\n const layerStatesArray = renderEvent.frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.\n assert(\n !layerStatesArray.some(function (arrayLayerState) {\n return arrayLayerState.layer === layerState.layer;\n }),\n 67\n );\n layerStatesArray.push(layerState);\n },\n this\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * Set the layer source.\n * @param {SourceType|null} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n\n /**\n * Get the renderer for this layer.\n * @return {RendererType|null} The layer renderer.\n */\n getRenderer() {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n }\n\n /**\n * @return {boolean} The layer has a renderer.\n */\n hasRenderer() {\n return !!this.renderer_;\n }\n\n /**\n * Create a renderer for this layer.\n * @return {RendererType} A layer renderer.\n * @protected\n */\n createRenderer() {\n return null;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.renderer_) {\n this.renderer_.dispose();\n delete this.renderer_;\n }\n\n this.setSource(null);\n super.disposeInternal();\n }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n const resolution = viewState.resolution;\n if (\n resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution\n ) {\n return false;\n }\n const zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n","/**\n * @module ol/coordinate\n */\nimport {getWidth} from './extent.js';\nimport {modulo} from './math.js';\nimport {padNumber} from './string.js';\n\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n\n const x = x0 + (r * dx) / d;\n const y = y0 + (r * dy) / d;\n\n return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along =\n dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n }\n );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const dflPrecision = opt_fractionDigits || 0;\n const precision = Math.pow(10, dflPrecision);\n\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = x - deg * 3600 - min * 60;\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n return (\n deg +\n '\\u00b0 ' +\n padNumber(min, 2) +\n '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) +\n '\\u2033' +\n (normalizedDegrees == 0\n ? ''\n : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0))\n );\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n } else {\n return '';\n }\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return (\n degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits)\n );\n } else {\n return '';\n }\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n const worldWidth = getWidth(projection.getExtent());\n const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [opt_sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n const projectionExtent = projection.getExtent();\n let worldsAway = 0;\n if (\n projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])\n ) {\n const sourceExtentWidth =\n opt_sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor(\n (coordinate[0] - projectionExtent[0]) / sourceExtentWidth\n );\n }\n return worldsAway;\n}\n","/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {TRUE} from '../functions.js';\nimport {abstract} from '../util.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {getWidth} from '../extent.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {inView} from '../layer/Layer.js';\nimport {wrapX} from '../coordinate.js';\n\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n * @template T\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1]\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, layerFilter) {\n return abstract();\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../PluggableMap.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n","/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform} [opt_inversePixelTransform] Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n * @param {?(CanvasRenderingContext2D|WebGLRenderingContext)} [opt_context] Context.\n */\n constructor(type, opt_inversePixelTransform, opt_frameState, opt_context) {\n super(type);\n\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n this.inversePixelTransform = opt_inversePixelTransform;\n\n /**\n * An object representing the current render frame state.\n * @type {import(\"../PluggableMap.js\").FrameState|undefined}\n * @api\n */\n this.frameState = opt_frameState;\n\n /**\n * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n * the context will be the 2D rendering context. For WebGL layers, the context will be the WebGL\n * context.\n * @type {CanvasRenderingContext2D|WebGLRenderingContext|undefined}\n * @api\n */\n this.context = opt_context;\n }\n}\n\nexport default RenderEvent;\n","/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(\n [\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n ].join(''),\n 'i'\n);\nconst fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport const getFontParameters = function (fontSpec) {\n const match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n const style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n const value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n","import {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\n/**\n * @module ol/dom\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [opt_width] Canvas width.\n * @param {number} [opt_height] Canvas height.\n * @param {Array} [opt_canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [opt_Context2DSettings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(\n opt_width,\n opt_height,\n opt_canvasPool,\n opt_Context2DSettings\n) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n let canvas;\n if (opt_canvasPool && opt_canvasPool.length) {\n canvas = opt_canvasPool.shift();\n } else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(opt_width || 300, opt_height || 300);\n } else {\n canvas = document.createElement('canvas');\n }\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (\n canvas.getContext('2d', opt_Context2DSettings)\n );\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D} context Context.\n */\nexport function releaseCanvas(context) {\n const canvas = context.canvas;\n canvas.width = 1;\n canvas.height = 1;\n context.clearRect(0, 0, 1, 1);\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove.\n * @return {Node|null} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n const oldChildren = node.childNodes;\n\n for (let i = 0; true; ++i) {\n const oldChild = oldChildren[i];\n const newChild = children[i];\n\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport {clear} from '../obj.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {getFontParameters} from '../css.js';\n\n/**\n * @typedef {'Circle' | 'Image' | 'LineString' | 'Polygon' | 'Text' | 'Default'} BuilderType\n */\n\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array} contextInstructions ContextInstructions.\n */\n\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n */\n\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {string} [textAlign] TextAlign.\n * @property {string} [justify] Justify.\n * @property {string} textBaseline TextBaseline.\n * @property {string} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array} [padding] Padding.\n */\n\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array} coordinates The array of all coordinates.\n * @property {!Object} [textStates] The text states (decluttering).\n * @property {!Object} [fillStates] The fill states (decluttering).\n * @property {!Object} [strokeStates] The stroke states (decluttering).\n */\n\n/**\n * @typedef {Object} DeclutterImageWithText\n */\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFont = '10px sans-serif';\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultFillStyle = '#000';\n\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport const defaultLineCap = 'round';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultLineDash = [];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineDashOffset = 0;\n\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport const defaultLineJoin = 'round';\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultMiterLimit = 10;\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultStrokeStyle = '#000';\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextAlign = 'center';\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextBaseline = 'middle';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultPadding = [0, 0, 0, 0];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineWidth = 1;\n\n/**\n * @type {BaseObject}\n */\nexport const checkedFonts = new BaseObject();\n\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache~LRUCache#setSize cache.setSize()}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport const labelCache = new EventTarget();\nlabelCache.setSize = function () {\n console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet measureContext = null;\n\n/**\n * @type {string}\n */\nlet measureFont;\n\n/**\n * @type {!Object}\n */\nexport const textHeights = {};\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport const registerFont = (function () {\n const retries = 100;\n const size = '32px ';\n const referenceFonts = ['monospace', 'serif'];\n const len = referenceFonts.length;\n const text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n let interval, referenceWidth;\n\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n let available = true;\n for (let i = 0; i < len; ++i) {\n const referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(\n fontStyle + ' ' + fontWeight + ' ' + size + referenceFont,\n text\n );\n if (fontFamily != referenceFont) {\n const width = measureTextWidth(\n fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont,\n text\n );\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n\n function check() {\n let done = true;\n const fonts = checkedFonts.getKeys();\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n const font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n } else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n\n return function (fontSpec) {\n const font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n const families = font.families;\n for (let i = 0, ii = families.length; i < ii; ++i) {\n const family = families[i];\n const key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport const measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n let measureElement;\n return function (fontSpec) {\n let height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n const font = getFontParameters(fontSpec);\n const metrics = measureText(fontSpec, 'Žg');\n const lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n } else {\n if (!measureElement) {\n measureElement = document.createElement('div');\n measureElement.innerHTML = 'M';\n measureElement.style.minHeight = '0';\n measureElement.style.maxHeight = 'none';\n measureElement.style.height = 'auto';\n measureElement.style.padding = '0';\n measureElement.style.border = 'none';\n measureElement.style.position = 'absolute';\n measureElement.style.display = 'block';\n measureElement.style.left = '-99999px';\n }\n measureElement.style.font = fontSpec;\n document.body.appendChild(measureElement);\n height = measureElement.offsetHeight;\n document.body.removeChild(measureElement);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n const width = text\n .split('\\n')\n .reduce((prev, curr) => Math.max(prev, measureTextWidth(font, curr)), 0);\n cache[text] = width;\n return width;\n}\n\n/**\n * @param {TextState} baseStyle Base style.\n * @param {Array} chunks Text chunks to measure.\n * @return {{width: number, height: number, widths: Array, heights: Array, lineWidths: Array}}} Text metrics.\n */\nexport function getTextDimensions(baseStyle, chunks) {\n const widths = [];\n const heights = [];\n const lineWidths = [];\n let width = 0;\n let lineWidth = 0;\n let height = 0;\n let lineHeight = 0;\n for (let i = 0, ii = chunks.length; i <= ii; i += 2) {\n const text = chunks[i];\n if (text === '\\n' || i === ii) {\n width = Math.max(width, lineWidth);\n lineWidths.push(lineWidth);\n lineWidth = 0;\n height += lineHeight;\n continue;\n }\n const font = chunks[i + 1] || baseStyle.font;\n const currentWidth = measureTextWidth(font, text);\n widths.push(currentWidth);\n lineWidth += currentWidth;\n const currentHeight = measureTextHeight(font);\n heights.push(currentHeight);\n lineHeight = Math.max(lineHeight, currentHeight);\n }\n return {width, height, widths, heights, lineWidths};\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(\n context,\n transform,\n opacity,\n labelOrImage,\n originX,\n originY,\n w,\n h,\n x,\n y,\n scale\n) {\n context.save();\n\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n\n if (/** @type {*} */ (labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n } else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n 0,\n 0,\n w,\n h\n );\n } else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n x,\n y,\n w * scale[0],\n h * scale[1]\n );\n }\n\n context.restore();\n}\n\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n const contextInstructions = label.contextInstructions;\n for (let i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(\n context,\n contextInstructions[i + 1]\n );\n } else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n","/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport {inView} from '../layer/Layer.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {replaceChildren} from '../dom.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText.bind(map)\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n /**\n * @type {Array}\n */\n const declutterLayers = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != 'ready' && sourceState != 'undefined')\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(\n /** @type {import(\"../layer/BaseVector.js\").default} */ (layer)\n );\n }\n }\n for (let i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, layerFilter) {\n const viewState = frameState.viewState;\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n for (let i = numLayers - 1; i >= 0; --i) {\n const layerState = layerStates[i];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter(layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const data = layerRenderer.getDataAtPixel(\n pixel,\n frameState,\n hitTolerance\n );\n if (data) {\n const result = callback(layer, data);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n }\n}\n\nexport default CompositeMapRenderer;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n","/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nexport class CollectionEvent extends Event {\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {*} [opt_element] Element.\n * @param {number} [opt_index] The index of the added or removed element.\n */\n constructor(type, opt_element, opt_index) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n this.element = opt_element;\n\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n this.index = opt_index;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n /**\n * @param {Array} [opt_array] Array.\n * @param {Options} [opt_options] Collection options.\n */\n constructor(opt_array, opt_options) {\n super();\n\n /***\n * @type {CollectionOnSignature}\n */\n this.on;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.once;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.un;\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = opt_array ? opt_array : [];\n\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n\n this.updateLength_();\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return this.get(Property.LENGTH);\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n );\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n );\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n );\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n );\n } else {\n for (let j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [opt_except] Optional index to ignore.\n */\n assertUnique_(elem, opt_except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n }\n}\n\nexport default Collection;\n","/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport {assign, clear} from '../obj.js';\nimport {getIntersection} from '../extent.js';\nimport {getUid} from '../util.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} EventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {EventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|import(\"../Collection.js\").default} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [opt_options] Layer options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n const baseOptions = /** @type {Options} */ (assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(typeof (/** @type {?} */ (layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this)\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this)\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = /** @type {import(\"./Base.js\").default} */ (\n collectionEvent.element\n );\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = /** @type {import(\"./Base.js\").default} */ (\n collectionEvent.element\n );\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!import(\"../Collection.js\").default} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!import(\"../Collection.js\").default} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!import(\"../Collection.js\").default} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [opt_array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n const array = opt_array !== undefined ? opt_array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If opt_states is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [opt_states] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states !== undefined ? opt_states : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!opt_states && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return 'ready';\n }\n}\n\nexport default LayerGroup;\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n constructor(type, map, opt_frameState) {\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {import(\"./PluggableMap.js\").default}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./PluggableMap.js\").FrameState}\n * @api\n */\n this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n }\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nclass MapBrowserEvent extends MapEvent {\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [opt_dragging] Is the map currently being dragged?\n * @param {import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n * @param {Array} [opt_activePointers] Active pointers.\n */\n constructor(\n type,\n map,\n originalEvent,\n opt_dragging,\n opt_frameState,\n opt_activePointers\n ) {\n super(type, map, opt_frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n this.originalEvent = originalEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n this.pixel_ = null;\n\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.coordinate_ = null;\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n\n /**\n * @type {Array|undefined}\n */\n this.activePointers = opt_activePointers;\n }\n\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get pixel() {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n }\n set pixel(pixel) {\n this.pixel_ = pixel;\n }\n\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get coordinate() {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n }\n set coordinate(coordinate) {\n this.coordinate_ = coordinate;\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n preventDefault() {\n super.preventDefault();\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n stopPropagation() {\n super.stopPropagation();\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n }\n}\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n","/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {VOID} from './functions.js';\nimport {getValues} from './obj.js';\nimport {listen, unlistenByKey} from './events.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./PluggableMap.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {any}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayMoveEvent_,\n this\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n }.bind(this),\n 250\n );\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (\n event.type == MapBrowserEventType.POINTERDOWN ||\n event.type == MapBrowserEventType.POINTERMOVE\n ) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = getValues(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n\n // Store a copy of the down event\n this.down_ = /** @type {PointerEvent} */ ({});\n for (const property in pointerEvent) {\n const value = pointerEvent[property];\n this.down_[property] = typeof value === 'function' ? VOID : value;\n }\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this\n )\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this\n )\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n this.map_,\n pointerEvent,\n dragging\n )\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\n\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n let state, tile, tileKey;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nconst Units = {\n /**\n * Radians\n * @api\n */\n RADIANS: 'radians',\n /**\n * Degrees\n * @api\n */\n DEGREES: 'degrees',\n /**\n * Feet\n * @api\n */\n FEET: 'ft',\n /**\n * Meters\n * @api\n */\n METERS: 'm',\n /**\n * Pixels\n * @api\n */\n PIXELS: 'pixels',\n /**\n * Tile Pixels\n * @api\n */\n TILE_PIXELS: 'tile-pixels',\n /**\n * US Feet\n * @api\n */\n USFEET: 'us-ft',\n};\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': Units.METERS,\n '9002': Units.FEET,\n '9003': Units.USFEET,\n '9101': Units.RADIANS,\n '9102': Units.DEGREES,\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object}\n * @api\n */\nexport const METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.RADIANS] = 6370997 / (2 * Math.PI);\nMETERS_PER_UNIT[Units.DEGREES] = (2 * Math.PI * 6370997) / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\n\nexport default Units;\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n","/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n","/**\n * @module ol/tilegrid/common\n */\n\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport const DEFAULT_MAX_ZOOM = 42;\n\n/**\n * Default tile size.\n * @type {number}\n */\nexport const DEFAULT_TILE_SIZE = 256;\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").default|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution getPointResolution()} function will be used.\n */\n\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj.get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4.register} function.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").default}\n */\n this.units_ = /** @type {import(\"./Units.js\").default} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").default} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\nimport {cosh} from '../math.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: Units.METERS,\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [opt_axisOrientation] Axis orientation.\n */\n constructor(code, opt_axisOrientation) {\n super({\n code: code,\n units: Units.DEGREES,\n extent: EXTENT,\n axisOrientation: opt_axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n let transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n","/**\n * @module ol/sphere\n */\nimport {toDegrees, toRadians} from './math.js';\n\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the geometry. By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius. By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport const DEFAULT_RADIUS = 6371008.8;\n\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, opt_radius) {\n const radius = opt_radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lat2 = toRadians(c2[1]);\n const deltaLatBy2 = (lat2 - lat1) / 2;\n const deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n const a =\n Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n Math.sin(deltaLonBy2) *\n Math.sin(deltaLonBy2) *\n Math.cos(lat1) *\n Math.cos(lat2);\n return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n let length = 0;\n for (let i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n length += getDistance(coordinates[i], coordinates[i + 1], radius);\n }\n return length;\n}\n\n/**\n * Get the spherical length of a geometry. This length is the sum of the\n * great circle distances between coordinates. For polygons, the length is\n * the sum of all rings. For points, the length is zero. For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the\n * length calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, opt_options) {\n const options = opt_options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== 'GeometryCollection') {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let length = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case 'Point':\n case 'MultiPoint': {\n break;\n }\n case 'LineString':\n case 'LinearRing': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n length = getLengthInternal(coordinates, radius);\n break;\n }\n case 'MultiLineString':\n case 'Polygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n length += getLengthInternal(coordinates[i], radius);\n }\n break;\n }\n case 'MultiPolygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n for (j = 0, jj = coords.length; j < jj; ++j) {\n length += getLengthInternal(coords[j], radius);\n }\n }\n break;\n }\n case 'GeometryCollection': {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n length += getLength(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return length;\n}\n\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n let area = 0;\n const len = coordinates.length;\n let x1 = coordinates[len - 1][0];\n let y1 = coordinates[len - 1][1];\n for (let i = 0; i < len; i++) {\n const x2 = coordinates[i][0];\n const y2 = coordinates[i][1];\n area +=\n toRadians(x2 - x1) *\n (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n x1 = x2;\n y1 = y2;\n }\n return (area * radius * radius) / 2.0;\n}\n\n/**\n * Get the spherical area of a geometry. This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the area\n * calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, opt_options) {\n const options = opt_options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== 'GeometryCollection') {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let area = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case 'Point':\n case 'MultiPoint':\n case 'LineString':\n case 'MultiLineString':\n case 'LinearRing': {\n break;\n }\n case 'Polygon': {\n coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (\n geometry\n ).getCoordinates();\n area = Math.abs(getAreaInternal(coordinates[0], radius));\n for (i = 1, ii = coordinates.length; i < ii; ++i) {\n area -= Math.abs(getAreaInternal(coordinates[i], radius));\n }\n break;\n }\n case 'MultiPolygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n area += Math.abs(getAreaInternal(coords[0], radius));\n for (j = 1, jj = coords.length; j < jj; ++j) {\n area -= Math.abs(getAreaInternal(coords[j], radius));\n }\n }\n break;\n }\n case 'GeometryCollection': {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n area += getArea(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return area;\n}\n\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n * point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, opt_radius) {\n const radius = opt_radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lon1 = toRadians(c1[0]);\n const dByR = distance / radius;\n const lat = Math.asin(\n Math.sin(lat1) * Math.cos(dByR) +\n Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)\n );\n const lon =\n lon1 +\n Math.atan2(\n Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),\n Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)\n );\n return [toDegrees(lon), toDegrees(lat)];\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport Units, {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array, Array=, number=): Array} TransformFunction\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [opt_disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(opt_disable) {\n const hide = opt_disable === undefined ? true : opt_disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n let output;\n if (opt_output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n output = opt_output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n if (opt_output !== undefined && input !== opt_output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n input = opt_output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n return typeof projectionLike === 'string'\n ? getProj(/** @type {string} */ (projectionLike))\n : /** @type {Projection} */ (projectionLike) || null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").default} [opt_units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (opt_units && opt_units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[opt_units];\n }\n }\n } else {\n const units = projection.getUnits();\n if ((units == Units.DEGREES && !opt_units) || opt_units == Units.DEGREES) {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326')\n );\n if (toEPSG4326 === identityTransform && units !== Units.DEGREES) {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = opt_units\n ? METERS_PER_UNIT[opt_units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n } else if (typeof projection === 'string') {\n return get(projection);\n } else {\n return /** @type {Projection} */ (projection);\n }\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [opt_output] Output.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output.\n */\n function (input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension !== undefined ? opt_dimension : 2;\n const output = opt_output !== undefined ? opt_output : new Array(length);\n for (let i = 0; i < length; i += dimension) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = dimension; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward)\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse)\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [opt_projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n opt_projection !== undefined ? opt_projection : 'EPSG:3857'\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [opt_projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n const lonLat = transform(\n coordinate,\n opt_projection !== undefined ? opt_projection : 'EPSG:3857',\n 'EPSG:4326'\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n } else {\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n * object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(\n sourceProjection,\n destinationProjection\n) {\n const sourceCode = sourceProjection.getCode();\n const destinationCode = destinationProjection.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, opt_stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, opt_stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods. This includes all API\n * methods except for those interacting with tile grids.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n // eslint-disable-next-line no-console\n console.warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.'\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(sourceProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[sourceUnits]) / METERS_PER_UNIT[userUnits]\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(destProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[userUnits]) / METERS_PER_UNIT[sourceUnits]\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326\n );\n}\n\naddCommon();\n","/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @param {Array} [opt_centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, opt_isMoving, opt_centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n const shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (opt_isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n","/**\n * @module ol/resolutionconstraint\n */\nimport {clamp} from './math.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {linearFindNearest} from './array.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [opt_minResolution] Minimum resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n opt_minResolution,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n const minResolution =\n opt_minResolution !== undefined ? opt_minResolution : 0;\n\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n\n if (!smooth || !opt_isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} [opt_tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n const tolerance = opt_tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n if (Math.abs(rotation) <= tolerance) {\n return 0;\n } else {\n return rotation;\n }\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n } else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n","/**\n * @module ol/geom/GeometryLayout\n */\n\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM',\n};\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport Units from '../proj/Units.js';\nimport {abstract} from '../util.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createEmpty,\n createOrUpdateEmpty,\n getHeight,\n returnOrUpdate,\n} from '../extent.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from './flat/transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Circle'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, or `'Circle'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n constructor() {\n super();\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = createEmpty();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n this.simplifyTransformedInternal = memoizeOne(function (\n revision,\n squaredTolerance,\n opt_transform\n ) {\n if (!opt_transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n const clone = this.clone();\n clone.applyTransform(opt_transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, opt_transform) {\n return this.simplifyTransformedInternal(\n this.getRevision(),\n squaredTolerance,\n opt_transform\n );\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n clone() {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n return abstract();\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n }\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, opt_closestPoint) {\n const closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return abstract();\n }\n\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [opt_extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n getExtent(opt_extent) {\n if (this.extentRevision_ != this.getRevision()) {\n const extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, opt_extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n abstract();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n abstract();\n }\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return abstract();\n }\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {Type} Geometry type.\n */\n getType() {\n return abstract();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n applyTransform(transformFn) {\n abstract();\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {\n return abstract();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n abstract();\n }\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n const sourceProj = getProjection(source);\n const transformFn =\n sourceProj.getUnits() == Units.TILE_PIXELS\n ? function (inCoordinates, outCoordinates, stride) {\n const pixelExtent = sourceProj.getExtent();\n const projectedExtent = sourceProj.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0\n );\n transform2D(\n inCoordinates,\n 0,\n inCoordinates.length,\n stride,\n tmpTransform,\n outCoordinates\n );\n return getTransform(sourceProj, destination)(\n inCoordinates,\n outCoordinates,\n stride\n );\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n\nexport default Geometry;\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport GeometryLayout from './GeometryLayout.js';\nimport {abstract} from '../util.js';\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport {rotate, scale, transform2D, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n constructor() {\n super();\n\n /**\n * @protected\n * @type {import(\"./GeometryLayout.js\").default}\n */\n this.layout = GeometryLayout.XY;\n\n /**\n * @protected\n * @type {number}\n */\n this.stride = 2;\n\n /**\n * @protected\n * @type {Array}\n */\n this.flatCoordinates = null;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromFlatCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n extent\n );\n }\n\n /**\n * @abstract\n * @return {Array<*> | null} Coordinates.\n */\n getCoordinates() {\n return abstract();\n }\n\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n getFirstCoordinate() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getFlatCoordinates() {\n return this.flatCoordinates;\n }\n\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n getLastCoordinate() {\n return this.flatCoordinates.slice(\n this.flatCoordinates.length - this.stride\n );\n }\n\n /**\n * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.\n * @return {import(\"./GeometryLayout.js\").default} Layout.\n * @api\n */\n getLayout() {\n return this.layout;\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (\n squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)\n ) {\n return this;\n }\n\n const simplifiedGeometry =\n this.getSimplifiedGeometryInternal(squaredTolerance);\n const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n } else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n return this;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride;\n }\n\n /**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n setFlatCoordinates(layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n }\n\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n setCoordinates(coordinates, opt_layout) {\n abstract();\n }\n\n /**\n * @param {import(\"./GeometryLayout.js\").default|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n setLayout(layout, coordinates, nesting) {\n /** @type {number} */\n let stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n } else {\n for (let i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = GeometryLayout.XY;\n this.stride = 2;\n return;\n } else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n rotate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n angle,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n let sy = opt_sy;\n if (sy === undefined) {\n sy = sx;\n }\n let anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n scale(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n sx,\n sy,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n translate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n deltaX,\n deltaY,\n flatCoordinates\n );\n this.changed();\n }\n }\n}\n\n/**\n * @param {number} stride Stride.\n * @return {import(\"./GeometryLayout.js\").default} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n let layout;\n if (stride == 2) {\n layout = GeometryLayout.XY;\n } else if (stride == 3) {\n layout = GeometryLayout.XYZ;\n } else if (stride == 4) {\n layout = GeometryLayout.XYZM;\n }\n return /** @type {import(\"./GeometryLayout.js\").default} */ (layout);\n}\n\n/**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n let stride;\n if (layout == GeometryLayout.XY) {\n stride = 2;\n } else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n stride = 3;\n } else if (layout == GeometryLayout.XYZM) {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n const flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n } else {\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n transform,\n opt_dest\n );\n }\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(\n flatCoordinates,\n offset1,\n offset2,\n stride,\n x,\n y,\n closestPoint\n) {\n const x1 = flatCoordinates[offset1];\n const y1 = flatCoordinates[offset1 + 1];\n const dx = flatCoordinates[offset2] - x1;\n const dy = flatCoordinates[offset2 + 1] - y1;\n let offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n } else {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n } else if (t > 0) {\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(\n flatCoordinates[offset1 + i],\n flatCoordinates[offset2 + i],\n t\n );\n }\n closestPoint.length = stride;\n return;\n } else {\n offset = offset1;\n }\n }\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n const squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n ends,\n stride,\n max\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n endss,\n stride,\n max\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n if (offset == end) {\n return minSquaredDistance;\n }\n let i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[offset],\n flatCoordinates[offset + 1]\n );\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n let index = offset + stride;\n while (index < end) {\n assignClosest(\n flatCoordinates,\n index - stride,\n index,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n } else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(\n ((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0,\n 1\n );\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(\n flatCoordinates,\n end - stride,\n offset,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n minSquaredDistance = assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = end;\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(\n flatCoordinates,\n offset,\n endss,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n","/**\n * @module ol/geom/flat/deflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(\n flatCoordinates,\n offset,\n coordinates,\n stride\n) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n const coordinate = coordinates[i];\n for (let j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array} [opt_ends] Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatess,\n stride,\n opt_ends\n) {\n const ends = opt_ends ? opt_ends : [];\n let i = 0;\n for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n const end = deflateCoordinates(\n flatCoordinates,\n offset,\n coordinatess[j],\n stride\n );\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>} [opt_endss] Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss,\n stride,\n opt_endss\n) {\n const endss = opt_endss ? opt_endss : [];\n let i = 0;\n for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n const ends = deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss[j],\n stride,\n endss[i]\n );\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [opt_simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n opt_simplifiedFlatCoordinates\n) {\n const simplifiedFlatCoordinates =\n opt_simplifiedFlatCoordinates !== undefined\n ? opt_simplifiedFlatCoordinates\n : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/geom/flat/inflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array} [opt_coordinates] Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n opt_coordinates\n) {\n const coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>} [opt_coordinatess] Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_coordinatess\n) {\n const coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n let i = 0;\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n const end = ends[j];\n coordinatess[i++] = inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinatess[i]\n );\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array>>} [opt_coordinatesss]\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_coordinatesss\n) {\n const coordinatesss =\n opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n let i = 0;\n for (let j = 0, jj = endss.length; j < jj; ++j) {\n const ends = endss[j];\n coordinatesss[i++] = inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatesss[i]\n );\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n","/**\n * @module ol/geom/flat/area\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n let twiceArea = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n twiceArea += y1 * x2 - x1 * y2;\n x1 = x2;\n y1 = y2;\n }\n return twiceArea / 2;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n let area = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n let area = 0;\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n","/**\n * @module ol/geom/LinearRing\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {douglasPeucker} from './flat/simplify.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {linearRing as linearRingArea} from './flat/area.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n */\n clone() {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n maxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingArea(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'LinearRing';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return false;\n }\n\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Point\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {containsXY, createOrUpdateFromCoordinate} from '../extent.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n this.setCoordinates(coordinates, opt_layout);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n */\n clone() {\n const point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[0],\n flatCoordinates[1]\n );\n if (squaredDistance < minSquaredDistance) {\n const stride = this.stride;\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n */\n getCoordinates() {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Point';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n }\n\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default Point;\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1]\n );\n }\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {linearRingsContainsXY} from './contains.js';\nimport {numberSafeCompareFunction} from '../../array.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n opt_dest\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (opt_dest) {\n opt_dest.push(pointX, y, maxSegmentLength);\n return opt_dest;\n } else {\n return [pointX, y, maxSegmentLength];\n }\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters\n) {\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/geom/flat/segments\n */\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n let ret;\n offset += stride;\n for (; offset < end; offset += stride) {\n ret = callback(\n flatCoordinates.slice(offset - stride, offset),\n flatCoordinates.slice(offset, offset + stride)\n );\n if (ret) {\n return ret;\n }\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {\n containsExtent,\n createEmpty,\n extendFlatCoordinates,\n intersects,\n intersectsSegment,\n} from '../../extent.js';\nimport {forEach as forEachSegment} from './segments.js';\nimport {linearRingContainsExtent, linearRingContainsXY} from './contains.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const coordinatesExtent = extendFlatCoordinates(\n createEmpty(),\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(\n flatCoordinates,\n offset,\n end,\n stride,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n }\n );\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n if (\n intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)\n ) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[3]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[3]\n )\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsExtent(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n if (\n !intersectsLineString(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n extent\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)\n ) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (let i = 0; i < stride; ++i) {\n const tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_right\n) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n !linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)\n ) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_right\n) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n opt_right\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to contruct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n if (!linearRingIsClockwise(flatCoordinates, offset, end, 2)) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/Polygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {closestSquaredDistanceXY, getCenter} from '../extent.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {getInteriorPointOfArray} from './flat/interiorpoint.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {intersectsLinearRingArray} from './flat/intersectsextent.js';\nimport {linearRingsAreOriented, orientLinearRings} from './flat/orient.js';\nimport {linearRings as linearRingsArea} from './flat/area.js';\nimport {linearRingsContainsXY} from './flat/contains.js';\nimport {modulo} from '../math.js';\nimport {quantizeArray} from './flat/simplify.js';\nimport {offset as sphereOffset} from '../sphere.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n /**\n * @param {!Array>|!Array} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array} [opt_ends] Ends (for internal use with flat coordinates).\n */\n constructor(coordinates, opt_layout, opt_ends) {\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointRevision_ = -1;\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.flatInteriorPoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (opt_layout !== undefined && opt_ends) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n this.ends_ = opt_ends;\n } else {\n this.setCoordinates(\n /** @type {Array>} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n appendLinearRing(linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n */\n clone() {\n const polygon = new Polygon(\n this.flatCoordinates.slice(),\n this.layout,\n this.ends_.slice()\n );\n polygon.applyProperties(this);\n return polygon;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n arrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n return linearRingsContainsXY(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n x,\n y\n );\n }\n\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingsArea(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride\n );\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean} [opt_right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @api\n */\n getCoordinates(opt_right) {\n let flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, opt_right);\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * @return {Array} Interior point.\n */\n getFlatInteriorPoint() {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n flatCenter,\n 0\n );\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\n }\n\n /**\n * Return an interior point of the polygon.\n * @return {Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoint() {\n return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\n }\n\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n getLinearRingCount() {\n return this.ends_.length;\n }\n\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {LinearRing|null} Linear ring.\n * @api\n */\n getLinearRing(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(\n this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1],\n this.ends_[index]\n ),\n this.layout\n );\n }\n\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n getLinearRings() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const linearRings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const linearRing = new LinearRing(\n flatCoordinates.slice(offset, end),\n layout\n );\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(\n this.orientedFlatCoordinates_,\n 0,\n this.ends_,\n this.stride\n );\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds\n );\n return new Polygon(\n simplifiedFlatCoordinates,\n GeometryLayout.XY,\n simplifiedEnds\n );\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Polygon';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLinearRingArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.ends_\n );\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\nexport default Polygon;\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices in meters.\n * @param {number} [opt_n] Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number} [opt_sphereRadius] Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, opt_n, opt_sphereRadius) {\n const n = opt_n ? opt_n : 32;\n /** @type {Array} */\n const flatCoordinates = [];\n for (let i = 0; i < n; ++i) {\n extend(\n flatCoordinates,\n sphereOffset(center, radius, (2 * Math.PI * i) / n, opt_sphereRadius)\n );\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const flatCoordinates = [\n minX,\n minY,\n minX,\n maxY,\n maxX,\n maxY,\n maxX,\n minY,\n minX,\n minY,\n ];\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number} [opt_sides] Number of sides of the polygon. Default is 32.\n * @param {number} [opt_angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, opt_sides, opt_angle) {\n const sides = opt_sides ? opt_sides : 32;\n const stride = circle.getStride();\n const layout = circle.getLayout();\n const center = circle.getCenter();\n const arrayLength = stride * (sides + 1);\n const flatCoordinates = new Array(arrayLength);\n for (let i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (let j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n const ends = [flatCoordinates.length];\n const polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), opt_angle);\n return polygon;\n}\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number} [opt_angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, opt_angle) {\n const flatCoordinates = polygon.getFlatCoordinates();\n const stride = polygon.getStride();\n const sides = flatCoordinates.length / stride - 1;\n const startAngle = opt_angle ? opt_angle : 0;\n for (let i = 0; i <= sides; ++i) {\n const offset = i * stride;\n const angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n }\n polygon.changed();\n}\n","/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {VOID} from './functions.js';\nimport {\n add as addCoordinate,\n equals as coordinatesEqual,\n equals,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {assert} from './asserts.js';\nimport {assign} from './obj.js';\nimport {none as centerNone, createExtent} from './centerconstraint.js';\nimport {clamp, modulo} from './math.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {linearFindNearest} from './array.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center.\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [opt_options] View options.\n */\n constructor(opt_options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n const options = assign({}, opt_options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.projection) {\n disableCoordinateWarning();\n }\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenter();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection()\n );\n }\n if (options.anchor) {\n options = assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection()\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this)\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(opt_rotation) {\n const size = this.viewportSize_;\n if (opt_rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(opt_rotation)) +\n Math.abs(h * Math.sin(opt_rotation)),\n Math.abs(w * Math.sin(opt_rotation)) +\n Math.abs(h * Math.cos(opt_rotation)),\n ];\n } else {\n return size;\n }\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [opt_size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(opt_size) {\n this.viewportSize_ = Array.isArray(opt_size)\n ? opt_size.slice()\n : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [opt_hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(opt_hints) {\n if (opt_hints !== undefined) {\n opt_hints[0] = this.hints_[0];\n opt_hints[1] = this.hints_[1];\n return opt_hints;\n } else {\n return this.hints_.slice();\n }\n }\n\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(opt_size) {\n const extent = this.calculateExtentInternal(opt_size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(opt_size) {\n const size = opt_size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 1); // The view center is not defined\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, opt_size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n opt_size\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, opt_size) {\n const size = opt_size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(opt_power) {\n const power = opt_power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(opt_power) {\n const logPower = Math.log(opt_power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(opt_rotation) {\n let size = this.getViewportSize_(opt_rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n } else {\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [opt_options] Options.\n * @api\n */\n fit(geometryOrExtent, opt_options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 24\n ); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection()\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, opt_options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [opt_options] Options.\n */\n fitInternal(geometry, opt_options) {\n const options = opt_options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation()\n )\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, opt_anchor) {\n const anchor =\n opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, opt_anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving\n );\n\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, opt_anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, opt_anchor) {\n if (opt_anchor) {\n opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, opt_anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n */\n adjustRotationInternal(delta, opt_anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving\n );\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [opt_doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [opt_forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(opt_doNotCancelAnims, opt_forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || opt_forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !opt_doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [opt_duration] The animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor) {\n const duration = opt_duration !== undefined ? opt_duration : 200;\n const direction = opt_resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n const anchor =\n opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n endInteraction(opt_duration, opt_resolutionDirection, opt_anchor) {\n const anchor =\n opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n endInteractionInternal(opt_duration, opt_resolutionDirection, opt_anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n\n this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [opt_targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, opt_targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n opt_targetResolution || this.getResolution(),\n size\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, opt_direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, opt_direction)\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, opt_direction) {\n const direction = opt_direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor)\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n } else if (constrainRotation === false) {\n return rotationNone;\n } else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n } else {\n return rotationNone;\n }\n } else {\n return disable;\n }\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n","/**\n * @module ol/size\n */\n\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n } else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n } else {\n opt_size[0] = size;\n opt_size[1] = size;\n }\n return opt_size;\n }\n}\n","/**\n * @module ol/PluggableMap\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport Layer from './layer/Layer.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {TRUE} from './functions.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {assert} from './asserts.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport {getUid} from './util.js';\nimport {hasArea} from './size.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {removeNode} from './dom.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} PluggableMapOnSignature\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {PluggableMap} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass PluggableMap extends BaseObject {\n /**\n * @param {MapOptions} options Map options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.on;\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.once;\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean|undefined}\n */\n this.renderComplete_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {*}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = /** @this {PluggableMap} */ function () {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || new Collection();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions = optionsInternal.interactions || new Collection();\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this)\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(\n /** @type {import(\"./Overlay.js\").default} */ (event.element)\n );\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n const overlay = /** @type {import(\"./Overlay.js\").default} */ (\n event.element\n );\n const id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {PluggableMap}\n */\n function (control) {\n control.setMap(this);\n }.bind(this)\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {PluggableMap}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(this)\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * @abstract\n * @return {import(\"./renderer/Map.js\").default} The map renderer\n */\n createRenderer() {\n throw new Error('Use a map type that has a createRenderer method');\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const hitTolerance =\n opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n const layerFilter =\n opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n const checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, opt_options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n opt_options\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Please the `layer.getData()` method for {@link module:ol/layer/Tile~TileLayer#getData tile layers} or\n * {@link module:ol/layer/Image~ImageLayer#getData image layers} instead of using this method.\n *\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n *\n * Note: In maps with more than one layer, this method will typically return pixel data\n * representing the composed image of all layers visible at the given pixel – because layers\n * will generally share the same rendering context. To force layers to render separately, and\n * to get pixel data representing only one layer at a time, you can assign each layer a unique\n * `className` in its constructor.\n *\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer~Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {AtPixelOptions} [opt_options] Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n * @deprecated\n */\n forEachLayerAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const options = opt_options || {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(\n pixel,\n this.frameState_,\n hitTolerance,\n callback,\n layerFilter\n );\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, opt_options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const layerFilter =\n opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n const hitTolerance =\n opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n const checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewportPosition = this.viewport_.getBoundingClientRect();\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n const target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n } else {\n return null;\n }\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection()\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.pixelToCoordinateTransform,\n pixel.slice()\n );\n }\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = /** @type {import(\"./layer/Layer.js\").default} */ (\n state.layer\n ).getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection()\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2)\n );\n }\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [opt_type] Type.\n */\n handleBrowserEvent(browserEvent, opt_type) {\n const type = opt_type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_ === true) {\n if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState\n );\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADEND, this, frameState)\n );\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADSTART, this, frameState)\n );\n }\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const targetElement = this.getTargetElement();\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this)\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n\n const defaultView = this.getOwnerDocument().defaultView;\n const keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this\n ),\n listen(defaultView, EventType.RESIZE, this.updateSize, this),\n ];\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_();\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size\n );\n }\n }\n\n this.frameState_ = frameState;\n /** @type {import(\"./renderer/Map.js\").default} */ (\n this.renderer_\n ).renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState)\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState)\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n this.hasListener(MapEventType.LOADSTART) ||\n this.hasListener(MapEventType.LOADEND) ||\n this.hasListener(RenderEventType.RENDERCOMPLETE)\n ? !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady()\n : undefined;\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n // eslint-disable-next-line\n console.warn(\n \"No map visible because the map container's width or height are 0.\"\n );\n }\n }\n }\n\n this.setSize(size);\n this.updateViewportSize_();\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n updateViewportSize_() {\n const view = this.getView();\n if (view) {\n let size = undefined;\n const computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({layers: /** @type {Collection} */ (options.layers)});\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 47\n ); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = /** @type {Collection} */ (options.controls);\n }\n }\n\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 48\n ); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = /** @type {Collection} */ (options.interactions);\n }\n }\n\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 49\n ); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default PluggableMap;\n","/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport {VOID} from '../functions.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {removeNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n removeNode(this.element);\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this)\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n","/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {equals} from '../array.js';\nimport {inView} from '../layer/Layer.js';\nimport {removeChildren, replaceNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [opt_options] Attribution options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n const lookup = {};\n\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n const visibleAttributions = [];\n\n let collapsible = true;\n const layerStatesArray = frameState.layerStatesArray;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n\n const source = /** @type {import(\"../layer/Layer.js\").default} */ (\n layerState.layer\n ).getSource();\n if (!source) {\n continue;\n }\n\n const attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n\n const attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n\n if (Array.isArray(attributions)) {\n for (let j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n } else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n }\n\n /**\n * @private\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = this.collectSourceAttributions_(frameState);\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n","/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [opt_options] Rotate options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [opt_options] Zoom options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport {easeOut, linear} from '../easing.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} InteractionOnSignature\n */\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n /**\n * @param {InteractionOptions} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n /***\n * @type {InteractionOnSignature}\n */\n this.on;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.once;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.un;\n\n if (opt_options && opt_options.handleEvent) {\n this.handleEvent = opt_options.handleEvent;\n }\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default|null}\n */\n this.map_ = null;\n\n this.setActive(true);\n }\n\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n getActive() {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n }\n\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n return true;\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(active) {\n this.set(InteractionProperty.ACTIVE, active);\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n */\n setMap(map) {\n this.map_ = map;\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [opt_duration] Duration.\n */\nexport function pan(view, delta, opt_duration) {\n const currentCenter = view.getCenterInternal();\n if (currentCenter) {\n const center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] Anchor coordinate in the user projection.\n * @param {number} [opt_duration] Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n const currentZoom = view.getZoom();\n\n if (currentZoom === undefined) {\n return;\n }\n\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n const newResolution = view.getResolutionForZoom(newZoom);\n\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: opt_anchor,\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: easeOut,\n });\n}\n\nexport default Interaction;\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nclass PointerInteraction extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)\n );\n\n if (options.handleDownEvent) {\n this.handleDownEvent = options.handleDownEvent;\n }\n\n if (options.handleDragEvent) {\n this.handleDragEvent = options.handleDragEvent;\n }\n\n if (options.handleMoveEvent) {\n this.handleMoveEvent = options.handleMoveEvent;\n }\n\n if (options.handleUpEvent) {\n this.handleUpEvent = options.handleUpEvent;\n }\n\n if (options.stopDown) {\n this.stopDown = options.stopDown;\n }\n\n /**\n * @type {boolean}\n * @protected\n */\n this.handlingDownUpSequence = false;\n\n /**\n * @type {Array}\n * @protected\n */\n this.targetPointers = [];\n }\n\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n getPointerCount() {\n return this.targetPointers.length;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleDownEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleDragEvent(mapBrowserEvent) {}\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n\n let stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n const handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n } else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n const handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n }\n\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleMoveEvent(mapBrowserEvent) {}\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleUpEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n stopDown(handled) {\n return handled;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n updateTrackedPointers_(mapBrowserEvent) {\n if (mapBrowserEvent.activePointers) {\n this.targetPointers = mapBrowserEvent.activePointers;\n }\n }\n}\n\n/**\n * @param {Array} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n const length = pointerEvents.length;\n let clientX = 0;\n let clientY = 0;\n for (let i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return [clientX / length, clientY / length];\n}\n\nexport default PointerInteraction;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
    `.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const activeElement = event.map.getOwnerDocument().activeElement;\n return targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return (\n tagName !== 'INPUT' &&\n tagName !== 'SELECT' &&\n tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable\n );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n","/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n all,\n focusWithTabindex,\n noModifierKeys,\n primaryAction,\n} from '../events/condition.js';\nimport {easeOut} from '../easing.js';\nimport {\n rotate as rotateCoordinate,\n scale as scaleCoordinate,\n} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super({\n stopDown: FALSE,\n });\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n this.kinetic_ = options.kinetic;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.lastCentroid = null;\n\n /**\n * @type {number}\n */\n this.lastPointersCount_;\n\n /**\n * @type {boolean}\n */\n this.panning_ = false;\n\n const condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {boolean}\n */\n this.noKinetic_ = false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n if (!this.panning_) {\n this.panning_ = true;\n this.getMap().getView().beginInteraction();\n }\n const targetPointers = this.targetPointers;\n const centroid = centroidFromPointers(targetPointers);\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n const delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n const map = mapBrowserEvent.map;\n const view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n } else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n const distance = this.kinetic_.getDistance();\n const angle = this.kinetic_.getAngle();\n const center = view.getCenterInternal();\n const centerpx = map.getPixelFromCoordinateInternal(center);\n const dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n } else {\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default DragPan;\n","/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n altShiftKeysOnly,\n mouseActionButton,\n mouseOnly,\n} from '../events/condition.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n stopDown: FALSE,\n });\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n const size = map.getSize();\n const offset = mapBrowserEvent.pixel;\n const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n const delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n\n if (\n mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)\n ) {\n const map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default DragRotate;\n","/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n /**\n * @param {string} className CSS class name.\n */\n constructor(className) {\n super();\n\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n this.geometry_ = null;\n\n /**\n * @type {HTMLDivElement}\n * @private\n */\n this.element_ = document.createElement('div');\n this.element_.style.position = 'absolute';\n this.element_.style.pointerEvents = 'auto';\n this.element_.className = 'ol-box ' + className;\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.endPixel_ = null;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.setMap(null);\n }\n\n /**\n * @private\n */\n render_() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const px = 'px';\n const style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n }\n\n /**\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n */\n setMap(map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n const style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n setPixels(startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n }\n\n /**\n * Creates or updates the cached geometry.\n */\n createOrUpdateGeometry() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n const coordinates = pixels.map(\n this.map_.getCoordinateFromPixelInternal,\n this.map_\n );\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n } else {\n this.geometry_.setCoordinates([coordinates]);\n }\n }\n\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n getGeometry() {\n return this.geometry_;\n }\n}\n\nexport default RenderBox;\n","/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport {mouseActionButton} from '../events/condition.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n constructor(type, coordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.on;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.once;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.un;\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n /**\n * @type {number}\n * @private\n */\n this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n\n if (options.onBoxEnd) {\n this.onBoxEnd = options.onBoxEnd;\n }\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : mouseActionButton;\n\n /**\n * @private\n * @type {EndCondition}\n */\n this.boxEndCondition_ = options.boxEndCondition\n ? options.boxEndCondition\n : this.defaultBoxEndCondition;\n }\n\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n const width = endPixel[0] - startPixel[0];\n const height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n }\n\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n getGeometry() {\n return this.box_.getGeometry();\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXDRAG,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n this.box_.setMap(null);\n\n const completeBox = this.boxEndCondition_(\n mapBrowserEvent,\n this.startPixel_,\n mapBrowserEvent.pixel\n );\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(\n new DragBoxEvent(\n completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXSTART,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {}\n}\n\nexport default DragBox;\n","/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const condition = options.condition ? options.condition : shiftKeyOnly;\n\n super({\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n });\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n /**\n * @private\n * @type {boolean}\n */\n this.out_ = options.out !== undefined ? options.out : false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {\n const map = this.getMap();\n const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n let geometry = this.getGeometry();\n\n if (this.out_) {\n const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n const factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n }\n}\n\nexport default DragZoom;\n","/**\n * @module ol/events/KeyCode\n */\n\n/**\n * @enum {number}\n * @const\n */\nexport default {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n};\n","/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {pan} from './Interaction.js';\nimport KeyCode from '../events/KeyCode.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport {rotate as rotateCoordinate} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options || {};\n\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n this.defaultCondition_ = function (mapBrowserEvent) {\n return (\n noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ =\n options.condition !== undefined\n ? options.condition\n : this.defaultCondition_;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardPan}\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const keyCode = keyEvent.keyCode;\n if (\n this.condition_(mapBrowserEvent) &&\n (keyCode == KeyCode.DOWN ||\n keyCode == KeyCode.LEFT ||\n keyCode == KeyCode.RIGHT ||\n keyCode == KeyCode.UP)\n ) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n let deltaX = 0,\n deltaY = 0;\n if (keyCode == KeyCode.DOWN) {\n deltaY = -mapUnitsDelta;\n } else if (keyCode == KeyCode.LEFT) {\n deltaX = -mapUnitsDelta;\n } else if (keyCode == KeyCode.RIGHT) {\n deltaX = mapUnitsDelta;\n } else {\n deltaY = mapUnitsDelta;\n }\n const delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardPan;\n","/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {targetNotEditable} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : targetNotEditable;\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardZoom}\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (\n mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS\n ) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const charCode = keyEvent.charCode;\n if (\n this.condition_(mapBrowserEvent) &&\n (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))\n ) {\n const map = mapBrowserEvent.map;\n const delta =\n charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardZoom;\n","/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n","/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {clamp} from '../math.js';\n\n/**\n * @enum {string}\n */\nexport const Mode = {\n TRACKPAD: 'trackpad',\n WHEEL: 'wheel',\n};\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)\n );\n\n /**\n * @private\n * @type {number}\n */\n this.totalDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.lastDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @private\n * @type {number}\n */\n this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n /**\n * @private\n * @type {boolean}\n */\n this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n\n const condition = options.condition ? options.condition : always;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {?import(\"../coordinate.js\").Coordinate}\n */\n this.lastAnchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.startTime_ = undefined;\n\n /**\n * @private\n * @type {?}\n */\n this.timeoutId_;\n\n /**\n * @private\n * @type {Mode|undefined}\n */\n this.mode_ = undefined;\n\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @type {number}\n */\n this.trackpadEventGap_ = 400;\n\n /**\n * @type {?}\n */\n this.trackpadTimeoutId_;\n\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n this.deltaPerZoom_ = 300;\n }\n\n /**\n * @private\n */\n endInteraction_() {\n this.trackpadTimeoutId_ = undefined;\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n view.endInteraction(\n undefined,\n this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0,\n this.lastAnchor_\n );\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const wheelEvent = /** @type {WheelEvent} */ (\n mapBrowserEvent.originalEvent\n );\n wheelEvent.preventDefault();\n\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.coordinate;\n }\n\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n let delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n\n if (delta === 0) {\n return false;\n } else {\n this.lastDelta_ = delta;\n }\n\n const now = Date.now();\n\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? Mode.TRACKPAD : Mode.WHEEL;\n }\n\n const view = map.getView();\n if (\n this.mode_ === Mode.TRACKPAD &&\n !(view.getConstrainResolution() || this.constrainResolution_)\n ) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n } else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(\n this.endInteraction_.bind(this),\n this.timeout_\n );\n view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n this.startTime_ = now;\n return false;\n }\n\n this.totalDelta_ += delta;\n\n const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(\n this.handleWheelZoom_.bind(this, map),\n timeLeft\n );\n\n return false;\n }\n\n /**\n * @private\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n handleWheelZoom_(map) {\n const view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n let delta =\n -clamp(\n this.totalDelta_,\n -this.maxDelta_ * this.deltaPerZoom_,\n this.maxDelta_ * this.deltaPerZoom_\n ) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n }\n\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n setMouseAnchor(useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n }\n}\n\nexport default MouseWheelZoom;\n","/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotating_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.rotationDelta_ = 0.0;\n\n /**\n * @private\n * @type {number}\n */\n this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n let rotationDelta = 0.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n\n // angle between touches\n const angle = Math.atan2(\n touch1.clientY - touch0.clientY,\n touch1.clientX - touch0.clientX\n );\n\n if (this.lastAngle_ !== undefined) {\n const delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n const viewportPosition = map.getViewport().getBoundingClientRect();\n const centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default PinchRotate;\n","/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastDistance_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.lastScaleDelta_ = 1;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n let scaleDelta = 1.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n const dx = touch0.clientX - touch1.clientX;\n const dy = touch0.clientY - touch1.clientY;\n\n // distance between touches\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n\n // scale anchor point.\n const viewportPosition = map.getViewport().getBoundingClientRect();\n const centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default PinchZoom;\n","/**\n * @module ol/interaction\n */\nimport Collection from './Collection.js';\nimport DoubleClickZoom from './interaction/DoubleClickZoom.js';\nimport DragPan from './interaction/DragPan.js';\nimport DragRotate from './interaction/DragRotate.js';\nimport DragZoom from './interaction/DragZoom.js';\nimport KeyboardPan from './interaction/KeyboardPan.js';\nimport KeyboardZoom from './interaction/KeyboardZoom.js';\nimport Kinetic from './Kinetic.js';\nimport MouseWheelZoom from './interaction/MouseWheelZoom.js';\nimport PinchRotate from './interaction/PinchRotate.js';\nimport PinchZoom from './interaction/PinchZoom.js';\n\nexport {default as DoubleClickZoom} from './interaction/DoubleClickZoom.js';\nexport {default as DragAndDrop} from './interaction/DragAndDrop.js';\nexport {default as DragBox} from './interaction/DragBox.js';\nexport {default as DragPan} from './interaction/DragPan.js';\nexport {default as DragRotate} from './interaction/DragRotate.js';\nexport {default as DragRotateAndZoom} from './interaction/DragRotateAndZoom.js';\nexport {default as DragZoom} from './interaction/DragZoom.js';\nexport {default as Draw} from './interaction/Draw.js';\nexport {default as Extent} from './interaction/Extent.js';\nexport {default as Interaction} from './interaction/Interaction.js';\nexport {default as KeyboardPan} from './interaction/KeyboardPan.js';\nexport {default as KeyboardZoom} from './interaction/KeyboardZoom.js';\nexport {default as Modify} from './interaction/Modify.js';\nexport {default as MouseWheelZoom} from './interaction/MouseWheelZoom.js';\nexport {default as PinchRotate} from './interaction/PinchRotate.js';\nexport {default as PinchZoom} from './interaction/PinchZoom.js';\nexport {default as Pointer} from './interaction/Pointer.js';\nexport {default as Select} from './interaction/Select.js';\nexport {default as Snap} from './interaction/Snap.js';\nexport {default as Translate} from './interaction/Translate.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [opt_options] Defaults options.\n * @return {import(\"./Collection.js\").default}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const interactions = new Collection();\n\n const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n const altShiftDragRotate =\n options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n\n const doubleClickZoom =\n options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(\n new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n })\n );\n }\n\n const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(\n new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n })\n );\n }\n\n const pinchRotate =\n options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n\n const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(\n new PinchZoom({\n duration: options.zoomDuration,\n })\n );\n }\n\n const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(\n new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n })\n );\n }\n\n const mouseWheelZoom =\n options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(\n new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n })\n );\n }\n\n const shiftDragZoom =\n options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(\n new DragZoom({\n duration: options.zoomDuration,\n })\n );\n }\n\n return interactions;\n}\n","/**\n * @module ol/Map\n */\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport PluggableMap from './PluggableMap.js';\nimport {assign} from './obj.js';\nimport {defaults as defaultControls} from './control.js';\nimport {defaults as defaultInteractions} from './interaction.js';\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map';\n * import View from 'ol/View';\n * import TileLayer from 'ol/layer/Tile';\n * import OSM from 'ol/source/OSM';\n *\n * var map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM()\n * })\n * ],\n * target: 'map'\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @api\n */\nclass Map extends PluggableMap {\n /**\n * @param {import(\"./PluggableMap.js\").MapOptions} options Map options.\n */\n constructor(options) {\n options = assign({}, options);\n if (!options.controls) {\n options.controls = defaultControls();\n }\n if (!options.interactions) {\n options.interactions = defaultInteractions({\n onFocusOnly: true,\n });\n }\n\n super(options);\n }\n\n createRenderer() {\n return new CompositeMapRenderer(this);\n }\n}\n\nexport default Map;\n","/**\n * @module ol/control\n */\nimport Attribution from './control/Attribution.js';\nimport Collection from './Collection.js';\nimport Rotate from './control/Rotate.js';\nimport Zoom from './control/Zoom.js';\n\nexport {default as Attribution} from './control/Attribution.js';\nexport {default as Control} from './control/Control.js';\nexport {default as FullScreen} from './control/FullScreen.js';\nexport {default as MousePosition} from './control/MousePosition.js';\nexport {default as OverviewMap} from './control/OverviewMap.js';\nexport {default as Rotate} from './control/Rotate.js';\nexport {default as ScaleLine} from './control/ScaleLine.js';\nexport {default as Zoom} from './control/Zoom.js';\nexport {default as ZoomSlider} from './control/ZoomSlider.js';\nexport {default as ZoomToExtent} from './control/ZoomToExtent.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./control/Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./control/Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./control/Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n * @api\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [opt_options]\n * Defaults options.\n * @return {Collection}\n * Controls.\n * @api\n */\nexport function defaults(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const controls = new Collection();\n\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n\n const attributionControl =\n options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n\n return controls;\n}\n","/**\n * @module ol/Overlay\n */\nimport BaseObject from './Object.js';\nimport MapEventType from './MapEventType.js';\nimport {CLASS_SELECTABLE} from './css.js';\nimport {containsExtent} from './extent.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {outerHeight, outerWidth, removeChildren, removeNode} from './dom.js';\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport?\n * If `true` (deprecated), then `autoPanAnimation` and `autoPanMargin` will be\n * used to determine the panning parameters; if an object is supplied then other\n * parameters are ignored.\n * @property {PanOptions} [autoPanAnimation] The animation options used to pan\n * the overlay into view. This animation is only used when `autoPan` is enabled.\n * A `duration` and `easing` may be provided to customize the animation.\n * Deprecated and ignored if `autoPan` is supplied as an object.\n * @property {number} [autoPanMargin=20] The margin (in pixels) between the\n * overlay and the borders of the map when autopanning. Deprecated and ignored\n * if `autoPan` is supplied as an object.\n * @property {PanIntoViewOptions} [autoPanOptions] The options to use for the\n * autoPan. This is only used when `autoPan` is enabled and has preference over\n * the individual `autoPanMargin` and `autoPanOptions`.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n ELEMENT: 'element',\n MAP: 'map',\n OFFSET: 'offset',\n POSITION: 'position',\n POSITIONING: 'positioning',\n};\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n * 'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location. Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n * import Overlay from 'ol/Overlay';\n *\n * var popup = new Overlay({\n * element: document.getElementById('popup')\n * });\n * popup.setPosition(coordinate);\n * map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends BaseObject {\n /**\n * @param {Options} options Overlay options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {OverlayOnSignature}\n */\n this.on;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.once;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.un;\n\n /**\n * @protected\n * @type {Options}\n */\n this.options = options;\n\n /**\n * @protected\n * @type {number|string|undefined}\n */\n this.id = options.id;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.insertFirst =\n options.insertFirst !== undefined ? options.insertFirst : true;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = document.createElement('div');\n this.element.className =\n options.className !== undefined\n ? options.className\n : 'ol-overlay-container ' + CLASS_SELECTABLE;\n this.element.style.position = 'absolute';\n this.element.style.pointerEvents = 'auto';\n\n let autoPan = options.autoPan;\n if (autoPan && 'object' !== typeof autoPan) {\n autoPan = {\n animation: options.autoPanAnimation,\n margin: options.autoPanMargin,\n };\n }\n /**\n * @protected\n * @type {PanIntoViewOptions|false}\n */\n this.autoPan = /** @type {PanIntoViewOptions} */ (autoPan) || false;\n\n /**\n * @protected\n * @type {{transform_: string,\n * visible: boolean}}\n */\n this.rendered = {\n transform_: '',\n visible: true,\n };\n\n /**\n * @protected\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.mapPostrenderListenerKey = null;\n\n this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n this.addChangeListener(Property.MAP, this.handleMapChanged);\n this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n\n if (options.element !== undefined) {\n this.setElement(options.element);\n }\n\n this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n this.setPositioning(options.positioning || 'top-left');\n\n if (options.position !== undefined) {\n this.setPosition(options.position);\n }\n }\n\n /**\n * Get the DOM element of this overlay.\n * @return {HTMLElement|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\n getElement() {\n return /** @type {HTMLElement|undefined} */ (this.get(Property.ELEMENT));\n }\n\n /**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id;\n }\n\n /**\n * Get the map associated with this overlay.\n * @return {import(\"./PluggableMap.js\").default|null} The map that the\n * overlay is part of.\n * @observable\n * @api\n */\n getMap() {\n return /** @type {import(\"./PluggableMap.js\").default|null} */ (\n this.get(Property.MAP) || null\n );\n }\n\n /**\n * Get the offset of this overlay.\n * @return {Array} The offset.\n * @observable\n * @api\n */\n getOffset() {\n return /** @type {Array} */ (this.get(Property.OFFSET));\n }\n\n /**\n * Get the current position of this overlay.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n * anchored at.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the current positioning of this overlay.\n * @return {Positioning} How the overlay is positioned\n * relative to its point on the map.\n * @observable\n * @api\n */\n getPositioning() {\n return /** @type {Positioning} */ (this.get(Property.POSITIONING));\n }\n\n /**\n * @protected\n */\n handleElementChanged() {\n removeChildren(this.element);\n const element = this.getElement();\n if (element) {\n this.element.appendChild(element);\n }\n }\n\n /**\n * @protected\n */\n handleMapChanged() {\n if (this.mapPostrenderListenerKey) {\n removeNode(this.element);\n unlistenByKey(this.mapPostrenderListenerKey);\n this.mapPostrenderListenerKey = null;\n }\n const map = this.getMap();\n if (map) {\n this.mapPostrenderListenerKey = listen(\n map,\n MapEventType.POSTRENDER,\n this.render,\n this\n );\n this.updatePixelPosition();\n const container = this.stopEvent\n ? map.getOverlayContainerStopEvent()\n : map.getOverlayContainer();\n if (this.insertFirst) {\n container.insertBefore(this.element, container.childNodes[0] || null);\n } else {\n container.appendChild(this.element);\n }\n this.performAutoPan();\n }\n }\n\n /**\n * @protected\n */\n render() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handleOffsetChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handlePositionChanged() {\n this.updatePixelPosition();\n this.performAutoPan();\n }\n\n /**\n * @protected\n */\n handlePositioningChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * Set the DOM element to be associated with this overlay.\n * @param {HTMLElement|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\n setElement(element) {\n this.set(Property.ELEMENT, element);\n }\n\n /**\n * Set the map to be associated with this overlay.\n * @param {import(\"./PluggableMap.js\").default|null} map The map that the\n * overlay is part of. Pass `null` to just remove the overlay from the current map.\n * @observable\n * @api\n */\n setMap(map) {\n this.set(Property.MAP, map);\n }\n\n /**\n * Set the offset for this overlay.\n * @param {Array} offset Offset.\n * @observable\n * @api\n */\n setOffset(offset) {\n this.set(Property.OFFSET, offset);\n }\n\n /**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n * is anchored at.\n * @observable\n * @api\n */\n setPosition(position) {\n this.set(Property.POSITION, position);\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary) using the configured autoPan parameters\n * @protected\n */\n performAutoPan() {\n if (this.autoPan) {\n this.panIntoView(this.autoPan);\n }\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @param {PanIntoViewOptions} [opt_panIntoViewOptions] Options for the pan action\n * @api\n */\n panIntoView(opt_panIntoViewOptions) {\n const map = this.getMap();\n\n if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n return;\n }\n\n const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n const element = this.getElement();\n const overlayRect = this.getRect(element, [\n outerWidth(element),\n outerHeight(element),\n ]);\n\n const panIntoViewOptions = opt_panIntoViewOptions || {};\n\n const myMargin =\n panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n if (!containsExtent(mapRect, overlayRect)) {\n // the overlay is not completely inside the viewport, so pan the map\n const offsetLeft = overlayRect[0] - mapRect[0];\n const offsetRight = mapRect[2] - overlayRect[2];\n const offsetTop = overlayRect[1] - mapRect[1];\n const offsetBottom = mapRect[3] - overlayRect[3];\n\n const delta = [0, 0];\n if (offsetLeft < 0) {\n // move map to the left\n delta[0] = offsetLeft - myMargin;\n } else if (offsetRight < 0) {\n // move map to the right\n delta[0] = Math.abs(offsetRight) + myMargin;\n }\n if (offsetTop < 0) {\n // move map up\n delta[1] = offsetTop - myMargin;\n } else if (offsetBottom < 0) {\n // move map down\n delta[1] = Math.abs(offsetBottom) + myMargin;\n }\n\n if (delta[0] !== 0 || delta[1] !== 0) {\n const center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n map.getView().getCenterInternal()\n );\n const centerPx = map.getPixelFromCoordinateInternal(center);\n if (!centerPx) {\n return;\n }\n const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n\n const panOptions = panIntoViewOptions.animation || {};\n map.getView().animateInternal({\n center: map.getCoordinateFromPixelInternal(newCenterPx),\n duration: panOptions.duration,\n easing: panOptions.easing,\n });\n }\n }\n }\n\n /**\n * Get the extent of an element relative to the document\n * @param {HTMLElement} element The element.\n * @param {import(\"./size.js\").Size} size The size of the element.\n * @return {import(\"./extent.js\").Extent} The extent.\n * @protected\n */\n getRect(element, size) {\n const box = element.getBoundingClientRect();\n const offsetX = box.left + window.pageXOffset;\n const offsetY = box.top + window.pageYOffset;\n return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n }\n\n /**\n * Set the positioning for this overlay.\n * @param {Positioning} positioning how the overlay is\n * positioned relative to its point on the map.\n * @observable\n * @api\n */\n setPositioning(positioning) {\n this.set(Property.POSITIONING, positioning);\n }\n\n /**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\n setVisible(visible) {\n if (this.rendered.visible !== visible) {\n this.element.style.display = visible ? '' : 'none';\n this.rendered.visible = visible;\n }\n }\n\n /**\n * Update pixel position.\n * @protected\n */\n updatePixelPosition() {\n const map = this.getMap();\n const position = this.getPosition();\n if (!map || !map.isRendered() || !position) {\n this.setVisible(false);\n return;\n }\n\n const pixel = map.getPixelFromCoordinate(position);\n const mapSize = map.getSize();\n this.updateRenderedPosition(pixel, mapSize);\n }\n\n /**\n * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n * @protected\n */\n updateRenderedPosition(pixel, mapSize) {\n const style = this.element.style;\n const offset = this.getOffset();\n\n const positioning = this.getPositioning();\n\n this.setVisible(true);\n\n const x = Math.round(pixel[0] + offset[0]) + 'px';\n const y = Math.round(pixel[1] + offset[1]) + 'px';\n let posX = '0%';\n let posY = '0%';\n if (\n positioning == 'bottom-right' ||\n positioning == 'center-right' ||\n positioning == 'top-right'\n ) {\n posX = '-100%';\n } else if (\n positioning == 'bottom-center' ||\n positioning == 'center-center' ||\n positioning == 'top-center'\n ) {\n posX = '-50%';\n }\n if (\n positioning == 'bottom-left' ||\n positioning == 'bottom-center' ||\n positioning == 'bottom-right'\n ) {\n posY = '-100%';\n } else if (\n positioning == 'center-left' ||\n positioning == 'center-center' ||\n positioning == 'center-right'\n ) {\n posY = '-50%';\n }\n const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n if (this.rendered.transform_ != transform) {\n this.rendered.transform_ = transform;\n style.transform = transform;\n // @ts-ignore IE9\n style.msTransform = transform;\n }\n }\n\n /**\n * returns the options this Overlay has been created with\n * @return {Options} overlay options\n */\n getOptions() {\n return this.options;\n }\n}\n\nexport default Overlay;\n","/**\n * @module ol/string\n */\n\n/**\n * @param {number} number Number to be formatted\n * @param {number} width The desired width\n * @param {number} [opt_precision] Precision of the output string (i.e. number of decimal places)\n * @return {string} Formatted string\n */\nexport function padNumber(number, width, opt_precision) {\n const numberString =\n opt_precision !== undefined ? number.toFixed(opt_precision) : '' + number;\n let decimal = numberString.indexOf('.');\n decimal = decimal === -1 ? numberString.length : decimal;\n return decimal > width\n ? numberString\n : new Array(1 + width - decimal).join('0') + numberString;\n}\n\n/**\n * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js\n * @param {string|number} v1 First version\n * @param {string|number} v2 Second version\n * @return {number} Value\n */\nexport function compareVersions(v1, v2) {\n const s1 = ('' + v1).split('.');\n const s2 = ('' + v2).split('.');\n\n for (let i = 0; i < Math.max(s1.length, s2.length); i++) {\n const n1 = parseInt(s1[i] || '0', 10);\n const n2 = parseInt(s2[i] || '0', 10);\n\n if (n1 > n2) {\n return 1;\n }\n if (n2 > n1) {\n return -1;\n }\n }\n\n return 0;\n}\n","/**\n * @module ol/control/OverviewMap\n */\nimport CompositeMapRenderer from '../renderer/Composite.js';\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport MapEventType from '../MapEventType.js';\nimport MapProperty from '../MapProperty.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport Overlay from '../Overlay.js';\nimport PluggableMap from '../PluggableMap.js';\nimport View from '../View.js';\nimport ViewProperty from '../ViewProperty.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {\n containsExtent,\n equals as equalsExtent,\n getBottomRight,\n getTopLeft,\n scaleFromCenter,\n} from '../extent.js';\nimport {listen, listenOnce} from '../events.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\nimport {replaceNode} from '../dom.js';\n\n/**\n * Maximum width and/or height extent ratio that determines when the overview\n * map should be zoomed out.\n * @type {number}\n */\nconst MAX_RATIO = 0.75;\n\n/**\n * Minimum width and/or height extent ratio that determines when the overview\n * map should be zoomed in.\n * @type {number}\n */\nconst MIN_RATIO = 0.1;\n\nclass ControlledMap extends PluggableMap {\n createRenderer() {\n return new CompositeMapRenderer(this);\n }\n}\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-overviewmap'] CSS class name.\n * @property {boolean} [collapsed=true] Whether the control should start collapsed or not (expanded).\n * @property {string|HTMLElement} [collapseLabel='‹'] Text label to use for the\n * expanded overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {boolean} [collapsible=true] Whether the control can be collapsed or not.\n * @property {string|HTMLElement} [label='›'] Text label to use for the collapsed\n * overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {Array|import(\"../Collection.js\").default} [layers]\n * Layers for the overview map.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {boolean} [rotateWithView=false] Whether the control view should rotate with the main map view.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {string} [tipLabel='Overview map'] Text label to use for the button tip.\n * @property {View} [view] Custom view for the overview map (should use same projection as main map). If not provided,\n * a default view with the same projection as the main map will be used.\n */\n\n/**\n * Create a new control with a map acting as an overview map for another\n * defined map.\n *\n * @api\n */\nclass OverviewMap extends Control {\n /**\n * @param {Options} [opt_options] OverviewMap options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n */\n this.boundHandleRotationChanged_ = this.handleRotationChanged_.bind(this);\n\n /**\n * @type {boolean}\n * @private\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ =\n options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent|undefined}\n */\n this.viewExtent_ = undefined;\n\n const className =\n options.className !== undefined ? options.className : 'ol-overviewmap';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Overview map';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u2039';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : '\\u203A';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(activeLabel);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.ovmapDiv_ = document.createElement('div');\n this.ovmapDiv_.className = 'ol-overviewmap-map';\n\n /**\n * Explicitly given view to be used instead of a view derived from the main map.\n * @type {View}\n * @private\n */\n this.view_ = options.view;\n\n /**\n * @type {ControlledMap}\n * @private\n */\n this.ovmap_ = new ControlledMap({\n view: options.view,\n });\n const ovmap = this.ovmap_;\n\n if (options.layers) {\n options.layers.forEach(function (layer) {\n ovmap.addLayer(layer);\n });\n }\n\n const box = document.createElement('div');\n box.className = 'ol-overviewmap-box';\n box.style.boxSizing = 'border-box';\n\n /**\n * @type {import(\"../Overlay.js\").default}\n * @private\n */\n this.boxOverlay_ = new Overlay({\n position: [0, 0],\n positioning: 'center-center',\n element: box,\n });\n this.ovmap_.addOverlay(this.boxOverlay_);\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.ovmapDiv_);\n element.appendChild(button);\n\n /* Interactive map */\n\n const scope = this;\n\n const overlay = this.boxOverlay_;\n const overlayBox = this.boxOverlay_.getElement();\n\n /* Functions definition */\n\n const computeDesiredMousePosition = function (mousePosition) {\n return {\n clientX: mousePosition.clientX,\n clientY: mousePosition.clientY,\n };\n };\n\n const move = function (event) {\n const position = /** @type {?} */ (computeDesiredMousePosition(event));\n const coordinates = ovmap.getEventCoordinateInternal(\n /** @type {MouseEvent} */ (position)\n );\n\n overlay.setPosition(coordinates);\n };\n\n const endMoving = function (event) {\n const coordinates = ovmap.getEventCoordinateInternal(event);\n\n scope.getMap().getView().setCenterInternal(coordinates);\n\n window.removeEventListener('mousemove', move);\n window.removeEventListener('mouseup', endMoving);\n };\n\n /* Binding */\n\n overlayBox.addEventListener('mousedown', function () {\n window.addEventListener('mousemove', move);\n window.addEventListener('mouseup', endMoving);\n });\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n const oldMap = this.getMap();\n if (map === oldMap) {\n return;\n }\n if (oldMap) {\n const oldView = oldMap.getView();\n if (oldView) {\n this.unbindView_(oldView);\n }\n this.ovmap_.setTarget(null);\n }\n super.setMap(map);\n\n if (map) {\n this.ovmap_.setTarget(this.ovmapDiv_);\n this.listenerKeys.push(\n listen(\n map,\n ObjectEventType.PROPERTYCHANGE,\n this.handleMapPropertyChange_,\n this\n )\n );\n\n const view = map.getView();\n if (view) {\n this.bindView_(view);\n if (view.isDef()) {\n this.ovmap_.updateSize();\n this.resetExtent_();\n }\n }\n\n if (!this.ovmap_.isRendered()) {\n this.updateBoxAfterOvmapIsRendered_();\n }\n }\n }\n\n /**\n * Handle map property changes. This only deals with changes to the map's view.\n * @param {import(\"../Object.js\").ObjectEvent} event The propertychange event.\n * @private\n */\n handleMapPropertyChange_(event) {\n if (event.key === MapProperty.VIEW) {\n const oldView = /** @type {import(\"../View.js\").default} */ (\n event.oldValue\n );\n if (oldView) {\n this.unbindView_(oldView);\n }\n const newView = this.getMap().getView();\n this.bindView_(newView);\n } else if (\n !this.ovmap_.isRendered() &&\n (event.key === MapProperty.TARGET || event.key === MapProperty.SIZE)\n ) {\n this.ovmap_.updateSize();\n }\n }\n\n /**\n * Register listeners for view property changes.\n * @param {import(\"../View.js\").default} view The view.\n * @private\n */\n bindView_(view) {\n if (!this.view_) {\n // Unless an explicit view definition was given, derive default from whatever main map uses.\n const newView = new View({\n projection: view.getProjection(),\n });\n this.ovmap_.setView(newView);\n }\n\n view.addChangeListener(\n ViewProperty.ROTATION,\n this.boundHandleRotationChanged_\n );\n // Sync once with the new view\n this.handleRotationChanged_();\n }\n\n /**\n * Unregister listeners for view property changes.\n * @param {import(\"../View.js\").default} view The view.\n * @private\n */\n unbindView_(view) {\n view.removeChangeListener(\n ViewProperty.ROTATION,\n this.boundHandleRotationChanged_\n );\n }\n\n /**\n * Handle rotation changes to the main map.\n * @private\n */\n handleRotationChanged_() {\n if (this.rotateWithView_) {\n this.ovmap_.getView().setRotation(this.getMap().getView().getRotation());\n }\n }\n\n /**\n * Reset the overview map extent if the box size (width or\n * height) is less than the size of the overview map size times minRatio\n * or is greater than the size of the overview size times maxRatio.\n *\n * If the map extent was not reset, the box size can fits in the defined\n * ratio sizes. This method then checks if is contained inside the overview\n * map current extent. If not, recenter the overview map to the current\n * main map center location.\n * @private\n */\n validateExtent_() {\n const map = this.getMap();\n const ovmap = this.ovmap_;\n\n if (!map.isRendered() || !ovmap.isRendered()) {\n return;\n }\n\n const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n const view = map.getView();\n const extent = view.calculateExtentInternal(mapSize);\n\n if (this.viewExtent_ && equalsExtent(extent, this.viewExtent_)) {\n // repeats of the same extent may indicate constraint conflicts leading to an endless cycle\n return;\n }\n this.viewExtent_ = extent;\n\n const ovmapSize = /** @type {import(\"../size.js\").Size} */ (\n ovmap.getSize()\n );\n\n const ovview = ovmap.getView();\n const ovextent = ovview.calculateExtentInternal(ovmapSize);\n\n const topLeftPixel = ovmap.getPixelFromCoordinateInternal(\n getTopLeft(extent)\n );\n const bottomRightPixel = ovmap.getPixelFromCoordinateInternal(\n getBottomRight(extent)\n );\n\n const boxWidth = Math.abs(topLeftPixel[0] - bottomRightPixel[0]);\n const boxHeight = Math.abs(topLeftPixel[1] - bottomRightPixel[1]);\n\n const ovmapWidth = ovmapSize[0];\n const ovmapHeight = ovmapSize[1];\n\n if (\n boxWidth < ovmapWidth * MIN_RATIO ||\n boxHeight < ovmapHeight * MIN_RATIO ||\n boxWidth > ovmapWidth * MAX_RATIO ||\n boxHeight > ovmapHeight * MAX_RATIO\n ) {\n this.resetExtent_();\n } else if (!containsExtent(ovextent, extent)) {\n this.recenter_();\n }\n }\n\n /**\n * Reset the overview map extent to half calculated min and max ratio times\n * the extent of the main map.\n * @private\n */\n resetExtent_() {\n if (MAX_RATIO === 0 || MIN_RATIO === 0) {\n return;\n }\n\n const map = this.getMap();\n const ovmap = this.ovmap_;\n\n const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n const view = map.getView();\n const extent = view.calculateExtentInternal(mapSize);\n\n const ovview = ovmap.getView();\n\n // get how many times the current map overview could hold different\n // box sizes using the min and max ratio, pick the step in the middle used\n // to calculate the extent from the main map to set it to the overview map,\n const steps = Math.log(MAX_RATIO / MIN_RATIO) / Math.LN2;\n const ratio = 1 / (Math.pow(2, steps / 2) * MIN_RATIO);\n scaleFromCenter(extent, ratio);\n ovview.fitInternal(polygonFromExtent(extent));\n }\n\n /**\n * Set the center of the overview map to the map center without changing its\n * resolution.\n * @private\n */\n recenter_() {\n const map = this.getMap();\n const ovmap = this.ovmap_;\n\n const view = map.getView();\n\n const ovview = ovmap.getView();\n\n ovview.setCenterInternal(view.getCenterInternal());\n }\n\n /**\n * Update the box using the main map extent\n * @private\n */\n updateBox_() {\n const map = this.getMap();\n const ovmap = this.ovmap_;\n\n if (!map.isRendered() || !ovmap.isRendered()) {\n return;\n }\n\n const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n const view = map.getView();\n\n const ovview = ovmap.getView();\n\n const rotation = this.rotateWithView_ ? 0 : -view.getRotation();\n\n const overlay = this.boxOverlay_;\n const box = this.boxOverlay_.getElement();\n const center = view.getCenterInternal();\n const resolution = view.getResolution();\n const ovresolution = ovview.getResolution();\n const width = (mapSize[0] * resolution) / ovresolution;\n const height = (mapSize[1] * resolution) / ovresolution;\n\n // set position using center coordinates\n overlay.setPosition(center);\n\n // set box size calculated from map extent size and overview map resolution\n if (box) {\n box.style.width = width + 'px';\n box.style.height = height + 'px';\n const transform = 'rotate(' + rotation + 'rad)';\n box.style.transform = transform;\n }\n }\n\n /**\n * @private\n */\n updateBoxAfterOvmapIsRendered_() {\n if (this.ovmapPostrenderKey_) {\n return;\n }\n this.ovmapPostrenderKey_ = listenOnce(\n this.ovmap_,\n MapEventType.POSTRENDER,\n function (event) {\n delete this.ovmapPostrenderKey_;\n this.updateBox_();\n },\n this\n );\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n\n // manage overview map if it had not been rendered before and control\n // is expanded\n const ovmap = this.ovmap_;\n if (!this.collapsed_) {\n if (ovmap.isRendered()) {\n this.viewExtent_ = undefined;\n ovmap.render();\n return;\n }\n ovmap.updateSize();\n this.resetExtent_();\n this.updateBoxAfterOvmapIsRendered_();\n }\n }\n\n /**\n * Return `true` if the overview map is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the overview map should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (!collapsible && this.collapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the overview map according to the passed parameter. Will\n * not do anything if the overview map isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Determine if the overview map is collapsed.\n * @return {boolean} The overview map is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Return `true` if the overview map view can rotate, `false` otherwise.\n * @return {boolean} True if the control view can rotate.\n * @api\n */\n getRotateWithView() {\n return this.rotateWithView_;\n }\n\n /**\n * Set whether the overview map view should rotate with the main map view.\n * @param {boolean} rotateWithView True if the control view should rotate.\n * @api\n */\n setRotateWithView(rotateWithView) {\n if (this.rotateWithView_ === rotateWithView) {\n return;\n }\n this.rotateWithView_ = rotateWithView;\n if (this.getMap().getView().getRotation() !== 0) {\n if (this.rotateWithView_) {\n this.handleRotationChanged_();\n } else {\n this.ovmap_.getView().setRotation(0);\n }\n this.viewExtent_ = undefined;\n this.validateExtent_();\n this.updateBox_();\n }\n }\n\n /**\n * Return the overview map.\n * @return {import(\"../PluggableMap.js\").default} Overview map.\n * @api\n */\n getOverviewMap() {\n return this.ovmap_;\n }\n\n /**\n * Update the overview map element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.validateExtent_();\n this.updateBox_();\n }\n}\n\nexport default OverviewMap;\n","/**\n * @module ol/control/ScaleLine\n */\nimport Control from './Control.js';\nimport ProjUnits from '../proj/Units.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {METERS_PER_UNIT, getPointResolution} from '../proj.js';\nimport {assert} from '../asserts.js';\n\n/**\n * @type {string}\n */\nconst UNITS_PROP = 'units';\n\n/**\n * Units for the scale line. Supported values are `'degrees'`, `'imperial'`,\n * `'nautical'`, `'metric'`, `'us'`.\n * @enum {string}\n */\nexport const Units = {\n DEGREES: 'degrees',\n IMPERIAL: 'imperial',\n NAUTICAL: 'nautical',\n METRIC: 'metric',\n US: 'us',\n};\n\n/**\n * @const\n * @type {Array}\n */\nconst LEADING_DIGITS = [1, 2, 5];\n\n/**\n * @const\n * @type {number}\n */\nconst DEFAULT_DPI = 25.4 / 0.28;\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} ScaleLineOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-scale-line'] CSS Class name.\n * @property {number} [minWidth=64] Minimum width in pixels at the OGC default dpi. The width will be\n * adjusted to match the dpi used.\n * @property {number} [maxWidth] Maximum width in pixels at the OGC default dpi. The width will be\n * adjusted to match the dpi used.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {import(\"./ScaleLine.js\").Units|string} [units='metric'] Units.\n * @property {boolean} [bar=false] Render scalebars instead of a line.\n * @property {number} [steps=4] Number of steps the scalebar should use. Use even numbers\n * for best results. Only applies when `bar` is `true`.\n * @property {boolean} [text=false] Render the text scale above of the scalebar. Only applies\n * when `bar` is `true`.\n * @property {number|undefined} [dpi=undefined] dpi of output device such as printer. Only applies\n * when `bar` is `true`. If undefined the OGC default screen pixel size of 0.28mm will be assumed.\n */\n\n/**\n * @classdesc\n * A control displaying rough y-axis distances, calculated for the center of the\n * viewport. For conformal projections (e.g. EPSG:3857, the default view\n * projection in OpenLayers), the scale is valid for all directions.\n * No scale line will be shown when the y-axis distance of a pixel at the\n * viewport center cannot be calculated in the view projection.\n * By default the scale line will show in the bottom left portion of the map,\n * but this can be changed by using the css selector `.ol-scale-line`.\n * When specifying `bar` as `true`, a scalebar will be rendered instead\n * of a scaleline.\n *\n * @api\n */\nclass ScaleLine extends Control {\n /**\n * @param {Options} [opt_options] Scale line options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const className =\n options.className !== undefined\n ? options.className\n : options.bar\n ? 'ol-scale-bar'\n : 'ol-scale-line';\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /***\n * @type {ScaleLineOnSignature}\n */\n this.on;\n\n /***\n * @type {ScaleLineOnSignature}\n */\n this.once;\n\n /***\n * @type {ScaleLineOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.innerElement_ = document.createElement('div');\n this.innerElement_.className = className + '-inner';\n\n this.element.className = className + ' ' + CLASS_UNSELECTABLE;\n this.element.appendChild(this.innerElement_);\n\n /**\n * @private\n * @type {?import(\"../View.js\").State}\n */\n this.viewState_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.maxWidth_ = options.maxWidth;\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = false;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.renderedWidth_ = undefined;\n\n /**\n * @private\n * @type {string}\n */\n this.renderedHTML_ = '';\n\n this.addChangeListener(UNITS_PROP, this.handleUnitsChanged_);\n\n this.setUnits(options.units || Units.METRIC);\n\n /**\n * @private\n * @type {boolean}\n */\n this.scaleBar_ = options.bar || false;\n\n /**\n * @private\n * @type {number}\n */\n this.scaleBarSteps_ = options.steps || 4;\n\n /**\n * @private\n * @type {boolean}\n */\n this.scaleBarText_ = options.text || false;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.dpi_ = options.dpi || undefined;\n }\n\n /**\n * Return the units to use in the scale line.\n * @return {import(\"./ScaleLine.js\").Units} The units\n * to use in the scale line.\n * @observable\n * @api\n */\n getUnits() {\n return this.get(UNITS_PROP);\n }\n\n /**\n * @private\n */\n handleUnitsChanged_() {\n this.updateElement_();\n }\n\n /**\n * Set the units to use in the scale line.\n * @param {import(\"./ScaleLine.js\").Units} units The units to use in the scale line.\n * @observable\n * @api\n */\n setUnits(units) {\n this.set(UNITS_PROP, units);\n }\n\n /**\n * Specify the dpi of output device such as printer.\n * @param {number|undefined} dpi The dpi of output device.\n * @api\n */\n setDpi(dpi) {\n this.dpi_ = dpi;\n }\n\n /**\n * @private\n */\n updateElement_() {\n const viewState = this.viewState_;\n\n if (!viewState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const center = viewState.center;\n const projection = viewState.projection;\n const units = this.getUnits();\n const pointResolutionUnits =\n units == Units.DEGREES ? ProjUnits.DEGREES : ProjUnits.METERS;\n let pointResolution = getPointResolution(\n projection,\n viewState.resolution,\n center,\n pointResolutionUnits\n );\n\n const minWidth =\n (this.minWidth_ * (this.dpi_ || DEFAULT_DPI)) / DEFAULT_DPI;\n\n const maxWidth =\n this.maxWidth_ !== undefined\n ? (this.maxWidth_ * (this.dpi_ || DEFAULT_DPI)) / DEFAULT_DPI\n : undefined;\n\n let nominalCount = minWidth * pointResolution;\n let suffix = '';\n if (units == Units.DEGREES) {\n const metersPerDegree = METERS_PER_UNIT[ProjUnits.DEGREES];\n nominalCount *= metersPerDegree;\n if (nominalCount < metersPerDegree / 60) {\n suffix = '\\u2033'; // seconds\n pointResolution *= 3600;\n } else if (nominalCount < metersPerDegree) {\n suffix = '\\u2032'; // minutes\n pointResolution *= 60;\n } else {\n suffix = '\\u00b0'; // degrees\n }\n } else if (units == Units.IMPERIAL) {\n if (nominalCount < 0.9144) {\n suffix = 'in';\n pointResolution /= 0.0254;\n } else if (nominalCount < 1609.344) {\n suffix = 'ft';\n pointResolution /= 0.3048;\n } else {\n suffix = 'mi';\n pointResolution /= 1609.344;\n }\n } else if (units == Units.NAUTICAL) {\n pointResolution /= 1852;\n suffix = 'NM';\n } else if (units == Units.METRIC) {\n if (nominalCount < 0.001) {\n suffix = 'μm';\n pointResolution *= 1000000;\n } else if (nominalCount < 1) {\n suffix = 'mm';\n pointResolution *= 1000;\n } else if (nominalCount < 1000) {\n suffix = 'm';\n } else {\n suffix = 'km';\n pointResolution /= 1000;\n }\n } else if (units == Units.US) {\n if (nominalCount < 0.9144) {\n suffix = 'in';\n pointResolution *= 39.37;\n } else if (nominalCount < 1609.344) {\n suffix = 'ft';\n pointResolution /= 0.30480061;\n } else {\n suffix = 'mi';\n pointResolution /= 1609.3472;\n }\n } else {\n assert(false, 33); // Invalid units\n }\n\n let i = 3 * Math.floor(Math.log(minWidth * pointResolution) / Math.log(10));\n let count, width, decimalCount;\n let previousCount, previousWidth, previousDecimalCount;\n while (true) {\n decimalCount = Math.floor(i / 3);\n const decimal = Math.pow(10, decimalCount);\n count = LEADING_DIGITS[((i % 3) + 3) % 3] * decimal;\n width = Math.round(count / pointResolution);\n if (isNaN(width)) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n return;\n }\n if (maxWidth !== undefined && width >= maxWidth) {\n count = previousCount;\n width = previousWidth;\n decimalCount = previousDecimalCount;\n break;\n } else if (width >= minWidth) {\n break;\n }\n previousCount = count;\n previousWidth = width;\n previousDecimalCount = decimalCount;\n ++i;\n }\n let html;\n if (this.scaleBar_) {\n html = this.createScaleBar(width, count, suffix);\n } else {\n html = count.toFixed(decimalCount < 0 ? -decimalCount : 0) + ' ' + suffix;\n }\n\n if (this.renderedHTML_ != html) {\n this.innerElement_.innerHTML = html;\n this.renderedHTML_ = html;\n }\n\n if (this.renderedWidth_ != width) {\n this.innerElement_.style.width = width + 'px';\n this.renderedWidth_ = width;\n }\n\n if (!this.renderedVisible_) {\n this.element.style.display = '';\n this.renderedVisible_ = true;\n }\n }\n\n /**\n * @private\n * @param {number} width The current width of the scalebar.\n * @param {number} scale The current scale.\n * @param {string} suffix The suffix to append to the scale text.\n * @return {string} The stringified HTML of the scalebar.\n */\n createScaleBar(width, scale, suffix) {\n const mapScale =\n '1 : ' + Math.round(this.getScaleForResolution()).toLocaleString();\n const scaleSteps = [];\n const stepWidth = width / this.scaleBarSteps_;\n let backgroundColor = 'ol-scale-singlebar-odd';\n for (let i = 0; i < this.scaleBarSteps_; i++) {\n if (i === 0) {\n // create the first marker at position 0\n scaleSteps.push(this.createMarker('absolute', i));\n }\n scaleSteps.push(\n '
    ' +\n '
    ' +\n '
    ' +\n this.createMarker('relative', i) +\n /*render text every second step, except when only 2 steps */\n (i % 2 === 0 || this.scaleBarSteps_ === 2\n ? this.createStepText(i, width, false, scale, suffix)\n : '') +\n '
    '\n );\n if (i === this.scaleBarSteps_ - 1) {\n {\n /*render text at the end */\n }\n scaleSteps.push(this.createStepText(i + 1, width, true, scale, suffix));\n }\n // switch style of steps\n backgroundColor =\n backgroundColor === 'ol-scale-singlebar-odd'\n ? 'ol-scale-singlebar-even'\n : 'ol-scale-singlebar-odd';\n }\n\n let scaleBarText;\n if (this.scaleBarText_) {\n scaleBarText =\n '
    ' +\n mapScale +\n '
    ';\n } else {\n scaleBarText = '';\n }\n const container =\n '
    ' +\n scaleBarText +\n scaleSteps.join('') +\n '
    ';\n return container;\n }\n\n /**\n * Creates a marker at given position\n * @param {string} position The position, absolute or relative\n * @param {number} i The iterator\n * @return {string} The stringified div containing the marker\n */\n createMarker(position, i) {\n const top = position === 'absolute' ? 3 : -10;\n return (\n '
    '\n );\n }\n\n /**\n * Creates the label for a marker marker at given position\n * @param {number} i The iterator\n * @param {number} width The width the scalebar will currently use\n * @param {boolean} isLast Flag indicating if we add the last step text\n * @param {number} scale The current scale for the whole scalebar\n * @param {string} suffix The suffix for the scale\n * @return {string} The stringified div containing the step text\n */\n createStepText(i, width, isLast, scale, suffix) {\n const length =\n i === 0 ? 0 : Math.round((scale / this.scaleBarSteps_) * i * 100) / 100;\n const lengthString = length + (i === 0 ? '' : ' ' + suffix);\n const margin = i === 0 ? -3 : (width / this.scaleBarSteps_) * -1;\n const minWidth = i === 0 ? 0 : (width / this.scaleBarSteps_) * 2;\n return (\n '
    ' +\n lengthString +\n '
    '\n );\n }\n\n /**\n * Returns the appropriate scale for the given resolution and units.\n * @return {number} The appropriate scale.\n */\n getScaleForResolution() {\n const resolution = getPointResolution(\n this.viewState_.projection,\n this.viewState_.resolution,\n this.viewState_.center,\n ProjUnits.METERS\n );\n const dpi = this.dpi_ || DEFAULT_DPI;\n const inchesPerMeter = 1000 / 25.4;\n return parseFloat(resolution.toString()) * inchesPerMeter * dpi;\n }\n\n /**\n * Update the scale line element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n this.viewState_ = null;\n } else {\n this.viewState_ = frameState.viewState;\n }\n this.updateElement_();\n }\n}\n\nexport default ScaleLine;\n","/**\n * @module ol/control/ZoomToExtent\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-zoom-extent'] Class name.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {string|HTMLElement} [label='E'] Text label to use for the button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Fit to extent'] Text label to use for the button tip.\n * @property {import(\"../extent.js\").Extent} [extent] The extent to zoom to. If undefined the validity\n * extent of the view projection is used.\n */\n\n/**\n * @classdesc\n * A button control which, when pressed, changes the map view to a specific\n * extent. To style this control use the css selector `.ol-zoom-extent`.\n *\n * @api\n */\nclass ZoomToExtent extends Control {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n /**\n * @type {?import(\"../extent.js\").Extent|null}\n * @protected\n */\n this.extent = options.extent ? options.extent : null;\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom-extent';\n\n const label = options.label !== undefined ? options.label : 'E';\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Fit to extent';\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(\n typeof label === 'string' ? document.createTextNode(label) : label\n );\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleZoomToExtent();\n }\n\n /**\n * @protected\n */\n handleZoomToExtent() {\n const map = this.getMap();\n const view = map.getView();\n const extent = !this.extent\n ? view.getProjection().getExtent()\n : this.extent;\n view.fitInternal(polygonFromExtent(extent));\n }\n}\n\nexport default ZoomToExtent;\n","/**\n * @module ol/control/ZoomSlider\n */\n\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport PointerEventType from '../pointer/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {clamp} from '../math.js';\nimport {easeOut} from '../easing.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {stopPropagation} from '../events/Event.js';\n\n/**\n * The enum for available directions.\n *\n * @enum {number}\n */\nconst Direction = {\n VERTICAL: 0,\n HORIZONTAL: 1,\n};\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-zoomslider'] CSS class name.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n */\n\n/**\n * @classdesc\n * A slider type of control for zooming.\n *\n * Example:\n *\n * map.addControl(new ZoomSlider());\n *\n * @api\n */\nclass ZoomSlider extends Control {\n /**\n * @param {Options} [opt_options] Zoom slider options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n });\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * Will hold the current resolution of the view.\n *\n * @type {number|undefined}\n * @private\n */\n this.currentResolution_ = undefined;\n\n /**\n * The direction of the slider. Will be determined from actual display of the\n * container and defaults to Direction.VERTICAL.\n *\n * @type {Direction}\n * @private\n */\n this.direction_ = Direction.VERTICAL;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_;\n\n /**\n * @type {number}\n * @private\n */\n this.heightLimit_ = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.widthLimit_ = 0;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.startX_;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.startY_;\n\n /**\n * The calculated thumb size (border box plus margins). Set when initSlider_\n * is called.\n * @type {import(\"../size.js\").Size}\n * @private\n */\n this.thumbSize_ = null;\n\n /**\n * Whether the slider is initialized.\n * @type {boolean}\n * @private\n */\n this.sliderInitialized_ = false;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoomslider';\n const thumbElement = document.createElement('button');\n thumbElement.setAttribute('type', 'button');\n thumbElement.className = className + '-thumb ' + CLASS_UNSELECTABLE;\n const containerElement = this.element;\n containerElement.className =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n containerElement.appendChild(thumbElement);\n\n containerElement.addEventListener(\n PointerEventType.POINTERDOWN,\n this.handleDraggerStart_.bind(this),\n false\n );\n containerElement.addEventListener(\n PointerEventType.POINTERMOVE,\n this.handleDraggerDrag_.bind(this),\n false\n );\n containerElement.addEventListener(\n PointerEventType.POINTERUP,\n this.handleDraggerEnd_.bind(this),\n false\n );\n\n containerElement.addEventListener(\n EventType.CLICK,\n this.handleContainerClick_.bind(this),\n false\n );\n thumbElement.addEventListener(EventType.CLICK, stopPropagation, false);\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n super.setMap(map);\n if (map) {\n map.render();\n }\n }\n\n /**\n * Initializes the slider element. This will determine and set this controls\n * direction_ and also constrain the dragging of the thumb to always be within\n * the bounds of the container.\n *\n * @return {boolean} Initialization successful\n * @private\n */\n initSlider_() {\n const container = this.element;\n let containerWidth = container.offsetWidth;\n let containerHeight = container.offsetHeight;\n if (containerWidth === 0 && containerHeight === 0) {\n return (this.sliderInitialized_ = false);\n }\n\n const containerStyle = getComputedStyle(container);\n containerWidth -=\n parseFloat(containerStyle['paddingRight']) +\n parseFloat(containerStyle['paddingLeft']);\n containerHeight -=\n parseFloat(containerStyle['paddingTop']) +\n parseFloat(containerStyle['paddingBottom']);\n const thumb = /** @type {HTMLElement} */ (container.firstElementChild);\n const thumbStyle = getComputedStyle(thumb);\n const thumbWidth =\n thumb.offsetWidth +\n parseFloat(thumbStyle['marginRight']) +\n parseFloat(thumbStyle['marginLeft']);\n const thumbHeight =\n thumb.offsetHeight +\n parseFloat(thumbStyle['marginTop']) +\n parseFloat(thumbStyle['marginBottom']);\n this.thumbSize_ = [thumbWidth, thumbHeight];\n\n if (containerWidth > containerHeight) {\n this.direction_ = Direction.HORIZONTAL;\n this.widthLimit_ = containerWidth - thumbWidth;\n } else {\n this.direction_ = Direction.VERTICAL;\n this.heightLimit_ = containerHeight - thumbHeight;\n }\n return (this.sliderInitialized_ = true);\n }\n\n /**\n * @param {PointerEvent} event The browser event to handle.\n * @private\n */\n handleContainerClick_(event) {\n const view = this.getMap().getView();\n\n const relativePosition = this.getRelativePosition_(\n event.offsetX - this.thumbSize_[0] / 2,\n event.offsetY - this.thumbSize_[1] / 2\n );\n\n const resolution = this.getResolutionForPosition_(relativePosition);\n const zoom = view.getConstrainedZoom(view.getZoomForResolution(resolution));\n\n view.animateInternal({\n zoom: zoom,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n\n /**\n * Handle dragger start events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerStart_(event) {\n if (!this.dragging_ && event.target === this.element.firstElementChild) {\n const element = /** @type {HTMLElement} */ (\n this.element.firstElementChild\n );\n this.getMap().getView().beginInteraction();\n this.startX_ = event.clientX - parseFloat(element.style.left);\n this.startY_ = event.clientY - parseFloat(element.style.top);\n this.dragging_ = true;\n\n if (this.dragListenerKeys_.length === 0) {\n const drag = this.handleDraggerDrag_;\n const end = this.handleDraggerEnd_;\n const doc = this.getMap().getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(doc, PointerEventType.POINTERMOVE, drag, this),\n listen(doc, PointerEventType.POINTERUP, end, this)\n );\n }\n }\n }\n\n /**\n * Handle dragger drag events.\n *\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerDrag_(event) {\n if (this.dragging_) {\n const deltaX = event.clientX - this.startX_;\n const deltaY = event.clientY - this.startY_;\n const relativePosition = this.getRelativePosition_(deltaX, deltaY);\n this.currentResolution_ =\n this.getResolutionForPosition_(relativePosition);\n this.getMap().getView().setResolution(this.currentResolution_);\n }\n }\n\n /**\n * Handle dragger end events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n handleDraggerEnd_(event) {\n if (this.dragging_) {\n const view = this.getMap().getView();\n view.endInteraction();\n\n this.dragging_ = false;\n this.startX_ = undefined;\n this.startY_ = undefined;\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n }\n }\n\n /**\n * Positions the thumb inside its container according to the given resolution.\n *\n * @param {number} res The res.\n * @private\n */\n setThumbPosition_(res) {\n const position = this.getPositionForResolution_(res);\n const thumb = /** @type {HTMLElement} */ (this.element.firstElementChild);\n\n if (this.direction_ == Direction.HORIZONTAL) {\n thumb.style.left = this.widthLimit_ * position + 'px';\n } else {\n thumb.style.top = this.heightLimit_ * position + 'px';\n }\n }\n\n /**\n * Calculates the relative position of the thumb given x and y offsets. The\n * relative position scales from 0 to 1. The x and y offsets are assumed to be\n * in pixel units within the dragger limits.\n *\n * @param {number} x Pixel position relative to the left of the slider.\n * @param {number} y Pixel position relative to the top of the slider.\n * @return {number} The relative position of the thumb.\n * @private\n */\n getRelativePosition_(x, y) {\n let amount;\n if (this.direction_ === Direction.HORIZONTAL) {\n amount = x / this.widthLimit_;\n } else {\n amount = y / this.heightLimit_;\n }\n return clamp(amount, 0, 1);\n }\n\n /**\n * Calculates the corresponding resolution of the thumb given its relative\n * position (where 0 is the minimum and 1 is the maximum).\n *\n * @param {number} position The relative position of the thumb.\n * @return {number} The corresponding resolution.\n * @private\n */\n getResolutionForPosition_(position) {\n const fn = this.getMap().getView().getResolutionForValueFunction();\n return fn(1 - position);\n }\n\n /**\n * Determines the relative position of the slider for the given resolution. A\n * relative position of 0 corresponds to the minimum view resolution. A\n * relative position of 1 corresponds to the maximum view resolution.\n *\n * @param {number} res The resolution.\n * @return {number} The relative position value (between 0 and 1).\n * @private\n */\n getPositionForResolution_(res) {\n const fn = this.getMap().getView().getValueForResolutionFunction();\n return clamp(1 - fn(res), 0, 1);\n }\n\n /**\n * Update the zoomslider element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n if (!mapEvent.frameState) {\n return;\n }\n if (!this.sliderInitialized_ && !this.initSlider_()) {\n return;\n }\n const res = mapEvent.frameState.viewState.resolution;\n this.currentResolution_ = res;\n this.setThumbPosition_(res);\n }\n}\n\nexport default ZoomSlider;\n","/**\n * @module ol/Feature\n */\nimport BaseObject from './Object.js';\nimport EventType from './events/EventType.js';\nimport {assert} from './asserts.js';\nimport {listen, unlistenByKey} from './events.js';\n\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} FeatureOnSignature\n */\n\n/***\n * @template Geometry\n * @typedef {Object & { geometry?: Geometry }} ObjectWithGeometry\n */\n\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object~BaseObject} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature. For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature';\n * import Polygon from 'ol/geom/Polygon';\n * import Point from 'ol/geom/Point';\n *\n * var feature = new Feature({\n * geometry: new Polygon(polyCoords),\n * labelPoint: new Point(labelCoords),\n * name: 'My Polygon'\n * });\n *\n * // get the polygon geometry\n * var poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * var point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n */\nclass Feature extends BaseObject {\n /**\n * @param {Geometry|ObjectWithGeometry} [opt_geometryOrProperties]\n * You may pass a Geometry object directly, or an object literal containing\n * properties. If you pass an object literal, you may include a Geometry\n * associated with a `geometry` key.\n */\n constructor(opt_geometryOrProperties) {\n super();\n\n /***\n * @type {FeatureOnSignature}\n */\n this.on;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.once;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = undefined;\n\n /**\n * @type {string}\n * @private\n */\n this.geometryName_ = 'geometry';\n\n /**\n * User provided style.\n * @private\n * @type {import(\"./style/Style.js\").StyleLike}\n */\n this.style_ = null;\n\n /**\n * @private\n * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction_ = undefined;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.geometryChangeKey_ = null;\n\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n\n if (opt_geometryOrProperties) {\n if (\n typeof (\n /** @type {?} */ (opt_geometryOrProperties).getSimplifiedGeometry\n ) === 'function'\n ) {\n const geometry = /** @type {Geometry} */ (opt_geometryOrProperties);\n this.setGeometry(geometry);\n } else {\n /** @type {Object} */\n const properties = opt_geometryOrProperties;\n this.setProperties(properties);\n }\n }\n }\n\n /**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {Feature} The clone.\n * @api\n */\n clone() {\n const clone = /** @type {Feature} */ (\n new Feature(this.hasProperties() ? this.getProperties() : null)\n );\n clone.setGeometryName(this.getGeometryName());\n const geometry = this.getGeometry();\n if (geometry) {\n clone.setGeometry(/** @type {Geometry} */ (geometry.clone()));\n }\n const style = this.getStyle();\n if (style) {\n clone.setStyle(style);\n }\n return clone;\n }\n\n /**\n * Get the feature's default geometry. A feature may have any number of named\n * geometries. The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n * @return {Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\n getGeometry() {\n return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link module:ol/Feature~Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * Get the name of the feature's default geometry. By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n * for this feature.\n * @api\n */\n getGeometryName() {\n return this.geometryName_;\n }\n\n /**\n * Get the feature's style. Will return what was provided to the\n * {@link module:ol/Feature~Feature#setStyle} method.\n * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n * @api\n */\n getStyle() {\n return this.style_;\n }\n\n /**\n * Get the feature's style function.\n * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\n getStyleFunction() {\n return this.styleFunction_;\n }\n\n /**\n * @private\n */\n handleGeometryChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleGeometryChanged_() {\n if (this.geometryChangeKey_) {\n unlistenByKey(this.geometryChangeKey_);\n this.geometryChangeKey_ = null;\n }\n const geometry = this.getGeometry();\n if (geometry) {\n this.geometryChangeKey_ = listen(\n geometry,\n EventType.CHANGE,\n this.handleGeometryChange_,\n this\n );\n }\n this.changed();\n }\n\n /**\n * Set the default geometry for the feature. This will update the property\n * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n * @param {Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\n setGeometry(geometry) {\n this.set(this.geometryName_, geometry);\n }\n\n /**\n * Set the style for the feature to override the layer style. This can be a\n * single style object, an array of styles, or a function that takes a\n * resolution and returns an array of styles. To unset the feature style, call\n * `setStyle()` without arguments or a falsey value.\n * @param {import(\"./style/Style.js\").StyleLike} [opt_style] Style for this feature.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setStyle(opt_style) {\n this.style_ = opt_style;\n this.styleFunction_ = !opt_style\n ? undefined\n : createStyleFunction(opt_style);\n this.changed();\n }\n\n /**\n * Set the feature id. The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the\n * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setId(id) {\n this.id_ = id;\n this.changed();\n }\n\n /**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\n setGeometryName(name) {\n this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.geometryName_ = name;\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.handleGeometryChanged_();\n }\n}\n\n/**\n * Convert the provided object into a feature style function. Functions passed\n * through unchanged. Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array|!import(\"./style/Style.js\").default} obj\n * A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n if (typeof obj === 'function') {\n return obj;\n } else {\n /**\n * @type {Array}\n */\n let styles;\n if (Array.isArray(obj)) {\n styles = obj;\n } else {\n assert(typeof (/** @type {?} */ (obj).getZIndex) === 'function', 41); // Expected an `import(\"./style/Style.js\").Style` or an array of `import(\"./style/Style.js\").Style`\n const style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n styles = [style];\n }\n return function () {\n return styles;\n };\n }\n}\nexport default Feature;\n","/**\n * @module ol/geom/MultiPoint\n */\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {closestSquaredDistanceXY, containsXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Multi-point geometry.\n *\n * @api\n */\nclass MultiPoint extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n if (opt_layout && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Append the passed point to this multipoint.\n * @param {Point} point Point.\n * @api\n */\n appendPoint(point) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = point.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, point.getFlatCoordinates());\n }\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiPoint} Clone.\n * @api\n */\n clone() {\n const multiPoint = new MultiPoint(\n this.flatCoordinates.slice(),\n this.layout\n );\n multiPoint.applyProperties(this);\n return multiPoint;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n const flatCoordinates = this.flatCoordinates;\n const stride = this.stride;\n for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n const squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[i],\n flatCoordinates[i + 1]\n );\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (let j = 0; j < stride; ++j) {\n closestPoint[j] = flatCoordinates[i + j];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n }\n\n /**\n * Return the coordinates of the multipoint.\n * @return {Array} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * Return the point at the specified index.\n * @param {number} index Index.\n * @return {Point} Point.\n * @api\n */\n getPoint(index) {\n const n = !this.flatCoordinates\n ? 0\n : this.flatCoordinates.length / this.stride;\n if (index < 0 || n <= index) {\n return null;\n }\n return new Point(\n this.flatCoordinates.slice(\n index * this.stride,\n (index + 1) * this.stride\n ),\n this.layout\n );\n }\n\n /**\n * Return the points of this multipoint.\n * @return {Array} Points.\n * @api\n */\n getPoints() {\n const flatCoordinates = this.flatCoordinates;\n const layout = this.layout;\n const stride = this.stride;\n /** @type {Array} */\n const points = [];\n for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n const point = new Point(flatCoordinates.slice(i, i + stride), layout);\n points.push(point);\n }\n return points;\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'MultiPoint';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n const flatCoordinates = this.flatCoordinates;\n const stride = this.stride;\n for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n if (containsXY(extent, x, y)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Set the coordinates of the multipoint.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default MultiPoint;\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array} [opt_dest] Destination.\n * @param {number} [opt_dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n fraction,\n opt_dest,\n opt_dimension\n) {\n let o, t;\n const n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n } else if (n === 2) {\n o = offset;\n t = fraction;\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n } else {\n o = offset + index * stride;\n }\n }\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n const dest = opt_dest ? opt_dest : new Array(dimension);\n for (let i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n extrapolate\n) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n } else if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(\n lerp(\n flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i],\n t\n )\n );\n }\n coordinate.push(m);\n return coordinate;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates,\n offset,\n ends,\n stride,\n m,\n extrapolate,\n interpolate\n) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n ends[ends.length - 1],\n stride,\n m,\n extrapolate\n );\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n } else if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n false\n );\n }\n offset = end;\n }\n return null;\n}\n","/**\n * @module ol/geom/flat/length\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Length.\n */\nexport function lineStringLength(flatCoordinates, offset, end, stride) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n x1 = x2;\n y1 = y2;\n }\n return length;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Perimeter.\n */\nexport function linearRingLength(flatCoordinates, offset, end, stride) {\n let perimeter = lineStringLength(flatCoordinates, offset, end, stride);\n const dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n const dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n perimeter += Math.sqrt(dx * dx + dy * dy);\n return perimeter;\n}\n","/**\n * @module ol/geom/LineString\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {douglasPeucker} from './flat/simplify.js';\nimport {extend} from '../array.js';\nimport {forEach as forEachSegment} from './flat/segments.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {interpolatePoint, lineStringCoordinateAtM} from './flat/interpolate.js';\nimport {intersectsLineString} from './flat/intersectsextent.js';\nimport {lineStringLength} from './flat/length.js';\n\n/**\n * @classdesc\n * Linestring geometry.\n *\n * @api\n */\nclass LineString extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.flatMidpoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.flatMidpointRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Append the passed coordinate to the coordinates of the linestring.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @api\n */\n appendCoordinate(coordinate) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = coordinate.slice();\n } else {\n extend(this.flatCoordinates, coordinate);\n }\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!LineString} Clone.\n * @api\n */\n clone() {\n const lineString = new LineString(\n this.flatCoordinates.slice(),\n this.layout\n );\n lineString.applyProperties(this);\n return lineString;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n maxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n this.maxDelta_,\n false,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * Iterate over each segment, calling the provided callback.\n * If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n *\n * @param {function(this: S, import(\"../coordinate.js\").Coordinate, import(\"../coordinate.js\").Coordinate): T} callback Function\n * called for each segment. The function will receive two arguments, the start and end coordinates of the segment.\n * @return {T|boolean} Value.\n * @template T,S\n * @api\n */\n forEachSegment(callback) {\n return forEachSegment(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n callback\n );\n }\n\n /**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * @param {number} m M.\n * @param {boolean} [opt_extrapolate] Extrapolate. Default is `false`.\n * @return {import(\"../coordinate.js\").Coordinate|null} Coordinate.\n * @api\n */\n getCoordinateAtM(m, opt_extrapolate) {\n if (\n this.layout != GeometryLayout.XYM &&\n this.layout != GeometryLayout.XYZM\n ) {\n return null;\n }\n const extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n return lineStringCoordinateAtM(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n m,\n extrapolate\n );\n }\n\n /**\n * Return the coordinates of the linestring.\n * @return {Array} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * Return the coordinate at the provided fraction along the linestring.\n * The `fraction` is a number between 0 and 1, where 0 is the start of the\n * linestring and 1 is the end.\n * @param {number} fraction Fraction.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_dest] Optional coordinate whose values will\n * be modified. If not provided, a new coordinate will be returned.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinate of the interpolated point.\n * @api\n */\n getCoordinateAt(fraction, opt_dest) {\n return interpolatePoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n fraction,\n opt_dest,\n this.stride\n );\n }\n\n /**\n * Return the length of the linestring on projected plane.\n * @return {number} Length (on projected plane).\n * @api\n */\n getLength() {\n return lineStringLength(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (this.flatMidpointRevision_ != this.getRevision()) {\n this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);\n this.flatMidpointRevision_ = this.getRevision();\n }\n return this.flatMidpoint_;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} Simplified LineString.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return new LineString(simplifiedFlatCoordinates, GeometryLayout.XY);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'LineString';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLineString(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the linestring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default LineString;\n","/**\n * @module ol/geom/MultiLineString\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport LineString from './LineString.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {douglasPeuckerArray} from './flat/simplify.js';\nimport {extend} from '../array.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {\n interpolatePoint,\n lineStringsCoordinateAtM,\n} from './flat/interpolate.js';\nimport {intersectsLineStringArray} from './flat/intersectsextent.js';\n\n/**\n * @classdesc\n * Multi-linestring geometry.\n *\n * @api\n */\nclass MultiLineString extends SimpleGeometry {\n /**\n * @param {Array|LineString>|Array} coordinates\n * Coordinates or LineString geometries. (For internal use, flat coordinates in\n * combination with `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array} [opt_ends] Flat coordinate ends for internal use.\n */\n constructor(coordinates, opt_layout, opt_ends) {\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (Array.isArray(coordinates[0])) {\n this.setCoordinates(\n /** @type {Array>} */ (\n coordinates\n ),\n opt_layout\n );\n } else if (opt_layout !== undefined && opt_ends) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n this.ends_ = opt_ends;\n } else {\n let layout = this.getLayout();\n const lineStrings = /** @type {Array} */ (coordinates);\n const flatCoordinates = [];\n const ends = [];\n for (let i = 0, ii = lineStrings.length; i < ii; ++i) {\n const lineString = lineStrings[i];\n if (i === 0) {\n layout = lineString.getLayout();\n }\n extend(flatCoordinates, lineString.getFlatCoordinates());\n ends.push(flatCoordinates.length);\n }\n this.setFlatCoordinates(layout, flatCoordinates);\n this.ends_ = ends;\n }\n }\n\n /**\n * Append the passed linestring to the multilinestring.\n * @param {LineString} lineString LineString.\n * @api\n */\n appendLineString(lineString) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = lineString.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, lineString.getFlatCoordinates().slice());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiLineString} Clone.\n * @api\n */\n clone() {\n const multiLineString = new MultiLineString(\n this.flatCoordinates.slice(),\n this.layout,\n this.ends_.slice()\n );\n multiLineString.applyProperties(this);\n return multiLineString;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n arrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n this.maxDelta_,\n false,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * `opt_interpolate` controls interpolation between consecutive LineStrings\n * within the MultiLineString. If `opt_interpolate` is `true` the coordinates\n * will be linearly interpolated between the last coordinate of one LineString\n * and the first coordinate of the next LineString. If `opt_interpolate` is\n * `false` then the function will return `null` for Ms falling between\n * LineStrings.\n *\n * @param {number} m M.\n * @param {boolean} [opt_extrapolate] Extrapolate. Default is `false`.\n * @param {boolean} [opt_interpolate] Interpolate. Default is `false`.\n * @return {import(\"../coordinate.js\").Coordinate|null} Coordinate.\n * @api\n */\n getCoordinateAtM(m, opt_extrapolate, opt_interpolate) {\n if (\n (this.layout != GeometryLayout.XYM &&\n this.layout != GeometryLayout.XYZM) ||\n this.flatCoordinates.length === 0\n ) {\n return null;\n }\n const extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n const interpolate = opt_interpolate !== undefined ? opt_interpolate : false;\n return lineStringsCoordinateAtM(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n m,\n extrapolate,\n interpolate\n );\n }\n\n /**\n * Return the coordinates of the multilinestring.\n * @return {Array>} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride\n );\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * Return the linestring at the specified index.\n * @param {number} index Index.\n * @return {LineString} LineString.\n * @api\n */\n getLineString(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LineString(\n this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1],\n this.ends_[index]\n ),\n this.layout\n );\n }\n\n /**\n * Return the linestrings of this multilinestring.\n * @return {Array} LineStrings.\n * @api\n */\n getLineStrings() {\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const layout = this.layout;\n /** @type {Array} */\n const lineStrings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const lineString = new LineString(\n flatCoordinates.slice(offset, end),\n layout\n );\n lineStrings.push(lineString);\n offset = end;\n }\n return lineStrings;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n const midpoints = [];\n const flatCoordinates = this.flatCoordinates;\n let offset = 0;\n const ends = this.ends_;\n const stride = this.stride;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n 0.5\n );\n extend(midpoints, midpoint);\n offset = end;\n }\n return midpoints;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {MultiLineString} Simplified MultiLineString.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds\n );\n return new MultiLineString(\n simplifiedFlatCoordinates,\n GeometryLayout.XY,\n simplifiedEnds\n );\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'MultiLineString';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLineStringArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the multilinestring.\n * @param {!Array>} coordinates Coordinates.\n * @param {GeometryLayout} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.ends_\n );\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\nexport default MultiLineString;\n","/**\n * @module ol/geom/MultiPolygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport MultiPoint from './MultiPoint.js';\nimport Polygon from './Polygon.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {\n assignClosestMultiArrayPoint,\n multiArrayMaxSquaredDelta,\n} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateMultiCoordinatesArray} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {getInteriorPointsOfMultiArray} from './flat/interiorpoint.js';\nimport {inflateMultiCoordinatesArray} from './flat/inflate.js';\nimport {intersectsLinearRingMultiArray} from './flat/intersectsextent.js';\nimport {\n linearRingssAreOriented,\n orientLinearRingsArray,\n} from './flat/orient.js';\nimport {linearRingss as linearRingssArea} from './flat/area.js';\nimport {linearRingss as linearRingssCenter} from './flat/center.js';\nimport {linearRingssContainsXY} from './flat/contains.js';\nimport {quantizeMultiArray} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Multi-polygon geometry.\n *\n * @api\n */\nclass MultiPolygon extends SimpleGeometry {\n /**\n * @param {Array>|Polygon>|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` and `opt_endss` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array>} [opt_endss] Array of ends for internal use with flat coordinates.\n */\n constructor(coordinates, opt_layout, opt_endss) {\n super();\n\n /**\n * @type {Array>}\n * @private\n */\n this.endss_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointsRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (!opt_endss && !Array.isArray(coordinates[0])) {\n let layout = this.getLayout();\n const polygons = /** @type {Array} */ (coordinates);\n const flatCoordinates = [];\n const endss = [];\n for (let i = 0, ii = polygons.length; i < ii; ++i) {\n const polygon = polygons[i];\n if (i === 0) {\n layout = polygon.getLayout();\n }\n const offset = flatCoordinates.length;\n const ends = polygon.getEnds();\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n ends[j] += offset;\n }\n extend(flatCoordinates, polygon.getFlatCoordinates());\n endss.push(ends);\n }\n opt_layout = layout;\n coordinates = flatCoordinates;\n opt_endss = endss;\n }\n if (opt_layout !== undefined && opt_endss) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n this.endss_ = opt_endss;\n } else {\n this.setCoordinates(\n /** @type {Array>>} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Append the passed polygon to this multipolygon.\n * @param {Polygon} polygon Polygon.\n * @api\n */\n appendPolygon(polygon) {\n /** @type {Array} */\n let ends;\n if (!this.flatCoordinates) {\n this.flatCoordinates = polygon.getFlatCoordinates().slice();\n ends = polygon.getEnds().slice();\n this.endss_.push();\n } else {\n const offset = this.flatCoordinates.length;\n extend(this.flatCoordinates, polygon.getFlatCoordinates());\n ends = polygon.getEnds().slice();\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n ends[i] += offset;\n }\n }\n this.endss_.push(ends);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiPolygon} Clone.\n * @api\n */\n clone() {\n const len = this.endss_.length;\n const newEndss = new Array(len);\n for (let i = 0; i < len; ++i) {\n newEndss[i] = this.endss_[i].slice();\n }\n\n const multiPolygon = new MultiPolygon(\n this.flatCoordinates.slice(),\n this.layout,\n newEndss\n );\n multiPolygon.applyProperties(this);\n\n return multiPolygon;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n multiArrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.endss_,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestMultiArrayPoint(\n this.getOrientedFlatCoordinates(),\n 0,\n this.endss_,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n return linearRingssContainsXY(\n this.getOrientedFlatCoordinates(),\n 0,\n this.endss_,\n this.stride,\n x,\n y\n );\n }\n\n /**\n * Return the area of the multipolygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingssArea(\n this.getOrientedFlatCoordinates(),\n 0,\n this.endss_,\n this.stride\n );\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for multi-polygons.\n *\n * @param {boolean} [opt_right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>>} Coordinates.\n * @api\n */\n getCoordinates(opt_right) {\n let flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRingsArray(\n flatCoordinates,\n 0,\n this.endss_,\n this.stride,\n opt_right\n );\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateMultiCoordinatesArray(\n flatCoordinates,\n 0,\n this.endss_,\n this.stride\n );\n }\n\n /**\n * @return {Array>} Endss.\n */\n getEndss() {\n return this.endss_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (this.flatInteriorPointsRevision_ != this.getRevision()) {\n const flatCenters = linearRingssCenter(\n this.flatCoordinates,\n 0,\n this.endss_,\n this.stride\n );\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.endss_,\n this.stride,\n flatCenters\n );\n this.flatInteriorPointsRevision_ = this.getRevision();\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * Return the interior points as {@link module:ol/geom/MultiPoint~MultiPoint multipoint}.\n * @return {MultiPoint} Interior points as XYM coordinates, where M is\n * the length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoints() {\n return new MultiPoint(\n this.getFlatInteriorPoints().slice(),\n GeometryLayout.XYM\n );\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (\n linearRingssAreOriented(flatCoordinates, 0, this.endss_, this.stride)\n ) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRingsArray(\n this.orientedFlatCoordinates_,\n 0,\n this.endss_,\n this.stride\n );\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {MultiPolygon} Simplified MultiPolygon.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEndss = [];\n simplifiedFlatCoordinates.length = quantizeMultiArray(\n this.flatCoordinates,\n 0,\n this.endss_,\n this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEndss\n );\n return new MultiPolygon(\n simplifiedFlatCoordinates,\n GeometryLayout.XY,\n simplifiedEndss\n );\n }\n\n /**\n * Return the polygon at the specified index.\n * @param {number} index Index.\n * @return {Polygon} Polygon.\n * @api\n */\n getPolygon(index) {\n if (index < 0 || this.endss_.length <= index) {\n return null;\n }\n let offset;\n if (index === 0) {\n offset = 0;\n } else {\n const prevEnds = this.endss_[index - 1];\n offset = prevEnds[prevEnds.length - 1];\n }\n const ends = this.endss_[index].slice();\n const end = ends[ends.length - 1];\n if (offset !== 0) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n ends[i] -= offset;\n }\n }\n return new Polygon(\n this.flatCoordinates.slice(offset, end),\n this.layout,\n ends\n );\n }\n\n /**\n * Return the polygons of this multipolygon.\n * @return {Array} Polygons.\n * @api\n */\n getPolygons() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const endss = this.endss_;\n const polygons = [];\n let offset = 0;\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i].slice();\n const end = ends[ends.length - 1];\n if (offset !== 0) {\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n ends[j] -= offset;\n }\n }\n const polygon = new Polygon(\n flatCoordinates.slice(offset, end),\n layout,\n ends\n );\n polygons.push(polygon);\n offset = end;\n }\n return polygons;\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'MultiPolygon';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLinearRingMultiArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.endss_,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the multipolygon.\n * @param {!Array>>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 3);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const endss = deflateMultiCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.endss_\n );\n if (endss.length === 0) {\n this.flatCoordinates.length = 0;\n } else {\n const lastEnds = endss[endss.length - 1];\n this.flatCoordinates.length =\n lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1];\n }\n this.changed();\n }\n}\n\nexport default MultiPolygon;\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n const flatCenters = [];\n let extent = createEmpty();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n ends[0],\n stride\n );\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n","/**\n * @module ol/geom/Circle\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {createOrUpdate, forEachCorner, intersects} from '../extent.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {rotate, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Circle geometry.\n *\n * @api\n */\nclass Circle extends SimpleGeometry {\n /**\n * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n * For internal use, flat coordinates in combination with `opt_layout` and no\n * `opt_radius` are also accepted.\n * @param {number} [opt_radius] Radius.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(center, opt_radius, opt_layout) {\n super();\n if (opt_layout !== undefined && opt_radius === undefined) {\n this.setFlatCoordinates(opt_layout, center);\n } else {\n const radius = opt_radius ? opt_radius : 0;\n this.setCenterAndRadius(center, radius, opt_layout);\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Circle} Clone.\n * @api\n */\n clone() {\n const circle = new Circle(\n this.flatCoordinates.slice(),\n undefined,\n this.layout\n );\n circle.applyProperties(this);\n return circle;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const dx = x - flatCoordinates[0];\n const dy = y - flatCoordinates[1];\n const squaredDistance = dx * dx + dy * dy;\n if (squaredDistance < minSquaredDistance) {\n if (squaredDistance === 0) {\n for (let i = 0; i < this.stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n } else {\n const delta = this.getRadius() / Math.sqrt(squaredDistance);\n closestPoint[0] = flatCoordinates[0] + delta * dx;\n closestPoint[1] = flatCoordinates[1] + delta * dy;\n for (let i = 2; i < this.stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n }\n closestPoint.length = this.stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const flatCoordinates = this.flatCoordinates;\n const dx = x - flatCoordinates[0];\n const dy = y - flatCoordinates[1];\n return dx * dx + dy * dy <= this.getRadiusSquared_();\n }\n\n /**\n * Return the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n * @return {import(\"../coordinate.js\").Coordinate} Center.\n * @api\n */\n getCenter() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n const flatCoordinates = this.flatCoordinates;\n const radius = flatCoordinates[this.stride] - flatCoordinates[0];\n return createOrUpdate(\n flatCoordinates[0] - radius,\n flatCoordinates[1] - radius,\n flatCoordinates[0] + radius,\n flatCoordinates[1] + radius,\n extent\n );\n }\n\n /**\n * Return the radius of the circle.\n * @return {number} Radius.\n * @api\n */\n getRadius() {\n return Math.sqrt(this.getRadiusSquared_());\n }\n\n /**\n * @private\n * @return {number} Radius squared.\n */\n getRadiusSquared_() {\n const dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];\n const dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Circle';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n const circleExtent = this.getExtent();\n if (intersects(extent, circleExtent)) {\n const center = this.getCenter();\n\n if (extent[0] <= center[0] && extent[2] >= center[0]) {\n return true;\n }\n if (extent[1] <= center[1] && extent[3] >= center[1]) {\n return true;\n }\n\n return forEachCorner(extent, this.intersectsCoordinate.bind(this));\n }\n return false;\n }\n\n /**\n * Set the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} center Center.\n * @api\n */\n setCenter(center) {\n const stride = this.stride;\n const radius = this.flatCoordinates[stride] - this.flatCoordinates[0];\n const flatCoordinates = center.slice();\n flatCoordinates[stride] = flatCoordinates[0] + radius;\n for (let i = 1; i < stride; ++i) {\n flatCoordinates[stride + i] = center[i];\n }\n this.setFlatCoordinates(this.layout, flatCoordinates);\n this.changed();\n }\n\n /**\n * Set the center (as {@link module:ol/coordinate~Coordinate coordinate}) and the radius (as\n * number) of the circle.\n * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n * @param {number} radius Radius.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCenterAndRadius(center, radius, opt_layout) {\n this.setLayout(opt_layout, center, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n /** @type {Array} */\n const flatCoordinates = this.flatCoordinates;\n let offset = deflateCoordinate(flatCoordinates, 0, center, this.stride);\n flatCoordinates[offset++] = flatCoordinates[0] + radius;\n for (let i = 1, ii = this.stride; i < ii; ++i) {\n flatCoordinates[offset++] = flatCoordinates[i];\n }\n flatCoordinates.length = offset;\n this.changed();\n }\n\n getCoordinates() {\n return null;\n }\n\n setCoordinates(coordinates, opt_layout) {}\n\n /**\n * Set the radius of the circle. The radius is in the units of the projection.\n * @param {number} radius Radius.\n * @api\n */\n setRadius(radius) {\n this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;\n this.changed();\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const center = this.getCenter();\n const stride = this.getStride();\n this.setCenter(\n rotate(center, 0, center.length, stride, angle, anchor, center)\n );\n this.changed();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n const center = this.getCenter();\n const stride = this.getStride();\n this.setCenter(\n translate(center, 0, center.length, stride, deltaX, deltaY, center)\n );\n this.changed();\n }\n}\n\n/**\n * Transform each coordinate of the circle from one coordinate reference system\n * to another. The geometry is modified in place.\n * If you do not want the geometry modified in place, first clone() it and\n * then use this function on the clone.\n *\n * Internally a circle is currently represented by two points: the center of\n * the circle `[cx, cy]`, and the point to the right of the circle\n * `[cx + r, cy]`. This `transform` function just transforms these two points.\n * So the resulting geometry is also a circle, and that circle does not\n * correspond to the shape that would be obtained by transforming every point\n * of the original circle.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Circle} This geometry. Note that original geometry is\n * modified in place.\n * @function\n * @api\n */\nCircle.prototype.transform;\nexport default Circle;\n","/**\n * @module ol/geom/GeometryCollection\n */\nimport EventType from '../events/EventType.js';\nimport Geometry from './Geometry.js';\nimport {\n closestSquaredDistanceXY,\n createOrUpdateEmpty,\n extend,\n getCenter,\n} from '../extent.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @classdesc\n * An array of {@link module:ol/geom/Geometry~Geometry} objects.\n *\n * @api\n */\nclass GeometryCollection extends Geometry {\n /**\n * @param {Array} [opt_geometries] Geometries.\n */\n constructor(opt_geometries) {\n super();\n\n /**\n * @private\n * @type {Array}\n */\n this.geometries_ = opt_geometries ? opt_geometries : null;\n\n /**\n * @type {Array}\n */\n this.changeEventsKeys_ = [];\n\n this.listenGeometriesChange_();\n }\n\n /**\n * @private\n */\n unlistenGeometriesChange_() {\n this.changeEventsKeys_.forEach(unlistenByKey);\n this.changeEventsKeys_.length = 0;\n }\n\n /**\n * @private\n */\n listenGeometriesChange_() {\n if (!this.geometries_) {\n return;\n }\n for (let i = 0, ii = this.geometries_.length; i < ii; ++i) {\n this.changeEventsKeys_.push(\n listen(this.geometries_[i], EventType.CHANGE, this.changed, this)\n );\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!GeometryCollection} Clone.\n * @api\n */\n clone() {\n const geometryCollection = new GeometryCollection(null);\n geometryCollection.setGeometries(this.geometries_);\n geometryCollection.applyProperties(this);\n return geometryCollection;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n minSquaredDistance = geometries[i].closestPointXY(\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n return minSquaredDistance;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].containsXY(x, y)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n createOrUpdateEmpty(extent);\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n extend(extent, geometries[i].getExtent());\n }\n return extent;\n }\n\n /**\n * Return the geometries that make up this geometry collection.\n * @return {Array} Geometries.\n * @api\n */\n getGeometries() {\n return cloneGeometries(this.geometries_);\n }\n\n /**\n * @return {Array} Geometries.\n */\n getGeometriesArray() {\n return this.geometries_;\n }\n\n /**\n * @return {Array} Geometries.\n */\n getGeometriesArrayRecursive() {\n /** @type {Array} */\n let geometriesArray = [];\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].getType() === this.getType()) {\n geometriesArray = geometriesArray.concat(\n /** @type {GeometryCollection} */ (\n geometries[i]\n ).getGeometriesArrayRecursive()\n );\n } else {\n geometriesArray.push(geometries[i]);\n }\n }\n return geometriesArray;\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {GeometryCollection} Simplified GeometryCollection.\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n if (\n squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)\n ) {\n return this;\n }\n\n const simplifiedGeometries = [];\n const geometries = this.geometries_;\n let simplified = false;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n const geometry = geometries[i];\n const simplifiedGeometry =\n geometry.getSimplifiedGeometry(squaredTolerance);\n simplifiedGeometries.push(simplifiedGeometry);\n if (simplifiedGeometry !== geometry) {\n simplified = true;\n }\n }\n if (simplified) {\n const simplifiedGeometryCollection = new GeometryCollection(null);\n simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);\n return simplifiedGeometryCollection;\n } else {\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'GeometryCollection';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].intersectsExtent(extent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.geometries_.length === 0;\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].rotate(angle, anchor);\n }\n this.changed();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n let anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].scale(sx, opt_sy, anchor);\n }\n this.changed();\n }\n\n /**\n * Set the geometries that make up this geometry collection.\n * @param {Array} geometries Geometries.\n * @api\n */\n setGeometries(geometries) {\n this.setGeometriesArray(cloneGeometries(geometries));\n }\n\n /**\n * @param {Array} geometries Geometries.\n */\n setGeometriesArray(geometries) {\n this.unlistenGeometriesChange_();\n this.geometries_ = geometries;\n this.listenGeometriesChange_();\n this.changed();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n applyTransform(transformFn) {\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].applyTransform(transformFn);\n }\n this.changed();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n const geometries = this.geometries_;\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].translate(deltaX, deltaY);\n }\n this.changed();\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.unlistenGeometriesChange_();\n super.disposeInternal();\n }\n}\n\n/**\n * @param {Array} geometries Geometries.\n * @return {Array} Cloned geometries.\n */\nfunction cloneGeometries(geometries) {\n const clonedGeometries = [];\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n clonedGeometries.push(geometries[i].clone());\n }\n return clonedGeometries;\n}\n\nexport default GeometryCollection;\n","/**\n * @module ol/featureloader\n */\nimport {VOID} from './functions.js';\n\n/**\n *\n * @type {boolean}\n * @private\n */\nlet withCredentials = false;\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * load features.\n *\n * This function takes up to 5 arguments. These are an {@link module:ol/extent~Extent} representing\n * the area to be loaded, a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection~Projection} for the projection, an optional success callback that should get\n * the loaded features passed as an argument and an optional failure callback with no arguments. If\n * the callbacks are not used, the corresponding vector source will not fire `'featuresloadend'` and\n * `'featuresloaderror'` events. `this` within the function is bound to the\n * {@link module:ol/source/Vector~VectorSource} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n * import(\"./extent.js\").Extent,\n * number,\n * import(\"./proj/Projection.js\").default,\n * function(Array): void=,\n * function(): void=): void} FeatureLoader\n * @api\n */\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection~Projection} for the projection as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array, import(\"./proj/Projection.js\").default): void} success Success\n * Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n * Function called when loading failed.\n */\nexport function loadFeaturesXhr(\n url,\n format,\n extent,\n resolution,\n projection,\n success,\n failure\n) {\n const xhr = new XMLHttpRequest();\n xhr.open(\n 'GET',\n typeof url === 'function' ? url(extent, resolution, projection) : url,\n true\n );\n if (format.getType() == 'arraybuffer') {\n xhr.responseType = 'arraybuffer';\n }\n xhr.withCredentials = withCredentials;\n /**\n * @param {Event} event Event.\n * @private\n */\n xhr.onload = function (event) {\n // status will be 0 for file:// urls\n if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n const type = format.getType();\n /** @type {Document|Node|Object|string|undefined} */\n let source;\n if (type == 'json' || type == 'text') {\n source = xhr.responseText;\n } else if (type == 'xml') {\n source = xhr.responseXML;\n if (!source) {\n source = new DOMParser().parseFromString(\n xhr.responseText,\n 'application/xml'\n );\n }\n } else if (type == 'arraybuffer') {\n source = /** @type {ArrayBuffer} */ (xhr.response);\n }\n if (source) {\n success(\n /** @type {Array} */\n (\n format.readFeatures(source, {\n extent: extent,\n featureProjection: projection,\n })\n ),\n format.readProjection(source)\n );\n } else {\n failure();\n }\n } else {\n failure();\n }\n };\n /**\n * @private\n */\n xhr.onerror = failure;\n xhr.send();\n}\n\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array): void} [success] Success\n * Function called when loading succeeded.\n * @param {function(): void} [failure] Failure\n * Function called when loading failed.\n * @this {import(\"./source/Vector\").default}\n */\n return function (extent, resolution, projection, success, failure) {\n const source = /** @type {import(\"./source/Vector\").default} */ (this);\n loadFeaturesXhr(\n url,\n format,\n extent,\n resolution,\n projection,\n /**\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n * projection.\n */\n function (features, dataProjection) {\n source.addFeatures(features);\n if (success !== undefined) {\n success(features);\n }\n },\n /* FIXME handle error */ failure ? failure : VOID\n );\n };\n}\n\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n withCredentials = xhrWithCredentials;\n}\n","/**\n * @module ol/format/Feature\n */\nimport Units from '../proj/Units.js';\nimport {abstract} from '../util.js';\nimport {assign} from '../obj.js';\nimport {\n equivalent as equivalentProjection,\n get as getProjection,\n transformExtent,\n} from '../proj.js';\n\n/**\n * @typedef {Object} ReadOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are reading.\n * If not provided, the projection will be derived from the data (where possible) or\n * the `dataProjection` of the format is assigned (where set). If the projection\n * can not be derived from the data and if no `dataProjection` is set for a format,\n * the features will not be reprojected.\n * @property {import(\"../extent.js\").Extent} [extent] Tile extent in map units of the tile being read.\n * This is only required when reading data with tile pixels as geometry units. When configured,\n * a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be\n * provided.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * created by the format reader. If not provided, features will be returned in the\n * `dataProjection`.\n */\n\n/**\n * @typedef {Object} WriteOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are writing.\n * If not provided, the `dataProjection` of the format is assigned (where set).\n * If no `dataProjection` is set for a format, the features will be returned\n * in the `featureProjection`.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * that will be serialized by the format writer. If not provided, geometries are assumed\n * to be in the `dataProjection` if that is set; in other words, they are not transformed.\n * @property {boolean} [rightHanded] When writing geometries, follow the right-hand\n * rule for linear ring orientation. This means that polygons will have counter-clockwise\n * exterior rings and clockwise interior rings. By default, coordinates are serialized\n * as they are provided at construction. If `true`, the right-hand rule will\n * be applied. If `false`, the left-hand rule will be applied (clockwise for\n * exterior and counter-clockwise for interior rings). Note that not all\n * formats support this. The GeoJSON format does use this property when writing\n * geometries.\n * @property {number} [decimals] Maximum number of decimal places for coordinates.\n * Coordinates are stored internally as floats, but floating-point arithmetic can create\n * coordinates with a large number of decimal places, not generally wanted on output.\n * Set a number here to round coordinates. Can also be used to ensure that\n * coordinates read in can be written back out with the same number of decimals.\n * Default is no rounding.\n */\n\n/**\n * @typedef {'arraybuffer' | 'json' | 'text' | 'xml'} Type\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for feature formats.\n * {@link module:ol/format/Feature~FeatureFormat} subclasses provide the ability to decode and encode\n * {@link module:ol/Feature~Feature} objects from a variety of commonly used geospatial\n * file formats. See the documentation for each format for more details.\n *\n * @abstract\n * @api\n */\nclass FeatureFormat {\n constructor() {\n /**\n * @protected\n * @type {import(\"../proj/Projection.js\").default|undefined}\n */\n this.dataProjection = undefined;\n\n /**\n * @protected\n * @type {import(\"../proj/Projection.js\").default|undefined}\n */\n this.defaultFeatureProjection = undefined;\n\n /**\n * A list media types supported by the format in descending order of preference.\n * @type {Array}\n */\n this.supportedMediaTypes = null;\n }\n\n /**\n * Adds the data projection to the read options.\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Options.\n * @return {ReadOptions|undefined} Options.\n * @protected\n */\n getReadOptions(source, opt_options) {\n let options;\n if (opt_options) {\n let dataProjection = opt_options.dataProjection\n ? getProjection(opt_options.dataProjection)\n : this.readProjection(source);\n if (\n opt_options.extent &&\n dataProjection &&\n dataProjection.getUnits() === Units.TILE_PIXELS\n ) {\n dataProjection = getProjection(dataProjection);\n dataProjection.setWorldExtent(opt_options.extent);\n }\n options = {\n dataProjection: dataProjection,\n featureProjection: opt_options.featureProjection,\n };\n }\n return this.adaptOptions(options);\n }\n\n /**\n * Sets the `dataProjection` on the options, if no `dataProjection`\n * is set.\n * @param {WriteOptions|ReadOptions|undefined} options\n * Options.\n * @protected\n * @return {WriteOptions|ReadOptions|undefined}\n * Updated options.\n */\n adaptOptions(options) {\n return assign(\n {\n dataProjection: this.dataProjection,\n featureProjection: this.defaultFeatureProjection,\n },\n options\n );\n }\n\n /**\n * @abstract\n * @return {Type} The format type.\n */\n getType() {\n return abstract();\n }\n\n /**\n * Read a single feature from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").FeatureLike} Feature.\n */\n readFeature(source, opt_options) {\n return abstract();\n }\n\n /**\n * Read all features from a source.\n *\n * @abstract\n * @param {Document|Element|ArrayBuffer|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n */\n readFeatures(source, opt_options) {\n return abstract();\n }\n\n /**\n * Read a single geometry from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometry(source, opt_options) {\n return abstract();\n }\n\n /**\n * Read the projection from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n */\n readProjection(source) {\n return abstract();\n }\n\n /**\n * Encode a feature in this format.\n *\n * @abstract\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n writeFeature(feature, opt_options) {\n return abstract();\n }\n\n /**\n * Encode an array of features in this format.\n *\n * @abstract\n * @param {Array} features Features.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n writeFeatures(features, opt_options) {\n return abstract();\n }\n\n /**\n * Write a single geometry in this format.\n *\n * @abstract\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n writeGeometry(geometry, opt_options) {\n return abstract();\n }\n}\n\nexport default FeatureFormat;\n\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {boolean} write Set to true for writing, false for reading.\n * @param {WriteOptions|ReadOptions} [opt_options] Options.\n * @return {import(\"../geom/Geometry.js\").default} Transformed geometry.\n */\nexport function transformGeometryWithOptions(geometry, write, opt_options) {\n const featureProjection = opt_options\n ? getProjection(opt_options.featureProjection)\n : null;\n const dataProjection = opt_options\n ? getProjection(opt_options.dataProjection)\n : null;\n\n let transformed;\n if (\n featureProjection &&\n dataProjection &&\n !equivalentProjection(featureProjection, dataProjection)\n ) {\n transformed = (write ? geometry.clone() : geometry).transform(\n write ? featureProjection : dataProjection,\n write ? dataProjection : featureProjection\n );\n } else {\n transformed = geometry;\n }\n if (\n write &&\n opt_options &&\n /** @type {WriteOptions} */ (opt_options).decimals !== undefined\n ) {\n const power = Math.pow(\n 10,\n /** @type {WriteOptions} */ (opt_options).decimals\n );\n // if decimals option on write, round each coordinate appropriately\n /**\n * @param {Array} coordinates Coordinates.\n * @return {Array} Transformed coordinates.\n */\n const transform = function (coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n coordinates[i] = Math.round(coordinates[i] * power) / power;\n }\n return coordinates;\n };\n if (transformed === geometry) {\n transformed = geometry.clone();\n }\n transformed.applyTransform(transform);\n }\n return transformed;\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../extent.js\").Extent} Transformed extent.\n */\nexport function transformExtentWithOptions(extent, opt_options) {\n const featureProjection = opt_options\n ? getProjection(opt_options.featureProjection)\n : null;\n const dataProjection = opt_options\n ? getProjection(opt_options.dataProjection)\n : null;\n\n if (\n featureProjection &&\n dataProjection &&\n !equivalentProjection(featureProjection, dataProjection)\n ) {\n return transformExtent(extent, dataProjection, featureProjection);\n } else {\n return extent;\n }\n}\n","/**\n * @module ol/xml\n */\nimport {extend} from './array.js';\n\n/**\n * When using {@link module:ol/xml.makeChildAppender} or\n * {@link module:ol/xml.makeSimpleNodeFactory}, the top `objectStack` item needs\n * to have this structure.\n * @typedef {Object} NodeStackItem\n * @property {Element} node Node.\n */\n\n/**\n * @typedef {function(Element, Array<*>): void} Parser\n */\n\n/**\n * @typedef {function(Element, *, Array<*>): void} Serializer\n */\n\n/**\n * @type {string}\n */\nexport const XML_SCHEMA_INSTANCE_URI =\n 'http://www.w3.org/2001/XMLSchema-instance';\n\n/**\n * @param {string} namespaceURI Namespace URI.\n * @param {string} qualifiedName Qualified name.\n * @return {Element} Node.\n */\nexport function createElementNS(namespaceURI, qualifiedName) {\n return getDocument().createElementNS(namespaceURI, qualifiedName);\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @return {string} All text content.\n * @api\n */\nexport function getAllTextContent(node, normalizeWhitespace) {\n return getAllTextContent_(node, normalizeWhitespace, []).join('');\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @param {Array} accumulator Accumulator.\n * @private\n * @return {Array} Accumulator.\n */\nexport function getAllTextContent_(node, normalizeWhitespace, accumulator) {\n if (\n node.nodeType == Node.CDATA_SECTION_NODE ||\n node.nodeType == Node.TEXT_NODE\n ) {\n if (normalizeWhitespace) {\n accumulator.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n } else {\n accumulator.push(node.nodeValue);\n }\n } else {\n let n;\n for (n = node.firstChild; n; n = n.nextSibling) {\n getAllTextContent_(n, normalizeWhitespace, accumulator);\n }\n }\n return accumulator;\n}\n\n/**\n * @param {Object} object Object.\n * @return {boolean} Is a document.\n */\nexport function isDocument(object) {\n return 'documentElement' in object;\n}\n\n/**\n * @param {Element} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @return {string} Value\n */\nexport function getAttributeNS(node, namespaceURI, name) {\n return node.getAttributeNS(namespaceURI, name) || '';\n}\n\n/**\n * Parse an XML string to an XML Document.\n * @param {string} xml XML.\n * @return {Document} Document.\n * @api\n */\nexport function parse(xml) {\n return new DOMParser().parseFromString(xml, 'application/xml');\n}\n\n/**\n * Make an array extender function for extending the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array<*>): (Array<*>|undefined)} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayExtender(valueReader, opt_this) {\n return (\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n opt_this !== undefined ? opt_this : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const array = /** @type {Array<*>} */ (\n objectStack[objectStack.length - 1]\n );\n extend(array, value);\n }\n }\n );\n}\n\n/**\n * Make an array pusher function for pushing to the array at the top of the\n * object stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayPusher(valueReader, opt_this) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n opt_this !== undefined ? opt_this : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const array = /** @type {Array<*>} */ (\n objectStack[objectStack.length - 1]\n );\n array.push(value);\n }\n }\n );\n}\n\n/**\n * Make an object stack replacer function for replacing the object at the\n * top of the stack.\n * @param {function(this: T, Node, Array<*>): *} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeReplacer(valueReader, opt_this) {\n return (\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n opt_this !== undefined ? opt_this : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n objectStack[objectStack.length - 1] = value;\n }\n }\n );\n}\n\n/**\n * Make an object property pusher function for adding a property to the\n * object at the top of the stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [opt_property] Property.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertyPusher(valueReader, opt_property, opt_this) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n opt_this !== undefined ? opt_this : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const object = /** @type {!Object} */ (\n objectStack[objectStack.length - 1]\n );\n const property =\n opt_property !== undefined ? opt_property : node.localName;\n let array;\n if (property in object) {\n array = object[property];\n } else {\n array = [];\n object[property] = array;\n }\n array.push(value);\n }\n }\n );\n}\n\n/**\n * Make an object property setter function.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [opt_property] Property.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertySetter(valueReader, opt_property, opt_this) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n opt_this !== undefined ? opt_this : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const object = /** @type {!Object} */ (\n objectStack[objectStack.length - 1]\n );\n const property =\n opt_property !== undefined ? opt_property : node.localName;\n object[property] = value;\n }\n }\n );\n}\n\n/**\n * Create a serializer that appends nodes written by its `nodeWriter` to its\n * designated parent. The parent is the `node` of the\n * {@link module:ol/xml~NodeStackItem} at the top of the `objectStack`.\n * @param {function(this: T, Node, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [opt_this] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeChildAppender(nodeWriter, opt_this) {\n return function (node, value, objectStack) {\n nodeWriter.call(\n opt_this !== undefined ? opt_this : this,\n node,\n value,\n objectStack\n );\n const parent = /** @type {NodeStackItem} */ (\n objectStack[objectStack.length - 1]\n );\n const parentNode = parent.node;\n parentNode.appendChild(node);\n };\n}\n\n/**\n * Create a serializer that calls the provided `nodeWriter` from\n * {@link module:ol/xml.serialize}. This can be used by the parent writer to have the\n * `nodeWriter` called with an array of values when the `nodeWriter` was\n * designed to serialize a single item. An example would be a LineString\n * geometry writer, which could be reused for writing MultiLineString\n * geometries.\n * @param {function(this: T, Element, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [opt_this] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeArraySerializer(nodeWriter, opt_this) {\n let serializersNS, nodeFactory;\n return function (node, value, objectStack) {\n if (serializersNS === undefined) {\n serializersNS = {};\n const serializers = {};\n serializers[node.localName] = nodeWriter;\n serializersNS[node.namespaceURI] = serializers;\n nodeFactory = makeSimpleNodeFactory(node.localName);\n }\n serialize(serializersNS, nodeFactory, value, objectStack);\n };\n}\n\n/**\n * Create a node factory which can use the `opt_keys` passed to\n * {@link module:ol/xml.serialize} or {@link module:ol/xml.pushSerializeAndPop} as node names,\n * or a fixed node name. The namespace of the created nodes can either be fixed,\n * or the parent namespace will be used.\n * @param {string} [opt_nodeName] Fixed node name which will be used for all\n * created nodes. If not provided, the 3rd argument to the resulting node\n * factory needs to be provided and will be the nodeName.\n * @param {string} [opt_namespaceURI] Fixed namespace URI which will be used for\n * all created nodes. If not provided, the namespace of the parent node will\n * be used.\n * @return {function(*, Array<*>, string=): (Node|undefined)} Node factory.\n */\nexport function makeSimpleNodeFactory(opt_nodeName, opt_namespaceURI) {\n const fixedNodeName = opt_nodeName;\n return (\n /**\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Node} Node.\n */\n function (value, objectStack, opt_nodeName) {\n const context = /** @type {NodeStackItem} */ (\n objectStack[objectStack.length - 1]\n );\n const node = context.node;\n let nodeName = fixedNodeName;\n if (nodeName === undefined) {\n nodeName = opt_nodeName;\n }\n\n const namespaceURI =\n opt_namespaceURI !== undefined ? opt_namespaceURI : node.namespaceURI;\n return createElementNS(namespaceURI, /** @type {string} */ (nodeName));\n }\n );\n}\n\n/**\n * A node factory that creates a node using the parent's `namespaceURI` and the\n * `nodeName` passed by {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop} to the node factory.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nexport const OBJECT_PROPERTY_NODE_FACTORY = makeSimpleNodeFactory();\n\n/**\n * Create an array of `values` to be used with {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as\n * `opt_key` argument.\n * @param {Object} object Key-value pairs for the sequence. Keys can\n * be a subset of the `orderedKeys`.\n * @param {Array} orderedKeys Keys in the order of the sequence.\n * @return {Array<*>} Values in the order of the sequence. The resulting array\n * has the same length as the `orderedKeys` array. Values that are not\n * present in `object` will be `undefined` in the resulting array.\n */\nexport function makeSequence(object, orderedKeys) {\n const length = orderedKeys.length;\n const sequence = new Array(length);\n for (let i = 0; i < length; ++i) {\n sequence[i] = object[orderedKeys[i]];\n }\n return sequence;\n}\n\n/**\n * Create a namespaced structure, using the same values for each namespace.\n * This can be used as a starting point for versioned parsers, when only a few\n * values are version specific.\n * @param {Array} namespaceURIs Namespace URIs.\n * @param {T} structure Structure.\n * @param {Object} [opt_structureNS] Namespaced structure to add to.\n * @return {Object} Namespaced structure.\n * @template T\n */\nexport function makeStructureNS(namespaceURIs, structure, opt_structureNS) {\n /**\n * @type {Object}\n */\n const structureNS = opt_structureNS !== undefined ? opt_structureNS : {};\n let i, ii;\n for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {\n structureNS[namespaceURIs[i]] = structure;\n }\n return structureNS;\n}\n\n/**\n * Parse a node using the parsers and object stack.\n * @param {Object>} parsersNS\n * Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [opt_this] The object to use as `this`.\n */\nexport function parseNode(parsersNS, node, objectStack, opt_this) {\n let n;\n for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n const parsers = parsersNS[n.namespaceURI];\n if (parsers !== undefined) {\n const parser = parsers[n.localName];\n if (parser !== undefined) {\n parser.call(opt_this, n, objectStack);\n }\n }\n }\n}\n\n/**\n * Push an object on top of the stack, parse and return the popped object.\n * @param {T} object Object.\n * @param {Object>} parsersNS\n * Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [opt_this] The object to use as `this`.\n * @return {T} Object.\n * @template T\n */\nexport function pushParseAndPop(\n object,\n parsersNS,\n node,\n objectStack,\n opt_this\n) {\n objectStack.push(object);\n parseNode(parsersNS, node, objectStack, opt_this);\n return /** @type {T} */ (objectStack.pop());\n}\n\n/**\n * Walk through an array of `values` and call a serializer for each value.\n * @param {Object>} serializersNS\n * Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n * Node factory. The `nodeFactory` creates the node whose namespace and name\n * will be used to choose a node writer from `serializersNS`. This\n * separation allows us to decide what kind of node to create, depending on\n * the value we want to serialize. An example for this would be different\n * geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n * of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array} [opt_keys] Keys of the `values`. Will be passed to the\n * `nodeFactory`. This is used for serializing object literals where the\n * node name relates to the property key. The array length of `opt_keys` has\n * to match the length of `values`. For serializing a sequence, `opt_keys`\n * determines the order of the sequence.\n * @param {T} [opt_this] The object to use as `this` for the node factory and\n * serializers.\n * @template T\n */\nexport function serialize(\n serializersNS,\n nodeFactory,\n values,\n objectStack,\n opt_keys,\n opt_this\n) {\n const length = (opt_keys !== undefined ? opt_keys : values).length;\n let value, node;\n for (let i = 0; i < length; ++i) {\n value = values[i];\n if (value !== undefined) {\n node = nodeFactory.call(\n opt_this !== undefined ? opt_this : this,\n value,\n objectStack,\n opt_keys !== undefined ? opt_keys[i] : undefined\n );\n if (node !== undefined) {\n serializersNS[node.namespaceURI][node.localName].call(\n opt_this,\n node,\n value,\n objectStack\n );\n }\n }\n }\n}\n\n/**\n * @param {O} object Object.\n * @param {Object>} serializersNS\n * Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n * Node factory. The `nodeFactory` creates the node whose namespace and name\n * will be used to choose a node writer from `serializersNS`. This\n * separation allows us to decide what kind of node to create, depending on\n * the value we want to serialize. An example for this would be different\n * geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n * of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array} [opt_keys] Keys of the `values`. Will be passed to the\n * `nodeFactory`. This is used for serializing object literals where the\n * node name relates to the property key. The array length of `opt_keys` has\n * to match the length of `values`. For serializing a sequence, `opt_keys`\n * determines the order of the sequence.\n * @param {T} [opt_this] The object to use as `this` for the node factory and\n * serializers.\n * @return {O|undefined} Object.\n * @template O, T\n */\nexport function pushSerializeAndPop(\n object,\n serializersNS,\n nodeFactory,\n values,\n objectStack,\n opt_keys,\n opt_this\n) {\n objectStack.push(object);\n serialize(\n serializersNS,\n nodeFactory,\n values,\n objectStack,\n opt_keys,\n opt_this\n );\n return /** @type {O|undefined} */ (objectStack.pop());\n}\n\nlet xmlSerializer_ = undefined;\n\n/**\n * Register a XMLSerializer. Can be used to inject a XMLSerializer\n * where there is no globally available implementation.\n *\n * @param {XMLSerializer} xmlSerializer A XMLSerializer.\n * @api\n */\nexport function registerXMLSerializer(xmlSerializer) {\n xmlSerializer_ = xmlSerializer;\n}\n\n/**\n * @return {XMLSerializer} The XMLSerializer.\n */\nexport function getXMLSerializer() {\n if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') {\n xmlSerializer_ = new XMLSerializer();\n }\n return xmlSerializer_;\n}\n\nlet document_ = undefined;\n\n/**\n * Register a Document to use when creating nodes for XML serializations. Can be used\n * to inject a Document where there is no globally available implementation.\n *\n * @param {Document} document A Document.\n * @api\n */\nexport function registerDocument(document) {\n document_ = document;\n}\n\n/**\n * Get a document that should be used when creating nodes for XML serializations.\n * @return {Document} The document.\n */\nexport function getDocument() {\n if (document_ === undefined && typeof document !== 'undefined') {\n document_ = document.implementation.createDocument('', '', null);\n }\n return document_;\n}\n","/**\n * @module ol/format/XMLFeature\n */\nimport FeatureFormat from '../format/Feature.js';\nimport {abstract} from '../util.js';\nimport {extend} from '../array.js';\nimport {getXMLSerializer, isDocument, parse} from '../xml.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for XML feature formats.\n *\n * @abstract\n */\nclass XMLFeature extends FeatureFormat {\n constructor() {\n super();\n\n /**\n * @type {XMLSerializer}\n * @private\n */\n this.xmlSerializer_ = getXMLSerializer();\n }\n\n /**\n * @return {import(\"./Feature.js\").Type} Format.\n */\n getType() {\n return 'xml';\n }\n\n /**\n * Read a single feature.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n * @api\n */\n readFeature(source, opt_options) {\n if (!source) {\n return null;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readFeatureFromDocument(doc, opt_options);\n } else if (isDocument(source)) {\n return this.readFeatureFromDocument(\n /** @type {Document} */ (source),\n opt_options\n );\n } else {\n return this.readFeatureFromNode(\n /** @type {Element} */ (source),\n opt_options\n );\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromDocument(doc, opt_options) {\n const features = this.readFeaturesFromDocument(doc, opt_options);\n if (features.length > 0) {\n return features[0];\n } else {\n return null;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromNode(node, opt_options) {\n return null; // not implemented\n }\n\n /**\n * Read all features from a feature collection.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {Array} Features.\n * @api\n */\n readFeatures(source, opt_options) {\n if (!source) {\n return [];\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readFeaturesFromDocument(doc, opt_options);\n } else if (isDocument(source)) {\n return this.readFeaturesFromDocument(\n /** @type {Document} */ (source),\n opt_options\n );\n } else {\n return this.readFeaturesFromNode(\n /** @type {Element} */ (source),\n opt_options\n );\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromDocument(doc, opt_options) {\n /** @type {Array} */\n const features = [];\n for (let n = doc.firstChild; n; n = n.nextSibling) {\n if (n.nodeType == Node.ELEMENT_NODE) {\n extend(\n features,\n this.readFeaturesFromNode(/** @type {Element} */ (n), opt_options)\n );\n }\n }\n return features;\n }\n\n /**\n * @abstract\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromNode(node, opt_options) {\n return abstract();\n }\n\n /**\n * Read a single geometry from a source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometry(source, opt_options) {\n if (!source) {\n return null;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readGeometryFromDocument(doc, opt_options);\n } else if (isDocument(source)) {\n return this.readGeometryFromDocument(\n /** @type {Document} */ (source),\n opt_options\n );\n } else {\n return this.readGeometryFromNode(\n /** @type {Element} */ (source),\n opt_options\n );\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromDocument(doc, opt_options) {\n return null; // not implemented\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromNode(node, opt_options) {\n return null; // not implemented\n }\n\n /**\n * Read the projection from the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n * @api\n */\n readProjection(source) {\n if (!source) {\n return null;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readProjectionFromDocument(doc);\n } else if (isDocument(source)) {\n return this.readProjectionFromDocument(/** @type {Document} */ (source));\n } else {\n return this.readProjectionFromNode(/** @type {Element} */ (source));\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromDocument(doc) {\n return this.dataProjection;\n }\n\n /**\n * @param {Element} node Node.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromNode(node) {\n return this.dataProjection;\n }\n\n /**\n * Encode a feature as string.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded feature.\n */\n writeFeature(feature, opt_options) {\n const node = this.writeFeatureNode(feature, opt_options);\n return this.xmlSerializer_.serializeToString(node);\n }\n\n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @protected\n * @return {Node} Node.\n */\n writeFeatureNode(feature, opt_options) {\n return null; // not implemented\n }\n\n /**\n * Encode an array of features as string.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Result.\n * @api\n */\n writeFeatures(features, opt_options) {\n const node = this.writeFeaturesNode(features, opt_options);\n return this.xmlSerializer_.serializeToString(node);\n }\n\n /**\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {Node} Node.\n */\n writeFeaturesNode(features, opt_options) {\n return null; // not implemented\n }\n\n /**\n * Encode a geometry as string.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded geometry.\n */\n writeGeometry(geometry, opt_options) {\n const node = this.writeGeometryNode(geometry, opt_options);\n return this.xmlSerializer_.serializeToString(node);\n }\n\n /**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {Node} Node.\n */\n writeGeometryNode(geometry, opt_options) {\n return null; // not implemented\n }\n}\n\nexport default XMLFeature;\n","/**\n * @module ol/format/GMLBase\n */\n// FIXME Envelopes should not be treated as geometries! readEnvelope_ is part\n// of GEOMETRY_PARSERS_ and methods using GEOMETRY_PARSERS_ do not expect\n// envelopes/extents, only geometries!\nimport Feature from '../Feature.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport LineString from '../geom/LineString.js';\nimport LinearRing from '../geom/LinearRing.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport XMLFeature from './XMLFeature.js';\nimport {assign} from '../obj.js';\nimport {extend} from '../array.js';\nimport {\n getAllTextContent,\n getAttributeNS,\n makeArrayPusher,\n makeReplacer,\n parseNode,\n pushParseAndPop,\n} from '../xml.js';\nimport {get as getProjection} from '../proj.js';\nimport {\n transformExtentWithOptions,\n transformGeometryWithOptions,\n} from './Feature.js';\n\n/**\n * @const\n * @type {string}\n */\nexport const GMLNS = 'http://www.opengis.net/gml';\n\n/**\n * A regular expression that matches if a string only contains whitespace\n * characters. It will e.g. match `''`, `' '`, `'\\n'` etc. The non-breaking\n * space (0xa0) is explicitly included as IE doesn't include it in its\n * definition of `\\s`.\n *\n * Information from `goog.string.isEmptyOrWhitespace`: https://github.com/google/closure-library/blob/e877b1e/closure/goog/string/string.js#L156-L160\n *\n * @const\n * @type {RegExp}\n */\nconst ONLY_WHITESPACE_RE = /^[\\s\\xa0]*$/;\n\n/**\n * @typedef {Object} Options\n * @property {Object|string} [featureNS] Feature\n * namespace. If not defined will be derived from GML. If multiple\n * feature types have been configured which come from different feature\n * namespaces, this will be an object with the keys being the prefixes used\n * in the entries of featureType array. The values of the object will be the\n * feature namespaces themselves. So for instance there might be a featureType\n * item `topp:states` in the `featureType` array and then there will be a key\n * `topp` in the featureNS object with value `http://www.openplans.org/topp`.\n * @property {Array|string} [featureType] Feature type(s) to parse.\n * If multiple feature types need to be configured\n * which come from different feature namespaces, `featureNS` will be an object\n * with the keys being the prefixes used in the entries of featureType array.\n * The values of the object will be the feature namespaces themselves.\n * So for instance there might be a featureType item `topp:states` and then\n * there will be a key named `topp` in the featureNS object with value\n * `http://www.openplans.org/topp`.\n * @property {string} srsName srsName to use when writing geometries.\n * @property {boolean} [surface=false] Write gml:Surface instead of gml:Polygon\n * elements. This also affects the elements in multi-part geometries.\n * @property {boolean} [curve=false] Write gml:Curve instead of gml:LineString\n * elements. This also affects the elements in multi-part geometries.\n * @property {boolean} [multiCurve=true] Write gml:MultiCurve instead of gml:MultiLineString.\n * Since the latter is deprecated in GML 3.\n * @property {boolean} [multiSurface=true] Write gml:multiSurface instead of\n * gml:MultiPolygon. Since the latter is deprecated in GML 3.\n * @property {string} [schemaLocation] Optional schemaLocation to use when\n * writing out the GML, this will override the default provided.\n * @property {boolean} [hasZ=false] If coordinates have a Z value.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Feature base format for reading and writing data in the GML format.\n * This class cannot be instantiated, it contains only base content that\n * is shared with versioned format classes GML2 and GML3.\n *\n * @abstract\n * @api\n */\nclass GMLBase extends XMLFeature {\n /**\n * @param {Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n super();\n\n const options = /** @type {Options} */ (opt_options ? opt_options : {});\n\n /**\n * @protected\n * @type {Array|string|undefined}\n */\n this.featureType = options.featureType;\n\n /**\n * @protected\n * @type {Object|string|undefined}\n */\n this.featureNS = options.featureNS;\n\n /**\n * @protected\n * @type {string}\n */\n this.srsName = options.srsName;\n\n /**\n * @protected\n * @type {string}\n */\n this.schemaLocation = '';\n\n /**\n * @type {Object>}\n */\n this.FEATURE_COLLECTION_PARSERS = {};\n this.FEATURE_COLLECTION_PARSERS[this.namespace] = {\n 'featureMember': makeArrayPusher(this.readFeaturesInternal),\n 'featureMembers': makeReplacer(this.readFeaturesInternal),\n };\n\n this.supportedMediaTypes = ['application/gml+xml'];\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array | undefined} Features.\n */\n readFeaturesInternal(node, objectStack) {\n const localName = node.localName;\n let features = null;\n if (localName == 'FeatureCollection') {\n features = pushParseAndPop(\n [],\n this.FEATURE_COLLECTION_PARSERS,\n node,\n objectStack,\n this\n );\n } else if (\n localName == 'featureMembers' ||\n localName == 'featureMember' ||\n localName == 'member'\n ) {\n const context = objectStack[0];\n let featureType = context['featureType'];\n let featureNS = context['featureNS'];\n const prefix = 'p';\n const defaultPrefix = 'p0';\n if (!featureType && node.childNodes) {\n (featureType = []), (featureNS = {});\n for (let i = 0, ii = node.childNodes.length; i < ii; ++i) {\n const child = /** @type {Element} */ (node.childNodes[i]);\n if (child.nodeType === 1) {\n const ft = child.nodeName.split(':').pop();\n if (featureType.indexOf(ft) === -1) {\n let key = '';\n let count = 0;\n const uri = child.namespaceURI;\n for (const candidate in featureNS) {\n if (featureNS[candidate] === uri) {\n key = candidate;\n break;\n }\n ++count;\n }\n if (!key) {\n key = prefix + count;\n featureNS[key] = uri;\n }\n featureType.push(key + ':' + ft);\n }\n }\n }\n if (localName != 'featureMember') {\n // recheck featureType for each featureMember\n context['featureType'] = featureType;\n context['featureNS'] = featureNS;\n }\n }\n if (typeof featureNS === 'string') {\n const ns = featureNS;\n featureNS = {};\n featureNS[defaultPrefix] = ns;\n }\n /** @type {Object>} */\n const parsersNS = {};\n const featureTypes = Array.isArray(featureType)\n ? featureType\n : [featureType];\n for (const p in featureNS) {\n /** @type {Object} */\n const parsers = {};\n for (let i = 0, ii = featureTypes.length; i < ii; ++i) {\n const featurePrefix =\n featureTypes[i].indexOf(':') === -1\n ? defaultPrefix\n : featureTypes[i].split(':')[0];\n if (featurePrefix === p) {\n parsers[featureTypes[i].split(':').pop()] =\n localName == 'featureMembers'\n ? makeArrayPusher(this.readFeatureElement, this)\n : makeReplacer(this.readFeatureElement, this);\n }\n }\n parsersNS[featureNS[p]] = parsers;\n }\n if (localName == 'featureMember' || localName == 'member') {\n features = pushParseAndPop(undefined, parsersNS, node, objectStack);\n } else {\n features = pushParseAndPop([], parsersNS, node, objectStack);\n }\n }\n if (features === null) {\n features = [];\n }\n return features;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../geom/Geometry.js\").default|import(\"../extent.js\").Extent|undefined} Geometry.\n */\n readGeometryOrExtent(node, objectStack) {\n const context = /** @type {Object} */ (objectStack[0]);\n context['srsName'] = node.firstElementChild.getAttribute('srsName');\n context['srsDimension'] =\n node.firstElementChild.getAttribute('srsDimension');\n return pushParseAndPop(\n null,\n this.GEOMETRY_PARSERS,\n node,\n objectStack,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../extent.js\").Extent|undefined} Geometry.\n */\n readExtentElement(node, objectStack) {\n const context = /** @type {Object} */ (objectStack[0]);\n const extent = /** @type {import(\"../extent.js\").Extent} */ (\n this.readGeometryOrExtent(node, objectStack)\n );\n return extent ? transformExtentWithOptions(extent, context) : undefined;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../geom/Geometry.js\").default|undefined} Geometry.\n */\n readGeometryElement(node, objectStack) {\n const context = /** @type {Object} */ (objectStack[0]);\n const geometry = /** @type {import(\"../geom/Geometry.js\").default} */ (\n this.readGeometryOrExtent(node, objectStack)\n );\n return geometry\n ? transformGeometryWithOptions(geometry, false, context)\n : undefined;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {boolean} asFeature whether result should be wrapped as a feature.\n * @return {Feature|Object} Feature\n */\n readFeatureElementInternal(node, objectStack, asFeature) {\n let geometryName;\n const values = {};\n for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n let value;\n const localName = n.localName;\n // first, check if it is simple attribute\n if (\n n.childNodes.length === 0 ||\n (n.childNodes.length === 1 &&\n (n.firstChild.nodeType === 3 || n.firstChild.nodeType === 4))\n ) {\n value = getAllTextContent(n, false);\n if (ONLY_WHITESPACE_RE.test(value)) {\n value = undefined;\n }\n } else {\n if (asFeature) {\n //if feature, try it as a geometry or extent\n value =\n localName === 'boundedBy'\n ? this.readExtentElement(n, objectStack)\n : this.readGeometryElement(n, objectStack);\n }\n if (!value) {\n //if not a geometry or not a feature, treat it as a complex attribute\n value = this.readFeatureElementInternal(n, objectStack, false);\n } else if (localName !== 'boundedBy') {\n // boundedBy is an extent and must not be considered as a geometry\n geometryName = localName;\n }\n }\n\n const len = n.attributes.length;\n if (len > 0) {\n value = {_content_: value};\n for (let i = 0; i < len; i++) {\n const attName = n.attributes[i].name;\n value[attName] = n.attributes[i].value;\n }\n }\n\n if (values[localName]) {\n if (!(values[localName] instanceof Array)) {\n values[localName] = [values[localName]];\n }\n values[localName].push(value);\n } else {\n values[localName] = value;\n }\n }\n if (!asFeature) {\n return values;\n } else {\n const feature = new Feature(values);\n if (geometryName) {\n feature.setGeometryName(geometryName);\n }\n const fid =\n node.getAttribute('fid') || getAttributeNS(node, this.namespace, 'id');\n if (fid) {\n feature.setId(fid);\n }\n return feature;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Feature} Feature.\n */\n readFeatureElement(node, objectStack) {\n return this.readFeatureElementInternal(node, objectStack, true);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Point|undefined} Point.\n */\n readPoint(node, objectStack) {\n const flatCoordinates = this.readFlatCoordinatesFromNode(node, objectStack);\n if (flatCoordinates) {\n return new Point(flatCoordinates, GeometryLayout.XYZ);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiPoint|undefined} MultiPoint.\n */\n readMultiPoint(node, objectStack) {\n /** @type {Array>} */\n const coordinates = pushParseAndPop(\n [],\n this.MULTIPOINT_PARSERS,\n node,\n objectStack,\n this\n );\n if (coordinates) {\n return new MultiPoint(coordinates);\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiLineString|undefined} MultiLineString.\n */\n readMultiLineString(node, objectStack) {\n /** @type {Array} */\n const lineStrings = pushParseAndPop(\n [],\n this.MULTILINESTRING_PARSERS,\n node,\n objectStack,\n this\n );\n if (lineStrings) {\n return new MultiLineString(lineStrings);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiPolygon|undefined} MultiPolygon.\n */\n readMultiPolygon(node, objectStack) {\n /** @type {Array} */\n const polygons = pushParseAndPop(\n [],\n this.MULTIPOLYGON_PARSERS,\n node,\n objectStack,\n this\n );\n if (polygons) {\n return new MultiPolygon(polygons);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n pointMemberParser(node, objectStack) {\n parseNode(this.POINTMEMBER_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n lineStringMemberParser(node, objectStack) {\n parseNode(this.LINESTRINGMEMBER_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n polygonMemberParser(node, objectStack) {\n parseNode(this.POLYGONMEMBER_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {LineString|undefined} LineString.\n */\n readLineString(node, objectStack) {\n const flatCoordinates = this.readFlatCoordinatesFromNode(node, objectStack);\n if (flatCoordinates) {\n const lineString = new LineString(flatCoordinates, GeometryLayout.XYZ);\n return lineString;\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} LinearRing flat coordinates.\n */\n readFlatLinearRing(node, objectStack) {\n const ring = pushParseAndPop(\n null,\n this.GEOMETRY_FLAT_COORDINATES_PARSERS,\n node,\n objectStack,\n this\n );\n if (ring) {\n return ring;\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {LinearRing|undefined} LinearRing.\n */\n readLinearRing(node, objectStack) {\n const flatCoordinates = this.readFlatCoordinatesFromNode(node, objectStack);\n if (flatCoordinates) {\n return new LinearRing(flatCoordinates, GeometryLayout.XYZ);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Polygon|undefined} Polygon.\n */\n readPolygon(node, objectStack) {\n /** @type {Array>} */\n const flatLinearRings = pushParseAndPop(\n [null],\n this.FLAT_LINEAR_RINGS_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRings && flatLinearRings[0]) {\n const flatCoordinates = flatLinearRings[0];\n const ends = [flatCoordinates.length];\n let i, ii;\n for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n extend(flatCoordinates, flatLinearRings[i]);\n ends.push(flatCoordinates.length);\n }\n return new Polygon(flatCoordinates, GeometryLayout.XYZ, ends);\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array} Flat coordinates.\n */\n readFlatCoordinatesFromNode(node, objectStack) {\n return pushParseAndPop(\n null,\n this.GEOMETRY_FLAT_COORDINATES_PARSERS,\n node,\n objectStack,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromNode(node, opt_options) {\n const geometry = this.readGeometryElement(node, [\n this.getReadOptions(node, opt_options ? opt_options : {}),\n ]);\n return geometry ? geometry : null;\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {Array} Features.\n */\n readFeaturesFromNode(node, opt_options) {\n const options = {\n featureType: this.featureType,\n featureNS: this.featureNS,\n };\n if (opt_options) {\n assign(options, this.getReadOptions(node, opt_options));\n }\n const features = this.readFeaturesInternal(node, [options]);\n return features || [];\n }\n\n /**\n * @param {Element} node Node.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromNode(node) {\n return getProjection(\n this.srsName\n ? this.srsName\n : node.firstElementChild.getAttribute('srsName')\n );\n }\n}\n\nGMLBase.prototype.namespace = GMLNS;\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.FLAT_LINEAR_RINGS_PARSERS = {\n 'http://www.opengis.net/gml': {},\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {\n 'http://www.opengis.net/gml': {},\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.GEOMETRY_PARSERS = {\n 'http://www.opengis.net/gml': {},\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.MULTIPOINT_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'pointMember': makeArrayPusher(GMLBase.prototype.pointMemberParser),\n 'pointMembers': makeArrayPusher(GMLBase.prototype.pointMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.MULTILINESTRING_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'lineStringMember': makeArrayPusher(\n GMLBase.prototype.lineStringMemberParser\n ),\n 'lineStringMembers': makeArrayPusher(\n GMLBase.prototype.lineStringMemberParser\n ),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.MULTIPOLYGON_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'polygonMember': makeArrayPusher(GMLBase.prototype.polygonMemberParser),\n 'polygonMembers': makeArrayPusher(GMLBase.prototype.polygonMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.POINTMEMBER_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'Point': makeArrayPusher(GMLBase.prototype.readFlatCoordinatesFromNode),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.LINESTRINGMEMBER_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'LineString': makeArrayPusher(GMLBase.prototype.readLineString),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.POLYGONMEMBER_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'Polygon': makeArrayPusher(GMLBase.prototype.readPolygon),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.RING_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'LinearRing': makeReplacer(GMLBase.prototype.readFlatLinearRing),\n },\n};\n\nexport default GMLBase;\n","import GMLBase from 'ol/format/GMLBase';\r\nimport Feature from 'ol/Feature.js';\r\nimport GeometryLayout from 'ol/geom/GeometryLayout.js';\r\nimport LineString from 'ol/geom/LineString.js';\r\nimport LinearRing from 'ol/geom/LinearRing.js';\r\nimport MultiLineString from 'ol/geom/MultiLineString.js';\r\nimport MultiPoint from 'ol/geom/MultiPoint.js';\r\nimport MultiPolygon from 'ol/geom/MultiPolygon.js';\r\nimport Point from 'ol/geom/Point.js';\r\nimport Polygon from 'ol/geom/Polygon.js';\r\nimport XMLFeature from 'ol/format/XMLFeature.js';\r\nimport { assign } from 'ol/obj.js';\r\nimport { extend } from 'ol/array.js';\r\nimport { get as getProjection } from 'ol/proj.js';\r\nimport { transformExtentWithOptions, transformGeometryWithOptions, } from 'ol/format/Feature.js'\r\nimport { getAllTextContent, getAttributeNS, makeArrayPusher, makeReplacer, parseNode, pushParseAndPop, } from 'ol/xml.js';\r\n\r\n\r\n// Añadido el espacio de nombres de GML 3.2 al parser\r\nconst gmlNamespace = 'http://www.opengis.net/gml';\r\nconst gml32Namespace = 'http://www.opengis.net/gml/3.2';\r\nGMLBase.prototype.MULTIPOINT_PARSERS[gml32Namespace] = GMLBase.prototype.MULTIPOINT_PARSERS[gmlNamespace];\r\nGMLBase.prototype.MULTILINESTRING_PARSERS[gml32Namespace] = GMLBase.prototype.MULTILINESTRING_PARSERS[gmlNamespace];\r\nGMLBase.prototype.MULTIPOLYGON_PARSERS[gml32Namespace] = GMLBase.prototype.MULTIPOLYGON_PARSERS[gmlNamespace];\r\nGMLBase.prototype.POINTMEMBER_PARSERS[gml32Namespace] = GMLBase.prototype.POINTMEMBER_PARSERS[gmlNamespace];\r\nGMLBase.prototype.LINESTRINGMEMBER_PARSERS[gml32Namespace] = GMLBase.prototype.LINESTRINGMEMBER_PARSERS[gmlNamespace];\r\nGMLBase.prototype.POLYGONMEMBER_PARSERS[gml32Namespace] = GMLBase.prototype.POLYGONMEMBER_PARSERS[gmlNamespace];\r\nGMLBase.prototype.RING_PARSERS[gml32Namespace] = GMLBase.prototype.RING_PARSERS[gmlNamespace];\r\n/*GML3.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS[gml32Namespace] = GML3.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS[gmlNamespace];\r\nGML3.prototype.FLAT_LINEAR_RINGS_PARSERS[gml32Namespace] = GML3.prototype.FLAT_LINEAR_RINGS_PARSERS[gmlNamespace];\r\nGML3.prototype.GEOMETRY_PARSERS[gml32Namespace] = GML3.prototype.GEOMETRY_PARSERS[gmlNamespace];\r\nGML3.prototype.MULTICURVE_PARSERS[gml32Namespace] = GML3.prototype.MULTICURVE_PARSERS[gmlNamespace];\r\nGML3.prototype.MULTISURFACE_PARSERS[gml32Namespace] = GML3.prototype.MULTISURFACE_PARSERS[gmlNamespace];\r\nGML3.prototype.CURVEMEMBER_PARSERS[gml32Namespace] = GML3.prototype.CURVEMEMBER_PARSERS[gmlNamespace];\r\nGML3.prototype.SURFACEMEMBER_PARSERS[gml32Namespace] = GML3.prototype.SURFACEMEMBER_PARSERS[gmlNamespace];\r\nGML3.prototype.SURFACE_PARSERS[gml32Namespace] = GML3.prototype.SURFACE_PARSERS[gmlNamespace];\r\nGML3.prototype.CURVE_PARSERS[gml32Namespace] = GML3.prototype.CURVE_PARSERS[gmlNamespace];\r\nGML3.prototype.ENVELOPE_PARSERS[gml32Namespace] = GML3.prototype.ENVELOPE_PARSERS[gmlNamespace];\r\nGML3.prototype.PATCHES_PARSERS[gml32Namespace] = GML3.prototype.PATCHES_PARSERS[gmlNamespace];\r\nGML3.prototype.SEGMENTS_PARSERS[gml32Namespace] = GML3.prototype.SEGMENTS_PARSERS[gmlNamespace];*/\r\n\r\n\r\n// Bug de OpenLayers hasta 5.3.0 como mínimo:\r\n// El parser de GML2 no lee las siguientes features del GML si tienen un featureType distinto del primero.\r\n// Esto pasa porque genera el objeto de featureTypes con la primera y en las siguientes iteraciones si el objeto existe no se regenera.\r\n// Entre comentarios /* */ se elimina lo que sobra.\r\n//\r\n// Más: se añade para FeatureCollection un parser por cada namespaceURI del nodo. \r\n// Esto es porque QGIS genera GML cuyo nodo FeatureCollection tiene namespace = http://ogr.maptools.org/.\r\n\r\nGMLBase.prototype.readFeaturesInternal = function (node, objectStack) {\r\n const localName = node.localName;\r\n let features = null;\r\n if (localName == 'FeatureCollection') {\r\n // Ñapa para leer GML de https://catastro.navarra.es/ref_catastral/gml.ashx?C=217&PO=5&PA=626\r\n // y demás GMLs obtenidos de un WFS de GeoServer.\r\n var gmlnsCollectionParser = this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.prototype.namespace] || this.FEATURE_COLLECTION_PARSERS[this.namespace];\r\n if (!gmlnsCollectionParser.member) {\r\n gmlnsCollectionParser.member = ol.xml.makeArrayPusher(\r\n ol.format.GMLBase.prototype.readFeaturesInternal);\r\n }\r\n //////\r\n // Sustituimos la siguienta instrucción por la siguiente condición :\r\n //features = pushParseAndPop([],\r\n // this.FEATURE_COLLECTION_PARSERS, node,\r\n // objectStack, this);\r\n if (node.namespaceURI === 'http://www.opengis.net/wfs') {\r\n features = ol.xml.pushParseAndPop([],\r\n this.FEATURE_COLLECTION_PARSERS, node,\r\n objectStack, this);\r\n } else {\r\n this.FEATURE_COLLECTION_PARSERS[node.namespaceURI] =\r\n this.FEATURE_COLLECTION_PARSERS[node.namespaceURI] || this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.prototype.namespace] || this.FEATURE_COLLECTION_PARSERS[this.namespace];\r\n features = ol.xml.pushParseAndPop(/*null*/[], // Cambiado null por [] porque si no, no crea el array de features\r\n this.FEATURE_COLLECTION_PARSERS, node,\r\n objectStack, this);\r\n }\r\n //////\r\n } else if (localName == 'featureMembers' || localName == 'featureMember' || localName == 'member') {\r\n const context = objectStack[0];\r\n let featureType = context.featureType;\r\n let featureNS = context.featureNS;\r\n const prefix = 'p';\r\n const defaultPrefix = 'p0';\r\n if (/*!featureType && */node.childNodes) {\r\n featureType = [], featureNS = {};\r\n for (let i = 0, ii = node.childNodes.length; i < ii; ++i) {\r\n const child = node.childNodes[i];\r\n if (child.nodeType === 1) {\r\n const ln = child.nodeName.split(':').pop();\r\n if (ln == 'FeatureCollection') {\r\n return pushParseAndPop([], this.FEATURE_COLLECTION_PARSERS, child, objectStack, this);\r\n /*if (featureGroup && featureGroup.length) {\r\n features = (features || []).concat(featureGroup)\r\n } \r\n return features;*/\r\n }\r\n else if (featureType.indexOf(ln) === -1) {\r\n let key = '';\r\n let count = 0;\r\n const uri = child.namespaceURI;\r\n for (let candidate in featureNS) {\r\n if (featureNS[candidate] === uri) {\r\n key = candidate;\r\n break;\r\n }\r\n ++count;\r\n }\r\n if (!key) {\r\n key = prefix + count;\r\n featureNS[key] = uri;\r\n }\r\n featureType.push(key + ':' + ln);\r\n }\r\n }\r\n }\r\n if (localName != 'featureMember') {\r\n // recheck featureType for each featureMember\r\n context.featureType = featureType;\r\n context.featureNS = featureNS;\r\n }\r\n }\r\n if (typeof featureNS === 'string') {\r\n const ns = featureNS;\r\n featureNS = {};\r\n featureNS[defaultPrefix] = ns;\r\n }\r\n /** @type {Object>} */\r\n const parsersNS = {};\r\n const featureTypes = Array.isArray(featureType) ? featureType : [featureType];\r\n for (let p in featureNS) {\r\n /** @type {Object} */\r\n const parsers = {};\r\n for (let i = 0, ii = featureTypes.length; i < ii; ++i) {\r\n const featurePrefix = featureTypes[i].indexOf(':') === -1 ?\r\n defaultPrefix : featureTypes[i].split(':')[0];\r\n if (featurePrefix === p) {\r\n parsers[featureTypes[i].split(':').pop()] =\r\n (localName == 'featureMembers') ?\r\n ol.xml.makeArrayPusher(this.readFeatureElement, this) :\r\n ol.xml.makeReplacer(this.readFeatureElement, this);\r\n }\r\n }\r\n parsersNS[featureNS[p]] = parsers;\r\n }\r\n if (localName == 'featureMember') {\r\n features = ol.xml.pushParseAndPop(undefined, parsersNS, node, objectStack);\r\n } else {\r\n features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);\r\n }\r\n }\r\n if (features === null) {\r\n features = [];\r\n }\r\n return features;\r\n};\r\n\r\n\r\n// Reescritura de código para transformar las geometrías de getFeatureInfo que están en un CRS distinto\r\nGMLBase.prototype.readGeometryElement = function (node, objectStack) {\r\n var context = /** @type {Object} */ (objectStack[0]);\r\n context.srsName = node.firstElementChild.getAttribute('srsName');\r\n context.srsDimension = node.firstElementChild.getAttribute('srsDimension');\r\n /** @type {ol.geom.Geometry} */\r\n\r\n // Parche para poder leer coordenadas en EPSG:4326 con orden incorrecto (las crea QGIS, por ejemplo)\r\n if (this instanceof ol.format.GML2CRS84 || this instanceof ol.format.GML3CRS84) {\r\n if (context.srsName !== 'EPSG:4326' || !context.srsName) {\r\n throw new Error(\"Conflicto de CRS\");\r\n }\r\n }\r\n if (!context.srsName) {\r\n context.srsName = this.srsName;\r\n }\r\n context.dataProjection = ol.proj.get(context.srsName);\r\n const geometry = ol.xml.pushParseAndPop(null,\r\n this.GEOMETRY_PARSERS, node, objectStack, this);\r\n if (geometry) {\r\n if (Array.isArray(geometry)) {\r\n return transformExtentWithOptions(\r\n /** @type {import(\"../extent.js\").Extent} */(geometry), context);\r\n }\r\n else {\r\n return transformGeometryWithOptions(\r\n /** @type {import(\"../geom/Geometry.js\").default} */(geometry), false, context);\r\n }\r\n }\r\n else {\r\n return undefined;\r\n }\r\n};\r\n\r\n\r\nconst ONLY_WHITESPACE_RE = /^[\\s\\xa0]*$/;\r\n\r\n// Reescritura de código para hacerlo compatible con GML generado por inspire:\r\n// No se puede considerar geometría cualquier cosa que tenga elementos anidados.\r\nGMLBase.prototype.readFeatureElementInternal = function (node, objectStack, asFeature) {\r\n let geometryName;\r\n const values = {};\r\n for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\r\n let value;\r\n const localName = n.localName;\r\n // first, check if it is simple attribute\r\n if (n.childNodes.length === 0\r\n || (n.childNodes.length === 1 && (n.firstChild.nodeType === 3 || n.firstChild.nodeType === 4))) {\r\n value = ol.xml.getAllTextContent(n, false);\r\n if (ONLY_WHITESPACE_RE.test(value)) {\r\n value = undefined;\r\n }\r\n } else {\r\n if (asFeature) {\r\n //if feature, try it as a geometry\r\n value = this.readGeometryElement(n, objectStack);\r\n }\r\n if (!value) { //if not a geometry or not a feature, treat it as a complex attribute\r\n value = this.readFeatureElementInternal(n, objectStack, false);\r\n } else if (localName !== 'boundedBy' && localName !== 'referencePoint') {\r\n // boundedBy is an extent and must not be considered as a geometry\r\n // flacunza: Tampoco referencePoint\r\n geometryName = localName;\r\n }\r\n }\r\n\r\n if (values[localName]) {\r\n if (!(values[localName] instanceof Array)) {\r\n values[localName] = [values[localName]];\r\n }\r\n values[localName].push(value);\r\n } else {\r\n values[localName] = value;\r\n }\r\n\r\n const len = n.attributes.length;\r\n if (len > 0) {\r\n values[localName] = { _content_: values[localName] };\r\n for (let i = 0; i < len; i++) {\r\n const attName = n.attributes[i].name;\r\n values[localName][attName] = n.attributes[i].value;\r\n }\r\n }\r\n }\r\n if (!asFeature) {\r\n return values;\r\n } else {\r\n const feature = new ol.Feature(values);\r\n if (geometryName) {\r\n feature.setGeometryName(geometryName);\r\n }\r\n const fid = node.getAttribute('fid') ||\r\n node.getAttributeNS(this.namespace, 'id');\r\n if (fid) {\r\n feature.setId(fid);\r\n }\r\n return feature;\r\n }\r\n};\r\n\r\nexport default GMLBase;","/**\n * @module ol/format/xsd\n */\nimport {getAllTextContent, getDocument} from '../xml.js';\nimport {padNumber} from '../string.js';\n\n/**\n * @param {Node} node Node.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBoolean(node) {\n const s = getAllTextContent(node, false);\n return readBooleanString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBooleanString(string) {\n const m = /^\\s*(true|1)|(false|0)\\s*$/.exec(string);\n if (m) {\n return m[1] !== undefined || false;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} DateTime in seconds.\n */\nexport function readDateTime(node) {\n const s = getAllTextContent(node, false);\n const dateTime = Date.parse(s);\n return isNaN(dateTime) ? undefined : dateTime / 1000;\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimal(node) {\n const s = getAllTextContent(node, false);\n return readDecimalString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimalString(string) {\n // FIXME check spec\n const m = /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*$/i.exec(string);\n if (m) {\n return parseFloat(m[1]);\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Non negative integer.\n */\nexport function readPositiveInteger(node) {\n const s = getAllTextContent(node, false);\n return readNonNegativeIntegerString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Non negative integer.\n */\nexport function readNonNegativeIntegerString(string) {\n const m = /^\\s*(\\d+)\\s*$/.exec(string);\n if (m) {\n return parseInt(m[1], 10);\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {Node} node Node.\n * @return {string|undefined} String.\n */\nexport function readString(node) {\n return getAllTextContent(node, false).trim();\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the boolean to.\n * @param {boolean} bool Boolean.\n */\nexport function writeBooleanTextNode(node, bool) {\n writeStringTextNode(node, bool ? '1' : '0');\n}\n\n/**\n * @param {Node} node Node to append a CDATA Section with the string to.\n * @param {string} string String.\n */\nexport function writeCDATASection(node, string) {\n node.appendChild(getDocument().createCDATASection(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the dateTime to.\n * @param {number} dateTime DateTime in seconds.\n */\nexport function writeDateTimeTextNode(node, dateTime) {\n const date = new Date(dateTime * 1000);\n const string =\n date.getUTCFullYear() +\n '-' +\n padNumber(date.getUTCMonth() + 1, 2) +\n '-' +\n padNumber(date.getUTCDate(), 2) +\n 'T' +\n padNumber(date.getUTCHours(), 2) +\n ':' +\n padNumber(date.getUTCMinutes(), 2) +\n ':' +\n padNumber(date.getUTCSeconds(), 2) +\n 'Z';\n node.appendChild(getDocument().createTextNode(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} decimal Decimal.\n */\nexport function writeDecimalTextNode(node, decimal) {\n const string = decimal.toPrecision();\n node.appendChild(getDocument().createTextNode(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} nonNegativeInteger Non negative integer.\n */\nexport function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) {\n const string = nonNegativeInteger.toString();\n node.appendChild(getDocument().createTextNode(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the string to.\n * @param {string} string String.\n */\nexport function writeStringTextNode(node, string) {\n node.appendChild(getDocument().createTextNode(string));\n}\n","/**\n * @module ol/format/GML2\n */\nimport GMLBase, {GMLNS} from './GMLBase.js';\nimport {\n OBJECT_PROPERTY_NODE_FACTORY,\n createElementNS,\n getAllTextContent,\n makeArrayPusher,\n makeChildAppender,\n makeReplacer,\n makeSimpleNodeFactory,\n pushParseAndPop,\n pushSerializeAndPop,\n} from '../xml.js';\nimport {assign} from '../obj.js';\nimport {createOrUpdate} from '../extent.js';\nimport {get as getProjection} from '../proj.js';\nimport {\n transformExtentWithOptions,\n transformGeometryWithOptions,\n} from './Feature.js';\nimport {writeStringTextNode} from './xsd.js';\n\n/**\n * @const\n * @type {string}\n */\nconst schemaLocation =\n GMLNS + ' http://schemas.opengis.net/gml/2.1.2/feature.xsd';\n\n/**\n * @const\n * @type {Object}\n */\nconst MULTIGEOMETRY_TO_MEMBER_NODENAME = {\n 'MultiLineString': 'lineStringMember',\n 'MultiCurve': 'curveMember',\n 'MultiPolygon': 'polygonMember',\n 'MultiSurface': 'surfaceMember',\n};\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GML format,\n * version 2.1.2.\n *\n * @api\n */\nclass GML2 extends GMLBase {\n /**\n * @param {import(\"./GMLBase.js\").Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n const options =\n /** @type {import(\"./GMLBase.js\").Options} */\n (opt_options ? opt_options : {});\n\n super(options);\n\n this.FEATURE_COLLECTION_PARSERS[GMLNS]['featureMember'] = makeArrayPusher(\n this.readFeaturesInternal\n );\n\n /**\n * @type {string}\n */\n this.schemaLocation = options.schemaLocation\n ? options.schemaLocation\n : schemaLocation;\n }\n\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Flat coordinates.\n */\n readFlatCoordinates(node, objectStack) {\n const s = getAllTextContent(node, false).replace(/^\\s*|\\s*$/g, '');\n const context = /** @type {import(\"../xml.js\").NodeStackItem} */ (\n objectStack[0]\n );\n const containerSrs = context['srsName'];\n let axisOrientation = 'enu';\n if (containerSrs) {\n const proj = getProjection(containerSrs);\n if (proj) {\n axisOrientation = proj.getAxisOrientation();\n }\n }\n const coordsGroups = s.trim().split(/\\s+/);\n const flatCoordinates = [];\n for (let i = 0, ii = coordsGroups.length; i < ii; i++) {\n const coords = coordsGroups[i].split(/,+/);\n const x = parseFloat(coords[0]);\n const y = parseFloat(coords[1]);\n const z = coords.length === 3 ? parseFloat(coords[2]) : 0;\n if (axisOrientation.substr(0, 2) === 'en') {\n flatCoordinates.push(x, y, z);\n } else {\n flatCoordinates.push(y, x, z);\n }\n }\n return flatCoordinates;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../extent.js\").Extent|undefined} Envelope.\n */\n readBox(node, objectStack) {\n /** @type {Array} */\n const flatCoordinates = pushParseAndPop(\n [null],\n this.BOX_PARSERS_,\n node,\n objectStack,\n this\n );\n return createOrUpdate(\n flatCoordinates[1][0],\n flatCoordinates[1][1],\n flatCoordinates[1][3],\n flatCoordinates[1][4]\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n innerBoundaryIsParser(node, objectStack) {\n /** @type {Array|undefined} */\n const flatLinearRing = pushParseAndPop(\n undefined,\n this.RING_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRing) {\n const flatLinearRings =\n /** @type {Array>} */\n (objectStack[objectStack.length - 1]);\n flatLinearRings.push(flatLinearRing);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n outerBoundaryIsParser(node, objectStack) {\n /** @type {Array|undefined} */\n const flatLinearRing = pushParseAndPop(\n undefined,\n this.RING_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRing) {\n const flatLinearRings =\n /** @type {Array>} */\n (objectStack[objectStack.length - 1]);\n flatLinearRings[0] = flatLinearRing;\n }\n }\n\n /**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Element|undefined} Node.\n * @private\n */\n GEOMETRY_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const context = objectStack[objectStack.length - 1];\n const multiSurface = context['multiSurface'];\n const surface = context['surface'];\n const multiCurve = context['multiCurve'];\n let nodeName;\n if (!Array.isArray(value)) {\n nodeName = /** @type {import(\"../geom/Geometry.js\").default} */ (\n value\n ).getType();\n if (nodeName === 'MultiPolygon' && multiSurface === true) {\n nodeName = 'MultiSurface';\n } else if (nodeName === 'Polygon' && surface === true) {\n nodeName = 'Surface';\n } else if (nodeName === 'MultiLineString' && multiCurve === true) {\n nodeName = 'MultiCurve';\n }\n } else {\n nodeName = 'Envelope';\n }\n return createElementNS('http://www.opengis.net/gml', nodeName);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {Array<*>} objectStack Node stack.\n */\n writeFeatureElement(node, feature, objectStack) {\n const fid = feature.getId();\n if (fid) {\n node.setAttribute('fid', /** @type {string} */ (fid));\n }\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const featureNS = context['featureNS'];\n const geometryName = feature.getGeometryName();\n if (!context.serializers) {\n context.serializers = {};\n context.serializers[featureNS] = {};\n }\n const keys = [];\n const values = [];\n if (feature.hasProperties()) {\n const properties = feature.getProperties();\n for (const key in properties) {\n const value = properties[key];\n if (value !== null) {\n keys.push(key);\n values.push(value);\n if (\n key == geometryName ||\n typeof (/** @type {?} */ (value).getSimplifiedGeometry) ===\n 'function'\n ) {\n if (!(key in context.serializers[featureNS])) {\n context.serializers[featureNS][key] = makeChildAppender(\n this.writeGeometryElement,\n this\n );\n }\n } else {\n if (!(key in context.serializers[featureNS])) {\n context.serializers[featureNS][key] =\n makeChildAppender(writeStringTextNode);\n }\n }\n }\n }\n }\n const item = assign({}, context);\n item.node = node;\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n (item),\n context.serializers,\n makeSimpleNodeFactory(undefined, featureNS),\n values,\n objectStack,\n keys\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LineString.js\").default} geometry LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeCurveOrLineString(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (node.nodeName !== 'LineStringSegment' && srsName) {\n node.setAttribute('srsName', srsName);\n }\n if (\n node.nodeName === 'LineString' ||\n node.nodeName === 'LineStringSegment'\n ) {\n const coordinates = this.createCoordinatesNode_(node.namespaceURI);\n node.appendChild(coordinates);\n this.writeCoordinates_(coordinates, geometry, objectStack);\n } else if (node.nodeName === 'Curve') {\n const segments = createElementNS(node.namespaceURI, 'segments');\n node.appendChild(segments);\n this.writeCurveSegments_(segments, geometry, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LineString.js\").default} line LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeLineStringOrCurveMember(node, line, objectStack) {\n const child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);\n if (child) {\n node.appendChild(child);\n this.writeCurveOrLineString(child, line, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/MultiLineString.js\").default} geometry MultiLineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiCurveOrLineString(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n const curve = context['curve'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const lines = geometry.getLineStrings();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName, curve: curve},\n this.LINESTRINGORCURVEMEMBER_SERIALIZERS,\n this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_,\n lines,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Node} node Node.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../extent.js\").Extent} geometry Geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeGeometryElement(node, geometry, objectStack) {\n const context = /** @type {import(\"./Feature.js\").WriteOptions} */ (\n objectStack[objectStack.length - 1]\n );\n const item = assign({}, context);\n item['node'] = node;\n let value;\n if (Array.isArray(geometry)) {\n value = transformExtentWithOptions(\n /** @type {import(\"../extent.js\").Extent} */ (geometry),\n context\n );\n } else {\n value = transformGeometryWithOptions(\n /** @type {import(\"../geom/Geometry.js\").default} */ (geometry),\n true,\n context\n );\n }\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n (item),\n this.GEOMETRY_SERIALIZERS,\n this.GEOMETRY_NODE_FACTORY_,\n [value],\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {string} namespaceURI XML namespace.\n * @return {Element} coordinates node.\n * @private\n */\n createCoordinatesNode_(namespaceURI) {\n const coordinates = createElementNS(namespaceURI, 'coordinates');\n coordinates.setAttribute('decimal', '.');\n coordinates.setAttribute('cs', ',');\n coordinates.setAttribute('ts', ' ');\n\n return coordinates;\n }\n\n /**\n * @param {Node} node Node.\n * @param {import(\"../geom/LineString.js\").default|import(\"../geom/LinearRing.js\").default} value Geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeCoordinates_(node, value, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n // only 2d for simple features profile\n const points = value.getCoordinates();\n const len = points.length;\n const parts = new Array(len);\n for (let i = 0; i < len; ++i) {\n const point = points[i];\n parts[i] = this.getCoords_(point, srsName, hasZ);\n }\n writeStringTextNode(node, parts.join(' '));\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LineString.js\").default} line LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeCurveSegments_(node, line, objectStack) {\n const child = createElementNS(node.namespaceURI, 'LineStringSegment');\n node.appendChild(child);\n this.writeCurveOrLineString(child, line, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Polygon.js\").default} geometry Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeSurfaceOrPolygon(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n if (node.nodeName !== 'PolygonPatch' && srsName) {\n node.setAttribute('srsName', srsName);\n }\n if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {\n const rings = geometry.getLinearRings();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName},\n this.RING_SERIALIZERS,\n this.RING_NODE_FACTORY_,\n rings,\n objectStack,\n undefined,\n this\n );\n } else if (node.nodeName === 'Surface') {\n const patches = createElementNS(node.namespaceURI, 'patches');\n node.appendChild(patches);\n this.writeSurfacePatches_(patches, geometry, objectStack);\n }\n }\n\n /**\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Node} Node.\n * @private\n */\n RING_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const context = objectStack[objectStack.length - 1];\n const parentNode = context.node;\n const exteriorWritten = context['exteriorWritten'];\n if (exteriorWritten === undefined) {\n context['exteriorWritten'] = true;\n }\n return createElementNS(\n parentNode.namespaceURI,\n exteriorWritten !== undefined ? 'innerBoundaryIs' : 'outerBoundaryIs'\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Polygon.js\").default} polygon Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeSurfacePatches_(node, polygon, objectStack) {\n const child = createElementNS(node.namespaceURI, 'PolygonPatch');\n node.appendChild(child);\n this.writeSurfaceOrPolygon(child, polygon, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LinearRing.js\").default} ring LinearRing geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeRing(node, ring, objectStack) {\n const linearRing = createElementNS(node.namespaceURI, 'LinearRing');\n node.appendChild(linearRing);\n this.writeLinearRing(linearRing, ring, objectStack);\n }\n\n /**\n * @param {Array} point Point geometry.\n * @param {string} [opt_srsName] Optional srsName\n * @param {boolean} [opt_hasZ] whether the geometry has a Z coordinate (is 3D) or not.\n * @return {string} The coords string.\n * @private\n */\n getCoords_(point, opt_srsName, opt_hasZ) {\n let axisOrientation = 'enu';\n if (opt_srsName) {\n axisOrientation = getProjection(opt_srsName).getAxisOrientation();\n }\n let coords =\n axisOrientation.substr(0, 2) === 'en'\n ? point[0] + ',' + point[1]\n : point[1] + ',' + point[0];\n if (opt_hasZ) {\n // For newly created points, Z can be undefined.\n const z = point[2] || 0;\n coords += ',' + z;\n }\n\n return coords;\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Point.js\").default} geometry Point geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writePoint(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const coordinates = this.createCoordinatesNode_(node.namespaceURI);\n node.appendChild(coordinates);\n const point = geometry.getCoordinates();\n const coord = this.getCoords_(point, srsName, hasZ);\n writeStringTextNode(coordinates, coord);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/MultiPoint.js\").default} geometry MultiPoint geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiPoint(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const points = geometry.getPoints();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName},\n this.POINTMEMBER_SERIALIZERS,\n makeSimpleNodeFactory('pointMember'),\n points,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Point.js\").default} point Point geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writePointMember(node, point, objectStack) {\n const child = createElementNS(node.namespaceURI, 'Point');\n node.appendChild(child);\n this.writePoint(child, point, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LinearRing.js\").default} geometry LinearRing geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeLinearRing(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const coordinates = this.createCoordinatesNode_(node.namespaceURI);\n node.appendChild(coordinates);\n this.writeCoordinates_(coordinates, geometry, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiSurfaceOrPolygon(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n const surface = context['surface'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const polygons = geometry.getPolygons();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName, surface: surface},\n this.SURFACEORPOLYGONMEMBER_SERIALIZERS,\n this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_,\n polygons,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Node} node Node.\n * @param {import(\"../geom/Polygon.js\").default} polygon Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeSurfaceOrPolygonMember(node, polygon, objectStack) {\n const child = this.GEOMETRY_NODE_FACTORY_(polygon, objectStack);\n if (child) {\n node.appendChild(child);\n this.writeSurfaceOrPolygon(child, polygon, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {Array<*>} objectStack Node stack.\n */\n writeEnvelope(node, extent, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const keys = ['lowerCorner', 'upperCorner'];\n const values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n ({node: node}),\n this.ENVELOPE_SERIALIZERS,\n OBJECT_PROPERTY_NODE_FACTORY,\n values,\n objectStack,\n keys,\n this\n );\n }\n\n /**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Node|undefined} Node.\n * @private\n */\n MULTIGEOMETRY_MEMBER_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const parentNode = objectStack[objectStack.length - 1].node;\n return createElementNS(\n 'http://www.opengis.net/gml',\n MULTIGEOMETRY_TO_MEMBER_NODENAME[parentNode.nodeName]\n );\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'coordinates': makeReplacer(GML2.prototype.readFlatCoordinates),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.FLAT_LINEAR_RINGS_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'innerBoundaryIs': GML2.prototype.innerBoundaryIsParser,\n 'outerBoundaryIs': GML2.prototype.outerBoundaryIsParser,\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.BOX_PARSERS_ = {\n 'http://www.opengis.net/gml': {\n 'coordinates': makeArrayPusher(GML2.prototype.readFlatCoordinates),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.GEOMETRY_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'Point': makeReplacer(GMLBase.prototype.readPoint),\n 'MultiPoint': makeReplacer(GMLBase.prototype.readMultiPoint),\n 'LineString': makeReplacer(GMLBase.prototype.readLineString),\n 'MultiLineString': makeReplacer(GMLBase.prototype.readMultiLineString),\n 'LinearRing': makeReplacer(GMLBase.prototype.readLinearRing),\n 'Polygon': makeReplacer(GMLBase.prototype.readPolygon),\n 'MultiPolygon': makeReplacer(GMLBase.prototype.readMultiPolygon),\n 'Box': makeReplacer(GML2.prototype.readBox),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.GEOMETRY_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'Curve': makeChildAppender(GML2.prototype.writeCurveOrLineString),\n 'MultiCurve': makeChildAppender(GML2.prototype.writeMultiCurveOrLineString),\n 'Point': makeChildAppender(GML2.prototype.writePoint),\n 'MultiPoint': makeChildAppender(GML2.prototype.writeMultiPoint),\n 'LineString': makeChildAppender(GML2.prototype.writeCurveOrLineString),\n 'MultiLineString': makeChildAppender(\n GML2.prototype.writeMultiCurveOrLineString\n ),\n 'LinearRing': makeChildAppender(GML2.prototype.writeLinearRing),\n 'Polygon': makeChildAppender(GML2.prototype.writeSurfaceOrPolygon),\n 'MultiPolygon': makeChildAppender(\n GML2.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Surface': makeChildAppender(GML2.prototype.writeSurfaceOrPolygon),\n 'MultiSurface': makeChildAppender(\n GML2.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Envelope': makeChildAppender(GML2.prototype.writeEnvelope),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML2.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'lineStringMember': makeChildAppender(\n GML2.prototype.writeLineStringOrCurveMember\n ),\n 'curveMember': makeChildAppender(\n GML2.prototype.writeLineStringOrCurveMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML2.prototype.RING_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'outerBoundaryIs': makeChildAppender(GML2.prototype.writeRing),\n 'innerBoundaryIs': makeChildAppender(GML2.prototype.writeRing),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML2.prototype.POINTMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'pointMember': makeChildAppender(GML2.prototype.writePointMember),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML2.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'surfaceMember': makeChildAppender(\n GML2.prototype.writeSurfaceOrPolygonMember\n ),\n 'polygonMember': makeChildAppender(\n GML2.prototype.writeSurfaceOrPolygonMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML2.prototype.ENVELOPE_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'lowerCorner': makeChildAppender(writeStringTextNode),\n 'upperCorner': makeChildAppender(writeStringTextNode),\n },\n};\n\nexport default GML2;\n","/**\n * @module ol/format/GML3\n */\nimport GML2 from './GML2.js';\nimport GMLBase, {GMLNS} from './GMLBase.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Polygon from '../geom/Polygon.js';\nimport {\n OBJECT_PROPERTY_NODE_FACTORY,\n XML_SCHEMA_INSTANCE_URI,\n createElementNS,\n getAllTextContent,\n makeArrayExtender,\n makeArrayPusher,\n makeChildAppender,\n makeReplacer,\n makeSimpleNodeFactory,\n parseNode,\n pushParseAndPop,\n pushSerializeAndPop,\n} from '../xml.js';\nimport {assign} from '../obj.js';\nimport {createOrUpdate} from '../extent.js';\nimport {extend} from '../array.js';\nimport {get as getProjection} from '../proj.js';\nimport {readNonNegativeIntegerString, writeStringTextNode} from './xsd.js';\nimport {\n transformExtentWithOptions,\n transformGeometryWithOptions,\n} from './Feature.js';\n\n/**\n * @const\n * @type {string}\n * @private\n */\nconst schemaLocation =\n GMLNS +\n ' http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +\n '1.0.0/gmlsf.xsd';\n\n/**\n * @const\n * @type {Object}\n */\nconst MULTIGEOMETRY_TO_MEMBER_NODENAME = {\n 'MultiLineString': 'lineStringMember',\n 'MultiCurve': 'curveMember',\n 'MultiPolygon': 'polygonMember',\n 'MultiSurface': 'surfaceMember',\n};\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GML format\n * version 3.1.1.\n * Currently only supports GML 3.1.1 Simple Features profile.\n *\n * @api\n */\nclass GML3 extends GMLBase {\n /**\n * @param {import(\"./GMLBase.js\").Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n const options =\n /** @type {import(\"./GMLBase.js\").Options} */\n (opt_options ? opt_options : {});\n\n super(options);\n\n /**\n * @private\n * @type {boolean}\n */\n this.surface_ = options.surface !== undefined ? options.surface : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.curve_ = options.curve !== undefined ? options.curve : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.multiCurve_ =\n options.multiCurve !== undefined ? options.multiCurve : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.multiSurface_ =\n options.multiSurface !== undefined ? options.multiSurface : true;\n\n /**\n * @type {string}\n */\n this.schemaLocation = options.schemaLocation\n ? options.schemaLocation\n : schemaLocation;\n\n /**\n * @private\n * @type {boolean}\n */\n this.hasZ = options.hasZ !== undefined ? options.hasZ : false;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiLineString|undefined} MultiLineString.\n */\n readMultiCurve(node, objectStack) {\n /** @type {Array} */\n const lineStrings = pushParseAndPop(\n [],\n this.MULTICURVE_PARSERS,\n node,\n objectStack,\n this\n );\n if (lineStrings) {\n const multiLineString = new MultiLineString(lineStrings);\n return multiLineString;\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Polygon.\n */\n readFlatCurveRing(node, objectStack) {\n /** @type {Array} */\n const lineStrings = pushParseAndPop(\n [],\n this.MULTICURVE_PARSERS,\n node,\n objectStack,\n this\n );\n const flatCoordinates = [];\n for (let i = 0, ii = lineStrings.length; i < ii; ++i) {\n extend(flatCoordinates, lineStrings[i].getFlatCoordinates());\n }\n return flatCoordinates;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiPolygon|undefined} MultiPolygon.\n */\n readMultiSurface(node, objectStack) {\n /** @type {Array} */\n const polygons = pushParseAndPop(\n [],\n this.MULTISURFACE_PARSERS,\n node,\n objectStack,\n this\n );\n if (polygons) {\n return new MultiPolygon(polygons);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n curveMemberParser(node, objectStack) {\n parseNode(this.CURVEMEMBER_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n surfaceMemberParser(node, objectStack) {\n parseNode(this.SURFACEMEMBER_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<(Array)>|undefined} flat coordinates.\n */\n readPatch(node, objectStack) {\n return pushParseAndPop(\n [null],\n this.PATCHES_PARSERS,\n node,\n objectStack,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} flat coordinates.\n */\n readSegment(node, objectStack) {\n return pushParseAndPop([], this.SEGMENTS_PARSERS, node, objectStack, this);\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<(Array)>|undefined} flat coordinates.\n */\n readPolygonPatch(node, objectStack) {\n return pushParseAndPop(\n [null],\n this.FLAT_LINEAR_RINGS_PARSERS,\n node,\n objectStack,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} flat coordinates.\n */\n readLineStringSegment(node, objectStack) {\n return pushParseAndPop(\n [null],\n this.GEOMETRY_FLAT_COORDINATES_PARSERS,\n node,\n objectStack,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n interiorParser(node, objectStack) {\n /** @type {Array|undefined} */\n const flatLinearRing = pushParseAndPop(\n undefined,\n this.RING_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRing) {\n const flatLinearRings =\n /** @type {Array>} */\n (objectStack[objectStack.length - 1]);\n flatLinearRings.push(flatLinearRing);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n exteriorParser(node, objectStack) {\n /** @type {Array|undefined} */\n const flatLinearRing = pushParseAndPop(\n undefined,\n this.RING_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRing) {\n const flatLinearRings =\n /** @type {Array>} */\n (objectStack[objectStack.length - 1]);\n flatLinearRings[0] = flatLinearRing;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Polygon|undefined} Polygon.\n */\n readSurface(node, objectStack) {\n /** @type {Array>} */\n const flatLinearRings = pushParseAndPop(\n [null],\n this.SURFACE_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatLinearRings && flatLinearRings[0]) {\n const flatCoordinates = flatLinearRings[0];\n const ends = [flatCoordinates.length];\n let i, ii;\n for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n extend(flatCoordinates, flatLinearRings[i]);\n ends.push(flatCoordinates.length);\n }\n return new Polygon(flatCoordinates, GeometryLayout.XYZ, ends);\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {LineString|undefined} LineString.\n */\n readCurve(node, objectStack) {\n /** @type {Array} */\n const flatCoordinates = pushParseAndPop(\n [null],\n this.CURVE_PARSERS,\n node,\n objectStack,\n this\n );\n if (flatCoordinates) {\n const lineString = new LineString(flatCoordinates, GeometryLayout.XYZ);\n return lineString;\n } else {\n return undefined;\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../extent.js\").Extent|undefined} Envelope.\n */\n readEnvelope(node, objectStack) {\n /** @type {Array} */\n const flatCoordinates = pushParseAndPop(\n [null],\n this.ENVELOPE_PARSERS,\n node,\n objectStack,\n this\n );\n return createOrUpdate(\n flatCoordinates[1][0],\n flatCoordinates[1][1],\n flatCoordinates[2][0],\n flatCoordinates[2][1]\n );\n }\n\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Flat coordinates.\n */\n readFlatPos(node, objectStack) {\n let s = getAllTextContent(node, false);\n const re = /^\\s*([+\\-]?\\d*\\.?\\d+(?:[eE][+\\-]?\\d+)?)\\s*/;\n /** @type {Array} */\n const flatCoordinates = [];\n let m;\n while ((m = re.exec(s))) {\n flatCoordinates.push(parseFloat(m[1]));\n s = s.substr(m[0].length);\n }\n if (s !== '') {\n return undefined;\n }\n const context = objectStack[0];\n const containerSrs = context['srsName'];\n let axisOrientation = 'enu';\n if (containerSrs) {\n const proj = getProjection(containerSrs);\n axisOrientation = proj.getAxisOrientation();\n }\n if (axisOrientation === 'neu') {\n let i, ii;\n for (i = 0, ii = flatCoordinates.length; i < ii; i += 3) {\n const y = flatCoordinates[i];\n const x = flatCoordinates[i + 1];\n flatCoordinates[i] = x;\n flatCoordinates[i + 1] = y;\n }\n }\n const len = flatCoordinates.length;\n if (len == 2) {\n flatCoordinates.push(0);\n }\n if (len === 0) {\n return undefined;\n }\n return flatCoordinates;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Flat coordinates.\n */\n readFlatPosList(node, objectStack) {\n const s = getAllTextContent(node, false).replace(/^\\s*|\\s*$/g, '');\n const context = objectStack[0];\n const containerSrs = context['srsName'];\n const contextDimension = context['srsDimension'];\n let axisOrientation = 'enu';\n if (containerSrs) {\n const proj = getProjection(containerSrs);\n axisOrientation = proj.getAxisOrientation();\n }\n const coords = s.split(/\\s+/);\n // The \"dimension\" attribute is from the GML 3.0.1 spec.\n let dim = 2;\n if (node.getAttribute('srsDimension')) {\n dim = readNonNegativeIntegerString(node.getAttribute('srsDimension'));\n } else if (node.getAttribute('dimension')) {\n dim = readNonNegativeIntegerString(node.getAttribute('dimension'));\n } else if (\n /** @type {Element} */ (node.parentNode).getAttribute('srsDimension')\n ) {\n dim = readNonNegativeIntegerString(\n /** @type {Element} */ (node.parentNode).getAttribute('srsDimension')\n );\n } else if (contextDimension) {\n dim = readNonNegativeIntegerString(contextDimension);\n }\n let x, y, z;\n const flatCoordinates = [];\n for (let i = 0, ii = coords.length; i < ii; i += dim) {\n x = parseFloat(coords[i]);\n y = parseFloat(coords[i + 1]);\n z = dim === 3 ? parseFloat(coords[i + 2]) : 0;\n if (axisOrientation.substr(0, 2) === 'en') {\n flatCoordinates.push(x, y, z);\n } else {\n flatCoordinates.push(y, x, z);\n }\n }\n return flatCoordinates;\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Point.js\").default} value Point geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writePos_(node, value, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsDimension = hasZ ? '3' : '2';\n node.setAttribute('srsDimension', srsDimension);\n const srsName = context['srsName'];\n let axisOrientation = 'enu';\n if (srsName) {\n axisOrientation = getProjection(srsName).getAxisOrientation();\n }\n const point = value.getCoordinates();\n let coords;\n // only 2d for simple features profile\n if (axisOrientation.substr(0, 2) === 'en') {\n coords = point[0] + ' ' + point[1];\n } else {\n coords = point[1] + ' ' + point[0];\n }\n if (hasZ) {\n // For newly created points, Z can be undefined.\n const z = point[2] || 0;\n coords += ' ' + z;\n }\n writeStringTextNode(node, coords);\n }\n\n /**\n * @param {Array} point Point geometry.\n * @param {string} [opt_srsName] Optional srsName\n * @param {boolean} [opt_hasZ] whether the geometry has a Z coordinate (is 3D) or not.\n * @return {string} The coords string.\n * @private\n */\n getCoords_(point, opt_srsName, opt_hasZ) {\n let axisOrientation = 'enu';\n if (opt_srsName) {\n axisOrientation = getProjection(opt_srsName).getAxisOrientation();\n }\n let coords =\n axisOrientation.substr(0, 2) === 'en'\n ? point[0] + ' ' + point[1]\n : point[1] + ' ' + point[0];\n if (opt_hasZ) {\n // For newly created points, Z can be undefined.\n const z = point[2] || 0;\n coords += ' ' + z;\n }\n\n return coords;\n }\n\n /**\n * @param {Element} node Node.\n * @param {LineString|import(\"../geom/LinearRing.js\").default} value Geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writePosList_(node, value, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsDimension = hasZ ? '3' : '2';\n node.setAttribute('srsDimension', srsDimension);\n const srsName = context['srsName'];\n // only 2d for simple features profile\n const points = value.getCoordinates();\n const len = points.length;\n const parts = new Array(len);\n let point;\n for (let i = 0; i < len; ++i) {\n point = points[i];\n parts[i] = this.getCoords_(point, srsName, hasZ);\n }\n writeStringTextNode(node, parts.join(' '));\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Point.js\").default} geometry Point geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writePoint(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const pos = createElementNS(node.namespaceURI, 'pos');\n node.appendChild(pos);\n this.writePos_(pos, geometry, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {Array<*>} objectStack Node stack.\n */\n writeEnvelope(node, extent, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const keys = ['lowerCorner', 'upperCorner'];\n const values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n ({node: node}),\n this.ENVELOPE_SERIALIZERS,\n OBJECT_PROPERTY_NODE_FACTORY,\n values,\n objectStack,\n keys,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LinearRing.js\").default} geometry LinearRing geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeLinearRing(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const posList = createElementNS(node.namespaceURI, 'posList');\n node.appendChild(posList);\n this.writePosList_(posList, geometry, objectStack);\n }\n\n /**\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Node} Node.\n * @private\n */\n RING_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const context = objectStack[objectStack.length - 1];\n const parentNode = context.node;\n const exteriorWritten = context['exteriorWritten'];\n if (exteriorWritten === undefined) {\n context['exteriorWritten'] = true;\n }\n return createElementNS(\n parentNode.namespaceURI,\n exteriorWritten !== undefined ? 'interior' : 'exterior'\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {Polygon} geometry Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeSurfaceOrPolygon(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n if (node.nodeName !== 'PolygonPatch' && srsName) {\n node.setAttribute('srsName', srsName);\n }\n if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {\n const rings = geometry.getLinearRings();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName},\n this.RING_SERIALIZERS,\n this.RING_NODE_FACTORY_,\n rings,\n objectStack,\n undefined,\n this\n );\n } else if (node.nodeName === 'Surface') {\n const patches = createElementNS(node.namespaceURI, 'patches');\n node.appendChild(patches);\n this.writeSurfacePatches_(patches, geometry, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {LineString} geometry LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeCurveOrLineString(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n if (node.nodeName !== 'LineStringSegment' && srsName) {\n node.setAttribute('srsName', srsName);\n }\n if (\n node.nodeName === 'LineString' ||\n node.nodeName === 'LineStringSegment'\n ) {\n const posList = createElementNS(node.namespaceURI, 'posList');\n node.appendChild(posList);\n this.writePosList_(posList, geometry, objectStack);\n } else if (node.nodeName === 'Curve') {\n const segments = createElementNS(node.namespaceURI, 'segments');\n node.appendChild(segments);\n this.writeCurveSegments_(segments, geometry, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {MultiPolygon} geometry MultiPolygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiSurfaceOrPolygon(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n const surface = context['surface'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const polygons = geometry.getPolygons();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName, surface: surface},\n this.SURFACEORPOLYGONMEMBER_SERIALIZERS,\n this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_,\n polygons,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/MultiPoint.js\").default} geometry MultiPoint geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiPoint(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const srsName = context['srsName'];\n const hasZ = context['hasZ'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const points = geometry.getPoints();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName},\n this.POINTMEMBER_SERIALIZERS,\n makeSimpleNodeFactory('pointMember'),\n points,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {MultiLineString} geometry MultiLineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeMultiCurveOrLineString(node, geometry, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const hasZ = context['hasZ'];\n const srsName = context['srsName'];\n const curve = context['curve'];\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n const lines = geometry.getLineStrings();\n pushSerializeAndPop(\n {node: node, hasZ: hasZ, srsName: srsName, curve: curve},\n this.LINESTRINGORCURVEMEMBER_SERIALIZERS,\n this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_,\n lines,\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/LinearRing.js\").default} ring LinearRing geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeRing(node, ring, objectStack) {\n const linearRing = createElementNS(node.namespaceURI, 'LinearRing');\n node.appendChild(linearRing);\n this.writeLinearRing(linearRing, ring, objectStack);\n }\n\n /**\n * @param {Node} node Node.\n * @param {Polygon} polygon Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeSurfaceOrPolygonMember(node, polygon, objectStack) {\n const child = this.GEOMETRY_NODE_FACTORY_(polygon, objectStack);\n if (child) {\n node.appendChild(child);\n this.writeSurfaceOrPolygon(child, polygon, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../geom/Point.js\").default} point Point geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writePointMember(node, point, objectStack) {\n const child = createElementNS(node.namespaceURI, 'Point');\n node.appendChild(child);\n this.writePoint(child, point, objectStack);\n }\n\n /**\n * @param {Node} node Node.\n * @param {LineString} line LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeLineStringOrCurveMember(node, line, objectStack) {\n const child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);\n if (child) {\n node.appendChild(child);\n this.writeCurveOrLineString(child, line, objectStack);\n }\n }\n\n /**\n * @param {Element} node Node.\n * @param {Polygon} polygon Polygon geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeSurfacePatches_(node, polygon, objectStack) {\n const child = createElementNS(node.namespaceURI, 'PolygonPatch');\n node.appendChild(child);\n this.writeSurfaceOrPolygon(child, polygon, objectStack);\n }\n\n /**\n * @param {Element} node Node.\n * @param {LineString} line LineString geometry.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeCurveSegments_(node, line, objectStack) {\n const child = createElementNS(node.namespaceURI, 'LineStringSegment');\n node.appendChild(child);\n this.writeCurveOrLineString(child, line, objectStack);\n }\n\n /**\n * @param {Node} node Node.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../extent.js\").Extent} geometry Geometry.\n * @param {Array<*>} objectStack Node stack.\n */\n writeGeometryElement(node, geometry, objectStack) {\n const context = /** @type {import(\"./Feature.js\").WriteOptions} */ (\n objectStack[objectStack.length - 1]\n );\n const item = assign({}, context);\n item['node'] = node;\n let value;\n if (Array.isArray(geometry)) {\n value = transformExtentWithOptions(\n /** @type {import(\"../extent.js\").Extent} */ (geometry),\n context\n );\n } else {\n value = transformGeometryWithOptions(\n /** @type {import(\"../geom/Geometry.js\").default} */ (geometry),\n true,\n context\n );\n }\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n (item),\n this.GEOMETRY_SERIALIZERS,\n this.GEOMETRY_NODE_FACTORY_,\n [value],\n objectStack,\n undefined,\n this\n );\n }\n\n /**\n * @param {Element} node Node.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {Array<*>} objectStack Node stack.\n */\n writeFeatureElement(node, feature, objectStack) {\n const fid = feature.getId();\n if (fid) {\n node.setAttribute('fid', /** @type {string} */ (fid));\n }\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const featureNS = context['featureNS'];\n const geometryName = feature.getGeometryName();\n if (!context.serializers) {\n context.serializers = {};\n context.serializers[featureNS] = {};\n }\n const keys = [];\n const values = [];\n if (feature.hasProperties()) {\n const properties = feature.getProperties();\n for (const key in properties) {\n const value = properties[key];\n if (value !== null) {\n keys.push(key);\n values.push(value);\n if (\n key == geometryName ||\n typeof (/** @type {?} */ (value).getSimplifiedGeometry) ===\n 'function'\n ) {\n if (!(key in context.serializers[featureNS])) {\n context.serializers[featureNS][key] = makeChildAppender(\n this.writeGeometryElement,\n this\n );\n }\n } else {\n if (!(key in context.serializers[featureNS])) {\n context.serializers[featureNS][key] =\n makeChildAppender(writeStringTextNode);\n }\n }\n }\n }\n }\n const item = assign({}, context);\n item.node = node;\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n (item),\n context.serializers,\n makeSimpleNodeFactory(undefined, featureNS),\n values,\n objectStack,\n keys\n );\n }\n\n /**\n * @param {Node} node Node.\n * @param {Array} features Features.\n * @param {Array<*>} objectStack Node stack.\n * @private\n */\n writeFeatureMembers_(node, features, objectStack) {\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const featureType = context['featureType'];\n const featureNS = context['featureNS'];\n /** @type {Object>} */\n const serializers = {};\n serializers[featureNS] = {};\n serializers[featureNS][featureType] = makeChildAppender(\n this.writeFeatureElement,\n this\n );\n const item = assign({}, context);\n item.node = node;\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */\n (item),\n serializers,\n makeSimpleNodeFactory(featureType, featureNS),\n features,\n objectStack\n );\n }\n\n /**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Node|undefined} Node.\n * @private\n */\n MULTIGEOMETRY_MEMBER_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const parentNode = objectStack[objectStack.length - 1].node;\n return createElementNS(\n this.namespace,\n MULTIGEOMETRY_TO_MEMBER_NODENAME[parentNode.nodeName]\n );\n }\n\n /**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [opt_nodeName] Node name.\n * @return {Element|undefined} Node.\n * @private\n */\n GEOMETRY_NODE_FACTORY_(value, objectStack, opt_nodeName) {\n const context = objectStack[objectStack.length - 1];\n const multiSurface = context['multiSurface'];\n const surface = context['surface'];\n const curve = context['curve'];\n const multiCurve = context['multiCurve'];\n let nodeName;\n if (!Array.isArray(value)) {\n nodeName = /** @type {import(\"../geom/Geometry.js\").default} */ (\n value\n ).getType();\n if (nodeName === 'MultiPolygon' && multiSurface === true) {\n nodeName = 'MultiSurface';\n } else if (nodeName === 'Polygon' && surface === true) {\n nodeName = 'Surface';\n } else if (nodeName === 'LineString' && curve === true) {\n nodeName = 'Curve';\n } else if (nodeName === 'MultiLineString' && multiCurve === true) {\n nodeName = 'MultiCurve';\n }\n } else {\n nodeName = 'Envelope';\n }\n return createElementNS(this.namespace, nodeName);\n }\n\n /**\n * Encode a geometry in GML 3.1.1 Simple Features.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {Node} Node.\n * @api\n */\n writeGeometryNode(geometry, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n const geom = createElementNS(this.namespace, 'geom');\n const context = {\n node: geom,\n hasZ: this.hasZ,\n srsName: this.srsName,\n curve: this.curve_,\n surface: this.surface_,\n multiSurface: this.multiSurface_,\n multiCurve: this.multiCurve_,\n };\n if (opt_options) {\n assign(context, opt_options);\n }\n this.writeGeometryElement(geom, geometry, [context]);\n return geom;\n }\n\n /**\n * Encode an array of features in the GML 3.1.1 format as an XML node.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {Element} Node.\n * @api\n */\n writeFeaturesNode(features, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n const node = createElementNS(this.namespace, 'featureMembers');\n node.setAttributeNS(\n XML_SCHEMA_INSTANCE_URI,\n 'xsi:schemaLocation',\n this.schemaLocation\n );\n const context = {\n srsName: this.srsName,\n hasZ: this.hasZ,\n curve: this.curve_,\n surface: this.surface_,\n multiSurface: this.multiSurface_,\n multiCurve: this.multiCurve_,\n featureNS: this.featureNS,\n featureType: this.featureType,\n };\n if (opt_options) {\n assign(context, opt_options);\n }\n this.writeFeatureMembers_(node, features, [context]);\n return node;\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'pos': makeReplacer(GML3.prototype.readFlatPos),\n 'posList': makeReplacer(GML3.prototype.readFlatPosList),\n 'coordinates': makeReplacer(GML2.prototype.readFlatCoordinates),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.FLAT_LINEAR_RINGS_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'interior': GML3.prototype.interiorParser,\n 'exterior': GML3.prototype.exteriorParser,\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.GEOMETRY_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'Point': makeReplacer(GMLBase.prototype.readPoint),\n 'MultiPoint': makeReplacer(GMLBase.prototype.readMultiPoint),\n 'LineString': makeReplacer(GMLBase.prototype.readLineString),\n 'MultiLineString': makeReplacer(GMLBase.prototype.readMultiLineString),\n 'LinearRing': makeReplacer(GMLBase.prototype.readLinearRing),\n 'Polygon': makeReplacer(GMLBase.prototype.readPolygon),\n 'MultiPolygon': makeReplacer(GMLBase.prototype.readMultiPolygon),\n 'Surface': makeReplacer(GML3.prototype.readSurface),\n 'MultiSurface': makeReplacer(GML3.prototype.readMultiSurface),\n 'Curve': makeReplacer(GML3.prototype.readCurve),\n 'MultiCurve': makeReplacer(GML3.prototype.readMultiCurve),\n 'Envelope': makeReplacer(GML3.prototype.readEnvelope),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.MULTICURVE_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'curveMember': makeArrayPusher(GML3.prototype.curveMemberParser),\n 'curveMembers': makeArrayPusher(GML3.prototype.curveMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.MULTISURFACE_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'surfaceMember': makeArrayPusher(GML3.prototype.surfaceMemberParser),\n 'surfaceMembers': makeArrayPusher(GML3.prototype.surfaceMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.CURVEMEMBER_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'LineString': makeArrayPusher(GMLBase.prototype.readLineString),\n 'Curve': makeArrayPusher(GML3.prototype.readCurve),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.SURFACEMEMBER_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'Polygon': makeArrayPusher(GMLBase.prototype.readPolygon),\n 'Surface': makeArrayPusher(GML3.prototype.readSurface),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.SURFACE_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'patches': makeReplacer(GML3.prototype.readPatch),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.CURVE_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'segments': makeReplacer(GML3.prototype.readSegment),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.ENVELOPE_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'lowerCorner': makeArrayPusher(GML3.prototype.readFlatPosList),\n 'upperCorner': makeArrayPusher(GML3.prototype.readFlatPosList),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.PATCHES_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'PolygonPatch': makeReplacer(GML3.prototype.readPolygonPatch),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML3.prototype.SEGMENTS_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'LineStringSegment': makeArrayExtender(\n GML3.prototype.readLineStringSegment\n ),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGMLBase.prototype.RING_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'LinearRing': makeReplacer(GMLBase.prototype.readFlatLinearRing),\n 'Ring': makeReplacer(GML3.prototype.readFlatCurveRing),\n },\n};\n\n/**\n * Encode an array of features in GML 3.1.1 Simple Features.\n *\n * @function\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {string} Result.\n * @api\n */\nGML3.prototype.writeFeatures;\n\n/**\n * @type {Object>}\n */\nGML3.prototype.RING_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'exterior': makeChildAppender(GML3.prototype.writeRing),\n 'interior': makeChildAppender(GML3.prototype.writeRing),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML3.prototype.ENVELOPE_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'lowerCorner': makeChildAppender(writeStringTextNode),\n 'upperCorner': makeChildAppender(writeStringTextNode),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML3.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'surfaceMember': makeChildAppender(\n GML3.prototype.writeSurfaceOrPolygonMember\n ),\n 'polygonMember': makeChildAppender(\n GML3.prototype.writeSurfaceOrPolygonMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML3.prototype.POINTMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'pointMember': makeChildAppender(GML3.prototype.writePointMember),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML3.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'lineStringMember': makeChildAppender(\n GML3.prototype.writeLineStringOrCurveMember\n ),\n 'curveMember': makeChildAppender(\n GML3.prototype.writeLineStringOrCurveMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML3.prototype.GEOMETRY_SERIALIZERS = {\n 'http://www.opengis.net/gml': {\n 'Curve': makeChildAppender(GML3.prototype.writeCurveOrLineString),\n 'MultiCurve': makeChildAppender(GML3.prototype.writeMultiCurveOrLineString),\n 'Point': makeChildAppender(GML3.prototype.writePoint),\n 'MultiPoint': makeChildAppender(GML3.prototype.writeMultiPoint),\n 'LineString': makeChildAppender(GML3.prototype.writeCurveOrLineString),\n 'MultiLineString': makeChildAppender(\n GML3.prototype.writeMultiCurveOrLineString\n ),\n 'LinearRing': makeChildAppender(GML3.prototype.writeLinearRing),\n 'Polygon': makeChildAppender(GML3.prototype.writeSurfaceOrPolygon),\n 'MultiPolygon': makeChildAppender(\n GML3.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Surface': makeChildAppender(GML3.prototype.writeSurfaceOrPolygon),\n 'MultiSurface': makeChildAppender(\n GML3.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Envelope': makeChildAppender(GML3.prototype.writeEnvelope),\n },\n};\n\nexport default GML3;\n","/**\n * @module ol/format/GML\n */\nimport GML3 from './GML3.js';\n\n/**\n * Feature format for reading and writing data in the GML format\n * version 3.1.1.\n * Currently only supports GML 3.1.1 Simple Features profile.\n *\n * @class\n * @param {import(\"./GMLBase.js\").Options} [opt_options]\n * Optional configuration object.\n * @api\n */\nconst GML = GML3;\n\n/**\n * Encode an array of features in GML 3.1.1 Simple Features.\n *\n * @function\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {string} Result.\n * @api\n */\nGML.prototype.writeFeatures;\n\n/**\n * Encode an array of features in the GML 3.1.1 format as an XML node.\n *\n * @function\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\n * @return {Node} Node.\n * @api\n */\nGML.prototype.writeFeaturesNode;\n\nexport default GML;\n","/**\n * @module ol/format/GML32\n */\nimport GML2 from './GML2.js';\nimport GML3 from './GML3.js';\nimport GMLBase from './GMLBase.js';\nimport {\n makeArrayExtender,\n makeArrayPusher,\n makeChildAppender,\n makeReplacer,\n} from '../xml.js';\nimport {writeStringTextNode} from '../format/xsd.js';\n\n/**\n * @classdesc Feature format for reading and writing data in the GML format\n * version 3.2.1.\n * @api\n */\nclass GML32 extends GML3 {\n /**\n * @param {import(\"./GMLBase.js\").Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n const options = /** @type {import(\"./GMLBase.js\").Options} */ (\n opt_options ? opt_options : {}\n );\n\n super(options);\n\n /**\n * @type {string}\n */\n this.schemaLocation = options.schemaLocation\n ? options.schemaLocation\n : this.namespace + ' http://schemas.opengis.net/gml/3.2.1/gml.xsd';\n }\n}\n\nGML32.prototype.namespace = 'http://www.opengis.net/gml/3.2';\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'pos': makeReplacer(GML3.prototype.readFlatPos),\n 'posList': makeReplacer(GML3.prototype.readFlatPosList),\n 'coordinates': makeReplacer(GML2.prototype.readFlatCoordinates),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.FLAT_LINEAR_RINGS_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'interior': GML3.prototype.interiorParser,\n 'exterior': GML3.prototype.exteriorParser,\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.GEOMETRY_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'Point': makeReplacer(GMLBase.prototype.readPoint),\n 'MultiPoint': makeReplacer(GMLBase.prototype.readMultiPoint),\n 'LineString': makeReplacer(GMLBase.prototype.readLineString),\n 'MultiLineString': makeReplacer(GMLBase.prototype.readMultiLineString),\n 'LinearRing': makeReplacer(GMLBase.prototype.readLinearRing),\n 'Polygon': makeReplacer(GMLBase.prototype.readPolygon),\n 'MultiPolygon': makeReplacer(GMLBase.prototype.readMultiPolygon),\n 'Surface': makeReplacer(GML32.prototype.readSurface),\n 'MultiSurface': makeReplacer(GML3.prototype.readMultiSurface),\n 'Curve': makeReplacer(GML32.prototype.readCurve),\n 'MultiCurve': makeReplacer(GML3.prototype.readMultiCurve),\n 'Envelope': makeReplacer(GML32.prototype.readEnvelope),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.MULTICURVE_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'curveMember': makeArrayPusher(GML3.prototype.curveMemberParser),\n 'curveMembers': makeArrayPusher(GML3.prototype.curveMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.MULTISURFACE_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'surfaceMember': makeArrayPusher(GML3.prototype.surfaceMemberParser),\n 'surfaceMembers': makeArrayPusher(GML3.prototype.surfaceMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.CURVEMEMBER_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'LineString': makeArrayPusher(GMLBase.prototype.readLineString),\n 'Curve': makeArrayPusher(GML3.prototype.readCurve),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.SURFACEMEMBER_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'Polygon': makeArrayPusher(GMLBase.prototype.readPolygon),\n 'Surface': makeArrayPusher(GML3.prototype.readSurface),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.SURFACE_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'patches': makeReplacer(GML3.prototype.readPatch),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.CURVE_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'segments': makeReplacer(GML3.prototype.readSegment),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.ENVELOPE_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'lowerCorner': makeArrayPusher(GML3.prototype.readFlatPosList),\n 'upperCorner': makeArrayPusher(GML3.prototype.readFlatPosList),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.PATCHES_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'PolygonPatch': makeReplacer(GML3.prototype.readPolygonPatch),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.SEGMENTS_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'LineStringSegment': makeArrayExtender(\n GML3.prototype.readLineStringSegment\n ),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.MULTIPOINT_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'pointMember': makeArrayPusher(GMLBase.prototype.pointMemberParser),\n 'pointMembers': makeArrayPusher(GMLBase.prototype.pointMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.MULTILINESTRING_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'lineStringMember': makeArrayPusher(\n GMLBase.prototype.lineStringMemberParser\n ),\n 'lineStringMembers': makeArrayPusher(\n GMLBase.prototype.lineStringMemberParser\n ),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.MULTIPOLYGON_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'polygonMember': makeArrayPusher(GMLBase.prototype.polygonMemberParser),\n 'polygonMembers': makeArrayPusher(GMLBase.prototype.polygonMemberParser),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.POINTMEMBER_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'Point': makeArrayPusher(GMLBase.prototype.readFlatCoordinatesFromNode),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.LINESTRINGMEMBER_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'LineString': makeArrayPusher(GMLBase.prototype.readLineString),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.POLYGONMEMBER_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'Polygon': makeArrayPusher(GMLBase.prototype.readPolygon),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nGML32.prototype.RING_PARSERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'LinearRing': makeReplacer(GMLBase.prototype.readFlatLinearRing),\n 'Ring': makeReplacer(GML32.prototype.readFlatCurveRing),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.RING_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'exterior': makeChildAppender(GML3.prototype.writeRing),\n 'interior': makeChildAppender(GML3.prototype.writeRing),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.ENVELOPE_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'lowerCorner': makeChildAppender(writeStringTextNode),\n 'upperCorner': makeChildAppender(writeStringTextNode),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'surfaceMember': makeChildAppender(\n GML3.prototype.writeSurfaceOrPolygonMember\n ),\n 'polygonMember': makeChildAppender(\n GML3.prototype.writeSurfaceOrPolygonMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.POINTMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'pointMember': makeChildAppender(GML3.prototype.writePointMember),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'lineStringMember': makeChildAppender(\n GML3.prototype.writeLineStringOrCurveMember\n ),\n 'curveMember': makeChildAppender(\n GML3.prototype.writeLineStringOrCurveMember\n ),\n },\n};\n\n/**\n * @type {Object>}\n */\nGML32.prototype.GEOMETRY_SERIALIZERS = {\n 'http://www.opengis.net/gml/3.2': {\n 'Curve': makeChildAppender(GML3.prototype.writeCurveOrLineString),\n 'MultiCurve': makeChildAppender(GML3.prototype.writeMultiCurveOrLineString),\n 'Point': makeChildAppender(GML32.prototype.writePoint),\n 'MultiPoint': makeChildAppender(GML3.prototype.writeMultiPoint),\n 'LineString': makeChildAppender(GML3.prototype.writeCurveOrLineString),\n 'MultiLineString': makeChildAppender(\n GML3.prototype.writeMultiCurveOrLineString\n ),\n 'LinearRing': makeChildAppender(GML3.prototype.writeLinearRing),\n 'Polygon': makeChildAppender(GML3.prototype.writeSurfaceOrPolygon),\n 'MultiPolygon': makeChildAppender(\n GML3.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Surface': makeChildAppender(GML3.prototype.writeSurfaceOrPolygon),\n 'MultiSurface': makeChildAppender(\n GML3.prototype.writeMultiSurfaceOrPolygon\n ),\n 'Envelope': makeChildAppender(GML3.prototype.writeEnvelope),\n },\n};\n\nexport default GML32;\n","/**\n * @module ol/format/filter/Filter\n */\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature filters.\n *\n * @abstract\n */\nclass Filter {\n /**\n * @param {!string} tagName The XML tag name for this filter.\n */\n constructor(tagName) {\n /**\n * @private\n * @type {!string}\n */\n this.tagName_ = tagName;\n }\n\n /**\n * The XML tag name for a filter.\n * @return {!string} Name.\n */\n getTagName() {\n return this.tagName_;\n }\n}\n\nexport default Filter;\n","/**\n * @module ol/format/filter/LogicalNary\n */\nimport Filter from './Filter.js';\nimport {assert} from '../../asserts.js';\n\n/**\n * @classdesc\n * Abstract class; normally only used for creating subclasses and not instantiated in apps.\n * Base class for WFS GetFeature n-ary logical filters.\n *\n * @abstract\n */\nclass LogicalNary extends Filter {\n /**\n * @param {!string} tagName The XML tag name for this filter.\n * @param {Array} conditions Conditions.\n */\n constructor(tagName, conditions) {\n super(tagName);\n\n /**\n * @type {Array}\n */\n this.conditions = conditions;\n assert(this.conditions.length >= 2, 57); // At least 2 conditions are required.\n }\n}\n\nexport default LogicalNary;\n","/**\n * @module ol/format/filter/And\n */\nimport LogicalNary from './LogicalNary.js';\n\n/**\n * @classdesc\n * Represents a logical `` operator between two or more filter conditions.\n *\n * @abstract\n */\nclass And extends LogicalNary {\n /**\n * @param {...import(\"./Filter.js\").default} conditions Conditions.\n */\n constructor(conditions) {\n super('And', Array.prototype.slice.call(arguments));\n }\n}\n\nexport default And;\n","/**\n * @module ol/format/filter/Bbox\n */\nimport Filter from './Filter.js';\n\n/**\n * @classdesc\n * Represents a `` operator to test whether a geometry-valued property\n * intersects a fixed bounding box\n *\n * @api\n */\nclass Bbox extends Filter {\n /**\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../../extent.js\").Extent} extent Extent.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be set\n * on geometries when this is not provided.\n */\n constructor(geometryName, extent, opt_srsName) {\n super('BBOX');\n\n /**\n * @type {!string}\n */\n this.geometryName = geometryName;\n\n /**\n * @type {import(\"../../extent.js\").Extent}\n */\n this.extent = extent;\n if (extent.length !== 4) {\n throw new Error(\n 'Expected an extent with four values ([minX, minY, maxX, maxY])'\n );\n }\n\n /**\n * @type {string|undefined}\n */\n this.srsName = opt_srsName;\n }\n}\n\nexport default Bbox;\n","/**\n * @module ol/format/WFS\n */\nimport GML2 from './GML2.js';\nimport GML3 from './GML3.js';\nimport GML32 from './GML32.js';\nimport GMLBase, {GMLNS} from './GMLBase.js';\nimport XMLFeature from './XMLFeature.js';\nimport {\n XML_SCHEMA_INSTANCE_URI,\n createElementNS,\n isDocument,\n makeArrayPusher,\n makeChildAppender,\n makeObjectPropertySetter,\n makeSimpleNodeFactory,\n parse,\n parseNode,\n pushParseAndPop,\n pushSerializeAndPop,\n} from '../xml.js';\nimport {and as andFilterFn, bbox as bboxFilterFn} from './filter.js';\nimport {assert} from '../asserts.js';\nimport {assign} from '../obj.js';\nimport {get as getProjection} from '../proj.js';\nimport {\n readNonNegativeIntegerString,\n readPositiveInteger,\n writeStringTextNode,\n} from './xsd.js';\n\n/**\n * @const\n * @type {Object>}\n */\nconst FEATURE_COLLECTION_PARSERS = {\n 'http://www.opengis.net/gml': {\n 'boundedBy': makeObjectPropertySetter(\n GMLBase.prototype.readExtentElement,\n 'bounds'\n ),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'member': makeArrayPusher(GMLBase.prototype.readFeaturesInternal),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nconst TRANSACTION_SUMMARY_PARSERS = {\n 'http://www.opengis.net/wfs': {\n 'totalInserted': makeObjectPropertySetter(readPositiveInteger),\n 'totalUpdated': makeObjectPropertySetter(readPositiveInteger),\n 'totalDeleted': makeObjectPropertySetter(readPositiveInteger),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'totalInserted': makeObjectPropertySetter(readPositiveInteger),\n 'totalUpdated': makeObjectPropertySetter(readPositiveInteger),\n 'totalDeleted': makeObjectPropertySetter(readPositiveInteger),\n },\n};\n\n/**\n * @const\n * @type {Object>}\n */\nconst TRANSACTION_RESPONSE_PARSERS = {\n 'http://www.opengis.net/wfs': {\n 'TransactionSummary': makeObjectPropertySetter(\n readTransactionSummary,\n 'transactionSummary'\n ),\n 'InsertResults': makeObjectPropertySetter(readInsertResults, 'insertIds'),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'TransactionSummary': makeObjectPropertySetter(\n readTransactionSummary,\n 'transactionSummary'\n ),\n 'InsertResults': makeObjectPropertySetter(readInsertResults, 'insertIds'),\n },\n};\n\n/**\n * @type {Object>}\n */\nconst QUERY_SERIALIZERS = {\n 'http://www.opengis.net/wfs': {\n 'PropertyName': makeChildAppender(writeStringTextNode),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'PropertyName': makeChildAppender(writeStringTextNode),\n },\n};\n\n/**\n * @type {Object>}\n */\nconst TRANSACTION_SERIALIZERS = {\n 'http://www.opengis.net/wfs': {\n 'Insert': makeChildAppender(writeFeature),\n 'Update': makeChildAppender(writeUpdate),\n 'Delete': makeChildAppender(writeDelete),\n 'Property': makeChildAppender(writeProperty),\n 'Native': makeChildAppender(writeNative),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'Insert': makeChildAppender(writeFeature),\n 'Update': makeChildAppender(writeUpdate),\n 'Delete': makeChildAppender(writeDelete),\n 'Property': makeChildAppender(writeProperty),\n 'Native': makeChildAppender(writeNative),\n },\n};\n\n/**\n * @typedef {Object} Options\n * @property {Object|string} [featureNS] The namespace URI used for features.\n * @property {Array|string} [featureType] The feature type to parse. Only used for read operations.\n * @property {GMLBase} [gmlFormat] The GML format to use to parse the response.\n * Default is `ol/format/GML2` for WFS 1.0.0, `ol/format/GML3` for WFS 1.1.0 and `ol/format/GML32` for WFS 2.0.0.\n * @property {string} [schemaLocation] Optional schemaLocation to use for serialization, this will override the default.\n * @property {string} [version='1.1.0'] WFS version to use. Can be either `1.0.0`, `1.1.0` or `2.0.0`.\n */\n\n/**\n * @typedef {Object} WriteGetFeatureOptions\n * @property {string} featureNS The namespace URI used for features.\n * @property {string} featurePrefix The prefix for the feature namespace.\n * @property {Array} featureTypes The feature type names or FeatureType objects to\n * define a unique bbox filter per feature type name (in this case, options `bbox` and `geometryName` are\n * ignored.).\n * @property {string} [srsName] SRS name. No srsName attribute will be set on\n * geometries when this is not provided.\n * @property {string} [handle] Handle.\n * @property {string} [outputFormat] Output format.\n * @property {number} [maxFeatures] Maximum number of features to fetch.\n * @property {string} [geometryName] Geometry name to use in a BBOX filter.\n * @property {Array} [propertyNames] Optional list of property names to serialize.\n * @property {string} [viewParams] viewParams GeoServer vendor parameter.\n * @property {number} [startIndex] Start index to use for WFS paging. This is a\n * WFS 2.0 feature backported to WFS 1.1.0 by some Web Feature Services.\n * @property {number} [count] Number of features to retrieve when paging. This is a\n * WFS 2.0 feature backported to WFS 1.1.0 by some Web Feature Services. Please note that some\n * Web Feature Services have repurposed `maxfeatures` instead.\n * @property {import(\"../extent.js\").Extent} [bbox] Extent to use for the BBOX filter. The `geometryName`\n * option must be set.\n * @property {import(\"./filter/Filter.js\").default} [filter] Filter condition. See\n * {@link module:ol/format/filter} for more information.\n * @property {string} [resultType] Indicates what response should be returned,\n * e.g. `hits` only includes the `numberOfFeatures` attribute in the response and no features.\n */\n\n/**\n * @typedef {Object} FeatureType\n * @property {!string} name The feature type name.\n * @property {!import(\"../extent.js\").Extent} bbox Extent to use for the BBOX filter.\n * @property {!string} geometryName Geometry name to use in the BBOX filter.\n */\n\n/**\n * @typedef {Object} WriteTransactionOptions\n * @property {string} featureNS The namespace URI used for features.\n * @property {string} featurePrefix The prefix for the feature namespace.\n * @property {string} featureType The feature type name.\n * @property {string} [srsName] SRS name. No srsName attribute will be set on\n * geometries when this is not provided.\n * @property {string} [handle] Handle.\n * @property {boolean} [hasZ] Must be set to true if the transaction is for\n * a 3D layer. This will allow the Z coordinate to be included in the transaction.\n * @property {Array} nativeElements Native elements. Currently not supported.\n * @property {import(\"./GMLBase.js\").Options} [gmlOptions] GML options for the WFS transaction writer.\n * @property {string} [version='1.1.0'] WFS version to use for the transaction. Can be either `1.0.0`, `1.1.0` or `2.0.0`.\n */\n\n/**\n * Number of features; bounds/extent.\n * @typedef {Object} FeatureCollectionMetadata\n * @property {number} numberOfFeatures NumberOfFeatures.\n * @property {import(\"../extent.js\").Extent} bounds Bounds.\n */\n\n/**\n * Total deleted; total inserted; total updated; array of insert ids.\n * @typedef {Object} TransactionResponse\n * @property {number} totalDeleted TotalDeleted.\n * @property {number} totalInserted TotalInserted.\n * @property {number} totalUpdated TotalUpdated.\n * @property {Array} insertIds InsertIds.\n */\n\n/**\n * @type {string}\n */\nconst FEATURE_PREFIX = 'feature';\n\n/**\n * @type {string}\n */\nconst XMLNS = 'http://www.w3.org/2000/xmlns/';\n\n/**\n * @type {Object}\n */\nconst OGCNS = {\n '2.0.0': 'http://www.opengis.net/ogc/1.1',\n '1.1.0': 'http://www.opengis.net/ogc',\n '1.0.0': 'http://www.opengis.net/ogc',\n};\n\n/**\n * @type {Object}\n */\nconst WFSNS = {\n '2.0.0': 'http://www.opengis.net/wfs/2.0',\n '1.1.0': 'http://www.opengis.net/wfs',\n '1.0.0': 'http://www.opengis.net/wfs',\n};\n\n/**\n * @type {Object}\n */\nconst FESNS = {\n '2.0.0': 'http://www.opengis.net/fes/2.0',\n '1.1.0': 'http://www.opengis.net/fes',\n '1.0.0': 'http://www.opengis.net/fes',\n};\n\n/**\n * @type {Object}\n */\nconst SCHEMA_LOCATIONS = {\n '2.0.0':\n 'http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd',\n '1.1.0':\n 'http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd',\n '1.0.0':\n 'http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd',\n};\n\n/**\n * @type {Object}\n */\nconst GML_FORMATS = {\n '2.0.0': GML32,\n '1.1.0': GML3,\n '1.0.0': GML2,\n};\n\n/**\n * @const\n * @type {string}\n */\nconst DEFAULT_VERSION = '1.1.0';\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the WFS format.\n * By default, supports WFS version 1.1.0. You can pass a GML format\n * as option to override the default.\n * Also see {@link module:ol/format/GMLBase~GMLBase} which is used by this format.\n *\n * @api\n */\nclass WFS extends XMLFeature {\n /**\n * @param {Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {string}\n */\n this.version_ = options.version ? options.version : DEFAULT_VERSION;\n\n /**\n * @private\n * @type {Array|string|undefined}\n */\n this.featureType_ = options.featureType;\n\n /**\n * @private\n * @type {Object|string|undefined}\n */\n this.featureNS_ = options.featureNS;\n\n /**\n * @private\n * @type {GMLBase}\n */\n this.gmlFormat_ = options.gmlFormat\n ? options.gmlFormat\n : new GML_FORMATS[this.version_]();\n\n /**\n * @private\n * @type {string}\n */\n this.schemaLocation_ = options.schemaLocation\n ? options.schemaLocation\n : SCHEMA_LOCATIONS[this.version_];\n }\n\n /**\n * @return {Array|string|undefined} featureType\n */\n getFeatureType() {\n return this.featureType_;\n }\n\n /**\n * @param {Array|string|undefined} featureType Feature type(s) to parse.\n */\n setFeatureType(featureType) {\n this.featureType_ = featureType;\n }\n\n /**\n * @protected\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {Array} Features.\n */\n readFeaturesFromNode(node, opt_options) {\n /** @type {import(\"../xml.js\").NodeStackItem} */\n const context = {\n node,\n };\n assign(context, {\n 'featureType': this.featureType_,\n 'featureNS': this.featureNS_,\n });\n\n assign(context, this.getReadOptions(node, opt_options ? opt_options : {}));\n const objectStack = [context];\n let featuresNS;\n if (this.version_ === '2.0.0') {\n featuresNS = FEATURE_COLLECTION_PARSERS;\n } else {\n featuresNS = this.gmlFormat_.FEATURE_COLLECTION_PARSERS;\n }\n let features = pushParseAndPop(\n [],\n featuresNS,\n node,\n objectStack,\n this.gmlFormat_\n );\n if (!features) {\n features = [];\n }\n return features;\n }\n\n /**\n * Read transaction response of the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @return {TransactionResponse|undefined} Transaction response.\n * @api\n */\n readTransactionResponse(source) {\n if (!source) {\n return undefined;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readTransactionResponseFromDocument(doc);\n } else if (isDocument(source)) {\n return this.readTransactionResponseFromDocument(\n /** @type {Document} */ (source)\n );\n } else {\n return this.readTransactionResponseFromNode(\n /** @type {Element} */ (source)\n );\n }\n }\n\n /**\n * Read feature collection metadata of the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @return {FeatureCollectionMetadata|undefined}\n * FeatureCollection metadata.\n * @api\n */\n readFeatureCollectionMetadata(source) {\n if (!source) {\n return undefined;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readFeatureCollectionMetadataFromDocument(doc);\n } else if (isDocument(source)) {\n return this.readFeatureCollectionMetadataFromDocument(\n /** @type {Document} */ (source)\n );\n } else {\n return this.readFeatureCollectionMetadataFromNode(\n /** @type {Element} */ (source)\n );\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @return {FeatureCollectionMetadata|undefined}\n * FeatureCollection metadata.\n */\n readFeatureCollectionMetadataFromDocument(doc) {\n for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n if (n.nodeType == Node.ELEMENT_NODE) {\n return this.readFeatureCollectionMetadataFromNode(\n /** @type {Element} */ (n)\n );\n }\n }\n return undefined;\n }\n\n /**\n * @param {Element} node Node.\n * @return {FeatureCollectionMetadata|undefined}\n * FeatureCollection metadata.\n */\n readFeatureCollectionMetadataFromNode(node) {\n const result = {};\n const value = readNonNegativeIntegerString(\n node.getAttribute('numberOfFeatures')\n );\n result['numberOfFeatures'] = value;\n return pushParseAndPop(\n /** @type {FeatureCollectionMetadata} */ (result),\n FEATURE_COLLECTION_PARSERS,\n node,\n [],\n this.gmlFormat_\n );\n }\n\n /**\n * @param {Document} doc Document.\n * @return {TransactionResponse|undefined} Transaction response.\n */\n readTransactionResponseFromDocument(doc) {\n for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n if (n.nodeType == Node.ELEMENT_NODE) {\n return this.readTransactionResponseFromNode(/** @type {Element} */ (n));\n }\n }\n return undefined;\n }\n\n /**\n * @param {Element} node Node.\n * @return {TransactionResponse|undefined} Transaction response.\n */\n readTransactionResponseFromNode(node) {\n return pushParseAndPop(\n /** @type {TransactionResponse} */ ({}),\n TRANSACTION_RESPONSE_PARSERS,\n node,\n []\n );\n }\n\n /**\n * Encode format as WFS `GetFeature` and return the Node.\n *\n * @param {WriteGetFeatureOptions} options Options.\n * @return {Node} Result.\n * @api\n */\n writeGetFeature(options) {\n const node = createElementNS(WFSNS[this.version_], 'GetFeature');\n node.setAttribute('service', 'WFS');\n node.setAttribute('version', this.version_);\n if (options.handle) {\n node.setAttribute('handle', options.handle);\n }\n if (options.outputFormat) {\n node.setAttribute('outputFormat', options.outputFormat);\n }\n if (options.maxFeatures !== undefined) {\n node.setAttribute('maxFeatures', String(options.maxFeatures));\n }\n if (options.resultType) {\n node.setAttribute('resultType', options.resultType);\n }\n if (options.startIndex !== undefined) {\n node.setAttribute('startIndex', String(options.startIndex));\n }\n if (options.count !== undefined) {\n node.setAttribute('count', String(options.count));\n }\n if (options.viewParams !== undefined) {\n node.setAttribute('viewParams', options.viewParams);\n }\n node.setAttributeNS(\n XML_SCHEMA_INSTANCE_URI,\n 'xsi:schemaLocation',\n this.schemaLocation_\n );\n /** @type {import(\"../xml.js\").NodeStackItem} */\n const context = {\n node,\n };\n assign(context, {\n 'version': this.version_,\n 'srsName': options.srsName,\n 'featureNS': options.featureNS ? options.featureNS : this.featureNS_,\n 'featurePrefix': options.featurePrefix,\n 'propertyNames': options.propertyNames ? options.propertyNames : [],\n });\n assert(Array.isArray(options.featureTypes), 11); // `options.featureTypes` must be an Array\n if (typeof options.featureTypes[0] === 'string') {\n let filter = options.filter;\n if (options.bbox) {\n assert(options.geometryName, 12); // `options.geometryName` must also be provided when `options.bbox` is set\n filter = this.combineBboxAndFilter(\n options.geometryName,\n options.bbox,\n options.srsName,\n filter\n );\n }\n assign(context, {\n 'geometryName': options.geometryName,\n 'filter': filter,\n });\n writeGetFeature(\n node,\n /** @type {!Array} */ (options.featureTypes),\n [context]\n );\n } else {\n // Write one query node per element in featuresType.\n options.featureTypes.forEach((/** @type {FeatureType} */ featureType) => {\n const completeFilter = this.combineBboxAndFilter(\n featureType.geometryName,\n featureType.bbox,\n options.srsName,\n options.filter\n );\n assign(context, {\n 'geometryName': featureType.geometryName,\n 'filter': completeFilter,\n });\n writeGetFeature(node, [featureType.name], [context]);\n });\n }\n return node;\n }\n\n /**\n * Create a bbox filter and combine it with another optional filter.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../extent.js\").Extent} extent Extent.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @param {import(\"./filter/Filter.js\").default} [opt_filter] Filter condition.\n * @return {import(\"./filter/Filter.js\").default} The filter.\n */\n combineBboxAndFilter(geometryName, extent, opt_srsName, opt_filter) {\n const bboxFilter = bboxFilterFn(geometryName, extent, opt_srsName);\n if (opt_filter) {\n // if bbox and filter are both set, combine the two into a single filter\n return andFilterFn(opt_filter, bboxFilter);\n }\n return bboxFilter;\n }\n\n /**\n * Encode format as WFS `Transaction` and return the Node.\n *\n * @param {Array} inserts The features to insert.\n * @param {Array} updates The features to update.\n * @param {Array} deletes The features to delete.\n * @param {WriteTransactionOptions} options Write options.\n * @return {Node} Result.\n * @api\n */\n writeTransaction(inserts, updates, deletes, options) {\n const objectStack = [];\n const version = options.version ? options.version : this.version_;\n const node = createElementNS(WFSNS[version], 'Transaction');\n\n node.setAttribute('service', 'WFS');\n node.setAttribute('version', version);\n let baseObj;\n /** @type {import(\"../xml.js\").NodeStackItem} */\n if (options) {\n baseObj = options.gmlOptions ? options.gmlOptions : {};\n if (options.handle) {\n node.setAttribute('handle', options.handle);\n }\n }\n node.setAttributeNS(\n XML_SCHEMA_INSTANCE_URI,\n 'xsi:schemaLocation',\n SCHEMA_LOCATIONS[version]\n );\n\n const request = createTransactionRequest(node, baseObj, version, options);\n if (inserts) {\n serializeTransactionRequest('Insert', inserts, objectStack, request);\n }\n if (updates) {\n serializeTransactionRequest('Update', updates, objectStack, request);\n }\n if (deletes) {\n serializeTransactionRequest('Delete', deletes, objectStack, request);\n }\n if (options.nativeElements) {\n serializeTransactionRequest(\n 'Native',\n options.nativeElements,\n objectStack,\n request\n );\n }\n return node;\n }\n\n /**\n * @param {Document} doc Document.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromDocument(doc) {\n for (let n = doc.firstChild; n; n = n.nextSibling) {\n if (n.nodeType == Node.ELEMENT_NODE) {\n return this.readProjectionFromNode(/** @type {Element} */ (n));\n }\n }\n return null;\n }\n\n /**\n * @param {Element} node Node.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromNode(node) {\n if (node.firstElementChild && node.firstElementChild.firstElementChild) {\n node = node.firstElementChild.firstElementChild;\n for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n if (\n !(\n n.childNodes.length === 0 ||\n (n.childNodes.length === 1 && n.firstChild.nodeType === 3)\n )\n ) {\n const objectStack = [{}];\n this.gmlFormat_.readGeometryElement(n, objectStack);\n return getProjection(objectStack.pop().srsName);\n }\n }\n }\n\n return null;\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {*} baseObj Base object.\n * @param {string} version Version.\n * @param {WriteTransactionOptions} options Options.\n * @return {Object} Request object.\n */\nfunction createTransactionRequest(node, baseObj, version, options) {\n const featurePrefix = options.featurePrefix\n ? options.featurePrefix\n : FEATURE_PREFIX;\n let gmlVersion;\n if (version === '1.0.0') {\n gmlVersion = 2;\n } else if (version === '1.1.0') {\n gmlVersion = 3;\n } else if (version === '2.0.0') {\n gmlVersion = 3.2;\n }\n const obj = assign(\n {node},\n {\n version,\n 'featureNS': options.featureNS,\n 'featureType': options.featureType,\n 'featurePrefix': featurePrefix,\n 'gmlVersion': gmlVersion,\n 'hasZ': options.hasZ,\n 'srsName': options.srsName,\n },\n baseObj\n );\n return obj;\n}\n\n/**\n * @param {string} type Request type.\n * @param {Array} features Features.\n * @param {Array<*>} objectStack Object stack.\n * @param {Element} request Transaction Request.\n */\nfunction serializeTransactionRequest(type, features, objectStack, request) {\n pushSerializeAndPop(\n request,\n TRANSACTION_SERIALIZERS,\n makeSimpleNodeFactory(type),\n features,\n objectStack\n );\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Transaction Summary.\n */\nfunction readTransactionSummary(node, objectStack) {\n return pushParseAndPop({}, TRANSACTION_SUMMARY_PARSERS, node, objectStack);\n}\n\n/**\n * @const\n * @type {Object>}\n */\nconst OGC_FID_PARSERS = {\n 'http://www.opengis.net/ogc': {\n 'FeatureId': makeArrayPusher(function (node, objectStack) {\n return node.getAttribute('fid');\n }),\n },\n 'http://www.opengis.net/ogc/1.1': {\n 'FeatureId': makeArrayPusher(function (node, objectStack) {\n return node.getAttribute('fid');\n }),\n },\n};\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction fidParser(node, objectStack) {\n parseNode(OGC_FID_PARSERS, node, objectStack);\n}\n\n/**\n * @const\n * @type {Object>}\n */\nconst INSERT_RESULTS_PARSERS = {\n 'http://www.opengis.net/wfs': {\n 'Feature': fidParser,\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'Feature': fidParser,\n },\n};\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Insert results.\n */\nfunction readInsertResults(node, objectStack) {\n return pushParseAndPop([], INSERT_RESULTS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeFeature(node, feature, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const featureType = context['featureType'];\n const featureNS = context['featureNS'];\n const gmlVersion = context['gmlVersion'];\n const child = createElementNS(featureNS, featureType);\n node.appendChild(child);\n if (gmlVersion === 2) {\n GML2.prototype.writeFeatureElement(child, feature, objectStack);\n } else if (gmlVersion === 3) {\n GML3.prototype.writeFeatureElement(child, feature, objectStack);\n } else {\n GML32.prototype.writeFeatureElement(child, feature, objectStack);\n }\n}\n\n/**\n * @param {Node} node Node.\n * @param {number|string} fid Feature identifier.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeOgcFidFilter(node, fid, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const version = context['version'];\n const ns = OGCNS[version];\n const filter = createElementNS(ns, 'Filter');\n const child = createElementNS(ns, 'FeatureId');\n filter.appendChild(child);\n child.setAttribute('fid', /** @type {string} */ (fid));\n node.appendChild(filter);\n}\n\n/**\n * @param {string|undefined} featurePrefix The prefix of the feature.\n * @param {string} featureType The type of the feature.\n * @return {string} The value of the typeName property.\n */\nfunction getTypeName(featurePrefix, featureType) {\n featurePrefix = featurePrefix ? featurePrefix : FEATURE_PREFIX;\n const prefix = featurePrefix + ':';\n // The featureType already contains the prefix.\n if (featureType.indexOf(prefix) === 0) {\n return featureType;\n } else {\n return prefix + featureType;\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeDelete(node, feature, objectStack) {\n const context = objectStack[objectStack.length - 1];\n assert(feature.getId() !== undefined, 26); // Features must have an id set\n const featureType = context['featureType'];\n const featurePrefix = context['featurePrefix'];\n const featureNS = context['featureNS'];\n const typeName = getTypeName(featurePrefix, featureType);\n node.setAttribute('typeName', typeName);\n node.setAttributeNS(XMLNS, 'xmlns:' + featurePrefix, featureNS);\n const fid = feature.getId();\n if (fid !== undefined) {\n writeOgcFidFilter(node, fid, objectStack);\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeUpdate(node, feature, objectStack) {\n const context = objectStack[objectStack.length - 1];\n assert(feature.getId() !== undefined, 27); // Features must have an id set\n const version = context['version'];\n const featureType = context['featureType'];\n const featurePrefix = context['featurePrefix'];\n const featureNS = context['featureNS'];\n const typeName = getTypeName(featurePrefix, featureType);\n const geometryName = feature.getGeometryName();\n node.setAttribute('typeName', typeName);\n node.setAttributeNS(XMLNS, 'xmlns:' + featurePrefix, featureNS);\n const fid = feature.getId();\n if (fid !== undefined) {\n const keys = feature.getKeys();\n const values = [];\n for (let i = 0, ii = keys.length; i < ii; i++) {\n const value = feature.get(keys[i]);\n if (value !== undefined) {\n let name = keys[i];\n if (\n value &&\n typeof (/** @type {?} */ (value).getSimplifiedGeometry) === 'function'\n ) {\n name = geometryName;\n }\n values.push({name: name, value: value});\n }\n }\n pushSerializeAndPop(\n /** @type {import(\"../xml.js\").NodeStackItem} */ ({\n version,\n 'gmlVersion': context['gmlVersion'],\n node,\n 'hasZ': context['hasZ'],\n 'srsName': context['srsName'],\n }),\n TRANSACTION_SERIALIZERS,\n makeSimpleNodeFactory('Property'),\n values,\n objectStack\n );\n writeOgcFidFilter(node, fid, objectStack);\n }\n}\n\n/**\n * @param {Node} node Node.\n * @param {Object} pair Property name and value.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeProperty(node, pair, objectStack) {\n const context = objectStack[objectStack.length - 1];\n const version = context['version'];\n const ns = WFSNS[version];\n const name = createElementNS(ns, 'Name');\n const gmlVersion = context['gmlVersion'];\n node.appendChild(name);\n writeStringTextNode(name, pair.name);\n if (pair.value !== undefined && pair.value !== null) {\n const value = createElementNS(ns, 'Value');\n node.appendChild(value);\n if (\n pair.value &&\n typeof (/** @type {?} */ (pair.value).getSimplifiedGeometry) ===\n 'function'\n ) {\n if (gmlVersion === 2) {\n GML2.prototype.writeGeometryElement(value, pair.value, objectStack);\n } else if (gmlVersion === 3) {\n GML3.prototype.writeGeometryElement(value, pair.value, objectStack);\n } else {\n GML32.prototype.writeGeometryElement(value, pair.value, objectStack);\n }\n } else {\n writeStringTextNode(value, pair.value);\n }\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {{vendorId: string, safeToIgnore: boolean, value: string}} nativeElement The native element.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeNative(node, nativeElement, objectStack) {\n if (nativeElement.vendorId) {\n node.setAttribute('vendorId', nativeElement.vendorId);\n }\n if (nativeElement.safeToIgnore !== undefined) {\n node.setAttribute('safeToIgnore', String(nativeElement.safeToIgnore));\n }\n if (nativeElement.value !== undefined) {\n writeStringTextNode(node, nativeElement.value);\n }\n}\n\n/**\n * @type {Object>}\n */\nconst GETFEATURE_SERIALIZERS = {\n 'http://www.opengis.net/wfs': {\n 'Query': makeChildAppender(writeQuery),\n },\n 'http://www.opengis.net/wfs/2.0': {\n 'Query': makeChildAppender(writeQuery),\n },\n 'http://www.opengis.net/ogc': {\n 'During': makeChildAppender(writeDuringFilter),\n 'And': makeChildAppender(writeLogicalFilter),\n 'Or': makeChildAppender(writeLogicalFilter),\n 'Not': makeChildAppender(writeNotFilter),\n 'BBOX': makeChildAppender(writeBboxFilter),\n 'Contains': makeChildAppender(writeSpatialFilter),\n 'Intersects': makeChildAppender(writeSpatialFilter),\n 'Within': makeChildAppender(writeSpatialFilter),\n 'DWithin': makeChildAppender(writeDWithinFilter),\n 'PropertyIsEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsNotEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsLessThan': makeChildAppender(writeComparisonFilter),\n 'PropertyIsLessThanOrEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsGreaterThan': makeChildAppender(writeComparisonFilter),\n 'PropertyIsGreaterThanOrEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsNull': makeChildAppender(writeIsNullFilter),\n 'PropertyIsBetween': makeChildAppender(writeIsBetweenFilter),\n 'PropertyIsLike': makeChildAppender(writeIsLikeFilter),\n },\n 'http://www.opengis.net/fes/2.0': {\n 'During': makeChildAppender(writeDuringFilter),\n 'And': makeChildAppender(writeLogicalFilter),\n 'Or': makeChildAppender(writeLogicalFilter),\n 'Not': makeChildAppender(writeNotFilter),\n 'BBOX': makeChildAppender(writeBboxFilter),\n 'Contains': makeChildAppender(writeSpatialFilter),\n 'Disjoint': makeChildAppender(writeSpatialFilter),\n 'Intersects': makeChildAppender(writeSpatialFilter),\n 'ResourceId': makeChildAppender(writeResourceIdFilter),\n 'Within': makeChildAppender(writeSpatialFilter),\n 'DWithin': makeChildAppender(writeDWithinFilter),\n 'PropertyIsEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsNotEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsLessThan': makeChildAppender(writeComparisonFilter),\n 'PropertyIsLessThanOrEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsGreaterThan': makeChildAppender(writeComparisonFilter),\n 'PropertyIsGreaterThanOrEqualTo': makeChildAppender(writeComparisonFilter),\n 'PropertyIsNull': makeChildAppender(writeIsNullFilter),\n 'PropertyIsBetween': makeChildAppender(writeIsBetweenFilter),\n 'PropertyIsLike': makeChildAppender(writeIsLikeFilter),\n },\n};\n\n/**\n * @param {Element} node Node.\n * @param {string} featureType Feature type.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeQuery(node, featureType, objectStack) {\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const version = context['version'];\n const featurePrefix = context['featurePrefix'];\n const featureNS = context['featureNS'];\n const propertyNames = context['propertyNames'];\n const srsName = context['srsName'];\n let typeName;\n // If feature prefix is not defined, we must not use the default prefix.\n if (featurePrefix) {\n typeName = getTypeName(featurePrefix, featureType);\n } else {\n typeName = featureType;\n }\n let typeNameAttr;\n if (version === '2.0.0') {\n typeNameAttr = 'typeNames';\n } else {\n typeNameAttr = 'typeName';\n }\n node.setAttribute(typeNameAttr, typeName);\n if (srsName) {\n node.setAttribute('srsName', srsName);\n }\n if (featureNS) {\n node.setAttributeNS(XMLNS, 'xmlns:' + featurePrefix, featureNS);\n }\n const item = /** @type {import(\"../xml.js\").NodeStackItem} */ (\n assign({}, context)\n );\n item.node = node;\n pushSerializeAndPop(\n item,\n QUERY_SERIALIZERS,\n makeSimpleNodeFactory('PropertyName'),\n propertyNames,\n objectStack\n );\n const filter = context['filter'];\n if (filter) {\n const child = createElementNS(getFilterNS(version), 'Filter');\n node.appendChild(child);\n writeFilterCondition(child, filter, objectStack);\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"./filter/Filter.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeFilterCondition(node, filter, objectStack) {\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n /** @type {import(\"../xml.js\").NodeStackItem} */\n const item = {node};\n assign(item, {context});\n pushSerializeAndPop(\n item,\n GETFEATURE_SERIALIZERS,\n makeSimpleNodeFactory(filter.getTagName()),\n [filter],\n objectStack\n );\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/Bbox.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeBboxFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n parent['srsName'] = filter.srsName;\n const format = GML_FORMATS[version];\n\n writePropertyName(version, node, filter.geometryName);\n format.prototype.writeGeometryElement(node, filter.extent, objectStack);\n}\n\n/**\n * @param {Element} node Element.\n * @param {import(\"./filter/ResourceId.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeResourceIdFilter(node, filter, objectStack) {\n node.setAttribute('rid', /** @type {string} */ (filter.rid));\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/Spatial.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeSpatialFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n parent['srsName'] = filter.srsName;\n const format = GML_FORMATS[version];\n\n writePropertyName(version, node, filter.geometryName);\n format.prototype.writeGeometryElement(node, filter.geometry, objectStack);\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/DWithin.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeDWithinFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n writeSpatialFilter(node, filter, objectStack);\n const distance = createElementNS(getFilterNS(version), 'Distance');\n writeStringTextNode(distance, filter.distance.toString());\n if (version === '2.0.0') {\n distance.setAttribute('uom', filter.unit);\n } else {\n distance.setAttribute('units', filter.unit);\n }\n node.appendChild(distance);\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/During.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeDuringFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n\n writeExpression(FESNS[version], 'ValueReference', node, filter.propertyName);\n const timePeriod = createElementNS(GMLNS, 'TimePeriod');\n\n node.appendChild(timePeriod);\n\n const begin = createElementNS(GMLNS, 'begin');\n timePeriod.appendChild(begin);\n writeTimeInstant(begin, filter.begin);\n\n const end = createElementNS(GMLNS, 'end');\n timePeriod.appendChild(end);\n writeTimeInstant(end, filter.end);\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"./filter/LogicalNary.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeLogicalFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n /** @type {import(\"../xml.js\").NodeStackItem} */\n const item = {node};\n assign(item, {context});\n const conditions = filter.conditions;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n const condition = conditions[i];\n pushSerializeAndPop(\n item,\n GETFEATURE_SERIALIZERS,\n makeSimpleNodeFactory(condition.getTagName()),\n [condition],\n objectStack\n );\n }\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"./filter/Not.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeNotFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n /** @type {import(\"../xml.js\").NodeStackItem} */\n const item = {node};\n assign(item, {context});\n const condition = filter.condition;\n pushSerializeAndPop(\n item,\n GETFEATURE_SERIALIZERS,\n makeSimpleNodeFactory(condition.getTagName()),\n [condition],\n objectStack\n );\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"./filter/ComparisonBinary.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeComparisonFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n if (filter.matchCase !== undefined) {\n node.setAttribute('matchCase', filter.matchCase.toString());\n }\n writePropertyName(version, node, filter.propertyName);\n writeLiteral(version, node, '' + filter.expression);\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/IsNull.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeIsNullFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n writePropertyName(version, node, filter.propertyName);\n}\n\n/**\n * @param {Node} node Node.\n * @param {import(\"./filter/IsBetween.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeIsBetweenFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n const ns = getFilterNS(version);\n\n writePropertyName(version, node, filter.propertyName);\n\n const lowerBoundary = createElementNS(ns, 'LowerBoundary');\n node.appendChild(lowerBoundary);\n writeLiteral(version, lowerBoundary, '' + filter.lowerBoundary);\n\n const upperBoundary = createElementNS(ns, 'UpperBoundary');\n node.appendChild(upperBoundary);\n writeLiteral(version, upperBoundary, '' + filter.upperBoundary);\n}\n\n/**\n * @param {Element} node Node.\n * @param {import(\"./filter/IsLike.js\").default} filter Filter.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeIsLikeFilter(node, filter, objectStack) {\n const parent = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const context = parent['context'];\n const version = context['version'];\n node.setAttribute('wildCard', filter.wildCard);\n node.setAttribute('singleChar', filter.singleChar);\n node.setAttribute('escapeChar', filter.escapeChar);\n if (filter.matchCase !== undefined) {\n node.setAttribute('matchCase', filter.matchCase.toString());\n }\n writePropertyName(version, node, filter.propertyName);\n writeLiteral(version, node, '' + filter.pattern);\n}\n\n/**\n * @param {string} ns Namespace.\n * @param {string} tagName Tag name.\n * @param {Node} node Node.\n * @param {string} value Value.\n */\nfunction writeExpression(ns, tagName, node, value) {\n const property = createElementNS(ns, tagName);\n writeStringTextNode(property, value);\n node.appendChild(property);\n}\n\n/**\n * @param {string} version Version.\n * @param {Node} node Node.\n * @param {string} value PropertyName value.\n */\nfunction writeLiteral(version, node, value) {\n writeExpression(getFilterNS(version), 'Literal', node, value);\n}\n\n/**\n * @param {string} version Version.\n * @param {Node} node Node.\n * @param {string} value PropertyName value.\n */\nfunction writePropertyName(version, node, value) {\n if (version === '2.0.0') {\n writeExpression(FESNS[version], 'ValueReference', node, value);\n } else {\n writeExpression(OGCNS[version], 'PropertyName', node, value);\n }\n}\n\n/**\n * @param {Node} node Node.\n * @param {string} time PropertyName value.\n */\nfunction writeTimeInstant(node, time) {\n const timeInstant = createElementNS(GMLNS, 'TimeInstant');\n node.appendChild(timeInstant);\n\n const timePosition = createElementNS(GMLNS, 'timePosition');\n timeInstant.appendChild(timePosition);\n writeStringTextNode(timePosition, time);\n}\n\n/**\n * Encode filter as WFS `Filter` and return the Node.\n *\n * @param {import(\"./filter/Filter.js\").default} filter Filter.\n * @param {string} opt_version WFS version. If not provided defaults to '1.1.0'\n * @return {Node} Result.\n * @api\n */\nexport function writeFilter(filter, opt_version) {\n const version = opt_version || '1.1.0';\n const child = createElementNS(getFilterNS(version), 'Filter');\n const context = {\n node: child,\n };\n assign(context, {\n 'version': version,\n 'filter': filter,\n });\n writeFilterCondition(child, filter, [context]);\n return child;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array} featureTypes Feature types.\n * @param {Array<*>} objectStack Node stack.\n */\nfunction writeGetFeature(node, featureTypes, objectStack) {\n const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n const item = /** @type {import(\"../xml.js\").NodeStackItem} */ (\n assign({}, context)\n );\n item.node = node;\n pushSerializeAndPop(\n item,\n GETFEATURE_SERIALIZERS,\n makeSimpleNodeFactory('Query'),\n featureTypes,\n objectStack\n );\n}\n\nfunction getFilterNS(version) {\n let ns;\n if (version === '2.0.0') {\n ns = FESNS[version];\n } else {\n ns = OGCNS[version];\n }\n return ns;\n}\n\nexport default WFS;\n","/**\n * @module ol/format/filter\n */\nimport And from './filter/And.js';\nimport Bbox from './filter/Bbox.js';\nimport Contains from './filter/Contains.js';\nimport DWithin from './filter/DWithin.js';\nimport Disjoint from './filter/Disjoint.js';\nimport During from './filter/During.js';\nimport EqualTo from './filter/EqualTo.js';\nimport GreaterThan from './filter/GreaterThan.js';\nimport GreaterThanOrEqualTo from './filter/GreaterThanOrEqualTo.js';\nimport Intersects from './filter/Intersects.js';\nimport IsBetween from './filter/IsBetween.js';\nimport IsLike from './filter/IsLike.js';\nimport IsNull from './filter/IsNull.js';\nimport LessThan from './filter/LessThan.js';\nimport LessThanOrEqualTo from './filter/LessThanOrEqualTo.js';\nimport Not from './filter/Not.js';\nimport NotEqualTo from './filter/NotEqualTo.js';\nimport Or from './filter/Or.js';\nimport ResourceId from './filter/ResourceId.js';\nimport Within from './filter/Within.js';\n\n/**\n * Create a logical `` operator between two or more filter conditions.\n *\n * @param {...import(\"./filter/Filter.js\").default} conditions Filter conditions.\n * @return {!And} `` operator.\n * @api\n */\nexport function and(conditions) {\n const params = [null].concat(Array.prototype.slice.call(arguments));\n return new (Function.prototype.bind.apply(And, params))();\n}\n\n/**\n * Create a logical `` operator between two or more filter conditions.\n *\n * @param {...import(\"./filter/Filter.js\").default} conditions Filter conditions.\n * @return {!Or} `` operator.\n * @api\n */\nexport function or(conditions) {\n const params = [null].concat(Array.prototype.slice.call(arguments));\n return new (Function.prototype.bind.apply(Or, params))();\n}\n\n/**\n * Represents a logical `` operator for a filter condition.\n *\n * @param {!import(\"./filter/Filter.js\").default} condition Filter condition.\n * @return {!Not} `` operator.\n * @api\n */\nexport function not(condition) {\n return new Not(condition);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * intersects a fixed bounding box\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../extent.js\").Extent} extent Extent.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!Bbox} `` operator.\n * @api\n */\nexport function bbox(geometryName, extent, opt_srsName) {\n return new Bbox(geometryName, extent, opt_srsName);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * contains a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!Contains} `` operator.\n * @api\n */\nexport function contains(geometryName, geometry, opt_srsName) {\n return new Contains(geometryName, geometry, opt_srsName);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * intersects a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!Intersects} `` operator.\n * @api\n */\nexport function intersects(geometryName, geometry, opt_srsName) {\n return new Intersects(geometryName, geometry, opt_srsName);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * is disjoint to a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!Disjoint} `` operator.\n * @api\n */\nexport function disjoint(geometryName, geometry, opt_srsName) {\n return new Disjoint(geometryName, geometry, opt_srsName);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * is within a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!Within} `` operator.\n * @api\n */\nexport function within(geometryName, geometry, opt_srsName) {\n return new Within(geometryName, geometry, opt_srsName);\n}\n\n/**\n * Create a `` operator to test whether a geometry-valued property\n * is within a distance to a given geometry.\n *\n * @param {!string} geometryName Geometry name to use.\n * @param {!import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {!number} distance Distance.\n * @param {!string} unit Unit.\n * @param {string} [opt_srsName] SRS name. No srsName attribute will be\n * set on geometries when this is not provided.\n * @return {!DWithin} `` operator.\n * @api\n */\nexport function dwithin(geometryName, geometry, distance, unit, opt_srsName) {\n return new DWithin(geometryName, geometry, distance, unit, opt_srsName);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean} [opt_matchCase] Case-sensitive?\n * @return {!EqualTo} `` operator.\n * @api\n */\nexport function equalTo(propertyName, expression, opt_matchCase) {\n return new EqualTo(propertyName, expression, opt_matchCase);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!(string|number)} expression The value to compare.\n * @param {boolean} [opt_matchCase] Case-sensitive?\n * @return {!NotEqualTo} `` operator.\n * @api\n */\nexport function notEqualTo(propertyName, expression, opt_matchCase) {\n return new NotEqualTo(propertyName, expression, opt_matchCase);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @return {!LessThan} `` operator.\n * @api\n */\nexport function lessThan(propertyName, expression) {\n return new LessThan(propertyName, expression);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @return {!LessThanOrEqualTo} `` operator.\n * @api\n */\nexport function lessThanOrEqualTo(propertyName, expression) {\n return new LessThanOrEqualTo(propertyName, expression);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @return {!GreaterThan} `` operator.\n * @api\n */\nexport function greaterThan(propertyName, expression) {\n return new GreaterThan(propertyName, expression);\n}\n\n/**\n * Creates a `` comparison operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} expression The value to compare.\n * @return {!GreaterThanOrEqualTo} `` operator.\n * @api\n */\nexport function greaterThanOrEqualTo(propertyName, expression) {\n return new GreaterThanOrEqualTo(propertyName, expression);\n}\n\n/**\n * Creates a `` comparison operator to test whether a property value\n * is null.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @return {!IsNull} `` operator.\n * @api\n */\nexport function isNull(propertyName) {\n return new IsNull(propertyName);\n}\n\n/**\n * Creates a `` comparison operator to test whether an expression\n * value lies within a range given by a lower and upper bound (inclusive).\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!number} lowerBoundary The lower bound of the range.\n * @param {!number} upperBoundary The upper bound of the range.\n * @return {!IsBetween} `` operator.\n * @api\n */\nexport function between(propertyName, lowerBoundary, upperBoundary) {\n return new IsBetween(propertyName, lowerBoundary, upperBoundary);\n}\n\n/**\n * Represents a `` comparison operator that matches a string property\n * value against a text pattern.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} pattern Text pattern.\n * @param {string} [opt_wildCard] Pattern character which matches any sequence of\n * zero or more string characters. Default is '*'.\n * @param {string} [opt_singleChar] pattern character which matches any single\n * string character. Default is '.'.\n * @param {string} [opt_escapeChar] Escape character which can be used to escape\n * the pattern characters. Default is '!'.\n * @param {boolean} [opt_matchCase] Case-sensitive?\n * @return {!IsLike} `` operator.\n * @api\n */\nexport function like(\n propertyName,\n pattern,\n opt_wildCard,\n opt_singleChar,\n opt_escapeChar,\n opt_matchCase\n) {\n return new IsLike(\n propertyName,\n pattern,\n opt_wildCard,\n opt_singleChar,\n opt_escapeChar,\n opt_matchCase\n );\n}\n\n/**\n * Create a `` temporal operator.\n *\n * @param {!string} propertyName Name of the context property to compare.\n * @param {!string} begin The begin date in ISO-8601 format.\n * @param {!string} end The end date in ISO-8601 format.\n * @return {!During} `` operator.\n * @api\n */\nexport function during(propertyName, begin, end) {\n return new During(propertyName, begin, end);\n}\n\nexport function resourceId(rid) {\n return new ResourceId(rid);\n}\n","/**\n * @module ol/format/TextFeature\n */\nimport FeatureFormat from '../format/Feature.js';\nimport {abstract} from '../util.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for text feature formats.\n *\n * @abstract\n */\nclass TextFeature extends FeatureFormat {\n constructor() {\n super();\n }\n\n /**\n * @return {import(\"./Feature.js\").Type} Format.\n */\n getType() {\n return 'text';\n }\n\n /**\n * Read the feature from the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n * @api\n */\n readFeature(source, opt_options) {\n return this.readFeatureFromText(\n getText(source),\n this.adaptOptions(opt_options)\n );\n }\n\n /**\n * @abstract\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromText(text, opt_options) {\n return abstract();\n }\n\n /**\n * Read the features from the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n * @api\n */\n readFeatures(source, opt_options) {\n return this.readFeaturesFromText(\n getText(source),\n this.adaptOptions(opt_options)\n );\n }\n\n /**\n * @abstract\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromText(text, opt_options) {\n return abstract();\n }\n\n /**\n * Read the geometry from the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n * @api\n */\n readGeometry(source, opt_options) {\n return this.readGeometryFromText(\n getText(source),\n this.adaptOptions(opt_options)\n );\n }\n\n /**\n * @abstract\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromText(text, opt_options) {\n return abstract();\n }\n\n /**\n * Read the projection from the source.\n *\n * @param {Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n * @api\n */\n readProjection(source) {\n return this.readProjectionFromText(getText(source));\n }\n\n /**\n * @param {string} text Text.\n * @protected\n * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n */\n readProjectionFromText(text) {\n return this.dataProjection;\n }\n\n /**\n * Encode a feature as a string.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded feature.\n * @api\n */\n writeFeature(feature, opt_options) {\n return this.writeFeatureText(feature, this.adaptOptions(opt_options));\n }\n\n /**\n * @abstract\n * @param {import(\"../Feature.js\").default} feature Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeFeatureText(feature, opt_options) {\n return abstract();\n }\n\n /**\n * Encode an array of features as string.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded features.\n * @api\n */\n writeFeatures(features, opt_options) {\n return this.writeFeaturesText(features, this.adaptOptions(opt_options));\n }\n\n /**\n * @abstract\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeFeaturesText(features, opt_options) {\n return abstract();\n }\n\n /**\n * Write a single geometry.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Geometry.\n * @api\n */\n writeGeometry(geometry, opt_options) {\n return this.writeGeometryText(geometry, this.adaptOptions(opt_options));\n }\n\n /**\n * @abstract\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeGeometryText(geometry, opt_options) {\n return abstract();\n }\n}\n\n/**\n * @param {Document|Element|Object|string} source Source.\n * @return {string} Text.\n */\nfunction getText(source) {\n if (typeof source === 'string') {\n return source;\n } else {\n return '';\n }\n}\n\nexport default TextFeature;\n","/**\n * @module ol/format/WKT\n */\nimport Feature from '../Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport TextFeature from './TextFeature.js';\nimport {transformGeometryWithOptions} from './Feature.js';\n\n/**\n * Geometry constructors\n * @enum {function (new:import(\"../geom/Geometry.js\").default, Array, import(\"../geom/GeometryLayout.js\").default)}\n */\nconst GeometryConstructor = {\n 'POINT': Point,\n 'LINESTRING': LineString,\n 'POLYGON': Polygon,\n 'MULTIPOINT': MultiPoint,\n 'MULTILINESTRING': MultiLineString,\n 'MULTIPOLYGON': MultiPolygon,\n};\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [splitCollection=false] Whether to split GeometryCollections into\n * multiple features on reading.\n */\n\n/**\n * @typedef {Object} Token\n * @property {number} type Type.\n * @property {number|string} [value] Value.\n * @property {number} position Position.\n */\n\n/**\n * @const\n * @type {string}\n */\nconst EMPTY = 'EMPTY';\n\n/**\n * @const\n * @type {string}\n */\nconst Z = 'Z';\n\n/**\n * @const\n * @type {string}\n */\nconst M = 'M';\n\n/**\n * @const\n * @type {string}\n */\nconst ZM = 'ZM';\n\n/**\n * @const\n * @enum {number}\n */\nconst TokenType = {\n START: 0,\n TEXT: 1,\n LEFT_PAREN: 2,\n RIGHT_PAREN: 3,\n NUMBER: 4,\n COMMA: 5,\n EOF: 6,\n};\n\n/**\n * @type {Object}\n */\nconst wktTypeLookup = {\n Point: 'POINT',\n LineString: 'LINESTRING',\n Polygon: 'POLYGON',\n MultiPoint: 'MULTIPOINT',\n MultiLineString: 'MULTILINESTRING',\n MultiPolygon: 'MULTIPOLYGON',\n GeometryCollection: 'GEOMETRYCOLLECTION',\n Circle: 'CIRCLE',\n};\n\n/**\n * Class to tokenize a WKT string.\n */\nclass Lexer {\n /**\n * @param {string} wkt WKT string.\n */\n constructor(wkt) {\n /**\n * @type {string}\n */\n this.wkt = wkt;\n\n /**\n * @type {number}\n * @private\n */\n this.index_ = -1;\n }\n\n /**\n * @param {string} c Character.\n * @return {boolean} Whether the character is alphabetic.\n * @private\n */\n isAlpha_(c) {\n return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n }\n\n /**\n * @param {string} c Character.\n * @param {boolean} [opt_decimal] Whether the string number\n * contains a dot, i.e. is a decimal number.\n * @return {boolean} Whether the character is numeric.\n * @private\n */\n isNumeric_(c, opt_decimal) {\n const decimal = opt_decimal !== undefined ? opt_decimal : false;\n return (c >= '0' && c <= '9') || (c == '.' && !decimal);\n }\n\n /**\n * @param {string} c Character.\n * @return {boolean} Whether the character is whitespace.\n * @private\n */\n isWhiteSpace_(c) {\n return c == ' ' || c == '\\t' || c == '\\r' || c == '\\n';\n }\n\n /**\n * @return {string} Next string character.\n * @private\n */\n nextChar_() {\n return this.wkt.charAt(++this.index_);\n }\n\n /**\n * Fetch and return the next token.\n * @return {Token} Next string token.\n */\n nextToken() {\n const c = this.nextChar_();\n const position = this.index_;\n /** @type {number|string} */\n let value = c;\n let type;\n\n if (c == '(') {\n type = TokenType.LEFT_PAREN;\n } else if (c == ',') {\n type = TokenType.COMMA;\n } else if (c == ')') {\n type = TokenType.RIGHT_PAREN;\n } else if (this.isNumeric_(c) || c == '-') {\n type = TokenType.NUMBER;\n value = this.readNumber_();\n } else if (this.isAlpha_(c)) {\n type = TokenType.TEXT;\n value = this.readText_();\n } else if (this.isWhiteSpace_(c)) {\n return this.nextToken();\n } else if (c === '') {\n type = TokenType.EOF;\n } else {\n throw new Error('Unexpected character: ' + c);\n }\n\n return {position: position, value: value, type: type};\n }\n\n /**\n * @return {number} Numeric token value.\n * @private\n */\n readNumber_() {\n let c;\n const index = this.index_;\n let decimal = false;\n let scientificNotation = false;\n do {\n if (c == '.') {\n decimal = true;\n } else if (c == 'e' || c == 'E') {\n scientificNotation = true;\n }\n c = this.nextChar_();\n } while (\n this.isNumeric_(c, decimal) ||\n // if we haven't detected a scientific number before, 'e' or 'E'\n // hint that we should continue to read\n (!scientificNotation && (c == 'e' || c == 'E')) ||\n // once we know that we have a scientific number, both '-' and '+'\n // are allowed\n (scientificNotation && (c == '-' || c == '+'))\n );\n return parseFloat(this.wkt.substring(index, this.index_--));\n }\n\n /**\n * @return {string} String token value.\n * @private\n */\n readText_() {\n let c;\n const index = this.index_;\n do {\n c = this.nextChar_();\n } while (this.isAlpha_(c));\n return this.wkt.substring(index, this.index_--).toUpperCase();\n }\n}\n\n/**\n * Class to parse the tokens from the WKT string.\n */\nclass Parser {\n /**\n * @param {Lexer} lexer The lexer.\n */\n constructor(lexer) {\n /**\n * @type {Lexer}\n * @private\n */\n this.lexer_ = lexer;\n\n /**\n * @type {Token}\n * @private\n */\n this.token_ = {\n position: 0,\n type: TokenType.START,\n };\n\n /**\n * @type {import(\"../geom/GeometryLayout.js\").default}\n * @private\n */\n this.layout_ = GeometryLayout.XY;\n }\n\n /**\n * Fetch the next token form the lexer and replace the active token.\n * @private\n */\n consume_() {\n this.token_ = this.lexer_.nextToken();\n }\n\n /**\n * Tests if the given type matches the type of the current token.\n * @param {TokenType} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\n isTokenType(type) {\n return this.token_.type == type;\n }\n\n /**\n * If the given type matches the current token, consume it.\n * @param {TokenType} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\n match(type) {\n const isMatch = this.isTokenType(type);\n if (isMatch) {\n this.consume_();\n }\n return isMatch;\n }\n\n /**\n * Try to parse the tokens provided by the lexer.\n * @return {import(\"../geom/Geometry.js\").default} The geometry.\n */\n parse() {\n this.consume_();\n return this.parseGeometry_();\n }\n\n /**\n * Try to parse the dimensional info.\n * @return {import(\"../geom/GeometryLayout.js\").default} The layout.\n * @private\n */\n parseGeometryLayout_() {\n let layout = GeometryLayout.XY;\n const dimToken = this.token_;\n if (this.isTokenType(TokenType.TEXT)) {\n const dimInfo = dimToken.value;\n if (dimInfo === Z) {\n layout = GeometryLayout.XYZ;\n } else if (dimInfo === M) {\n layout = GeometryLayout.XYM;\n } else if (dimInfo === ZM) {\n layout = GeometryLayout.XYZM;\n }\n if (layout !== GeometryLayout.XY) {\n this.consume_();\n }\n }\n return layout;\n }\n\n /**\n * @return {Array} A collection of geometries.\n * @private\n */\n parseGeometryCollectionText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const geometries = [];\n do {\n geometries.push(this.parseGeometry_());\n } while (this.match(TokenType.COMMA));\n if (this.match(TokenType.RIGHT_PAREN)) {\n return geometries;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array} All values in a point.\n * @private\n */\n parsePointText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePoint_();\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>} All points in a linestring.\n * @private\n */\n parseLineStringText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePointList_();\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>>} All points in a polygon.\n * @private\n */\n parsePolygonText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parseLineStringTextList_();\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>} All points in a multipoint.\n * @private\n */\n parseMultiPointText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n let coordinates;\n if (this.token_.type == TokenType.LEFT_PAREN) {\n coordinates = this.parsePointTextList_();\n } else {\n coordinates = this.parsePointList_();\n }\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>>} All linestring points\n * in a multilinestring.\n * @private\n */\n parseMultiLineStringText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parseLineStringTextList_();\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>>>} All polygon points in a multipolygon.\n * @private\n */\n parseMultiPolygonText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePolygonTextList_();\n if (this.match(TokenType.RIGHT_PAREN)) {\n return coordinates;\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array} A point.\n * @private\n */\n parsePoint_() {\n const coordinates = [];\n const dimensions = this.layout_.length;\n for (let i = 0; i < dimensions; ++i) {\n const token = this.token_;\n if (this.match(TokenType.NUMBER)) {\n coordinates.push(/** @type {number} */ (token.value));\n } else {\n break;\n }\n }\n if (coordinates.length == dimensions) {\n return coordinates;\n }\n throw new Error(this.formatErrorMessage_());\n }\n\n /**\n * @return {Array>} An array of points.\n * @private\n */\n parsePointList_() {\n const coordinates = [this.parsePoint_()];\n while (this.match(TokenType.COMMA)) {\n coordinates.push(this.parsePoint_());\n }\n return coordinates;\n }\n\n /**\n * @return {Array>} An array of points.\n * @private\n */\n parsePointTextList_() {\n const coordinates = [this.parsePointText_()];\n while (this.match(TokenType.COMMA)) {\n coordinates.push(this.parsePointText_());\n }\n return coordinates;\n }\n\n /**\n * @return {Array>>} An array of points.\n * @private\n */\n parseLineStringTextList_() {\n const coordinates = [this.parseLineStringText_()];\n while (this.match(TokenType.COMMA)) {\n coordinates.push(this.parseLineStringText_());\n }\n return coordinates;\n }\n\n /**\n * @return {Array>>>} An array of points.\n * @private\n */\n parsePolygonTextList_() {\n const coordinates = [this.parsePolygonText_()];\n while (this.match(TokenType.COMMA)) {\n coordinates.push(this.parsePolygonText_());\n }\n return coordinates;\n }\n\n /**\n * @return {boolean} Whether the token implies an empty geometry.\n * @private\n */\n isEmptyGeometry_() {\n const isEmpty =\n this.isTokenType(TokenType.TEXT) && this.token_.value == EMPTY;\n if (isEmpty) {\n this.consume_();\n }\n return isEmpty;\n }\n\n /**\n * Create an error message for an unexpected token error.\n * @return {string} Error message.\n * @private\n */\n formatErrorMessage_() {\n return (\n 'Unexpected `' +\n this.token_.value +\n '` at position ' +\n this.token_.position +\n ' in `' +\n this.lexer_.wkt +\n '`'\n );\n }\n\n /**\n * @return {import(\"../geom/Geometry.js\").default} The geometry.\n * @private\n */\n parseGeometry_() {\n const token = this.token_;\n if (this.match(TokenType.TEXT)) {\n const geomType = /** @type {string} */ (token.value);\n this.layout_ = this.parseGeometryLayout_();\n const isEmpty = this.isEmptyGeometry_();\n if (geomType == 'GEOMETRYCOLLECTION') {\n if (isEmpty) {\n return new GeometryCollection([]);\n }\n const geometries = this.parseGeometryCollectionText_();\n return new GeometryCollection(geometries);\n } else {\n const ctor = GeometryConstructor[geomType];\n if (!ctor) {\n throw new Error('Invalid geometry type: ' + geomType);\n }\n\n let coordinates;\n\n if (isEmpty) {\n if (geomType == 'POINT') {\n coordinates = [NaN, NaN];\n } else {\n coordinates = [];\n }\n } else {\n switch (geomType) {\n case 'POINT': {\n coordinates = this.parsePointText_();\n break;\n }\n case 'LINESTRING': {\n coordinates = this.parseLineStringText_();\n break;\n }\n case 'POLYGON': {\n coordinates = this.parsePolygonText_();\n break;\n }\n case 'MULTIPOINT': {\n coordinates = this.parseMultiPointText_();\n break;\n }\n case 'MULTILINESTRING': {\n coordinates = this.parseMultiLineStringText_();\n break;\n }\n case 'MULTIPOLYGON': {\n coordinates = this.parseMultiPolygonText_();\n break;\n }\n default:\n break;\n }\n }\n\n return new ctor(coordinates, this.layout_);\n }\n }\n throw new Error(this.formatErrorMessage_());\n }\n}\n\n/**\n * @classdesc\n * Geometry format for reading and writing data in the `WellKnownText` (WKT)\n * format.\n *\n * @api\n */\nclass WKT extends TextFeature {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * Split GeometryCollection into multiple features.\n * @type {boolean}\n * @private\n */\n this.splitCollection_ =\n options.splitCollection !== undefined ? options.splitCollection : false;\n }\n\n /**\n * Parse a WKT string.\n * @param {string} wkt WKT string.\n * @return {import(\"../geom/Geometry.js\").default}\n * The geometry created.\n * @private\n */\n parse_(wkt) {\n const lexer = new Lexer(wkt);\n const parser = new Parser(lexer);\n return parser.parse();\n }\n\n /**\n * @protected\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromText(text, opt_options) {\n const geom = this.readGeometryFromText(text, opt_options);\n const feature = new Feature();\n feature.setGeometry(geom);\n return feature;\n }\n\n /**\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromText(text, opt_options) {\n let geometries = [];\n const geometry = this.readGeometryFromText(text, opt_options);\n if (this.splitCollection_ && geometry.getType() == 'GeometryCollection') {\n geometries = /** @type {GeometryCollection} */ (\n geometry\n ).getGeometriesArray();\n } else {\n geometries = [geometry];\n }\n const features = [];\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n const feature = new Feature();\n feature.setGeometry(geometries[i]);\n features.push(feature);\n }\n return features;\n }\n\n /**\n * @param {string} text Text.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromText(text, opt_options) {\n const geometry = this.parse_(text);\n return transformGeometryWithOptions(geometry, false, opt_options);\n }\n\n /**\n * @param {import(\"../Feature.js\").default} feature Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeFeatureText(feature, opt_options) {\n const geometry = feature.getGeometry();\n if (geometry) {\n return this.writeGeometryText(geometry, opt_options);\n }\n return '';\n }\n\n /**\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeFeaturesText(features, opt_options) {\n if (features.length == 1) {\n return this.writeFeatureText(features[0], opt_options);\n }\n const geometries = [];\n for (let i = 0, ii = features.length; i < ii; ++i) {\n geometries.push(features[i].getGeometry());\n }\n const collection = new GeometryCollection(geometries);\n return this.writeGeometryText(collection, opt_options);\n }\n\n /**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @protected\n * @return {string} Text.\n */\n writeGeometryText(geometry, opt_options) {\n return encode(transformGeometryWithOptions(geometry, true, opt_options));\n }\n}\n\n/**\n * @param {Point} geom Point geometry.\n * @return {string} Coordinates part of Point as WKT.\n */\nfunction encodePointGeometry(geom) {\n const coordinates = geom.getCoordinates();\n if (coordinates.length === 0) {\n return '';\n }\n return coordinates.join(' ');\n}\n\n/**\n * @param {MultiPoint} geom MultiPoint geometry.\n * @return {string} Coordinates part of MultiPoint as WKT.\n */\nfunction encodeMultiPointGeometry(geom) {\n const array = [];\n const components = geom.getPoints();\n for (let i = 0, ii = components.length; i < ii; ++i) {\n array.push('(' + encodePointGeometry(components[i]) + ')');\n }\n return array.join(',');\n}\n\n/**\n * @param {GeometryCollection} geom GeometryCollection geometry.\n * @return {string} Coordinates part of GeometryCollection as WKT.\n */\nfunction encodeGeometryCollectionGeometry(geom) {\n const array = [];\n const geoms = geom.getGeometries();\n for (let i = 0, ii = geoms.length; i < ii; ++i) {\n array.push(encode(geoms[i]));\n }\n return array.join(',');\n}\n\n/**\n * @param {LineString|import(\"../geom/LinearRing.js\").default} geom LineString geometry.\n * @return {string} Coordinates part of LineString as WKT.\n */\nfunction encodeLineStringGeometry(geom) {\n const coordinates = geom.getCoordinates();\n const array = [];\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n array.push(coordinates[i].join(' '));\n }\n return array.join(',');\n}\n\n/**\n * @param {MultiLineString} geom MultiLineString geometry.\n * @return {string} Coordinates part of MultiLineString as WKT.\n */\nfunction encodeMultiLineStringGeometry(geom) {\n const array = [];\n const components = geom.getLineStrings();\n for (let i = 0, ii = components.length; i < ii; ++i) {\n array.push('(' + encodeLineStringGeometry(components[i]) + ')');\n }\n return array.join(',');\n}\n\n/**\n * @param {Polygon} geom Polygon geometry.\n * @return {string} Coordinates part of Polygon as WKT.\n */\nfunction encodePolygonGeometry(geom) {\n const array = [];\n const rings = geom.getLinearRings();\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n array.push('(' + encodeLineStringGeometry(rings[i]) + ')');\n }\n return array.join(',');\n}\n\n/**\n * @param {MultiPolygon} geom MultiPolygon geometry.\n * @return {string} Coordinates part of MultiPolygon as WKT.\n */\nfunction encodeMultiPolygonGeometry(geom) {\n const array = [];\n const components = geom.getPolygons();\n for (let i = 0, ii = components.length; i < ii; ++i) {\n array.push('(' + encodePolygonGeometry(components[i]) + ')');\n }\n return array.join(',');\n}\n\n/**\n * @param {import(\"../geom/SimpleGeometry.js\").default} geom SimpleGeometry geometry.\n * @return {string} Potential dimensional information for WKT type.\n */\nfunction encodeGeometryLayout(geom) {\n const layout = geom.getLayout();\n let dimInfo = '';\n if (layout === GeometryLayout.XYZ || layout === GeometryLayout.XYZM) {\n dimInfo += Z;\n }\n if (layout === GeometryLayout.XYM || layout === GeometryLayout.XYZM) {\n dimInfo += M;\n }\n return dimInfo;\n}\n\n/**\n * @const\n * @type {Object}\n */\nconst GeometryEncoder = {\n 'Point': encodePointGeometry,\n 'LineString': encodeLineStringGeometry,\n 'Polygon': encodePolygonGeometry,\n 'MultiPoint': encodeMultiPointGeometry,\n 'MultiLineString': encodeMultiLineStringGeometry,\n 'MultiPolygon': encodeMultiPolygonGeometry,\n 'GeometryCollection': encodeGeometryCollectionGeometry,\n};\n\n/**\n * Encode a geometry as WKT.\n * @param {import(\"../geom/Geometry.js\").default} geom The geometry to encode.\n * @return {string} WKT string for the geometry.\n */\nfunction encode(geom) {\n const type = geom.getType();\n const geometryEncoder = GeometryEncoder[type];\n const enc = geometryEncoder(geom);\n let wktType = wktTypeLookup[type];\n if (typeof (/** @type {?} */ (geom).getFlatCoordinates) === 'function') {\n const dimInfo = encodeGeometryLayout(\n /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geom)\n );\n if (dimInfo.length > 0) {\n wktType += ' ' + dimInfo;\n }\n }\n if (enc.length === 0) {\n return wktType + ' ' + EMPTY;\n }\n return wktType + '(' + enc + ')';\n}\n\nexport default WKT;\n","/**\n * @module ol/format/WKB\n */\nimport Feature from '../Feature.js';\nimport FeatureFormat, {transformGeometryWithOptions} from './Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {get as getProjection} from '../proj.js';\n\nimport SimpleGeometry from '../geom/SimpleGeometry.js';\nimport {assign} from '../obj.js';\n\n// WKB spec: https://www.ogc.org/standards/sfa\n// EWKB spec: https://raw.githubusercontent.com/postgis/postgis/2.1.0/doc/ZMSgeoms.txt\n\n/**\n * @const\n * @enum {number}\n */\nconst WKBGeometryType = {\n POINT: 1,\n LINE_STRING: 2,\n POLYGON: 3,\n MULTI_POINT: 4,\n MULTI_LINE_STRING: 5,\n MULTI_POLYGON: 6,\n GEOMETRY_COLLECTION: 7,\n\n /*\n CIRCULAR_STRING: 8,\n COMPOUND_CURVE: 9,\n CURVE_POLYGON: 10,\n\n MULTI_CURVE: 11,\n MULTI_SURFACE: 12,\n CURVE: 13,\n SURFACE: 14,\n */\n\n POLYHEDRAL_SURFACE: 15,\n TIN: 16,\n TRIANGLE: 17,\n};\n\nclass WkbReader {\n /**\n * @param {DataView} view source to read\n */\n constructor(view) {\n this.view_ = view;\n this.pos_ = 0;\n\n this.initialized_ = false;\n this.isLittleEndian_ = false;\n this.hasZ_ = false;\n this.hasM_ = false;\n /** @type {number|null} */\n this.srid_ = null;\n\n this.layout_ = GeometryLayout.XY;\n }\n\n /**\n * @return {number} value\n */\n readUint8() {\n return this.view_.getUint8(this.pos_++);\n }\n\n /**\n * @param {boolean} [isLittleEndian] Whether read value as little endian\n * @return {number} value\n */\n readUint32(isLittleEndian) {\n return this.view_.getUint32(\n (this.pos_ += 4) - 4,\n isLittleEndian !== undefined ? isLittleEndian : this.isLittleEndian_\n );\n }\n\n /**\n * @param {boolean} [isLittleEndian] Whether read value as little endian\n * @return {number} value\n */\n readDouble(isLittleEndian) {\n return this.view_.getFloat64(\n (this.pos_ += 8) - 8,\n isLittleEndian !== undefined ? isLittleEndian : this.isLittleEndian_\n );\n }\n\n /**\n * @return {import('../coordinate.js').Coordinate} coords for Point\n */\n readPoint() {\n /** @type import('../coordinate.js').Coordinate */\n const coords = [];\n\n coords.push(this.readDouble());\n coords.push(this.readDouble());\n if (this.hasZ_) {\n coords.push(this.readDouble());\n }\n if (this.hasM_) {\n coords.push(this.readDouble());\n }\n\n return coords;\n }\n\n /**\n * @return {Array} coords for LineString / LinearRing\n */\n readLineString() {\n const numPoints = this.readUint32();\n\n /** @type Array */\n const coords = [];\n for (let i = 0; i < numPoints; i++) {\n coords.push(this.readPoint());\n }\n\n return coords;\n }\n\n /**\n * @return {Array>} coords for Polygon like\n */\n readPolygon() {\n const numRings = this.readUint32();\n\n /** @type Array> */\n const rings = [];\n for (let i = 0; i < numRings; i++) {\n rings.push(this.readLineString()); // as a LinearRing\n }\n\n return rings;\n }\n\n /**\n * @param {number} [expectedTypeId] Expected WKB Type ID\n * @return {number} WKB Type ID\n */\n readWkbHeader(expectedTypeId) {\n const byteOrder = this.readUint8();\n const isLittleEndian = byteOrder > 0;\n\n const wkbType = this.readUint32(isLittleEndian);\n const wkbTypeThousandth = Math.floor((wkbType & 0x0fffffff) / 1000);\n const hasZ =\n Boolean(wkbType & 0x80000000) ||\n wkbTypeThousandth === 1 ||\n wkbTypeThousandth === 3;\n const hasM =\n Boolean(wkbType & 0x40000000) ||\n wkbTypeThousandth === 2 ||\n wkbTypeThousandth === 3;\n const hasSRID = Boolean(wkbType & 0x20000000);\n const typeId = (wkbType & 0x0fffffff) % 1000; // Assume 1000 is an upper limit for type ID\n const layout = ['XY', hasZ ? 'Z' : '', hasM ? 'M' : ''].join('');\n\n const srid = hasSRID ? this.readUint32(isLittleEndian) : null;\n\n if (expectedTypeId !== undefined && expectedTypeId !== typeId) {\n throw new Error('Unexpected WKB geometry type ' + typeId);\n }\n\n if (this.initialized_) {\n // sanity checks\n if (this.isLittleEndian_ !== isLittleEndian) {\n throw new Error('Inconsistent endian');\n }\n if (this.layout_ !== layout) {\n throw new Error('Inconsistent geometry layout');\n }\n if (srid && this.srid_ !== srid) {\n throw new Error('Inconsistent coordinate system (SRID)');\n }\n } else {\n this.isLittleEndian_ = isLittleEndian;\n this.hasZ_ = hasZ;\n this.hasM_ = hasM;\n this.layout_ = layout;\n this.srid_ = srid;\n this.initialized_ = true;\n }\n\n return typeId;\n }\n\n /**\n * @param {number} typeId WKB Type ID\n * @return {any} values read\n */\n readWkbPayload(typeId) {\n switch (typeId) {\n case WKBGeometryType.POINT:\n return this.readPoint();\n\n case WKBGeometryType.LINE_STRING:\n return this.readLineString();\n\n case WKBGeometryType.POLYGON:\n case WKBGeometryType.TRIANGLE:\n return this.readPolygon();\n\n case WKBGeometryType.MULTI_POINT:\n return this.readMultiPoint();\n\n case WKBGeometryType.MULTI_LINE_STRING:\n return this.readMultiLineString();\n\n case WKBGeometryType.MULTI_POLYGON:\n case WKBGeometryType.POLYHEDRAL_SURFACE:\n case WKBGeometryType.TIN:\n return this.readMultiPolygon();\n\n case WKBGeometryType.GEOMETRY_COLLECTION:\n return this.readGeometryCollection();\n\n default:\n throw new Error(\n 'Unsupported WKB geometry type ' + typeId + ' is found'\n );\n }\n }\n\n /**\n * @param {number} expectedTypeId Expected WKB Type ID\n * @return {any} values read\n */\n readWkbBlock(expectedTypeId) {\n return this.readWkbPayload(this.readWkbHeader(expectedTypeId));\n }\n\n /**\n * @param {Function} reader reader function for each item\n * @param {number} [expectedTypeId] Expected WKB Type ID\n * @return {any} values read\n */\n readWkbCollection(reader, expectedTypeId) {\n const num = this.readUint32();\n\n const items = [];\n for (let i = 0; i < num; i++) {\n const result = reader.call(this, expectedTypeId);\n if (result) {\n items.push(result);\n }\n }\n\n return items;\n }\n\n /**\n * @return {Array} coords for MultiPoint\n */\n readMultiPoint() {\n return this.readWkbCollection(this.readWkbBlock, WKBGeometryType.POINT);\n }\n\n /**\n * @return {Array>} coords for MultiLineString like\n */\n readMultiLineString() {\n return this.readWkbCollection(\n this.readWkbBlock,\n WKBGeometryType.LINE_STRING\n );\n }\n\n /**\n * @return {Array>>} coords for MultiPolygon like\n */\n readMultiPolygon() {\n return this.readWkbCollection(this.readWkbBlock, WKBGeometryType.POLYGON);\n }\n\n /**\n * @return {Array} array of geometries\n */\n readGeometryCollection() {\n return this.readWkbCollection(this.readGeometry);\n }\n\n /**\n * @return {import('../geom/Geometry.js').default} geometry\n */\n readGeometry() {\n const typeId = this.readWkbHeader();\n const result = this.readWkbPayload(typeId);\n\n switch (typeId) {\n case WKBGeometryType.POINT:\n return new Point(\n /** @type {import('../coordinate.js').Coordinate} */ (result),\n this.layout_\n );\n\n case WKBGeometryType.LINE_STRING:\n return new LineString(\n /** @type {Array} */ (result),\n this.layout_\n );\n\n case WKBGeometryType.POLYGON:\n case WKBGeometryType.TRIANGLE:\n return new Polygon(\n /** @type {Array>} */ (\n result\n ),\n this.layout_\n );\n\n case WKBGeometryType.MULTI_POINT:\n return new MultiPoint(\n /** @type {Array} */ (result),\n this.layout_\n );\n\n case WKBGeometryType.MULTI_LINE_STRING:\n return new MultiLineString(\n /** @type {Array>} */ (\n result\n ),\n this.layout_\n );\n\n case WKBGeometryType.MULTI_POLYGON:\n case WKBGeometryType.POLYHEDRAL_SURFACE:\n case WKBGeometryType.TIN:\n return new MultiPolygon(\n /** @type {Array>>} */ (\n result\n ),\n this.layout_\n );\n\n case WKBGeometryType.GEOMETRY_COLLECTION:\n return new GeometryCollection(\n /** @type {Array} */ (result)\n );\n\n default:\n return null;\n }\n }\n\n /**\n * @return {number|null} SRID in the EWKB. `null` if not defined.\n */\n getSrid() {\n return this.srid_;\n }\n}\n\nclass WkbWriter {\n /**\n * @type {Object}\n * @property {string} [layout] geometryLayout\n * @property {boolean} [littleEndian=true] littleEndian\n * @property {boolean} [ewkb=true] Whether writes in EWKB format\n * @property {Object} [nodata] NoData value for each axes\n * @param {Object} opts options\n */\n constructor(opts) {\n opts = opts || {};\n\n /** @type {string} */\n this.layout_ = opts.layout;\n this.isLittleEndian_ = opts.littleEndian !== false;\n\n this.isEWKB_ = opts.ewkb !== false;\n\n /** @type {Array>} */\n this.writeQueue_ = [];\n\n /**\n * @type {Object}\n * @property {number} X NoData value for X\n * @property {number} Y NoData value for Y\n * @property {number} Z NoData value for Z\n * @property {number} M NoData value for M\n */\n this.nodata_ = assign({X: 0, Y: 0, Z: 0, M: 0}, opts.nodata);\n }\n\n /**\n * @param {number} value value\n */\n writeUint8(value) {\n this.writeQueue_.push([1, value]);\n }\n\n /**\n * @param {number} value value\n */\n writeUint32(value) {\n this.writeQueue_.push([4, value]);\n }\n\n /**\n * @param {number} value value\n */\n writeDouble(value) {\n this.writeQueue_.push([8, value]);\n }\n\n /**\n * @param {import('../coordinate.js').Coordinate} coords coords\n * @param {import(\"../geom/GeometryLayout\").default} layout layout\n */\n writePoint(coords, layout) {\n /**\n * @type {Object}\n * @property {number} X NoData value for X\n * @property {number} Y NoData value for Y\n * @property {number} [Z] NoData value for Z\n * @property {number} [M] NoData value for M\n */\n const coordsObj = assign.apply(\n null,\n layout.split('').map((axis, idx) => ({[axis]: coords[idx]}))\n );\n\n for (const axis of this.layout_) {\n this.writeDouble(\n axis in coordsObj ? coordsObj[axis] : this.nodata_[axis]\n );\n }\n }\n\n /**\n * @param {Array} coords coords\n * @param {import(\"../geom/GeometryLayout\").default} layout layout\n */\n writeLineString(coords, layout) {\n this.writeUint32(coords.length); // numPoints\n for (let i = 0; i < coords.length; i++) {\n this.writePoint(coords[i], layout);\n }\n }\n\n /**\n * @param {Array>} rings rings\n * @param {import(\"../geom/GeometryLayout\").default} layout layout\n */\n writePolygon(rings, layout) {\n this.writeUint32(rings.length); // numRings\n for (let i = 0; i < rings.length; i++) {\n this.writeLineString(rings[i], layout); // as a LinearRing\n }\n }\n\n /**\n * @param {number} wkbType WKB Type ID\n * @param {number} [srid] SRID\n */\n writeWkbHeader(wkbType, srid) {\n wkbType %= 1000; // Assume 1000 is an upper limit for type ID\n if (this.layout_.indexOf('Z') >= 0) {\n wkbType += this.isEWKB_ ? 0x80000000 : 1000;\n }\n if (this.layout_.indexOf('M') >= 0) {\n wkbType += this.isEWKB_ ? 0x40000000 : 2000;\n }\n if (this.isEWKB_ && Number.isInteger(srid)) {\n wkbType |= 0x20000000;\n }\n\n this.writeUint8(this.isLittleEndian_ ? 1 : 0);\n this.writeUint32(wkbType);\n if (this.isEWKB_ && Number.isInteger(srid)) {\n this.writeUint32(srid);\n }\n }\n\n /**\n * @param {Array} coords coords\n * @param {string} layout layout\n */\n writeMultiPoint(coords, layout) {\n this.writeUint32(coords.length); // numItems\n for (let i = 0; i < coords.length; i++) {\n this.writeWkbHeader(1);\n this.writePoint(coords[i], layout);\n }\n }\n\n /**\n * @param {Array>} coords coords\n * @param {string} layout layout\n */\n writeMultiLineString(coords, layout) {\n this.writeUint32(coords.length); // numItems\n for (let i = 0; i < coords.length; i++) {\n this.writeWkbHeader(2);\n this.writeLineString(coords[i], layout);\n }\n }\n\n /**\n * @param {Array>>} coords coords\n * @param {string} layout layout\n */\n writeMultiPolygon(coords, layout) {\n this.writeUint32(coords.length); // numItems\n for (let i = 0; i < coords.length; i++) {\n this.writeWkbHeader(3);\n this.writePolygon(coords[i], layout);\n }\n }\n\n /**\n * @param {Array} geometries geometries\n */\n writeGeometryCollection(geometries) {\n this.writeUint32(geometries.length); // numItems\n\n for (let i = 0; i < geometries.length; i++) {\n this.writeGeometry(geometries[i]);\n }\n }\n\n /**\n * @param {import(\"../geom/Geometry.js\").default} geom geometry\n * @param {import(\"../geom/GeometryLayout.js\").default} [layout] layout\n * @return {import(\"../geom/GeometryLayout.js\").default} minumum layout made by common axes\n */\n findMinimumLayout(geom, layout = GeometryLayout.XYZM) {\n /**\n * @param {import(\"../geom/GeometryLayout.js\").default} a A\n * @param {import(\"../geom/GeometryLayout.js\").default} b B\n * @return {import(\"../geom/GeometryLayout.js\").default} minumum layout made by common axes\n */\n const GeometryLayout_min = (a, b) => {\n if (a === b) {\n return a;\n }\n\n if (a === GeometryLayout.XYZM) {\n // anything `b` is minimum\n return b;\n }\n if (b === GeometryLayout.XYZM) {\n // anything `a` is minimum\n return a;\n }\n\n // otherwise, incompatible\n return GeometryLayout.XY;\n };\n\n if (geom instanceof SimpleGeometry) {\n return GeometryLayout_min(geom.getLayout(), layout);\n }\n\n if (geom instanceof GeometryCollection) {\n const geoms = geom.getGeometriesArray();\n for (let i = 0; i < geoms.length && layout !== GeometryLayout.XY; i++) {\n layout = this.findMinimumLayout(geoms[i], layout);\n }\n }\n\n return layout;\n }\n\n /**\n * @param {import(\"../geom/Geometry.js\").default} geom geometry\n * @param {number} [srid] SRID\n */\n writeGeometry(geom, srid) {\n /**\n * @type {Object}\n */\n const wkblut = {\n Point: WKBGeometryType.POINT,\n LineString: WKBGeometryType.LINE_STRING,\n Polygon: WKBGeometryType.POLYGON,\n MultiPoint: WKBGeometryType.MULTI_POINT,\n MultiLineString: WKBGeometryType.MULTI_LINE_STRING,\n MultiPolygon: WKBGeometryType.MULTI_POLYGON,\n GeometryCollection: WKBGeometryType.GEOMETRY_COLLECTION,\n };\n const geomType = geom.getType();\n const typeId = wkblut[geomType];\n\n if (!typeId) {\n throw new Error('GeometryType ' + geomType + ' is not supported');\n }\n\n // first call of writeGeometry() traverse whole geometries to determine its output layout if not specified on constructor.\n if (!this.layout_) {\n this.layout_ = this.findMinimumLayout(geom);\n }\n\n this.writeWkbHeader(typeId, srid);\n\n if (geom instanceof SimpleGeometry) {\n const writerLUT = {\n Point: this.writePoint,\n LineString: this.writeLineString,\n Polygon: this.writePolygon,\n MultiPoint: this.writeMultiPoint,\n MultiLineString: this.writeMultiLineString,\n MultiPolygon: this.writeMultiPolygon,\n };\n writerLUT[geomType].call(this, geom.getCoordinates(), geom.getLayout());\n } else if (geom instanceof GeometryCollection) {\n this.writeGeometryCollection(geom.getGeometriesArray());\n }\n }\n\n getBuffer() {\n const byteLength = this.writeQueue_.reduce((acc, item) => acc + item[0], 0);\n const buffer = new ArrayBuffer(byteLength);\n const view = new DataView(buffer);\n\n let pos = 0;\n this.writeQueue_.forEach((item) => {\n switch (item[0]) {\n case 1:\n view.setUint8(pos, item[1]);\n break;\n case 4:\n view.setUint32(pos, item[1], this.isLittleEndian_);\n break;\n case 8:\n view.setFloat64(pos, item[1], this.isLittleEndian_);\n break;\n default:\n break;\n }\n\n pos += item[0];\n });\n\n return buffer;\n }\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [splitCollection=false] Whether to split GeometryCollections into multiple features on reading.\n * @property {boolean} [hex=true] Returns hex string instead of ArrayBuffer for output. This also is used as a hint internally whether it should load contents as text or ArrayBuffer on reading.\n * @property {boolean} [littleEndian=true] Use littleEndian for output.\n * @property {boolean} [ewkb=true] Use EWKB format for output.\n * @property {import(\"../geom/GeometryLayout\").default} [geometryLayout=null] Use specific coordinate layout for output features (null: auto detect)\n * @property {number} [nodataZ=0] If the `geometryLayout` doesn't match with geometry to be output, this value is used to fill missing coordinate value of Z.\n * @property {number} [nodataM=0] If the `geometryLayout` doesn't match with geometry to be output, this value is used to fill missing coordinate value of M.\n * @property {number|boolean} [srid=true] SRID for output. Specify integer value to enforce the value as a SRID. Specify `true` to extract from `dataProjection`. `false` to suppress the output. This option only takes effect when `ewkb` is `true`.\n */\n\n/**\n * @classdesc\n * Geometry format for reading and writing data in the `Well-Known Binary` (WKB) format.\n * Also supports `Extended Well-Known Binary` (EWKB) format, used in PostGIS for example.\n *\n * @api\n */\nclass WKB extends FeatureFormat {\n /**\n * @param {Options} [opt_options] Optional configuration object.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n this.splitCollection = Boolean(options.splitCollection);\n\n this.viewCache_ = null;\n\n this.hex_ = options.hex !== false;\n this.littleEndian_ = options.littleEndian !== false;\n this.ewkb_ = options.ewkb !== false;\n\n this.layout_ = options.geometryLayout; // null for auto detect\n this.nodataZ_ = options.nodataZ || 0;\n this.nodataM_ = options.nodataM || 0;\n\n this.srid_ = options.srid;\n }\n\n /**\n * @return {import(\"./Feature.js\").Type} Format.\n */\n getType() {\n return this.hex_ ? 'text' : 'arraybuffer';\n }\n\n /**\n * Read a single feature from a source.\n *\n * @param {string|ArrayBuffer|ArrayBufferView} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n * @api\n */\n readFeature(source, opt_options) {\n return new Feature({\n geometry: this.readGeometry(source, opt_options),\n });\n }\n\n /**\n * Read all features from a source.\n *\n * @param {string|ArrayBuffer|ArrayBufferView} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n * @api\n */\n readFeatures(source, opt_options) {\n let geometries = [];\n const geometry = this.readGeometry(source, opt_options);\n if (this.splitCollection && geometry instanceof GeometryCollection) {\n geometries = geometry.getGeometriesArray();\n } else {\n geometries = [geometry];\n }\n return geometries.map((geometry) => new Feature({geometry}));\n }\n\n /**\n * Read a single geometry from a source.\n *\n * @param {string|ArrayBuffer|ArrayBufferView} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n * @api\n */\n readGeometry(source, opt_options) {\n const view = getDataView(source);\n if (!view) {\n return null;\n }\n\n const reader = new WkbReader(view);\n const geometry = reader.readGeometry();\n\n this.viewCache_ = view; // cache for internal subsequent call of readProjection()\n const options = this.getReadOptions(source, opt_options);\n this.viewCache_ = null; // release\n\n return transformGeometryWithOptions(geometry, false, options);\n }\n\n /**\n * Read the projection from a source.\n *\n * @param {string|ArrayBuffer|ArrayBufferView} source Source.\n * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n * @api\n */\n readProjection(source) {\n const view = this.viewCache_ || getDataView(source);\n if (!view) {\n return undefined;\n }\n\n const reader = new WkbReader(view);\n reader.readWkbHeader();\n\n return (\n (reader.getSrid() && getProjection('EPSG:' + reader.getSrid())) ||\n undefined\n );\n }\n\n /**\n * Encode a feature in this format.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n * @api\n */\n writeFeature(feature, opt_options) {\n return this.writeGeometry(feature.getGeometry(), opt_options);\n }\n\n /**\n * Encode an array of features in this format.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n * @api\n */\n writeFeatures(features, opt_options) {\n return this.writeGeometry(\n new GeometryCollection(features.map((f) => f.getGeometry())),\n opt_options\n );\n }\n\n /**\n * Write a single geometry in this format.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n * @api\n */\n writeGeometry(geometry, opt_options) {\n const options = this.adaptOptions(opt_options);\n\n const writer = new WkbWriter({\n layout: this.layout_,\n littleEndian: this.littleEndian_,\n ewkb: this.ewkb_,\n\n nodata: {\n Z: this.nodataZ_,\n M: this.nodataM_,\n },\n });\n\n // extract SRID from `dataProjection`\n let srid = Number.isInteger(this.srid_) ? Number(this.srid_) : null;\n if (this.srid_ !== false && !Number.isInteger(this.srid_)) {\n const dataProjection =\n options.dataProjection && getProjection(options.dataProjection);\n if (dataProjection) {\n const code = dataProjection.getCode();\n if (code.indexOf('EPSG:') === 0) {\n srid = Number(code.substring(5));\n }\n }\n }\n\n writer.writeGeometry(\n transformGeometryWithOptions(geometry, true, options),\n srid\n );\n const buffer = writer.getBuffer();\n\n return this.hex_ ? encodeHexString(buffer) : buffer;\n }\n}\n\n/**\n * @param {ArrayBuffer} buffer source buffer\n * @return {string} encoded hex string\n */\nfunction encodeHexString(buffer) {\n const view = new Uint8Array(buffer);\n return Array.from(view.values())\n .map((x) => (x < 16 ? '0' : '') + Number(x).toString(16).toUpperCase())\n .join('');\n}\n\n/**\n * @param {string} text source text\n * @return {DataView} decoded binary buffer\n */\nfunction decodeHexString(text) {\n const buffer = new Uint8Array(text.length / 2);\n for (let i = 0; i < text.length / 2; i++) {\n buffer[i] = parseInt(text.substr(i * 2, 2), 16);\n }\n return new DataView(buffer.buffer);\n}\n\n/**\n * @param {string | ArrayBuffer | ArrayBufferView} source source\n * @return {DataView} data view\n */\nfunction getDataView(source) {\n if (typeof source === 'string') {\n return decodeHexString(source);\n } else if (ArrayBuffer.isView(source)) {\n if (source instanceof DataView) {\n return source;\n }\n return new DataView(source.buffer, source.byteOffset, source.byteLength);\n } else if (source instanceof ArrayBuffer) {\n return new DataView(source);\n } else {\n return null;\n }\n}\n\nexport default WKB;\n","/**\n * @module ol/format/XML\n */\nimport {isDocument, parse} from '../xml.js';\n\n/**\n * @classdesc\n * Generic format for reading non-feature XML data\n *\n * @abstract\n */\nclass XML {\n /**\n * Read the source document.\n *\n * @param {Document|Element|string} source The XML source.\n * @return {Object} An object representing the source.\n * @api\n */\n read(source) {\n if (!source) {\n return null;\n } else if (typeof source === 'string') {\n const doc = parse(source);\n return this.readFromDocument(doc);\n } else if (isDocument(source)) {\n return this.readFromDocument(/** @type {Document} */ (source));\n } else {\n return this.readFromNode(/** @type {Element} */ (source));\n }\n }\n\n /**\n * @param {Document} doc Document.\n * @return {Object} Object\n */\n readFromDocument(doc) {\n for (let n = doc.firstChild; n; n = n.nextSibling) {\n if (n.nodeType == Node.ELEMENT_NODE) {\n return this.readFromNode(/** @type {Element} */ (n));\n }\n }\n return null;\n }\n\n /**\n * @abstract\n * @param {Element} node Node.\n * @return {Object} Object\n */\n readFromNode(node) {}\n}\n\nexport default XML;\n","/**\n * @module ol/format/xlink\n */\n\n/**\n * @const\n * @type {string}\n */\nconst NAMESPACE_URI = 'http://www.w3.org/1999/xlink';\n\n/**\n * @param {Element} node Node.\n * @return {string|undefined} href.\n */\nexport function readHref(node) {\n return node.getAttributeNS(NAMESPACE_URI, 'href');\n}\n","/**\n * @module ol/format/WMSCapabilities\n */\nimport XML from './XML.js';\nimport {\n makeArrayPusher,\n makeObjectPropertyPusher,\n makeObjectPropertySetter,\n makeStructureNS,\n pushParseAndPop,\n} from '../xml.js';\nimport {\n readBooleanString,\n readDecimal,\n readDecimalString,\n readNonNegativeIntegerString,\n readPositiveInteger,\n readString,\n} from './xsd.js';\nimport {readHref} from './xlink.js';\n\n/**\n * @const\n * @type {Array}\n */\nconst NAMESPACE_URIS = [null, 'http://www.opengis.net/wms'];\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Service': makeObjectPropertySetter(readService),\n 'Capability': makeObjectPropertySetter(readCapability),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CAPABILITY_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Request': makeObjectPropertySetter(readRequest),\n 'Exception': makeObjectPropertySetter(readException),\n 'Layer': makeObjectPropertySetter(readCapabilityLayer),\n});\n\n/**\n * @classdesc\n * Format for reading WMS capabilities data\n *\n * @api\n */\nclass WMSCapabilities extends XML {\n constructor() {\n super();\n\n /**\n * @type {string|undefined}\n */\n this.version = undefined;\n }\n\n /**\n * @param {Element} node Node.\n * @return {Object} Object\n */\n readFromNode(node) {\n this.version = node.getAttribute('version').trim();\n const wmsCapabilityObject = pushParseAndPop(\n {\n 'version': this.version,\n },\n PARSERS,\n node,\n []\n );\n return wmsCapabilityObject ? wmsCapabilityObject : null;\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst SERVICE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Name': makeObjectPropertySetter(readString),\n 'Title': makeObjectPropertySetter(readString),\n 'Abstract': makeObjectPropertySetter(readString),\n 'KeywordList': makeObjectPropertySetter(readKeywordList),\n 'OnlineResource': makeObjectPropertySetter(readHref),\n 'ContactInformation': makeObjectPropertySetter(readContactInformation),\n 'Fees': makeObjectPropertySetter(readString),\n 'AccessConstraints': makeObjectPropertySetter(readString),\n 'LayerLimit': makeObjectPropertySetter(readPositiveInteger),\n 'MaxWidth': makeObjectPropertySetter(readPositiveInteger),\n 'MaxHeight': makeObjectPropertySetter(readPositiveInteger),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONTACT_INFORMATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'ContactPersonPrimary': makeObjectPropertySetter(readContactPersonPrimary),\n 'ContactPosition': makeObjectPropertySetter(readString),\n 'ContactAddress': makeObjectPropertySetter(readContactAddress),\n 'ContactVoiceTelephone': makeObjectPropertySetter(readString),\n 'ContactFacsimileTelephone': makeObjectPropertySetter(readString),\n 'ContactElectronicMailAddress': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONTACT_PERSON_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'ContactPerson': makeObjectPropertySetter(readString),\n 'ContactOrganization': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONTACT_ADDRESS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'AddressType': makeObjectPropertySetter(readString),\n 'Address': makeObjectPropertySetter(readString),\n 'City': makeObjectPropertySetter(readString),\n 'StateOrProvince': makeObjectPropertySetter(readString),\n 'PostCode': makeObjectPropertySetter(readString),\n 'Country': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst EXCEPTION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Format': makeArrayPusher(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst LAYER_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Name': makeObjectPropertySetter(readString),\n 'Title': makeObjectPropertySetter(readString),\n 'Abstract': makeObjectPropertySetter(readString),\n 'KeywordList': makeObjectPropertySetter(readKeywordList),\n 'CRS': makeObjectPropertyPusher(readString),\n 'EX_GeographicBoundingBox': makeObjectPropertySetter(\n readEXGeographicBoundingBox\n ),\n 'BoundingBox': makeObjectPropertyPusher(readBoundingBox),\n 'Dimension': makeObjectPropertyPusher(readDimension),\n 'Attribution': makeObjectPropertySetter(readAttribution),\n 'AuthorityURL': makeObjectPropertyPusher(readAuthorityURL),\n 'Identifier': makeObjectPropertyPusher(readString),\n 'MetadataURL': makeObjectPropertyPusher(readMetadataURL),\n 'DataURL': makeObjectPropertyPusher(readFormatOnlineresource),\n 'FeatureListURL': makeObjectPropertyPusher(readFormatOnlineresource),\n 'Style': makeObjectPropertyPusher(readStyle),\n 'MinScaleDenominator': makeObjectPropertySetter(readDecimal),\n 'MaxScaleDenominator': makeObjectPropertySetter(readDecimal),\n 'Layer': makeObjectPropertyPusher(readLayer),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst ATTRIBUTION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Title': makeObjectPropertySetter(readString),\n 'OnlineResource': makeObjectPropertySetter(readHref),\n 'LogoURL': makeObjectPropertySetter(readSizedFormatOnlineresource),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'westBoundLongitude': makeObjectPropertySetter(readDecimal),\n 'eastBoundLongitude': makeObjectPropertySetter(readDecimal),\n 'southBoundLatitude': makeObjectPropertySetter(readDecimal),\n 'northBoundLatitude': makeObjectPropertySetter(readDecimal),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst REQUEST_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'GetCapabilities': makeObjectPropertySetter(readOperationType),\n 'GetMap': makeObjectPropertySetter(readOperationType),\n 'GetFeatureInfo': makeObjectPropertySetter(readOperationType),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst OPERATIONTYPE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Format': makeObjectPropertyPusher(readString),\n 'DCPType': makeObjectPropertyPusher(readDCPType),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst DCPTYPE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'HTTP': makeObjectPropertySetter(readHTTP),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst HTTP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Get': makeObjectPropertySetter(readFormatOnlineresource),\n 'Post': makeObjectPropertySetter(readFormatOnlineresource),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Name': makeObjectPropertySetter(readString),\n 'Title': makeObjectPropertySetter(readString),\n 'Abstract': makeObjectPropertySetter(readString),\n 'LegendURL': makeObjectPropertyPusher(readSizedFormatOnlineresource),\n 'StyleSheetURL': makeObjectPropertySetter(readFormatOnlineresource),\n 'StyleURL': makeObjectPropertySetter(readFormatOnlineresource),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst FORMAT_ONLINERESOURCE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Format': makeObjectPropertySetter(readString),\n 'OnlineResource': makeObjectPropertySetter(readHref),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst KEYWORDLIST_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Keyword': makeArrayPusher(readString),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nfunction readAttribution(node, objectStack) {\n return pushParseAndPop({}, ATTRIBUTION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object} Bounding box object.\n */\nfunction readBoundingBox(node, objectStack) {\n const extent = [\n readDecimalString(node.getAttribute('minx')),\n readDecimalString(node.getAttribute('miny')),\n readDecimalString(node.getAttribute('maxx')),\n readDecimalString(node.getAttribute('maxy')),\n ];\n\n const resolutions = [\n readDecimalString(node.getAttribute('resx')),\n readDecimalString(node.getAttribute('resy')),\n ];\n\n return {\n 'crs': node.getAttribute('CRS'),\n 'extent': extent,\n 'res': resolutions,\n };\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../extent.js\").Extent|undefined} Bounding box object.\n */\nfunction readEXGeographicBoundingBox(node, objectStack) {\n const geographicBoundingBox = pushParseAndPop(\n {},\n EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS,\n node,\n objectStack\n );\n if (!geographicBoundingBox) {\n return undefined;\n }\n const westBoundLongitude =\n /** @type {number|undefined} */\n (geographicBoundingBox['westBoundLongitude']);\n const southBoundLatitude =\n /** @type {number|undefined} */\n (geographicBoundingBox['southBoundLatitude']);\n const eastBoundLongitude =\n /** @type {number|undefined} */\n (geographicBoundingBox['eastBoundLongitude']);\n const northBoundLatitude =\n /** @type {number|undefined} */\n (geographicBoundingBox['northBoundLatitude']);\n if (\n westBoundLongitude === undefined ||\n southBoundLatitude === undefined ||\n eastBoundLongitude === undefined ||\n northBoundLatitude === undefined\n ) {\n return undefined;\n }\n return [\n westBoundLongitude,\n southBoundLatitude,\n eastBoundLongitude,\n northBoundLatitude,\n ];\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Capability object.\n */\nfunction readCapability(node, objectStack) {\n return pushParseAndPop({}, CAPABILITY_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Service object.\n */\nfunction readService(node, objectStack) {\n return pushParseAndPop({}, SERVICE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Contact information object.\n */\nfunction readContactInformation(node, objectStack) {\n return pushParseAndPop({}, CONTACT_INFORMATION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Contact person object.\n */\nfunction readContactPersonPrimary(node, objectStack) {\n return pushParseAndPop({}, CONTACT_PERSON_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Contact address object.\n */\nfunction readContactAddress(node, objectStack) {\n return pushParseAndPop({}, CONTACT_ADDRESS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Format array.\n */\nfunction readException(node, objectStack) {\n return pushParseAndPop([], EXCEPTION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Layer object.\n */\nfunction readCapabilityLayer(node, objectStack) {\n const layerObject = pushParseAndPop({}, LAYER_PARSERS, node, objectStack);\n\n if (layerObject['Layer'] === undefined) {\n return Object.assign(layerObject, readLayer(node, objectStack));\n }\n\n return layerObject;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Layer object.\n */\nfunction readLayer(node, objectStack) {\n const parentLayerObject = /** @type {!Object} */ (\n objectStack[objectStack.length - 1]\n );\n\n const layerObject = pushParseAndPop({}, LAYER_PARSERS, node, objectStack);\n\n if (!layerObject) {\n return undefined;\n }\n let queryable = readBooleanString(node.getAttribute('queryable'));\n if (queryable === undefined) {\n queryable = parentLayerObject['queryable'];\n }\n layerObject['queryable'] = queryable !== undefined ? queryable : false;\n\n let cascaded = readNonNegativeIntegerString(node.getAttribute('cascaded'));\n if (cascaded === undefined) {\n cascaded = parentLayerObject['cascaded'];\n }\n layerObject['cascaded'] = cascaded;\n\n let opaque = readBooleanString(node.getAttribute('opaque'));\n if (opaque === undefined) {\n opaque = parentLayerObject['opaque'];\n }\n layerObject['opaque'] = opaque !== undefined ? opaque : false;\n\n let noSubsets = readBooleanString(node.getAttribute('noSubsets'));\n if (noSubsets === undefined) {\n noSubsets = parentLayerObject['noSubsets'];\n }\n layerObject['noSubsets'] = noSubsets !== undefined ? noSubsets : false;\n\n let fixedWidth = readDecimalString(node.getAttribute('fixedWidth'));\n if (!fixedWidth) {\n fixedWidth = parentLayerObject['fixedWidth'];\n }\n layerObject['fixedWidth'] = fixedWidth;\n\n let fixedHeight = readDecimalString(node.getAttribute('fixedHeight'));\n if (!fixedHeight) {\n fixedHeight = parentLayerObject['fixedHeight'];\n }\n layerObject['fixedHeight'] = fixedHeight;\n\n // See 7.2.4.8\n const addKeys = ['Style', 'CRS', 'AuthorityURL'];\n addKeys.forEach(function (key) {\n if (key in parentLayerObject) {\n const childValue = layerObject[key] || [];\n layerObject[key] = childValue.concat(parentLayerObject[key]);\n }\n });\n\n const replaceKeys = [\n 'EX_GeographicBoundingBox',\n 'BoundingBox',\n 'Dimension',\n 'Attribution',\n 'MinScaleDenominator',\n 'MaxScaleDenominator',\n ];\n replaceKeys.forEach(function (key) {\n if (!(key in layerObject)) {\n const parentValue = parentLayerObject[key];\n layerObject[key] = parentValue;\n }\n });\n\n return layerObject;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object} Dimension object.\n */\nfunction readDimension(node, objectStack) {\n const dimensionObject = {\n 'name': node.getAttribute('name'),\n 'units': node.getAttribute('units'),\n 'unitSymbol': node.getAttribute('unitSymbol'),\n 'default': node.getAttribute('default'),\n 'multipleValues': readBooleanString(node.getAttribute('multipleValues')),\n 'nearestValue': readBooleanString(node.getAttribute('nearestValue')),\n 'current': readBooleanString(node.getAttribute('current')),\n 'values': readString(node),\n };\n return dimensionObject;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Online resource object.\n */\nfunction readFormatOnlineresource(node, objectStack) {\n return pushParseAndPop({}, FORMAT_ONLINERESOURCE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Request object.\n */\nfunction readRequest(node, objectStack) {\n return pushParseAndPop({}, REQUEST_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} DCP type object.\n */\nfunction readDCPType(node, objectStack) {\n return pushParseAndPop({}, DCPTYPE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} HTTP object.\n */\nfunction readHTTP(node, objectStack) {\n return pushParseAndPop({}, HTTP_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Operation type object.\n */\nfunction readOperationType(node, objectStack) {\n return pushParseAndPop({}, OPERATIONTYPE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Online resource object.\n */\nfunction readSizedFormatOnlineresource(node, objectStack) {\n const formatOnlineresource = readFormatOnlineresource(node, objectStack);\n if (formatOnlineresource) {\n const size = [\n readNonNegativeIntegerString(node.getAttribute('width')),\n readNonNegativeIntegerString(node.getAttribute('height')),\n ];\n formatOnlineresource['size'] = size;\n return formatOnlineresource;\n }\n return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Authority URL object.\n */\nfunction readAuthorityURL(node, objectStack) {\n const authorityObject = readFormatOnlineresource(node, objectStack);\n if (authorityObject) {\n authorityObject['name'] = node.getAttribute('name');\n return authorityObject;\n }\n return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Metadata URL object.\n */\nfunction readMetadataURL(node, objectStack) {\n const metadataObject = readFormatOnlineresource(node, objectStack);\n if (metadataObject) {\n metadataObject['type'] = node.getAttribute('type');\n return metadataObject;\n }\n return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nfunction readStyle(node, objectStack) {\n return pushParseAndPop({}, STYLE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Keyword list.\n */\nfunction readKeywordList(node, objectStack) {\n return pushParseAndPop([], KEYWORDLIST_PARSERS, node, objectStack);\n}\n\nexport default WMSCapabilities;\n","/**\n * @module ol/format/WMSGetFeatureInfo\n */\nimport GML2 from './GML2.js';\nimport XMLFeature from './XMLFeature.js';\nimport {assign} from '../obj.js';\nimport {extend, includes} from '../array.js';\nimport {makeArrayPusher, makeStructureNS, pushParseAndPop} from '../xml.js';\n\n/**\n * @typedef {Object} Options\n * @property {Array} [layers] If set, only features of the given layers will be returned by the format when read.\n */\n\n/**\n * @const\n * @type {string}\n */\nconst featureIdentifier = '_feature';\n\n/**\n * @const\n * @type {string}\n */\nconst layerIdentifier = '_layer';\n\n/**\n * @classdesc\n * Format for reading WMSGetFeatureInfo format. It uses\n * {@link module:ol/format/GML2~GML2} to read features.\n *\n * @api\n */\nclass WMSGetFeatureInfo extends XMLFeature {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {string}\n */\n this.featureNS_ = 'http://mapserver.gis.umn.edu/mapserver';\n\n /**\n * @private\n * @type {GML2}\n */\n this.gmlFormat_ = new GML2();\n\n /**\n * @private\n * @type {Array|null}\n */\n this.layers_ = options.layers ? options.layers : null;\n }\n\n /**\n * @return {Array|null} layers\n */\n getLayers() {\n return this.layers_;\n }\n\n /**\n * @param {Array|null} layers Layers to parse.\n */\n setLayers(layers) {\n this.layers_ = layers;\n }\n\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array} Features.\n * @private\n */\n readFeatures_(node, objectStack) {\n node.setAttribute('namespaceURI', this.featureNS_);\n const localName = node.localName;\n /** @type {Array} */\n let features = [];\n if (node.childNodes.length === 0) {\n return features;\n }\n if (localName == 'msGMLOutput') {\n for (let i = 0, ii = node.childNodes.length; i < ii; i++) {\n const layer = node.childNodes[i];\n if (layer.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n const layerElement = /** @type {Element} */ (layer);\n const context = objectStack[0];\n\n const toRemove = layerIdentifier;\n const layerName = layerElement.localName.replace(toRemove, '');\n\n if (this.layers_ && !includes(this.layers_, layerName)) {\n continue;\n }\n\n const featureType = layerName + featureIdentifier;\n\n context['featureType'] = featureType;\n context['featureNS'] = this.featureNS_;\n\n /** @type {Object} */\n const parsers = {};\n parsers[featureType] = makeArrayPusher(\n this.gmlFormat_.readFeatureElement,\n this.gmlFormat_\n );\n const parsersNS = makeStructureNS(\n [context['featureNS'], null],\n parsers\n );\n layerElement.setAttribute('namespaceURI', this.featureNS_);\n const layerFeatures = pushParseAndPop(\n [],\n // @ts-ignore\n parsersNS,\n layerElement,\n objectStack,\n this.gmlFormat_\n );\n if (layerFeatures) {\n extend(features, layerFeatures);\n }\n }\n }\n if (localName == 'FeatureCollection') {\n const gmlFeatures = pushParseAndPop(\n [],\n this.gmlFormat_.FEATURE_COLLECTION_PARSERS,\n node,\n [{}],\n this.gmlFormat_\n );\n if (gmlFeatures) {\n features = gmlFeatures;\n }\n }\n return features;\n }\n\n /**\n * @protected\n * @param {Element} node Node.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\n * @return {Array} Features.\n */\n readFeaturesFromNode(node, opt_options) {\n const options = {};\n if (opt_options) {\n assign(options, this.getReadOptions(node, opt_options));\n }\n return this.readFeatures_(node, [options]);\n }\n}\n\nexport default WMSGetFeatureInfo;\n","/**\n * @module ol/format/OWS\n */\nimport XML from './XML.js';\nimport {\n makeObjectPropertyPusher,\n makeObjectPropertySetter,\n makeStructureNS,\n pushParseAndPop,\n} from '../xml.js';\nimport {readHref} from './xlink.js';\nimport {readString} from './xsd.js';\n\n/**\n * @const\n * @type {Array}\n */\nconst NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'ServiceIdentification': makeObjectPropertySetter(readServiceIdentification),\n 'ServiceProvider': makeObjectPropertySetter(readServiceProvider),\n 'OperationsMetadata': makeObjectPropertySetter(readOperationsMetadata),\n});\n\nclass OWS extends XML {\n constructor() {\n super();\n }\n\n /**\n * @param {Element} node Node.\n * @return {Object} Object\n */\n readFromNode(node) {\n const owsObject = pushParseAndPop({}, PARSERS, node, []);\n return owsObject ? owsObject : null;\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst ADDRESS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'DeliveryPoint': makeObjectPropertySetter(readString),\n 'City': makeObjectPropertySetter(readString),\n 'AdministrativeArea': makeObjectPropertySetter(readString),\n 'PostalCode': makeObjectPropertySetter(readString),\n 'Country': makeObjectPropertySetter(readString),\n 'ElectronicMailAddress': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst ALLOWED_VALUES_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Value': makeObjectPropertyPusher(readValue),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONSTRAINT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'AllowedValues': makeObjectPropertySetter(readAllowedValues),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONTACT_INFO_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Phone': makeObjectPropertySetter(readPhone),\n 'Address': makeObjectPropertySetter(readAddress),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst DCP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'HTTP': makeObjectPropertySetter(readHttp),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst HTTP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Get': makeObjectPropertyPusher(readGet),\n 'Post': undefined, // TODO\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst OPERATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'DCP': makeObjectPropertySetter(readDcp),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst OPERATIONS_METADATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Operation': readOperation,\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst PHONE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Voice': makeObjectPropertySetter(readString),\n 'Facsimile': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst REQUEST_METHOD_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Constraint': makeObjectPropertyPusher(readConstraint),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst SERVICE_CONTACT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'IndividualName': makeObjectPropertySetter(readString),\n 'PositionName': makeObjectPropertySetter(readString),\n 'ContactInfo': makeObjectPropertySetter(readContactInfo),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst SERVICE_IDENTIFICATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Abstract': makeObjectPropertySetter(readString),\n 'AccessConstraints': makeObjectPropertySetter(readString),\n 'Fees': makeObjectPropertySetter(readString),\n 'Title': makeObjectPropertySetter(readString),\n 'ServiceTypeVersion': makeObjectPropertySetter(readString),\n 'ServiceType': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst SERVICE_PROVIDER_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'ProviderName': makeObjectPropertySetter(readString),\n 'ProviderSite': makeObjectPropertySetter(readHref),\n 'ServiceContact': makeObjectPropertySetter(readServiceContact),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The address.\n */\nfunction readAddress(node, objectStack) {\n return pushParseAndPop({}, ADDRESS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The values.\n */\nfunction readAllowedValues(node, objectStack) {\n return pushParseAndPop({}, ALLOWED_VALUES_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The constraint.\n */\nfunction readConstraint(node, objectStack) {\n const name = node.getAttribute('name');\n if (!name) {\n return undefined;\n }\n return pushParseAndPop({'name': name}, CONSTRAINT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The contact info.\n */\nfunction readContactInfo(node, objectStack) {\n return pushParseAndPop({}, CONTACT_INFO_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The DCP.\n */\nfunction readDcp(node, objectStack) {\n return pushParseAndPop({}, DCP_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The GET object.\n */\nfunction readGet(node, objectStack) {\n const href = readHref(node);\n if (!href) {\n return undefined;\n }\n return pushParseAndPop(\n {'href': href},\n REQUEST_METHOD_PARSERS,\n node,\n objectStack\n );\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The HTTP object.\n */\nfunction readHttp(node, objectStack) {\n return pushParseAndPop({}, HTTP_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operation.\n */\nfunction readOperation(node, objectStack) {\n const name = node.getAttribute('name');\n const value = pushParseAndPop({}, OPERATION_PARSERS, node, objectStack);\n if (!value) {\n return undefined;\n }\n const object = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n object[name] = value;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operations metadata.\n */\nfunction readOperationsMetadata(node, objectStack) {\n return pushParseAndPop({}, OPERATIONS_METADATA_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The phone.\n */\nfunction readPhone(node, objectStack) {\n return pushParseAndPop({}, PHONE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service identification.\n */\nfunction readServiceIdentification(node, objectStack) {\n return pushParseAndPop({}, SERVICE_IDENTIFICATION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service contact.\n */\nfunction readServiceContact(node, objectStack) {\n return pushParseAndPop({}, SERVICE_CONTACT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service provider.\n */\nfunction readServiceProvider(node, objectStack) {\n return pushParseAndPop({}, SERVICE_PROVIDER_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {string|undefined} The value.\n */\nfunction readValue(node, objectStack) {\n return readString(node);\n}\n\nexport default OWS;\n","/**\n * @module ol/format/WMTSCapabilities\n */\nimport OWS from './OWS.js';\nimport XML from './XML.js';\nimport {boundingExtent} from '../extent.js';\nimport {\n makeArrayPusher,\n makeObjectPropertyPusher,\n makeObjectPropertySetter,\n makeStructureNS,\n pushParseAndPop,\n} from '../xml.js';\nimport {readDecimal, readPositiveInteger, readString} from './xsd.js';\nimport {readHref} from './xlink.js';\n\n/**\n * @const\n * @type {Array}\n */\nconst NAMESPACE_URIS = [null, 'http://www.opengis.net/wmts/1.0'];\n\n/**\n * @const\n * @type {Array}\n */\nconst OWS_NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Contents': makeObjectPropertySetter(readContents),\n});\n\n/**\n * @classdesc\n * Format for reading WMTS capabilities data.\n *\n * @api\n */\nclass WMTSCapabilities extends XML {\n constructor() {\n super();\n\n /**\n * @type {OWS}\n * @private\n */\n this.owsParser_ = new OWS();\n }\n\n /**\n * @param {Element} node Node.\n * @return {Object} Object\n */\n readFromNode(node) {\n let version = node.getAttribute('version');\n if (version) {\n version = version.trim();\n }\n let WMTSCapabilityObject = this.owsParser_.readFromNode(node);\n if (!WMTSCapabilityObject) {\n return null;\n }\n WMTSCapabilityObject['version'] = version;\n WMTSCapabilityObject = pushParseAndPop(\n WMTSCapabilityObject,\n PARSERS,\n node,\n []\n );\n return WMTSCapabilityObject ? WMTSCapabilityObject : null;\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst CONTENTS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'Layer': makeObjectPropertyPusher(readLayer),\n 'TileMatrixSet': makeObjectPropertyPusher(readTileMatrixSet),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst LAYER_PARSERS = makeStructureNS(\n NAMESPACE_URIS,\n {\n 'Style': makeObjectPropertyPusher(readStyle),\n 'Format': makeObjectPropertyPusher(readString),\n 'TileMatrixSetLink': makeObjectPropertyPusher(readTileMatrixSetLink),\n 'Dimension': makeObjectPropertyPusher(readDimensions),\n 'ResourceURL': makeObjectPropertyPusher(readResourceUrl),\n },\n makeStructureNS(OWS_NAMESPACE_URIS, {\n 'Title': makeObjectPropertySetter(readString),\n 'Abstract': makeObjectPropertySetter(readString),\n 'WGS84BoundingBox': makeObjectPropertySetter(readBoundingBox),\n 'Identifier': makeObjectPropertySetter(readString),\n })\n);\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst STYLE_PARSERS = makeStructureNS(\n NAMESPACE_URIS,\n {\n 'LegendURL': makeObjectPropertyPusher(readLegendUrl),\n },\n makeStructureNS(OWS_NAMESPACE_URIS, {\n 'Title': makeObjectPropertySetter(readString),\n 'Identifier': makeObjectPropertySetter(readString),\n })\n);\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst TMS_LINKS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'TileMatrixSet': makeObjectPropertySetter(readString),\n 'TileMatrixSetLimits': makeObjectPropertySetter(readTileMatrixLimitsList),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst TMS_LIMITS_LIST_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'TileMatrixLimits': makeArrayPusher(readTileMatrixLimits),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst TMS_LIMITS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'TileMatrix': makeObjectPropertySetter(readString),\n 'MinTileRow': makeObjectPropertySetter(readPositiveInteger),\n 'MaxTileRow': makeObjectPropertySetter(readPositiveInteger),\n 'MinTileCol': makeObjectPropertySetter(readPositiveInteger),\n 'MaxTileCol': makeObjectPropertySetter(readPositiveInteger),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst DIMENSION_PARSERS = makeStructureNS(\n NAMESPACE_URIS,\n {\n 'Default': makeObjectPropertySetter(readString),\n 'Value': makeObjectPropertyPusher(readString),\n },\n makeStructureNS(OWS_NAMESPACE_URIS, {\n 'Identifier': makeObjectPropertySetter(readString),\n })\n);\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst WGS84_BBOX_READERS = makeStructureNS(OWS_NAMESPACE_URIS, {\n 'LowerCorner': makeArrayPusher(readCoordinates),\n 'UpperCorner': makeArrayPusher(readCoordinates),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst TMS_PARSERS = makeStructureNS(\n NAMESPACE_URIS,\n {\n 'WellKnownScaleSet': makeObjectPropertySetter(readString),\n 'TileMatrix': makeObjectPropertyPusher(readTileMatrix),\n },\n makeStructureNS(OWS_NAMESPACE_URIS, {\n 'SupportedCRS': makeObjectPropertySetter(readString),\n 'Identifier': makeObjectPropertySetter(readString),\n 'BoundingBox': makeObjectPropertySetter(readBoundingBox),\n })\n);\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst TM_PARSERS = makeStructureNS(\n NAMESPACE_URIS,\n {\n 'TopLeftCorner': makeObjectPropertySetter(readCoordinates),\n 'ScaleDenominator': makeObjectPropertySetter(readDecimal),\n 'TileWidth': makeObjectPropertySetter(readPositiveInteger),\n 'TileHeight': makeObjectPropertySetter(readPositiveInteger),\n 'MatrixWidth': makeObjectPropertySetter(readPositiveInteger),\n 'MatrixHeight': makeObjectPropertySetter(readPositiveInteger),\n },\n makeStructureNS(OWS_NAMESPACE_URIS, {\n 'Identifier': makeObjectPropertySetter(readString),\n })\n);\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nfunction readContents(node, objectStack) {\n return pushParseAndPop({}, CONTENTS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Layers object.\n */\nfunction readLayer(node, objectStack) {\n return pushParseAndPop({}, LAYER_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set object.\n */\nfunction readTileMatrixSet(node, objectStack) {\n return pushParseAndPop({}, TMS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nfunction readStyle(node, objectStack) {\n const style = pushParseAndPop({}, STYLE_PARSERS, node, objectStack);\n if (!style) {\n return undefined;\n }\n const isDefault = node.getAttribute('isDefault') === 'true';\n style['isDefault'] = isDefault;\n return style;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set Link object.\n */\nfunction readTileMatrixSetLink(node, objectStack) {\n return pushParseAndPop({}, TMS_LINKS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Dimension object.\n */\nfunction readDimensions(node, objectStack) {\n return pushParseAndPop({}, DIMENSION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Resource URL object.\n */\nfunction readResourceUrl(node, objectStack) {\n const format = node.getAttribute('format');\n const template = node.getAttribute('template');\n const resourceType = node.getAttribute('resourceType');\n const resource = {};\n if (format) {\n resource['format'] = format;\n }\n if (template) {\n resource['template'] = template;\n }\n if (resourceType) {\n resource['resourceType'] = resourceType;\n }\n return resource;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} BBox object.\n */\nfunction readBoundingBox(node, objectStack) {\n const coordinates = pushParseAndPop(\n [],\n WGS84_BBOX_READERS,\n node,\n objectStack\n );\n if (coordinates.length != 2) {\n return undefined;\n }\n return boundingExtent(coordinates);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Legend object.\n */\nfunction readLegendUrl(node, objectStack) {\n const legend = {};\n legend['format'] = node.getAttribute('format');\n legend['href'] = readHref(node);\n return legend;\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Coordinates object.\n */\nfunction readCoordinates(node, objectStack) {\n const coordinates = readString(node).split(/\\s+/);\n if (!coordinates || coordinates.length != 2) {\n return undefined;\n }\n const x = +coordinates[0];\n const y = +coordinates[1];\n if (isNaN(x) || isNaN(y)) {\n return undefined;\n }\n return [x, y];\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrix object.\n */\nfunction readTileMatrix(node, objectStack) {\n return pushParseAndPop({}, TM_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixSetLimits Object.\n */\nfunction readTileMatrixLimitsList(node, objectStack) {\n return pushParseAndPop([], TMS_LIMITS_LIST_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixLimits Array.\n */\nfunction readTileMatrixLimits(node, objectStack) {\n return pushParseAndPop({}, TMS_LIMITS_PARSERS, node, objectStack);\n}\n\nexport default WMTSCapabilities;\n","/**\n * @module ol/format/JSONFeature\n */\nimport FeatureFormat from './Feature.js';\nimport {abstract} from '../util.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for JSON feature formats.\n *\n * @abstract\n */\nclass JSONFeature extends FeatureFormat {\n constructor() {\n super();\n }\n\n /**\n * @return {import(\"./Feature.js\").Type} Format.\n */\n getType() {\n return 'json';\n }\n\n /**\n * Read a feature. Only works for a single feature. Use `readFeatures` to\n * read a feature collection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n * @api\n */\n readFeature(source, opt_options) {\n return this.readFeatureFromObject(\n getObject(source),\n this.getReadOptions(source, opt_options)\n );\n }\n\n /**\n * Read all features. Works with both a single feature and a feature\n * collection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n * @api\n */\n readFeatures(source, opt_options) {\n return this.readFeaturesFromObject(\n getObject(source),\n this.getReadOptions(source, opt_options)\n );\n }\n\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromObject(object, opt_options) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromObject(object, opt_options) {\n return abstract();\n }\n\n /**\n * Read a geometry.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n * @api\n */\n readGeometry(source, opt_options) {\n return this.readGeometryFromObject(\n getObject(source),\n this.getReadOptions(source, opt_options)\n );\n }\n\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromObject(object, opt_options) {\n return abstract();\n }\n\n /**\n * Read the projection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n * @api\n */\n readProjection(source) {\n return this.readProjectionFromObject(getObject(source));\n }\n\n /**\n * @abstract\n * @param {Object} object Object.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromObject(object) {\n return abstract();\n }\n\n /**\n * Encode a feature as string.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded feature.\n * @api\n */\n writeFeature(feature, opt_options) {\n return JSON.stringify(this.writeFeatureObject(feature, opt_options));\n }\n\n /**\n * @abstract\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n writeFeatureObject(feature, opt_options) {\n return abstract();\n }\n\n /**\n * Encode an array of features as string.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded features.\n * @api\n */\n writeFeatures(features, opt_options) {\n return JSON.stringify(this.writeFeaturesObject(features, opt_options));\n }\n\n /**\n * @abstract\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n writeFeaturesObject(features, opt_options) {\n return abstract();\n }\n\n /**\n * Encode a geometry as string.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded geometry.\n * @api\n */\n writeGeometry(geometry, opt_options) {\n return JSON.stringify(this.writeGeometryObject(geometry, opt_options));\n }\n\n /**\n * @abstract\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n writeGeometryObject(geometry, opt_options) {\n return abstract();\n }\n}\n\n/**\n * @param {Document|Element|Object|string} source Source.\n * @return {Object} Object.\n */\nfunction getObject(source) {\n if (typeof source === 'string') {\n const object = JSON.parse(source);\n return object ? /** @type {Object} */ (object) : null;\n } else if (source !== null) {\n return source;\n } else {\n return null;\n }\n}\n\nexport default JSONFeature;\n","/**\n * @module ol/format/TopoJSON\n */\nimport Feature from '../Feature.js';\nimport JSONFeature from './JSONFeature.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {get as getProjection} from '../proj.js';\nimport {transformGeometryWithOptions} from './Feature.js';\n\n/**\n * @typedef {import(\"topojson-specification\").Topology} TopoJSONTopology\n * @typedef {import(\"topojson-specification\").GeometryCollection} TopoJSONGeometryCollection\n * @typedef {import(\"topojson-specification\").GeometryObject} TopoJSONGeometry\n * @typedef {import(\"topojson-specification\").Point} TopoJSONPoint\n * @typedef {import(\"topojson-specification\").MultiPoint} TopoJSONMultiPoint\n * @typedef {import(\"topojson-specification\").LineString} TopoJSONLineString\n * @typedef {import(\"topojson-specification\").MultiLineString} TopoJSONMultiLineString\n * @typedef {import(\"topojson-specification\").Polygon} TopoJSONPolygon\n * @typedef {import(\"topojson-specification\").MultiPolygon} TopoJSONMultiPolygon\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection='EPSG:4326'] Default data projection.\n * @property {string} [layerName] Set the name of the TopoJSON topology\n * `objects`'s children as feature property with the specified name. This means\n * that when set to `'layer'`, a topology like\n * ```\n * {\n * \"type\": \"Topology\",\n * \"objects\": {\n * \"example\": {\n * \"type\": \"GeometryCollection\",\n * \"geometries\": []\n * }\n * }\n * }\n * ```\n * will result in features that have a property `'layer'` set to `'example'`.\n * When not set, no property will be added to features.\n * @property {Array} [layers] Names of the TopoJSON topology's\n * `objects`'s children to read features from. If not provided, features will\n * be read from all children.\n */\n\n/**\n * @classdesc\n * Feature format for reading data in the TopoJSON format.\n *\n * @api\n */\nclass TopoJSON extends JSONFeature {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.layerName_ = options.layerName;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layers_ = options.layers ? options.layers : null;\n\n /**\n * @type {import(\"../proj/Projection.js\").default}\n */\n this.dataProjection = getProjection(\n options.dataProjection ? options.dataProjection : 'EPSG:4326'\n );\n }\n\n /**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromObject(object, opt_options) {\n if (object.type == 'Topology') {\n const topoJSONTopology = /** @type {TopoJSONTopology} */ (object);\n let transform,\n scale = null,\n translate = null;\n if (topoJSONTopology['transform']) {\n transform = topoJSONTopology['transform'];\n scale = transform['scale'];\n translate = transform['translate'];\n }\n const arcs = topoJSONTopology['arcs'];\n if (transform) {\n transformArcs(arcs, scale, translate);\n }\n /** @type {Array} */\n const features = [];\n const topoJSONFeatures = topoJSONTopology['objects'];\n const property = this.layerName_;\n let feature;\n for (const objectName in topoJSONFeatures) {\n if (this.layers_ && this.layers_.indexOf(objectName) == -1) {\n continue;\n }\n if (topoJSONFeatures[objectName].type === 'GeometryCollection') {\n feature = /** @type {TopoJSONGeometryCollection} */ (\n topoJSONFeatures[objectName]\n );\n features.push.apply(\n features,\n readFeaturesFromGeometryCollection(\n feature,\n arcs,\n scale,\n translate,\n property,\n objectName,\n opt_options\n )\n );\n } else {\n feature = /** @type {TopoJSONGeometry} */ (\n topoJSONFeatures[objectName]\n );\n features.push(\n readFeatureFromGeometry(\n feature,\n arcs,\n scale,\n translate,\n property,\n objectName,\n opt_options\n )\n );\n }\n }\n return features;\n } else {\n return [];\n }\n }\n\n /**\n * @param {Object} object Object.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromObject(object) {\n return this.dataProjection;\n }\n}\n\n/**\n * @const\n * @type {Object}\n */\nconst GEOMETRY_READERS = {\n 'Point': readPointGeometry,\n 'LineString': readLineStringGeometry,\n 'Polygon': readPolygonGeometry,\n 'MultiPoint': readMultiPointGeometry,\n 'MultiLineString': readMultiLineStringGeometry,\n 'MultiPolygon': readMultiPolygonGeometry,\n};\n\n/**\n * Concatenate arcs into a coordinate array.\n * @param {Array} indices Indices of arcs to concatenate. Negative\n * values indicate arcs need to be reversed.\n * @param {Array>} arcs Array of arcs (already\n * transformed).\n * @return {Array} Coordinates array.\n */\nfunction concatenateArcs(indices, arcs) {\n /** @type {Array} */\n const coordinates = [];\n let index;\n for (let i = 0, ii = indices.length; i < ii; ++i) {\n index = indices[i];\n if (i > 0) {\n // splicing together arcs, discard last point\n coordinates.pop();\n }\n if (index >= 0) {\n // forward arc\n const arc = arcs[index];\n for (let j = 0, jj = arc.length; j < jj; ++j) {\n coordinates.push(arc[j].slice(0));\n }\n } else {\n // reverse arc\n const arc = arcs[~index];\n for (let j = arc.length - 1; j >= 0; --j) {\n coordinates.push(arc[j].slice(0));\n }\n }\n }\n return coordinates;\n}\n\n/**\n * Create a point from a TopoJSON geometry object.\n *\n * @param {TopoJSONPoint} object TopoJSON object.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n * @return {Point} Geometry.\n */\nfunction readPointGeometry(object, scale, translate) {\n const coordinates = object['coordinates'];\n if (scale && translate) {\n transformVertex(coordinates, scale, translate);\n }\n return new Point(coordinates);\n}\n\n/**\n * Create a multi-point from a TopoJSON geometry object.\n *\n * @param {TopoJSONMultiPoint} object TopoJSON object.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n * @return {MultiPoint} Geometry.\n */\nfunction readMultiPointGeometry(object, scale, translate) {\n const coordinates = object['coordinates'];\n if (scale && translate) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n transformVertex(coordinates[i], scale, translate);\n }\n }\n return new MultiPoint(coordinates);\n}\n\n/**\n * Create a linestring from a TopoJSON geometry object.\n *\n * @param {TopoJSONLineString} object TopoJSON object.\n * @param {Array>} arcs Array of arcs.\n * @return {LineString} Geometry.\n */\nfunction readLineStringGeometry(object, arcs) {\n const coordinates = concatenateArcs(object['arcs'], arcs);\n return new LineString(coordinates);\n}\n\n/**\n * Create a multi-linestring from a TopoJSON geometry object.\n *\n * @param {TopoJSONMultiLineString} object TopoJSON object.\n * @param {Array>} arcs Array of arcs.\n * @return {MultiLineString} Geometry.\n */\nfunction readMultiLineStringGeometry(object, arcs) {\n const coordinates = [];\n for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {\n coordinates[i] = concatenateArcs(object['arcs'][i], arcs);\n }\n return new MultiLineString(coordinates);\n}\n\n/**\n * Create a polygon from a TopoJSON geometry object.\n *\n * @param {TopoJSONPolygon} object TopoJSON object.\n * @param {Array>} arcs Array of arcs.\n * @return {Polygon} Geometry.\n */\nfunction readPolygonGeometry(object, arcs) {\n const coordinates = [];\n for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {\n coordinates[i] = concatenateArcs(object['arcs'][i], arcs);\n }\n return new Polygon(coordinates);\n}\n\n/**\n * Create a multi-polygon from a TopoJSON geometry object.\n *\n * @param {TopoJSONMultiPolygon} object TopoJSON object.\n * @param {Array>} arcs Array of arcs.\n * @return {MultiPolygon} Geometry.\n */\nfunction readMultiPolygonGeometry(object, arcs) {\n const coordinates = [];\n for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {\n // for each polygon\n const polyArray = object['arcs'][i];\n const ringCoords = [];\n for (let j = 0, jj = polyArray.length; j < jj; ++j) {\n // for each ring\n ringCoords[j] = concatenateArcs(polyArray[j], arcs);\n }\n coordinates[i] = ringCoords;\n }\n return new MultiPolygon(coordinates);\n}\n\n/**\n * Create features from a TopoJSON GeometryCollection object.\n *\n * @param {TopoJSONGeometryCollection} collection TopoJSON Geometry\n * object.\n * @param {Array>} arcs Array of arcs.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n * @param {string|undefined} property Property to set the `GeometryCollection`'s parent\n * object to.\n * @param {string} name Name of the `Topology`'s child object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Array} Array of features.\n */\nfunction readFeaturesFromGeometryCollection(\n collection,\n arcs,\n scale,\n translate,\n property,\n name,\n opt_options\n) {\n const geometries = collection['geometries'];\n const features = [];\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n features[i] = readFeatureFromGeometry(\n geometries[i],\n arcs,\n scale,\n translate,\n property,\n name,\n opt_options\n );\n }\n return features;\n}\n\n/**\n * Create a feature from a TopoJSON geometry object.\n *\n * @param {TopoJSONGeometry} object TopoJSON geometry object.\n * @param {Array>} arcs Array of arcs.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n * @param {string|undefined} property Property to set the `GeometryCollection`'s parent\n * object to.\n * @param {string} name Name of the `Topology`'s child object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Feature} Feature.\n */\nfunction readFeatureFromGeometry(\n object,\n arcs,\n scale,\n translate,\n property,\n name,\n opt_options\n) {\n let geometry = null;\n const type = object.type;\n if (type) {\n const geometryReader = GEOMETRY_READERS[type];\n if (type === 'Point' || type === 'MultiPoint') {\n geometry = geometryReader(object, scale, translate);\n } else {\n geometry = geometryReader(object, arcs);\n }\n geometry = transformGeometryWithOptions(geometry, false, opt_options);\n }\n const feature = new Feature({geometry: geometry});\n if (object.id !== undefined) {\n feature.setId(object.id);\n }\n let properties = object.properties;\n if (property) {\n if (!properties) {\n properties = {};\n }\n properties[property] = name;\n }\n if (properties) {\n feature.setProperties(properties, true);\n }\n return feature;\n}\n\n/**\n * Apply a linear transform to array of arcs. The provided array of arcs is\n * modified in place.\n *\n * @param {Array>} arcs Array of arcs.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n */\nfunction transformArcs(arcs, scale, translate) {\n for (let i = 0, ii = arcs.length; i < ii; ++i) {\n transformArc(arcs[i], scale, translate);\n }\n}\n\n/**\n * Apply a linear transform to an arc. The provided arc is modified in place.\n *\n * @param {Array} arc Arc.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n */\nfunction transformArc(arc, scale, translate) {\n let x = 0;\n let y = 0;\n for (let i = 0, ii = arc.length; i < ii; ++i) {\n const vertex = arc[i];\n x += vertex[0];\n y += vertex[1];\n vertex[0] = x;\n vertex[1] = y;\n transformVertex(vertex, scale, translate);\n }\n}\n\n/**\n * Apply a linear transform to a vertex. The provided vertex is modified in\n * place.\n *\n * @param {import(\"../coordinate.js\").Coordinate} vertex Vertex.\n * @param {Array} scale Scale for each dimension.\n * @param {Array} translate Translation for each dimension.\n */\nfunction transformVertex(vertex, scale, translate) {\n vertex[0] = vertex[0] * scale[0] + translate[0];\n vertex[1] = vertex[1] * scale[1] + translate[1];\n}\n\nexport default TopoJSON;\n","/**\n * @module ol/format/GeoJSON\n */\n\nimport Feature from '../Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport JSONFeature from './JSONFeature.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {assert} from '../asserts.js';\nimport {assign, isEmpty} from '../obj.js';\nimport {get as getProjection} from '../proj.js';\nimport {transformGeometryWithOptions} from './Feature.js';\n\n/**\n * @typedef {import(\"geojson\").GeoJSON} GeoJSONObject\n * @typedef {import(\"geojson\").Feature} GeoJSONFeature\n * @typedef {import(\"geojson\").FeatureCollection} GeoJSONFeatureCollection\n * @typedef {import(\"geojson\").Geometry} GeoJSONGeometry\n * @typedef {import(\"geojson\").Point} GeoJSONPoint\n * @typedef {import(\"geojson\").LineString} GeoJSONLineString\n * @typedef {import(\"geojson\").Polygon} GeoJSONPolygon\n * @typedef {import(\"geojson\").MultiPoint} GeoJSONMultiPoint\n * @typedef {import(\"geojson\").MultiLineString} GeoJSONMultiLineString\n * @typedef {import(\"geojson\").MultiPolygon} GeoJSONMultiPolygon\n * @typedef {import(\"geojson\").GeometryCollection} GeoJSONGeometryCollection\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection='EPSG:4326'] Default data projection.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection for features read or\n * written by the format. Options passed to read or write methods will take precedence.\n * @property {string} [geometryName] Geometry name to use when creating features.\n * @property {boolean} [extractGeometryName=false] Certain GeoJSON providers include\n * the geometry_name field in the feature GeoJSON. If set to `true` the GeoJSON reader\n * will look for that field to set the geometry name. If both this field is set to `true`\n * and a `geometryName` is provided, the `geometryName` will take precedence.\n */\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GeoJSON format.\n *\n * @api\n */\nclass GeoJSON extends JSONFeature {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super();\n\n /**\n * @type {import(\"../proj/Projection.js\").default}\n */\n this.dataProjection = getProjection(\n options.dataProjection ? options.dataProjection : 'EPSG:4326'\n );\n\n if (options.featureProjection) {\n /**\n * @type {import(\"../proj/Projection.js\").default}\n */\n this.defaultFeatureProjection = getProjection(options.featureProjection);\n }\n\n /**\n * Name of the geometry attribute for features.\n * @type {string|undefined}\n * @private\n */\n this.geometryName_ = options.geometryName;\n\n /**\n * Look for the geometry name in the feature GeoJSON\n * @type {boolean|undefined}\n * @private\n */\n this.extractGeometryName_ = options.extractGeometryName;\n\n this.supportedMediaTypes = [\n 'application/geo+json',\n 'application/vnd.geo+json',\n ];\n }\n\n /**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\n readFeatureFromObject(object, opt_options) {\n /**\n * @type {GeoJSONFeature}\n */\n let geoJSONFeature = null;\n if (object['type'] === 'Feature') {\n geoJSONFeature = /** @type {GeoJSONFeature} */ (object);\n } else {\n geoJSONFeature = {\n 'type': 'Feature',\n 'geometry': /** @type {GeoJSONGeometry} */ (object),\n 'properties': null,\n };\n }\n\n const geometry = readGeometry(geoJSONFeature['geometry'], opt_options);\n const feature = new Feature();\n if (this.geometryName_) {\n feature.setGeometryName(this.geometryName_);\n } else if (\n this.extractGeometryName_ &&\n 'geometry_name' in geoJSONFeature !== undefined\n ) {\n feature.setGeometryName(geoJSONFeature['geometry_name']);\n }\n feature.setGeometry(geometry);\n\n if ('id' in geoJSONFeature) {\n feature.setId(geoJSONFeature['id']);\n }\n\n if (geoJSONFeature['properties']) {\n feature.setProperties(geoJSONFeature['properties'], true);\n }\n return feature;\n }\n\n /**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n readFeaturesFromObject(object, opt_options) {\n const geoJSONObject = /** @type {GeoJSONObject} */ (object);\n /** @type {Array} */\n let features = null;\n if (geoJSONObject['type'] === 'FeatureCollection') {\n const geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */ (\n object\n );\n features = [];\n const geoJSONFeatures = geoJSONFeatureCollection['features'];\n for (let i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {\n features.push(\n this.readFeatureFromObject(geoJSONFeatures[i], opt_options)\n );\n }\n } else {\n features = [this.readFeatureFromObject(object, opt_options)];\n }\n return features;\n }\n\n /**\n * @param {GeoJSONGeometry} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n readGeometryFromObject(object, opt_options) {\n return readGeometry(object, opt_options);\n }\n\n /**\n * @param {Object} object Object.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n readProjectionFromObject(object) {\n const crs = object['crs'];\n let projection;\n if (crs) {\n if (crs['type'] == 'name') {\n projection = getProjection(crs['properties']['name']);\n } else if (crs['type'] === 'EPSG') {\n projection = getProjection('EPSG:' + crs['properties']['code']);\n } else {\n assert(false, 36); // Unknown SRS type\n }\n } else {\n projection = this.dataProjection;\n }\n return /** @type {import(\"../proj/Projection.js\").default} */ (projection);\n }\n\n /**\n * Encode a feature as a GeoJSON Feature object.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONFeature} Object.\n * @api\n */\n writeFeatureObject(feature, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n\n /** @type {GeoJSONFeature} */\n const object = {\n 'type': 'Feature',\n geometry: null,\n properties: null,\n };\n\n const id = feature.getId();\n if (id !== undefined) {\n object.id = id;\n }\n\n if (!feature.hasProperties()) {\n return object;\n }\n\n const properties = feature.getProperties();\n const geometry = feature.getGeometry();\n if (geometry) {\n object.geometry = writeGeometry(geometry, opt_options);\n\n delete properties[feature.getGeometryName()];\n }\n\n if (!isEmpty(properties)) {\n object.properties = properties;\n }\n\n return object;\n }\n\n /**\n * Encode an array of features as a GeoJSON object.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONFeatureCollection} GeoJSON Object.\n * @api\n */\n writeFeaturesObject(features, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n const objects = [];\n for (let i = 0, ii = features.length; i < ii; ++i) {\n objects.push(this.writeFeatureObject(features[i], opt_options));\n }\n return {\n type: 'FeatureCollection',\n features: objects,\n };\n }\n\n /**\n * Encode a geometry as a GeoJSON object.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.\n * @api\n */\n writeGeometryObject(geometry, opt_options) {\n return writeGeometry(geometry, this.adaptOptions(opt_options));\n }\n}\n\n/**\n * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\nfunction readGeometry(object, opt_options) {\n if (!object) {\n return null;\n }\n\n /**\n * @type {import(\"../geom/Geometry.js\").default}\n */\n let geometry;\n switch (object['type']) {\n case 'Point': {\n geometry = readPointGeometry(/** @type {GeoJSONPoint} */ (object));\n break;\n }\n case 'LineString': {\n geometry = readLineStringGeometry(\n /** @type {GeoJSONLineString} */ (object)\n );\n break;\n }\n case 'Polygon': {\n geometry = readPolygonGeometry(/** @type {GeoJSONPolygon} */ (object));\n break;\n }\n case 'MultiPoint': {\n geometry = readMultiPointGeometry(\n /** @type {GeoJSONMultiPoint} */ (object)\n );\n break;\n }\n case 'MultiLineString': {\n geometry = readMultiLineStringGeometry(\n /** @type {GeoJSONMultiLineString} */ (object)\n );\n break;\n }\n case 'MultiPolygon': {\n geometry = readMultiPolygonGeometry(\n /** @type {GeoJSONMultiPolygon} */ (object)\n );\n break;\n }\n case 'GeometryCollection': {\n geometry = readGeometryCollectionGeometry(\n /** @type {GeoJSONGeometryCollection} */ (object)\n );\n break;\n }\n default: {\n throw new Error('Unsupported GeoJSON type: ' + object['type']);\n }\n }\n return transformGeometryWithOptions(geometry, false, opt_options);\n}\n\n/**\n * @param {GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {GeometryCollection} Geometry collection.\n */\nfunction readGeometryCollectionGeometry(object, opt_options) {\n const geometries = object['geometries'].map(\n /**\n * @param {GeoJSONGeometry} geometry Geometry.\n * @return {import(\"../geom/Geometry.js\").default} geometry Geometry.\n */\n function (geometry) {\n return readGeometry(geometry, opt_options);\n }\n );\n return new GeometryCollection(geometries);\n}\n\n/**\n * @param {GeoJSONPoint} object Object.\n * @return {Point} Point.\n */\nfunction readPointGeometry(object) {\n return new Point(object['coordinates']);\n}\n\n/**\n * @param {GeoJSONLineString} object Object.\n * @return {LineString} LineString.\n */\nfunction readLineStringGeometry(object) {\n return new LineString(object['coordinates']);\n}\n\n/**\n * @param {GeoJSONMultiLineString} object Object.\n * @return {MultiLineString} MultiLineString.\n */\nfunction readMultiLineStringGeometry(object) {\n return new MultiLineString(object['coordinates']);\n}\n\n/**\n * @param {GeoJSONMultiPoint} object Object.\n * @return {MultiPoint} MultiPoint.\n */\nfunction readMultiPointGeometry(object) {\n return new MultiPoint(object['coordinates']);\n}\n\n/**\n * @param {GeoJSONMultiPolygon} object Object.\n * @return {MultiPolygon} MultiPolygon.\n */\nfunction readMultiPolygonGeometry(object) {\n return new MultiPolygon(object['coordinates']);\n}\n\n/**\n * @param {GeoJSONPolygon} object Object.\n * @return {Polygon} Polygon.\n */\nfunction readPolygonGeometry(object) {\n return new Polygon(object['coordinates']);\n}\n\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeGeometry(geometry, opt_options) {\n geometry = transformGeometryWithOptions(geometry, true, opt_options);\n const type = geometry.getType();\n\n /** @type {GeoJSONGeometry} */\n let geoJSON;\n switch (type) {\n case 'Point': {\n geoJSON = writePointGeometry(\n /** @type {Point} */ (geometry),\n opt_options\n );\n break;\n }\n case 'LineString': {\n geoJSON = writeLineStringGeometry(\n /** @type {LineString} */ (geometry),\n opt_options\n );\n break;\n }\n case 'Polygon': {\n geoJSON = writePolygonGeometry(\n /** @type {Polygon} */ (geometry),\n opt_options\n );\n break;\n }\n case 'MultiPoint': {\n geoJSON = writeMultiPointGeometry(\n /** @type {MultiPoint} */ (geometry),\n opt_options\n );\n break;\n }\n case 'MultiLineString': {\n geoJSON = writeMultiLineStringGeometry(\n /** @type {MultiLineString} */ (geometry),\n opt_options\n );\n break;\n }\n case 'MultiPolygon': {\n geoJSON = writeMultiPolygonGeometry(\n /** @type {MultiPolygon} */ (geometry),\n opt_options\n );\n break;\n }\n case 'GeometryCollection': {\n geoJSON = writeGeometryCollectionGeometry(\n /** @type {GeometryCollection} */ (geometry),\n opt_options\n );\n break;\n }\n case 'Circle': {\n geoJSON = {\n type: 'GeometryCollection',\n geometries: [],\n };\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return geoJSON;\n}\n\n/**\n * @param {GeometryCollection} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.\n */\nfunction writeGeometryCollectionGeometry(geometry, opt_options) {\n const geometries = geometry.getGeometriesArray().map(function (geometry) {\n const options = assign({}, opt_options);\n delete options.featureProjection;\n return writeGeometry(geometry, options);\n });\n return {\n type: 'GeometryCollection',\n geometries: geometries,\n };\n}\n\n/**\n * @param {LineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeLineStringGeometry(geometry, opt_options) {\n return {\n type: 'LineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n\n/**\n * @param {MultiLineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiLineStringGeometry(geometry, opt_options) {\n return {\n type: 'MultiLineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n\n/**\n * @param {MultiPoint} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPointGeometry(geometry, opt_options) {\n return {\n type: 'MultiPoint',\n coordinates: geometry.getCoordinates(),\n };\n}\n\n/**\n * @param {MultiPolygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPolygonGeometry(geometry, opt_options) {\n let right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'MultiPolygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\n\n/**\n * @param {Point} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePointGeometry(geometry, opt_options) {\n return {\n type: 'Point',\n coordinates: geometry.getCoordinates(),\n };\n}\n\n/**\n * @param {Polygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePolygonGeometry(geometry, opt_options) {\n let right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'Polygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\n\nexport default GeoJSON;\n","/**\n * @module ol/format/GeoJSON\n */\nimport GeoJSON from 'ol/format/GeoJSON';\nimport Feature from 'ol/Feature.js';\nimport GeometryCollection from 'ol/geom/GeometryCollection.js';\nimport JSONFeature from 'ol/format/JSONFeature.js';\nimport LineString from 'ol/geom/LineString.js';\nimport MultiLineString from 'ol/geom/MultiLineString.js';\nimport MultiPoint from 'ol/geom/MultiPoint.js';\nimport MultiPolygon from 'ol/geom/MultiPolygon.js';\nimport Point from 'ol/geom/Point.js';\nimport Polygon from 'ol/geom/Polygon.js';\nimport { assert } from 'ol/asserts.js';\nimport { assign, isEmpty } from 'ol/obj.js';\nimport { get as getProjection } from 'ol/proj.js';\nimport { transformGeometryWithOptions } from 'ol/format/Feature.js';\n/**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\nGeoJSON.prototype.readFeatureFromObject = function (object, opt_options) {\n /**\n * @type {GeoJSONFeature}\n */\n var geoJSONFeature = null;\n if (object['type'] === 'Feature') {\n geoJSONFeature = /** @type {GeoJSONFeature} */ (object);\n }\n else {\n geoJSONFeature = {\n 'type': 'Feature',\n 'geometry': /** @type {GeoJSONGeometry} */ (object),\n 'properties': null,\n };\n }\n //var geometry = readGeometry(geoJSONFeature['geometry'], opt_options);\n const geometry = (geoJSONFeature['geometry'] && geoJSONFeature['geometry'][\"coordinates\"] && geoJSONFeature['geometry'][\"coordinates\"].length) ? readGeometry(geoJSONFeature['geometry'], opt_options) : null;\n var feature = new Feature();\n if (this.geometryName_) {\n feature.setGeometryName(this.geometryName_);\n }\n else if (this.extractGeometryName_ &&\n 'geometry_name' in geoJSONFeature !== undefined) {\n feature.setGeometryName(geoJSONFeature['geometry_name']);\n }\n feature.setGeometry(geometry);\n if ('id' in geoJSONFeature) {\n feature.setId(geoJSONFeature['id']);\n }\n if (geoJSONFeature['properties']) {\n feature.setProperties(geoJSONFeature['properties'], true);\n }\n return feature;\n};\n\nfunction readGeometry(object, opt_options) {\n if (!object) {\n return null;\n }\n /**\n * @type {import(\"../geom/Geometry.js\").default}\n */\n var geometry;\n switch (object['type']) {\n case 'Point': {\n geometry = readPointGeometry(/** @type {GeoJSONPoint} */(object));\n break;\n }\n case 'LineString': {\n geometry = readLineStringGeometry(\n /** @type {GeoJSONLineString} */(object));\n break;\n }\n case 'Polygon': {\n geometry = readPolygonGeometry(/** @type {GeoJSONPolygon} */(object));\n break;\n }\n case 'MultiPoint': {\n geometry = readMultiPointGeometry(\n /** @type {GeoJSONMultiPoint} */(object));\n break;\n }\n case 'MultiLineString': {\n geometry = readMultiLineStringGeometry(\n /** @type {GeoJSONMultiLineString} */(object));\n break;\n }\n case 'MultiPolygon': {\n geometry = readMultiPolygonGeometry(\n /** @type {GeoJSONMultiPolygon} */(object));\n break;\n }\n case 'GeometryCollection': {\n geometry = readGeometryCollectionGeometry(\n /** @type {GeoJSONGeometryCollection} */(object));\n break;\n }\n default: {\n throw new Error('Unsupported GeoJSON type: ' + object.type);\n }\n }\n return transformGeometryWithOptions(geometry, false, opt_options);\n}\n/**\n * @param {GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {GeometryCollection} Geometry collection.\n */\nfunction readGeometryCollectionGeometry(object, opt_options) {\n var geometries = object['geometries'].map(\n /**\n * @param {GeoJSONGeometry} geometry Geometry.\n * @return {import(\"../geom/Geometry.js\").default} geometry Geometry.\n */\n function (geometry) {\n return readGeometry(geometry, opt_options);\n });\n return new GeometryCollection(geometries);\n}\n/**\n * @param {GeoJSONPoint} object Object.\n * @return {Point} Point.\n */\nfunction readPointGeometry(object) {\n return new Point(object['coordinates']);\n}\n/**\n * @param {GeoJSONLineString} object Object.\n * @return {LineString} LineString.\n */\nfunction readLineStringGeometry(object) {\n return new LineString(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiLineString} object Object.\n * @return {MultiLineString} MultiLineString.\n */\nfunction readMultiLineStringGeometry(object) {\n return new MultiLineString(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiPoint} object Object.\n * @return {MultiPoint} MultiPoint.\n */\nfunction readMultiPointGeometry(object) {\n return new MultiPoint(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiPolygon} object Object.\n * @return {MultiPolygon} MultiPolygon.\n */\nfunction readMultiPolygonGeometry(object) {\n return new MultiPolygon(object['coordinates']);\n}\n/**\n * @param {GeoJSONPolygon} object Object.\n * @return {Polygon} Polygon.\n */\nfunction readPolygonGeometry(object) {\n return new Polygon(object['coordinates']);\n}\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeGeometry(geometry, opt_options) {\n geometry = transformGeometryWithOptions(geometry, true, opt_options);\n var type = geometry.getType();\n /** @type {GeoJSONGeometry} */\n var geoJSON;\n switch (type) {\n case 'Point': {\n geoJSON = writePointGeometry(\n /** @type {Point} */(geometry), opt_options);\n break;\n }\n case 'LineString': {\n geoJSON = writeLineStringGeometry(\n /** @type {LineString} */(geometry), opt_options);\n break;\n }\n case 'Polygon': {\n geoJSON = writePolygonGeometry(\n /** @type {Polygon} */(geometry), opt_options);\n break;\n }\n case 'MultiPoint': {\n geoJSON = writeMultiPointGeometry(\n /** @type {MultiPoint} */(geometry), opt_options);\n break;\n }\n case 'MultiLineString': {\n geoJSON = writeMultiLineStringGeometry(\n /** @type {MultiLineString} */(geometry), opt_options);\n break;\n }\n case 'MultiPolygon': {\n geoJSON = writeMultiPolygonGeometry(\n /** @type {MultiPolygon} */(geometry), opt_options);\n break;\n }\n case 'GeometryCollection': {\n geoJSON = writeGeometryCollectionGeometry(\n /** @type {GeometryCollection} */(geometry), opt_options);\n break;\n }\n case 'Circle': {\n geoJSON = {\n type: 'GeometryCollection',\n geometries: [],\n };\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return geoJSON;\n}\n/**\n * @param {GeometryCollection} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.\n */\nfunction writeGeometryCollectionGeometry(geometry, opt_options) {\n var geometries = geometry.getGeometriesArray().map(function (geometry) {\n var options = assign({}, opt_options);\n delete options.featureProjection;\n return writeGeometry(geometry, options);\n });\n return {\n type: 'GeometryCollection',\n geometries: geometries,\n };\n}\n/**\n * @param {LineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeLineStringGeometry(geometry, opt_options) {\n return {\n type: 'LineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiLineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiLineStringGeometry(geometry, opt_options) {\n return {\n type: 'MultiLineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiPoint} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPointGeometry(geometry, opt_options) {\n return {\n type: 'MultiPoint',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiPolygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPolygonGeometry(geometry, opt_options) {\n var right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'MultiPolygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\n/**\n * @param {Point} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePointGeometry(geometry, opt_options) {\n return {\n type: 'Point',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {Polygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePolygonGeometry(geometry, opt_options) {\n var right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'Polygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\n\nexport default GeoJSON;","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/**\r\n * @module ol/format/GPX\r\n */\r\nimport Feature from 'ol/Feature.js';\r\nimport GeometryLayout from 'ol/geom/GeometryLayout.js';\r\nimport LineString from 'ol/geom/LineString.js';\r\nimport MultiLineString from 'ol/geom/MultiLineString.js';\r\nimport Point from 'ol/geom/Point.js';\r\nimport XMLFeature from 'ol/format/XMLFeature.js';\r\nimport { OBJECT_PROPERTY_NODE_FACTORY, XML_SCHEMA_INSTANCE_URI, createElementNS, makeArrayPusher, makeArraySerializer, makeChildAppender, makeObjectPropertySetter, makeSequence, makeSimpleNodeFactory, makeStructureNS, parseNode, pushParseAndPop, pushSerializeAndPop, } from 'ol/xml.js';\r\nimport { get as getProjection } from 'ol/proj.js';\r\nimport { includes } from 'ol/array.js';\r\nimport { readDateTime, readDecimal, readPositiveInteger, readString, writeDateTimeTextNode, writeDecimalTextNode, writeNonNegativeIntegerTextNode, writeStringTextNode, } from 'ol/format/xsd.js';\r\nimport { transformGeometryWithOptions } from 'ol/format/Feature.js';\r\n/**\r\n * @const\r\n * @type {Array}\r\n */\r\nvar NAMESPACE_URIS = [\r\n null,\r\n 'http://www.topografix.com/GPX/1/0',\r\n 'http://www.topografix.com/GPX/1/1',\r\n];\r\n\r\n// GLS: Obtenemos las combinaciones posibles\r\nconst getAllCombinations = function (array) {\r\n var combi = [];\r\n var temp = [];\r\n\r\n var len = Math.pow(2, array.length);\r\n\r\n for (var i = 0; i < len; i++) {\r\n temp = [];\r\n for (var j = 0; j < array.length; j++) {\r\n if ((i & Math.pow(2, j))) {\r\n if (temp.indexOf(array[j]) == -1)\r\n temp.push(array[j]);\r\n }\r\n }\r\n if (temp.length > 0) {\r\n if (combi.indexOf(temp.join(' ')) == -1)\r\n combi.push(temp.join(' '));\r\n }\r\n }\r\n\r\n return combi;\r\n}\r\n\r\n// GLS: Limpiamos de los nuevos los URIS ya disponibles en el formato\r\nconst cleanCombinationsByFormat = function (customURIS, formatURIS) {\r\n if (customURIS && customURIS.length > 0) {\r\n for (var i = 0; i < formatURIS.length; i++) {\r\n var index = customURIS.indexOf(formatURIS[i]);\r\n if (index > -1)\r\n customURIS.splice(index, 1);\r\n }\r\n }\r\n};\r\n\r\n// GLS: Obtenemos los nuevos URIS para KML\r\nconst CUSTOM_NAMESPACE_URIS = getAllCombinations(NAMESPACE_URIS.slice().slice(1));\r\n// GLS: Nos quedamos con las combinaciones nuevas\r\ncleanCombinationsByFormat(CUSTOM_NAMESPACE_URIS, NAMESPACE_URIS);\r\nNAMESPACE_URIS = NAMESPACE_URIS.concat(CUSTOM_NAMESPACE_URIS);\r\n\r\n// FLP: No utilizamos directamente ol.format.xsd.readDateTime porque esta funci�n devuelve un timestamp en segundos.\r\nconst readDateTime1000 = function (node) {\r\n return readDateTime(node) * 1000;\r\n};\r\n\r\n/**\r\n * @const\r\n * @type {string}\r\n */\r\nvar SCHEMA_LOCATION = 'http://www.topografix.com/GPX/1/1 ' +\r\n 'http://www.topografix.com/GPX/1/1/gpx.xsd';\r\n/**\r\n * @const\r\n * @type {Object): (Feature|undefined)>}\r\n */\r\nvar FEATURE_READER = {\r\n 'rte': readRte,\r\n 'trk': readTrk,\r\n 'wpt': readWpt,\r\n};\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar GPX_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'rte': makeArrayPusher(readRte),\r\n 'trk': makeArrayPusher(readTrk),\r\n 'wpt': makeArrayPusher(readWpt),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar LINK_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'text': makeObjectPropertySetter(readString, 'linkText'),\r\n 'type': makeObjectPropertySetter(readString, 'linkType'),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar GPX_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'rte': makeChildAppender(writeRte),\r\n 'trk': makeChildAppender(writeTrk),\r\n 'wpt': makeChildAppender(writeWpt),\r\n});\r\n/**\r\n * @typedef {Object} Options\r\n * @property {function(Feature, Node):void} [readExtensions] Callback function\r\n * to process `extensions` nodes. To prevent memory leaks, this callback function must\r\n * not store any references to the node. Note that the `extensions`\r\n * node is not allowed in GPX 1.0. Moreover, only `extensions`\r\n * nodes from `wpt`, `rte` and `trk` can be processed, as those are\r\n * directly mapped to a feature.\r\n */\r\n/**\r\n * @typedef {Object} LayoutOptions\r\n * @property {boolean} [hasZ] HasZ.\r\n * @property {boolean} [hasM] HasM.\r\n */\r\n/**\r\n * @classdesc\r\n * Feature format for reading and writing data in the GPX format.\r\n *\r\n * Note that {@link module:ol/format/GPX~GPX#readFeature} only reads the first\r\n * feature of the source.\r\n *\r\n * When reading, routes (``) are converted into LineString geometries, and\r\n * tracks (``) into MultiLineString. Any properties on route and track\r\n * waypoints are ignored.\r\n *\r\n * When writing, LineString geometries are output as routes (``), and\r\n * MultiLineString as tracks (``).\r\n *\r\n * @api\r\n */\r\nvar GPX = /** @class */ (function (_super) {\r\n __extends(GPX, _super);\r\n /**\r\n * @param {Options} [opt_options] Options.\r\n */\r\n function GPX(opt_options) {\r\n var _this = _super.call(this) || this;\r\n var options = opt_options ? opt_options : {};\r\n /**\r\n * @type {import(\"../proj/Projection.js\").default}\r\n */\r\n _this.dataProjection = getProjection('EPSG:4326');\r\n /**\r\n * @type {function(Feature, Node): void|undefined}\r\n * @private\r\n */\r\n _this.readExtensions_ = options.readExtensions;\r\n return _this;\r\n }\r\n /**\r\n * @param {Array} features List of features.\r\n * @private\r\n */\r\n GPX.prototype.handleReadExtensions_ = function (features) {\r\n if (!features) {\r\n features = [];\r\n }\r\n for (var i = 0, ii = features.length; i < ii; ++i) {\r\n var feature = features[i];\r\n if (this.readExtensions_) {\r\n var extensionsNode = feature.get('extensionsNode_') || null;\r\n this.readExtensions_(feature, extensionsNode);\r\n }\r\n feature.set('extensionsNode_', undefined);\r\n }\r\n };\r\n /**\r\n * @param {Element} node Node.\r\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\r\n * @return {import(\"../Feature.js\").default} Feature.\r\n */\r\n GPX.prototype.readFeatureFromNode = function (node, opt_options) {\r\n if (!includes(NAMESPACE_URIS, node.namespaceURI)) {\r\n return null;\r\n }\r\n var featureReader = FEATURE_READER[node.localName];\r\n if (!featureReader) {\r\n return null;\r\n }\r\n var feature = featureReader(node, [\r\n this.getReadOptions(node, opt_options),\r\n ]);\r\n if (!feature) {\r\n return null;\r\n }\r\n this.handleReadExtensions_([feature]);\r\n return feature;\r\n };\r\n /**\r\n * @param {Element} node Node.\r\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Options.\r\n * @return {Array} Features.\r\n */\r\n GPX.prototype.readFeaturesFromNode = function (node, opt_options) {\r\n if (!includes(NAMESPACE_URIS, node.namespaceURI)) {\r\n return [];\r\n }\r\n if (node.localName == 'gpx') {\r\n /** @type {Array} */\r\n var features = pushParseAndPop([], GPX_PARSERS, node, [\r\n this.getReadOptions(node, opt_options),\r\n ]);\r\n if (features) {\r\n this.handleReadExtensions_(features);\r\n return features;\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n return [];\r\n };\r\n /**\r\n * Encode an array of features in the GPX format as an XML node.\r\n * LineString geometries are output as routes (``), and MultiLineString\r\n * as tracks (``).\r\n *\r\n * @param {Array} features Features.\r\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Options.\r\n * @return {Node} Node.\r\n * @api\r\n */\r\n GPX.prototype.writeFeaturesNode = function (features, opt_options) {\r\n opt_options = this.adaptOptions(opt_options);\r\n //FIXME Serialize metadata\r\n var gpx = createElementNS('http://www.topografix.com/GPX/1/1', 'gpx');\r\n var xmlnsUri = 'http://www.w3.org/2000/xmlns/';\r\n gpx.setAttributeNS(xmlnsUri, 'xmlns:xsi', XML_SCHEMA_INSTANCE_URI);\r\n gpx.setAttributeNS(XML_SCHEMA_INSTANCE_URI, 'xsi:schemaLocation', SCHEMA_LOCATION);\r\n gpx.setAttribute('version', '1.1');\r\n gpx.setAttribute('creator', 'OpenLayers');\r\n pushSerializeAndPop(\r\n /** @type {import(\"../xml.js\").NodeStackItem} */\r\n ({ node: gpx }), GPX_SERIALIZERS, GPX_NODE_FACTORY, features, [opt_options]);\r\n return gpx;\r\n };\r\n return GPX;\r\n}(XMLFeature));\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar RTE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'name': makeObjectPropertySetter(readString),\r\n 'cmt': makeObjectPropertySetter(readString),\r\n 'desc': makeObjectPropertySetter(readString),\r\n 'src': makeObjectPropertySetter(readString),\r\n 'link': parseLink,\r\n 'number': makeObjectPropertySetter(readPositiveInteger),\r\n 'extensions': parseExtensions,\r\n 'type': makeObjectPropertySetter(readString),\r\n 'rtept': parseRtePt,\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar RTEPT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'ele': makeObjectPropertySetter(readDecimal),\r\n 'time': makeObjectPropertySetter(readDateTime1000),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRK_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'name': makeObjectPropertySetter(readString),\r\n 'cmt': makeObjectPropertySetter(readString),\r\n 'desc': makeObjectPropertySetter(readString),\r\n 'src': makeObjectPropertySetter(readString),\r\n 'link': parseLink,\r\n 'number': makeObjectPropertySetter(readPositiveInteger),\r\n 'type': makeObjectPropertySetter(readString),\r\n 'extensions': parseExtensions,\r\n 'trkseg': parseTrkSeg,\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRKSEG_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'trkpt': parseTrkPt,\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRKPT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'ele': makeObjectPropertySetter(readDecimal),\r\n 'time': makeObjectPropertySetter(readDateTime1000),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar WPT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'ele': makeObjectPropertySetter(readDecimal),\r\n 'time': makeObjectPropertySetter(readDateTime1000),\r\n 'magvar': makeObjectPropertySetter(readDecimal),\r\n 'geoidheight': makeObjectPropertySetter(readDecimal),\r\n 'name': makeObjectPropertySetter(readString),\r\n 'cmt': makeObjectPropertySetter(readString),\r\n 'desc': makeObjectPropertySetter(readString),\r\n 'src': makeObjectPropertySetter(readString),\r\n 'link': parseLink,\r\n 'sym': makeObjectPropertySetter(readString),\r\n 'type': makeObjectPropertySetter(readString),\r\n 'fix': makeObjectPropertySetter(readString),\r\n 'sat': makeObjectPropertySetter(readPositiveInteger),\r\n 'hdop': makeObjectPropertySetter(readDecimal),\r\n 'vdop': makeObjectPropertySetter(readDecimal),\r\n 'pdop': makeObjectPropertySetter(readDecimal),\r\n 'ageofdgpsdata': makeObjectPropertySetter(readDecimal),\r\n 'dgpsid': makeObjectPropertySetter(readPositiveInteger),\r\n 'extensions': parseExtensions,\r\n});\r\n/**\r\n * @const\r\n * @type {Array}\r\n */\r\nvar LINK_SEQUENCE = ['text', 'type'];\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar LINK_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'text': makeChildAppender(writeStringTextNode),\r\n 'type': makeChildAppender(writeStringTextNode),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar RTE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\r\n 'name',\r\n 'cmt',\r\n 'desc',\r\n 'src',\r\n 'link',\r\n 'number',\r\n 'type',\r\n 'rtept',\r\n]);\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar RTE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'name': makeChildAppender(writeStringTextNode),\r\n 'cmt': makeChildAppender(writeStringTextNode),\r\n 'desc': makeChildAppender(writeStringTextNode),\r\n 'src': makeChildAppender(writeStringTextNode),\r\n 'link': makeChildAppender(writeLink),\r\n 'number': makeChildAppender(writeNonNegativeIntegerTextNode),\r\n 'type': makeChildAppender(writeStringTextNode),\r\n 'rtept': makeArraySerializer(makeChildAppender(writeWptType)),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar RTEPT_TYPE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, ['ele', 'time']);\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRK_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\r\n 'name',\r\n 'cmt',\r\n 'desc',\r\n 'src',\r\n 'link',\r\n 'number',\r\n 'type',\r\n 'trkseg',\r\n]);\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRK_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'name': makeChildAppender(writeStringTextNode),\r\n 'cmt': makeChildAppender(writeStringTextNode),\r\n 'desc': makeChildAppender(writeStringTextNode),\r\n 'src': makeChildAppender(writeStringTextNode),\r\n 'link': makeChildAppender(writeLink),\r\n 'number': makeChildAppender(writeNonNegativeIntegerTextNode),\r\n 'type': makeChildAppender(writeStringTextNode),\r\n 'trkseg': makeArraySerializer(makeChildAppender(writeTrkSeg)),\r\n});\r\n/**\r\n * @const\r\n * @type {function(*, Array<*>, string=): (Node|undefined)}\r\n */\r\nvar TRKSEG_NODE_FACTORY = makeSimpleNodeFactory('trkpt');\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar TRKSEG_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'trkpt': makeChildAppender(writeWptType),\r\n});\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar WPT_TYPE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\r\n 'ele',\r\n 'time',\r\n 'magvar',\r\n 'geoidheight',\r\n 'name',\r\n 'cmt',\r\n 'desc',\r\n 'src',\r\n 'link',\r\n 'sym',\r\n 'type',\r\n 'fix',\r\n 'sat',\r\n 'hdop',\r\n 'vdop',\r\n 'pdop',\r\n 'ageofdgpsdata',\r\n 'dgpsid',\r\n]);\r\n/**\r\n * @const\r\n * @type {Object>}\r\n */\r\n// @ts-ignore\r\nvar WPT_TYPE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\r\n 'ele': makeChildAppender(writeDecimalTextNode),\r\n 'time': makeChildAppender(writeDateTimeTextNode),\r\n 'magvar': makeChildAppender(writeDecimalTextNode),\r\n 'geoidheight': makeChildAppender(writeDecimalTextNode),\r\n 'name': makeChildAppender(writeStringTextNode),\r\n 'cmt': makeChildAppender(writeStringTextNode),\r\n 'desc': makeChildAppender(writeStringTextNode),\r\n 'src': makeChildAppender(writeStringTextNode),\r\n 'link': makeChildAppender(writeLink),\r\n 'sym': makeChildAppender(writeStringTextNode),\r\n 'type': makeChildAppender(writeStringTextNode),\r\n 'fix': makeChildAppender(writeStringTextNode),\r\n 'sat': makeChildAppender(writeNonNegativeIntegerTextNode),\r\n 'hdop': makeChildAppender(writeDecimalTextNode),\r\n 'vdop': makeChildAppender(writeDecimalTextNode),\r\n 'pdop': makeChildAppender(writeDecimalTextNode),\r\n 'ageofdgpsdata': makeChildAppender(writeDecimalTextNode),\r\n 'dgpsid': makeChildAppender(writeNonNegativeIntegerTextNode),\r\n});\r\n/**\r\n * @const\r\n * @type {Object}\r\n */\r\nvar GEOMETRY_TYPE_TO_NODENAME = {\r\n 'Point': 'wpt',\r\n 'LineString': 'rte',\r\n 'MultiLineString': 'trk',\r\n};\r\n/**\r\n * @param {*} value Value.\r\n * @param {Array<*>} objectStack Object stack.\r\n * @param {string} [opt_nodeName] Node name.\r\n * @return {Node|undefined} Node.\r\n */\r\nfunction GPX_NODE_FACTORY(value, objectStack, opt_nodeName) {\r\n var geometry = /** @type {Feature} */ (value).getGeometry();\r\n if (geometry) {\r\n var nodeName = GEOMETRY_TYPE_TO_NODENAME[geometry.getType()];\r\n if (nodeName) {\r\n var parentNode = objectStack[objectStack.length - 1].node;\r\n return createElementNS(parentNode.namespaceURI, nodeName);\r\n }\r\n }\r\n}\r\n/**\r\n * @param {Array} flatCoordinates Flat coordinates.\r\n * @param {LayoutOptions} layoutOptions Layout options.\r\n * @param {Element} node Node.\r\n * @param {!Object} values Values.\r\n * @return {Array} Flat coordinates.\r\n */\r\nfunction appendCoordinate(flatCoordinates, layoutOptions, node, values) {\r\n flatCoordinates.push(parseFloat(node.getAttribute('lon')), parseFloat(node.getAttribute('lat')));\r\n if ('ele' in values) {\r\n flatCoordinates.push(/** @type {number} */ (values['ele']));\r\n delete values['ele'];\r\n layoutOptions.hasZ = true;\r\n }\r\n else {\r\n flatCoordinates.push(0);\r\n }\r\n if ('time' in values) {\r\n flatCoordinates.push(/** @type {number} */ (values['time']));\r\n delete values['time'];\r\n layoutOptions.hasM = true;\r\n }\r\n else {\r\n flatCoordinates.push(0);\r\n }\r\n return flatCoordinates;\r\n}\r\n/**\r\n * Choose GeometryLayout based on flags in layoutOptions and adjust flatCoordinates\r\n * and ends arrays by shrinking them accordingly (removing unused zero entries).\r\n *\r\n * @param {LayoutOptions} layoutOptions Layout options.\r\n * @param {Array} flatCoordinates Flat coordinates.\r\n * @param {Array} [ends] Ends.\r\n * @return {import(\"../geom/GeometryLayout.js\").default} Layout.\r\n */\r\nfunction applyLayoutOptions(layoutOptions, flatCoordinates, ends) {\r\n var layout = GeometryLayout.XY;\r\n var stride = 2;\r\n if (layoutOptions.hasZ && layoutOptions.hasM) {\r\n layout = GeometryLayout.XYZM;\r\n stride = 4;\r\n }\r\n else if (layoutOptions.hasZ) {\r\n layout = GeometryLayout.XYZ;\r\n stride = 3;\r\n }\r\n else if (layoutOptions.hasM) {\r\n layout = GeometryLayout.XYM;\r\n stride = 3;\r\n }\r\n if (stride !== 4) {\r\n for (var i = 0, ii = flatCoordinates.length / 4; i < ii; i++) {\r\n flatCoordinates[i * stride] = flatCoordinates[i * 4];\r\n flatCoordinates[i * stride + 1] = flatCoordinates[i * 4 + 1];\r\n if (layoutOptions.hasZ) {\r\n flatCoordinates[i * stride + 2] = flatCoordinates[i * 4 + 2];\r\n }\r\n if (layoutOptions.hasM) {\r\n flatCoordinates[i * stride + 2] = flatCoordinates[i * 4 + 3];\r\n }\r\n }\r\n flatCoordinates.length = (flatCoordinates.length / 4) * stride;\r\n if (ends) {\r\n for (var i = 0, ii = ends.length; i < ii; i++) {\r\n ends[i] = (ends[i] / 4) * stride;\r\n }\r\n }\r\n }\r\n return layout;\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction parseLink(node, objectStack) {\r\n var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\r\n var href = node.getAttribute('href');\r\n if (href !== null) {\r\n values['link'] = href;\r\n }\r\n parseNode(LINK_PARSERS, node, objectStack);\r\n}\r\n/**\r\n * @param {Node} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction parseExtensions(node, objectStack) {\r\n var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\r\n values['extensionsNode_'] = node;\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction parseRtePt(node, objectStack) {\r\n var values = pushParseAndPop({}, RTEPT_PARSERS, node, objectStack);\r\n if (values) {\r\n var rteValues = /** @type {!Object} */ (objectStack[objectStack.length - 1]);\r\n var flatCoordinates = /** @type {Array} */ (rteValues['flatCoordinates']);\r\n var layoutOptions = /** @type {LayoutOptions} */ (rteValues['layoutOptions']);\r\n appendCoordinate(flatCoordinates, layoutOptions, node, values);\r\n }\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction parseTrkPt(node, objectStack) {\r\n var values = pushParseAndPop({}, TRKPT_PARSERS, node, objectStack);\r\n if (values) {\r\n var trkValues = /** @type {!Object} */ (objectStack[objectStack.length - 1]);\r\n var flatCoordinates = /** @type {Array} */ (trkValues['flatCoordinates']);\r\n var layoutOptions = /** @type {LayoutOptions} */ (trkValues['layoutOptions']);\r\n appendCoordinate(flatCoordinates, layoutOptions, node, values);\r\n }\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction parseTrkSeg(node, objectStack) {\r\n var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);\r\n parseNode(TRKSEG_PARSERS, node, objectStack);\r\n var flatCoordinates = \r\n /** @type {Array} */\r\n (values['flatCoordinates']);\r\n var ends = /** @type {Array} */ (values['ends']);\r\n ends.push(flatCoordinates.length);\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n * @return {Feature|undefined} Track.\r\n */\r\nfunction readRte(node, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").ReadOptions} */ (objectStack[0]);\r\n var values = pushParseAndPop({\r\n 'flatCoordinates': [],\r\n 'layoutOptions': {},\r\n }, RTE_PARSERS, node, objectStack);\r\n if (!values) {\r\n return undefined;\r\n }\r\n var flatCoordinates = \r\n /** @type {Array} */\r\n (values['flatCoordinates']);\r\n delete values['flatCoordinates'];\r\n var layoutOptions = /** @type {LayoutOptions} */ (values['layoutOptions']);\r\n delete values['layoutOptions'];\r\n var layout = applyLayoutOptions(layoutOptions, flatCoordinates);\r\n var geometry = new LineString(flatCoordinates, layout);\r\n transformGeometryWithOptions(geometry, false, options);\r\n var feature = new Feature(geometry);\r\n feature.setProperties(values, true);\r\n return feature;\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n * @return {Feature|undefined} Track.\r\n */\r\nfunction readTrk(node, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").ReadOptions} */ (objectStack[0]);\r\n var values = pushParseAndPop({\r\n 'flatCoordinates': [],\r\n 'ends': [],\r\n 'layoutOptions': {},\r\n }, TRK_PARSERS, node, objectStack);\r\n if (!values) {\r\n return undefined;\r\n }\r\n var flatCoordinates = \r\n /** @type {Array} */\r\n (values['flatCoordinates']);\r\n delete values['flatCoordinates'];\r\n var ends = /** @type {Array} */ (values['ends']);\r\n delete values['ends'];\r\n var layoutOptions = /** @type {LayoutOptions} */ (values['layoutOptions']);\r\n delete values['layoutOptions'];\r\n var layout = applyLayoutOptions(layoutOptions, flatCoordinates, ends);\r\n var geometry = new MultiLineString(flatCoordinates, layout, ends);\r\n transformGeometryWithOptions(geometry, false, options);\r\n var feature = new Feature(geometry);\r\n feature.setProperties(values, true);\r\n return feature;\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Array<*>} objectStack Object stack.\r\n * @return {Feature|undefined} Waypoint.\r\n */\r\nfunction readWpt(node, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").ReadOptions} */ (objectStack[0]);\r\n var values = pushParseAndPop({}, WPT_PARSERS, node, objectStack);\r\n if (!values) {\r\n return undefined;\r\n }\r\n var layoutOptions = /** @type {LayoutOptions} */ ({});\r\n var coordinates = appendCoordinate([], layoutOptions, node, values);\r\n var layout = applyLayoutOptions(layoutOptions, coordinates);\r\n var geometry = new Point(coordinates, layout);\r\n transformGeometryWithOptions(geometry, false, options);\r\n var feature = new Feature(geometry);\r\n feature.setProperties(values, true);\r\n return feature;\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {string} value Value for the link's `href` attribute.\r\n * @param {Array<*>} objectStack Node stack.\r\n */\r\nfunction writeLink(node, value, objectStack) {\r\n node.setAttribute('href', value);\r\n var context = objectStack[objectStack.length - 1];\r\n var properties = context['properties'];\r\n var link = [properties['linkText'], properties['linkType']];\r\n pushSerializeAndPop(\r\n /** @type {import(\"../xml.js\").NodeStackItem} */ ({ node: node }), LINK_SERIALIZERS, OBJECT_PROPERTY_NODE_FACTORY, link, objectStack, LINK_SEQUENCE);\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction writeWptType(node, coordinate, objectStack) {\r\n var context = objectStack[objectStack.length - 1];\r\n var parentNode = context.node;\r\n var namespaceURI = parentNode.namespaceURI;\r\n var properties = context['properties'];\r\n //FIXME Projection handling\r\n node.setAttributeNS(null, 'lat', String(coordinate[1]));\r\n node.setAttributeNS(null, 'lon', String(coordinate[0]));\r\n var geometryLayout = context['geometryLayout'];\r\n switch (geometryLayout) {\r\n case GeometryLayout.XYZM:\r\n if (coordinate[3] !== 0) {\r\n properties['time'] = coordinate[3];\r\n }\r\n // fall through\r\n case GeometryLayout.XYZ:\r\n if (coordinate[2] !== 0) {\r\n properties['ele'] = coordinate[2];\r\n }\r\n break;\r\n case GeometryLayout.XYM:\r\n if (coordinate[2] !== 0) {\r\n properties['time'] = coordinate[2];\r\n }\r\n break;\r\n default:\r\n // pass\r\n }\r\n var orderedKeys = node.nodeName == 'rtept'\r\n ? RTEPT_TYPE_SEQUENCE[namespaceURI]\r\n : WPT_TYPE_SEQUENCE[namespaceURI];\r\n var values = makeSequence(properties, orderedKeys);\r\n pushSerializeAndPop(\r\n /** @type {import(\"../xml.js\").NodeStackItem} */\r\n ({ node: node, 'properties': properties }), WPT_TYPE_SERIALIZERS, OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\r\n}\r\n/**\r\n * @param {Node} node Node.\r\n * @param {Feature} feature Feature.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction writeRte(node, feature, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").WriteOptions} */ (objectStack[0]);\r\n var properties = feature.getProperties();\r\n var context = { node: node };\r\n context['properties'] = properties;\r\n var geometry = feature.getGeometry();\r\n if (geometry.getType() == 'LineString') {\r\n var lineString = /** @type {LineString} */ (transformGeometryWithOptions(geometry, true, options));\r\n context['geometryLayout'] = lineString.getLayout();\r\n properties['rtept'] = lineString.getCoordinates();\r\n }\r\n var parentNode = objectStack[objectStack.length - 1].node;\r\n var orderedKeys = RTE_SEQUENCE[parentNode.namespaceURI];\r\n var values = makeSequence(properties, orderedKeys);\r\n pushSerializeAndPop(context, RTE_SERIALIZERS, OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\r\n}\r\n/**\r\n * @param {Node} node Node.\r\n * @param {Feature} feature Feature.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction writeTrk(node, feature, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").WriteOptions} */ (objectStack[0]);\r\n var properties = feature.getProperties();\r\n /** @type {import(\"../xml.js\").NodeStackItem} */\r\n var context = { node: node };\r\n context['properties'] = properties;\r\n var geometry = feature.getGeometry();\r\n if (geometry.getType() == 'MultiLineString') {\r\n var multiLineString = /** @type {MultiLineString} */ (transformGeometryWithOptions(geometry, true, options));\r\n properties['trkseg'] = multiLineString.getLineStrings();\r\n }\r\n var parentNode = objectStack[objectStack.length - 1].node;\r\n var orderedKeys = TRK_SEQUENCE[parentNode.namespaceURI];\r\n var values = makeSequence(properties, orderedKeys);\r\n pushSerializeAndPop(context, TRK_SERIALIZERS, OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);\r\n}\r\n/**\r\n * @param {Node} node Node.\r\n * @param {LineString} lineString LineString.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction writeTrkSeg(node, lineString, objectStack) {\r\n /** @type {import(\"../xml.js\").NodeStackItem} */\r\n var context = { node: node };\r\n context['geometryLayout'] = lineString.getLayout();\r\n context['properties'] = {};\r\n pushSerializeAndPop(context, TRKSEG_SERIALIZERS, TRKSEG_NODE_FACTORY, lineString.getCoordinates(), objectStack);\r\n}\r\n/**\r\n * @param {Element} node Node.\r\n * @param {Feature} feature Feature.\r\n * @param {Array<*>} objectStack Object stack.\r\n */\r\nfunction writeWpt(node, feature, objectStack) {\r\n var options = /** @type {import(\"./Feature.js\").WriteOptions} */ (objectStack[0]);\r\n var context = objectStack[objectStack.length - 1];\r\n context['properties'] = feature.getProperties();\r\n var geometry = feature.getGeometry();\r\n if (geometry.getType() == 'Point') {\r\n var point = /** @type {Point} */ (transformGeometryWithOptions(geometry, true, options));\r\n context['geometryLayout'] = point.getLayout();\r\n writeWptType(node, point.getCoordinates(), objectStack);\r\n }\r\n}\r\nexport default GPX;","/**\n * @module ol/style/Fill\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nclass Fill {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n }\n\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {Fill} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Fill({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n });\n }\n\n /**\n * Get the fill color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n }\n}\n\nexport default Fill;\n","/**\n * @module ol/style/IconAnchorUnits\n */\n\n/**\n * Icon anchor units. One of 'fraction', 'pixels'.\n * @enum {string}\n */\nexport default {\n /**\n * Anchor is a fraction\n * @api\n */\n FRACTION: 'fraction',\n /**\n * Anchor is in pixels\n * @api\n */\n PIXELS: 'pixels',\n};\n","/**\n * @module ol/style/IconOrigin\n */\n\n/**\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n * @enum {string}\n */\nexport default {\n /**\n * Origin is at bottom left\n * @api\n */\n BOTTOM_LEFT: 'bottom-left',\n /**\n * Origin is at bottom right\n * @api\n */\n BOTTOM_RIGHT: 'bottom-right',\n /**\n * Origin is at top left\n * @api\n */\n TOP_LEFT: 'top-left',\n /**\n * Origin is at top right\n * @api\n */\n TOP_RIGHT: 'top-right',\n};\n","/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/style/Image\n */\nimport {abstract} from '../util.js';\nimport {toSize} from '../size.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} opacity Opacity.\n * @property {boolean} rotateWithView If the image should get rotated with the view.\n * @property {number} rotation Rotation.\n * @property {number|import(\"../size.js\").Size} scale Scale.\n * @property {Array} displacement Displacement.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} declutterMode Declutter mode: `declutter`, `obstacle`, 'none */\n\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nclass ImageStyle {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n /**\n * @private\n * @type {number}\n */\n this.opacity_ = options.opacity;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ = options.rotateWithView;\n\n /**\n * @private\n * @type {number}\n */\n this.rotation_ = options.rotation;\n\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.scale_ = options.scale;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale);\n\n /**\n * @private\n * @type {Array}\n */\n this.displacement_ = options.displacement;\n\n /**\n * @private\n * @type {\"declutter\"|\"obstacle\"|\"none\"|undefined}\n */\n this.declutterMode_ = options.declutterMode;\n }\n\n /**\n * Clones the style.\n * @return {ImageStyle} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n return new ImageStyle({\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n }\n\n /**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\n getOpacity() {\n return this.opacity_;\n }\n\n /**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\n getRotateWithView() {\n return this.rotateWithView_;\n }\n\n /**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\n getRotation() {\n return this.rotation_;\n }\n\n /**\n * Get the symbolizer scale.\n * @return {number|import(\"../size.js\").Size} Scale.\n * @api\n */\n getScale() {\n return this.scale_;\n }\n\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n getScaleArray() {\n return this.scaleArray_;\n }\n\n /**\n * Get the displacement of the shape\n * @return {Array} Shape's center displacement\n * @api\n */\n getDisplacement() {\n return this.displacement_;\n }\n\n /**\n * Get the declutter mode of the shape\n * @return {\"declutter\"|\"obstacle\"|\"none\"|undefined} Shape's declutter mode\n * @api\n */\n getDeclutterMode() {\n return this.declutterMode_;\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array} Anchor.\n */\n getAnchor() {\n return abstract();\n }\n\n /**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n getImage(pixelRatio) {\n return abstract();\n }\n\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n getHitDetectionImage() {\n return abstract();\n }\n\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n getPixelRatio(pixelRatio) {\n return 1;\n }\n\n /**\n * @abstract\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return abstract();\n }\n\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return abstract();\n }\n\n /**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array} Origin.\n */\n getOrigin() {\n return abstract();\n }\n\n /**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {import(\"../size.js\").Size} Size.\n */\n getSize() {\n return abstract();\n }\n\n /**\n * Set the displacement.\n *\n * @param {Array} displacement Displacement.\n * @api\n */\n setDisplacement(displacement) {\n this.displacement_ = displacement;\n }\n\n /**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\n setOpacity(opacity) {\n this.opacity_ = opacity;\n }\n\n /**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n setRotateWithView(rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n }\n\n /**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\n setRotation(rotation) {\n this.rotation_ = rotation;\n }\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size} scale Scale.\n * @api\n */\n setScale(scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale);\n }\n\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {\n abstract();\n }\n\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n load() {\n abstract();\n }\n\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {\n abstract();\n }\n}\n\nexport default ImageStyle;\n","/**\n * @module ol/ImageBase\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {abstract} from './util.js';\n\n/**\n * @abstract\n */\nclass ImageBase extends EventTarget {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default} state State.\n */\n constructor(extent, resolution, pixelRatio, state) {\n super();\n\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = extent;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @protected\n * @type {number|undefined}\n */\n this.resolution = resolution;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state = state;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n getExtent() {\n return this.extent;\n }\n\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n */\n getImage() {\n return abstract();\n }\n\n /**\n * @return {number} PixelRatio.\n */\n getPixelRatio() {\n return this.pixelRatio_;\n }\n\n /**\n * @return {number} Resolution.\n */\n getResolution() {\n return /** @type {number} */ (this.resolution);\n }\n\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n load() {\n abstract();\n }\n}\n\nexport default ImageBase;\n","/**\n * @module ol/Image\n */\nimport EventType from './events/EventType.js';\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\nimport {IMAGE_DECODE} from './has.js';\nimport {getHeight} from './extent.js';\nimport {listenOnce, unlistenByKey} from './events.js';\n\n/**\n * A function that takes an {@link module:ol/Image~ImageWrapper} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~ImageWrapper#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(ImageWrapper, string): void} LoadFunction\n * @api\n */\n\nclass ImageWrapper extends ImageBase {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {LoadFunction} imageLoadFunction Image load function.\n */\n constructor(\n extent,\n resolution,\n pixelRatio,\n src,\n crossOrigin,\n imageLoadFunction\n ) {\n super(extent, resolution, pixelRatio, ImageState.IDLE);\n\n /**\n * @private\n * @type {string}\n */\n this.src_ = src;\n\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n */\n this.image_ = new Image();\n if (crossOrigin !== null) {\n this.image_.crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state = ImageState.IDLE;\n\n /**\n * @private\n * @type {LoadFunction}\n */\n this.imageLoadFunction_ = imageLoadFunction;\n }\n\n /**\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n handleImageError_() {\n this.state = ImageState.ERROR;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Tracks successful image load.\n *\n * @private\n */\n handleImageLoad_() {\n if (this.resolution === undefined) {\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n this.state = ImageState.LOADED;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @api\n */\n load() {\n if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {\n this.state = ImageState.LOADING;\n this.changed();\n this.imageLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this)\n );\n }\n }\n\n /**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n */\n setImage(image) {\n this.image_ = image;\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n const img = /** @type {HTMLImageElement} */ (image);\n let listening = true;\n let decoding = false;\n let loaded = false;\n\n const listenerKeys = [\n listenOnce(img, EventType.LOAD, function () {\n loaded = true;\n if (!decoding) {\n loadHandler();\n }\n }),\n ];\n\n if (img.src && IMAGE_DECODE) {\n decoding = true;\n img\n .decode()\n .then(function () {\n if (listening) {\n loadHandler();\n }\n })\n .catch(function (error) {\n if (listening) {\n if (loaded) {\n loadHandler();\n } else {\n errorHandler();\n }\n }\n });\n } else {\n listenerKeys.push(listenOnce(img, EventType.ERROR, errorHandler));\n }\n\n return function unlisten() {\n listening = false;\n listenerKeys.forEach(unlistenByKey);\n };\n}\n\nexport default ImageWrapper;\n","/**\n * @module ol/style/IconImage\n */\n\nimport EventTarget from '../events/Target.js';\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport {asString} from '../color.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {shared as iconImageCache} from './IconImageCache.js';\nimport {listenImage} from '../Image.js';\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet taintedTestContext = null;\n\nclass IconImage extends EventTarget {\n /**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string|undefined} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n */\n constructor(image, src, size, crossOrigin, imageState, color) {\n super();\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.hitDetectionImage_ = null;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.image_ = !image ? new Image() : image;\n\n if (crossOrigin !== null) {\n /** @type {HTMLImageElement} */ (this.image_).crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {Object}\n */\n this.canvas_ = {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n this.color_ = color;\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @private\n * @type {import(\"../ImageState.js\").default}\n */\n this.imageState_ = imageState;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = size;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.src_ = src;\n\n /**\n * @private\n */\n this.tainted_;\n }\n\n /**\n * @private\n * @return {boolean} The image canvas is tainted.\n */\n isTainted_() {\n if (this.tainted_ === undefined && this.imageState_ === ImageState.LOADED) {\n if (!taintedTestContext) {\n taintedTestContext = createCanvasContext2D(1, 1);\n }\n taintedTestContext.drawImage(this.image_, 0, 0);\n try {\n taintedTestContext.getImageData(0, 0, 1, 1);\n this.tainted_ = false;\n } catch (e) {\n taintedTestContext = null;\n this.tainted_ = true;\n }\n }\n return this.tainted_ === true;\n }\n\n /**\n * @private\n */\n dispatchChangeEvent_() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @private\n */\n handleImageError_() {\n this.imageState_ = ImageState.ERROR;\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n }\n\n /**\n * @private\n */\n handleImageLoad_() {\n this.imageState_ = ImageState.LOADED;\n if (this.size_) {\n this.image_.width = this.size_[0];\n this.image_.height = this.size_[1];\n } else {\n this.size_ = [this.image_.width, this.image_.height];\n }\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n */\n getImage(pixelRatio) {\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? this.canvas_[pixelRatio] : this.image_;\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Image or Canvas element.\n */\n getPixelRatio(pixelRatio) {\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? pixelRatio : 1;\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return this.imageState_;\n }\n\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n if (!this.hitDetectionImage_) {\n if (this.isTainted_()) {\n const width = this.size_[0];\n const height = this.size_[1];\n const context = createCanvasContext2D(width, height);\n context.fillRect(0, 0, width, height);\n this.hitDetectionImage_ = context.canvas;\n } else {\n this.hitDetectionImage_ = this.image_;\n }\n }\n return this.hitDetectionImage_;\n }\n\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * @return {string|undefined} Image src.\n */\n getSrc() {\n return this.src_;\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.imageState_ == ImageState.IDLE) {\n this.imageState_ = ImageState.LOADING;\n try {\n /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n } catch (e) {\n this.handleImageError_();\n }\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this)\n );\n }\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @private\n */\n replaceColor_(pixelRatio) {\n if (\n !this.color_ ||\n this.canvas_[pixelRatio] ||\n this.imageState_ !== ImageState.LOADED\n ) {\n return;\n }\n\n const canvas = document.createElement('canvas');\n this.canvas_[pixelRatio] = canvas;\n\n canvas.width = Math.ceil(this.image_.width * pixelRatio);\n canvas.height = Math.ceil(this.image_.height * pixelRatio);\n\n const ctx = canvas.getContext('2d');\n ctx.scale(pixelRatio, pixelRatio);\n ctx.drawImage(this.image_, 0, 0);\n\n ctx.globalCompositeOperation = 'multiply';\n // Internet Explorer 11 does not support the multiply operation.\n // If the canvas is tainted in Internet Explorer this still produces\n // a solid color image with the shape of the icon.\n if (ctx.globalCompositeOperation === 'multiply' || this.isTainted_()) {\n ctx.fillStyle = asString(this.color_);\n ctx.fillRect(0, 0, canvas.width / pixelRatio, canvas.height / pixelRatio);\n\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(this.image_, 0, 0);\n } else {\n const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const data = imgData.data;\n const r = this.color_[0] / 255.0;\n const g = this.color_[1] / 255.0;\n const b = this.color_[2] / 255.0;\n const a = this.color_[3];\n\n for (let i = 0, ii = data.length; i < ii; i += 4) {\n data[i] *= r;\n data[i + 1] *= g;\n data[i + 2] *= b;\n data[i + 3] *= a;\n }\n ctx.putImageData(imgData, 0, 0);\n }\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {IconImage} Icon image.\n */\nexport function get(image, src, size, crossOrigin, imageState, color) {\n let iconImage = iconImageCache.get(src, crossOrigin, color);\n if (!iconImage) {\n iconImage = new IconImage(image, src, size, crossOrigin, imageState, color);\n iconImageCache.set(src, crossOrigin, color, iconImage);\n }\n return iconImage;\n}\n\nexport default IconImage;\n","/**\n * @module ol/style/Icon\n */\nimport EventType from '../events/EventType.js';\nimport IconAnchorUnits from './IconAnchorUnits.js';\nimport IconOrigin from './IconOrigin.js';\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport {asArray} from '../color.js';\nimport {assert} from '../asserts.js';\nimport {get as getIconImage} from './IconImage.js';\nimport {getUid} from '../util.js';\n\n/**\n * @typedef {Object} Options\n * @property {Array} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {import(\"./IconOrigin.js\").default} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorXUnits='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorYUnits='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {import(\"../color.js\").Color|string} [color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {HTMLImageElement|HTMLCanvasElement} [img] Image object for the icon. If the `src` option is not provided then the\n * provided image must already be loaded. And in that case, it is required\n * to provide the size of the image, with the `imgSize` option.\n * @property {Array} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the\n * sub-rectangle to use from the original icon image.\n * @property {Array} [displacement=[0,0]] Displacement of the icon.\n * @property {import(\"./IconOrigin.js\").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {number} [opacity=1] Opacity of the icon.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {import(\"../size.js\").Size} [size] Icon size in pixel. Can be used together with `offset` to define the\n * sub-rectangle to use from the origin (sprite) icon image.\n * @property {import(\"../size.js\").Size} [imgSize] Image size in pixels. Only required if `img` is set and `src` is not, and\n * for SVG images in Internet Explorer 11. The provided `imgSize` needs to match the actual size of the image.\n * @property {string} [src] Image source URI.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n\n/**\n * @classdesc\n * Set icon style for vector features.\n * @api\n */\nclass Icon extends ImageStyle {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n\n /**\n * @type {number}\n */\n const opacity = options.opacity !== undefined ? options.opacity : 1;\n\n /**\n * @type {number}\n */\n const rotation = options.rotation !== undefined ? options.rotation : 0;\n\n /**\n * @type {number|import(\"../size.js\").Size}\n */\n const scale = options.scale !== undefined ? options.scale : 1;\n\n /**\n * @type {boolean}\n */\n const rotateWithView =\n options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n super({\n opacity: opacity,\n rotation: rotation,\n scale: scale,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n rotateWithView: rotateWithView,\n declutterMode: options.declutterMode,\n });\n\n /**\n * @private\n * @type {Array}\n */\n this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n\n /**\n * @private\n * @type {Array}\n */\n this.normalizedAnchor_ = null;\n\n /**\n * @private\n * @type {import(\"./IconOrigin.js\").default}\n */\n this.anchorOrigin_ =\n options.anchorOrigin !== undefined\n ? options.anchorOrigin\n : IconOrigin.TOP_LEFT;\n\n /**\n * @private\n * @type {import(\"./IconAnchorUnits.js\").default}\n */\n this.anchorXUnits_ =\n options.anchorXUnits !== undefined\n ? options.anchorXUnits\n : IconAnchorUnits.FRACTION;\n\n /**\n * @private\n * @type {import(\"./IconAnchorUnits.js\").default}\n */\n this.anchorYUnits_ =\n options.anchorYUnits !== undefined\n ? options.anchorYUnits\n : IconAnchorUnits.FRACTION;\n\n /**\n * @private\n * @type {?string}\n */\n this.crossOrigin_ =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n /**\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n const image = options.img !== undefined ? options.img : null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size|undefined}\n */\n this.imgSize_ = options.imgSize;\n\n /**\n * @type {string|undefined}\n */\n let src = options.src;\n\n assert(!(src !== undefined && image), 4); // `image` and `src` cannot be provided at the same time\n assert(!image || (image && this.imgSize_), 5); // `imgSize` must be set when `image` is provided\n\n if ((src === undefined || src.length === 0) && image) {\n src = /** @type {HTMLImageElement} */ (image).src || getUid(image);\n }\n assert(src !== undefined && src.length > 0, 6); // A defined and non-empty `src` or `image` must be provided\n\n /**\n * @type {import(\"../ImageState.js\").default}\n */\n const imageState =\n options.src !== undefined ? ImageState.IDLE : ImageState.LOADED;\n\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n this.color_ = options.color !== undefined ? asArray(options.color) : null;\n\n /**\n * @private\n * @type {import(\"./IconImage.js\").default}\n */\n this.iconImage_ = getIconImage(\n image,\n /** @type {string} */ (src),\n this.imgSize_ !== undefined ? this.imgSize_ : null,\n this.crossOrigin_,\n imageState,\n this.color_\n );\n\n /**\n * @private\n * @type {Array}\n */\n this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n /**\n * @private\n * @type {import(\"./IconOrigin.js\").default}\n */\n this.offsetOrigin_ =\n options.offsetOrigin !== undefined\n ? options.offsetOrigin\n : IconOrigin.TOP_LEFT;\n\n /**\n * @private\n * @type {Array}\n */\n this.origin_ = null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = options.size !== undefined ? options.size : null;\n }\n\n /**\n * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n * @return {Icon} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n return new Icon({\n anchor: this.anchor_.slice(),\n anchorOrigin: this.anchorOrigin_,\n anchorXUnits: this.anchorXUnits_,\n anchorYUnits: this.anchorYUnits_,\n color:\n this.color_ && this.color_.slice\n ? this.color_.slice()\n : this.color_ || undefined,\n crossOrigin: this.crossOrigin_,\n imgSize: this.imgSize_,\n offset: this.offset_.slice(),\n offsetOrigin: this.offsetOrigin_,\n opacity: this.getOpacity(),\n rotateWithView: this.getRotateWithView(),\n rotation: this.getRotation(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n size: this.size_ !== null ? this.size_.slice() : undefined,\n src: this.getSrc(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n getAnchor() {\n let anchor = this.normalizedAnchor_;\n if (!anchor) {\n anchor = this.anchor_;\n const size = this.getSize();\n if (\n this.anchorXUnits_ == IconAnchorUnits.FRACTION ||\n this.anchorYUnits_ == IconAnchorUnits.FRACTION\n ) {\n if (!size) {\n return null;\n }\n anchor = this.anchor_.slice();\n if (this.anchorXUnits_ == IconAnchorUnits.FRACTION) {\n anchor[0] *= size[0];\n }\n if (this.anchorYUnits_ == IconAnchorUnits.FRACTION) {\n anchor[1] *= size[1];\n }\n }\n\n if (this.anchorOrigin_ != IconOrigin.TOP_LEFT) {\n if (!size) {\n return null;\n }\n if (anchor === this.anchor_) {\n anchor = this.anchor_.slice();\n }\n if (\n this.anchorOrigin_ == IconOrigin.TOP_RIGHT ||\n this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT\n ) {\n anchor[0] = -anchor[0] + size[0];\n }\n if (\n this.anchorOrigin_ == IconOrigin.BOTTOM_LEFT ||\n this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT\n ) {\n anchor[1] = -anchor[1] + size[1];\n }\n }\n this.normalizedAnchor_ = anchor;\n }\n const displacement = this.getDisplacement();\n return [anchor[0] - displacement[0], anchor[1] + displacement[1]];\n }\n\n /**\n * Set the anchor point. The anchor determines the center point for the\n * symbolizer.\n *\n * @param {Array} anchor Anchor.\n * @api\n */\n setAnchor(anchor) {\n this.anchor_ = anchor;\n this.normalizedAnchor_ = null;\n }\n\n /**\n * Get the icon color.\n * @return {import(\"../color.js\").Color} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n getImage(pixelRatio) {\n return this.iconImage_.getImage(pixelRatio);\n }\n\n /**\n * Get the pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} The pixel ratio of the image.\n * @api\n */\n getPixelRatio(pixelRatio) {\n return this.iconImage_.getPixelRatio(pixelRatio);\n }\n\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return this.iconImage_.getSize();\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return this.iconImage_.getImageState();\n }\n\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n return this.iconImage_.getHitDetectionImage();\n }\n\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n getOrigin() {\n if (this.origin_) {\n return this.origin_;\n }\n let offset = this.offset_;\n\n if (this.offsetOrigin_ != IconOrigin.TOP_LEFT) {\n const size = this.getSize();\n const iconImageSize = this.iconImage_.getSize();\n if (!size || !iconImageSize) {\n return null;\n }\n offset = offset.slice();\n if (\n this.offsetOrigin_ == IconOrigin.TOP_RIGHT ||\n this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT\n ) {\n offset[0] = iconImageSize[0] - size[0] - offset[0];\n }\n if (\n this.offsetOrigin_ == IconOrigin.BOTTOM_LEFT ||\n this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT\n ) {\n offset[1] = iconImageSize[1] - size[1] - offset[1];\n }\n }\n this.origin_ = offset;\n return this.origin_;\n }\n\n /**\n * Get the image URL.\n * @return {string|undefined} Image src.\n * @api\n */\n getSrc() {\n return this.iconImage_.getSrc();\n }\n\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n * @api\n */\n getSize() {\n return !this.size_ ? this.iconImage_.getSize() : this.size_;\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {\n this.iconImage_.addEventListener(EventType.CHANGE, listener);\n }\n\n /**\n * Load not yet loaded URI.\n * When rendering a feature with an icon style, the vector renderer will\n * automatically call this method. However, you might want to call this\n * method yourself for preloading or other purposes.\n * @api\n */\n load() {\n this.iconImage_.load();\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {\n this.iconImage_.removeEventListener(EventType.CHANGE, listener);\n }\n}\n\nexport default Icon;\n","/**\n * @module ol/style/Stroke\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array} [lineDash] Line dash pattern. Default is `null` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nclass Stroke {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n\n /**\n * @private\n * @type {CanvasLineCap|undefined}\n */\n this.lineCap_ = options.lineCap;\n\n /**\n * @private\n * @type {Array}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n\n /**\n * @private\n * @type {CanvasLineJoin|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n }\n\n /**\n * Clones the style.\n * @return {Stroke} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Stroke({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth(),\n });\n }\n\n /**\n * Get the stroke color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Get the line cap type for the stroke.\n * @return {CanvasLineCap|undefined} Line cap.\n * @api\n */\n getLineCap() {\n return this.lineCap_;\n }\n\n /**\n * Get the line dash style for the stroke.\n * @return {Array} Line dash.\n * @api\n */\n getLineDash() {\n return this.lineDash_;\n }\n\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n getLineDashOffset() {\n return this.lineDashOffset_;\n }\n\n /**\n * Get the line join type for the stroke.\n * @return {CanvasLineJoin|undefined} Line join.\n * @api\n */\n getLineJoin() {\n return this.lineJoin_;\n }\n\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n getMiterLimit() {\n return this.miterLimit_;\n }\n\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n getWidth() {\n return this.width_;\n }\n\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n }\n\n /**\n * Set the line cap.\n *\n * @param {CanvasLineCap|undefined} lineCap Line cap.\n * @api\n */\n setLineCap(lineCap) {\n this.lineCap_ = lineCap;\n }\n\n /**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array} lineDash Line dash.\n * @api\n */\n setLineDash(lineDash) {\n this.lineDash_ = lineDash;\n }\n\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n setLineDashOffset(lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n }\n\n /**\n * Set the line join.\n *\n * @param {CanvasLineJoin|undefined} lineJoin Line join.\n * @api\n */\n setLineJoin(lineJoin) {\n this.lineJoin_ = lineJoin;\n }\n\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n setMiterLimit(miterLimit) {\n this.miterLimit_ = miterLimit;\n }\n\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n setWidth(width) {\n this.width_ = width;\n }\n}\n\nexport default Stroke;\n","/**\n * @module ol/colorlike\n */\nimport {toString} from './color.js';\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n } else {\n return color;\n }\n}\n","/**\n * @module ol/style/RegularShape\n */\n\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport {asArray} from '../color.js';\nimport {asColorLike} from '../colorlike.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {\n defaultFillStyle,\n defaultLineJoin,\n defaultLineWidth,\n defaultMiterLimit,\n defaultStrokeStyle,\n} from '../render/canvas.js';\n\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] First radius of a star. Ignored if radius is set.\n * @property {number} [radius2] Second radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.\n * @property {Array} [displacement=[0,0]] Displacement of the shape\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} miterLimit MiterLimit.\n */\n\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nclass RegularShape extends ImageStyle {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n /**\n * @type {boolean}\n */\n const rotateWithView =\n options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n super({\n opacity: 1,\n rotateWithView: rotateWithView,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n scale: options.scale !== undefined ? options.scale : 1,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n });\n\n /**\n * @private\n * @type {Object}\n */\n this.canvas_ = undefined;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.hitDetectionCanvas_ = null;\n\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n this.fill_ = options.fill !== undefined ? options.fill : null;\n\n /**\n * @private\n * @type {Array}\n */\n this.origin_ = [0, 0];\n\n /**\n * @private\n * @type {number}\n */\n this.points_ = options.points;\n\n /**\n * @protected\n * @type {number}\n */\n this.radius_ =\n options.radius !== undefined ? options.radius : options.radius1;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.radius2_ = options.radius2;\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = options.angle !== undefined ? options.angle : 0;\n\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = null;\n\n /**\n * @private\n * @type {RenderOptions}\n */\n this.renderOptions_ = null;\n\n this.render();\n }\n\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n const style = new RegularShape({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n points: this.getPoints(),\n radius: this.getRadius(),\n radius2: this.getRadius2(),\n angle: this.getAngle(),\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n getAnchor() {\n const size = this.size_;\n if (!size) {\n return null;\n }\n const displacement = this.getDisplacement();\n return [size[0] / 2 - displacement[0], size[1] / 2 + displacement[1]];\n }\n\n /**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\n getAngle() {\n return this.angle_;\n }\n\n /**\n * Get the fill style for the shape.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n getFill() {\n return this.fill_;\n }\n\n /**\n * Set the fill style.\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n setFill(fill) {\n this.fill_ = fill;\n this.render();\n }\n\n /**\n * @return {HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n if (!this.hitDetectionCanvas_) {\n this.createHitDetectionCanvas_(this.renderOptions_);\n }\n return this.hitDetectionCanvas_;\n }\n\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n getImage(pixelRatio) {\n let image = this.canvas_[pixelRatio];\n if (!image) {\n const renderOptions = this.renderOptions_;\n const context = createCanvasContext2D(\n renderOptions.size * pixelRatio,\n renderOptions.size * pixelRatio\n );\n this.draw_(renderOptions, context, pixelRatio);\n\n image = context.canvas;\n this.canvas_[pixelRatio] = image;\n }\n return image;\n }\n\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n getPixelRatio(pixelRatio) {\n return pixelRatio;\n }\n\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return this.size_;\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return ImageState.LOADED;\n }\n\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n getOrigin() {\n return this.origin_;\n }\n\n /**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\n getPoints() {\n return this.points_;\n }\n\n /**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\n getRadius() {\n return this.radius_;\n }\n\n /**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\n getRadius2() {\n return this.radius2_;\n }\n\n /**\n * Get the size of the symbolizer (in pixels).\n * @return {import(\"../size.js\").Size} Size.\n * @api\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n getStroke() {\n return this.stroke_;\n }\n\n /**\n * Set the stroke style.\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n setStroke(stroke) {\n this.stroke_ = stroke;\n this.render();\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {}\n\n /**\n * Load not yet loaded URI.\n */\n load() {}\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {}\n\n /**\n * Calculate additional canvas size needed for the miter.\n * @param {string} lineJoin Line join\n * @param {number} strokeWidth Stroke width\n * @param {number} miterLimit Miter limit\n * @return {number} Additional canvas size needed\n * @private\n */\n calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit) {\n if (\n strokeWidth === 0 ||\n this.points_ === Infinity ||\n (lineJoin !== 'bevel' && lineJoin !== 'miter')\n ) {\n return strokeWidth;\n }\n // m | ^\n // i | |\\ .\n // t >| #\\\n // e | |\\ \\ .\n // r \\s\\\n // | \\t\\ . .\n // \\r\\ . .\n // | \\o\\ . . . . .\n // e \\k\\ . . . .\n // | \\e\\ . . . . .\n // d \\ \\ . . . .\n // | _ _a_ _\\# . . .\n // r1 / ` . .\n // | . .\n // b / . .\n // | . .\n // / r2 . .\n // | . .\n // / . .\n // |α . .\n // / . .\n // ° center\n let r1 = this.radius_;\n let r2 = this.radius2_ === undefined ? r1 : this.radius2_;\n if (r1 < r2) {\n const tmp = r1;\n r1 = r2;\n r2 = tmp;\n }\n const points =\n this.radius2_ === undefined ? this.points_ : this.points_ * 2;\n const alpha = (2 * Math.PI) / points;\n const a = r2 * Math.sin(alpha);\n const b = Math.sqrt(r2 * r2 - a * a);\n const d = r1 - b;\n const e = Math.sqrt(a * a + d * d);\n const miterRatio = e / a;\n if (lineJoin === 'miter' && miterRatio <= miterLimit) {\n return miterRatio * strokeWidth;\n }\n // Calculate the distnce from center to the stroke corner where\n // it was cut short because of the miter limit.\n // l\n // ----+---- <= distance from center to here is maxr\n // /####|k ##\\\n // /#####^#####\\\n // /#### /+\\# s #\\\n // /### h/+++\\# t #\\\n // /### t/+++++\\# r #\\\n // /### a/+++++++\\# o #\\\n // /### p/++ fill +\\# k #\\\n ///#### /+++++^+++++\\# e #\\\n //#####/+++++/+\\+++++\\#####\\\n const k = strokeWidth / 2 / miterRatio;\n const l = (strokeWidth / 2) * (d / e);\n const maxr = Math.sqrt((r1 + k) * (r1 + k) + l * l);\n const bevelAdd = maxr - r1;\n if (this.radius2_ === undefined || lineJoin === 'bevel') {\n return bevelAdd * 2;\n }\n // If outer miter is over the miter limit the inner miter may reach through the\n // center and be longer than the bevel, same calculation as above but swap r1 / r2.\n const aa = r1 * Math.sin(alpha);\n const bb = Math.sqrt(r1 * r1 - aa * aa);\n const dd = r2 - bb;\n const ee = Math.sqrt(aa * aa + dd * dd);\n const innerMiterRatio = ee / aa;\n if (innerMiterRatio <= miterLimit) {\n const innerLength = (innerMiterRatio * strokeWidth) / 2 - r2 - r1;\n return 2 * Math.max(bevelAdd, innerLength);\n }\n return bevelAdd * 2;\n }\n\n /**\n * @return {RenderOptions} The render options\n * @protected\n */\n createRenderOptions() {\n let lineJoin = defaultLineJoin;\n let miterLimit = 0;\n let lineDash = null;\n let lineDashOffset = 0;\n let strokeStyle;\n let strokeWidth = 0;\n\n if (this.stroke_) {\n strokeStyle = this.stroke_.getColor();\n if (strokeStyle === null) {\n strokeStyle = defaultStrokeStyle;\n }\n strokeStyle = asColorLike(strokeStyle);\n strokeWidth = this.stroke_.getWidth();\n if (strokeWidth === undefined) {\n strokeWidth = defaultLineWidth;\n }\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset();\n lineJoin = this.stroke_.getLineJoin();\n if (lineJoin === undefined) {\n lineJoin = defaultLineJoin;\n }\n miterLimit = this.stroke_.getMiterLimit();\n if (miterLimit === undefined) {\n miterLimit = defaultMiterLimit;\n }\n }\n\n const add = this.calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit);\n const maxRadius = Math.max(this.radius_, this.radius2_ || 0);\n const size = Math.ceil(2 * maxRadius + add);\n\n return {\n strokeStyle: strokeStyle,\n strokeWidth: strokeWidth,\n size: size,\n lineDash: lineDash,\n lineDashOffset: lineDashOffset,\n lineJoin: lineJoin,\n miterLimit: miterLimit,\n };\n }\n\n /**\n * @protected\n */\n render() {\n this.renderOptions_ = this.createRenderOptions();\n const size = this.renderOptions_.size;\n this.canvas_ = {};\n this.size_ = [size, size];\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} pixelRatio The pixel ratio.\n */\n draw_(renderOptions, context, pixelRatio) {\n context.scale(pixelRatio, pixelRatio);\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n this.createPath_(context);\n\n if (this.fill_) {\n let color = this.fill_.getColor();\n if (color === null) {\n color = defaultFillStyle;\n }\n context.fillStyle = asColorLike(color);\n context.fill();\n }\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (context.setLineDash && renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n */\n createHitDetectionCanvas_(renderOptions) {\n if (this.fill_) {\n let color = this.fill_.getColor();\n\n // determine if fill is transparent (or pattern or gradient)\n let opacity = 0;\n if (typeof color === 'string') {\n color = asArray(color);\n }\n if (color === null) {\n opacity = 1;\n } else if (Array.isArray(color)) {\n opacity = color.length === 4 ? color[3] : 1;\n }\n if (opacity === 0) {\n // if a transparent fill style is set, create an extra hit-detection image\n // with a default fill style\n const context = createCanvasContext2D(\n renderOptions.size,\n renderOptions.size\n );\n this.hitDetectionCanvas_ = context.canvas;\n\n this.drawHitDetectionCanvas_(renderOptions, context);\n }\n }\n if (!this.hitDetectionCanvas_) {\n this.hitDetectionCanvas_ = this.getImage(1);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} context The context to draw in.\n */\n createPath_(context) {\n let points = this.points_;\n const radius = this.radius_;\n if (points === Infinity) {\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n } else {\n const radius2 = this.radius2_ === undefined ? radius : this.radius2_;\n if (this.radius2_ !== undefined) {\n points *= 2;\n }\n const startAngle = this.angle_ - Math.PI / 2;\n const step = (2 * Math.PI) / points;\n for (let i = 0; i < points; i++) {\n const angle0 = startAngle + i * step;\n const radiusC = i % 2 === 0 ? radius : radius2;\n context.lineTo(radiusC * Math.cos(angle0), radiusC * Math.sin(angle0));\n }\n context.closePath();\n }\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n */\n drawHitDetectionCanvas_(renderOptions, context) {\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n this.createPath_(context);\n\n context.fillStyle = defaultFillStyle;\n context.fill();\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n }\n}\n\nexport default RegularShape;\n","/**\n * @module ol/style/Circle\n */\n\nimport RegularShape from './RegularShape.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nclass CircleStyle extends RegularShape {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n points: Infinity,\n fill: options.fill,\n radius: options.radius,\n stroke: options.stroke,\n scale: options.scale !== undefined ? options.scale : 1,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n rotateWithView:\n options.rotateWithView !== undefined ? options.rotateWithView : false,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n });\n }\n\n /**\n * Clones the style.\n * @return {CircleStyle} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n const style = new CircleStyle({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n radius: this.getRadius(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n }\n\n /**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\n setRadius(radius) {\n this.radius_ = radius;\n this.render();\n }\n}\n\nexport default CircleStyle;\n","/**\n * @module ol/style/Style\n */\n\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport Stroke from './Stroke.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes an {@link module:ol/Feature~Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style~Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array{table}
    {caption}
    ';\r\n var format = function (s, c) { return s.replace(/{(\\w+)}/g, function (_m, p) { return c[p]; }); };\r\n var ctx = { worksheet: options.workSheet || 'Hoja1', table: dataString, caption: options.title || \"\" };\r\n csv = format(template, ctx);\r\n return csv;\r\n };\r\n\r\n};\r\nTC.tool.ExcelExport.prototype.Save = function (filename, rows, title) {\r\n \r\n var exporter = this;\r\n const csvFile = exporter.stringify(rows, { txtDelim: \"\\\"\", fieldSep: \";\", title: title || \"\" });\r\n\r\n var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, filename);\r\n } else {\r\n var link = document.createElement(\"a\");\r\n if (link.download !== undefined) { // feature detection\r\n // Browsers that support HTML5 download attribute\r\n var url = URL.createObjectURL(blob);\r\n link.setAttribute(\"href\", url);\r\n link.setAttribute(\"download\", filename);\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n }\r\n\r\n};\r\n\r\nconst ExcelExport = TC.tool.ExcelExport;\r\nexport default ExcelExport;\r\n","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\n\r\nTC.tool = TC.tool || {};\r\n\r\nTC.tool.Proxification = function (proxy, options) {\r\n var self = this;\r\n\r\n self.Consts = {\r\n url: {\r\n SPLIT_REGEX: /([^:]*:)?\\/\\/([^:]*:?[^@]*@)?([^:\\/\\?]*):?([^\\/\\?]*)/\r\n }\r\n };\r\n\r\n if (proxy === undefined) {\r\n throw new TypeError('\"proxy\" parameter is undefined', \"TC.tool.Proxification.js\");\r\n }\r\n\r\n if (typeof proxy === \"function\") {\r\n self.proxy = proxy;\r\n } else {\r\n self.proxy = function (url) {\r\n var result = proxy;\r\n if (url.substr(0, 4) !== \"http\") {\r\n result += window.location.protocol;\r\n }\r\n result += encodeURIComponent(url);\r\n return result;\r\n };\r\n }\r\n\r\n options = options || {};\r\n\r\n self._location = options.location || window.location;\r\n\r\n self.preventMixedContent = options.allowedMixedContent !== undefined ? !options.allowedMixedContent : true;\r\n};\r\n\r\n(function () {\r\n if (!window.fetch) {\r\n (function (self) {\r\n // polyfill https://github.com/github/fetch/\r\n 'use strict'; if (self.fetch) { return }\r\n var support = {\r\n searchParams: 'URLSearchParams' in self, iterable: 'Symbol' in self && 'iterator' in Symbol, blob: 'FileReader' in self && 'Blob' in self && (function () {\r\n try {\r\n new Blob()\r\n return !0\r\n } catch (e) { return !1 }\r\n })(), formData: 'FormData' in self, arrayBuffer: 'ArrayBuffer' in self\r\n }\r\n if (support.arrayBuffer) {\r\n var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]']\r\n var isDataView = function (obj) { return obj && Object.prototype.isPrototypeOf.call(DataView.prototype, obj) }\r\n var isArrayBufferView = ArrayBuffer.isView || function (obj) { return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 }\r\n }\r\n function normalizeName(name) {\r\n if (typeof name !== 'string') { name = String(name) }\r\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) { throw new TypeError('Invalid character in header field name') }\r\n return name.toLowerCase()\r\n }\r\n function normalizeValue(value) {\r\n if (typeof value !== 'string') { value = String(value) }\r\n return value\r\n }\r\n function iteratorFor(items) {\r\n var iterator = {\r\n next: function () {\r\n var value = items.shift()\r\n return { done: value === undefined, value: value }\r\n }\r\n }\r\n if (support.iterable) { iterator[Symbol.iterator] = function () { return iterator } }\r\n return iterator\r\n }\r\n function Headers(headers) {\r\n this.map = {}\r\n if (headers instanceof Headers) { headers.forEach(function (value, name) { this.append(name, value) }, this) } else if (Array.isArray(headers)) { headers.forEach(function (header) { this.append(header[0], header[1]) }, this) } else if (headers) { Object.getOwnPropertyNames(headers).forEach(function (name) { this.append(name, headers[name]) }, this) }\r\n }\r\n Headers.prototype.append = function (name, value) {\r\n name = normalizeName(name)\r\n value = normalizeValue(value)\r\n var oldValue = this.map[name]\r\n this.map[name] = oldValue ? oldValue + ',' + value : value\r\n }\r\n Headers.prototype['delete'] = function (name) { delete this.map[normalizeName(name)] }\r\n Headers.prototype.get = function (name) {\r\n name = normalizeName(name)\r\n return this.has(name) ? this.map[name] : null\r\n }\r\n Headers.prototype.has = function (name) {\r\n return Object.prototype.hasOwnProperty.call(this.map, normalizeName(name));\r\n }\r\n Headers.prototype.set = function (name, value) {\r\n this.map[normalizeName(name)] = normalizeValue(value);\r\n }\r\n Headers.prototype.forEach = function (callback, thisArg) {\r\n for (var name in this.map) {\r\n if (Object.prototype.hasOwnProperty.call(this.map, name)) {\r\n callback.call(thisArg, this.map[name], name, this);\r\n }\r\n }\r\n }\r\n Headers.prototype.keys = function () {\r\n var items = []\r\n this.forEach(function (value, name) { items.push(name) })\r\n return iteratorFor(items)\r\n }\r\n Headers.prototype.values = function () {\r\n var items = []\r\n this.forEach(function (value) { items.push(value) })\r\n return iteratorFor(items)\r\n }\r\n Headers.prototype.entries = function () {\r\n var items = []\r\n this.forEach(function (value, name) { items.push([name, value]) })\r\n return iteratorFor(items)\r\n }\r\n if (support.iterable) { Headers.prototype[Symbol.iterator] = Headers.prototype.entries }\r\n function consumed(body) {\r\n if (body.bodyUsed) { return Promise.reject(new TypeError('Already read')) }\r\n body.bodyUsed = !0\r\n }\r\n function fileReaderReady(reader) {\r\n return new Promise(function (resolve, reject) {\r\n reader.onload = function () { resolve(reader.result) }\r\n reader.onerror = function () { reject(reader.error) }\r\n })\r\n }\r\n function readBlobAsArrayBuffer(blob) {\r\n var reader = new FileReader()\r\n var promise = fileReaderReady(reader)\r\n reader.readAsArrayBuffer(blob)\r\n return promise\r\n }\r\n function readBlobAsText(blob) {\r\n var reader = new FileReader()\r\n var promise = fileReaderReady(reader)\r\n reader.readAsText(blob)\r\n return promise\r\n }\r\n function readArrayBufferAsText(buf) {\r\n var view = new Uint8Array(buf)\r\n var chars = new Array(view.length)\r\n for (var i = 0; i < view.length; i++) { chars[i] = String.fromCharCode(view[i]) }\r\n return chars.join('')\r\n }\r\n function bufferClone(buf) {\r\n if (buf.slice) { return buf.slice(0) } else {\r\n var view = new Uint8Array(buf.byteLength)\r\n view.set(new Uint8Array(buf))\r\n return view.buffer\r\n }\r\n }\r\n function Body() {\r\n this.bodyUsed = !1\r\n this._initBody = function (body) {\r\n this._bodyInit = body\r\n if (!body) {\r\n this._bodyText = '';\r\n } else if (typeof body === 'string') {\r\n this._bodyText = body;\r\n } else if (support.blob && Object.prototype.isPrototypeOf.call(Blob.prototype, body)) {\r\n this._bodyBlob = body;\r\n } else if (support.formData && Object.prototype.isPrototypeOf.call(FormData.prototype, body)) {\r\n this._bodyFormData = body;\r\n } else if (support.searchParams && Object.prototype.isPrototypeOf.call(URLSearchParams.prototype, body)) {\r\n this._bodyText = body.toString();\r\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\r\n this._bodyArrayBuffer = bufferClone(body.buffer);\r\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\r\n } else if (support.arrayBuffer && (Object.prototype.isPrototypeOf.call(ArrayBuffer.prototype, body) || isArrayBufferView(body))) {\r\n this._bodyArrayBuffer = bufferClone(body);\r\n } else {\r\n throw new Error('unsupported BodyInit type');\r\n }\r\n if (!this.headers.get('content-type')) {\r\n if (typeof body === 'string') {\r\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\r\n } else if (this._bodyBlob && this._bodyBlob.type) {\r\n this.headers.set('content-type', this._bodyBlob.type);\r\n } else if (support.searchParams && Object.prototype.isPrototypeOf.call(URLSearchParams.prototype, body)) {\r\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\r\n }\r\n }\r\n }\r\n if (support.blob) {\r\n this.blob = function () {\r\n var rejected = consumed(this)\r\n if (rejected) { return rejected }\r\n if (this._bodyBlob) { return Promise.resolve(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(new Blob([this._bodyArrayBuffer])) } else if (this._bodyFormData) { throw new Error('could not read FormData body as blob') } else { return Promise.resolve(new Blob([this._bodyText])) }\r\n }\r\n this.arrayBuffer = function () { if (this._bodyArrayBuffer) { return consumed(this) || Promise.resolve(this._bodyArrayBuffer) } else { return this.blob().then(readBlobAsArrayBuffer) } }\r\n }\r\n this.text = function () {\r\n var rejected = consumed(this)\r\n if (rejected) { return rejected }\r\n if (this._bodyBlob) { return readBlobAsText(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) } else if (this._bodyFormData) { throw new Error('could not read FormData body as text') } else { return Promise.resolve(this._bodyText) }\r\n }\r\n if (support.formData) { this.formData = function () { return this.text().then(decode) } }\r\n this.json = function () { return this.text().then(JSON.parse) }\r\n return this\r\n }\r\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\r\n function normalizeMethod(method) {\r\n var upcased = method.toUpperCase()\r\n return (methods.indexOf(upcased) > -1) ? upcased : method\r\n }\r\n function Request(input, options) {\r\n options = options || {}\r\n var body = options.body\r\n if (input instanceof Request) {\r\n if (input.bodyUsed) { throw new TypeError('Already read') }\r\n this.url = input.url\r\n this.credentials = input.credentials\r\n if (!options.headers) { this.headers = new Headers(input.headers) }\r\n this.method = input.method\r\n this.mode = input.mode\r\n if (!body && input._bodyInit != null) {\r\n body = input._bodyInit\r\n input.bodyUsed = !0\r\n }\r\n } else { this.url = String(input) }\r\n this.credentials = options.credentials || this.credentials || 'omit'\r\n if (options.headers || !this.headers) { this.headers = new Headers(options.headers) }\r\n this.method = normalizeMethod(options.method || this.method || 'GET')\r\n this.mode = options.mode || this.mode || null\r\n this.referrer = null\r\n if ((this.method === 'GET' || this.method === 'HEAD') && body) { throw new TypeError('Body not allowed for GET or HEAD requests') }\r\n this._initBody(body)\r\n }\r\n Request.prototype.clone = function () { return new Request(this, { body: this._bodyInit }) }\r\n function decode(body) {\r\n var form = new FormData()\r\n body.trim().split('&').forEach(function (bytes) {\r\n if (bytes) {\r\n var split = bytes.split('=')\r\n var name = split.shift().replace(/\\+/g, ' ')\r\n var value = split.join('=').replace(/\\+/g, ' ')\r\n form.append(decodeURIComponent(name), decodeURIComponent(value))\r\n }\r\n })\r\n return form\r\n }\r\n function parseHeaders(rawHeaders) {\r\n var headers = new Headers()\r\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\r\n preProcessedHeaders.split(/\\r?\\n/).forEach(function (line) {\r\n var parts = line.split(':')\r\n var key = parts.shift().trim()\r\n if (key) {\r\n var value = parts.join(':').trim()\r\n headers.append(key, value)\r\n }\r\n })\r\n return headers\r\n }\r\n Body.call(Request.prototype)\r\n function Response(bodyInit, options) {\r\n if (!options) { options = {} }\r\n this.type = 'default'\r\n this.status = options.status === undefined ? 200 : options.status\r\n this.ok = this.status >= 200 && this.status < 300\r\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\r\n this.headers = new Headers(options.headers)\r\n this.url = options.url || ''\r\n this._initBody(bodyInit)\r\n }\r\n Body.call(Response.prototype)\r\n Response.prototype.clone = function () { return new Response(this._bodyInit, { status: this.status, statusText: this.statusText, headers: new Headers(this.headers), url: this.url }) }\r\n Response.error = function () {\r\n var response = new Response(null, { status: 0, statusText: '' })\r\n response.type = 'error'\r\n return response\r\n }\r\n var redirectStatuses = [301, 302, 303, 307, 308]\r\n Response.redirect = function (url, status) {\r\n if (redirectStatuses.indexOf(status) === -1) { throw new RangeError('Invalid status code') }\r\n return new Response(null, { status: status, headers: { location: url } })\r\n }\r\n self.Headers = Headers\r\n self.Request = Request\r\n self.Response = Response\r\n self.fetch = function (input, init) {\r\n return new Promise(function (resolve, reject) {\r\n var request = new Request(input, init);\r\n init = init || {};\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n if (xhr.status === 0) {\r\n return new Response(null, { status: xhr.status });\r\n } else {\r\n var options = { status: xhr.status, statusText: xhr.statusText, headers: parseHeaders(xhr.getAllResponseHeaders() || '') }\r\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\r\n var body = 'response' in xhr ? xhr.response : xhr.responseText\r\n resolve(new Response(body, options))\r\n }\r\n }\r\n xhr.onerror = function () { reject(new TypeError('Network request failed')) }\r\n xhr.ontimeout = function () { reject(new TypeError('Network request failed')) }\r\n xhr.open(request.method, request.url, !init.sync)\r\n if (request.credentials === 'include') { xhr.withCredentials = !0 } else if (request.credentials === 'omit') { xhr.withCredentials = !1 }\r\n if (!init.sync && ('responseType' in xhr && support.blob)) { xhr.responseType = 'blob' }\r\n request.headers.forEach(function (value, name) { xhr.setRequestHeader(name, value) })\r\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\r\n })\r\n }\r\n self.fetch.polyfill = !0\r\n })(this);\r\n }\r\n\r\n var srcToURL = function (src) {\r\n // GLS: 30/01/2019 Se carga un polyfill que no implementa correctamente el origin\r\n //if (window.URL && !(src.indexOf('//') == 0)) {\r\n // try {\r\n // var url = new URL(src);\r\n // if (url.origin && url.origin.length > 0) {\r\n // return url;\r\n // }\r\n // }\r\n // catch (error) {\r\n // // no hacemos nada y seguimos adelante\r\n // }\r\n //}\r\n\r\n var anchor = document.createElement('a');\r\n anchor.href = src;\r\n\r\n if (!anchor.origin) {\r\n\r\n if (!(anchor.protocol && anchor.hostname)) {\r\n var urlParts = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(anchor.href);\r\n\r\n anchor.protocol = urlParts[1];\r\n\r\n if (urlParts[4].indexOf(':') > -1) {\r\n var hostname = urlParts[4].split(':');\r\n anchor.hostname = hostname[0];\r\n anchor.port = hostname[1];\r\n } else {\r\n anchor.hostname = urlParts[4];\r\n }\r\n }\r\n\r\n anchor.origin = (anchor.protocol.length === 0 ? window.location.protocol : anchor.protocol) + \"//\" + anchor.hostname + (anchor.port && src.indexOf(anchor.port) > -1 ? ':' + anchor.port : '');\r\n }\r\n\r\n return anchor;\r\n };\r\n\r\n function HostCacheService(objectStoreName) {\r\n this.database = null;\r\n this.objectStoreName = objectStoreName;\r\n }\r\n\r\n HostCacheService.prototype = {\r\n /* createDB : create the scheme of the database */\r\n createDB: function () {\r\n\r\n // In the following line, you should include the prefixes of implementations you want to test.\r\n window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\r\n // DON'T use \"var indexedDB = ...\" if you're not in a function.\r\n // Moreover, you may need references to some window.IDB* objects:\r\n window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;\r\n window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;\r\n if (!window.indexedDB) {\r\n window.alert(\"Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.\");\r\n }\r\n\r\n var request = window.indexedDB.open('HostCacheService', 1);\r\n var that = this;\r\n request.onsuccess = function (evt) {\r\n that.database = evt.target.result;\r\n };\r\n request.onerror = function (_evt) {\r\n console.log(\"IndexedDB--> onerror \");\r\n };\r\n request.onupgradeneeded = function (evt) {\r\n var thisDB = evt.target.result;\r\n if (!thisDB.objectStoreNames.contains('HostAction')) {\r\n var store = thisDB.createObjectStore('HostAction', { keyPath: 'id' });\r\n store.createIndex(\"host\", [\"action\"], { unique: true });\r\n }\r\n };\r\n },\r\n /* info on available storage */\r\n info: function () {\r\n // Request storage usage and capacity left\r\n window.webkitStorageInfo.queryUsageAndQuota(window.TEMPORARY, //the type can be either TEMPORARY or PERSISTENT\r\n function (used, remaining) {\r\n console.log(\"Used quota: \" + used + \", remaining quota: \" + remaining);\r\n }, function (e) {\r\n console.log('Error', e);\r\n });\r\n },\r\n /* isReady when objectStore has been created */\r\n isReady: function () {\r\n if (!this.database)\r\n return false;\r\n\r\n return this.database.objectStoreNames.contains(this.objectStoreName);\r\n },\r\n getHost: function (host) {\r\n return new Promise(function (resolve, reject) {\r\n if (!this.database) {\r\n console.log(\"getAction no database\", this.database);\r\n reject(\"no IndexedDB\");\r\n }\r\n else {\r\n var transaction = this.database.transaction(this.objectStoreName);\r\n var hostIndex = transaction.objectStore(this.objectStoreName).index(\"host\");\r\n\r\n var requestGet = hostIndex.get([host]);\r\n requestGet.onsuccess = function (evt) {\r\n if (evt.target.result) {\r\n resolve({ data: evt.target.result });\r\n }\r\n else { reject(\"no action\"); }\r\n };\r\n\r\n requestGet.onerror = function (_evt) {\r\n reject(\"no action get failed\");\r\n };\r\n }\r\n });\r\n }\r\n };\r\n\r\n const HostCacheItem = function () {\r\n this.key = \"\";\r\n this.action = null;\r\n this.actionName = \"\";\r\n };\r\n\r\n const HostCache = function () {\r\n var toHost = function (src) {\r\n var url = srcToURL(src);\r\n if (url) {\r\n return url.origin;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n //this.hostCacheService = new HostCacheService(\"HostAction\");\r\n //this.hostCacheService.createDB();\r\n\r\n this._hosts = [];\r\n this._hostsImage = [];\r\n\r\n this.is = function (src, options) {\r\n var host = toHost(src);\r\n\r\n return this.get(host, options) !== null;\r\n };\r\n\r\n this.get = function (host, options) {\r\n if (this.getList(options).length === 0) {\r\n return null;\r\n } else {\r\n var filtered = this.getList(options).filter(function (h) {\r\n return h.key === host && options.exportable == h.exportable;\r\n });\r\n if (filtered.length === 0) {\r\n return null;\r\n } else {\r\n return filtered[0];\r\n }\r\n }\r\n };\r\n\r\n this.getList = function (options) {\r\n return options.forImage ? this._hostsImage : this._hosts;\r\n };\r\n\r\n this.addKey = function (src, options) {\r\n var host = toHost(src);\r\n var newItem = { key: host, action: null };\r\n if (options.exportable) {\r\n newItem.exportable = options.exportable;\r\n }\r\n this.getList(options).push(newItem);\r\n return this.getList(options)[this.getList(options).length - 1];\r\n };\r\n\r\n this.removeKey = function (src, options) {\r\n var host = toHost(src);\r\n\r\n for (var i = 0; i < this.getList(options).length; i++) {\r\n if (this.getList(options)[i].key === host && options.exportable == this.getList(options)[i].exportable) {\r\n this.getList(options).splice(i, 1);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n this.getAction = function (src, options) {\r\n options = options || {};\r\n\r\n var host = toHost(src);\r\n var cache = this.get(host, options);\r\n if (!cache) {\r\n return Promise.reject(new Error('Cache null'));\r\n }\r\n return cache._actionPromise;\r\n };\r\n };\r\n\r\n var toolProto = TC.tool.Proxification.prototype;\r\n\r\n toolProto.cacheHost = new HostCache();\r\n\r\n toolProto._isServiceWorker = function () {\r\n if (navigator.serviceWorker) {\r\n if (navigator.serviceWorker.controller && navigator.serviceWorker.controller.state === \"activated\") {\r\n return true;\r\n } else {\r\n navigator.serviceWorker.ready\r\n .then(function (registration) {\r\n if (registration.active) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n })\r\n .catch(() => {\r\n console.log('Capturamos error que se produce en FF por configuración del navegador.');\r\n });\r\n\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n toolProto._isSameOrigin = function (uri) {\r\n var self = this;\r\n\r\n var result = uri.indexOf(\"http\") !== 0 && uri.indexOf(\"//\") !== 0;\r\n var urlParts = !result && uri.match(self.Consts.url.SPLIT_REGEX);\r\n if (urlParts) {\r\n var uProtocol = urlParts[1];\r\n result = (uProtocol == self._location.protocol || uProtocol == undefined) && urlParts[3] == self._location.hostname;\r\n var uPort = urlParts[4], lPort = self._location.port;\r\n if (uPort != 80 && uPort !== \"\" || lPort != \"80\" && lPort !== \"\") {\r\n result = result && uPort == lPort;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n toolProto._isSameProtocol = function (uri) {\r\n const self = this;\r\n var protocolRegex = /^(https?:\\/\\/)/i;\r\n var uriProtocol = uri.match(protocolRegex);\r\n if (uriProtocol && uriProtocol.length > 1) {\r\n var locationProtocol = self._location.match(protocolRegex);\r\n if (locationProtocol && locationProtocol.length > 1) {\r\n return uriProtocol[0].trim() === locationProtocol[0].trim();\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n toolProto._isSecureURL = function (url) {\r\n //si no empieza por http ni por https la consideramos segura\r\n if (!/^(f|ht)tps?:\\/\\//i.test(url)) {\r\n return true;\r\n }\r\n return /^(f|ht)tps:\\/\\//i.test(url);\r\n };\r\n\r\n const ResponseError = function (status, text, url) {\r\n this.status = status;\r\n this.text = text;\r\n this.url = url;\r\n };\r\n\r\n var changeProtocol = function (src, newProtocol) {\r\n var url = srcToURL(src);\r\n return src.replace(url.protocol, newProtocol);\r\n };\r\n\r\n var toHTTPS = function (src) {\r\n return changeProtocol(src, \"https:\");\r\n };\r\n\r\n var toHTTP = function (src) {\r\n return changeProtocol(src, \"http:\");\r\n };\r\n\r\n var _currentHTTP = function (src, options, resolve, reject) {\r\n var self = this;\r\n src = toHTTPS(src);\r\n\r\n self._image.getImgTag(src, options).then(function (img) {\r\n resolve(img, self._actionHTTPS);\r\n }, function (error) {\r\n if (error === self._image.ErrorType.PROTOCOL) {\r\n reject(error);\r\n } \r\n else {\r\n _byProxy.call(self, toHTTP(src), options, resolve, reject);\r\n }\r\n });\r\n };\r\n \r\n var _currentHTTPS = function (src, options, resolve, reject) {\r\n var self = this;\r\n src = toHTTP(src);\r\n\r\n self._image.getImgTag(src, options).then(function (img) {\r\n resolve(img, self._actionHTTP);\r\n }, function (error) {\r\n if (error === self._image.ErrorType.PROTOCOL || error === self._image.ErrorType.UNEXPECTEDCONTENTTYPE) {\r\n reject(error);\r\n } else {\r\n _byProxy.call(self, toHTTPS(src), options, resolve, reject);\r\n }\r\n });\r\n };\r\n\r\n var _byProxy = function (src, options, resolve, reject) {\r\n var self = this;\r\n\r\n options.sameOrigin = self._isSameOrigin(self._actionProxy.call(self, src));\r\n\r\n self._image.getImgTagByAction(src, options, self._actionProxy.bind(self)).then(function (img) {\r\n resolve(img, self._actionProxy);\r\n }, function (error) {\r\n reject(error);\r\n });\r\n };\r\n\r\n toolProto._actionDirect = function (src) {\r\n return src;\r\n };\r\n\r\n toolProto._actionHTTP = function (src) {\r\n return changeProtocol(src, \"http:\");\r\n };\r\n\r\n toolProto._actionHTTPS = function (src) {\r\n return changeProtocol(src, \"https:\");\r\n };\r\n\r\n toolProto._actionProxy = function (src) {\r\n var self = this;\r\n\r\n return self.proxy(src);\r\n };\r\n\r\n toolProto._image = {\r\n ErrorType: {\r\n CORS: 'cors',\r\n PROTOCOL: 'protocol',\r\n NOTFOUNDED: 'notfounded',\r\n UNEXPECTED: 'unexpected',\r\n OFFLINE: 'offline',\r\n UNEXPECTEDCONTENTTYPE: 'Un_Expected_ContentType'\r\n },\r\n validContentType: [\"image/png\", \"image/jpeg\", \"image/tiff\", \"image/gif\", \"image/bmp\", \"image/svg+xml\", \"image/webp\",\"image/avif\"],\r\n checkHttpStatus: function (src) {\r\n const self = this;\r\n if (!navigator.onLine) {\r\n return Promise.reject({ statusText: self.ErrorType.OFFLINE });\r\n }\r\n\r\n return fetch(src, { credentials: 'omit' })\r\n .then(toolProto._fetch.validateContentType.bind(toolProto, self.validContentType))\r\n .then(function (response) {\r\n return { status: response.status, statusText: response.statusText };\r\n })\r\n .catch(function (error) {\r\n if (error.message === self.ErrorType.UNEXPECTEDCONTENTTYPE)\r\n return error;\r\n return { statusText: self.ErrorType.UNEXPECTED};\r\n });\r\n },\r\n getImgTag: function (src, options) {\r\n return new Promise(function (resolve, reject) {\r\n var self = this;\r\n\r\n var img = document.createElement(\"img\");\r\n\r\n if (options.exportable && !options.sameOrigin) {\r\n img.dataset.checkCORSHeaders = true;\r\n img.crossOrigin = typeof options.exportable === 'string' ? options.exportable : 'anonymous';\r\n }\r\n\r\n img.onload = function () {\r\n\r\n console.log('Load OK: ' + img.src);\r\n\r\n img.onload = img.onerror = undefined;\r\n\r\n if (options.exportable && !options.sameOrigin) {\r\n var createCanvas = function (img) {\r\n var canvas = document.createElement('CANVAS');\r\n var ctx = canvas.getContext('2d');\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n\r\n return canvas;\r\n };\r\n\r\n try {\r\n var canvas = createCanvas(img);\r\n const result = canvas.toDataURL(\"image/png\");\r\n resolve(img);\r\n } catch (e) {\r\n if (e.code === 18) { // GLS: 18 - SECURITY_ERR\r\n reject(self.ErrorType.CORS);\r\n } else {\r\n resolve(img);\r\n }\r\n }\r\n } else { resolve(img); }\r\n };\r\n\r\n img.onerror = function (_error) {\r\n\r\n console.log('Load crossOrigin ERROR: ' + img.src);\r\n\r\n if (img.dataset.checkCORSHeaders) {\r\n img.crossOrigin = null;\r\n\r\n img.onerror = undefined;\r\n img.onerror = function (_error) {\r\n console.log('Load ERROR: ' + img.src);\r\n\r\n self.checkHttpStatus(img.src).then(function (error) {\r\n if (options.ignoreProxification) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } else {\r\n if (error.status === 400) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } \r\n else {\r\n reject(error);\r\n }\r\n }\r\n }).catch(reject);\r\n img.onload = img.onerror = undefined;\r\n };\r\n\r\n img.src = src;\r\n\r\n } else {\r\n console.log('Load ERROR: ' + img.src);\r\n\r\n img.onload = img.onerror = undefined;\r\n\r\n self.checkHttpStatus(img.src).then(function (error) {\r\n if (options.ignoreProxification) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } else {\r\n if (error.status === 400) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } else {\r\n reject(error);\r\n }\r\n }\r\n }).catch(reject);\r\n }\r\n };\r\n\r\n try {\r\n img.src = src;\r\n } catch (ex) {\r\n console.log('Load ERROR: ' + img.src);\r\n\r\n reject(self.ErrorType.UNEXPECTED);\r\n }\r\n }.bind(toolProto._image));\r\n },\r\n getImgTagByAction: function (src, options, action) {\r\n return new Promise(function (resolve, reject) {\r\n var self = this;\r\n\r\n var img = document.createElement(\"img\");\r\n\r\n if (!options.sameOrigin) {\r\n if (options.exportable) {\r\n img.crossOrigin = \"anonymous\";\r\n }\r\n }\r\n\r\n img.onload = function () {\r\n img.onload = img.onerror = undefined;\r\n resolve(img);\r\n };\r\n img.onerror = function (_error) {\r\n console.log('Load ERROR: ' + img.src);\r\n img.onload = img.onerror = undefined;\r\n\r\n self.checkHttpStatus(img.src).then(function (error) {\r\n if (options.ignoreProxification) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } else {\r\n if (error.status === 400) {\r\n reject(self.ErrorType.PROTOCOL);\r\n } else {\r\n reject(error);\r\n }\r\n }\r\n }).catch(reject);\r\n };\r\n img.src = action(src);\r\n }.bind(toolProto._image));\r\n }\r\n };\r\n\r\n toolProto._fetch = {\r\n Headers: {\r\n CONTENTTYPE: \"content-type\",\r\n CONTENTDISPOSITION:\"content-disposition\"\r\n },\r\n ErrorType: {\r\n CORS: 'cors',\r\n PROTOCOL: 'protocol',\r\n NOTFOUNDED: 'Not_Founded',\r\n UNEXPECTED: 'Un_Expected',\r\n UNEXPECTEDCONTENTTYPE: 'Un_Expected_ContentType'\r\n },\r\n validateResponse: function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, response.statusText, response.url);\r\n }\r\n return response;\r\n },\r\n validateContentType: function (expectedContentType, response) {\r\n const self = this;\r\n\r\n if (!expectedContentType) {\r\n return response;\r\n }\r\n\r\n var contentType = response.headers.get(self._fetch.Headers.CONTENTTYPE);\r\n if (contentType && contentType.indexOf(expectedContentType) === -1) {\r\n throw Error(self._fetch.ErrorType.UNEXPECTEDCONTENTTYPE);\r\n }\r\n\r\n return response;\r\n }\r\n };\r\n\r\n /* Sólo GET */\r\n toolProto.fetchImage = function (src, options) {\r\n var self = this;\r\n\r\n options = options || {};\r\n options.forImage = true;\r\n\r\n return new Promise(function (resolve, reject) {\r\n\r\n if (self.cacheHost.is(src, options)) {\r\n self.cacheHost.getAction(src, options).then(function (cache) {\r\n options.sameOrigin = self._isSameOrigin(cache.action(src));\r\n self._image.getImgTagByAction(src, options, cache.action).then(function (img) {\r\n resolve(img);\r\n }, function (error) {\r\n reject(error);\r\n });\r\n }).catch(error => reject(error));\r\n } else {\r\n var cache = self.cacheHost.addKey(src, options);\r\n cache._actionPromise = new Promise(function (resolveActionPromise, rejectActionPromise) {\r\n\r\n const _caching = function (img, action) {\r\n cache.action = action.bind(self);\r\n cache.exportable = options.exportable;\r\n\r\n resolveActionPromise({ action: cache.action });\r\n\r\n resolve(img);\r\n };\r\n\r\n const _reject = function (error) {\r\n rejectActionPromise(error);\r\n\r\n if (error.status == 200) {\r\n //options.useCredentials = true;\r\n\r\n // GLS: 04/01/2019 comento la siguiente línea porque no para de pedir al obtener una respuesta correcta y en el cuerpo viene una excepción\r\n //makeRequest(options);\r\n\r\n self.cacheHost.removeKey(src, options);\r\n reject(error);\r\n } else {\r\n self.cacheHost.removeKey(src, options);\r\n reject(error);\r\n }\r\n };\r\n\r\n const makeRequest = function (options) {\r\n if (self._isSameOrigin(src)) {\r\n options.sameOrigin = true;\r\n self._image.getImgTag(src, options).then(function (img) {\r\n _caching(img, self._actionDirect);\r\n }, _reject);\r\n } else {\r\n if (!self._isSecureURL(src)) {\r\n if (self._isServiceWorker() || self._isSecureURL(self._location) && self.preventMixedContent) {\r\n // HTTP (sin intento) -> HTTPS -> (HTTP)Proxy\r\n _currentHTTP.call(self, src, options, _caching, _reject);\r\n } else {\r\n // HTTP -> HTTPS (si el visor no es HTTP) -> (HTTP)Proxy\r\n self._image.getImgTag(src, options).then(function (img) {\r\n _caching(img, self._actionDirect);\r\n }, function (error) {\r\n if (options.exportable && error === self._image.ErrorType.CORS || !self._isSecureURL(self._location)) {\r\n // Si la imagen debe ser exportable y en la solicitud por HTTP tenemos error de CORS, deducimos que por HTTPS pasará lo mismo\r\n if (error === self._image.ErrorType.PROTOCOL && options.ignoreProxification) {\r\n _reject(error);\r\n } else {\r\n _byProxy.call(self, src, options, _caching, _reject);\r\n }\r\n } else {\r\n _currentHTTP.call(self, src, options, _caching, _reject);\r\n }\r\n });\r\n\r\n }\r\n } else {\r\n // HTTPS -> HTTP -> (HTTPS)Proxy\r\n self._image.getImgTag(src, options).then(function (img) {\r\n _caching(img, self._actionDirect);\r\n }, function (error) {\r\n if (options.exportable && error === self._image.ErrorType.CORS || self._isServiceWorker() || self._isSecureURL(self._location) && self.preventMixedContent) {\r\n // Si la imagen debe ser exportable y en la solicitud por HTTPS tenemos error de CORS, deducimos que por HTTP pasará lo mismo\r\n if (error === self._image.ErrorType.PROTOCOL && options.ignoreProxification) {\r\n _reject(error);\r\n } else {\r\n _byProxy.call(self, src, options, _caching, _reject);\r\n }\r\n } else {\r\n _currentHTTPS.call(self, src, options, _caching, _reject);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n makeRequest(options);\r\n });\r\n }\r\n }); \r\n };\r\n\r\n toolProto.fetchRetry = function (url, options, n) {\r\n const self = this;\r\n var _fetch = fetch;\r\n\r\n if (options.sync) {\r\n _fetch = self.fetchSync;\r\n }\r\n\r\n return _fetch(url, options).catch(function (error) {\r\n if (n === 1) throw error;\r\n return self.fetchRetry(url, options, n - 1);\r\n });\r\n };\r\n\r\n toolProto.fetchSync = function (url, options) {\r\n var self = this;\r\n\r\n return new Promise(function (resolve, reject) {\r\n\r\n var support = {\r\n searchParams: 'URLSearchParams' in self, iterable: 'Symbol' in self && 'iterator' in Symbol, blob: 'FileReader' in self && 'Blob' in self && (function () {\r\n try {\r\n new Blob()\r\n return !0\r\n } catch (e) { return !1 }\r\n })(), formData: 'FormData' in self, arrayBuffer: 'ArrayBuffer' in self\r\n }\r\n\r\n function parseHeaders(rawHeaders) {\r\n var headers = new Headers()\r\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\r\n preProcessedHeaders.split(/\\r?\\n/).forEach(function (line) {\r\n var parts = line.split(':')\r\n var key = parts.shift().trim()\r\n if (key) {\r\n var value = parts.join(':').trim()\r\n headers.append(key, value)\r\n }\r\n })\r\n return headers\r\n }\r\n\r\n\r\n var request = new Request(url, options);\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n var options = { status: xhr.status, statusText: xhr.statusText, headers: parseHeaders(xhr.getAllResponseHeaders() || '') };\r\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\r\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\r\n resolve(new Response(body, options));\r\n };\r\n xhr.onerror = function () { reject(new TypeError('Network request failed')) };\r\n xhr.ontimeout = function () { reject(new TypeError('Network request failed')) };\r\n xhr.open(request.method, request.url, false);\r\n if (request.credentials === 'include') {\r\n xhr.withCredentials = !options.sync\r\n } else if (request.credentials === 'omit') {\r\n xhr.withCredentials = !1\r\n }\r\n if (!options.sync && ('responseType' in xhr && support.blob)) { xhr.responseType = 'blob' }\r\n request.headers.forEach(function (value, name) { xhr.setRequestHeader(name, value) });\r\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\r\n })\r\n };\r\n\r\n toolProto.fetchXML = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n options.responseType = \"xml\"; // No puedo usar la constante de la API porque está como application/xml y hay servicios que devuelven text/xml //Consts.mimeType.XML;\r\n\r\n return self.fetch(url, options);\r\n };\r\n\r\n toolProto.fetchJSON = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n options.responseType = Consts.mimeType.JSON;\r\n\r\n return self.fetch(url, options);\r\n };\r\n\r\n toolProto.fetchBlob = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n options.responseType = \"blob\";\r\n\r\n return self.fetch(url, options);\r\n };\r\n\r\n /* Para imágenes por POST */\r\n toolProto.fetchImageAsBlob = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n options.responseType = \"image\";\r\n\r\n return self.fetch(url, options);\r\n };\r\n\r\n /*\r\n type: GET|POST\r\n data: cuerpo del mensaje\r\n contentType: tipo del cuerpo del mensaje\r\n responseType: tipo de respuesta esperada\r\n retryAttempts: número de intentos por llamada\r\n */\r\n // indicar responseType en options\r\n toolProto.fetch = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n\r\n if (options.type) {\r\n options.method = options.type;\r\n\r\n delete options.type;\r\n }\r\n\r\n if (options.data) {\r\n options.body = options.data;\r\n\r\n delete options.data;\r\n }\r\n\r\n if (options.contentType) {\r\n options.headers = new Headers();\r\n options.headers.append('Content-Type', options.contentType);\r\n\r\n delete options.contentType;\r\n }\r\n\r\n if (!options.responseType) {\r\n options.responseType = '';\r\n }\r\n\r\n var _makeRequest = function (url, options, actions, cache) {\r\n var request;\r\n\r\n // fetch no incluye por defecto las cookies de autenticación, hay que indicarlo.\r\n //options.credentials = 'include';\r\n\r\n return (options.retryAttempts ? self.fetchRetry(actions[0].call(self, url), options, options.retryAttempts) : fetch(actions[0].call(self, url), options))\r\n .then(self._fetch.validateResponse)\r\n .then(self._fetch.validateContentType.bind(self, options.responseType))\r\n .then(function (response) {\r\n if (cache) {\r\n cache.action = actions[0].bind(self);\r\n }\r\n\r\n const contentType = response.headers.get(self._fetch.Headers.CONTENTTYPE);\r\n if (options.nomanage)\r\n return Promise.resolve(response);\r\n //if (!options.responseType) {\r\n // if (contentType) {\r\n // options.responseType = contentType;\r\n // } else {\r\n // return response.text();\r\n // }\r\n //}\r\n\r\n const responseWithCharsetToDecodedString = function (charset) {\r\n /*\r\n 2018 08 16\r\n https://developer.mozilla.org/en-US/docs/Web/API/Response#Methods\r\n No existe método xml\r\n\r\n https://developer.mozilla.org/en-US/docs/Web/API/Body/text\r\n The text() method of the Body mixin takes a Response stream and reads it to completion.\r\n It returns a promise that resolves with a USVString object (text).\r\n The response is always decoded using UTF-8.\r\n */\r\n\r\n return response.blob()\r\n .then(function (blob) {\r\n const reader = new FileReader();\r\n\r\n return new Promise(function (resolve, reject) {\r\n\r\n reader.addEventListener(\"error\", function () {\r\n reader.abort();\r\n reject(new DOMException(\"Problem decoding\"));\r\n });\r\n\r\n reader.addEventListener(\"loadend\", function () {\r\n resolve(reader.result);\r\n });\r\n\r\n reader.readAsText(blob, charset);\r\n });\r\n }).catch(function (error) { throw error; });\r\n };\r\n\r\n let hasCharset;\r\n switch (true) {\r\n case options.responseType.indexOf('xml') > -1:\r\n case options.responseType.indexOf('text/xml') > -1:\r\n case options.responseType.indexOf(Consts.mimeType.XML) > -1:\r\n hasCharset = /charset=([^;]*)/i.exec(contentType);\r\n if (hasCharset && hasCharset.length === 2 && hasCharset[1] !== \"UTF-8\") {\r\n return responseWithCharsetToDecodedString(hasCharset[1]).then(function (text) {\r\n return (new window.DOMParser()).parseFromString(text, \"text/xml\");\r\n }).catch(function (error) { throw error; });\r\n } else {\r\n return response.text().then(function (data) {\r\n return (new window.DOMParser()).parseFromString(data, \"text/xml\");\r\n }).catch(function (error) { throw error; });\r\n }\r\n case options.responseType.indexOf('arraybuffer') > -1: \r\n return response.arrayBuffer();\r\n case options.responseType.indexOf('image') > -1:\r\n case options.responseType.indexOf('blob') > -1: \r\n case options.responseType.indexOf('application/zip') > -1:\r\n case options.responseType.indexOf('application/x-zip-compressed') > -1:\r\n case options.responseType.indexOf('application/vnd.google-earth.kmz') > -1:\r\n case options.responseType.indexOf('application/octet-stream') > -1:\r\n case options.responseType.indexOf('application/geopackage+sqlite3') > -1:\r\n return response.blob().then(function (blob) {\r\n return new Blob([blob], { type: contentType });\r\n }).catch(function (error) { throw error; });\r\n case options.responseType.indexOf('document') > -1:\r\n throw new DeveloperError('Unhandled responseType: ' + options.responseType);\r\n case options.responseType.indexOf(Consts.mimeType.JSON) > -1:\r\n return response.json();\r\n case options.responseType == '':\r\n case options.responseType.indexOf('text') > -1:\r\n default:\r\n hasCharset = /charset=([^;]*)/i.exec(contentType);\r\n if (hasCharset && hasCharset.length === 2 && hasCharset[1] !== \"UTF-8\") {\r\n return responseWithCharsetToDecodedString(hasCharset[1]).then(function (text) {\r\n if (options.responseType == '') {\r\n return { responseText: text, contentType: contentType };\r\n } else {\r\n return text;\r\n }\r\n }).catch(function (error) { throw error; });\r\n } else {\r\n return response.text().then(function (text) {\r\n if (options.responseType == '') {\r\n return { responseText: text, contentType: contentType };\r\n } else {\r\n return text;\r\n }\r\n }).catch(function (error) { throw error; });\r\n }\r\n }\r\n })\r\n .catch(function (error) {\r\n //URI:Si es error 500 es inutil hacer mas llamadas o proxificar si no lo estaba ya.\r\n if (actions.length === 1 || (error.status && error.status===500)) {\r\n console.log('request failed', error);\r\n return Promise.reject(error);\r\n }\r\n\r\n actions.shift();\r\n return _makeRequest(url, options, actions, cache);\r\n });\r\n };\r\n\r\n if (self.cacheHost.is(url, options)) {\r\n return new Promise(function (resolve, reject) {\r\n self.cacheHost.getAction(url, options).then(function (cache) {\r\n resolve(_makeRequest(url, options, [cache.action]));\r\n }).catch(function (error) {\r\n if (!error.status || error.status >= 400) {\r\n reject(error);\r\n } else {\r\n resolve(self.fetch(url, options));\r\n }\r\n });\r\n });\r\n } else {\r\n var cache = self.cacheHost.addKey(url, options);\r\n return new Promise(function (resolve, reject) {\r\n cache._actionPromise = new Promise(function (resolveActionPromise, rejectActionPromise) {\r\n\r\n url = srcToURL(url).href;\r\n\r\n const fnResolve = function (data) { \r\n resolveActionPromise({ action: cache.action });\r\n resolve(data);\r\n };\r\n\r\n const fnReject = function (error) { \r\n self.cacheHost.removeKey(url, options);\r\n\r\n rejectActionPromise(error);\r\n reject(error);\r\n };\r\n\r\n if (self._isSameOrigin(url)) {\r\n _makeRequest(url, options, [self._actionDirect, self._actionProxy], cache).then(fnResolve).catch(fnReject);\r\n } else {\r\n if (!self._isSecureURL(url)) {\r\n if (self._isServiceWorker()) {\r\n // HTTP (sin intento) -> HTTPS -> (HTTP)Proxy\r\n _makeRequest(url, options, [self._actionHTTPS, self._actionProxy], cache).then(fnResolve).catch(fnReject);\r\n } else {\r\n // HTTP (si el visor no es HTTPS) -> HTTPS -> (HTTP)Proxy\r\n _makeRequest(url, options, !self._isSecureURL(self._location) ? [self._actionDirect, self._actionHTTPS, self._actionProxy] : [self._actionHTTPS, self._actionProxy], cache).then(fnResolve).catch(fnReject);\r\n }\r\n } else {\r\n if (self._isServiceWorker()) {\r\n // HTTPS -> (HTTPS)Proxy\r\n _makeRequest(url, options, [self._actionDirect, self._actionProxy], cache).then(fnResolve).catch(fnReject);\r\n } else {\r\n // HTTPS -> HTTP (si el visor no es HTTPS) -> (HTTPS)Proxy\r\n _makeRequest(url, options, !self._isSecureURL(self._location) ? [self._actionDirect, self._actionHTTP, self._actionProxy] : [self._actionDirect, self._actionProxy], cache).then(fnResolve).catch(fnReject);\r\n }\r\n }\r\n }\r\n });\r\n cache._actionPromise.catch(function (error) {\r\n if (!error.status || error.status >= 400) {\r\n reject(error);\r\n } else {\r\n resolve(self.fetch(url, options));\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n toolProto.fetchFile = function (url, options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n options.nomanage = true;\r\n return new Promise(function (resolve, reject) {\r\n self.fetch(url, options).then(function (response) {\r\n const contentDisposition = response.headers.get(self._fetch.Headers.CONTENTDISPOSITION);\r\n var filename = new RegExp(/[\\w|\\-|\\.]+.\\w{1,}$/gi).exec(url)[0];\r\n if (contentDisposition && /(attachment);([^;]*)/gi.test(contentDisposition)) {\r\n try {\r\n filename = /filename\\*?=\\\"?([\\w|\\-|\\.]*\\'\\')?(.*\\.\\w*)\\\"?/gi.exec(contentDisposition)[2];\r\n } catch (ex) {\r\n try {\r\n filename = contentDisposition.substring((contentDisposition.lastIndexOf(\"'\") || contentDisposition.indexOf(\"=\")) + 1);\r\n } catch (ex2) { }\r\n }\r\n }\r\n response.blob().then(function (blob) {\r\n resolve(new File([blob], filename, { type: response.headers.get(self._fetch.Headers.CONTENTTYPE) }));\r\n });\r\n\r\n }).catch(reject);\r\n });\r\n };\r\n})();\r\n\r\nvar Proxification = TC.tool.Proxification;\r\nexport default Proxification;","/*\r\nName: autoComplete\r\nAuthor: Raymond Camden & Andy Matthews\r\nContributors: Jim Pease (@jmpease)\r\nWebsite: http://raymondcamden.com/\r\nhttp://andyMatthews.net\r\nPacked With: http://jsutility.pjoneil.net/\r\nVersion: 1.4\r\nModificado por Fernando Lacunza\r\n*/\r\n\r\nimport TC from '../../TC';\r\nTC.UI = TC.UI || {};\r\n\r\n(function() { \r\n\r\n var isPlainObject = function(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Object]';\r\n };\r\n\r\n var isFunction = function(fn) {\r\n return typeof fn === 'function';\r\n };\r\n\r\n var extend = function() {\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n\r\n // Check if a deep merge\r\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function(obj) {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n // If property is an object, merge properties\r\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\r\n extended[prop] = extend(extended[prop], obj[prop]);\r\n } else {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for (; i < arguments.length; i++) {\r\n merge(arguments[i]);\r\n }\r\n\r\n return extended;\r\n\r\n }; \r\n\r\n var autocomplete = {\r\n defaults: {\r\n method: 'GET',\r\n cancelRequests: false,\r\n target: null,\r\n source: null,\r\n callback: null,\r\n link: null,\r\n minLength: 0,\r\n matchFromStart: true\r\n },\r\n openXHR: {},\r\n cache: {}\r\n },\r\n \r\n buildItems = function(inputText, data, settings) {\r\n var html = [];\r\n if (data) {\r\n if (settings.buildHTML) {\r\n\r\n settings.target.innerHTML = settings.buildHTML({ results: data });\r\n\r\n //var template = document.createElement('template');\r\n //template.innerHTML = settings.buildHTML({ results: data });\r\n\r\n //(template.content ? template.content : template).childNodes.forEach(function(childNode) {\r\n // settings.target.appendChild(childNode);\r\n //}); \r\n }\r\n else {\r\n for (var i = 0; i < data.length; i++) {\r\n var elm = data[i];\r\n // are we working with objects or strings?\r\n if (isPlainObject(elm)) {\r\n html.push(`
  • ${elm.label}
  • `);\r\n } else {\r\n html.push(`
  • ${elm}
  • `);\r\n }\r\n }\r\n\r\n var template = document.createElement('template');\r\n template.innerHTML = html.join('');\r\n\r\n settings.target.appendChild(template.content ? template.content.firstChild : template.firstChild);\r\n }\r\n\r\n }\r\n\r\n\r\n // is there a callback?\r\n if (settings.callback !== null && isFunction(settings.callback)) {\r\n attachCallback(settings);\r\n }\r\n\r\n if (inputText.value.length > 0) {\r\n inputText.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n } else {\r\n inputText.dispatchEvent(new CustomEvent(\"targetCleared.autocomplete\"));\r\n }\r\n },\r\n attachCallback = function(settings) {\r\n settings.target.querySelectorAll('li a').forEach(function(element) {\r\n element.addEventListener('click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n settings.callback(e);\r\n });\r\n });\r\n\r\n //$('li a', $(settings.target)).on('click.autocomplete', function(e) {\r\n // e.stopPropagation();\r\n // e.preventDefault();\r\n // settings.callback(e);\r\n //});\r\n },\r\n clearTarget = function(inputText, target) {\r\n //$target.html('').closest(\"fieldset\").removeClass(\"ui-search-active\");\r\n target.innerHTML = '';\r\n\r\n /* provisional el tema del fieldset */\r\n //document.querySelector(\"fieldset.ui-search-active\").classList.remove(\"ui-search-active\");\r\n\r\n inputText.dispatchEvent(new CustomEvent(\"targetCleared.autocomplete\"));\r\n },\r\n handleInput = function(e) {\r\n var inputText = e.target,\r\n id = inputText.getAttribute(\"id\"),\r\n text,\r\n data,\r\n autocomplete = inputText.getAttribute(\"autocomplete\"),\r\n element_text,\r\n re;\r\n if (autocomplete) {\r\n var settings = this.settings;\r\n var openXHR = autocomplete.openXHR;\r\n // get the current text of the input field\r\n text = inputText.value;\r\n // if we don't have enough text zero out the target\r\n if (text.length < settings.minLength) {\r\n clearTarget(inputText, settings.target);\r\n } else {\r\n // are we looking at a source array or remote data?\r\n if (Array.isArray(settings.source)) {\r\n data = settings.source.sort().filter(function(element) {\r\n // matching from start, or anywhere in the string?\r\n if (settings.matchFromStart) {\r\n // from start\r\n element_text, re = new RegExp('^' + text, 'i');\r\n } else {\r\n // anywhere\r\n element_text, re = new RegExp(text, 'i');\r\n }\r\n if (isPlainObject(element)) {\r\n element_text = element.label;\r\n } else {\r\n element_text = element;\r\n }\r\n return re.test(element_text);\r\n });\r\n buildItems(inputText, data, settings);\r\n }\r\n // Accept a function as source.\r\n // Function needs to call the callback, which is the first parameter.\r\n // source:function(text,callback) { mydata = [1,2]; callback(mydata); }\r\n else if (typeof settings.source === 'function') {\r\n if (arguments && arguments[0]) {\r\n if ([37, 39].indexOf(arguments[0].keyCode) > -1) {\r\n return;\r\n }\r\n }\r\n\r\n settings.source(text, function(data) {\r\n buildItems(inputText, data, settings);\r\n });\r\n\r\n }\r\n // flacunza: No creo que se llegue nunca aquí, de hecho hay errores de variables no definidas\r\n // así que comento el código\r\n //else {\r\n\r\n // const beforeSend = function(jqXHR) {\r\n // if (settings.cancelRequests) {\r\n // if (openXHR[id]) {\r\n // // If we have an open XML HTTP Request for this autoComplete ID, abort it\r\n // openXHR[id].abort();\r\n // } else {\r\n // // Set a loading indicator as a temporary stop-gap to the response time issue\r\n // settings.target.innerHTML = '
  • Searching...
  • ';\r\n\r\n // /* pendiente */\r\n // //settings.target.closest(\"fieldset\").addClass(\"ui-search-active\");\r\n // }\r\n // // Set this request to the open XML HTTP Request list for this ID\r\n // openXHR[id] = jqXHR;\r\n // }\r\n // };\r\n\r\n // const complete = function() {\r\n // // Clear this ID's open XML HTTP Request from the list\r\n // if (settings.cancelRequests) {\r\n // openXHR[id] = null;\r\n // }\r\n // };\r\n\r\n // var xhr = new XMLHttpRequest();\r\n // xhr.overrideMimeType(\"application/json\");\r\n // xhr.open('GET', url, true);\r\n // xhr.onload = function() {\r\n // complete();\r\n // var jsonResponse = JSON.parse(req.responseText);\r\n // buildItems(inputText, jsonResponse, settings);\r\n // };\r\n // xhr.onerror = function(error) {\r\n // complete();\r\n // };\r\n // beforeSend(xhr);\r\n // xhr.send(null); \r\n //}\r\n }\r\n }\r\n },\r\n methods = {\r\n init: function(options) {\r\n var el = this;\r\n var autocomplete = { settings: null };\r\n autocomplete.settings = extend({}, autocomplete.defaults, options); \r\n\r\n el.setAttribute(\"autocomplete\", true);\r\n\r\n var settings = autocomplete.settings;\r\n\r\n el.removeEventListener(\"keyup\", handleInput);\r\n el.addEventListener(\"keyup\", handleInput);\r\n\r\n if (el.parentNode.querySelector('.ui-input-clear')) {\r\n el.parentNode.querySelector('.ui-input-clear').addEventListener('click', function(e) {\r\n clearTarget(el, settings.target);\r\n });\r\n }\r\n\r\n return el; \r\n },\r\n // Allow dynamic update of source and link\r\n update: function(initialOptions, newOptions) {\r\n var autocomplete = this.getAttribute(\"autocomplete\");\r\n if (autocomplete) {\r\n this.settings = extend(this.settings, newOptions); \r\n }\r\n return this;\r\n },\r\n // Method to forcibly clear our target\r\n clear: function(options) {\r\n var autocomplete = this.getAttribute(\"autocomplete\");\r\n if (autocomplete) {\r\n clearTarget(this, this.settings.target);\r\n }\r\n return this;\r\n },\r\n // Method to destroy (cleanup) plugin\r\n destroy: function() {\r\n var autocomplete = this.getAttribute(\"autocomplete\");\r\n if (autocomplete) {\r\n clearTarget(this, this.settings.target);\r\n this.removeAttribute(\"autocomplete\");\r\n this.removeEventListener(\"keyup\", handleInput);\r\n //this.removeEventListener(\".autocomplete\");\r\n }\r\n return this;\r\n }\r\n }; \r\n\r\n TC.UI.autocomplete = function (method) { \r\n if (methods[method]) {\r\n return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method) {\r\n this.settings = arguments[0];\r\n return methods.init.apply(this, arguments);\r\n }\r\n };\r\n\r\n})(TC);\r\n\r\nconst autocomplete = TC.UI.autocomplete;\r\nexport default autocomplete;\r\n","//import {\r\n// ScreenSpaceEventHandler,\r\n// ScreenSpaceEventType,\r\n// CallbackProperty,\r\n// Color,\r\n// HeightReference,\r\n// Cartesian2,\r\n// Cartesian3,\r\n// Cartographic,\r\n// JulianDate,\r\n// Intersections2D,\r\n// CustomDataSource,\r\n// PolygonHierarchy,\r\n// ConstantPositionProperty,\r\n// ConstantProperty,\r\n// Entity,\r\n// Viewer\r\n//} from 'cesium';\r\n//import {getDimensionLabel, rectanglify} from './helpers';\r\n//import {getMeasurements, updateHeightForCartesianPositions} from '../cesiumutils';\r\n//import type {GeometryTypes} from '../toolbox/interfaces';\r\n\r\nimport Consts from '../Consts';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\n\r\nvar DrawOptions = {\r\n fillColor: null,\r\n strokeColor: null,\r\n strokeWidth: null,\r\n minPointsStop: 0\r\n}\r\n//export interface DrawOptions {\r\n// fillColor: string | Color;\r\n// strokeColor?: string | Color;\r\n// strokeWidth?: number;\r\n// minPointsStop?: boolean;\r\n//}\r\n\r\nexport default class ThreeDDraw extends EventTarget {\r\n #viewer_;//: Viewer;\r\n #strokeColor_;//: Color;\r\n #strokeWidth_;//: number;\r\n #fillColor_;//: Color;\r\n #eventHandler_;//: ScreenSpaceEventHandler | undefined;\r\n #activePoints_ = [];//: Cartesian3[] = [];\r\n #activePoint_;//: Cartesian3 | undefined;\r\n #sketchPoint_;//: Entity | undefined;\r\n #tempPoint_;//: Entity | undefined;\r\n #activeDistance_ = 0;\r\n #activeDistances_ = [];//: number[] = [];\r\n #leftPressedPixel_;//: Cartesian2 | undefined;\r\n sketchPoints_ = [];//: Entity[] = [];\r\n //type: GeometryTypes;\r\n #type = \"\";\r\n julianDate = new cesium.JulianDate();\r\n drawingDataSource = new cesium.CustomDataSource('drawing');\r\n drawnDataSource = new cesium.CustomDataSource('drawn');\r\n minPointsStop = 0;\r\n moveEntity = false;\r\n vertexRemoveMode = false;\r\n entityForEdit;\r\n ERROR_TYPES = { needMorePoints: 'need_more_points' };\r\n editMode = false;\r\n onSelectEntity = null;\r\n\r\n constructor(viewer, type, options) {\r\n super();\r\n this.#viewer_ = viewer;\r\n this.#type = type;\r\n this.#viewer_.dataSources.getByName('drawing').length > 0 ? this.drawingDataSource = this.#viewer_.dataSources.getByName('drawing')[0] : this.#viewer_.dataSources.add(this.drawingDataSource);\r\n this.#viewer_.dataSources.getByName('drawn').length > 0 ? this.drawnDataSource = this.#viewer_.dataSources.getByName('drawn')[0] : this.#viewer_.dataSources.add(this.drawnDataSource);\r\n this.#strokeColor_ = options?.strokeColor && options.strokeColor instanceof cesium.Color ?\r\n options.strokeColor : cesium.Color.fromCssColorString(options?.strokeColor || 'rgba(255, 0, 0, 1)');\r\n this.#strokeWidth_ = options?.strokeWidth !== undefined ? options.strokeWidth : 2;\r\n this.#fillColor_ = options?.fillColor && options.fillColor instanceof cesium.Color ?\r\n options.fillColor : cesium.Color.fromCssColorString(options?.fillColor || 'rgba(0, 0, 0, 0.3)');\r\n this.minPointsStop = !!options?.minPointsStop;\r\n }\r\n\r\n\r\n renderSceneIfTranslucent() {\r\n // because calling render decreases performance, only call it when needed.\r\n // see https://cesium.com/docs/cesiumjs-ref-doc/Scene.html#pickTranslucentDepth\r\n if (this.#viewer_.scene.globe?.translucency?.enabled) {\r\n this.#viewer_.scene.render();\r\n }\r\n }\r\n\r\n activate() {\r\n this.active(true);\r\n };\r\n deactivate() {\r\n if (this.eventHandler_) {\r\n this.active(false);\r\n this.removeSketches();\r\n }\r\n };\r\n\r\n popCoordinate() {\r\n this.#activeDistances_.pop();\r\n return this.#activePoints_.pop();\r\n };\r\n pushCoordinate(coordinate) {\r\n this.#activePoints_.push(coordinate);\r\n //this.onLeftClick_.call(this, { position: coordinate });\r\n };\r\n end() {\r\n this.finishDrawing();\r\n };\r\n visibility(visible) {\r\n this.drawingDataSource.entities.show = visible;\r\n this.drawnDataSource.entities.show = visible;\r\n };\r\n remove(entity) {\r\n if (this.drawnDataSource.entities.contains(entity)) {\r\n this.drawnDataSource.entities.remove(entity)\r\n this.removeSketches();\r\n this.#viewer_.scene.requestRender();\r\n }\r\n };\r\n\r\n setLabel(entity = null, style) {\r\n entity = entity || this.drawnDataSource.entities.values[this.drawnDataSource.entities.values.length - 1] || this.drawingDataSource.entities.values[this.drawingDataSource.entities.values.length - 1]\r\n if (entity) {\r\n if (!entity.position) {\r\n entity.position = cesium.BoundingSphere.fromPoints(entity.polyline.positions.getValue()).center;\r\n }\r\n entity.label = {\r\n outlineColor: cesium.Color.fromCssColorString(style.outlineColor),\r\n fillColor: cesium.Color.fromBytes.apply({}, style.fontColor),\r\n outlineWidth: style.outlineWidth,\r\n font: style.font,\r\n text: style.text,\r\n style: cesium.LabelStyle.FILL_AND_OUTLINE,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n pixelOffset: entity.polyline ? new cesium.Cartesian2(0, 0) : new cesium.Cartesian2(0, -25)\r\n };\r\n this.#viewer_.scene.requestRender();\r\n }\r\n }\r\n moveLabel(entity) {\r\n if (entity.label) {\r\n entity.position = cesium.BoundingSphere.fromPoints(this.#activePoints_).center;\r\n }\r\n }\r\n getEntities() {\r\n return [...this.#viewer_?.entities?.values || [], ...this.#viewer_.drawnDataSource?.entities?.values || []]\r\n }\r\n /*\r\n *\r\n */\r\n active(value) {\r\n if (value) {\r\n if (!this.eventHandler_) {\r\n this.eventHandler_ = new cesium.ScreenSpaceEventHandler(this.#viewer_.canvas);\r\n this.eventHandler_.setInputAction(this.onLeftClick_.bind(this), cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.eventHandler_.setInputAction(this.onDoubleClick_.bind(this), cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n if (this.#type === \"point\") this.tempPoint_ = this.createProvisionalPoint_() \r\n this.eventHandler_.setInputAction(this.onMouseMove_.bind(this), cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n } else {\r\n if (this.entityForEdit) {\r\n this.deactivateEditing();\r\n }\r\n if (this.eventHandler_) {\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n this.eventHandler_.destroy();\r\n }\r\n this.eventHandler_ = undefined;\r\n if (this.tempPoint_) {\r\n this.drawingDataSource.entities.remove(this.tempPoint_);\r\n this.tempPoint_ = null;\r\n this.#viewer_.scene.requestRender();\r\n }\r\n }\r\n this.dispatchEvent(new CustomEvent('statechanged', { detail: { active: value } }));\r\n }\r\n activeSelectMode(callback) {\r\n this.editMode = true;\r\n this.onSelectEntity = callback;\r\n this.eventHandler_ = new cesium.ScreenSpaceEventHandler(this.#viewer_.canvas);\r\n this.eventHandler_.setInputAction(this.onEntityClick_.bind(this), cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n deactivateSelectMode() {\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.LEFT_CLICK); \r\n }\r\n setStyle(style, entity) {\r\n if (!entity) {\r\n this.#strokeColor_ = cesium.Color.fromCssColorString(style.strokeColor);\r\n this.#strokeWidth_ = style.strokeWidth;\r\n if (style.fillColor) {\r\n this.#fillColor_ = cesium.Color.fromCssColorString(style.fillColor).withAlpha(style.fillOpacity);\r\n }\r\n }\r\n else {\r\n if (entity.point) {\r\n entity.point.color = cesium.Color.fromCssColorString(style.fillColor).withAlpha(style.fillOpacity);//cesium.Color.fromBytes.apply(this, [...style.fillColor.slice(0, 3), 255 * style.fillColor[3]]);\r\n entity.point.pixelSize = style.strokeWidth + (entity === this.entityForEdit ? 20 : 10);\r\n entity.point.outlineWidth = style.strokeWidth;\r\n entity.point.outlineColor = cesium.Color.fromCssColorString(style.strokeColor);\r\n }\r\n if (entity.polyline) {\r\n entity.polyline.width = style.strokeWidth;\r\n entity.polyline.material = cesium.Color.fromCssColorString(style.strokeColor);\r\n }\r\n if (entity.polygon) {\r\n entity.polygon.material = cesium.Color.fromCssColorString(style.fillColor).withAlpha(style.fillOpacity); \r\n }\r\n }\r\n };\r\n vertexRemove(active) {\r\n if (active) {\r\n this.vertexRemoveMode = true;\r\n this.sketchPoints_.filter((p, i) => i % 2).forEach((p) => {\r\n p.show = false;\r\n });\r\n }\r\n else {\r\n this.vertexRemoveMode = false;\r\n this.sketchPoints_.forEach((p) => {\r\n p.show = true;\r\n });\r\n }\r\n }\r\n\r\n activateEditing() {\r\n if (!this.eventHandler_ || !this.entityForEdit) return;\r\n this.#type = (this.entityForEdit.polygon ? \"polygon\" : (this.entityForEdit.polyline ? \"polyline\" : \"point\")); \r\n this.eventHandler_.setInputAction(event => this.onLeftDown_(event), cesium.ScreenSpaceEventType.LEFT_DOWN);\r\n this.eventHandler_.setInputAction(event => this.onLeftUp_(event), cesium.ScreenSpaceEventType.LEFT_UP);\r\n this.eventHandler_.setInputAction(this.onDragPoint_.bind(this), cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n const position = this.entityForEdit.position?.getValue(this.julianDate);\r\n let positions = [];\r\n let createVirtualSPs = false;\r\n switch (this.#type) {\r\n case 'point':\r\n this.entityForEdit.position = new cesium.CallbackProperty(() => this.#activePoints_[0] || position, false);\r\n this.entityForEdit.point.pixelSize = this.entityForEdit.point.pixelSize * 2;\r\n break;\r\n case 'polyline':\r\n positions = [...this.entityForEdit.polyline.positions.getValue(this.julianDate)];\r\n this.entityForEdit.polyline.positions = new cesium.CallbackProperty(() =>\r\n this.#activePoints_, false);\r\n createVirtualSPs = true;\r\n break;\r\n case 'polygon':\r\n positions = [...this.entityForEdit.polygon?.hierarchy?.getValue(this.julianDate).positions];\r\n this.entityForEdit.polygon.hierarchy = new cesium.CallbackProperty(() => new cesium.PolygonHierarchy(this.#activePoints_), false);\r\n this.entityForEdit.polyline.positions = new cesium.CallbackProperty(() => [...this.#activePoints_, this.#activePoints_[0]], false);\r\n createVirtualSPs = true;\r\n break;\r\n case 'rectangle':\r\n positions = [...this.entityForEdit.polygon?.hierarchy?.getValue(this.julianDate).positions];\r\n this.entityForEdit.polygon.hierarchy = new cesium.CallbackProperty(() => new cesium.PolygonHierarchy(this.#activePoints_), false);\r\n this.drawingDataSource.entities.add({\r\n position: new cesium.CallbackProperty(() => {\r\n positions = this.#activePoints_.length ? this.#activePoints_ : positions;\r\n return cesium.Cartesian3.midpoint(positions[0], positions[1], new cesium.Cartesian3());\r\n }, false),\r\n billboard: {\r\n image: './images/rotate-icon.svg',\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n },\r\n properties: {\r\n type: 'rotate'\r\n }\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n positions.forEach((p, idx) => {\r\n this.#activePoints_.push(p);\r\n });\r\n this.createSketchPoints_(positions, createVirtualSPs);\r\n\r\n };\r\n createSketchPoints_(positions, createVirtualSPs) {\r\n positions.forEach((p, idx) => {\r\n const sketchPoint = this.createSketchPoint_(p, { edit: true, positionIndex: idx });\r\n sketchPoint.properties.index = idx;\r\n this.sketchPoints_.push(sketchPoint);\r\n if (createVirtualSPs && (idx + 1) < positions.length) {\r\n const p2 = this.halfwayPosition_(p, positions[idx + 1]);\r\n const virtualSketchPoint = this.createSketchPoint_(p2, { edit: true, virtual: true });\r\n virtualSketchPoint.properties.index = idx;\r\n this.sketchPoints_.push(virtualSketchPoint);\r\n }\r\n });\r\n if (this.#type === 'polygon' && positions.length > 2) {\r\n // We need one more virtual sketchpoint for polygons\r\n const lastIdx = positions.length - 1;\r\n const p2 = this.halfwayPosition_(positions[lastIdx], positions[0]);\r\n const virtualSketchPoint = this.createSketchPoint_(p2, { edit: true, virtual: true });\r\n virtualSketchPoint.properties.index = lastIdx;\r\n this.sketchPoints_.push(virtualSketchPoint);\r\n }\r\n this.#viewer_.scene.requestRender();\r\n };\r\n\r\n deactivateEditing() {\r\n if (!this.eventHandler_ || !this.entityForEdit) return;\r\n switch (this.#type) {\r\n case 'polyline':\r\n this.entityForEdit.polyline.positions = this.#activePoints_\r\n break;\r\n case 'point':\r\n this.entityForEdit.point.pixelSize = this.entityForEdit.point.pixelSize / 2;\r\n this.entityForEdit.position = this.entityForEdit.position.getValue(this.julianDate);\r\n break;\r\n case 'polygon':\r\n this.entityForEdit.polyline.positions = [...this.#activePoints_, this.#activePoints_[0]];\r\n this.entityForEdit.polygon.hierarchy = new cesium.PolygonHierarchy(this.#activePoints_);\r\n break;\r\n }\r\n this.#viewer_.scene.requestRender();\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.LEFT_DOWN);\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.LEFT_UP);\r\n this.eventHandler_.removeInputAction(cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n };\r\n\r\n finishDrawing() {\r\n let positions = this.#activePoints_;\r\n let entity;\r\n if ((this.#type === 'polygon' || this.#type === 'rectangle') && positions.length < 3) {\r\n this.dispatchEvent(new CustomEvent('drawerror', {\r\n detail: {\r\n error: this.ERROR_TYPES.needMorePoints\r\n }\r\n }));\r\n return;\r\n }\r\n if (this.#type === 'point') {\r\n if (this.activePoint_)\r\n positions.push(this.activePoint_);\r\n entity = this.drawShape_(this.activePoint_);\r\n }\r\n //} else if (this.type === 'rectangle') {\r\n // positions = rectanglify(this.activePoints_);\r\n // this.drawShape_(positions);\r\n //}\r\n else {\r\n if (this.#type === 'polygon') {\r\n const distance = new cesium.EllipsoidGeodesic(cesium.Cartographic.fromCartesian(this.#activePoints_[this.#activePoints_.length - 1]), cesium.Cartographic.fromCartesian(this.#activePoints_[0]), cesium.Ellipsoid.WGS84).surfaceDistance;\r\n //const distance = cesium.Cartesian3.distance(this.#activePoints_[this.#activePoints_.length - 1], this.#activePoints_[0]);\r\n this.#activeDistances_.push(distance / 1000);\r\n }\r\n entity = this.drawShape_(this.#activePoints_);\r\n }\r\n this.#viewer_.scene.requestRender();\r\n\r\n const measurements = this.getMeasurements(positions, this.#type);\r\n this.dispatchEvent(new CustomEvent('drawend', {\r\n detail: {\r\n positions: positions,\r\n type: this.#type,\r\n measurements: measurements,\r\n entity: entity\r\n }\r\n }));\r\n\r\n this.removeSketches();\r\n }\r\n IsSketchEntity(entity) {\r\n return (this.sketchPoint_ && this.sketchPoint_ === entity.id);\r\n }\r\n CanIUseEntity(entity) {\r\n return (!this.drawMode && this.editMode &&\r\n ((!this.entityForEdit && this.drawnDataSource.entities.contains(entity.id)) ||\r\n (this.entityForEdit && this.drawnDataSource.entities.contains(entity.id) && this.entityForEdit != entity.id) ||\r\n (this.entityForEdit && this.sketchPoints_.some((p)=>p===entity.id))));\r\n }\r\n removeSketches(full) {\r\n this.drawingDataSource.entities.removeAll();\r\n if (this.tempPoint_) this.drawingDataSource.entities.add(this.tempPoint_);\r\n if (full)\r\n this.drawnDataSource.entities.removeAll();\r\n\r\n this.#activePoints_ = [];\r\n this.activePoint_ = undefined;\r\n this.sketchPoint_ = undefined;\r\n this.activeDistance_ = 0;\r\n this.#activeDistances_ = [];\r\n this.entityForEdit = undefined;\r\n this.leftPressedPixel_ = undefined;\r\n this.moveEntity = false;\r\n this.sketchPoints_ = [];\r\n }\r\n\r\n /*\r\n *\r\n */\r\n clear() {\r\n this.removeSketches();\r\n }\r\n\r\n createSketchPoint_(position, options) {\r\n const entity = {\r\n position: position,\r\n point: {\r\n color: options?.virtual ? cesium.Color.GREY : cesium.Color.WHITE,\r\n outlineWidth: 1,\r\n outlineColor: cesium.Color.BLACK,\r\n pixelSize: options?.edit ? 9 : 5,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n },\r\n properties: {}\r\n };\r\n if (options?.edit) {\r\n entity.point.disableDepthTestDistance = Number.POSITIVE_INFINITY;\r\n }\r\n else {\r\n //entity.label = getDimensionLabel(this.type, this.activeDistances_);\r\n }\r\n const pointEntity = this.drawingDataSource.entities.add(entity);\r\n if (options?.virtual)\r\n pointEntity.properties.virtual = options.virtual;\r\n return pointEntity;\r\n }\r\n createProvisionalPoint_() {\r\n return this.drawingDataSource.entities.add({\r\n position: new cesium.Cartesian3(),\r\n point: {\r\n color: new cesium.CallbackProperty(() => { return this.#fillColor_ }, false),\r\n outlineWidth: new cesium.CallbackProperty(() => { return this.#strokeWidth_ }, false),\r\n outlineColor: new cesium.CallbackProperty(() => { return this.#strokeColor_ }, false),\r\n pixelSize: new cesium.CallbackProperty(() => { return 12 - this.#strokeWidth_ }, false)\r\n }\r\n })\r\n\r\n };\r\n\r\n createSketchLine_(positions) {\r\n return this.drawingDataSource.entities.add({\r\n polyline: {\r\n positions: positions,\r\n clampToGround: true,\r\n width: new cesium.CallbackProperty(() => this.#strokeWidth_, false),\r\n material: new cesium.ColorMaterialProperty(new cesium.CallbackProperty(() => this.#strokeColor_, false))\r\n }\r\n })\r\n }\r\n\r\n drawShape_(positions) {\r\n if (this.#type === 'point') {\r\n return this.drawnDataSource.entities.add({\r\n position: positions,\r\n point: {\r\n color: this.#fillColor_,\r\n pixelSize: 12 - this.#strokeWidth_,\r\n outlineWidth: this.#strokeWidth_,\r\n outlineColor: this.#strokeColor_,\r\n }\r\n });\r\n\r\n } else if (this.#type === 'polyline') {\r\n return this.drawnDataSource.entities.add({\r\n polyline: {\r\n positions: positions,\r\n clampToGround: true,\r\n width: this.#strokeWidth_,\r\n material: this.#strokeColor_\r\n },\r\n //label: getDimensionLabel(this.type, this.activeDistances_)\r\n });\r\n } else if (this.#type === 'polygon' || this.#type === 'rectangle') {\r\n return this.drawnDataSource.entities.add({\r\n polygon: {\r\n hierarchy: {\r\n positions: positions\r\n },\r\n material: new cesium.ColorMaterialProperty(this.#fillColor_),\r\n clampToGround: true,\r\n },\r\n polyline: {\r\n positions: [...positions, positions[0]],\r\n clampToGround: true,\r\n width: this.#strokeWidth_,\r\n material: this.#strokeColor_\r\n }\r\n //label: getDimensionLabel(this.type, this.activeDistances_)\r\n });\r\n }\r\n }\r\n\r\n dynamicSketLinePositions() {\r\n return new cesium.CallbackProperty(() => {\r\n const activePoints = [...this.#activePoints_, this.activePoint_];\r\n //const positions = this.type === 'rectangle' ? rectanglify(activePoints) : activePoints;\r\n const positions = activePoints;\r\n if (this.#type === 'rectangle' && activePoints.length === 4) { // to avoid showing of confusing lines\r\n return [];\r\n }\r\n if (positions.length >= 3 && this.#type !== 'polyline') {\r\n // close the polygon\r\n // FIXME: better memory management\r\n return [...positions, positions[0]];\r\n } else {\r\n return positions;\r\n }\r\n }, false);\r\n }\r\n\r\n updateSketchPoint() {\r\n if (!this.sketchPoint_) return;\r\n const activePoints = [...this.#activePoints_, this.activePoint_];\r\n //const positions = this.type === 'rectangle' ? rectanglify(activePoints) : activePoints;\r\n const positions = activePoints;\r\n const pointsLength = positions.length;\r\n if (pointsLength > 1) {\r\n let distance;\r\n if (this.#type === 'rectangle' && pointsLength > 2) {\r\n const b = positions[1]; //according to rectanglify\r\n const bp = positions[2];\r\n distance = cesium.Cartesian3.distance(b, bp);\r\n (this.sketchPoint_.position).setValue(bp);\r\n } else {\r\n const lastPoint = positions[pointsLength - 1];\r\n distance = new cesium.EllipsoidGeodesic(cesium.Cartographic.fromCartesian(positions[pointsLength - 2]), cesium.Cartographic.fromCartesian(lastPoint), cesium.Ellipsoid.WGS84).surfaceDistance;\r\n //distance = cesium.Cartesian3.distance(positions[pointsLength - 2], lastPoint); \r\n }\r\n this.#activeDistance_ = distance / 1000;\r\n this.dispatchEvent(new CustomEvent('drawupdate', {\r\n detail: {\r\n positions: positions,\r\n type: this.#type,\r\n measurements: this.getMeasurements(positions, this.#type)\r\n }\r\n }));\r\n return;\r\n }\r\n\r\n }\r\n\r\n onLeftClick_(event) {\r\n this.renderSceneIfTranslucent();\r\n const position = this.#viewer_.scene.globe.pick(this.#viewer_.camera.getPickRay(event.position), this.#viewer_.scene)\r\n if (position) {\r\n \r\n if (!this.sketchPoint_) {\r\n this.dispatchEvent(new CustomEvent('drawstart'));\r\n this.sketchPoint_ = this.createSketchPoint_(position);\r\n this.activePoint_ = position;\r\n\r\n this.createSketchLine_(this.dynamicSketLinePositions());\r\n this.#viewer_.scene.requestRender();\r\n if (this.#type === 'point') {\r\n this.#activePoints_.push(position);\r\n this.finishDrawing();\r\n return;\r\n }\r\n } else {\r\n this.sketchPoint_.position.setValue(position);\r\n if (!this.#activeDistances_.includes(this.#activeDistance_)) {\r\n this.#activeDistances_.push(this.#activeDistance_);\r\n }\r\n }\r\n this.#activePoints_.push(this.activePoint_);\r\n const forceFinish = this.minPointsStop && (\r\n (this.#type === 'polygon' && this.#activePoints_.length === 3) ||\r\n (this.#type === 'polyline' && this.#activePoints_.length === 2)\r\n );\r\n if ((this.#type === 'rectangle' && this.#activePoints_.length === 3) || forceFinish) {\r\n this.finishDrawing();\r\n }\r\n this.dispatchEvent(new CustomEvent('point', { detail: { position, position } })); \r\n \r\n \r\n }\r\n }\r\n\r\n onEntityClick_(event) {\r\n if (!this.onSelectEntity) return\r\n const pickedFeature = this.#viewer_.scene.pick(event.position);\r\n if (cesium.defined(pickedFeature) && cesium.defined(pickedFeature.id) && this.drawnDataSource.entities.contains(pickedFeature.id)) {\r\n if (this.entityForEdit && this.entityForEdit !== pickedFeature.id) {\r\n this.deactivateEditing()\r\n }\r\n this.entityForEdit = pickedFeature.id;\r\n this.activateEditing();\r\n //this.activate();\r\n this.onSelectEntity(pickedFeature.id);\r\n }\r\n else\r\n this.onSelectEntity(null);\r\n }\r\n\r\n updateRectCorner(corner, oppositePoint, midPoint, midPointPrev, midScale, negate) {\r\n let midDiff = cesium.Cartesian3.subtract(corner, midPointPrev, new cesium.Cartesian3());\r\n midDiff = cesium.Cartesian3.multiplyByScalar(midDiff, midScale, new cesium.Cartesian3());\r\n const positionFromMid = cesium.Cartesian3.add(midPoint, midDiff, new cesium.Cartesian3());\r\n\r\n const distancePrev = cesium.Cartesian3.distance(corner, oppositePoint);\r\n const distanceCurrent = cesium.Cartesian3.distance(positionFromMid, oppositePoint);\r\n const distanceScale = distanceCurrent / distancePrev;\r\n let distanceDiff = cesium.Cartesian3.subtract(corner, oppositePoint, new cesium.Cartesian3());\r\n\r\n distanceDiff = cesium.Cartesian3.multiplyByScalar(distanceDiff, distanceScale, new cesium.Cartesian3());\r\n let newCornerPosition = cesium.Cartesian3.add(oppositePoint, distanceDiff, new cesium.Cartesian3());\r\n if (negate) {\r\n distanceDiff = cesium.Cartesian3.negate(distanceDiff, new cesium.Cartesian3());\r\n newCornerPosition = cesium.Cartesian3.add(oppositePoint, distanceDiff, new cesium.Cartesian3());\r\n }\r\n return newCornerPosition;\r\n }\r\n\r\n rotateRectangle(startPosition, endPosition) {\r\n const positions = [...this.#activePoints_];\r\n const center = cesium.Cartesian3.midpoint(positions[0], positions[2], new cesium.Cartesian3());\r\n const centerCart = Cartographic.fromCartesian(center);\r\n const endCart = Cartographic.fromCartesian(endPosition);\r\n const startCart = Cartographic.fromCartesian(startPosition);\r\n const angleStart = Math.PI + Math.atan2(endCart.longitude - centerCart.longitude, endCart.latitude - centerCart.latitude);\r\n const angleEnd = Math.PI + Math.atan2(startCart.longitude - centerCart.longitude, startCart.latitude - centerCart.latitude);\r\n const angleDiff = angleEnd - angleStart;\r\n\r\n positions.forEach((pos, indx) => {\r\n const point = Cartographic.fromCartesian(pos);\r\n const cosTheta = Math.cos(angleDiff);\r\n const sinTheta = Math.sin(angleDiff);\r\n const vLon = (cosTheta * (point.longitude - centerCart.longitude) - sinTheta * (point.latitude - centerCart.latitude) / Math.abs(Math.cos(centerCart.latitude)));\r\n const vLat = (sinTheta * (point.longitude - centerCart.longitude) * Math.abs(Math.cos(centerCart.latitude)) + cosTheta * (point.latitude - centerCart.latitude));\r\n const lon = centerCart.longitude + vLon;\r\n const lat = centerCart.latitude + vLat;\r\n\r\n positions[indx] = Cartographic.toCartesian(new Cartographic(lon, lat));\r\n });\r\n this.sketchPoints_.forEach((sp, key) => {\r\n sp.position = positions[key];\r\n this.#activePoints_[key] = positions[key];\r\n });\r\n this.#viewer_.scene.requestRender();\r\n }\r\n\r\n onMouseMove_(event) {\r\n this.renderSceneIfTranslucent();\r\n const position = this.#viewer_.scene.globe.pick(this.#viewer_.camera.getPickRay(event.endPosition), this.#viewer_.scene);\r\n if (!position)\r\n return; \r\n if (this.sketchPoint_) {\r\n this.sketchPoint_.position.setValue(position);\r\n this.activePoint_ = position;\r\n this.updateSketchPoint();\r\n }\r\n if (this.tempPoint_) {\r\n this.tempPoint_.position.setValue(position);\r\n }\r\n //\r\n this.#viewer_.scene.requestRender();\r\n }\r\n onDragPoint_(event) {\r\n this.renderSceneIfTranslucent();\r\n const position = this.#viewer_.scene.globe.pick(this.#viewer_.camera.getPickRay(event.endPosition), this.#viewer_.scene);\r\n if (!position)\r\n return;\r\n if (this.entityForEdit && !!this.leftPressedPixel_) {\r\n if (this.moveEntity) {\r\n if (this.#type === 'point') {\r\n this.entityForEdit.position = position;\r\n this.#activePoints_ = [position];\r\n } else {\r\n const pointProperties = this.sketchPoint_?.properties;\r\n const index = pointProperties.index;\r\n let prevPosition = new cesium.Cartesian3();\r\n if (typeof index === 'number') {\r\n this.sketchPoint_.position = position;\r\n prevPosition = this.#activePoints_[index];\r\n this.#activePoints_[index] = position;\r\n }\r\n if (this.#type === 'polygon') {\r\n // move virtual SPs\r\n const idx = this.sketchPoint_?.properties?.index;\r\n const spLen = this.sketchPoints_.length;\r\n const prevRealSPIndex = ((spLen + idx - 1) * 2) % spLen;\r\n const prevRealSP = this.sketchPoints_[prevRealSPIndex];\r\n const prevVirtualPosition = this.halfwayPosition_(prevRealSP, this.sketchPoint_);\r\n this.sketchPoints_[prevRealSPIndex + 1].position = prevVirtualPosition;\r\n\r\n const nextRealSPIndex = ((spLen + idx + 1) * 2) % spLen;\r\n const nextRealSP = this.sketchPoints_[nextRealSPIndex];\r\n const nextVirtualPosition = this.halfwayPosition_(nextRealSP, this.sketchPoint_);\r\n this.sketchPoints_[idx * 2 + 1].position = nextVirtualPosition;\r\n }\r\n if (this.#type === 'polyline') {\r\n // move virtual SPs\r\n const idx = this.sketchPoint_?.properties?.index;\r\n if (idx > 0) {\r\n const prevRealSP = this.sketchPoints_[(idx - 1) * 2];\r\n const prevVirtualPosition = this.halfwayPosition_(prevRealSP, this.sketchPoint_);\r\n this.sketchPoints_[(idx - 1) * 2 + 1].position = prevVirtualPosition;\r\n }\r\n if (idx < (this.#activePoints_.length - 1)) {\r\n const nextRealSP = this.sketchPoints_[(idx + 1) * 2];\r\n const nextVirtualPosition = this.halfwayPosition_(nextRealSP, this.sketchPoint_);\r\n this.sketchPoints_[(idx + 1) * 2 - 1].position = nextVirtualPosition;\r\n }\r\n } else {\r\n const positions = this.#activePoints_;\r\n if (this.#type === 'rectangle') {\r\n if (pointProperties.type && pointProperties.type.getValue() === 'rotate') {\r\n const oldPosition = this.sketchPoint_?.position?.getValue(this.julianDate);\r\n this.rotateRectangle(oldPosition, position);\r\n return;\r\n }\r\n const oppositeIndex = index > 1 ? index - 2 : index + 2;\r\n const leftIndex = index - 1 < 0 ? 3 : index - 1;\r\n const rightIndex = index + 1 > 3 ? 0 : index + 1;\r\n let draggedPoint = positions[index];\r\n const oppositePoint = positions[oppositeIndex];\r\n let leftPoint = positions[leftIndex];\r\n let rightPoint = positions[rightIndex];\r\n\r\n const midPoint = cesium.Cartesian3.midpoint(draggedPoint, oppositePoint, new cesium.Cartesian3());\r\n const midPointPrev = cesium.Cartesian3.midpoint(prevPosition, oppositePoint, new cesium.Cartesian3());\r\n const midDist = cesium.Cartesian3.distance(draggedPoint, midPoint);\r\n const midDistPrev = cesium.Cartesian3.distance(prevPosition, midPointPrev);\r\n const midScale = midDist / midDistPrev;\r\n\r\n const negate = this.checkForNegateMove(draggedPoint, oppositePoint, leftPoint, rightPoint);\r\n leftPoint = this.updateRectCorner(leftPoint, oppositePoint, midPoint, midPointPrev, midScale, negate.left);\r\n rightPoint = this.updateRectCorner(rightPoint, oppositePoint, midPoint, midPointPrev, midScale, negate.right);\r\n\r\n draggedPoint = this.getCorrectRectCorner(draggedPoint, oppositePoint, leftPoint, rightPoint);\r\n draggedPoint = this.getCorrectRectCorner(draggedPoint, oppositePoint, rightPoint, leftPoint);\r\n\r\n positions[index] = draggedPoint;\r\n this.#activePoints_[index] = draggedPoint;\r\n positions[leftIndex] = leftPoint;\r\n positions[rightIndex] = rightPoint;\r\n this.sketchPoints_.forEach((sp, key) => {\r\n sp.position = positions[key];\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n onDoubleClick_() {\r\n if (!this.#activeDistances_.includes(this.#activeDistance_)) {\r\n this.#activeDistances_.push(this.#activeDistance_);\r\n }\r\n this.#activePoints_.pop();\r\n this.finishDrawing();\r\n }\r\n\r\n /*\r\n * Enables moving of point geometry or one of the sketch points for other geometries if left mouse button pressed on it\r\n * @param event\r\n * @private\r\n */\r\n\r\n\r\n onLeftDown_(event) {\r\n this.leftPressedPixel_ = event.position;\r\n if (this.entityForEdit) {\r\n const objects = this.#viewer_.scene.drillPick(event.position, 5, 5, 5);\r\n if (objects.length) {\r\n if (this.vertexRemoveMode && this.sketchPoints_.includes(objects[0].id)) {\r\n if ((this.#type === 'polygon' && this.#activePoints_.length <= 3) || (this.#type === 'polyline' && this.#activePoints_.length <= 2)) {\r\n this.dispatchEvent(new CustomEvent('drawerror', {\r\n detail: {\r\n error: this.ERROR_TYPES.needMorePoints\r\n }\r\n }));\r\n return;\r\n }\r\n const indexFromEntity = this.sketchPoints_.filter((p, i) => !(i % 2)).indexOf(objects[0].id);\r\n const indexFromSketch = this.sketchPoints_.indexOf(objects[0].id);\r\n\r\n const VPToMove = this.sketchPoints_[indexFromSketch - 1] || this.sketchPoints_[indexFromSketch + 1];\r\n const VPToRemove = this.sketchPoints_[indexFromSketch + 1] || this.sketchPoints_[indexFromSketch - 1];\r\n if (VPToMove !== VPToRemove) {\r\n VPToMove.position = this.halfwayPosition_(this.#activePoints_[(indexFromEntity === 0 ? indexFromEntity.length : indexFromEntity) - 1]\r\n , this.#activePoints_[indexFromEntity === this.#activePoints_.length - 1 ? 0 : indexFromEntity + 1]);\r\n }\r\n this.sketchPoints_.splice(this.sketchPoints_.indexOf(VPToRemove), 1);\r\n this.sketchPoints_.splice(indexFromSketch, 1);\r\n this.drawingDataSource.entities.remove(VPToRemove);\r\n this.drawingDataSource.entities.remove(objects[0].id);\r\n this.removeVertexToPolylineOrPolygon_(indexFromEntity);\r\n //if (this.#type === \"polyline\")\r\n //this.entityForEdit.polyline.positions = this.#activePoints_;\r\n //else {\r\n // this.entityForEdit.polyline.positions = [...this.#activePoints_, this.#activePoints_[0]];\r\n // this.entityForEdit.polygon.hierarchy = new cesium.PolygonHierarchy(this.#activePoints_);\r\n //}\r\n this.sketchPoints_.filter((p) => !p.properties.virtual).forEach((p, index) => {\r\n p.properties.index = index;\r\n });\r\n this.sketchPoints_.filter((p) => p.properties.virtual).forEach((p, index) => {\r\n p.properties.index = index;\r\n });\r\n\r\n this.dispatchEvent(new CustomEvent('drawmodify', {\r\n detail: {\r\n positions: this.#activePoints_,\r\n type: this.#type,\r\n entity: this.entityForEdit\r\n }\r\n }));\r\n this.moveLabel(this.entityForEdit);\r\n\r\n }\r\n else {\r\n const selectedPoint = objects.find(obj => !!obj.id.point || !!obj.id.billboard);\r\n if (!selectedPoint) return;\r\n const selectedEntity = selectedPoint.id;\r\n this.sketchPoint_ = selectedEntity;\r\n const properties = selectedEntity.properties;\r\n // checks if picked entity is point geometry or one of the sketch points for other geometries\r\n this.moveEntity = selectedEntity.id === this.entityForEdit.id ||\r\n this.sketchPoints_.some(sp => sp.id === selectedEntity.id) ||\r\n (properties && properties.type && properties.type.getValue() === 'rotate');\r\n if (this.moveEntity && this.sketchPoint_?.properties?.virtual) {\r\n this.extendOrSplitLineOrPolygonPositions_();\r\n }\r\n }\r\n }\r\n if (this.moveEntity) {\r\n this.#viewer_.scene.screenSpaceCameraController.enableInputs = false;\r\n this.dispatchEvent(new CustomEvent('leftdown'));\r\n }\r\n }\r\n }\r\n\r\n /*\r\n *\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {Cartesian3}\r\n */\r\n halfwayPosition_(a, b) {\r\n a = a.position || a;\r\n b = b.position || b;\r\n a = a.getValue ? a.getValue(this.julianDate) : a;\r\n b = b.getValue ? b.getValue(this.julianDate) : b;\r\n const position = cesium.Cartesian3.add(a, b, new cesium.Cartesian3());\r\n cesium.Cartesian3.divideByScalar(position, 2, position);\r\n return position;\r\n }\r\n\r\n extendOrSplitLineOrPolygonPositions_() {\r\n // Add new line vertex\r\n // Create SPs, reuse the pressed virtual SP for first segment\r\n const pressedVirtualSP = this.sketchPoint_;\r\n const pressedPosition = cesium.Cartesian3.clone(pressedVirtualSP.position?.getValue(this.julianDate));\r\n const pressedIdx = pressedVirtualSP.properties?.index;\r\n const realSP0 = this.sketchPoints_[pressedIdx * 2];\r\n const realSP2 = this.sketchPoints_[((pressedIdx + 1) * 2) % (this.sketchPoints_.length)];\r\n const virtualPosition0 = this.halfwayPosition_(realSP0, pressedPosition);\r\n const virtualPosition1 = this.halfwayPosition_(pressedPosition, realSP2);\r\n const realSP1 = this.createSketchPoint_(pressedPosition, { edit: true });\r\n const virtualSP1 = this.createSketchPoint_(virtualPosition1, { edit: true, virtual: true });\r\n const virtualSP0 = pressedVirtualSP; // the pressed SP is reused\r\n virtualSP0.position = virtualPosition0; // but its position is changed\r\n\r\n this.insertVertexToPolylineOrPolygon_(pressedIdx + 1, pressedPosition.clone());\r\n this.sketchPoints_.splice((pressedIdx + 1) * 2, 0, realSP1, virtualSP1);\r\n this.sketchPoints_.forEach((sp, idx) => sp.properties.index = Math.floor(idx / 2));\r\n this.sketchPoint_ = realSP1;\r\n this.#viewer_.scene.requestRender();\r\n }\r\n\r\n insertVertexToPolylineOrPolygon_(idx, coordinates) {\r\n this.#activePoints_.splice(idx, 0, coordinates);\r\n }\r\n removeVertexToPolylineOrPolygon_(idx) {\r\n this.#activePoints_.splice(idx, 1);\r\n }\r\n\r\n /*\r\n * @param event\r\n */\r\n onLeftUp_(event) {\r\n this.#viewer_.scene.screenSpaceCameraController.enableInputs = true;\r\n const wasAClick = cesium.Cartesian2.equalsEpsilon(event.position, this.leftPressedPixel_, 0, 2);\r\n if (wasAClick) {\r\n this.onLeftDownThenUp_(event);\r\n }\r\n if (this.moveEntity) {\r\n this.dispatchEvent(new CustomEvent('drawmodify', {\r\n detail: {\r\n positions: this.#activePoints_,\r\n type: this.#type,\r\n entity: this.entityForEdit\r\n }\r\n }));\r\n this.moveLabel(this.entityForEdit);\r\n }\r\n\r\n this.moveEntity = false;\r\n this.leftPressedPixel_ = undefined;\r\n this.sketchPoint_ = undefined;\r\n }\r\n\r\n onLeftDownThenUp_(_event) {\r\n const e = this.entityForEdit;\r\n if (this.sketchPoint_ && this.sketchPoint_.properties?.index !== undefined && !this.sketchPoint_.properties?.virtual) {\r\n // remove clicked position from the edited geometry\r\n let divider = 1;\r\n switch (this.#type) {\r\n case 'polygon': {\r\n const hierarchy = e.polygon?.hierarchy?.getValue(this.julianDate);\r\n if (hierarchy.positions.length <= 3) {\r\n return;\r\n }\r\n this.#activePoints_.splice(this.sketchPoint_.properties?.index, 1);\r\n divider = 2;\r\n break;\r\n }\r\n case 'polyline': {\r\n const pPositions = e.polyline?.positions?.getValue(this.julianDate);\r\n if (pPositions.length <= 2) {\r\n return;\r\n }\r\n this.#activePoints_.splice(this.sketchPoint_.properties?.index, 1);\r\n divider = 2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // a real sketch point was clicked => remove it\r\n if (divider === 2) {\r\n const pressedIdx = this.sketchPoint_.properties?.index;\r\n const pressedIdx2 = pressedIdx * 2;\r\n const isLine = this.#type === 'polyline';\r\n const firstPointClicked = isLine && pressedIdx === 0;\r\n const lastPointClicked = isLine && (pressedIdx2 === this.sketchPoints_.length - 1);\r\n\r\n if (!firstPointClicked && !lastPointClicked) {\r\n // Move previous virtual SP in the middle of preRealSP and nextRealSP\r\n const prevRealSPIndex2 = (this.sketchPoints_.length + pressedIdx2 - 2) % (this.sketchPoints_.length);\r\n const nextRealSPIndex2 = (pressedIdx2 + 2) % (this.sketchPoints_.length);\r\n const prevRealSP = this.sketchPoints_[prevRealSPIndex2];\r\n const prevVirtualSP = this.sketchPoints_[prevRealSPIndex2 + 1];\r\n const nextRealSP = this.sketchPoints_[nextRealSPIndex2];\r\n const newPosition = this.halfwayPosition_(prevRealSP, nextRealSP);\r\n prevVirtualSP.position = newPosition;\r\n }\r\n\r\n let removedSPs;\r\n if (lastPointClicked) {\r\n // remove 2 SPs backward\r\n removedSPs = this.sketchPoints_.splice(pressedIdx2 - 1, 2);\r\n } else {\r\n // remove 2 SP forward\r\n removedSPs = this.sketchPoints_.splice(pressedIdx2, 2);\r\n }\r\n this.sketchPoints_.forEach((s, index) => s.properties.index = Math.floor(index / divider));\r\n removedSPs.forEach(s => this.drawingDataSource.entities.remove(s));\r\n } else if (this.#type === 'polygon' || this.#type === 'polyline') {\r\n this.sketchPoints_.splice(this.sketchPoint_.properties?.index, 1);\r\n this.sketchPoints_.forEach((sp, idx) => sp.properties.index = idx);\r\n this.drawingDataSource.entities.remove(this.sketchPoint_);\r\n }\r\n this.#viewer_.scene.requestRender();\r\n }\r\n }\r\n\r\n getCorrectRectCorner(corner, oppositePoint, checkPoint1, checkPoint2) {\r\n const distance = Cartesian3.distance(checkPoint1, oppositePoint);\r\n const newDistance = Cartesian3.distance(corner, checkPoint2);\r\n const dScale = distance / newDistance;\r\n let dDiff = Cartesian3.subtract(corner, checkPoint2, new Cartesian3());\r\n dDiff = Cartesian3.multiplyByScalar(dDiff, dScale, new Cartesian3());\r\n return Cartesian3.add(checkPoint2, dDiff, new Cartesian3());\r\n }\r\n\r\n checkForNegateMove(draggedPoint, oppositePoint, leftPoint, rightPoint) {\r\n const draggedPoint2D = this.#viewer_.scene.cartesianToCanvasCoordinates(draggedPoint);\r\n const rightPoint2D = this.#viewer_.scene.cartesianToCanvasCoordinates(rightPoint);\r\n const leftPoint2D = this.#viewer_.scene.cartesianToCanvasCoordinates(leftPoint);\r\n const oppositePoint2D = this.#viewer_.scene.cartesianToCanvasCoordinates(oppositePoint);\r\n if (!draggedPoint2D || !rightPoint2D || !leftPoint2D || !oppositePoint2D) {\r\n return {\r\n right: false,\r\n left: false\r\n };\r\n }\r\n return {\r\n right: !!Intersections2D.computeLineSegmentLineSegmentIntersection(\r\n draggedPoint2D.x,\r\n draggedPoint2D.y,\r\n rightPoint2D.x,\r\n rightPoint2D.y,\r\n leftPoint2D.x,\r\n leftPoint2D.y,\r\n oppositePoint2D.x,\r\n oppositePoint2D.y\r\n ),\r\n left: !!Intersections2D.computeLineSegmentLineSegmentIntersection(\r\n draggedPoint2D.x,\r\n draggedPoint2D.y,\r\n leftPoint2D.x,\r\n leftPoint2D.y,\r\n rightPoint2D.x,\r\n rightPoint2D.y,\r\n oppositePoint2D.x,\r\n oppositePoint2D.y\r\n )\r\n };\r\n }\r\n getMeasurements(positions, type) {\r\n const value = {\r\n units: ol.proj.Units.METERS\r\n };\r\n const distances = [];\r\n positions.forEach((p, key) => {\r\n if (key > 0) {\r\n distances.push(new cesium.EllipsoidGeodesic(cesium.Cartographic.fromCartesian(positions[key - 1]), cesium.Cartographic.fromCartesian(p), cesium.Ellipsoid.WGS84).surfaceDistance);\r\n }\r\n });\r\n\r\n if (type === 'polyline') {\r\n value[\"length\"] = distances.reduce((a, b) => a + b, 0);\r\n }\r\n else if (type === 'polygon') {\r\n value[\"perimeter\"] = distances.reduce((a, b) => a + b, 0);\r\n\r\n value[\"area\"] = positions.length > 2 ? Math.sqrt(Math.pow(cesium.PolygonPipeline.computeArea2D(positions), 2)) : 0;\r\n }\r\n else if (type === \"point\") {\r\n return {};\r\n }\r\n\r\n return value;\r\n };\r\n};\r\n\r\n\r\n","export default {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"\";\n},\"useData\":true}","export default {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
    \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.reset\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":33,\"column\":27},\"end\":{\"line\":33,\"column\":55}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.reset\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":39,\"column\":27},\"end\":{\"line\":39,\"column\":55}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.drag\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":27},\"end\":{\"line\":45,\"column\":54}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.drag\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":52,\"column\":27},\"end\":{\"line\":52,\"column\":54}}}))\n + \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.right\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":66,\"column\":23},\"end\":{\"line\":66,\"column\":53}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.left\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":73,\"column\":23},\"end\":{\"line\":73,\"column\":52}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.left\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":80,\"column\":23},\"end\":{\"line\":80,\"column\":50}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.tilt.right\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":87,\"column\":23},\"end\":{\"line\":87,\"column\":51}}}))\n + \"\\r\\n \\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.reset\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":94,\"column\":27},\"end\":{\"line\":94,\"column\":57}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.reset\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":100,\"column\":27},\"end\":{\"line\":100,\"column\":57}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.drag\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":106,\"column\":27},\"end\":{\"line\":106,\"column\":56}}}))\n + \"\\r\\n \\r\\n \\r\\n \"\n + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"threed.rotate.drag\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":113,\"column\":27},\"end\":{\"line\":113,\"column\":56}}}))\n + \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
    \";\n},\"useData\":true}","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from '../control/MapContents';\r\nimport Point from '../../SITNA/feature/Point';\r\nimport Marker from '../../SITNA/feature/Marker';\r\nimport Polyline from '../../SITNA/feature/Polyline';\r\nimport MultiPolyline from '../../SITNA/feature/MultiPolyline';\r\nimport Polygon from '../../SITNA/feature/Polygon';\r\nimport MultiPolygon from '../../SITNA/feature/MultiPolygon';\r\nimport Circle from '../../SITNA/feature/Circle';\r\nimport Raster from '../../SITNA/layer/Raster';\r\nimport Vector from '../../SITNA/layer/Vector';\r\nimport Draw from '../control/Draw';\r\nimport Modify from '../control/Modify';\r\nimport ThreeDDraw from './ThreeDDraw';\r\nimport mainTemplate from '../templates/tc-ctl-3d.mjs';\r\nimport overlayTemplate from '../templates/tc-view-3d-overlay.mjs';\r\nimport camControlsTemplate from '../templates/tc-view-3d-cm-ctls.mjs';\r\n\r\nTC.view = TC.view || {};\r\nTC.control = TC.control || {};\r\nTC.control.MapContents = MapContents;\r\n\r\nConsts.CESIUMNS = 'cesium';\r\n\r\nconst ThreeD = (function (namespace, signature, factory) {\r\n return namespace[signature] = factory();\r\n})(TC.view, \"ThreeD\", function () {\r\n\r\n const hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n var viewProto = {\r\n VIEWNAME: \"ThreeD\",\r\n CLASS: 'tc-view-3d',\r\n Consts: {\r\n BLANK_BASE: 'blank',\r\n DEFAULT_TILE_SIZE: 256\r\n },\r\n classes: {\r\n MAP3D: 'tc-map-3d',\r\n LOADING: 'tc-loading',\r\n CAMERACTRARROWDISABLED: 'tc-disabled-arrow',\r\n FOCUS: 'focus',\r\n HIGHLIGHTED: 'tc-highlighted',\r\n OUTFOCUS: 'tc-outfocus'\r\n },\r\n allowedControls: [],\r\n template: {},\r\n\r\n viewer: null,\r\n mapView: null,\r\n terrainProvider: null,\r\n\r\n getLocaleString: function (key, texts) {\r\n var self = this;\r\n var locale = self.map ? self.map.options.locale : TC.Cfg.locale;\r\n return TC.Util.getLocaleString(locale, key, texts);\r\n },\r\n\r\n getRenderedHtml: function (templateId, data, callback) {\r\n return TC.Control.prototype.getRenderedHtml.call(this, templateId, data, callback);\r\n }\r\n };\r\n\r\n Consts.classes.THREED = Consts.classes.THREED || \"tc-3d\";\r\n Consts.classes.THREED_HIDDEN = Consts.classes.THREED_HIDDEN || \"tc-3d-hidden\";\r\n Consts.event.TERRAINLOADED = Consts.event.TERRAINLOADED || \"terrainloaded.tc.threed\";\r\n Consts.event.TERRAINRECEIVING = Consts.event.TERRAINRECEIVING || \"terrainreceiving.tc.threed\";\r\n Consts.event.TERRAIN404 = Consts.event.TERRAIN404 || \"terrain404.tc.threed\";\r\n Consts.event.THREED_DRAG = Consts.event.THREED_DRAG || \"drag.tc.threed\";\r\n\r\n viewProto.template[viewProto.CLASS] = mainTemplate;\r\n viewProto.template[viewProto.CLASS + '-overlay'] = overlayTemplate;\r\n viewProto.template[viewProto.CLASS + '-cm-ctls'] = camControlsTemplate;\r\n\r\n const MapView = function (map, parent) {\r\n var self = this;\r\n self.map = map;\r\n self.parent = parent;\r\n\r\n Promise.resolve(self.map.getViewHTML()).then(function (html) {\r\n self.viewHTML = html;\r\n }.bind(self));\r\n\r\n self.metersPerUnit = map.getMetersPerUnit();\r\n\r\n self.maxResolution = null;\r\n\r\n //flacunza: modificamos TC.Map.setCenter para que se haga desde la vista 3D cuando está activa\r\n //así evitamos parpadeos en el mapa de situación\r\n self._oldMapSetCenter = map.setCenter;\r\n map.setCenter = function (coords, options) {\r\n if (map.on3DView) {\r\n map.view3D.flyToMapCoordinates.call(parent, coords);\r\n }\r\n else {\r\n self._oldMapSetCenter.call(map, coords, options);\r\n }\r\n };\r\n };\r\n MapView.prototype.getCenter = function () {\r\n return this.map.getCenter();\r\n };\r\n MapView.prototype.getExtent = function () {\r\n return this.map.getExtent();\r\n };\r\n MapView.prototype.getResolution = function () {\r\n return this.map.getResolution();\r\n };\r\n MapView.prototype.getRotation = function () {\r\n return this.map.getRotation();\r\n };\r\n MapView.prototype.getMaxResolution = function () {\r\n if (this.maxResolution)\r\n return this.maxResolution;\r\n\r\n if (this.map.getResolutions() !== null)\r\n this.maxResolution = this.map.getResolutions()[0];\r\n else {\r\n var extent = this.map.options.baselayerExtent;\r\n this.maxResolution = (extent[2] - extent[0]) / this.parent.Consts.DEFAULT_TILE_SIZE;\r\n }\r\n\r\n return this.maxResolution;\r\n };\r\n MapView.prototype.getPixelFromCoordinate = function (coords) {\r\n return this.map.getPixelFromCoordinate(coords);\r\n };\r\n MapView.prototype.setCenter = function (center) {\r\n this._oldMapSetCenter.call(this.map, center);\r\n };\r\n MapView.prototype.setExtent = function (extent) {\r\n this.map.setExtent(extent);\r\n };\r\n MapView.prototype.setResolution = function (resolution) {\r\n this.map.setResolution(resolution);\r\n };\r\n MapView.prototype.setRotation = function (rotation) {\r\n this.map.setRotation(rotation);\r\n };\r\n\r\n // Funciones compatibilidad CRS\r\n const isCompatible = function (layer, crs) {\r\n return layer.type === Consts.layerType.WMTS ?\r\n layer.wrap.getCompatibleMatrixSets(crs).length > 0 :\r\n layer.isCompatible(crs);\r\n };\r\n\r\n // Funciones para cálculo de FOV\r\n const getFarCoords = function (origin, nearPoint) {\r\n var radius = 1000000; // 1000 km\r\n var dx = nearPoint[0] - origin[0];\r\n var dy = nearPoint[1] - origin[1];\r\n var angle = Math.atan(dy / dx);\r\n // Math.atan solo da resultados entre -90º y 90º, si estamos mirando al hemisferio oeste hay que sumar 180º al ángulo\r\n if (dx < 0) {\r\n angle = angle + Math.PI;\r\n }\r\n return [origin[0] + radius * Math.cos(angle), origin[1] + radius * Math.sin(angle)];\r\n };\r\n\r\n const distanceSquared = function (p1, p2) {\r\n var dx = p2[0] - p1[0];\r\n var dy = p2[1] - p1[1];\r\n return dx * dx + dy * dy;\r\n };\r\n\r\n const getFarMapCoords = function (obj) {\r\n // Calculamos puntos lejanos cuando no los tenemos (cuando estamos mirando al horizonte).\r\n // Cogemos un punto proyectado desde la esquina inferior del canvas, \r\n // cogemos un segundo punto en el lateral del canvas inmediatamente por encima \r\n // y prologamos la línea que pasa por ambos puntos proyectados.\r\n var self = this;\r\n obj = obj || {};\r\n if (obj.nearMapCoords) {\r\n var nextPixel = obj.bottomPixel.clone();\r\n nextPixel.y = Math.round(nextPixel.y * 9 / 10);\r\n var nextCoords = pickMapCoords.call(self, nextPixel);\r\n if (nextCoords) {\r\n // Ordenamos la dupla por distancia, porque si estamos mirando desde dentro de un monte \r\n // el punto que se supone que es el más lejano en realidad está más cerca.\r\n var coordsArray = [obj.nearMapCoords, nextCoords].sort(function (a, b) {\r\n return distanceSquared(obj.cameraPosition, a) - distanceSquared(obj.cameraPosition, b);\r\n });\r\n return getFarCoords.apply(this, coordsArray);\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const pickMapCoords = function (pixel, crs) {\r\n var self = this;\r\n var pickPoint = pickOnTerrainOrEllipsoid(self.viewer.scene, pixel);\r\n if (pickPoint) {\r\n pickPoint = cesium.Cartographic.fromCartesian(pickPoint);\r\n const secondaryCRS = crs || self.view3D.view2DCRS\r\n if (self.view3D.crs !== secondaryCRS) {\r\n return TC.Util.reproject([cesium.Math.toDegrees(pickPoint.longitude), cesium.Math.toDegrees(pickPoint.latitude)], self.view3D.crs, secondaryCRS);\r\n } else {\r\n return [cesium.Math.toDegrees(pickPoint.longitude), cesium.Math.toDegrees(pickPoint.latitude)];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // Funciones utilidades cámara\r\n const calcDistanceForResolution = function (resolution, latitude) {\r\n var self = this;\r\n\r\n var fovy = self.viewer.camera.frustum.fovy;\r\n var visibleMapUnits = resolution * self.mapView.viewHTML.getBoundingClientRect().height;\r\n var relativeCircumference = Math.cos(Math.abs(latitude));\r\n var visibleMeters = visibleMapUnits * self.mapView.metersPerUnit * relativeCircumference;\r\n\r\n return (visibleMeters / 2) / Math.tan(fovy / 2);\r\n };\r\n\r\n const calcResolutionForDistance = function (distance, latitude) {\r\n var self = this;\r\n\r\n var canvas = self.viewer.scene.canvas;\r\n var fovy = self.viewer.camera.frustum.fovy;\r\n\r\n var visibleMeters = 2 * distance * Math.tan(fovy / 2);\r\n var relativeCircumference = Math.cos(Math.abs(latitude));\r\n var visibleMapUnits = visibleMeters / self.mapView.metersPerUnit / relativeCircumference;\r\n var resolution = visibleMapUnits / canvas.clientHeight;\r\n\r\n // validamos que la resolución calculada esté disponible en el array de resoluciones disponibles\r\n // si no contamos con un array de resoluciones lo calculamos\r\n var resolutions = self.map.getResolutions();\r\n if (resolutions === null) {\r\n resolutions = new Array(22);\r\n for (var i = 0, ii = resolutions.length; i < ii; ++i) {\r\n resolutions[i] = self.mapView.getMaxResolution() / Math.pow(2, i);\r\n }\r\n }\r\n\r\n // obtenemos la resolución más próxima a la calculada\r\n for (var j = 0; j < resolutions.length; j++) {\r\n if (resolutions[j] < Math.abs(resolution)) {\r\n resolution = resolutions[j - 1];\r\n break;\r\n } else if (resolutions[j] === Math.abs(resolution)) {\r\n resolution = resolutions[j];\r\n break;\r\n } else if (j === resolutions.length - 1) {\r\n resolution = resolutions[j];\r\n }\r\n }\r\n\r\n return resolution;\r\n };\r\n\r\n const rotateAroundAxis = function (camera, angle, axis, transform, opt_options) {\r\n var clamp = cesium.Math.clamp;\r\n var defaultValue = cesium.defaultValue;\r\n\r\n var options = opt_options || {};\r\n var duration = defaultValue(options.duration, 500); // ms\r\n\r\n var linear = function (a) {\r\n return a\r\n };\r\n var easing = defaultValue(options.easing, linear);\r\n var callback = options.callback;\r\n\r\n var start;\r\n var lastProgress = 0;\r\n var oldTransform = new cesium.Matrix4();\r\n\r\n return new Promise(function (resolve, _reject) {\r\n\r\n function animation(timestamp) {\r\n if (!start)\r\n start = timestamp;\r\n\r\n var progress = easing(clamp((timestamp - start) / duration, 0, 1));\r\n\r\n camera.transform.clone(oldTransform);\r\n var stepAngle = (progress - lastProgress) * angle;\r\n lastProgress = progress;\r\n\r\n camera.lookAtTransform(transform);\r\n camera.rotate(axis, stepAngle);\r\n camera.lookAtTransform(oldTransform);\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animation);\r\n } else {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve();\r\n }\r\n\r\n }\r\n\r\n requestAnimationFrame(animation);\r\n });\r\n };\r\n\r\n const pickOnTerrainOrEllipsoid = function (scene, pixel) {\r\n var ray = scene.camera.getPickRay(pixel);\r\n var target = scene.globe.pick(ray, scene);\r\n return target || scene.camera.pickEllipsoid(pixel);\r\n };\r\n\r\n const pickCenterPoint = function (scene) {\r\n var canvas = scene.canvas;\r\n var center = new cesium.Cartesian2(\r\n canvas.clientWidth / 2,\r\n canvas.clientHeight / 2);\r\n return pickOnTerrainOrEllipsoid(scene, center);\r\n };\r\n\r\n const pickBottomPoint = function (scene) {\r\n var canvas = scene.canvas;\r\n var bottom = new cesium.Cartesian2(\r\n canvas.clientWidth / 2, canvas.clientHeight);\r\n return pickOnTerrainOrEllipsoid(scene, bottom);\r\n };\r\n\r\n const bottomFovRay = function (scene) {\r\n var camera = scene.camera;\r\n var fovy2 = camera.frustum.fovy / 2;\r\n var direction = camera.direction;\r\n var rotation = cesium.Quaternion.fromAxisAngle(camera.right, fovy2);\r\n var matrix = cesium.Matrix3.fromQuaternion(rotation);\r\n var vector = new cesium.Cartesian3();\r\n cesium.Matrix3.multiplyByVector(matrix, direction, vector);\r\n return new cesium.Ray(camera.position, vector);\r\n };\r\n\r\n const setHeadingUsingBottomCenter = function (scene, heading, bottomCenter, opt_options) {\r\n var camera = scene.camera;\r\n // Compute the camera position to zenith quaternion\r\n var angleToZenith = computeAngleToZenith(scene, bottomCenter);\r\n var axis = camera.right;\r\n var quaternion = cesium.Quaternion.fromAxisAngle(axis, angleToZenith);\r\n var rotation = cesium.Matrix3.fromQuaternion(quaternion);\r\n\r\n // Get the zenith point from the rotation of the position vector\r\n var vector = new cesium.Cartesian3();\r\n cesium.Cartesian3.subtract(camera.position, bottomCenter, vector);\r\n var zenith = new cesium.Cartesian3();\r\n cesium.Matrix3.multiplyByVector(rotation, vector, zenith);\r\n cesium.Cartesian3.add(zenith, bottomCenter, zenith);\r\n\r\n // Actually rotate around the zenith normal\r\n var transform = cesium.Matrix4.fromTranslation(zenith);\r\n rotateAroundAxis(camera, heading, zenith, transform, opt_options);\r\n };\r\n\r\n const signedAngleBetween = function (first, second, normal) {\r\n // We are using the dot for the angle.\r\n // Then the cross and the dot for the sign.\r\n var a = new cesium.Cartesian3();\r\n var b = new cesium.Cartesian3();\r\n var c = new cesium.Cartesian3();\r\n cesium.Cartesian3.normalize(first, a);\r\n cesium.Cartesian3.normalize(second, b);\r\n cesium.Cartesian3.cross(a, b, c);\r\n\r\n var cosine = cesium.Cartesian3.dot(a, b);\r\n var sine = cesium.Cartesian3.magnitude(c);\r\n\r\n // Sign of the vector product and the orientation normal\r\n var sign = cesium.Cartesian3.dot(normal, c);\r\n var angle = Math.atan2(sine, cosine);\r\n return sign >= 0 ? angle : -angle;\r\n };\r\n\r\n const computeAngleToZenith = function (scene, pivot) {\r\n // This angle is the sum of the angles 'fy' and 'a', which are defined\r\n // using the pivot point and its surface normal.\r\n // Zenith | camera\r\n // \\ | /\r\n // \\fy| /\r\n // \\ |a/\r\n // \\|/pivot\r\n var camera = scene.camera;\r\n var fy = camera.frustum.fovy / 2;\r\n var ray = bottomFovRay(scene);\r\n var direction = cesium.Cartesian3.clone(ray.direction);\r\n cesium.Cartesian3.negate(direction, direction);\r\n\r\n var normal = new cesium.Cartesian3();\r\n cesium.Ellipsoid.WGS84.geocentricSurfaceNormal(pivot, normal);\r\n\r\n var left = new cesium.Cartesian3();\r\n cesium.Cartesian3.negate(camera.right, left);\r\n\r\n var a = signedAngleBetween(normal, direction, left);\r\n return a + fy;\r\n };\r\n\r\n //const computeSignedTiltAngleOnGlobe = function (scene) {\r\n // var camera = scene.camera;\r\n // var ray = new cesium.Ray(camera.position, camera.direction);\r\n // var target = scene.globe.pick(ray, scene);\r\n\r\n // if (!target) {\r\n // // no tiles in the area were loaded?\r\n // var ellipsoid = cesium.Ellipsoid.WGS84;\r\n // var obj = cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\r\n // if (obj) {\r\n // target = cesium.Ray.getPoint(ray, obj.start);\r\n // }\r\n // }\r\n\r\n // if (!target) {\r\n // return undefined;\r\n // }\r\n\r\n // var normal = new cesium.Cartesian3();\r\n // cesium.Ellipsoid.WGS84.geocentricSurfaceNormal(target, normal);\r\n\r\n // var angleBetween = signedAngleBetween;\r\n // var angle = angleBetween(camera.direction, normal, camera.right) - Math.PI;\r\n // return cesium.Math.convertLongitudeRange(angle);\r\n //};\r\n\r\n // Funciones CZML \r\n const toCZML = function (coordinates, layout, name, pointStyle, _lineStyle, walkingSpeed) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n var positions = coordinates.map(function (coordinate) {\r\n var reprojected = coordinate;\r\n if (self.view3D.view2DCRS !== self.view3D.crs) {\r\n reprojected = TC.Util.reproject(coordinate, self.view3D.view2DCRS, self.view3D.crs);\r\n }\r\n return cesium.Cartographic.fromDegrees(reprojected[0], reprojected[1]);\r\n });\r\n\r\n cesium.when(self.viewer.terrainProvider.sampleTerrainMostDetailed(positions), function (updatedPositions) {\r\n var startTime, stopTime, totalDistance = 0;\r\n\r\n if (layout === ol.geom.GeometryLayout.XYZM) {\r\n startTime = coordinates[0][3];\r\n stopTime = coordinates[coordinates.length - 1][3];\r\n } else if (layout === ol.geom.GeometryLayout.XYM) {\r\n startTime = coordinates[0][2];\r\n stopTime = coordinates[coordinates.length - 1][2];\r\n } else {\r\n\r\n coordinates[0][3] = updatedPositions[0].time = Date.now();\r\n\r\n for (var i = 1; i < updatedPositions.length; i++) {\r\n var done;\r\n let previous_next = [];\r\n\r\n updatedPositions[i].time = 0;\r\n\r\n if (i + 1 < updatedPositions.length) {\r\n previous_next = updatedPositions.slice(i - 1, i + 1);\r\n } else {\r\n previous_next = updatedPositions.slice(i - 1);\r\n }\r\n\r\n done = new cesium.EllipsoidGeodesic(previous_next[0], previous_next[1]).surfaceDistance;\r\n\r\n totalDistance += done;\r\n\r\n coordinates[i][3] = updatedPositions[i].time = updatedPositions[i - 1].time + (3600000 * done / walkingSpeed);\r\n }\r\n\r\n startTime = updatedPositions[0].time;\r\n stopTime = updatedPositions[updatedPositions.length - 1].time;\r\n }\r\n\r\n if (totalDistance === 0) {\r\n for (var j = 1; j < updatedPositions.length; j++) {\r\n let previous_next = [];\r\n\r\n if (j + 1 < updatedPositions.length) {\r\n previous_next = updatedPositions.slice(j - 1, j + 1);\r\n } else {\r\n previous_next = updatedPositions.slice(j - 1);\r\n }\r\n\r\n totalDistance += new cesium.EllipsoidGeodesic(previous_next[0], previous_next[1]).surfaceDistance;\r\n }\r\n }\r\n\r\n startTime = new Date(startTime).toISOString();\r\n stopTime = new Date(stopTime).toISOString();\r\n\r\n var czml = [{\r\n \"id\": \"document\",\r\n \"name\": \"CZML Model\",\r\n \"version\": \"1.0\"\r\n }, {\r\n \"id\": \"path\",\r\n \"name\": name,\r\n \"availability\": startTime + \"/\" + stopTime,\r\n \"position\": {\r\n \"epoch\": startTime,\r\n \"cartographicRadians\": updatedPositions.map(function (updatedPosition, i) {\r\n return layout === ol.geom.GeometryLayout.XYZM ? [new Date(coordinates[i][3]).toISOString(), updatedPosition.longitude, updatedPosition.latitude, updatedPosition.height] :\r\n layout === ol.geom.GeometryLayout.XYM ? [new Date(coordinates[i][2]).toISOString(), updatedPosition.longitude, updatedPosition.latitude, updatedPosition.height] :\r\n [new Date(updatedPosition.time).toISOString(), updatedPosition.longitude, updatedPosition.latitude, updatedPosition.height];\r\n }).reduce(function (prev, curr) {\r\n return prev.concat(curr);\r\n })\r\n },\r\n \"point\": {\r\n \"heightReference\": \"CLAMP_TO_GROUND\",\r\n \"pixelSize\": pointStyle.radius,\r\n \"color\": {\r\n \"rgba\": pointStyle.fillColor\r\n },\r\n \"outlineColor\": {\r\n \"rgba\": pointStyle.strokeColor\r\n },\r\n \"outlineWidth\": pointStyle.strokeWidth\r\n }\r\n }];\r\n\r\n resolve({ czml: czml, totalDistance: totalDistance, coordinates2D: coordinates });\r\n });\r\n });\r\n };\r\n\r\n const CameraControls = function (parent) {\r\n var self = this;\r\n\r\n self.parent = parent;\r\n\r\n var outHandler = function (_e) {\r\n var self = this;\r\n\r\n self.isFocusingCameraCtrls = false;\r\n };\r\n var inHandler = function () {\r\n var self = this;\r\n\r\n self.isFocusingCameraCtrls = true;\r\n self.lastFocused = performance.now();\r\n\r\n if (self.div.classList.contains(self.parent.classes.OUTFOCUS)) {\r\n self.div.classList.remove(self.parent.classes.OUTFOCUS);\r\n self.tiltIndicatorOuterCircle.classList.remove(self.parent.classes.OUTFOCUS);\r\n self.tiltIndicatorOuterShellCircle.classList.remove(self.parent.classes.OUTFOCUS);\r\n self.rotateIndicatorOuterCircle.classList.remove(self.parent.classes.OUTFOCUS);\r\n self.rotateIndicatorOuterShellCircle.classList.remove(self.parent.classes.OUTFOCUS);\r\n }\r\n };\r\n\r\n var moveStartHandler = function () {\r\n var self = this;\r\n self.moving = true;\r\n };\r\n var moveEndHandler = function () {\r\n var self = this;\r\n self.moving = false;\r\n self.parent.map.trigger(Consts.event.CAMERACHANGE, { position: self.parent.view3D.getCameraData() });\r\n };\r\n var postRenderHandler = function () {\r\n var self = this;\r\n var view = self.parent;\r\n\r\n if (self.parent.view3D.isLoadingTiles.call(self.parent))\r\n self.customCollisionDetection();\r\n\r\n var camera = self.getCamera();\r\n var position = camera.positionCartographic;\r\n\r\n if (self.moving) {\r\n\r\n cssRotate(self.tiltIndicator, camera.pitch);\r\n cssRotate(self.rotateIndicator, -camera.heading);\r\n\r\n self.disableRotate();\r\n self.disableTilt(5);\r\n\r\n if (view.view3D.crs !== view.view3D.view2DCRS) {\r\n self._coordsXY = TC.Util.reproject([cesium.Math.toDegrees(position.longitude), cesium.Math.toDegrees(position.latitude)], view.view3D.crs, view.view3D.view2DCRS);\r\n } else {\r\n self._coordsXY = [cesium.Math.toDegrees(position.longitude), cesium.Math.toDegrees(position.latitude)];\r\n }\r\n\r\n view.mapView.setCenter(self._coordsXY);\r\n view.mapView.setResolution(calcResolutionForDistance.call(view, position.height, position.latitude));\r\n\r\n //view.mapView.setRotation(-camera.heading);\r\n }\r\n\r\n // flacunza: calculamos el polígono de FOV para dibujar en el mapa de situación\r\n // Lo calculamos aunque no nos estemos moviendo porque el terreno puede estar cargándose\r\n if (self._coordsXY) {\r\n view._ovMap = view._ovMap || view.map.getControlsByClass('TC.control.OverviewMap')[0];\r\n if (view._ovMap) {\r\n view._ovMap.renderPromise().then(function () {\r\n\r\n view._ovMap.wrap.draw3DCamera({ position: self._coordsXY, heading: camera.heading, fov: self.parent.view3D.getFovCoords() });\r\n });\r\n }\r\n }\r\n\r\n };\r\n var cssRotate = function (element, angle) {\r\n var coord = element.getBBox();\r\n const value = 'rotate(' + cesium.Math.toDegrees(angle) + ' ' + (coord.x + (coord.width / 2)) + ' ' + (coord.y + (coord.height / 2)) + ')';\r\n document.getElementsByClassName(element.className.baseVal)[0].setAttribute('transform', value);\r\n };\r\n\r\n self.outControlsEvents = TC.Util.detectMouse() ? ['mouseleave'] : ['touchleave', 'touchend'];\r\n self.outControls = outHandler.bind(self);\r\n\r\n self.inControlsEvents = TC.Util.detectMouse() ? ['mouseenter'] : ['touchmove', 'touchstart'];\r\n self.inControls = inHandler.bind(self);\r\n\r\n self.moveStart = moveStartHandler.bind(self);\r\n self.moveEnd = moveEndHandler.bind(self);\r\n self.postRender = postRenderHandler.bind(self);\r\n\r\n self.selectors = {\r\n tilt: '-cm-tilt',\r\n rotate: '-cm-rotate',\r\n indicator: '-indicator',\r\n leftArrow: '-left',\r\n rightArrow: '-right',\r\n downArrow: '-down',\r\n upArrow: '-up'\r\n };\r\n\r\n self.MIN_TILT = cesium.Math.toRadians(-89);\r\n self.MAX_TILT = cesium.Math.toRadians(-1);\r\n\r\n self.render();\r\n };\r\n CameraControls.prototype.bind = function () {\r\n var self = this;\r\n\r\n // conexión de los controles con el visor de cesium\r\n self.getCamera().moveStart.addEventListener(self.moveStart);\r\n self.getCamera().moveEnd.addEventListener(self.moveEnd);\r\n self.parent.viewer.scene.postRender.addEventListener(self.postRender);\r\n\r\n // gestionamos la opacidad de los controles pasados 5 segundos\r\n self.outControlsEvents.forEach(function (event) {\r\n self.div.addEventListener(event, self.outControls);\r\n });\r\n self.inControlsEvents.forEach(function (event) {\r\n self.div.addEventListener(event, self.inControls);\r\n });\r\n\r\n function setOpacity() {\r\n if (!self.lastFocused)\r\n self.lastFocused = performance.now();\r\n\r\n var progress = performance.now() - self.lastFocused;\r\n if (progress > 5000 && self.isFocusingCameraCtrls !== true) {\r\n if (!self.div.classList.contains(self.parent.classes.OUTFOCUS)) {\r\n self.div.classList.add(self.parent.classes.OUTFOCUS);\r\n self.tiltIndicatorOuterCircle.classList.add(self.parent.classes.OUTFOCUS);\r\n self.tiltIndicatorOuterShellCircle.classList.add(self.parent.classes.OUTFOCUS);\r\n self.rotateIndicatorOuterCircle.classList.add(self.parent.classes.OUTFOCUS);\r\n self.rotateIndicatorOuterShellCircle.classList.add(self.parent.classes.OUTFOCUS);\r\n }\r\n }\r\n\r\n self.rAFInOutControls = requestAnimationFrame(setOpacity);\r\n }\r\n self.rAFInOutControls = requestAnimationFrame(setOpacity);\r\n };\r\n CameraControls.prototype.unbind = function () {\r\n var self = this;\r\n\r\n self.div.classList.add(Consts.classes.HIDDEN);\r\n\r\n // conexión de los controles con el visor de cesium\r\n self.getCamera().moveStart.removeEventListener(self.moveStart);\r\n self.getCamera().moveEnd.removeEventListener(self.moveEnd);\r\n self.parent.viewer.scene.postRender.removeEventListener(self.postRender);\r\n\r\n // gestionamos la opacidad de los controles pasados 5 segundos\r\n self.outControlsEvents.forEach(function (event) {\r\n self.div.removeEventListener(event, self.outControls);\r\n });\r\n self.inControlsEvents.forEach(function (event) {\r\n self.div.removeEventListener(event, self.inControls);\r\n });\r\n window.cancelAnimationFrame(self.rAFInOutControls);\r\n self.lastFocused = undefined;\r\n self.rAFInOutControls = undefined;\r\n };\r\n CameraControls.prototype.getCamera = function () {\r\n var self = this;\r\n\r\n return self.parent.viewer.scene.camera;\r\n };\r\n CameraControls.prototype.getCameraState = function () {\r\n var self = this;\r\n\r\n if (self.parent.viewer) {\r\n var camera = self.parent.viewer.scene.camera;\r\n var cameraPosition = camera.positionCartographic;\r\n\r\n var bottomCenter = pickBottomPoint(self.parent.viewer.scene);\r\n if (bottomCenter) {\r\n var distance = cesium.Cartesian3.distance(camera.position, bottomCenter);\r\n\r\n return {\r\n cp: [cameraPosition.longitude, cameraPosition.latitude, cameraPosition.height],\r\n chpr: [camera.heading, camera.pitch, camera.roll],\r\n bcpd: distance\r\n };\r\n }\r\n }\r\n };\r\n CameraControls.prototype.render = function () {\r\n var self = this;\r\n\r\n if (self.div) {\r\n self.div.classList.remove(Consts.classes.HIDDEN);\r\n self.bind();\r\n }\r\n else {\r\n self.parent.getRenderedHtml(self.parent.CLASS + '-cm-ctls', {}, function (html) {\r\n // contenedor controles\r\n self.div = document.createElement('div');\r\n self.div.classList.add(self.parent.CLASS + '-cm-ctls');\r\n self.div.innerHTML = html;\r\n self.parent.map.div.appendChild(self.div);\r\n\r\n\r\n // tilt\r\n var tiltSelector = '.' + self.parent.CLASS + self.selectors.tilt;\r\n\r\n self.tiltIndicatorInner = self.div.querySelector(\"[class^=\" + tiltSelector.replace('.', '') + \"-inner\" + \"]\");\r\n self.tiltIndicatorInner.addEventListener(Consts.event.CLICK, self.resetTilt.bind(self));\r\n\r\n self.tiltIndicator = self.div.querySelector(tiltSelector + '-indicator');\r\n\r\n self.tiltIndicatorOuterCircle = self.div.querySelector(tiltSelector + '-outer-circle');\r\n self.tiltIndicatorOuterShellCircle = self.div.querySelector(tiltSelector + '-outer-shell-circle');\r\n\r\n self.tiltIndicatorCircle = self.div.querySelector(\"[class^=\" + tiltSelector.replace('.', '') + \"-outer\" + \"]\");\r\n self.tiltIndicatorCircle.addEventListener('mousedown', function (e) {\r\n var self = this;\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n var vectorScratch = new cesium.Cartesian2();\r\n var element = e.currentTarget;\r\n var rectangle = e.currentTarget.getBoundingClientRect();\r\n var center = new cesium.Cartesian2((rectangle.right - rectangle.left) / 2.0, (rectangle.bottom - rectangle.top) / 2.0);\r\n var clickLocation = new cesium.Cartesian2(e.clientX - rectangle.left, e.clientY - rectangle.top);\r\n var vector = cesium.Cartesian2.subtract(clickLocation, center, vectorScratch);\r\n\r\n self.draggingTilt.call(self, element, vector);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }.bind(self));\r\n\r\n // left\r\n self.tiltUp = self.div.querySelector(tiltSelector + self.selectors.upArrow);\r\n self.tiltUp.addEventListener(TC.Util.detectMouse() ? 'mousedown' : 'touchstart', function (e) {\r\n\r\n if (e.target.disabled) {\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n self.inControls(e);\r\n\r\n var upEvent = TC.Util.detectMouse() ? 'mouseup' : 'touchend';\r\n\r\n document.removeEventListener(upEvent, self.tiltUpMouseUpFunction, false);\r\n self.tiltUpMouseUpFunction = undefined;\r\n\r\n self.tilt.call(self, +5);\r\n\r\n self.tiltUpInterval = setInterval(function () {\r\n if (!self.isTiltUpDisabled) self.tilt.call(self, +5);\r\n else self.tiltUpMouseUpFunction();\r\n }.bind(self), 101);\r\n\r\n self.tiltUpMouseUpFunction = function () {\r\n clearInterval(self.tiltUpInterval);\r\n self.tiltUpInterval = undefined;\r\n\r\n document.removeEventListener(upEvent, self.tiltUpMouseUpFunction, false);\r\n self.tiltUpMouseUpFunction = undefined;\r\n };\r\n\r\n document.addEventListener(upEvent, self.tiltUpMouseUpFunction, false);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }.bind(self));\r\n\r\n // right\r\n self.tiltDown = self.div.querySelector(tiltSelector + self.selectors.downArrow);\r\n self.tiltDown.addEventListener(TC.Util.detectMouse() ? 'mousedown' : 'touchstart', function (e) {\r\n\r\n\r\n if (e.target.disabled) {\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n self.inControls(e);\r\n\r\n var upEvent = TC.Util.detectMouse() ? 'mouseup' : 'touchend';\r\n\r\n document.removeEventListener(upEvent, self.tiltDownMouseUpFunction, false);\r\n self.tiltDownMouseUpFunction = undefined;\r\n\r\n self.tilt.call(self, -5);\r\n\r\n self.tiltDownInterval = setInterval(function () {\r\n if (!self.isTiltDownDisabled) self.tilt.call(self, -5);\r\n else self.tiltDownMouseUpFunction();\r\n }.bind(self), 101);\r\n\r\n self.tiltDownMouseUpFunction = function () {\r\n clearInterval(self.tiltDownInterval);\r\n self.tiltDownInterval = undefined;\r\n\r\n document.removeEventListener(upEvent, self.tiltDownMouseUpFunction, false);\r\n self.tiltDownMouseUpFunction = undefined;\r\n };\r\n\r\n document.addEventListener(upEvent, self.tiltDownMouseUpFunction, false);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }.bind(self));\r\n\r\n // rotation\r\n var rotateSelector = '.' + self.parent.CLASS + self.selectors.rotate;\r\n\r\n self.rotateIndicatorInner = self.div.querySelector(\"[class^=\" + rotateSelector.replace('.', '') + \"-inner\" + \"]\");\r\n self.rotateIndicatorInner.addEventListener(Consts.event.CLICK, self.resetRotation.bind(self));\r\n\r\n self.rotateIndicator = self.div.querySelector(rotateSelector + '-indicator');\r\n\r\n self.rotateIndicatorOuterCircle = self.div.querySelector(rotateSelector + '-outer-circle');\r\n self.rotateIndicatorOuterShellCircle = self.div.querySelector(rotateSelector + '-outer-shell-circle');\r\n\r\n self.rotateIndicatorCircle = self.div.querySelector(\"[class^=\" + rotateSelector.replace('.', '') + \"-outer\" + \"]\");\r\n self.rotateIndicatorCircle.addEventListener('mousedown', function (e) {\r\n var self = this;\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n var vectorScratch = new cesium.Cartesian2();\r\n var element = e.currentTarget;\r\n var rectangle = e.currentTarget.getBoundingClientRect();\r\n var center = new cesium.Cartesian2((rectangle.right - rectangle.left) / 2.0, (rectangle.bottom - rectangle.top) / 2.0);\r\n var clickLocation = new cesium.Cartesian2(e.clientX - rectangle.left, e.clientY - rectangle.top);\r\n var vector = cesium.Cartesian2.subtract(clickLocation, center, vectorScratch);\r\n\r\n self.draggingRotate.call(self, element, vector);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n }.bind(self));\r\n\r\n // left\r\n self.rotateLeft = self.div.querySelector(rotateSelector + self.selectors.leftArrow);\r\n self.rotateLeft.addEventListener(TC.Util.detectMouse() ? 'mousedown' : 'touchstart', function (e) {\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n self.inControls(e);\r\n\r\n var upEvent = TC.Util.detectMouse() ? 'mouseup' : 'touchend';\r\n\r\n document.removeEventListener(upEvent, self.rotateLeftMouseUpFunction, false);\r\n self.rotateLeftMouseUpFunction = undefined;\r\n\r\n self.rotate.call(self, -15);\r\n\r\n self.rotateLeftInterval = setInterval(function () {\r\n self.rotate.call(self, -15);\r\n }.bind(self), 101);\r\n\r\n self.rotateLeftMouseUpFunction = function () {\r\n clearInterval(self.rotateLeftInterval);\r\n self.rotateLeftInterval = undefined;\r\n\r\n document.removeEventListener(upEvent, self.rotateLeftMouseUpFunction, false);\r\n self.rotateLeftMouseUpFunction = undefined;\r\n };\r\n\r\n document.addEventListener(upEvent, self.rotateLeftMouseUpFunction, false);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n\r\n }.bind(self));\r\n\r\n self.rotateRight = self.div.querySelector(rotateSelector + self.selectors.rightArrow);\r\n self.rotateRight.addEventListener(TC.Util.detectMouse() ? 'mousedown' : 'touchstart', function (e) {\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n self.inControls(e);\r\n\r\n var upEvent = TC.Util.detectMouse() ? 'mouseup' : 'touchend';\r\n\r\n document.removeEventListener(upEvent, self.rotateRightMouseUpFunction, false);\r\n self.rotateRightMouseUpFunction = undefined;\r\n\r\n self.rotate.call(self, +15);\r\n\r\n self.rotateRightInterval = setInterval(function () {\r\n self.rotate.call(self, +15);\r\n }.bind(self), 101);\r\n\r\n self.rotateRightMouseUpFunction = function () {\r\n clearInterval(self.rotateRightInterval);\r\n self.rotateRightInterval = undefined;\r\n\r\n document.removeEventListener(upEvent, self.rotateRightMouseUpFunction, false);\r\n self.rotateRightMouseUpFunction = undefined;\r\n };\r\n\r\n document.addEventListener(upEvent, self.rotateRightMouseUpFunction, false);\r\n\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n return false;\r\n\r\n }.bind(self));\r\n\r\n self.bind();\r\n\r\n }.bind(this));\r\n }\r\n };\r\n CameraControls.prototype.disableTilt = function (angle) {\r\n var self = this;\r\n\r\n var theta = cesium.Math.toRadians(angle);\r\n var tilt = self.getCamera().pitch;\r\n\r\n self.isTiltDownDisabled = (tilt + -theta) < self.MIN_TILT;\r\n self.isTiltUpDisabled = (tilt + theta) > self.MAX_TILT;\r\n\r\n // left\r\n self.tiltUp.disabled = self.isTiltUpDisabled;\r\n self.tiltUp.classList.toggle(self.parent.classes.CAMERACTRARROWDISABLED, self.isTiltUpDisabled);\r\n\r\n\r\n // right\r\n self.tiltDown.disabled = self.isTiltDownDisabled;\r\n self.tiltDown.classList.toggle(self.parent.classes.CAMERACTRARROWDISABLED, self.isTiltDownDisabled);\r\n };\r\n CameraControls.prototype.disableRotate = function () {\r\n var self = this;\r\n\r\n var isDisable = true;\r\n\r\n var scene = self.parent.viewer.scene;\r\n var canvas = scene.canvas;\r\n var bottomLeft = new cesium.Cartesian2(0, canvas.clientHeight - 1);\r\n var bottomRight = new cesium.Cartesian2(canvas.clientWidth - 1, canvas.clientHeight - 1);\r\n var fovCoords = [bottomLeft, bottomRight, new cesium.Cartesian2(canvas.clientWidth - 1, 0), new cesium.Cartesian2(0, 0)]\r\n .map(function (elm) {\r\n return pickMapCoords.call(this, elm);\r\n }.bind(self.parent))\r\n .filter(function (elm) {\r\n return elm !== null;\r\n });\r\n\r\n if (fovCoords.length && fovCoords.length >= 2) {\r\n isDisable = false;\r\n }\r\n\r\n // reset\r\n self.rotateIndicatorInner.disabled = isDisable;\r\n\r\n // left\r\n self.rotateLeft.disabled = isDisable;\r\n self.rotateLeft.classList.toggle(self.parent.classes.CAMERACTRARROWDISABLED, isDisable);\r\n\r\n // right\r\n self.rotateRight.disabled = isDisable;\r\n self.rotateRight.classList.toggle(self.parent.classes.CAMERACTRARROWDISABLED, isDisable);\r\n\r\n return isDisable;\r\n };\r\n CameraControls.prototype.tilt = function (angle) {\r\n var self = this;\r\n\r\n self.disableTilt(angle);\r\n\r\n if (self.parent.viewer && self.parent.viewer.trackedEntity) {\r\n self.getCamera().rotateUp(cesium.Math.toRadians(angle));\r\n } else {\r\n if (pickCenterPoint(self.parent.viewer.scene) == undefined) {\r\n if (angle > 0) self.getCamera().lookUp();\r\n else self.getCamera().lookDown();\r\n }\r\n\r\n if ((angle >= cesium.Math.PI_OVER_TWO && self.isTiltUpDisabled) ||\r\n (angle <= -cesium.Math.PI_OVER_TWO && self.isTiltDownDisabled)) {\r\n return;\r\n }\r\n\r\n var _angle = cesium.Math.toRadians(angle);\r\n var pivot = pickCenterPoint(self.parent.viewer.scene);\r\n if (pivot) {\r\n var transform = cesium.Matrix4.fromTranslation(pivot);\r\n self.parent.view3D.rotateAroundAxis(self.getCamera(), -_angle, self.getCamera().right, transform, { duration: 100 });\r\n }\r\n }\r\n };\r\n CameraControls.prototype.rotate = function (angle) {\r\n var self = this;\r\n\r\n angle = cesium.Math.toRadians(angle);\r\n\r\n if (self.parent.viewer && self.parent.viewer.trackedEntity) {\r\n self.getCamera().rotateRight(-angle);\r\n } else {\r\n var bottom = pickBottomPoint(self.parent.viewer.scene);\r\n if (bottom) {\r\n setHeadingUsingBottomCenter(self.parent.viewer.scene, angle, bottom, {\r\n duration: 100\r\n });\r\n }\r\n }\r\n };\r\n CameraControls.prototype.draggingTilt = function (tiltElement, cursorVector) {\r\n var self = this;\r\n\r\n self.tiltIndicatorOuterCircle.classList.add(self.parent.classes.HIGHLIGHTED);\r\n\r\n var oldTransformScratch = new cesium.Matrix4();\r\n var newTransformScratch = new cesium.Matrix4();\r\n var vectorScratch = new cesium.Cartesian2();\r\n\r\n document.removeEventListener('mousemove', self.tiltMouseMoveFunction, false);\r\n document.removeEventListener('mouseup', self.tiltMouseUpFunction, false);\r\n\r\n self.tiltMouseMoveFunction = undefined;\r\n self.tiltMouseUpFunction = undefined;\r\n\r\n self.isTilting = true;\r\n\r\n var scene = self.parent.viewer.scene;\r\n var camera = scene.camera;\r\n\r\n var pivot = pickCenterPoint(scene);\r\n if (!pivot) {\r\n self.tiltFrame = cesium.Transforms.northUpEastToFixedFrame(camera.positionWC, cesium.Ellipsoid.WGS84, newTransformScratch);\r\n self.tiltIsLook = true;\r\n } else {\r\n self.tiltFrame = cesium.Transforms.northUpEastToFixedFrame(pivot, cesium.Ellipsoid.WGS84, newTransformScratch);\r\n self.tiltIsLook = false;\r\n }\r\n\r\n self.startCursorAngle = Math.atan2(-cursorVector.y, cursorVector.x);\r\n\r\n var oldTransform = cesium.Matrix4.clone(camera.transform, oldTransformScratch);\r\n camera.lookAtTransform(self.tiltFrame);\r\n\r\n self.initialCameraAngle = Math.atan2(camera.position.y, camera.position.x);\r\n\r\n camera.lookAtTransform(oldTransform);\r\n\r\n self.tiltMouseMoveFunction = function (e) {\r\n var self = this;\r\n\r\n scene = self.parent.viewer.scene;\r\n camera = scene.camera;\r\n\r\n var tiltRectangle = tiltElement.getBoundingClientRect();\r\n const center = new cesium.Cartesian2((tiltRectangle.right - tiltRectangle.left) / 2.0, (tiltRectangle.bottom - tiltRectangle.top) / 2.0);\r\n var clickLocation = new cesium.Cartesian2(e.clientX - tiltRectangle.left, e.clientY - tiltRectangle.top);\r\n var vector = cesium.Cartesian2.subtract(clickLocation, center, vectorScratch);\r\n\r\n console.log('Entra: ' + vector.toString());\r\n\r\n var angle = Math.atan2(-vector.y, vector.x);\r\n var angleDifference = angle - self.startCursorAngle;\r\n var newCameraAngle = cesium.Math.zeroToTwoPi(self.initialCameraAngle - angleDifference);\r\n\r\n try {\r\n oldTransform = cesium.Matrix4.clone(camera.transform, oldTransformScratch);\r\n camera.lookAtTransform(self.tiltFrame);\r\n var currentCameraAngle = Math.atan2(camera.position.y, camera.position.x);\r\n var theta = newCameraAngle - currentCameraAngle;\r\n\r\n var tilt = camera.pitch;\r\n tilt += theta;\r\n\r\n if (tilt < self.MIN_TILT) {\r\n camera.rotate(camera.right, camera.pitch - self.MIN_TILT);\r\n } else if (tilt > self.MAX_TILT) {\r\n camera.rotate(camera.right, camera.pitch - self.MAX_TILT);\r\n } else {\r\n camera.rotate(camera.right, -theta);\r\n }\r\n\r\n self.disableTilt(5);\r\n camera.lookAtTransform(oldTransform);\r\n\r\n } catch (e) {\r\n self.tiltMouseUpFunction();\r\n }\r\n\r\n\r\n }.bind(self);\r\n\r\n self.tiltMouseUpFunction = function (_e) {\r\n self.tiltIndicatorOuterCircle.classList.remove(self.parent.classes.HIGHLIGHTED);\r\n\r\n self.isTilting = false;\r\n document.removeEventListener('mousemove', self.tiltMouseMoveFunction, false);\r\n document.removeEventListener('mouseup', self.tiltMouseUpFunction, false);\r\n\r\n self.tiltMouseMoveFunction = undefined;\r\n self.tiltMouseUpFunction = undefined;\r\n };\r\n\r\n document.addEventListener('mousemove', self.tiltMouseMoveFunction, false);\r\n document.addEventListener('mouseup', self.tiltMouseUpFunction, false);\r\n };\r\n CameraControls.prototype.draggingRotate = function (rotateElement, cursorVector) {\r\n var self = this;\r\n\r\n document.removeEventListener('mousemove', self.rotateMouseMoveFunction, false);\r\n document.removeEventListener('mouseup', self.rotateMouseUpFunction, false);\r\n\r\n self.rotateMouseMoveFunction = undefined;\r\n self.rotateMouseUpFunction = undefined;\r\n\r\n self.rotateMouseMoveFunction = function (e) {\r\n var rotateRectangle = rotateElement.getBoundingClientRect();\r\n var center = new cesium.Cartesian2((rotateRectangle.right - rotateRectangle.left) / 2.0, (rotateRectangle.bottom - rotateRectangle.top) / 2.0);\r\n var clickLocation = new cesium.Cartesian2(e.clientX - rotateRectangle.left, e.clientY - rotateRectangle.top);\r\n var vector = cesium.Cartesian2.subtract(clickLocation, center, vectorScratch);\r\n var angle = Math.atan2(-vector.y, vector.x);\r\n\r\n var angleDifference = angle - self.rotateInitialCursorAngle;\r\n var newCameraAngle = cesium.Math.zeroToTwoPi(self.rotateInitialCameraAngle - angleDifference);\r\n\r\n camera = self.parent.viewer.scene.camera;\r\n\r\n try {\r\n oldTransform = cesium.Matrix4.clone(camera.transform, oldTransformScratch);\r\n camera.lookAtTransform(self.rotateFrame);\r\n var currentCameraAngle = Math.atan2(camera.position.y, camera.position.x);\r\n camera.rotateRight(newCameraAngle - currentCameraAngle);\r\n camera.lookAtTransform(oldTransform);\r\n } catch (e) {\r\n self.rotateMouseUpFunction();\r\n }\r\n };\r\n\r\n self.rotateMouseUpFunction = function (_e) {\r\n self.isRotating = false;\r\n\r\n self.rotateIndicatorOuterCircle.classList.remove(self.parent.classes.HIGHLIGHTED);\r\n\r\n document.removeEventListener('mousemove', self.rotateMouseMoveFunction, false);\r\n document.removeEventListener('mouseup', self.rotateMouseUpFunction, false);\r\n\r\n self.rotateMouseMoveFunction = undefined;\r\n self.rotateMouseUpFunction = undefined;\r\n };\r\n\r\n if (self.disableRotate()) {\r\n self.rotateMouseUpFunction();\r\n return;\r\n }\r\n\r\n self.rotateIndicatorOuterCircle.classList.add(self.parent.classes.HIGHLIGHTED);\r\n\r\n var oldTransformScratch = new cesium.Matrix4();\r\n var newTransformScratch = new cesium.Matrix4();\r\n var vectorScratch = new cesium.Cartesian2();\r\n\r\n self.isRotating = true;\r\n self.rotateInitialCursorAngle = Math.atan2(-cursorVector.y, cursorVector.x);\r\n\r\n var scene = self.parent.viewer.scene;\r\n var camera = scene.camera;\r\n\r\n var viewCenter = pickCenterPoint(self.parent.viewer.scene);\r\n if (viewCenter == null || viewCenter == undefined) {\r\n viewCenter = pickBottomPoint(self.parent.viewer.scene);\r\n if (viewCenter == null || viewCenter == undefined) {\r\n self.rotateFrame = cesium.Transforms.eastNorthUpToFixedFrame(camera.positionWC, cesium.Ellipsoid.WGS84, newTransformScratch);\r\n self.rotateIsLook = true;\r\n } else {\r\n self.rotateFrame = cesium.Transforms.eastNorthUpToFixedFrame(viewCenter, cesium.Ellipsoid.WGS84, newTransformScratch);\r\n self.rotateIsLook = false;\r\n }\r\n } else {\r\n self.rotateFrame = cesium.Transforms.eastNorthUpToFixedFrame(viewCenter, cesium.Ellipsoid.WGS84, newTransformScratch);\r\n self.rotateIsLook = false;\r\n }\r\n\r\n try {\r\n var oldTransform = cesium.Matrix4.clone(camera.transform, oldTransformScratch);\r\n camera.lookAtTransform(self.rotateFrame);\r\n self.rotateInitialCameraAngle = Math.atan2(camera.position.y, camera.position.x);\r\n self.rotateInitialCameraDistance = cesium.Cartesian3.magnitude(new cesium.Cartesian3(camera.position.x, camera.position.y, 0.0));\r\n camera.lookAtTransform(oldTransform);\r\n } catch (e) {\r\n self.rotateMouseUpFunction();\r\n }\r\n\r\n document.addEventListener('mousemove', self.rotateMouseMoveFunction, false);\r\n document.addEventListener('mouseup', self.rotateMouseUpFunction, false);\r\n };\r\n CameraControls.prototype.resetTilt = function () {\r\n var self = this;\r\n // lo dejamos como al principio a 50 grados\r\n var angle = -self.getCamera().pitch - cesium.Math.toRadians(50);\r\n self.tilt(cesium.Math.toDegrees(angle));\r\n };\r\n CameraControls.prototype.resetRotation = function (options) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n var currentRotation;\r\n currentRotation = -self.getCamera().heading;\r\n\r\n while (currentRotation < -Math.PI) {\r\n currentRotation += 2 * Math.PI;\r\n }\r\n while (currentRotation > Math.PI) {\r\n currentRotation -= 2 * Math.PI;\r\n }\r\n\r\n if (!options)\r\n resolve();\r\n else {\r\n options.callback = function () {\r\n resolve();\r\n };\r\n }\r\n\r\n if (self.parent.viewer && self.parent.viewer.trackedEntity) {\r\n self.parent.view3D.linked2DControls.geolocation.videoControls.call(self, { target: { className: 'stop' }, custom: true });\r\n }\r\n var bottom = pickBottomPoint(self.parent.viewer.scene);\r\n if (bottom) {\r\n setHeadingUsingBottomCenter(self.parent.viewer.scene, currentRotation, bottom, options);\r\n }\r\n });\r\n };\r\n CameraControls.prototype.customCollisionDetection = function () {\r\n var self = this;\r\n\r\n var scratchAdjustHeightTransform = new cesium.Matrix4();\r\n var scratchAdjustHeightCartographic = new cesium.Cartographic();\r\n\r\n var scene = self.parent.viewer.scene;\r\n var camera = self.parent.viewer.scene.camera;\r\n\r\n var screenSpaceCameraController = scene.screenSpaceCameraController;\r\n var minimumCollisionTerrainHeight = screenSpaceCameraController.minimumCollisionTerrainHeight;\r\n var minimumZoomDistance = screenSpaceCameraController.minimumZoomDistance;\r\n var globe = scene.globe;\r\n\r\n var ellipsoid = globe.ellipsoid;\r\n\r\n var transform;\r\n var mag;\r\n if (!cesium.Matrix4.equals(camera.transform, cesium.Matrix4.IDENTITY)) {\r\n transform = cesium.Matrix4.clone(camera.transform, scratchAdjustHeightTransform);\r\n mag = cesium.Cartesian3.magnitude(camera.position);\r\n camera._setTransform(cesium.Matrix4.IDENTITY);\r\n }\r\n\r\n var cartographic = scratchAdjustHeightCartographic;\r\n ellipsoid.cartesianToCartographic(camera.position, cartographic);\r\n\r\n var heightUpdated = false;\r\n if (cartographic.height < minimumCollisionTerrainHeight) {\r\n var height = globe.getHeight(cartographic);\r\n if (height !== undefined && height !== null) {\r\n height += minimumZoomDistance;\r\n if (cartographic.height < height) {\r\n cartographic.height = height;\r\n ellipsoid.cartographicToCartesian(cartographic, camera.position);\r\n heightUpdated = true;\r\n }\r\n }\r\n }\r\n\r\n if (transform !== undefined && transform !== null) {\r\n camera._setTransform(transform);\r\n if (heightUpdated) {\r\n cesium.Cartesian3.normalize(camera.position, camera.position);\r\n cesium.Cartesian3.negate(camera.position, camera.direction);\r\n cesium.Cartesian3.multiplyByScalar(camera.position, Math.max(mag, minimumZoomDistance), camera.position);\r\n cesium.Cartesian3.normalize(camera.direction, camera.direction);\r\n cesium.Cartesian3.cross(camera.direction, camera.up, camera.right);\r\n cesium.Cartesian3.cross(camera.right, camera.direction, camera.up);\r\n }\r\n }\r\n };\r\n CameraControls.prototype.limitCameraToInitExtent = function () {\r\n var self = this;\r\n\r\n var pos = self.viewer.camera.positionCartographic.clone();\r\n\r\n if (!(pos.longitude >= self.initExtent.west &&\r\n pos.longitude <= self.initExtent.east &&\r\n pos.latitude >= self.initExtent.south &&\r\n pos.latitude <= self.initExtent.north)) {\r\n // add a padding based on the camera height\r\n var maxHeight = self.viewer.scene.screenSpaceCameraController.maximumZoomDistance;\r\n var padding = pos.height * 0.05 / maxHeight;\r\n pos.longitude = Math.max(self.initExtent.west - padding, pos.longitude);\r\n pos.latitude = Math.max(self.initExtent.south - padding, pos.latitude);\r\n pos.longitude = Math.min(self.initExtent.east + padding, pos.longitude);\r\n pos.latitude = Math.min(self.initExtent.north + padding, pos.latitude);\r\n self.viewer.camera.setView({\r\n destination: cesium.Ellipsoid.WGS84.cartographicToCartesian(pos),\r\n orientation: {\r\n heading: self.viewer.camera.heading,\r\n pitch: self.viewer.camera.pitch\r\n }\r\n });\r\n }\r\n\r\n // Set the minimumZoomDistance according to the camera height\r\n self.viewer.scene.screenSpaceCameraController.minimumZoomDistance = pos.height > 1800 ? 400 : 200;\r\n };\r\n\r\n const TwoDLinkedFeatureInfo = function (map) {\r\n var pending = false;\r\n var marker = null;\r\n var ctlResultsPanel = null;\r\n var ctlFeatureInfo = null;\r\n\r\n var savedMode;\r\n var map2DgetResolutionFN = map.map.getResolution;\r\n\r\n var getResultsPanelCtl = function (ctlFeatureInfo) {\r\n\r\n if (ctlResultsPanel) {\r\n return Promise.resolve();\r\n } else {\r\n\r\n const resultsPanelOptions = {\r\n \"content\": \"table\",\r\n \"titles\": {\r\n \"main\": TC.Util.getLocaleString(map.map.options.locale, \"threed.rs.panel.gfi\"),\r\n \"max\": TC.Util.getLocaleString(map.map.options.locale, \"threed.rs.panel.gfi\")\r\n }\r\n };\r\n\r\n var addControlPromise;\r\n var controlContainer = map.map.getControlsByClass('TC.control.ControlContainer')[0];\r\n if (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n addControlPromise = controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n map.map.div.appendChild(resultsPanelOptions.div);\r\n addControlPromise = map.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n return addControlPromise.then(function (control) {\r\n control.caller = ctlFeatureInfo;\r\n ctlResultsPanel = control;\r\n ctlFeatureInfo.resultsPanel = ctlResultsPanel;\r\n });\r\n }\r\n };\r\n\r\n ctlFeatureInfo = map.map.getControlsByClass(TC.control.FeatureInfo)[0];\r\n if (ctlFeatureInfo) {\r\n\r\n savedMode = ctlFeatureInfo.displayMode;\r\n\r\n getResultsPanelCtl(ctlFeatureInfo).then(function () {\r\n ctlFeatureInfo.setDisplayMode(Consts.infoContainer.RESULTS_PANEL);\r\n\r\n map.map.on(Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === ctlFeatureInfo.getDisplayControl()) {\r\n if (!ctlFeatureInfo.querying) {\r\n removeMarker();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n this.clear = function () {\r\n ctlFeatureInfo.closeResults();\r\n removeMarker();\r\n };\r\n this.reset = function () {\r\n this.clear();\r\n ctlFeatureInfo.setDisplayMode(savedMode);\r\n map.map.getResolution = map2DgetResolutionFN;\r\n };\r\n var setMarker = function (pickedPosition) {\r\n if (!marker) {\r\n var billboard = {\r\n position: pickedPosition,\r\n billboard: { /* revisar: no está bien la URL de la imagen - también revisar el GFI que salta en móvil sólo con navegar */\r\n image: TC.Util.getBackgroundUrlFromCss(map.CLASS + '-marker'),\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n };\r\n marker = map.view3D.addNativeFeature.call(map, billboard);\r\n\r\n } else {\r\n marker.position = pickedPosition;\r\n }\r\n\r\n map.viewer.scene.requestRender();\r\n };\r\n var removeMarker = function () {\r\n map.view3D.removeFeature.call(map, marker);\r\n marker = null;\r\n };\r\n this.send = function (pickedPosition) {\r\n return new Promise(function (resolve, _reject) {\r\n pending = true;\r\n\r\n if (ctlFeatureInfo.displayMode !== Consts.infoContainer.RESULTS_PANEL) {\r\n ctlFeatureInfo.setDisplayMode(Consts.infoContainer.RESULTS_PANEL);\r\n }\r\n\r\n if (ctlFeatureInfo.resultsPanel) {\r\n ctlFeatureInfo.resultsPanel.close();\r\n }\r\n\r\n if (!map.waiting)\r\n map.waiting = map.map.getLoadingIndicator().addWait();\r\n\r\n setMarker(pickedPosition);\r\n\r\n getResultsPanelCtl(ctlFeatureInfo).then(function () {\r\n var pickedLocation = cesium.Ellipsoid.WGS84.cartesianToCartographic(pickedPosition);\r\n\r\n var reprojected;\r\n if (map.view3D.crs !== map.view3D.view2DCRS) {\r\n reprojected = TC.Util.reproject([cesium.Math.toDegrees(pickedLocation.longitude), cesium.Math.toDegrees(pickedLocation.latitude)], map.view3D.crs, map.view3D.view2DCRS);\r\n } else {\r\n reprojected = [cesium.Math.toDegrees(pickedLocation.longitude), cesium.Math.toDegrees(pickedLocation.latitude)];\r\n }\r\n\r\n\r\n var tilesRendered = map.viewer.scene.globe._surface._tilesToRender;\r\n var pickedTile;\r\n\r\n for (var textureIndex = 0; !pickedTile && textureIndex < tilesRendered.length; ++textureIndex) {\r\n var tile = tilesRendered[textureIndex];\r\n if (cesium.Rectangle.contains(tile.rectangle, pickedLocation)) {\r\n pickedTile = tile;\r\n }\r\n }\r\n\r\n if (!pickedTile) {\r\n resolve();\r\n return;\r\n }\r\n\r\n var imageryTiles = pickedTile.data.imagery;\r\n for (var i = imageryTiles.length - 1; i >= 0; --i) {\r\n var terrainImagery = imageryTiles[i];\r\n var imagery = terrainImagery.readyImagery;\r\n if (!imagery) {\r\n resolve();\r\n return;\r\n }\r\n }\r\n\r\n var nativeRectangle = pickedTile.tilingScheme.tileXYToNativeRectangle(pickedTile.x, pickedTile.y, pickedTile.level);\r\n\r\n var readyImageryToGetNativeRectangle = (imageryTiles.find(function (imagery) {\r\n return imagery.readyImagery.imageryLayer.isBaseLayer();\r\n }) || {}).readyImagery;\r\n\r\n map.map.getResolution = function () {\r\n\r\n var west_south = map.view3D.crs !== map.view3D.view2DCRS ? TC.Util.reproject([nativeRectangle.west, nativeRectangle.south], map.view3D.crs, map.view3D.view2DCRS) : [nativeRectangle.west, nativeRectangle.south];\r\n var east_north = map.view3D.crs !== map.view3D.view2DCRS ? TC.Util.reproject([nativeRectangle.east, nativeRectangle.north], map.view3D.crs, map.view3D.view2DCRS) : [nativeRectangle.east, nativeRectangle.north];\r\n\r\n var xResolution = (east_north[0] - west_south[0]) / (readyImageryToGetNativeRectangle && readyImageryToGetNativeRectangle.imageryLayer.imageryProvider.tileWidth || 256);\r\n var yResolution = (east_north[1] - west_south[1]) / (readyImageryToGetNativeRectangle && readyImageryToGetNativeRectangle.imageryLayer.imageryProvider.tileHeight || 256);\r\n\r\n return Math.max(xResolution, yResolution);\r\n\r\n }.bind(map, readyImageryToGetNativeRectangle, nativeRectangle);\r\n\r\n map.map.one(Consts.event.NOFEATUREINFO, function (e) {\r\n pending = false;\r\n\r\n resolve(e);\r\n }.bind(ctlFeatureInfo));\r\n\r\n map.map.one(Consts.event.FEATUREINFO, function (e) {\r\n pending = false;\r\n\r\n resolve(e);\r\n });\r\n\r\n map.map.on(Consts.event.FEATURECLICK, function (e) {\r\n removeMarker();\r\n\r\n resolve(e);\r\n });\r\n\r\n ctlFeatureInfo.isActive = true;\r\n ctlFeatureInfo.beforeRequest({\r\n xy: [0, 0]\r\n }); // Es irrelevante dónde va a poner el marcador, no se va a ver \r\n\r\n ctlFeatureInfo.callback(reprojected);\r\n });\r\n });\r\n };\r\n this.get2DMarker = function () {\r\n return ctlFeatureInfo.filterFeature;\r\n };\r\n this.isPending = function () {\r\n return pending;\r\n };\r\n };\r\n\r\n const RasterConverter = function (_crsPattern) {\r\n this.layerCrs = null;\r\n\r\n var paths = {\r\n CRS: [\"Capability\", \"Layer\", \"CRS\"],\r\n TILEMATRIXSET: [\"Contents\", \"TileMatrixSet\", \"Identifier\"],\r\n TILEMATRIXSETLABELS: [\"Contents\", \"TileMatrixSet\"]\r\n };\r\n var getOfPath = function (obj, p, i) {\r\n if (i < p.length - 1) {\r\n if (hasOwnProperty.call(obj, p[i])) {\r\n return getOfPath(obj[p[i]], p, ++i);\r\n }\r\n else {\r\n return null;\r\n }\r\n } else {\r\n if (obj instanceof Array) {\r\n var _obj = [];\r\n for (var a = 0; a < obj.length; a++) {\r\n if (hasOwnProperty.call(obj[a], p[i])) {\r\n _obj.push(obj[a][p[i]]);\r\n }\r\n }\r\n\r\n return _obj;\r\n } else {\r\n return obj[p[i]];\r\n }\r\n }\r\n };\r\n\r\n var getTileMatrixSetLabelByLayerOnCapabilities = function (layer, crs) {\r\n let capsURL;\r\n if ((capsURL = TC.Util.isOnCapabilities(layer.url))) {\r\n let caps;\r\n if ((caps = TC.capabilities[capsURL])) {\r\n var tileMatrixSet = getOfPath(caps, paths.TILEMATRIXSETLABELS, 0);\r\n for (var a = 0; a < tileMatrixSet.length; a++) {\r\n if (TC.Util.CRSCodesEqual(crs, tileMatrixSet[a].SupportedCRS)) {\r\n return { id: tileMatrixSet[a].Identifier, labels: getOfPath(tileMatrixSet[a], [\"TileMatrix\", \"Identifier\"], 0) };\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n var wmtsLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n let tileMatrixSetLabels = getTileMatrixSetLabelByLayerOnCapabilities(layer, self.layerCrs);\r\n let resource;\r\n let resourceURL;\r\n if (Consts.WMTSEncoding.KVP === layer.encoding) {\r\n resource = new cesium.Resource({\r\n url: layer.url,\r\n request: new cesium.Request({\r\n type: cesium.RequestType.IMAGERY\r\n })\r\n });\r\n } else if (Consts.WMTSEncoding.RESTFUL === layer.encoding) {\r\n const wmtsLayer = layer.wrap.getWMTSLayer({ crs: self.layerCrs });\r\n if (wmtsLayer && wmtsLayer.ResourceURL && wmtsLayer.ResourceURL.length > 0) {\r\n resourceURL = wmtsLayer.ResourceURL[0];\r\n resource = new cesium.Resource({\r\n url: resourceURL.template,\r\n request: new cesium.Request({\r\n type: cesium.RequestType.IMAGERY\r\n })\r\n });\r\n }\r\n }\r\n if (resource && tileMatrixSetLabels) {\r\n resource.tcLayer = layer;\r\n let options = {\r\n url: resource,\r\n layer: layer.layerNames,\r\n style: 'default',\r\n format: resourceURL && resourceURL.format || layer.format || layer.options.format,\r\n tilingScheme: new cesium.GeographicTilingScheme()\r\n };\r\n\r\n if (Consts.WMTSEncoding.RESTFUL === layer.encoding) {\r\n options.tileMatrixSetID = tileMatrixSetLabels.id;\r\n } else if (Consts.WMTSEncoding.KVP === layer.encoding && tileMatrixSetLabels) {\r\n options.tileMatrixSetID = tileMatrixSetLabels.id;\r\n options.tileMatrixLabels = tileMatrixSetLabels.labels;\r\n }\r\n\r\n if (tileMatrixSetLabels && tileMatrixSetLabels.labels) {\r\n options.maximumLevel = parseInt(tileMatrixSetLabels.labels[tileMatrixSetLabels.labels.length - 1]);\r\n }\r\n\r\n // cuando un WMTS no tenga el matrixset de 0 a 21 requeriremos de la siguiente instrucción\r\n // Cesium requiere que los niveles vayan de 0 a 21 aunque físicamente no sea así\r\n //if (tileMatrixSetLabels && tileMatrixSetLabels.labels[0] !== 0) {\r\n // options.tileMatrixLabels = [...Array(21/*tileMatrixSetLabels.labels.length*/).keys()];\r\n //}\r\n\r\n resolve(new cesium.WebMapTileServiceImageryProvider(options));\r\n\r\n } else {\r\n reject('Faltan datos para instanciar la capa');\r\n }\r\n });\r\n }\r\n\r\n var wmsLayer = function (layer) {\r\n return new Promise(function (resolve, _reject) {\r\n let resource = new cesium.Resource({\r\n url: layer.url,\r\n request: new cesium.Request({\r\n type: cesium.RequestType.IMAGERY\r\n })\r\n });\r\n resource.tcLayer = layer;\r\n let options = {\r\n url: resource,\r\n layers: layer.layerNames,\r\n parameters: {\r\n version: \"1.3.0\",\r\n transparent: true,\r\n format: layer.format || layer.options.format\r\n }\r\n };\r\n\r\n var bindEXBBox = function () {\r\n var bbox = [];\r\n if (layer.capabilities && layer.capabilities.Capability && layer.capabilities.Capability.Layer) {\r\n if (layer.names.length > 0) {\r\n var names = layer.names.slice(0);\r\n var _getEXBBox = function _getEXBBox(nodes, name) {\r\n if (nodes) {\r\n let n;\r\n for (var i = 0; i < nodes.length; i++) {\r\n n = nodes[i];\r\n if (layer.compareNames(layer.wrap.getName(n), name)) {\r\n return n.EX_GeographicBoundingBox;\r\n }\r\n }\r\n\r\n return _getEXBBox(n.Layer, name);\r\n }\r\n };\r\n while (names.length > 0) {\r\n var exBBox = _getEXBBox([layer.capabilities.Capability.Layer], names.pop());\r\n if (exBBox !== null) {\r\n bbox.push(exBBox);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return bbox;\r\n };\r\n var exBoundingBox = bindEXBBox();\r\n\r\n if (exBoundingBox) {\r\n layer.geoBBox = exBoundingBox;\r\n }\r\n\r\n resolve(new cesium.WebMapServiceImageryProvider(options));\r\n });\r\n };\r\n\r\n var CustomResource;\r\n var defineCustomResource = function () {\r\n /* tengo que sobrescribir porque no valida nada... \r\n Desde la version 1.42 han cambiado la definición de un proxy en las capas raster: si configuras con proxy, pide directamente desde el proxy y si da error no gestiona nada, \r\n y si no configuras proxy, pide directamente sin tampoco gestionar los errores. Además la creación de una capa raster es síncrona, por lo que no encaja con el algoritmo de proxificación */\r\n CustomResource = function (options, layer) {\r\n cesium.Resource.call(this, options);\r\n\r\n this.layer = layer;\r\n };\r\n CustomResource.prototype.constructor = CustomResource;\r\n CustomResource.prototype = Object.create(cesium.Resource.prototype, {});\r\n CustomResource.prototype.clone = function (result) {\r\n\r\n var cloned = cesium.Resource.prototype.clone.call(this, result);\r\n\r\n if (!cesium.defined(result)) {\r\n result = new CustomResource({\r\n url: this._url\r\n }, this.layer);\r\n }\r\n\r\n result._url = cloned._url;\r\n result._queryParameters = cloned._queryParameters;\r\n result._templateValues = cloned._templateValues;\r\n result.headers = cloned.headers;\r\n result.proxy = cloned.proxy;\r\n result.retryCallback = cloned.retryCallback;\r\n result.retryAttempts = cloned.retryAttempts;\r\n result._retryCount = 0;\r\n\r\n result.request = cloned.request;\r\n\r\n\r\n\r\n return result;\r\n };\r\n CustomResource.prototype.fetchImage = customFetchImage;\r\n };\r\n\r\n /* inicio cesium Resource override */\r\n var xhrBlobSupported = (function () {\r\n try {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', '#', true);\r\n xhr.responseType = 'blob';\r\n return xhr.responseType === 'blob';\r\n } catch (e) {\r\n return false;\r\n }\r\n })();\r\n\r\n function checkAndResetRequest(request) {\r\n if (request.state === cesium.RequestState.ISSUED || request.state === cesium.RequestState.ACTIVE) {\r\n throw new cesium.RuntimeError('The Resource is already being fetched.');\r\n }\r\n\r\n request.state = cesium.RequestState.UNISSUED;\r\n request.deferred = undefined;\r\n }\r\n\r\n function createImage(layer, url, crossOrigin, deferred) {\r\n var getImage = function (params) {\r\n var image = new Image();\r\n\r\n image.onload = function (_layer) {\r\n deferred.resolve(image);\r\n }.bind(image, layer);\r\n\r\n image.onerror = function (_layer, e) {\r\n deferred.reject(e);\r\n }.bind(image, layer);\r\n\r\n if (crossOrigin) {\r\n if (cesium.TrustedServers.contains(url)) {\r\n image.crossOrigin = 'use-credentials';\r\n } else {\r\n image.crossOrigin = '';\r\n }\r\n }\r\n\r\n image.src = params.url;\r\n };\r\n\r\n layer.getWebGLUrl.call(layer, url).then(getImage, function (e) {\r\n deferred.reject(e);\r\n });\r\n }\r\n\r\n function fetchImage(resource, allowCrossOrigin) {\r\n var request = resource.request;\r\n request.url = resource.url;\r\n request.requestFunction = function () {\r\n var url = resource.url;\r\n var crossOrigin = false;\r\n\r\n // data URIs can't have allowCrossOrigin set.\r\n if (!resource.isDataUri && !resource.isBlobUri) {\r\n crossOrigin = resource.isCrossOriginUrl;\r\n }\r\n\r\n var deferred = cesium.when.defer();\r\n\r\n createImage(resource.layer, url, crossOrigin && allowCrossOrigin, deferred);\r\n\r\n return deferred.promise;\r\n };\r\n\r\n var promise = cesium.RequestScheduler.request(request);\r\n if (!cesium.defined(promise)) {\r\n return;\r\n }\r\n\r\n return promise.otherwise(function (e) {\r\n return cesium.when.reject(e);\r\n });\r\n }\r\n\r\n var customFetchImage = function (preferBlob, allowCrossOrigin) {\r\n if (cesium.defined(allowCrossOrigin)) {\r\n cesium.deprecationWarning('Resource.fetchImage.allowCrossOrigin', 'The allowCrossOrigin parameter has been deprecated and will be removed in cesium 1.44. It no longer needs to be specified.');\r\n }\r\n\r\n preferBlob = cesium.defaultValue(preferBlob, false);\r\n allowCrossOrigin = cesium.defaultValue(allowCrossOrigin, true);\r\n\r\n checkAndResetRequest(this.request);\r\n\r\n // We try to load the image normally if\r\n // 1. Blobs aren't supported\r\n // 2. It's a data URI\r\n // 3. It's a blob URI\r\n // 4. It doesn't have request headers and we preferBlob is false\r\n if (!xhrBlobSupported || this.isDataUri || this.isBlobUri || (!this.hasHeaders && !preferBlob)) {\r\n return fetchImage(this, allowCrossOrigin);\r\n }\r\n\r\n var blobPromise = this.fetchBlob();\r\n if (!cesium.defined(blobPromise)) {\r\n return;\r\n }\r\n\r\n var generatedBlobResource;\r\n var generatedBlob;\r\n return blobPromise\r\n .then(function (blob) {\r\n if (!cesium.defined(blob)) {\r\n return;\r\n }\r\n generatedBlob = blob;\r\n var blobUrl = window.URL.createObjectURL(blob);\r\n generatedBlobResource = new cesium.Resource({\r\n url: blobUrl\r\n });\r\n\r\n return fetchImage(generatedBlobResource);\r\n })\r\n .then(function (image) {\r\n if (!cesium.defined(image)) {\r\n return;\r\n }\r\n window.URL.revokeObjectURL(generatedBlobResource.url);\r\n\r\n // This is because the blob object is needed for DiscardMissingTileImagePolicy\r\n // See https://github.com/AnalyticalGraphicsInc/cesium/issues/1353\r\n image.blob = generatedBlob;\r\n return image;\r\n })\r\n .otherwise(function (error) {\r\n if (cesium.defined(generatedBlobResource)) {\r\n window.URL.revokeObjectURL(generatedBlobResource.url);\r\n }\r\n\r\n return cesium.when.reject(error);\r\n });\r\n };\r\n /* fin cesium Resource override */\r\n\r\n this.convert = function (layer, map3DCRS) {\r\n this.layerCrs = map3DCRS;\r\n\r\n if (!CustomResource) { defineCustomResource(); }\r\n\r\n switch (true) {\r\n case Consts.layerType.WMTS == layer.type:\r\n return wmtsLayer.call(this, layer);\r\n case Consts.layerType.WMS == layer.type:\r\n return wmsLayer.call(this, layer);\r\n }\r\n };\r\n };\r\n const FeatureConverter = function () {\r\n var scene = null;\r\n var toCesiumColor = function (hexStringColor, alpha) {\r\n if (hexStringColor instanceof Array) {\r\n hexStringColor = \"rgba(\" + hexStringColor[0] + \", \" + hexStringColor[1] + \", \" + hexStringColor[2] + \", \" + hexStringColor[3] + \")\";\r\n }\r\n var color = cesium.Color.fromCssColorString(hexStringColor);\r\n if (alpha !== undefined) {\r\n return color.withAlpha(alpha);\r\n }\r\n\r\n return color;\r\n }\r\n var setStyleProperties = function (styles, properties, feature) {\r\n for (var key in properties) { // recorremos el diccionario de propiedades que admitimos como estilo\r\n var attr = styles[properties[key].prop];\r\n if (attr !== undefined) {\r\n if (typeof (attr) === \"function\") { // si la propiedad del estilo es una función (como en el control de búsquedas) invocamos para obtener el valor\r\n var val = attr(feature);\r\n if (val) {\r\n properties[key].val = val;\r\n }\r\n } else {\r\n properties[key].val = attr; // obtenenemos el valor\r\n }\r\n }\r\n }\r\n }\r\n var getPixelSize = function (coords) {\r\n var rectangle;\r\n\r\n if (coords.length == 1) {\r\n var point = coords[0];\r\n var delta = 1000;\r\n var minx, miny, maxx, maxy;\r\n minx = new cesium.Cartesian3(point.x - delta, point.y, point.z);\r\n miny = new cesium.Cartesian3(point.x, point.y - delta, point.z);\r\n maxx = new cesium.Cartesian3(point.x + delta, point.y, point.z);\r\n maxy = new cesium.Cartesian3(point.x, point.y + delta, point.z);\r\n\r\n rectangle = cesium.Rectangle.fromCartesianArray([minx, miny, maxx, maxy], cesium.Ellipsoid.WGS84);\r\n } else {\r\n rectangle = cesium.Rectangle.fromCartesianArray(coords, cesium.Ellipsoid.WGS84);\r\n }\r\n\r\n var neededCameraPosition = scene.camera.getRectangleCameraCoordinates(rectangle);\r\n var distance = cesium.Cartesian3.distance(neededCameraPosition, cesium.BoundingSphere.fromPoints(coords).center);\r\n var pixelSize = scene.camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new cesium.Cartesian2());\r\n pixelSize = Math.max(pixelSize.x, pixelSize.y);\r\n return Math.round(pixelSize) == 0 ? 1 : pixelSize;\r\n };\r\n\r\n var getFeatureStyle = function (feature) {\r\n var self = this;\r\n var styles;\r\n\r\n if (!feature.layer || (feature.layer && !hasOwnProperty.call(feature.layer, 'styles'))) {\r\n styles = TC.Defaults.styles;\r\n } else {\r\n styles = feature.layer.styles;\r\n }\r\n\r\n styles = styles[feature.STYLETYPE] == undefined ?\r\n styles[(feature.STYLETYPE === \"polyline\" ? \"line\" : feature.STYLETYPE)] :\r\n styles[(feature.STYLETYPE === \"multipolygon\" ? \"polygon\" : feature.STYLETYPE)];\r\n\r\n styles = TC.Util.extend({}, styles, feature.options, feature.getStyle());\r\n\r\n return styles;\r\n }\r\n\r\n function createLine(id, coords, options, callback) {\r\n const entityOps = {\r\n name: id,\r\n polyline: {\r\n positions: coords,\r\n width: options.width,\r\n material: options.color,\r\n clampToGround: true\r\n }\r\n }\r\n createLabel(entityOps, options, coords);\r\n\r\n callback(new cesium.Entity(entityOps));\r\n }\r\n\r\n function createPolygon(id, coords, options, callback) {\r\n const entityOps = {\r\n name: id,\r\n polyline: {\r\n positions: coords,\r\n width: options.width,\r\n material: options.outlineColor,\r\n clampToGround: true\r\n },\r\n polygon: {\r\n hierarchy: new cesium.PolygonHierarchy(coords),\r\n material: options.color,\r\n clampToGround: true,\r\n }\r\n }\r\n createLabel(entityOps, options, coords);\r\n var entity = new cesium.Entity(entityOps);\r\n\r\n callback(entity);\r\n }\r\n function createLabel(entityOps, options, coords) {\r\n if (options.label) {\r\n entityOps.position = cesium.BoundingSphere.fromPoints(coords).center;\r\n entityOps.label = {\r\n text: options.label,\r\n outlineColor: cesium.Color.fromCssColorString(\"#FFFFFF\"),\r\n //fillColor: cesium.Color.fromBytes.apply({}, options.fontColor),\r\n outlineWidth: 2,\r\n //font: style.font,\r\n style: cesium.LabelStyle.FILL_AND_OUTLINE,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n }\r\n if (options.fontColor)\r\n entityOps.label.fillColor = options.fontColor;\r\n if (options.fontSize)\r\n entityOps.label.font = options.fontSize + \"pt sans-serif\";\r\n }\r\n\r\n }\r\n\r\n var circleConverter = function (feature) {\r\n var self = this;\r\n var circle = {};\r\n var styles = getFeatureStyle(feature);\r\n\r\n circle.options = function () {\r\n var opt = {};\r\n\r\n var properties = {\r\n color: { prop: 'fillColor' },\r\n opacity: { prop: 'fillOpacity' },\r\n outlineColor: { prop: 'strokeColor' },\r\n outlineOpacity: { prop: 'strokeOpacity' },\r\n width: { prop: 'strokeWidth' }\r\n };\r\n\r\n setStyleProperties(styles, properties, feature);\r\n var color;\r\n if (hasOwnProperty.call(properties.color, 'val')) {\r\n if (hasOwnProperty.call(properties.opacity, 'val')) {\r\n color = toCesiumColor(properties.color.val, properties.opacity.val);\r\n } else {\r\n color = toCesiumColor(properties.color.val);\r\n }\r\n }\r\n\r\n opt.color = color;// cesium.ColorGeometryInstanceAttribute.fromColor(color);\r\n\r\n if (hasOwnProperty.call(properties.outlineColor, 'val')) {\r\n if (hasOwnProperty.call(properties.outlineOpacity, 'val')) {\r\n color = toCesiumColor(properties.outlineColor.val, properties.outlineOpacity.val);\r\n } else {\r\n color = toCesiumColor(properties.outlineColor.val);\r\n }\r\n }\r\n\r\n opt.outlineColor = color;// cesium.ColorGeometryInstanceAttribute.fromColor(color);\r\n\r\n if (hasOwnProperty.call(properties.width, 'val')) {\r\n opt.width = properties.width.val;\r\n }\r\n\r\n return opt;\r\n };\r\n\r\n circle.geometryType = function (coords, options) {\r\n\r\n return new cesium.GroundPrimitive({\r\n releaseGeometryInstances: false,\r\n geometryInstances: new cesium.GeometryInstance({\r\n id: feature.id,\r\n geometry: new cesium.CircleGeometry({\r\n center: coords[0],\r\n radius: feature.getRadius()\r\n }),\r\n attributes: {\r\n color: options.color\r\n }\r\n })\r\n });\r\n\r\n // Para obtener el contorno de círculo \r\n //var radius = feature.geometry[1];\r\n //var outlineEllipse = cesium.EllipseGeometryLibrary.computeEllipsePositions({\r\n // semiMinorAxis: radius,\r\n // semiMajorAxis: radius,\r\n // rotation: 0,\r\n // center: coords[0],\r\n // granularity: cesium.Math.toRadians(0.5)\r\n //}, false, true);\r\n\r\n //var outerPositions = cesium.Cartesian3.unpackArray(outlineEllipse.outerPositions);\r\n\r\n //var outlineSize = getPixelSize(outerPositions);\r\n //var metersPerPixel = scene.camera.getPixelSize(cesium.BoundingSphere.fromPoints(outerPositions), scene.drawingBufferWidth, scene.drawingBufferHeight);\r\n //var outlineInMeters = metersPerPixel * outlineSize;\r\n\r\n //var outlineHoleEllipse = cesium.EllipseGeometryLibrary.computeEllipsePositions({\r\n // semiMinorAxis: radius - outlineInMeters,\r\n // semiMajorAxis: radius - outlineInMeters,\r\n // rotation: 0,\r\n // center: coords[0],\r\n // granularity: cesium.Math.toRadians(0.5)\r\n //}, false, true);\r\n\r\n //var innerPositions = cesium.Cartesian3.unpackArray(outlineHoleEllipse.outerPositions);\r\n\r\n //var outlineCircleGeom = new cesium.GroundPrimitive({\r\n // geometryInstances: new cesium.GeometryInstance({\r\n // id: feature.id + 'outline',\r\n // geometry: new cesium.PolygonGeometry({\r\n // polygonHierarchy: new cesium.PolygonHierarchy(outerPositions, [new cesium.PolygonHierarchy(innerPositions)])\r\n // }),\r\n // attributes: {\r\n // color: options.outlineColor\r\n // }\r\n // })\r\n //});\r\n };\r\n\r\n return circle;\r\n };\r\n var polygonConverter = function (feature) {\r\n var polygon = {};\r\n var styles = getFeatureStyle(feature);\r\n\r\n polygon.options = function () {\r\n var opt = {};\r\n var properties = {\r\n color: { prop: 'fillColor' },\r\n opacity: { prop: 'fillOpacity' },\r\n outlineColor: { prop: 'strokeColor' },\r\n outlineOpacity: { prop: 'strokeOpacity' },\r\n width: { prop: 'strokeWidth' },\r\n fontColor: { prop: 'fontColor' },\r\n fontSize: { prop: 'fontSize' },\r\n label: { prop: 'label' },\r\n };\r\n\r\n setStyleProperties(styles, properties, feature);\r\n var color;\r\n if (hasOwnProperty.call(properties.color, 'val')) {\r\n if (hasOwnProperty.call(properties.opacity, 'val')) {\r\n color = toCesiumColor(properties.color.val, properties.opacity.val);\r\n } else {\r\n color = toCesiumColor(properties.color.val);\r\n }\r\n }\r\n\r\n opt.color = color;\r\n\r\n if (hasOwnProperty.call(properties.outlineColor, 'val')) {\r\n if (hasOwnProperty.call(properties.outlineOpacity, 'val')) {\r\n color = toCesiumColor(properties.outlineColor.val, properties.outlineOpacity.val);\r\n } else {\r\n color = toCesiumColor(properties.outlineColor.val);\r\n }\r\n }\r\n\r\n opt.outlineColor = color;\r\n\r\n if (hasOwnProperty.call(properties.width, 'val')) {\r\n opt.width = properties.width.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.label, 'val')) {\r\n opt.label = properties.label.val;\r\n\r\n if (hasOwnProperty.call(properties.fontColor, 'val')) {\r\n opt.fontColor = toCesiumColor(properties.fontColor.val);\r\n }\r\n if (hasOwnProperty.call(properties.fontSize, 'val')) {\r\n opt.fontSize = properties.fontSize.val;\r\n }\r\n }\r\n\r\n return opt;\r\n };\r\n\r\n if (feature instanceof MultiPolygon) {\r\n polygon.geometryType = function (coords, options) {\r\n return new Promise(function (resolve, reject) {\r\n var getting = [];\r\n\r\n var geomPolys = [];\r\n var geomOutlines = [];\r\n\r\n var getPolyGeom = function (polygonHierarchy) {\r\n return new cesium.GeometryInstance({\r\n id: feature.id,\r\n geometry: new cesium.PolygonGeometry({\r\n polygonHierarchy: polygonHierarchy\r\n }),\r\n attributes: {\r\n color: options.color\r\n }\r\n });\r\n };\r\n\r\n var getOutlineGeom = function (outlineCoords) {\r\n return new Promise(function (res, _rej) {\r\n createLine(feature.id, outlineCoords, { material: options.outlineColor, width: options.width }, function (entity) {\r\n geomOutlines.push(entity);\r\n res();\r\n });\r\n });\r\n };\r\n\r\n for (var i = 0; i < coords.length; i++) {\r\n let hierarchy;\r\n for (var j = 0; j < coords[i].length; j++) {\r\n if (j == 0) {\r\n getting.push(getOutlineGeom.call(this, coords[i][0]));\r\n hierarchy = new cesium.PolygonHierarchy(coords[i][0]);\r\n } else {\r\n getting.push(getOutlineGeom.call(this, coords[i][j]));\r\n hierarchy.holes.push(new cesium.PolygonHierarchy(coords[i][j]));\r\n }\r\n }\r\n\r\n geomPolys.push(getPolyGeom(hierarchy));\r\n }\r\n\r\n Promise.all(getting).then(function () {\r\n getting = [];\r\n\r\n resolve(\r\n [new cesium.GroundPrimitive({\r\n releaseGeometryInstances: false,\r\n geometryInstances: geomPolys\r\n }), geomOutlines]);\r\n }).catch(reject);\r\n });\r\n };\r\n }\r\n else if (feature instanceof Polygon) {\r\n polygon.geometryType = function (coords, options) {\r\n return new Promise(function (resolve, _reject) {\r\n if (Array.isArray(coords) && coords.length === 1 && Array.isArray(coords[0])) {\r\n coords = coords[0];\r\n }\r\n createPolygon(feature.id, coords,\r\n options, function (entity) {\r\n\r\n resolve(entity);\r\n });\r\n });\r\n };\r\n }\r\n\r\n return polygon;\r\n };\r\n var lineConverter = function (feature) {\r\n var line = {};\r\n var styles = getFeatureStyle(feature);\r\n\r\n line.options = function () {\r\n var opt = {};\r\n var properties = {\r\n color: { prop: 'strokeColor' },\r\n opacity: { prop: 'strokeOpacity' },\r\n width: { prop: 'strokeWidth' },\r\n fontColor: { prop: 'fontColor' },\r\n fontSize: { prop: 'fontSize' },\r\n label: { prop: 'label' },\r\n };\r\n\r\n setStyleProperties(styles, properties, feature);\r\n\r\n if (hasOwnProperty.call(properties.width, 'val')) {\r\n opt.width = properties.width.val;\r\n }\r\n\r\n var color;\r\n if (hasOwnProperty.call(properties.color, 'val')) {\r\n if (hasOwnProperty.call(properties.opacity, 'val')) {\r\n color = toCesiumColor(properties.color.val, properties.opacity.val);\r\n } else {\r\n color = toCesiumColor(properties.color.val);\r\n }\r\n }\r\n\r\n opt.color = color;\r\n\r\n if (hasOwnProperty.call(properties.width, 'val')) {\r\n opt.width = properties.width.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.label, 'val')) {\r\n opt.label = properties.label.val;\r\n\r\n if (hasOwnProperty.call(properties.fontColor, 'val')) {\r\n opt.fontColor = toCesiumColor(properties.fontColor.val);\r\n }\r\n if (hasOwnProperty.call(properties.fontSize, 'val')) {\r\n opt.fontSize = properties.fontSize.val;\r\n }\r\n }\r\n\r\n return opt;\r\n };\r\n\r\n if (feature instanceof MultiPolyline) {\r\n line.geometryType = function (coords, options) {\r\n return new Promise(function (resolve, reject) {\r\n var geomInstances = [];\r\n\r\n var getting = [];\r\n\r\n if (coords.length == 1) {\r\n coords = coords[0];\r\n\r\n getting.push(new Promise(function (res, _rej) {\r\n createLine(feature.id, coords, options, function (entity) {\r\n geomInstances.push(entity);\r\n res();\r\n });\r\n }));\r\n\r\n\r\n } else {\r\n coords = coords.sort(function (a, b) {\r\n if (a.length > b.length) {\r\n return -1;\r\n }\r\n if (a.length < b.length) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n var pixelSize = getPixelSize(coords[0]);\r\n for (var i = 0; i < coords.length; i++) {\r\n\r\n getting.push(new Promise(function (res, _rej) {\r\n createLine(feature.id, coords[i], options, function (entity) {\r\n geomInstances.push(entity);\r\n res();\r\n });\r\n }));\r\n }\r\n }\r\n\r\n Promise.all(getting).then(function () {\r\n getting = [];\r\n\r\n resolve(geomInstances);\r\n }).catch(reject);\r\n });\r\n };\r\n }\r\n else if (feature instanceof Polyline) {\r\n line.geometryType = function (coords, options) {\r\n return new Promise(function (resolve, _reject) {\r\n\r\n createLine(feature.id, coords, options, function (entity) {\r\n resolve(entity);\r\n });\r\n });\r\n };\r\n }\r\n\r\n return line;\r\n };\r\n var pointConverter = function (feature) {\r\n var point = {};\r\n var styles = getFeatureStyle(feature);\r\n\r\n point.options = function () {\r\n var opt = {};\r\n\r\n var properties = {\r\n rotation: { prop: 'angle' },\r\n label: { prop: 'label' },\r\n fontSize: { prop: 'fontSize' },\r\n fontColor: { prop: 'fontColor' },\r\n outlineLabelColor: { prop: 'labelOutlineColor' },\r\n outlineLabelWidth: { prop: 'labelOutlineWidth' },\r\n anchor: { prop: 'anchor' },\r\n height: { prop: 'height' },\r\n width: { prop: 'width' },\r\n url: { prop: 'url' },\r\n color: { prop: 'fillColor' },\r\n opacity: { prop: 'fillOpacity' },\r\n outlineColor: { prop: 'strokeColor' },\r\n outlineOpacity: { prop: 'strokeOpacity' },\r\n outlineWidth: { prop: 'strokeWidth' },\r\n radius: { prop: 'radius' }\r\n };\r\n\r\n setStyleProperties(styles, properties, feature);\r\n\r\n if (hasOwnProperty.call(properties.anchor, 'val')) {\r\n if (!hasOwnProperty.call(properties.url, 'val') && feature.options.url) {\r\n opt.url = feature.options.url;\r\n } else {\r\n opt.url = properties.url.val;\r\n }\r\n\r\n opt.anchor = properties.anchor.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.height, 'val')) {\r\n opt.height = properties.height.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.width, 'val')) {\r\n opt.width = properties.width.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.rotation, 'val')) {\r\n opt.rotation = properties.rotation.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.label, 'val')) {\r\n opt.label = properties.label.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.fontSize, 'val')) {\r\n opt.fontSize = properties.fontSize.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.fontColor, 'val')) {\r\n opt.fontColor = toCesiumColor(properties.fontColor.val);\r\n }\r\n\r\n if (hasOwnProperty.call(properties.outlineLabelColor, 'val')) {\r\n opt.outlineLabelColor = toCesiumColor(properties.outlineLabelColor.val);\r\n }\r\n\r\n if (hasOwnProperty.call(properties.outlineLabelWidth, 'val')) {\r\n opt.outlineLabelWidth = properties.outlineLabelWidth.val;\r\n }\r\n\r\n\r\n if (hasOwnProperty.call(properties.color, 'val')) {\r\n if (hasOwnProperty.call(properties.opacity, 'val')) {\r\n opt.color = toCesiumColor(properties.color.val, properties.opacity.val);\r\n } else {\r\n opt.color = toCesiumColor(properties.color.val);\r\n }\r\n }\r\n\r\n if (hasOwnProperty.call(properties.outlineColor, 'val')) {\r\n if (hasOwnProperty.call(properties.outlineOpacity, 'val')) {\r\n opt.outlineColor = toCesiumColor(properties.outlineColor.val, properties.outlineOpacity.val);\r\n } else {\r\n opt.outlineColor = toCesiumColor(properties.outlineColor.val);\r\n }\r\n }\r\n\r\n if (hasOwnProperty.call(properties.outlineWidth, 'val')) {\r\n opt.outlineWidth = properties.outlineWidth.val;\r\n }\r\n\r\n if (hasOwnProperty.call(properties.radius, 'val')) {\r\n opt.radius = properties.radius.val;\r\n }\r\n\r\n return opt;\r\n };\r\n\r\n if (feature instanceof Marker) {\r\n point.geometryType = function (coords, options) {\r\n var billboard = {\r\n name: feature.id,\r\n position: coords[0],\r\n billboard: {\r\n image: options.url,\r\n width: options.width,\r\n height: options.height,\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n };\r\n\r\n if (options.anchor && options.anchor.length > 0) {\r\n billboard.billboard.pixelOffset = new cesium.Cartesian2(options.anchor[0], options.anchor[1]);\r\n }\r\n\r\n if (!options.label) {\r\n return new cesium.Entity(billboard);\r\n } else {\r\n billboard.label = {\r\n text: options.label,\r\n font: '14pt sans-serif',\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n horizontalOrigin: cesium.HorizontalOrigin.LEFT,\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n fillColor: options.fontColor,\r\n showBackground: true,\r\n eyeOffset: new cesium.Cartesian3(3000, 0, -100)\r\n };\r\n\r\n return new cesium.Entity(billboard);\r\n }\r\n };\r\n }\r\n else if (feature instanceof Point) {\r\n var pinBuilder = new cesium.PinBuilder();\r\n\r\n point.geometryType = function (coords, options) {\r\n var text = options.label;\r\n\r\n switch (true) {\r\n case (text && /^([A-Z])\\w+$/gi.test(text)):\r\n case (text && !/^[0-9]*\\-{0,1}[a-z]{0,4}$/gi.test(text)):\r\n\r\n return new cesium.Entity({\r\n name: feature.id,\r\n position: coords[0],\r\n label: {\r\n text: options.label,\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n horizontalOrigin: cesium.HorizontalOrigin.CENTER,\r\n verticalOrigin: cesium.VerticalOrigin.BASELINE,\r\n font: '16' + 'px san-serif Helvetica',\r\n fillColor: cesium.Color.BLACK,\r\n outlineColor: cesium.Color.WHITE,\r\n outlineWidth: 5,\r\n style: cesium.LabelStyle.FILL_AND_OUTLINE\r\n }\r\n });\r\n\r\n case (/^[0-9]*\\-{0,1}[a-z]{0,4}$/gi.test(text)):\r\n return new cesium.Entity({\r\n name: feature.id,\r\n position: coords[0],\r\n billboard: {\r\n image: pinBuilder.fromText(text, options.fontColor, 48).toDataURL(),\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n\r\n case options.radius && options.radius > 0:\r\n\r\n return new cesium.Entity({\r\n name: feature.id,\r\n position: coords[0],\r\n point: {\r\n color: options.color,\r\n pixelSize: (options.radius * 2) - options.outlineWidth,\r\n outlineWidth: options.outlineWidth,\r\n outlineColor: options.outlineColor,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n default:\r\n return new cesium.Entity({\r\n name: feature.id,\r\n position: coords[0],\r\n billboard: {\r\n image: pinBuilder.fromColor(cesium.Color.fromCssColorString(feature.options.fillColor ? feature.options.fillColor : TC.Cfg.styles.point.fillColor), 32).toDataURL(),\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n horizontalOrigin: cesium.HorizontalOrigin.CENTER,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n }\r\n };\r\n }\r\n\r\n return point;\r\n };\r\n\r\n this.convert = function (scn, feature, sourceCrs, targetCrs) {\r\n const self = this;\r\n scene = scn;\r\n\r\n var byPromise = false;\r\n var cartesians = [];\r\n var toCartesian = function (coord, arr) {\r\n if (!Array.isArray(coord)) {\r\n return;\r\n }\r\n\r\n if (sourceCrs !== targetCrs) {\r\n coord = TC.Util.reproject(coord, sourceCrs, targetCrs);\r\n }\r\n\r\n arr.push(coord.length > 2 ?\r\n cesium.Cartesian3.fromDegrees(coord[0], coord[1], coord[2]) :\r\n cesium.Cartesian3.fromDegrees(coord[0], coord[1]));\r\n };\r\n\r\n var obj;\r\n var geometry = feature.geometry;\r\n var converter;\r\n\r\n var points,\r\n ringsOrPolylines,\r\n polygons;\r\n\r\n var forPoints = function (points, arr) {\r\n if (Array.isArray(points)) {\r\n for (var i = 0; i < points.length; i++) {\r\n toCartesian(points[i], arr);\r\n }\r\n }\r\n };\r\n var forRingsOrPolylines = function (ringsOrPolylines, arr) {\r\n if (Array.isArray(ringsOrPolylines)) {\r\n for (var i = 0; i < ringsOrPolylines.length; i++) {\r\n arr.push([]);\r\n forPoints(ringsOrPolylines[i], arr[arr.length - 1]);\r\n }\r\n }\r\n };\r\n var forPolygons = function (polygons) {\r\n if (Array.isArray(polygons)) {\r\n for (var i = 0; i < polygons.length; i++) {\r\n cartesians.push([]);\r\n forRingsOrPolylines(polygons[i], cartesians[cartesians.length - 1]);\r\n }\r\n }\r\n };\r\n\r\n switch (true) {\r\n case feature instanceof MultiPolygon:\r\n polygons = geometry;\r\n if (Array.isArray(polygons)) {\r\n forPolygons(polygons);\r\n\r\n converter = polygonConverter.call(self, feature);\r\n byPromise = true;\r\n }\r\n break;\r\n case feature instanceof Circle:\r\n feature = feature.toPolygon();\r\n geometry = feature.geometry;\r\n case feature instanceof Polygon || feature instanceof MultiPolyline:\r\n ringsOrPolylines = geometry;\r\n if (Array.isArray(ringsOrPolylines)) {\r\n forRingsOrPolylines(ringsOrPolylines, cartesians);\r\n\r\n if (feature instanceof Polygon) {\r\n converter = polygonConverter(feature);\r\n byPromise = true;\r\n }\r\n else if (feature instanceof MultiPolyline) {\r\n converter = lineConverter(feature);\r\n byPromise = true;\r\n }\r\n }\r\n break;\r\n case feature instanceof Polyline:\r\n points = geometry;\r\n if (Array.isArray(points)) {\r\n forPoints(points, cartesians);\r\n\r\n converter = lineConverter(feature);\r\n byPromise = true;\r\n }\r\n break;\r\n case feature instanceof Marker:\r\n points = [geometry];\r\n forPoints(points, cartesians);\r\n\r\n converter = pointConverter(feature);\r\n break;\r\n case feature instanceof Point:\r\n points = [geometry];\r\n forPoints(points, cartesians);\r\n\r\n converter = pointConverter(feature);\r\n break;\r\n }\r\n\r\n if (cartesians.length == 0) {\r\n return null;\r\n }\r\n\r\n obj = {\r\n id: feature.id,\r\n attributes: feature.data,\r\n boundigSphere: cesium.BoundingSphere.fromPoints(cartesians)\r\n };\r\n\r\n if (!byPromise) { // si estamos pintando líneas, obtenemos posiciones con altura\r\n obj.geometry = converter.geometryType(cartesians, converter.options());\r\n } else {\r\n obj.geometry = function (provider) {\r\n converter.provider = provider;\r\n return converter.geometryType(cartesians, converter.options());\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n };\r\n\r\n const currentMapCfg = {\r\n baseMap: '',\r\n baseMaps: [],\r\n baseVector: ''\r\n };\r\n const setMustReprojectOfBaseLayers = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n var isBaseRaster = map.baseLayer instanceof Raster;\r\n\r\n if (isBaseRaster) {\r\n if (!isCompatible(map.baseLayer, self.view3D.crs)) {\r\n var fallbackLayer = map.baseLayer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n fallbackLayer.getCapabilitiesPromise().then(function () {\r\n if (!fallbackLayer.isCompatible(self.view3D.crs)) {\r\n map.toast(self.getLocaleString('threed.baseLayerNoCompatible', { name: map.baseLayer.layerNames }));\r\n }\r\n });\r\n }\r\n }\r\n } else {\r\n currentMapCfg.baseVector = map.baseLayer;\r\n }\r\n\r\n if (currentMapCfg.baseMaps.length === 0) {\r\n\r\n Promise.all(map.baseLayers.map(function (baseLayer) {\r\n if (!isCompatible(baseLayer, self.view3D.crs)) {\r\n var fallbackLayer = baseLayer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n return fallbackLayer.getCapabilitiesPromise().then(function () {\r\n return !fallbackLayer.isCompatible(self.view3D.crs);\r\n });\r\n } else {\r\n return Promise.resolve(true);\r\n }\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n })).then(function (results) {\r\n if (results.length > 0) {\r\n for (var i = 0; i < map.baseLayers.length; i++) {\r\n if (map.baseLayers[i]) {\r\n map.baseLayers[i].mustReproject = results[i];\r\n }\r\n }\r\n\r\n //map.trigger(Consts.event.VIEWCHANGE, { view: Consts.view.THREED });\r\n }\r\n\r\n resolve();\r\n }).catch(reject);\r\n }\r\n\r\n currentMapCfg.baseMap = isBaseRaster ? map.baseLayer : self.Consts.BLANK_BASE;\r\n });\r\n };\r\n\r\n viewProto.init = function (options) {\r\n const self = this;\r\n\r\n self.events = self.map.$events;\r\n\r\n self.selectors = {\r\n divThreedMap: options.div\r\n };\r\n\r\n if (options.terrain) {\r\n self.terrain = options.terrain;\r\n } else {\r\n self.terrain = {\r\n url: \"//idena.navarra.es/cesiumTerrain/2017/epsg4326/5m/\",\r\n noDataValue: 0,\r\n attributions: {\r\n name: \"Álvaro Huarte\",\r\n site: \"https://github.com/ahuarte47\"\r\n }\r\n };\r\n }\r\n\r\n if (options.terrainFallback)\r\n self.terrainFallback = (Array.isArray(options.terrainFallback) ? options.terrainFallback : [options.terrainFallback]).map((tfb) => {\r\n if (tfb && (!tfb.url || !(tfb.coverageName || tfb.layerName) || tfb.noDataValue === undefined)) {\r\n return {\r\n url: \"https://image.discomap.eea.europa.eu/arcgis/services/Elevation/EUElev_DEM_V11/MapServer/WCSServer\",\r\n coverageName: \"1\",\r\n format: \"GeoTIFF\",\r\n noDataValue: -32767\r\n }\r\n }\r\n else {\r\n return {\r\n url: tfb.url.trim(),\r\n layerName: tfb.coverageName || tfb.layerName,\r\n format: tfb.format,\r\n noDataValue: tfb.noDataValue,\r\n type: tfb.type\r\n }\r\n }\r\n })\r\n\r\n if (options.controls) {\r\n self.allowedControls = options.controls;\r\n }\r\n\r\n self.mapView = new MapView(self.map, self);\r\n\r\n self.map.on(Consts.event.PROJECTIONCHANGE, function (_e) {\r\n self.mapView.metersPerUnit = self.map.getMetersPerUnit();\r\n });\r\n\r\n self.map.view3D = self.view3D;\r\n\r\n /* provisional: no dispongo de getRenderedHtml porque ya no es un control */\r\n self.getRenderedHtml(self.CLASS + '-overlay', {}, function (html) {\r\n const parser = new DOMParser();\r\n self.overlay = parser.parseFromString(html, 'text/html').body.firstChild;\r\n });\r\n };\r\n\r\n viewProto.apply = function (options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n\r\n if (options.map) {\r\n self.map = options.map;\r\n\r\n self.map.activeControl?.deactivate();\r\n\r\n if (!self.map.view3D) {\r\n var viewName = self.VIEWNAME = self.VIEWNAME.substr(0, 1).toLowerCase() + self.VIEWNAME.substr(1);\r\n if (self.map.options.views && hasOwnProperty.call(self.map.options.views, viewName)) {\r\n self.init(self.map.options.views[viewName]);\r\n } else {\r\n throw Error('Falta configuración de la vista');\r\n }\r\n }\r\n\r\n self.view3D.view2DCRS = options.map.crs;\r\n\r\n options.map.on(Consts.event.PROJECTIONCHANGE, function (e) {\r\n self.view3D.view2DCRS = e.newCrs;\r\n });\r\n } else {\r\n throw Error('Falta referencia al mapa 2D');\r\n }\r\n\r\n if (options.state) {\r\n self.map.toast(TC.Util.getLocaleString(self.map.options.locale, 'threed.apply3DState'), { type: Consts.msgType.INFO });\r\n }\r\n\r\n if (!self.waiting) {\r\n self.waiting = self.map.getLoadingIndicator().addWait();\r\n }\r\n\r\n if (!self.ctrlsToMng) {\r\n var ctls = [];\r\n for (var i = 0, len = self.allowedControls.length; i < len; i++) {\r\n var ctl = self.allowedControls[i];\r\n ctl = ctl.substr(0, 1).toUpperCase() + ctl.substr(1);\r\n var ctlsOnMap = self.map.getControlsByClass('TC.control.' + ctl);\r\n if (ctlsOnMap.length === 0) {\r\n ctl = ctl.toUpperCase();\r\n ctlsOnMap = self.map.getControlsByClass('TC.control.' + ctl);\r\n }\r\n ctls = ctls.concat(ctlsOnMap);\r\n }\r\n self.map.on(Consts.event.CONTROLADD, function (e) {\r\n //var instance = new Function(\"return new \" + ctrlClass + \"()\")();\r\n if (self.allowedControls.some((ctl) => e.control instanceof TC.control[ctl.substr(0, 1).toUpperCase() + ctl.substr(1)])) {\r\n self.ctrlsToMng.push(e.control);\r\n }\r\n\r\n });\r\n\r\n self.ctrlsToMng = ctls;\r\n }\r\n\r\n self.map.on3DView = true;\r\n\r\n self.map.div.classList.add(Consts.classes.THREED);\r\n\r\n self.divThreedMap = document.querySelector('#' + self.selectors.divThreedMap);\r\n self.divThreedMap.classList.add(self.classes.MAP3D, self.classes.LOADING);\r\n\r\n self.view3D.container = self.divThreedMap;\r\n\r\n const applyEnd = function () {\r\n console.log('Llega a applyEnd');\r\n\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n\r\n delete self.waiting;\r\n\r\n if (options.callback) {\r\n options.callback();\r\n }\r\n };\r\n\r\n try {\r\n self.view3D.loadViewer.call(self)\r\n .then(function () {\r\n\r\n self.divThreedMap.classList.remove(self.CLASS + '-div-fadeOut');\r\n self.divThreedMap.classList.add(self.CLASS + '-div-fadeIn');\r\n self.mapView.viewHTML.classList.remove(self.CLASS + '-div-fadeIn');\r\n self.mapView.viewHTML.classList.add(self.CLASS + '-div-fadeOut');\r\n\r\n if (!options.state) {\r\n self.divThreedMap.classList.remove(self.classes.LOADING);\r\n }\r\n\r\n // mapas de fondo y capas\r\n setMustReprojectOfBaseLayers.call(self, self.map)\r\n .then(function () {\r\n // extent\r\n self.view3D.setCameraFromMapView.call(self);\r\n\r\n // mapa de fondo\r\n self.view3D.setBaseLayer.call(self, self.map.baseLayer);\r\n\r\n // capas de trabajo\r\n self.map.workLayers.filter(function (elem) {\r\n return elem.type === Consts.layerType.WMTS || elem.type === Consts.layerType.WMS;\r\n }).reverse().forEach(function (layer) {\r\n self.view3D.addLayer.call(self, layer);\r\n });\r\n\r\n self.viewer.readyPromise.then(function () {\r\n\r\n if (!self.view3D.cameraControls) self.view3D.cameraControls = new CameraControls(self);\r\n else self.view3D.cameraControls.render.call(self.view3D.cameraControls);\r\n\r\n if (!options.animateRendering && !options.state) {\r\n options.animateRendering = true;\r\n }\r\n\r\n if (options.state) {\r\n\r\n self.divThreedMap.classList.remove(self.classes.LOADING);\r\n\r\n var camera = self.view3D.cameraControls.getCamera();\r\n camera.flyTo({\r\n destination: cesium.Cartesian3.fromRadians(options.state.cp[0], options.state.cp[1], options.state.cp[2]),\r\n orientation: {\r\n heading: options.state.chpr[0],\r\n pitch: options.state.chpr[1],\r\n roll: options.state.chpr[2]\r\n },\r\n complete: applyEnd\r\n });\r\n\r\n } else if (options.animateRendering) {\r\n let angle = cesium.Math.toRadians(50);\r\n let pickBP = pickBottomPoint(self.viewer.scene);\r\n\r\n const readyPickBP = function (_pickBP) {\r\n let matrixPickBP = cesium.Matrix4.fromTranslation(_pickBP);\r\n\r\n self.view3D.rotateAroundAxis(self.viewer.scene.camera, -angle,\r\n self.viewer.scene.camera.right, matrixPickBP, {\r\n duration: 2000,\r\n callback: animationCallback\r\n });\r\n };\r\n\r\n const animationCallback = function () {\r\n cesium.Camera.DEFAULT_VIEW_RECTANGLE = self.view3D.initialRectangle = self.viewer.camera.computeViewRectangle();\r\n cesium.Camera.DEFAULT_VIEW_FACTOR = 0;\r\n\r\n applyEnd();\r\n };\r\n\r\n if (pickBP) {\r\n readyPickBP(pickBP);\r\n } else { /* revisado: si llegamos aquí, es que el terreno está listo pero del canvas al terreno da null, esperamos un poco más */\r\n // parece que es cosa de tiempos. Añado un setInterval\r\n\r\n let checkPickBPProcess;\r\n let startTime = new Date().getTime();\r\n\r\n const checkPickBottomPoint = function () {\r\n let _pickBP = pickBottomPoint(self.viewer.scene);\r\n if (_pickBP) {\r\n clearInterval(checkPickBPProcess);\r\n readyPickBP(_pickBP);\r\n } else {\r\n if (new Date().getTime() - startTime > 15000) {\r\n clearInterval(checkPickBPProcess);\r\n // aunque sea nos centramos en el extent inicial\r\n let homeButton = document.querySelectorAll('.' + TC.control.NavBarHome.prototype.CLASS + '-btn');\r\n if (homeButton && homeButton.length > 0) {\r\n homeButton[0].click();\r\n }\r\n animationCallback();\r\n return;\r\n }\r\n }\r\n };\r\n\r\n checkPickBPProcess = setInterval(checkPickBottomPoint, 50);\r\n }\r\n\r\n } else {\r\n applyEnd();\r\n }\r\n\r\n self.map.trigger(Consts.event.VIEWCHANGE, { view: Consts.view.THREED });\r\n\r\n self.events.on(Consts.event.TERRAINLOADED, function () {\r\n\r\n const addHeight = function (position) {\r\n var cartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\r\n var height = self.viewer.scene.globe.getHeight(cartographic) || 0;\r\n var finalCartographic = {\r\n longitude: cartographic.longitude,\r\n latitude: cartographic.latitude,\r\n height: cartographic.height + height\r\n };\r\n\r\n return cesium.Ellipsoid.WGS84.cartographicToCartesian(finalCartographic);\r\n };\r\n\r\n var markers = self.viewer.entities.values.filter(function (entity) {\r\n return entity.billboard;\r\n });\r\n\r\n if (markers.length > 0) {\r\n markers.forEach(function (marker) {\r\n marker.position = addHeight(cesium.Property.getValueOrUndefined(marker.position, cesium.JulianDate.now));\r\n });\r\n }\r\n\r\n if (self.viewer.billboardCollection) {\r\n\r\n for (var i = 0; i < self.viewer.billboardCollection.length; i++) {\r\n self.viewer.billboardCollection.get(i).position = addHeight(self.viewer.billboardCollection.get(i).position);\r\n }\r\n\r\n self.viewer.scene.requestRender();\r\n }\r\n\r\n });\r\n }.bind(self))\r\n .catch(() => { console.log('3051'); applyEnd(); });\r\n })\r\n .catch(() => { console.log('3053'); applyEnd(); });\r\n })\r\n .catch(() => { console.log('3055'); applyEnd(); });\r\n } catch (error) {\r\n applyEnd();\r\n\r\n throw error;\r\n }\r\n };\r\n\r\n viewProto.unapply = function (options) {\r\n const self = this;\r\n\r\n if (!self.waiting) {\r\n self.waiting = self.map.getLoadingIndicator().addWait();\r\n }\r\n\r\n self.map.activeControl?.deactivate();\r\n\r\n self.map.on3DView = false;\r\n\r\n //self.map.view3D = null;\r\n if (self.viewer && self.viewer.trackedEntity) {\r\n self.view3D.linked2DControls.geolocation.wrap.simulateTrackEnd();\r\n }\r\n\r\n self.view3D.cameraControls.resetRotation({ duration: 1000 })\r\n .then(function () {\r\n\r\n var animationCallback = function () {\r\n\r\n self.map.div.classList.remove(Consts.classes.THREED);\r\n\r\n /* atribuciones del terreno */\r\n self.map.trigger(Consts.event.TERRAINPROVIDERREMOVE, { terrainProvider: self.viewer.scene.terrainProvider });\r\n\r\n if (self.viewer.scene.terrainProvider.fallbackProvider) {\r\n self.viewer.scene.terrainProvider.fallbackProvider.forEach(function (provider) {\r\n self.map.trigger(Consts.event.TERRAINPROVIDERREMOVE, { terrainProvider: provider });\r\n });\r\n }\r\n\r\n self.view3D.setViewFromCameraView.call(self).then(function () {\r\n self.divThreedMap.classList.remove(self.classes.MAP3D, self.CLASS + '-div-fadeIn');\r\n self.divThreedMap.classList.add(self.CLASS + '-div-fadeOut');\r\n self.mapView.viewHTML.classList.remove(self.CLASS + '-div-fadeOut');\r\n self.mapView.viewHTML.classList.add(self.CLASS + '-div-fadeIn');\r\n\r\n\r\n\r\n self.view3D.destroy.call(self);\r\n\r\n\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n delete self.waiting;\r\n\r\n if (options.callback) {\r\n options.callback();\r\n }\r\n });\r\n\r\n self.mapView.setRotation(0);\r\n if (self._ovMap) {\r\n self._ovMap.wrap.draw3DCamera(null);\r\n }\r\n };\r\n\r\n var bottom = pickBottomPoint(self.viewer.scene);\r\n var transform = cesium.Matrix4.fromTranslation(bottom);\r\n var angle = computeAngleToZenith(self.viewer.scene, bottom);\r\n\r\n self.view3D.rotateAroundAxis(self.viewer.scene.camera, -angle, self.viewer.scene.camera.right, transform, {\r\n duration: 1500,\r\n callback: animationCallback\r\n });\r\n })\r\n .catch(function (e) {\r\n throw (e);\r\n });\r\n };\r\n\r\n viewProto.view3D = (function () {\r\n\r\n let _startDragPos = null;\r\n\r\n const rasterConverter = new RasterConverter(/(EPSG\\:?4326)/i);\r\n const featureConverter = new FeatureConverter();\r\n\r\n const addFeature = function (csFeature) {\r\n var addedFeature = csFeature;\r\n switch (true) {\r\n case csFeature instanceof cesium.GroundPrimitive: {\r\n this.viewer.scene.groundPrimitives.add(csFeature);\r\n break;\r\n }\r\n case csFeature instanceof Object && hasOwnProperty.call(csFeature, 'billboard'): {\r\n if (!this.viewer.billboardCollection) {\r\n this.viewer.billboardCollection = this.viewer.scene.primitives.add(new cesium.BillboardCollection({\r\n scene: this.viewer.scene\r\n }));\r\n }\r\n\r\n var billboardAtCollection = this.viewer.billboardCollection.add({\r\n position: csFeature.position,\r\n image: csFeature.billboard.image,\r\n verticalOrigin: csFeature.billboard.verticalOrigin,\r\n heightReference: csFeature.billboard.heightReference,\r\n id: csFeature.billboard.id\r\n });\r\n\r\n addedFeature = billboardAtCollection;\r\n break;\r\n }\r\n case csFeature instanceof Object: {\r\n addedFeature = this.viewer.entities.getById(csFeature.id);\r\n if (!addedFeature) {\r\n addedFeature = this.viewer.entities.add(csFeature);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n this.viewer.scene.requestRender();\r\n\r\n return addedFeature;\r\n };\r\n const linkFeature = function (map, feature2D, feature3D) {\r\n if (!hasOwnProperty.call(map.vector2DFeatures, feature2D.layer.id)) {\r\n map.vector2DFeatures[feature2D.layer.id] = {};\r\n map.vector2DFeatures[feature2D.layer.id][feature2D.id] = [feature3D];\r\n } else {\r\n if (!hasOwnProperty.call(map.vector2DFeatures[feature2D.layer.id], feature2D.id)) {\r\n map.vector2DFeatures[feature2D.layer.id][feature2D.id] = [feature3D];\r\n } else {\r\n map.vector2DFeatures[feature2D.layer.id][feature2D.id].push(feature3D);\r\n }\r\n }\r\n if (feature3D instanceof cesium.Entity) {\r\n feature2D.wrap.feature3D = feature3D;\r\n feature3D._wrap = { parent: feature2D };\r\n //feature2D.setCoordinates(feature2D.getCoordinates({ geometryCrs: map.view2DCRS, crs: map.crs }));\r\n }\r\n };\r\n\r\n const listenTo = [\r\n Consts.event.BEFOREBASELAYERCHANGE, Consts.event.BASELAYERCHANGE,\r\n Consts.event.LAYERADD, Consts.event.LAYERREMOVE, Consts.event.LAYERVISIBILITY, Consts.event.LAYEROPACITY, Consts.event.LAYERORDER,\r\n Consts.event.FEATUREADD, Consts.event.FEATUREREMOVE, Consts.event.FEATURESCLEAR\r\n /*, Consts.event.ZOOM no encuentro en qué casos debemos escuchar el evento ZOOM de 2D, solo trae problemas */, Consts.event.ZOOMTO];\r\n\r\n const event2DHandler = function (e) {\r\n var self = this;\r\n\r\n switch (true) {\r\n case e.type == Consts.event.BEFOREBASELAYERCHANGE:\r\n if (!self.waiting)\r\n self.waiting = self.map.getLoadingIndicator().addWait();\r\n break;\r\n case e.type == Consts.event.BASELAYERCHANGE: {\r\n self.view3D.setBaseLayer.call(self, e.layer);\r\n break;\r\n }\r\n case e.type == Consts.event.LAYERADD: {\r\n self.view3D.addLayer.call(self, e.layer);\r\n break;\r\n }\r\n case e.type == Consts.event.LAYERREMOVE: {\r\n self.view3D.removeLayer.call(self, e.layer);\r\n break;\r\n }\r\n case e.type == Consts.event.LAYERVISIBILITY: {\r\n self.view3D.setRenderOptionsLayer.call(self, e.layer, { visibility: e.layer.getVisibility() });\r\n break;\r\n }\r\n case e.type == Consts.event.LAYEROPACITY: {\r\n self.view3D.setRenderOptionsLayer.call(self, e.layer, { opacity: e.layer.getOpacity() });\r\n self.viewer.scene.requestRender();\r\n break;\r\n }\r\n case e.type == Consts.event.LAYERORDER: {\r\n for (var i = 0; i < self.view3D.workLayers.length; i++) {\r\n if (self.view3D.workLayers[i].imageryProvider && self.view3D.workLayers[i].imageryProvider.layers.join(',') === e.layer.names.join(',')) {\r\n\r\n if (e.oldIndex > e.newIndex) {\r\n const positions = e.oldIndex - e.newIndex;\r\n for (let p = 0; p < positions; p++) {\r\n self.viewer.scene.imageryLayers.lower(self.view3D.workLayers[i]);\r\n }\r\n\r\n } else {\r\n const positions = e.newIndex - e.oldIndex;\r\n for (let p = 0; p < positions; p++) {\r\n self.viewer.scene.imageryLayers.raise(self.view3D.workLayers[i]);\r\n }\r\n }\r\n\r\n self.view3D.workLayers.splice(e.newIndex, 0, self.view3D.workLayers.splice(e.oldIndex, 1)[0]);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case e.type == Consts.event.FEATUREADD: {\r\n //self.view3D.addFeature.call(self.view3D, e.feature);\r\n break;\r\n }\r\n case e.type == Consts.event.FEATUREREMOVE: {\r\n\r\n if (self.view3D.vector2DFeatures && hasOwnProperty.call(self.view3D.vector2DFeatures, e.layer.id)) {\r\n\r\n const remove = function (feature) {\r\n if (hasOwnProperty.call(self.view3D.vector2DFeatures[e.layer.id], feature.id)) {\r\n var threedFeature = self.view3D.vector2DFeatures[e.layer.id][feature.id];\r\n threedFeature.forEach(tdf => self.view3D.removeFeature.call(self, tdf));\r\n\r\n delete self.view3D.vector2DFeatures[e.layer.id][feature.id];\r\n }\r\n };\r\n\r\n if (e.feature instanceof Array) {\r\n e.feature.forEach(remove);\r\n } else {\r\n remove(e.feature);\r\n }\r\n }\r\n break;\r\n }\r\n case e.type == Consts.event.FEATURESCLEAR: {\r\n\r\n self.view3D.viewer.dataSources.getByName(\"drawing\").forEach((ds) => {\r\n ds.entities.removeAll();\r\n });\r\n\r\n if (self.view3D.vector2DFeatures && hasOwnProperty.call(self.view3D.vector2DFeatures, e.layer.id)) {\r\n\r\n for (var featureId in self.view3D.vector2DFeatures[e.layer.id]) {\r\n var threedFeature = self.view3D.vector2DFeatures[e.layer.id][featureId];\r\n threedFeature.forEach(tdf => self.view3D.removeFeature.call(self, tdf));\r\n\r\n delete self.view3D.vector2DFeatures[e.layer.id][featureId];\r\n }\r\n }\r\n\r\n break;\r\n }\r\n case e.type == Consts.event.ZOOM: {\r\n if (self.view3D.cameraControls && !self.view3D.cameraControls.moving) {\r\n\r\n var width = self.view3D.viewer.scene.canvas.clientWidth;\r\n var height = self.view3D.viewer.scene.canvas.clientHeight;\r\n\r\n\r\n /* Si hemos llegado aquí y hay un cambio en el tamaño del canvas, \r\n viene el evento del resize canvas del mapa de 2D así que paso y no hago nada */\r\n if (!self.view3D._canvasClientHeight ||\r\n !self.view3D._canvasClientWidth ||\r\n\r\n width !== self.view3D._canvasClientWidth ||\r\n height !== self.view3D._canvasClientHeight) {\r\n\r\n if (!self.view3D._canvasClientWidth) {\r\n self.view3D._canvasClientWidth = self.view3D.viewer.scene.canvas.clientWidth;\r\n }\r\n\r\n if (!self.view3D._canvasClientHeight) {\r\n self.view3D._canvasClientHeight = self.view3D.viewer.scene.canvas.clientHeight;\r\n }\r\n\r\n self.view3D._canvasClientWidth = width;\r\n self.view3D._canvasClientHeight = height;\r\n\r\n return;\r\n }\r\n\r\n self.view3D.flyToMapCoordinates.call(self, self.mapView.getCenter());\r\n }\r\n break;\r\n }\r\n case e.type == Consts.event.ZOOMTO: {\r\n\r\n if (self.lastZoom && performance.now() - self.lastZoom < 50) {\r\n return;\r\n }\r\n self.lastZoom = performance.now();\r\n\r\n let rectangle = cesium.Rectangle.fromDegrees(...e.extent);\r\n self.view3D.flyToRectangle.call(self, rectangle);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n /* geolocation */\r\n const geolocation_newPosition = function () {\r\n var self = this;\r\n\r\n if (!self.map.on3DView) {\r\n return;\r\n }\r\n\r\n if (!self.view3D.geotrackingEntity) {\r\n var geolocation2D = self.view3D.linked2DControls.geolocation;\r\n var track = geolocation2D.geotrackingLayer.features.filter(function (feature) {\r\n return feature instanceof Polyline;\r\n });\r\n\r\n if (track && track.length > 0) {\r\n\r\n var positions = [];\r\n const positionCallback = new cesium.CallbackProperty(function (_time, _result) {\r\n if (track[0].geometry.length > positions.length) {\r\n var newCartographicPositions = track[0].geometry.slice(positions.length).map(function (coordinate) {\r\n var reprojected = coordinate;\r\n\r\n if (this.view3D.view2DCRS !== this.view3D.crs) {\r\n reprojected = TC.Util.reproject(coordinate, this.view3D.view2DCRS, this.view3D.crs);\r\n }\r\n\r\n return cesium.Cartographic.fromDegrees(reprojected[0], reprojected[1], coordinate[2]);\r\n }.bind(this));\r\n\r\n var updatedPositions = [];\r\n if (newCartographicPositions instanceof Array) {\r\n updatedPositions = cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(newCartographicPositions);\r\n } else {\r\n updatedPositions = [cesium.Ellipsoid.WGS84.cartographicToCartesian(newCartographicPositions)];\r\n }\r\n\r\n positions = positions.concat(updatedPositions);\r\n return positions;\r\n }\r\n\r\n return positions;\r\n\r\n }.bind(this), false);\r\n\r\n var entityGeotracking = new cesium.Entity({\r\n id: \"geotrackingEntity\",\r\n polyline: {\r\n positions: positionCallback,\r\n clampToGround: true,\r\n width: 3,\r\n material: new cesium.PolylineDashMaterialProperty({\r\n color: new cesium.CallbackProperty(function (_time, _result) {\r\n self.viewer.scene.requestRender();\r\n return cesium.Color.fromAlpha(new cesium.Color(0, 255, 209), geolocation2D.track.renderTrack.checked ? 1 : 0);\r\n }.bind(this), false),\r\n gapColor: cesium.Color.TRANSPARENT\r\n })\r\n }\r\n });\r\n\r\n self.view3D.geotrackingEntity = self.viewer.entities.add(entityGeotracking);\r\n self.viewer.scene.requestRender();\r\n }\r\n }\r\n };\r\n const geolocation_videoControls = function (event) {\r\n var self = this;\r\n\r\n var geolocation2D = self.view3D.linked2DControls.geolocation;\r\n switch (true) {\r\n case geolocation2D.const.event.IMPORTEDTRACK.indexOf(event.type) > -1:\r\n case event.target.className.indexOf('draw') > -1 && event.target.parentElement.classList.contains(geolocation2D.const.className.SELECTEDTRACK):\r\n case !(event.target.parentElement && event.target.parentElement.classList.contains(geolocation2D.const.className.SELECTEDTRACK)):\r\n case event.target.className.indexOf('stop') > -1:\r\n\r\n if (self.map.on3DView) {\r\n self.viewer.clock.shouldAnimate = false;\r\n self.viewer.clock.currentTime = cesium.JulianDate.fromDate(new Date());\r\n }\r\n\r\n if (self.view3D.trackDataSource) {\r\n if (self.view3D.trackDataSource.length > 0) {\r\n var entity = self.view3D.trackDataSource.get(0).entities.values[0];\r\n self.viewer.entities.removeById(entity.id);\r\n }\r\n\r\n self.view3D.trackDataSource.destroy();\r\n delete self.view3D.trackDataSource;\r\n }\r\n\r\n geolocation2D.clearChartProgress();\r\n\r\n if (event.custom) {\r\n const selectedTrackItem = geolocation2D.getSelectedTrackItem();\r\n if (selectedTrackItem) {\r\n selectedTrackItem.querySelector(geolocation2D.const.selector.STOP).click();\r\n }\r\n }\r\n break;\r\n case event.target.classList.contains(geolocation2D.const.className.PLAY):\r\n self.viewer.clock.shouldAnimate = false;\r\n break;\r\n case event.target.classList.contains(geolocation2D.const.className.PAUSE):\r\n self.viewer.clock.shouldAnimate = true;\r\n break;\r\n }\r\n };\r\n /* fin geolocation */\r\n\r\n const alterAllowedControls = function (view) {\r\n var self = this;\r\n const ctrlsToMngCLASS = self.ctrlsToMng.map(function (ctrl) { return ctrl.CLASS });\r\n\r\n self.map.controls.forEach(function (mapCtrl) {\r\n if (ctrlsToMngCLASS.indexOf(mapCtrl.CLASS) < 0) {\r\n switch (true) {\r\n case (Consts.view.DEFAULT == view):\r\n mapCtrl.enable();\r\n break;\r\n case (Consts.view.THREED == view):\r\n mapCtrl.disable();\r\n break;\r\n }\r\n }\r\n });\r\n\r\n switch (true) {\r\n case (Consts.view.DEFAULT == view):\r\n document.querySelectorAll('[data-no-3d]').forEach(function (elm) {\r\n elm.classList.remove(Consts.classes.THREED_HIDDEN);\r\n });\r\n self.ctrlsToMng.forEach(function (ctl) {\r\n ctl.div.classList.remove(Consts.classes.THREED);\r\n });\r\n break;\r\n case (Consts.view.THREED == view):\r\n document.querySelectorAll('[data-no-3d]').forEach(function (elm) {\r\n elm.classList.add(Consts.classes.THREED_HIDDEN);\r\n });\r\n self.ctrlsToMng.forEach(function (ctl) {\r\n ctl.div.classList.add(Consts.classes.THREED);\r\n });\r\n break;\r\n }\r\n var isDragging = false;\r\n var draggingFeature = null;\r\n const arrayDePuntos = [];//temporalmente aqui\r\n const onLeftClickOnCanvas = (movement) => {\r\n\r\n // Si estamos anclados a una entidad ignoro los click en el terreno\r\n if (self.viewer.trackedEntity) {\r\n return;\r\n }\r\n\r\n const getFeatureInfo = function () {\r\n var ray = self.viewer.camera.getPickRay(movement.position);\r\n var position = self.viewer.scene.globe.pick(ray, self.viewer.scene);\r\n if (position) {\r\n self.view3D.getInfoOnPickedPosition.call(self, position);\r\n }\r\n };\r\n\r\n if (self.map.activeControl instanceof Draw || self.map.activeControl instanceof Modify) {\r\n var position = self.viewer.scene.pickPosition(movement.position);\r\n arrayDePuntos[arrayDePuntos.length] = position;\r\n }\r\n else {\r\n var pickedFeature = self.viewer.scene.pick(movement.position);\r\n if (pickedFeature && pickedFeature.id) {\r\n var id = pickedFeature.id instanceof cesium.Entity ? pickedFeature.id.name : pickedFeature.id;\r\n\r\n var founded = false;\r\n for (var layerId in self.view3D.vector2DFeatures) {\r\n if (hasOwnProperty.call(self.view3D.vector2DFeatures[layerId], id)) {\r\n const feature2D = self\r\n .map\r\n .workLayers\r\n .find(workLayer => workLayer.id === layerId)\r\n .features\r\n .filter(feature => id.indexOf(feature.id) > -1 && feature.showsPopup);\r\n\r\n if (feature2D && feature2D.length > 0) {\r\n founded = true;\r\n\r\n if (!(feature2D instanceof Point) && !(feature2D instanceof Marker)) {\r\n\r\n var ray = self.viewer.camera.getPickRay(movement.position);\r\n var position = self.viewer.scene.globe.pick(ray, self.viewer.scene);\r\n\r\n var marker = self.map.view3D.addNativeFeature.call(self.map, {\r\n position: position,\r\n billboard: {\r\n image: TC.Util.getBackgroundUrlFromCss(self.CLASS + '-marker'),\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n\r\n const onDrawTable = function (e) {\r\n if (e.control) {\r\n const control = e.control;\r\n const onTableClose = function (e) {\r\n if (e.control === control) {\r\n self.map.off(Consts.event.RESULTSPANELCLOSE, onTableClose);\r\n self.map.view3D.removeFeature.call(self, marker);\r\n }\r\n };\r\n self.map.on(Consts.event.RESULTSPANELCLOSE, onTableClose);\r\n self.map.off(Consts.event.DRAWTABLE, onDrawTable);\r\n }\r\n } \r\n self.map.on(Consts.event.DRAWTABLE, onDrawTable); \r\n }\r\n //self.map.getControlsByClass(TC.control.ResultsPanel).find((rp) => rp?.currentFeature === feature2D[0])?.close()\r\n self.map.getControlsByClass(TC.control.ResultsPanel).find((rp) => rp.isVisible())?.close();\r\n self.map.trigger(Consts.event.FEATURECLICK, { feature: feature2D[0] });\r\n\r\n break;\r\n }\r\n\r\n }\r\n }\r\n\r\n if (!founded) {\r\n getFeatureInfo();\r\n }\r\n } else {\r\n getFeatureInfo();\r\n }\r\n }\r\n\r\n\r\n };\r\n let _blockDragging = false;\r\n const onMouseMoveOnCanvas = (movement) => {\r\n // Si estamos anclados a una entidad ignoro los click en el terreno \r\n if (self.viewer.trackedEntity) {\r\n return;\r\n }\r\n var pickedFeature = self.viewer.scene.pick(movement.endPosition);\r\n //if (pickedFeature && pickedFeature.id && (!self.view3D.threeDDraw.IsSketchEntity(pickedFeature) && self.view3D.threeDDraw.CanIUseEntity(pickedFeature))) {\r\n if (pickedFeature && pickedFeature.id && !(self.map.activeControl instanceof Draw)) {\r\n self.viewer.canvas.style.cursor = 'pointer';\r\n } else {\r\n self.viewer.canvas.style.cursor = 'default';\r\n }\r\n if (isDragging && draggingFeature && !_blockDragging) {\r\n const newPosition = self.viewer.scene.globe.pick(self.viewer.camera.getPickRay(movement.endPosition), self.viewer.scene);\r\n draggingFeature.primitive.position = newPosition;\r\n //bloqueamos el drag de entidades a cada 200 milisegundos\r\n _blockDragging = true;\r\n self.viewer.scene.requestRender();\r\n setTimeout(function () {\r\n _blockDragging = false;\r\n\r\n }, 200);\r\n\r\n }\r\n\r\n };\r\n const onLeftDownOnCanvas = (movement) => {\r\n var pickedFeature = self.viewer.scene.pick(movement.position);\r\n if (pickedFeature && pickedFeature.id) {\r\n isDragging = true;\r\n _startDragPos = self.viewer.scene.globe.pick(self.viewer.camera.getPickRay(movement.position), self.viewer.scene);\r\n draggingFeature = pickedFeature;\r\n self.viewer.scene.screenSpaceCameraController.enableInputs = false;\r\n }\r\n };\r\n const onLeftUpOnCanvas = (movement) => {\r\n isDragging = false;\r\n if (draggingFeature) {\r\n const newPosition = self.viewer.scene.globe.pick(self.viewer.camera.getPickRay(movement.position), self.viewer.scene);\r\n draggingFeature.primitive.position = newPosition;\r\n var positionCartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(newPosition);\r\n var positionCartographicOld = cesium.Ellipsoid.WGS84.cartesianToCartographic(_startDragPos);\r\n //const newPosition = cesium.Cartographic.fromCartesian(movement.position);\r\n self.map.trigger(Consts.event.THREED_DRAG, { pickedFeature: draggingFeature.primitive, newCoords: [cesium.Math.toDegrees(positionCartographic.longitude), cesium.Math.toDegrees(positionCartographic.latitude)], oldCoords: [cesium.Math.toDegrees(positionCartographicOld.longitude), cesium.Math.toDegrees(positionCartographicOld.latitude)] });\r\n draggingFeature = null;\r\n self.viewer.scene.screenSpaceCameraController.enableInputs = true;\r\n \r\n }\r\n };\r\n\r\n if (Consts.view.THREED === view) {\r\n\r\n if (!self.view3D.linked2DControls.featureInfo &&\r\n Object.keys(self.map.options.controls).indexOf(\"featureInfo\") > -1 &&\r\n self.allowedControls.indexOf(\"featureInfo\") > -1) {\r\n self.view3D.linked2DControls.featureInfo = new TwoDLinkedFeatureInfo(self);\r\n }\r\n\r\n if (!self.eventHandlers) {\r\n self.eventHandlers = {};\r\n }\r\n\r\n self.eventHandlers.handlerOfFeatures = new cesium.ScreenSpaceEventHandler(self.viewer.scene.canvas);\r\n self.eventHandlers.handlerOfFeatures.setInputAction(onLeftClickOnCanvas, cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n self.eventHandlers.handlerOfFeatures.setInputAction(onMouseMoveOnCanvas, cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n self.eventHandlers.handlerOfFeatures.setInputAction(onLeftDownOnCanvas, cesium.ScreenSpaceEventType.LEFT_DOWN);\r\n self.eventHandlers.handlerOfFeatures.setInputAction(onLeftUpOnCanvas, cesium.ScreenSpaceEventType.LEFT_UP);\r\n\r\n } else if (Consts.view.DEFAULT === view) {\r\n if (self.eventHandlers.handlerOfFeatures) {\r\n self.eventHandlers.handlerOfFeatures.destroy();\r\n }\r\n }\r\n\r\n if (!self.view3D.linked2DControls.geolocation &&\r\n Object.keys(self.map.options.controls).indexOf(\"geolocation\") > -1 &&\r\n self.allowedControls.indexOf(\"geolocation\") > -1) {\r\n self.view3D.linked2DControls.geolocation = self.ctrlsToMng.find(function (ctrl) {\r\n return ctrl instanceof TC.control.Geolocation;\r\n });\r\n }\r\n\r\n if (self.view3D.linked2DControls.geolocation) {\r\n\r\n var geolocation2D = self.view3D.linked2DControls.geolocation;\r\n\r\n if (Consts.view.THREED === view) {\r\n\r\n var commands = [geolocation2D.const.selector.STOP,\r\n geolocation2D.const.selector.PAUSE,\r\n geolocation2D.const.selector.BACKWARD,\r\n geolocation2D.const.selector.FORWARD];\r\n var geolocation_videoControls_ = geolocation_videoControls.bind(self);\r\n self.view3D.linked2DControls.geolocation.videoControls = geolocation_videoControls_;\r\n\r\n var lstEventListener = function (e) {\r\n var classes = commands;\r\n if (commands.some(function (cls) {\r\n return e.target.classList.contains(cls.replace('.', ''))\r\n })) {\r\n geolocation_videoControls_(e);\r\n }\r\n };\r\n\r\n geolocation2D.reset = function () {\r\n\r\n TC.wrap.control.Geolocation.prototype.setGeotracking = geolocation2D._setGeotracking;\r\n TC.wrap.control.Geolocation.prototype.simulateTrack = geolocation2D._wrap_simulateTrack;\r\n\r\n geolocation2D.simulateTrack = geolocation2D._simulateTrack;\r\n geolocation2D.displayTrackProfile = geolocation2D._displayTrackProfile;\r\n\r\n commands.forEach(function (_command) {\r\n document.removeEventListener('click', lstEventListener);\r\n });\r\n\r\n geolocation2D.off(geolocation2D.const.event.IMPORTEDTRACK, geolocation_videoControls_);\r\n\r\n };\r\n\r\n document.addEventListener('click', lstEventListener);\r\n\r\n geolocation2D.on(geolocation2D.const.event.IMPORTEDTRACK, geolocation_videoControls_);\r\n\r\n\r\n var _newPosition = false;\r\n geolocation2D._setGeotracking = TC.wrap.control.Geolocation.prototype.setGeotracking;\r\n TC.wrap.control.Geolocation.prototype.setGeotracking = function (tracking) {\r\n\r\n geolocation2D._setGeotracking.call(geolocation2D.wrap, tracking);\r\n\r\n if (tracking) {\r\n geolocation2D.on(geolocation2D.const.event.POSITIONCHANGE, geolocation_newPosition.bind(self));\r\n } else {\r\n _newPosition = false;\r\n geolocation2D.off(geolocation2D.const.event.POSITIONCHANGE, geolocation_newPosition.bind(self));\r\n if (self.view3D.geotrackingEntity) {\r\n self.viewer.entities.removeById(self.view3D.geotrackingEntity.id);\r\n delete self.view3D.geotrackingEntity;\r\n }\r\n }\r\n };\r\n\r\n geolocation2D._displayTrackProfile = geolocation2D.displayTrackProfile;\r\n geolocation2D.displayTrackProfile = function (li, options) {\r\n\r\n if (options?.resized) {\r\n geolocation_videoControls.call(self, { target: { className: 'stop' }, custom: true });\r\n }\r\n\r\n return geolocation2D._displayTrackProfile.call(geolocation2D, li, options);\r\n };\r\n\r\n // Si en el paso de 2D a 3D hay perfil dibujado, lanzamos el resize\r\n const selectedTrackItem = geolocation2D.getSelectedTrackItem();\r\n if (selectedTrackItem && geolocation2D.hasElevation) {\r\n geolocation2D.displayTrackProfile.call(self, selectedTrackItem, { resized: true });\r\n }\r\n\r\n var simulationOnPreUpdate; // listener de la simulación.\r\n geolocation2D._simulateTrack = geolocation2D.simulateTrack;\r\n geolocation2D.simulateTrack = function (li) {\r\n var self = this.view3D.linked2DControls.geolocation;\r\n\r\n self.map.toast(self.getLocaleString('threed.interactionSimulation'), { type: Consts.msgType.INFO });\r\n\r\n // tenemos una simulación activa\r\n if (this.viewer.clock.shouldAnimate && this.view3D.trackDataSource) {\r\n simulationOnPreUpdate();\r\n geolocation_videoControls.call(this, { target: { className: 'stop' }, custom: true });\r\n }\r\n\r\n self.simulationSpeed = 1;\r\n self.drawTrack(li, false).then(function () {\r\n self.wrap.simulateTrack();\r\n\r\n if (self.trackLayer && self.trackLayer.features) {\r\n var track = self.trackLayer.features.find(function (feature) {\r\n return feature instanceof Polyline;\r\n });\r\n\r\n if (track) {\r\n toCZML.call(this, track.geometry, track.wrap.feature.getGeometry().layout, \"track\", self.markerStyle, self.lineStyle, self.walkingSpeed).then(function (result) {\r\n var czml = result.czml, totalDistance = result.totalDistance, coordinates2D = result.coordinates2D;\r\n\r\n this.view3D.trackDataSource = new cesium.DataSourceCollection();\r\n var dataSourceDisplay = new cesium.DataSourceDisplay({\r\n scene: this.viewer.scene,\r\n dataSourceCollection: this.view3D.trackDataSource\r\n });\r\n\r\n this.viewer.scene.preRender.addEventListener(function (scene, time) {\r\n dataSourceDisplay.update(time);\r\n });\r\n\r\n this.view3D.trackDataSource.add(cesium.CzmlDataSource.load(czml)).then(function (layout, coordinates2D, czmlDataSource) {\r\n\r\n this.viewer.clock.shouldAnimate = false;\r\n\r\n var start, stop;\r\n start = czmlDataSource.clock.startTime;\r\n stop = czmlDataSource.clock.stopTime;\r\n\r\n this.viewer.clock.startTime = start.clone();\r\n this.viewer.clock.stopTime = stop.clone();\r\n this.viewer.clock.currentTime = start.clone();\r\n this.viewer.clock.clockStep = cesium.ClockStep.TICK_DEPENDENT\r\n this.viewer.clock.clockRange = cesium.ClockRange.CLAMPED;\r\n this.viewer.clock.multiplier = 1;\r\n\r\n var trackEntity = czmlDataSource.entities.values[0];\r\n\r\n trackEntity.layout = layout;\r\n\r\n trackEntity.tagLI = li; // tengo que guardar la relación con el HTML porque puede eliminar la selección del track mientras estamos creando la simulación del mismo, y no tengo forma de validarlo\r\n\r\n trackEntity.availability = new cesium.TimeIntervalCollection([new cesium.TimeInterval({\r\n start: start,\r\n stop: stop\r\n })]);\r\n\r\n if (this.viewer.trackedEntity) {\r\n this.viewer.entities.removeById(this.viewer.trackedEntity.id);\r\n this.viewer.trackedEntity = null;\r\n }\r\n\r\n this.viewer.entities.add(trackEntity);\r\n\r\n this.viewer.flyTo(trackEntity).then(function () {\r\n\r\n this.viewer.trackedEntity = trackEntity;\r\n\r\n function get2DHeightAtProgress(coordinates2D, distanceCurrent) {\r\n var coordinate;\r\n\r\n var doneDistance = 0;\r\n\r\n var reprojected = this.view3D.view2DCRS !== this.view3D.crs ? TC.Util.reproject(coordinates2D[0], this.view3D.view2DCRS, this.view3D.crs) : coordinates2D[0];\r\n var previous = new cesium.Cartographic.fromDegrees(reprojected[0], reprojected[1]);\r\n\r\n for (var i = 1; i < coordinates2D.length; i++) {\r\n reprojected = this.view3D.view2DCRS !== this.view3D.crs ? TC.Util.reproject(coordinates2D[i], this.view3D.view2DCRS, this.view3D.crs) : coordinates2D[i];\r\n var current = new cesium.Cartographic.fromDegrees(reprojected[0], reprojected[1]);\r\n\r\n doneDistance += new cesium.EllipsoidGeodesic(previous, current).surfaceDistance;\r\n previous = current;\r\n\r\n if (doneDistance > distanceCurrent) {\r\n coordinate = coordinates2D[i - 1];\r\n break;\r\n }\r\n }\r\n\r\n if (coordinate) {\r\n var heightIndex = trackEntity.layout === ol.geom.GeometryLayout.XYZM ? 2 :\r\n trackEntity.layout === ol.geom.GeometryLayout.XYZ ? 2 : -1;\r\n if (heightIndex > -1) {\r\n return coordinate[heightIndex];\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n var previousPosition, distanceCurrent = 0;\r\n simulationOnPreUpdate = this.viewer.scene.preUpdate.addEventListener(function (scene, currentTime) {\r\n\r\n // mientras estamos preparando la simulación ha eliminado la selección de dicho track \r\n const selectedTrackItem = this.view3D.linked2DControls.geolocation.getSelectedTrackItem();\r\n if (!selectedTrackItem || selectedTrackItem.getAttribute('data-id') !== trackEntity.tagLI.getAttribute('data-id') ||\r\n // o hemos llegado al final\r\n cesium.JulianDate.greaterThanOrEquals(currentTime, trackEntity.availability.stop)) {\r\n\r\n simulationOnPreUpdate();\r\n geolocation_videoControls.call(this, { target: { className: 'stop' }, custom: true });\r\n\r\n } else if (this.viewer.clock.shouldAnimate && trackEntity.isAvailable(currentTime)) {\r\n\r\n // gestionamos las posiciones anterior y actual\r\n if (!previousPosition) {\r\n previousPosition = cesium.Cartographic.fromCartesian(cesium.Property.getValueOrUndefined(trackEntity.position, trackEntity.availability.start));\r\n }\r\n const currentPosition = cesium.Cartographic.fromCartesian(cesium.Property.getValueOrUndefined(trackEntity.position, currentTime));\r\n\r\n // progreso en el perfil (si lo hay)\r\n if (this.view3D.linked2DControls.geolocation.hasElevation) {\r\n var timeIndex = trackEntity.layout === ol.geom.GeometryLayout.XYZM ? 3 :\r\n trackEntity.layout === ol.geom.GeometryLayout.XYM ? 2 : 3;\r\n\r\n this.view3D.linked2DControls.geolocation.setChartProgress({\r\n p: [previousPosition.longitude, previousPosition.latitude, previousPosition.height],\r\n d: distanceCurrent\r\n },\r\n [currentPosition.longitude, currentPosition.latitude, get2DHeightAtProgress.call(this, coordinates2D, distanceCurrent)],\r\n totalDistance, (trackEntity.layout === ol.geom.GeometryLayout.XYZM ||\r\n trackEntity.layout === ol.geom.GeometryLayout.XYM ?\r\n this.view3D.linked2DControls.geolocation.getTimeInterval(cesium.JulianDate.toDate(trackEntity.availability.start), cesium.JulianDate.toDate(currentTime)) : false));\r\n }\r\n\r\n // gestionamos las posiciones anterior y actual y la distancia\r\n distanceCurrent += new cesium.EllipsoidGeodesic(previousPosition, currentPosition).surfaceDistance;\r\n previousPosition = currentPosition;\r\n\r\n this.viewer.scene.requestRender();\r\n }\r\n }.bind(this));\r\n\r\n this.viewer.clock.shouldAnimate = true;\r\n\r\n }.bind(this));\r\n\r\n //self.view3D.customRender.restart();\r\n this.viewer.scene.requestRender();\r\n\r\n }.bind(this, track.wrap.feature.getGeometry().layout, coordinates2D));\r\n }.bind(this));\r\n }\r\n }\r\n }.bind(this));\r\n\r\n }.bind(self);\r\n\r\n geolocation2D._wrap_simulateTrack = TC.wrap.control.Geolocation.prototype.simulateTrack;\r\n TC.wrap.control.Geolocation.prototype.simulateTrack = function () {\r\n var self = this;\r\n };\r\n } else {\r\n // Si en el paso de 3D a 2D hay perfil dibujado, lanzamos el resize\r\n const selectedTrackItem = self.view3D.linked2DControls.geolocation.getSelectedTrackItem();\r\n if (selectedTrackItem && self.view3D.linked2DControls.geolocation.hasElevation) {\r\n\r\n geolocation2D._displayTrackProfile.call(self.view3D.linked2DControls.geolocation, selectedTrackItem, true);\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n const draw2DDrawedFeatures = function () {\r\n var self = this;\r\n self.map.workLayers.filter(function (layer) {\r\n return layer instanceof Vector;\r\n }).forEach(function (vectorLayer) {\r\n if (vectorLayer.owner && (vectorLayer.owner instanceof TC.control.DrawMeasureModify || vectorLayer.owner instanceof TC.control.Draw)) {\r\n vectorLayer.owner.wrap.interation3D = new self.map.view3D.UI.DrawControl();\r\n }\r\n vectorLayer.features.forEach(function (feature) {\r\n self.view3D.addFeature.call(self.view3D, feature);\r\n });\r\n });\r\n };\r\n\r\n var initialExtent, zoomin, zoomout;\r\n const override2DZoom = function (activate) {\r\n var self = this;\r\n\r\n var amount = 200.0;\r\n\r\n var zoom = function (amount) {\r\n var self = this;\r\n\r\n var center = new cesium.Cartesian2(\r\n self.viewer.scene.canvas.clientWidth / 2,\r\n self.viewer.scene.canvas.clientHeight / 2);\r\n\r\n /*\r\n var x = center.x;\r\n var y = center.y;\r\n var event = new window.WheelEvent (\"wheel\", {deltaY: -100,\r\n deltaMode: 0,\r\n DOM_DELTA_PIXEL: 0,\r\n DOM_DELTA_LINE: 1,\r\n detail: 0,\r\n wheelDelta: 120,\r\n layerX: x, layerY: y,\r\n clientX: x, clientY: y,\r\n offsetX: x, offsetY: y,\r\n pageX: x, pageY: y,\r\n screenX: x, screenY: y\r\n });\r\n self.viewer.scene.canvas.dispatchEvent(event);*/\r\n\r\n self.view3D.zoomToCartesian.call(self, { endPosition: center }, amount);\r\n };\r\n\r\n if (activate) {\r\n initialExtent = function (e) {\r\n var self = this;\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n var sourceCRS = self.view3D.view2DCRS;\r\n if (self.map.options.crs !== self.view3D.view2DCRS) {\r\n sourceCRS = self.map.options.crs;\r\n }\r\n\r\n var coordsXY = TC.Util.reproject(self.map.options.initialExtent.slice(0, 2), sourceCRS, self.view3D.crs);\r\n var coordsXY2 = TC.Util.reproject(self.map.options.initialExtent.slice(2), sourceCRS, self.view3D.crs);\r\n var rectangle = cesium.Rectangle.fromDegrees(coordsXY[0], coordsXY[1], coordsXY2[0], coordsXY2[1]);\r\n\r\n self.view3D.flyToRectangle.call(self, rectangle, { duration: 0.1 });\r\n\r\n return false;\r\n\r\n }.bind(self);\r\n\r\n zoomin = function (_e) {\r\n zoom.call(self, amount);\r\n }.bind(self);\r\n\r\n zoomout = function (_e) {\r\n zoom.call(self, -amount);\r\n }.bind(self);\r\n\r\n document.querySelectorAll('.' + TC.control.NavBarHome.prototype.CLASS + '-btn').forEach(function (button) {\r\n button.addEventListener('click', initialExtent);\r\n });\r\n document.querySelectorAll('.' + TC.control.NavBar.prototype.CLASS + '-btn-zoomin').forEach(function (button) {\r\n button.addEventListener('click', zoomin);\r\n });\r\n document.querySelectorAll('.' + TC.control.NavBar.prototype.CLASS + '-btn-zoomout').forEach(function (button) {\r\n button.addEventListener('click', zoomout);\r\n });\r\n }\r\n else {\r\n document.querySelectorAll('.' + TC.control.NavBarHome.prototype.CLASS + '-btn').forEach(function (button) {\r\n button.removeEventListener('click', initialExtent);\r\n });\r\n document.querySelectorAll('.' + TC.control.NavBar.prototype.CLASS + '-btn-zoomin').forEach(function (button) {\r\n button.removeEventListener('click', zoomin);\r\n });\r\n document.querySelectorAll('.' + TC.control.NavBar.prototype.CLASS + '-btn-zoomout').forEach(function (button) {\r\n button.removeEventListener('click', zoomout);\r\n });\r\n }\r\n };\r\n\r\n const fromTCtoCesiumEvent = function (eventTC) {\r\n if (Consts.event.MOUSEMOVE === eventTC) {\r\n return TC.Util.detectMobile() ? cesium.ScreenSpaceEventType.LEFT_CLICK : cesium.ScreenSpaceEventType.MOUSE_MOVE;\r\n } else if (Consts.event.CLICK === eventTC) {\r\n return cesium.ScreenSpaceEventType.LEFT_CLICK;\r\n }\r\n\r\n return eventTC;\r\n };\r\n\r\n return {\r\n\r\n container: null,\r\n\r\n crs: 'EPSG:4326',\r\n crsPattern: /(EPSG\\:?4326)/i,\r\n\r\n view2DCRS: null,\r\n\r\n customRender: null,\r\n\r\n baseLayer: null,\r\n\r\n workLayers: [],\r\n vector2DLayers: [],\r\n vector2DFeatures: {},\r\n\r\n linked2DControls: {},\r\n\r\n isLoadingTiles: function () {\r\n var self = this;\r\n\r\n var surface = self.viewer.scene.globe._surface;\r\n return !surface._tileProvider.ready ||\r\n surface._tileLoadQueueHigh.length > 0 ||\r\n surface._tileLoadQueueMedium.length > 0 ||\r\n surface._tileLoadQueueLow.length > 0 ||\r\n surface._debug.tilesWaitingForChildren > 0;\r\n },\r\n\r\n loadViewer: function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (!self.viewer) {\r\n import('../cesium/cesium').then(async function (module) {\r\n const cesium = module.default;\r\n\r\n var boundariesNavarra = null, boundariesEspana = null;\r\n try {\r\n boundariesNavarra = await cesium.Resource.fetchJson({ url: TC.apiLocation + \"resources/data/contornoNavarra.json\" }).then(function (bounds) {\r\n if (bounds && bounds.features && bounds.features.length > 0) {\r\n return bounds.features[0].geometry.coordinates;\r\n } else {\r\n return [];\r\n }\r\n });\r\n }\r\n catch (ex) {\r\n console.warn(\"No se ha encontrado contorno de Navarra\")\r\n }\r\n try {\r\n boundariesEspana = await cesium.Resource.fetchJson({ url: TC.apiLocation + \"resources/data/contornoEspana.json\" }).then(function (bounds) {\r\n if (bounds && bounds.features && bounds.features.length > 0) {\r\n return bounds.features[0].geometry.coordinates;\r\n } else {\r\n return [];\r\n }\r\n });\r\n }\r\n catch (ex) {\r\n console.warn(\"No se ha encontrado contorno de España\")\r\n }\r\n cesium.ApproximateTerrainHeights.initialize().then(function (){\r\n\r\n var terrainFallback;\r\n if (self.terrainFallback) {\r\n terrainFallback = self.terrainFallback\r\n }\r\n const boundaries = [boundariesNavarra, boundariesEspana].filter(x => x !== undefined && x!==null); \r\n var terrainProvider;\r\n if (self.terrainFallback && boundaries.length) {\r\n\r\n terrainProvider = new cesium.MergeTerrainProvider(self.terrain, self, {\r\n boundaries: boundaries,\r\n //boundaries: boundaries,\r\n fallback: self.terrainFallback\r\n });\r\n } else {\r\n if (self.terrainFallback && !boundaries.length) {\r\n console.warn(\"Se ha definido fallckback de terreno pero no se ha especificado contorno\");\r\n }\r\n terrainProvider = new cesium.CesiumTerrainProvider({\r\n url: self.terrain.url.trim()\r\n });\r\n\r\n terrainProvider.sampleTerrainMostDetailed = function (positions) {\r\n return cesium.sampleTerrainMostDetailed(terrainProvider, positions);\r\n };\r\n\r\n terrainProvider.attributions = {\r\n };\r\n\r\n if (self.terrain.attributions) {\r\n\r\n terrainProvider.getAttribution = function () {\r\n return terrainProvider.attributions;\r\n };\r\n\r\n terrainProvider.attributions = self.terrain.attributions;\r\n self.map.trigger(Consts.event.TERRAINPROVIDERADD, { terrainProvider: terrainProvider });\r\n }\r\n }\r\n\r\n var globe = new cesium.Globe();\r\n globe.baseColor = cesium.Color.WHITE;\r\n globe.enableLighting = false;\r\n\r\n /* carga más rápido pero consume RAM a cascoporro */\r\n globe.tileCacheSize = 1000;\r\n\r\n /* por defecto 2, a mayor número mayor rendimiento y peor calidad visual */\r\n globe.maximumScreenSpaceError = 5;\r\n\r\n self.viewer = self.view3D.viewer = new cesium.Viewer(self.selectors.divThreedMap, {\r\n terrainProvider: terrainProvider,\r\n terrainExaggeration: 1.0,\r\n\r\n animation: false,\r\n timeline: false,\r\n fullscreenButton: false,\r\n baseLayerPicker: false,\r\n imageryProvider: false,\r\n navigationInstructionsInitiallyVisible: false,\r\n navigationHelpButton: false,\r\n geocoder: false,\r\n homeButton: false,\r\n infoBox: false,\r\n sceneModePicker: false,\r\n selectionIndicator: false,\r\n globe: globe,\r\n\r\n //skyBox: false,\r\n //skyAtmosphere: false,\r\n\r\n requestRenderMode: true,\r\n maximumRenderTimeChange: Infinity\r\n });\r\n\r\n // personalización de la escena \r\n self.viewer.scene.backgroundColor = cesium.Color.WHITE;\r\n self.viewer.scene.screenSpaceCameraController.enableCollisionDetection = true;\r\n self.viewer.scene.screenSpaceCameraController.maximumZoomDistance = 1000000;\r\n\r\n //// con false las líneas se manetienen sobre el terreno\r\n //self.viewer.scene.globe.depthTestAgainstTerrain = false;\r\n\r\n // borramos cualquier capa que haya\r\n self.viewer.scene.imageryLayers.removeAll();\r\n\r\n // registramos listeners para capturar errores del terreno y del render\r\n self.viewer.terrainProvider.errorEvent.addEventListener(function (e) {\r\n var self = this;\r\n if (e.error) {\r\n switch (e.error.statusCode) {\r\n case 403:\r\n case 404:\r\n console.log('es un 404 de terreno');\r\n break;\r\n }\r\n }\r\n }, self);\r\n self.viewer.scene.renderError.addEventListener(function (target, error) {\r\n var self = this;\r\n\r\n if (error && error.code === 18) { // GLS: 18 - SECURITY_ERR \r\n\r\n } else {\r\n self.divThreedMap.classList.remove(self.classes.LOADING);\r\n self.map.toast(self.getLocaleString(\"fi.error\"), { type: Consts.msgType.ERROR });\r\n\r\n self.unapply();\r\n }\r\n }, self);\r\n\r\n self.viewer.readyPromise = new Promise(function (resolve, _reject) {\r\n\r\n // controlamos la carga de tiles para mostrar loading cuando pida tiles\r\n self.view3D.tileLoadingHandler = new cesium.EventHelper();\r\n self.view3D.tileLoadingHandler.add(self.viewer.scene.globe.tileLoadProgressEvent, function (data) {\r\n if (!self.waiting)\r\n self.waiting = self.map.getLoadingIndicator().addWait();\r\n\r\n if ((self.viewer.scene.terrainProvider.allReady ||\r\n (!self.viewer.scene.terrainProvider.allReady && self.viewer.scene.terrainProvider.ready))\r\n && data === 0) {\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n delete self.waiting;\r\n\r\n resolve();\r\n\r\n self.events.trigger(Consts.event.TERRAINLOADED, {});\r\n } else {\r\n self.events.trigger(Consts.event.TERRAINRECEIVING, {});\r\n }\r\n }.bind(self));\r\n });\r\n\r\n // deshabilitamos el zoom por defecto y manejamos nosotros zoom con rueda\r\n //overrideDesktopZoom.call(self);\r\n // sobrescribimos el comportamiento de lo botones + /- y la casita\r\n override2DZoom.call(self, true);\r\n\r\n // eliminamos los creditos de cesium (no encuentro la manera de que no los ponga)\r\n document.querySelectorAll('.cesium-viewer-bottom').forEach(function (elm) {\r\n elm.parentElement.removeChild(elm);\r\n });\r\n\r\n // enlazamos con los eventos del mapa 2D\r\n self.view3D._event2DHandler = event2DHandler.bind(self);\r\n self.map.on(listenTo.join(' '), self.view3D._event2DHandler);\r\n\r\n // modificamos los controles disponibles\r\n alterAllowedControls.call(self, Consts.view.THREED);\r\n\r\n self.viewer.readyPromise.then(function () {\r\n // pintamos las features que están en el mapa 2D\r\n draw2DDrawedFeatures.call(self);\r\n });\r\n self.view3D.getScene = function () {\r\n return self.viewer.scene;\r\n }\r\n self.view3D.getFovCoords = function (crs) {\r\n var scene = self.viewer.scene;\r\n var canvas = scene.canvas;\r\n var bottomLeft = new cesium.Cartesian2(0, canvas.clientHeight - 1);\r\n var bottomRight = new cesium.Cartesian2(canvas.clientWidth - 1, canvas.clientHeight - 1);\r\n var fovCoords = [\r\n bottomLeft,\r\n bottomRight,\r\n new cesium.Cartesian2(canvas.clientWidth - 1, 0),\r\n new cesium.Cartesian2(0, 0)\r\n ].map(function (elm) {\r\n return pickMapCoords.call(self, elm, crs);\r\n }).filter(function (elm) {\r\n return elm !== null;\r\n });\r\n if (fovCoords.length && fovCoords.length < 4) { // Vemos horizonte\r\n // flacunza: Si vemos horizonte no tenemos puntos de terreno para las esquinas superiores, \r\n // por eso intentamos calcular unos puntos \"en el infinito\".\r\n var farCoordsLeft = getFarMapCoords.call(self, {\r\n nearMapCoords: fovCoords[0],\r\n bottomPixel: bottomLeft,\r\n cameraPosition: self.view3D.cameraControls._coordsXY\r\n });\r\n var farCoordsRight = getFarMapCoords.call(self, {\r\n nearMapCoords: fovCoords[1],\r\n bottomPixel: bottomRight,\r\n cameraPosition: self.view3D.cameraControls._coordsXY\r\n });\r\n if (farCoordsLeft && farCoordsRight) {\r\n fovCoords[2] = farCoordsRight;\r\n fovCoords[3] = farCoordsLeft;\r\n }\r\n\r\n }\r\n return fovCoords;\r\n }\r\n self.view3D.getCameraData = function () {\r\n const camera = self.viewer.scene.camera\r\n const cameraPosition = camera.position;\r\n const cameraPositionCarto = cesium.Ellipsoid.WGS84.cartesianToCartographic(cameraPosition);\r\n return {\r\n \"latitude\": cesium.Math.toDegrees(cameraPositionCarto.latitude),\r\n \"longitude\": cesium.Math.toDegrees(cameraPositionCarto.longitude),\r\n \"height\": cameraPositionCarto.height,\r\n \"heading\": camera.heading * (180 / Math.PI),\r\n \"pitch\": camera.pitch * (180 / Math.PI)\r\n }\r\n }\r\n self.view3D.Coordinates2DTo3D = function (coords) {\r\n const _coords = coords instanceof cesium.Cartesian2 ? coords : new cesium.Cartesian2(coords[0], coords[1]);\r\n\r\n var ray = self.viewer.camera.getPickRay(_coords);\r\n var position = self.viewer.scene.globe.pick(ray, self.viewer.scene);\r\n if (position) {\r\n var positionCartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\r\n\r\n var lat, lon, ele;\r\n lat = cesium.Math.toDegrees(positionCartographic.latitude);\r\n lon = cesium.Math.toDegrees(positionCartographic.longitude);\r\n ele = Math.round(positionCartographic.height);\r\n\r\n return { lon: lon, lat: lat, ele: ele };\r\n }\r\n }\r\n self.view3D.setMarker = function (position, image, marker = null, id) {\r\n if (!(position instanceof cesium.Cartesian3 || position instanceof cesium.Cartesian2)) {\r\n position = cesium.Cartesian3.fromDegrees(position[0], position[1]);\r\n }\r\n if (!marker) {\r\n marker = self.map.view3D.addNativeFeature.call(self.map, {\r\n position: position,\r\n billboard: {\r\n image: image,\r\n eyeOffset: new cesium.Cartesian3(0, 0, -100),\r\n verticalOrigin: cesium.VerticalOrigin.BOTTOM,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND,\r\n pixelOffset: new cesium.Cartesian2(0, 20.0),\r\n id: id || TC.getUID()\r\n }\r\n });\r\n }\r\n else {\r\n marker.position = position;\r\n marker.setImage(Math.random() * 1000, image);\r\n marker.pixelOffset = new cesium.Cartesian2(0, 20.0);\r\n marker.show = true;\r\n }\r\n self.viewer.scene.requestRender();\r\n return marker;\r\n\r\n }\r\n \r\n self.view3D.setCenter = function (xy) {\r\n \r\n /*if (block) return;*/\r\n const scene = self.map.view3D.getScene();\r\n var destination = cesium.Cartesian3.fromDegrees(xy[0], xy[1], self.view3D.getHeightFromMDT(xy));\r\n \r\n const center = scene.globe.pick(scene.camera.getPickRay(new cesium.Cartesian2(self.view3D.container.clientWidth / 2, self.view3D.container.clientHeight / 2)), scene);\r\n const distance = cesium.Cartesian3.distance(center, scene.camera.positionWC); \r\n var oldTransform = new cesium.Matrix4();\r\n scene.camera.transform.clone(oldTransform);\r\n //const _flyEnd = function () {\r\n // console.log(\"fly end\");\r\n // self.map.off(Consts.event.CAMERACHANGE, _flyEnd);\r\n // scene.camera.lookAtTransform(oldTransform);\r\n // block = false;\r\n //}\r\n \r\n //self.map.on(Consts.event.CAMERACHANGE, _flyEnd); \r\n \r\n scene.camera.lookAt(destination,\r\n new cesium.HeadingPitchRange(scene.camera.heading, scene.camera.pitch, distance));\r\n scene.camera.lookAtTransform(oldTransform);\r\n /*block = true;*/\r\n \r\n \r\n }\r\n self.view3D.setLabel = function (entity, style) {\r\n self.view3D.threeDDraw.setLabel(entity, style);\r\n }\r\n self.view3D.setStyle = function (entity, style) {\r\n self.view3D.threeDDraw.setStyle(style, entity);\r\n }\r\n self.view3D.getLength = function (entity) {\r\n const coordinates = entity.polyline.positions.getValue();\r\n return coordinates.reduce(function (vi, va, index, arr) {\r\n if (index === 0) return 0;\r\n return vi + new cesium.EllipsoidGeodesic(cesium.Cartographic.fromCartesian(arr[index - 1]), cesium.Cartographic.fromCartesian(arr[index]), cesium.Ellipsoid.WGS84).surfaceDistance;\r\n }, 0);\r\n }\r\n self.view3D.getArea = function (entity) {\r\n const coordinates = entity.polygon.hierarchy.getValue();\r\n return Math.sqrt(Math.pow(cesium.PolygonPipeline.computeArea2D(coordinates.positions), 2));\r\n }\r\n //sacar a una clase externa\r\n const cartesianToArray = function (cartesian) {\r\n const geoCoords = cesium.Cartographic.fromCartesian(cartesian);\r\n //return TC.Util.reproject([cesium.Math.toDegrees(geoCoords.longitude), cesium.Math.toDegrees(geoCoords.latitude)], self.map.view3D.crs, self.map.view3D.view2DCRS);\r\n return [cesium.Math.toDegrees(geoCoords.longitude), cesium.Math.toDegrees(geoCoords.latitude)]; \r\n }\r\n const tcFeatureConstructor = function (activeShapePoints, type) {\r\n let geometry;\r\n switch (type) {\r\n case 'polyline':\r\n geometry = new Polyline(activeShapePoints.map(function (point) {\r\n return cartesianToArray(point);\r\n }));\r\n break;\r\n case 'polygon':\r\n geometry = new Polygon(activeShapePoints.map(function (point) {\r\n return cartesianToArray(point);\r\n }));\r\n break;\r\n case 'point':\r\n geometry = new Point(cartesianToArray(activeShapePoints[0]));\r\n break;\r\n }\r\n return geometry;\r\n };\r\n //let threeDDraw; \r\n self.view3D.UI = {\r\n DrawControl: function (mode, callback) {\r\n self.view3D.threeDDraw = new ThreeDDraw(self.viewer, mode);\r\n self.view3D.threeDDraw.addEventListener('drawend', (evt) => {\r\n self.map.activeControl.trigger(Consts.event.MEASURE, evt.detail.measurements);\r\n const apiFeature = tcFeatureConstructor(evt.detail.positions, evt.detail.type);\r\n self.map.activeControl.trigger(Consts.event.DRAWEND, {\r\n feature: apiFeature\r\n });\r\n callback(apiFeature).then(function (feature2D) {\r\n linkFeature(self.view3D, feature2D, evt.detail.entity);\r\n evt.detail.entity.name = feature2D.id;\r\n feature2D.setStyle(evt.detail.entity.getStyle());\r\n //self.map.activeControl.trigger(Consts.event.DRAWEND, {\r\n // feature: feature2D\r\n //});\r\n });\r\n });\r\n self.view3D.threeDDraw.addEventListener('drawstart', (evt) => {\r\n self.map.activeControl.trigger(Consts.event.DRAWSTART, {});\r\n });\r\n self.view3D.threeDDraw.addEventListener('drawupdate', (evt) => {\r\n self.map.activeControl.trigger(Consts.event.MEASUREPARTIAL, evt.detail.measurements);\r\n });\r\n self.view3D.threeDDraw.addEventListener('point', (evt) => {\r\n const geoCoords = cesium.Cartographic.fromCartesian(evt.detail.position);\r\n self.map.activeControl.trigger(Consts.event.POINT, {\r\n point: [cesium.Math.toDegrees(geoCoords.longitude), cesium.Math.toDegrees(geoCoords.latitude)]\r\n });\r\n });\r\n self.view3D.threeDDraw.addEventListener('drawmodify', (evt) => {\r\n const newFeature = tcFeatureConstructor(evt.detail.positions, evt.detail.type)\r\n const originalFeat = evt.detail.entity._wrap.parent;\r\n originalFeat.setCoordinates(newFeature.getCoordinates());\r\n self.map.activeControl.trigger(Consts.event.FEATUREMODIFY, { feature: originalFeat, layer: originalFeat.layer });\r\n });\r\n\r\n return self.view3D.threeDDraw;\r\n }\r\n , SelectControl: function () {\r\n var _pickedFeature = null;\r\n var selectCallback = null;\r\n const tcFeatureFromEntity = function (entity) {\r\n if (entity.polygon)\r\n return new Polygon(entity.polygon.hierarchy.getValue().positions.map(function (point) {\r\n return cartesianToArray(point);\r\n }), { id: entity.id })\r\n else if (entity.polyline)\r\n return new Polyline(entity.polyline.positions.getValue().map(function (point) {\r\n return cartesianToArray(point);\r\n }), { id: entity.id })\r\n else\r\n return new Point(cartesianToArray(entity.position.getValue(cesium.JulianDate.now)), { id: entity.id });\r\n }\r\n //const selectFeature = function (movement) {\r\n // if (_pickedFeature)\r\n // unselectFeature();\r\n // const pickedFeature = self.viewer.scene.pick(movement.position);\r\n // if (cesium.defined(pickedFeature)) {\r\n // _pickedFeature = pickedFeature;\r\n // self.view3D.threeDDraw.entityForEdit = pickedFeature.id;\r\n // self.view3D.threeDDraw.activate();\r\n // selectCallback({\r\n // selected: [(pickedFeature.id._wrap?.parent || tcFeatureFromEntity(pickedFeature)).wrap.feature], deselected: []\r\n // });\r\n // }\r\n //}\r\n const unselectFeature = function () {\r\n //self.view3D.threeDDraw.deactivate();\r\n _pickedFeature?._wrap.parent.toggleSelectedStyle(false) \r\n\r\n };\r\n const _activate = function (deleteMode) {\r\n //if (deleteMode)\r\n // self.eventHandlers.handlerOfFeatures.removeInputAction(cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n //else\r\n // self.eventHandlers.handlerOfFeatures.setInputAction(selectFeature, cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n self.map.on(Consts.event.FEATUREREMOVE, _remove);\r\n self.view3D.threeDDraw.vertexRemove(deleteMode);\r\n if (self.view3D.threeDDraw.entityForEdit && !deleteMode) self.view3D.threeDDraw.activate();\r\n self.view3D.threeDDraw.activeSelectMode(function (selectedEntity) { \r\n //if (_pickedFeature && _pickedFeature != selectedEntity)\r\n // unselectFeature();\r\n if (cesium.defined(selectedEntity)) {\r\n _pickedFeature = selectedEntity;\r\n selectCallback({\r\n selected: [(selectedEntity._wrap?.parent || tcFeatureFromEntity(selectedEntity)).wrap.feature], deselected: []\r\n });\r\n }\r\n }); \r\n };\r\n const _remove = function (event) {\r\n if (event.feature.wrap?.feature3D) {\r\n self.view3D.threeDDraw.remove(event.feature.wrap.feature3D);\r\n _pickedFeature = null;\r\n }\r\n }\r\n const _deactivate = function () {\r\n unselectFeature();\r\n self.view3D.threeDDraw.deactivateSelectMode();\r\n self.view3D.threeDDraw.deactivateEditing();\r\n self.map.off(Consts.event.FEATUREREMOVE, _remove); \r\n self.view3D.threeDDraw.editMode = false;\r\n self.map.activeControl.deactivate();\r\n };\r\n return {\r\n activate: _activate,\r\n setActive: function (active) {\r\n active ? _activate() : _deactivate();\r\n },\r\n deactivate: _deactivate,\r\n on: function (event, callback) {\r\n selectCallback = callback;\r\n },\r\n getFeatures: function () {\r\n if (!cesium.defined(_pickedFeature)) {\r\n return new ol.Collection();\r\n }\r\n return new ol.Collection([(_pickedFeature.id._wrap?.parent || tcFeatureFromEntity(_pickedFeature)).wrap.feature]);\r\n }\r\n }\r\n }\r\n }\r\n resolve(self.viewer);\r\n\r\n });\r\n\r\n cesium.Entity.prototype.getStyle = function () {\r\n const returnValue = {}\r\n if (this.polygon) {\r\n Object.assign(returnValue, /*TC.Cfg.styles.polygon,*/ {\r\n fillColor: this.polygon.material.getValue().color.toCssHexString().substring(0, 7),\r\n fillOpacity: this.polygon.material.getValue().color.alpha,\r\n strokeColor: this.polyline.material.getValue().color.toCssHexString().substring(0, 7),\r\n strokeWidth: this.polyline.width.getValue()\r\n });\r\n }\r\n else if (this.polyline) {\r\n Object.assign(returnValue, /*TC.Cfg.styles.line,*/ {\r\n strokeColor: this.polyline.material.getValue().color.toCssHexString().substring(0, 7),\r\n strokeWidth: this.polyline.width.getValue()\r\n });\r\n }\r\n else if (this.point) {\r\n Object.assign(returnValue, /*TC.Cfg.styles.point,*/ {\r\n fillColor: this.point.color.getValue().toCssHexString().substring(0, 7),\r\n fillOpacity: this.point.color.getValue().alpha,\r\n //fontSize\r\n strokeColor: this.point.outlineColor.getValue().toCssHexString().substring(0, 7),\r\n strokeWidth: this.point.outlineWidth.getValue(),\r\n radius: (this.point.outlineWidth.getValue() + this.point.pixelSize.getValue()) / 2\r\n });\r\n }\r\n if (this.label)\r\n returnValue[\"fontColor\"] = this.label?.fillColor?.getValue().toCssHexString();\r\n return returnValue;\r\n }\r\n\r\n });\r\n\r\n } else {\r\n resolve(self.viewer);\r\n }\r\n });\r\n },\r\n\r\n setBaseLayer: function (layer) {\r\n var self = this;\r\n\r\n var get3DLayer = function (layer) {\r\n if (!isCompatible(layer, self.view3D.crs)) {\r\n if (layer.getFallbackLayer() !== null && isCompatible(layer.getFallbackLayer(), self.view3D.crs)) {\r\n layer = layer.getFallbackLayer();\r\n } else {\r\n self.map.toast(self.getLocaleString('threed.crsNoCompatible', { name: layer.title }));\r\n layer = null;\r\n }\r\n }\r\n\r\n return layer;\r\n };\r\n\r\n if (!self.view3D.baseLayer) {\r\n\r\n if (layer.type === Consts.layerType.WMTS || layer.type === Consts.layerType.WMS) {\r\n\r\n if (layer.options.relatedWMTS) {\r\n self.map.baseLayer = layer = self.map.getLayer(layer.options.relatedWMTS);\r\n self.map.trigger(Consts.event.BASELAYERCHANGE, { layer: self.map.baseLayer });\r\n } else {\r\n\r\n layer = get3DLayer(layer);\r\n\r\n if (layer) {\r\n if (!layer.isBase) {\r\n layer.isBase = true;\r\n }\r\n self.view3D.addLayer.call(self, layer);\r\n }\r\n }\r\n }\r\n else {\r\n self.view3D.baseLayer = self.Consts.BLANK_BASE;\r\n }\r\n } else {\r\n\r\n if (self.viewer.scene.imageryLayers.contains(self.view3D.baseLayer)) {\r\n self.viewer.scene.imageryLayers.raiseToTop(self.view3D.baseLayer);\r\n self.viewer.scene.imageryLayers.remove(self.view3D.baseLayer, true);\r\n }\r\n\r\n if (layer instanceof Vector) {\r\n self.view3D.baseLayer = self.Consts.BLANK_BASE;\r\n\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n delete self.waiting;\r\n }\r\n else {\r\n layer = get3DLayer(layer);\r\n\r\n if (layer) {\r\n layer.map = self.map;\r\n layer.isBase = true;\r\n\r\n self.view3D.addLayer.call(self, layer);\r\n }\r\n }\r\n }\r\n\r\n currentMapCfg.baseMap = self.map.baseLayer;\r\n },\r\n\r\n addLayer: function (layer) {\r\n var self = this;\r\n\r\n switch (true) {\r\n case Consts.layerType.VECTOR == layer.type: {\r\n self.view3D.vector2DLayers.push(layer);\r\n break;\r\n }\r\n case Consts.layerType.WMTS == layer.type:\r\n case Consts.layerType.WMS == layer.type: {\r\n if (!layer.isBase && !layer.isCompatible(self.view3D.crs)) {\r\n self.map.toast(self.getLocaleString('threed.crsNoCompatible', { name: layer.layerNames }));\r\n } else {\r\n //var convertedLayer = rasterConverter.convert(layer, self.view3D.crs);\r\n rasterConverter.convert(layer, self.view3D.crs).then(function (convertedLayer) {\r\n if (convertedLayer) {\r\n\r\n if (convertedLayer.enablePickFeatures !== undefined) {\r\n convertedLayer.enablePickFeatures = false;\r\n convertedLayer.tcLayer = layer;\r\n }\r\n\r\n if (layer.isBase && self.view3D.baseLayer) {\r\n if (self.viewer.scene.imageryLayers.contains(self.view3D.baseLayer)) {\r\n self.viewer.scene.imageryLayers.raiseToTop(self.view3D.baseLayer);\r\n self.viewer.scene.imageryLayers.remove(self.view3D.baseLayer, true);\r\n }\r\n }\r\n cesium.TrustedServers.add(new URL(\"http://\" + convertedLayer.url).host, \"80\");\r\n cesium.TrustedServers.add(new URL(\"https://\" + convertedLayer.url).host, \"443\");\r\n cesium.TrustedServers.add(\"http://localhost\", \"8080\");\r\n\r\n var newImageryLayer = self.viewer.scene.imageryLayers.addImageryProvider(convertedLayer);\r\n\r\n if (layer.isBase) { // si la capa es el mapa de fondo lo envío al fondo de las capas en 3D\r\n self.view3D.baseLayer = newImageryLayer;\r\n self.viewer.scene.imageryLayers.lowerToBottom(newImageryLayer);\r\n } else {\r\n newImageryLayer.show = layer.getVisibility();\r\n newImageryLayer.alpha = layer.getOpacity();\r\n\r\n self.view3D.workLayers.push(newImageryLayer);\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n removeLayer: function (layer) {\r\n var self = this;\r\n\r\n switch (true) {\r\n case Consts.layerType.VECTOR == layer.type: {\r\n\r\n if (self.view3D.vector2DFeatures && hasOwnProperty.call(self.view3D.vector2DFeatures, layer.id)) {\r\n\r\n for (var featureId in self.view3D.vector2DFeatures[layer.id]) {\r\n var threedFeature = self.view3D.vector2DFeatures[layer.id][featureId];\r\n\r\n threedFeature.forEach(tdf => self.view3D.removeFeature.call(self, tdf));\r\n }\r\n\r\n delete self.view3D.vector2DFeatures[layer.id];\r\n }\r\n\r\n // GLS revisar, debería estar en workLayers¿? \r\n // self.view3D.workLayers.splice(i, 1);\r\n break;\r\n }\r\n case Consts.layerType.WMTS == layer.type:\r\n case Consts.layerType.WMS == layer.type: {\r\n for (var i = 0; i < self.view3D.workLayers.length; i++) {\r\n if (layer.names && self.view3D.workLayers[i].imageryProvider.layers.join(',') === layer.names.join(',') ||\r\n layer.title && self.view3D.workLayers[i].imageryProvider.layers.join(',') === layer.title) {\r\n self.viewer.scene.imageryLayers.raiseToTop(self.view3D.workLayers[i]);\r\n self.viewer.scene.imageryLayers.remove(self.view3D.workLayers[i], true);\r\n\r\n self.view3D.workLayers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n setRenderOptionsLayer: function (layer, options) {\r\n var self = this;\r\n\r\n switch (true) {\r\n case Consts.layerType.VECTOR == layer.type: {\r\n if (self.view3D.vector2DFeatures[layer.id]) {\r\n\r\n for (var featureId in self.view3D.vector2DFeatures[layer.id]) {\r\n var features = self.view3D.vector2DFeatures[layer.id][featureId];\r\n features.forEach(f => self.view3D.setRenderOptionsFeature(f, { show: layer.getVisibility() }));\r\n }\r\n\r\n self.viewer.scene.requestRender();\r\n }\r\n break;\r\n }\r\n case Consts.layerType.WMTS == layer.type:\r\n case Consts.layerType.WMS == layer.type: {\r\n for (var i = 0; i < self.view3D.workLayers.length; i++) {\r\n const imageryLayerNames = Array.isArray(self.view3D.workLayers[i].imageryProvider.layers) ? self.view3D.workLayers[i].imageryProvider.layers.join(',') : self.view3D.workLayers[i].imageryProvider.layers;\r\n if (layer.names && imageryLayerNames === layer.names.join(',') ||\r\n layer.title && imageryLayerNames === layer.title) {\r\n\r\n if (hasOwnProperty.call(options, 'visibility')) {\r\n self.view3D.workLayers[i].show = options.visibility;\r\n }\r\n\r\n if (hasOwnProperty.call(options, 'opacity')) {\r\n self.view3D.workLayers[i].alpha = options.opacity;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n self.viewer.scene.requestRender();\r\n }\r\n }\r\n },\r\n\r\n flyToMapCoordinates: function (coords) {\r\n var self = this;\r\n\r\n var lonlat = self.view3D.view2DCRS !== self.view3D.crs ? TC.Util.reproject(coords, self.view3D.view2DCRS, self.view3D.crs) : coords;\r\n var destination = cesium.Cartesian3.fromDegrees(lonlat[0], lonlat[1], self.viewer.camera.positionCartographic.height);\r\n\r\n var camera = self.viewer.camera;\r\n camera.flyTo({\r\n destination: destination,\r\n orientation: {\r\n heading: camera.heading,\r\n pitch: camera.pitch\r\n }\r\n });\r\n }.bind(viewProto),\r\n flyToRectangle: function (rectangle, options) {\r\n const self = this;\r\n // lo primero de todo cancelar movimientos anteriores\r\n self.viewer.scene.camera.cancelFlight();\r\n\r\n return new Promise(function (resolve, _reject) {\r\n options = options || {\r\n };\r\n\r\n var epsilon = cesium.Math.EPSILON3;\r\n if (rectangle.east === rectangle.west) {\r\n rectangle.east += epsilon;\r\n rectangle.west -= epsilon;\r\n }\r\n\r\n if (rectangle.north === rectangle.south) {\r\n rectangle.north += epsilon;\r\n rectangle.south -= epsilon;\r\n }\r\n\r\n var enlargeFactor = 0.2;\r\n var marginX = rectangle.width * enlargeFactor / 2;\r\n var marginY = rectangle.height * enlargeFactor / 2;\r\n rectangle.east -= marginX;\r\n rectangle.west += marginY;\r\n rectangle.north += marginY;\r\n rectangle.south -= marginY;\r\n\r\n var scene = self.viewer.scene;\r\n var camera = scene.camera;\r\n\r\n var destinationCartesian = camera.getRectangleCameraCoordinates(rectangle);\r\n var destination = cesium.Ellipsoid.WGS84.cartesianToCartographic(destinationCartesian);\r\n\r\n cesium.when(scene.globe.terrainProvider.sampleTerrainMostDetailed([cesium.Rectangle.center(rectangle)]), function (updatedPositions) {\r\n\r\n var finalDestinationCartographic = {\r\n longitude: destination.longitude,\r\n latitude: destination.latitude,\r\n height: destination.height + updatedPositions[0].height || 0\r\n };\r\n\r\n camera.flyTo({\r\n duration: options.duration || 1,\r\n destination: cesium.Ellipsoid.WGS84.cartographicToCartesian(finalDestinationCartographic),\r\n complete: function () {\r\n var angle = cesium.Math.toRadians(50);\r\n var pickBP = pickBottomPoint(this.viewer.scene);\r\n pickBP = cesium.Matrix4.fromTranslation(pickBP);\r\n\r\n this.view3D.rotateAroundAxis(this.viewer.scene.camera, -angle, this.viewer.scene.camera.right, pickBP, {\r\n duration: 250,\r\n callback: function () {\r\n resolve();\r\n }\r\n });\r\n }.bind(self)\r\n });\r\n });\r\n });\r\n }.bind(viewProto),\r\n\r\n zoomToCartesian: function (position, amount) {\r\n var self = this;\r\n var scene = self.viewer.scene;\r\n\r\n if (!position || !position.endPosition) {\r\n var canvas = scene.canvas;\r\n var center = new cesium.Cartesian2(\r\n canvas.clientWidth / 2,\r\n canvas.clientHeight / 2);\r\n position = {\r\n endPosition: center\r\n };\r\n }\r\n\r\n var pickRay = scene.camera.getPickRay(position.endPosition);\r\n var intersection = scene.globe.pick(pickRay, scene);\r\n if (intersection) {\r\n\r\n var distanceMeasure = cesium.Cartesian3.distance(pickRay.origin, intersection);\r\n if (distanceMeasure < 1) {\r\n return;\r\n }\r\n else {\r\n if (!self.view3D._zoomTo) {\r\n self.view3D._zoomTo = {\r\n amount: 0\r\n };\r\n }\r\n self.view3D._zoomTo.direction = amount > 0 ? 1 : 0;\r\n self.view3D._zoomTo.amount += (distanceMeasure * 5 / 100);\r\n self.view3D._zoomTo.endPosition = position.endPosition;\r\n }\r\n }\r\n\r\n var setNewPosition = function (data) {\r\n var self = this;\r\n var scene = self.viewer.scene;\r\n\r\n var pickRay = scene.camera.getPickRay(position.endPosition || data.endPosition);\r\n var intersection = scene.globe.pick(pickRay, scene);\r\n if (intersection) {\r\n\r\n var distanceMeasure = cesium.Cartesian3.distance(pickRay.origin, intersection);\r\n if (distanceMeasure < 1) {\r\n return;\r\n }\r\n else {\r\n\r\n var cameraPosition = scene.camera.position;\r\n var cameraDirection = scene.camera.direction;\r\n\r\n var toGo = new cesium.Cartesian3();\r\n var toMove = toGo;\r\n cesium.Cartesian3.multiplyByScalar(pickRay.direction, data.direction == 1 ? data.amount : -data.amount, toMove);\r\n cesium.Cartesian3.add(cameraPosition, toMove, toGo);\r\n\r\n var ray = new cesium.Ray(toGo, pickRay.direction);\r\n var intersectionToGo = scene.globe.pick(ray, scene);\r\n if (intersectionToGo) {\r\n\r\n var reset = function () {\r\n this.view3D._zoomTo = {\r\n direction: 1,\r\n amount: 0,\r\n endPosition: {}\r\n };\r\n\r\n return;\r\n };\r\n\r\n if (cesium.Cartesian3.distance(toGo, intersectionToGo) < 1 ||\r\n Math.abs(cesium.Ellipsoid.WGS84.cartesianToCartographic(toGo).height) < scene.screenSpaceCameraController.minimumZoomDistance) {\r\n reset.call(self);\r\n }\r\n else {\r\n self.viewer.camera.flyTo({\r\n destination: toGo,\r\n orientation: {\r\n heading: scene.camera.heading,\r\n pitch: scene.camera.pitch,\r\n roll: scene.camera.roll\r\n },\r\n duration: 1,\r\n easingFunction: cesium.EasingFunction.LINEAR_NONE,\r\n complete: function (_distance) {\r\n this.view3D._zoomTo = {\r\n direction: 1,\r\n amount: 0,\r\n endPosition: {}\r\n };\r\n }.bind(self, cesium.Cartesian3.distance(toGo, intersectionToGo))\r\n });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n setTimeout(function () { // GLS: No hemos encontrado otra forma para acumular pasos de la rueda\r\n setNewPosition.call(self, self.view3D._zoomTo);\r\n }.bind(self), 50);\r\n },\r\n\r\n rotateAroundAxis: function (camera, angle, axis, transform, opt_options) {\r\n return rotateAroundAxis(camera, angle, axis, transform, opt_options);\r\n },\r\n\r\n addFeature: function (feature, _options) {\r\n var self = this;\r\n\r\n var add = function () {\r\n // TODO: el convert debería ser uno o varios webworker, si son muchas features se colapsa.\r\n var csfeature = featureConverter.convert(self.viewer.scene, feature, self.view2DCRS, self.crs);\r\n if (csfeature) {\r\n if (typeof csfeature.geometry === 'function') {\r\n // estoy aquí // tengo que validar qué proveedor escoger, afecta, hay mucha diferencia de alturas, podría ir por capa?? búsquedas fijo por el de por defecto y track validar??\r\n csfeature.geometry(self.viewer.terrainProvider).then(function (newGeometry) {\r\n // es igual a cuando no es una función... a ver cómo lo gestiono\r\n if (newGeometry instanceof Array) {\r\n newGeometry.forEach(function (geom) {\r\n if (geom instanceof Array) {\r\n geom.forEach(function (geo) {\r\n geo = addFeature.call(self, geo);\r\n linkFeature(self, feature, geo);\r\n });\r\n } else {\r\n geom = addFeature.call(self, geom);\r\n linkFeature(self, feature, geom);\r\n }\r\n });\r\n }\r\n else {\r\n var geom = addFeature.call(self, newGeometry);\r\n linkFeature(self, feature, geom);\r\n }\r\n\r\n });\r\n }\r\n else if (csfeature.geometry instanceof Array) {\r\n csfeature.geometry.forEach(function (geom) {\r\n geom = addFeature.call(self, geom);\r\n linkFeature(self, feature, geom);\r\n });\r\n }\r\n else {\r\n var geom = addFeature.call(self, csfeature.geometry);\r\n linkFeature(self, feature, geom);\r\n }\r\n }\r\n };\r\n\r\n // GLS: para no pintar la cruz-marker del FeatureInfo\r\n if ((self.linked2DControls.featureInfo && self.linked2DControls.featureInfo.get2DMarker() === feature) ||\r\n (self.linked2DControls.featureInfo && self.linked2DControls.featureInfo.isPending())) {\r\n // GLS: llega antes aquí que al callback de la instrucción que crea la feature, por eso necesito el timeout\r\n setTimeout(function () {\r\n if (self.linked2DControls.featureInfo.get2DMarker() === feature) {\r\n return;\r\n } else {\r\n add();\r\n }\r\n }, 5);\r\n } else if (self.linked2DControls.geolocation && self.linked2DControls.geolocation.geotrackingLayer === feature.layer && feature instanceof Polyline) {\r\n return;\r\n } else {\r\n add();\r\n }\r\n },\r\n removeFeature: function (feature) {\r\n var self = this;\r\n if (self.viewer) {\r\n if (feature) {\r\n switch (true) {\r\n case feature instanceof cesium.GroundPrimitive:\r\n self.viewer.scene.groundPrimitives.remove(feature);\r\n break;\r\n case feature instanceof cesium.Billboard:\r\n self.viewer.billboardCollection.remove(feature);\r\n break;\r\n case feature instanceof cesium.Entity:\r\n\r\n break;\r\n case feature instanceof Object:\r\n self.viewer.entities.removeById(feature.id);\r\n break;\r\n }\r\n\r\n self.viewer.scene.requestRender();\r\n }\r\n }\r\n },\r\n setRenderOptionsFeature: function (feature, options) {\r\n if (feature) {\r\n feature.show = options.show;\r\n }\r\n },\r\n\r\n addNativeFeature: function (cesiumFeature) {\r\n return addFeature.call(this.view3D, cesiumFeature);\r\n },\r\n\r\n setCameraFromMapView: function () {\r\n var self = this;\r\n\r\n self.viewer.scene.globe.terrainProvider.readyPromise.then(function () {\r\n var center = self.mapView.getCenter();\r\n\r\n if (!center) {\r\n return;\r\n }\r\n\r\n var latlon = self.view3D.view2DCRS !== self.view3D.crs ? TC.Util.reproject(center, self.view3D.view2DCRS, self.view3D.crs) : center;\r\n var distance = calcDistanceForResolution.call(self, self.mapView.getResolution() || 0, cesium.Math.toRadians(latlon[0]));\r\n\r\n var carto = new cesium.Cartographic(cesium.Math.toRadians(latlon[0]), cesium.Math.toRadians(latlon[1]));\r\n if (self.viewer.scene.globe) {\r\n carto.height = self.viewer.scene.globe.getHeight(carto) || 0;\r\n }\r\n\r\n var setCamera = function () {\r\n if (self.map.on3DView) {\r\n var destination = cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);\r\n var orientation = {\r\n pitch: cesium.Math.toRadians(-90),\r\n heading: -self.mapView.getRotation(),\r\n roll: 0.0\r\n };\r\n\r\n self.viewer.camera.setView({\r\n destination: destination,\r\n orientation: orientation\r\n });\r\n\r\n self.viewer.camera.moveBackward(distance);\r\n }\r\n };\r\n\r\n if (carto.height === 0) {\r\n TC.loadJS(!TC.tool || !TC.tool.Elevation, TC.apiLocation + 'TC/tool/Elevation', function () {\r\n self.view3D.elevationTool = new TC.tool.Elevation();\r\n self.view3D.elevationTool.getElevation({\r\n crs: self.view3D.crs,\r\n coordinates: [latlon]\r\n }).then(function (result) {\r\n if (result && result.length > 0) {\r\n carto.height = result[0][2] ? result[0][2] : 0;\r\n setCamera();\r\n }\r\n }).catch((e) => console.log(e));\r\n });\r\n } else {\r\n setCamera();\r\n }\r\n });\r\n },\r\n setViewFromCameraView: function () {\r\n const self = this;\r\n\r\n\r\n var ellipsoid = cesium.Ellipsoid.WGS84;\r\n var scene = self.viewer.scene;\r\n var target_ = pickCenterPoint(scene);\r\n\r\n if (!target_) {\r\n var globe = self.viewer.scene.globe;\r\n var carto = self.viewer.camera.positionCartographic.clone();\r\n var height = globe.getHeight(carto);\r\n carto.height = height || 0;\r\n target_ = cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);\r\n }\r\n\r\n\r\n var distance = cesium.Cartesian3.distance(target_, self.viewer.camera.position);\r\n var targetCartographic = ellipsoid.cartesianToCartographic(target_);\r\n\r\n var centerMapCRS = self.view3D.crs !== self.view3D.view2DCRS ? TC.Util.reproject(\r\n [cesium.Math.toDegrees(targetCartographic.longitude), cesium.Math.toDegrees(targetCartographic.latitude)],\r\n self.view3D.crs, self.view3D.view2DCRS) : [cesium.Math.toDegrees(targetCartographic.longitude), cesium.Math.toDegrees(targetCartographic.latitude)];\r\n\r\n self.mapView.setCenter(centerMapCRS);\r\n\r\n self.mapView.setResolution(calcResolutionForDistance.call(self, distance, targetCartographic ? targetCartographic.latitude : 0));\r\n\r\n // GLS: No tenemos la rotación del mapa activada por problemas con el iPad\r\n //if (target) {\r\n // var pos = self.viewer.camera.position;\r\n\r\n // var targetNormal = new cesium.Cartesian3();\r\n // ellipsoid.geocentricSurfaceNormal(target, targetNormal);\r\n\r\n // var targetToCamera = new cesium.Cartesian3();\r\n // cesium.Cartesian3.subtract(pos, target, targetToCamera);\r\n // cesium.Cartesian3.normalize(targetToCamera, targetToCamera);\r\n\r\n // // HEADING\r\n // var up = self.viewer.camera.up;\r\n // var right = self.viewer.camera.right;\r\n // var normal = new cesium.Cartesian3(-target.y, target.x, 0);\r\n // var heading = cesium.Cartesian3.angleBetween(right, normal);\r\n // var cross = cesium.Cartesian3.cross(target, up, new cesium.Cartesian3());\r\n // var orientation = cross.z;\r\n\r\n // self.mapView.setRotation((orientation < 0 ? heading : -heading));\r\n // self.setViewFromCameraViewInProgress.resolve();\r\n //}\r\n\r\n return Promise.resolve();\r\n },\r\n\r\n lookAt: function (coords) {\r\n const self = this;\r\n\r\n if (self.crs !== self.view2DCRS) {\r\n coords = TC.Util.reproject(coords, self.view2DCRS, self.crs);\r\n }\r\n\r\n var camera = self.viewer.camera;\r\n var positionCartographic = camera.positionCartographic;\r\n var height = positionCartographic.height;\r\n var cartographic = new cesium.Cartographic(cesium.Math.toRadians(coords[0]), cesium.Math.toRadians(coords[1]), height)\r\n\r\n camera.flyTo({\r\n destination: cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height),\r\n duration: 1.0\r\n });\r\n },\r\n\r\n getInfoOnPickedPosition: function (pickedPosition) {\r\n var self = this;\r\n\r\n if (!pickedPosition) {\r\n return;\r\n } else {\r\n\r\n self.map.one(Consts.event.DRAWTABLE, function (_e) {\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n delete self.waiting;\r\n });\r\n\r\n self.view3D.linked2DControls.featureInfo.send.call(self, pickedPosition).then(function (_e) {\r\n self.map.getLoadingIndicator().removeWait(self.waiting);\r\n delete self.waiting;\r\n });\r\n }\r\n },\r\n\r\n on: function (event, callback) {\r\n const self = this;\r\n\r\n const movement3DtoPosition2D = function (movement) {\r\n if (self.viewer && self.viewer.cesiumWidget) {\r\n return self.Coordinates2DTo3D(movement.endPosition || movement.position)\r\n //var ray = self.viewer.camera.getPickRay(movement.endPosition || movement.position);\r\n //var position = self.viewer.scene.globe.pick(ray, self.viewer.scene);\r\n //if (position) {\r\n // var positionCartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\r\n\r\n // var lat, lon, ele;\r\n // lat = cesium.Math.toDegrees(positionCartographic.latitude);\r\n // lon = cesium.Math.toDegrees(positionCartographic.longitude);\r\n // ele = Math.round(positionCartographic.height);\r\n\r\n // return { lon: lon, lat: lat, ele: ele };\r\n //}\r\n }\r\n\r\n return null;\r\n };\r\n\r\n if (!self.eventHandlers) {\r\n self.eventHandlers = {};\r\n }\r\n\r\n self.eventHandlers.handlerOfMovementConversion = new cesium.ScreenSpaceEventHandler(self.viewer.scene.canvas);\r\n self.eventHandlers.handlerOfMovementConversion.setInputAction(function (event) {\r\n if (event.endPosition || event.position) {\r\n // Si estamos anclados a una entidad ignoro los click en el terreno\r\n if (self.viewer.trackedEntity) {\r\n return;\r\n }\r\n\r\n callback(movement3DtoPosition2D(event));\r\n } else {\r\n callback(event);\r\n }\r\n\r\n }, fromTCtoCesiumEvent(event));\r\n },\r\n\r\n getHeightFromMDT: function (geoCoords) {\r\n const self = this;\r\n\r\n var cartesian = new cesium.Cartographic(cesium.Math.toRadians(geoCoords[0]), cesium.Math.toRadians(geoCoords[1]));\r\n return self.viewer.scene.globe.getHeight(cartesian) || 0;\r\n },\r\n\r\n // darle una vuelta cuando esté mejor. no se me ocurre nada mejor\r\n addElevationMarker: function (coords, context) {\r\n const self = this;\r\n if (self.viewer && !self.viewer.view3DElevationMarkerPromise) {\r\n self.viewer.view3DElevationMarkerPromise = true;\r\n self.viewer.readyPromise.then(function () {\r\n delete self.viewer.view3DElevationMarkerPromise;\r\n const position = self.view2DCRS !== self.crs ? TC.Util.reproject(coords, self.view2DCRS, self.crs) : coords;\r\n let entity = new cesium.Entity({\r\n position: cesium.Cartesian3.fromDegrees(position[0], position[1]),\r\n name: 'elevationMarker',\r\n point: {\r\n show: true,\r\n color: cesium.Color.RED.withAlpha(0.5),\r\n pixelSize: 10,\r\n outlineColor: cesium.Color.WHITE,\r\n outlineWidth: 2,\r\n heightReference: cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n\r\n context.view3DElevationMarker = addFeature.call(self, entity);\r\n });\r\n }\r\n },\r\n setElevationMarker: function (coords, context) {\r\n const self = this;\r\n if (self.viewer) {\r\n self.viewer.readyPromise.then(function () {\r\n if (context.view3DElevationMarker) {\r\n const position = coords;\r\n //const position = self.view2DCRS !== self.crs ? TC.Util.reproject(coords, self.view2DCRS, self.crs) : coords;\r\n context.view3DElevationMarker.position = cesium.Cartesian3.fromDegrees(position[0], position[1], self.viewer.camera.positionCartographic.height);\r\n if (!context.view3DElevationMarker.show) {\r\n context.view3DElevationMarker.show = true;\r\n }\r\n self.viewer.scene.requestRender();\r\n } else {\r\n self.addElevationMarker(coords, context);\r\n }\r\n });\r\n }\r\n },\r\n hideElevationMarker: function (context) {\r\n const self = this;\r\n if (self.viewer && context.view3DElevationMarker) {\r\n self.viewer.readyPromise.then(function () {\r\n self.removeFeature.call(self, context.view3DElevationMarker);\r\n delete context.view3DElevationMarker;\r\n });\r\n }\r\n },\r\n\r\n destroy: function () {\r\n var self = this;\r\n\r\n self.map.on3DView = false;\r\n //self.map.view3D = null;\r\n\r\n self.view3D.vector2DLayers = [];\r\n self.view3D.vector2DFeatures = {\r\n };\r\n\r\n // eliminamos el enlace con los eventos del mapa 2D\r\n self.map.off(listenTo.join(' '), self.view3D._event2DHandler);\r\n\r\n // modificamos los controles disponibles\r\n alterAllowedControls.call(self, Consts.view.DEFAULT);\r\n\r\n // sobrescribimos el comportamiento de lo botones + /- y la casita\r\n override2DZoom.call(self, false);\r\n\r\n //addNoCompatibleBaseLayers.call(self);\r\n\r\n Promise.all(self.map.baseLayers.map(function (baseLayer) {\r\n return Promise.resolve(!isCompatible(baseLayer, self.view3D.view2DCRS));\r\n })).then(function (results) {\r\n let triggerEvent;\r\n if (results.length > 0) {\r\n var defaultBaseLayer;\r\n for (var i = 0; i < self.map.baseLayers.length; i++) {\r\n if (!defaultBaseLayer && !results[i]) {\r\n defaultBaseLayer = self.map.baseLayers[i];\r\n }\r\n if (self.map.baseLayers[i]) {\r\n self.map.baseLayers[i].mustReproject = results[i];\r\n }\r\n }\r\n triggerEvent = true;\r\n const showReprojectDialog = function (haveToChange, baseLayer, fallbackLayer) {\r\n const dialogOptions = {\r\n layer: baseLayer\r\n };\r\n\r\n if (fallbackLayer) {\r\n dialogOptions.fallbackLayer = fallbackLayer;\r\n }\r\n\r\n var control = self.map.getControlsByClass(haveToChange ? TC.control.BasemapSelector : TC.control.Coordinates);\r\n if (control.length > 0) {\r\n // gestionamos que el control de coordenadas no se renderice en el cambio de vista porque borra el modal de cambio de CRS\r\n if (control[0] instanceof TC.control.Coordinates) {\r\n triggerEvent = false;\r\n }\r\n dialogOptions.closeCallback = function () {\r\n self.map.trigger(Consts.event.VIEWCHANGE, { view: Consts.view.DEFAULT });\r\n };\r\n control[0].showProjectionChangeDialog(dialogOptions);\r\n }\r\n };\r\n\r\n var baseLayer = currentMapCfg.baseMap == self.Consts.BLANK_BASE ? currentMapCfg.baseVector : currentMapCfg.baseMap;\r\n if (!baseLayer.isCompatible(self.map.getCRS())) {\r\n\r\n if (!baseLayer.fallbackLayer) {\r\n showReprojectDialog(true, baseLayer);\r\n } else {\r\n baseLayer.getFallbackLayer();\r\n if (baseLayer.getFallbackLayer().isCompatible(self.map.getCRS())) {\r\n\r\n // antes de establecer como fondo la capa de respaldo, preguntar al usuario si prefiere cambiar de CRS o si quiere seguir reproyectando al vuelo.\r\n TC.confirm(self.getLocaleString('threed.changeBaselayer'),\r\n function () {\r\n showReprojectDialog(false, baseLayer, baseLayer.fallbackLayer);\r\n }, function () {\r\n self.map.setBaseLayer(baseLayer.fallbackLayer);\r\n });\r\n } else {\r\n showReprojectDialog(true, baseLayer);\r\n }\r\n }\r\n } else {\r\n self.map.setBaseLayer(baseLayer);\r\n }\r\n }\r\n\r\n currentMapCfg.baseMap = '';\r\n\r\n self.view3D.baseLayer = null;\r\n\r\n self.view3D.workLayers = [];\r\n\r\n self.map.workLayers.filter((wl) => wl.features?.length).forEach(function (wl) {\r\n wl.features.forEach((feature) => {\r\n if (feature?.wrap?.feature3D) {\r\n feature.setCoordinates(TC.Util.reproject(feature.geometry, self.view3D.crs, self.view3D.view2DCRS));\r\n }\r\n })\r\n });\r\n\r\n self.view3D.cameraControls.unbind();\r\n\r\n if (self.view3D.linked2DControls.featureInfo) {\r\n self.view3D.linked2DControls.featureInfo.reset();\r\n }\r\n\r\n if (self.view3D.linked2DControls.geolocation) {\r\n self.view3D.linked2DControls.geolocation.isGeo = false;\r\n self.view3D.linked2DControls.geolocation.reset();\r\n }\r\n\r\n\r\n\r\n self.view3D.tileLoadingHandler.removeAll();\r\n delete self.view3D.tileLoadingHandler;\r\n\r\n self.viewer.destroy();\r\n self.viewer = null;\r\n\r\n if (triggerEvent) { // si lanzamos sin más, el control de coordenadas se renderizada en el cambio de vista y borra el modal de cambio de CRS\r\n self.map.trigger(Consts.event.VIEWCHANGE, { view: Consts.view.DEFAULT });\r\n }\r\n });\r\n }\r\n }\r\n })();\r\n\r\n return {\r\n init: viewProto.init.bind(viewProto),\r\n apply: viewProto.apply.bind(viewProto),\r\n unapply: viewProto.unapply.bind(viewProto),\r\n VIEWNAME: viewProto.VIEWNAME\r\n };\r\n});\r\n\r\nexport default ThreeD;","import TC from '../TC';\r\nimport EventTarget from './EventTarget';\r\n\r\n// OpenLayers connectors\r\nconst wrap = {\r\n Map: function (map) {\r\n var self = this;\r\n self.parent = map;\r\n self.map = null;\r\n /*\r\n * wrap.getMap: Gets OpenLayers map or a promise for the OpenLayers map\r\n */\r\n self.getMap = function () {\r\n return self._promise;\r\n };\r\n },\r\n Layer: function (layer) {\r\n var self = this;\r\n self.parent = layer;\r\n self.layer = null;\r\n EventTarget.call(self);\r\n /*\r\n * getLayer: Gets OpenLayers layer or a promise for the OpenLayers layer\r\n */\r\n self.getLayer = function () {\r\n if (self.layer) {\r\n return Promise.resolve(self.layer);\r\n }\r\n return self._promise;\r\n };\r\n /*\r\n * setLayer: Resolves the deferred layer object\r\n * Parameter: the OpenLayers layer\r\n */\r\n self.setLayer = function (olLayer) {\r\n self.layer = olLayer;\r\n };\r\n },\r\n layer: {\r\n Raster: function () { wrap.Layer.apply(this, arguments); },\r\n Vector: function () { wrap.Layer.apply(this, arguments); }\r\n },\r\n Control: function (ctl) {\r\n var self = this;\r\n self.parent = ctl;\r\n },\r\n control: {\r\n Click: function () { wrap.Control.apply(this, arguments); },\r\n ScaleBar: function () { wrap.Control.apply(this, arguments); },\r\n NavBar: function () { wrap.Control.apply(this, arguments); },\r\n NavBarHome: function () { wrap.Control.apply(this, arguments); },\r\n Coordinates: function () { wrap.Control.apply(this, arguments); },\r\n Search: function () { wrap.Control.apply(this, arguments); },\r\n Measure: function () { wrap.Control.apply(this, arguments); },\r\n OverviewMap: function () { wrap.Control.apply(this, arguments); },\r\n FeatureInfo: function () { wrap.Control.apply(this, arguments); },\r\n Popup: function () { wrap.Control.apply(this, arguments); },\r\n GeometryFeatureInfo: function () { wrap.Control.apply(this, arguments); },\r\n Geolocation: function () { wrap.Control.apply(this, arguments); },\r\n Draw: function () { wrap.Control.apply(this, arguments); },\r\n Modify: function () { wrap.Control.apply(this, arguments); },\r\n OfflineMapMaker: function () { wrap.Control.apply(this, arguments); },\r\n Edit: function () { wrap.Control.apply(this, arguments); },\r\n ResultsPanel: function () { wrap.Control.apply(this, arguments); }\r\n },\r\n Feature: function () { },\r\n Geometry: function () { },\r\n};\r\n\r\nTC.inherit(wrap.Layer, EventTarget);\r\nTC.inherit(wrap.layer.Raster, wrap.Layer);\r\nTC.inherit(wrap.layer.Vector, wrap.Layer);\r\nTC.inherit(wrap.control.Click, wrap.Control);\r\nTC.inherit(wrap.control.ScaleBar, wrap.Control);\r\nTC.inherit(wrap.control.NavBar, wrap.Control);\r\nTC.inherit(wrap.control.NavBarHome, wrap.Control);\r\nTC.inherit(wrap.control.Coordinates, wrap.Control);\r\nTC.inherit(wrap.control.Measure, wrap.Control);\r\nTC.inherit(wrap.control.OverviewMap, wrap.Control);\r\nTC.inherit(wrap.control.Popup, wrap.Control);\r\nTC.inherit(wrap.control.FeatureInfo, wrap.control.Click);\r\nTC.inherit(wrap.control.GeometryFeatureInfo, wrap.control.Click);\r\nTC.inherit(wrap.control.Geolocation, wrap.Control);\r\nTC.inherit(wrap.control.Draw, wrap.Control);\r\nTC.inherit(wrap.control.OfflineMapMaker, wrap.Control);\r\nTC.inherit(wrap.control.Edit, wrap.Control);\r\nTC.inherit(wrap.control.ResultsPanel, wrap.Control);\r\n\r\nexport default wrap;","import Handlebars from 'handlebars/dist/handlebars';\r\nHandlebars.noConflict();\r\n\r\nHandlebars.registerHelper(\"i18n\", function (key, safe) {\r\n const value = TC.i18n.currentLocale[key];\r\n if (typeof value === 'string') {\r\n return safe ? new Handlebars.SafeString(value) : value;\r\n }\r\n return key;\r\n});\r\n\r\nHandlebars.registerHelper(\"gt\", function (v1, v2) {\r\n return v1 > v2;\r\n});\r\n\r\nHandlebars.registerHelper(\"lt\", function (v1, v2) {\r\n return v1 < v2;\r\n});\r\n\r\nHandlebars.registerHelper(\"eq\", function (v1, v2) {\r\n return v1 == v2;\r\n});\r\n\r\nHandlebars.registerHelper(\"every\", function () {\r\n return Array.from(arguments).slice(0, arguments.length - 1).every(v => v);\r\n});\r\n\r\nHandlebars.registerHelper(\"round\", function (value) {\r\n return Math.round(value);\r\n});\r\n\r\nHandlebars.registerHelper(\"lowerCase\", function (str) {\r\n return str && str.toLowerCase();\r\n});\r\n\r\nHandlebars.registerHelper(\"startsWith\", function (str, value) {\r\n return str && str.toString().startsWith(value);\r\n});\r\n\r\nHandlebars.registerHelper(\"isObject\", function (obj) {\r\n return obj instanceof Object && !Array.isArray(obj);\r\n});\r\n\r\nHandlebars.registerHelper(\"isEmpty\", function (obj) {\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n});\r\n\r\nHandlebars.registerHelper(\"isArray\", function (obj) {\r\n return Array.isArray(obj);\r\n});\r\n\r\nHandlebars.registerHelper(\"isUrl\", function (str) {\r\n return str && /^(http|https|ftp|mailto)\\:\\/\\//i.test(str);\r\n});\r\n\r\nHandlebars.registerHelper(\"getYoutubeId\", function (str) {\r\n if (str) {\r\n const match = str.match(/^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/);\r\n if (match) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n});\r\n\r\nHandlebars.registerHelper(\"getHeader\", function (str) {\r\n if (str) {\r\n const match = str.match(/^(h\\d+)_/);\r\n if (match) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n});\r\n\r\nconst tagRegExp = /(?:__(image|video|audio|embed)(?:_(\\d+|auto)_(\\d+|auto))?$)|(?:^(image|video|audio|embed)(?:_(\\d+|auto)_(\\d+|auto))?__)/;\r\n\r\nconst getAttributeTag = function (str) {\r\n if (str && typeof str === 'string') {\r\n const match = str.match(tagRegExp);\r\n if (match) {\r\n return match[1] || match[4];\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst getAttributeTagDimension = function (str, idx) {\r\n if (str) {\r\n const match = str.match(tagRegExp);\r\n if (match) {\r\n const value = match[idx + 1] || match[idx + 4];\r\n if (value !== 'auto') {\r\n return value ? value + 'px' : 'auto';\r\n }\r\n return value;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst isSpecialAttribute = function (name, value, tag) {\r\n return getAttributeTag(name) === tag || getAttributeTag(value) === tag;\r\n};\r\n\r\nHandlebars.registerHelper(\"isVideoAttribute\", function (name, value) {\r\n return isSpecialAttribute(name, value, 'video');\r\n});\r\n\r\nHandlebars.registerHelper(\"isAudioAttribute\", function (name, value) {\r\n return isSpecialAttribute(name, value, 'audio');\r\n});\r\n\r\nHandlebars.registerHelper(\"isImageAttribute\", function (name, value) {\r\n return isSpecialAttribute(name, value, 'image');\r\n});\r\n\r\nHandlebars.registerHelper(\"isEmbedAttribute\", function (name, value) {\r\n return isSpecialAttribute(name, value, 'embed');\r\n});\r\n\r\nHandlebars.registerHelper(\"hasDisplayName\", function (obj) {\r\n return obj && Object.prototype.hasOwnProperty.call(obj, \"displayName\") && Object.prototype.hasOwnProperty.call(obj, \"toString\");\r\n});\r\n\r\nHandlebars.registerHelper(\"getTagWidth\", function (name, value) {\r\n let result = getAttributeTagDimension(name, 1);\r\n if (!result) {\r\n result = getAttributeTagDimension(value, 1);\r\n }\r\n return result;\r\n});\r\n\r\nHandlebars.registerHelper(\"getTagHeight\", function (name, value) {\r\n let result = getAttributeTagDimension(name, 2);\r\n if (!result) {\r\n result = getAttributeTagDimension(value, 2);\r\n }\r\n return result;\r\n});\r\n\r\nHandlebars.registerHelper(\"removeSpecialAttributeTag\", function (str) {\r\n if (!str) {\r\n return null;\r\n }\r\n if (typeof str === 'string') {\r\n const match = str.match(tagRegExp);\r\n if (match) {\r\n const separator = '__';\r\n const tag = match[0];\r\n if (tag.indexOf(separator) === 0) {\r\n return str.substr(0, str.lastIndexOf(separator));\r\n }\r\n else {\r\n return str.substr(str.indexOf(separator) + separator.length);\r\n }\r\n }\r\n }\r\n return str;\r\n});\r\n\r\nHandlebars.registerHelper(\"isKeyValue\", function (obj) {\r\n return obj && Object.prototype.hasOwnProperty.call(obj, \"value\") && typeof obj[\"value\"] !== 'object';\r\n});\r\n \r\nHandlebars._getIdHelperIds = [];\r\nHandlebars.registerHelper(\"getId\", function (obj) {\r\n let found = Handlebars._getIdHelperIds.find((item) => { return item.obj === obj });\r\n if (!found) {\r\n Handlebars._getIdHelperIds.push(found = { obj: obj, id: TC.getUID() });\r\n }\r\n return found.id;\r\n});\r\n\r\n//condición IF si una coleccion de atributos tiene 1 o mas elementos. Tiene una lista negra llamada excludedKeys\r\nHandlebars.registerHelper(\"countif\", function (obj, excludedKeys) {\r\n const excKeys = excludedKeys ? excludedKeys.split(',') : [];\r\n let _count = 0\r\n for (let k in obj) {\r\n if (excKeys.indexOf(k) < 0) {\r\n _count++;\r\n }\r\n }\r\n return _count > 0;\r\n});\r\n\r\nHandlebars.registerHelper(\"formatDateOrNumber\", function (obj) {\r\n if (obj && /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{0,3}){0,1}Z$/.test(obj)) {\r\n return new Date(obj).toLocaleString(TC.i18n.currentLocaleKey && TC.i18n.currentLocaleKey.length > 2 ? TC.i18n.currentLocaleKey.substr(0, 2) : TC.i18n.currentLocaleKey, { hour12: false });\r\n }\r\n if (obj && /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])Z$/.test(obj)) {\r\n if (isNaN(Date.parse(obj)))\r\n obj = obj.replace('Z', '');\r\n return new Date(obj).toLocaleDateString(TC.i18n.currentLocaleKey && TC.i18n.currentLocaleKey.length > 2 ? TC.i18n.currentLocaleKey.substr(0, 2) : TC.i18n.currentLocaleKey);\r\n\r\n }\r\n if (typeof obj === 'number' || (typeof (obj) === 'string') && !isNaN(obj)) {\r\n return TC.Util.formatNumber(obj, TC.i18n.currentLocaleKey);\r\n } \r\n return obj;\r\n})\r\nHandlebars.registerHelper(\"formatNumber\", function (value, locale) {\r\n return value.toLocaleString(locale);\r\n}); \r\n\r\nexport default Handlebars;","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","/**!\n\n @license\n handlebars v4.7.7\n\nCopyright (C) 2011-2019 by Yehuda Katz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Handlebars\"] = factory();\n\telse\n\t\troot[\"Handlebars\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _handlebarsRuntime = __webpack_require__(2);\n\n\tvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n\t// Compiler imports\n\n\tvar _handlebarsCompilerAst = __webpack_require__(45);\n\n\tvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\n\tvar _handlebarsCompilerBase = __webpack_require__(46);\n\n\tvar _handlebarsCompilerCompiler = __webpack_require__(51);\n\n\tvar _handlebarsCompilerJavascriptCompiler = __webpack_require__(52);\n\n\tvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\n\tvar _handlebarsCompilerVisitor = __webpack_require__(49);\n\n\tvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\n\tvar _handlebarsNoConflict = __webpack_require__(44);\n\n\tvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n\tvar _create = _handlebarsRuntime2['default'].create;\n\tfunction create() {\n\t var hb = _create();\n\n\t hb.compile = function (input, options) {\n\t return _handlebarsCompilerCompiler.compile(input, options, hb);\n\t };\n\t hb.precompile = function (input, options) {\n\t return _handlebarsCompilerCompiler.precompile(input, options, hb);\n\t };\n\n\t hb.AST = _handlebarsCompilerAst2['default'];\n\t hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n\t hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n\t hb.Parser = _handlebarsCompilerBase.parser;\n\t hb.parse = _handlebarsCompilerBase.parse;\n\t hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n\t return hb;\n\t}\n\n\tvar inst = create();\n\tinst.create = create;\n\n\t_handlebarsNoConflict2['default'](inst);\n\n\tinst.Visitor = _handlebarsCompilerVisitor2['default'];\n\n\tinst['default'] = inst;\n\n\texports['default'] = inst;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\texports[\"default\"] = function (obj) {\n\t return obj && obj.__esModule ? obj : {\n\t \"default\": obj\n\t };\n\t};\n\n\texports.__esModule = true;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _handlebarsBase = __webpack_require__(4);\n\n\tvar base = _interopRequireWildcard(_handlebarsBase);\n\n\t// Each of these augment the Handlebars object. No need to setup here.\n\t// (This is done to easily share code between commonjs and browse envs)\n\n\tvar _handlebarsSafeString = __webpack_require__(37);\n\n\tvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\n\tvar _handlebarsException = __webpack_require__(6);\n\n\tvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\n\tvar _handlebarsUtils = __webpack_require__(5);\n\n\tvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\n\tvar _handlebarsRuntime = __webpack_require__(38);\n\n\tvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\n\tvar _handlebarsNoConflict = __webpack_require__(44);\n\n\tvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n\t// For compatibility and usage outside of module systems, make the Handlebars object a namespace\n\tfunction create() {\n\t var hb = new base.HandlebarsEnvironment();\n\n\t Utils.extend(hb, base);\n\t hb.SafeString = _handlebarsSafeString2['default'];\n\t hb.Exception = _handlebarsException2['default'];\n\t hb.Utils = Utils;\n\t hb.escapeExpression = Utils.escapeExpression;\n\n\t hb.VM = runtime;\n\t hb.template = function (spec) {\n\t return runtime.template(spec, hb);\n\t };\n\n\t return hb;\n\t}\n\n\tvar inst = create();\n\tinst.create = create;\n\n\t_handlebarsNoConflict2['default'](inst);\n\n\tinst['default'] = inst;\n\n\texports['default'] = inst;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\texports[\"default\"] = function (obj) {\n\t if (obj && obj.__esModule) {\n\t return obj;\n\t } else {\n\t var newObj = {};\n\n\t if (obj != null) {\n\t for (var key in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n\t }\n\t }\n\n\t newObj[\"default\"] = obj;\n\t return newObj;\n\t }\n\t};\n\n\texports.__esModule = true;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.HandlebarsEnvironment = HandlebarsEnvironment;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tvar _helpers = __webpack_require__(10);\n\n\tvar _decorators = __webpack_require__(30);\n\n\tvar _logger = __webpack_require__(32);\n\n\tvar _logger2 = _interopRequireDefault(_logger);\n\n\tvar _internalProtoAccess = __webpack_require__(33);\n\n\tvar VERSION = '4.7.7';\n\texports.VERSION = VERSION;\n\tvar COMPILER_REVISION = 8;\n\texports.COMPILER_REVISION = COMPILER_REVISION;\n\tvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\n\texports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\n\tvar REVISION_CHANGES = {\n\t 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n\t 2: '== 1.0.0-rc.3',\n\t 3: '== 1.0.0-rc.4',\n\t 4: '== 1.x.x',\n\t 5: '== 2.0.0-alpha.x',\n\t 6: '>= 2.0.0-beta.1',\n\t 7: '>= 4.0.0 <4.3.0',\n\t 8: '>= 4.3.0'\n\t};\n\n\texports.REVISION_CHANGES = REVISION_CHANGES;\n\tvar objectType = '[object Object]';\n\n\tfunction HandlebarsEnvironment(helpers, partials, decorators) {\n\t this.helpers = helpers || {};\n\t this.partials = partials || {};\n\t this.decorators = decorators || {};\n\n\t _helpers.registerDefaultHelpers(this);\n\t _decorators.registerDefaultDecorators(this);\n\t}\n\n\tHandlebarsEnvironment.prototype = {\n\t constructor: HandlebarsEnvironment,\n\n\t logger: _logger2['default'],\n\t log: _logger2['default'].log,\n\n\t registerHelper: function registerHelper(name, fn) {\n\t if (_utils.toString.call(name) === objectType) {\n\t if (fn) {\n\t throw new _exception2['default']('Arg not supported with multiple helpers');\n\t }\n\t _utils.extend(this.helpers, name);\n\t } else {\n\t this.helpers[name] = fn;\n\t }\n\t },\n\t unregisterHelper: function unregisterHelper(name) {\n\t delete this.helpers[name];\n\t },\n\n\t registerPartial: function registerPartial(name, partial) {\n\t if (_utils.toString.call(name) === objectType) {\n\t _utils.extend(this.partials, name);\n\t } else {\n\t if (typeof partial === 'undefined') {\n\t throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n\t }\n\t this.partials[name] = partial;\n\t }\n\t },\n\t unregisterPartial: function unregisterPartial(name) {\n\t delete this.partials[name];\n\t },\n\n\t registerDecorator: function registerDecorator(name, fn) {\n\t if (_utils.toString.call(name) === objectType) {\n\t if (fn) {\n\t throw new _exception2['default']('Arg not supported with multiple decorators');\n\t }\n\t _utils.extend(this.decorators, name);\n\t } else {\n\t this.decorators[name] = fn;\n\t }\n\t },\n\t unregisterDecorator: function unregisterDecorator(name) {\n\t delete this.decorators[name];\n\t },\n\t /**\n\t * Reset the memory of illegal property accesses that have already been logged.\n\t * @deprecated should only be used in handlebars test-cases\n\t */\n\t resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n\t _internalProtoAccess.resetLoggedProperties();\n\t }\n\t};\n\n\tvar log = _logger2['default'].log;\n\n\texports.log = log;\n\texports.createFrame = _utils.createFrame;\n\texports.logger = _logger2['default'];\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.extend = extend;\n\texports.indexOf = indexOf;\n\texports.escapeExpression = escapeExpression;\n\texports.isEmpty = isEmpty;\n\texports.createFrame = createFrame;\n\texports.blockParams = blockParams;\n\texports.appendContextPath = appendContextPath;\n\tvar escape = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`',\n\t '=': '='\n\t};\n\n\tvar badChars = /[&<>\"'`=]/g,\n\t possible = /[&<>\"'`=]/;\n\n\tfunction escapeChar(chr) {\n\t return escape[chr];\n\t}\n\n\tfunction extend(obj /* , ...source */) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t for (var key in arguments[i]) {\n\t if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n\t obj[key] = arguments[i][key];\n\t }\n\t }\n\t }\n\n\t return obj;\n\t}\n\n\tvar toString = Object.prototype.toString;\n\n\texports.toString = toString;\n\t// Sourced from lodash\n\t// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n\t/* eslint-disable func-style */\n\tvar isFunction = function isFunction(value) {\n\t return typeof value === 'function';\n\t};\n\t// fallback for older versions of Chrome and Safari\n\t/* istanbul ignore next */\n\tif (isFunction(/x/)) {\n\t exports.isFunction = isFunction = function (value) {\n\t return typeof value === 'function' && toString.call(value) === '[object Function]';\n\t };\n\t}\n\texports.isFunction = isFunction;\n\n\t/* eslint-enable func-style */\n\n\t/* istanbul ignore next */\n\tvar isArray = Array.isArray || function (value) {\n\t return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n\t};\n\n\texports.isArray = isArray;\n\t// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\n\tfunction indexOf(array, value) {\n\t for (var i = 0, len = array.length; i < len; i++) {\n\t if (array[i] === value) {\n\t return i;\n\t }\n\t }\n\t return -1;\n\t}\n\n\tfunction escapeExpression(string) {\n\t if (typeof string !== 'string') {\n\t // don't escape SafeStrings, since they're already safe\n\t if (string && string.toHTML) {\n\t return string.toHTML();\n\t } else if (string == null) {\n\t return '';\n\t } else if (!string) {\n\t return string + '';\n\t }\n\n\t // Force a string conversion as this will be done by the append regardless and\n\t // the regex test will do this transparently behind the scenes, causing issues if\n\t // an object's to string has escaped characters in it.\n\t string = '' + string;\n\t }\n\n\t if (!possible.test(string)) {\n\t return string;\n\t }\n\t return string.replace(badChars, escapeChar);\n\t}\n\n\tfunction isEmpty(value) {\n\t if (!value && value !== 0) {\n\t return true;\n\t } else if (isArray(value) && value.length === 0) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t}\n\n\tfunction createFrame(object) {\n\t var frame = extend({}, object);\n\t frame._parent = object;\n\t return frame;\n\t}\n\n\tfunction blockParams(params, ids) {\n\t params.path = ids;\n\t return params;\n\t}\n\n\tfunction appendContextPath(contextPath, id) {\n\t return (contextPath ? contextPath + '.' : '') + id;\n\t}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _Object$defineProperty = __webpack_require__(7)['default'];\n\n\texports.__esModule = true;\n\tvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\n\tfunction Exception(message, node) {\n\t var loc = node && node.loc,\n\t line = undefined,\n\t endLineNumber = undefined,\n\t column = undefined,\n\t endColumn = undefined;\n\n\t if (loc) {\n\t line = loc.start.line;\n\t endLineNumber = loc.end.line;\n\t column = loc.start.column;\n\t endColumn = loc.end.column;\n\n\t message += ' - ' + line + ':' + column;\n\t }\n\n\t var tmp = Error.prototype.constructor.call(this, message);\n\n\t // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n\t for (var idx = 0; idx < errorProps.length; idx++) {\n\t this[errorProps[idx]] = tmp[errorProps[idx]];\n\t }\n\n\t /* istanbul ignore else */\n\t if (Error.captureStackTrace) {\n\t Error.captureStackTrace(this, Exception);\n\t }\n\n\t try {\n\t if (loc) {\n\t this.lineNumber = line;\n\t this.endLineNumber = endLineNumber;\n\n\t // Work around issue under safari where we can't directly set the column value\n\t /* istanbul ignore next */\n\t if (_Object$defineProperty) {\n\t Object.defineProperty(this, 'column', {\n\t value: column,\n\t enumerable: true\n\t });\n\t Object.defineProperty(this, 'endColumn', {\n\t value: endColumn,\n\t enumerable: true\n\t });\n\t } else {\n\t this.column = column;\n\t this.endColumn = endColumn;\n\t }\n\t }\n\t } catch (nop) {\n\t /* Ignore if the browser is very particular */\n\t }\n\t}\n\n\tException.prototype = new Error();\n\n\texports['default'] = Exception;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(8), __esModule: true };\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar $ = __webpack_require__(9);\n\tmodule.exports = function defineProperty(it, key, desc){\n\t return $.setDesc(it, key, desc);\n\t};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\tvar $Object = Object;\n\tmodule.exports = {\n\t create: $Object.create,\n\t getProto: $Object.getPrototypeOf,\n\t isEnum: {}.propertyIsEnumerable,\n\t getDesc: $Object.getOwnPropertyDescriptor,\n\t setDesc: $Object.defineProperty,\n\t setDescs: $Object.defineProperties,\n\t getKeys: $Object.keys,\n\t getNames: $Object.getOwnPropertyNames,\n\t getSymbols: $Object.getOwnPropertySymbols,\n\t each: [].forEach\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.registerDefaultHelpers = registerDefaultHelpers;\n\texports.moveHelperToHooks = moveHelperToHooks;\n\n\tvar _helpersBlockHelperMissing = __webpack_require__(11);\n\n\tvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\n\tvar _helpersEach = __webpack_require__(12);\n\n\tvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\n\tvar _helpersHelperMissing = __webpack_require__(25);\n\n\tvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\n\tvar _helpersIf = __webpack_require__(26);\n\n\tvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\n\tvar _helpersLog = __webpack_require__(27);\n\n\tvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\n\tvar _helpersLookup = __webpack_require__(28);\n\n\tvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\n\tvar _helpersWith = __webpack_require__(29);\n\n\tvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\n\tfunction registerDefaultHelpers(instance) {\n\t _helpersBlockHelperMissing2['default'](instance);\n\t _helpersEach2['default'](instance);\n\t _helpersHelperMissing2['default'](instance);\n\t _helpersIf2['default'](instance);\n\t _helpersLog2['default'](instance);\n\t _helpersLookup2['default'](instance);\n\t _helpersWith2['default'](instance);\n\t}\n\n\tfunction moveHelperToHooks(instance, helperName, keepHelper) {\n\t if (instance.helpers[helperName]) {\n\t instance.hooks[helperName] = instance.helpers[helperName];\n\t if (!keepHelper) {\n\t delete instance.helpers[helperName];\n\t }\n\t }\n\t}\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('blockHelperMissing', function (context, options) {\n\t var inverse = options.inverse,\n\t fn = options.fn;\n\n\t if (context === true) {\n\t return fn(this);\n\t } else if (context === false || context == null) {\n\t return inverse(this);\n\t } else if (_utils.isArray(context)) {\n\t if (context.length > 0) {\n\t if (options.ids) {\n\t options.ids = [options.name];\n\t }\n\n\t return instance.helpers.each(context, options);\n\t } else {\n\t return inverse(this);\n\t }\n\t } else {\n\t if (options.data && options.ids) {\n\t var data = _utils.createFrame(options.data);\n\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n\t options = { data: data };\n\t }\n\n\t return fn(context, options);\n\t }\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\n\tvar _Object$keys = __webpack_require__(13)['default'];\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('each', function (context, options) {\n\t if (!options) {\n\t throw new _exception2['default']('Must pass iterator to #each');\n\t }\n\n\t var fn = options.fn,\n\t inverse = options.inverse,\n\t i = 0,\n\t ret = '',\n\t data = undefined,\n\t contextPath = undefined;\n\n\t if (options.data && options.ids) {\n\t contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n\t }\n\n\t if (_utils.isFunction(context)) {\n\t context = context.call(this);\n\t }\n\n\t if (options.data) {\n\t data = _utils.createFrame(options.data);\n\t }\n\n\t function execIteration(field, index, last) {\n\t if (data) {\n\t data.key = field;\n\t data.index = index;\n\t data.first = index === 0;\n\t data.last = !!last;\n\n\t if (contextPath) {\n\t data.contextPath = contextPath + field;\n\t }\n\t }\n\n\t ret = ret + fn(context[field], {\n\t data: data,\n\t blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n\t });\n\t }\n\n\t if (context && typeof context === 'object') {\n\t if (_utils.isArray(context)) {\n\t for (var j = context.length; i < j; i++) {\n\t if (i in context) {\n\t execIteration(i, i, i === context.length - 1);\n\t }\n\t }\n\t } else if (global.Symbol && context[global.Symbol.iterator]) {\n\t var newContext = [];\n\t var iterator = context[global.Symbol.iterator]();\n\t for (var it = iterator.next(); !it.done; it = iterator.next()) {\n\t newContext.push(it.value);\n\t }\n\t context = newContext;\n\t for (var j = context.length; i < j; i++) {\n\t execIteration(i, i, i === context.length - 1);\n\t }\n\t } else {\n\t (function () {\n\t var priorKey = undefined;\n\n\t _Object$keys(context).forEach(function (key) {\n\t // We're running the iterations one step out of sync so we can detect\n\t // the last iteration without have to scan the object twice and create\n\t // an itermediate keys array.\n\t if (priorKey !== undefined) {\n\t execIteration(priorKey, i - 1);\n\t }\n\t priorKey = key;\n\t i++;\n\t });\n\t if (priorKey !== undefined) {\n\t execIteration(priorKey, i - 1, true);\n\t }\n\t })();\n\t }\n\t }\n\n\t if (i === 0) {\n\t ret = inverse(this);\n\t }\n\n\t return ret;\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(14), __esModule: true };\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(15);\n\tmodule.exports = __webpack_require__(21).Object.keys;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 Object.keys(O)\n\tvar toObject = __webpack_require__(16);\n\n\t__webpack_require__(18)('keys', function($keys){\n\t return function keys(it){\n\t return $keys(toObject(it));\n\t };\n\t});\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// 7.1.13 ToObject(argument)\n\tvar defined = __webpack_require__(17);\n\tmodule.exports = function(it){\n\t return Object(defined(it));\n\t};\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tmodule.exports = function(it){\n\t if(it == undefined)throw TypeError(\"Can't call method on \" + it);\n\t return it;\n\t};\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// most Object methods by ES6 should accept primitives\n\tvar $export = __webpack_require__(19)\n\t , core = __webpack_require__(21)\n\t , fails = __webpack_require__(24);\n\tmodule.exports = function(KEY, exec){\n\t var fn = (core.Object || {})[KEY] || Object[KEY]\n\t , exp = {};\n\t exp[KEY] = exec(fn);\n\t $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n\t};\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(20)\n\t , core = __webpack_require__(21)\n\t , ctx = __webpack_require__(22)\n\t , PROTOTYPE = 'prototype';\n\n\tvar $export = function(type, name, source){\n\t var IS_FORCED = type & $export.F\n\t , IS_GLOBAL = type & $export.G\n\t , IS_STATIC = type & $export.S\n\t , IS_PROTO = type & $export.P\n\t , IS_BIND = type & $export.B\n\t , IS_WRAP = type & $export.W\n\t , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n\t , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n\t , key, own, out;\n\t if(IS_GLOBAL)source = name;\n\t for(key in source){\n\t // contains in native\n\t own = !IS_FORCED && target && key in target;\n\t if(own && key in exports)continue;\n\t // export native or passed\n\t out = own ? target[key] : source[key];\n\t // prevent global pollution for namespaces\n\t exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t // bind timers to global for call from export context\n\t : IS_BIND && own ? ctx(out, global)\n\t // wrap global constructors for prevent change them in library\n\t : IS_WRAP && target[key] == out ? (function(C){\n\t var F = function(param){\n\t return this instanceof C ? new C(param) : C(param);\n\t };\n\t F[PROTOTYPE] = C[PROTOTYPE];\n\t return F;\n\t // make static versions for prototype methods\n\t })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;\n\t }\n\t};\n\t// type bitmap\n\t$export.F = 1; // forced\n\t$export.G = 2; // global\n\t$export.S = 4; // static\n\t$export.P = 8; // proto\n\t$export.B = 16; // bind\n\t$export.W = 32; // wrap\n\tmodule.exports = $export;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\tif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\tvar core = module.exports = {version: '1.2.6'};\n\tif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// optional / simple context binding\n\tvar aFunction = __webpack_require__(23);\n\tmodule.exports = function(fn, that, length){\n\t aFunction(fn);\n\t if(that === undefined)return fn;\n\t switch(length){\n\t case 1: return function(a){\n\t return fn.call(that, a);\n\t };\n\t case 2: return function(a, b){\n\t return fn.call(that, a, b);\n\t };\n\t case 3: return function(a, b, c){\n\t return fn.call(that, a, b, c);\n\t };\n\t }\n\t return function(/* ...args */){\n\t return fn.apply(that, arguments);\n\t };\n\t};\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(it){\n\t if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n\t return it;\n\t};\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(exec){\n\t try {\n\t return !!exec();\n\t } catch(e){\n\t return true;\n\t }\n\t};\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('helperMissing', function () /* [args, ]options */{\n\t if (arguments.length === 1) {\n\t // A missing field in a {{foo}} construct.\n\t return undefined;\n\t } else {\n\t // Someone is actually trying to call something, blow up.\n\t throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n\t }\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('if', function (conditional, options) {\n\t if (arguments.length != 2) {\n\t throw new _exception2['default']('#if requires exactly one argument');\n\t }\n\t if (_utils.isFunction(conditional)) {\n\t conditional = conditional.call(this);\n\t }\n\n\t // Default behavior is to render the positive path if the value is truthy and not empty.\n\t // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n\t // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n\t if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n\t return options.inverse(this);\n\t } else {\n\t return options.fn(this);\n\t }\n\t });\n\n\t instance.registerHelper('unless', function (conditional, options) {\n\t if (arguments.length != 2) {\n\t throw new _exception2['default']('#unless requires exactly one argument');\n\t }\n\t return instance.helpers['if'].call(this, conditional, {\n\t fn: options.inverse,\n\t inverse: options.fn,\n\t hash: options.hash\n\t });\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('log', function () /* message, options */{\n\t var args = [undefined],\n\t options = arguments[arguments.length - 1];\n\t for (var i = 0; i < arguments.length - 1; i++) {\n\t args.push(arguments[i]);\n\t }\n\n\t var level = 1;\n\t if (options.hash.level != null) {\n\t level = options.hash.level;\n\t } else if (options.data && options.data.level != null) {\n\t level = options.data.level;\n\t }\n\t args[0] = level;\n\n\t instance.log.apply(instance, args);\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('lookup', function (obj, field, options) {\n\t if (!obj) {\n\t // Note for 5.0: Change to \"obj == null\" in 5.0\n\t return obj;\n\t }\n\t return options.lookupProperty(obj, field);\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\texports['default'] = function (instance) {\n\t instance.registerHelper('with', function (context, options) {\n\t if (arguments.length != 2) {\n\t throw new _exception2['default']('#with requires exactly one argument');\n\t }\n\t if (_utils.isFunction(context)) {\n\t context = context.call(this);\n\t }\n\n\t var fn = options.fn;\n\n\t if (!_utils.isEmpty(context)) {\n\t var data = options.data;\n\t if (options.data && options.ids) {\n\t data = _utils.createFrame(options.data);\n\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n\t }\n\n\t return fn(context, {\n\t data: data,\n\t blockParams: _utils.blockParams([context], [data && data.contextPath])\n\t });\n\t } else {\n\t return options.inverse(this);\n\t }\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.registerDefaultDecorators = registerDefaultDecorators;\n\n\tvar _decoratorsInline = __webpack_require__(31);\n\n\tvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\n\tfunction registerDefaultDecorators(instance) {\n\t _decoratorsInline2['default'](instance);\n\t}\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\texports['default'] = function (instance) {\n\t instance.registerDecorator('inline', function (fn, props, container, options) {\n\t var ret = fn;\n\t if (!props.partials) {\n\t props.partials = {};\n\t ret = function (context, options) {\n\t // Create a new partials stack frame prior to exec.\n\t var original = container.partials;\n\t container.partials = _utils.extend({}, original, props.partials);\n\t var ret = fn(context, options);\n\t container.partials = original;\n\t return ret;\n\t };\n\t }\n\n\t props.partials[options.args[0]] = options.fn;\n\n\t return ret;\n\t });\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar logger = {\n\t methodMap: ['debug', 'info', 'warn', 'error'],\n\t level: 'info',\n\n\t // Maps a given level value to the `methodMap` indexes above.\n\t lookupLevel: function lookupLevel(level) {\n\t if (typeof level === 'string') {\n\t var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n\t if (levelMap >= 0) {\n\t level = levelMap;\n\t } else {\n\t level = parseInt(level, 10);\n\t }\n\t }\n\n\t return level;\n\t },\n\n\t // Can be overridden in the host environment\n\t log: function log(level) {\n\t level = logger.lookupLevel(level);\n\n\t if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n\t var method = logger.methodMap[level];\n\t // eslint-disable-next-line no-console\n\t if (!console[method]) {\n\t method = 'log';\n\t }\n\n\t for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t message[_key - 1] = arguments[_key];\n\t }\n\n\t console[method].apply(console, message); // eslint-disable-line no-console\n\t }\n\t }\n\t};\n\n\texports['default'] = logger;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _Object$create = __webpack_require__(34)['default'];\n\n\tvar _Object$keys = __webpack_require__(13)['default'];\n\n\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\n\texports.__esModule = true;\n\texports.createProtoAccessControl = createProtoAccessControl;\n\texports.resultIsAllowed = resultIsAllowed;\n\texports.resetLoggedProperties = resetLoggedProperties;\n\n\tvar _createNewLookupObject = __webpack_require__(36);\n\n\tvar _logger = __webpack_require__(32);\n\n\tvar logger = _interopRequireWildcard(_logger);\n\n\tvar loggedProperties = _Object$create(null);\n\n\tfunction createProtoAccessControl(runtimeOptions) {\n\t var defaultMethodWhiteList = _Object$create(null);\n\t defaultMethodWhiteList['constructor'] = false;\n\t defaultMethodWhiteList['__defineGetter__'] = false;\n\t defaultMethodWhiteList['__defineSetter__'] = false;\n\t defaultMethodWhiteList['__lookupGetter__'] = false;\n\n\t var defaultPropertyWhiteList = _Object$create(null);\n\t // eslint-disable-next-line no-proto\n\t defaultPropertyWhiteList['__proto__'] = false;\n\n\t return {\n\t properties: {\n\t whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n\t defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n\t },\n\t methods: {\n\t whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n\t defaultValue: runtimeOptions.allowProtoMethodsByDefault\n\t }\n\t };\n\t}\n\n\tfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n\t if (typeof result === 'function') {\n\t return checkWhiteList(protoAccessControl.methods, propertyName);\n\t } else {\n\t return checkWhiteList(protoAccessControl.properties, propertyName);\n\t }\n\t}\n\n\tfunction checkWhiteList(protoAccessControlForType, propertyName) {\n\t if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n\t return protoAccessControlForType.whitelist[propertyName] === true;\n\t }\n\t if (protoAccessControlForType.defaultValue !== undefined) {\n\t return protoAccessControlForType.defaultValue;\n\t }\n\t logUnexpecedPropertyAccessOnce(propertyName);\n\t return false;\n\t}\n\n\tfunction logUnexpecedPropertyAccessOnce(propertyName) {\n\t if (loggedProperties[propertyName] !== true) {\n\t loggedProperties[propertyName] = true;\n\t logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n\t }\n\t}\n\n\tfunction resetLoggedProperties() {\n\t _Object$keys(loggedProperties).forEach(function (propertyName) {\n\t delete loggedProperties[propertyName];\n\t });\n\t}\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(35), __esModule: true };\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar $ = __webpack_require__(9);\n\tmodule.exports = function create(P, D){\n\t return $.create(P, D);\n\t};\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _Object$create = __webpack_require__(34)['default'];\n\n\texports.__esModule = true;\n\texports.createNewLookupObject = createNewLookupObject;\n\n\tvar _utils = __webpack_require__(5);\n\n\t/**\n\t * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n\t * The resulting object can be used with \"object[property]\" to check if a property exists\n\t * @param {...object} sources a varargs parameter of source objects that will be merged\n\t * @returns {object}\n\t */\n\n\tfunction createNewLookupObject() {\n\t for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n\t sources[_key] = arguments[_key];\n\t }\n\n\t return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));\n\t}\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t// Build out our basic SafeString type\n\t'use strict';\n\n\texports.__esModule = true;\n\tfunction SafeString(string) {\n\t this.string = string;\n\t}\n\n\tSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n\t return '' + this.string;\n\t};\n\n\texports['default'] = SafeString;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _Object$seal = __webpack_require__(39)['default'];\n\n\tvar _Object$keys = __webpack_require__(13)['default'];\n\n\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.checkRevision = checkRevision;\n\texports.template = template;\n\texports.wrapProgram = wrapProgram;\n\texports.resolvePartial = resolvePartial;\n\texports.invokePartial = invokePartial;\n\texports.noop = noop;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar Utils = _interopRequireWildcard(_utils);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tvar _base = __webpack_require__(4);\n\n\tvar _helpers = __webpack_require__(10);\n\n\tvar _internalWrapHelper = __webpack_require__(43);\n\n\tvar _internalProtoAccess = __webpack_require__(33);\n\n\tfunction checkRevision(compilerInfo) {\n\t var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n\t currentRevision = _base.COMPILER_REVISION;\n\n\t if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n\t return;\n\t }\n\n\t if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n\t var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n\t compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n\t throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n\t } else {\n\t // Use the embedded version info since the runtime doesn't know about this revision yet\n\t throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n\t }\n\t}\n\n\tfunction template(templateSpec, env) {\n\t /* istanbul ignore next */\n\t if (!env) {\n\t throw new _exception2['default']('No environment passed to template');\n\t }\n\t if (!templateSpec || !templateSpec.main) {\n\t throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n\t }\n\n\t templateSpec.main.decorator = templateSpec.main_d;\n\n\t // Note: Using env.VM references rather than local var references throughout this section to allow\n\t // for external users to override these as pseudo-supported APIs.\n\t env.VM.checkRevision(templateSpec.compiler);\n\n\t // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n\t var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n\t function invokePartialWrapper(partial, context, options) {\n\t if (options.hash) {\n\t context = Utils.extend({}, context, options.hash);\n\t if (options.ids) {\n\t options.ids[0] = true;\n\t }\n\t }\n\t partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n\t var extendedOptions = Utils.extend({}, options, {\n\t hooks: this.hooks,\n\t protoAccessControl: this.protoAccessControl\n\t });\n\n\t var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n\t if (result == null && env.compile) {\n\t options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n\t result = options.partials[options.name](context, extendedOptions);\n\t }\n\t if (result != null) {\n\t if (options.indent) {\n\t var lines = result.split('\\n');\n\t for (var i = 0, l = lines.length; i < l; i++) {\n\t if (!lines[i] && i + 1 === l) {\n\t break;\n\t }\n\n\t lines[i] = options.indent + lines[i];\n\t }\n\t result = lines.join('\\n');\n\t }\n\t return result;\n\t } else {\n\t throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n\t }\n\t }\n\n\t // Just add water\n\t var container = {\n\t strict: function strict(obj, name, loc) {\n\t if (!obj || !(name in obj)) {\n\t throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n\t loc: loc\n\t });\n\t }\n\t return container.lookupProperty(obj, name);\n\t },\n\t lookupProperty: function lookupProperty(parent, propertyName) {\n\t var result = parent[propertyName];\n\t if (result == null) {\n\t return result;\n\t }\n\t if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n\t return result;\n\t }\n\n\t if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n\t return result;\n\t }\n\t return undefined;\n\t },\n\t lookup: function lookup(depths, name) {\n\t var len = depths.length;\n\t for (var i = 0; i < len; i++) {\n\t var result = depths[i] && container.lookupProperty(depths[i], name);\n\t if (result != null) {\n\t return depths[i][name];\n\t }\n\t }\n\t },\n\t lambda: function lambda(current, context) {\n\t return typeof current === 'function' ? current.call(context) : current;\n\t },\n\n\t escapeExpression: Utils.escapeExpression,\n\t invokePartial: invokePartialWrapper,\n\n\t fn: function fn(i) {\n\t var ret = templateSpec[i];\n\t ret.decorator = templateSpec[i + '_d'];\n\t return ret;\n\t },\n\n\t programs: [],\n\t program: function program(i, data, declaredBlockParams, blockParams, depths) {\n\t var programWrapper = this.programs[i],\n\t fn = this.fn(i);\n\t if (data || depths || blockParams || declaredBlockParams) {\n\t programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n\t } else if (!programWrapper) {\n\t programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n\t }\n\t return programWrapper;\n\t },\n\n\t data: function data(value, depth) {\n\t while (value && depth--) {\n\t value = value._parent;\n\t }\n\t return value;\n\t },\n\t mergeIfNeeded: function mergeIfNeeded(param, common) {\n\t var obj = param || common;\n\n\t if (param && common && param !== common) {\n\t obj = Utils.extend({}, common, param);\n\t }\n\n\t return obj;\n\t },\n\t // An empty object to use as replacement for null-contexts\n\t nullContext: _Object$seal({}),\n\n\t noop: env.VM.noop,\n\t compilerInfo: templateSpec.compiler\n\t };\n\n\t function ret(context) {\n\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t var data = options.data;\n\n\t ret._setup(options);\n\t if (!options.partial && templateSpec.useData) {\n\t data = initData(context, data);\n\t }\n\t var depths = undefined,\n\t blockParams = templateSpec.useBlockParams ? [] : undefined;\n\t if (templateSpec.useDepths) {\n\t if (options.depths) {\n\t depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n\t } else {\n\t depths = [context];\n\t }\n\t }\n\n\t function main(context /*, options*/) {\n\t return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n\t }\n\n\t main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n\t return main(context, options);\n\t }\n\n\t ret.isTop = true;\n\n\t ret._setup = function (options) {\n\t if (!options.partial) {\n\t var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n\t wrapHelpersToPassLookupProperty(mergedHelpers, container);\n\t container.helpers = mergedHelpers;\n\n\t if (templateSpec.usePartial) {\n\t // Use mergeIfNeeded here to prevent compiling global partials multiple times\n\t container.partials = container.mergeIfNeeded(options.partials, env.partials);\n\t }\n\t if (templateSpec.usePartial || templateSpec.useDecorators) {\n\t container.decorators = Utils.extend({}, env.decorators, options.decorators);\n\t }\n\n\t container.hooks = {};\n\t container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n\t var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n\t _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n\t _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n\t } else {\n\t container.protoAccessControl = options.protoAccessControl; // internal option\n\t container.helpers = options.helpers;\n\t container.partials = options.partials;\n\t container.decorators = options.decorators;\n\t container.hooks = options.hooks;\n\t }\n\t };\n\n\t ret._child = function (i, data, blockParams, depths) {\n\t if (templateSpec.useBlockParams && !blockParams) {\n\t throw new _exception2['default']('must pass block params');\n\t }\n\t if (templateSpec.useDepths && !depths) {\n\t throw new _exception2['default']('must pass parent depths');\n\t }\n\n\t return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n\t };\n\t return ret;\n\t}\n\n\tfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n\t function prog(context) {\n\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t var currentDepths = depths;\n\t if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n\t currentDepths = [context].concat(depths);\n\t }\n\n\t return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n\t }\n\n\t prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n\t prog.program = i;\n\t prog.depth = depths ? depths.length : 0;\n\t prog.blockParams = declaredBlockParams || 0;\n\t return prog;\n\t}\n\n\t/**\n\t * This is currently part of the official API, therefore implementation details should not be changed.\n\t */\n\n\tfunction resolvePartial(partial, context, options) {\n\t if (!partial) {\n\t if (options.name === '@partial-block') {\n\t partial = options.data['partial-block'];\n\t } else {\n\t partial = options.partials[options.name];\n\t }\n\t } else if (!partial.call && !options.name) {\n\t // This is a dynamic partial that returned a string\n\t options.name = partial;\n\t partial = options.partials[partial];\n\t }\n\t return partial;\n\t}\n\n\tfunction invokePartial(partial, context, options) {\n\t // Use the current closure context to save the partial-block if this partial\n\t var currentPartialBlock = options.data && options.data['partial-block'];\n\t options.partial = true;\n\t if (options.ids) {\n\t options.data.contextPath = options.ids[0] || options.data.contextPath;\n\t }\n\n\t var partialBlock = undefined;\n\t if (options.fn && options.fn !== noop) {\n\t (function () {\n\t options.data = _base.createFrame(options.data);\n\t // Wrapper function to get access to currentPartialBlock from the closure\n\t var fn = options.fn;\n\t partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t // Restore the partial-block from the closure for the execution of the block\n\t // i.e. the part inside the block of the partial call.\n\t options.data = _base.createFrame(options.data);\n\t options.data['partial-block'] = currentPartialBlock;\n\t return fn(context, options);\n\t };\n\t if (fn.partials) {\n\t options.partials = Utils.extend({}, options.partials, fn.partials);\n\t }\n\t })();\n\t }\n\n\t if (partial === undefined && partialBlock) {\n\t partial = partialBlock;\n\t }\n\n\t if (partial === undefined) {\n\t throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n\t } else if (partial instanceof Function) {\n\t return partial(context, options);\n\t }\n\t}\n\n\tfunction noop() {\n\t return '';\n\t}\n\n\tfunction initData(context, data) {\n\t if (!data || !('root' in data)) {\n\t data = data ? _base.createFrame(data) : {};\n\t data.root = context;\n\t }\n\t return data;\n\t}\n\n\tfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n\t if (fn.decorator) {\n\t var props = {};\n\t prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n\t Utils.extend(prog, props);\n\t }\n\t return prog;\n\t}\n\n\tfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n\t _Object$keys(mergedHelpers).forEach(function (helperName) {\n\t var helper = mergedHelpers[helperName];\n\t mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n\t });\n\t}\n\n\tfunction passLookupPropertyOption(helper, container) {\n\t var lookupProperty = container.lookupProperty;\n\t return _internalWrapHelper.wrapHelper(helper, function (options) {\n\t return Utils.extend({ lookupProperty: lookupProperty }, options);\n\t });\n\t}\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(40), __esModule: true };\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(41);\n\tmodule.exports = __webpack_require__(21).Object.seal;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.17 Object.seal(O)\n\tvar isObject = __webpack_require__(42);\n\n\t__webpack_require__(18)('seal', function($seal){\n\t return function seal(it){\n\t return $seal && isObject(it) ? $seal(it) : it;\n\t };\n\t});\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(it){\n\t return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.wrapHelper = wrapHelper;\n\n\tfunction wrapHelper(helper, transformOptionsFn) {\n\t if (typeof helper !== 'function') {\n\t // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n\t // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n\t return helper;\n\t }\n\t var wrapper = function wrapper() /* dynamic arguments */{\n\t var options = arguments[arguments.length - 1];\n\t arguments[arguments.length - 1] = transformOptionsFn(options);\n\t return helper.apply(this, arguments);\n\t };\n\t return wrapper;\n\t}\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\n\texports.__esModule = true;\n\n\texports['default'] = function (Handlebars) {\n\t /* istanbul ignore next */\n\t var root = typeof global !== 'undefined' ? global : window,\n\t $Handlebars = root.Handlebars;\n\t /* istanbul ignore next */\n\t Handlebars.noConflict = function () {\n\t if (root.Handlebars === Handlebars) {\n\t root.Handlebars = $Handlebars;\n\t }\n\t return Handlebars;\n\t };\n\t};\n\n\tmodule.exports = exports['default'];\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\tvar AST = {\n\t // Public API used to evaluate derived attributes regarding AST nodes\n\t helpers: {\n\t // a mustache is definitely a helper if:\n\t // * it is an eligible helper, and\n\t // * it has at least one parameter or hash segment\n\t helperExpression: function helperExpression(node) {\n\t return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n\t },\n\n\t scopedId: function scopedId(path) {\n\t return (/^\\.|this\\b/.test(path.original)\n\t );\n\t },\n\n\t // an ID is simple if it only has one part, and that part is not\n\t // `..` or `this`.\n\t simpleId: function simpleId(path) {\n\t return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n\t }\n\t }\n\t};\n\n\t// Must be exported as an object rather than the root of the module as the jison lexer\n\t// must modify the object to operate properly.\n\texports['default'] = AST;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\n\texports.__esModule = true;\n\texports.parseWithoutProcessing = parseWithoutProcessing;\n\texports.parse = parse;\n\n\tvar _parser = __webpack_require__(47);\n\n\tvar _parser2 = _interopRequireDefault(_parser);\n\n\tvar _whitespaceControl = __webpack_require__(48);\n\n\tvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\n\tvar _helpers = __webpack_require__(50);\n\n\tvar Helpers = _interopRequireWildcard(_helpers);\n\n\tvar _utils = __webpack_require__(5);\n\n\texports.parser = _parser2['default'];\n\n\tvar yy = {};\n\t_utils.extend(yy, Helpers);\n\n\tfunction parseWithoutProcessing(input, options) {\n\t // Just return if an already-compiled AST was passed in.\n\t if (input.type === 'Program') {\n\t return input;\n\t }\n\n\t _parser2['default'].yy = yy;\n\n\t // Altering the shared object here, but this is ok as parser is a sync operation\n\t yy.locInfo = function (locInfo) {\n\t return new yy.SourceLocation(options && options.srcName, locInfo);\n\t };\n\n\t var ast = _parser2['default'].parse(input);\n\n\t return ast;\n\t}\n\n\tfunction parse(input, options) {\n\t var ast = parseWithoutProcessing(input, options);\n\t var strip = new _whitespaceControl2['default'](options);\n\n\t return strip.accept(ast);\n\t}\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports) {\n\n\t// File ignored in coverage tests via setting in .istanbul.yml\n\t/* Jison generated parser */\n\t\"use strict\";\n\n\texports.__esModule = true;\n\tvar handlebars = (function () {\n\t var parser = { trace: function trace() {},\n\t yy: {},\n\t symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n\t terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n\t productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n\t performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n\t var $0 = $$.length - 1;\n\t switch (yystate) {\n\t case 1:\n\t return $$[$0 - 1];\n\t break;\n\t case 2:\n\t this.$ = yy.prepareProgram($$[$0]);\n\t break;\n\t case 3:\n\t this.$ = $$[$0];\n\t break;\n\t case 4:\n\t this.$ = $$[$0];\n\t break;\n\t case 5:\n\t this.$ = $$[$0];\n\t break;\n\t case 6:\n\t this.$ = $$[$0];\n\t break;\n\t case 7:\n\t this.$ = $$[$0];\n\t break;\n\t case 8:\n\t this.$ = $$[$0];\n\t break;\n\t case 9:\n\t this.$ = {\n\t type: 'CommentStatement',\n\t value: yy.stripComment($$[$0]),\n\t strip: yy.stripFlags($$[$0], $$[$0]),\n\t loc: yy.locInfo(this._$)\n\t };\n\n\t break;\n\t case 10:\n\t this.$ = {\n\t type: 'ContentStatement',\n\t original: $$[$0],\n\t value: $$[$0],\n\t loc: yy.locInfo(this._$)\n\t };\n\n\t break;\n\t case 11:\n\t this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n\t break;\n\t case 12:\n\t this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n\t break;\n\t case 13:\n\t this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n\t break;\n\t case 14:\n\t this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n\t break;\n\t case 15:\n\t this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t break;\n\t case 16:\n\t this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t break;\n\t case 17:\n\t this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t break;\n\t case 18:\n\t this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n\t break;\n\t case 19:\n\t var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n\t program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n\t program.chained = true;\n\n\t this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n\t break;\n\t case 20:\n\t this.$ = $$[$0];\n\t break;\n\t case 21:\n\t this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n\t break;\n\t case 22:\n\t this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n\t break;\n\t case 23:\n\t this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n\t break;\n\t case 24:\n\t this.$ = {\n\t type: 'PartialStatement',\n\t name: $$[$0 - 3],\n\t params: $$[$0 - 2],\n\t hash: $$[$0 - 1],\n\t indent: '',\n\t strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n\t loc: yy.locInfo(this._$)\n\t };\n\n\t break;\n\t case 25:\n\t this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n\t break;\n\t case 26:\n\t this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n\t break;\n\t case 27:\n\t this.$ = $$[$0];\n\t break;\n\t case 28:\n\t this.$ = $$[$0];\n\t break;\n\t case 29:\n\t this.$ = {\n\t type: 'SubExpression',\n\t path: $$[$0 - 3],\n\t params: $$[$0 - 2],\n\t hash: $$[$0 - 1],\n\t loc: yy.locInfo(this._$)\n\t };\n\n\t break;\n\t case 30:\n\t this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n\t break;\n\t case 31:\n\t this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n\t break;\n\t case 32:\n\t this.$ = yy.id($$[$0 - 1]);\n\t break;\n\t case 33:\n\t this.$ = $$[$0];\n\t break;\n\t case 34:\n\t this.$ = $$[$0];\n\t break;\n\t case 35:\n\t this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n\t break;\n\t case 36:\n\t this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n\t break;\n\t case 37:\n\t this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n\t break;\n\t case 38:\n\t this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n\t break;\n\t case 39:\n\t this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n\t break;\n\t case 40:\n\t this.$ = $$[$0];\n\t break;\n\t case 41:\n\t this.$ = $$[$0];\n\t break;\n\t case 42:\n\t this.$ = yy.preparePath(true, $$[$0], this._$);\n\t break;\n\t case 43:\n\t this.$ = yy.preparePath(false, $$[$0], this._$);\n\t break;\n\t case 44:\n\t $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n\t break;\n\t case 45:\n\t this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n\t break;\n\t case 46:\n\t this.$ = [];\n\t break;\n\t case 47:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 48:\n\t this.$ = [];\n\t break;\n\t case 49:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 50:\n\t this.$ = [];\n\t break;\n\t case 51:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 58:\n\t this.$ = [];\n\t break;\n\t case 59:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 64:\n\t this.$ = [];\n\t break;\n\t case 65:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 70:\n\t this.$ = [];\n\t break;\n\t case 71:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 78:\n\t this.$ = [];\n\t break;\n\t case 79:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 82:\n\t this.$ = [];\n\t break;\n\t case 83:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 86:\n\t this.$ = [];\n\t break;\n\t case 87:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 90:\n\t this.$ = [];\n\t break;\n\t case 91:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 94:\n\t this.$ = [];\n\t break;\n\t case 95:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 98:\n\t this.$ = [$$[$0]];\n\t break;\n\t case 99:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t case 100:\n\t this.$ = [$$[$0]];\n\t break;\n\t case 101:\n\t $$[$0 - 1].push($$[$0]);\n\t break;\n\t }\n\t },\n\t table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n\t defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },\n\t parseError: function parseError(str, hash) {\n\t throw new Error(str);\n\t },\n\t parse: function parse(input) {\n\t var self = this,\n\t stack = [0],\n\t vstack = [null],\n\t lstack = [],\n\t table = this.table,\n\t yytext = \"\",\n\t yylineno = 0,\n\t yyleng = 0,\n\t recovering = 0,\n\t TERROR = 2,\n\t EOF = 1;\n\t this.lexer.setInput(input);\n\t this.lexer.yy = this.yy;\n\t this.yy.lexer = this.lexer;\n\t this.yy.parser = this;\n\t if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n\t var yyloc = this.lexer.yylloc;\n\t lstack.push(yyloc);\n\t var ranges = this.lexer.options && this.lexer.options.ranges;\n\t if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n\t function popStack(n) {\n\t stack.length = stack.length - 2 * n;\n\t vstack.length = vstack.length - n;\n\t lstack.length = lstack.length - n;\n\t }\n\t function lex() {\n\t var token;\n\t token = self.lexer.lex() || 1;\n\t if (typeof token !== \"number\") {\n\t token = self.symbols_[token] || token;\n\t }\n\t return token;\n\t }\n\t var symbol,\n\t preErrorSymbol,\n\t state,\n\t action,\n\t a,\n\t r,\n\t yyval = {},\n\t p,\n\t len,\n\t newState,\n\t expected;\n\t while (true) {\n\t state = stack[stack.length - 1];\n\t if (this.defaultActions[state]) {\n\t action = this.defaultActions[state];\n\t } else {\n\t if (symbol === null || typeof symbol == \"undefined\") {\n\t symbol = lex();\n\t }\n\t action = table[state] && table[state][symbol];\n\t }\n\t if (typeof action === \"undefined\" || !action.length || !action[0]) {\n\t var errStr = \"\";\n\t if (!recovering) {\n\t expected = [];\n\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\n\t expected.push(\"'\" + this.terminals_[p] + \"'\");\n\t }\n\t if (this.lexer.showPosition) {\n\t errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n\t } else {\n\t errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t }\n\t this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n\t }\n\t }\n\t if (action[0] instanceof Array && action.length > 1) {\n\t throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n\t }\n\t switch (action[0]) {\n\t case 1:\n\t stack.push(symbol);\n\t vstack.push(this.lexer.yytext);\n\t lstack.push(this.lexer.yylloc);\n\t stack.push(action[1]);\n\t symbol = null;\n\t if (!preErrorSymbol) {\n\t yyleng = this.lexer.yyleng;\n\t yytext = this.lexer.yytext;\n\t yylineno = this.lexer.yylineno;\n\t yyloc = this.lexer.yylloc;\n\t if (recovering > 0) recovering--;\n\t } else {\n\t symbol = preErrorSymbol;\n\t preErrorSymbol = null;\n\t }\n\t break;\n\t case 2:\n\t len = this.productions_[action[1]][1];\n\t yyval.$ = vstack[vstack.length - len];\n\t yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n\t if (ranges) {\n\t yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t }\n\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\t if (typeof r !== \"undefined\") {\n\t return r;\n\t }\n\t if (len) {\n\t stack = stack.slice(0, -1 * len * 2);\n\t vstack = vstack.slice(0, -1 * len);\n\t lstack = lstack.slice(0, -1 * len);\n\t }\n\t stack.push(this.productions_[action[1]][0]);\n\t vstack.push(yyval.$);\n\t lstack.push(yyval._$);\n\t newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t stack.push(newState);\n\t break;\n\t case 3:\n\t return true;\n\t }\n\t }\n\t return true;\n\t }\n\t };\n\t /* Jison generated lexer */\n\t var lexer = (function () {\n\t var lexer = { EOF: 1,\n\t parseError: function parseError(str, hash) {\n\t if (this.yy.parser) {\n\t this.yy.parser.parseError(str, hash);\n\t } else {\n\t throw new Error(str);\n\t }\n\t },\n\t setInput: function setInput(input) {\n\t this._input = input;\n\t this._more = this._less = this.done = false;\n\t this.yylineno = this.yyleng = 0;\n\t this.yytext = this.matched = this.match = '';\n\t this.conditionStack = ['INITIAL'];\n\t this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n\t if (this.options.ranges) this.yylloc.range = [0, 0];\n\t this.offset = 0;\n\t return this;\n\t },\n\t input: function input() {\n\t var ch = this._input[0];\n\t this.yytext += ch;\n\t this.yyleng++;\n\t this.offset++;\n\t this.match += ch;\n\t this.matched += ch;\n\t var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t if (lines) {\n\t this.yylineno++;\n\t this.yylloc.last_line++;\n\t } else {\n\t this.yylloc.last_column++;\n\t }\n\t if (this.options.ranges) this.yylloc.range[1]++;\n\n\t this._input = this._input.slice(1);\n\t return ch;\n\t },\n\t unput: function unput(ch) {\n\t var len = ch.length;\n\t var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t this._input = ch + this._input;\n\t this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n\t //this.yyleng -= len;\n\t this.offset -= len;\n\t var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t this.match = this.match.substr(0, this.match.length - 1);\n\t this.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t if (lines.length - 1) this.yylineno -= lines.length - 1;\n\t var r = this.yylloc.range;\n\n\t this.yylloc = { first_line: this.yylloc.first_line,\n\t last_line: this.yylineno + 1,\n\t first_column: this.yylloc.first_column,\n\t last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n\t };\n\n\t if (this.options.ranges) {\n\t this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t }\n\t return this;\n\t },\n\t more: function more() {\n\t this._more = true;\n\t return this;\n\t },\n\t less: function less(n) {\n\t this.unput(this.match.slice(n));\n\t },\n\t pastInput: function pastInput() {\n\t var past = this.matched.substr(0, this.matched.length - this.match.length);\n\t return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n\t },\n\t upcomingInput: function upcomingInput() {\n\t var next = this.match;\n\t if (next.length < 20) {\n\t next += this._input.substr(0, 20 - next.length);\n\t }\n\t return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n\t },\n\t showPosition: function showPosition() {\n\t var pre = this.pastInput();\n\t var c = new Array(pre.length + 1).join(\"-\");\n\t return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n\t },\n\t next: function next() {\n\t if (this.done) {\n\t return this.EOF;\n\t }\n\t if (!this._input) this.done = true;\n\n\t var token, match, tempMatch, index, col, lines;\n\t if (!this._more) {\n\t this.yytext = '';\n\t this.match = '';\n\t }\n\t var rules = this._currentRules();\n\t for (var i = 0; i < rules.length; i++) {\n\t tempMatch = this._input.match(this.rules[rules[i]]);\n\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t match = tempMatch;\n\t index = i;\n\t if (!this.options.flex) break;\n\t }\n\t }\n\t if (match) {\n\t lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t if (lines) this.yylineno += lines.length;\n\t this.yylloc = { first_line: this.yylloc.last_line,\n\t last_line: this.yylineno + 1,\n\t first_column: this.yylloc.last_column,\n\t last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n\t this.yytext += match[0];\n\t this.match += match[0];\n\t this.matches = match;\n\t this.yyleng = this.yytext.length;\n\t if (this.options.ranges) {\n\t this.yylloc.range = [this.offset, this.offset += this.yyleng];\n\t }\n\t this._more = false;\n\t this._input = this._input.slice(match[0].length);\n\t this.matched += match[0];\n\t token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n\t if (this.done && this._input) this.done = false;\n\t if (token) return token;else return;\n\t }\n\t if (this._input === \"\") {\n\t return this.EOF;\n\t } else {\n\t return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n\t }\n\t },\n\t lex: function lex() {\n\t var r = this.next();\n\t if (typeof r !== 'undefined') {\n\t return r;\n\t } else {\n\t return this.lex();\n\t }\n\t },\n\t begin: function begin(condition) {\n\t this.conditionStack.push(condition);\n\t },\n\t popState: function popState() {\n\t return this.conditionStack.pop();\n\t },\n\t _currentRules: function _currentRules() {\n\t return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t },\n\t topState: function topState() {\n\t return this.conditionStack[this.conditionStack.length - 2];\n\t },\n\t pushState: function begin(condition) {\n\t this.begin(condition);\n\t } };\n\t lexer.options = {};\n\t lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n\t function strip(start, end) {\n\t return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n\t }\n\n\t var YYSTATE = YY_START;\n\t switch ($avoiding_name_collisions) {\n\t case 0:\n\t if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n\t strip(0, 1);\n\t this.begin(\"mu\");\n\t } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n\t strip(0, 1);\n\t this.begin(\"emu\");\n\t } else {\n\t this.begin(\"mu\");\n\t }\n\t if (yy_.yytext) return 15;\n\n\t break;\n\t case 1:\n\t return 15;\n\t break;\n\t case 2:\n\t this.popState();\n\t return 15;\n\n\t break;\n\t case 3:\n\t this.begin('raw');return 15;\n\t break;\n\t case 4:\n\t this.popState();\n\t // Should be using `this.topState()` below, but it currently\n\t // returns the second top instead of the first top. Opened an\n\t // issue about it at https://github.com/zaach/jison/issues/291\n\t if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n\t return 15;\n\t } else {\n\t strip(5, 9);\n\t return 'END_RAW_BLOCK';\n\t }\n\n\t break;\n\t case 5:\n\t return 15;\n\t break;\n\t case 6:\n\t this.popState();\n\t return 14;\n\n\t break;\n\t case 7:\n\t return 65;\n\t break;\n\t case 8:\n\t return 68;\n\t break;\n\t case 9:\n\t return 19;\n\t break;\n\t case 10:\n\t this.popState();\n\t this.begin('raw');\n\t return 23;\n\n\t break;\n\t case 11:\n\t return 55;\n\t break;\n\t case 12:\n\t return 60;\n\t break;\n\t case 13:\n\t return 29;\n\t break;\n\t case 14:\n\t return 47;\n\t break;\n\t case 15:\n\t this.popState();return 44;\n\t break;\n\t case 16:\n\t this.popState();return 44;\n\t break;\n\t case 17:\n\t return 34;\n\t break;\n\t case 18:\n\t return 39;\n\t break;\n\t case 19:\n\t return 51;\n\t break;\n\t case 20:\n\t return 48;\n\t break;\n\t case 21:\n\t this.unput(yy_.yytext);\n\t this.popState();\n\t this.begin('com');\n\n\t break;\n\t case 22:\n\t this.popState();\n\t return 14;\n\n\t break;\n\t case 23:\n\t return 48;\n\t break;\n\t case 24:\n\t return 73;\n\t break;\n\t case 25:\n\t return 72;\n\t break;\n\t case 26:\n\t return 72;\n\t break;\n\t case 27:\n\t return 87;\n\t break;\n\t case 28:\n\t // ignore whitespace\n\t break;\n\t case 29:\n\t this.popState();return 54;\n\t break;\n\t case 30:\n\t this.popState();return 33;\n\t break;\n\t case 31:\n\t yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n\t break;\n\t case 32:\n\t yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n\t break;\n\t case 33:\n\t return 85;\n\t break;\n\t case 34:\n\t return 82;\n\t break;\n\t case 35:\n\t return 82;\n\t break;\n\t case 36:\n\t return 83;\n\t break;\n\t case 37:\n\t return 84;\n\t break;\n\t case 38:\n\t return 81;\n\t break;\n\t case 39:\n\t return 75;\n\t break;\n\t case 40:\n\t return 77;\n\t break;\n\t case 41:\n\t return 72;\n\t break;\n\t case 42:\n\t yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n\t break;\n\t case 43:\n\t return 'INVALID';\n\t break;\n\t case 44:\n\t return 5;\n\t break;\n\t }\n\t };\n\t lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^\\/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n\t lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n\t return lexer;\n\t })();\n\t parser.lexer = lexer;\n\t function Parser() {\n\t this.yy = {};\n\t }Parser.prototype = parser;parser.Parser = Parser;\n\t return new Parser();\n\t})();exports[\"default\"] = handlebars;\n\tmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _visitor = __webpack_require__(49);\n\n\tvar _visitor2 = _interopRequireDefault(_visitor);\n\n\tfunction WhitespaceControl() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n\t this.options = options;\n\t}\n\tWhitespaceControl.prototype = new _visitor2['default']();\n\n\tWhitespaceControl.prototype.Program = function (program) {\n\t var doStandalone = !this.options.ignoreStandalone;\n\n\t var isRoot = !this.isRootSeen;\n\t this.isRootSeen = true;\n\n\t var body = program.body;\n\t for (var i = 0, l = body.length; i < l; i++) {\n\t var current = body[i],\n\t strip = this.accept(current);\n\n\t if (!strip) {\n\t continue;\n\t }\n\n\t var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n\t _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n\t openStandalone = strip.openStandalone && _isPrevWhitespace,\n\t closeStandalone = strip.closeStandalone && _isNextWhitespace,\n\t inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n\t if (strip.close) {\n\t omitRight(body, i, true);\n\t }\n\t if (strip.open) {\n\t omitLeft(body, i, true);\n\t }\n\n\t if (doStandalone && inlineStandalone) {\n\t omitRight(body, i);\n\n\t if (omitLeft(body, i)) {\n\t // If we are on a standalone node, save the indent info for partials\n\t if (current.type === 'PartialStatement') {\n\t // Pull out the whitespace from the final line\n\t current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n\t }\n\t }\n\t }\n\t if (doStandalone && openStandalone) {\n\t omitRight((current.program || current.inverse).body);\n\n\t // Strip out the previous content node if it's whitespace only\n\t omitLeft(body, i);\n\t }\n\t if (doStandalone && closeStandalone) {\n\t // Always strip the next node\n\t omitRight(body, i);\n\n\t omitLeft((current.inverse || current.program).body);\n\t }\n\t }\n\n\t return program;\n\t};\n\n\tWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n\t this.accept(block.program);\n\t this.accept(block.inverse);\n\n\t // Find the inverse program that is involed with whitespace stripping.\n\t var program = block.program || block.inverse,\n\t inverse = block.program && block.inverse,\n\t firstInverse = inverse,\n\t lastInverse = inverse;\n\n\t if (inverse && inverse.chained) {\n\t firstInverse = inverse.body[0].program;\n\n\t // Walk the inverse chain to find the last inverse that is actually in the chain.\n\t while (lastInverse.chained) {\n\t lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n\t }\n\t }\n\n\t var strip = {\n\t open: block.openStrip.open,\n\t close: block.closeStrip.close,\n\n\t // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n\t // so our parent can determine if we actually are standalone\n\t openStandalone: isNextWhitespace(program.body),\n\t closeStandalone: isPrevWhitespace((firstInverse || program).body)\n\t };\n\n\t if (block.openStrip.close) {\n\t omitRight(program.body, null, true);\n\t }\n\n\t if (inverse) {\n\t var inverseStrip = block.inverseStrip;\n\n\t if (inverseStrip.open) {\n\t omitLeft(program.body, null, true);\n\t }\n\n\t if (inverseStrip.close) {\n\t omitRight(firstInverse.body, null, true);\n\t }\n\t if (block.closeStrip.open) {\n\t omitLeft(lastInverse.body, null, true);\n\t }\n\n\t // Find standalone else statments\n\t if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n\t omitLeft(program.body);\n\t omitRight(firstInverse.body);\n\t }\n\t } else if (block.closeStrip.open) {\n\t omitLeft(program.body, null, true);\n\t }\n\n\t return strip;\n\t};\n\n\tWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n\t return mustache.strip;\n\t};\n\n\tWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n\t /* istanbul ignore next */\n\t var strip = node.strip || {};\n\t return {\n\t inlineStandalone: true,\n\t open: strip.open,\n\t close: strip.close\n\t };\n\t};\n\n\tfunction isPrevWhitespace(body, i, isRoot) {\n\t if (i === undefined) {\n\t i = body.length;\n\t }\n\n\t // Nodes that end with newlines are considered whitespace (but are special\n\t // cased for strip operations)\n\t var prev = body[i - 1],\n\t sibling = body[i - 2];\n\t if (!prev) {\n\t return isRoot;\n\t }\n\n\t if (prev.type === 'ContentStatement') {\n\t return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n\t }\n\t}\n\tfunction isNextWhitespace(body, i, isRoot) {\n\t if (i === undefined) {\n\t i = -1;\n\t }\n\n\t var next = body[i + 1],\n\t sibling = body[i + 2];\n\t if (!next) {\n\t return isRoot;\n\t }\n\n\t if (next.type === 'ContentStatement') {\n\t return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n\t }\n\t}\n\n\t// Marks the node to the right of the position as omitted.\n\t// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n\t//\n\t// If i is undefined, then the first child will be marked as such.\n\t//\n\t// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n\t// content is met.\n\tfunction omitRight(body, i, multiple) {\n\t var current = body[i == null ? 0 : i + 1];\n\t if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n\t return;\n\t }\n\n\t var original = current.value;\n\t current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n\t current.rightStripped = current.value !== original;\n\t}\n\n\t// Marks the node to the left of the position as omitted.\n\t// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n\t//\n\t// If i is undefined then the last child will be marked as such.\n\t//\n\t// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n\t// content is met.\n\tfunction omitLeft(body, i, multiple) {\n\t var current = body[i == null ? body.length - 1 : i - 1];\n\t if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n\t return;\n\t }\n\n\t // We omit the last node if it's whitespace only and not preceded by a non-content node.\n\t var original = current.value;\n\t current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n\t current.leftStripped = current.value !== original;\n\t return current.leftStripped;\n\t}\n\n\texports['default'] = WhitespaceControl;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tfunction Visitor() {\n\t this.parents = [];\n\t}\n\n\tVisitor.prototype = {\n\t constructor: Visitor,\n\t mutating: false,\n\n\t // Visits a given value. If mutating, will replace the value if necessary.\n\t acceptKey: function acceptKey(node, name) {\n\t var value = this.accept(node[name]);\n\t if (this.mutating) {\n\t // Hacky sanity check: This may have a few false positives for type for the helper\n\t // methods but will generally do the right thing without a lot of overhead.\n\t if (value && !Visitor.prototype[value.type]) {\n\t throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n\t }\n\t node[name] = value;\n\t }\n\t },\n\n\t // Performs an accept operation with added sanity check to ensure\n\t // required keys are not removed.\n\t acceptRequired: function acceptRequired(node, name) {\n\t this.acceptKey(node, name);\n\n\t if (!node[name]) {\n\t throw new _exception2['default'](node.type + ' requires ' + name);\n\t }\n\t },\n\n\t // Traverses a given array. If mutating, empty respnses will be removed\n\t // for child elements.\n\t acceptArray: function acceptArray(array) {\n\t for (var i = 0, l = array.length; i < l; i++) {\n\t this.acceptKey(array, i);\n\n\t if (!array[i]) {\n\t array.splice(i, 1);\n\t i--;\n\t l--;\n\t }\n\t }\n\t },\n\n\t accept: function accept(object) {\n\t if (!object) {\n\t return;\n\t }\n\n\t /* istanbul ignore next: Sanity code */\n\t if (!this[object.type]) {\n\t throw new _exception2['default']('Unknown type: ' + object.type, object);\n\t }\n\n\t if (this.current) {\n\t this.parents.unshift(this.current);\n\t }\n\t this.current = object;\n\n\t var ret = this[object.type](object);\n\n\t this.current = this.parents.shift();\n\n\t if (!this.mutating || ret) {\n\t return ret;\n\t } else if (ret !== false) {\n\t return object;\n\t }\n\t },\n\n\t Program: function Program(program) {\n\t this.acceptArray(program.body);\n\t },\n\n\t MustacheStatement: visitSubExpression,\n\t Decorator: visitSubExpression,\n\n\t BlockStatement: visitBlock,\n\t DecoratorBlock: visitBlock,\n\n\t PartialStatement: visitPartial,\n\t PartialBlockStatement: function PartialBlockStatement(partial) {\n\t visitPartial.call(this, partial);\n\n\t this.acceptKey(partial, 'program');\n\t },\n\n\t ContentStatement: function ContentStatement() /* content */{},\n\t CommentStatement: function CommentStatement() /* comment */{},\n\n\t SubExpression: visitSubExpression,\n\n\t PathExpression: function PathExpression() /* path */{},\n\n\t StringLiteral: function StringLiteral() /* string */{},\n\t NumberLiteral: function NumberLiteral() /* number */{},\n\t BooleanLiteral: function BooleanLiteral() /* bool */{},\n\t UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n\t NullLiteral: function NullLiteral() /* literal */{},\n\n\t Hash: function Hash(hash) {\n\t this.acceptArray(hash.pairs);\n\t },\n\t HashPair: function HashPair(pair) {\n\t this.acceptRequired(pair, 'value');\n\t }\n\t};\n\n\tfunction visitSubExpression(mustache) {\n\t this.acceptRequired(mustache, 'path');\n\t this.acceptArray(mustache.params);\n\t this.acceptKey(mustache, 'hash');\n\t}\n\tfunction visitBlock(block) {\n\t visitSubExpression.call(this, block);\n\n\t this.acceptKey(block, 'program');\n\t this.acceptKey(block, 'inverse');\n\t}\n\tfunction visitPartial(partial) {\n\t this.acceptRequired(partial, 'name');\n\t this.acceptArray(partial.params);\n\t this.acceptKey(partial, 'hash');\n\t}\n\n\texports['default'] = Visitor;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.SourceLocation = SourceLocation;\n\texports.id = id;\n\texports.stripFlags = stripFlags;\n\texports.stripComment = stripComment;\n\texports.preparePath = preparePath;\n\texports.prepareMustache = prepareMustache;\n\texports.prepareRawBlock = prepareRawBlock;\n\texports.prepareBlock = prepareBlock;\n\texports.prepareProgram = prepareProgram;\n\texports.preparePartialBlock = preparePartialBlock;\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tfunction validateClose(open, close) {\n\t close = close.path ? close.path.original : close;\n\n\t if (open.path.original !== close) {\n\t var errorNode = { loc: open.path.loc };\n\n\t throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n\t }\n\t}\n\n\tfunction SourceLocation(source, locInfo) {\n\t this.source = source;\n\t this.start = {\n\t line: locInfo.first_line,\n\t column: locInfo.first_column\n\t };\n\t this.end = {\n\t line: locInfo.last_line,\n\t column: locInfo.last_column\n\t };\n\t}\n\n\tfunction id(token) {\n\t if (/^\\[.*\\]$/.test(token)) {\n\t return token.substring(1, token.length - 1);\n\t } else {\n\t return token;\n\t }\n\t}\n\n\tfunction stripFlags(open, close) {\n\t return {\n\t open: open.charAt(2) === '~',\n\t close: close.charAt(close.length - 3) === '~'\n\t };\n\t}\n\n\tfunction stripComment(comment) {\n\t return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n\t}\n\n\tfunction preparePath(data, parts, loc) {\n\t loc = this.locInfo(loc);\n\n\t var original = data ? '@' : '',\n\t dig = [],\n\t depth = 0;\n\n\t for (var i = 0, l = parts.length; i < l; i++) {\n\t var part = parts[i].part,\n\n\t // If we have [] syntax then we do not treat path references as operators,\n\t // i.e. foo.[this] resolves to approximately context.foo['this']\n\t isLiteral = parts[i].original !== part;\n\t original += (parts[i].separator || '') + part;\n\n\t if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n\t if (dig.length > 0) {\n\t throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n\t } else if (part === '..') {\n\t depth++;\n\t }\n\t } else {\n\t dig.push(part);\n\t }\n\t }\n\n\t return {\n\t type: 'PathExpression',\n\t data: data,\n\t depth: depth,\n\t parts: dig,\n\t original: original,\n\t loc: loc\n\t };\n\t}\n\n\tfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n\t // Must use charAt to support IE pre-10\n\t var escapeFlag = open.charAt(3) || open.charAt(2),\n\t escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n\t var decorator = /\\*/.test(open);\n\t return {\n\t type: decorator ? 'Decorator' : 'MustacheStatement',\n\t path: path,\n\t params: params,\n\t hash: hash,\n\t escaped: escaped,\n\t strip: strip,\n\t loc: this.locInfo(locInfo)\n\t };\n\t}\n\n\tfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n\t validateClose(openRawBlock, close);\n\n\t locInfo = this.locInfo(locInfo);\n\t var program = {\n\t type: 'Program',\n\t body: contents,\n\t strip: {},\n\t loc: locInfo\n\t };\n\n\t return {\n\t type: 'BlockStatement',\n\t path: openRawBlock.path,\n\t params: openRawBlock.params,\n\t hash: openRawBlock.hash,\n\t program: program,\n\t openStrip: {},\n\t inverseStrip: {},\n\t closeStrip: {},\n\t loc: locInfo\n\t };\n\t}\n\n\tfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n\t if (close && close.path) {\n\t validateClose(openBlock, close);\n\t }\n\n\t var decorator = /\\*/.test(openBlock.open);\n\n\t program.blockParams = openBlock.blockParams;\n\n\t var inverse = undefined,\n\t inverseStrip = undefined;\n\n\t if (inverseAndProgram) {\n\t if (decorator) {\n\t throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n\t }\n\n\t if (inverseAndProgram.chain) {\n\t inverseAndProgram.program.body[0].closeStrip = close.strip;\n\t }\n\n\t inverseStrip = inverseAndProgram.strip;\n\t inverse = inverseAndProgram.program;\n\t }\n\n\t if (inverted) {\n\t inverted = inverse;\n\t inverse = program;\n\t program = inverted;\n\t }\n\n\t return {\n\t type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n\t path: openBlock.path,\n\t params: openBlock.params,\n\t hash: openBlock.hash,\n\t program: program,\n\t inverse: inverse,\n\t openStrip: openBlock.strip,\n\t inverseStrip: inverseStrip,\n\t closeStrip: close && close.strip,\n\t loc: this.locInfo(locInfo)\n\t };\n\t}\n\n\tfunction prepareProgram(statements, loc) {\n\t if (!loc && statements.length) {\n\t var firstLoc = statements[0].loc,\n\t lastLoc = statements[statements.length - 1].loc;\n\n\t /* istanbul ignore else */\n\t if (firstLoc && lastLoc) {\n\t loc = {\n\t source: firstLoc.source,\n\t start: {\n\t line: firstLoc.start.line,\n\t column: firstLoc.start.column\n\t },\n\t end: {\n\t line: lastLoc.end.line,\n\t column: lastLoc.end.column\n\t }\n\t };\n\t }\n\t }\n\n\t return {\n\t type: 'Program',\n\t body: statements,\n\t strip: {},\n\t loc: loc\n\t };\n\t}\n\n\tfunction preparePartialBlock(open, program, close, locInfo) {\n\t validateClose(open, close);\n\n\t return {\n\t type: 'PartialBlockStatement',\n\t name: open.path,\n\t params: open.params,\n\t hash: open.hash,\n\t program: program,\n\t openStrip: open.strip,\n\t closeStrip: close && close.strip,\n\t loc: this.locInfo(locInfo)\n\t };\n\t}\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* eslint-disable new-cap */\n\n\t'use strict';\n\n\tvar _Object$create = __webpack_require__(34)['default'];\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\texports.Compiler = Compiler;\n\texports.precompile = precompile;\n\texports.compile = compile;\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _ast = __webpack_require__(45);\n\n\tvar _ast2 = _interopRequireDefault(_ast);\n\n\tvar slice = [].slice;\n\n\tfunction Compiler() {}\n\n\t// the foundHelper register will disambiguate helper lookup from finding a\n\t// function in a context. This is necessary for mustache compatibility, which\n\t// requires that context functions in blocks are evaluated by blockHelperMissing,\n\t// and then proceed as if the resulting value was provided to blockHelperMissing.\n\n\tCompiler.prototype = {\n\t compiler: Compiler,\n\n\t equals: function equals(other) {\n\t var len = this.opcodes.length;\n\t if (other.opcodes.length !== len) {\n\t return false;\n\t }\n\n\t for (var i = 0; i < len; i++) {\n\t var opcode = this.opcodes[i],\n\t otherOpcode = other.opcodes[i];\n\t if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n\t return false;\n\t }\n\t }\n\n\t // We know that length is the same between the two arrays because they are directly tied\n\t // to the opcode behavior above.\n\t len = this.children.length;\n\t for (var i = 0; i < len; i++) {\n\t if (!this.children[i].equals(other.children[i])) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t },\n\n\t guid: 0,\n\n\t compile: function compile(program, options) {\n\t this.sourceNode = [];\n\t this.opcodes = [];\n\t this.children = [];\n\t this.options = options;\n\t this.stringParams = options.stringParams;\n\t this.trackIds = options.trackIds;\n\n\t options.blockParams = options.blockParams || [];\n\n\t options.knownHelpers = _utils.extend(_Object$create(null), {\n\t helperMissing: true,\n\t blockHelperMissing: true,\n\t each: true,\n\t 'if': true,\n\t unless: true,\n\t 'with': true,\n\t log: true,\n\t lookup: true\n\t }, options.knownHelpers);\n\n\t return this.accept(program);\n\t },\n\n\t compileProgram: function compileProgram(program) {\n\t var childCompiler = new this.compiler(),\n\t // eslint-disable-line new-cap\n\t result = childCompiler.compile(program, this.options),\n\t guid = this.guid++;\n\n\t this.usePartial = this.usePartial || result.usePartial;\n\n\t this.children[guid] = result;\n\t this.useDepths = this.useDepths || result.useDepths;\n\n\t return guid;\n\t },\n\n\t accept: function accept(node) {\n\t /* istanbul ignore next: Sanity code */\n\t if (!this[node.type]) {\n\t throw new _exception2['default']('Unknown type: ' + node.type, node);\n\t }\n\n\t this.sourceNode.unshift(node);\n\t var ret = this[node.type](node);\n\t this.sourceNode.shift();\n\t return ret;\n\t },\n\n\t Program: function Program(program) {\n\t this.options.blockParams.unshift(program.blockParams);\n\n\t var body = program.body,\n\t bodyLength = body.length;\n\t for (var i = 0; i < bodyLength; i++) {\n\t this.accept(body[i]);\n\t }\n\n\t this.options.blockParams.shift();\n\n\t this.isSimple = bodyLength === 1;\n\t this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n\t return this;\n\t },\n\n\t BlockStatement: function BlockStatement(block) {\n\t transformLiteralToPath(block);\n\n\t var program = block.program,\n\t inverse = block.inverse;\n\n\t program = program && this.compileProgram(program);\n\t inverse = inverse && this.compileProgram(inverse);\n\n\t var type = this.classifySexpr(block);\n\n\t if (type === 'helper') {\n\t this.helperSexpr(block, program, inverse);\n\t } else if (type === 'simple') {\n\t this.simpleSexpr(block);\n\n\t // now that the simple mustache is resolved, we need to\n\t // evaluate it by executing `blockHelperMissing`\n\t this.opcode('pushProgram', program);\n\t this.opcode('pushProgram', inverse);\n\t this.opcode('emptyHash');\n\t this.opcode('blockValue', block.path.original);\n\t } else {\n\t this.ambiguousSexpr(block, program, inverse);\n\n\t // now that the simple mustache is resolved, we need to\n\t // evaluate it by executing `blockHelperMissing`\n\t this.opcode('pushProgram', program);\n\t this.opcode('pushProgram', inverse);\n\t this.opcode('emptyHash');\n\t this.opcode('ambiguousBlockValue');\n\t }\n\n\t this.opcode('append');\n\t },\n\n\t DecoratorBlock: function DecoratorBlock(decorator) {\n\t var program = decorator.program && this.compileProgram(decorator.program);\n\t var params = this.setupFullMustacheParams(decorator, program, undefined),\n\t path = decorator.path;\n\n\t this.useDecorators = true;\n\t this.opcode('registerDecorator', params.length, path.original);\n\t },\n\n\t PartialStatement: function PartialStatement(partial) {\n\t this.usePartial = true;\n\n\t var program = partial.program;\n\t if (program) {\n\t program = this.compileProgram(partial.program);\n\t }\n\n\t var params = partial.params;\n\t if (params.length > 1) {\n\t throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n\t } else if (!params.length) {\n\t if (this.options.explicitPartialContext) {\n\t this.opcode('pushLiteral', 'undefined');\n\t } else {\n\t params.push({ type: 'PathExpression', parts: [], depth: 0 });\n\t }\n\t }\n\n\t var partialName = partial.name.original,\n\t isDynamic = partial.name.type === 'SubExpression';\n\t if (isDynamic) {\n\t this.accept(partial.name);\n\t }\n\n\t this.setupFullMustacheParams(partial, program, undefined, true);\n\n\t var indent = partial.indent || '';\n\t if (this.options.preventIndent && indent) {\n\t this.opcode('appendContent', indent);\n\t indent = '';\n\t }\n\n\t this.opcode('invokePartial', isDynamic, partialName, indent);\n\t this.opcode('append');\n\t },\n\t PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n\t this.PartialStatement(partialBlock);\n\t },\n\n\t MustacheStatement: function MustacheStatement(mustache) {\n\t this.SubExpression(mustache);\n\n\t if (mustache.escaped && !this.options.noEscape) {\n\t this.opcode('appendEscaped');\n\t } else {\n\t this.opcode('append');\n\t }\n\t },\n\t Decorator: function Decorator(decorator) {\n\t this.DecoratorBlock(decorator);\n\t },\n\n\t ContentStatement: function ContentStatement(content) {\n\t if (content.value) {\n\t this.opcode('appendContent', content.value);\n\t }\n\t },\n\n\t CommentStatement: function CommentStatement() {},\n\n\t SubExpression: function SubExpression(sexpr) {\n\t transformLiteralToPath(sexpr);\n\t var type = this.classifySexpr(sexpr);\n\n\t if (type === 'simple') {\n\t this.simpleSexpr(sexpr);\n\t } else if (type === 'helper') {\n\t this.helperSexpr(sexpr);\n\t } else {\n\t this.ambiguousSexpr(sexpr);\n\t }\n\t },\n\t ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n\t var path = sexpr.path,\n\t name = path.parts[0],\n\t isBlock = program != null || inverse != null;\n\n\t this.opcode('getContext', path.depth);\n\n\t this.opcode('pushProgram', program);\n\t this.opcode('pushProgram', inverse);\n\n\t path.strict = true;\n\t this.accept(path);\n\n\t this.opcode('invokeAmbiguous', name, isBlock);\n\t },\n\n\t simpleSexpr: function simpleSexpr(sexpr) {\n\t var path = sexpr.path;\n\t path.strict = true;\n\t this.accept(path);\n\t this.opcode('resolvePossibleLambda');\n\t },\n\n\t helperSexpr: function helperSexpr(sexpr, program, inverse) {\n\t var params = this.setupFullMustacheParams(sexpr, program, inverse),\n\t path = sexpr.path,\n\t name = path.parts[0];\n\n\t if (this.options.knownHelpers[name]) {\n\t this.opcode('invokeKnownHelper', params.length, name);\n\t } else if (this.options.knownHelpersOnly) {\n\t throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n\t } else {\n\t path.strict = true;\n\t path.falsy = true;\n\n\t this.accept(path);\n\t this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n\t }\n\t },\n\n\t PathExpression: function PathExpression(path) {\n\t this.addDepth(path.depth);\n\t this.opcode('getContext', path.depth);\n\n\t var name = path.parts[0],\n\t scoped = _ast2['default'].helpers.scopedId(path),\n\t blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n\t if (blockParamId) {\n\t this.opcode('lookupBlockParam', blockParamId, path.parts);\n\t } else if (!name) {\n\t // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n\t this.opcode('pushContext');\n\t } else if (path.data) {\n\t this.options.data = true;\n\t this.opcode('lookupData', path.depth, path.parts, path.strict);\n\t } else {\n\t this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n\t }\n\t },\n\n\t StringLiteral: function StringLiteral(string) {\n\t this.opcode('pushString', string.value);\n\t },\n\n\t NumberLiteral: function NumberLiteral(number) {\n\t this.opcode('pushLiteral', number.value);\n\t },\n\n\t BooleanLiteral: function BooleanLiteral(bool) {\n\t this.opcode('pushLiteral', bool.value);\n\t },\n\n\t UndefinedLiteral: function UndefinedLiteral() {\n\t this.opcode('pushLiteral', 'undefined');\n\t },\n\n\t NullLiteral: function NullLiteral() {\n\t this.opcode('pushLiteral', 'null');\n\t },\n\n\t Hash: function Hash(hash) {\n\t var pairs = hash.pairs,\n\t i = 0,\n\t l = pairs.length;\n\n\t this.opcode('pushHash');\n\n\t for (; i < l; i++) {\n\t this.pushParam(pairs[i].value);\n\t }\n\t while (i--) {\n\t this.opcode('assignToHash', pairs[i].key);\n\t }\n\t this.opcode('popHash');\n\t },\n\n\t // HELPERS\n\t opcode: function opcode(name) {\n\t this.opcodes.push({\n\t opcode: name,\n\t args: slice.call(arguments, 1),\n\t loc: this.sourceNode[0].loc\n\t });\n\t },\n\n\t addDepth: function addDepth(depth) {\n\t if (!depth) {\n\t return;\n\t }\n\n\t this.useDepths = true;\n\t },\n\n\t classifySexpr: function classifySexpr(sexpr) {\n\t var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n\t var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n\t // a mustache is an eligible helper if:\n\t // * its id is simple (a single part, not `this` or `..`)\n\t var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\n\t // if a mustache is an eligible helper but not a definite\n\t // helper, it is ambiguous, and will be resolved in a later\n\t // pass or at runtime.\n\t var isEligible = !isBlockParam && (isHelper || isSimple);\n\n\t // if ambiguous, we can possibly resolve the ambiguity now\n\t // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n\t if (isEligible && !isHelper) {\n\t var _name = sexpr.path.parts[0],\n\t options = this.options;\n\t if (options.knownHelpers[_name]) {\n\t isHelper = true;\n\t } else if (options.knownHelpersOnly) {\n\t isEligible = false;\n\t }\n\t }\n\n\t if (isHelper) {\n\t return 'helper';\n\t } else if (isEligible) {\n\t return 'ambiguous';\n\t } else {\n\t return 'simple';\n\t }\n\t },\n\n\t pushParams: function pushParams(params) {\n\t for (var i = 0, l = params.length; i < l; i++) {\n\t this.pushParam(params[i]);\n\t }\n\t },\n\n\t pushParam: function pushParam(val) {\n\t var value = val.value != null ? val.value : val.original || '';\n\n\t if (this.stringParams) {\n\t if (value.replace) {\n\t value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n\t }\n\n\t if (val.depth) {\n\t this.addDepth(val.depth);\n\t }\n\t this.opcode('getContext', val.depth || 0);\n\t this.opcode('pushStringParam', value, val.type);\n\n\t if (val.type === 'SubExpression') {\n\t // SubExpressions get evaluated and passed in\n\t // in string params mode.\n\t this.accept(val);\n\t }\n\t } else {\n\t if (this.trackIds) {\n\t var blockParamIndex = undefined;\n\t if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n\t blockParamIndex = this.blockParamIndex(val.parts[0]);\n\t }\n\t if (blockParamIndex) {\n\t var blockParamChild = val.parts.slice(1).join('.');\n\t this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n\t } else {\n\t value = val.original || value;\n\t if (value.replace) {\n\t value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n\t }\n\n\t this.opcode('pushId', val.type, value);\n\t }\n\t }\n\t this.accept(val);\n\t }\n\t },\n\n\t setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n\t var params = sexpr.params;\n\t this.pushParams(params);\n\n\t this.opcode('pushProgram', program);\n\t this.opcode('pushProgram', inverse);\n\n\t if (sexpr.hash) {\n\t this.accept(sexpr.hash);\n\t } else {\n\t this.opcode('emptyHash', omitEmpty);\n\t }\n\n\t return params;\n\t },\n\n\t blockParamIndex: function blockParamIndex(name) {\n\t for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n\t var blockParams = this.options.blockParams[depth],\n\t param = blockParams && _utils.indexOf(blockParams, name);\n\t if (blockParams && param >= 0) {\n\t return [depth, param];\n\t }\n\t }\n\t }\n\t};\n\n\tfunction precompile(input, options, env) {\n\t if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n\t throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n\t }\n\n\t options = options || {};\n\t if (!('data' in options)) {\n\t options.data = true;\n\t }\n\t if (options.compat) {\n\t options.useDepths = true;\n\t }\n\n\t var ast = env.parse(input, options),\n\t environment = new env.Compiler().compile(ast, options);\n\t return new env.JavaScriptCompiler().compile(environment, options);\n\t}\n\n\tfunction compile(input, options, env) {\n\t if (options === undefined) options = {};\n\n\t if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n\t throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n\t }\n\n\t options = _utils.extend({}, options);\n\t if (!('data' in options)) {\n\t options.data = true;\n\t }\n\t if (options.compat) {\n\t options.useDepths = true;\n\t }\n\n\t var compiled = undefined;\n\n\t function compileInput() {\n\t var ast = env.parse(input, options),\n\t environment = new env.Compiler().compile(ast, options),\n\t templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n\t return env.template(templateSpec);\n\t }\n\n\t // Template is only compiled on first use and cached after that point.\n\t function ret(context, execOptions) {\n\t if (!compiled) {\n\t compiled = compileInput();\n\t }\n\t return compiled.call(this, context, execOptions);\n\t }\n\t ret._setup = function (setupOptions) {\n\t if (!compiled) {\n\t compiled = compileInput();\n\t }\n\t return compiled._setup(setupOptions);\n\t };\n\t ret._child = function (i, data, blockParams, depths) {\n\t if (!compiled) {\n\t compiled = compileInput();\n\t }\n\t return compiled._child(i, data, blockParams, depths);\n\t };\n\t return ret;\n\t}\n\n\tfunction argEquals(a, b) {\n\t if (a === b) {\n\t return true;\n\t }\n\n\t if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n\t for (var i = 0; i < a.length; i++) {\n\t if (!argEquals(a[i], b[i])) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\t}\n\n\tfunction transformLiteralToPath(sexpr) {\n\t if (!sexpr.path.parts) {\n\t var literal = sexpr.path;\n\t // Casting to string here to make false and 0 literal values play nicely with the rest\n\t // of the system.\n\t sexpr.path = {\n\t type: 'PathExpression',\n\t data: false,\n\t depth: 0,\n\t parts: [literal.original + ''],\n\t original: literal.original + '',\n\t loc: literal.loc\n\t };\n\t }\n\t}\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _Object$keys = __webpack_require__(13)['default'];\n\n\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\n\texports.__esModule = true;\n\n\tvar _base = __webpack_require__(4);\n\n\tvar _exception = __webpack_require__(6);\n\n\tvar _exception2 = _interopRequireDefault(_exception);\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar _codeGen = __webpack_require__(53);\n\n\tvar _codeGen2 = _interopRequireDefault(_codeGen);\n\n\tfunction Literal(value) {\n\t this.value = value;\n\t}\n\n\tfunction JavaScriptCompiler() {}\n\n\tJavaScriptCompiler.prototype = {\n\t // PUBLIC API: You can override these methods in a subclass to provide\n\t // alternative compiled forms for name lookup and buffering semantics\n\t nameLookup: function nameLookup(parent, name /*, type */) {\n\t return this.internalNameLookup(parent, name);\n\t },\n\t depthedLookup: function depthedLookup(name) {\n\t return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n\t },\n\n\t compilerInfo: function compilerInfo() {\n\t var revision = _base.COMPILER_REVISION,\n\t versions = _base.REVISION_CHANGES[revision];\n\t return [revision, versions];\n\t },\n\n\t appendToBuffer: function appendToBuffer(source, location, explicit) {\n\t // Force a source as this simplifies the merge logic.\n\t if (!_utils.isArray(source)) {\n\t source = [source];\n\t }\n\t source = this.source.wrap(source, location);\n\n\t if (this.environment.isSimple) {\n\t return ['return ', source, ';'];\n\t } else if (explicit) {\n\t // This is a case where the buffer operation occurs as a child of another\n\t // construct, generally braces. We have to explicitly output these buffer\n\t // operations to ensure that the emitted code goes in the correct location.\n\t return ['buffer += ', source, ';'];\n\t } else {\n\t source.appendToBuffer = true;\n\t return source;\n\t }\n\t },\n\n\t initializeBuffer: function initializeBuffer() {\n\t return this.quotedString('');\n\t },\n\t // END PUBLIC API\n\t internalNameLookup: function internalNameLookup(parent, name) {\n\t this.lookupPropertyFunctionIsUsed = true;\n\t return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n\t },\n\n\t lookupPropertyFunctionIsUsed: false,\n\n\t compile: function compile(environment, options, context, asObject) {\n\t this.environment = environment;\n\t this.options = options;\n\t this.stringParams = this.options.stringParams;\n\t this.trackIds = this.options.trackIds;\n\t this.precompile = !asObject;\n\n\t this.name = this.environment.name;\n\t this.isChild = !!context;\n\t this.context = context || {\n\t decorators: [],\n\t programs: [],\n\t environments: []\n\t };\n\n\t this.preamble();\n\n\t this.stackSlot = 0;\n\t this.stackVars = [];\n\t this.aliases = {};\n\t this.registers = { list: [] };\n\t this.hashes = [];\n\t this.compileStack = [];\n\t this.inlineStack = [];\n\t this.blockParams = [];\n\n\t this.compileChildren(environment, options);\n\n\t this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n\t this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n\t var opcodes = environment.opcodes,\n\t opcode = undefined,\n\t firstLoc = undefined,\n\t i = undefined,\n\t l = undefined;\n\n\t for (i = 0, l = opcodes.length; i < l; i++) {\n\t opcode = opcodes[i];\n\n\t this.source.currentLocation = opcode.loc;\n\t firstLoc = firstLoc || opcode.loc;\n\t this[opcode.opcode].apply(this, opcode.args);\n\t }\n\n\t // Flush any trailing content that might be pending.\n\t this.source.currentLocation = firstLoc;\n\t this.pushSource('');\n\n\t /* istanbul ignore next */\n\t if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n\t throw new _exception2['default']('Compile completed with content left on stack');\n\t }\n\n\t if (!this.decorators.isEmpty()) {\n\t this.useDecorators = true;\n\n\t this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n\t this.decorators.push('return fn;');\n\n\t if (asObject) {\n\t this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n\t } else {\n\t this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n\t this.decorators.push('}\\n');\n\t this.decorators = this.decorators.merge();\n\t }\n\t } else {\n\t this.decorators = undefined;\n\t }\n\n\t var fn = this.createFunctionContext(asObject);\n\t if (!this.isChild) {\n\t var ret = {\n\t compiler: this.compilerInfo(),\n\t main: fn\n\t };\n\n\t if (this.decorators) {\n\t ret.main_d = this.decorators; // eslint-disable-line camelcase\n\t ret.useDecorators = true;\n\t }\n\n\t var _context = this.context;\n\t var programs = _context.programs;\n\t var decorators = _context.decorators;\n\n\t for (i = 0, l = programs.length; i < l; i++) {\n\t if (programs[i]) {\n\t ret[i] = programs[i];\n\t if (decorators[i]) {\n\t ret[i + '_d'] = decorators[i];\n\t ret.useDecorators = true;\n\t }\n\t }\n\t }\n\n\t if (this.environment.usePartial) {\n\t ret.usePartial = true;\n\t }\n\t if (this.options.data) {\n\t ret.useData = true;\n\t }\n\t if (this.useDepths) {\n\t ret.useDepths = true;\n\t }\n\t if (this.useBlockParams) {\n\t ret.useBlockParams = true;\n\t }\n\t if (this.options.compat) {\n\t ret.compat = true;\n\t }\n\n\t if (!asObject) {\n\t ret.compiler = JSON.stringify(ret.compiler);\n\n\t this.source.currentLocation = { start: { line: 1, column: 0 } };\n\t ret = this.objectLiteral(ret);\n\n\t if (options.srcName) {\n\t ret = ret.toStringWithSourceMap({ file: options.destName });\n\t ret.map = ret.map && ret.map.toString();\n\t } else {\n\t ret = ret.toString();\n\t }\n\t } else {\n\t ret.compilerOptions = this.options;\n\t }\n\n\t return ret;\n\t } else {\n\t return fn;\n\t }\n\t },\n\n\t preamble: function preamble() {\n\t // track the last context pushed into place to allow skipping the\n\t // getContext opcode when it would be a noop\n\t this.lastContext = 0;\n\t this.source = new _codeGen2['default'](this.options.srcName);\n\t this.decorators = new _codeGen2['default'](this.options.srcName);\n\t },\n\n\t createFunctionContext: function createFunctionContext(asObject) {\n\t // istanbul ignore next\n\n\t var _this = this;\n\n\t var varDeclarations = '';\n\n\t var locals = this.stackVars.concat(this.registers.list);\n\t if (locals.length > 0) {\n\t varDeclarations += ', ' + locals.join(', ');\n\t }\n\n\t // Generate minimizer alias mappings\n\t //\n\t // When using true SourceNodes, this will update all references to the given alias\n\t // as the source nodes are reused in situ. For the non-source node compilation mode,\n\t // aliases will not be used, but this case is already being run on the client and\n\t // we aren't concern about minimizing the template size.\n\t var aliasCount = 0;\n\t _Object$keys(this.aliases).forEach(function (alias) {\n\t var node = _this.aliases[alias];\n\t if (node.children && node.referenceCount > 1) {\n\t varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n\t node.children[0] = 'alias' + aliasCount;\n\t }\n\t });\n\n\t if (this.lookupPropertyFunctionIsUsed) {\n\t varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n\t }\n\n\t var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n\t if (this.useBlockParams || this.useDepths) {\n\t params.push('blockParams');\n\t }\n\t if (this.useDepths) {\n\t params.push('depths');\n\t }\n\n\t // Perform a second pass over the output to merge content when possible\n\t var source = this.mergeSource(varDeclarations);\n\n\t if (asObject) {\n\t params.push(source);\n\n\t return Function.apply(this, params);\n\t } else {\n\t return this.source.wrap(['function(', params.join(','), ') {\\n ', source, '}']);\n\t }\n\t },\n\t mergeSource: function mergeSource(varDeclarations) {\n\t var isSimple = this.environment.isSimple,\n\t appendOnly = !this.forceBuffer,\n\t appendFirst = undefined,\n\t sourceSeen = undefined,\n\t bufferStart = undefined,\n\t bufferEnd = undefined;\n\t this.source.each(function (line) {\n\t if (line.appendToBuffer) {\n\t if (bufferStart) {\n\t line.prepend(' + ');\n\t } else {\n\t bufferStart = line;\n\t }\n\t bufferEnd = line;\n\t } else {\n\t if (bufferStart) {\n\t if (!sourceSeen) {\n\t appendFirst = true;\n\t } else {\n\t bufferStart.prepend('buffer += ');\n\t }\n\t bufferEnd.add(';');\n\t bufferStart = bufferEnd = undefined;\n\t }\n\n\t sourceSeen = true;\n\t if (!isSimple) {\n\t appendOnly = false;\n\t }\n\t }\n\t });\n\n\t if (appendOnly) {\n\t if (bufferStart) {\n\t bufferStart.prepend('return ');\n\t bufferEnd.add(';');\n\t } else if (!sourceSeen) {\n\t this.source.push('return \"\";');\n\t }\n\t } else {\n\t varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n\t if (bufferStart) {\n\t bufferStart.prepend('return buffer + ');\n\t bufferEnd.add(';');\n\t } else {\n\t this.source.push('return buffer;');\n\t }\n\t }\n\n\t if (varDeclarations) {\n\t this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n\t }\n\n\t return this.source.merge();\n\t },\n\n\t lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\n\t return '\\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\\n return parent[propertyName];\\n }\\n return undefined\\n }\\n '.trim();\n\t },\n\n\t // [blockValue]\n\t //\n\t // On stack, before: hash, inverse, program, value\n\t // On stack, after: return value of blockHelperMissing\n\t //\n\t // The purpose of this opcode is to take a block of the form\n\t // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n\t // replace it on the stack with the result of properly\n\t // invoking blockHelperMissing.\n\t blockValue: function blockValue(name) {\n\t var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n\t params = [this.contextName(0)];\n\t this.setupHelperArgs(name, 0, params);\n\n\t var blockName = this.popStack();\n\t params.splice(1, 0, blockName);\n\n\t this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n\t },\n\n\t // [ambiguousBlockValue]\n\t //\n\t // On stack, before: hash, inverse, program, value\n\t // Compiler value, before: lastHelper=value of last found helper, if any\n\t // On stack, after, if no lastHelper: same as [blockValue]\n\t // On stack, after, if lastHelper: value\n\t ambiguousBlockValue: function ambiguousBlockValue() {\n\t // We're being a bit cheeky and reusing the options value from the prior exec\n\t var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n\t params = [this.contextName(0)];\n\t this.setupHelperArgs('', 0, params, true);\n\n\t this.flushInline();\n\n\t var current = this.topStack();\n\t params.splice(1, 0, current);\n\n\t this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n\t },\n\n\t // [appendContent]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: ...\n\t //\n\t // Appends the string value of `content` to the current buffer\n\t appendContent: function appendContent(content) {\n\t if (this.pendingContent) {\n\t content = this.pendingContent + content;\n\t } else {\n\t this.pendingLocation = this.source.currentLocation;\n\t }\n\n\t this.pendingContent = content;\n\t },\n\n\t // [append]\n\t //\n\t // On stack, before: value, ...\n\t // On stack, after: ...\n\t //\n\t // Coerces `value` to a String and appends it to the current buffer.\n\t //\n\t // If `value` is truthy, or 0, it is coerced into a string and appended\n\t // Otherwise, the empty string is appended\n\t append: function append() {\n\t if (this.isInline()) {\n\t this.replaceStack(function (current) {\n\t return [' != null ? ', current, ' : \"\"'];\n\t });\n\n\t this.pushSource(this.appendToBuffer(this.popStack()));\n\t } else {\n\t var local = this.popStack();\n\t this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n\t if (this.environment.isSimple) {\n\t this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n\t }\n\t }\n\t },\n\n\t // [appendEscaped]\n\t //\n\t // On stack, before: value, ...\n\t // On stack, after: ...\n\t //\n\t // Escape `value` and append it to the buffer\n\t appendEscaped: function appendEscaped() {\n\t this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n\t },\n\n\t // [getContext]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: ...\n\t // Compiler value, after: lastContext=depth\n\t //\n\t // Set the value of the `lastContext` compiler value to the depth\n\t getContext: function getContext(depth) {\n\t this.lastContext = depth;\n\t },\n\n\t // [pushContext]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: currentContext, ...\n\t //\n\t // Pushes the value of the current context onto the stack.\n\t pushContext: function pushContext() {\n\t this.pushStackLiteral(this.contextName(this.lastContext));\n\t },\n\n\t // [lookupOnContext]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: currentContext[name], ...\n\t //\n\t // Looks up the value of `name` on the current context and pushes\n\t // it onto the stack.\n\t lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n\t var i = 0;\n\n\t if (!scoped && this.options.compat && !this.lastContext) {\n\t // The depthed query is expected to handle the undefined logic for the root level that\n\t // is implemented below, so we evaluate that directly in compat mode\n\t this.push(this.depthedLookup(parts[i++]));\n\t } else {\n\t this.pushContext();\n\t }\n\n\t this.resolvePath('context', parts, i, falsy, strict);\n\t },\n\n\t // [lookupBlockParam]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: blockParam[name], ...\n\t //\n\t // Looks up the value of `parts` on the given block param and pushes\n\t // it onto the stack.\n\t lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n\t this.useBlockParams = true;\n\n\t this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n\t this.resolvePath('context', parts, 1);\n\t },\n\n\t // [lookupData]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: data, ...\n\t //\n\t // Push the data lookup operator\n\t lookupData: function lookupData(depth, parts, strict) {\n\t if (!depth) {\n\t this.pushStackLiteral('data');\n\t } else {\n\t this.pushStackLiteral('container.data(data, ' + depth + ')');\n\t }\n\n\t this.resolvePath('data', parts, 0, true, strict);\n\t },\n\n\t resolvePath: function resolvePath(type, parts, i, falsy, strict) {\n\t // istanbul ignore next\n\n\t var _this2 = this;\n\n\t if (this.options.strict || this.options.assumeObjects) {\n\t this.push(strictLookup(this.options.strict && strict, this, parts, type));\n\t return;\n\t }\n\n\t var len = parts.length;\n\t for (; i < len; i++) {\n\t /* eslint-disable no-loop-func */\n\t this.replaceStack(function (current) {\n\t var lookup = _this2.nameLookup(current, parts[i], type);\n\t // We want to ensure that zero and false are handled properly if the context (falsy flag)\n\t // needs to have the special handling for these values.\n\t if (!falsy) {\n\t return [' != null ? ', lookup, ' : ', current];\n\t } else {\n\t // Otherwise we can use generic falsy handling\n\t return [' && ', lookup];\n\t }\n\t });\n\t /* eslint-enable no-loop-func */\n\t }\n\t },\n\n\t // [resolvePossibleLambda]\n\t //\n\t // On stack, before: value, ...\n\t // On stack, after: resolved value, ...\n\t //\n\t // If the `value` is a lambda, replace it on the stack by\n\t // the return value of the lambda\n\t resolvePossibleLambda: function resolvePossibleLambda() {\n\t this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n\t },\n\n\t // [pushStringParam]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: string, currentContext, ...\n\t //\n\t // This opcode is designed for use in string mode, which\n\t // provides the string value of a parameter along with its\n\t // depth rather than resolving it immediately.\n\t pushStringParam: function pushStringParam(string, type) {\n\t this.pushContext();\n\t this.pushString(type);\n\n\t // If it's a subexpression, the string result\n\t // will be pushed after this opcode.\n\t if (type !== 'SubExpression') {\n\t if (typeof string === 'string') {\n\t this.pushString(string);\n\t } else {\n\t this.pushStackLiteral(string);\n\t }\n\t }\n\t },\n\n\t emptyHash: function emptyHash(omitEmpty) {\n\t if (this.trackIds) {\n\t this.push('{}'); // hashIds\n\t }\n\t if (this.stringParams) {\n\t this.push('{}'); // hashContexts\n\t this.push('{}'); // hashTypes\n\t }\n\t this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n\t },\n\t pushHash: function pushHash() {\n\t if (this.hash) {\n\t this.hashes.push(this.hash);\n\t }\n\t this.hash = { values: {}, types: [], contexts: [], ids: [] };\n\t },\n\t popHash: function popHash() {\n\t var hash = this.hash;\n\t this.hash = this.hashes.pop();\n\n\t if (this.trackIds) {\n\t this.push(this.objectLiteral(hash.ids));\n\t }\n\t if (this.stringParams) {\n\t this.push(this.objectLiteral(hash.contexts));\n\t this.push(this.objectLiteral(hash.types));\n\t }\n\n\t this.push(this.objectLiteral(hash.values));\n\t },\n\n\t // [pushString]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: quotedString(string), ...\n\t //\n\t // Push a quoted version of `string` onto the stack\n\t pushString: function pushString(string) {\n\t this.pushStackLiteral(this.quotedString(string));\n\t },\n\n\t // [pushLiteral]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: value, ...\n\t //\n\t // Pushes a value onto the stack. This operation prevents\n\t // the compiler from creating a temporary variable to hold\n\t // it.\n\t pushLiteral: function pushLiteral(value) {\n\t this.pushStackLiteral(value);\n\t },\n\n\t // [pushProgram]\n\t //\n\t // On stack, before: ...\n\t // On stack, after: program(guid), ...\n\t //\n\t // Push a program expression onto the stack. This takes\n\t // a compile-time guid and converts it into a runtime-accessible\n\t // expression.\n\t pushProgram: function pushProgram(guid) {\n\t if (guid != null) {\n\t this.pushStackLiteral(this.programExpression(guid));\n\t } else {\n\t this.pushStackLiteral(null);\n\t }\n\t },\n\n\t // [registerDecorator]\n\t //\n\t // On stack, before: hash, program, params..., ...\n\t // On stack, after: ...\n\t //\n\t // Pops off the decorator's parameters, invokes the decorator,\n\t // and inserts the decorator into the decorators list.\n\t registerDecorator: function registerDecorator(paramSize, name) {\n\t var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n\t options = this.setupHelperArgs(name, paramSize);\n\n\t this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\n\t },\n\n\t // [invokeHelper]\n\t //\n\t // On stack, before: hash, inverse, program, params..., ...\n\t // On stack, after: result of helper invocation\n\t //\n\t // Pops off the helper's parameters, invokes the helper,\n\t // and pushes the helper's return value onto the stack.\n\t //\n\t // If the helper is not found, `helperMissing` is called.\n\t invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n\t var nonHelper = this.popStack(),\n\t helper = this.setupHelper(paramSize, name);\n\n\t var possibleFunctionCalls = [];\n\n\t if (isSimple) {\n\t // direct call to helper\n\t possibleFunctionCalls.push(helper.name);\n\t }\n\t // call a function from the input object\n\t possibleFunctionCalls.push(nonHelper);\n\t if (!this.options.strict) {\n\t possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));\n\t }\n\n\t var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n\t var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n\t this.push(functionCall);\n\t },\n\n\t itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n\t var result = [];\n\t result.push(items[0]);\n\t for (var i = 1; i < items.length; i++) {\n\t result.push(separator, items[i]);\n\t }\n\t return result;\n\t },\n\t // [invokeKnownHelper]\n\t //\n\t // On stack, before: hash, inverse, program, params..., ...\n\t // On stack, after: result of helper invocation\n\t //\n\t // This operation is used when the helper is known to exist,\n\t // so a `helperMissing` fallback is not required.\n\t invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n\t var helper = this.setupHelper(paramSize, name);\n\t this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n\t },\n\n\t // [invokeAmbiguous]\n\t //\n\t // On stack, before: hash, inverse, program, params..., ...\n\t // On stack, after: result of disambiguation\n\t //\n\t // This operation is used when an expression like `{{foo}}`\n\t // is provided, but we don't know at compile-time whether it\n\t // is a helper or a path.\n\t //\n\t // This operation emits more code than the other options,\n\t // and can be avoided by passing the `knownHelpers` and\n\t // `knownHelpersOnly` flags at compile-time.\n\t invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n\t this.useRegister('helper');\n\n\t var nonHelper = this.popStack();\n\n\t this.emptyHash();\n\t var helper = this.setupHelper(0, name, helperCall);\n\n\t var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n\t var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n\t if (!this.options.strict) {\n\t lookup[0] = '(helper = ';\n\t lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n\t }\n\n\t this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n\t },\n\n\t // [invokePartial]\n\t //\n\t // On stack, before: context, ...\n\t // On stack after: result of partial invocation\n\t //\n\t // This operation pops off a context, invokes a partial with that context,\n\t // and pushes the result of the invocation back.\n\t invokePartial: function invokePartial(isDynamic, name, indent) {\n\t var params = [],\n\t options = this.setupParams(name, 1, params);\n\n\t if (isDynamic) {\n\t name = this.popStack();\n\t delete options.name;\n\t }\n\n\t if (indent) {\n\t options.indent = JSON.stringify(indent);\n\t }\n\t options.helpers = 'helpers';\n\t options.partials = 'partials';\n\t options.decorators = 'container.decorators';\n\n\t if (!isDynamic) {\n\t params.unshift(this.nameLookup('partials', name, 'partial'));\n\t } else {\n\t params.unshift(name);\n\t }\n\n\t if (this.options.compat) {\n\t options.depths = 'depths';\n\t }\n\t options = this.objectLiteral(options);\n\t params.push(options);\n\n\t this.push(this.source.functionCall('container.invokePartial', '', params));\n\t },\n\n\t // [assignToHash]\n\t //\n\t // On stack, before: value, ..., hash, ...\n\t // On stack, after: ..., hash, ...\n\t //\n\t // Pops a value off the stack and assigns it to the current hash\n\t assignToHash: function assignToHash(key) {\n\t var value = this.popStack(),\n\t context = undefined,\n\t type = undefined,\n\t id = undefined;\n\n\t if (this.trackIds) {\n\t id = this.popStack();\n\t }\n\t if (this.stringParams) {\n\t type = this.popStack();\n\t context = this.popStack();\n\t }\n\n\t var hash = this.hash;\n\t if (context) {\n\t hash.contexts[key] = context;\n\t }\n\t if (type) {\n\t hash.types[key] = type;\n\t }\n\t if (id) {\n\t hash.ids[key] = id;\n\t }\n\t hash.values[key] = value;\n\t },\n\n\t pushId: function pushId(type, name, child) {\n\t if (type === 'BlockParam') {\n\t this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n\t } else if (type === 'PathExpression') {\n\t this.pushString(name);\n\t } else if (type === 'SubExpression') {\n\t this.pushStackLiteral('true');\n\t } else {\n\t this.pushStackLiteral('null');\n\t }\n\t },\n\n\t // HELPERS\n\n\t compiler: JavaScriptCompiler,\n\n\t compileChildren: function compileChildren(environment, options) {\n\t var children = environment.children,\n\t child = undefined,\n\t compiler = undefined;\n\n\t for (var i = 0, l = children.length; i < l; i++) {\n\t child = children[i];\n\t compiler = new this.compiler(); // eslint-disable-line new-cap\n\n\t var existing = this.matchExistingProgram(child);\n\n\t if (existing == null) {\n\t this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n\t var index = this.context.programs.length;\n\t child.index = index;\n\t child.name = 'program' + index;\n\t this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n\t this.context.decorators[index] = compiler.decorators;\n\t this.context.environments[index] = child;\n\n\t this.useDepths = this.useDepths || compiler.useDepths;\n\t this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n\t child.useDepths = this.useDepths;\n\t child.useBlockParams = this.useBlockParams;\n\t } else {\n\t child.index = existing.index;\n\t child.name = 'program' + existing.index;\n\n\t this.useDepths = this.useDepths || existing.useDepths;\n\t this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n\t }\n\t }\n\t },\n\t matchExistingProgram: function matchExistingProgram(child) {\n\t for (var i = 0, len = this.context.environments.length; i < len; i++) {\n\t var environment = this.context.environments[i];\n\t if (environment && environment.equals(child)) {\n\t return environment;\n\t }\n\t }\n\t },\n\n\t programExpression: function programExpression(guid) {\n\t var child = this.environment.children[guid],\n\t programParams = [child.index, 'data', child.blockParams];\n\n\t if (this.useBlockParams || this.useDepths) {\n\t programParams.push('blockParams');\n\t }\n\t if (this.useDepths) {\n\t programParams.push('depths');\n\t }\n\n\t return 'container.program(' + programParams.join(', ') + ')';\n\t },\n\n\t useRegister: function useRegister(name) {\n\t if (!this.registers[name]) {\n\t this.registers[name] = true;\n\t this.registers.list.push(name);\n\t }\n\t },\n\n\t push: function push(expr) {\n\t if (!(expr instanceof Literal)) {\n\t expr = this.source.wrap(expr);\n\t }\n\n\t this.inlineStack.push(expr);\n\t return expr;\n\t },\n\n\t pushStackLiteral: function pushStackLiteral(item) {\n\t this.push(new Literal(item));\n\t },\n\n\t pushSource: function pushSource(source) {\n\t if (this.pendingContent) {\n\t this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n\t this.pendingContent = undefined;\n\t }\n\n\t if (source) {\n\t this.source.push(source);\n\t }\n\t },\n\n\t replaceStack: function replaceStack(callback) {\n\t var prefix = ['('],\n\t stack = undefined,\n\t createdStack = undefined,\n\t usedLiteral = undefined;\n\n\t /* istanbul ignore next */\n\t if (!this.isInline()) {\n\t throw new _exception2['default']('replaceStack on non-inline');\n\t }\n\n\t // We want to merge the inline statement into the replacement statement via ','\n\t var top = this.popStack(true);\n\n\t if (top instanceof Literal) {\n\t // Literals do not need to be inlined\n\t stack = [top.value];\n\t prefix = ['(', stack];\n\t usedLiteral = true;\n\t } else {\n\t // Get or create the current stack name for use by the inline\n\t createdStack = true;\n\t var _name = this.incrStack();\n\n\t prefix = ['((', this.push(_name), ' = ', top, ')'];\n\t stack = this.topStack();\n\t }\n\n\t var item = callback.call(this, stack);\n\n\t if (!usedLiteral) {\n\t this.popStack();\n\t }\n\t if (createdStack) {\n\t this.stackSlot--;\n\t }\n\t this.push(prefix.concat(item, ')'));\n\t },\n\n\t incrStack: function incrStack() {\n\t this.stackSlot++;\n\t if (this.stackSlot > this.stackVars.length) {\n\t this.stackVars.push('stack' + this.stackSlot);\n\t }\n\t return this.topStackName();\n\t },\n\t topStackName: function topStackName() {\n\t return 'stack' + this.stackSlot;\n\t },\n\t flushInline: function flushInline() {\n\t var inlineStack = this.inlineStack;\n\t this.inlineStack = [];\n\t for (var i = 0, len = inlineStack.length; i < len; i++) {\n\t var entry = inlineStack[i];\n\t /* istanbul ignore if */\n\t if (entry instanceof Literal) {\n\t this.compileStack.push(entry);\n\t } else {\n\t var stack = this.incrStack();\n\t this.pushSource([stack, ' = ', entry, ';']);\n\t this.compileStack.push(stack);\n\t }\n\t }\n\t },\n\t isInline: function isInline() {\n\t return this.inlineStack.length;\n\t },\n\n\t popStack: function popStack(wrapped) {\n\t var inline = this.isInline(),\n\t item = (inline ? this.inlineStack : this.compileStack).pop();\n\n\t if (!wrapped && item instanceof Literal) {\n\t return item.value;\n\t } else {\n\t if (!inline) {\n\t /* istanbul ignore next */\n\t if (!this.stackSlot) {\n\t throw new _exception2['default']('Invalid stack pop');\n\t }\n\t this.stackSlot--;\n\t }\n\t return item;\n\t }\n\t },\n\n\t topStack: function topStack() {\n\t var stack = this.isInline() ? this.inlineStack : this.compileStack,\n\t item = stack[stack.length - 1];\n\n\t /* istanbul ignore if */\n\t if (item instanceof Literal) {\n\t return item.value;\n\t } else {\n\t return item;\n\t }\n\t },\n\n\t contextName: function contextName(context) {\n\t if (this.useDepths && context) {\n\t return 'depths[' + context + ']';\n\t } else {\n\t return 'depth' + context;\n\t }\n\t },\n\n\t quotedString: function quotedString(str) {\n\t return this.source.quotedString(str);\n\t },\n\n\t objectLiteral: function objectLiteral(obj) {\n\t return this.source.objectLiteral(obj);\n\t },\n\n\t aliasable: function aliasable(name) {\n\t var ret = this.aliases[name];\n\t if (ret) {\n\t ret.referenceCount++;\n\t return ret;\n\t }\n\n\t ret = this.aliases[name] = this.source.wrap(name);\n\t ret.aliasable = true;\n\t ret.referenceCount = 1;\n\n\t return ret;\n\t },\n\n\t setupHelper: function setupHelper(paramSize, name, blockHelper) {\n\t var params = [],\n\t paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n\t var foundHelper = this.nameLookup('helpers', name, 'helper'),\n\t callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n\t return {\n\t params: params,\n\t paramsInit: paramsInit,\n\t name: foundHelper,\n\t callParams: [callContext].concat(params)\n\t };\n\t },\n\n\t setupParams: function setupParams(helper, paramSize, params) {\n\t var options = {},\n\t contexts = [],\n\t types = [],\n\t ids = [],\n\t objectArgs = !params,\n\t param = undefined;\n\n\t if (objectArgs) {\n\t params = [];\n\t }\n\n\t options.name = this.quotedString(helper);\n\t options.hash = this.popStack();\n\n\t if (this.trackIds) {\n\t options.hashIds = this.popStack();\n\t }\n\t if (this.stringParams) {\n\t options.hashTypes = this.popStack();\n\t options.hashContexts = this.popStack();\n\t }\n\n\t var inverse = this.popStack(),\n\t program = this.popStack();\n\n\t // Avoid setting fn and inverse if neither are set. This allows\n\t // helpers to do a check for `if (options.fn)`\n\t if (program || inverse) {\n\t options.fn = program || 'container.noop';\n\t options.inverse = inverse || 'container.noop';\n\t }\n\n\t // The parameters go on to the stack in order (making sure that they are evaluated in order)\n\t // so we need to pop them off the stack in reverse order\n\t var i = paramSize;\n\t while (i--) {\n\t param = this.popStack();\n\t params[i] = param;\n\n\t if (this.trackIds) {\n\t ids[i] = this.popStack();\n\t }\n\t if (this.stringParams) {\n\t types[i] = this.popStack();\n\t contexts[i] = this.popStack();\n\t }\n\t }\n\n\t if (objectArgs) {\n\t options.args = this.source.generateArray(params);\n\t }\n\n\t if (this.trackIds) {\n\t options.ids = this.source.generateArray(ids);\n\t }\n\t if (this.stringParams) {\n\t options.types = this.source.generateArray(types);\n\t options.contexts = this.source.generateArray(contexts);\n\t }\n\n\t if (this.options.data) {\n\t options.data = 'data';\n\t }\n\t if (this.useBlockParams) {\n\t options.blockParams = 'blockParams';\n\t }\n\t return options;\n\t },\n\n\t setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n\t var options = this.setupParams(helper, paramSize, params);\n\t options.loc = JSON.stringify(this.source.currentLocation);\n\t options = this.objectLiteral(options);\n\t if (useRegister) {\n\t this.useRegister('options');\n\t params.push('options');\n\t return ['options=', options];\n\t } else if (params) {\n\t params.push(options);\n\t return '';\n\t } else {\n\t return options;\n\t }\n\t }\n\t};\n\n\t(function () {\n\t var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n\t var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n\t for (var i = 0, l = reservedWords.length; i < l; i++) {\n\t compilerWords[reservedWords[i]] = true;\n\t }\n\t})();\n\n\t/**\n\t * @deprecated May be removed in the next major version\n\t */\n\tJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n\t return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n\t};\n\n\tfunction strictLookup(requireTerminal, compiler, parts, type) {\n\t var stack = compiler.popStack(),\n\t i = 0,\n\t len = parts.length;\n\t if (requireTerminal) {\n\t len--;\n\t }\n\n\t for (; i < len; i++) {\n\t stack = compiler.nameLookup(stack, parts[i], type);\n\t }\n\n\t if (requireTerminal) {\n\t return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n\t } else {\n\t return stack;\n\t }\n\t}\n\n\texports['default'] = JavaScriptCompiler;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global define */\n\t'use strict';\n\n\tvar _Object$keys = __webpack_require__(13)['default'];\n\n\texports.__esModule = true;\n\n\tvar _utils = __webpack_require__(5);\n\n\tvar SourceNode = undefined;\n\n\ttry {\n\t /* istanbul ignore next */\n\t if (false) {\n\t // We don't support this in AMD environments. For these environments, we asusme that\n\t // they are running on the browser and thus have no need for the source-map library.\n\t var SourceMap = require('source-map');\n\t SourceNode = SourceMap.SourceNode;\n\t }\n\t} catch (err) {}\n\t/* NOP */\n\n\t/* istanbul ignore if: tested but not covered in istanbul due to dist build */\n\tif (!SourceNode) {\n\t SourceNode = function (line, column, srcFile, chunks) {\n\t this.src = '';\n\t if (chunks) {\n\t this.add(chunks);\n\t }\n\t };\n\t /* istanbul ignore next */\n\t SourceNode.prototype = {\n\t add: function add(chunks) {\n\t if (_utils.isArray(chunks)) {\n\t chunks = chunks.join('');\n\t }\n\t this.src += chunks;\n\t },\n\t prepend: function prepend(chunks) {\n\t if (_utils.isArray(chunks)) {\n\t chunks = chunks.join('');\n\t }\n\t this.src = chunks + this.src;\n\t },\n\t toStringWithSourceMap: function toStringWithSourceMap() {\n\t return { code: this.toString() };\n\t },\n\t toString: function toString() {\n\t return this.src;\n\t }\n\t };\n\t}\n\n\tfunction castChunk(chunk, codeGen, loc) {\n\t if (_utils.isArray(chunk)) {\n\t var ret = [];\n\n\t for (var i = 0, len = chunk.length; i < len; i++) {\n\t ret.push(codeGen.wrap(chunk[i], loc));\n\t }\n\t return ret;\n\t } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n\t // Handle primitives that the SourceNode will throw up on\n\t return chunk + '';\n\t }\n\t return chunk;\n\t}\n\n\tfunction CodeGen(srcFile) {\n\t this.srcFile = srcFile;\n\t this.source = [];\n\t}\n\n\tCodeGen.prototype = {\n\t isEmpty: function isEmpty() {\n\t return !this.source.length;\n\t },\n\t prepend: function prepend(source, loc) {\n\t this.source.unshift(this.wrap(source, loc));\n\t },\n\t push: function push(source, loc) {\n\t this.source.push(this.wrap(source, loc));\n\t },\n\n\t merge: function merge() {\n\t var source = this.empty();\n\t this.each(function (line) {\n\t source.add([' ', line, '\\n']);\n\t });\n\t return source;\n\t },\n\n\t each: function each(iter) {\n\t for (var i = 0, len = this.source.length; i < len; i++) {\n\t iter(this.source[i]);\n\t }\n\t },\n\n\t empty: function empty() {\n\t var loc = this.currentLocation || { start: {} };\n\t return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n\t },\n\t wrap: function wrap(chunk) {\n\t var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n\t if (chunk instanceof SourceNode) {\n\t return chunk;\n\t }\n\n\t chunk = castChunk(chunk, this, loc);\n\n\t return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n\t },\n\n\t functionCall: function functionCall(fn, type, params) {\n\t params = this.generateList(params);\n\t return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n\t },\n\n\t quotedString: function quotedString(str) {\n\t return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n\t .replace(/\\u2029/g, '\\\\u2029') + '\"';\n\t },\n\n\t objectLiteral: function objectLiteral(obj) {\n\t // istanbul ignore next\n\n\t var _this = this;\n\n\t var pairs = [];\n\n\t _Object$keys(obj).forEach(function (key) {\n\t var value = castChunk(obj[key], _this);\n\t if (value !== 'undefined') {\n\t pairs.push([_this.quotedString(key), ':', value]);\n\t }\n\t });\n\n\t var ret = this.generateList(pairs);\n\t ret.prepend('{');\n\t ret.add('}');\n\t return ret;\n\t },\n\n\t generateList: function generateList(entries) {\n\t var ret = this.empty();\n\n\t for (var i = 0, len = entries.length; i < len; i++) {\n\t if (i) {\n\t ret.add(',');\n\t }\n\n\t ret.add(castChunk(entries[i], this));\n\t }\n\n\t return ret;\n\t },\n\n\t generateArray: function generateArray(entries) {\n\t var ret = this.generateList(entries);\n\t ret.prepend('[');\n\t ret.add(']');\n\n\t return ret;\n\t }\n\t};\n\n\texports['default'] = CodeGen;\n\tmodule.exports = exports['default'];\n\n/***/ })\n/******/ ])\n});\n;","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","/// \r\n\r\nimport JSNLogAppender = JL.JSNLogAppender\r\nimport JSNLogAppenderOptions = JL.JSNLogAppenderOptions\r\nimport JSNLogAjaxAppender = JL.JSNLogAjaxAppender\r\nimport JSNLogAjaxAppenderOptions = JL.JSNLogAjaxAppenderOptions\r\nimport JSNLogConsoleAppender = JL.JSNLogConsoleAppender\r\nimport JSNLogFilterOptions = JL.JSNLogFilterOptions\r\nimport JSNLogLogger = JL.JSNLogLogger\r\nimport JSNLogLoggerOptions = JL.JSNLogLoggerOptions\r\nimport JSNLogOptions = JL.JSNLogOptions\r\n\r\n// Ambient definition of XDomainRequest (only used with IE8 and 9), to prevent TypeScript compiler \"name not found\" error.\r\ndeclare class XDomainRequest\r\n{\r\n\topen(method: string, url: string);\r\n}\r\n\r\nfunction JL(loggerName?: string): JSNLogLogger\r\n{\r\n // If name is empty, return the root logger\r\n if (!loggerName)\r\n {\r\n return JL.__;\r\n }\r\n\r\n // Implements Array.reduce. JSNLog supports IE8+ and reduce is not supported in that browser.\r\n // Same interface as the standard reduce, except that \r\n if (!Array.prototype.reduce)\r\n {\r\n Array.prototype.reduce = function (callback: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any)\r\n {\r\n var previousValue = initialValue;\r\n for (var i = 0; i < this.length; i++)\r\n {\r\n previousValue = callback(previousValue, this[i], i, this);\r\n }\r\n\r\n return previousValue;\r\n };\r\n }\r\n\r\n var accumulatedLoggerName = '';\r\n var logger: JL.Logger = ('.' + loggerName).split('.').reduce(\r\n function (prev: JL.Logger, curr: string, idx: number, arr: string[])\r\n {\r\n // if loggername is a.b.c, than currentLogger will be set to the loggers\r\n // root (prev: JL, curr: '')\r\n // a (prev: JL.__, curr: 'a')\r\n // a.b (prev: JL.__.__a, curr: 'b')\r\n // a.b.c (prev: JL.__.__a.__a.b, curr: 'c')\r\n\r\n // Note that when a new logger name is encountered (such as 'a.b.c'),\r\n // a new logger object is created and added as a property to the parent ('a.b').\r\n // The root logger is added as a property of the JL object itself.\r\n\r\n // It is essential that the name of the property containing the child logger\r\n // contains the full 'path' name of the child logger ('a.b.c') instead of\r\n // just the bit after the last period ('c').\r\n // This is because the parent inherits properties from its ancestors.\r\n // So if the root has a child logger 'c' (stored in a property 'c' of the root logger),\r\n // then logger 'a.b' has that same property 'c' through inheritance.\r\n\r\n // The names of the logger properties start with __, so the root logger \r\n // (which has name ''), has a nice property name '__'. \r\n\r\n // accumulatedLoggerName evaluates false ('' is falsy) in first iteration when prev is the root logger.\r\n // accumulatedLoggerName will be the logger name corresponding with the logger in currentLogger.\r\n // Keep in mind that the currentLogger may not be defined yet, so can't get the name from\r\n // the currentLogger object itself. \r\n if (accumulatedLoggerName)\r\n {\r\n accumulatedLoggerName += '.' + curr;\r\n } else\r\n {\r\n accumulatedLoggerName = curr;\r\n }\r\n\r\n var currentLogger = prev['__' + accumulatedLoggerName];\r\n\r\n // If the currentLogger (or the actual logger being sought) does not yet exist, \r\n // create it now.\r\n if (currentLogger === undefined)\r\n {\r\n\r\n // Set the prototype of the Logger constructor function to the parent of the logger\r\n // to be created. This way, __proto of the new logger object will point at the parent.\r\n // When logger.level is evaluated and is not present, the JavaScript runtime will \r\n // walk down the prototype chain to find the first ancestor with a level property.\r\n //\r\n // Note that prev at this point refers to the parent logger.\r\n\r\n JL.Logger.prototype = prev;\r\n\r\n currentLogger = new JL.Logger(accumulatedLoggerName);\r\n prev['__' + accumulatedLoggerName] = currentLogger;\r\n }\r\n\r\n return currentLogger;\r\n }, JL.__);\r\n\r\n return logger;\r\n}\r\n\r\nmodule JL\r\n{\r\n\r\n export var enabled: boolean;\r\n export var maxMessages: number;\r\n export var defaultAjaxUrl: string;\r\n export var clientIP: string;\r\n export var defaultBeforeSend: any;\r\n\r\n // Initialise requestId to empty string. If you don't do this and the user\r\n // does not set it via setOptions, then the JSNLog-RequestId header will\r\n // have value \"undefined\", which doesn't look good in a log.\r\n //\r\n // Note that you always want to send a requestId as part of log requests,\r\n // otherwise the server side component doesn't know this is a log request\r\n // and may create a new request id for the log request, causing confusion\r\n // in the log.\r\n export var requestId: string = '';\r\n\r\n /**\r\n Copies the value of a property from one object to the other.\r\n This is used to copy property values as part of setOption for loggers and appenders.\r\n\r\n Because loggers inherit property values from their parents, it is important never to\r\n create a property on a logger if the intent is to inherit from the parent.\r\n\r\n Copying rules:\r\n 1) if the from property is undefined (for example, not mentioned in a JSON object), the\r\n to property is not affected at all.\r\n 2) if the from property is null, the to property is deleted (so the logger will inherit from\r\n its parent).\r\n 3) Otherwise, the from property is copied to the to property.\r\n */\r\n function copyProperty(propertyName: string, from: any, to: any): void\r\n {\r\n if (from[propertyName] === undefined) { return; }\r\n if (from[propertyName] === null) { delete to[propertyName]; return; }\r\n to[propertyName] = from[propertyName];\r\n }\r\n\r\n /**\r\n Returns true if a log should go ahead.\r\n Does not check level.\r\n\r\n @param filters\r\n Filters that determine whether a log can go ahead.\r\n */\r\n function allow(filters: JSNLogFilterOptions): boolean\r\n {\r\n // If enabled is not null or undefined, then if it is false, then return false\r\n // Note that undefined==null (!)\r\n if (!(JL.enabled == null))\r\n {\r\n if (!JL.enabled) { return false; }\r\n }\r\n\r\n // If maxMessages is not null or undefined, then if it is 0, then return false.\r\n // Note that maxMessages contains number of messages that are still allowed to send.\r\n // It is decremented each time messages are sent. It can be negative when batch size > 1.\r\n // Note that undefined==null (!)\r\n if (!(JL.maxMessages == null))\r\n {\r\n if (JL.maxMessages < 1) { return false; }\r\n }\r\n\r\n // If the regex contains a bug, that will throw an exception.\r\n // Ignore this, and pass the log item (better too much than too little).\r\n\r\n try\r\n {\r\n if (filters.userAgentRegex)\r\n {\r\n if (!new RegExp(filters.userAgentRegex).test(navigator.userAgent)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n try\r\n {\r\n if (filters.ipRegex && JL.clientIP)\r\n {\r\n if (!new RegExp(filters.ipRegex).test(JL.clientIP)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n Returns true if a log should go ahead, based on the message.\r\n\r\n @param filters\r\n Filters that determine whether a log can go ahead.\r\n\r\n @param message\r\n Message to be logged.\r\n */\r\n function allowMessage(filters: JSNLogFilterOptions, message: string): boolean\r\n {\r\n // If the regex contains a bug, that will throw an exception.\r\n // Ignore this, and pass the log item (better too much than too little).\r\n\r\n try\r\n {\r\n if (filters.disallow)\r\n {\r\n if (new RegExp(filters.disallow).test(message)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n return true;\r\n }\r\n\r\n // If logObject is a function, the function is evaluated (without parameters)\r\n // and the result returned.\r\n // Otherwise, logObject itself is returned.\r\n function stringifyLogObjectFunction(logObject: any): any\r\n {\r\n if (typeof logObject == \"function\") \r\n {\r\n if (logObject instanceof RegExp)\r\n {\r\n return logObject.toString();\r\n }\r\n else\r\n {\r\n return logObject();\r\n }\r\n }\r\n\r\n return logObject;\r\n }\r\n\r\n class StringifiedLogObject\r\n {\r\n // * msg - \r\n // if the logObject is a scalar (after possible function evaluation), this is set to\r\n // string representing the scalar. Otherwise it is left undefined.\r\n // * meta -\r\n // if the logObject is an object (after possible function evaluation), this is set to\r\n // that object. Otherwise it is left undefined.\r\n // * finalString -\r\n // This is set to the string representation of logObject (after possible function evaluation),\r\n // regardless of whether it is an scalar or an object. An object is stringified to a JSON string.\r\n // Note that you can't call this field \"final\", because as some point this was a reserved\r\n // JavaScript keyword and using final trips up some minifiers.\r\n constructor(public msg?: string, public meta?: any, public finalString?: string) { }\r\n }\r\n\r\n // Takes a logObject, which can be \r\n // * a scalar\r\n // * an object\r\n // * a parameterless function, which returns the scalar or object to log.\r\n // Returns a stringifiedLogObject\r\n function stringifyLogObject(logObject: any): StringifiedLogObject\r\n {\r\n // Note that this works if logObject is null.\r\n // typeof null is object.\r\n // JSON.stringify(null) returns \"null\".\r\n\r\n var actualLogObject = stringifyLogObjectFunction(logObject);\r\n var finalString;\r\n\r\n // Note that typeof actualLogObject should not be \"function\", because that has \r\n // been resolved with stringifyLogObjectFunction.\r\n\r\n switch (typeof actualLogObject)\r\n {\r\n case \"string\":\r\n return new StringifiedLogObject(actualLogObject, null, actualLogObject);\r\n case \"number\":\r\n finalString = actualLogObject.toString(); \r\n return new StringifiedLogObject(finalString, null, finalString);\r\n case \"boolean\":\r\n finalString = actualLogObject.toString(); \r\n return new StringifiedLogObject(finalString, null, finalString);\r\n case \"undefined\":\r\n return new StringifiedLogObject(\"undefined\", null, \"undefined\");\r\n case \"object\":\r\n if ((actualLogObject instanceof RegExp) ||\r\n (actualLogObject instanceof String) ||\r\n (actualLogObject instanceof Number) ||\r\n (actualLogObject instanceof Boolean))\r\n {\r\n finalString = actualLogObject.toString();\r\n return new StringifiedLogObject(finalString, null, finalString);\r\n }\r\n else\r\n {\r\n return new StringifiedLogObject(null, actualLogObject, JSON.stringify(actualLogObject));\r\n }\r\n default:\r\n return new StringifiedLogObject(\"unknown\", null, \"unknown\");\r\n }\r\n }\r\n\r\n export function setOptions(options: JSNLogOptions): void\r\n {\r\n copyProperty(\"enabled\", options, this);\r\n copyProperty(\"maxMessages\", options, this);\r\n copyProperty(\"defaultAjaxUrl\", options, this);\r\n copyProperty(\"clientIP\", options, this);\r\n copyProperty(\"requestId\", options, this);\r\n copyProperty(\"defaultBeforeSend\", options, this);\r\n return this;\r\n }\r\n\r\n export function getAllLevel(): number { return -2147483648; }\r\n export function getTraceLevel(): number { return 1000; }\r\n export function getDebugLevel(): number { return 2000; }\r\n export function getInfoLevel(): number { return 3000; }\r\n export function getWarnLevel(): number { return 4000; }\r\n export function getErrorLevel(): number { return 5000; }\r\n export function getFatalLevel(): number { return 6000; }\r\n export function getOffLevel(): number { return 2147483647; }\r\n\r\n function levelToString(level: number): string\r\n {\r\n if (level <= 1000) { return \"trace\"; }\r\n if (level <= 2000) { return \"debug\"; }\r\n if (level <= 3000) { return \"info\"; }\r\n if (level <= 4000) { return \"warn\"; }\r\n if (level <= 5000) { return \"error\"; }\r\n return \"fatal\";\r\n }\r\n\r\n // ---------------------\r\n\r\n export class Exception\r\n {\r\n public name: string;\r\n public message: string;\r\n\r\n // data replaces message. It takes not just strings, but also objects and functions, just like the log function.\r\n // internally, the string representation is stored in the message property (inherited from Error)\r\n //\r\n // inner: inner exception. Can be null or undefined. \r\n constructor(data: any, public inner?: any)\r\n {\r\n this.name = \"JL.Exception\";\r\n this.message = stringifyLogObject(data).finalString;\r\n }\r\n }\r\n\r\n // Derive Exception from Error (a Host object), so browsers\r\n // are more likely to produce a stack trace for it in their console.\r\n //\r\n // Note that instanceof against an object created with this constructor\r\n // will return true in these cases:\r\n // instanceof JL.Exception);\r\n // instanceof Error);\r\n\r\n Exception.prototype = new Error();\r\n\r\n // ---------------------\r\n\r\n export class LogItem\r\n {\r\n // l: level\r\n // m: message\r\n // n: logger name\r\n // t (timeStamp) is number of milliseconds since 1 January 1970 00:00:00 UTC\r\n //\r\n // Keeping the property names really short, because they will be sent in the\r\n // JSON payload to the server.\r\n constructor(public l: number, public m: string,\r\n public n: string, public t: number) { }\r\n }\r\n\r\n // ---------------------\r\n\r\n export class Appender implements JSNLogAppender, JSNLogFilterOptions\r\n {\r\n public level: number = JL.getTraceLevel();\r\n public ipRegex: string;\r\n public userAgentRegex: string;\r\n public disallow: string;\r\n\r\n // set to super high level, so if user increases level, level is unlikely to get \r\n // above sendWithBufferLevel\r\n private sendWithBufferLevel: number = 2147483647;\r\n\r\n private storeInBufferLevel: number = -2147483648;\r\n private bufferSize: number = 0; // buffering switch off by default\r\n private batchSize: number = 1;\r\n\r\n // Holds all log items with levels higher than storeInBufferLevel \r\n // but lower than level. These items may never be sent.\r\n private buffer: LogItem[] = [];\r\n\r\n // Holds all items that we do want to send, until we have a full\r\n // batch (as determined by batchSize).\r\n private batchBuffer: LogItem[] = [];\r\n\r\n // sendLogItems takes an array of log items. It will be called when\r\n // the appender has items to process (such as, send to the server).\r\n // Note that after sendLogItems returns, the appender may truncate\r\n // the LogItem array, so the function has to copy the content of the array\r\n // in some fashion (eg. serialize) before returning.\r\n\r\n constructor(\r\n public appenderName: string,\r\n public sendLogItems: (logItems: LogItem[]) => void)\r\n {\r\n }\r\n\r\n public setOptions(options: JSNLogAppenderOptions): JSNLogAppender\r\n {\r\n copyProperty(\"level\", options, this);\r\n copyProperty(\"ipRegex\", options, this);\r\n copyProperty(\"userAgentRegex\", options, this);\r\n copyProperty(\"disallow\", options, this);\r\n copyProperty(\"sendWithBufferLevel\", options, this);\r\n copyProperty(\"storeInBufferLevel\", options, this);\r\n copyProperty(\"bufferSize\", options, this);\r\n copyProperty(\"batchSize\", options, this);\r\n\r\n if (this.bufferSize < this.buffer.length) { this.buffer.length = this.bufferSize; }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n Called by a logger to log a log item.\r\n If in response to this call one or more log items need to be processed\r\n (eg., sent to the server), this method calls this.sendLogItems\r\n with an array with all items to be processed.\r\n\r\n Note that the name and parameters of this function must match those of the log function of\r\n a Winston transport object, so that users can use these transports as appenders.\r\n That is why there are many parameters that are not actually used by this function.\r\n\r\n level - string with the level (\"trace\", \"debug\", etc.) Only used by Winston transports.\r\n msg - human readable message. Undefined if the log item is an object. Only used by Winston transports.\r\n meta - log object. Always defined, because at least it contains the logger name. Only used by Winston transports.\r\n callback - function that is called when the log item has been logged. Only used by Winston transports.\r\n levelNbr - level as a number. Not used by Winston transports.\r\n message - log item. If the user logged an object, this is the JSON string. Not used by Winston transports.\r\n loggerName: name of the logger. Not used by Winston transports.\r\n */\r\n public log(\r\n level: string, msg: string, meta: any, callback: () => void,\r\n levelNbr: number, message: string, loggerName: string): void\r\n {\r\n var logItem: LogItem;\r\n\r\n if (!allow(this)) { return; }\r\n if (!allowMessage(this, message)) { return; }\r\n\r\n if (levelNbr < this.storeInBufferLevel)\r\n {\r\n // Ignore the log item completely\r\n return;\r\n }\r\n\r\n logItem = new LogItem(levelNbr, message, loggerName, (new Date).getTime());\r\n\r\n if (levelNbr < this.level)\r\n {\r\n // Store in the hold buffer. Do not send.\r\n if (this.bufferSize > 0)\r\n {\r\n this.buffer.push(logItem);\r\n\r\n // If we exceeded max buffer size, remove oldest item\r\n if (this.buffer.length > this.bufferSize)\r\n {\r\n this.buffer.shift();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (levelNbr < this.sendWithBufferLevel)\r\n {\r\n // Want to send the item, but not the contents of the buffer\r\n this.batchBuffer.push(logItem);\r\n\r\n } else\r\n {\r\n // Want to send both the item and the contents of the buffer.\r\n // Send contents of buffer first, because logically they happened first.\r\n if (this.buffer.length)\r\n {\r\n this.batchBuffer = this.batchBuffer.concat(this.buffer);\r\n this.buffer.length = 0;\r\n }\r\n this.batchBuffer.push(logItem);\r\n }\r\n\r\n if (this.batchBuffer.length >= this.batchSize)\r\n {\r\n this.sendBatch();\r\n return;\r\n }\r\n }\r\n\r\n // Processes the batch buffer\r\n private sendBatch(): void\r\n {\r\n if (this.batchBuffer.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n if (!(JL.maxMessages == null))\r\n {\r\n if (JL.maxMessages < 1) { return; }\r\n }\r\n\r\n\r\n\r\n // If maxMessages is not null or undefined, then decrease it by the batch size.\r\n // This can result in a negative maxMessages.\r\n // Note that undefined==null (!)\r\n if (!(JL.maxMessages == null))\r\n {\r\n JL.maxMessages -= this.batchBuffer.length;\r\n }\r\n\r\n this.sendLogItems(this.batchBuffer);\r\n this.batchBuffer.length = 0;\r\n }\r\n }\r\n\r\n // ---------------------\r\n\r\n export class AjaxAppender extends Appender implements JSNLogAjaxAppender\r\n {\r\n private url: string;\r\n private beforeSend: any;\r\n\r\n public setOptions(options: JSNLogAjaxAppenderOptions): JSNLogAjaxAppender\r\n {\r\n copyProperty(\"url\", options, this);\r\n copyProperty(\"beforeSend\", options, this);\r\n super.setOptions(options);\r\n return this;\r\n }\r\n\r\n public sendLogItemsAjax(logItems: LogItem[]): void\r\n {\r\n // JSON.stringify is only supported on IE8+\r\n // Use try-catch in case we get an exception here.\r\n //\r\n // The \"r\" field is now obsolete. When writing a server side component, \r\n // read the HTTP header \"JSNLog-RequestId\"\r\n // to get the request id.\r\n //\r\n // The .Net server side component\r\n // now uses the JSNLog-RequestId HTTP Header, because this allows it to\r\n // detect whether the incoming request has a request id.\r\n // If the request id were in the json payload, it would have to read the json\r\n // from the stream, interfering with normal non-logging requests.\r\n //\r\n // To see what characters you can use in the HTTP header, visit:\r\n // http://stackoverflow.com/questions/3561381/custom-http-headers-naming-conventions/3561399#3561399\r\n //\r\n // It needs this ability, so users of NLog can set a requestId variable in NLog\r\n // before the server side component tries to log the client side log message\r\n // through an NLog logger.\r\n // Unlike Log4Net, NLog doesn't allow you to register an object whose ToString()\r\n // is only called when it tries to log something, so the requestId has to be \r\n // determined right at the start of request processing.\r\n try\r\n {\r\n // Only determine the url right before you send a log request.\r\n // Do not set the url when constructing the appender.\r\n //\r\n // This is because the server side component sets defaultAjaxUrl\r\n // in a call to setOptions, AFTER the JL object and the default appender\r\n // have been created. \r\n\r\n var ajaxUrl: string = \"/jsnlog.logger\";\r\n\r\n // This evaluates to true if defaultAjaxUrl is null or undefined\r\n if (!(JL.defaultAjaxUrl == null))\r\n {\r\n ajaxUrl = JL.defaultAjaxUrl;\r\n }\r\n\r\n if (this.url)\r\n {\r\n ajaxUrl = this.url;\r\n }\r\n\r\n // Send the json to the server. \r\n // Note that there is no event handling here. If the send is not\r\n // successful, nothing can be done about it.\r\n\r\n var xhr = this.getXhr(ajaxUrl);\r\n\r\n var json: any = {\r\n r: JL.requestId,\r\n lg: logItems\r\n };\r\n\r\n // call beforeSend callback\r\n // first try the callback on the appender\r\n // then the global defaultBeforeSend callback\r\n if (typeof this.beforeSend === 'function')\r\n {\r\n this.beforeSend.call(this, xhr, json);\r\n } else if (typeof JL.defaultBeforeSend === 'function')\r\n {\r\n JL.defaultBeforeSend.call(this, xhr, json);\r\n }\r\n\r\n var finalmsg = JSON.stringify(json);\r\n xhr.send(finalmsg);\r\n } catch (e) { }\r\n }\r\n\r\n\t\t// Creates the Xhr object to use to send the log request.\r\n\t\t// Sets out to create an Xhr object that can be used for CORS.\r\n\t\t// However, if there seems to be no CORS support on the browser,\r\n\t\t// returns a non-CORS capable Xhr.\r\n\t\tprivate getXhr(ajaxUrl: string): any\r\n {\r\n\t\t var xhr = new XMLHttpRequest();\r\n\r\n\t\t\t// Check whether this xhr is CORS capable by checking whether it has\r\n\t\t\t// withCredentials. \r\n\t\t\t// \"withCredentials\" only exists on XMLHTTPRequest2 objects.\r\n\t\r\n\t\t\tif (!(\"withCredentials\" in xhr)) {\r\n\r\n\t\t\t\t// Just found that no XMLHttpRequest2 available.\r\n\t\t\t\t// Check if XDomainRequest is available.\r\n\t\t\t\t// This only exists in IE, and is IE's way of making CORS requests.\r\n\r\n\t\t\t\tif (typeof XDomainRequest != \"undefined\") {\r\n\r\n\t\t\t\t\t// Note that here we're not setting request headers on the XDomainRequest\r\n\t\t\t\t\t// object. This is because this object doesn't let you do that:\r\n\t\t\t\t\t// http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\r\n\t\t\t\t\t// This means that for IE8 and IE9, CORS logging requests do not carry request ids.\r\n\r\n\t\t\t\t\tvar xdr = new XDomainRequest();\r\n\t\t\t\t\txdr.open('POST', ajaxUrl);\r\n\t\t\t\t\treturn xdr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// At this point, we're going with XMLHttpRequest, whether it is CORS capable or not.\r\n\t\t\t// If it is not CORS capable, at least will handle the non-CORS requests.\r\n\r\n\t\t\txhr.open('POST', ajaxUrl);\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.setRequestHeader('JSNLog-RequestId', JL.requestId);\r\n\r\n\t\t\treturn xhr;\r\n\t\t}\r\n\r\n constructor(appenderName: string)\r\n {\r\n super(appenderName, AjaxAppender.prototype.sendLogItemsAjax);\r\n }\r\n }\r\n // ---------------------\r\n\r\n export class ConsoleAppender extends Appender implements JSNLogConsoleAppender\r\n {\r\n\r\n private clog(logEntry: string)\r\n {\r\n console.log(logEntry);\r\n }\r\n\r\n private cerror(logEntry: string)\r\n {\r\n if (console.error)\r\n {\r\n console.error(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n private cwarn(logEntry: string)\r\n {\r\n if (console.warn)\r\n {\r\n console.warn(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n private cinfo(logEntry: string)\r\n {\r\n if (console.info)\r\n {\r\n console.info(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n // IE11 has a console.debug function. But its console doesn't have \r\n // the option to show/hide debug messages (the same way Chrome and FF do),\r\n // even though it does have such buttons for Error, Warn, Info.\r\n //\r\n // For now, this means that debug messages can not be hidden on IE.\r\n // Live with this, seeing that it works fine on FF and Chrome, which\r\n // will be much more popular with developers.\r\n private cdebug(logEntry: string)\r\n {\r\n if (console.debug)\r\n {\r\n console.debug(logEntry);\r\n } else\r\n {\r\n this.cinfo(logEntry);\r\n }\r\n }\r\n\r\n public sendLogItemsConsole(logItems: LogItem[]): void\r\n {\r\n try\r\n {\r\n if (!console) { return; }\r\n\r\n var i;\r\n for (i = 0; i < logItems.length; ++i)\r\n {\r\n var li = logItems[i];\r\n var msg = li.n + \": \" + li.m;\r\n\r\n // Only log the timestamp if we're on the server\r\n // (window is undefined). On the browser, the user\r\n // sees the log entry probably immediately, so in that case\r\n // the timestamp is clutter.\r\n if (typeof window === 'undefined')\r\n {\r\n msg = new Date(li.t) + \" | \" + msg;\r\n }\r\n\r\n if (li.l <= JL.getDebugLevel())\r\n {\r\n this.cdebug(msg);\r\n } else if (li.l <= JL.getInfoLevel())\r\n {\r\n this.cinfo(msg);\r\n } else if (li.l <= JL.getWarnLevel())\r\n {\r\n this.cwarn(msg);\r\n } else\r\n {\r\n this.cerror(msg);\r\n }\r\n }\r\n } catch (e)\r\n {\r\n }\r\n }\r\n\r\n constructor(appenderName: string)\r\n {\r\n super(appenderName, ConsoleAppender.prototype.sendLogItemsConsole);\r\n }\r\n }\r\n\r\n // --------------------\r\n\r\n export class Logger implements JSNLogLogger, JSNLogFilterOptions\r\n {\r\n public appenders: Appender[];\r\n\r\n // Array of strings with regular expressions. Used to stop duplicate messages.\r\n // If a message matches a regex\r\n // that has been matched before, that message will not be sent.\r\n public onceOnly: string[];\r\n\r\n public level: number;\r\n public userAgentRegex: string;\r\n public ipRegex: string;\r\n public disallow: string;\r\n\r\n // Used to remember which regexes in onceOnly have been successfully \r\n // matched against a message. Index into this array is same as index\r\n // in onceOnly of the corresponding regex.\r\n // When a regex has never been matched, the corresponding entry in this\r\n // array is undefined, which is falsey.\r\n private seenRegexes: boolean[];\r\n\r\n constructor(public loggerName: string)\r\n {\r\n // Create seenRexes, otherwise this logger will use the seenRexes\r\n // of its parent via the prototype chain.\r\n this.seenRegexes = [];\r\n }\r\n\r\n public setOptions(options: JSNLogLoggerOptions): JSNLogLogger\r\n {\r\n copyProperty(\"level\", options, this);\r\n copyProperty(\"userAgentRegex\", options, this);\r\n copyProperty(\"disallow\", options, this);\r\n copyProperty(\"ipRegex\", options, this);\r\n copyProperty(\"appenders\", options, this);\r\n copyProperty(\"onceOnly\", options, this);\r\n\r\n // Reset seenRegexes, in case onceOnly has been changed.\r\n this.seenRegexes = [];\r\n\r\n return this;\r\n }\r\n\r\n // Turns an exception into an object that can be sent to the server.\r\n private buildExceptionObject(e: any): any\r\n {\r\n var excObject: any = {};\r\n\r\n if (e.stack) { excObject.stack = e.stack; } else { excObject.e = e; }\r\n if (e.message) { excObject.message = e.message; }\r\n if (e.name) { excObject.name = e.name; }\r\n if (e.data) { excObject.data = e.data; }\r\n if (e.inner) { excObject.inner = this.buildExceptionObject(e.inner); }\r\n\r\n return excObject;\r\n }\r\n\r\n // Logs a log item.\r\n // Parameter e contains an exception (or null or undefined).\r\n //\r\n // Reason that processing exceptions is done at this low level is that\r\n // 1) no need to spend the cpu cycles if the logger is switched off\r\n // 2) fatalException takes both a logObject and an exception, and the logObject\r\n // may be a function that should only be executed if the logger is switched on.\r\n //\r\n // If an exception is passed in, the contents of logObject is attached to the exception\r\n // object in a new property logData.\r\n // The resulting exception object is than worked into a message to the server.\r\n //\r\n // If there is no exception, logObject itself is worked into the message to the server.\r\n public log(level: number, logObject: any, e?: any): JSNLogLogger\r\n {\r\n var i: number = 0;\r\n var compositeMessage: StringifiedLogObject;\r\n var excObject: any;\r\n\r\n // If we can't find any appenders, do nothing\r\n if (!this.appenders) { return this; }\r\n\r\n if (((level >= this.level)) && allow(this))\r\n {\r\n if (e) \r\n {\r\n excObject = this.buildExceptionObject(e);\r\n excObject.logData = stringifyLogObjectFunction(logObject);\r\n }\r\n else\r\n {\r\n excObject = logObject;\r\n }\r\n\r\n compositeMessage = stringifyLogObject(excObject);\r\n\r\n if (allowMessage(this, compositeMessage.finalString))\r\n {\r\n\r\n // See whether message is a duplicate\r\n\r\n if (this.onceOnly)\r\n {\r\n i = this.onceOnly.length - 1;\r\n while (i >= 0)\r\n {\r\n if (new RegExp(this.onceOnly[i]).test(compositeMessage.finalString))\r\n {\r\n if (this.seenRegexes[i])\r\n {\r\n return this;\r\n }\r\n\r\n this.seenRegexes[i] = true;\r\n }\r\n\r\n i--;\r\n }\r\n }\r\n\r\n // Pass message to all appenders\r\n\r\n // Note that these appenders could be Winston transports\r\n // https://github.com/flatiron/winston\r\n //\r\n // These transports do not take the logger name as a parameter.\r\n // So add it to the meta information, so even Winston transports will\r\n // store this info.\r\n\r\n compositeMessage.meta = compositeMessage.meta || {};\r\n compositeMessage.meta.loggerName = this.loggerName;\r\n\r\n i = this.appenders.length - 1;\r\n while (i >= 0)\r\n {\r\n this.appenders[i].log(\r\n levelToString(level), compositeMessage.msg, compositeMessage.meta, function () { },\r\n level, compositeMessage.finalString, this.loggerName);\r\n i--;\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public trace(logObject: any): JSNLogLogger { return this.log(getTraceLevel(), logObject); }\r\n public debug(logObject: any): JSNLogLogger { return this.log(getDebugLevel(), logObject); }\r\n public info(logObject: any): JSNLogLogger { return this.log(getInfoLevel(), logObject); }\r\n public warn(logObject: any): JSNLogLogger { return this.log(getWarnLevel(), logObject); }\r\n public error(logObject: any): JSNLogLogger { return this.log(getErrorLevel(), logObject); }\r\n public fatal(logObject: any): JSNLogLogger { return this.log(getFatalLevel(), logObject); }\r\n public fatalException(logObject: any, e: any): JSNLogLogger { return this.log(getFatalLevel(), logObject, e); }\r\n }\r\n\r\n export function createAjaxAppender(appenderName: string): JSNLogAjaxAppender\r\n {\r\n return new AjaxAppender(appenderName);\r\n }\r\n\r\n export function createConsoleAppender(appenderName: string): JSNLogConsoleAppender\r\n {\r\n return new ConsoleAppender(appenderName);\r\n }\r\n\r\n // -----------------------\r\n // In the browser, the default appender is the AjaxAppender.\r\n // Under nodejs (where there is no \"window\"), use the ConsoleAppender instead.\r\n\r\n var defaultAppender: Appender = new AjaxAppender(\"\");\r\n if (typeof window === 'undefined')\r\n {\r\n defaultAppender = new ConsoleAppender(\"\");\r\n }\r\n\r\n // Create root logger\r\n //\r\n // Note that this is the parent of all other loggers.\r\n // Logger \"x\" will be stored at\r\n // JL.__.x\r\n // Logger \"x.y\" at\r\n // JL.__.x.y\r\n export var __ = new JL.Logger(\"\");\r\n JL.__.setOptions(\r\n {\r\n level: JL.getDebugLevel(),\r\n appenders: [defaultAppender]\r\n });\r\n}\r\n \r\n// Support CommonJS module format \r\n\r\ndeclare var exports: any;\r\nif (typeof exports !== 'undefined')\r\n{\r\n exports.JL = JL;\r\n}\r\n\r\n// Support AMD module format\r\n\r\nvar define: any;\r\nif (typeof define == 'function' && define.amd)\r\n{\r\n define('jsnlog', [], function () {\r\n return JL;\r\n });\r\n}\r\n\r\n// If the __jsnlog_configure global function has been\r\n// created, call it now. This allows you to create a global function\r\n// setting logger options etc. inline in the page before jsnlog.js\r\n// has been loaded.\r\n\r\nif (typeof __jsnlog_configure == 'function') { __jsnlog_configure(JL); }\r\n\r\n\r\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n ft: {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'ENGINEERINGCRS':\n case 'ENGCRS':\n case 'FITTED_CS':\n case 'LOCAL_DATUM':\n case 'DATUM':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\n\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n } else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n } else {\n if (typeof wkt.PROJECTION === 'object') {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n } else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.AXIS) {\n var axisOrder = '';\n for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n axisOrder += 'n';\n } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n axisOrder += 's';\n } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n axisOrder += 'e';\n } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n axisOrder += 'w';\n }\n }\n if (axisOrder.length === 2) {\n axisOrder += 'u';\n }\n if (axisOrder.length === 3) {\n wkt.axis = axisOrder;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = wkt.UNIT.convert;\n }\n }\n }\n var geogcs = wkt.GEOGCS;\n if (wkt.type === 'GEOGCS') {\n geogcs = wkt;\n }\n if (geogcs) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (geogcs.DATUM) {\n wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n } else {\n wkt.datumCode = geogcs.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = 'rnb72';\n }\n if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n wkt.ellps = 'intl';\n }\n\n wkt.a = geogcs.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n }\n\n if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n wkt.datum_params = geogcs.DATUM.TOWGS84;\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = 'osgb36';\n }\n if (~wkt.datumCode.indexOf('osni_1952')) {\n wkt.datumCode = 'osni52';\n }\n if (~wkt.datumCode.indexOf('tm65')\n || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n wkt.datumCode = 'ire65';\n }\n if (wkt.datumCode === 'ch1903+') {\n wkt.datumCode = 'ch1903';\n }\n if (~wkt.datumCode.indexOf('israel')) {\n wkt.datumCode = 'isr93';\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return input * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n ['false_easting', 'False_Easting'],\n ['false_easting', 'False easting'],\n ['false-easting', 'Easting at false origin'],\n ['false_northing', 'False_Northing'],\n ['false_northing', 'False northing'],\n ['false_northing', 'Northing at false origin'],\n ['central_meridian', 'Central_Meridian'],\n ['central_meridian', 'Longitude of natural origin'],\n ['central_meridian', 'Longitude of false origin'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['latitude_of_origin', 'Latitude of natural origin'],\n ['latitude_of_origin', 'Latitude of false origin'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_Of_Center'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longitude_of_center', 'Longitude_of_center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['azimuth', 'Azimuth'],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n};\n\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\n\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\n\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\n\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\n\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\n\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n if (header.nSubgrids > 1) {\n console.log('Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored');\n }\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback(srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrid = grid.grid.subgrids[0];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break;\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (!hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n}","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.34\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.34',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 350;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n VIERA = 'Viera',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (!_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (!_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","export default {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\";\n},\"useData\":true}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"SITNA:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"chunks/\" + chunkId + \".sitna.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkSITNA\"] = self[\"webpackChunkSITNA\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import TC from '../TC';\r\nimport Consts from '../TC/Consts';\r\nimport Cfg from '../TC/Cfg';\r\nimport Util from '../TC/Util';\r\nimport BasicMap from '../TC/Map';\r\nimport Search from '../TC/control/Search';\r\nimport filter from '../TC/filter';\r\nTC.Map = BasicMap;\r\nTC.filter = filter;\r\nTC.control = TC.control || {};\r\nTC.control.Search = Search;\r\n\r\n/**\r\n * Opciones de maquetación de mapa (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef SITNA.LayoutOptions\r\n * @property {string} [config] - URL de un archivo de configuración del mapa.\r\n * @property {string} [i18n] - URL de la carpeta donde se encuentran los archivos de textos para internacionalización (Ver \r\n * la documentación de [soporte multiidioma](tutorial-layout_cfg.html#soporte-multiidioma) de las maquetaciones).\r\n * @property {string} [markup] - URL de un documento con el HTML a incrustar en el mapa.\r\n * Necesario para especificar la distribución de controles y elementos de interfaz de usuario.\r\n * @property {string} [script] - URL de un documento JavaScript. Útil para añadir\r\n * lógica a los elementos de interfaz de usuario que se añaden con la maquetación.\r\n * @property {string} [style] - URL de una hoja de estilos para los elementos de interfaz de usuario que se añaden con la maquetación.\r\n * @see SITNA.MapOptions\r\n * @see layout_cfg\r\n * @example [Ver en vivo](../examples/cfg.LayoutOptions.html) {@lang html}\r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Objeto principal de la API, instancia un mapa dentro de un elemento del DOM. Nótese que la inicialización del mapa es asíncrona, por tanto cualquier código\r\n * que haga uso de este objeto debería estar dentro de una función de callback pasada como parámetro al método [loaded]{@link SITNA.Map#loaded}.\r\n *\r\n * Las opciones de configuración del mapa son una combinación de las opciones de configuración global (definidas en {@link SITNA.Cfg},\r\n * las opciones definidas por la [maquetación]{@tutorial layout_cfg} que utilicemos, y las opciones pasadas como parámetro al\r\n * constructor. Estas opciones están ordenadas de menor a mayor prevalencia, de modo que por ejemplo una opción pasada como parámetro del constructor\r\n * siempre sobreescribirá una opción de la configuración global.\r\n * @class Map\r\n * @memberof SITNA\r\n * @param {HTMLElement|string} div Elemento del DOM en el que crear el mapa o valor de atributo id de dicho elemento.\r\n * @param {SITNA.MapOptions} [options] Objeto de opciones de configuración del mapa. Sus propiedades sobreescriben las del objeto de configuración global {@link SITNA.Cfg}.\r\n * @see SITNA.Cfg\r\n * @see layout_cfg\r\n * @example [Ver en vivo](../examples/Map.1.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.2.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.3.html) {@lang html}\r\n *
    \r\n * \r\n */\r\n\r\nconst Map = function (div, options) {\r\n const self = this;\r\n\r\n if (Cfg.controls.search) {\r\n // Por defecto en SITNA todas las búsquedas están habilitadas\r\n Cfg.controls.search.allowedSearchTypes = Util.extend(Cfg.controls.search.allowedSearchTypes, {\r\n urban: {},\r\n street: {},\r\n number: {},\r\n cadastral: {}\r\n });\r\n\r\n if (options && options.controls && options.controls.search) {\r\n const keys = Object.keys(options.controls.search);\r\n\r\n const searchCfg = Util.extend(options.controls.search, { allowedSearchTypes: {} });\r\n\r\n keys.forEach(function (key) {\r\n if (typeof options.controls.search[key] === \"boolean\" || Util.isPlainObject(options.controls.search[key])) {\r\n if (options.controls.search[key]) {\r\n\r\n switch (true) {\r\n case key === \"placeName\":\r\n searchCfg.allowedSearchTypes[Consts.searchType.PLACENAME] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n break;\r\n case key === \"placeNameMunicipality\":\r\n searchCfg.allowedSearchTypes[Consts.searchType.PLACENAMEMUNICIPALITY] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n break;\r\n case key === \"postalAddress\":\r\n searchCfg.allowedSearchTypes[Consts.searchType.NUMBER] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n break;\r\n case key === \"cadastralParcel\":\r\n searchCfg.allowedSearchTypes[Consts.searchType.CADASTRAL] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n break;\r\n case key === \"town\":\r\n searchCfg.allowedSearchTypes[Consts.searchType.URBAN] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n break;\r\n default:\r\n searchCfg.allowedSearchTypes[key] = Util.isPlainObject(options.controls.search[key]) ? options.controls.search[key] : {};\r\n }\r\n }\r\n\r\n delete searchCfg[key];\r\n }\r\n });\r\n\r\n options.controls.search = searchCfg;\r\n }\r\n }\r\n\r\n if (Cfg.controls.threeD) {\r\n if (Cfg.views && Cfg.views.threeD) {\r\n Cfg.views.threeD.controls = [\r\n \"search\",\r\n \"toc\",\r\n \"attribution\",\r\n \"basemapSelector\",\r\n \"workLayerManager\",\r\n \"layerCatalog\",\r\n \"featureInfo\",\r\n \"fullScreen\",\r\n \"loadingIndicator\",\r\n \"navBarHome\",\r\n \"navBar\",\r\n \"overviewMap\",\r\n \"legend\",\r\n \"threeD\",\r\n \"coordinates\",\r\n \"geolocation\",\r\n \"resultsPanel\",\r\n \"share\"\r\n ];\r\n }\r\n }\r\n\r\n TC.Map.call(self, div, options);\r\n\r\n self.search = null;\r\n\r\n self.loaded(async function () {\r\n const search = self._searchControl = new TC.control.Search();\r\n search.register(self);\r\n\r\n // Si existe el control featureInfo lo activamos.\r\n if (!self.activeControl) {\r\n const fi = self.getControlsByClass('TC.control.FeatureInfo')[0];\r\n if (fi) {\r\n fi.activate();\r\n }\r\n }\r\n\r\n self._searchLayer = await search.getLayer();\r\n });\r\n};\r\n\r\nTC.inherit(Map, TC.Map);\r\n\r\n(function () {\r\n const mapProto = Map.prototype;\r\n\r\n/**\r\n * Añade una capa al mapa. Si se le pasa un objeto del Tipo {@link LayerOptions} como parámetro `layer`\r\n * y tiene definida la propiedad `url`, establece por defecto\r\n * el tipo de capa a [SITNA.Consts.layerType.KML]{@link SITNA.Consts} si la URL acaba en _**.kml**_.\r\n * \r\n * El tipo de la capa no puede ser [SITNA.Consts.layerType.WFS]{@link SITNA.Consts}.\r\n * @method addLayer\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string|SITNA.layer.LayerOptions|SITNA.layer.Layer} layer - Identificador de capa, objeto de opciones de capa o\r\n * instancia de la clase {@link SITNA.layer.Layer}.\r\n * @param {function} [callback] Función a la que se llama tras ser añadida la capa. \r\n * @returns {Promise} Objeto de capa añadido.\r\n * \r\n * La clase del objeto dependerá del valor de la propiedad `type` del parámetro `layer`. Si es \r\n * [SITNA.Consts.layerType.VECTOR]{@link SITNA.Consts}, [SITNA.Consts.layerType.WFS]{@link SITNA.Consts} \r\n * o [SITNA.Consts.layerType.KML]{@link SITNA.Consts}, el objeto será de la clase {@link SITNA.layer.Vector}.\r\n * En cualquier otro caso será de la clase {@link SITNA.layer.Raster}.\r\n * @example [Ver en vivo](../examples/Map.addLayer.1.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.addLayer.2.html) {@lang html}\r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Obtiene una capa del mapa.\r\n * @method getLayer\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @param {string|SITNA.layer.Layer} layer Identificador de capa u objeto de capa.\r\n * @returns {SITNA.layer.Layer|null} Objeto de capa si esta existe y está en el mapa, \r\n * o `null` si el mapa no tiene ninguna capa que cumpla el requisito del parámetro.\r\n */\r\n\r\n/**\r\n * Hace visible una capa como mapa de fondo. Esta capa debe existir previamente en la lista de mapas de fondo del mapa.\r\n * @method setBaseLayer\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @param {string|LayerOptions} layer - Identificador de capa u objeto de opciones de capa. \r\n * @param {function} [callback] Función al que se llama tras ser establecida la capa como mapa de fondo.\r\n * @example [Ver en vivo](../examples/Map.setBaseLayer.1.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.setBaseLayer.2.html) {@lang html} \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Añade un marcador (un punto asociado a un icono) al mapa.\r\n * @method addMarker\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {(number[]|SITNA.feature.Marker)} coordinatesOrMarker - Coordenadas x e y del punto en las unidades del sistema \r\n * de referencia del mapa, u objeto de marcador.\r\n * @param {(MarkerOptions|SITNA.Map~AddMarkerCallback)} [options] Objeto de opciones de marcador o función a la que se llama tras añadir el marcador.\r\n * @param {SITNA.Map~AddMarkerCallback} [callback] Función a la que se llama tras añadir el marcador.\r\n * @returns {Promise} Marcador añadido.\r\n * @example [Ver en vivo](../examples/Map.addMarker.1.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.addMarker.2.html) {@lang html} \r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.addMarker.3.html) {@lang html}\r\n *
    \r\n * \r\n * @example [Ver en vivo](../examples/Map.addMarker.4.html) {@lang html} \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Centra y escala el mapa a la extensión que ocupan todos sus marcadores.\r\n * @method zoomToMarkers\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @param {object} [options] Objeto de opciones de zoom.\r\n * @param {number} [options.pointBoundsRadius=30] Radio en metros del área alrededor del marcador que se respetará al hacer zoom. Por defecto es 30.\r\n * @param {number} [options.extentMargin=0.2] Tamaño del margen que se aplicará a la extensión total de todas los marcadores.\r\n * El valor es la relación de crecimiento en ancho y alto entre la extensión resultante y la original. Por ejemplo, el valor por defecto 0,2 indica un crecimiento del 20% de la extensión, 10% por cada lado.\r\n * @example [Ver en vivo](../examples/Map.zoomToMarkers.html) {@lang html} \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Elimina una colección de entidades geográficas del mapa.\r\n * @method removeFeatures\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @param {SITNA.feature.Feature[]} features - Lista de entidades geográficas a eliminar.\r\n * @example [Ver en vivo](../examples/Map.removeFeatures.html) {@lang html}\r\n *
    \r\n * \r\n * \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Añade una función de callback que se ejecutará cuando el mapa, sus controles y todas sus capas se hayan cargado.\r\n * @method loaded\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {function} callback Función a la que se llama tras la carga del mapa.\r\n * @returns {Promise} Promesa que se resuelve cuando el mapa se carga.\r\n * @example {@lang javascript}\r\n * // Notificar cuando se haya cargado el mapa (mediante callback)\r\n * map.loaded(() => { \r\n * console.log(\"Código del mapa y de sus controles cargado, datos cargados.\");\r\n * });\r\n * @example {@lang javascript}\r\n * // Notificar cuando se haya cargado el mapa (mediante promesa)\r\n * map.loaded().then(() => {\r\n * console.log(\"Código del mapa y de sus controles cargado, datos cargados.\");\r\n * });\r\n */\r\n\r\n/**\r\n * Devuelve la extensión actual del mapa.\r\n * @method getExtent\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @returns {number[]} Array con los valores de coordenadas [xmin, ymin, xmax, ymax] en el CRS del mapa.\r\n * @example [Ver en vivo](../examples/Map.getExtent-setExtent.html) {@lang html}\r\n *
    \r\n *

    \r\n *

    \r\n * \r\n * \r\n * \r\n *

    \r\n *

    \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Establece una extensión al mapa. Hay que tener en cuenta que puede haber factores que impidan que el ajuste sea\r\n * exacto, como los niveles de zoom discretos de la capa base o que la relación de aspecto del visor no coincida con \r\n * la de la extensión especificada. En cualquier caso, se garantiza que todos los puntos dentro de la extensión \r\n * especificada se mostrarán en la nueva extensión.\r\n * @method setExtent\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {number[]} extent - Array de valores de coordenadas [xmin, ymin, xmax, ymax] especificadas en el CRS del mapa.\r\n * @param {object} [options] - Opciones del método.\r\n * @param {boolean} [options.animate=true] - Si tiene un valor verdadero, la nueva extensión no se establecerá \r\n * instantáneamente, sino que se alcanzará dicha extensión tras una animación de desplazamiento y zoom.\r\n * @param {SITNA.Map~SetExtentCallback} [callback] - Función a la que se llama tras el establecimiento \r\n * de la nueva extensión. Se le pasa como parámetro la extensión real que ha alcanzado el mapa.\r\n * @returns {Promise} Nueva extensión del mapa.\r\n * @example [Ver en vivo](../examples/Map.getExtent-setExtent.html) {@lang html}\r\n *
    \r\n *

    \r\n *

    \r\n * \r\n * \r\n * \r\n *

    \r\n *

    \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Devuelve la extensión máxima del mapa.\r\n * @method getMaxExtent\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @returns {number[]|null} Array con los valores de coordenadas [xmin, ymin, xmax, ymax] en el CRS actual del mapa, o `null` \r\n * si el mapa no tiene establecida extensión máxima.\r\n * @example {@lang javascript}\r\n * const maxExtent = map.getMapExtent();\r\n * if (maxExtent === null) {\r\n * alert(\"El mapa no tiene extensión máxima definida\");\r\n * }\r\n * else {\r\n * alert(`El mapa se extiende de ${maxExtent[0]} a ${maxExtent[2]} en el eje x, de ${maxExtent[1]} a ${maxExtent[3]} en el eje y`);\r\n * }\r\n */\r\n\r\n/**\r\n * Devuelve el [código EPSG](https://spatialreference.org/ref/epsg/) del sistema de referencia de coordenadas del mapa.\r\n * @method getCrs\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @returns {string} Código EPSG del sistema de referencias del mapa.\r\n * @example [Ver en vivo](../examples/Map.getCrs-setCrs.html) {@lang html}\r\n *
    \r\n *

    CRS actual:

    \r\n *

    \r\n * \r\n *

    \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Establece un sistema de referencia de coordenadas al mapa especificando su [código EPSG](https://spatialreference.org/ref/epsg/).\r\n * @method setCrs\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} crs - Código EPSG del sistema de referencia de coordenadas.\r\n * @param {SITNA.Map~SetCrsCallback} [callback] Función a la que se llama tras la resolución del cambio de CRS.\r\n * @returns {Promise} Código EPSG del nuevo sistema de referencia de coordenadas.\r\n * @example [Ver en vivo](../examples/Map.getCrs-setCrs.html) {@lang html}\r\n *
    \r\n *

    CRS actual:

    \r\n *

    \r\n * \r\n *

    \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Exporta el mapa a una imagen PNG. Para poder utilizar este método hay que establecer la opción `crossOrigin` al instanciar {@link SITNA.Map}. \r\n * @method exportImage\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @return {string} Imagen en un [data URI](https://developer.mozilla.org/es/docs/Web/HTTP/Basics_of_HTTP/Datos_URIs).\r\n * @see [Atributos de configuración CORS]{@link https://developer.mozilla.org/es/docs/Web/HTML/Atributos_de_configuracion_CORS}\r\n * @example [Ver en vivo](../examples/Map.exportImage.html) {@lang html} \r\n *
    \r\n * \r\n *
    \r\n *
    \r\n * \r\n */\r\n\r\n/**\r\n * Objeto proporcionado en las respuestas a peticiones de datos de búsqueda ({@link SITNA.Map#getMunicipalities}, etc.).\r\n * @typedef SearchResultItem\r\n * @memberof SITNA\r\n * @see SITNA.Map#getCommonwealths\r\n * @see SITNA.Map#getCouncils\r\n * @see SITNA.Map#getMunicipalities\r\n * @see SITNA.Map#getUrbanAreas\r\n * @property {string} id - Identificador del elemento a buscar.\r\n * @property {string} label - Texto descriptivo del elemento a buscar que se mostrará en la lista de sugerencias de resultados de búsqueda.\r\n */\r\n\r\n/**\r\n * Función de callback que gestiona las respuestas a peticiones de datos de búsqueda ({@link SITNA.Map#getMunicipalities}, etc.).\r\n * @callback SITNA.Map~SearchDataCallback\r\n * @see SITNA.Map#getCommonwealths\r\n * @see SITNA.Map#getCouncils\r\n * @see SITNA.Map#getMunicipalities\r\n * @see SITNA.Map#getUrbanAreas\r\n * @param {SITNA.SearchResultItem[]} data - Lista de elementos de búsqueda. Cada elemento tiene un identificador y un texto descriptivo.\r\n */\r\n\r\n/**\r\n * Función de callback que gestiona las respuestas a búsquedas por identfificador ({@link SITNA.Map#searchMunicipality}, etc.).\r\n * @callback SITNA.Map~SearchByIdCallback\r\n * @param {?string} queryId - Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n */\r\n\r\n/**\r\n * Función de callback que se lanza tras llamar al método {@link SITNA.Map#addMarker}.\r\n * @callback SITNA.Map~AddMarkerCallback\r\n * @see SITNA.Map#addMarker\r\n * @param {SITNA.feature.Marker} marker - Marcador añadido.\r\n */\r\n\r\n/**\r\n * Función de callback que se ejecuta tras completarse la ejecución del método {@link SITNA.Map#setCrs}.\r\n * @callback SITNA.Map~SetCrsCallback\r\n * @see SITNA.Map#setCrs\r\n * @param {string} newCrs - Código EPSG del nuevo CRS del mapa.\r\n */\r\n\r\n/**\r\n * Función de callback que se ejecuta tras completarse la ejecución del método {@link SITNA.Map#setExtent}.\r\n * @callback SITNA.Map~SetExtentCallback\r\n * @see SITNA.Map#setExtent\r\n * @param {number[]} newExtent - Nueva extensión del mapa. Hay que tener en cuenta que no tiene por qué ser la misma que la que se\r\n * pasó al método {@link SITNA.Map#setExtent}, bien por limitaciones en los niveles de zoom del mapa, bien por tener este una \r\n * relación de aspecto distinta a la extensión especificada.\r\n */\r\n\r\n/*\r\n Obtiene los valores ({@link SITNA.SearchResultItem}) de las entidades geográficas disponibles en la capa de IDENA que corresponda según el parámetro searchType. \r\n Puede consultar también online el [ejemplo 1](../examples/Map.getQueryableData.html). \r\n \r\n method getQueryableData\r\n async\r\n param {string|SITNA.consts.MapSearchType} searchType Fuente de datos del cual obtendremos los valores disponibles para buscar posteriormente.\r\n param {function} [callback] Función a la que se llama tras obtener los datos. \r\n example\r\n
    \r\n
    \r\n Municipios\r\n \r\n
    \r\n
    \r\n Concejos\r\n \r\n
    \r\n
    \r\n Casco Urbano\r\n \r\n
    \r\n
    \r\n Manconmunidad\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n*/\r\n\r\n mapProto.getQueryableData = async function (searchType, callback) {\r\n const self = this;\r\n const queryable = self._searchControl.availableSearchTypes[searchType];\r\n\r\n if (queryable.queryableData) {\r\n if (callback) {\r\n callback(queryable.queryableData);\r\n }\r\n } else {\r\n const params = {\r\n request: 'GetFeature',\r\n service: 'WFS',\r\n typename: queryable.featurePrefix + ':' + queryable.featureType,\r\n version: queryable.version,\r\n propertyname: (!(queryable.dataIdProperty instanceof Array) ? [queryable.dataIdProperty] : queryable.dataIdProperty)\r\n .concat(!(queryable.outputProperties instanceof Array) ? [queryable.outputProperties] : queryable.outputProperties).join(','),\r\n outputformat: Consts.format.JSON\r\n };\r\n\r\n const url = queryable.url + '?' + Util.getParamString(params);\r\n const response = await TC.ajax({\r\n url: url,\r\n responseType: Consts.mimeType.JSON\r\n });\r\n const responseData = response.data;\r\n queryable.queryableData = [];\r\n\r\n if (responseData.features) {\r\n const features = responseData.features;\r\n\r\n for (var i = 0, ii = features.length; i < ii; i++) {\r\n const f = features[i];\r\n const data = {};\r\n\r\n data.id = [];\r\n if (!Array.isArray(queryable.dataIdProperty)) {\r\n queryable.dataIdProperty = [queryable.dataIdProperty];\r\n }\r\n\r\n for (var ip = 0, iip = queryable.dataIdProperty.length; ip < iip; ip++) {\r\n const prop = queryable.dataIdProperty[ip];\r\n if (Object.prototype.hasOwnProperty.call(f.properties, prop)) {\r\n data.id.push(f.properties[prop]);\r\n }\r\n }\r\n\r\n data.id = queryable.idPropertiesIdentifier ? data.id.join(queryable.idPropertiesIdentifier) : data.id.join('');\r\n\r\n data.label = [];\r\n if (!Array.isArray(queryable.outputProperties)) {\r\n queryable.outputProperties = [queryable.outputProperties];\r\n }\r\n\r\n for (var lbl = 0, lbll = queryable.outputProperties.length; lbl < lbll; lbl++) {\r\n const prop = queryable.outputProperties[lbl];\r\n if (Object.prototype.hasOwnProperty.call(f.properties, prop)) {\r\n data.label.push(f.properties[prop]);\r\n }\r\n }\r\n\r\n const add = (Array.isArray(data.label) ? data.label.join('') : data.label).trim().length > 0;\r\n data.label = queryable.outputFormatLabel ? Util.formatString(queryable.outputFormatLabel, ...data.label) : data.label.join('-');\r\n\r\n if (add) {\r\n queryable.queryableData.push(data);\r\n }\r\n }\r\n }\r\n\r\n queryable.queryableData = queryable.queryableData.sort(function (a, b) {\r\n const search = self._searchControl;\r\n if (queryable.idPropertiesIdentifier ? a.id.indexOf(queryable.idPropertiesIdentifier) === -1 : false) {\r\n if (search.removePunctuation(a.label) < search.removePunctuation(b.label)) {\r\n return -1;\r\n }\r\n if (search.removePunctuation(a.label) > search.removePunctuation(b.label)) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n if (search.removePunctuation(a.label.split(' ')[0]) < search.removePunctuation(b.label.split(' ')[0])) {\r\n return -1;\r\n }\r\n if (search.removePunctuation(a.label.split(' ')[0]) > search.removePunctuation(b.label.split(' ')[0])) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n queryable.queryableData = queryable.queryableData.filter(function (value, index, arr) {\r\n if (index < 1) {\r\n return true;\r\n }\r\n return value.id !== arr[index - 1].id && value.label !== arr[index - 1].label;\r\n });\r\n\r\n if (callback) {\r\n callback(queryable.queryableData);\r\n }\r\n }\r\n\r\n return queryable.queryableData;\r\n };\r\n\r\n/**\r\n * Obtiene los valores ({@link SITNA.SearchResultItem}) de los municipios disponibles en la capa de IDENA.\r\n * @method getMunicipalities\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async \r\n * @param {SITNA.Map~SearchDataCallback} callback - Función a la que se llama tras obtener los datos.\r\n * @returns {Promise} Lista de municipios.\r\n * @example [Ver en vivo](../examples/Map.getMunicipalities.html) {@lang html} \r\n *
    \r\n *
    \r\n * Municipios\r\n * \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.getMunicipalities = function (callback) {\r\n return this.getQueryableData(Consts.mapSearchType.MUNICIPALITY, callback);\r\n };\r\n/**\r\n * Obtiene los valores ({@link SITNA.SearchResultItem}) de los cascos urbanos disponibles en la capa de IDENA.\r\n * @method getUrbanAreas\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async \r\n * @param {SITNA.Map~SearchDataCallback} callback - Función a la que se llama tras obtener los datos. \r\n * @returns {Promise} Lista de cascos urbanos.\r\n * @example [Ver en vivo](../examples/Map.getUrbanAreas.html) {@lang html}\r\n *
    \r\n *
    \r\n * Cascos urbanos\r\n * \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.getUrbanAreas = function (callback) {\r\n return this.getQueryableData(Consts.mapSearchType.URBAN, callback);\r\n };\r\n\r\n/**\r\n * Obtiene los valores ({@link SITNA.SearchResultItem}) de las mancomunidades de residuos disponibles en la capa de IDENA. \r\n * @method getCommonwealths\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async \r\n * @param {SITNA.Map~SearchDataCallback} callback - Función a la que se llama tras obtener los datos. \r\n * @returns {Promise} Lista de mancomunidades.\r\n * @example [Ver en vivo](../examples/Map.getCommonwealths.html) {@lang html}\r\n *
    \r\n *
    \r\n * Mancomunidades de residuos\r\n * \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.getCommonwealths = function (callback) {\r\n return this.getQueryableData(Consts.mapSearchType.COMMONWEALTH, callback);\r\n };\r\n\r\n/**\r\n * Obtiene los valores ({@link SITNA.SearchResultItem}) de los concejos disponibles en la capa de IDENA. \r\n * @method getCouncils\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async \r\n * @param {SITNA.Map~SearchDataCallback} callback - Función a la que se llama tras obtener los datos. \r\n * @returns {Promise} Lista de concejos.\r\n * @example [Ver en vivo](../examples/Map.getCouncils.html) {@lang html}\r\n *
    \r\n *
    \r\n * Concejos\r\n * \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.getCouncils = function (callback) {\r\n return this.getQueryableData(Consts.mapSearchType.COUNCIL, callback);\r\n };\r\n\r\n/**\r\n * Busca la mancomunidad de residuos y pinta en el mapa la entidad geográfica encontrada que corresponda al identificador indicado.\r\n * @method searchCommonwealth\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} id Identificador de la entidad geográfica a pintar.\r\n * @param {SITNA.Map~SearchByIdCallback} [callback] Función a la que se llama tras aplicar el filtro. \r\n * @returns {Promise} Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n * @example [Ver en vivo](../examples/Map.searchCommonwealth.html) {@lang html}\r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.searchCommonwealth = function (id, callback) {\r\n return this.searchTyped(Consts.mapSearchType.COMMONWEALTH, id, callback);\r\n };\r\n\r\n/**\r\n * Busca el concejo que corresponda con el identificador pasado como parámetro y pinta la entidad geográfica encontrada en el mapa.\r\n * @method searchCouncil\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} id - Identificador de la entidad geográfica a pintar.\r\n * @param {SITNA.Map~SearchByIdCallback} [callback] - Función a la que se llama tras aplicar el filtro. \r\n * @returns {Promise} Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n * @example [Ver en vivo](../examples/Map.searchCouncil.html) {@lang html} \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.searchCouncil = function (id, callback) {\r\n return this.searchTyped(Consts.mapSearchType.COUNCIL, id, callback);\r\n };\r\n\r\n/**\r\n * Busca el casco urbano que corresponda con el identificador pasado como parámetro y pinta la entidad geográfica encontrada en el mapa.\r\n * @method searchUrbanArea\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} id Identificador de la entidad geográfica a pintar.\r\n * @param {SITNA.Map~SearchByIdCallback} [callback] Función a la que se llama tras aplicar el filtro. \r\n * @returns {Promise} Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n * @example [Ver en vivo](../examples/Map.searchUrbanArea.html) {@lang html}\r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.searchUrbanArea = function (id, callback) {\r\n return this.searchTyped(Consts.mapSearchType.URBAN, id, callback);\r\n };\r\n\r\n/**\r\n * Busca el municipio que corresponda con el identificador pasado como parámetro y pinta la entidad geográfica encontrada en el mapa.\r\n * @method searchMunicipality\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} id Identificador de la entidad geográfica a pintar.\r\n * @param {SITNA.Map~SearchByIdCallback} [callback] Función a la que se llama tras aplicar el filtro. \r\n * @returns {Promise} Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n * @example [Ver en vivo](../examples/Map.searchMunicipality.html) {@lang html}\r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.searchMunicipality = function (id, callback) {\r\n return this.searchTyped(Consts.mapSearchType.MUNICIPALITY, id, callback);\r\n };\r\n\r\n // Busca en la configuración que corresponda según el parámetro searchType el identificador pasado como parámetro\r\n mapProto.searchTyped = function (searchType, id, callback) {\r\n const self = this;\r\n const idQuery = TC.getUID();\r\n const search = self._searchControl;\r\n const query = search.availableSearchTypes[searchType];\r\n\r\n if (Array.isArray(id) && query.goToIdFormat) {\r\n id = Util.formatString(query.goToIdFormat, ...id);\r\n }\r\n\r\n search.data = search.data || [];\r\n search.data.push({\r\n dataLayer: query.featureType,\r\n dataRole: searchType,\r\n id: id,\r\n label: \"\",\r\n text: \"\"\r\n });\r\n\r\n self.removeSearch();\r\n\r\n if (search.availableSearchTypes[searchType] && !search.getSearchTypeByRole(searchType)) {\r\n\r\n if (!search.availableSearchTypes[searchType].goTo) {\r\n search.availableSearchTypes[searchType].goTo = function (id) {\r\n const getProperties = function (id) {\r\n\r\n let filter = [];\r\n if (query.idPropertiesIdentifier) {\r\n id = id.split(query.idPropertiesIdentifier);\r\n }\r\n if (!Array.isArray(id)) {\r\n id = [id];\r\n }\r\n for (var i = 0, ii = query.dataIdProperty.length; i < ii; i++) {\r\n filter.push(\r\n new TC.filter.equalTo(query.dataIdProperty[i], id[i].trim())\r\n );\r\n }\r\n\r\n if (filter.length > 1) {\r\n filter = new TC.filter.and(filter);\r\n } else {\r\n filter = filter[0];\r\n }\r\n\r\n return filter;\r\n };\r\n\r\n return {\r\n params: {\r\n type: Consts.layerType.WFS,\r\n url: this.url,\r\n version: this.version,\r\n geometryName: this.geometryName,\r\n featurePrefix: this.featurePrefix,\r\n featureType: this.featureType,\r\n properties: getProperties(id),\r\n outputFormat: this.outputFormat,\r\n styles: this.styles\r\n }\r\n };\r\n }.bind(query);\r\n }\r\n\r\n search.addAllowedSearchType(searchType, search.availableSearchTypes[searchType], search);\r\n }\r\n\r\n return new Promise(function (resolve, _reject) {\r\n self.one(Consts.event.SEARCHQUERYEMPTY, function (_e) {\r\n self.toast(search.EMPTY_RESULTS_LABEL, {\r\n type: Consts.msgType.INFO, duration: 5000\r\n });\r\n\r\n if (callback) {\r\n callback(null);\r\n }\r\n resolve(null);\r\n });\r\n\r\n self.one(Consts.event.FEATURESADD, function (e) {\r\n if (e.layer === self._searchLayer && e.layer.features && e.layer.features.length > 0) {\r\n self.zoomToFeatures(e.layer.features);\r\n }\r\n\r\n self.search = {\r\n layer: e.layer, type: searchType\r\n };\r\n\r\n const value = e.layer.id !== idQuery ? e.layer.id : idQuery;\r\n if (callback) {\r\n callback(value);\r\n }\r\n resolve(value);\r\n });\r\n\r\n search.goToResult(id, searchType);\r\n });\r\n };\r\n\r\n/**\r\n * Busca y pinta en el mapa la entidad geográfica encontrada correspondiente al identificador establecido.\r\n * @method searchFeature\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @async\r\n * @param {string} layer - Nombre de la capa de IDENA en la cual buscar.\r\n * @param {string} field - Campo de la capa de IDENA en el cual buscar.\r\n * @param {string} id - Identificador de la entidad geográfica por el cual filtrar.\r\n * @param {SITNA.Map~SearchByIdCallback} [callback] - Función a la que se llama tras aplicar el filtro. \r\n * @returns {Promise} Identificador de consulta realizada. Su valor es `null` si no hay resultado.\r\n * @example [Ver en vivo](../examples/Map.searchFeature.html) {@lang html}\r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.searchFeature = function (layer, field, id, callback) {\r\n const self = this;\r\n const idQuery = TC.getUID();\r\n let prefix = self._searchControl.featurePrefix;\r\n\r\n self.removeSearch();\r\n\r\n layer = (layer || '').trim();\r\n field = (field || '').trim();\r\n id = (id || '').trim();\r\n if (layer.length === 0 || field.length === 0 || id.length === 0) {\r\n self.toast(self._searchControl.EMPTY_RESULTS_LABEL, {\r\n type: Consts.msgType.INFO, duration: 5000\r\n });\r\n\r\n if (callback) {\r\n callback(null);\r\n }\r\n } else {\r\n\r\n if (layer.indexOf(':') > -1) {\r\n prefix = layer.split(':')[0];\r\n layer = layer.split(':')[1];\r\n }\r\n\r\n const transformFilter = function (properties) {\r\n if (Array.isArray(properties)) {\r\n const filters = properties.map(function (elm) {\r\n if (Object.prototype.hasOwnProperty.call(elm, \"type\")) {\r\n switch (true) {\r\n case elm.type === Consts.comparison.EQUAL_TO: {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n }\r\n } else {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n });\r\n\r\n if (filters.length > 1) {\r\n return TC.filter.and.apply(null, filters);\r\n }\r\n return filters[0];\r\n }\r\n };\r\n\r\n const layerOptions = {\r\n id: idQuery,\r\n type: Consts.layerType.WFS,\r\n url: self._searchControl.url,\r\n version: self._searchControl.version,\r\n stealth: true,\r\n geometryName: 'the_geom',\r\n featurePrefix: prefix,\r\n featureType: layer,\r\n maxFeatures: 1,\r\n properties: transformFilter([{\r\n name: field, value: id, type: Consts.comparison.EQUAL_TO\r\n }]),\r\n outputFormat: Consts.format.JSON\r\n };\r\n\r\n let tcSrchGenericLayer;\r\n self.addLayer(layerOptions).then(function (layer) {\r\n tcSrchGenericLayer = layer;\r\n\r\n self.search = {\r\n layer: layer, type: Consts.mapSearchType.GENERIC\r\n };\r\n });\r\n\r\n self.on(Consts.event.FEATURESADD, function (e) {\r\n const layer = e.layer;\r\n if (layer === tcSrchGenericLayer && layer.features && layer.features.length > 0) {\r\n\r\n for (var i = 0, ii = layer.features.length; i < ii; i++) {\r\n if (layer.features[i].showsPopup != self._searchControl.queryableFeatures) {\r\n layer.features[i].showsPopup = self._searchControl.queryableFeatures;\r\n }\r\n }\r\n\r\n self.zoomToFeatures(layer.features);\r\n }\r\n });\r\n\r\n return new Promise(function (resolve, _reject) {\r\n self.on(Consts.event.LAYERUPDATE, function (e) {\r\n const layer = e.layer;\r\n const newData = e.newData;\r\n if (layer === tcSrchGenericLayer && newData && newData.features && newData.features.length === 0)\r\n self.toast(self._searchControl.EMPTY_RESULTS_LABEL, {\r\n type: Consts.msgType.INFO, duration: 5000\r\n });\r\n\r\n const value = layer === tcSrchGenericLayer && newData && newData.features && newData.features.length === 0 ? null : idQuery;\r\n if (callback) {\r\n callback(value);\r\n }\r\n resolve(value);\r\n });\r\n });\r\n }\r\n };\r\n\r\n/**\r\n * Elimina del mapa la entidad geográfica encontrada en la última búsqueda. \r\n * @method removeSearch\r\n * @memberof SITNA.Map\r\n * @instance\r\n * @param {function} [callback] Función a la que se llama tras eliminar la entidad geográfica. \r\n * @example [Ver en vivo](../examples/Map.removeSearch.html) {@lang html} \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n *
    \r\n * \r\n */\r\n mapProto.removeSearch = function (callback) {\r\n const self = this;\r\n if (self.search) {\r\n const searchType = self._searchControl.availableSearchTypes[self.search.type];\r\n if (!searchType || !Object.prototype.hasOwnProperty.call(searchType, 'goTo')) {\r\n self.removeLayer(self.search.layer).then(function () {\r\n self.search = null;\r\n });\r\n } else {\r\n for (var i = 0, ii = self.search.layer.features.length; i < ii; i++) {\r\n self.search.layer.removeFeature(self.search.layer.features[i]);\r\n }\r\n self.search = null;\r\n }\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n\r\n})();\r\n\r\nexport default Map;","import Component from './Component';\r\nimport Consts from '../../TC/Consts';\r\nimport Util from '../../TC/Util';\r\n\r\nconst elementName = \"sitna-tab\";\r\n\r\nclass Tab extends Component {\r\n #text;\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.#text = document.createTextNode('');\r\n self.shadowRoot.appendChild(self.#text);\r\n self.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.onClick();\r\n }, { passive: true });\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.text = self.text;\r\n self.toggleAttribute('selected', self.selected);\r\n self.#onSelectedChange();\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['text', 'selected', 'disabled', 'deselectable'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'selected') {\r\n self.#onSelectedChange();\r\n }\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n get text() {\r\n return this.getAttribute('text') || '';\r\n }\r\n\r\n set text(value) {\r\n const self = this;\r\n self.shadowRoot.removeChild(self.#text);\r\n self.#text = document.createTextNode(value);\r\n self.shadowRoot.appendChild(self.#text);\r\n if (value) {\r\n self.setAttribute('text', value);\r\n }\r\n else {\r\n self.removeAttribute('text');\r\n }\r\n }\r\n\r\n get group() {\r\n return this.getAttribute('group');\r\n }\r\n\r\n get target() {\r\n const targetId = this.getAttribute('for');\r\n if (targetId) {\r\n return document.getElementById(targetId);\r\n }\r\n return null;\r\n }\r\n\r\n get selected() {\r\n return this.hasAttribute('selected');\r\n }\r\n\r\n set selected(value) {\r\n this.toggleAttribute('selected', !!value);\r\n }\r\n\r\n #onSelectedChange() {\r\n const self = this;\r\n const siblings = self.siblings;\r\n const allTabs = siblings.concat(self);\r\n if (self.selected) {\r\n siblings.forEach(s => {\r\n s.removeAttribute('selected');\r\n });\r\n }\r\n const tabSelected = allTabs.some(s => s.selected);\r\n allTabs.forEach(t => {\r\n t.toggleAttribute('no-selection', !tabSelected);\r\n const target = t.target;\r\n if (target) {\r\n target.classList.toggle(Consts.classes.HIDDEN, !t.selected);\r\n }\r\n });\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n this.toggleAttribute('disabled', !!value);\r\n }\r\n\r\n get deselectable() {\r\n return this.hasAttribute('deselectable');\r\n }\r\n\r\n set deselectable(value) {\r\n this.toggleAttribute('deselectable', !!value);\r\n }\r\n\r\n get siblings() {\r\n const self = this;\r\n const allTabs = Array.from(document.querySelectorAll(`${self.elementName}[group=\"${self.group}\"]`));\r\n return allTabs.filter(t => t !== self);\r\n }\r\n\r\n onClick() {\r\n const self = this;\r\n if (!self.disabled) {\r\n const condition = self.deselectable ? !self.selected : true;\r\n self.toggleAttribute('selected', condition);\r\n if (Util.isFunction(self.callback)) {\r\n self.callback();\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (!customElements.get(elementName)) {\r\n Component.preloadStyle(elementName);\r\n customElements.define(elementName, Tab);\r\n}\r\nexport default Tab;","/**\r\n * @overview API SITNA: API JavaScript para la visualización de datos georreferenciados en aplicaciones web.\r\n * @version 4.1.0\r\n * @copyright 2019 Gobierno de Navarra\r\n * @license BSD-2-Clause\r\n * @author Fernando Lacunza \r\n */\r\n\r\nimport TC from './TC';\r\nimport Util from './TC/Util';\r\nimport Consts from './TC/Consts';\r\nimport i18n from './TC/i18n';\r\nimport SitnaMap from './SITNA/Map';\r\nimport Feature from './SITNA/feature/Feature';\r\nimport Point from './SITNA/feature/Point';\r\nimport MultiPoint from './SITNA/feature/MultiPoint';\r\nimport Marker from './SITNA/feature/Marker';\r\nimport MultiMarker from './SITNA/feature/MultiMarker';\r\nimport Polyline from './SITNA/feature/Polyline';\r\nimport MultiPolyline from './SITNA/feature/MultiPolyline';\r\nimport Polygon from './SITNA/feature/Polygon';\r\nimport MultiPolygon from './SITNA/feature/MultiPolygon';\r\nimport Circle from './SITNA/feature/Circle';\r\nimport Layer from './SITNA/layer/Layer';\r\nimport Raster from './SITNA/layer/Raster';\r\nimport Vector from './SITNA/layer/Vector';\r\nimport './TC/tool/ExcelExport';\r\nimport './TC/tool/Proxification';\r\nimport Map from './TC/Map';\r\nimport Cfg from './TC/Cfg';\r\nimport wrap from './TC/wrap';\r\nimport { JL } from 'jsnlog';\r\n// Importamos para precargar estilos y evitar FOUC\r\nimport './SITNA/ui/Button';\r\nimport './SITNA/ui/Toggle';\r\nimport './SITNA/ui/Tab';\r\n\r\nTC.isDebug = false;\r\n\r\nconst layer = {};\r\nlayer.Layer = Layer;\r\nlayer.Raster = Raster;\r\nlayer.Vector = Vector;\r\n\r\nconst feature = {};\r\nfeature.Feature = Feature;\r\nfeature.Point = Point;\r\nfeature.MultiPoint = MultiPoint;\r\nfeature.Marker = Marker;\r\nfeature.MultiMarker = MultiMarker;\r\nfeature.Polyline = Polyline;\r\nfeature.MultiPolyline = MultiPolyline;\r\nfeature.Polygon = Polygon;\r\nfeature.MultiPolygon = MultiPolygon;\r\nfeature.Circle = Circle;\r\n\r\nconst tool = TC.tool || {};\r\n\r\nTC.feature = feature;\r\nTC.layer = layer;\r\nTC.tool = tool;\r\nTC.Util = Util;\r\nTC.Consts = Consts;\r\nTC.i18n = i18n;\r\nTC.Cfg = Cfg;\r\nTC.Map = Map;\r\nTC.wrap = wrap;\r\nglobalThis.TC = TC;\r\n//window.JL = JL;\r\n\r\nTC.version = '4.1.0 [13/6/2023, 20:44:23]';\r\n\r\nTC.loadCSS(TC.apiLocation + 'css/sitna.css');\r\n\r\n// Precargamos el CRS por defecto\r\nTC.loadProjDef({ crs: 'EPSG:25830', name: 'ETRS89 / UTM zone 30N', def: '+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs' });\r\n// Precargamos los CRS de IDENA que tienen orden de ejes neu\r\nTC.loadProjDef({ crs: 'EPSG:4258', name: 'ETRS89', def: '+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +axis=neu' });\r\nTC.loadProjDef({ crs: 'EPSG:3040', name: 'ETRS89 / UTM zone 28N (N-E)', def: '+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +axis=neu' });\r\nTC.loadProjDef({ crs: 'EPSG:3041', name: 'ETRS89 / UTM zone 29N (N-E)', def: '+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +axis=neu' });\r\nTC.loadProjDef({ crs: 'EPSG:3042', name: 'ETRS89 / UTM zone 30N (N-E)', def: '+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +axis=neu' });\r\nTC.loadProjDef({ crs: 'EPSG:3043', name: 'ETRS89 / UTM zone 31N (N-E)', def: '+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +axis=neu' });\r\nTC.loadProjDef({ crs: 'EPSG:4230', name: 'ED50', def: '+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs +axis=neu' });\r\n//resto de CRS nacionales\r\nTC.loadProjDef({ crs: 'EPSG:25828', name: 'ETRS89 / UTM zone 28N', def: '+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs' });\r\nTC.loadProjDef({ crs: 'EPSG:25829', name: 'ETRS89 / UTM zone 29N', def: '+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs' });\r\nTC.loadProjDef({ crs: 'EPSG:25831', name: 'ETRS89 / UTM zone 31N', def: '+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs' });\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\r\n // Completamos los datos de versión\r\n var mapLibrary = 'Unknown library';\r\n if (window.ol) {\r\n mapLibrary = 'OpenLayers ' + ol.VERSION;\r\n }\r\n TC.version = TC.version + ' (' + mapLibrary + '; @ ' + TC.apiLocation + ')';\r\n\r\n TC.browser = TC.Util.getBrowser();\r\n\r\n fetch(TC.apiLocation + 'config/browser-versions.json')\r\n .then(r => {\r\n if (r.ok) {\r\n return r.json();\r\n }\r\n return Promise.resolve([]);\r\n })\r\n .then(browserVersions => {\r\n TC._isSupported = true;\r\n TC.Cfg.acceptedBrowserVersions = browserVersions;\r\n\r\n const match = browserVersions.find(item => item.name.toLowerCase() === TC.browser.name.toLowerCase());\r\n\r\n // GLS: 14/02/2019 Añadimos gestión para que no muestre tostada ni envíe correos en caso de que el navegador sea uno expirado\r\n if (match && match.expired) {\r\n TC.Cfg.loggingErrorsEnabled = false;\r\n } else {\r\n if (match && !isNaN(match.version)) {\r\n if (TC.browser.version < match.version) {\r\n TC._isSupported = false;\r\n }\r\n }\r\n\r\n if (TC.Cfg.oldBrowserAlert && !TC._isSupported) {\r\n TC.Cfg.loggingErrorsEnabled = false;\r\n // Timeout para evitar pedir el mapa antes de que se instancie\r\n setTimeout(() => {\r\n const mapObj = TC.Map.get(document.querySelector('.' + Consts.classes.MAP));\r\n\r\n TC.i18n.loadResources(!TC.i18n[mapObj.options.locale], TC.apiLocation + 'TC/resources/', mapObj.options.locale).then(function () {\r\n TC.error(TC.Util.getLocaleString(mapObj.options.locale, 'outdatedBrowser'), Consts.msgErrorMode.TOAST);\r\n });\r\n }, 500);\r\n }\r\n }\r\n });\r\n\r\n\r\n if (/ip(ad|hone|od)/i.test(navigator.userAgent)) {\r\n // En iOS, el primer click es un mouseover, por eso usamos touchstart como sustituto.\r\n Consts.event.CLICK = \"touchstart\";\r\n }\r\n\r\n // Gestión de errores\r\n if (TC.Cfg.loggingErrorsEnabled) {\r\n\r\n JL.setOptions({\r\n defaultAjaxUrl: Consts.url.ERROR_LOGGER.includes('//localhost') ? '' : Consts.url.ERROR_LOGGER\r\n });\r\n\r\n const onError = (function () {\r\n var errorCount = 0;\r\n\r\n var mapObj;\r\n\r\n return function (e) {\r\n mapObj = mapObj || TC.Map.get(document.querySelector('.' + Consts.classes.MAP));\r\n\r\n if (!mapObj) {\r\n return false;\r\n }\r\n\r\n var errorMsg, url = \"\", lineNumber = -1, column = -1, errorObj, apiError;\r\n\r\n if (e.type === \"unhandledrejection\") {\r\n errorMsg = e.reason ?\r\n e.reason instanceof XMLDocument ? e.reason.firstElementChild.outerHTML : e.reason.message\r\n : \"\";\r\n if (e.reason && e.reason.stack) {\r\n apiError = e.reason.stack.indexOf(TC.apiLocation) >= 0;\r\n } else {\r\n apiError = true;\r\n }\r\n errorObj = e.reason;\r\n } else {\r\n errorMsg = e.message;\r\n url = e.filename;\r\n lineNumber = e.lineno;\r\n column = e.colno;\r\n errorObj = e.error;\r\n apiError = url.indexOf(TC.apiLocation) >= 0;\r\n }\r\n\r\n // Si notifyApplicationErrors === false solo capturamos los errores de la API\r\n if ((TC.Cfg.notifyApplicationErrors || apiError) && errorCount < TC.Cfg.maxErrorCount && TC.Cfg.loggingErrorsEnabled) {\r\n // Send object with all data to server side log, using severity fatal, \r\n // from logger \"onerrorLogger\"\r\n\r\n const previousMapState = mapObj.getPreviousMapState();\r\n\r\n // 13/03/2020 añadimos el estado de los controles a la URL que se enviará por correo\r\n const endProcess = function (appUrl) {\r\n var msg = apiError ? Consts.text.API_ERROR : Consts.text.APP_ERROR;\r\n JL(\"onerrorLogger\").fatalException({\r\n \"msg\": msg,\r\n \"errorMsg\": errorMsg,\r\n \"url\": url,\r\n \"lineNumber\": lineNumber,\r\n \"column\": column,\r\n \"appUrl\": appUrl,\r\n \"apiVersion\": TC.version,\r\n \"prevState\": previousMapState,\r\n \"userAgent\": navigator.userAgent\r\n }, errorObj);\r\n errorCount++;\r\n };\r\n\r\n let appUrl = location.href;\r\n const controlStates = mapObj.exportControlStates() || [];\r\n if (controlStates.length > 0) {\r\n var currentUrl = location.href;\r\n const hashPosition = currentUrl.indexOf('#');\r\n if (hashPosition > 0) {\r\n currentUrl = currentUrl.substring(0, hashPosition);\r\n }\r\n\r\n mapObj.getMapState({ extraStates: { ctl: controlStates } }).then(state => {\r\n appUrl = currentUrl.concat(\"#\", state);\r\n endProcess(appUrl);\r\n });\r\n }\r\n else {\r\n endProcess(appUrl);\r\n }\r\n\r\n if (!TC.isDebug) {\r\n var DEFAULT_CONTACT_EMAIL = \"webmaster@itracasa.es\";\r\n TC.i18n.loadResources(!TC.i18n[mapObj.options.locale], TC.apiLocation + 'TC/resources/', mapObj.options.locale)\r\n .then(function () {\r\n TC.error(TC.Util.getLocaleString(mapObj.options.locale, \"genericError\") + (mapObj.options.contactEmail || DEFAULT_CONTACT_EMAIL), { type: Consts.msgType.ERROR });\r\n });\r\n }\r\n }\r\n // Tell browser to run its own error handler as well \r\n return false;\r\n };\r\n })();\r\n\r\n window.addEventListener('error', onError, false);\r\n window.addEventListener('unhandledrejection', onError, false);\r\n }\r\n});\r\n\r\n/**\r\n * Espacio de nombres donde se encuentran las clases de la API SITNA.\r\n * @namespace SITNA\r\n */\r\n\r\nCfg.layout = TC.apiLocation + 'layout/responsive';\r\n\r\nexport { Cfg, SitnaMap as Map, Consts, feature, layer, tool };\r\n\r\n"],"names":["map","webpackAsyncContext","req","webpackAsyncContextResolve","then","__webpack_require__","Promise","resolve","o","e","Error","code","keys","Object","id","module","exports","Circle","Feature","constructor","coords","options","super","_defineProperty","Consts","self","this","wrap","isNative","createCircle","parseGeometry","static","geometry","geom","prototype","hasOwnProperty","call","center","radius","circunferencePoint","Array","isArray","isNaN","setCoordinates","getCenter","getGeometry","getRadius","circonferencePoint","getCoordinates","Math","hypot","getCoords","setCoords","getCoordsArray","toPolygon","numPoints","points","dAngle","PI","angle","i","cos","sin","Polygon","assign","_hasSelectedStyle","WeakMap","_selected","_visibilityState","_classPrivateFieldInitSpec","writable","value","condition","_classPrivateFieldGet","_classPrivateFieldSet","toggleSelectedStyle","_legend","getLegend","firstCoord","length","olFeatureId","TC","parent","feature","_wrap","getId","_folders","folders","setData","getData","opts","Util","setId","data","undefined","showsPopup","showPopup","autoPopup","layer","selected","select","getPath","result","group","setVisibility","visible","popup","getControlsByClass","filter","currentFeature","p","isVisible","hide","setFeatureVisibility","getVisibilityState","getBounds","setStyle","style","newStyle","_self$layer","_self$layer$styles","_self$layer2","_self$layer2$map$opti","_Cfg$styles","mergedStyles","getStyle","styles","STYLETYPE","unshift","Cfg","_self$layer3","_self$layer3$map","_self$layer4","_self$layer4$map","_self$layer5","_self$layer5$map","sourceCrs","geometryCrs","on3DView","view3D","crs","destCrs","getCRS","toNumberCoords","arr","forEach","elm","idx","console","log","parseFloat","setGeometry","isPoint","flattenFn","val","reduce","reduceFn","acc","push","concat","removeZ","_coords$","c","key","attributes","attr","find","name","unsetData","splice","indexOf","clearData","getInfo","_self$layer6","locale","template","getTemplate","replace","match","p1","html","hSlots","openText","titleText","formatValue","recursiveFn","item","getType","tttt","type","coordinates","headers","join","title","clone","nativeClone","cloneFeature","slice","async","_self$layer7","control","Control","popups","len","caller","addControl","getContainerElement","renderPromise","setDragged","trigger","fitToView","contentDiv","querySelectorAll","img","addEventListener","_self$layer8","panel","resultsPanelOptions","content","titles","main","max","controlContainer","ControlContainer","position","POSITION","RIGHT","resultPanel","div","document","createElement","appendChild","resultsPanel","ctrl","close","chart","menuDiv","innerHTML","open","getInfoContainer","ResizeObserver","entries","entry","target","hx","_e","offsetWidth","scrollWidth","childNodes","textContent","passive","observe","infoDiv","onViewChange","off","on","default","singleFeature","optionsControl","Popup","ResultsPanel","showResultsPanel","defaultInfoContainer","infoControl","features","f","selectedFeatures","selectionOptions","selection","unselect","isSelected","toGML","version","srsName","i18n","Marker","Point","createMarker","MultiMarker","MultiPoint","createMultiMarker","TypeError","createMultiPoint","MultiPolygon","createMultiPolygon","pointArray","apply","polygon","ring","startPoint","endPoint","flat","getLength","getArea","MultiPolyline","createMultiPolyline","appendPolyline","polyline","Polyline","createPoint","cluster","createPolygon","createPolyline","Blob","String","raw","isWebWorkerEnabled","window","srcToURL","src","anchor","href","origin","protocol","hostname","urlParts","exec","split","port","location","_CAPABILITIES_STORE_KEY_PREFIX","_onlineCapabilitiesPromise","_parseCapabilities","WeakSet","_capabilitiesError","_storeCapabilities","Layer","_classPrivateMethodInitSpec","defaultFormat","isBase","format","hideTree","hideTitle","proxificationTool","Proxification","getVisibility","getBaseLayer","getOpacity","opacity","silent","setOpacity","isCompatible","_crs","isValidFromNames","isRaster","isVisibleByScale","isVisibleByName","_name","getTree","findNode","uid","children","r","setNodeVisibility","tree","node","isRoot","setState","n","state","visibilityState","every","getNodeVisibility","opt_tree","getResolutions","setProjection","getBySSL_","url","clip","stroke","getCapabilitiesOnline","reject","getGetCapabilitiesUrl","fetch","retryAttempts","_classPrivateMethodGet","_parseCapabilities2","responseText","capabilities","error","_capabilitiesError2","catch","_onlineCapabilitesPromise","dataError","localforage","getGetMapUrl","cleanOgcUrl","documentElement","serviceException","getElementsByTagName","WmtsParser","WmsParser","read","Contents","layerCollection","curXmlLy","firstChild","capLy","ly","Identifier","j","TileMatrixSetLink","capLink","matrixId","TileMatrixSet","xmlLink","xmlLinks","k","kk","curLink","querySelector","TileMatrixSetLimits","from","limit","TileMatrix","MinTileRow","parseInt","MinTileCol","MaxTileRow","MaxTileCol","_storeCapabilities2","workerUrl","URL","createObjectURL","wwBlob","worker","Worker","onmessage","terminate","postMessage","text","reason","capKey","setItem","getCapabilitiesPromise","err","warn","loaded","IDLE","LOADING","wfsUrlPromises","describeLayerPromises","capabilitiesPromises","Map","formatDescriptions","_getLayerNamePosition","treeNode","counter","count","_extendLayerNameOptions","aggregate","lazy","_combineArray","source","add","rem","a","sa","_isNameInArray","names","looseComparison","some","compareNames","reprojectExtent","extent","targetCrs","topLeft","bottomLeft","topRight","bottomRight","min","_capabilitiesPromise","_wfsLayer","_disgregatedLayerNames","_capabilitiesNodes","_newParams","_createWmsLayer","_createWmtsLayer","_aggregateLayerNames","_aggregateLayerNodeNames","_disgregateLayerNames","_disgregateLayerName","_sortLayerNames","_getLayerNodeIndex","_sortTree","_isNameInPath","_get$events","_describeLayer","_getWfsLayer","Raster","arguments","transparent","params","layerNames","availableNames","sldBody","sld_body","parser","DOMParser","sldBodyToXml","parseFromString","message","namedLayerElm","ignorePrefixes","_promise","endCreateLayerFn","ollyr","setLayer","processedCapabilities","actualUrl","_createWmtsLayer2","onlineCapabilities","_createWmsLayer2","_createOLLayer","get","res","rej","onlinePromise","storagePromise","getCapabilitiesFromStorage","set","setWMTSUrl","getLimitedMatrixSet","layerId","matrixSetId","matrixSet","tileMatrixSet","layerNode","tileMatrixSetLink","ret","tileMatrixSetLimit","matrix","matrixIndex","getLayer","ln","_aggregateLayerNames2","newParams","LAYERS","TRANSPARENT","getParams","setParams","reset","oldParams","cql_filter","getText","ln2a","_disgregateLayerNames2","getDisgregatedLayerNames","setLayerNames","_sortLayerNames2","ln2r","ln2t","currentLayerNames","l","promises","addLayerNames","removeLayerNames","arrays","all","a1","a2","olLayer","getLayerNodeByName","getCompatibleMatrixSets","getCompatibleCRS","includeFallback","fallbackLayer","fbLayer","getFallbackLayer","normalized","prev","cur","getProjection","getSource","getCode","setMatrixSet","mustReproject","nameOrUid","getOgcScale","getResolution","getMetersPerUnit","currentScale","tileMatrix","getTileMatrix","getScaleDenominators","layers","getAllLayerNodes","toString","getName","isNodeVisibleByScale","scaleDenominators","getWMTSLayer","getPathLayerNames","getPathLayerNamesForNode","getRootLayerNode","capabilitiesNode","layerNodes","getLayerNodes","mustPushName","isVisibleByNode","isChildOrItself","potentialParent","potentialChild","child","ii","getLayerNodesByName","getNestedTree","getFullTree","fullTree","nested","rootNode","getTreeNode","forceAddition","isRootNode","rslt","Title","abstract","Abstract","metadata","MetadataURL","_isNameInPath2","isDefault","thumbnail","legend","inverseTree","_setNodeState","nState","_sortTree2","customLegend","parentFn","nodes","_getNames","getNodePath","layerName","ignorePrefix","_getPath","nodeName","getServiceType","getIdentifier","getChildrenLayers","lyr","n1","n2","lc","idx1","idx2","substr","setResolutions","resolutions","getExtent","mapCrs","mapCrsCode","getNodeBoundingBoxes","bboxes","hasOwnBBox","BoundingBox","crsBboxes","bbox","EX_GeographicBoundingBox","prevExtent","boundingBoxes","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","firstBbox","crsBbox","bboxObj","accExtent","curExtent","ext","mapCrsExtent","matrixSetNode","tms","WGS84BoundingBox","boundingBox","SupportedCRS","stringToNumberArray","str","v","LowerCorner","UpperCorner","info","md","formatDescription","searchSubLayers","lastPattern","lastMatches","re","RegExp","matches","ix","tcScore","tcPosition","normalizeLayerNode","trim","titleIx","index","abstractIx","abs","res2","elto","sort","b","titleA","titleB","serviceUrl","encoding","suffix","suffixIdx","SERVICE","VERSION","REQUEST","queryParams","getPreferredInfoFormat","infoFormats","getInfoFormats","getLegendGraphicImage","base64LegendSrc","btoa","xhr","XMLHttpRequest","dataEntries","chunks","env","setRequestHeader","responseType","onload","status","uInt8Array","Uint8Array","response","binaryString","fromCharCode","imageSrc","getResponseHeader","send","resultSrc","ignoreProxification","exportable","fetchImage","action","cacheHost","getAction","_img","cache","image","getImageLoad","setSRC","getImage","crossOrigin","setAttribute","_get$events2","tile","onerror","statusText","errorFn","z","x","y","_src","parts","wmtsOptions","level","method","param","values","toLowerCase","fetchImageAsBlob","contentType","blob","imageUrl","revokeObjectURL","layerDescription","_describeLayer2","owsType","owsURL","endsWith","typeName","_getWfsLayer2","getWFSURL","getDescribeFeatureTypeUrl","availableBaseLayers","baseLayer","stealth","firstOption","describeFeatureType","refresh","reloadSource","FORMAT","infoFormat","INFO_FORMAT","createWMSLayer","createWMTSLayer","_aggregateLayerNodeNames2","firstIdx","nodeNames","reverse","fail","_disgregateLayerName2","ancestorVisible","nodeVisible","hasEmptyChildren","idxa","idxb","_getLayerNodeIndex2","step","Name","$events","search","URLSearchParams","request","service","Layers","outputFormat","urlPromises","has","startsWith","JSON","parse","layerDescriptions","xmlDoc","featureType","Vector","featureNamespace","visibilityCache","getMergedLegendImage","images","offset","svgs","decodeURIComponent","widths","heights","width","height","offsetSvgs","encodeURIComponent","compareStyles","objTo","objFrom","distinct","fnCompare","value1","value2","mode","objFromValue","toStyle","_addFeatureInternal","_addFeaturesInternal","coordsOrMultiPointArray","_addFeaturesInternal2","import","extension","lastIndexOf","mimeType","getFormatFromMimeType","regexp","getFileName","_reject","createVectorLayer","Set","path","featureLegend","nodeLegend","commonPropertiesByLegendWatch","commonProperties","properties","property","commonPropertiesObj","displayName","distinctKeys","props","size","distinctKey","legendTitle","_self$styles","_self$styles2","_self$styles3","legendImages","_self$cluster$styles","point","geometryType","line","addPoint","coordsOrPoint","_addFeatureInternal2","addPoints","coordsOrPointArray","addMultiPoint","coordsOrMultiPoint","addMultiPoints","addMarker","coord","addMarkers","coordsOrMarkerArray","addMultiMarker","coordsOrMultiMarker","addMultiMarkers","coordsOrMultiMarkerArray","addPolyline","coordsOrPolyline","addPolylines","coordsOrPolylineArray","addMultiPolyline","coordsOrMultiPolyline","addMultiPolylines","coordsOrMultiPolylineArray","addPolygon","coordsOrPolygon","addPolygons","coordsOrPolygonArray","addMultiPolygon","coordsOrMultiPolygon","addMultiPolygons","coordsOrMultiPolygonArray","addCircle","geometryOrCircle","addCircles","geometryOrCircleArray","addFeature","addFeatures","removeFeature","getFeature","includes","getFeatureById","olFeat","clearFeatures","pu","Operations","DescribeFeatureType","callback","wwInit","WebWorkerDFT","DFTCollection","fetchXML","outerHTML","wwProcess","xml","arrPromises","vi","va","preffix","substring","temp","collection","_getStoredFeatureTypes","objReturned","errorText","found","_path","someHidden","everyHidden","setModifiable","modifiable","applyEdits","inserts","updates","deletes","sendTransaction","getFeaturesInCurrentExtent","tolerance","getFeaturesInExtent","oldCrs","feat","setStyles","exportState","lObj","precision","pow","isGeo","commonStyles","_self$styles4","_self$styles5","_self$styles6","_self$styles7","_self$styles8","_self$styles9","_self$styles10","fObj","layerStyle","marker","exportStyles","obj","featureOptions","addFn","className","one","getUrl","cachePromise","multipleFeatureFunction","coordsArray","constructorName","styleType","FeatureConstructor","nativeFeatures","externalStyles","showInfo","elementName","_button","_active","_setDataValue","Button","Component","shadowRoot","connectedCallback","variant","active","disabled","icon","iconText","observedAttributes","attributeChangedCallback","oldValue","newValue","hasAttribute","getAttribute","DEFAULT","varian","classList","remove","removeAttribute","ICON","MINIMAL","LINK","_setDataValue2","boolValue","toggleAttribute","toggle","ICONLEFT","CLOSE","DELETE","DOWNLOAD","DOWNLOAD_ALL","EDIT","SHARE","customElements","define","HTMLElement","attachShadow","link","_classStaticPrivateMethodGet","_getStylePath","elmName","globalThis","head","_checkbox","Toggle","checked","event","Event","bubbles","dispatchEvent","checkedIconText","uncheckedIconText","apiLocation","SITNA_BASE_URL","currentScript","capabilitiesWFS","tool","isDebug","alert","prompt","isFunction","confirm","accept","cancel","proxify","cfgProxy","proxy","prevent","cfgProxyExceptions","proxyExceptions","isSameOrigin","_showLoadFailedError","stack","mapObj","subject","body","getLocaleString","syncLoadJS","_sendRequest","callbackErrorFn","onreadystatechange","readyState","test","d","ah","reqResult","is404","script","insertBefore","loadJSInOrder","loadJS","addCrossOriginAttr","scriptEl","inOrder","notCrossOrigin","endFn","urls","toReduce","loadjs","curr","numRetries","detectIE","before","success","pathsNotFound","loadCSS","ajax","isGET","getParamString","paramArray","Date","now","fetchOptions","Headers","append","ok","responseData","json","msg","projectionDataCache","getProjectionData","projData","sync","fetchJSON","loadProjDef","urnPrefix","ogcHttpUrlPrefix","getDef","fromHTTPURIToURN","proj4","loadDef","def","epsgCode","urnCode","urnxCode","ogcHttpUrlCode","ogcHttpUriCode","axisUnawareDef","extend","axis","ol","proj","register","loadDataAndExecCallback","number_result","results","loadDefResponse","inherit","childCtor","parentCtor","create","_super","mix","targetCtor","mixins","uids","getUID","prefix","banlist","setUIDStart","currentValue","prefixes","urlString","touch","inputTypeColor","urlParser","browserFeatures","DocumentTouch","query","matchMedia","pluses","s","decoded","cookie","expires","days","t","setDate","getDate","toUTCString","domain","secure","decode","cookies","shift","Defaults","clusterRadii","imageRatio","acceptedBrowserVersions","utmCrs","geoCrs","initialExtent","maxExtent","baselayerExtent","pointBoundsRadius","extentMargin","mouseWheelZoom","attribution","oldBrowserAlert","notifyApplicationErrors","loggingErrorsEnabled","maxErrorCount","view","screenSize","pixelTolerance","maxResolutionError","toastDuration","averageTileSize","overviewMapLayer","baseLayers","defaultBaseLayer","workLayers","controls","loadingIndicator","navBar","scaleBar","scale","scaleSelector","overviewMap","basemapSelector","TOC","workLayerManager","layerCatalog","allowedSearchTypes","municipality","urban","street","number","cadastral","measure","streetView","click","printMap","featureInfo","persistentHighlights","featureTools","layout","fillColor","fillOpacity","strokeColor","strokeWidth","strokeOpacity","labelOutlineWidth","labelOutlineColor","labelOffset","fontColor","fontSize","classes","label","round","sqrt","zIndex","snapping","SPLIT_REGEX","EPSG","ERROR_LOGGER","MAP","POINT","MARKER","VISIBLE","HIDDEN","COLLAPSED","COLLAPSED_LEFT","COLLAPSED_RIGHT","CHECKED","DISABLED","ACTIVE","HIGHLIGHTED","LASTCHILD","DROP","IPAD_IOS7_FIX","INFO","WARNING","ERROR","THREED","TOAST","TOAST_CONTAINER","LEFT_PANEL","RIGHT_PANEL","SLIDE_PANEL","TOOLS_PANEL","LEGEND_PANEL","OVERVIEW_MAP_PANEL","PANEL_CONTENT","PANEL_TAB","FULL_SCREEN","msgType","msgErrorMode","CONSOLE","EMAIL","MAPLOAD","MAPREADY","MAPCHANGE","BEFORELAYERADD","LAYERADD","LAYERREMOVE","LAYERORDER","BEFORELAYERUPDATE","LAYERUPDATE","LAYERERROR","BEFOREBASELAYERCHANGE","BASELAYERCHANGE","BEFOREUPDATE","UPDATE","BEFOREZOOM","ZOOM","BEFOREUPDATEPARAMS","UPDATEPARAMS","VECTORUPDATE","FEATUREADD","BEFOREFEATURESADD","FEATURESADD","BEFOREFEATUREREMOVE","FEATUREREMOVE","FEATURESCLEAR","FEATURESIMPORT","FEATURESIMPORTERROR","FEATURESIMPORTPARTIAL","FEATURESIMPORTWARN","FILESAVE","BEFORETILELOAD","TILELOAD","TILELOADERROR","CONTROLADD","CONTROLACTIVATE","CONTROLDEACTIVATE","BEFORECONTROLRENDER","CONTROLRENDER","CONTROLHIGHLIGHT","CONTROLUNHIGHLIGHT","BEFORELAYOUTLOAD","LAYOUTLOAD","LAYERVISIBILITY","LAYEROPACITY","FEATURECLICK","NOFEATURECLICK","FEATUREOVER","FEATUREOUT","BEFOREFEATUREINFO","FEATUREINFO","NOFEATUREINFO","FEATUREINFOERROR","CLICK","MOUSEUP","MOUSEMOVE","MOUSELEAVE","STARTLOADING","STOPLOADING","EXTERNALSERVICEADDED","ZOOMTO","PROJECTIONCHANGE","VIEWCHANGE","CAMERACHANGE","TERRAINPROVIDERADD","TERRAINPROVIDERREMOVE","OVERVIEWBASELAYERCHANGE","POPUP","BEFOREAPPLYQUERY","RECENTFILEADD","IDENA_ORTHOPHOTO","IDENA_BASEMAP","IDENA_BASEMAP_GREY","IDENA_CADASTER","IDENA_CARTO","IDENA_ORTHOPHOTO2022","IDENA_ORTHOPHOTO2021","IDENA_ORTHOPHOTO2020","IDENA_ORTHOPHOTO2019","IDENA_ORTHOPHOTO2018","IDENA_ORTHOPHOTO2017","IDENA_ORTHOPHOTO2014","IDENA_ORTHOPHOTO2012","IDENA_PAMPLONA_ORTHOPHOTO2020","IDENA_PAMPLONA_CARTO","IDENA_DYNBASEMAP","IDENA_DYNBASEMAP_GREY","IDENA_DYNORTHOPHOTO","IDENA_DYNORTHOPHOTO2022","IDENA_DYNORTHOPHOTO2021","IDENA_DYNORTHOPHOTO2020","IDENA_DYNORTHOPHOTO2019","IDENA_DYNORTHOPHOTO2018","IDENA_DYNORTHOPHOTO2017","IDENA_DYNORTHOPHOTO2014","IDENA_DYNORTHOPHOTO2012","IDENA_PAMPLONA_DYNORTHOPHOTO2020","IDENA_PAMPLONA_DYNCARTO","IDENA_DYNCARTO","IDENA_BW_RELIEF","IDENA_BASEMAP_ORTHOPHOTO","IGN_ES_CARTO","IGN_ES_BASEMAP","IGN_ES_BASEMAP_GREY","IGN_ES_RELIEF","IGN_ES_ORTHOPHOTO","IGN_ES_LIDAR","IGN_ES_DYNCARTO","IGN_ES_DYNBASEMAP","IGN_ES_DYNBASEMAP_GREY","IGN_ES_DYNORTHOPHOTO","IGN_ES_DYNLIDAR","IGN_FR_BASEMAP","IGN_FR_RELIEF","IGN_FR_ORTHOPHOTO","IGN_FR_DYNBASEMAP","IGN_FR_DYNRELIEF","IGN_FR_DYNORTHOPHOTO","OSM","OPENTOPOMAP","CARTO_VOYAGER","CARTO_LIGHT","CARTO_DARK","MAPBOX_STREETS","MAPBOX_SATELLITE","BLANK","API_ERROR","APP_ERROR","layerType","WMS","WMTS","WFS","VECTOR","KML","GPX","GML","GEOJSON","GROUP","MULTIPOINT","POLYLINE","POLYGON","MULTIPOLYLINE","MULTIPOLYGON","CIRCLE","RECTANGLE","searchType","CADASTRAL","COORDINATES","MUNICIPALITY","COUNCIL","LOCALITY","STREET","NUMBER","URBAN","COMMONWEALTH","ROAD","ROADMILESTONE","PLACENAME","PLACENAMEMUNICIPALITY","mapSearchType","GENERIC","comparison","EQUAL_TO","NOT_EQUAL_TO","LESS_THAN","GREATER_THAN","LESS_THAN_EQUAL_TO","GREATER_THAN_EQUAL_TO","LIKE","logicalOperator","AND","OR","WMTSEncoding","KVP","RESTFUL","PNG","JPEG","KMZ","XML","GEOPACKAGE","SHAPEFILE","ZIP","GML2","GML3","GML32","TOPOJSON","WKT","WKB","WFSErrors","GETFEATURE_NOT_AVAILABLE","LAYERS_NOT_AVAILABLE","NO_LAYERS","NO_VALID_LAYERS","QUERY_NOT_AVAILABLE","MAX_NUM_FEATURES","GETCAPABILITIES","INDETERMINATE","NO_FEATURES","visibility","NOT_VISIBLE","NOT_VISIBLE_AT_RESOLUTION","HAS_VISIBLE","PRINTING","units","DEGREES","METERS","infoContainer","RESULTS_PANEL","DownloadError","MIMETYPE_NOT_SUPORTED","Handlebars","EventTarget","isActive","isDisabled","CLASS","getClassName","exportsState","ctlProto","show","display","unhighlight","render","_set1stRenderPromise","renderData","addUIEventListeners","loadTemplates","promise","_firstRender","dataObject","compiler","getRenderedHtml","templateId","templates","templatePromises","templateName","key2","processTemplates","activate","activeControl","previousActiveControl","deactivate","stopChain","nextControl","getDefaultControl","enable","dataset","tcMessage","containerControl","onControlEnable","disable","onControlDisable","highlight","isHighlighted","contains","addUIEventListener","selector","listener","isExclusive","texts","importState","_state","getDownloadDialog","_downloadDialog","getElevationTool","displayElevation","elevation","mapElevation","ctorName","toUpperCase","getNativeListener","evt","cbParameter","currentTarget","detail","bind","_listeners","onInternal","events","createDocumentFragment","methods","etProto","once","eventList","removeEventListener","cb","clear","ceOptions","$","CustomEvent","_onBySelectorMap","listenerBySelector","element","eventType","eventTypes","selectors","_listenerBySelectorCalled","parentNode","intersectBox","edge","bitCode","Geometry","isRing","isRingCollection","isMultiRingCollection","getNearest","candidates","isInside","xi","yi","xj","yj","insideHole","equals","g1","g2","getSquaredDistance","p2","dx","dy","getDistance","getFlatCoordinates","reductionFn","iterateCoordinates","iterateCoords","intersects","geom1","geom2","flatIntersects","clipPolygon","clipRing","prevInside","inside","clipPolyline","codeB","lastCode","codeA","part","interpolate","coordinateList","resolution","newCoordinateList","distance","pos","ceil","xpos","ypos","sampleNumber","milestones","accumulatedDistance","intervalLength","nextMilestoneDistance","milestone","dd","included","prevMilestone","m","spliceParams","totalDistance","distances","defaultCount","leftCount","insertionCount","partialInsertionCount","__p__","init","createEvent","initCustomEvent","cancelable","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","currentState","previousState","stateIndex","lastStateIndex","_setupStateControl","eventsToMapChange","replaceCurrent","_addToHistory","fn_addToHistory","layerOpacityHandlerTimeout","clearTimeout","setTimeout","wait","loadingCtrl","addWait","checkLocation","_loadIntoMap","removeWait","jsonPackSettleFunctions","jsonpackProcess","jsonPackWorkerUrl","jsonPackWorker","settleFunctions","getJsonPackWorker","workId","object","supportsFileSystemAccess","DataTransferItem","getAsFileSystemHandle","isStatefulLayer","file","_getMapState","history","replaceState","saveState","pushState","lastEventType","floor","baseLayerData","fallbackLayerID","base","stateless","h","ur","unremovable","fn","u","cameraControls","vw3","getCameraState","extraStates","cacheResult","_controlStatesCache","packed","stringOrJson","loadingctrl","hasWait","resolved","objPromise","_err","setBaseLayer","fbPromise","addLayer","newLayer","setExtent","animate","capas","stateLayer","layerInConfig","lyrCfg","renderOptions","addOrUpdateLayer","removeLayer","getReduceByValueFunction","prop","getAvailableBaseLayer","abl","isReady","isLoaded","vectors","loadingLayerCount","RECENT_FILES_STORE_KEY_PREFIX","recentFiles","recentFileCount","_markerPromises","_layerBuffer","getIndex","pending","getIndexForZIndex","getMapLayers","rejected","mapLayer","layerObj","getResolvedWorkLayerIndex","_map","getResolvedVisibleLayerIndex","getReduceByZIndexFunction","checkMapLoad","throwMapLoad","setLoaded","stateful","ready","button","onAvailables","_layer","lastResortBaseLayer","_fileHandles","allowed","mergeOptions","zoomToFeatures","handleFeaturesAdd","_zoomToFeaturesTimeout","_handleLayerAdd","setMap","ctlPromises","ctlOptions","_triggerLayersBeforeUpdateEvent","_triggerLayersUpdateEvent","workLayer","toast","finally","ctl","importControlStates","setHeightFix","_noFeatureClicked","allLayersClicked","wl","mapProto","getMapState","stateObj","getPreviousMapState","hash","inValidState","cp","chpr","bcpd","getBoundingClientRect","layoutURLs","ignoreError","config","markup","layoutPromises","ResponseError","onError","i18nLayoutPromise","linkElement","rel","_match","grp1","grp2","grp3","insertAdjacentHTML","fileBlob","fileURL","scriptElement","deleteTreeCache","oldError","trace","fnc","duration","JL","fatalException","instance","mergeLayerOptions","optionsArray","propertyName","layerOptions","layerOption","mergeControlOptions","controlOptions","argArray","arg","elem","crsLayerError","errorMessage","getCrs","setCrs","groups","getMap","_tileloaderror","onTileload","appendRasterEvents","indexOfFirstVector","getLayerCount","currentCrs","baseLayerEndFn","fit","fitToInitialExtent","compatibleMatrixSet","_l","insertLayer","contain","currentLayer","layerNamesAsArray","beforeIdx","olLayerPromise","targetLayer","olTargetLayer","olIdx","getLayerIndex","oldIndex","newIndex","setLayerIndex","putLayerOnTop","oldLayer","setView","getLayerTree","_addCtl","addStringControl","classObj","classStr","namespaces","getControlById","candidate","defaultActiveControl","lastCtrlActive","getLoadingIndicator","ctls","addResultsPanel","container","getMaxExtent","setCenter","setRotation","rotation","getRotation","getViewHTML","getViewport","crsLists","includeFallbacks","otherCrsLists","crsList","loadProjections","projList","array","unit","orderBy","isReprojecting","allowFallbackLayer","endReproject","setOptionalExtent","resolveChange","newCrs","loadProj","_setProjection","layerProjectionOptions","setLayerProjection","getCoordinateFromPixel","xy","getPixelFromCoordinate","bounds","Infinity","_on3DZoomTo","reprojected","coordsXY","view2DCRS","coordsXY2","zoomToMarkers","markers","zoomToLayer","_getVectors","vectorLayer","markerPromise","vectorsPromise","removeFeatures","fg","setResolution","exportFeatures","featuresToExport","noExport","loadingCtl","waitId","elevSubst","NaN","newData","innerText","flatCoords","newFeature","fillGroupMap","groupMap","ctor","featureList","defaultEncoding","rv","getInnerType","shpWrite","thisMap","geometries","write","_empty","fileName","resolves","zip","JSZip","shp","buffer","shx","dbf","wkt","generateAsync","fieldDataType","geopackage","DataTypes","TEXT","INT","FLOAT","BOOLEAN","wkx","geopackageAPI","GeoPackageAPI","FeatureColumn","GeometryColumns","myPackage","srs_id","spatialReferenceSystemDao","queryForId","newSRS","createObject","srs_name","organization","organization_coordsys_id","definition","definition_12_063","description","firstFeature","tableName","columns","pkColumnName","createPrimaryKeyColumnWithIndexAndName","createGeometryColumn","fieldName","fieldValue","createColumn","geometryColumns","table_name","column_name","geometry_type_name","getGeometryStride","createFeatureTable","featureDao","getFeatureDao","featureRow","newRow","geometryData","GeometryData","setSrsId","writeFeature","setValueWithColumnName","geometryColumn","export","compression","exportControlStates","controlStates","toasts","toastHide","parentElement","removeChild","toastInfo","timeout","span","mapHeightNeedsFix","navigator","userAgent","ih","innerHeight","fix","exportImage","errorMsg","canvas","synchronous","toDataURL","loadFiles","files","elevationOptions","services","googleMapsKey","isString","serviceName","magicFunction","availableLayers","returnObject","_filter","geometryFields","nillable","minOccurs","recursive","geomName","conditions","geometryName","geomNames","getTagName","extractFeatures","download","layersToExtract","_getServiceTitle","mapLayers","Service","_postOrDownload","objlayer","cacheAction","objLayer","XMLDocument","exception","errors","errorThrown","_makePostCall","serviceTitle","serviceObj","queryable","getWFSCapabilities","_numMaxFeatures","layerList","GetFeature","FeatureTypes","CountDefault","DefaultValue","QueryExpressions","operationUrl","DCPType","HTTP","Post","onlineResource","DCP","numMaxfeatures","urlData","featFounds","updateSize","linkTo","loadRecentFiles","recentFilePromises","storeRecentFiles","recentFileEntrySemaphore","addRecentFileEntry","newEntry","acquire","fileExists","isSame","mainHandle","isSameEntry","fileIndex","findIndex","_f$mainHandle","pop","release","removeRecentFileEntry","loadRecentFileEntry","_fileHandle","handle","handles","additionalHandles","permissions","permission","queryPermission","requestPermission","soundex","codes","g","q","_i","_a","toLocaleString","_options","sNum","isInteger","iconUrlCache","markerGroupClassCache","path1","path2","getOnPath","swipeHandlers","modalCloseHandlers","hasOwn","templateCache","countDecimals","stylePropertyNames","getElevationGain","uphill","downhill","hillDeltaThreshold","previousHeight","sectorMinHeight","sectorMaxHeight","previousUphill","delta","upHill","downHill","isPlainObject","nodeType","isEmptyObject","deep","copy","copyIsArray","getMapLocale","regex","PROTOCOL","isOnCapabilities","withProtocol","testUrl","reqGetMapOnCapabilities","_get","caps","getFnFromString","fnName","scope","scopeSplit","isURL","isSecureURL","uri","uProtocol","uPort","lPort","formatNumber","maximumFractionDigits","valueOf","addProtocol","getDiv","getElementById","getScriptLocation","scripts","getBackgroundUrlFromCss","cssClass","iconDiv","getComputedStyle","backgroundImage","getPointIconUrl","getLegendImageFromStyle","strokeHalfWidth","diameter","lineDashText","lineDash","addArrayToTree","parseCoords","_parseGeoCoord","_parseCoord","reproject","multipoint","multiring","multipoly","sourcePrj","targetPrj","poly","pidx","rp","ridx","rr","cidx","getMetersPerDegree","R","degToRad","dLat","sindlat2","atan2","radToDeg","rad","deg","mod","twoPi","getCRSCode","toURNCRS","CRSCodesEqual","crs1","crs2","code1","code2","templateOrId","fetchTemplate","txt","compileTemplate","getSimpleMimeType","end","getMimeTypeFromUrl","getQueryStringParams","queryString","queryIdx","fragmentIdx","fastUnshift","storage","getCookie","setCookie","getLocalValue","localStorage","Storage","getItem","setLocalValue","removeItem","exDate","getSessionLocalValue","sessionStorage","setSessionLocalValue","detectFirefox","$1","ua","msie","detectChrome","chrome","detectSafari","detectMouse","matchesCoarse","matchesFine","mq","hover","mqResult","media","detectAndroid","detectBlackBerry","detectIOS","detectMobileWindows","detectMobile","getBrowser","browser","UAParser","major","getElementByNodeName","colonIndex","tag","getElementsByTagNameNS","addURLParameters","parameters","urlObj","isRelative","searchParams","newUrl","host","removeURLParameter","parameter","urlparts","pars","showModal","contentNode","hidden","closeButton","closeCallback","delete","stopPropagation","openCallback","closeModal","modal","closeAlert","btn","swipe","addListeners","handlers","start","minDistance","maxCrossDistance","maxAllowedTime","touchStartCoords","touchEndCoords","startTime","noSwipe","mustSwipe","changedTouches","pageX","pageY","getTime","startCoords","endCoords","adx","ady","getDirection","getParameterByName","getLocaleUserChoice","cookieName","paramName","browserLanguage","languages","language","userLanguage","lang","hyphenIdx","expirationDate","getValidFilename","filename","getFormatFromFileExtension","downloadBlob","downloadFile","msSaveBlob","downloadDataURI","dataURI","binary","atob","charCodeAt","shortenUrl","access_token","longUrl","utf8ToBase64","unescape","base64ToUtf8","escape","colorArrayToString","color","operation","list1","list2","comparerFn","operationIsUnion","item1","inBoth","inFirstOnly","inSecondOnly","toDataUrl","backgroundColour","defaultOptions","encoderOptions","_ref","context","getContext","getImageData","compositeOperation","globalCompositeOperation","fillStyle","fillRect","imageData","clearRect","putImageData","imgToDataUrl","createCanvas","ctx","drawImage","Image","dataURL","dataUrl","_error","complete","imgTagToDataUrl","base64","addToCanvas","newCanvas","newImage","cloneCanvas","oldCanvas","mergeCanvases","canvases","rects","top","left","bottom","right","rect","calculateAspectRatioFit","srcWidth","srcHeight","maxWidth","maxHeight","ratio","getFormattedDate","date","hasTime","pad","getFullYear","getMonth","getHours","getMinutes","getSeconds","replaceSpecialCharacters","translate","downloadFileForm","contentDispositionHeader","arrDownloads","WFSQueryBuilder","onlyHits","maxFeatures","fields","getSRSAttribute","getFields","tagName","queryItem","_queryHeaderConstructor","resultType","queryBody","WFGetPropertyValue","valueReference","WFSFilterBuilder","clipLayer","where","gmlEnvelope","lowerCorner","upperCorner","writeGMLGeometry","gmlVersion","getSRSName","getGmlCoordinates","isServiceWorker","serviceWorker","controller","isSameOriginByLocation","isSameProtocol","protocolRegex","uriProtocol","locationProtocol","consoleRegister","getSorterByProperty","propName","getSoundexDifference","charAt","toAbsolutePath","explodeGeometry","iterationFunction","cloneMappingFunction","isGeometry","compactGeometry","MAX_VALUE","newGeom","firstIterationFunction","secondIterationFunction","isStyleOption","hasStyleOptions","mergeStyles","formatCoord","nDecimales","formatString","args","getWebWorkerCrossOriginURL","createSemaphore","maxConcurrentTasks","queue","purge","unresolvedCount","patternFn","queryHeader","fncOvelaps","elem1","elem2","comparisonFnc","colliding","other","rect1","rect2","containing","Attribution","apiAttribution","mainDataAttribution","dataAttributions","addData","getAttribution","site","textExists","removeData","wlArr","checkRemoveData","checkIsSameAttribution","toCheckName","workLayerAttribution","ignoreLayer","terrainProvider","_self$map","api","mainData","otherData","isCollapsed","cmd","toggleOtherAttributions","BasemapSelector","MapContents","layerInfos","_cssClasses","LOAD_CRS_BUTTON","CRS_DIALOG","CRS_LIST","VIEW_BTN","CURRENT_CRS_NAME","CURRENT_CRS_CODE","TREE","DETAILS","GRID","_dialogDiv","dialogDiv","_$dialogDiv","loadFallbackProjections","crsCode","dialog","fallbackLayerId","getClosestParent","changeInputRadioBaseMap","flagToCallback","radio","dialogMore","radios","bmsLayer","_currentSelection","dialogOptions","showProjectionChangeDialog","toggleView","blur","_getMoreBaseLayers","update","showMoreLayersDialog","mainTemplatePromise","nodeTemplatePromise","dialogTemplatePromise","controlId","toggleMoreLayersDialogView","_moreBaseLayersPromise","li","_idx","curBaseLayer","otherLayerIsFallback","updateScale","updateLayerTree","displayLayer","layerTrees","out","newLi","layerUid","ul","currentLi","setLayerIds","inserted","curLi","insertAdjacentElement","moreLabel","updateLayerOrder","_oldIdx","_newIdx","lis","onErrorLayer","mapName","filterFn","baseLayersWithFallback","_moreBaseLayers","modalBody","blCRSList","hasFallbackCRS","fragment","projObj","isGrid","processLayer","bl","renderBody","moreBaseLayers","layerIdx","toggleUI","getTo3DVIew","partialCallback","noDyn","_rej","_fail","OfflineMapMaker","Click","Container","ctlCount","defaultSelection","_ctlPromises","ctlRegister","_elm","onRender","_callback","getControl","getControls","_control","newCtl","side","LEFT","SIDE","ctlName","addElement","addedElement","htmlElement","Coordinates","ProjectionSelector","latLon","lat","lon","allowReprojection","CRS","GEOCRS","MAIN","ALTERNATE","XY","X","Y","LATLON","LAT","LON","ELEVATION","ELEVATION_CONTAINER","THREEDMARKER","_3dContainerListener","isPointerOver","coordsToClick","coordinate","ele","activateCoords","viewport","onMouseMove","onMouseLeave","showGeo","crsButton","closeBtn","clientRect","clientX","clientY","mainElement","xyElement","latLonElement","altElement","currentCoordsMarker","deactivateCoords","coordsDeactivate","coordsActivate","coordsToPopup","updateCoordsCtrl","getPosition","coordsBounding","getPropertyValue","_markerRemoveTimeout","coordsMarkerAdd","owner","DataLoader","TabContainer","externalWMS","suggestions","wmsSuggestions","fileImport","enableDragAndDrop","Download","_classSelector","_hiddenElms","MapInfo","deselectableTabs","tab","_activeElm","firstTab","toFixed","_showAlertMsg","descripcion","getCanvas","drawScaleBarIntoCanvas","fill","codeContainerId","codeContainer","makeQRCode","qrCodeBase64","mapCanvas","_canvas","fileExtension","worldFileExtension","xScale","yScale","xOrigin","yOrigin","toBlob","downLoadImage","getFovCoords","responseArray","responses","plural","downloadFeatures","generateLink","_evt","registeredListeners","registerListeners","manageMaxLengthExceed","maxLengthExceed","checkboxQR","qr","checkbox","_style","_styler","_pointClass","_lineClass","_polygonClass","_rectangleClass","_hasOwnLayer","_layerPromise","_cancelClick","_newBtn","_cancelBtn","_endBtn","_undoBtn","_redoBtn","_previousStyles","_onModeChange","_onStylableChange","_toggleTools","_setDrawState","_setFeatureAddReadyState","Draw","WebComponentControl","initProperty","historyIndex","resetValues","singleSketch","_setDrawState2","_setFeatureAddReadyState2","featureId","_onStylableChange2","_onModeChange2","stylable","measurer","extensibleSketch","strToolTip","renderObject","tooltip","getStyler","styler","eventData","new","undo","redo","setMode","clearFatures","_classPrivateFieldGet2","resetStyle","setStrokeColor","setFillColor","setFillOpacity","alpha","setFillOpacityWatch","setStrokeWidth","toggleStyleTools","_toggleTools2","setFeature","tools","classToggle","ENABLED","EXTEND_ONLY","DrawMeasureModify","Measure","cs","_selectors","ELEVATION_CHECKBOX","MODE_RADIO_BUTTON","persistentDrawControls","_1stCoordText","_2ndCoordText","_1stCoordValue","_2ndCoordValue","_elevationText","_elevationValue","pointMeasurementControl","_clearBtn","cancelDraw","_downloadBtn","showSketchDownloadDialog","drawControls","dv","modifyId","pointDrawControlId","objects","layerPromise","elevationProfileActive","modify","getModifyControl","displayFeatureMode","getElevationControl","setCurrentFeature","resetElevationProfile","setMeasures","measureData","getFeatureMeasurementData","displayMeasurements","setFeatureMeasurementData","lineDrawControl","isMinimized","maximize","displayElevationProfile","elevationChartData","getLineDrawControl","closeElevationProfile","lastCoord","onLine","beginDraw","onStyleChange","getPolygonDrawControl","pointDrawControl","getPointDrawControl","updateChanges","_elevationControlPromise","displayLabelText","displayMode","_activeMode","polygonDrawControl","constrainModes","modes","rb","lineMeasurementControl","polygonMeasurementControl","measureOptions","area","perimeter","getPointMeasurementControl","displayMeasurement","clearMeasurement","featureCtor","getSelectedFeatures","styleOptions","activateElevationProfile","profileDrawn","elevationControl","getActiveFeatures","deactivateElevationProfile","resultsPanelChart","openChart","showHideBtn","layerPromises","dc","_previousActiveControl","_featureImportPanelPromise","_highlightsLayerPromise","_measurementControl","_originalFeatures","_onSnappingChange","_getModeTab","_getFeatureFromImportList","_setEditState","_handleCheck","_addImportLayerEvents","_addImportFeatureEvents","_cacheOriginalFeature","Edit","MODE_TAB","cancelActionConfirmTxt","cancelText","eraseText","layersEditData","modifyControl","_onSnappingChange2","MODIFY","otherToolsIncluded","featureImportPanel","featuresToImport","getHighlightsLayer","hlLayer","fti","original","lli","fli","getAvailableFeaturesToImport","list","isFeatureAllowed","displayLayerToImport","attributesTemplatePromise","importTemplatePromise","importLayerTemplatePromise","importFeatureTemplatePromise","addElevation","elevationTool","changed","newCoords","getElevation","drawstartHandler","_cacheOriginalFeature2","drawendHandler","drawcancelHandler","measureHandler","displayAttributes","getLayerEditData","attrArray","jfa","_joinedFeatureAttributes","attributeObj","readOnly","availableValues","jfaObj","toISOString","getAttributeDisplayTarget","inputs","selects","input","_onAttrOK","closeAttributes","that","layerHasInfo","_getModeTab2","_this$target","targetId","newMode","showFeatureImportPanel","downloadElevation","getGeometryType","unselectFeatures","layerEditData","_setEditState2","ADDPOINT","ADDLINE","isMultiple","ADDPOLYGON","optionalLayer","checkedOut","_this$modifyControl","_this$modifyControl2","setSelectedFeatures","_this$modifyControl3","highlightsLayer","featuresToHighlight","importFeatures","failure","getFeatureImportPanel","highlightFeatures","_addImportLayerEvents2","layerElementSelector","_addImportFeatureEvents2","isStylable","activateDraw","draw","OTHER","_getFeatureFromImportList2","_handleCheck2","ccb","highlightListener","CUT","Elevation","pointElevationCache","elevationProfileCache","removeElevationProfileFromCache","valueTemplatePromise","displayElevationValue","proxyObj","setElevationToolOptions","elevationValues","ignoreCache","targets","displayControls","highlightedFeature","featElm","getFeatureElement","elevationValue","heightValue","geometryElevation","originalValue","featureOrCoords","lines","getProfilePanel","renderProfile","profile","renderElevationProfile","getElevationProfileFromCache","elevCoordLines","elevLines","maxElevation","minElevation","lastDistance","elevationData","elevationGainOptions","onlyOriginalElevation","isSecondary","elevationProfileChartData","secondaryElevationProfileChartData","showLegend","ignoreCaching","cacheElevationProfile","originalElevation","timestamp","_depTimestamp","elevationOptionsTemplate","sampleNumberCollection","lineDistances","lineDistance","sn","interpolatedLines","interpolationOptions","elevationPromises","interpolatedLine","elevCoords","createProfilePanel","onmouseout","removeElevationTooltip","getElevationTooltip","addControlPromise","displayOn","addResultsPanelChart","_decorateChartPanel","_resultsPanelPromise","profileData","loadDataOnChart","doVisible","oldClose","showElevationMarker","getElevationChartTooltip","hideElevationMarker","_addedUrls","ExternalWMS","addWMS","addedUrl","unwantedParams","urlWithoutParams","removeParamsFromUrl","addButton","_current","items","cap","Capability","root","selectedOptions","option","markServicesAsSelected","pending_markServicesAsSelected","elemUrl","selectedOption","_displayElevation","_interpolation","_interpolationDistance","_formats","_hasPoints","_hasLines","_hasPolygons","_addElevationAndInterpolation","FeatureDownloadDialog","INTERPOLATION_PANEL","INTERPOLATION_RADIO","INTERPOLATION_DISTANCE","featureOrFeatures","setFeatures","excludedFormats","checkboxId","_hasPoints2","_hasLines2","_hasPolygons2","formats","setOptions","getElementsByClassName","endExport","_addElevationAndInterpolation2","innerFileName","getFeatures","getOptions","interpolationPanel","elevationCheckbox","modalOptions","cloneWithId","mustInterpolate","featuresToAddElevation","elevOptions","maxCoordQuantity","processedFeatures","FeatureInfo","FeatureInfoCommons","roundCoordinates","_xy","querying","elevationRequest","filterLayer","markerOptions","markerStyle","filterFeature","renderResults","loading","displayResults","visibleLayers","queryResolution","getFeatureInfo","responseCallback","sendRequest","defaultFeature","insertLinks","sharedFeatureInfo","sharedFeature","featureObj","ml","jj","md5","stringify","sharedFeatureLayer","displayResultsCallback","getDisplayControl","getDisplayTarget","elevationCoords","currentCoords","elevPoint","displayElevationValues","h4","tValue","sValue","elevationString","heightString","elevationDisplay","heightDisplay","loadSharedFeature","beforeRequest","exportQuery","importQuery","LIST_ITEM","SHOW_ALL_CHECKBOX","ZOOM_ALL_BUTTON","DEL_ALL_BUTTON","resultsLayer","_layersPromise","_infoHistory","lastFeatureCount","infoShare","CURRENT_CLASS","TITLE_SEPARATOR","DEFAULT_STROKE_COLOR","setShowAllUI","menu","getMenuTarget","showAllCb","setNotShowAllUI","clickRegisterPromise","_createLayers","shareCtl","loadParamFeature","setDisplayMode","_self$highlightedFeat","downplayFeature","_decorateDisplay","featuresDeleted","historyService","historyLayer","closeResults","share","getShareDialog","objectTemplatePromise","buttonsTemplatePromise","videoTemplatePromise","imageTemplatePromise","audioTemplatePromise","embedTemplatePromise","infoService","infoLayer","featureCount","_addSourceAttributes","responseError","noPrint","getResultsPanel","getPopup","draggable","onShowPopup","ctlPromise","getMenuElement","cloneNode","getElementIndex","getParentElement","getFeatureFromListItem","currentFeatureLi","currentLayerLi","currentServiceLi","getNextFeatureElement","getFeaturePath","nextBtn","highlightFeature","prevBtn","onTitleClick","anotherLayer","downplayFeatures","downloadDialog","_getFileName","showAllFeatures","hideAllFeatures","table","getSelection","zoomHandler","_zooming","sCount","lCount","_featureObj","linkText","td","featureOrElement","featureLi","layerLi","serviceLi","serviceIdx","featureIdx","displayTarget","getFeatureIndex","triggerEvent","prevFeat","_f","prevHlFeature","exceptionFLi","exceptionLLi","exceptionSLi","currentService","checkedLayer","maxj","maxk","featureIndex","exportStateOptions","toShare","rlPromise","flPromise","displayControl","resultsContainer","printBtn","Print","printTitle","printableElement","addSpecialAttributeEventListeners","serviceAttrName","layerAttrName","allData","showShareDialog","filterLayerState","hlf","onFeatureHighlight","staticMethodMock","renderFeatureAttributeTable","renderFeatureAttribute","showImageDialog","formatColor","_strokeColorPicker","_strokeWidthSelector","_strokeWidthWatch","_fillColorPicker","_fillOpacitySelector","_radiusSelector","_initialStyles","_onDisabledChange","_cacheStyles","_isSupportedProperty","_setColorWatch","_setPropertyColor","_getFillStyleTools","_getRadiusStyleTools","_toggleFillStyleTools","_toggleRadiusStyleTools","_triggerStyleChange","FeatureStyler","getModeStyle","_onDisabledChange2","_styles$polygon","_styles$line","_styles$line2","_styles$polygon2","_styles$polygon3","setRadius","appliedStyle","_isSupportedProperty2","lineStyle","polygonStyle","pointStyle","_cacheStyles2","styleObj","setStrokeColorWatch","_setColorWatch2","setFillColorWatch","_setPropertyColor2","percentage","_triggerStyleChange2","setStrokeWidthWatch","borderBottomWidth","setRadiusWatch","_toggleFillStyleTools2","_toggleRadiusStyleTools2","colorPicker","toHex","padStart","backgroundColor","watchFn","_getFillStyleTools2","_getRadiusStyleTools2","getSingleClusteredFeature","_setToolButtonHandlers","_prepareFeatureToShare","_getFeatureFilename","FeatureTools","addUI","updateUI","_parentCtl","menuContainer","menuIsMissing","getCurrentFeature","endAddUIPromise","printControl","_setToolButtonHandlers2","_decorateDisplay2","uiDiv","isCluster","shareBtn","profileBtn","elevBtn","onDownloadButtonClick","getFeatureFromElement","showDownloadDialog","onShareButtonClick","_prepareFeatureToShare2","onZoomButtonClick","onDeleteButtonClick","onProfileButtonClick","depOptions","elevCtl","onElevationButtonClick","_getFeatureFilename2","_ctl$caller","_self$_parentCtl","_self$_parentCtl$call","_self$_parentCtl2","_self$_parentCtl2$cal","_self$_parentCtl3","_self$_parentCtl3$cal","_self$_parentCtl4","_self$_parentCtl4$cal","getFeatureTitle","doZoom","layerState","featureToShare","sharedFeaturesLayer","attributeTable","mustGetElevations","_self$options$display","FILE_TITLE_SEPARATOR","editedLayers","preventDefault","returnValue","capture","_registerTool","_setSaveButtonState","FileEdit","editControl","getEditControl","closeEditSession","ownLayer","_firstFeature$folders","editCtl","_registerTool2","panelTemplatePromise","includeSaveAsButton","showSaveFilePicker","editControlId","includeSaveAs","resize","saveButton","save","saveAsButton","showDialog","_self$panel","_options$stylable","lineControl","hasPolyline","hasMultiPolyline","_setSaveButtonState2","_layer$_fileHandle","fileHandle","oldFileHandle","cleanEditedLayerList","_l$_fileHandle","getPermission","permissionDescriptor","suggestedName","types","createWritable","fileSaveEventData","groupIndex","fileSystemFile","filteredLayers","siblings","fileEditing","editIconText","editIconUcodeString","addItemTool","renderFn","updateEvents","updateFn","actionFn","openEditSession","editCtlPromise","trackLayer","updateEndMarkers","selectedTrackItem","getSelectedTrackItem","displayTrackProfile","forceRefresh","_ctl$trackLayer$style","_ctl$trackLayer$style2","lineCtl","getSketch","openSessionFn","lineDrawCtl","extending","_additionaFileHandles","_layerMetadataCache","FileImport","LAYER_METADATA_STORE_KEY_PREFIX","fileTypes","mimeTypes","ft","registerLayerAdd","_bufferFeatures","clipboardData","dropTarget","timeStamp","projectGeom","gpxPattern","renderRecentFileList","targetLayers","loadLayerMetadata","tl","_fileDropLoadingIndicator","additionalFileHandles","_additionalFileHandles","saveLayerMetadata","_timeStamp","getLayers","uidPrefix","ids","_v","newId","subtrackPendingFile","dictKey","FileReader","loadLayersFromFile","deleteLayerMetadata","ownLayers","fileInput","form","showOpenFilePicker","fileHandles","multiple","DOMException","messageText","getIdCount","idCount","layersMetadata","_layersMetadata$idx","layerGroups","additionalFileHandleDictionary","currentGroup","layerToRemove","promptRequired","pendingFileHandle","separator","isPermissionGranted","onCloseClick","_layer$features","layerData","storageItem","fileList","onLinkClick","onButtonClick","buttonText","replaceChildren","header","_entry$mainHandle","dropFilesCounter","_featureImportWaitId","fileHandleOrTimestamp","propertyname","grouped","findByProperty","layerOwner","FullScreen","fullscreenEnabled","fullscreenElement","requestFullscreen","exitFullscreen","fullscreenchange","fullscreenerror","webkit","moz","ms","vendor","fscreen","inFullscreen","requestFullscreenFunction","handler","Boolean","onfullscreenchange","onfullscreenerror","doFullscreenChange","byBtn","windowWidth","innerWidth","devicePixelRatio","windowHeight","screenWidth","screen","screenHeight","resizeEvent","initEvent","isMultiPolyline","isAnyLine","isPolyline","getFirstPoint","lastMapCenter","followingZoom","Geolocation","setFollowing","wakeLockSupported","wakeLock","notifications","orderTracks","tracks","tracksArray","localeCompare","_shareDialogDiv","_interpolationPanel","_elevationsCheckbox","_trackVisibility","_isFollowing","_onWindowBlurred","_onWindowFocused","_onWindowVisibility","_onResize","_elevationProfileCache","_elevationFromServiceCache","_startMarker","_finishMarker","_getDownloadFileName","_getElevationFromService","_prepareFeaturesToShare","_onShowShareDialog","_onShowDownloadDialog","_showAlert","_activateGeotrackingState","_deactivateGeotrackingState","_getCurrentPoints","_setTrackToShare","_setFormatInfoNewPosition","_updateGeotrackingToolsState","_keepWakeLock","_releaseLock","_addVideoKeepScreenOn","_removeVideoKeepScreenOn","_setOnWindowBlurred","_setOnWindowFocused","_setOnWindowVisibility","_addWindowEvents","_removeWindowEvents","_fromSessionToStorage","_fromStorageToSession","_advertisement","_askGeotracking","_bindTracks","_getElevationProfileFromCache","_cacheElevationProfile","_removeElevationProfileFromCache","_getElevationFromServiceOnCache","_cacheElevationFromService","_onLayerError","DRAWACTIVATED","SIMULATIONACTIVATED","PLAY","PAUSE","ACTIVATOR","DELETEALL","SAVE","CANCEL","EXPORT","STOP","BACKWARD","FORWARD","SPEED","VISIBILITY","localStorageKey","GEOTRACKING","GEOTRACKINGTEMP","GEOTRACKINGSHOWADVERTISEMENT","GPSSHOWADVERTISEMENT","TEST","POSITIONCHANGE","GPSPOSITIONCHANGE","GPSPOSITIONERROR","STATEUPDATED","GPSADD","TRACKSNAPPING","DRAWTRACK","CLEARTRACK","IMPORTEDTRACK","supportedFileExtensions","GPS","TRACK","const","_setFormatInfoNewPosition2","pd","getTrackInfoPanel","infoPanel","collidingPriority","COLLIDING_PRIORITY","IGNORE","previous","_distance","_doneTime","done","setSecondaryElevationProfileCoordinates","iX","_getElevationFromServiceOnCache2","getAvailableTracks","dataId","okFn","getStoredTracks","_bindTracks2","removeTrack","track","trackList","_li$querySelector","transitionEvent","_event","scrollIntoView","behavior","block","loadingState","snappingTolerance","simulationStopped","_uiElementSelector","_toolContainerSelector","gpsLayerPromise","geotrackingLayerPromise","renderTrack","trackLayerPromise","endPointLayerPromise","featuresImport","kmlPattern","importedGPX","importTrack","working","secElevChartData","eleCoordinates","_onShowShareDialog2","_onShowDownloadDialog2","newFile","eventFileHandle","trackItem","saveTrackOptions","saveTrack","_e$oldFileHandle","availableTracks","editTrackName","notificationConfig","notification","vibrate","renotify","requireInteraction","gpsLayer","geotrackingLayer","endPointLayer","newPosition","trackNodeTemplatePromise","trackSnappingTemplatePromise","trackingToastTemplatePromise","downloadDialogTemplatePromise","shareDialogTemplatePromise","_downloadDialogExtNode","removeAllTracks","_feature","importedFileName","addPromises","processImportedFeatures","notReproject","isShared","getDownloadDialogOptions","sel","activateButton","deactivateButton","trackSearch","trackImportFile","trackSave","trackAdd","trackContinue","trackRenew","trackClose","trackAdvertisementOK","trackToolPanelOpened","trackName","trackWPT","File","FileList","loadFile","activateGeotracking","deactivateGeotracking","trackSearchListener","searchTerm","trackLis","searchIcon","addWaypoint","editName","edit","focus","uiSimulate","_simulate","btnPause","drawTrack","listElement","scrollTop","offsetHeight","_stopOtherTracks","trackLiId","listItem","btnDraw","trackLi","_prepareFeaturesToShare2","setFeaturesToShare","getParentListElement","deleted","_setTrackToShare2","simulateTrackEnd","simulationSpeed","simulate_paused","simulate_pausedElapse","btnSimulate","closest","simulateTrack","loadTrack","setGeotracking","geotrackingSession","_deactivateGeotrackingState2","checkboxes","clearSelection","_infoPanelPromise","collapsed","addResultsPanelInfo","resultsPanelInfo","trackCenterButton","_activateGeotrackingState2","_updateGeotrackingToolsState2","currentPoint","moveTo","renderInfoNewPosition","formattedToStorage","_data","_advertisement2","geotrackingAvailable","QUOTA_EXCEEDED_ERR","Notification","webkitNotifications","_notifications","_keepWakeLock2","_addWindowEvents2","_askGeotracking2","_deactivateGeotracking","_fromSessionToStorage2","geotrackingPosition","_releaseLock2","hasCoordinates","_keys","onResolve","toResolve","clearChartProgress","sourceCoordinates","_self$elevationChartD","_self$elevationChartD2","secProfileData","levelElm","getTimeInterval","timeFrom","timeTo","diff","daysDifference","hoursDifference","minutesDifference","hasElevation","_activateSnapping","setSelectedTrack","drawTrackData","resized","cachedProfile","_removeElevationProfileFromCache2","_getElevationProfileFromCache2","_self$trackLayer","getTrackData","GeometryLayout","XYZM","XYM","longLayout","time","firstPoint","lastPoint","_cacheElevationProfile2","activateSnapping","deactivateSnapping","featuresToShare","_cleaning","_onLayerError2","newTrack","formatted","clean","mustAdd","storageCrs","getHashToCompare","trackObject","toGetHash","jsonFormat","GeoJSON","sameTrackUID","savedTrack","clonedTrack","writeFeatures","serializeFeatures","readFeatures","getTrackIndex","random","setStoredTracks","waypointName","heading","trackId","newName","clearSelectedTrack","trackData","formattedFromStorage","showFeatures","lineFeature","first","last","markerCoords","clearFileInput","LoadingIndicator","onGeolocateError","geolocation","currentPosition","clearWatch","currentPositionTrk","watch","currentPositionWaiting","PERMISSION_DENIED","POSITION_UNAVAILABLE","TIMEOUT","clonedToShare","trackResult","sharedTrackResult","tcFeatures","_getElevationFromService2","cachedFeature","cloned","toDownload","trackUid","storageData","saved","HTMLDocument","shareDialog","allFeatures","originalDialogFeatures","currentOptions","divToExtensions","radioDlSource","disableOriginalsRadio","originalsRadio","noZ","interpolationPanelIsHidden","setInterpolationPanelVisibility","observer","MutationObserver","mutations","attributeName","mutation","disconnect","attributeOldValue","hasChangeEvent","featuresToDownload","featuresFromDialog","mdtRadio","geoCoords","mdt","getHeightFromMDT","altitude","accuracy","speed","minimumFractionDigits","requestWakeLock","_addVideoKeepScreenOn2","_removeVideoKeepScreenOn2","videoScreenOn","WebM","MP4","sourceWebM","sourceMP4","play","pause","_setOnWindowBlurred2","_setOnWindowFocused2","paused","_fromStorageToSession2","_setOnWindowVisibility2","getHiddenProperty","getServiceWorker","showNotification","actions","ex","showAdvertisement","registeredShowAdvertisement","selectedTrackId","getItemTools","addItemToolUI","trackUID","cachedElevation","arr_diff","itemToolContainer","GeometryFeatureInfo","_isDrawing","_isSearching","_drawToken","getFeaturesByGeometry","hasLimits","optionElementName","_link","LanguageOption","fullCode","shortCode","_parent","langCode","LanguageSelector","controlElementName","tagAttributeName","languageOptions","setDocumentTexts","_activeLink","_self$languages$","_activeLink2","linkContainer","activeLink","setLanguage","currentLocale","PARAMETER_NAME","_links$find","links","braces","_classStaticPrivateFieldSpecGet","_currentLocale","COOKIE_NAME","autocomplete","LayerCatalog","searchInit","LAYER_ROOT","load","_readyPromise","waitLoad","clickToAddText","getLayerRootNode","updateControl","layerAlreadyAdded","layersToSetChecked","getServiceTitle","findResultNodes","layerRemoved","wlCtrl","_markWorkLayersAsAdded","_refreshResultList","onCollapseButtonClick","onSpanClick","getLayerObject","redrawTime","reDraw","addLayerToMap","createSearchAutocomplete","textInput","layerCheckedList","minLength","_roots","sourceLayers","sourceLayer","_founds","founds","servicesFound","servicesLooked","goToResult","buildHTML","alreadyAdded","cojoExpRegular","visibleInfoPane","serviceId","infoCheckbox","searchPane","treePane","infoPane","searchPaneMustShow","showLayerInfo","hideLayerInfo","searchListElementSelector","fireEvent","lisToCheck","setCheckedLayersOnNode","addLogicToNode","compatibleLayers","renderBranch","promiseRenderResolve","_result","expandNode","expandedNodeLevel","expanded","makeNodeVisible","childrenVisible","branch","newChild","oldChild","replaceChild","childElementCount","liError","branchTemplatePromise","infoTemplatePromise","resultsTemplatePromise","pathResultsTemplatePromise","enableSearch","liLayer","toggleInfo","infoObj","getInfoByTitle","Format","OnlineResource","infoToggles","infoToggle","infoBtn","infoSearchBtn","getCompatibleLayers","fromLayerCatalog","configLayer","_layerToAdd","getAvailableCRS","Legend","onLayerAdd","loadGraphics","getLayerUIElements","styleLegendImage","inScale","outOfScale","layersInScale","notVisible","hasVisible","updateLayerVisibility","_title","LineFeatureInfo","WorkLayerManager","_waits","startWait","stopWait","endWait","_msg","_url","_line","_col","containsName","_updateLayerTreeTimeouts","oldIdx","newIdx","currentElm","previousElm","elms","liCollection","imgSrc","colorStr","openIdx","closeIdx","component","fontFamily","_image","ErrorType","UNEXPECTEDCONTENTTYPE","QR_MAX_URL_LENGTH","SHORTEN_URL_LENGTH","includeControls","stateArray","currentUrl","hashPosition","extraParams","qsPosition","hashState","shortenedLink","FormData","allowedMixedContent","modulePromise","margin","QRCode","sb","boundingCR","beginPath","strokeStyle","borderColor","setSize","lineTo","textPosition","fillnode","fillBoundingCR","globalAlpha","drawFill","textColor","font","textAlign","textBaseline","fillText","handlerTimeout","NOMEASURE","measureMode","drawLinesId","drawPolygonsId","layerLess","hiddenModes","getLineMeasurementControl","getPolygonMeasurementControl","getDrawLines","_c1Value","_c1Text","_c2Value","_c2Text","_lengthValue","_perimeterValue","_areaValue","_profileButton","_measurementData","_onEnabledProfileChange","Measurement","_onEnabledProfileChange2","enabledProfile","attributeValue","dataObj","firstCoordText","coord1Text","secondCoordText","coord2Text","elevationText","coord1","coord2","featureOrOptions","factor","_index","weightDiff","weight","abbr","getFormattedCoordinates","dam","hm","ha","km","complexGeometryFilter","vertexGeometryFilter","_deleteBtn","_selectBtn","_deleteVertexBtn","_editAttrBtn","_attributesSection","_joinBtn","_splitBtn","_textBtn","_textInput","_fontColorPicker","_labelSection","_fontSizeSelector","_getStylingElement","_setFeatureSelectedState","_setVertexDeleteModeState","Modify","SELECT","_map$options$styles","_map$options$styles2","_self$options$styles","setSelectableState","_setFeatureSelectedState2","setTextMode","_styles$text","_styles$text2","_styles$text3","_styles$text4","VERTEX_DELETE","deleteSelectedFeatures","textActive","toggleAttributes","labelFeatures","setFontColor","setFontSize","_setVertexDeleteModeState2","objs","styleFunction","_resolution","mapStyles","setFontColorWatch","outlineColor","getLabelOutlineColor","textShadow","setFontSizeWatch","sizeValue","matchForShort","matchForLong","textStyle","attributesSection","_classPrivateFieldGet3","joinFeatures","newGeometry","attributeEditor","_classPrivateMethodGe","_getStylingElement2","opt1","opt2","MultiFeatureInfo","featureInfoControl","lineFeatureInfoControl","polygonFeatureInfoControl","featureInfoControls","pointMode","polylineMode","polygonMode","filterStyle","pointSelectValue","lineSelectValue","polygonSelectValue","changeEvent","enabled","featuresUnavailable","delFeaturesBtn","dlFeaturesBtn","zoomFeaturesBtn","displayValue","removeProperty","NavBar","superRegisterPromise","home","NavBarHome","setInitialExtent","getExtentFromString","SWCacheClient","DRAW","DRAWING","PROGRESS","NEW","LIST","LISTITEM","OKBTN","NEWBTN","SAVEBTN","CANCELBTN","EDITBTN","VIEWBTN","DELETEBTN","TILECOUNT","NAMETB","TEXTBOX","EXIT","OFFPANEL","RESOLUTIONPANEL","BLLIST","BLLISTITEM","BLLISTTEXT","RNGMAXRES","SEARCH","EMPTYLIST","OFFLINEHIDDEN","storedMaps","mapDefString","MAP_DEFINITION_PARAM_NAME","extentString","MAP_EXTENT_PARAM_NAME","mapIsOffline","currentMapDefinition","currentMapExtent","LOCAL_STORAGE_KEY_PREFIX","ROOT_CACHE_NAME","isDownloading","requestSchemas","minResolution","currentMap","_loadedCount","_offlineMapHintDiv","getOnlineMapUrl","connection","mozConnection","webkitConnection","onlineHandler","offlineHandler","SERVICE_WORKER_FLAG","_states","READY","DOWNLOADING","DELETING","_actions","CREATE","offlineControls","setNameReadyState","updateResolutions","resDiv","range","resText","resLevel","resLeft","rangeValue","currentResolution","resValue","updateThumbnails","schema","tml","tileMatrixLimits","findTileMatrixLimits","tmsKey","tmKey","trKey","tcKey","qsIdx","lenj","backgroundSize","backgroundPosition","mId","rt","cl","formatSize","quantity","showEstimatedMapSize","tileCount","cr","estimatedMapSize","getListElementByMapUrl","hashIdx","saveMapToStorage","removeMap","findStoredMap","removeMapFromStorage","getListElementByMapName","mapNodeTemplatePromise","baseLayerNodeTemplatePromise","offlinePanelTemplatePromise","listId","selectionStart","selectionEnd","generateCache","_updateReadyState","setEditState","setReadyState","cancelCacheRequest","startDeleteMap","textbox","setNameEditingState","showExtent","searchListener","mapLis","updateRequestSchemas","rangeListener","swCacheClientPromise","requestId","total","manifestFile","ts","normalize","idxEnd","requestManifest","hashStorageKey","firstLoad","cacheUrlList","onCacheDownload","reload","warning","offlineMapHintDiv","offPanel","drawId","boxDraw","pStart","pEnd","minx","maxx","miny","maxy","getRequestSchemas","visibleLi","opt","year","month","day","hour","minute","second","EDITING","addRenderedListNode","blList","isLayerAdded","isValidLayer","cachedResolutions","offCtls","offCtl","disablingReason","mapDef","isSameLayer","mapDefLayer","urlIdx","tmsIdx","missingLayers","cachedLayers","removeHash","serviceWorkerEnabled","addMap","showDownloadProgress","handleError","startRequest","requestCache","estimate","availableMB","quota","usage","mapSize","availableStorage","urlList","createCache","filterTml","trimTml","intersectionExtent","rs","unitsPerTile","tSize","mapDefinition","bBox","layerUrl","shortFormat","formatIdx","pathname","urlPattern","getGetTilePattern","lenk","deleteCache","deleteMap","confirmText","current","percentString","pr","pb","resolutionMapper","allResolutions","_wrapPromise","_registerWrap","OverviewMap","registerLayer","findLayerById","lyrObj","instanceLayer","changeBaseLayer","ovMapLayer","defaultLayer","_registerWrap2","resetOptions","resetOVMapProjection","PolygonFeatureInfo","shareButton","popupDiv","addPopup","delayed","hidePopup","dragged","setDragging","dragging","cssUrl","renderPrintPage","page","getRenderTarget","_mustAddListeners","pageTemplatePromise","ORIENTATION","PAGE_SIZE","a4_portrait","logoWidth","logoHeight","layoutPDF","pageSize","pageMargins","alignment","paddingLeft","_node","paddingRight","paddingTop","paddingBottom","a4_landscape","a3_portrait","a3_landscape","getLayout","orientation","getLogoColumn","sideLength","_hasLegend","_hasLegendToPrint","PrintMap","viewTemplatePromise","toolsTemplatePromise","manageLegendOnZoom","getContainer","printBtnSelector","_hasLegend2","updateCanvas","printFormat","bounding","newWidth","_viewDiv","zoomOut","zoomIn","viewportMeta","_viewportMeta","toolsStyle","getToolsElement","_toolsTransform","transform","_toolsTransformOrigin","transformOrigin","toastStyle","_toastTransform","_toastTransformOrigin","getScene","resetPrinting","currentFormat","createPdf","pdfFonts","pdfMake","vfs","printLayout","createPDF","imageErrorHandling","legendByGroup","_process","parentLayer","treeLevel","srcBase64","_traverse","func","imagePromises","imageDetail","_getLegendImages","vector","groupWithHeight","rows","headerRows","headerItem","itemIndex","headerIndex","imageWidth","imageHeight","dataLayer","dontBreakRows","keepWithHeaderRows","getGroupTable","basics","onLogoError","logoColumn","logo","titleColumn","getTitleColumn","scaleBarColumn","getScaleBarColumn","border","scaleCtrl","styling","leftBorder","rightBorder","qrTarget","basicsDone","totalWidth","scaleBarWidth","mapPlace","_hasLegendToPrint2","pageBreak","pageOrientation","bold","defaultStyle","alertElm","CHANGE","NO_CHANGE","blFirstOption","blFallback","loadProjs","currentCRSName","currentCRSCode","SHOW_IN","SHOW_OUT","RESIZABLE","POSITION_BOTTOM","POSITION_TOP","TABLE","LOW","MEDIUM","HIGH","CHART_SIZE","MIN_HEIGHT","MAX_HEIGHT","MIN_WIDTH","MEDIUM_WIDTH","MAX_WIDTH","isElementVisible","computedStyle","bodyElm","maximizeElm","manageClassList","classElement","toAdd","toRemove","hideResizeHandlers","el","tableTemplatePromise","chartTemplatePromise","_addItemTool","classNamePartial","localeKey","mainTitleElm","minimizeButton","minimize","resizedTarget","chartSizeWidth","chartSizeHeight","panelSizeWidth","panelSizeHeight","maximizeButton","exportToExcel","tableDiv","doResizable","resizable","renderPanelResizable","interact","targetNodeSelector","targetNode","isSet","svg","preserveAspectRatio","edges","cursorChecker","_action","_interactable","_interacting","cursor","listeners","onResize","move","modifiers","restrict","restriction","getResizableChartSize","chartWrapperBounding","getResultsPanelFromElement","resultsPanels","newSize","collapsedElm","collapsedClass","collidingManagement","chartBounding","destroy","onOpen","renderElevationProfileChart","formatYAxis","c3","titleBar","templateData","hasSecondaryElevationProfileChartData","secondChart","titleElm","legendOptions","inset","chartOptions","bindto","padding","createChartOptions","_width","_height","chartOffsetX","graphOffsetX","tooltipWidth","clientWidth","d3","mouse","xAxisHeight","onBottom","contents","eval","onrendered","_onrendered","_isOverriden","internal","generateDrawLine","lineIndices","isSub","$$","getPoints","generateGetLinePoints","yScaleGetter","getSubYScale","getYScale","xValue","subxx","xx","yValue","data_groups","axis_rotated","line_connectNull","defined","filterRemoveNull","subX","x0","y0","isLineType","data_regions","lineWithRegions","isStepType","convertValuesToStep","generateDrawArea","areaIndices","generateGetAreaPoints","value0","x1","y1","isAreaType","generate","closeOpenedTableResultsPanel","openTable","css","tableData","scrollPosition","_sort","field","order","sortedDataTable","mappedArr","valorA","valorB","th","offsetParent","scrollLeft","orderField","currentPanel","pbody","prevVal","currVal","clientHeight","toCheck","requestIsRendered","requestAnimationFrame","cancelAnimationFrame","chartElm","tableElm","infoElm","getTableContainer","unload","chartType","getChartSize","panelStyle","docWidth","minHeight","mediumWidth","minWidth","gradIds","xColumn","eleColumn","colors","tick","outer","dist","onresize","ele2","axes","rendered","createElementNS","svgDefsElement","xmlns","createLinearGradient","grad","setAttributeNS","stop0","stop50","stop100","d3Node","selectAll","empty","pattern","svgRect","chartSize","setMultilineLabels","ordinal","rangeRoundBands","textNode","each","d3text","words","rangeBand","xAxisNodeRect","yAxisNodeRect","elevationChartLabelsRAF","hasSize","xAxis","xAxisNode","_xAxisNodeRect","_yAxisNodeRect","getElevationByDataElem","dataElem","doneTime","distanceFormatted","openOn","_args","fnOpen","closeOn","row","exporter","ExcelExport","Save","CHART","serviceWorkerIsRequired","SW_URL","_swPromise","reg","installing","waiting","unsafeProtocol","isFrame","addMessageEventListener","cacheName","eventName","MESSAGE","messageHandler","sw","ACTION","Scale","getScale","setScreenSize","metersPerDegree","getDpi","dpi","ScaleBar","ScaleSelector","scales","setScale","performance","SearchType","_featureTypes","_throwConfigError","getFeatureTypes","toFilter","type_featureType","type_renderFeatureType","renderFeatureType","isFeatureOfThisType","getStyleByFeatureType","getColor","geomType","getValue","gType","getSuggestionListHead","headerData","suggestionListHead","featureTypes","liHTML","getSuggestionListElements","areSame","getUnique","inputArray","outputArray","parseFeatures","valueToAdd","outputProperties","dataIdProperties","dataIdProperty","strFormat","outputFormatLabel","compareData","tcFormat","toCamelCase","isThere","intoResults","dataRole","featureNS","featurePrefix","getPattern","bindRootFilterNode","filtersArr","dataT","rootFilters","rootCfg","getFilterNode","filterNode","queryProperties","firstQueryWord","queryWord","_LIKE_PATTERN","role","getSearchTypeByRole","getIsLikeNode","toEscape","getFunctionStrMatches","propertyValue","filterByMatch","_MATCH_PATTERN","pName","getFilter","multiL","secondQueryWord","thirdQueryWord","filters","MAXFEATURES","OUTPUTFORMAT","TYPENAME","_getProperties","_properties","_ids","removeDuplicates","PROPERTYNAME","FILTER","getGoToFilter","_id","dLayer","transformFilter","UTMX","UTMY","UTMX_LABEL","UTMY_LABEL","LON_LABEL","LAT_LABEL","MUN","POL","PAR","MUN_LABEL","POL_LABEL","PAR_LABEL","_search","EMPTY_RESULTS_LABEL","EMPTY_RESULTS_TITLE","OUTBBX_LABEL","WFS_TYPE_ATTRS","availableSearchTypes","suggestionRoot","searchWeight","labelProperty","idProperty","CATAST_Pol_ParcelaUrba","CATAST_Pol_ParcelaRusti","CATAST_Pol_ParcelaMixta","getCadastralRef","goTo","goToCadastralRef","goToIdFormat","idPropertiesIdentifier","goToCoordinates","_text","QUERYWORD","FIRST","SECOND","THIRD","getStringPattern","stringPatternToCheck","stringPatternsValidators","s_or_t","goToStringPattern","strokeLinecap","strokeDashstyle","labelRotationKey","fontWeight","st","getRoad","goToRoad","getMilestone","goToMilestone","getRootLabel","rootLabel","CQL_FILTER","totalFeatures","rootType","addAllowedSearchType","queryableFeatures","UTMX_LEN","UTMY_LEN","interval","NORMAL_PATTERNS","ROMAN_NUMBER","ABSOLUTE_NOT_DOT","ABSOLUTE","highlighting","highlighted","strReg","normalizedLastPattern","querys","separatorChar","_strReg","rex","selectionCallback","_target","_goToResult","sortAlphaNum","reA","reN","AInt","BInt","aA","bA","aN","bN","sortByRoleAndAlphabet","sortByRoot","sort_","aRoot","bRoot","dataRoles","resultsList","liDataRoles","layerStyleFN","getFeatureType","idFeature","getSearchTypeByFeature","extractValue","declutter","searchDelay","_research","placeHolder","instructions","which","retryTimeout","lastpress","criteria","onKeydown","ctrlKey","altKey","shiftKey","keyCode","activeElement","sibling","nextElementSibling","getNextSibling","previousElementSibling","getPreviousSibling","getElementOnSuggestionList","searchRequestsResults","cleanMap","getMunicipalities","_municipalitiesPromise","xLabel","yLabel","getPoint","insideLimit","getLabel","_pattern","matcher","mun","munLabel","pol","par","removePunctuation","tsp","getPortal","formatStreetNumber","bindRoot","spt","tnsp","getStreet","revS","fs","si","_criteria","isPortal","_cr","inPortal","criteriaRev","chs","_limit","sp","snp","normalizedCriteria","isCheck","check","ch","addRoot","indicatedRoot","newResult","getObjectsFromStringToQuery","allowedRoles","tests","requestToWFS","signal","doneCallback","toQuery","requestsQuery","combinedCriteria","toQueryCombined","pendingSuggestionLstHead","filterRoles","dataToQuery","pendingHeaderRoles","roles","responseToSuggestionLstElmt","searchRequestsAbortController","outputProperty","abort","onAbort","AbortController","toRender","renderingEnd","renderResultsOnSuggestionList","_b","manageLoadingByDataRole","loadingElemOfDataRole","indexLoadingElemOfDataRole","headerElemOfDataRole","toConcat","srrElm","_dataRole","setQueryableFeatures","setShowPopup","customSearchType","dr","onFeaturesAdd","layerEventHandler","inner","emptyResultHTML","drawPoint","promiseTemp","isMapGeo","getIntersectsBounds","geoCoordsLabel","parsedCoords","localeDecimalSeparator","searchText","searchResult","sharedSearchResult","splitRemoveWhiteSpaces","_arr","_value","defineProperty","enumerable","searchString","subjectString","isFinite","lastIndex","_selectInputField","_unselectInputField","Share","MOBILEFAV","NAVALERT","queryCommandSupported","dataOriginalTitle","_selectInputField2","execCommand","_unselectInputField2","MAILTO_MAX_LENGTH","qrContainer","openSocialMedia","win","process","w","waText","bookmarkURL","bookmarkTitle","sidebar","addPanel","opera","print","external","AddFavorite","getLocation","IFRAME_WIDTH","IFRAME_HEIGHT","featureToShow","FEATURE_PARAM","paramFeatureLayer","generateIframe","shareIconContainer","textboxes","buttons","tb","shorten","shortened","removeAllRanges","addRange","createRange","StreetView","_sv","_mapActiveControl","viewDiv","_startLonLat","gMapsUrl","dispatchCanvasResize","onTransitionend","ThreeDMarker","requestRender","mapDiv","fnCallBackSV","drag","Draggabilly","containment","getMapDiv","btnRect","dragRect","mapRect","setPosition","closeView","_coords","Coordinates2DTo3D","pickedFeature","oldCoords","lng","geogCrs","ondrop","lonLat","ondrag","setMarker","sv","getPov","setDraggable","google","maps","mapsLonLat","LatLng","StreetViewService","getPanorama","preference","StreetViewPreference","BEST","svPanoramaData","svStatus","StreetViewStatus","OK","ZERO_RESULTS","_transitioning","svOptions","pov","pitch","zoom","fullscreenControl","zoomControlOptions","ControlPosition","LEFT_TOP","panControlOptions","imageDateControl","setVisible","StreetViewPanorama","addListener","managePOVChange","getCameraData","_self$ThreeDMarker","setImage","pegmanMarker","changeMarker","getStatus","zIndexMap","ovmapW","ovmapH","zIndexView","endProcess","transitionend","onExternalServiceAdded","selectorCSS","_getCheckbox","ui","rootCheck","indeterminate","isAllChildrenVisibles","isAllChildrenHidden","someChecked","someNotChecked","someIndeterminated","setVisibilityByScale","leaf","notCollapsedNodesUid","previousValue","node_","notCollapsedUid","isHidden","newDiv","writeTitle","onClick","selectTab","controlIndex","nextControlIndex","ThreeDView","ThreeD","browserSupportWebGL","removeDisabled","WebGLRenderingContext","webglOptions","stencil","failIfMajorPerformanceCaveat","gl","isSlower","WFSEdit","showsOriginalFeatures","showOriginalFeatures","highlightsAdded","highlightsModified","highlightsRemoved","highlightChanges","getBeforeEditLayerStyleFunction","getBeforeEditLayerStyle","newFeatureIdNumber","setSyncState","_saveBtn","isSyncing","wfsLayer","isLayerCropped","_recropBtn","setChangesButtonsState","_discardBtn","setChangedState","isChanged","storagePrefix","getStoragePrefix","storeFeature","provId","deleteFeature","getLayerStoreID","getAddedStoragePrefix","LOCAL_STORAGE_ADDED_KEY_PREFIX","getModifiedStoragePrefix","LOCAL_STORAGE_MODIFIED_KEY_PREFIX","getRemovedStoragePrefix","LOCAL_STORAGE_REMOVED_KEY_PREFIX","getLayerTitle","_layerSelect","wfsLayers","replaceAll","prevLayer","_editPromise","getPrototypeOf","addedFeaturesLayer","modifiedFeaturesLayer","removedFeaturesLayer","beforeEditLayer","newFeatures","serializable","_storeFeatureAdd","fid","storeSuccess","storeFailure","storedFeature","_createAuxFeature","_storeFeatureRemove","getEditableLayer","cacheLayer","_removingLayer","wmsLayer","editLayers","_layerDiv","viewToolsDiv","_editingWatch","_beforeEditLayerWatch","_addedWatch","_modifiedWatch","_removedWatch","highlightAdded","highlightModified","highlightRemoved","colorRegExp","onColorClick","onColorChange","newColor","getLegendImage","addedColorInputId","modifiedColorInputId","removedColorInputId","layerTitle","discardEdits","editedFeatures","featuresOutside","appendOption","setNewLayer","editableLayer","_enableEditSerialization","removedStoragePrefix","gfUrl","getGetFeatureUrl","dftUrl","_addAuxLayersToMap","beLayer","onLayerUpdate","afLayer","mfLayer","rfLayer","getAddedFeaturesLayerStyle","getModifiedFeaturesLayerStyle","getRemovedFeaturesLayerStyle","setComplexGeometry","previousLayer","removePromises","notEditableErrorMsg","fullLayerName","colonIdx","getWFSFeatureType","shortLayerName","wfsLayerOptions","isLayerEdited","baseTitle","aflIsOld","mflIsOld","rflIsOld","featurePromises","removedFeature","modifiedFeature","addedFeature","addedStoragePrefix","modifiedStoragePrefix","readFeature","addPromise","idNumber","newFeat","modified","unmodifiedFeature","_response","beLayerFeatures","getStyleFromFeatureType","getNegativeColor","rgba","getRGBA","dash","colorizeLayer","addedCustomColor","modifiedCustomColor","removedCustomColor","WFSQuery","highlightStyles","highLightStyles","geometryPanel","deletedFeatures","loadingCssClass","hiddenCssClass","spatialCssClass","timer","timerAutocomplete","filterByOperation","eq","Ctor","neq","gt","lt","gte","lte","starts","ends","btw","nbtw","within","null","_cache","queried","_getStyles","_getHighLightStyles","checkInput","dateInputMask","inputMaskNumber","_createDateMask","txtBox","IMask","mask","blocks","MaskedRange","to","maxLength","_destroyDateMask","_internalGetDataTypes","_manageComplexTypes","nextSibling","firstElementChild","_changeAttributeEvent","combo","offsetTop","numericSection","textSection","dateSection","geomSection","whereSection","opSection","valueField","destroyNumberMask","signed","thousandsSeparator","padFractionalZeros","normalizeZeros","radix","_autocompleteConstructor","_renderFilterConditions","getForm","whereDiv","isSpatial","opText","_abbr","valueToShow","_valueToShow","getTemplateObjFromFilter","showGeometryPanel","removeFilter","_validate","masked","isComplete","_showMessage","checkValidity","_getLayerName","_createResultPanel","_layerName","ccontainer","panelOptions","_self","_downloadClickHandler","beginProcess","Message","messageDiv","_getPossibleValues","_capabilities","pv","cv","listCtrl","_highlightText","_select","_addFeature","formTemplatePromise","filterTemplatePromise","geometryTemplatePromise","modalDialog","tr","tr2","styleFN","_default","WFSCapabilities","_cache$current","_onFeaturesUpdate","_setQueryToSearch","title_separator","_onBeforeApplyQuery","_sendQuery","definitiveFilters","clearFilters","sendQuery","validateQuery","wms","_getQueryToSearch","queryResult","sharedQueryToSearch","manageDescribeFeature","layername","dataTypes","trClass","tdClass","thClass","tabla","col","dataType","tdNumeric","celdasHoja","celda","chkBox","notDeleted","drawControl","ctlContainer","op","renderForm","operators","ipt","createFilterCondition","onGeomClick","unmaskedValue","toLocaleDateString","timeZone","dotOrComma","_getValueToShow","matchCase","renderQueryForm","Get","selectedIndex","chooseLeafLayer","tbody","SITNA","_state$filter","getCapabilities","renderModalDialog","comboAttr","conjuncion","_filters","_opAbbr","_getFilterAbbr","_makeInputField","capabilitiesPromise","coef","removedFilter","_f$geometry","_f$geometry$layer","_exec","_exec$groups","expression","LowerBoundary","_exec2","_exec2$groups","_processTemplates","_getNativeListener","_onInternal","divOption","BasicMap","mapOption","mapElement","mutationList","childList","disconnectedCallback","unregister","_processTemplates2","_onInternal2","_getNativeListener2","_findLayerElement","_shouldBeDelAllVisible","_getElligibleLayersNumber","_moveLayer","layerItems","targetItem","elementTemplatePromise","singleTemplatePromise","groupTemplatePromise","groupNodeTemplatePromise","Sortable","_sortable","animation","onSort","swap","sortableItems","toArray","listItems","elmIdx","_findLayerElement2","inputRangeListener","CLICKEVENT","isExpanded","alreadyExists","regExpConstr","layerIdRoot","prevLi","uniquePaths","hasExtent","hasInfo","getLegendImgByPost","isGroup","typeElm","zoomBtn","tip","typeElmRect","offsetLeft","referenceLi","elligibleLayersNum","_getElligibleLayersNumber2","numElm","emptyElm","contentElm","numberElm","nChildren","divElement","_shareCtl","onShowShareDialog","shareDiv","onCloseShareDialog","isItemToolContainer","itemTools","getItemUIElements","getToolContainer","itemElement","lastButton","regEx","tagName_","_defaultNSURL","_defaultPrefixNS","_wfsPrefixNS","_fieldTitle","_wfsNSURL","_wfs2prefixNS","_wfs2NSURL","_wfs2FieldTitle","_escapeAttrName","_wfs2EscapeAttrName","NSURL","writeInnerCondition_","wfsVersion","writeFilterCondition_","readFilterCondition_","setTagName","readInnerCondition_","_conditions","Function","opt_matchCase","lowerBoundary","upperBoundary","functionName","opt_wildCard","opt_singleChar","opt_escapeChar","writeInnerArrayCondition_","UpperBoundary","Pattern","fmt","escapeChar","singleChar","wildCard","fieldTitle","gml","_node$querySelector","_node$querySelector2","filterType","_node$querySelector3","_node$querySelector4","doc","_paramsToText","opt_srsName","axisOrientation_","getAxisOrientation","BBOX","currentLocaleKey","uidCounter_","getUid","ol_uid","disposed","dispose","disposeInternal","numberSafeCompareFunction","linearFindNearest","direction","reverseSubArray","begin","tmp","arr1","arr2","len1","TRUE","FALSE","VOID","FIREFOX","SAFARI_BUG_237906","WEBKIT","DEVICE_PIXEL_RATIO","WORKER_OFFSCREEN_CANVAS","WorkerGlobalScope","OffscreenCanvas","IMAGE_DECODE","PASSIVE_EVENT_LISTENERS","assertion","errorCode","transformStringDiv","tmp_","multiply","transform1","transform2","b1","c1","d1","e1","f1","b2","c2","d2","e2","f2","compose","dx1","dy1","sx","sy","dx2","dy2","makeInverse","mat","det","transformString","createEmpty","extendCoordinate","opt_extent","closestSquaredDistanceXY","containsCoordinate","containsXY","containsExtent","extent1","extent2","coordinateRelationship","minX","minY","maxX","maxY","relationship","Relationship","createOrUpdate","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extendFlatCoordinates","extendXY","forEachCorner","getWidth","getHeight","getCorner","corner","getForViewAndSize","getRotatedViewport","x2","y2","x3","y3","cosRotation","sinRotation","xCos","xSin","yCos","ySin","getIntersection","intersection","scaleFromCenter","deltaX","deltaY","transformFn","opt_stops","xs","ys","_boundingExtentXYs","wrapX","projection","projectionExtent","canWrapX","worldWidth","clamp","cosh","exp","log2","LOG2E","squaredSegmentDistance","angleInDegrees","lerp","decimals","HEX_COLOR_RE_","NAMED_COLOR_RE_","asString","fromNamed","rgb","fromString","cacheSize","hasAlpha","fromStringInternal_","asArray","cache_","cacheSize_","maxCacheSize_","canExpireCache","expire","iconImage","hasListener","getKey","maxCacheSize","shared","IconImageCache","propagationStopped","defaultPrevented","var_sources","output","getValues","opt_target","eventTarget_","pendingRemovals_","dispatching_","listeners_","listenersForType","propagate","dispatching","pendingRemovals","handleEvent","getListeners","opt_type","BLUR","CLEAR","CONTEXTMENU","DBLCLICK","DRAGENTER","DRAGOVER","FOCUS","KEYDOWN","KEYPRESS","LOAD","RESIZE","TOUCHMOVE","WHEEL","listen","opt_this","opt_once","eventsKey","listenOnce","unlistenByKey","un","revision_","EventType","getRevision","onceInternal","ol_key","unInternal","unByKey","Observable","opt_values","values_","setProperties","getKeys","getProperties","hasProperties","notify","ObjectEvent","ObjectEventType","addChangeListener","removeChangeListener","opt_silent","applyProperties","unset","background_","background","maxResolution","minZoom","maxZoom","className_","state_","getBackground","getLayerState","opt_managed","managed","getZIndex","getVisible","getMaxResolution","getMinResolution","getMinZoom","getMaxZoom","getLayersArray","opt_array","getLayerStatesArray","opt_states","getSourceState","setBackground","opt_background","setMaxResolution","setMinResolution","setMaxZoom","setMinZoom","setZIndex","zindex","PRERENDER","POSTRENDER","PRECOMPOSE","POSTCOMPOSE","RENDERCOMPLETE","inView","viewState","baseOptions","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","renderer_","handleSourcePropertyChange_","setSource","states","getRenderSource","getState","handleSourceChange_","pixel","frameState","layerRenderer","getRenderer","prepareFrame","renderFrame","unrender","setMapInternal","getMapInternal","layerStatesArray","arrayLayerState","createRenderer","hasRenderer","Base","closestOnCircle","circle","closestOnSegment","segment","along","coordinate1","coordinate2","cosAngle","sinAngle","worldsAway","getWorldsAway","opt_sourceExtentWidth","sourceExtentWidth","map_","dispatchRenderEvent","calculateMatrices2D","coordinateToPixelTransform","pixelToCoordinateTransform","forEachFeatureAtCoordinate","hitTolerance","checkWrapped","thisArg","layerFilter","thisArg2","translatedCoordinate","offsets","layerStates","numLayers","tmpCoord","getWrapX","distanceSq","forEachLayerAtPixel","hasFeatureAtCoordinate","scheduleExpireIconCache","postRenderFunctions","expireIconCache","opt_inversePixelTransform","opt_frameState","opt_context","inversePixelTransform","CLASS_HIDDEN","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","getFontParameters","fontSpec","lineHeight","families","family","createCanvasContext2D","opt_width","opt_height","opt_canvasPool","opt_Context2DSettings","releaseCanvas","marginLeft","marginRight","marginTop","marginBottom","replaceNode","newNode","oldNode","removeNode","removeChildren","lastChild","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineJoin","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","checkedFonts","measureFont","measureElement","measureContext","textHeights","registerFont","referenceWidth","referenceFonts","isAvailable","fontStyle","available","referenceFont","measureTextWidth","fonts","clearInterval","setInterval","measureTextHeight","metrics","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","measureAndCacheTextWidth","drawImageOrLabel","labelOrImage","originX","originY","setTransform","contextInstructions","executeLabelInstructions","restore","fontChangeListenerKey_","redrawText","element_","children_","renderedVisible_","declutterLayers","previousElement","layerIndex","sourceState","renderDeclutter","oldChildren","getDataAtPixel","opt_element","opt_index","opt_options","unique_","unique","array_","assertUnique_","updateLength_","getArray","insertAt","CollectionEvent","CollectionEventType","removeAt","setAt","opt_except","layersListenerKeys_","listenerKeys_","handleLayersChanged_","setLayers","handleLayerChange_","handleLayersAdd_","handleLayersRemove_","layersArray","registerLayerListeners_","GroupEvent","listenerKeys","LayerGroup","handleLayerGroupAdd_","handleLayerGroupRemove_","collectionEvent","currentLayers","ownLayerState","defaultZIndex","originalEvent","opt_dragging","opt_activePointers","pixel_","coordinate_","activePointers","getEventPixel","SINGLECLICK","POINTERDRAG","POINTERMOVE","POINTERDOWN","POINTERUP","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","POINTERCANCEL","moveTolerance","clickTimeoutId_","emulateClicks_","dragging_","dragListenerKeys_","moveTolerance_","down_","activePointers_","trackedTouches_","pointerdownListenerKey_","handlePointerDown_","originalPointerMoveEvent_","relayedListenerKey_","relayMoveEvent_","boundHandleTouchMove_","handleTouchMove_","emulateClick_","pointerEvent","newEvent","updateActivePointers_","pointerId","handlePointerUp_","isMouseActionButton_","getOwnerDocument","handlePointerMove_","getRootNode","isMoving_","MOVESTART","MOVEEND","LOADSTART","LOADEND","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","elements","priorities","siftUp_","elementKey","enqueue","priority","siftDown_","getCount","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isEmpty","isKeyQueued","isQueued","startIndex","lIndex","rIndex","smallerChildIndex","parentIndex","reprioritize","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","handleTileChange","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","getTilesLoading","TileState","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","Units","RADIANS","FEET","PIXELS","TILE_PIXELS","USFEET","CENTER","RESOLUTION","ROTATION","DEFAULT_TILE_SIZE","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation","global_","global","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","getUnits","getWorldExtent","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setWorldExtent","setGetPointResolution","getPointResolutionFunc","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","PROJECTIONS","EPSG3857Projection","fromEPSG4326","opt_output","opt_dimension","dimension","toEPSG4326","atan","opt_axisOrientation","EPSG4326Projection","transforms","destination","sourceCode","destinationCode","DEFAULT_RADIUS","opt_radius","lat1","lat2","deltaLatBy2","deltaLonBy2","showCoordinateWarning","disableCoordinateWarning","opt_disable","cloneTransform","identityTransform","addProjection","projectionLike","opt_units","pointResolution","getter","getTransformFromProjections","vertices","addEquivalentProjections","projections","addProjections","createProjection","defaultCode","createTransformFromCoordinateTransform","coordTransform","pointLength","equivalent","projection1","projection2","equalUnits","sourceProjection","destinationProjection","transformFunc","getTransform","transformExtent","projections2","forwardTransform","inverseTransform","userProjection","toUserCoordinate","destProjection","toUserResolution","sourceUnits","userUnits","createSafeCoordinateTransform","sourceProj","destProj","transformed","sourceExtent","createExtent","onlyCenter","smooth","opt_isMoving","opt_centerShift","viewWidth","viewHeight","shiftX","shiftY","none","getViewportClampedResolution","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","createMinMaxResolution","opt_smooth","opt_maxExtent","opt_showFullExtent","cappedMaxRes","easeIn","easeOut","inAndOut","linear","XYZ","transform2D","opt_dest","dest","anchorX","anchorY","tmpTransform","lastResult","lastArgs","lastThis","called","extentRevision_","simplifiedGeometryMaxMinSquaredTolerance","simplifiedGeometryRevision","simplifyTransformedInternal","revision","squaredTolerance","opt_transform","getSimplifiedGeometry","applyTransform","nextArgs","simplifyTransformed","closestPointXY","closestPoint","minSquaredDistance","getClosestPoint","opt_closestPoint","intersectsCoordinate","computeExtent","returnOrUpdate","rotate","opt_sy","opt_anchor","simplify","intersectsExtent","inCoordinates","outCoordinates","pixelExtent","projectedExtent","getFirstCoordinate","getLastCoordinate","simplifiedGeometry","getSimplifiedGeometryInternal","getStride","setFlatCoordinates","getStrideForLayout","opt_layout","setLayout","nesting","getLayoutForStride","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","assignClosestPoint","maxDelta","opt_tmpPoint","squaredDistance","tmpPoint","assignClosestArrayPoint","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","opt_ends","douglasPeucker","simplifiedFlatCoordinates","simplifiedOffset","maxSquaredDistance","douglasPeuckerArray","simplifiedEnds","snap","quantize","quantizeArray","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","opt_coordinatess","inflateMultiCoordinatesArray","endss","opt_coordinatesss","coordinatesss","linearRing","twiceArea","linearRings","maxDelta_","maxDeltaRevision_","LinearRing","linearRingContainsExtent","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","pointX","maxSegmentLength","segmentLength","intersectsLineString","coordinatesExtent","point1","point2","startRel","endRel","startX","startY","endX","endY","slope","intersectsSegment","intersectsLinearRing","intersectsLinearRingArray","linearRingIsClockwise","linearRingsAreOriented","opt_right","isClockwise","orientLinearRings","orientLinearRingsArray","ends_","flatInteriorPointRevision_","flatInteriorPoint_","orientedRevision_","orientedFlatCoordinates_","appendLinearRing","getOrientedFlatCoordinates","getEnds","getFlatInteriorPoint","flatCenter","getInteriorPoint","getLinearRingCount","getLinearRing","getLinearRings","fromExtent","opt_sides","opt_angle","sides","arrayLength","startAngle","hints_","animations_","updateAnimationKey_","projection_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","nextCenter_","nextResolution_","nextRotation_","cancelAnchor_","applyOptions_","ViewProperty","resolutionConstraintInfo","resolutionConstraint","defaultMaxZoom","defaultZoomFactor","zoomFactor","multiWorld","smoothResolutionConstraint","projExtent","constrainOnlyCenter","constrainResolution","capped","createSnapToResolutions","defaultMaxResolution","defaultMinResolution","power","opt_minResolution","minZoomLevel","cappedZoomLevel","zoomLevel","createSnapToPower","constraint","createResolutionConstraint","maxResolution_","minResolution_","zoomFactor_","resolutions_","padding_","minZoom_","centerConstraint","smoothExtentConstraint","createCenterConstraint","rotationConstraint","enableRotation","constrainRotation","opt_tolerance","theta","createRotationConstraint","constraints_","setCenterInternal","setZoom","oldPadding","newPadding","offsetX","offsetY","getUpdatedOptions_","newOptions","getZoom","getCenterInternal","var_args","isDef","getAnimating","resolveConstraints","animateInternal","animationCount","series","easing","sourceCenter","targetCenter","sourceResolution","targetResolution","getResolutionForZoom","sourceRotation","targetRotation","isNoopAnimation","setHint","ViewHint","updateAnimations_","animationCallback","getInteracting","cancelAnimations","more","seriesComplete","elapsed","fraction","progress","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","currentCenter","opt_rotation","setViewportSize","opt_size","getConstraints","getConstrainResolution","getHints","opt_hints","calculateExtent","calculateExtentInternal","getViewportSizeMinusPadding_","getZoomForResolution","setConstrainResolution","getResolutionForExtent","getResolutionForExtentInternal","getResolutionForValueFunction","opt_power","getConstrainedResolution","getValueForResolutionFunction","logPower","reducedSize","calculateCenterOn","nextCenter","nextResolution","nextRotation","nearest","baseLevel","geometryOrExtent","fitInternal","rotatedExtentForGeometry","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","rotatedExtent","centerRot","centerX","centerY","getConstrainedCenter","centerOn","centerOnInternal","calculateCenterShift","centerShift","shiftedCenter","adjustCenter","deltaCoordinates","adjustCenterInternal","adjustResolution","adjustResolutionInternal","isMoving","newResolution","adjustZoom","adjustRotation","adjustRotationInternal","newRotation","hint","opt_doNotCancelAnims","opt_forceMoving","newCenter","opt_duration","opt_resolutionDirection","beginInteraction","endInteraction","endInteractionInternal","opt_targetResolution","getConstrainedZoom","targetZoom","opt_direction","targetRes","hasArea","toSize","removeLayerMapProperty","setLayerMapProperty","optionsInternal","keyboardEventTarget","interactions","overlays","layerGroup","MapProperty","createOptionsInternal","renderComplete_","loaded_","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","pixelRatio_","pixelRatio","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","renderFrame_","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","overflow","overlayContainer_","pointerEvents","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","targetChangeHandlerKeys_","overlays_","overlayIdIndex_","postRenderFunctions_","tileQueue_","getTilePriority","handleTileChange_","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","viewOptions","addOverlayInternal_","interaction","addInteraction","getInteractions","getLayerGroup","handleLayerAdd_","addOverlay","overlay","getOverlays","setTarget","forEachFeatureAtPixel","getCoordinateFromPixelInternal","getFeaturesAtPixel","getAllLayers","addLayersFrom","hasFeatureAtPixel","getEventCoordinate","getEventCoordinateInternal","viewportPosition","eventPosition","getTarget","getTargetElement","getView","getOverlayById","getLoadingOrNotReady","renderer","viewCoordinate","getPixelFromCoordinateInternal","getSize","getOverlayContainer","getOverlayContainerStopEvent","targetElement","ownerDocument","tileSourceKey","tileCenter","tileResolution","wantedTiles","browserEvent","mapBrowserEvent","handleMapBrowserEvent","interactionsArray","getActive","handlePostRender","tileQueue","hints","viewHints","lowOnFrameBudget","MapEventType","defaultView","handleViewPropertyChanged_","updateViewportSize_","handleLayerRemove_","isRendered","renderSync","handleFontsChanged","removeControl","removeInteraction","removeOverlay","previousFrameState","declutterTree","usedTiles","mapId","renderTargets","nextExtent","setLayerGroup","oldLayerGroup","getClientRects","target_","mapEvent","ulElement_","collapsed_","userCollapsed_","overrideCollapsible_","collapsible","collapsible_","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","label_","activeLabel","toggleButton_","handleClick_","cssClasses","renderedAttributions_","collectSourceAttributions_","lookup","visibleAttributions","attributionGetter","getAttributions","attributions","getAttributionsCollapsible","setCollapsible","updateElement_","handleToggle_","getCollapsible","setCollapsed","getCollapsed","compassClassName","callResetNorth_","resetNorth","duration_","autoHide_","autoHide","rotation_","resetNorth_","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","createTextNode","outElement","zoomByDelta_","currentZoom","newZoom","zoomByDelta","setActive","delta_","stopEvent","handleDownEvent","handleDragEvent","handleMoveEvent","handleUpEvent","stopDown","handlingDownUpSequence","targetPointers","getPointerCount","updateTrackedPointers_","handledUp","handled","pass","altShiftKeysOnly","metaKey","focusWithTabindex","always","mouseActionButton","never","singleClick","noModifierKeys","shiftKeyOnly","targetNotEditable","isContentEditable","mouseOnly","pointerType","primaryAction","isPrimary","kinetic_","kinetic","lastCentroid","lastPointersCount_","panning_","condition_","onFocusOnly","noKinetic_","centroid","getAngle","centerpx","Pointer","lastAngle_","geometry_","startPixel_","endPixel_","render_","startPixel","endPixel","px","setPixels","createOrUpdateGeometry","DragBoxEventType","box_","minArea_","minArea","onBoxEnd","boxEndCondition_","boxEndCondition","defaultBoxEndCondition","DragBoxEvent","completeBox","out_","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","KeyCode","mapUnitsDelta","pan","charCode","decay","minVelocity","delay","decay_","minVelocity_","delay_","points_","angle_","initialVelocity_","firstIndex","Mode","totalDelta_","lastDelta_","timeout_","useAnchor_","useAnchor","constrainResolution_","lastAnchor_","startTime_","timeoutId_","mode_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","endInteraction_","wheelEvent","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","timeLeft","handleWheelZoom_","setMouseAnchor","pointerOptions","anchor_","rotating_","rotationDelta_","threshold_","threshold","rotationDelta","touch0","touch1","lastDistance_","lastScaleDelta_","scaleDelta","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","keyboard","shiftDragZoom","zoomOptions","rotateOptions","attributionOptions","Composite","insertFirst","autoPan","autoPanAnimation","autoPanMargin","transform_","mapPostrenderListenerKey","handleElementChanged","handleMapChanged","handleOffsetChanged","handlePositionChanged","handlePositioningChanged","setElement","setOffset","setPositioning","positioning","getElement","getOffset","getPositioning","updatePixelPosition","performAutoPan","panIntoView","opt_panIntoViewOptions","getRect","overlayRect","panIntoViewOptions","myMargin","offsetRight","offsetBottom","centerPx","newCenterPx","panOptions","box","pageXOffset","pageYOffset","updateRenderedPosition","posX","posY","msTransform","opt_precision","numberString","decimal","MAX_RATIO","MIN_RATIO","boundHandleRotationChanged_","handleRotationChanged_","rotateWithView_","rotateWithView","viewExtent_","ovmapDiv_","view_","ovmap_","ControlledMap","ovmap","boxSizing","boxOverlay_","overlayBox","mousePosition","endMoving","oldMap","oldView","unbindView_","handleMapPropertyChange_","bindView_","resetExtent_","updateBoxAfterOvmapIsRendered_","newView","validateExtent_","ovmapSize","ovextent","topLeftPixel","bottomRightPixel","boxWidth","boxHeight","ovmapWidth","ovmapHeight","recenter_","ovview","steps","LN2","updateBox_","ovresolution","ovmapPostrenderKey_","getRotateWithView","setRotateWithView","getOverviewMap","UNITS_PROP","LEADING_DIGITS","DEFAULT_DPI","bar","innerElement_","viewState_","minWidth_","maxWidth_","renderedWidth_","renderedHTML_","handleUnitsChanged_","setUnits","scaleBar_","scaleBarSteps_","scaleBarText_","dpi_","setDpi","pointResolutionUnits","nominalCount","decimalCount","previousCount","previousWidth","previousDecimalCount","createScaleBar","mapScale","getScaleForResolution","scaleSteps","stepWidth","createStepText","isLast","lengthString","handleZoomToExtent","Direction","currentResolution_","direction_","heightLimit_","widthLimit_","startX_","startY_","thumbSize_","sliderInitialized_","thumbElement","containerElement","handleDraggerStart_","handleDraggerDrag_","handleDraggerEnd_","handleContainerClick_","initSlider_","containerWidth","containerHeight","containerStyle","thumb","thumbStyle","thumbWidth","thumbHeight","relativePosition","getRelativePosition_","getResolutionForPosition_","setThumbPosition_","getPositionForResolution_","opt_geometryOrProperties","id_","geometryName_","style_","styleFunction_","geometryChangeKey_","handleGeometryChanged_","setGeometryName","getGeometryName","getStyleFunction","handleGeometryChange_","opt_style","createStyleFunction","appendPoint","multiPoint","interpolatePoint","cumulativeLengths","haystack","needle","opt_comparator","mid","cmp","comparator","low","high","binarySearch","lineStringCoordinateAtM","extrapolate","lo","hi","m0","lineStringLength","flatMidpoint_","flatMidpointRevision_","appendCoordinate","lineString","LineString","forEachSegment","getCoordinateAtM","opt_extrapolate","getCoordinateAt","getFlatMidpoint","lineStrings","appendLineString","multiLineString","MultiLineString","opt_interpolate","lineStringsCoordinateAtM","getLineString","getLineStrings","getFlatMidpoints","midpoints","intersectsLineStringArray","opt_endss","endss_","flatInteriorPointsRevision_","flatInteriorPoints_","polygons","appendPolygon","newEndss","multiPolygon","multiArrayMaxSquaredDelta","assignClosestMultiArrayPoint","linearRingssContainsXY","linearRingss","getEndss","getFlatInteriorPoints","interiorPoints","getInteriorPointsOfMultiArray","getInteriorPoints","linearRingssAreOriented","simplifiedEndss","quantizeMultiArray","getPolygon","prevEnds","getPolygons","intersectsLinearRingMultiArray","deflateMultiCoordinatesArray","lastEnds","setCenterAndRadius","getRadiusSquared_","opt_geometries","geometries_","changeEventsKeys_","listenGeometriesChange_","unlistenGeometriesChange_","geometryCollection","GeometryCollection","setGeometries","getGeometries","cloneGeometries","getGeometriesArray","getGeometriesArrayRecursive","geometriesArray","simplifiedGeometries","simplified","simplifiedGeometryCollection","setGeometriesArray","clonedGeometries","withCredentials","responseXML","featureProjection","readProjection","loadFeaturesXhr","dataProjection","defaultFeatureProjection","supportedMediaTypes","getReadOptions","adaptOptions","readGeometry","writeGeometry","transformExtentWithOptions","XML_SCHEMA_INSTANCE_URI","namespaceURI","qualifiedName","getDocument","getAllTextContent","normalizeWhitespace","getAllTextContent_","accumulator","Node","CDATA_SECTION_NODE","TEXT_NODE","nodeValue","isDocument","makeArrayExtender","valueReader","objectStack","makeArrayPusher","makeReplacer","makeObjectPropertyPusher","opt_property","localName","makeObjectPropertySetter","makeChildAppender","nodeWriter","makeArraySerializer","serializersNS","nodeFactory","serializers","makeSimpleNodeFactory","serialize","opt_nodeName","opt_namespaceURI","fixedNodeName","OBJECT_PROPERTY_NODE_FACTORY","makeSequence","orderedKeys","sequence","makeStructureNS","namespaceURIs","structure","opt_structureNS","structureNS","parseNode","parsersNS","parsers","pushParseAndPop","opt_keys","pushSerializeAndPop","xmlSerializer_","document_","implementation","createDocument","XMLSerializer","readFeatureFromDocument","readFeatureFromNode","readFeaturesFromDocument","readFeaturesFromNode","ELEMENT_NODE","readGeometryFromDocument","readGeometryFromNode","readProjectionFromDocument","readProjectionFromNode","writeFeatureNode","serializeToString","writeFeaturesNode","writeGeometryNode","GMLNS","ONLY_WHITESPACE_RE","schemaLocation","FEATURE_COLLECTION_PARSERS","namespace","readFeaturesInternal","ns","readFeatureElement","readGeometryOrExtent","GEOMETRY_PARSERS","readExtentElement","readGeometryElement","readFeatureElementInternal","asFeature","_content_","getAttributeNS","readPoint","readFlatCoordinatesFromNode","readMultiPoint","MULTIPOINT_PARSERS","readMultiLineString","MULTILINESTRING_PARSERS","readMultiPolygon","MULTIPOLYGON_PARSERS","pointMemberParser","POINTMEMBER_PARSERS","lineStringMemberParser","LINESTRINGMEMBER_PARSERS","polygonMemberParser","POLYGONMEMBER_PARSERS","readLineString","readFlatLinearRing","GEOMETRY_FLAT_COORDINATES_PARSERS","readLinearRing","readPolygon","flatLinearRings","FLAT_LINEAR_RINGS_PARSERS","GMLBase","RING_PARSERS","gmlNamespace","gml32Namespace","gmlnsCollectionParser","member","defaultPrefix","srsDimension","GML2CRS84","GML3CRS84","attName","readBoolean","readBooleanString","string","readDateTime","dateTime","readDecimal","readDecimalString","readPositiveInteger","readNonNegativeIntegerString","readString","writeBooleanTextNode","bool","writeStringTextNode","writeCDATASection","createCDATASection","writeDecimalTextNode","toPrecision","writeNonNegativeIntegerTextNode","nonNegativeInteger","MULTIGEOMETRY_TO_MEMBER_NODENAME","readFlatCoordinates","containerSrs","coordsGroups","readBox","BOX_PARSERS_","innerBoundaryIsParser","flatLinearRing","outerBoundaryIsParser","GEOMETRY_NODE_FACTORY_","multiSurface","surface","multiCurve","writeFeatureElement","writeGeometryElement","writeCurveOrLineString","createCoordinatesNode_","writeCoordinates_","segments","writeCurveSegments_","writeLineStringOrCurveMember","writeMultiCurveOrLineString","hasZ","curve","LINESTRINGORCURVEMEMBER_SERIALIZERS","MULTIGEOMETRY_MEMBER_NODE_FACTORY_","GEOMETRY_SERIALIZERS","getCoords_","writeSurfaceOrPolygon","rings","RING_SERIALIZERS","RING_NODE_FACTORY_","patches","writeSurfacePatches_","exteriorWritten","writeRing","writeLinearRing","opt_hasZ","writePoint","writeMultiPoint","POINTMEMBER_SERIALIZERS","writePointMember","writeMultiSurfaceOrPolygon","SURFACEORPOLYGONMEMBER_SERIALIZERS","writeSurfaceOrPolygonMember","writeEnvelope","ENVELOPE_SERIALIZERS","surface_","curve_","multiCurve_","multiSurface_","readMultiCurve","MULTICURVE_PARSERS","readFlatCurveRing","readMultiSurface","MULTISURFACE_PARSERS","curveMemberParser","CURVEMEMBER_PARSERS","surfaceMemberParser","SURFACEMEMBER_PARSERS","readPatch","PATCHES_PARSERS","readSegment","SEGMENTS_PARSERS","readPolygonPatch","readLineStringSegment","interiorParser","exteriorParser","readSurface","SURFACE_PARSERS","readCurve","CURVE_PARSERS","readEnvelope","ENVELOPE_PARSERS","readFlatPos","readFlatPosList","contextDimension","dim","writePos_","writePosList_","posList","writeFeatureMembers_","TRANSACTION_SUMMARY_PARSERS","TRANSACTION_RESPONSE_PARSERS","readTransactionSummary","readInsertResults","QUERY_SERIALIZERS","TRANSACTION_SERIALIZERS","writeUpdate","writeDelete","writeProperty","writeNative","FEATURE_PREFIX","XMLNS","OGCNS","WFSNS","FESNS","SCHEMA_LOCATIONS","GML_FORMATS","version_","featureType_","featureNS_","gmlFormat_","gmlFormat","schemaLocation_","setFeatureType","readTransactionResponse","readTransactionResponseFromDocument","readTransactionResponseFromNode","readFeatureCollectionMetadata","readFeatureCollectionMetadataFromDocument","readFeatureCollectionMetadataFromNode","writeGetFeature","viewParams","propertyNames","combineBboxAndFilter","completeFilter","opt_filter","bboxFilter","and","writeTransaction","baseObj","gmlOptions","createTransactionRequest","serializeTransactionRequest","nativeElements","OGC_FID_PARSERS","fidParser","INSERT_RESULTS_PARSERS","writeOgcFidFilter","getTypeName","pair","nativeElement","vendorId","safeToIgnore","GETFEATURE_SERIALIZERS","writeQuery","writeDuringFilter","writeLogicalFilter","writeNotFilter","writeBboxFilter","writeSpatialFilter","writeDWithinFilter","writeComparisonFilter","writeIsNullFilter","writeIsBetweenFilter","writeIsLikeFilter","typeNameAttr","getFilterNS","writeFilterCondition","writePropertyName","writeExpression","timePeriod","writeTimeInstant","writeLiteral","timeInstant","timePosition","readFeatureFromText","readFeaturesFromText","readGeometryFromText","readProjectionFromText","writeFeatureText","writeFeaturesText","writeGeometryText","GeometryConstructor","EMPTY","TokenType","wktTypeLookup","index_","isAlpha_","isNumeric_","opt_decimal","isWhiteSpace_","nextChar_","nextToken","readNumber_","readText_","scientificNotation","lexer","lexer_","token_","layout_","consume_","isTokenType","isMatch","parseGeometry_","parseGeometryLayout_","dimToken","dimInfo","parseGeometryCollectionText_","formatErrorMessage_","parsePointText_","parsePoint_","parseLineStringText_","parsePointList_","parsePolygonText_","parseLineStringTextList_","parseMultiPointText_","parsePointTextList_","parseMultiLineStringText_","parseMultiPolygonText_","parsePolygonTextList_","dimensions","token","isEmptyGeometry_","splitCollection_","splitCollection","parse_","Lexer","Parser","encode","encodePointGeometry","encodeLineStringGeometry","encodePolygonGeometry","GeometryEncoder","components","geoms","enc","geometryEncoder","wktType","encodeGeometryLayout","WKBGeometryType","pos_","initialized_","isLittleEndian_","hasZ_","hasM_","srid_","readUint8","getUint8","readUint32","isLittleEndian","getUint32","readDouble","getFloat64","numRings","readWkbHeader","expectedTypeId","wkbType","wkbTypeThousandth","hasM","hasSRID","typeId","srid","readWkbPayload","readGeometryCollection","readWkbBlock","readWkbCollection","reader","num","getSrid","littleEndian","isEWKB_","ewkb","writeQueue_","nodata_","Z","M","nodata","writeUint8","writeUint32","writeDouble","coordsObj","writeLineString","writePolygon","writeWkbHeader","writeMultiLineString","writeMultiPolygon","writeGeometryCollection","findMinimumLayout","wkblut","getBuffer","byteLength","ArrayBuffer","DataView","setUint8","setUint32","setFloat64","viewCache_","hex_","hex","littleEndian_","ewkb_","geometryLayout","nodataZ_","nodataZ","nodataM_","nodataM","getDataView","WkbReader","writer","WkbWriter","encodeHexString","decodeHexString","isView","byteOffset","readFromDocument","readFromNode","readHref","NAMESPACE_URIS","PARSERS","SERVICE_PARSERS","CAPABILITY_PARSERS","REQUEST_PARSERS","EXCEPTION_PARSERS","layerObject","LAYER_PARSERS","readLayer","wmsCapabilityObject","readKeywordList","CONTACT_INFORMATION_PARSERS","CONTACT_PERSON_PARSERS","CONTACT_ADDRESS_PARSERS","geographicBoundingBox","EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS","westBoundLongitude","southBoundLatitude","eastBoundLongitude","northBoundLatitude","ATTRIBUTION_PARSERS","authorityObject","readFormatOnlineresource","metadataObject","STYLE_PARSERS","readSizedFormatOnlineresource","readOperationType","OPERATIONTYPE_PARSERS","DCPTYPE_PARSERS","HTTP_PARSERS","FORMAT_ONLINERESOURCE_PARSERS","KEYWORDLIST_PARSERS","parentLayerObject","cascaded","opaque","noSubsets","fixedWidth","fixedHeight","childValue","parentValue","formatOnlineresource","layers_","readFeatures_","layerElement","layerFeatures","gmlFeatures","SERVICE_IDENTIFICATION_PARSERS","SERVICE_PROVIDER_PARSERS","OPERATIONS_METADATA_PARSERS","owsObject","ADDRESS_PARSERS","ALLOWED_VALUES_PARSERS","CONSTRAINT_PARSERS","CONTACT_INFO_PARSERS","PHONE_PARSERS","DCP_PARSERS","REQUEST_METHOD_PARSERS","OPERATION_PARSERS","SERVICE_CONTACT_PARSERS","CONTENTS_PARSERS","owsParser_","WMTSCapabilityObject","TMS_PARSERS","TMS_LINKS_PARSERS","DIMENSION_PARSERS","resourceType","resource","TMS_LIMITS_LIST_PARSERS","TMS_LIMITS_PARSERS","WGS84_BBOX_READERS","readCoordinates","TM_PARSERS","getObject","readFeatureFromObject","readFeaturesFromObject","readGeometryFromObject","readProjectionFromObject","writeFeatureObject","writeFeaturesObject","writeGeometryObject","layerName_","topoJSONTopology","arcs","transformArc","transformArcs","topoJSONFeatures","objectName","readFeaturesFromGeometryCollection","readFeatureFromGeometry","GEOMETRY_READERS","transformVertex","concatenateArcs","polyArray","ringCoords","indices","arc","geometryReader","vertex","readGeometryCollectionGeometry","geoJSON","writePointGeometry","writeLineStringGeometry","rightHanded","writePolygonGeometry","writeMultiPointGeometry","writeMultiLineStringGeometry","writeMultiPolygonGeometry","writeGeometryCollectionGeometry","extractGeometryName_","extractGeometryName","geoJSONFeature","geoJSONFeatures","extendStatics","setPrototypeOf","__proto__","__","CUSTOM_NAMESPACE_URIS","combi","getAllCombinations","customURIS","formatURIS","cleanCombinationsByFormat","readDateTime1000","FEATURE_READER","readRte","readTrk","readWpt","GPX_PARSERS","LINK_PARSERS","GPX_SERIALIZERS","RTE_SEQUENCE","RTE_SERIALIZERS","TRK_SEQUENCE","TRK_SERIALIZERS","writeWptType","_this","readExtensions_","readExtensions","handleReadExtensions_","extensionsNode","featureReader","gpx","GPX_NODE_FACTORY","RTE_PARSERS","parseLink","parseExtensions","RTEPT_PARSERS","rteValues","layoutOptions","TRK_PARSERS","TRKSEG_PARSERS","TRKPT_PARSERS","trkValues","WPT_PARSERS","LINK_SEQUENCE","LINK_SERIALIZERS","writeLink","RTEPT_TYPE_SEQUENCE","TRKSEG_SERIALIZERS","TRKSEG_NODE_FACTORY","WPT_TYPE_SEQUENCE","WPT_TYPE_SERIALIZERS","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","GEOMETRY_TYPE_TO_NODENAME","applyLayoutOptions","color_","Fill","setColor","FRACTION","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","opacity_","scale_","scaleArray_","displacement_","displacement","declutterMode_","declutterMode","ImageStyle","getDisplacement","getDeclutterMode","getScaleArray","getAnchor","getHitDetectionImage","getPixelRatio","getImageState","getImageSize","getOrigin","setDisplacement","listenImageChange","unlistenImageChange","listenImage","loadHandler","errorHandler","listening","decoding","imageLoadFunction","ImageState","src_","image_","unlisten_","imageLoadFunction_","handleImageError_","unlistenImage_","handleImageLoad_","taintedTestContext","imageState","hitDetectionImage_","canvas_","imageState_","size_","tainted_","isTainted_","dispatchChangeEvent_","replaceColor_","getSrc","imgData","normalizedAnchor_","anchorOrigin_","anchorOrigin","IconOrigin","anchorXUnits_","anchorXUnits","IconAnchorUnits","anchorYUnits_","anchorYUnits","crossOrigin_","imgSize_","imgSize","iconImage_","IconImage","offset_","offsetOrigin_","offsetOrigin","origin_","Icon","setAnchor","iconImageSize","lineCap_","lineCap","lineDash_","lineDashOffset_","lineDashOffset","lineJoin_","lineJoin","miterLimit_","miterLimit","width_","Stroke","getLineCap","getLineDash","getLineDashOffset","getLineJoin","getMiterLimit","setLineCap","setLineDash","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","asColorLike","hitDetectionCanvas_","fill_","radius_","radius1","radius2_","radius2","stroke_","renderOptions_","RegularShape","getFill","getRadius2","getStroke","setFill","createHitDetectionCanvas_","draw_","setStroke","calculateLineJoinSize_","r1","r2","miterRatio","bevelAdd","aa","innerMiterRatio","innerLength","createRenderOptions","maxRadius","createPath_","lineWidth","drawHitDetectionCanvas_","angle0","radiusC","closePath","CircleStyle","geometryFunction_","defaultGeometryFunction","hitDetectionRenderer_","hitDetectionRenderer","text_","zIndex_","Style","setRenderer","setHitDetectionRenderer","getHitDetectionRenderer","getGeometryFunction","setText","defaultStyles","createDefaultStyle","createEditingStyle","white","blue","font_","textAlign_","justify_","justify","textBaseline_","maxAngle_","maxAngle","placement_","placement","TextPlacement","overflow_","offsetX_","offsetY_","backgroundFill_","backgroundFill","backgroundStroke_","backgroundStroke","Text","getFont","getPlacement","getMaxAngle","getOverflow","getTextAlign","getJustify","getTextBaseline","getOffsetX","getOffsetY","getBackgroundFill","getBackgroundStroke","getPadding","setOverflow","setFont","setMaxAngle","setOffsetX","setOffsetY","setPlacement","setTextAlign","setJustify","setTextBaseline","setBackgroundFill","setBackgroundStroke","setPadding","DEFAULT_COLOR","DEFAULT_IMAGE_STYLE_ANCHOR","DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS","DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS","DEFAULT_IMAGE_STYLE_SIZE","DEFAULT_IMAGE_STYLE_SRC","GX_NAMESPACE_URIS","ICON_ANCHOR_UNITS_MAP","PLACEMARK_PARSERS","extendedDataParser","regionParser","readMultiGeometry","styleMapValue","readStyleMapValue","placemarkObject","readStyleURL","GX_MULTITRACK_GEOMETRY_PARSERS","readGxTrack","NETWORK_LINK_PARSERS","readURI","REGION_PARSERS","LAT_LON_ALT_BOX_PARSERS","regionObject","LOD_PARSERS","lodObject","KML_SEQUENCE","KML_SERIALIZERS","DOCUMENT_SERIALIZERS","DOCUMENT_NODE_FACTORY","writePlacemark","DEFAULT_FILL_STYLE","DEFAULT_NO_IMAGE_STYLE","DEFAULT_IMAGE_STYLE","DEFAULT_TEXT_STROKE_STYLE","DEFAULT_STROKE_STYLE","DEFAULT_TEXT_STYLE","DEFAULT_STYLE","TEXTAREA","DEFAULT_STYLE_ARRAY","scaleForSize","defaultIconUrlFunction","defaultStyle_","extractStyles_","extractStyles","writeStyles_","writeStyles","sharedStyles_","showPointNames_","showPointNames","iconUrlFunction_","iconUrlFunction","readDocumentOrFolder_","readPlacemark_","readSharedStyle_","readSharedStyleMap_","styleUrl","sharedStyles","drawName","multiGeometryPoints","featureStyle","findStyle","nameStyle","foundStyle","textOffset","imageStyle","imageSize","imageScale","createNameStyleFunction","createFeatureStyleFunction","styleUri","baseURI","readName","readNameFromDocument","readNameFromNode","readNetworkLinks","networkLinks","readNetworkLinksFromDocument","readNetworkLinksFromNode","readRegion","regions","readRegionFromDocument","readRegionFromNode","kml","xmlnsUri","styleValue","readColor","hexColor","readScale","STYLE_MAP_PARSERS","pairObject","PAIR_PARSERS","ICON_STYLE_PARSERS","iconObject","ICON_PARSERS","xunits","yunits","LABEL_STYLE_PARSERS","LINE_STYLE_PARSERS","POLY_STYLE_PARSERS","FLAT_LINEAR_RING_PARSERS","GX_TRACK_PARSERS","whens","when","gxTrackObject","EXTRUDE_AND_ALTITUDE_MODE_PARSERS","MULTI_GEOMETRY_PARSERS","multiGeometry","homogeneous","setCommonGeometryProperties","innerBoundaryFlatLinearRings","INNER_BOUNDARY_IS_PARSERS","OUTER_BOUNDARY_IS_PARSERS","styleObject","IconObject","drawIcon","hotSpot","resizeScale","outline","hasExtrude","hasTessellate","hasAltitudeMode","extrudes","tessellates","altitudeModes","DATA_PARSERS","EXTENDED_DATA_PARSERS","featureObject","SCHEMA_DATA_PARSERS","writeColorTextNode","abgr","EXTENDEDDATA_NODE_SERIALIZERS","DATA_NODE_FACTORY","ICON_SEQUENCE","ICON_SERIALIZERS","GX_NODE_FACTORY","ICON_STYLE_SEQUENCE","ICON_STYLE_SERIALIZERS","vec2","writeScaleTextNode","LABEL_STYLE_SEQUENCE","LABEL_STYLE_SERIALIZERS","LINE_STYLE_SEQUENCE","LINE_STYLE_SERIALIZERS","GEOMETRY_NODE_FACTORY","POINT_NODE_FACTORY","LINE_STRING_NODE_FACTORY","LINEAR_RING_NODE_FACTORY","POLYGON_NODE_FACTORY","MULTI_GEOMETRY_SERIALIZERS","writePrimitiveGeometry","writeMultiGeometry","factory","BOUNDARY_IS_SERIALIZERS","writeBoundaryIs","PLACEMARK_SERIALIZERS","namesAndValues","pointStyles","lineStyles","polyStyles","STYLE_SEQUENCE","STYLE_SERIALIZERS","PLACEMARK_SEQUENCE","EXTENDEDDATA_NODE_FACTORY","styleArray","PRIMITIVE_GEOMETRY_SEQUENCE","PRIMITIVE_GEOMETRY_SERIALIZERS","POLY_STYLE_SEQUENCE","POLYGON_SERIALIZERS","INNER_BOUNDARY_NODE_FACTORY","OUTER_BOUNDARY_NODE_FACTORY","outerRing","POLY_STYLE_SERIALIZERS","iconProperties","GeometryType","nameElm","folderOrDocName","_balloon","featuresWithoutFolder","folderTree","addBranch","documentName","BALLOON_STYLE_PARSERS","asserts","assert","xsd","imageStyle_1","imageScale_1","listener_1","imageSize_1","resultStyle","balloonStyle","DOCUMENT_SEQUENCE","featuresOrFolders","origin_1","cdataNode","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","renderBuffer_","updateWhileAnimating_","updateWhileInteracting_","getDeclutter","getRenderBuffer","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","setRenderOrder","renderOrder","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","CLOSE_PATH","CUSTOM","DRAW_CHARS","DRAW_IMAGE","END_GEOMETRY","FILL","MOVE_TO_LINE_TO","SET_FILL_STYLE","SET_STROKE_STYLE","STROKE","fillInstruction","strokeInstruction","beginPathInstruction","closePathInstruction","drawCustom","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","setImageStyle","opt_declutterImageWithText","setTextStyle","maxLineWidth","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","tmpCoordinate_","hitDetectionInstructions","applyPixelRatio","dashArray","appendFlatPointCoordinates","getBufferedMaxExtent","myEnd","appendFlatLineCoordinates","closed","skipFirst","lastRel","nextRel","lastXCoord","lastYCoord","nextCoord","skipped","drawCustomCoordinates_","builderEnds","builderEnd","beginGeometry","builderEndss","builderBegin","myEnds","endGeometry","finish","reverseHitDetectionInstructions","instruction","fillStyleColor","strokeStyleColor","strokeStyleLineCap","strokeStyleLineDash","strokeStyleLineDashOffset","strokeStyleLineJoin","strokeStyleWidth","strokeStyleMiterLimit","createFill","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","imagePixelRatio_","anchorX_","anchorY_","height_","originX_","originY_","declutterImageWithText_","myBegin","opt_sharedData","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","drawFlatCoordinatess_","numEnds","setFillStrokeStyles_","circleInstruction","matchingChunk","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","acos","TEXT_ALIGN","labels_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textFillState_","fillStates","textStrokeState_","strokeStates","textState_","textStates","textKey_","fillKey_","strokeKey_","fillState","strokeState","textState","geometryWidths","keep","saveTextStates_","p0","p3","flatOffset","flatEnd","oo","drawChars_","strokeKey","textKey","fillKey","baseline","textFillStyle","textStrokeStyle","textScale","textOffsetX","textOffsetY","textRotateWithView","textRotation","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","tolerance_","maxExtent_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","builderType","zIndexKey","replays","replay","Constructor","boundHandleImageChange_","handleImageChange_","layer_","declutterExecutorGroup","loadedTileCallback","tiles","tileCoord","createLoadedTileFinder","tileRange","forEachLoadedTile","renderIfReadyAndVisible","loadImage","canvasPool","pixelContext","renderedResolution","tempTransform","pixelTransform","containerReused","pixelContext_","useContainer","opt_backgroundColor","layerClassName","HTMLCanvasElement","clipUnrotated","inverted","dispatchRenderEvent_","preRender","postRender","getRenderTransform","renderPixel","layerExtent","pixelCanvas","drawTextOnPath","startM","segmentM","advance","beginX","beginY","startOffset","startLength","endM","previousAngle","singleSegment","iStart","charLength","chars","tmpExtent","p4","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","horizontalTextAlign","align","createTextChunks","overlaps","alignFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","widths_","createLabel","textIsArray","baseStyle","lineWidths","currentWidth","currentHeight","getTextDimensions","renderWidth","OffscreenCanvasRenderingContext2D","CanvasRenderingContext2D","previousFont","leftRight","strokeInstructions","fillInstructions","lineOffset","widthHeightIndex","lineWidthIndex","fillStrokeArgs","replayTextBackground_","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","drawImageX","drawImageY","drawImageW","drawImageH","canvasTransform","replayImageOrLabel_","contextScale","imageOrLabel","strokePadding","repeatSize","drawLabelWithPointPlacement_","execute_","opt_featureCallback","opt_hitExtent","opt_declutterTree","pixelCoordinates","prevX","prevY","roundX","roundY","currentGeometry","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","declutterImageWithText","labelWithAnchor","widthIndex","insert","imageArgs","imageDeclutterBox","collides","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","drawChars","cc","execute","executeHitDetection","ORDER","allInstructions","opt_renderBuffer","overlaps_","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","createExecutors_","flatClipCoords","getClipCoords","executors","instructionByZindex","hasExecutors","declutteredFeatures","contextSize","newContext","hitExtent","indexes","circlePixelIndexArrayCache","maxDistanceSq","pixelIndex","getPixelIndexArray","featureCallback","executor","zs","opt_builderTypes","builderTypes","opt_squaredTolerance","opt_userTransform","context_","squaredTolerance_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textScale_","tmpLocalTransform_","drawImages_","localTransform","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","moveToLineTo_","drawRings_","simpleGeometry","transformGeom2D","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageAnchor","imageOrigin","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","HIT_DETECT_RESOLUTION","GEOMETRY_RENDERERS","builderGroup","opt_declutterBuilderGroup","imageBuilderGroup","imageReplay","textBuilderGroup","textReplay","lineStringReplay","polygonReplay","replayGroup","geometryRenderer","circleReplay","defaultOrder","feature1","feature2","getSquaredTolerance","getTolerance","renderFeature","renderGeometry","renderFeatureInternal","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","hitDetectionImageData_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","wrappedRenderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedRenderOrder_","replayGroup_","replayGroupChanged","clipping","compositionContext_","renderWorlds","executorGroup","vectorSource","endWorld","world","setupCompositionContext_","compositionContext","releaseCompositionContext_","makeScale","clipped","imageSmoothingEnabled","indexFactor","featuresByZIndex","featureStyleFunction","originalStyle","imgContext","byGeometryType","zIndexKeys","geomAndStyle","createHitDetectionImageData","resultFeatures","hitDetect","executorGroups","animating","interacting","frameStateExtent","vectorLayerRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","renderedExtent","loadExtents","gutter","loadExtent","declutterBuilderGroup","userTransform","loadFeatures","dirty","userExtent","replayGroupInstructions","getOverlaps","BaseVector","opt_maxEntries","rbush_","items_","extents","getAll","getInExtent","forEach_","forEachInExtent","toJSON","rbush","adaptAttributions","attributionLike","attributions_","attributionsCollapsible_","attributionsCollapsible","wrapX_","interpolate_","viewResolver","viewRejector","viewPromise_","getInterpolate","setAttributions","ADDFEATURE","CHANGEFEATURE","REMOVEFEATURE","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","opt_feature","opt_features","loader_","format_","url_","loader","strategy_","strategy","useSpatialIndex","featuresRtree_","loadedExtentsRtree_","loadingExtentsCount_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","featuresCollection_","addFeaturesInternal","bindFeaturesCollection_","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","VectorSourceEvent","VectorEventType","handleFeatureChange_","valid","geometryFeatures","modifyingCollection","opt_fast","removeAndIgnoreReturn","removeFeatureInternal","clearEvent","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","forEachFeatureIntersectingExtent","getFeaturesCollection","getFeaturesAtCoordinate","opt_projection","wrapAndSliceX","anExtent","getClosestFeatureToCoordinate","closestFeature","previousMinSquaredDistance","getFeatureByUid","getFormat","sid","removeFromIdIndex_","hasFeature","loadedExtentsRtree","extentsToLoad","extentToLoad","removeLoadedExtent","featureChangeKeys","removed","setLoader","setUrl","DrawEventType","shouldHandle_","downPx_","downTimeout_","lastDragTime_","pointerType_","freehand_","source_","features_","snapTolerance_","snapTolerance","type_","getMode","stopClick_","stopClick","minPoints_","minPoints","maxPoints_","maxPoints","finishCondition_","finishCondition","geometryLayout_","geometryFunction","squaredLength","dragVertexDelay_","dragVertexDelay","finishCoordinate_","sketchFeature_","sketchPoint_","sketchCoords_","sketchLine_","sketchLineCoords_","squaredClickTolerance_","clickTolerance","overlay_","getDefaultStyleFunction","freehandCondition_","freehand","freehandCondition","updateState_","getOverlay","addToDrawing_","startDrawing_","startingToDraw","finishDrawing","atFinish_","abortDrawing","downPx","clickPx","modifyDrawing_","createOrUpdateSketchPoint_","at","potentiallyDone","potentiallyFinishCoordinates","sketchCoords","finishCoordinate","finishPixel","updateSketchFeatures_","createOrUpdateCustomSketchLine_","sketchLineGeom","DrawEvent","removeLastPoint","sketchFeature","abortDrawing_","appendCoordinates","newDrawing","ending","sketchFeatures","overlaySource","TranslateEventType","startCoordinate","lastCoordinate_","startCoordinate_","layerFilter_","filter_","hitTolerance_","lastFeature_","handleActiveChanged_","featuresAtPixel_","TranslateEvent","newCoordinate","getHitTolerance","setHitTolerance","getFeatureFromEvent","tempSegment","vertex_","edge_","featuresListenerKeys_","featureChangeListenerKeys_","indexedFeaturesExtents_","pendingFeatures_","pixelTolerance_","rBush_","GEOMETRY_SEGMENTERS_","segmentPointGeometry_","segmentLineStringGeometry_","segmentPolygonGeometry_","segmentMultiPointGeometry_","segmentMultiLineStringGeometry_","segmentMultiPolygonGeometry_","segmentGeometryCollectionGeometry_","segmentCircleGeometry_","opt_listen","feature_uid","segmenter","segmentsData","forEachFeatureAdd_","forEachFeatureRemove_","getFeatures_","snapTo","vertexPixel","handleFeatureAdd_","handleFeatureRemove_","updateFeature_","featuresToUpdate","opt_unlisten","rBush","pixelCoordinate","segmentsLength","closestVertex","projectedCoordinate","squaredPixelTolerance","getResult","segmentData","tempVertexCoord","segmentStart","segmentEnd","SelectEventType","deselected","originalFeatureStyles","boundAddFeature_","addFeature_","boundRemoveFeature_","removeFeature_","addCondition_","addCondition","removeCondition_","removeCondition","toggleCondition_","toggleCondition","multi_","multi","featureLayerAssociation_","addFeatureLayerAssociation_","restorePreviousStyle_","applySelectedStyle_","Select","removeFeatureLayerAssociation_","SelectEvent","tempExtent","ModifyEventType","boundHandleFeatureChange_","defaultDeleteCondition_","altKeyOnly","deleteCondition_","deleteCondition","insertVertexCondition_","insertVertexCondition","vertexFeature_","vertexSegments_","lastPixel_","ignoreNextSingleClick_","featuresBeingModified_","snappedToVertex_","changingFeature_","dragSegments_","SEGMENT_WRITERS_","writePointGeometry_","writeLineStringGeometry_","writePolygonGeometry_","writeMultiPointGeometry_","writeMultiLineStringGeometry_","writeMultiPolygonGeometry_","writeCircleGeometry_","writeGeometryCollectionGeometry_","hitDetection_","handleSourceAdd_","handleSourceRemove_","hitDetection","lastPointerEvent_","snapToPointer_","snapToPointer","handlePointerAtPixel_","willModifyFeatures_","ss","ModifyEvent","removeFeatureSegmentData_","nodesToRemove","nodeToRemove","depth","centerSegmentData","circumferenceSegmentData","featureSegments","createOrUpdateVertexFeature_","vertexFeature","removePoint","dragSegment","setGeometryCoordinates_","insertVertices","vertexExtent","segmentDataMatches","componentSegments","compareIndexes","segmentDataMatch","closestOnSegmentData","insertVertex_","opt_coordinate","hitPointGeometry","projectedDistanceToSegmentDataSquared","closestSegment","vertexSegments","pixel1","pixel2","squaredDist1","squaredDist2","geometryUid","rTree","updateSegmentIndices_","newSegmentData","newSegmentData2","removeVertex_","dragSegments","segmentsByFeature","pointCoordinates","distanceToCenterSquared","distanceToCircumference","squaredDistanceToSegment","DragAndDropEventType","readAsBuffer_","formats_","formatConstructors","dropListenKeys_","handleResult_","TextDecoder","tryReadFeatures_","DragAndDropEvent","registerListeners_","dropArea","handleDrop","handleStop","unregisterListeners_","dataTransfer","readAsArrayBuffer","readAsText","dropEffect","getFeatureGroupName","groupKeys","groupFeatures","docName","_document","lastModified","_fileSystemFile","getFileHandle","ddEvent","_groupIndex","_groupCount","processHandle","fsHandle","processFile","processFileOrDir","fileOrDir","isDirectory","createReader","readEntries","kind","webkitGetAsEntry","getAsFile","lcName","FileSystemFileHandle","getFile","setFileHandle","zipContent","loadAsync","zipContainerName","zippedFile","dir","FileSystemDirectoryHandle","preload","useInterimTilesOnError","setPreload","setUseInterimTilesOnError","getPreload","TileProperty","getUseInterimTilesOnError","interimTile","transition_","transition","transitionStarts_","getInterimTile","refreshInterimChain","getTileCoord","getAlpha","inTransition","endTransition","tileLoadFunction","tileLoadFunction_","naturalWidth","naturalHeight","targetProj","targetExtent","maxSourceExtent","errorThreshold","opt_destinationResolution","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","addQuad_","triangle","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","isNotFinite","centerSrc","bc","bcSrc","da","daSrc","ab","abSrc","cd","cdSrc","calculateSourceExtent","getTriangles","brokenDiagonalRendering_","IMAGE_SMOOTHING_DISABLED","msImageSmoothingEnabled","IMAGE_SMOOTHING_ENABLED","drawTestTriangle","u1","v1","u2","v2","verifyBrokenDiagonalRendering","calculateSourceResolution","targetMetersPerUnit","sourceMetersPerUnit","compensationFactor","triangulation","sources","opt_renderEdges","pixelRound","sourceDataExtent","canvasWidthInUnits","canvasHeightInUnits","stitchContext","stitchScale","xPos","yPos","targetTopLeft","u0","v0","sourceNumericalShiftX","sourceNumericalShiftY","affineCoefs","maxRow","maxEl","absValue","solveLinearSystem","isBrokenDiagonalRendering","ud","vd","sourceTileGrid","targetTileGrid","wrappedTileCoord","getTileFunction","opt_errorThreshold","renderEdges_","gutter_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","getTileCoordExtent","maxTargetExtent","limitedTargetExtent","sourceProjExtent","calculateSourceExtentResolution","errorThresholdInPixels","triangulation_","getZForResolution","sourceRange","getTileRangeForExtentAndZ","srcX","srcY","reproject_","getTileSize","unlistenSources_","containsTileRange","TileRange","tileLayer","extentChanged","renderedPixelRatio","renderedProjection","renderedRevision","renderedTiles","newTiles_","tmpTileRange_","isDrawableTile","tileState","getTile","getTileGridForProjection","tilePixelRatio","getTilePixelRatio","getTileCoordForCoordAndZ","tileOrigin","tileSize","getGutterForProjection","viewResolution","viewCenter","tileSource","sourceRevision","zDirection","canvasExtent","tilesToDrawByZ","findLoadedTiles","tmpTileRange","tileCoordIntersectsViewport","childTileRange","getTileCoordChildTileRange","covered","forEachTileCoordParentTileRange","canvasScale","clips","clipZs","currentClip","getOpaque","currentZ","currentTilePixelSize","getTilePixelSize","originTileCoord","originTileExtent","tileGutter","tilesToDraw","tileCoordKey","xIndex","nextX","yIndex","nextY","contextSaved","drawTileImage","updateUsedTiles","manageTilePyramid","scheduleExpireCache","getTileImage","alphaChanged","postRenderFunction","expireCache","opt_tileCallback","getTileCoordCenter","useTile","updateCacheSize","BaseTile","imageLayer","imageSource","imageExtent","imageMapWidth","imageMapHeight","imageResolution","imagePixelRatio","dw","dh","previousAlpha","BaseImage","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","DYNAMIC_DRAW","CONTEXT_IDS","opt_attributes","preserveDrawingBuffer","antialias","BufferUsage","opt_usage","ofSize","getArrayClassForType","fromArray","arrayClass","fromArrayBuffer","getUsage","Float32Array","Uint32Array","gl_","webGlContext","scaleRatio_","scaleRatio","renderTargetTexture_","createTexture","renderTargetTextureSize_","frameBuffer_","createFramebuffer","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","fragmentShader","FRAGMENT_SHADER","renderTargetProgram_","createProgram","attachShader","linkProgram","renderTargetVerticesBuffer_","createBuffer","bindBuffer","bufferData","STATIC_DRAW","renderTargetAttribLocation_","getAttribLocation","renderTargetUniformLocation_","getUniformLocation","renderTargetOpacityLocation_","renderTargetTextureLocation_","uniforms_","uniforms","getGL","textureSize","drawingBufferWidth","drawingBufferHeight","bindFramebuffer","FRAMEBUFFER","getFrameBuffer","internalFormat","RGBA","UNSIGNED_BYTE","bindTexture","TEXTURE_2D","texImage2D","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","framebufferTexture2D","COLOR_ATTACHMENT0","nextPass","preCompose","postCompose","activeTexture","TEXTURE0","canvasId","getContextAttributes","clearColor","COLOR_BUFFER_BIT","BLEND","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","useProgram","enableVertexAttribArray","vertexAttribPointer","uniform2f","uniform1i","uniform1f","applyUniforms","drawArrays","TRIANGLES","textureSlot","uniform","ImageData","texture","uniform3f","uniform4f","fromTransform","mat4","DefaultUniform","AttributeType","UNSIGNED_SHORT","UNSIGNED_INT","canvasCache","getSharedCanvasCacheKey","uniqueCanvasCacheKeyCount","boundHandleWebGLContextLost_","handleWebGLContextLost","boundHandleWebGLContextRestored_","handleWebGLContextRestored","canvasCacheKey_","canvasCacheKey","cacheItem","users","bufferCache_","extensionCache_","currentProgram_","ContextEventType","offsetRotateMatrix_","offsetScaleMatrix_","tmpMat4_","uniformLocations_","attribLocations_","setUniforms","postProcessPasses_","postProcesses","shaderCompileErrors_","canvasCacheKeyMatches","getExtension","bufferKey","bufferCache","webGlBuffer","flushBufferData","deleteBuffer","buf","bufferCacheEntry","isContextLost","loseContext","prepareDraw","opt_disableAlphaBlend","ZERO","applyFrameState","prepareDrawToRenderTarget","renderTarget","getFramebuffer","getTexture","drawElements","elementType","numItems","offsetInBytes","finalizeDraw","offsetScaleMatrix","offsetRotateMatrix","setUniformMatrixValue","setUniformFloatValue","HTMLImageElement","prevValue","program","shader","getProgram","fragmentShaderSource","vertexShaderSource","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","getProgramParameter","LINK_STATUS","getAttributeLocation","makeProjectionTransform","setUniformFloatVec4","uniform4fv","uniformMatrix4fv","enableAttributeArray_","attribName","enableAttributes","getByteSizeFromType","computeAttributesStride","opt_data","opt_texture","BYTES_PER_ELEMENT","Uint16Array","WebGLWorkerMessageType","inversePixelTransform_","postProcesses_","helper","removeHelper","dispatchPreComposeEvent","dispatchPostComposeEvent","incrementGroup","groupNumber","WebGLLayerRenderer","afterHelperCreated","prepareFrameInternal","tmpArray4","helper_","texture_","framebuffer_","data_","dataCacheDirty_","updateSize_","clearCachedData","readAll","readPixels","readPixel","projectionMatrixTransform","sourceRevision_","verticesBuffer_","hitVerticesBuffer_","indicesBuffer_","vertexShader_","fragmentShader_","program_","hitDetectionEnabled_","hitFragmentShader","hitVertexShader","hitVertexShader_","hitFragmentShader_","hitProgram_","customAttributes","attribute","hitDetectionAttributes","currentTransform_","renderTransform_","invertRenderTransform_","renderInstructions_","hitRenderInstructions_","hitRenderTarget_","generateBuffersRun_","worker_","received","projectionTransform","vertexBuffer","indexBuffer","renderInstructions","generateBuffersRun","featureCache_","featureCount_","sourceListenKeys_","handleSourceFeatureAdded_","handleSourceFeatureChanged_","handleSourceFeatureDelete_","handleSourceFeatureClear_","startWorld","renderCount","renderHitDetection","viewNotMoving","sourceChanged","rebuildBuffers_","featureCache","totalInstructionsCount","totalHitInstructionsCount","hitColor","divide","tmpCoords","tmpColor","renderIndex","hitIndex","featureUid","customAttributesCount","hitMessage","mult","colorDecodeId","DEFAULT_GRADIENT","gradient","gradient_","handleGradientChanged_","setGradient","setBlur","weightFunction_","getBlur","getGradient","addColorStop","createGradient","u_size","u_blurSlope","u_gradientTexture","u_opacity","opt_tileCoord","getKeyZXY","tmpTileCoord","opt_strict","compare","currentVal","origins","origins_","tileSizes_","tileSizes","tileSize_","fullTileRanges_","tmpSize_","tmpExtent_","sizes","restrictedTileRange","calculateTileRanges_","forEachTileCoord","opt_tileRange","tileCoordExtent","getTileRangeForTileCoordAndZ","tileCoordZ","tileCoordX","tileCoordY","getTileRangeExtent","getTileCoordForXYAndZ_","getTileCoordForCoordAndResolution","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getTileCoordResolution","getFullTileRange","fullTileRanges","interpolationRatio","createCustomCluster_","createCluster","boundRefresh_","updateDistance","setDistance","setMinDistance","getMinDistance","mapDistance","clustered","neighbors","neighbor","searchCenter","getImageFunction","sourceImage","sourcePixelRatio","targetExtent_","sourceImage_","sourcePixelRatio_","sourceListenerKey_","unlistenSource_","ImageSourceEventType","defaultImageLoadFunction","imageSmoothing","reprojectedImage_","reprojectedRevision_","findNearestResolution","getImageInternal","handleImageChange","ImageSourceEvent","appendParams","keyParams","qs","GETFEATUREINFO_IMAGE_SIZE","params_","v13_","updateV13_","serverType_","serverType","hidpi_","hidpi","imageSize_","ratio_","getFeatureInfoUrl","projectionObj","sourceProjectionObj","baseParams","getRequestUrl_","getLegendUrl","mpu","viewExtent","requestExtent","getImageLoadFunction","setImageLoadFunction","updateParams","s1","s2","compareVersions","opt_highWaterMark","highWaterMark","count_","entries_","oldest_","newest_","containsKey","value_","key_","newer","older","peekLast","peekLastKey","peekFirstKey","peek","pruneExceptNewestZ","fromKey","TILELOADSTART","TILELOADEND","getForProjection","opt_maxZoom","opt_tileSize","opt_corner","resolutionsFromExtent","createForExtent","extentFromProjection","createForProjection","opt_maxResolution","half","opaque_","tilePixelRatio_","tileCache","tmpSize","tileOptions","getTileCacheForProjection","setKey","getTileGrid","getTileCoordForTileUrlFunction","withinExtentAndZ","createFromTemplate","zRegEx","xRegEx","yRegEx","dashYRegEx","createFromTileUrlFunctions","tileUrlFunctions","expandUrl","startCharCode","stopCharCode","generateTileUrlFunction_","tileUrlFunction","UrlTile","setUrls","tileLoadingKeys_","getTileLoadFunction","getTileUrlFunction","getUrls","TileEventType","TileSourceEvent","setTileLoadFunction","setTileUrlFunction","createFromTemplates","defaultTileLoadFunction","tileClass","tileCacheForProjection","tileGridForProjection","reprojectionErrorThreshold_","reprojectionErrorThreshold","renderReprojectionEdges_","usedTileCache","getGutter","thisProj","projKey","createTile_","urlTileCoord","tileUrl","newTile","getTileInternal","setRenderReprojectionEdges","setTileGridForProjection","tilegrid","imageTile","matrixIds_","matrixIds","getMatrixId","getMatrixIds","requestEncoding","dimensions_","matrixSet_","requestEncoding_","getKeyForDimensions_","createFromWMTSTemplate","getDimensions","getMatrixSet","getRequestEncoding","getVersion","updateDimensions","opt_loader","error_","getError","handleLoad_","canvasFunction_","canvasFunction","canvasElement","Point_s","Polygon_s","MultiPoint_s","MultiPolygon_s","View","Overlay","Collection","MapBrowserEventType","math","toRadians","padNumber","ScaleLine","Zoom","ZoomSlider","ZoomToExtent","e_EventType","boundingExtent","g_Circle","linearRingLength","featureloader","WMSCapabilities","WMSGetFeatureInfo","WMTSCapabilities","TopoJSON","transformGeometryWithOptions","defaults","Translate","Snap","DragAndDrop","DoubleClickZoom","Tile","l_Image","l_Vector","Heatmap","BaseObject","METERS_PER_UNIT","Projection","forward","inverse","projCodes","defs","projName","to_meter","proj1","proj2","EPSG4326","g_METERS_PER_UNIT","getVectorContext","canvasPixelRatio","toContext","r_EventType","s_Vector","Cluster","ImageWMS","ImageCanvas","optionsFromCapabilities","wmtsCap","elt","tileMatrixSets","supportedCRS","matrixLimits","matrixSetObj","projConfig","switchXY","selectedMatrixLimit","MatrixWidth","MatrixHeight","tileMatrixValue","ScaleDenominator","TopLeftCorner","tileSpanX","TileWidth","tileSpanY","TileHeight","matrixSetExtent","wgs84BoundingBox","wgs84ProjectionExtent","wgs84MatrixSetExtent","opt_matrixLimits","switchOriginXY","elt_ml","tileWidth","tileHeight","WMTSTileGrid","createFromCapabilitiesMatrixSet","gets","encodings","TileGrid","s_Circle","lastTime","vendors","_element","currTime","timeToCall","MOUSEOVER","olOverlayPositioning","olGeometryType","DATA_IMAGE_SVG_PREFIX","_validateExtent_","alwaysCentered","_bindView_","parentView","_resetExtent_","is3D","get3DCameraLayer","_updateBox_","isMobile","oldGetTilePixelRatio","oldGetZForResolution","left_","right_","top_","bottom_","oldGetRequestUrl_","MAP_RESOLUTION","DPI","oldSnapTo","_snapData","getResolutionOptions","mapWrap","prevRes","pms","layerForResolutions","maxRes","minRes","minResIx","maxResIx","proj4Obj","projOptions","oProj","equivalentProjections","extentForResolution","manageSize","olView","featuresInLayers","changeResolutionListener","bufferedExtent","bufferExtent","onChangeView","limitZoomLevels","oldResolutions","modelLayer","limitZoomOptions","olMapViewport","hit","selectable","updatePixelRatio","extentInDegrees","getUnitRatio","defaultCrs","defaultProj","newProj","normalizeProjection","unitRatio","transformFactor","loadingTileCount","beforeTileLoadHandler","Layer_s","_loadingTileCount","curBl","newResolutions","newRes","_setExtentPromise","_timeout","fitOptions","setPromise","olMap","scene","ctxt","requestRenderMode","popupCtl","not","notSelector","isException","pointer","bcr","_pointerCancel","_pointer","_currentOffset","_previousContainerPosition","coordDelta","containerRect","mouseMoveHandler","getFormatFromName","nativeStyle","createNativeStyle","olFeatures","getNativeFeatureStyle","shape","pointsToAdd","maxArea","keysToChange","newKey","featuresNode","featureCollectionNode","isFileDrag","handleDragEnter","handleDragExit","ddOptions","zipFiles","ddInteraction","_e$features","circleRegExp","olCircle","featuresWithGeometry","featuresImportEventData","groupCount","nameBase","getFileHandleByName","fh","_fileLayers","fileLayers","recentFileEntryPromise","recentFileEntry","failed","zipName","originalFnc","zipUncompressed","getFileData","arrayBuffer","fr","gp","manageError","vectorLayers","getFeatureTables","numTables","finished","notLoaded","warnings","manageLoad","iterateGeoJSONFeatures","jsonObj","shpParams","isSHP","filePromise","getFileText","shpFile","_results","shapes","prj","combine","parseShp","parseDbf","cst","cpg","isFile","ddEnabled","currentFileLayers","thisView","thatView","createPathFromGeometry","Path2D","getPixelRatioScalePath","addPath","DOMMatrix","execCanvasOperation","operationName","prerenderHandler","postrenderHandler","prerenderHandlerName","postrenderHandlerName","dcpType","Request","GetMap","OperationsMetadata","GetTile","textarea","GetFeatureInfo","tileMatrixSetByCRS","tmsCRS","MinScaleDenominator","MaxScaleDenominator","childDenominators","ServiceProvider","ProviderName","ProviderSite","ServiceIdentification","Metadata","_layerList","getNodeArray","_fragment","_textarea","LegendURL","legendUrl","legendElm","_isCompatible","inCrs","itemCRS","SRS","isIn","tmsl","_recursiveFn","crsToCheck","tmsList","tmsIdentifier","tmsLinkList","tmsLink","extentBuffer","addCommonEvents","createWmtsSource","sourceOptions","matrixSetLinkNode","tmsLimits","https","prevFn","newSource","newMaxResolution","newMinResolution","setScaleFunction","iconWidth","setScaleForWidth","imgWidth","markerWidth","getStyleValue","isParamStyle","nativeStyleOptions","isLine","isPolygon","olGeom","currentStyle","circleOptions","labelKey","createNativeTextStyle","iconUrl","ANCHOR_DEFAULT_UNITS","_iconSize","_iconSize2","iconSize","balloon","textOptions","toHexString","getHexColorFromArray","colorArray","getStyleFromNative","olStyle","olGeomType","createVectorSource","createStyles","listenerKey","oldFeatures","vectorOptions","usesGenericLoader","isHeatmap","heatmap","_extent","nomanage","xDocFilename","contentDisposition","ex2","internalLoader","createGenericLoader","sOrigin","isFilterText","manageResponse","feats","triggerLayerUpdate","makeAjaxCall","ajaxOptions","filterText","srsname","_capabilities$Operati","_capabilities$Operati2","_capabilities$Operati3","numMaxFeatures","firstNode","numOfFeaturesFounded","numberMatched","numberOfFeatures","founded","_requestUrl","Feature_s","_tcLayer","pCoords","cCoords","fromCoords","toCoords","getCurrentCoordinates","clusterCache","elmCoords","cElm","dynamicStyle","mergeMapAndGeneralStyles","newStyles","isDynamicStyle","hmOptions","oldWeightFn","commit","subSource","fillOptions","strokeOptions","displayNoneStyle","_originalStyle","_values","getNativeFeature","olInserts","olUpdates","olDeletes","transaction","er","errorObj","transactionResponse","errObj","onend","onstart","olObjects","interactionOptions","_handlerDraggablePointerMove","featuresInExtent","leftCorner","rightCorner","_trigger","zCtl","zsCtl","requestSliderSize","zoomSlider","z2eCtl","homeBtn","_coordsTrigger","_snapTrigger","initSnap","_postrenderTrigger","duringTrackSnap","getGeotrackingLine","waypoint","_accuracy","_altitudeAccuracy","lx","moving","geoposition","altitudeAccuracy","position_","longitude","latitude","projectedPosition","addPosition","deltaMean","accuracyCircle","firstPosition","tracking","nativeGeotrackingFeature","sessionwaypoint","tcFeature","getCurrentPositionInterval","getCurrentPositionRequest","errorTimeout","enableHighAccuracy","getCurrentPosition","errorCallback","positionChangehandler","watchPosition","maximumAge","snapInfo","snapInfoElement","snapLine","vectorContext","eventPixel","endSnap","getZ","getM","mdtZ","mdtz","removeTrackingProperty","idRequestAnimationFrame","bufferElm","segmentsUnion","mergedIndex","ls","nextLineIndex","nls","maybeRemove","pointCoords","featureToAdd","_ta","sameName","importedIndex","processAdd","simulateMarker","setSimulateMarker","animationFrameFraction","toLength","arCoordinates","walkingSpeed","trackFilm","loopAtFraction","getDoneAtM","setChartProgress","hasD3","infoOnMap","iomStyle","overFlowY","getHeading","beta","getBeta","gamma","getGamma","constrainCenter","pulsated","drawCircleGeometry","elevationMarker","addElevationMarker","setElevationMarker","ovMap","_boxElm","ovmMap","positionDrag","newTransform","dragPoint","idxStart","moveVector","_delta","centerPixel","halfWidth","halfHeight","originalLayer","camLayerId","_self$parent$map$opti","fovStyle","camLayer","fov","_olMap","_clickTrigger","getElementText","esriXmlParser","dom","fiCollections","fic","fInfos","addLayerToService","targetServices","auxInfo","requestPromises","requestDataArray","sitnaFeatures","targetService","disgregatedNames","_isGMLFilter","serviceLayers","gfiURL","expUrl","requestData","requestedFormat","originalUrl","someSuccess","featureInsertionPoints","iFormat","isParentOrSame","na","nb","pa","fakeLayers","fakeLayer","lName","compoundLayer","rawUrl","rawContent","rawFormat","featureInsertionPoint","_c","hasSuitableLayers","hasLayers","semaforo","drawCtrl","olFeature","readFeaturesFromResponse","featureToServiceDistributor","apiFeatures","olGeometry","bestPoint","arrRequests","responseObj","errorType","featuresFound","popupBoundingRect","mapBoundingRect","west","north","east","popupExt","mapExt","overflows","newPos","newPixelPos","_oldUpdatePixelPosition","ct","percent","_newHandleOffsetChanged","_offsetChangeListenerKey","setProperty","createFeatureBasics","_sitnaFeature","geomStr","olStyles","_style$getImage","_style$getImage$getFi","_color","_self$parent$options","_self$parent$options2","_self$parent$options3","feature3D","ringsOrPolylines","isMultiPolygon","isPolygonOrMultiLineString","isLineString","getPolygonLength","newRing","getLineStringLength","_self$parent","_self$parent$layer","_self$parent2","_self$parent2$layer","readonly","extendedStyle","featureStyleOptions","setLabel","outlineWidth","setSelectedStyle","removeSelectedStyle","clipBox","curArea","curLength","parentFeature","currentExtent","_innerCentroid","getInnerPoint","parentOptions","_style$","fStyle","sketch","getMeasureData","hoverCoordinate","pushCoordinate","_mdPx","formatLength","projectedLine","_extendedFeature","extendedFeatureGeometry","extendedFeatureData","projectedPolygon","formatArea","sketchGeometry","interaction3D","UI","DrawControl","redoStack","_pointerdownHandler","_clickHandler","_mouseMoveHandler","_mouseOverHandler","pointerdownHandler","clickHandler","mouseOverHandler","drawOptions","eventObject","drawMode","_extending","previousFeature","_extendFeature","getStyleOptionsFromMode","lineToAdd","dblClickInteraction","_projectionChangeHandler","oldProj","drawProjectionChangeHandler","snappingByExtensibleSketch","setSnapping","snapInteraction","snapOptions","_f$wrap","flyingPointContained","flyingPoint","popCoordinate","puntos","parentStyle","_self$parent$styles$s","currentMode","getSnapStyle","getExtensibleSketchSnapStyle","snapStyle","_self$snapInteraction","_getExtensibleSketchS","olSource","llen","tmsLimit","createHaloStroke1","createHaloStroke2","addHaloToStyle","mainStyle","haloPart1","haloPart2","updateSelectedStyle","_addHaloToStyle","createSelectedStyle","deleteMode","selectOptions","selectInteraction","SelectControl","getWrapperFeature","modifyInteraction","modifyOptions","featureRevision","_modifiedGeometries","iplus1","_self$parent$styles$s2","overlayStyle","_self$snapInteraction2","_onMouseMove","unselectedFeatures","_deactivate","_cancelTxt","histPoints","_version","stringifyField","delimier","quoteText","characters","INVALID_CHARACTER_ERR","b3","b4","arrData","object2Table","_str","cls","cellFormat","class","ds","dataString","rowspan","colspan","worksheet","workSheet","caption","_m","csvFile","txtDelim","fieldSep","_location","preventMixedContent","support","Symbol","viewClasses","isDataView","isPrototypeOf","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","iterator","_bodyInit","Body","Response","redirectStatuses","redirect","RangeError","rawHeaders","getAllResponseHeaders","responseURL","ontimeout","credentials","polyfill","next","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","readBlobAsArrayBuffer","bufferClone","_initBody","_bodyText","_bodyBlob","_bodyFormData","_bodyArrayBuffer","readArrayBufferAsText","formData","upcased","referrer","bytes","bodyInit","toolProto","toHost","_hosts","_hostsImage","is","getList","filtered","forImage","addKey","newItem","removeKey","_actionPromise","_isServiceWorker","registration","_isSameOrigin","_isSameProtocol","_isSecureURL","changeProtocol","newProtocol","toHTTPS","toHTTP","_currentHTTP","getImgTag","_actionHTTPS","_byProxy","_currentHTTPS","_actionHTTP","sameOrigin","_actionProxy","getImgTagByAction","_actionDirect","CORS","NOTFOUNDED","UNEXPECTED","OFFLINE","validContentType","checkHttpStatus","_fetch","validateContentType","checkCORSHeaders","CONTENTTYPE","CONTENTDISPOSITION","validateResponse","expectedContentType","resolveActionPromise","rejectActionPromise","_caching","makeRequest","fetchRetry","fetchSync","fetchBlob","_makeRequest","responseWithCharsetToDecodedString","charset","hasCharset","DeveloperError","fnResolve","fnReject","fetchFile","extended","merge","buildItems","inputText","settings","attachCallback","clearTarget","handleInput","element_text","openXHR","matchFromStart","initialOptions","_viewer_","_strokeColor_","_strokeWidth_","_fillColor_","_eventHandler_","_activePoints_","_activePoint_","_sketchPoint_","_tempPoint_","_activeDistance_","_activeDistances_","_leftPressedPixel_","_type","ThreeDDraw","viewer","cesium","JulianDate","CustomDataSource","needMorePoints","dataSources","getByName","drawingDataSource","drawnDataSource","Color","fromCssColorString","minPointsStop","renderSceneIfTranslucent","globe","translucency","eventHandler_","removeSketches","entities","entity","BoundingSphere","fromPoints","positions","fromBytes","LabelStyle","FILL_AND_OUTLINE","heightReference","HeightReference","CLAMP_TO_GROUND","pixelOffset","Cartesian2","moveLabel","getEntities","_classPrivateFieldGet4","_classPrivateFieldGet5","_classPrivateFieldGet6","_classPrivateFieldGet7","ScreenSpaceEventHandler","setInputAction","onLeftClick_","ScreenSpaceEventType","LEFT_CLICK","onDoubleClick_","LEFT_DOUBLE_CLICK","tempPoint_","createProvisionalPoint_","onMouseMove_","MOUSE_MOVE","entityForEdit","deactivateEditing","removeInputAction","activeSelectMode","editMode","onSelectEntity","onEntityClick_","deactivateSelectMode","withAlpha","pixelSize","material","vertexRemove","vertexRemoveMode","sketchPoints_","activateEditing","_this$entityForEdit$p","_this$entityForEdit$p2","_this$entityForEdit$p3","_this$entityForEdit$p4","_this$entityForEdit$p5","onLeftDown_","LEFT_DOWN","onLeftUp_","LEFT_UP","onDragPoint_","julianDate","createVirtualSPs","CallbackProperty","hierarchy","PolygonHierarchy","Cartesian3","midpoint","billboard","disableDepthTestDistance","createSketchPoints_","sketchPoint","createSketchPoint_","positionIndex","halfwayPosition_","virtualSketchPoint","virtual","lastIdx","ERROR_TYPES","activePoint_","drawShape_","EllipsoidGeodesic","Cartographic","fromCartesian","Ellipsoid","WGS84","surfaceDistance","measurements","getMeasurements","IsSketchEntity","CanIUseEntity","full","removeAll","activeDistance_","leftPressedPixel_","moveEntity","GREY","WHITE","BLACK","pointEntity","createSketchLine_","clampToGround","ColorMaterialProperty","dynamicSketLinePositions","activePoints","updateSketchPoint","pointsLength","bp","setValue","pick","camera","getPickRay","forceFinish","updateRectCorner","oppositePoint","midPoint","midPointPrev","midScale","negate","midDiff","subtract","multiplyByScalar","positionFromMid","distancePrev","distanceScale","distanceDiff","newCornerPosition","rotateRectangle","startPosition","endPosition","centerCart","endCart","startCart","angleStart","angleDiff","indx","cosTheta","sinTheta","vLon","vLat","toCartesian","_this$sketchPoint_","pointProperties","prevPosition","_this$sketchPoint_2","_this$sketchPoint_2$p","spLen","prevRealSPIndex","prevRealSP","prevVirtualPosition","nextRealSPIndex","nextRealSP","nextVirtualPosition","_this$sketchPoint_3","_this$sketchPoint_3$p","_this$sketchPoint_4","_this$sketchPoint_4$p","oldPosition","oppositeIndex","leftIndex","rightIndex","draggedPoint","leftPoint","rightPoint","checkForNegateMove","getCorrectRectCorner","drillPick","indexFromEntity","indexFromSketch","VPToMove","VPToRemove","removeVertexToPolylineOrPolygon_","_this$sketchPoint_5","_this$sketchPoint_5$p","selectedPoint","selectedEntity","extendOrSplitLineOrPolygonPositions_","screenSpaceCameraController","enableInputs","divideByScalar","_pressedVirtualSP$pos","_pressedVirtualSP$pro","pressedVirtualSP","pressedPosition","pressedIdx","realSP0","realSP2","virtualPosition0","virtualPosition1","realSP1","virtualSP1","insertVertexToPolylineOrPolygon_","equalsEpsilon","onLeftDownThenUp_","_this$sketchPoint_$pr","_this$sketchPoint_$pr2","divider","_e$polygon","_e$polygon$hierarchy","_this$sketchPoint_$pr3","_e$polyline","_e$polyline$positions","_this$sketchPoint_$pr4","_this$sketchPoint_$pr5","pressedIdx2","firstPointClicked","lastPointClicked","prevRealSPIndex2","nextRealSPIndex2","prevVirtualSP","removedSPs","_this$sketchPoint_$pr6","checkPoint1","checkPoint2","dScale","dDiff","draggedPoint2D","cartesianToCanvasCoordinates","rightPoint2D","leftPoint2D","oppositePoint2D","Intersections2D","computeLineSegmentLineSegmentIntersection","PolygonPipeline","computeArea2D","depth0","helpers","partials","alias1","nullContext","alias2","escapeExpression","lookupProperty","viewProto","VIEWNAME","BLANK_BASE","MAP3D","CAMERACTRARROWDISABLED","OUTFOCUS","allowedControls","mapView","mainTemplate","overlayTemplate","camControlsTemplate","MapView","viewHTML","_oldMapSetCenter","flyToMapCoordinates","getFarCoords","nearPoint","distanceSquared","getFarMapCoords","nearMapCoords","nextPixel","bottomPixel","nextCoords","pickMapCoords","cameraPosition","pickPoint","pickOnTerrainOrEllipsoid","secondaryCRS","toDegrees","calcDistanceForResolution","fovy","frustum","visibleMapUnits","relativeCircumference","calcResolutionForDistance","visibleMeters","rotateAroundAxis","defaultValue","lastProgress","oldTransform","Matrix4","stepAngle","lookAtTransform","ray","pickEllipsoid","pickCenterPoint","pickBottomPoint","bottomFovRay","fovy2","Quaternion","fromAxisAngle","Matrix3","fromQuaternion","multiplyByVector","Ray","setHeadingUsingBottomCenter","bottomCenter","angleToZenith","computeAngleToZenith","quaternion","zenith","fromTranslation","signedAngleBetween","normal","cross","cosine","dot","sine","magnitude","sign","pivot","fy","geocentricSurfaceNormal","toCZML","_lineStyle","fromDegrees","sampleTerrainMostDetailed","updatedPositions","stopTime","previous_next","czml","updatedPosition","coordinates2D","CameraControls","outHandler","isFocusingCameraCtrls","inHandler","lastFocused","tiltIndicatorOuterCircle","tiltIndicatorOuterShellCircle","rotateIndicatorOuterCircle","rotateIndicatorOuterShellCircle","moveStartHandler","moveEndHandler","postRenderHandler","isLoadingTiles","customCollisionDetection","getCamera","positionCartographic","cssRotate","tiltIndicator","rotateIndicator","disableRotate","disableTilt","_coordsXY","_ovMap","draw3DCamera","getBBox","baseVal","outControlsEvents","outControls","inControlsEvents","inControls","moveStart","moveEnd","tilt","indicator","leftArrow","rightArrow","downArrow","upArrow","MIN_TILT","MAX_TILT","rAFInOutControls","unbind","roll","tiltSelector","tiltIndicatorInner","resetTilt","tiltIndicatorCircle","vectorScratch","rectangle","clickLocation","draggingTilt","cancelBubble","tiltUp","upEvent","tiltUpMouseUpFunction","tiltUpInterval","isTiltUpDisabled","tiltDown","tiltDownMouseUpFunction","tiltDownInterval","isTiltDownDisabled","rotateSelector","rotateIndicatorInner","resetRotation","rotateIndicatorCircle","draggingRotate","rotateLeft","rotateLeftMouseUpFunction","rotateLeftInterval","rotateRight","rotateRightMouseUpFunction","rotateRightInterval","isDisable","fovCoords","trackedEntity","rotateUp","lookUp","lookDown","PI_OVER_TWO","_angle","tiltElement","cursorVector","oldTransformScratch","newTransformScratch","tiltMouseMoveFunction","tiltMouseUpFunction","isTilting","tiltFrame","Transforms","northUpEastToFixedFrame","tiltIsLook","positionWC","startCursorAngle","initialCameraAngle","tiltRectangle","angleDifference","newCameraAngle","zeroToTwoPi","rotateElement","rotateMouseMoveFunction","rotateMouseUpFunction","rotateInitialCursorAngle","rotateInitialCameraAngle","rotateFrame","currentCameraAngle","isRotating","eastNorthUpToFixedFrame","rotateIsLook","rotateInitialCameraDistance","currentRotation","linked2DControls","videoControls","custom","mag","scratchAdjustHeightTransform","scratchAdjustHeightCartographic","minimumCollisionTerrainHeight","minimumZoomDistance","ellipsoid","IDENTITY","_setTransform","cartographic","cartesianToCartographic","heightUpdated","cartographicToCartesian","up","limitCameraToInitExtent","initExtent","south","maximumZoomDistance","TwoDLinkedFeatureInfo","savedMode","ctlResultsPanel","ctlFeatureInfo","map2DgetResolutionFN","getResultsPanelCtl","removeMarker","pickedPosition","eyeOffset","verticalOrigin","VerticalOrigin","BOTTOM","addNativeFeature","pickedLocation","pickedTile","tilesRendered","_surface","_tilesToRender","textureIndex","Rectangle","imageryTiles","imagery","readyImagery","nativeRectangle","tilingScheme","tileXYToNativeRectangle","readyImageryToGetNativeRectangle","imageryLayer","isBaseLayer","west_south","east_north","imageryProvider","get2DMarker","isPending","RasterConverter","_crsPattern","layerCrs","CustomResource","paths","TILEMATRIXSET","TILEMATRIXSETLABELS","getOfPath","_obj","getTileMatrixSetLabelByLayerOnCapabilities","capsURL","labels","wmtsLayer","resourceURL","tileMatrixSetLabels","Resource","RequestType","IMAGERY","ResourceURL","tcLayer","GeographicTilingScheme","tileMatrixSetID","tileMatrixLabels","maximumLevel","WebMapTileServiceImageryProvider","exBoundingBox","_getEXBBox","exBBox","bindEXBBox","geoBBox","WebMapServiceImageryProvider","defineCustomResource","_queryParameters","_templateValues","retryCallback","_retryCount","customFetchImage","xhrBlobSupported","checkAndResetRequest","RequestState","ISSUED","RuntimeError","UNISSUED","deferred","createImage","TrustedServers","getWebGLUrl","allowCrossOrigin","requestFunction","isDataUri","isBlobUri","isCrossOriginUrl","defer","RequestScheduler","otherwise","preferBlob","deprecationWarning","hasHeaders","generatedBlobResource","generatedBlob","blobPromise","blobUrl","convert","map3DCRS","FeatureConverter","toCesiumColor","hexStringColor","setStyleProperties","getPixelSize","fromCartesianArray","neededCameraPosition","getRectangleCameraCoordinates","getPixelDimensions","getFeatureStyle","createLine","entityOps","Entity","polygonConverter","outlineOpacity","getting","geomPolys","geomOutlines","getPolyGeom","polygonHierarchy","GeometryInstance","PolygonGeometry","getOutlineGeom","outlineCoords","holes","GroundPrimitive","releaseGeometryInstances","geometryInstances","lineConverter","geomInstances","pointConverter","outlineLabelColor","outlineLabelWidth","horizontalOrigin","HorizontalOrigin","showBackground","pinBuilder","PinBuilder","BASELINE","fromText","fromColor","scn","converter","byPromise","cartesians","forPoints","forRingsOrPolylines","forPolygons","boundigSphere","provider","currentMapCfg","baseMap","baseMaps","baseVector","setMustReprojectOfBaseLayers","isBaseRaster","divThreedMap","terrain","noDataValue","terrainFallback","tfb","coverageName","_self$map$activeContr","viewName","views","ctrlsToMng","ctlsOnMap","applyEnd","loadViewer","setCameraFromMapView","readyPromise","animateRendering","flyTo","fromRadians","pickBP","readyPickBP","_pickBP","matrixPickBP","Camera","DEFAULT_VIEW_RECTANGLE","initialRectangle","computeViewRectangle","DEFAULT_VIEW_FACTOR","checkPickBPProcess","homeButton","addHeight","finalCartographic","Property","getValueOrUndefined","billboardCollection","unapply","_self$map$activeContr2","fallbackProvider","setViewFromCameraView","_startDragPos","rasterConverter","featureConverter","csFeature","groundPrimitives","primitives","BillboardCollection","getById","linkFeature","feature2D","vector2DFeatures","listenTo","event2DHandler","setRenderOptionsLayer","imageryLayers","lower","raise","tdf","_canvasClientHeight","_canvasClientWidth","lastZoom","flyToRectangle","geolocation_newPosition","geotrackingEntity","geolocation2D","positionCallback","_time","newCartographicPositions","cartographicArrayToCartesianArray","entityGeotracking","PolylineDashMaterialProperty","fromAlpha","gapColor","geolocation_videoControls","SELECTEDTRACK","clock","shouldAnimate","currentTime","fromDate","trackDataSource","removeById","alterAllowedControls","ctrlsToMngCLASS","mapCtrl","isDragging","draggingFeature","arrayDePuntos","onLeftClickOnCanvas","movement","getInfoOnPickedPosition","pickPosition","_self$map$getControls","onDrawTable","onTableClose","_blockDragging","onMouseMoveOnCanvas","primitive","onLeftDownOnCanvas","onLeftUpOnCanvas","positionCartographicOld","eventHandlers","handlerOfFeatures","commands","geolocation_videoControls_","lstEventListener","_setGeotracking","_wrap_simulateTrack","_simulateTrack","_displayTrackProfile","_command","simulationOnPreUpdate","DataSourceCollection","dataSourceDisplay","DataSourceDisplay","dataSourceCollection","CzmlDataSource","czmlDataSource","stop","clockStep","ClockStep","TICK_DEPENDENT","clockRange","ClockRange","CLAMPED","multiplier","trackEntity","tagLI","availability","TimeIntervalCollection","TimeInterval","get2DHeightAtProgress","distanceCurrent","doneDistance","heightIndex","previousPosition","preUpdate","greaterThanOrEquals","toDate","draw2DDrawedFeatures","interation3D","zoomin","zoomout","override2DZoom","amount","zoomToCartesian","sourceCRS","fromTCtoCesiumEvent","eventTC","crsPattern","customRender","vector2DLayers","_tileProvider","_tileLoadQueueHigh","_tileLoadQueueMedium","_tileLoadQueueLow","_debug","tilesWaitingForChildren","boundariesNavarra","boundariesEspana","fetchJson","ApproximateTerrainHeights","initialize","boundaries","MergeTerrainProvider","fallback","CesiumTerrainProvider","Globe","baseColor","enableLighting","tileCacheSize","maximumScreenSpaceError","Viewer","terrainExaggeration","timeline","fullscreenButton","baseLayerPicker","navigationInstructionsInitiallyVisible","navigationHelpButton","geocoder","infoBox","sceneModePicker","selectionIndicator","maximumRenderTimeChange","enableCollisionDetection","errorEvent","statusCode","renderError","tileLoadingHandler","EventHelper","tileLoadProgressEvent","allReady","_event2DHandler","farCoordsLeft","farCoordsRight","cameraPositionCarto","lookAt","HeadingPitchRange","threeDDraw","cartesianToArray","cartesian","tcFeatureConstructor","activeShapePoints","apiFeature","originalFeat","_pickedFeature","selectCallback","tcFeatureFromEntity","unselectFeature","_pickedFeature2","_activate","_remove","_selectedEntity$_wrap","_event$feature$wrap","_pickedFeature$id$_wr","_this$label","_this$label$fillColor","toCssHexString","get3DLayer","raiseToTop","relatedWMTS","convertedLayer","enablePickFeatures","newImageryLayer","addImageryProvider","lowerToBottom","setRenderOptionsFeature","imageryLayerNames","lonlat","cancelFlight","epsilon","EPSILON3","enlargeFactor","marginX","marginY","destinationCartesian","finalDestinationCartographic","pickRay","distanceMeasure","_zoomTo","setNewPosition","toGo","toMove","intersectionToGo","easingFunction","EasingFunction","LINEAR_NONE","csfeature","geo","Billboard","cesiumFeature","latlon","carto","setCamera","moveBackward","targetCartographic","centerMapCRS","movement3DtoPosition2D","cesiumWidget","handlerOfMovementConversion","view3DElevationMarkerPromise","RED","view3DElevationMarker","showReprojectDialog","haveToChange","_wl$features","_feature$wrap","Search","safe","tagRegExp","getAttributeTag","getAttributeTagDimension","isSpecialAttribute","excludedKeys","excKeys","_count","hour12","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","maxChunkLength","len2","encodeChunk","ieee754","customInspectSymbol","Buffer","K_MAX_LENGTH","encodingOrOffset","allocUnsafe","isEncoding","actual","arrayView","isInstance","fromArrayLike","fromArrayView","SharedArrayBuffer","isBuffer","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","poolSize","alloc","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","hexSliceLookupTable","checkOffset","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","noAssert","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","sym","getMessage","configurable","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","INVALID_BASE64_RE","leadSurrogate","base64clean","dst","alphabet","i16","BufferBigIntNotDefined","charenc","utf8","stringToBytes","bin","bytesToString","base64map","crypt","rotl","rotr","endian","randomBytes","bytesToWords","wordsToBytes","bytesToHex","hexToBytes","bytesToBase64","triplet","imod4","modules","installedModules","moduleId","_interopRequireDefault","__esModule","_handlebarsRuntime2","_handlebarsCompilerAst2","_handlebarsCompilerBase","_handlebarsCompilerCompiler","_handlebarsCompilerJavascriptCompiler2","_handlebarsCompilerVisitor2","_handlebarsNoConflict2","_create","hb","compile","precompile","AST","Compiler","JavaScriptCompiler","parseWithoutProcessing","inst","Visitor","_interopRequireWildcard","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","HandlebarsEnvironment","SafeString","Exception","VM","spec","newObj","_utils","_exception2","_helpers","_decorators","_logger2","_internalProtoAccess","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","registerHelper","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","resetLoggedPropertyAccesses","resetLoggedProperties","createFrame","toHTML","possible","badChars","frame","blockParams","appendContextPath","contextPath","chr","_Object$defineProperty","errorProps","loc","endLineNumber","column","endColumn","captureStackTrace","lineNumber","nop","it","desc","setDesc","$Object","getProto","isEnum","propertyIsEnumerable","getDesc","getOwnPropertyDescriptor","setDescs","defineProperties","getNames","getSymbols","getOwnPropertySymbols","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","hooks","_Object$keys","priorKey","execIteration","toObject","$keys","$export","core","fails","KEY","S","F","own","IS_FORCED","IS_GLOBAL","G","IS_STATIC","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","C","__g","__e","aFunction","conditional","includeZero","_decoratorsInline2","methodMap","lookupLevel","levelMap","_len","_key","_Object$create","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","whitelist","_createNewLookupObject","createNewLookupObject","allowedProtoProperties","allowProtoPropertiesByDefault","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","protoAccessControl","checkWhiteList","loggedProperties","protoAccessControlForType","logUnexpecedPropertyAccessOnce","D","_Object$seal","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","decorator","main_d","templateWasPrecompiledWithCompilerV7","strict","depths","lambda","invokePartial","resolvePartial","extendedOptions","compilerOptions","indent","programs","declaredBlockParams","programWrapper","wrapProgram","mergeIfNeeded","common","noop","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","mergedHelpers","_internalWrapHelper","wrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","prog","currentDepths","seal","isObject","$seal","transformOptionsFn","$Handlebars","noConflict","helperExpression","scopedId","simpleId","ast","_whitespaceControl2","_parser2","Helpers","yy","locInfo","SourceLocation","srcName","handlebars","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","_$","$0","prepareProgram","stripComment","strip","stripFlags","prepareRawBlock","prepareBlock","chained","chain","prepareMustache","preparePartialBlock","pairs","preparePath","defaultActions","parseError","vstack","lstack","recovering","setInput","yylloc","yyloc","ranges","symbol","preErrorSymbol","newState","expected","yyval","lex","errStr","showPosition","first_line","last_line","first_column","last_column","EOF","_input","_more","_less","matched","conditionStack","unput","oldLines","less","pastInput","past","upcomingInput","pre","tempMatch","rules","_currentRules","flex","popState","topState","yy_","$avoiding_name_collisions","YY_START","_visitor2","WhitespaceControl","isPrevWhitespace","isNextWhitespace","omitRight","rightStripped","omitLeft","leftStripped","Program","doStandalone","ignoreStandalone","isRootSeen","_isPrevWhitespace","_isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","BlockStatement","DecoratorBlock","PartialBlockStatement","firstInverse","lastInverse","openStrip","closeStrip","inverseStrip","Decorator","MustacheStatement","mustache","PartialStatement","CommentStatement","parents","visitSubExpression","acceptRequired","acceptArray","acceptKey","visitBlock","visitPartial","mutating","ContentStatement","SubExpression","PathExpression","StringLiteral","NumberLiteral","BooleanLiteral","UndefinedLiteral","NullLiteral","Hash","HashPair","comment","dig","isLiteral","escapeFlag","escaped","openRawBlock","validateClose","openBlock","inverseAndProgram","statements","firstLoc","lastLoc","errorNode","compat","environment","compiled","compileInput","execOptions","setupOptions","_ast2","argEquals","transformLiteralToPath","sexpr","literal","opcodes","opcode","otherOpcode","guid","sourceNode","stringParams","trackIds","knownHelpers","helperMissing","blockHelperMissing","unless","compileProgram","bodyLength","isSimple","classifySexpr","helperSexpr","simpleSexpr","ambiguousSexpr","setupFullMustacheParams","explicitPartialContext","partialName","isDynamic","preventIndent","noEscape","isBlock","knownHelpersOnly","falsy","addDepth","scoped","blockParamId","blockParamIndex","pushParam","isBlockParam","isHelper","isEligible","pushParams","blockParamChild","omitEmpty","_codeGen2","Literal","nameLookup","internalNameLookup","depthedLookup","aliasable","appendToBuffer","explicit","initializeBuffer","quotedString","lookupPropertyFunctionIsUsed","asObject","isChild","environments","preamble","stackSlot","stackVars","aliases","registers","hashes","compileStack","inlineStack","compileChildren","currentLocation","pushSource","prepend","lookupPropertyFunctionVarDeclaration","createFunctionContext","_context","objectLiteral","toStringWithSourceMap","destName","lastContext","varDeclarations","locals","aliasCount","alias","referenceCount","mergeSource","appendOnly","forceBuffer","appendFirst","sourceSeen","bufferStart","bufferEnd","blockValue","contextName","setupHelperArgs","blockName","popStack","functionCall","ambiguousBlockValue","flushInline","topStack","lastHelper","appendContent","pendingContent","pendingLocation","isInline","replaceStack","local","appendEscaped","pushContext","pushStackLiteral","lookupOnContext","resolvePath","lookupBlockParam","lookupData","_this2","assumeObjects","requireTerminal","strictLookup","resolvePossibleLambda","pushStringParam","pushString","emptyHash","pushHash","contexts","popHash","pushLiteral","pushProgram","programExpression","paramSize","foundDecorator","invokeHelper","nonHelper","setupHelper","possibleFunctionCalls","functionLookupCode","itemsSeparatedBy","callParams","invokeKnownHelper","invokeAmbiguous","helperCall","useRegister","paramsInit","setupParams","assignToHash","pushId","existing","matchExistingProgram","programParams","expr","createdStack","usedLiteral","incrStack","topStackName","wrapped","inline","blockHelper","objectArgs","hashIds","hashTypes","hashContexts","generateArray","reservedWords","compilerWords","RESERVED_WORDS","isValidJavaScriptVariableName","SourceNode","castChunk","chunk","codeGen","CodeGen","srcFile","iter","generateList","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","isSlowBuffer","loggerName","initialValue","accumulatedLoggerName","currentLogger","Logger","copyProperty","JL.copyProperty","allow","JL.allow","allowMessage","JL.allowMessage","stringifyLogObjectFunction","JL.stringifyLogObjectFunction","JL.StringifiedLogObject","JL.StringifiedLogObject.constructor","stringifyLogObject","JL.stringifyLogObject","JL.getTraceLevel","JL.getDebugLevel","JL.getInfoLevel","JL.getWarnLevel","JL.getErrorLevel","JL.getFatalLevel","levelToString","JL.levelToString","JL.setOptions","JL.getAllLevel","JL.getOffLevel","JL.Exception","JL.Exception.constructor","JL.LogItem","JL.LogItem.constructor","JL.Appender","JL.Appender.constructor","JL.Appender.setOptions","JL.Appender.log","JL.Appender.sendBatch","JL.AjaxAppender","JL.AjaxAppender.constructor","JL.AjaxAppender.setOptions","JL.AjaxAppender.sendLogItemsAjax","JL.AjaxAppender.getXhr","JL.ConsoleAppender","JL.ConsoleAppender.constructor","JL.ConsoleAppender.clog","JL.ConsoleAppender.cerror","JL.ConsoleAppender.cwarn","JL.ConsoleAppender.cinfo","JL.ConsoleAppender.cdebug","JL.ConsoleAppender.sendLogItemsConsole","JL.Logger","JL.Logger.constructor","JL.Logger.setOptions","JL.Logger.buildExceptionObject","JL.Logger.log","JL.Logger.trace","JL.Logger.debug","JL.Logger.info","JL.Logger.warn","JL.Logger.error","JL.Logger.fatal","JL.Logger.fatalException","JL.createAjaxAppender","JL.createConsoleAppender","__jsnlog_configure","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compressedContent","getContentWorker","pipe","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","onData","pako","A","O","utf8encode","I","_","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","resume","registerPrevious","generatedError","lock","generateWorker","platform","_compressWorker","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","newBufferFrom","allocBuffer","folder","generateInternalStream","checkSupport","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkIndex","setIndex","skip","readInt","readDate","UTC","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","extraStreamInfo","isLocked","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","setimmediate","loadOptions","checkSignature","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_dataBinary","internalStream","_decompressWorker","nodeStream","WebKitMutationObserver","characterData","MessageChannel","port1","port2","outcome","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","race","immediate","chunkSize","windowBits","memLevel","gzip","ended","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","L","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","adler","total_in","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","data_type","_tr_init","K","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","havedict","flags","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","V","J","nextTick","importScripts","attachEvent","clearImmediate","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","subscribe","bundleIds","callbackFn","bundleId","depsNotFound","numWaiting","publish","executeCallbacks","numTries","isLegacyIECss","maxTries","beforeCallbackFn","pathStripped","relList","as","onbeforeload","ev","sheet","cssText","arg1","arg2","loadFn","returnPromise","deps","isDefined","_dereq_","scheduleDrain","draining","Mutation","channel","oldQueue","task","INTERNAL","REJECTED","FULFILLED","PENDING","resolver","safelyResolveThenable","QueueItem","unwrap","getThen","thenable","onSuccess","tryToUnwrap","tryCatch","iterable","allResolver","resolveFromAll","outValue","_typeof","_classCallCheck","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","isSafari","openDatabase","hasFetch","IDBKeyRange","createBlob","builder","Promise$1","executeCallback","executeTwoCallbacks","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","_checkBlobSupportWithoutCaching","txn","objectStore","put","onabort","oncomplete","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","newVersion","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","isDowngrade","isUpgrade","incVersion","_encodeBlob","onloadend","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","retries","tx","_initStorage","initPromises","ignoreErrors","_defaultConfig","iterate","openCursor","iterationNumber","blobSupport","store","advanced","openKeyCursor","dropInstance","currentConfig","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bufferToString","base64String","valueType","fileReader","deserialize","blobType","Int8Array","Uint8ClampedArray","Int16Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","getItem$1","iterate$1","_setItem","retriesLeft","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","optionalDriverMethod","setDriverSupport","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","FF","_ff","GG","_gg","HH","_hh","II","_ii","bb","_blocksize","_digestsize","digestbytes","asBytes","SRS_WGS84_SEMIMAJOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","ignoredChar","testkey","lkey","defData","paramVal","paramOutname","paramObj","datum","rf","lat_0","lat0","lat_1","lat_2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","rectified_grid_angle","lonc","longc","x_0","y_0","k_0","k0","r_a","R_A","zone","utmSouth","towgs84","datum_params","from_greenwich","pm","nadgrids","datumCode","legalAxis","approx","whitespace","latin","keyword","endThings","digets","place","currentObject","mapit","thing","sExpr","readCharicter","char","neutral","quoted","afterquote","word","afterItem","newObjects","d2r","lisp","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","outName","inName","rename","cleanWKT","ESRI","IAU2000","GOOGLE","codeWords","testObj","testDef","testWKT","auth","checkMercator","maybeProjStr","checkProjStr","testProj","eccent","sinphi","cosphi","con","phi","com","dphi","eccnth","identity","pt","projs","es","msfnz","adjust_lon","tsfnz","phi2z","projStore","ellipseName","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","grids","loadedNadgrids","parseNadgridString","optional","mandatory","grid","isNull","secondsToRadians","seconds","decodeString","mapNodes","longitudeShift","latitudeShift","readGridHeader","lowerLatitude","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","getInt32","readGridNodes","gridHeader","nodesOffset","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","srsCode","parseCode","ourProj","datumDef","sphere_","ecc","getNadgrids","datumObj","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","geocentricToGeodetic","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","genau","checkParams","compareDatums","source_a","source_es","applyGridShift","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricToWgs84","x_tmp","y_tmp","z_tmp","geocentricFromWgs84","attemptedGrids","subgrid","subgrids","del","ll","lim","applySubgridShift","pin","nadInterpolate","dif","inx","frct","f00","cvs","f10","f11","f01","m11","m10","m00","m01","denorm","xin","yin","zin","checkCoord","enforceAxis","toPoint","checkSanity","checkNotWGS","adjust_axis","datum_transform","transformer","transformedArray","checkProj","fromProj","toProj","single","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","mgrs","UTMtoLL","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","get100kSetForZone","setColumn","setRow","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","eccPrimeSquared","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","LongRad","UTMEasting","UTMNorthing","getLetterDesignator","LLtoUTM","N1","T1","C1","R1","LongOrigin","mu","phi1Rad","LetterDesignator","mgrsString","testChar","hunK","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","fromMGRS","mgrsStr","toMGRS","C04","C06","C08","en","sphi","cphi","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","tq","pj_inv_mlfn","tan_phi","asin","log1py","pp","cos_2B","h1","h2","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","cosh_arg_i","hr","hi1","hr1","tmerc","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","clens_cmplx","adjust_zone","etmerc","dependsOn","esinp","rc","phic0","ratexp","srat","gauss","sinc0","cosc0","R2","sinc","cosc","cosl","rho","coslat0","sinlat0","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","Chi","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","b0","k1","k2","k3","Sa1","Sa2","rotI","rotB","phy","prevPhy","iteration","TOL","cosph0","sinph0","gamma0","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","pi","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","s45","s90","fi0","alfa","uq","n0","s0","ro0","ad","gfi","deltav","eps","ro","czech","fi1","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","asq","imlfn","nl1","rl1","tl1","dl","dsq","adjust_lat","P00","P01","P02","P10","P11","P20","S_POLE","N_POLE","EQUIT","OBLIQ","qp","qsfnz","mmf","apa","APA","authset","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","sinb","cosb","cCe","sCe","cosz","sinz","sin_po","cos_po","t1","qs1","t2","qs2","t3","qs0","ns0","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","iqsfnz","dlat","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","iterations","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xys","m1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","GH","Hs","kp","cos_c","s3","s4","cosAz","Ee","sinpsi","FACE_ENUM","AREA_ENUM","qsc_fwd_equat_face_theta","qsc_shift_lon_origin","slon","face","one_minus_f","one_minus_f_squared","sinlon","nu","cosmu","tannu","tantheta","invert_sign","xa","lp","COEFS_X","COEFS_Y","FXC","FYC","NODES","poly3_val","coefs","f_df","max_err","iters","upd","newton_rapshon","poly3_der","azi","degrees","pn1","pfact","omega","cg","sg","cw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","v_x","v_y","v_z","v_zp","Proj","nFields","detectLittleEndian","nSubgridFields","nSubgrids","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","readHeader","gridOffset","subHeader","lngColumnCount","latColumnCount","readSubgrids","nadgrid","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","tpers","geos","_maxEntries","_minEntries","_all","toBBox","_build","_splitRoot","_insert","_condense","compareMinX","compareMinY","fromJSON","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","_allDistMargin","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","ARCHITECTURE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","enums","str1","str2","lowerize","rgxMapper","strMapper","windowsVersionMap","regexes","CHROME","cpu","device","engine","EDGE","extensions","_navigator","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","getUA","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","jQuery","Zepto","__webpack_module_cache__","leafPrototypes","inProgress","dataWebpackPrefix","cachedModule","__webpack_modules__","amdO","chunkId","needAttach","nc","onScriptComplete","doneFns","toStringTag","scriptUrl","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","chunkLoadingGlobal","searchCfg","_searchControl","fi","_searchLayer","getQueryableData","queryableData","typename","outputformat","ip","iip","lbl","lbll","getUrbanAreas","getCommonwealths","getCouncils","searchCommonwealth","searchTyped","searchCouncil","searchUrbanArea","searchMunicipality","idQuery","removeSearch","searchFeature","tcSrchGenericLayer","_onSelectedChange","Tab","_onSelectedChange2","deselectable","allTabs","tabSelected","errorCount","mapLibrary","browserVersions","expired","defaultAjaxUrl","apiError","lineno","colno","previousMapState","appUrl","contactEmail"],"sourceRoot":""}