{"version":3,"file":"012d2e8e-751bb69eebc5cc2fe43c.js","mappings":"+HAmCA,WACE,IAEIA,EAAS,WACX,OAAOC,KADI,GAIRD,GAA2B,oBAAVE,SAAuBF,EAASE,QAItD,IAAIC,EAAS,SAASA,EAAOC,EAAQC,EAAMC,GACnB,iBAAXF,GAQa,GAApBG,UAAUC,SAAaF,EAAUD,GAEhCF,EAAOM,QAAQL,KAClBD,EAAOO,SAASN,GAAUE,EAC1BH,EAAOM,QAAQL,GAAU,OAXrBD,EAAOQ,SAAUR,EAAOQ,SAASC,MAAMX,KAAMM,YAC/CM,QAAQC,MAAM,mDACdD,QAAQE,UAadZ,EAAOM,QAAU,GACjBN,EAAOO,SAAW,GAKlB,IAsFmBM,EACbC,EAvFFC,EAAY,SAAmBC,EAAUf,EAAQgB,GACnD,GAAsB,iBAAXhB,EAAqB,CAC9B,IAAIE,EAAUe,EAAOF,EAAUf,GAE/B,GAAekB,MAAXhB,EAEF,OADAc,GAAYA,IACLd,OAEJ,GAA+C,mBAA3CiB,OAAOC,UAAUC,SAASC,KAAKtB,GAA8B,CAGtE,IAFA,IAAIuB,EAAS,GAEJC,EAAI,EAAGC,EAAIzB,EAAOI,OAAQoB,EAAIC,IAAKD,EAAG,CAC7C,IAAIE,EAAMT,EAAOF,EAAUf,EAAOwB,IAClC,GAAWN,MAAPQ,GAAoBC,EAASpB,SAAU,OAC3CgB,EAAOK,KAAKF,GAGd,OAAOV,GAAYA,EAASR,MAAM,KAAMe,KAAW,IAInDI,EAAW,SAASA,EAAS3B,EAAQgB,GACvC,IAAIa,EAAiBf,EAAU,GAAId,EAAQgB,GAE3C,OAAsBE,MAAlBW,GAA+BF,EAASpB,SAAiBoB,EAASpB,SAASC,MAAMX,KAAMM,WACpF0B,GAGLC,EAAkB,SAASA,EAAgBf,EAAUgB,GAEvD,IAAiC,IAA7BA,EAAWC,QAAQ,KAAa,CAClC,IAAIC,EAASF,EAAWG,MAAM,KAC9B,OAAOJ,EAAgBf,EAAUkB,EAAO,IAAM,IAAMH,EAAgBf,EAAUkB,EAAO,IAIvF,GAA4B,KAAxBF,EAAWI,OAAO,GAIpB,IAFAJ,EADWhB,EAASmB,MAAM,KAAKE,MAAM,GAAI,GAAGC,KAAK,KAC7B,IAAMN,GAEU,IAA7BA,EAAWC,QAAQ,MAAeM,GAAYP,GAAY,CAC/D,IAAIO,EAAWP,EACfA,EAAaA,EAAWQ,QAAQ,SAAU,KAAKA,QAAQ,iBAAkB,IAI7E,OAAOR,GAQLd,EAAS,SAAgBF,EAAUgB,GACrCA,EAAaD,EAAgBf,EAAUgB,GACvC,IAAI/B,EAASD,EAAOM,QAAQ0B,GAE5B,IAAK/B,EAAQ,CAGX,GAAsB,mBAFtBA,EAASD,EAAOO,SAASyB,IAES,CAChC,IAAIS,EAAU,GACVC,EAAM,CACRC,GAAIX,EACJY,IAAK,GACLH,QAASA,EACTI,UAAU,GAQZJ,EADkBxC,GAJR,SAAaA,EAAQgB,GAC7B,OAAOF,EAAUiB,EAAY/B,EAAQgB,KAGTwB,EAASC,IACdA,EAAID,QAC7BzC,EAAOM,QAAQ0B,GAAcS,SACtBzC,EAAOO,SAASyB,GAGzB/B,EAASD,EAAOM,QAAQ0B,GAAcS,GAAWxC,EAGnD,OAAOA,GAIHa,EAAOjB,GADMgB,EAvHC,SA2HXhB,EAAOgB,KAAKhB,EAAOgB,GAAM,IAC9BC,EAAOjB,EAAOgB,IAGXC,EAAKd,QAAWc,EAAKd,OAAO6C,WAC/B7C,EAAOQ,SAAWM,EAAKd,OACvBc,EAAKd,OAASA,EACdc,EAAKd,OAAO6C,UAAW,GAGpB/B,EAAKc,UAAad,EAAKc,SAASiB,WACnCjB,EAASpB,SAAWM,EAAKc,SACzBd,EAAKc,SAAWA,EAChBd,EAAKc,SAASiB,UAAW,GAzI/B,GAgJAC,IAAI9C,OAAO,iBAAkB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC1F,aAEA,IAUM8C,EAVFC,EAAO,CACTC,KAAMC,OAAO7B,UAAU4B,KACvBE,KAAMD,OAAO7B,UAAU8B,KACvBC,MAAOC,OAAOhC,UAAU+B,MACxBZ,QAASa,OAAOhC,UAAUmB,QAC1BL,MAAOkB,OAAOhC,UAAUc,OAEtBmB,OAAsDnC,IAAlC6B,EAAKC,KAAK1B,KAAK,OAAQ,IAAI,GAEnDgC,GACMR,EAAI,KACRC,EAAKG,KAAK5B,KAAKwB,EAAG,KACVA,EAAES,WAyCZ,SAASC,EAAeC,GACtB,OAAQA,EAAM7D,OAAS,IAAM,KAAO6D,EAAMC,WAAa,IAAM,KAAOD,EAAME,UAAY,IAAM,KAAOF,EAAMG,SAAW,IAAM,KAAOH,EAAMI,OAAS,IAAM,IAGxJ,SAAS7B,EAAQ8B,EAAOC,EAAMC,GAC5B,GAAIC,MAAM7C,UAAUY,QAClB,OAAO8B,EAAM9B,QAAQ+B,EAAMC,GAE7B,IAAK,IAAIxC,EAAIwC,GAAQ,EAAGxC,EAAIsC,EAAM1D,OAAQoB,IACxC,GAAIsC,EAAMtC,KAAOuC,EAAM,OAAOvC,EAGhC,OAAQ,EAlDN8B,GAA+BD,IAEnCJ,OAAO7B,UAAU4B,KAAO,SAAUkB,GAChC,IACIC,EACAC,EAFAjB,EAAQJ,EAAKC,KAAKxC,MAAMX,KAAMM,WAIlC,GAAkB,iBAAP+D,GAAmBf,EAAO,CAUnC,IATKE,GAAqBF,EAAM/C,OAAS,GAAK4B,EAAQmB,EAAO,KAAO,IAClEiB,EAAKnB,OAAOpD,KAAKwE,OAAQtB,EAAKR,QAAQjB,KAAKkC,EAAe3D,MAAO,IAAK,KACtEkD,EAAKR,QAAQjB,KAAK4C,EAAI9B,MAAMe,EAAMmB,OAAQF,GAAI,WAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIrB,UAAUC,OAAS,EAAGoB,SACnBN,IAAjBf,UAAUqB,KAAkB2B,EAAM3B,QAAKN,OAK7CrB,KAAK0E,UAAY1E,KAAK0E,SAASC,aACjC,IAAK,IAAIhD,EAAI,EAAGA,EAAI2B,EAAM/C,OAAQoB,KAChC2C,EAAOtE,KAAK0E,SAASC,aAAahD,EAAI,MAC5B2B,EAAMgB,GAAQhB,EAAM3B,KAI7B8B,GAA+BzD,KAAKD,SAAWuD,EAAM,GAAG/C,QAAUP,KAAK0D,UAAYJ,EAAMmB,OAAOzE,KAAK0D,YAG5G,OAAOJ,GAGJG,IACHL,OAAO7B,UAAU8B,KAAO,SAAUgB,GAChC,IAAIf,EAAQJ,EAAKC,KAAK1B,KAAKzB,KAAMqE,GAEjC,OADIf,GAAStD,KAAKD,SAAWuD,EAAM,GAAG/C,QAAUP,KAAK0D,UAAYJ,EAAMmB,OAAOzE,KAAK0D,cAC1EJ,QAmBfN,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC5F,SAASyE,KAEJC,SAAStD,UAAUuD,OACtBD,SAAStD,UAAUuD,KAAO,SAAcC,GAEtC,IAAIC,EAAShF,KAEb,GAAqB,mBAAVgF,EACT,MAAM,IAAIC,UAAU,kDAAoDD,GAG1E,IAAIE,EAAO3C,EAAMd,KAAKnB,UAAW,GAE7B6E,EAAQ,SAASA,IACnB,GAAInF,gBAAgBmF,EAAO,CACzB,IAAIC,EAASJ,EAAOrE,MAAMX,KAAMkF,EAAKG,OAAO9C,EAAMd,KAAKnB,aAEvD,OAAIgB,OAAO8D,KAAYA,EACdA,EAGFpF,KAEP,OAAOgF,EAAOrE,MAAMoE,EAAMG,EAAKG,OAAO9C,EAAMd,KAAKnB,cAUrD,OANI0E,EAAOzD,YACTqD,EAAMrD,UAAYyD,EAAOzD,UACzB4D,EAAM5D,UAAY,IAAIqD,EACtBA,EAAMrD,UAAY,MAGb4D,IAIX,IAQIG,EACAC,EACAC,EACAC,EACAC,EAZAjE,EAAOoD,SAAStD,UAAUE,KAC1BkE,EAAmBvB,MAAM7C,UACzBqE,EAAoBtE,OAAOC,UAC3BgB,EAAQoD,EAAiBpD,MAEzBsD,EAAYpE,EAAKqD,KAAKc,EAAkBpE,UAExCsE,EAAOrE,EAAKqD,KAAKc,EAAkBG,gBAcvC,IAPIL,EAAoBI,EAAKF,EAAmB,uBAC9CN,EAAe7D,EAAKqD,KAAKc,EAAkBI,kBAC3CT,EAAe9D,EAAKqD,KAAKc,EAAkBK,kBAC3CT,EAAe/D,EAAKqD,KAAKc,EAAkBM,kBAC3CT,EAAehE,EAAKqD,KAAKc,EAAkBO,mBAGd,GAA3B,CAAC,EAAG,GAAGC,OAAO,GAAG7F,OACnB,GAAI,WAEF,SAAS8F,EAAUzE,GACjB,IAAI0E,EAAI,IAAIlC,MAAMxC,EAAI,GAEtB,OADA0E,EAAE,GAAKA,EAAE,GAAK,EACPA,EAGT,IACIC,EADAtC,EAAQ,GAUZ,GARAA,EAAMmC,OAAOzF,MAAMsD,EAAOoC,EAAU,KACpCpC,EAAMmC,OAAOzF,MAAMsD,EAAOoC,EAAU,KACpCE,EAAetC,EAAM1D,OAErB0D,EAAMmC,OAAO,EAAG,EAAG,OAECnC,EAAM1D,OAEtBgG,EAAe,GAAKtC,EAAM1D,OAC5B,OAAO,EAnBP,GAqBC,CAEH,IAAIiG,EAAepC,MAAM7C,UAAU6E,OAEnChC,MAAM7C,UAAU6E,OAAS,SAAUK,EAAOC,GACxC,OAAKpG,UAAUC,OAGNiG,EAAa7F,MAAMX,KAAM,MAAW,IAAVyG,EAAmB,EAAIA,OAAuB,IAAhBC,EAAyB1G,KAAKO,OAASkG,EAAQC,GAAarB,OAAO9C,EAAMd,KAAKnB,UAAW,KAFjJ,SAOX8D,MAAM7C,UAAU6E,OAAS,SAAUO,EAAKC,GACtC,IAAIrG,EAASP,KAAKO,OAEdoG,EAAM,EACJA,EAAMpG,IAAQoG,EAAMpG,GACR,MAAPoG,EACTA,EAAM,EACGA,EAAM,IACfA,EAAME,KAAKC,IAAIvG,EAASoG,EAAK,IAGzBA,EAAMC,EAAcrG,IAASqG,EAAcrG,EAASoG,GAC1D,IAAII,EAAU/G,KAAKuC,MAAMoE,EAAKA,EAAMC,GAChCI,EAASzE,EAAMd,KAAKnB,UAAW,GAC/B2G,EAAMD,EAAOzG,OAEjB,GAAIoG,IAAQpG,EACN0G,GACFjH,KAAK+B,KAAKpB,MAAMX,KAAMgH,OAEnB,CACL,IAAIE,EAASL,KAAKM,IAAIP,EAAarG,EAASoG,GACxCS,EAAaT,EAAMO,EACnBG,EAAaD,EAAaH,EAAMC,EAChCI,EAAY/G,EAAS6G,EACrBG,EAAoBhH,EAAS2G,EAEjC,GAAIG,EAAaD,EAEf,IAAK,IAAIzF,EAAI,EAAGA,EAAI2F,IAAa3F,EAC/B3B,KAAKqH,EAAa1F,GAAK3B,KAAKoH,EAAazF,QAEtC,GAAI0F,EAAaD,EAEtB,IAAKzF,EAAI2F,EAAW3F,KAClB3B,KAAKqH,EAAa1F,GAAK3B,KAAKoH,EAAazF,GAK7C,GAAIsF,GAAON,IAAQY,EACjBvH,KAAKO,OAASgH,EAEdvH,KAAK+B,KAAKpB,MAAMX,KAAMgH,QAItB,IAFAhH,KAAKO,OAASgH,EAAoBN,EAE7BtF,EAAI,EAAGA,EAAIsF,IAAOtF,EACrB3B,KAAK2G,EAAMhF,GAAKqF,EAAOrF,GAK7B,OAAOoF,GAKR3C,MAAMoD,UACTpD,MAAMoD,QAAU,SAAiBC,GAC/B,MAAyB,kBAAlB5B,EAAU4B,KAIrB,IAwTMC,EAqH4BC,EA7a9BC,EAActG,OAAO,KACrBuG,EAAgC,KAAlBD,EAAY,MAAe,KAAKA,GAiRlD,GA/QKxD,MAAM7C,UAAUuG,UACnB1D,MAAM7C,UAAUuG,QAAU,SAAiBC,GAGzC,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EG,EAAQ7H,UAAU,GAClBqB,GAAK,EACLpB,EAAS2H,EAAK3H,SAAW,EAE7B,GAAsB,qBAAlBsF,EAAUkC,GACZ,MAAM,IAAI9C,UAGZ,OAAStD,EAAIpB,GACPoB,KAAKuG,GACPH,EAAItG,KAAK0G,EAAOD,EAAKvG,GAAIA,EAAGqG,KAM/B5D,MAAM7C,UAAU6G,MACnBhE,MAAM7C,UAAU6G,IAAM,SAAaL,GAGjC,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EACzB6E,EAAShB,MAAM7D,GACf4H,EAAQ7H,UAAU,GAEtB,GAAsB,qBAAlBuF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAK,IAAIpG,EAAI,EAAGA,EAAIpB,EAAQoB,IACtBA,KAAKuG,IAAM9C,EAAOzD,GAAKoG,EAAItG,KAAK0G,EAAOD,EAAKvG,GAAIA,EAAGqG,IAGzD,OAAO5C,IAINhB,MAAM7C,UAAU8G,SACnBjE,MAAM7C,UAAU8G,OAAS,SAAgBN,GAGvC,IAIIO,EAJAN,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EACzB6E,EAAS,GAET+C,EAAQ7H,UAAU,GAEtB,GAAsB,qBAAlBuF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAK,IAAIpG,EAAI,EAAGA,EAAIpB,EAAQoB,IACtBA,KAAKuG,IACPI,EAAQJ,EAAKvG,GAEToG,EAAItG,KAAK0G,EAAOG,EAAO3G,EAAGqG,IAC5B5C,EAAOrD,KAAKuG,IAKlB,OAAOlD,IAINhB,MAAM7C,UAAUgH,QACnBnE,MAAM7C,UAAUgH,MAAQ,SAAeR,GAGrC,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EACzB4H,EAAQ7H,UAAU,GAEtB,GAAsB,qBAAlBuF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAK,IAAIpG,EAAI,EAAGA,EAAIpB,EAAQoB,IAC1B,GAAIA,KAAKuG,IAASH,EAAItG,KAAK0G,EAAOD,EAAKvG,GAAIA,EAAGqG,GAC5C,OAAO,EAIX,OAAO,IAIN5D,MAAM7C,UAAUiH,OACnBpE,MAAM7C,UAAUiH,KAAO,SAAcT,GAGnC,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EACzB4H,EAAQ7H,UAAU,GAEtB,GAAsB,qBAAlBuF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAK,IAAIpG,EAAI,EAAGA,EAAIpB,EAAQoB,IAC1B,GAAIA,KAAKuG,GAAQH,EAAItG,KAAK0G,EAAOD,EAAKvG,GAAIA,EAAGqG,GAC3C,OAAO,EAIX,OAAO,IAIN5D,MAAM7C,UAAUkH,SACnBrE,MAAM7C,UAAUkH,OAAS,SAAgBV,GAGvC,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EAE7B,GAAsB,qBAAlBsF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAKxH,GAA8B,GAApBD,UAAUC,OACvB,MAAM,IAAI0E,UAAU,+CAGtB,IACIG,EADAzD,EAAI,EAGR,GAAIrB,UAAUC,QAAU,EACtB6E,EAAS9E,UAAU,QAEnB,OAAG,CACD,GAAIqB,KAAKuG,EAAM,CACb9C,EAAS8C,EAAKvG,KACd,MAGF,KAAMA,GAAKpB,EACT,MAAM,IAAI0E,UAAU,+CAK1B,KAAOtD,EAAIpB,EAAQoB,IACbA,KAAKuG,IACP9C,EAAS2C,EAAItG,UAAK,EAAQ2D,EAAQ8C,EAAKvG,GAAIA,EAAGqG,IAIlD,OAAO5C,IAINhB,MAAM7C,UAAUmH,cACnBtE,MAAM7C,UAAUmH,YAAc,SAAqBX,GAGjD,IAAIC,EAASC,EAASjI,MAClBkI,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM2F,EAC9EzH,EAAS2H,EAAK3H,SAAW,EAE7B,GAAsB,qBAAlBsF,EAAUkC,GACZ,MAAM,IAAI9C,UAAU8C,EAAM,sBAG5B,IAAKxH,GAA8B,GAApBD,UAAUC,OACvB,MAAM,IAAI0E,UAAU,oDAGtB,IAAIG,EACAzD,EAAIpB,EAAS,EAEjB,GAAID,UAAUC,QAAU,EACtB6E,EAAS9E,UAAU,QAEnB,OAAG,CACD,GAAIqB,KAAKuG,EAAM,CACb9C,EAAS8C,EAAKvG,KACd,MAGF,KAAMA,EAAI,EACR,MAAM,IAAIsD,UAAU,oDAK1B,GACMtD,KAAK3B,OACPoF,EAAS2C,EAAItG,UAAK,EAAQ2D,EAAQ8C,EAAKvG,GAAIA,EAAGqG,UAEzCrG,KAET,OAAOyD,IAINhB,MAAM7C,UAAUY,UAAoC,GAAzB,CAAC,EAAG,GAAGA,QAAQ,EAAG,KAChDiC,MAAM7C,UAAUY,QAAU,SAAiBwG,GAGzC,IAAIT,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM4F,EAASjI,MACvFO,EAAS2H,EAAK3H,SAAW,EAE7B,IAAKA,EACH,OAAQ,EAGV,IAAIoB,EAAI,EAQR,IANIrB,UAAUC,OAAS,IACrBoB,EAAIiH,EAAUtI,UAAU,KAG1BqB,EAAIA,GAAK,EAAIA,EAAIkF,KAAKC,IAAI,EAAGvG,EAASoB,GAE/BA,EAAIpB,EAAQoB,IACjB,GAAIA,KAAKuG,GAAQA,EAAKvG,KAAOgH,EAC3B,OAAOhH,EAIX,OAAQ,IAIPyC,MAAM7C,UAAUsH,cAA6C,GAA9B,CAAC,EAAG,GAAGA,YAAY,GAAI,KACzDzE,MAAM7C,UAAUsH,YAAc,SAAqBF,GAGjD,IAAIT,EAAOL,GAAkC,mBAAnBhC,EAAU7F,MAA6BA,KAAKqC,MAAM,IAAM4F,EAASjI,MACvFO,EAAS2H,EAAK3H,SAAW,EAE7B,IAAKA,EACH,OAAQ,EAGV,IAAIoB,EAAIpB,EAAS,EAQjB,IANID,UAAUC,OAAS,IACrBoB,EAAIkF,KAAKM,IAAIxF,EAAGiH,EAAUtI,UAAU,MAGtCqB,EAAIA,GAAK,EAAIA,EAAIpB,EAASsG,KAAKiC,IAAInH,GAE5BA,GAAK,EAAGA,IACb,GAAIA,KAAKuG,GAAQS,IAAWT,EAAKvG,GAC/B,OAAOA,EAIX,OAAQ,IAIPL,OAAOyH,iBACVzH,OAAOyH,eAAiB,SAAwBf,GAC9C,OAAOA,EAAOgB,YAAchB,EAAOiB,YAAcjB,EAAOiB,YAAY1H,UAAYqE,MAI/EtE,OAAO4H,yBAA0B,CAGpC5H,OAAO4H,yBAA2B,SAAkClB,EAAQmB,GAC1E,GAAqB,iBAAVnB,GAAuC,mBAAVA,GAAmC,OAAXA,EAAiB,MAAM,IAAI/C,UAHxE,2DAGmG+C,GACtH,GAAKlC,EAAKkC,EAAQmB,GAAlB,CACA,IAAIC,EAMJ,GALAA,EAAa,CACXC,YAAY,EACZC,cAAc,GAGZ5D,EAAmB,CACrB,IAAInE,EAAYyG,EAAOgB,UACvBhB,EAAOgB,UAAYpD,EACnB,IAAI2D,EAAS/D,EAAawC,EAAQmB,GAC9BK,EAAS/D,EAAauC,EAAQmB,GAGlC,GAFAnB,EAAOgB,UAAYzH,EAEfgI,GAAUC,EAGZ,OAFID,IAAQH,EAAWK,IAAMF,GACzBC,IAAQJ,EAAWM,IAAMF,GACtBJ,EAKX,OADAA,EAAWd,MAAQN,EAAOmB,GACnBC,KAIN9H,OAAOqI,sBACVrI,OAAOqI,oBAAsB,SAA6B3B,GACxD,OAAO1G,OAAOsI,KAAK5B,KAIlB1G,OAAOuI,UAIRnC,EADiC,OAA/BpG,OAAOC,UAAUyH,UACL,WACZ,MAAO,CACL,UAAa,OAIH,WACZ,IAAIc,EAAQ,GAEZ,IAAK,IAAInI,KAAKmI,EACZA,EAAMnI,GAAK,KAIb,OADAmI,EAAMb,YAAca,EAAM/D,eAAiB+D,EAAMC,qBAAuBD,EAAME,cAAgBF,EAAMG,eAAiBH,EAAMtI,SAAWsI,EAAMI,QAAUJ,EAAMd,UAAY,KACjKc,GAIXxI,OAAOuI,OAAS,SAAgBtI,EAAW4I,GACzC,IAAInC,EAEJ,GAAkB,OAAdzG,EACFyG,EAASN,QACJ,CACL,GAAwB,iBAAbnG,EAAuB,MAAM,IAAI0D,UAAU,2BAA6B1D,EAAY,iBAE/F,IAAI6I,EAAO,aAEXA,EAAK7I,UAAYA,GACjByG,EAAS,IAAIoC,GACNpB,UAAYzH,EAIrB,YADmB,IAAf4I,GAAuB7I,OAAO+I,iBAAiBrC,EAAQmC,GACpDnC,IAIX,SAASsC,EAAuBtC,GAC9B,IAEE,OADA1G,OAAOiJ,eAAevC,EAAQ,WAAY,IACnC,aAAcA,EACrB,MAAOwC,KAGX,GAAIlJ,OAAOiJ,eAAgB,CACzB,IAAIE,EAA8BH,EAAuB,IACrDI,EAA8C,oBAAZC,UAA2BL,EAAuBK,SAASC,cAAc,QAE/G,IAAKH,IAAgCC,EACnC,IAAIG,EAAyBvJ,OAAOiJ,eAIxC,IAAKjJ,OAAOiJ,gBAAkBM,EAAwB,CAKpDvJ,OAAOiJ,eAAiB,SAAwBvC,EAAQmB,EAAUC,GAChE,GAAqB,iBAAVpB,GAAuC,mBAAVA,GAAmC,OAAXA,EAAiB,MAAM,IAAI/C,UAJjE,+CAImG+C,GAC7H,GAAyB,iBAAdoB,GAA+C,mBAAdA,GAA2C,OAAfA,EAAqB,MAAM,IAAInE,UANzE,2CAM+GmE,GAE7I,GAAIyB,EACF,IACE,OAAOA,EAAuBpJ,KAAKH,OAAQ0G,EAAQmB,EAAUC,GAC7D,MAAOoB,IAGX,GAAI1E,EAAKsD,EAAY,SACnB,GAAI1D,IAAsBF,EAAawC,EAAQmB,IAAa1D,EAAauC,EAAQmB,IAAY,CAC3F,IAAI5H,EAAYyG,EAAOgB,UACvBhB,EAAOgB,UAAYpD,SACZoC,EAAOmB,GACdnB,EAAOmB,GAAYC,EAAWd,MAC9BN,EAAOgB,UAAYzH,OAEnByG,EAAOmB,GAAYC,EAAWd,UAE3B,CACL,IAAK5C,EAAmB,MAAM,IAAIT,UAvBJ,kEAwB1Ba,EAAKsD,EAAY,QAAQ9D,EAAa0C,EAAQmB,EAAUC,EAAWK,KACnE3D,EAAKsD,EAAY,QAAQ7D,EAAayC,EAAQmB,EAAUC,EAAWM,KAGzE,OAAO1B,GAIN1G,OAAO+I,mBACV/I,OAAO+I,iBAAmB,SAA0BrC,EAAQmC,GAC1D,IAAK,IAAIhB,KAAYgB,EACfrE,EAAKqE,EAAYhB,IAAW7H,OAAOiJ,eAAevC,EAAQmB,EAAUgB,EAAWhB,IAGrF,OAAOnB,IAIN1G,OAAOwJ,OACVxJ,OAAOwJ,KAAO,SAAc9C,GAC1B,OAAOA,IAIN1G,OAAOyJ,SACVzJ,OAAOyJ,OAAS,SAAgB/C,GAC9B,OAAOA,IAIX,IACE1G,OAAOyJ,QAAO,eACd,MAAOP,GACPlJ,OAAOyJ,QAAyBpD,EAQ9BrG,OAAOyJ,OAPA,SAAgB/C,GACrB,MAAqB,mBAAVA,EACFA,EAEAL,EAAaK,KA2C5B,GArCK1G,OAAO0J,oBACV1J,OAAO0J,kBAAoB,SAA2BhD,GACpD,OAAOA,IAIN1G,OAAO2J,WACV3J,OAAO2J,SAAW,SAAkBjD,GAClC,OAAO,IAIN1G,OAAO4J,WACV5J,OAAO4J,SAAW,SAAkBlD,GAClC,OAAO,IAIN1G,OAAO6J,eACV7J,OAAO6J,aAAe,SAAsBnD,GAC1C,GAAI1G,OAAO0G,KAAYA,EACrB,MAAM,IAAI/C,UAKZ,IAFA,IAAIX,EAAO,GAEJwB,EAAKkC,EAAQ1D,IAClBA,GAAQ,IAGV0D,EAAO1D,IAAQ,EACf,IAAI8G,EAActF,EAAKkC,EAAQ1D,GAE/B,cADO0D,EAAO1D,GACP8G,KAIN9J,OAAOsI,KAAM,CAChB,IAAIyB,GAAiB,EACjBC,EAAY,CAAC,WAAY,iBAAkB,UAAW,iBAAkB,gBAAiB,uBAAwB,eACjHC,EAAkBD,EAAU/K,OAEhC,IAAK,IAAIiL,IAAO,CACd,SAAY,MAEZH,GAAiB,EAGnB/J,OAAOsI,KAAO,SAAc5B,GAC1B,GAAqB,iBAAVA,GAAuC,mBAAVA,GAAmC,OAAXA,EAC9D,MAAM,IAAI/C,UAAU,sCAGtB,IAAI2E,EAAO,GAEX,IAAK,IAAItF,KAAQ0D,EACXlC,EAAKkC,EAAQ1D,IACfsF,EAAK7H,KAAKuC,GAId,GAAI+G,EACF,IAAK,IAAI1J,EAAI,EAAG8J,EAAKF,EAAiB5J,EAAI8J,EAAI9J,IAAK,CACjD,IAAI+J,EAAWJ,EAAU3J,GAErBmE,EAAKkC,EAAQ0D,IACf9B,EAAK7H,KAAK2J,GAKhB,OAAO9B,GAIN+B,KAAKC,MACRD,KAAKC,IAAM,WACT,OAAO,IAAID,MAAOE,YAItB,IAAIC,EAAK,iDAET,IAAKvI,OAAOhC,UAAUwK,MAAQD,EAAGC,OAAQ,CACvCD,EAAK,IAAMA,EAAK,IAChB,IAAIE,EAAkB,IAAI5I,OAAO,IAAM0I,EAAKA,EAAK,KAC7CG,EAAgB,IAAI7I,OAAO0I,EAAKA,EAAK,MAEzCvI,OAAOhC,UAAUwK,KAAO,WACtB,OAAOxI,OAAOvD,MAAM0C,QAAQsJ,EAAiB,IAAItJ,QAAQuJ,EAAe,KAI5E,SAASrD,EAAUsD,GAUjB,OATAA,GAAKA,IAEKA,EAERA,EAAI,EACW,IAANA,GAAWA,IAAM,KAASA,KAAO,MAC1CA,GAAKA,EAAI,IAAM,GAAKrF,KAAKsF,MAAMtF,KAAKiC,IAAIoD,KAGnCA,EAsCT,IAAIjE,EAAW,SAAkBmE,GAC/B,GAAS,MAALA,EAEF,MAAM,IAAInH,UAAU,iBAAmBmH,EAAI,cAG7C,OAAO9K,OAAO8K,OAGlBpJ,IAAI9C,OAAO,yBAA0B,CAAC,UAAW,UAAW,SAAU,iBAAkB,qBAAqB,SAAU4B,EAAUa,EAASxC,GACxI,aAEA2B,EAAS,YACTA,EAAS,iBAEXkB,IAAI9C,OAAO,cAAe,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACvF,aAIAwC,EAAQ0J,gBAAkB,SAAUC,GAElC,OADKA,IAAKA,EAAM3B,UACT2B,EAAIC,MAAQD,EAAIE,qBAAqB,QAAQ,IAAMF,EAAIG,iBAGhE9J,EAAQiI,cAAgB,SAAU8B,EAAK3L,GACrC,OAAO4J,SAASgC,gBAAkBhC,SAASgC,gBAAgB5L,GAR9C,+BAQ8D2L,GAAO/B,SAASC,cAAc8B,IAG3G/J,EAAQiK,YAAc,SAAUC,EAAIvI,GAElC,OAAkC,KADnBuI,EAAGC,UAAY,IAAIzK,MAAM,QACzBF,QAAQmC,IAGzB3B,EAAQoK,YAAc,SAAUF,EAAIvI,GAC7B3B,EAAQiK,YAAYC,EAAIvI,KAC3BuI,EAAGC,WAAa,IAAMxI,IAI1B3B,EAAQqK,eAAiB,SAAUH,EAAIvI,GAGrC,IAFA,IAAI2I,EAAUJ,EAAGC,UAAUzK,MAAM,UAEpB,CACX,IAAIoC,EAAQwI,EAAQ9K,QAAQmC,GAE5B,IAAc,GAAVG,EACF,MAGFwI,EAAQ7G,OAAO3B,EAAO,GAGxBoI,EAAGC,UAAYG,EAAQzK,KAAK,MAG9BG,EAAQuK,eAAiB,SAAUL,EAAIvI,GAIrC,IAHA,IAAI2I,EAAUJ,EAAGC,UAAUzK,MAAM,QAC7B4E,GAAM,IAEG,CACX,IAAIxC,EAAQwI,EAAQ9K,QAAQmC,GAE5B,IAAc,GAAVG,EACF,MAGFwC,GAAM,EACNgG,EAAQ7G,OAAO3B,EAAO,GAKxB,OAFIwC,GAAKgG,EAAQlL,KAAKuC,GACtBuI,EAAGC,UAAYG,EAAQzK,KAAK,KACrByE,GAGTtE,EAAQwK,YAAc,SAAUC,EAAMN,EAAWO,GAC3CA,EACF1K,EAAQoK,YAAYK,EAAMN,GAE1BnK,EAAQqK,eAAeI,EAAMN,IAIjCnK,EAAQ2K,aAAe,SAAUzK,EAAIyJ,GACnC,IACIiB,EADA9I,EAAQ,EAIZ,IAFA6H,EAAMA,GAAO3B,UAEL6C,mBAAqBD,EAASjB,EAAImB,cACxC,KAAOhJ,EAAQ8I,EAAOhN,QACpB,GAAIgN,EAAO9I,KAASiJ,cAAc7K,KAAOA,EAAI,OAAO,OAEjD,GAAI0K,EAASjB,EAAIE,qBAAqB,SAC3C,KAAO/H,EAAQ8I,EAAOhN,QACpB,GAAIgN,EAAO9I,KAAS5B,KAAOA,EAAI,OAAO,EAI1C,OAAO,GAGTF,EAAQgL,gBAAkB,SAAyBC,EAAS/K,EAAIyJ,GAE9D,GADAA,EAAMA,GAAO3B,SACT9H,GAAMF,EAAQ2K,aAAazK,EAAIyJ,GAAM,OAAO,KAChD,IAAIuB,EACAhL,IAAI+K,GAAW,2BAA6B/K,EAAK,OAEjDyJ,EAAIkB,mBACNK,EAAQvB,EAAIkB,oBACNI,QAAUA,EACZ/K,IAAIgL,EAAMH,cAAc7K,GAAKA,MAEjCgL,EAAQlL,EAAQiI,cAAc,UACxBkD,YAAYxB,EAAIyB,eAAeH,IACjC/K,IAAIgL,EAAMhL,GAAKA,GACnBF,EAAQ0J,gBAAgBC,GAAKwB,YAAYD,KAI7ClL,EAAQqL,mBAAqB,SAAUlL,EAAKwJ,GAC1C,GAAIA,EAAIkB,iBACNlB,EAAIkB,iBAAiB1K,OAChB,CACL,IAAImL,EAAOtL,EAAQiI,cAAc,QACjCqD,EAAKC,IAAM,aACXD,EAAKE,KAAOrL,EACZH,EAAQ0J,gBAAgBC,GAAKwB,YAAYG,KAI7CtL,EAAQyL,cAAgB,SAAUC,GAChC,OAAOC,SAAS3L,EAAQ4L,cAAcF,EAAS,eAAgB,IAAMC,SAAS3L,EAAQ4L,cAAcF,EAAS,gBAAiB,IAAMA,EAAQG,aAG9I7L,EAAQ8L,eAAiB,SAAUJ,GACjC,OAAOC,SAAS3L,EAAQ4L,cAAcF,EAAS,cAAe,IAAMC,SAAS3L,EAAQ4L,cAAcF,EAAS,iBAAkB,IAAMA,EAAQK,cAG9I/L,EAAQgM,eAAiB,SAAUhE,GACjC,IAAIiE,EAAQjM,EAAQiI,cAAc,aAClCgE,EAAMf,MAAMgB,MAAQ,OACpBD,EAAMf,MAAMiB,SAAW,MACvBF,EAAMf,MAAMkB,OAAS,QACrBH,EAAMf,MAAMmB,QAAU,QACtB,IAAIC,EAAQtM,EAAQiI,cAAc,aAC9BiD,EAAQoB,EAAMpB,MAClBA,EAAMqB,SAAW,WACjBrB,EAAMsB,KAAO,WACbtB,EAAMuB,SAAW,SACjBvB,EAAMgB,MAAQ,QACdhB,EAAMiB,SAAW,MACjBjB,EAAMkB,OAAS,QACflB,EAAMmB,QAAU,QAChBC,EAAMnB,YAAYc,GAClB,IAAIS,EAAO1E,EAAS8B,gBACpB4C,EAAKvB,YAAYmB,GACjB,IAAIK,EAAcV,EAAMW,YACxB1B,EAAMuB,SAAW,SACjB,IAAII,EAAgBZ,EAAMW,YAO1B,OALID,GAAeE,IACjBA,EAAgBP,EAAMT,aAGxBa,EAAKI,YAAYR,GACVK,EAAcE,GAGA,oBAAZ7E,eAMgBtJ,IAAvBpB,OAAOyP,aACT/M,EAAQgN,iBAAmB,WACzB,OAAO1P,OAAOyP,aAGhB/M,EAAQiN,kBAAoB,WAC1B,OAAO3P,OAAO4P,eAGhBlN,EAAQgN,iBAAmB,WACzB,OAAOhF,SAAS0E,KAAKS,WAGvBnN,EAAQiN,kBAAoB,WAC1B,OAAOjF,SAAS0E,KAAKU,aAIrB9P,OAAO+P,iBAAkBrN,EAAQ4L,cAAgB,SAAUF,EAASR,GACtE,OAAIA,GAAe5N,OAAO+P,iBAAiB3B,EAAS,KAAO,IAAIR,IAAU,GAClE5N,OAAO+P,iBAAiB3B,EAAS,KAAO,IAC1C1L,EAAQ4L,cAAgB,SAAUF,EAASR,GAChD,OAAIA,EAAcQ,EAAQ4B,aAAapC,GAChCQ,EAAQ4B,cAGjBtN,EAAQuN,aAAe,SAAUrD,EAAIsD,GACnC,IAAI9B,EAAUxB,EAAGuD,WAAU,GAI3B,OAFA/B,EAAQgC,UAAYF,EACpBtD,EAAGyD,WAAWC,aAAalC,EAASxB,GAC7BwB,GAGL,gBAAiB1D,SAAS8B,iBAC5B9J,EAAQ6N,aAAe,SAAU3D,EAAI4D,GACnC5D,EAAG6D,YAAcD,GAGnB9N,EAAQgO,aAAe,SAAU9D,GAC/B,OAAOA,EAAG6D,eAGZ/N,EAAQ6N,aAAe,SAAU3D,EAAI4D,GACnC5D,EAAG4D,UAAYA,GAGjB9N,EAAQgO,aAAe,SAAU9D,GAC/B,OAAOA,EAAG4D,YAId9N,EAAQiO,gBAAkB,SAAUjG,GAClC,OAAOA,EAASkG,aAAelG,EAASmG,eA1DxCnO,EAAQgL,gBAAkB,gBA6D9B3K,IAAI9C,OAAO,cAAe,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACvF,aAEAwC,EAAQoO,SAAW,SAAUC,EAAMC,GACjCD,EAAKE,OAASD,EACdD,EAAKzP,UAAYD,OAAOuI,OAAOoH,EAAU1P,UAAW,CAClD0H,YAAa,CACXX,MAAO0I,EACP3H,YAAY,EACZ8H,UAAU,EACV7H,cAAc,MAKpB3G,EAAQyO,MAAQ,SAAU3J,EAAK2J,GAC7B,IAAK,IAAI5F,KAAO4F,EACd3J,EAAI+D,GAAO4F,EAAM5F,GAGnB,OAAO/D,GAGT9E,EAAQ0O,UAAY,SAAUC,EAAOF,GACnCzO,EAAQyO,MAAME,EAAOF,OAGzBpO,IAAI9C,OAAO,eAAgB,CAAC,UAAW,UAAW,SAAU,yBAA0B,gBAAgB,SAAU4B,EAAUa,EAASxC,GACjI,aAEA2B,EAAS,oBACT,IAAIyP,EAAMzP,EAAS,SAEf0P,EAAO,WACT,IAuHIlN,EAAM3C,EAvHN8P,EAAM,CACRC,cAAe,CACb,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,IAAK,QAEPC,SAAU,CACR,KAAQ,EACR,IAAO,EACP,OAAU,EACV,MAAS,EACT,MAAS,EACT,KAAQ,EACR,QAAW,EACX,IAAO,GAETC,cAAe,CACb,EAAG,YACH,EAAG,MACH,GAAI,SACJ,GAAI,QACJ,GAAI,MACJ,GAAI,QACJ,GAAI,SACJ,GAAI,WACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,KACJ,GAAI,QACJ,GAAI,OACJ,GAAI,QACJ,GAAI,SACJ,GAAI,SACJ,GAAI,UACJ,GAAI,UACJ,GAAI,UACJ,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,MAAO,cACP,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,cAEPC,eAAgB,CACd,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MAKT,IAAKlQ,KAAK8P,EAAIG,cACZtN,EAAOmN,EAAIG,cAAcjQ,GAAGmQ,cAC5BL,EAAInN,GAAQgK,SAAS3M,EAAG,IAG1B,IAAKA,KAAK8P,EAAII,eACZvN,EAAOmN,EAAII,eAAelQ,GAAGmQ,cAC7BL,EAAInN,GAAQgK,SAAS3M,EAAG,IAuB1B,OApBA4P,EAAIH,MAAMK,EAAKA,EAAIC,eACnBH,EAAIH,MAAMK,EAAKA,EAAII,gBACnBN,EAAIH,MAAMK,EAAKA,EAAIG,eACnBH,EAAIM,MAAQN,EAAY,OACxBA,EAAIO,OAASP,EAAIQ,IACjBR,EAAIS,IAAMT,EAAY,OACtBA,EAAI,KAAO,IAEX,WAGE,IAFA,IAAIU,EAAO,CAAC,MAAO,OAAQ,MAAO,SAEzBxQ,EAAIkF,KAAKuL,IAAI,EAAGD,EAAK5R,QAASoB,KACrC8P,EAAIE,SAAShQ,GAAKwQ,EAAK9J,QAAO,SAAUpF,GACtC,OAAOtB,EAAI8P,EAAIE,SAAS1O,MACvBT,KAAK,KAAO,IANnB,GAUAiP,EAAIE,SAAS,GAAK,GAClBF,EAAIE,UAAU,GAAK,SACZF,EAxJE,GA2JXF,EAAIH,MAAMzO,EAAS6O,GAEnB7O,EAAQ0P,gBAAkB,SAAUC,GAClC,IAAIC,EAAYf,EAAKc,GAErB,MADwB,iBAAbC,IAAuBA,EAAYhP,OAAOiP,aAAaF,IAC3DC,EAAUT,kBAGrB9O,IAAI9C,OAAO,oBAAqB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC7F,aAkBA,GAhBAwC,EAAQ8P,GAAK,CACXC,MAAO,QACPC,IAAK,MACLC,QAAS,WAGXjQ,EAAQkQ,MAAQ,WACd,OAAIlQ,EAAQmQ,MACHnQ,EAAQ8P,GAAGE,IACThQ,EAAQoQ,QACVpQ,EAAQ8P,GAAGC,MAEX/P,EAAQ8P,GAAGG,SAIE,iBAAbI,UAAX,CACA,IAAIC,GAAMD,UAAUE,SAAS5P,MAAM,mBAAqB,CAAC,UAAU,GAAGwO,cAClEqB,EAAKH,UAAUI,UACnBzQ,EAAQ0Q,MAAc,OAANJ,EAChBtQ,EAAQmQ,MAAc,OAANG,EAChBtQ,EAAQoQ,QAAgB,SAANE,EAClBtQ,EAAQ2Q,KAA4B,+BAArBN,UAAUO,SAA4CP,UAAUO,QAAQpR,QAAQ,cAAgB,EAAIqR,YAAYL,EAAG7P,MAAM,4DAA8D,IAAI,IAAMkQ,YAAYL,EAAG7P,MAAM,sDAAwD,IAAI,IAEjSX,EAAQ8Q,QAAU9Q,EAAQ2Q,MAAQ3Q,EAAQ2Q,KAAO,EACjD3Q,EAAQ+Q,QAAU/Q,EAAQgR,WAAa1T,OAAO2T,aAAe3T,OAAO4T,cAA6C,UAA7B5T,OAAO+S,UAAUc,QACrGnR,EAAQoR,WAAapR,EAAQ+Q,SAAWpF,UAAU6E,EAAG7P,MAAM,aAAe,IAAI,GAAI,IAAM,EACxFX,EAAQqR,QAAU/T,OAAOgU,OAAyD,kBAAhD3S,OAAOC,UAAUC,SAASC,KAAKxB,OAAOgU,OACxEtR,EAAQuR,SAAWV,WAAWL,EAAG9Q,MAAM,WAAW,UAAOhB,EACzDsB,EAAQwR,SAAWX,WAAWL,EAAG9Q,MAAM,YAAY,UAAOhB,EAC1DsB,EAAQyR,MAAQjB,EAAGhR,QAAQ,aAAe,EAC1CQ,EAAQ0R,OAASlB,EAAGhR,QAAQ,SAAW,EACvCQ,EAAQ2R,WAAanB,EAAGhR,QAAQ,WAAa,EAC7CQ,EAAQ4R,MAAQ,mBAAmBlR,KAAK8P,KAAQlT,OAAOuU,SACnD7R,EAAQ4R,QAAO5R,EAAQmQ,OAAQ,OAErC9P,IAAI9C,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,eAAgB,sBAAsB,SAAU4B,EAAUa,EAASxC,GAC9H,aAEA,IAAIyJ,EAAO9H,EAAS,UAChB2S,EAAY3S,EAAS,eACrB4S,EAAc,KACdC,EAAK,EAEThS,EAAQiS,YAAc,SAAUC,EAAMC,EAAM3T,GAC1C,GAAI0T,EAAKE,iBACP,OAAOF,EAAKE,iBAAiBD,EAAM3T,GAAU,GAG/C,GAAI0T,EAAKG,YAAa,CACpB,IAAIC,EAAU,WACZ9T,EAASM,KAAKoT,EAAM5U,OAAOiV,QAG7B/T,EAASgU,SAAWF,EACpBJ,EAAKG,YAAY,KAAOF,EAAMG,KAIlCtS,EAAQyS,eAAiB,SAAUP,EAAMC,EAAM3T,GAC7C,GAAI0T,EAAKQ,oBACP,OAAOR,EAAKQ,oBAAoBP,EAAM3T,GAAU,GAG9C0T,EAAKS,aACPT,EAAKS,YAAY,KAAOR,EAAM3T,EAASgU,UAAYhU,IAIvDwB,EAAQ4S,UAAY,SAAUC,GAG5B,OAFA7S,EAAQ8S,gBAAgBD,GACxB7S,EAAQ+S,eAAeF,IAChB,GAGT7S,EAAQ8S,gBAAkB,SAAUD,GAC9BA,EAAEC,gBAAiBD,EAAEC,kBAAuBD,EAAEG,cAAe,GAGnEhT,EAAQ+S,eAAiB,SAAUF,GAC7BA,EAAEE,eAAgBF,EAAEE,iBAAsBF,EAAEpK,aAAc,GAGhEzI,EAAQiT,UAAY,SAAUJ,GAC5B,MAAc,YAAVA,EAAEV,KAA2B,EACnB,eAAVU,EAAEV,MAAyBL,EAAU3B,OAAS0C,EAAEK,UAAYL,EAAEM,SAAWN,EAAEO,SAAiB,EAE5FP,EAAEE,eACGF,EAAEQ,OAEF,CACL,EAAG,EACH,EAAG,EACH,EAAG,GACHR,EAAEQ,SAIRrT,EAAQsT,QAAU,SAAUpJ,EAAIqJ,EAAcC,GAC5C,SAASC,EAAUZ,GACjBU,GAAgBA,EAAaV,GAC7BW,GAAyBA,EAAsBX,GAC/C7S,EAAQyS,eAAezK,SAAU,YAAauL,GAAc,GAC5DvT,EAAQyS,eAAezK,SAAU,UAAWyL,GAAW,GACvDzT,EAAQyS,eAAezK,SAAU,YAAayL,GAAW,GAM3D,OAHAzT,EAAQiS,YAAYjK,SAAU,YAAauL,GAAc,GACzDvT,EAAQiS,YAAYjK,SAAU,UAAWyL,GAAW,GACpDzT,EAAQiS,YAAYjK,SAAU,YAAayL,GAAW,GAC/CA,GAGTzT,EAAQ0T,qBAAuB,SAAUxJ,EAAI1L,GAC3C,IAAImV,EAAQC,EACZ5T,EAAQiS,YAAY/H,EAAI,cAAc,SAAU2I,GAC9C,IACIgB,EADUhB,EAAEiB,QACO,GACvBH,EAASE,EAASE,QAClBH,EAASC,EAASG,WAEpBhU,EAAQiS,YAAY/H,EAAI,aAAa,SAAU2I,GAC7C,IAAIiB,EAAUjB,EAAEiB,QAChB,KAAIA,EAAQlW,OAAS,GAArB,CACA,IAAIiW,EAAWC,EAAQ,GACvBjB,EAAEoB,OAASN,EAASE,EAASE,QAC7BlB,EAAEqB,OAASN,EAASC,EAASG,QAC7BL,EAASE,EAASE,QAClBH,EAASC,EAASG,QAClBxV,EAASqU,QAIb7S,EAAQmU,sBAAwB,SAAUjK,EAAI1L,GACxC,iBAAkB0L,EACpBlK,EAAQiS,YAAY/H,EAAI,cAAc,SAAU2I,QAGxBnU,IAAlBmU,EAAEuB,aACJvB,EAAEoB,QAAUpB,EAAEuB,YAHH,EAIXvB,EAAEqB,QAAUrB,EAAEwB,YAJH,IAMXxB,EAAEoB,OAAS,EACXpB,EAAEqB,QAAUrB,EAAEyB,WAPH,GAUb9V,EAASqU,MAEF,YAAa3I,EACtBlK,EAAQiS,YAAY/H,EAAI,SAAS,SAAU2I,GAGzC,OAAQA,EAAE0B,WACR,KAAK1B,EAAE2B,gBACL3B,EAAEoB,OAJO,IAIEpB,EAAE4B,QAAmB,EAChC5B,EAAEqB,OALO,IAKErB,EAAE6B,QAAmB,EAChC,MAEF,KAAK7B,EAAE8B,eACP,KAAK9B,EAAE+B,eACL/B,EAAEoB,OAA2B,GAAjBpB,EAAE4B,QAAU,GACxB5B,EAAEqB,OAA2B,GAAjBrB,EAAE6B,QAAU,GAI5BlW,EAASqU,MAGX7S,EAAQiS,YAAY/H,EAAI,kBAAkB,SAAU2I,GAC9CA,EAAEgC,MAAQhC,EAAEgC,MAAQhC,EAAEiC,iBACxBjC,EAAEoB,OAA2B,GAAjBpB,EAAEkC,QAAU,GACxBlC,EAAEqB,OAAS,IAEXrB,EAAEoB,OAAS,EACXpB,EAAEqB,OAA2B,GAAjBrB,EAAEkC,QAAU,IAG1BvW,EAASqU,OAKf7S,EAAQgV,0BAA4B,SAAUC,EAAUC,EAAU3B,EAAc4B,GAC9E,IACIC,EAAQC,EAAQC,EADhBC,EAAS,EAETC,EAAa,CACf,EAAG,WACH,EAAG,cACH,EAAG,aAGL,SAASC,EAAY5C,GAUnB,GAT6B,IAAzB7S,EAAQiT,UAAUJ,GACpB0C,EAAS,EACA1C,EAAEkC,OAAS,IACpBQ,EACa,IAAGA,EAAS,GAEzBA,EAAS,EAGPzD,EAAUnB,KAAM,CAClB,IAAI+E,EAAaxR,KAAKiC,IAAI0M,EAAEkB,QAAUqB,GAAU,GAAKlR,KAAKiC,IAAI0M,EAAEmB,QAAUqB,GAAU,EAC/EC,IAASI,IAAYH,EAAS,GAC/BD,GAAOK,aAAaL,GACxBA,EAAQM,YAAW,WACjBN,EAAQ,OACPJ,EAASK,EAAS,IAAM,KAEb,GAAVA,IACFH,EAASvC,EAAEkB,QACXsB,EAASxC,EAAEmB,SAMf,GAFAnB,EAAEgD,QAAUN,EACZhC,EAAa4B,GAAc,YAAatC,GACpC0C,EAAS,EAAGA,EAAS,OAAO,GAAIA,EAAS,EAAG,OAAOhC,EAAa4B,GAAcK,EAAWD,GAAS1C,GAGxG,SAASiD,EAAWjD,GAClB0C,EAAS,EACLD,GAAOK,aAAaL,GACxBA,EAAQM,YAAW,WACjBN,EAAQ,OACPJ,EAASK,EAAS,IAAM,KAC3BhC,EAAa4B,GAAc,YAAatC,GACxCU,EAAa4B,GAAcK,EAAWD,GAAS1C,GAG5CpR,MAAMoD,QAAQoQ,KAAWA,EAAW,CAACA,IAC1CA,EAAS9P,SAAQ,SAAU+E,GACzBlK,EAAQiS,YAAY/H,EAAI,YAAauL,GACjC3D,EAAUhB,SAAS9Q,EAAQiS,YAAY/H,EAAI,WAAY4L,OAI/D,IAAIC,EAAkBjE,EAAU3B,OAAS2B,EAAUT,WAAa,kBAAmB/T,QAAU,SAAUuV,GACrG,OAAO,GAAKA,EAAEmD,QAAU,EAAI,IAAMnD,EAAEM,OAAS,EAAI,IAAMN,EAAEO,SAAW,EAAI,IAAMP,EAAEK,QAAU,EAAI,IAC5F,SAAUL,GACZ,OAAO,GAAKA,EAAEK,QAAU,EAAI,IAAML,EAAEM,OAAS,EAAI,IAAMN,EAAEO,SAAW,EAAI,IAAMP,EAAEmD,QAAU,EAAI,IAOhG,SAASC,EAAqBzX,EAAUqU,EAAGlD,GACzC,IAAIuG,EAASH,EAAgBlD,GAE7B,IAAKf,EAAU3B,OAAS4B,EAAa,CAGnC,GAFIc,EAAEsD,mBAAqBtD,EAAEsD,iBAAiB,OAAStD,EAAEsD,iBAAiB,UAASD,GAAU,GAEzFnE,EAAYqE,MAAO,CACrB,GAAoB,IAAf,EAAIF,GAAyC,OAA3BnE,EAAYqE,MAAQ,EAG7C,GAAgB,KAAZzG,GAA8B,KAAZA,EAAgB,CACpC,IAAI0G,EAAW,aAAcxD,EAAIA,EAAEwD,SAAWxD,EAAEyD,YAEhD,GAAgB,KAAZ3G,GAA+B,IAAb0G,EACQ,GAAxBtE,EAAYpC,KAAeqC,EAAKa,EAAE0D,gBACjC,GAAgB,KAAZ5G,GAA6B,IAAXuG,GAA6B,IAAbG,EAAgB,CAClDxD,EAAE0D,UAAYvE,EACd,KAAID,EAAYqE,OAAQ,KAavC,IARIzG,KAAW1I,EAAK8H,gBAClBY,GAAW,GAGA,EAATuG,GAAcvG,GAAW,IAAMA,GAAW,KAC5CA,GAAW,IAGRuG,GAAsB,KAAZvG,KAGI,KAFb0G,EAAW,aAAcxD,EAAIA,EAAEwD,SAAWxD,EAAEyD,eAG9C9X,EAASqU,EAAGqD,GAASvG,GACjBkD,EAAE2D,mBAAkB,OAI5B,GAAI1E,EAAUH,YAAuB,EAATuE,EAAY,CAEtC,GADA1X,EAASqU,EAAGqD,EAAQvG,GAChBkD,EAAE2D,iBAAkB,OAAYN,IAAU,EAGhD,SAAKA,GAAYvG,KAAW1I,EAAKgI,eAAoBU,KAAW1I,EAAKiI,iBAI9D1Q,EAASqU,EAAGqD,EAAQvG,GAuC7B,SAAS8G,IACP1E,EAAcpT,OAAOuI,OAAO,MAG9B,GA/FAlH,EAAQ0W,kBAAoB,SAAU7D,GACpC,OAAO5L,EAAK+H,SAAS+G,EAAgBlD,KAsDvC7S,EAAQ2W,sBAAwB,SAAUzM,EAAI1L,GAC5C,IAAIyT,EAAcjS,EAAQiS,YAE1B,GAAIH,EAAUV,YAAcU,EAAUT,WAAa,kBAAmB/T,QAAS,CAC7E,IAAIsZ,EAAqB,KACzB3E,EAAY/H,EAAI,WAAW,SAAU2I,GACnC+D,EAAqB/D,EAAElD,WAEzBsC,EAAY/H,EAAI,YAAY,SAAU2I,GACpC,OAAOoD,EAAqBzX,EAAUqU,EAAG+D,UAEtC,CACL,IAAIC,EAAuB,KAC3B5E,EAAY/H,EAAI,WAAW,SAAU2I,GACnCd,EAAYc,EAAElD,UAAYoC,EAAYc,EAAElD,UAAY,GAAK,EACzD,IAAIlN,EAASwT,EAAqBzX,EAAUqU,EAAGA,EAAElD,SAEjD,OADAkH,EAAuBhE,EAAE2D,iBAClB/T,KAETwP,EAAY/H,EAAI,YAAY,SAAU2I,GAChCgE,IAAyBhE,EAAEK,SAAWL,EAAEM,QAAUN,EAAEO,UAAYP,EAAEmD,WACpEhW,EAAQ4S,UAAUC,GAClBgE,EAAuB,SAG3B5E,EAAY/H,EAAI,SAAS,SAAU2I,GACjCd,EAAYc,EAAElD,SAAW,QAGtBoC,IACH0E,IACAxE,EAAY3U,OAAQ,QAASmZ,MASd,iBAAVnZ,QAAsBA,OAAOwZ,cAAgBhF,EAAUhB,QAAS,CAGzE9Q,EAAQ+W,SAAW,SAAUvY,EAAUwY,GACrCA,EAAMA,GAAO1Z,OACb,IAAI2Z,EAAc,yBAClBjX,EAAQiS,YAAY+E,EAAK,WAAW,SAASE,EAASrE,GAChDA,EAAEsE,MAAQF,IACZjX,EAAQ8S,gBAAgBD,GACxB7S,EAAQyS,eAAeuE,EAAK,UAAWE,GACvC1Y,QAGJwY,EAAIF,YAAYG,EAAa,MAIjCjX,EAAQoX,UAA6B,iBAAV9Z,SAAuBA,OAAO+Z,uBAAyB/Z,OAAOga,0BAA4Bha,OAAOia,6BAA+Bja,OAAOka,yBAA2Bla,OAAOma,wBAChMzX,EAAQoX,UAAWpX,EAAQoX,UAAYpX,EAAQoX,UAAUjV,KAAK7E,QAAa0C,EAAQoX,UAAY,SAAU5Y,GAC3GoX,WAAWpX,EAAU,QAGzB6B,IAAI9C,OAAO,eAAgB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACxF,aAEAwC,EAAQ0X,KAAO,SAAU/T,GACvB,OAAOA,EAAEA,EAAE/F,OAAS,IAGtBoC,EAAQ2X,cAAgB,SAAUC,GAChC,OAAOA,EAAOlY,MAAM,IAAImY,UAAUhY,KAAK,KAGzCG,EAAQ8X,aAAe,SAAUF,EAAQG,GAGvC,IAFA,IAAItV,EAAS,GAENsV,EAAQ,GACD,EAARA,IAAWtV,GAAUmV,IACrBG,IAAU,KAAGH,GAAUA,GAG7B,OAAOnV,GAGT,IAAI4G,EAAkB,SAClBC,EAAgB,SAEpBtJ,EAAQgY,eAAiB,SAAUJ,GACjC,OAAOA,EAAO7X,QAAQsJ,EAAiB,KAGzCrJ,EAAQiY,gBAAkB,SAAUL,GAClC,OAAOA,EAAO7X,QAAQuJ,EAAe,KAGvCtJ,EAAQkY,WAAa,SAAUpT,GAC7B,IAAIqT,EAAO,GAEX,IAAK,IAAItP,KAAO/D,EACdqT,EAAKtP,GAAO/D,EAAI+D,GAGlB,OAAOsP,GAGTnY,EAAQoY,UAAY,SAAU9W,GAG5B,IAFA,IAAI6W,EAAO,GAEFnZ,EAAI,EAAGC,EAAIqC,EAAM1D,OAAQoB,EAAIC,EAAGD,IACnCsC,EAAMtC,IAAyB,iBAAZsC,EAAMtC,GAAgBmZ,EAAKnZ,GAAK3B,KAAK6a,WAAW5W,EAAMtC,IAASmZ,EAAKnZ,GAAKsC,EAAMtC,GAGxG,OAAOmZ,GAGTnY,EAAQqY,SAAW,SAASA,EAASvT,GACnC,GAAmB,iBAARA,IAAqBA,EAAK,OAAOA,EAC5C,IAAIqT,EAEJ,GAAI1W,MAAMoD,QAAQC,GAAM,CACtBqT,EAAO,GAEP,IAAK,IAAItP,EAAM,EAAGA,EAAM/D,EAAIlH,OAAQiL,IAClCsP,EAAKtP,GAAOwP,EAASvT,EAAI+D,IAG3B,OAAOsP,EAGT,GAA4C,oBAAxCxZ,OAAOC,UAAUC,SAASC,KAAKgG,GAA4B,OAAOA,EAGtE,IAAK,IAAI+D,KAFTsP,EAAO,GAESrT,EACdqT,EAAKtP,GAAOwP,EAASvT,EAAI+D,IAG3B,OAAOsP,GAGTnY,EAAQsY,WAAa,SAAUC,GAG7B,IAFA,IAAI9S,EAAM,GAEDzG,EAAI,EAAGA,EAAIuZ,EAAI3a,OAAQoB,IAC9ByG,EAAI8S,EAAIvZ,IAAM,EAGhB,OAAOyG,GAGTzF,EAAQwY,UAAY,SAAUC,GAC5B,IAAIhT,EAAM9G,OAAOuI,OAAO,MAExB,IAAK,IAAIlI,KAAKyZ,EACZhT,EAAIzG,GAAKyZ,EAAMzZ,GAGjB,OAAOyG,GAGTzF,EAAQ0Y,YAAc,SAAUpX,EAAOqE,GACrC,IAAK,IAAI3G,EAAI,EAAGA,GAAKsC,EAAM1D,OAAQoB,IAC7B2G,IAAUrE,EAAMtC,IAClBsC,EAAMmC,OAAOzE,EAAG,IAKtBgB,EAAQ2Y,aAAe,SAAUjX,GAC/B,OAAOA,EAAI3B,QAAQ,0BAA2B,SAGhDC,EAAQ4Y,WAAa,SAAUlX,GAC7B,OAAOA,EAAI3B,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,UAGhGC,EAAQ6Y,gBAAkB,SAAUjB,EAAQkB,GAC1C,IAAIC,EAAU,GAOd,OANAnB,EAAO7X,QAAQ+Y,GAAQ,SAAUpX,GAC/BqX,EAAQ3Z,KAAK,CACX4Z,OAAQrb,UAAUA,UAAUC,OAAS,GACrCA,OAAQ8D,EAAI9D,YAGTmb,GAGT/Y,EAAQiZ,aAAe,SAAUC,GAC/B,IAAI5D,EAAQ,KAER9W,EAAW,WACb8W,EAAQ,KACR4D,KAGEC,EAAW,SAASA,EAASC,GAG/B,OAFAD,EAASE,SACT/D,EAAQM,WAAWpX,EAAU4a,GAAW,GACjCD,GAqBT,OAlBAA,EAASG,SAAWH,EAEpBA,EAASra,KAAO,WAGd,OAFAzB,KAAKgc,SACLH,IACOC,GAGTA,EAASE,OAAS,WAGhB,OAFA1D,aAAaL,GACbA,EAAQ,KACD6D,GAGTA,EAASI,UAAY,WACnB,OAAOjE,GAGF6D,GAGTnZ,EAAQwZ,YAAc,SAAUN,EAAKO,GACnC,IAAInE,EAAQ,KAER9W,EAAW,WACb8W,EAAQ,KACR4D,KAGEQ,EAAQ,SAAeN,GACZ,MAAT9D,IAAeA,EAAQM,WAAWpX,EAAU4a,GAAWK,KAwB7D,OArBAC,EAAMC,MAAQ,SAAUP,GACtB9D,GAASK,aAAaL,GACtBA,EAAQM,WAAWpX,EAAU4a,GAAWK,IAG1CC,EAAMJ,SAAWI,EAEjBA,EAAM5a,KAAO,WACXzB,KAAKgc,SACLH,KAGFQ,EAAML,OAAS,WACb/D,GAASK,aAAaL,GACtBA,EAAQ,MAGVoE,EAAMH,UAAY,WAChB,OAAOjE,GAGFoE,MAGXrZ,IAAI9C,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,gBAAiB,oBAAqB,cAAe,eAAgB,iBAAiB,SAAU4B,EAAUa,EAASxC,GAC3L,aAEA,IAAI+U,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBACrBya,EAAMza,EAAS,cACf0a,EAAO1a,EAAS,eAChB2a,EAAO3a,EAAS,eAChB4a,EAAOD,EAAK9K,SACZgL,EAAiBlI,EAAUN,SAAW,GACtCyI,EAAmBnI,EAAUnB,KAqfjC3Q,EAAQka,UAnfQ,SAAmBvM,EAAYwM,GAC7C,IACIC,EAAOR,EAAI3R,cAAc,YAC7BmS,EAAKjQ,UAAY2H,EAAUF,MAAQ,oCAAsC,iBACrEE,EAAUuI,YAAYD,EAAKE,aAAa,2BAA2B,GACvEF,EAAKE,aAAa,OAAQ,OAC1BF,EAAKE,aAAa,cAAe,OACjCF,EAAKE,aAAa,iBAAkB,OACpCF,EAAKE,aAAa,cAAc,GAChCF,EAAKlP,MAAMqP,QAAU,IACrB5M,EAAW6M,aAAaJ,EAAMzM,EAAW8M,YACzC,IAAIC,EAAc,cACdC,GAAS,EACTC,GAAM,EACNC,GAAS,EACTC,GAAgB,EAChBC,EAAY,GACZC,GAAmB,EAEvB,IACE,IAAIC,EAAYjT,SAASkT,gBAAkBd,EAC3C,MAAOvH,IAETN,EAAMN,YAAYmI,EAAM,QAAQ,SAAUvH,GACxCsH,EAAKgB,OAAOtI,GACZoI,GAAY,KAEd1I,EAAMN,YAAYmI,EAAM,SAAS,SAAUvH,GACzCoI,GAAY,EACZd,EAAKiB,QAAQvI,GACbwI,OAGFhe,KAAKie,MAAQ,WACX,GAAIP,EAAW,OAAOX,EAAKkB,QAC3BlB,EAAKlP,MAAMqB,SAAW,QACtB6N,EAAKkB,SAGPje,KAAKke,KAAO,WACVnB,EAAKmB,QAGPle,KAAK4d,UAAY,WACf,OAAOA,GAGT,IAAIO,EAAgB3B,EAAKL,aAAY,WACnCyB,GAAaI,EAAeL,MAE1BS,EAAY5B,EAAKL,aAAY,WAC1BsB,IACHV,EAAKzU,MAAQ+U,EACbO,GAAaI,QAIjB,SAASA,EAAeK,GACtB,IAAIZ,EAAJ,CAGA,GAFAA,GAAgB,EAEZa,EACFC,EAAiB,EACjBC,EAAeH,EAAU,EAAItB,EAAKzU,MAAM/H,OAAS,OAEjD,IAAIge,EAAiB,EACjBC,EAAe,EAGrB,IACEzB,EAAK0B,kBAAkBF,EAAgBC,GACvC,MAAOhJ,IAETiI,GAAgB,GAGlB,SAASiB,IACHjB,IACJV,EAAKzU,MAAQ+U,EACT5I,EAAUP,UAAUkK,EAAUnC,YAGpCxH,EAAUP,UAAY4I,EAAK/H,iBAAiB,mBAAmB,WACzD+H,EAAK6B,UAAUN,WAAaV,IAC9BA,GAAoBA,EACpBQ,EAAclC,eAGlByC,IACId,GAAWd,EAAKiB,UAEpB,IAaIO,EAAe,KAEnBte,KAAK4e,gBAAkB,SAAUC,GAC/BP,EAAeO,GAGjB7e,KAAK8e,gBAAkB,WACrB,OAAOR,GAGT,IAAIS,GAAmB,EAEnBC,EAAW,SAAkBlF,GACH,IAAxBiD,EAAKwB,gBAA8C,IAAtBxB,EAAKyB,eAIlCF,IACFxE,EAAOwE,EAAaxE,GACpBwE,EAAe,MAGbd,GACFQ,IACIlE,GAAMgD,EAAKmC,QAAQnF,GACvB0D,GAAS,GACA1D,GAAQuD,EAAY6B,OAAO,IAA8B,IAAxBnC,EAAKwB,eAC3CQ,EAAkBjC,EAAKqC,YAAY,MAAO,CAC5C3a,OAAQ,QAERsY,EAAKqC,YAAY,YAAa,CAC5B3a,OAAQ,QAEF8Y,IACNxD,EAAKsF,UAAU,EAAG,IAAM/B,GAAevD,EAAKvZ,OAAS8c,EAAY9c,OAAQuZ,EAAOA,EAAKoF,OAAO,GAAYpF,EAAKoF,OAAO,EAAG,IAAM7B,EAAY6B,OAAO,EAAG,GAAIpF,EAAOA,EAAKoF,OAAO,EAAGpF,EAAKvZ,OAAS8c,EAAY9c,OAAS,GAAYuZ,EAAKxX,OAAOwX,EAAKvZ,OAAS,IAAM8c,EAAY/a,OAAO,KAAIwX,EAAOA,EAAKvX,MAAM,GAAI,IAEzSuX,GAAQuD,EAAY/a,OAAO,IAAgBwX,EAAKxX,OAAOwX,EAAKvZ,OAAS,IAAM8c,EAAY/a,OAAO,KAAIwX,EAAOA,EAAKvX,MAAM,GAAI,IAExHuX,GAAMgD,EAAKuC,YAAYvF,IAGzBwD,IACFA,GAAS,GAGPyB,IAAkBA,GAAmB,KAGvCO,EAAU,SAAiB9J,GAC7B,IAAIiI,EAAJ,CACA,IAAI3D,EAAOiD,EAAKzU,MAChB0W,EAASlF,GACT4E,MAGEa,EAAsB,SAASA,EAAoB/J,EAAGsE,EAAM0F,GAC9D,IAAIC,EAAgBjK,EAAEiK,eAAiBxf,OAAOwf,cAC9C,GAAKA,IAAiB9C,EAAtB,CACA,IAAI+C,EAAO9C,GAAoB4C,EAAc,OAAS,aAEtD,IACE,OAAI1F,GAC2C,IAAtC2F,EAAcE,QAAQD,EAAM5F,GAE5B2F,EAAcG,QAAQF,GAE/B,MAAOlK,GACP,IAAKgK,EAAa,OAAOD,EAAoB/J,EAAGsE,GAAM,MAItD+F,EAAS,SAAgBrK,EAAGsK,GAC9B,IAAIhG,EAAOgD,EAAKiD,cAChB,IAAKjG,EAAM,OAAO5E,EAAMQ,eAAeF,GAEnC+J,EAAoB/J,EAAGsE,IACrBrF,EAAUF,QACZgJ,EAAMuC,EACN/C,EAAKzU,MAAQ,QAAUwR,EAAO,QAC9BiD,EAAK0B,kBAAkB,EAAG,EAAI3E,EAAKvZ,QACnC+c,EAAS,CACPhV,MAAOwR,IAIXgG,EAAQhD,EAAKkD,QAAUlD,EAAKmD,SACvBxL,EAAUF,OAAOW,EAAMQ,eAAeF,KAE3C8H,GAAS,EACTP,EAAKzU,MAAQwR,EACbiD,EAAKmD,SACL3H,YAAW,WACT+E,GAAS,EACToB,IACAV,IACA8B,EAAQhD,EAAKkD,QAAUlD,EAAKmD,cA0BlC/K,EAAMoE,sBAAsByD,EAAMD,EAAKqD,aAAarb,KAAKgY,IACzD5H,EAAMN,YAAYmI,EAAM,UAnIT,SAAkBvH,IAJb,SAAuBuH,GACzC,OAA+B,IAAxBA,EAAKwB,gBAAwBxB,EAAKyB,eAAiBzB,EAAKzU,MAAM/H,OAIjE6f,CAAcrD,GAGPuB,GACTN,EAAelB,EAAK6B,UAAUN,YAH9BvB,EAAKuD,YACLrC,QAiIJ9I,EAAMN,YAAYmI,EAAM,QAASuC,GACjCpK,EAAMN,YAAYmI,EAAM,OAxBZ,SAAevH,GACzBqK,EAAOrK,GAAG,MAwBZN,EAAMN,YAAYmI,EAAM,QArBX,SAAgBvH,GAC3BqK,EAAOrK,GAAG,MAqBZN,EAAMN,YAAYmI,EAAM,SAlBV,SAAiBvH,GAC7B,IAAIsE,EAAOyF,EAAoB/J,GAEZ,iBAARsE,GACLA,GAAMgD,EAAKmC,QAAQnF,EAAMtE,GACzBf,EAAUnB,MAAMiF,WAAWyF,GAC/B9I,EAAMQ,eAAeF,KAErBuH,EAAKzU,MAAQ,GACbkV,GAAS,MAWb,IAkII8C,EAjHAC,EAAsB,WACxB,GAAK9C,GAAkBX,EAAKyD,sBAAuBzD,EAAK0D,UAAxD,CACA,IAAIC,EAAM1D,EAAKzU,MAAM5F,QAAQ,QAAS,IACtC,GAAI+a,EAAciD,YAAcD,IAChC3D,EAAKyD,oBAAoBE,GACrBhD,EAAciD,WAAW5D,EAAK6D,OAC9BlD,EAAcmD,UAASnD,EAAciD,UAAYD,GAEjDhD,EAAciD,WAAW,CAC3B,IAAIG,EAAI/D,EAAK6B,UAAUmC,WACvBhE,EAAK9V,OAAOyW,EAAciD,WAC1B5D,EAAKiE,QAAQC,gBACbvD,EAAcwD,MAAQnE,EAAK6B,UAAUmC,WACrChE,EAAK6B,UAAUuC,SAASL,GACxB/D,EAAK6B,UAAUwC,oBAIfC,EAAmB,SAASA,EAAiB5L,GAC/C,GAAKsH,EAAKsE,mBAAoBtE,EAAK0D,UAAnC,CACA,IAAIa,EAAI5D,EACRA,GAAgB,EAChB,IAAIxF,EAAQM,YAAW,WACrBN,EAAQ,KACR,IAAI5T,EAAM0Y,EAAKzU,MAAM5F,QAAQ,QAAS,IAClC+a,IAA+BpZ,GAAOgd,EAAEX,UAAWhC,KAAuB2C,EAAEX,WAAarc,IAC3Fqa,IACAM,EAAS3a,QAIbia,EAAe,SAAiCja,GAG9C,OAFI4T,GAAOK,aAAaL,IACxB5T,EAAMA,EAAI3B,QAAQ,QAAS,MAChB2e,EAAEX,UAAkB,IAC3BW,EAAEX,WAAazI,GAAO6E,EAAK6D,OACxBtc,IAGTyY,EAAKsE,mBACLtE,EAAK1H,eAAe,YAAagM,GAEnB,kBAAV5L,EAAEV,MAA4BuM,EAAEJ,OAClCnE,EAAK6B,UAAUuC,SAASG,EAAEJ,UAGPxM,EAAUN,UAAYM,EAAUN,UAAY,MAAQM,EAAUP,UAAYO,EAAUP,UAAY,MAGnHoL,MAIAgC,EAAkB9E,EAAKL,YAAYoE,EAAqB,IA8D5D,SAASgB,IACPjJ,aAAagI,GACbA,EAAe/H,YAAW,WACpBmF,IACFX,EAAKlP,MAAMD,QAAU8P,EACrBA,EAAY,IAG6B,MAAvCZ,EAAK0E,SAASC,wBAChB3E,EAAK0E,SAASC,uBAAwB,EACtC3E,EAAK0E,SAASE,2BAEf,GAzELxM,EAAMN,YAAYmI,EAAM,oBAvEC,SAA4BvH,GAC/CiI,IAAkBX,EAAK6E,oBAAsB7E,EAAK0D,aACtD/C,EAAgB,IACFmD,QAAU9D,EAAKiE,QAAQa,aACrC9E,EAAK6E,qBACLpJ,WAAWgI,EAAqB,GAChCzD,EAAK+E,GAAG,YAAaT,GAEjB3D,EAAcmD,UAAY9D,EAAK6B,UAAUN,YAC3CvB,EAAK9V,OAAO,IACZ8V,EAAKiE,QAAQC,gBACblE,EAAK6B,UAAUwC,kBAGjBrE,EAAKiE,QAAQC,oBA2DXvM,EAAUf,QACZwB,EAAMN,YAAYmI,EAAM,QAAQ,WAC9BuE,EAAgBrF,eAGlB/G,EAAMN,YAAYmI,EAAM,SAAS,WAC/BuE,EAAgBrF,cAElB/G,EAAMN,YAAYmI,EAAM,WAAW,WACjCuE,EAAgBrF,eAIpB/G,EAAMN,YAAYmI,EAAM,iBAAkBqE,GAE1CphB,KAAK8hB,WAAa,WAChB,OAAO/E,GAGT/c,KAAK+hB,YAAc,SAAUC,GAC3BjF,EAAKiF,SAAWA,GAGlBhiB,KAAKiiB,cAAgB,SAAUzM,GAC7BuJ,GAAmB,EACnBf,EAAelB,EAAK6B,UAAUN,WAE9BvB,EAAKoF,MAAM,oBAAqB,CAC9Bld,OAAQ8X,EACRqF,SAAU3M,IAGZxV,KAAKoiB,YAAY5M,GAAG,IAGtBxV,KAAKoiB,YAAc,SAAU5M,EAAG6M,GACzB3E,IAAWA,EAAYX,EAAKlP,MAAMD,SACvCmP,EAAKlP,MAAMD,SAAWyU,EAAe,kBAAoB,IAAM,UAAYtF,EAAKlP,MAAMkB,OAAS,KAAO0F,EAAUnB,KAAO,eAAiB,IACxI,IAAIgP,EAAOxF,EAAKyF,UAAUC,wBACtB3U,EAAQ0O,EAAIhO,cAAcuO,EAAKyF,WAC/BE,EAAMH,EAAKG,KAAOnU,SAAST,EAAM6U,iBAAmB,GACpDvT,EAAOmT,EAAKnT,MAAQb,SAASgU,EAAKK,kBAAoB,GACtDC,EAASN,EAAKO,OAASJ,EAAM1F,EAAKrO,aAAe,EAEjDoU,EAAO,SAActN,GACvBuH,EAAKlP,MAAMsB,KAAOqG,EAAEkB,QAAUvH,EAAO,EAAI,KACzC4N,EAAKlP,MAAM4U,IAAM5b,KAAKM,IAAIqO,EAAEmB,QAAU8L,EAAM,EAAGG,GAAU,MAG3DE,EAAKtN,GACS,aAAVA,EAAEV,OACFgI,EAAK0E,SAASC,wBAAuB3E,EAAK0E,SAASC,sBAAwB,MAC/EnJ,aAAagI,GACT7L,EAAUpB,OAAO6B,EAAMe,QAAQ6G,EAAKyF,UAAWO,EAAMvB,KAG3DvhB,KAAKuhB,mBAAqBA,EAkB1B,IAAIU,EAAgB,SAAuBzM,GACzCsH,EAAKiG,UAAUd,cAAczM,GAC7B+L,KAWF,GARArM,EAAMN,YAAYmI,EAAM,UAAWkF,GACnC/M,EAAMN,YAAYmI,EAAM,aAAa,SAAUvH,GAC7CA,EAAEE,iBACF6L,OAEFrM,EAAMN,YAAYkI,EAAK0E,SAASwB,SAAU,cAAef,GACzD/M,EAAMN,YAAYmI,EAAM,cAAekF,GAEnCxN,EAAUF,MAAO,CACnB,IAAI0O,EAAqB,KACrBC,GAAS,EACb5S,EAAWyE,iBAAiB,WAAW,SAAUS,GAC3CyN,GAAoB3K,aAAa2K,GACrCC,GAAS,KAEX5S,EAAWyE,iBAAiB,SAAS,SAAUS,GAC7CyN,EAAqB1K,YAAW,WAC9B2K,GAAS,IACR,QAGL,IAAIC,EAAkB,SAAyB3N,GAC7C,GAAI7K,SAASkT,gBAAkBd,IAC3BmG,EAAJ,CAEA,GAAI3F,EACF,OAAOhF,YAAW,WAChBgF,GAAM,IACL,KAGL,IAAIgB,EAAiBxB,EAAKwB,eACtBC,EAAezB,EAAKyB,aAGxB,GAFAzB,EAAK0B,kBAAkB,EAAG,GAEtBF,GAAkBC,EACpB,OAAQD,GACN,KAAK,EACHzB,EAAKqD,aAAa,KAAM,EAAG1D,EAAK2G,IAChC,MAEF,KAAK,EACHtG,EAAKqD,aAAa,KAAM,EAAG1D,EAAK4G,MAChC,MAEF,KAAK,EACHvG,EAAKqD,aAAa,KAAMzD,EAAK4G,OAAQ7G,EAAKtN,MAC1C,MAEF,KAAK,EACH2N,EAAKqD,aAAa,KAAM,EAAG1D,EAAKtN,MAChC,MAEF,KAAK,EACH2N,EAAKqD,aAAa,KAAM,EAAG1D,EAAK8G,OAChC,MAEF,KAAK,EACHzG,EAAKqD,aAAa,KAAMzD,EAAK4G,OAAQ7G,EAAK8G,OAC1C,MAEF,KAAK,EACHzG,EAAKqD,aAAa,KAAM,EAAG1D,EAAK+G,KAChC,MAEF,KAAK,EACH1G,EAAKqD,aAAa,KAAM,EAAG1D,EAAKgH,UAG/B,CACL,OAAQjF,GACN,KAAK,EACH1B,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAK8G,OACzC,MAEF,KAAK,EACHzG,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAQhH,EAAK4G,OAAQ7G,EAAK8G,OACvD,MAEF,KAAK,EACHzG,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAK+G,KACzC,MAEF,KAAK,EACH1G,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAKgH,MAI7C,OAAQlF,GACN,KAAK,EACHzB,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAK2G,IACzC,MAEF,KAAK,EACHtG,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAK4G,MACzC,MAEF,KAAK,EACHvG,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAQhH,EAAK4G,OAAQ7G,EAAKtN,MACvD,MAEF,KAAK,EACH2N,EAAKqD,aAAa,KAAMzD,EAAKgH,MAAOjH,EAAKtN,UAMjDxE,SAASoK,iBAAiB,kBAAmBoO,GAC7CrG,EAAK+E,GAAG,WAAW,WACjBlX,SAAS0K,oBAAoB,kBAAmB8N,WAOxDngB,IAAI9C,OAAO,yBAA0B,CAAC,UAAW,UAAW,SAAU,gBAAiB,oBAAqB,cAAe,eAAgB,+BAA+B,SAAU4B,EAAUa,EAASxC,GACrM,aAEA,IAAI+U,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBACrBya,EAAMza,EAAS,cACf0a,EAAO1a,EAAS,eAChB6a,EAAiBlI,EAAUN,SAAW,GACtCyI,EAAmBnI,EAAUnB,KAC7BqQ,EAAe7hB,EAAS,mBAAmB+a,UAkZ/Cla,EAAQka,UAhZQ,SAAmBvM,EAAYwM,GAC7C,GAAIrI,EAAUF,MAAO,OAAOoP,EAAaliB,KAAKzB,KAAMsQ,EAAYwM,GAChE,IAAIC,EAAOR,EAAI3R,cAAc,YAC7BmS,EAAKjQ,UAAY,iBACjBiQ,EAAKE,aAAa,OAAQ,OAC1BF,EAAKE,aAAa,cAAe,OACjCF,EAAKE,aAAa,iBAAkB,OACpCF,EAAKE,aAAa,cAAc,GAChCF,EAAKlP,MAAMqP,QAAU,IACrB5M,EAAW6M,aAAaJ,EAAMzM,EAAW8M,YACzC,IAAIC,EAAc,eACdC,GAAS,EACTE,GAAS,EACTC,GAAgB,EAChBC,EAAY,GACZC,GAAmB,EAEvB,IACE,IAAIC,EAAYjT,SAASkT,gBAAkBd,EAC3C,MAAOvH,IAETN,EAAMN,YAAYmI,EAAM,QAAQ,SAAUvH,GACxCsH,EAAKgB,OAAOtI,GACZoI,GAAY,KAEd1I,EAAMN,YAAYmI,EAAM,SAAS,SAAUvH,GACzCoI,GAAY,EACZd,EAAKiB,QAAQvI,GACbwI,OAGFhe,KAAKie,MAAQ,WACX,GAAIP,EAAW,OAAOX,EAAKkB,QAC3B,IAAIwE,EAAM1F,EAAKlP,MAAM4U,IACrB1F,EAAKlP,MAAMqB,SAAW,QACtB6N,EAAKlP,MAAM4U,IAAM,MACjB1F,EAAKkB,QACL1F,YAAW,WACTwE,EAAKlP,MAAMqB,SAAW,GACA,OAAlB6N,EAAKlP,MAAM4U,MAAc1F,EAAKlP,MAAM4U,IAAMA,KAC7C,IAGLziB,KAAKke,KAAO,WACVnB,EAAKmB,QAGPle,KAAK4d,UAAY,WACf,OAAOA,GAGT,IAAIO,EAAgB3B,EAAKL,aAAY,WACnCyB,GAAaI,EAAeL,MAE1BS,EAAY5B,EAAKL,aAAY,WAC1BsB,IACHV,EAAKzU,MAAQ+U,EACbO,GAAaI,QAIjB,SAASA,EAAeK,GACtB,IAAIZ,EAAJ,CAGA,GAFAA,GAAgB,EAEZa,EACF,IAAIC,EAAiB,EACjBC,EAAeH,EAAU,EAAItB,EAAKzU,MAAM/H,OAAS,OAEjDge,EAAiBF,EAAU,EAAI,EAC/BG,EAAe,EAGrB,IACEzB,EAAK0B,kBAAkBF,EAAgBC,GACvC,MAAOhJ,IAETiI,GAAgB,GAGlB,SAASiB,IACHjB,IACJV,EAAKzU,MAAQ+U,EACT5I,EAAUP,UAAUkK,EAAUnC,YAGpCxH,EAAUP,UAAY4I,EAAK/H,iBAAiB,mBAAmB,WACzD+H,EAAK6B,UAAUN,WAAaV,IAC9BA,GAAoBA,EACpBQ,EAAclC,eAGlByC,IACId,GAAWd,EAAKiB,UAEpB,IAeIO,EAAe,KAEnBte,KAAK4e,gBAAkB,SAAUC,GAC/BP,EAAeO,GAGjB7e,KAAK8e,gBAAkB,WACrB,OAAOR,GAGT,IAAIS,GAAmB,EAEnBC,EAAW,SAAkBlF,GAC3BwE,IACFxE,EAAOwE,EAAaxE,GACpBwE,EAAe,MAGbd,GACFQ,IACIlE,GAAMgD,EAAKmC,QAAQnF,GACvB0D,GAAS,GACA1D,GAAQuD,EAAY/a,OAAO,GAChCyc,EAAkBjC,EAAKqC,YAAY,MAAO,CAC5C3a,OAAQ,QAERsY,EAAKqC,YAAY,YAAa,CAC5B3a,OAAQ,SAGRsV,EAAKsF,UAAU,EAAG,IAAM/B,EAAavD,EAAOA,EAAKoF,OAAO,GAAYpF,EAAKxX,OAAO,IAAM+a,EAAY/a,OAAO,GAAIwX,EAAOA,EAAKoF,OAAO,GAAYpF,EAAKxX,OAAOwX,EAAKvZ,OAAS,IAAM8c,EAAY/a,OAAO,KAAIwX,EAAOA,EAAKvX,MAAM,GAAI,IACzNuX,EAAKxX,OAAOwX,EAAKvZ,OAAS,IAAM8c,EAAY/a,OAAO,KAAIwX,EAAOA,EAAKvX,MAAM,GAAI,IAC7EuX,GAAMgD,EAAKuC,YAAYvF,IAGzBiF,IAAkBA,GAAmB,IAGvCO,EAAU,SAAiB9J,GAC7B,IAAIiI,EAAJ,CACA,IAAI3D,EAAOiD,EAAKzU,MAChB0W,EAASlF,GACT4E,MAGEa,EAAsB,SAASA,EAAoB/J,EAAGsE,EAAM0F,GAC9D,IAAIC,EAAgBjK,EAAEiK,eAAiBxf,OAAOwf,cAC9C,GAAKA,IAAiB9C,EAAtB,CACA,IAAI+C,EAAO9C,GAAoB4C,EAAc,OAAS,aAEtD,IACE,OAAI1F,GAC2C,IAAtC2F,EAAcE,QAAQD,EAAM5F,GAE5B2F,EAAcG,QAAQF,GAE/B,MAAOlK,GACP,IAAKgK,EAAa,OAAOD,EAAoB/J,EAAGsE,GAAM,MAItD+F,EAAS,SAAgBrK,EAAGsK,GAC9B,IAAIhG,EAAOgD,EAAKiD,cAChB,IAAKjG,EAAM,OAAO5E,EAAMQ,eAAeF,GAEnC+J,EAAoB/J,EAAGsE,IACzBgG,EAAQhD,EAAKkD,QAAUlD,EAAKmD,SAC5B/K,EAAMQ,eAAeF,KAErB8H,GAAS,EACTP,EAAKzU,MAAQwR,EACbiD,EAAKmD,SACL3H,YAAW,WACT+E,GAAS,EACToB,IACAV,IACA8B,EAAQhD,EAAKkD,QAAUlD,EAAKmD,cAK9BD,EAAQ,SAAexK,GACzBqK,EAAOrK,GAAG,IAGRyK,EAAS,SAAgBzK,GAC3BqK,EAAOrK,GAAG,IAGRyJ,EAAU,SAAiBzJ,GAC7B,IAAIsE,EAAOyF,EAAoB/J,GAEZ,iBAARsE,GACLA,GAAMgD,EAAKmC,QAAQnF,EAAMtE,GACzBf,EAAUnB,MAAMiF,WAAWyF,GAC/B9I,EAAMQ,eAAeF,KAErBuH,EAAKzU,MAAQ,GACbkV,GAAS,IAIbtI,EAAMoE,sBAAsByD,EAAMD,EAAKqD,aAAarb,KAAKgY,IACzD5H,EAAMN,YAAYmI,EAAM,UAlHT,SAAkBvH,GAC3B8H,EACFA,GAAS,GANO,SAAuBP,GACzC,OAA+B,IAAxBA,EAAKwB,gBAAwBxB,EAAKyB,eAAiBzB,EAAKzU,MAAM/H,OAM1D6f,CAAcrD,GAGduB,GACTN,EAAelB,EAAK6B,UAAUN,YAH9BvB,EAAKuD,YACLrC,QA8GJ9I,EAAMN,YAAYmI,EAAM,QAASuC,GACjCpK,EAAMN,YAAYmI,EAAM,MAAOiD,GAC/B9K,EAAMN,YAAYmI,EAAM,OAAQkD,GAChC/K,EAAMN,YAAYmI,EAAM,QAASkC,GAE3B,UAAWlC,GAAW,WAAYA,GAAW,YAAaA,GAC9D7H,EAAMN,YAAYtE,EAAY,WAAW,SAAUkF,GACjD,KAAIf,EAAU3B,OAAU0C,EAAEmD,UAAYnD,EAAEK,QAExC,OAAQL,EAAElD,SACR,KAAK,GACH2N,EAAOzK,GACP,MAEF,KAAK,GACHyJ,EAAQzJ,GACR,MAEF,KAAK,GACHwK,EAAMxK,OAMd,IAkII8K,EAjHAC,EAAsB,WACxB,GAAK9C,GAAkBX,EAAKyD,sBAAuBzD,EAAK0D,UAAxD,CACA,IAAIC,EAAM1D,EAAKzU,MAAM5F,QAAQ,UAAW,IACxC,GAAI+a,EAAciD,YAAcD,IAChC3D,EAAKyD,oBAAoBE,GACrBhD,EAAciD,WAAW5D,EAAK6D,OAC9BlD,EAAcmD,UAASnD,EAAciD,UAAYD,GAEjDhD,EAAciD,WAAW,CAC3B,IAAIG,EAAI/D,EAAK6B,UAAUmC,WACvBhE,EAAK9V,OAAOyW,EAAciD,WAC1B5D,EAAKiE,QAAQC,gBACbvD,EAAcwD,MAAQnE,EAAK6B,UAAUmC,WACrChE,EAAK6B,UAAUuC,SAASL,GACxB/D,EAAK6B,UAAUwC,oBAIfC,EAAmB,SAASA,EAAiB5L,GAC/C,GAAKsH,EAAKsE,mBAAoBtE,EAAK0D,UAAnC,CACA,IAAIa,EAAI5D,EACRA,GAAgB,EAChB,IAAIxF,EAAQM,YAAW,WACrBN,EAAQ,KACR,IAAI5T,EAAM0Y,EAAKzU,MAAM5F,QAAQ,UAAW,IACpC+a,IAA+BpZ,GAAOgd,EAAEX,UAAWhC,KAAuB2C,EAAEX,WAAarc,IAC3Fqa,IACAM,EAAS3a,QAIbia,EAAe,SAAiCja,GAG9C,OAFI4T,GAAOK,aAAaL,IACxB5T,EAAMA,EAAI3B,QAAQ,UAAW,MAClB2e,EAAEX,UAAkB,IAC3BW,EAAEX,WAAazI,GAAO6E,EAAK6D,OACxBtc,IAGTyY,EAAKsE,mBACLtE,EAAK1H,eAAe,YAAagM,GAEnB,kBAAV5L,EAAEV,MAA4BuM,EAAEJ,OAClCnE,EAAK6B,UAAUuC,SAASG,EAAEJ,UAGPxM,EAAUN,UAAYM,EAAUN,UAAY,MAAQM,EAAUP,UAAYO,EAAUP,UAAY,MAGnHoL,MAIAgC,EAAkB9E,EAAKL,YAAYoE,EAAqB,IA8D5D,SAASgB,IACPjJ,aAAagI,GACbA,EAAe/H,YAAW,WACpBmF,IACFX,EAAKlP,MAAMD,QAAU8P,EACrBA,EAAY,IAG6B,MAAvCZ,EAAK0E,SAASC,wBAChB3E,EAAK0E,SAASC,uBAAwB,EACtC3E,EAAK0E,SAASE,2BAEf,GAzELxM,EAAMN,YAAYmI,EAAM,oBAvEC,SAA4BvH,GAC/CiI,IAAkBX,EAAK6E,oBAAsB7E,EAAK0D,aACtD/C,EAAgB,IACFmD,QAAU9D,EAAKiE,QAAQa,aACrC9E,EAAK6E,qBACLpJ,WAAWgI,EAAqB,GAChCzD,EAAK+E,GAAG,YAAaT,GAEjB3D,EAAcmD,UAAY9D,EAAK6B,UAAUN,YAC3CvB,EAAK9V,OAAO,IACZ8V,EAAKiE,QAAQC,gBACblE,EAAK6B,UAAUwC,kBAGjBrE,EAAKiE,QAAQC,oBA2DXvM,EAAUf,QACZwB,EAAMN,YAAYmI,EAAM,QAAQ,WAC9BuE,EAAgBrF,eAGlB/G,EAAMN,YAAYmI,EAAM,SAAS,WAC/BuE,EAAgBrF,cAElB/G,EAAMN,YAAYmI,EAAM,WAAW,WACjCuE,EAAgBrF,eAIpB/G,EAAMN,YAAYmI,EAAM,iBAAkBqE,GAE1CphB,KAAK8hB,WAAa,WAChB,OAAO/E,GAGT/c,KAAK+hB,YAAc,SAAUC,GAC3BjF,EAAKiF,SAAWA,GAGlBhiB,KAAKiiB,cAAgB,SAAUzM,GAC7BuJ,GAAmB,EACnBf,EAAelB,EAAK6B,UAAUN,WAE9BvB,EAAKoF,MAAM,oBAAqB,CAC9Bld,OAAQ8X,EACRqF,SAAU3M,IAGZxV,KAAKoiB,YAAY5M,GAAG,IAGtBxV,KAAKoiB,YAAc,SAAU5M,EAAG6M,GACzB3E,IAAWA,EAAYX,EAAKlP,MAAMD,SACvCmP,EAAKlP,MAAMD,SAAWyU,EAAe,kBAAoB,IAAM,UAAYtF,EAAKlP,MAAMkB,OAAS,KAAO0F,EAAUnB,KAAO,eAAiB,IACxI,IAAIgP,EAAOxF,EAAKyF,UAAUC,wBACtB3U,EAAQ0O,EAAIhO,cAAcuO,EAAKyF,WAC/BE,EAAMH,EAAKG,KAAOnU,SAAST,EAAM6U,iBAAmB,GACpDvT,EAAOmT,EAAKnT,MAAQb,SAASgU,EAAKK,kBAAoB,GACtDC,EAASN,EAAKO,OAASJ,EAAM1F,EAAKrO,aAAe,EAEjDoU,EAAO,SAActN,GACvBuH,EAAKlP,MAAMsB,KAAOqG,EAAEkB,QAAUvH,EAAO,EAAI,KACzC4N,EAAKlP,MAAM4U,IAAM5b,KAAKM,IAAIqO,EAAEmB,QAAU8L,EAAM,EAAGG,GAAU,MAG3DE,EAAKtN,GACS,aAAVA,EAAEV,OACFgI,EAAK0E,SAASC,wBAAuB3E,EAAK0E,SAASC,sBAAwB,MAC/EnJ,aAAagI,GACT7L,EAAUpB,OAAO6B,EAAMe,QAAQ6G,EAAKyF,UAAWO,EAAMvB,KAG3DvhB,KAAKuhB,mBAAqBA,EAkB1B,IAAIU,EAAgB,SAAuBzM,GACzCsH,EAAKiG,UAAUd,cAAczM,GAC7B+L,KAGFrM,EAAMN,YAAYmI,EAAM,UAAWkF,GACnC/M,EAAMN,YAAYmI,EAAM,aAAa,SAAUvH,GAC7CA,EAAEE,iBACF6L,OAEFrM,EAAMN,YAAYkI,EAAK0E,SAASwB,SAAU,cAAef,GACzD/M,EAAMN,YAAYmI,EAAM,cAAekF,OAK3Cjf,IAAI9C,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,cAAe,gBAAiB,sBAAsB,SAAU4B,EAAUa,EAASxC,GAC3J,aAEU2B,EAAS,cACPA,EAAS,gBADrB,IAEI2S,EAAY3S,EAAS,oBAKzB,SAAS8hB,EAAgBC,GACvBA,EAAaC,gBAAkB,KAC/B,IAAIC,EAASF,EAAaE,OAC1BA,EAAOC,kBAAkB,YAAahkB,KAAKikB,YAAYnf,KAAK+e,IAC5DE,EAAOC,kBAAkB,WAAYhkB,KAAKkkB,cAAcpf,KAAK+e,IAC7DE,EAAOC,kBAAkB,cAAehkB,KAAKmkB,cAAcrf,KAAK+e,IAChEE,EAAOC,kBAAkB,YAAahkB,KAAKokB,YAAYtf,KAAK+e,IAC5DE,EAAOC,kBAAkB,aAAchkB,KAAKqkB,aAAavf,KAAK+e,IAC9DE,EAAOC,kBAAkB,YAAahkB,KAAKskB,YAAYxf,KAAK+e,IAC9C,CAAC,SAAU,cAAe,YAAa,eAAgB,mBAAoB,mBAAoB,WAAY,cAAe,aAChI/b,SAAQ,SAAU7E,GACxB4gB,EAAa5gB,GAAKjD,KAAKiD,KACtBjD,MACH6jB,EAAaU,cAAgBvkB,KAAKwkB,kBAAkB1f,KAAK+e,EAAc,gBACvEA,EAAaY,cAAgBzkB,KAAKwkB,kBAAkB1f,KAAK+e,EAAc,gBAoPzE,SAASa,EAAqBzD,EAAO0D,GACnC,GAAI1D,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,IAAK,IAAIC,EAAM,EAAIF,EAAOG,OAAS7D,EAAMxa,MAAMqe,OAAS7D,EAAMuC,IAAIsB,YAAY,GAAI7D,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,IAAM,GAAM3D,EAAMxa,MAAMqe,QAAW7D,EAAMuC,IAAIsB,OAA6CD,EAAM,EAAIF,EAAOC,IAAM3D,EAAMxa,MAAMme,IAAM3D,EAAMuC,IAAIoB,SAAxF,IAAIC,EAAMF,EAAOG,OAAS,EAC/N,OAAID,EAAM,EAAU,CAClBF,OAAQ1D,EAAMxa,MACdse,OAAQ9D,EAAMuC,KACF,CACZmB,OAAQ1D,EAAMuC,IACduB,OAAQ9D,EAAMxa,QAxPlB,WACEzG,KAAKikB,YAAc,SAAUe,GAC3B,IAAIC,EAAcD,EAAGC,cACjBte,EAAMqe,EAAGE,sBACbllB,KAAKmlB,eAAiBH,EACtB,IAAIjB,EAAS/jB,KAAK+jB,OACd/N,EAASgP,EAAGpP,YAEhB,GAAe,IAAXI,EAAc,CAChB,IACIoP,EADiBrB,EAAOsB,oBACQhH,UAUpC,OATA0F,EAAOuB,mBACHF,GAA4B,GAAVpP,IAAa+N,EAAOpF,UAAU4G,eAAe5e,GACnEod,EAAOuB,uBAEO,GAAVtP,IACF+N,EAAOhB,UAAUd,cAAc+C,EAAG7C,UAC7B1N,EAAUd,WAAWqR,EAAGtP,mBAQjC,OAFA1V,KAAKmlB,eAAeK,KAAO7Z,KAAKC,OAE5BqZ,GAAgBlB,EAAOnG,cACzBmG,EAAO9F,SAEHje,KAAKylB,cAAiBzlB,KAAK8jB,iBAAoBC,EAAO2B,oBAO5D1lB,KAAK2lB,aAAaX,GAClBhlB,KAAK4lB,YAAYjf,EAAKqe,EAAG7C,SAAS3J,QAAU,GACrCwM,EAAGtP,mBARN1V,KAAK6lB,SAAS,kBACd7lB,KAAK2lB,aAAaX,KAUxBhlB,KAAK4lB,YAAc,SAAUjf,EAAKmf,GAChCnf,EAAMA,GAAO3G,KAAK+jB,OAAOvC,SAASuE,wBAAwB/lB,KAAKiD,EAAGjD,KAAKgmB,GACvE,IAAIjC,EAAS/jB,KAAK+jB,OAClBA,EAAOuB,kBACHtlB,KAAKmlB,eAAec,cAAelC,EAAOpF,UAAUuH,iBAAiBvf,GAAemf,GAAuB/B,EAAOpF,UAAU4G,eAAe5e,GAC1Imf,GAAuB9lB,KAAKkgB,SAE7B6D,EAAOvC,SAASwB,SAASmD,YAC3BpC,EAAOvC,SAASwB,SAASmD,aAG3BpC,EAAOqC,SAAS,iBAChBpmB,KAAK6lB,SAAS,UACd9B,EAAOuB,mBAGTtlB,KAAKkgB,OAAS,WACZ,IAAI6E,EACAhB,EAAS/jB,KAAK+jB,OACdY,EAASZ,EAAOvC,SAASuE,wBAAwB/lB,KAAKiD,EAAGjD,KAAKgmB,GAGlE,GAFAjC,EAAOuB,kBAEHtlB,KAAK8jB,gBAAiB,CACxB,IAAIe,EAAM7kB,KAAK8jB,gBAAgBuC,aAAa1B,GAE5C,IAAY,GAARE,EACFE,EAAS/kB,KAAK8jB,gBAAgBN,SACzB,GAAW,GAAPqB,EACTE,EAAS/kB,KAAK8jB,gBAAgBrd,UACzB,CACL,IAAI6f,EAAgB5B,EAAqB1kB,KAAK8jB,gBAAiBa,GAC/DA,EAAS2B,EAAc3B,OACvBI,EAASuB,EAAcvB,OAGzBhB,EAAOpF,UAAU4H,mBAAmBxB,EAAOH,IAAKG,EAAOD,QAGzDf,EAAOpF,UAAUuH,iBAAiBvB,GAClCZ,EAAOuB,kBACPvB,EAAOvC,SAASgF,wBAGlBxmB,KAAKwkB,kBAAoB,SAAUiC,GACjC,IAAI1B,EACAhB,EAAS/jB,KAAK+jB,OACdY,EAASZ,EAAOvC,SAASuE,wBAAwB/lB,KAAKiD,EAAGjD,KAAKgmB,GAC9D/E,EAAQ8C,EAAOpF,UAAU8H,GAAU9B,EAAOC,IAAKD,EAAOG,QAG1D,GAFAf,EAAOuB,kBAEHtlB,KAAK8jB,gBAAiB,CACxB,IAAI4C,EAAW1mB,KAAK8jB,gBAAgBuC,aAAapF,EAAMxa,OACnDkgB,EAAS3mB,KAAK8jB,gBAAgBuC,aAAapF,EAAMuC,KAErD,IAAiB,GAAbkD,GAAkBC,GAAU,EAC9B5B,EAAS/kB,KAAK8jB,gBAAgBN,IAC1BvC,EAAMuC,IAAIoB,KAAOD,EAAOC,KAAO3D,EAAMuC,IAAIsB,QAAUH,EAAOG,SAAQH,EAAS1D,EAAMxa,YAChF,GAAc,GAAVkgB,GAAeD,GAAY,EACpC3B,EAAS/kB,KAAK8jB,gBAAgBrd,MAC1Bwa,EAAMxa,MAAMme,KAAOD,EAAOC,KAAO3D,EAAMxa,MAAMqe,QAAUH,EAAOG,SAAQH,EAAS1D,EAAMuC,UACpF,IAAiB,GAAbkD,GAA4B,GAAVC,EAC3BhC,EAAS1D,EAAMuC,IACfuB,EAAS9D,EAAMxa,UACV,CACL,IAAI6f,EAAgB5B,EAAqB1kB,KAAK8jB,gBAAiBa,GAC/DA,EAAS2B,EAAc3B,OACvBI,EAASuB,EAAcvB,OAGzBhB,EAAOpF,UAAU4H,mBAAmBxB,EAAOH,IAAKG,EAAOD,QAGzDf,EAAOpF,UAAUuH,iBAAiBvB,GAClCZ,EAAOuB,kBACPvB,EAAOvC,SAASgF,wBAGlBxmB,KAAK4mB,UAAY5mB,KAAK6mB,aAAe7mB,KAAK8mB,iBAAmB9mB,KAAK+mB,iBAAmB,WACnF/mB,KAAK8jB,gBAAkB,KACvB9jB,KAAK+jB,OAAOiD,WAAW,iBAEnBhnB,KAAK+jB,OAAOvC,SAASwB,SAASiE,gBAChCjnB,KAAK+jB,OAAOvC,SAASwB,SAASiE,kBAIlCjnB,KAAKknB,UAAY,WACf,IA8GkBC,EAAIC,EAAIC,EAAIC,EA9G1BC,GA8GcJ,EA9GUnnB,KAAKmlB,eAAeliB,EA8G1BmkB,EA9G6BpnB,KAAKmlB,eAAea,EA8G7CqB,EA9GgDrnB,KAAKiD,EA8GjDqkB,EA9GoDtnB,KAAKgmB,EA+GlFnf,KAAK2gB,KAAK3gB,KAAKuL,IAAIiV,EAAKF,EAAI,GAAKtgB,KAAKuL,IAAIkV,EAAKF,EAAI,KA9GpD5B,EAAO7Z,KAAKC,OACZ2b,EAtJU,GAsJgB/B,EAAOxlB,KAAKmlB,eAAeK,KAAOxlB,KAAKylB,eAAczlB,KAAK4lB,YAAY5lB,KAAKmlB,eAAeD,wBAG1HllB,KAAKkkB,cAAgB,SAAUc,GAC7B,IAAIre,EAAMqe,EAAGE,sBACTnB,EAAS/jB,KAAK+jB,OAEd9C,EADU8C,EAAOhD,QACD0G,gBAAgB9gB,GAEhCsa,GACEA,EAAM5C,YACR4C,EAAMxa,MAAMqe,SACZ7D,EAAMuC,IAAIsB,UAGZ9kB,KAAK6lB,SAAS,YAEd5E,EAAQ8C,EAAOpF,UAAU+I,aAAa/gB,EAAIie,IAAKje,EAAIme,QACnD9kB,KAAK6lB,SAAS,kBAGhB7lB,KAAK8jB,gBAAkB7C,EACvBjhB,KAAKkgB,UAGPlgB,KAAKmkB,cAAgB,SAAUa,GAC7B,IAAIre,EAAMqe,EAAGE,sBACTnB,EAAS/jB,KAAK+jB,OAClB/jB,KAAK6lB,SAAS,iBACd,IAAI5E,EAAQ8C,EAAOsB,oBAEfpE,EAAM0G,eAAiB1G,EAAM2G,SAASjhB,EAAIie,IAAKje,EAAIme,SACrD9kB,KAAK8jB,gBAAkBC,EAAOpF,UAAUkJ,aAAa5G,EAAMxa,MAAMme,KACjE5kB,KAAK8jB,gBAAgBN,IAAMO,EAAOpF,UAAUkJ,aAAa5G,EAAMuC,IAAIoB,KAAKpB,KAExExjB,KAAK8jB,gBAAkBC,EAAOpF,UAAUkJ,aAAalhB,EAAIie,KAG3D5kB,KAAKkgB,UAGPlgB,KAAKokB,YAAc,SAAUY,GAC3B,IAAIjB,EAAS/jB,KAAK+jB,OAClBA,EAAO1D,YACPrgB,KAAK8jB,gBAAkBC,EAAOsB,oBAC9BrlB,KAAK6lB,SAAS,cAGhB7lB,KAAKqkB,aAAe,SAAUW,GAC5B,IAAIA,EAAG8C,cAAP,CAEI9C,EAAGiB,eAAiBjB,EAAGnO,SAAWmO,EAAGpO,SACvCoO,EAAGpO,OAASoO,EAAGnO,OACfmO,EAAGnO,OAAS,GAGd,IAAIkN,EAAS/jB,KAAK+jB,OACb/jB,KAAK+nB,cAAa/nB,KAAK+nB,YAAc,CACxCC,EAAG,EACHC,GAAI,EACJC,GAAI,EACJC,QAAS,IAEX,IAAIC,EAAapoB,KAAK+nB,YAClBC,EAAIhD,EAAG7C,SAASjJ,UAChBmP,EAAKL,EAAII,EAAWJ,EACpBC,EAAKjD,EAAGpO,OAASyR,EACjBH,EAAKlD,EAAGnO,OAASwR,EAEjBA,EAzNgB,MA0NlBJ,GAAMA,EAAKG,EAAWH,IAAM,EAC5BC,GAAMA,EAAKE,EAAWF,IAAM,GAG9B,IAAII,EAAYzhB,KAAKiC,IAAImf,EAAKC,GAC1BK,GAAY,EAIhB,GAHID,GAAa,GAAKvE,EAAOvC,SAASgH,eAAexD,EAAGpO,OAASoO,EAAGyD,MAAO,KAAIF,GAAY,GACvFD,GAAa,GAAKvE,EAAOvC,SAASgH,eAAe,EAAGxD,EAAGnO,OAASmO,EAAGyD,SAAQF,GAAY,GAEvFA,EACFH,EAAWD,QAAUH,OAChB,GAAIA,EAAII,EAAWD,QArON,IAqOmC,CACtCthB,KAAKiC,IAAImf,IAAO,IAAMphB,KAAKiC,IAAIsf,EAAWH,KAAOphB,KAAKiC,IAAIof,IAAO,IAAMrhB,KAAKiC,IAAIsf,EAAWF,KAGxGK,GAAY,EACZH,EAAWD,QAAUH,GAErBI,EAAWD,QAAU,EAQzB,OAJAC,EAAWJ,EAAIA,EACfI,EAAWH,GAAKA,EAChBG,EAAWF,GAAKA,EAEZK,GACFxE,EAAOvC,SAASkH,SAAS1D,EAAGpO,OAASoO,EAAGyD,MAAOzD,EAAGnO,OAASmO,EAAGyD,OACvDzD,EAAG2D,aAFZ,IAMF3oB,KAAKskB,YAAc,SAAUU,GAC3BhlB,KAAK+jB,OAAO7B,MAAM,aAAc8C,MAEjCvjB,KAAKmiB,EAAgBriB,WACxBoB,EAAQihB,gBAAkBA,KAiB5B5gB,IAAI9C,OAAO,cAAe,CAAC,UAAW,UAAW,SAAU,cAAe,gBAAgB,SAAU4B,EAAUa,EAASxC,GACrH,aAEU2B,EAAS,aAAnB,IACIya,EAAMza,EAAS,aAEnB,SAAS8mB,EAAQtY,GACftQ,KAAK6oB,QAAS,EACd7oB,KAAK8oB,SAAW,KAChB9oB,KAAK+oB,YAAczY,GAGrB,WACEtQ,KAAKgpB,MAAQ,WAKX,OAJAhpB,KAAK8oB,SAAWvM,EAAI3R,cAAc,OAClC5K,KAAK8oB,SAAShc,UAAY,cAC1B9M,KAAK8oB,SAASjb,MAAMmB,QAAU,OAC9BhP,KAAK+oB,YAAYjb,YAAY9N,KAAK8oB,UAC3B9oB,KAAK8oB,UAGd9oB,KAAK8hB,WAAa,WAChB,OAAO9hB,KAAK8oB,UAAY9oB,KAAKgpB,SAG/BhpB,KAAKipB,QAAU,SAAUlM,GACvBR,EAAI/L,aAAaxQ,KAAK8hB,aAAc/E,IAGtC/c,KAAKkpB,QAAU,SAAUC,GACvBnpB,KAAK8hB,aAAazR,UAAY8Y,GAGhCnpB,KAAKopB,YAAc,SAAUnmB,EAAG+iB,GAC9BhmB,KAAK8hB,aAAajU,MAAMsB,KAAOlM,EAAI,KACnCjD,KAAK8hB,aAAajU,MAAM4U,IAAMuD,EAAI,MAGpChmB,KAAKqpB,aAAe,SAAUvc,GAC5ByP,EAAIxP,YAAY/M,KAAK8hB,aAAchV,IAGrC9M,KAAKspB,KAAO,SAAUvM,EAAM9Z,EAAG+iB,GACjB,MAARjJ,GAAc/c,KAAKipB,QAAQlM,GACtB,MAAL9Z,GAAkB,MAAL+iB,GAAWhmB,KAAKopB,YAAYnmB,EAAG+iB,GAE3ChmB,KAAK6oB,SACR7oB,KAAK8hB,aAAajU,MAAMmB,QAAU,QAClChP,KAAK6oB,QAAS,IAIlB7oB,KAAKupB,KAAO,WACNvpB,KAAK6oB,SACP7oB,KAAK8hB,aAAajU,MAAMmB,QAAU,OAClChP,KAAK6oB,QAAS,IAIlB7oB,KAAKwpB,UAAY,WACf,OAAOxpB,KAAK8hB,aAAa2H,cAG3BzpB,KAAK0pB,SAAW,WACd,OAAO1pB,KAAK8hB,aAAavS,aAG3BvP,KAAK2pB,QAAU,WACb3pB,KAAK6oB,QAAS,EAEV7oB,KAAK8oB,UAAY9oB,KAAK8oB,SAASxY,YACjCtQ,KAAK8oB,SAASxY,WAAWb,YAAYzP,KAAK8oB,aAG7CrnB,KAAKmnB,EAAQrnB,WAChBoB,EAAQimB,QAAUA,KAEpB5lB,IAAI9C,OAAO,mCAAoC,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,gBAAiB,gBAAgB,SAAU4B,EAAUa,EAASxC,GAC1K,aAEA,IAAIoc,EAAMza,EAAS,cACfyP,EAAMzP,EAAS,cACfoT,EAAQpT,EAAS,gBACjB8mB,EAAU9mB,EAAS,cAAc8mB,QAiGrC,SAASgB,EAActZ,GACrBsY,EAAQnnB,KAAKzB,KAAMsQ,GAGrBiB,EAAIR,SAAS6Y,EAAehB,GAC5B,WACE5oB,KAAKopB,YAAc,SAAUnmB,EAAG+iB,GAC9B,IAAI6D,EAAc5pB,OAAO6pB,YAAcnf,SAAS8B,gBAAgB+B,YAC5Dub,EAAe9pB,OAAO+pB,aAAerf,SAAS8B,gBAAgBiC,aAC9DG,EAAQ7O,KAAK0pB,WACb3a,EAAS/O,KAAKwpB,aAClBvmB,GAAK,IAGG4L,EAAQgb,IACd5mB,GAAKA,EAAI4L,EAAQgb,IAHnB7D,GAAK,IAMGjX,EAASgb,IACf/D,GAAK,GAAKjX,GAGZ6Z,EAAQrnB,UAAU6nB,YAAY3nB,KAAKzB,KAAMiD,EAAG+iB,KAE7CvkB,KAAKmoB,EAAcroB,WACtBoB,EAAQsnB,cAxHR,SAAuBpG,GACrB,IAqBIqG,EAAgBC,EAAYC,EArB5BrG,EAASF,EAAaE,OACtBsG,EAAStG,EAAOvC,SAAS8I,aACzBC,EAAU,IAAIX,EAAc7F,EAAOxB,WAqDvC,SAASiI,IACHN,IAAgBA,EAAiB5R,aAAa4R,IAE9CE,IACFG,EAAQhB,OACRa,EAAoB,KAEpBrG,EAAO0G,QAAQ,oBAAqBF,GAEpCxG,EAAO1O,oBAAoB,aAAcmV,IAI7C,SAASE,EAAYlV,GACnB+U,EAAQnB,YAAY5T,EAAEvS,EAAGuS,EAAEwQ,GAlE7BnC,EAAaE,OAAOC,kBAAkB,mBAAmB,SAAUxO,GACjE,GAAKuO,EAAOnG,aAAgC,GAAjBpI,EAAEI,aAET,eADDyU,EAAOM,UAAUnV,GACpC,CACA,IAAIoP,EAAMpP,EAAE0P,sBAAsBN,IAC9BjG,EAAYoF,EAAOhD,QAAQpC,UAC/B,GAAInJ,EAAEyQ,cAAetH,EAAUiM,SAAShG,EAAK,OAAQ,CACnD,GAAyB,GAArBpP,EAAE2M,SAASzK,OAEb,OADAqM,EAAO1D,YACA7K,EAAEE,iBAGXmO,EAAaC,gBAAkBC,EAAOpF,UAAUkJ,aAAajD,GAI/D,OAFAf,EAAagC,SAAS,iBACtBhC,EAAa8B,aAAanQ,GACnBA,EAAEE,qBAqDXmO,EAAaE,OAAOC,kBAAkB,mBAAmB,SAAUxO,GACjE,IAAIxQ,EAASwQ,EAAE2M,SAASnd,QAAUwQ,EAAE2M,SAAS0I,WAC7C,GAAItO,EAAI3P,YAAY5H,EAAQ,mBAAoB,OAAOwlB,IACnDJ,GAAqBvG,EAAaiH,sBAAsBJ,EAAYlV,GACxE2U,EAAa3U,EACT0U,IACJA,EAAiB3R,YAAW,WAC1B2R,EAAiB,KACbC,IAAetG,EAAakH,eAzDpC,WACE,IAAInG,EAAMuF,EAAWjF,sBAAsBN,IACvCoG,EAAaX,EAAOY,aAAarG,GACrC,IAAKoG,EAAY,OAAOR,IAGxB,GAAI5F,GAFSb,EAAOhD,QAAQmK,YAET,CACjB,IAAIC,EAAYpH,EAAOvC,SAAS4J,yBAAyB,EAAGjB,EAAWnE,GAAGpB,IACtEje,EAAMwjB,EAAWkB,KACrB,GAAIF,EAAYpH,EAAOhD,QAAQuK,oBAAoB3kB,EAAIie,IAAKje,EAAIme,QAAS,OAAO0F,IAGlF,GAAIJ,GAAqBY,EASzB,GARAZ,EAAoBY,EAAWjO,KAAKva,KAAK,SACzC+nB,EAAQrB,QAAQkB,GAChBG,EAAQjB,OAERvF,EAAO0G,QAAQ,oBAAqBF,GAEpCxG,EAAOlC,GAAG,aAAc2I,GAEpB3G,EAAaiH,qBACfJ,EAAYP,OACP,CACL,IACI7H,EADgB6H,EAAWhI,SAASnd,OACfwd,wBACrB3U,EAAQ0c,EAAQzI,aAAajU,MACjCA,EAAMsB,KAAOmT,EAAKiB,MAAQ,KAC1B1V,EAAM4U,IAAMH,EAAKO,OAAS,MA6BsB0I,GAAmBf,MAClE,QAELtV,EAAMN,YAAYmP,EAAOvC,SAASgK,QAAS,YAAY,SAAUhW,GAC/D2U,EAAa,KACRC,IAAqBF,IAC1BA,EAAiB3R,YAAW,WAC1B2R,EAAiB,KACjBM,MACC,QAELzG,EAAOlC,GAAG,gBAAiB2I,OA8B/BxnB,IAAI9C,OAAO,wBAAyB,CAAC,UAAW,UAAW,SAAU,gBAAiB,sBAAsB,SAAU4B,EAAUa,EAASxC,GACvI,aAEA,IAAI+U,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBAErB2pB,EAAa9oB,EAAQ8oB,WAAa,SAAUtJ,EAAU4B,GACxD/jB,KAAKmiB,SAAWA,EAChBniB,KAAK+jB,OAASA,EACd/jB,KAAKiD,EAAIjD,KAAK0W,QAAUyL,EAASzL,QACjC1W,KAAKgmB,EAAIhmB,KAAK2W,QAAUwL,EAASxL,QACjC3W,KAAKqrB,KAAO,KACZrrB,KAAK0rB,aAAe,KACpB1rB,KAAK2rB,oBAAqB,EAC1B3rB,KAAKmZ,kBAAmB,IAG1B,WACEnZ,KAAKyV,gBAAkB,WACrBP,EAAMO,gBAAgBzV,KAAKmiB,UAC3BniB,KAAK2rB,oBAAqB,GAG5B3rB,KAAK0V,eAAiB,WACpBR,EAAMQ,eAAe1V,KAAKmiB,UAC1BniB,KAAKmZ,kBAAmB,GAG1BnZ,KAAK2oB,KAAO,WACV3oB,KAAKyV,kBACLzV,KAAK0V,kBAGP1V,KAAKklB,oBAAsB,WACzB,OAAIllB,KAAKqrB,OACTrrB,KAAKqrB,KAAOrrB,KAAK+jB,OAAOvC,SAASuE,wBAAwB/lB,KAAK0W,QAAS1W,KAAK2W,UADtD3W,KAAKqrB,MAK7BrrB,KAAKilB,YAAc,WACjB,GAA0B,OAAtBjlB,KAAK0rB,aAAuB,OAAO1rB,KAAK0rB,aAC5C,IACIE,EADS5rB,KAAK+jB,OACUsB,oBAC5B,GAAIuG,EAAevN,UAAWre,KAAK0rB,cAAe,MAAW,CAC3D,IAAI/kB,EAAM3G,KAAKklB,sBACfllB,KAAK0rB,aAAeE,EAAehE,SAASjhB,EAAIie,IAAKje,EAAIme,QAE3D,OAAO9kB,KAAK0rB,cAGd1rB,KAAK4V,UAAY,WACf,OAAOV,EAAMU,UAAU5V,KAAKmiB,WAG9BniB,KAAKimB,YAAc,WACjB,OAAOjmB,KAAKmiB,SAASpM,UAGvB/V,KAAK8nB,YAAcrT,EAAU3B,MAAQ,WACnC,OAAO9S,KAAKmiB,SAASxJ,SACnB,WACF,OAAO3Y,KAAKmiB,SAAStM,WAEtBpU,KAAKgqB,EAAWlqB,cAErByB,IAAI9C,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,cAAe,gBAAiB,sBAAsB,SAAU4B,EAAUa,EAASxC,GAC3J,aAEA,IAAIoc,EAAMza,EAAS,cACfoT,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBAKzB,SAAS+pB,EAAgBhI,GACvB,IAAIE,EAASF,EAAaE,OACtB+H,EAAavP,EAAI3R,cAAc,OACnCkhB,EAAWC,IAAM,6EACbtX,EAAUT,UAAS8X,EAAWje,MAAMD,QAAU,kFACpC,CAAC,WAAY,cAAe,YAAa,eAAgB,eAC/D9F,SAAQ,SAAU7E,GACxB4gB,EAAa5gB,GAAKjD,KAAKiD,KACtBjD,MACH+jB,EAAOhP,iBAAiB,YAAa/U,KAAKikB,YAAYnf,KAAK+e,IAC3D,IACImI,EAAqB/oB,EAAG+iB,EACxBiG,EAAShL,EACTiL,EAEAC,EACAC,EACAC,EACAC,EACAC,EATAC,EAAczI,EAAOxB,UAIrBkK,EAAU,EAsMd,SAASC,IACP,IAAIC,EAAaT,GApEnB,SAA8BvH,EAAQgI,GACpC,IAAI/gB,EAAMD,KAAKC,MACXghB,GAAaD,GAAchI,EAAOC,KAAO+H,EAAW/H,IACpDiI,GAAaF,GAAchI,EAAOG,QAAU6H,EAAW7H,QAEtDwH,GAAmBM,GAAaC,GACnC9I,EAAOuB,iBAAmB,EAC1BvB,EAAO+I,qBAAqBnI,GAC5BZ,EAAOuB,iBAAmB,EAC1BgH,EAAkB1gB,EAClB2gB,EAA0B,CACxBtpB,EAAGA,EACH+iB,EAAGA,IAGU+G,EAAaR,EAAwBtpB,EAAGspB,EAAwBvG,EAAG/iB,EAAG+iB,GAlK5D,EAqKvBsG,EAAkB,KACT1gB,EAAM0gB,GAvKG,MAwKlBvI,EAAOvC,SAASgF,uBAChB8F,EAAkB,OAiDtB9F,CADA0F,EAAanI,EAAOvC,SAASuE,wBAAwB9iB,EAAG+iB,GACvB2G,GA5CnC,SAAoBhI,EAAQgI,GAC1B,IAAI/gB,EAAMD,KAAKC,MACXohB,EAAajJ,EAAOvC,SAASyL,YAAYD,WACzCE,EAAiBnJ,EAAOvC,SAASyL,YAAYC,eAC7CC,EAAapJ,EAAOvC,SAASwB,SAASR,wBACtC4K,EAAU,CACZnqB,EAAG,CACDkM,KAAMlM,EAAIkqB,EAAWhe,KACrBoU,MAAO4J,EAAW5J,MAAQtgB,GAE5B+iB,EAAG,CACDvD,IAAKuD,EAAImH,EAAW1K,IACpBI,OAAQsK,EAAWtK,OAASmD,IAG5BqH,EAAiBxmB,KAAKM,IAAIimB,EAAQnqB,EAAEkM,KAAMie,EAAQnqB,EAAEsgB,OACpD+J,EAAiBzmB,KAAKM,IAAIimB,EAAQpH,EAAEvD,IAAK2K,EAAQpH,EAAEnD,QACnD0K,EAAe,CACjB3I,IAAKD,EAAOC,IACZE,OAAQH,EAAOG,QAGbuI,EAAiBH,GAAkB,IACrCK,EAAazI,QAAUsI,EAAQnqB,EAAEkM,KAAOie,EAAQnqB,EAAEsgB,OAAS,EAAI,GAG7D+J,EAAiBN,GAAc,IACjCO,EAAa3I,KAAOwI,EAAQpH,EAAEvD,IAAM2K,EAAQpH,EAAEnD,QAAU,EAAI,GAG9D,IAAI2K,EAAU7I,EAAOC,KAAO2I,EAAa3I,IACrC6I,EAAU9I,EAAOG,QAAUyI,EAAazI,OACxC8H,GAAaD,GAAchI,EAAOC,KAAO+H,EAAW/H,IAEpD4I,GAAWC,IAAYb,EACpBP,EAAwDzgB,EAAMygB,GAlNlD,KAkN2FtI,EAAOvC,SAASgF,qBAAqB+G,GAAvHlB,EAAsBzgB,EAEhDygB,EAAsB,KAQxBqB,CAAWxB,EAAYS,GAGzB,SAASgB,IACP1M,EAAQ8C,EAAOpF,UAAUiP,kBACzB5B,EAAsBjI,EAAOhD,QAAQ8M,UAAU5M,EAAO,gBAAiB8C,EAAO+J,qBAC9E/J,EAAO5C,iBACH4C,EAAOnG,aAAamG,EAAOvC,SAASuM,aAAaC,aAAY,GACjEC,cAAchC,GACdS,IACAT,EAAUiC,YAAYxB,EAAgB,IACtCD,EAAU,EACVvX,EAAMN,YAAYjK,SAAU,YAAawjB,GAG3C,SAASC,IACPH,cAAchC,GACdlI,EAAOhD,QAAQsN,aAAarC,GAC5BA,EAAsB,KACtBjI,EAAOuB,iBAAmB,EAC1BvB,EAAOpF,UAAU2P,kBAAkBrN,GACnC8C,EAAOuB,iBAAmB,EACtBvB,EAAOnG,cAAgBwO,GAAYrI,EAAOvC,SAASuM,aAAaC,aAAajK,EAAOwK,eACxFtN,EAAQ,KACRiL,EAAa,KACbO,EAAU,EACVJ,EAAsB,KACtBC,EAAkB,KAClBpX,EAAME,eAAezK,SAAU,YAAawjB,GA/N9CnuB,KAAKwuB,YAAc,SAAUhZ,GAC3B,GAAIxV,KAAKyuB,aAAejC,EAAYkC,UAAW,CAC7C,IAAIxmB,EAAOlI,KAKX,OAJAuY,YAAW,WACTrQ,EAAK0d,cACL1d,EAAKyd,aAAanQ,KACjB,GACIA,EAAEE,iBAGXuL,EAAQ8C,EAAOsB,oBACf,IAAIsJ,EAAenZ,EAAEmZ,aACrBA,EAAaC,cAAgB7K,EAAOwK,cAAgB,OAAS,WAEzD9Z,EAAUT,UACZ+P,EAAOxB,UAAUzU,YAAYge,GAC7BA,EAAWhc,UAAY,GAGzB6e,EAAaE,cAAgBF,EAAaE,aAAa/C,EAAY,EAAG,GAElErX,EAAUT,SACZ+P,EAAOxB,UAAU9S,YAAYqc,GAG/B6C,EAAaG,YACbH,EAAahP,QAAQ,OAAQoE,EAAOhD,QAAQgO,gBAC5C3C,GAAa,EACbpsB,KAAK6lB,SAAS,SAGhB7lB,KAAKgvB,UAAY,SAAUxZ,GAKzB,GAJAgX,EAAYkC,WAAY,EACxBtC,GAAa,EACbpsB,KAAK6lB,SAAS,OAET9B,EAAOwK,cAAe,CACzB,IAAIU,EAAazZ,EAAEmZ,aAAaM,WAC3B9C,GAA+B,QAAd8C,GAAsBlL,EAAOhD,QAAQ7Z,OAAO6c,EAAOsB,qBACzEtB,EAAOvC,SAASuM,aAAaC,aAAY,GAG3ChuB,KAAK+jB,OAAOiD,WAAW,gBACvBhnB,KAAK+jB,OAAOvC,SAAS0N,eAAe,KAGtClvB,KAAKmvB,YAAc,SAAU3Z,GAC3B,IAAIuO,EAAOwK,eAAkBa,EAAU5Z,EAAEmZ,cAMzC,OALA1rB,EAAIuS,EAAEkB,QACNsP,EAAIxQ,EAAEmB,QACDqV,GAAqB2B,IAC1BlB,IACAjX,EAAEmZ,aAAaM,WAAa9C,EAAgBkD,EAAc7Z,GACnDN,EAAMQ,eAAeF,IAG9BxV,KAAKsvB,WAAa,SAAU9Z,GAC1B,IAAIuO,EAAOwK,eAAkBa,EAAU5Z,EAAEmZ,cAWzC,OAVA1rB,EAAIuS,EAAEkB,QACNsP,EAAIxQ,EAAEmB,QAEDqV,IACH2B,IACAlB,KAGuB,OAArB8C,IAA2BA,EAAmB,MAClD/Z,EAAEmZ,aAAaM,WAAa9C,EAAgBkD,EAAc7Z,GACnDN,EAAMQ,eAAeF,IAG9BxV,KAAKwvB,YAAc,SAAUha,GAG3B,KAFAiX,GAEe,GAAKT,EAGlB,OAFAoC,IACAjC,EAAgB,KACTjX,EAAMQ,eAAeF,IAIhCxV,KAAKyvB,OAAS,SAAUja,GACtB,GAAK0W,EAAL,CACA,IAAIyC,EAAenZ,EAAEmZ,aAErB,GAAIvC,EACF,OAAQD,GACN,IAAK,OAEDlL,EADEA,EAAM2G,SAASsE,EAAWtH,IAAKsH,EAAWpH,QACpC,CACNre,MAAOylB,EACP1I,IAAK0I,GAGCnI,EAAO2L,SAASzO,EAAOiL,GAGjC,MAEF,IAAK,OACHjL,EAAQ8C,EAAO2L,SAASzO,EAAOiL,GAAY,OAG1C,CACL,IAAIyD,EAAWhB,EAAa/O,QAAQ,QACpCqB,EAAQ,CACNxa,MAAOylB,EACP1I,IAAKO,EAAOhD,QAAQ/Z,OAAOklB,EAAYyD,IAEzC5L,EAAO9F,QACPkO,EAAgB,KAIlB,OADAiC,IACOlZ,EAAMQ,eAAeF,KAG9BN,EAAMN,YAAY4X,EAAa,YAAaxsB,KAAKwuB,YAAY1pB,KAAK+e,IAClE3O,EAAMN,YAAY4X,EAAa,UAAWxsB,KAAKgvB,UAAUlqB,KAAK+e,IAC9D3O,EAAMN,YAAY4X,EAAa,YAAaxsB,KAAKmvB,YAAYrqB,KAAK+e,IAClE3O,EAAMN,YAAY4X,EAAa,WAAYxsB,KAAKsvB,WAAWxqB,KAAK+e,IAChE3O,EAAMN,YAAY4X,EAAa,YAAaxsB,KAAKwvB,YAAY1qB,KAAK+e,IAClE3O,EAAMN,YAAY4X,EAAa,OAAQxsB,KAAKyvB,OAAO3qB,KAAK+e,IAwGxD,IAAI0L,EAAmB,KAEvB,SAASpB,IACiB,MAApBoB,IACFA,EAAmBhX,YAAW,WACJ,MAApBgX,GAA4BvD,GAAqBoC,MACpD,KAIP,SAASgB,EAAUT,GACjB,IAAIiB,EAAQjB,EAAaiB,MACzB,OAAQA,GAASxrB,MAAM7C,UAAUiH,KAAK/G,KAAKmuB,GAAO,SAAU9a,GAC1D,MAAe,cAARA,GAAgC,QAARA,KAInC,SAASua,EAAc7Z,GACrB,IAAIqa,EAAc,CAAC,OAAQ,WAAY,MAAO,iBAE1CC,EAAoBrb,EAAU3B,MAAQ0C,EAAEM,OAASN,EAAEK,QACnD+Y,EAAgB,gBAEpB,IACEA,EAAgBpZ,EAAEmZ,aAAaC,cAAc9c,cAC7C,MAAO0D,IAET,IAAIyZ,EAAa,OAEjB,OADIa,GAAqBD,EAAY1tB,QAAQysB,IAAkB,EAAGK,EAAa,OAT7D,CAAC,OAAQ,WAAY,WAAY,MAAO,iBASiD9sB,QAAQysB,IAAkB,EAAGK,EAAa,OAAgBY,EAAY1tB,QAAQysB,IAAkB,IAAGK,EAAa,QACpNA,GAsFX,SAASlC,EAAa5F,EAAIC,EAAIC,EAAIC,GAChC,OAAOzgB,KAAK2gB,KAAK3gB,KAAKuL,IAAIiV,EAAKF,EAAI,GAAKtgB,KAAKuL,IAAIkV,EAAKF,EAAI,KAnF5D,WACEpnB,KAAK+vB,SAAW,WACCpkB,KAAKC,MAAQ5L,KAAKmlB,eAAeK,KACjCxlB,KAAK+jB,OAAOiM,gBAAgBhwB,KAAKiwB,aAGlDjwB,KAAKkwB,YAAc,WACJlwB,KAAK+jB,OAAOxB,UAClBmM,WAAY,EACnB1uB,KAAK4lB,YAAY5lB,KAAKmlB,eAAeD,uBACrCllB,KAAK4mB,aAGP5mB,KAAKmwB,aAAe,SAAU3a,GAC5BxV,KAAK+jB,OAAOvC,SAASuM,aAAaC,aAAahuB,KAAK+jB,OAAOwK,eAC3DvuB,KAAK+jB,OAAOiD,WAAW,gBACvBhnB,KAAK+jB,OAAOvC,SAAS0N,eAAe,IACpClvB,KAAKkwB,eAGPlwB,KAAKiwB,UAAY,WACfjwB,KAAKyuB,YAAa,EAClB,IAAI1K,EAAS/jB,KAAK+jB,OACLA,EAAOxB,UACbmM,WAAY,EACnB3K,EAAOvC,SAASuM,aAAaC,aAAY,GACzCjK,EAAOqC,SAAS,gBAChB,IAAIgK,EAAc3b,EAAUpB,MAAQ,UAAY,OAChD0Q,EAAOvC,SAAS0N,eAAekB,GAC/BpwB,KAAK6lB,SAAS,cAGhB7lB,KAAKqwB,YAAc,SAAU7a,GAC3B,IAAIxQ,EAAShF,KAAK+jB,OAAOxB,UAErB9N,EAAUnB,MAAsB,aAAdtT,KAAKswB,QACVvD,EAAa/sB,KAAKmlB,eAAeliB,EAAGjD,KAAKmlB,eAAea,EAAGhmB,KAAKiD,EAAGjD,KAAKgmB,GACxE,GAAGhhB,EAAOurB,YAGR,aAAfvwB,KAAKswB,QACQvD,EAAa/sB,KAAKmlB,eAAeliB,EAAGjD,KAAKmlB,eAAea,EAAGhmB,KAAKiD,EAAGjD,KAAKgmB,GAExE,IACbhhB,EAAO0pB,WAAY,EACnB1uB,KAAK4lB,YAAY5lB,KAAKmlB,eAAeD,0BAK3CllB,KAAKikB,YAAc,SAAUzO,GAC3B,GAAKxV,KAAKwwB,aAAV,CACAxwB,KAAKmlB,eAAiB3P,EACtB,IAAIuO,EAAS/jB,KAAK+jB,OACdkB,EAAczP,EAAEyP,cAChBjP,EAASR,EAAEI,YAGf,GAAmB,KAFFJ,EAAE2M,SAASzK,QAAU,IAEH,IAAX1B,GAAgBiP,EAAa,CACnD,GAAIzP,EAAEuO,OAAO2B,oBAAsBlQ,EAAEsS,eAAiBtS,EAAEyQ,eAAgB,OACxEjmB,KAAKmlB,eAAeK,KAAO7Z,KAAKC,MAChC,IAAI6kB,EAAcjb,EAAE2M,SAASnd,QAAUwQ,EAAE2M,SAAS0I,WAGlD,GAFI,iBAAkB4F,IAAaA,EAAYC,aAAe,MAE1D3M,EAAOiM,eAAgB,CACzB,GAAIvb,EAAUP,SACZlU,KAAKyuB,YAAa,EACA1K,EAAOxB,UACbmM,WAAY,EAG1B1uB,KAAK6lB,SAAS,iBAEd7lB,KAAKiwB,YAGPjwB,KAAK2lB,aAAanQ,EAAGxV,KAAKqwB,YAAYvrB,KAAK9E,OAC3CwV,EAAE2D,kBAAmB,OAGxB1X,KAAKoqB,EAAgBtqB,WAMxBoB,EAAQkpB,gBAAkBA,KAE5B7oB,IAAI9C,OAAO,cAAe,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAU4B,EAAUa,EAASxC,GACtG,aAEA,IAAIoc,EAAMza,EAAS,SAEnBa,EAAQ8G,IAAM,SAAUknB,EAAKxvB,GAC3B,IAAIyvB,EAAM,IAAIC,eACdD,EAAIE,KAAK,MAAOH,GAAK,GAErBC,EAAIG,mBAAqB,WACA,IAAnBH,EAAII,YACN7vB,EAASyvB,EAAIK,eAIjBL,EAAIM,KAAK,OAGXvuB,EAAQwuB,WAAa,SAAUC,EAAMjwB,GACnC,IAAIoL,EAAOgQ,EAAIlQ,kBACXglB,EAAI1mB,SAASC,cAAc,UAC/BymB,EAAEtF,IAAMqF,EACR7kB,EAAKuB,YAAYujB,GAEjBA,EAAEC,OAASD,EAAEN,mBAAqB,SAAUQ,EAAGC,IACzCA,GAAYH,EAAEL,YAA8B,UAAhBK,EAAEL,YAA0C,YAAhBK,EAAEL,aAC5DK,EAAIA,EAAEC,OAASD,EAAEN,mBAAqB,KACjCS,GAASrwB,OAKpBwB,EAAQ8uB,WAAa,SAAUd,GAC7B,IAAIrqB,EAAIqE,SAASC,cAAc,KAE/B,OADAtE,EAAE6H,KAAOwiB,EACFrqB,EAAE6H,SAGbnL,IAAI9C,OAAO,wBAAyB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACjG,aAEA,IAAIuxB,EAAe,GAEfjc,EAAkB,WACpBzV,KAAK2rB,oBAAqB,GAGxBjW,EAAiB,WACnB1V,KAAKmZ,kBAAmB,GAG1BuY,EAAaxP,MAAQwP,EAAaC,eAAiB,SAAUC,EAAWpc,GACtExV,KAAK6xB,iBAAmB7xB,KAAK6xB,eAAiB,IAC9C7xB,KAAK8xB,mBAAqB9xB,KAAK8xB,iBAAmB,IAClD,IAAIC,EAAY/xB,KAAK6xB,eAAeD,IAAc,GAC9CI,EAAiBhyB,KAAK8xB,iBAAiBF,GAC3C,GAAKG,EAAUxxB,QAAWyxB,EAA1B,CACgB,iBAALxc,GAAkBA,IAAGA,EAAI,IAC/BA,EAAEV,OAAMU,EAAEV,KAAO8c,GACjBpc,EAAEC,kBAAiBD,EAAEC,gBAAkBA,GACvCD,EAAEE,iBAAgBF,EAAEE,eAAiBA,GAC1Cqc,EAAYA,EAAUxvB,QAEtB,IAAK,IAAIZ,EAAI,EAAGA,EAAIowB,EAAUxxB,SAC5BwxB,EAAUpwB,GAAG6T,EAAGxV,OACZwV,EAAEmW,oBAF8BhqB,KAKtC,OAAIqwB,IAAmBxc,EAAE2D,iBAAyB6Y,EAAexc,EAAGxV,WAApE,IAGF0xB,EAAajH,QAAU,SAAUmH,EAAWpc,GAC1C,IAAIuc,GAAa/xB,KAAK6xB,gBAAkB,IAAID,GAC5C,GAAKG,EAAL,CACAA,EAAYA,EAAUxvB,QAEtB,IAAK,IAAIZ,EAAI,EAAGA,EAAIowB,EAAUxxB,OAAQoB,IACpCowB,EAAUpwB,GAAG6T,EAAGxV,QAIpB0xB,EAAaO,KAAO,SAAUL,EAAWzwB,GACvC,IAAIkb,EAAQrc,KAEZmB,GAAYnB,KAAK+U,iBAAiB6c,GAAW,SAASM,IACpD7V,EAAMhH,oBAAoBuc,EAAWM,GAErC/wB,EAASR,MAAM,KAAML,eAIzBoxB,EAAa1N,kBAAoB,SAAU4N,EAAWzwB,GACpD,IAAIgxB,EAAWnyB,KAAK8xB,iBAKpB,GAJKK,IAAUA,EAAWnyB,KAAK8xB,iBAAmB,CAChDM,WAAY,KAGVD,EAASP,GAAY,CACvB,IAAIS,EAAMF,EAASP,GACfU,EAAWH,EAASC,WAAWR,GAC9BU,IAAUH,EAASC,WAAWR,GAAaU,EAAW,IAC3DA,EAASvwB,KAAKswB,GACd,IAAI1wB,EAAI2wB,EAASnwB,QAAQhB,IACf,GAANQ,GAAS2wB,EAASlsB,OAAOzE,EAAG,GAGlCwwB,EAASP,GAAazwB,GAGxBuwB,EAAaa,qBAAuB,SAAUX,EAAWzwB,GACvD,IAAIgxB,EAAWnyB,KAAK8xB,iBACpB,GAAKK,EAAL,CACA,IAAIG,EAAWH,EAASC,WAAWR,GAEnC,GAAIO,EAASP,IAAczwB,EAAU,CACzBgxB,EAASP,GACfU,GAAUtyB,KAAKgkB,kBAAkB4N,EAAWU,EAASE,YACpD,GAAIF,EAAU,CACnB,IAAI3wB,EAAI2wB,EAASnwB,QAAQhB,IACf,GAANQ,GAAS2wB,EAASlsB,OAAOzE,EAAG,MAIpC+vB,EAAa7P,GAAK6P,EAAa3c,iBAAmB,SAAU6c,EAAWzwB,EAAUsxB,GAC/EzyB,KAAK6xB,eAAiB7xB,KAAK6xB,gBAAkB,GAC7C,IAAIE,EAAY/xB,KAAK6xB,eAAeD,GAGpC,OAFKG,IAAWA,EAAY/xB,KAAK6xB,eAAeD,GAAa,KACzB,GAAhCG,EAAU5vB,QAAQhB,IAAiB4wB,EAAUU,EAAY,UAAY,QAAQtxB,GAC1EA,GAGTuwB,EAAagB,IAAMhB,EAAatc,eAAiBsc,EAAarc,oBAAsB,SAAUuc,EAAWzwB,GACvGnB,KAAK6xB,eAAiB7xB,KAAK6xB,gBAAkB,GAC7C,IAAIE,EAAY/xB,KAAK6xB,eAAeD,GACpC,GAAKG,EAAL,CACA,IAAIttB,EAAQstB,EAAU5vB,QAAQhB,IACf,IAAXsD,GAAcstB,EAAU3rB,OAAO3B,EAAO,KAG5CitB,EAAaiB,mBAAqB,SAAUf,GACtC5xB,KAAK6xB,iBAAgB7xB,KAAK6xB,eAAeD,GAAa,KAG5DjvB,EAAQ+uB,aAAeA,KAEzB1uB,IAAI9C,OAAO,qBAAsB,CAAC,UAAW,UAAW,SAAU,cAAe,0BAA0B,SAAU4B,EAAUa,EAASxC,GAGtI,IAAIoR,EAAMzP,EAAS,SACf4vB,EAAe5vB,EAAS,mBAAmB4vB,aAC3CkB,EAAkB,CACpBC,WAAY,SAAoBC,GAC9BxxB,OAAOsI,KAAKkpB,GAAShrB,SAAQ,SAAU0D,GACrCxL,KAAK+yB,UAAUvnB,EAAKsnB,EAAQtnB,MAC3BxL,OAELgzB,WAAY,SAAoBC,GAC9B,IAAI7tB,EAAS,GAYb,OAVK6tB,EAEO7uB,MAAMoD,QAAQyrB,KACxB7tB,EAAS6tB,EACTA,EAAc3xB,OAAOsI,KAAKxE,IAH1B6tB,EAAc3xB,OAAOsI,KAAK5J,KAAKkzB,UAMjCD,EAAYnrB,SAAQ,SAAU0D,GAC5BpG,EAAOoG,GAAOxL,KAAKmzB,UAAU3nB,KAC5BxL,MACIoF,GAET2tB,UAAW,SAAmBzuB,EAAMgE,GAClC,GAAItI,KAAK,IAAMsE,KAAUgE,EAAzB,CACA,IAAI8qB,EAAMpzB,KAAKkzB,SAAS5uB,GAExB,IAAK8uB,EACH,OAAOC,EAAK,sBAAwB/uB,EAAO,KAG7C,GAAI8uB,EAAIE,UAAW,OAAOtzB,KAAKozB,EAAIE,YAActzB,KAAKozB,EAAIE,WAAWP,UAAUzuB,EAAMgE,GAChF8qB,EAAIG,aAAYvzB,KAAK,IAAMsE,GAAQgE,GACpC8qB,GAAOA,EAAI1pB,KAAK0pB,EAAI1pB,IAAIjI,KAAKzB,KAAMsI,KAEzC6qB,UAAW,SAAmB7uB,GAC5B,IAAI8uB,EAAMpzB,KAAKkzB,SAAS5uB,GAExB,OAAK8uB,EAIDA,EAAIE,UAAkBtzB,KAAKozB,EAAIE,YAActzB,KAAKozB,EAAIE,WAAWH,UAAU7uB,GACxE8uB,GAAOA,EAAI3pB,IAAM2pB,EAAI3pB,IAAIhI,KAAKzB,MAAQA,KAAK,IAAMsE,GAJ/C+uB,EAAK,sBAAwB/uB,EAAO,OAQjD,SAAS+uB,EAAKG,GACU,oBAAX5yB,SAA0BA,QAAQyyB,MAAMzyB,QAAQyyB,KAAK1yB,MAAMC,QAASN,WAGjF,SAASmzB,EAAYC,EAAK5Z,GACxB,IAAItE,EAAI,IAAIme,MAAMD,GAClBle,EAAEsE,KAAOA,EACa,iBAAXlZ,SAAuBA,QAAQC,OAAOD,QAAQC,MAAM2U,GAC/D+C,YAAW,WACT,MAAM/C,KAIV,IAAIoe,EAAY,WACd5zB,KAAK6zB,gBAAkB,KAGzB,WACEtiB,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK8zB,cAAgB,SAAUrsB,EAAK2pB,EAAM2C,GAYxC,OAXKtsB,EAAIyrB,WAAUlzB,KAAK6zB,gBAAgBzC,GAAQ3pB,EAAIyrB,SAAW,IAC/D5xB,OAAOsI,KAAKmqB,GAASjsB,SAAQ,SAAU0D,GACrC,IAAI4nB,EAAMW,EAAQvoB,GACA,iBAAP4nB,IAAiBA,EAAM,CAChCE,UAAWF,IAEbA,EAAI9uB,OAAS8uB,EAAI9uB,KAAOkH,GACxB/D,EAAIyrB,SAASE,EAAI9uB,MAAQ8uB,EACrB,iBAAkBA,IAAK3rB,EAAI,IAAM2rB,EAAI9uB,MAAQ8uB,EAAIY,iBAEvDziB,EAAIF,UAAU5J,EAAKmrB,GACZ5yB,MAGTA,KAAKi0B,aAAe,SAAUxsB,GAC5BnG,OAAOsI,KAAKnC,EAAIyrB,UAAUprB,SAAQ,SAAU0D,GAC1C,IAAI4nB,EAAM3rB,EAAIyrB,SAAS1nB,GACnB,UAAW4nB,GAAK3rB,EAAIsrB,UAAUvnB,EAAK4nB,EAAI9qB,WAI/CtI,KAAKk0B,gBAAkB,SAAU9C,EAAM9sB,EAAMgE,GAC3C,IAAI6rB,EAAOn0B,KAAK6zB,gBAAgBzC,KAAUpxB,KAAK6zB,gBAAgBzC,GAAQ,IAEnE+C,EAAK7vB,KACH6vB,EAAKb,UAAWtzB,KAAKk0B,gBAAgBC,EAAKb,UAAWhvB,EAAMgE,GAAY6rB,EAAK7vB,GAAMgE,MAAQA,IAIlGtI,KAAKo0B,iBAAmB,SAAUhD,EAAMiD,GACtC/yB,OAAOsI,KAAKyqB,GAAYvsB,SAAQ,SAAU0D,GACxCxL,KAAKk0B,gBAAgB9C,EAAM5lB,EAAK6oB,EAAW7oB,MAC1CxL,OAGLA,KAAKqzB,KAAOA,EACZrzB,KAAKyzB,YAAcA,IAClBhyB,KAAKmyB,EAAUryB,WAClBoB,EAAQixB,UAAYA,KAEtB5wB,IAAI9C,OAAO,aAAc,CAAC,UAAW,UAAW,SAAU,eAAgB,cAAe,cAAe,uBAAuB,SAAU4B,EAAUa,EAASxC,GAG1J,IAAIqc,EAAO1a,EAAS,cAEhBwyB,GADMxyB,EAAS,aACTA,EAAS,cACf8xB,EAAY9xB,EAAS,oBAAoB8xB,UAC7CzzB,EAAOwC,QAAUA,EAAU,IAAIixB,EAE/B,IAAI7zB,EAAS,WACX,OAAOC,MAAyB,oBAAVC,QAAyBA,OADpC,GAIT8zB,EAAU,CACZhxB,UAAU,EACVwxB,WAAY,KACZC,SAAU,KACVC,UAAW,KACXC,SAAU,GACVC,OAAQ,MACRC,YAAa,IAsFf,SAASC,EAAK9xB,GACZ,GAAKhD,GAAWA,EAAO4K,SAAvB,CACAopB,EAAQhxB,SAAWA,GAAYjB,EAASiB,UAAY5C,EAAO4C,UAAYhD,EAAOG,QAAU,OAAO6C,SAQ/F,IAPA,IA2CmBsB,EA3CfywB,EAAgB,GAChBC,EAAY,GACZC,EAAgBrqB,SAASqqB,eAAiBrqB,SAASsqB,eAGnDC,GADkBF,GAAiBA,EAAcG,eAAiBxqB,UACxC6B,qBAAqB,UAE1C7K,EAAI,EAAGA,EAAIuzB,EAAQ30B,OAAQoB,IAAK,CACvC,IAAIyzB,EAASF,EAAQvzB,GACjBoqB,EAAMqJ,EAAOrJ,KAAOqJ,EAAOC,aAAa,OAC5C,GAAKtJ,EAAL,CAGA,IAFA,IAAIuJ,EAAaF,EAAOE,WAEfC,EAAI,EAAG3zB,EAAI0zB,EAAW/0B,OAAQg1B,EAAI3zB,EAAG2zB,IAAK,CACjD,IAAIC,EAAOF,EAAWC,GAEiB,IAAnCC,EAAKlxB,KAAKnC,QAAQ,eACpB2yB,GA0BazwB,EA1BamxB,EAAKlxB,KAAK5B,QAAQ,aAAc,IA2BzD2B,EAAI3B,QAAQ,SAAS,SAAU+yB,EAAGC,GACvC,OAAOA,EAAGC,mBA5B4DH,EAAKltB,OAI3E,IAAImtB,EAAI1J,EAAIzoB,MAAM,gCACdmyB,IAAGV,EAAYU,EAAE,KAcvB,IAAK,IAAIjqB,KAXLupB,IACFD,EAAcc,KAAOd,EAAcc,MAAQb,EAC3CD,EAAc/xB,UAAW,GAG3B+xB,EAAcJ,SAAWI,EAAcc,KACvCd,EAAcP,WAAaO,EAAcP,YAAcO,EAAcc,KACrEd,EAAcN,SAAWM,EAAcN,UAAYM,EAAcc,KACjEd,EAAcL,UAAYK,EAAcL,WAAaK,EAAcc,YAC5Dd,EAAcc,KAELd,OACoB,IAAvBA,EAActpB,IAAsB7I,EAAQ+G,IAAI8B,EAAKspB,EAActpB,KA3HlF7I,EAAQ8G,IAAM,SAAU+B,GACtB,IAAKuoB,EAAQhuB,eAAeyF,GAAM,MAAM,IAAImoB,MAAM,uBAAyBnoB,GAC3E,OAAOuoB,EAAQvoB,IAGjB7I,EAAQ+G,IAAM,SAAU8B,EAAKlD,GAC3B,IAAKyrB,EAAQhuB,eAAeyF,GAAM,MAAM,IAAImoB,MAAM,uBAAyBnoB,GAC3EuoB,EAAQvoB,GAAOlD,GAGjB3F,EAAQkzB,IAAM,WACZ,OAAOrZ,EAAK3B,WAAWkZ,IAGzBpxB,EAAQmzB,UAAY,SAAUxxB,EAAMyxB,GAClC,GAAIhC,EAAQa,YAAYtwB,GAAO,OAAOyvB,EAAQa,YAAYtwB,GAC1D,IAAI0xB,EAAQ1xB,EAAKjC,MAAM,KAEnB4zB,EAAmB,aADvBF,EAAYA,GAAaC,EAAMA,EAAMz1B,OAAS,IAAM,IAChB,IAAM,IACtCq1B,EAAOI,EAAMA,EAAMz1B,OAAS,GAEhC,GAAiB,UAAbw1B,GAAgC,KAAPE,EAAY,CACvC,IAAIC,EAAK,IAAI9yB,OAAO,IAAM2yB,EAAY,gBAAkBA,EAAY,IAAK,KACzEH,EAAOA,EAAKlzB,QAAQwzB,EAAI,MAGpBN,GAAQA,GAAQG,IAAcC,EAAMz1B,OAAS,IAAGq1B,EAAOI,EAAMA,EAAMz1B,OAAS,IAClF,IAAI6wB,EAAO2C,EAAQgC,EAAY,QAS/B,OAPY,MAAR3E,EACFA,EAAO2C,EAAQW,SACC,KAAPuB,IACTF,EAAYE,EAAM,IAGhB7E,GAA0B,KAAlBA,EAAK7uB,OAAO,KAAW6uB,GAAQ,KACpCA,EAAO2E,EAAYE,EAAML,EAAO51B,KAAKyJ,IAAI,WAGlD9G,EAAQwzB,aAAe,SAAU7xB,EAAM8xB,GACrC,OAAOrC,EAAQa,YAAYtwB,GAAQ8xB,GAGrCzzB,EAAQ0zB,SAAW,GAEnB1zB,EAAQ2zB,WAAa,SAAUp0B,EAAYq0B,GACzC,IAAIp2B,EAAQq2B,EAERpyB,MAAMoD,QAAQtF,KAChBs0B,EAAat0B,EAAW,GACxBA,EAAaA,EAAW,IAG1B,IACE/B,EAAS2B,EAASI,GAClB,MAAOsT,IAET,GAAIrV,IAAWwC,EAAQ0zB,SAASn0B,GAAa,OAAOq0B,GAAUA,EAAOp2B,GAGrE,GAFKwC,EAAQ0zB,SAASn0B,KAAaS,EAAQ0zB,SAASn0B,GAAc,IAClES,EAAQ0zB,SAASn0B,GAAYH,KAAKw0B,KAC9B5zB,EAAQ0zB,SAASn0B,GAAY3B,OAAS,GAA1C,CAEA,IAAIk2B,EAAY,WACd30B,EAAS,CAACI,IAAa,SAAU/B,GAC/BwC,EAAQuf,MAAM,cAAe,CAC3B5d,KAAMpC,EACN/B,OAAQA,IAGV,IAAI4xB,EAAYpvB,EAAQ0zB,SAASn0B,GACjCS,EAAQ0zB,SAASn0B,GAAc,KAC/B6vB,EAAUjqB,SAAQ,SAAUyuB,GAC1BA,GAAUA,EAAOp2B,UAKvB,IAAKwC,EAAQ8G,IAAI,YAAa,OAAOgtB,IACrCnC,EAAInD,WAAWxuB,EAAQmzB,UAAU5zB,EAAYs0B,GAAaC,KAG5D5B,GAAK,GA8CLlyB,EAAQkyB,KAAOA,KAQjB7xB,IAAI9C,OAAO,0BAA2B,CAAC,UAAW,UAAW,SAAU,gBAAiB,oBAAqB,6BAA8B,mCAAoC,wBAAyB,6BAA8B,eAAe,SAAU4B,EAAUa,EAASxC,GAChR,aAEA,IAAI+U,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBACrB8hB,EAAkB9hB,EAAS,sBAAsB8hB,gBACjD8S,EAAuB50B,EAAS,4BAA4BmoB,cAC5DwB,EAAa3pB,EAAS,iBAAiB2pB,WACvCI,EAAkB/pB,EAAS,sBAAsB+pB,gBACjD8K,EAAS70B,EAAS,aAElB80B,EAAe,SAAsB7S,GACvC,IAAI1H,EAAQrc,KAEZA,KAAK+jB,OAASA,EACd,IAAIH,EAAgB5jB,MACpB,IAAI02B,EAAqB12B,MACzB,IAAI6rB,EAAgB7rB,MAEpB,IAAI62B,EAAc,SAAqBrhB,KAChB7K,SAASmsB,WAAansB,SAASmsB,aAAe/S,EAAOnG,aAAejT,SAASkT,gBAAkBkG,EAAOhB,WAAagB,EAAOhB,UAAUjB,gBACtI7hB,OAAOge,QAC1B8F,EAAO9F,SAGLuO,EAAczI,EAAOvC,SAASuV,sBAClC7hB,EAAMN,YAAY4X,EAAa,QAASxsB,KAAKg3B,aAAalyB,KAAK9E,KAAM,UACrEkV,EAAMN,YAAY4X,EAAa,YAAaxsB,KAAKmuB,YAAYrpB,KAAK9E,KAAM,cACxEkV,EAAMyC,0BAA0B,CAAC6U,EAAazI,EAAOvC,SAASyV,YAAclT,EAAOvC,SAASyV,WAAWroB,MAAOmV,EAAOvC,SAAS0V,YAAcnT,EAAOvC,SAAS0V,WAAWtoB,MAAOmV,EAAOhB,WAAagB,EAAOhB,UAAUjB,cAAczZ,OAAO8uB,SAAU,CAAC,IAAK,IAAK,KAAMn3B,KAAM,gBACzQkV,EAAM4B,sBAAsBiN,EAAOxB,UAAWviB,KAAKqkB,aAAavf,KAAK9E,KAAM,eAC3EkV,EAAMmB,qBAAqB0N,EAAOxB,UAAWviB,KAAKskB,YAAYxf,KAAK9E,KAAM,cACzE,IAAIo3B,EAAWrT,EAAOvC,SAASgK,QAC/BtW,EAAMN,YAAYwiB,EAAU,YAAap3B,KAAKg3B,aAAalyB,KAAK9E,KAAM,oBACtEkV,EAAMN,YAAYwiB,EAAU,QAASp3B,KAAKg3B,aAAalyB,KAAK9E,KAAM,gBAClEkV,EAAMN,YAAYwiB,EAAU,WAAYp3B,KAAKg3B,aAAalyB,KAAK9E,KAAM,mBACrEkV,EAAMN,YAAYwiB,EAAU,YAAap3B,KAAKg3B,aAAalyB,KAAK9E,KAAM,oBACtEkV,EAAMN,YAAY4X,EAAa,YAAaqK,GAC5C3hB,EAAMN,YAAYwiB,EAAU,YAAaP,GAErCpiB,EAAUnB,MAAQyQ,EAAOvC,SAASyV,aACpC/hB,EAAMN,YAAYmP,EAAOvC,SAASyV,WAAW5oB,QAAS,YAAawoB,GACnE3hB,EAAMN,YAAYmP,EAAOvC,SAAS0V,WAAW7oB,QAAS,YAAawoB,IAGrE9S,EAAOlC,GAAG,aAAa,SAAUrM,GAC/B,IAAI6G,EAAMiU,QAASjU,EAAMgb,YAAehb,EAAMmU,aAA9C,CACA,IAAI8G,EAAYvT,EAAOvC,SAASuE,wBAAwBvQ,EAAEvS,EAAGuS,EAAEwQ,GAC3D/E,EAAQ8C,EAAOhD,QAAQpC,UAAUmC,WACjCU,EAAWuC,EAAOvC,UAEjBP,EAAM5C,WAAa4C,EAAMsW,YAAYD,EAAU1S,IAAK0S,EAAUxS,QACjEtD,EAAS0N,eAAe,WAExB1N,EAAS0N,eAAe,UAK9B,WACElvB,KAAKg3B,aAAe,SAAU1yB,EAAMkR,GAClCxV,KAAK+jB,OAAO7B,MAAM5d,EAAM,IAAImnB,EAAWjW,EAAGxV,KAAK+jB,UAGjD/jB,KAAKmuB,YAAc,SAAU7pB,EAAMkR,GACjC,IAAIuc,EAAY/xB,KAAK+jB,OAAO8N,gBAAkB7xB,KAAK+jB,OAAO8N,eAAe2F,UACpEzF,GAAcA,EAAUxxB,QAE7BP,KAAK+jB,OAAO7B,MAAM5d,EAAM,IAAImnB,EAAWjW,EAAGxV,KAAK+jB,UAGjD/jB,KAAKqkB,aAAe,SAAU/f,EAAMkR,GAClC,IAAI2U,EAAa,IAAIsB,EAAWjW,EAAGxV,KAAK+jB,QACxCoG,EAAW1B,MAA4B,EAApBzoB,KAAKy3B,aACxBtN,EAAWvT,OAASpB,EAAEoB,OACtBuT,EAAWtT,OAASrB,EAAEqB,OAEtB7W,KAAK+jB,OAAO7B,MAAM5d,EAAM6lB,IAG1BnqB,KAAKskB,YAAc,SAAUhgB,EAAMkR,GACjC,IAAI2U,EAAa,IAAIsB,EAAWjW,EAAGxV,KAAK+jB,QACxCoG,EAAW1B,MAAQ,EAEnB0B,EAAWvT,OAASpB,EAAEoB,OACtBuT,EAAWtT,OAASrB,EAAEqB,OAEtB7W,KAAK+jB,OAAO7B,MAAM5d,EAAM6lB,IAG1BnqB,KAAK6lB,SAAW,SAAUyK,GACxBtwB,KAAKswB,MAAQA,GAGftwB,KAAK2lB,aAAe,SAAUX,EAAI0S,GAChC13B,KAAKiD,EAAI+hB,EAAG/hB,EACZjD,KAAKgmB,EAAIhB,EAAGgB,EACZhmB,KAAK+qB,gBAAiB,EACtB,IAAIvJ,EAAWxhB,KAAK+jB,OAAOvC,SACvBA,EAASC,wBAAuBD,EAASC,sBAAwB,MACrE,IAAIvZ,EAAOlI,KAEPmuB,EAAc,SAAqB3Y,GACrC,GAAKA,EAAL,CACA,GAAIf,EAAUP,WAAasB,EAAEmiB,OAASzvB,EAAK0vB,aAAc,OAAO1vB,EAAK0vB,eACrE1vB,EAAKjF,EAAIuS,EAAEkB,QACXxO,EAAK8d,EAAIxQ,EAAEmB,QACX+gB,GAAoBA,EAAiBliB,GACrCtN,EAAKiiB,WAAa,IAAIsB,EAAWjW,EAAGtN,EAAK6b,QACzC7b,EAAK2vB,aAAc,IAGjBC,EAAe,SAAsBtiB,GACvCyY,cAAchC,GACd8L,IACA7vB,EAAKA,EAAKooB,MAAQ,QAAUpoB,EAAKA,EAAKooB,MAAQ,OAAO9a,GACrDtN,EAAKooB,MAAQ,GAEyB,MAAlC9O,EAASC,wBACXD,EAASC,uBAAwB,EACjCD,EAASE,yBAGXxZ,EAAK6iB,gBAAiB,EACtB7iB,EAAK8vB,oBAAsB9vB,EAAK0vB,aAAe,KAC/CpiB,GAAKtN,EAAK8uB,aAAa,UAAWxhB,IAGhCuiB,EAAoB,WACtB7vB,EAAKA,EAAKooB,QAAUpoB,EAAKA,EAAKooB,SAC9BpoB,EAAK2vB,aAAc,GAGrB,GAAIpjB,EAAUhB,SAA+B,YAApBuR,EAAG7C,SAASrN,KACnC,OAAOyD,YAAW,WAChBuf,EAAa9S,MAIjB9c,EAAK8vB,oBAAsB7J,EAC3BjmB,EAAK0vB,aAAe1iB,EAAMe,QAAQjW,KAAK+jB,OAAOxB,UAAW4L,EAAa2J,GACtE,IAAI7L,EAAUiC,YAAY6J,EAAmB,KAG/C/3B,KAAK43B,aAAe,KAEpB53B,KAAKi4B,kBAAoB,WACvB,IAAItP,EAAO,SAAUnT,GACfA,GAAKA,EAAE2M,UAA+B,eAAnB3M,EAAE2M,SAASrN,OAClC9U,KAAK+jB,OAAO2O,IAAI,oBAAqB/J,GACjCnT,GAAKA,EAAE2M,UAAUjN,EAAMK,UAAUC,EAAE2M,YACvCrd,KAAK9E,MAEPuY,WAAWoQ,EAAM,IACjB3oB,KAAK+jB,OAAOlC,GAAG,oBAAqB8G,MAErClnB,KAAKm1B,EAAar1B,WACrBo1B,EAAO7C,cAAc8C,EAAar1B,UAAW,eAAgB,CAC3D22B,YAAa,CACXlE,aAAc,GAEhBmE,UAAW,CACTnE,aAAcvf,EAAU3B,MAAQ,IAAM,GAExCslB,YAAa,CACXpE,cAAc,GAEhBqE,YAAa,CACXrE,aAAc,GAEhBsE,oBAAqB,CACnBtE,cAAc,KAGlBrxB,EAAQi0B,aAAeA,KAEzB5zB,IAAI9C,OAAO,yBAA0B,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAClG,aAqDAwC,EAAQ41B,YAnDR,SAAqBxU,GACnBA,EAAOlC,GAAG,SAAS,SAAUrM,GAC3B,IAAItG,EAAWsG,EAAE0P,sBACbnE,EAAUgD,EAAOhD,QACjByX,EAAOzX,EAAQ0X,UAAUvpB,EAAS0V,IAAK1V,EAAS4V,OAAQ,GAExD0T,IACEhjB,EAAEsS,cAAe/G,EAAQ2X,WAAWF,GAAWzX,EAAQ4X,WAAWH,GACtEhjB,EAAEmT,WAGN5E,EAAOlC,GAAG,eAAe,SAAUrM,GAGjC,GAAoB,eAFDuO,EAAOvC,SAAS8I,aAAaK,UAAUnV,GAEvB,CACjC,IAAIoP,EAAMpP,EAAE0P,sBAAsBN,IAC9B7D,EAAUgD,EAAOhD,QACjBA,EAAQ6X,aAAe7X,EAAQ6X,YAAYhU,IAAMb,EAAOhD,QAAQ8X,kBAAkBjU,EAAKpP,GACtFuO,EAAOnG,aAAamG,EAAO9F,QAChCzI,EAAEmT,WAGN5E,EAAOlC,GAAG,kBAAkB,SAAUrM,GAGpC,GAAoB,eAFDuO,EAAOvC,SAAS8I,aAAaK,UAAUnV,GAEvB,CACjC,IAAIoP,EAAMpP,EAAE0P,sBAAsBN,IAC9B7D,EAAUgD,EAAOhD,QACjBjH,EAAOiH,EAAQ+X,uBAAuBlU,GAAK,GAC3C3D,EAAQnH,EAAKmH,OAASnH,EAAKif,WAE/B,GAAI9X,EAAO,CACT2D,EAAM3D,EAAMxa,MAAMme,IAClB,IAAI4T,EAAOzX,EAAQ0X,UAAU7T,EAAK7D,EAAQiY,QAAQpU,GAAKrkB,OAAQ,GAE3Di4B,EACFzX,EAAQ2X,WAAWF,IAEnBzX,EAAQkY,QAAQ,MAAOhY,GACvB8C,EAAOvC,SAASgF,qBAAqB,CACnC5B,IAAK3D,EAAMxa,MAAMme,IACjBE,OAAQ,KAKdtP,EAAEmT,eAOV3lB,IAAI9C,OAAO,0BAA2B,CAAC,UAAW,UAAW,SAAU,eAAgB,kBAAkB,SAAU4B,EAAUa,EAASxC,GACpI,aAEA,IAAI+4B,EAAUp3B,EAAS,eACnBoT,EAAQpT,EAAS,gBAEjBq3B,EAAa,SAAoBpV,GACnC/jB,KAAKo5B,QAAUrV,EACf/jB,KAAKq5B,MAAQ,CACXtV,OAAQA,GAEV/jB,KAAKs5B,UAAY,GACjBt5B,KAAKgkB,kBAAkBD,EAAOwV,YAGhC,WACEv5B,KAAKgkB,kBAAoB,SAAUwV,GACjCx5B,KAAKy5B,sBAAsBz5B,KAAK05B,iBAChC15B,KAAK05B,gBAAkBF,EACvBx5B,KAAK25B,mBAAmBH,EAAI,IAG9Bx5B,KAAK45B,mBAAqB,SAAUJ,GAClC,IAAIK,EAAI75B,KAAKs5B,UACb,GAAIO,EAAEA,EAAEt5B,OAAS,IAAMi5B,EAAvB,CAEA,KAAOK,EAAEA,EAAEt5B,OAAS,IAAMs5B,EAAEA,EAAEt5B,OAAS,IAAMP,KAAK05B,iBAChD15B,KAAKy5B,sBAAsBI,EAAEA,EAAEt5B,OAAS,IAG1CP,KAAK25B,mBAAmBH,EAAI,KAG9Bx5B,KAAK25B,mBAAqB,SAAUH,EAAI7yB,GACtC,GAAK6yB,EAAL,CACiB,mBAANA,GAAqBA,EAAGM,iBAAgBN,EAAGM,eAAiBN,GACvE,IAAI73B,EAAI3B,KAAKs5B,UAAUn3B,QAAQq3B,IACrB,GAAN73B,GAAS3B,KAAKs5B,UAAUlzB,OAAOzE,EAAG,GAC3BN,MAAPsF,EAAkB3G,KAAKs5B,UAAUv3B,KAAKy3B,GAASx5B,KAAKs5B,UAAUlzB,OAAOO,EAAK,EAAG6yB,IACvE,GAAN73B,GAAW63B,EAAGO,QAAQP,EAAGO,OAAO/5B,KAAKo5B,WAG3Cp5B,KAAKy5B,sBAAwB,SAAUD,GACrC,IAAI73B,EAAI3B,KAAKs5B,UAAUn3B,QAAQq3B,GAC/B,OAAU,GAAN73B,IACJ3B,KAAKs5B,UAAUlzB,OAAOzE,EAAG,GACzB63B,EAAGQ,QAAUR,EAAGQ,OAAOh6B,KAAKo5B,UACrB,IAGTp5B,KAAKi6B,mBAAqB,WACxB,OAAOj6B,KAAKs5B,UAAUt5B,KAAKs5B,UAAU/4B,OAAS,IAGhDP,KAAKk6B,cAAgB,WACnB,IAAIpgB,EAAO9Z,KAAKq5B,MACZtV,EAASjK,EAAKiK,OAClB,OAAO/jB,KAAKs5B,UAAUlxB,KAAI,SAAUyxB,GAClC,OAAOA,EAAEK,eAAiBL,EAAEK,cAAcnW,EAAQjK,IAAS,MAC1DzR,OAAO8uB,SAAS30B,KAAK,MAG1BxC,KAAKm6B,sBAAwB,SAAUthB,EAAQtG,EAAWD,EAASkD,GAKjE,IAJA,IAAI4kB,EACAC,GAAU,EACVd,EAAWv5B,KAAKo5B,QAAQG,SAEnB53B,EAAI3B,KAAKs5B,UAAU/4B,OAAQoB,QAClCy4B,EAAYp6B,KAAKs5B,UAAU33B,GAAGm4B,eAAe95B,KAAKq5B,MAAOxgB,EAAQtG,EAAWD,EAASkD,KAClE4kB,EAAUE,WAG3BD,EADuB,QAArBD,EAAUE,SAGFf,EAASp2B,KAAKi3B,EAAUE,QAASt6B,KAAKo5B,QAASgB,EAAUl1B,KAAMsQ,KAG5DA,IAAgB,GAAXqD,GAAuC,GAAvBuhB,EAAUG,WAAoD,GAA/BH,EAAUE,QAAQC,WACnFrlB,EAAMK,UAAUC,GAGd6kB,MAWN,OARKA,IAAsB,GAAXxhB,IACduhB,EAAY,CACVE,QAAS,gBAEXD,EAAUd,EAASp2B,KAAK,eAAgBnD,KAAKo5B,QAAS7mB,IAGpD8nB,GAAWr6B,KAAKo5B,QAAQ3O,SAASzqB,KAAKo5B,QAAQ3O,QAAQ,mBAAoB2P,GACvEC,GAGTr6B,KAAKmgB,aAAe,SAAU3K,EAAGqD,EAAQvG,GACvC,IAAIC,EAAY2mB,EAAQ7mB,gBAAgBC,GACxCtS,KAAKm6B,sBAAsBthB,EAAQtG,EAAWD,EAASkD,IAGzDxV,KAAKqf,YAAc,SAAUtC,GAC3B/c,KAAKm6B,uBAAuB,EAAGpd,MAEhCtb,KAAK03B,EAAW53B,WACnBoB,EAAQw2B,WAAaA,KAEvBn2B,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC5F,aAEA,IAEIq6B,EAAM,EACNC,EAAU,EACVC,GAAa,EAEbC,GAAY,EACZC,GAAY,EAGZC,EAAa,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAM,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAAM,GAAM,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC7JC,EAAa,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAM,EAAG,EAAG,IAczGC,EAAK,GAOLC,EAAK,GACLC,EAAe,CAACD,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAb5C,EADA,EACA,EAEC,EAHD,EAcgEA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAdpH,MACA,EAEC,EAJA,IAe+ID,EAAIA,EAAIA,EAfvJ,UAMA,GADA,EACA,GADA,IAPA,oBAOA,EALA,YAJD,oDAIC,YAJD,oDAIC,QAe2cC,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAdhe,EAcueA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAV1kB,EALA,EAeslBD,EAAIA,EAAIA,EAAIA,EAflmB,QAJD,EAIC,IAeioBC,EAfjoB,IAe6oBD,EAAIA,EAjBjpB,IAEA,EAJD,EAIC,MAFA,EAFD,EAIC,WAgBLG,EAAe,CAZV,sBAYuDF,EAAIA,EAAIA,EApBhE,EACA,EAGC,gDAIA,EAHD,EAQE,GACA,GACA,GACA,GACA,GARD,EAW6MD,EAAIA,EAAIA,EAAIA,EAAIA,EAhB7N,8BAKA,EALA,oDAIA,GAmGT,SAASI,EAAaC,EAAKC,EAAQC,GACjC,KAAIb,EAAUW,GAId,GAAW,GAAPA,GAjHI,GAiHQZ,GAAeG,EAa/B,IAPA,IAEInX,EACA+X,EACAC,EACAC,EALAC,EAAMJ,EAAO/6B,OACbkG,EAAQ,EAMLA,EAAQi1B,GAAK,CAClB,GAAIL,EAAO50B,IAAU20B,EAAK,CAGxB,IAFA5X,EAAM/c,EAAQ,EAEP+c,EAAMkY,GAAOL,EAAO7X,IAAQ4X,GACjC5X,IAGF,IAAK+X,EAAK90B,EAAO+0B,EAAKhY,EAAM,EAAG+X,EAAKC,EAAID,IAAMC,IAC5CC,EAAMH,EAAOC,GACbD,EAAOC,GAAMD,EAAOE,GACpBF,EAAOE,GAAMC,EAGfh1B,EAAQ+c,EAGV/c,SA7BA60B,EAAO9gB,UAiCX,SAASmhB,EAAcC,EAAOhM,EAAO3iB,EAAS4uB,GAC5C,IACIC,EACAC,EACAL,EACA/5B,EAJAq6B,EAAQpM,EAAMiM,GAMlB,OAAQG,GACN,KA1JI,EA2JJ,KA1JI,EA2JFtB,GAAa,EAEf,KA1JK,EA2JL,KA5JK,EA6JH,OAAOsB,EAET,KAhKK,EAiKH,OAAOtB,EAhKJ,EADA,EAmKL,KA9JK,EAiKH,OAFAA,GAAa,GACA,EAtKX,EAyKJ,KAlKK,EAmKH,OAvKG,EAyKL,KApKK,EAqKH,OAAImB,EAAK,GAAKA,EAAK,GAAKjM,EAAMrvB,QA5K3B,IA4KsCu7B,EAAQ7uB,EAAQ4uB,EAAK,KA3K3D,GA2KwEC,GA5KxE,IA4KwFC,EAAQnM,EAAMiM,EAAK,KA3K3G,GA2KwHE,EA1KxH,GA8KCrB,IACFqB,EAhLC,GAmLIA,GAASD,EAAQC,EAlLrB,GAoLL,KA9KK,GAiLH,OAzLG,IAuLHD,EAAQD,EAAK,EAAI5uB,EAAQ4uB,EAAK,GApL5B,IAsLiBA,EAAK,EAAIjM,EAAMrvB,QAzL/B,GAyLyCqvB,EAAMiM,EAAK,GAzLpD,EAEA,EA6LL,KAAKd,EACH,GAAIc,EAAK,GAhMN,GAgMW5uB,EAAQ4uB,EAAK,GACzB,OAjMC,EAoMH,GAAInB,EACF,OAnMC,EAyMH,IAHA/4B,EAAIk6B,EAAK,EACTH,EAAM9L,EAAMrvB,OAELoB,EAAI+5B,GAAO9L,EAAMjuB,IAAMo5B,GAC5Bp5B,IAGF,OAAIA,EAAI+5B,GA/ML,GA+MY9L,EAAMjuB,GA/MlB,EAEA,EAmNL,KA3MM,GA+MJ,IAHA+5B,EAAM9L,EAAMrvB,OACZoB,EAAIk6B,EAAK,EAEFl6B,EAAI+5B,GA/MP,IA+Mc9L,EAAMjuB,IACtBA,IAGF,GAAIA,EAAI+5B,EAAK,CACX,IAAIra,EAAIua,EAAMC,GACVI,EAAe5a,GAAK,MAAUA,GAAK,MAAe,OAALA,EAGjD,GAFAya,EAAQlM,EAAMjuB,GAEVs6B,IAnOJ,GAmOqBH,GA7NpB,GA6NkCA,GACjC,OApOF,EAwOF,OAAID,EAAK,GApOP,IAoOaC,EAAQlM,EAAMiM,EAAK,IArO/B,EAyOI5uB,EAAQ4uB,EAAK,GAEtB,KA1OI,EA6OF,OAFAnB,GAAa,EACbC,GAAY,EACLH,EAET,KA9OI,EAgPF,OADAI,GAAY,EAjPT,EAoPL,KA3OM,GA4ON,KA3OM,GA4ON,KA1OM,GA2ON,KA1OM,GA2ON,KA7OM,GA8OJF,GAAa,EAEf,KAAKM,EACH,OA5PG,GAgQT,SAASkB,EAAkBC,GACzB,IAAIC,EAAKD,EAAGE,WAAW,GACnBb,EAAKY,GAAM,EAEf,OAAU,GAANZ,EACKY,EAAK,IAzQR,EAyQqBnB,EAAamB,GACvB,GAANZ,EACF,kBAAkBn4B,KAAK84B,GA1Q1B,EADA,EA4QW,GAANX,EACL,yDAAyDn4B,KAAK84B,GAjQ5D,GAiQqF,+BAA+B94B,KAAK84B,GA1Q1H,EA0QwJ,MAANC,EAAqBrB,EAAY,kBAAkB13B,KAAK84B,GA3Q1M,EAKA,EAuQU,IAANX,GAAcY,GAAM,KACtBlB,EAAkB,IAALkB,GACL,KAANZ,GACFY,GAAM,MA1QR,EAHA,EAuRTz5B,EAAQ25B,EA3RA,EA4RR35B,EAAQ45B,EA3RA,EA4RR55B,EAAQ65B,GA3RC,EA4RT75B,EAAQ85B,KAAO,EACf95B,EAAQ+5B,GAAK,EACb/5B,EAAQg6B,IAAM,EACdh6B,EAAQi6B,EAAI,EACZj6B,EAAQk6B,IAAM,IAEdl6B,EAAQm6B,cAAgB,SAAU/f,EAAMggB,EAAeC,GACrD,GAAIjgB,EAAKxc,OAAS,EAAG,MAAO,GAC5B,IAAIq7B,EAAQ7e,EAAK1a,MAAM,IACnB46B,EAAoB,IAAI74B,MAAMw3B,EAAMr7B,QACpC28B,EAAa,IAAI94B,MAAMw3B,EAAMr7B,QAC7B86B,EAAS,GACbb,EAAMwC,EA3SE,EADA,EAwBV,SAAwBpB,EAAOP,EAAQK,EAAKyB,GAC1C,IAAIC,EAAS5C,EAAMM,EAAaD,EAC5BwC,EAAY,KACZC,EAAW,KACXC,EAAW,KACXC,EAAW,EACXC,EAAS,KAETC,GAAW,EACX/7B,EAAI,KACJk6B,EAAK,KACL5uB,EAAU,GAEd,IAAKkwB,EACH,IAAKx7B,EAAI,EAAGw7B,EAAY,GAAIx7B,EAAI+5B,EAAK/5B,IACnCw7B,EAAUx7B,GAAKu6B,EAAkBN,EAAMj6B,IAU3C,IANA84B,EAAUD,EACVE,GAAa,GACA,EACbC,GAAY,EACZC,GAAY,EAEPiB,EAAK,EAAGA,EAAKH,EAAKG,IAAM,CAQ3B,GAPAwB,EAAYG,EACZvwB,EAAQ4uB,GAAMyB,EAAW3B,EAAcC,EAAOuB,EAAWlwB,EAAS4uB,GAElE4B,EAAoB,KADpBD,EAAWJ,EAAOC,GAAWC,IAE7BE,GAAY,GACZnC,EAAOQ,GAAM0B,EAAWH,EAAOI,GAAU,GAErCC,EAAS,EACX,GAAc,IAAVA,EAAgB,CAClB,IAAK97B,EAAI+7B,EAAS/7B,EAAIk6B,EAAIl6B,IACxB05B,EAAO15B,GAAK,EAGd+7B,GAAW,OAEXA,GAAW,EAMf,GAFON,EAAOI,GAAU,IAGN,GAAZE,IACFA,EAAU7B,QAGZ,GAAI6B,GAAW,EAAG,CAChB,IAAK/7B,EAAI+7B,EAAS/7B,EAAIk6B,EAAIl6B,IACxB05B,EAAO15B,GAAK47B,EAGdG,GAAW,EA1EX,GA8EAP,EAAUtB,KACZR,EAAOQ,GAAM,GAGfpB,GAAW8C,EAGb,GAAI3C,EACF,IAAKj5B,EAAI,EAAGA,EAAI+5B,EAAK/5B,IACnB,GAtFE,GAsFEw7B,EAAUx7B,GAAS,CACrB05B,EAAO15B,GAAK64B,EAEZ,IAAK,IAAIjF,EAAI5zB,EAAI,EAAG4zB,GAAK,GAvFxB,GAwFK4H,EAAU5H,GADYA,IAExB8F,EAAO9F,GAAKiF,GA2MtBmD,CAAe/B,EAAOP,EAAQO,EAAMr7B,OAAQw8B,GAE5C,IAAK,IAAIp7B,EAAI,EAAGA,EAAIs7B,EAAkB18B,OAAQ08B,EAAkBt7B,GAAKA,EAAGA,KAIxEw5B,EAAa,EAAGE,EAAQ4B,GAExB9B,EAAa,EAAGE,EAAQ4B,GAExB,IAASt7B,EAAI,EAAGA,EAAIs7B,EAAkB18B,OAAS,EAAGoB,IAnT3C,IAqTDo7B,EAAcp7B,GAChB05B,EAAO15B,GAAKgB,EAAQ+5B,GAxTlB,IAyTOrB,EAAO15B,KAAao7B,EAAcp7B,GAnTxC,GAmTmDo7B,EAAcp7B,GA7ShE,IATD,IAsT6Eo7B,EAAcp7B,IAAao7B,EAAcp7B,KAAOq5B,GAChIK,EAAO15B,GAAKgB,EAAQ85B,KACX96B,EAAI,GAAsB,MAAjBi6B,EAAMj6B,EAAI,IAAmB,8BAA8B0B,KAAKu4B,EAAMj6B,MACxF05B,EAAO15B,EAAI,GAAK05B,EAAO15B,GAAKgB,EAAQg6B,IACpCh7B,KAIAi6B,EAAMA,EAAMr7B,OAAS,KAAOoC,EAAQk6B,MAAKxB,EAAOO,EAAMr7B,OAAS,GAAKoC,EAAQi6B,GAEhF,IAASj7B,EAAI,EAAGA,EAAIs7B,EAAkB18B,OAAQoB,IAC5Cu7B,EAAWv7B,GAAK05B,EAAO4B,EAAkBt7B,IAG3C,MAAO,CACL,kBAAqBs7B,EACrB,WAAcC,IAIlBv6B,EAAQi7B,kBAAoB,SAAU7gB,EAAMggB,GAG1C,IAFA,IAAItrB,GAAM,EAED9P,EAAI,EAAGA,EAAIob,EAAKxc,OAAQoB,IAC/Bo7B,EAAcp7B,GAAKu6B,EAAkBnf,EAAKza,OAAOX,IAC5C8P,GAlVD,GAkVSsrB,EAAcp7B,IA5UtB,GA4UiCo7B,EAAcp7B,KAAW8P,GAAM,GAGvE,OAAOA,GAGT9O,EAAQk7B,wBAA0B,SAAUC,EAAQC,GAClD,IAAK,IAAIp8B,EAAI,EAAGA,EAAIo8B,EAAOd,kBAAkB18B,OAAQoB,IACnD,GAAIo8B,EAAOd,kBAAkBt7B,IAAMm8B,EAAQ,OAAOn8B,EAGpD,OAAO,MAGXqB,IAAI9C,OAAO,kBAAmB,CAAC,UAAW,UAAW,SAAU,mBAAoB,eAAgB,sBAAsB,SAAU4B,EAAUa,EAASxC,GACpJ,aAEA,IAAI69B,EAAWl8B,EAAS,kBACpB0a,EAAO1a,EAAS,cAChB2S,EAAY3S,EAAS,mBACrBm8B,EAAS,4CAETC,EAAc,SAAqBnd,GACrC/gB,KAAK+gB,QAAUA,EACf/gB,KAAKm+B,QAAU,GACfn+B,KAAKo+B,WAAa,KAClBp+B,KAAKg+B,SAAWA,EAChBh+B,KAAKq+B,WAAa,GAClBr+B,KAAKs+B,IAAM,IACXt+B,KAAKu+B,gBAAiB,EACtBv+B,KAAKw+B,UAAW,EAChBx+B,KAAKy+B,KAAO,GACZz+B,KAAK0+B,WAAa,EAClB1+B,KAAK2+B,WAAY,EACjB3+B,KAAK4+B,IAAM,IACX5+B,KAAK6+B,UAAW,IAGlB,WACE7+B,KAAK8+B,UAAY,SAAU3T,EAAW4T,EAAQC,GAC5C,QAAKh/B,KAAK6+B,WAEN1T,IAAcnrB,KAAKo+B,aACrBp+B,KAAKo+B,WAAajT,EAClBnrB,KAAKi/B,cAAcF,EAAQC,GAC3Bh/B,KAAKk/B,iBAGAl/B,KAAKm+B,QAAQjB,aAGtBl9B,KAAKm/B,SAAW,SAAUC,GACnBp/B,KAAK6+B,SAMR7+B,KAAKo+B,WAAa,KALE,UAAhBgB,EAAM3B,QAAsBQ,EAAO56B,KAAK+7B,EAAMC,MAAM78B,KAAK,SAC3DxC,KAAK6+B,UAAW,EAChB7+B,KAAKo+B,WAAa,OAOxBp+B,KAAKs/B,eAAiB,WACpB,IAAIP,EAAS,EACTQ,EAAWv/B,KAAK+gB,QAAQye,gBAE5B,GAAID,EAASh/B,OAAQ,CACnB,IAAIkE,EAAQzE,KAAK+gB,QAAQ0e,kBAAkBF,EAAUv/B,KAAKo+B,YACtD35B,GAAS,IAAGs6B,EAAS/+B,KAAK+gB,QAAQ2e,aAAaj7B,IAGrD,OAAOs6B,GAGT/+B,KAAK2/B,cAAgB,WACnB,IAAIX,EAAa,EACbO,EAAWv/B,KAAK+gB,QAAQye,gBAE5B,GAAID,EAASh/B,OAIX,IAHA,IAAIq/B,EACAC,EAAY7/B,KAAK+gB,QAAQ0e,kBAAkBF,EAAUv/B,KAAKo+B,YAEvDp+B,KAAKo+B,WAAaY,EAAa,IACpCY,EAAe5/B,KAAK+gB,QAAQ0e,kBAAkBF,EAAUv/B,KAAKo+B,WAAaY,EAAa,MAClEa,GACrBA,EAAYD,EACZZ,IAIJ,OAAOA,GAGTh/B,KAAKi/B,cAAgB,SAAUF,EAAQC,GAMrC,QALe39B,IAAX09B,IAAsBA,EAAS/+B,KAAKs/B,kBACxCt/B,KAAK0+B,WAAa,EAClB1+B,KAAK2+B,UAAYI,IAAW/+B,KAAK+gB,QAAQmK,YAAc,EACvDlrB,KAAKy+B,KAAOz+B,KAAK+gB,QAAQiY,QAAQ+F,GAE7B/+B,KAAK+gB,QAAQ+e,aAAc,CAC7B,IAAIC,EAAS//B,KAAK+gB,QAAQif,UAAUjB,GAEhCgB,SACiB1+B,IAAf29B,IAA0BA,EAAah/B,KAAK2/B,iBAE5CX,EAAa,GAAKe,EAAOx/B,QAC3BP,KAAK0+B,WAAaqB,EAAOE,OACzBjgC,KAAKy+B,KAAOO,EAAae,EAAOx/B,OAASP,KAAKy+B,KAAKrf,UAAU2gB,EAAOf,EAAa,GAAIe,EAAOA,EAAOx/B,OAAS,IAAMP,KAAKy+B,KAAKrf,UAAU2gB,EAAOA,EAAOx/B,OAAS,KAE7JP,KAAKy+B,KAAOz+B,KAAKy+B,KAAKrf,UAAU,EAAG2gB,EAAOf,KAKhD,IAEIkB,EAFAnf,EAAU/gB,KAAK+gB,QACf2C,EAAQ,EAEZ1jB,KAAKy+B,KAAOz+B,KAAKy+B,KAAK/7B,QAAQ,sCAAsC,SAAUy5B,EAAIx6B,GAChF,MAAW,OAAPw6B,GAAepb,EAAQof,YAAYhE,EAAGE,WAAW,KACnD6D,EAAc,OAAP/D,EAAcpb,EAAQqf,iBAAiBz+B,EAAI+hB,GAAS,EAC3DA,GAASwc,EAAO,EACT1jB,EAAK/B,aAAaujB,EAASnB,IAAKqD,IAGlC/D,MAIXn8B,KAAKk/B,cAAgB,WACnB,IAAInC,EAAgB,GAChBsD,EAAYrgC,KAAK2+B,UAAY3+B,KAAK4+B,IAAM5+B,KAAKs+B,IAC7CG,EAAOz+B,KAAKy+B,MAAQz+B,KAAKu+B,eAAiB8B,EAAYrC,EAASnB,KAE/DmB,EAASJ,kBAAkBa,EAAM1B,GACnC/8B,KAAKm+B,QAAUH,EAASlB,cAAc2B,EAAM1B,EAAe/8B,KAAKw+B,UAEhEx+B,KAAKm+B,QAAU,IAInBn+B,KAAKsgC,YAAc,WACjBtgC,KAAKo+B,WAAa,MAGpBp+B,KAAKugC,sBAAwB,SAAUC,GACrC,GAAKxgC,KAAK6+B,UACN7+B,KAAKktB,iBAAmBsT,EAAYC,eAAe5xB,MAAvD,CACA,IAAIqe,EAAiBltB,KAAKktB,eAAiBsT,EAAYC,eAAe5xB,MAClE6xB,EAAgBF,EAAYG,kBAAkB,KAClD3gC,KAAKq+B,WAAWL,EAAS1B,GAAKt8B,KAAKq+B,WAAWL,EAASxB,IAAMx8B,KAAKq+B,WAAWL,EAASvB,MAAQvP,EAC9FltB,KAAKq+B,WAAWL,EAASzB,GAAKv8B,KAAKq+B,WAAWL,EAAStB,IAAMgE,EAC7D1gC,KAAKq+B,WAAWL,EAASrB,KAAOloB,EAAUN,SAAWusB,EAAgC,IAAhBA,EACrE1gC,KAAKq+B,WAAWL,EAASpB,GAAK,EAC9B58B,KAAKo+B,WAAa,OAGpBp+B,KAAK4gC,kBAAoB,WACvB,OAAO5gC,KAAKu+B,gBAGdv+B,KAAK6gC,kBAAoB,SAAUtC,GACjCv+B,KAAKu+B,eAAiBA,EACtBv+B,KAAKo+B,WAAa,MAGpBp+B,KAAK8gC,WAAa,SAAUC,GAC1B/gC,KAAKs+B,IAAMyC,GAGb/gC,KAAKghC,WAAa,SAAUxC,GAC1Bx+B,KAAKw+B,SAAWA,GAGlBx+B,KAAKihC,WAAa,SAAUC,GAC1BA,GAAOlhC,KAAK0+B,WACZ,IAAIyC,EAAYnD,EAASH,wBAAwBqD,EAAM,EAAIA,EAAM,EAAI,EAAGlhC,KAAKm+B,SACzE9C,EAASr7B,KAAKm+B,QAAQjB,WACtB/tB,EAAO,EACC,IAAR+xB,GAAa7F,EAAO8F,GAAa,GAAM,GAAGA,IAE9C,IAAK,IAAIx/B,EAAI,EAAGA,EAAIw/B,EAAWx/B,IAC7BwN,GAAQnP,KAAKq+B,WAAWhD,EAAO15B,IAKjC,OAFY,IAARu/B,GAAa7F,EAAO8F,GAAa,GAAM,IAAGhyB,GAAQnP,KAAKq+B,WAAWhD,EAAO8F,KACzEnhC,KAAK0+B,aAAYvvB,GAAQnP,KAAK0+B,WAAa1+B,KAAKq+B,WAAWL,EAAS1B,IACjEntB,GAGTnP,KAAKohC,cAAgB,SAAUC,EAAUC,GAYvC,IAXA,IAEIC,EASKzD,EAXL11B,EAAMpI,KAAKm+B,QACX9C,EAASjzB,EAAI80B,WAEbvhB,EAAS3b,KAAK0+B,WAAa1+B,KAAKq+B,WAAWL,EAAS1B,GACpDkF,EAAa,GACbC,EAAY56B,KAAKM,IAAIk6B,EAAUC,GAAUthC,KAAK0+B,WAC9CgD,EAAY76B,KAAKC,IAAIu6B,EAAUC,GAAUthC,KAAK0+B,WAC9CiD,GAAa,EACbC,GAAiB,EACjBrjB,EAAiB,EAEJsjB,EAAS,EAAGA,EAASxG,EAAO96B,OAAQshC,IACnD/D,EAAS11B,EAAI60B,kBAAkB4E,GAC/BN,EAAQlG,EAAOwG,IACfF,EAAa7D,GAAU2D,GAAa3D,EAAS4D,KAE1BE,EACjBrjB,EAAiB5C,GACPgmB,GAAcC,GACxBJ,EAAWz/B,KAAK,CACdoN,KAAMoP,EACN1P,MAAO8M,EAAS4C,IAIpB5C,GAAU3b,KAAKq+B,WAAWkD,GAC1BK,EAAiBD,EAUnB,OAPIA,GAAcE,IAAWxG,EAAO96B,QAClCihC,EAAWz/B,KAAK,CACdoN,KAAMoP,EACN1P,MAAO8M,EAAS4C,IAIbijB,GAGTxhC,KAAK8hC,YAAc,SAAUC,GAC3B,IAAIC,EAAa,EAEbrmB,GADAomB,EAAOl7B,KAAKC,IAAIi7B,EAAM,GACb,GACTZ,EAAY,EACZ9F,EAASr7B,KAAKm+B,QAAQjB,WACtB+E,EAAYjiC,KAAKq+B,WAAWhD,EAAO8F,IAMvC,IAJInhC,KAAK0+B,aACPqD,GAAQ/hC,KAAK0+B,WAAa1+B,KAAKq+B,WAAWL,EAAS1B,IAG9CyF,EAAOpmB,EAASsmB,EAAY,GAAG,CAGpC,GAFAtmB,GAAUsmB,EAENd,IAAc9F,EAAO96B,OAAS,EAAG,CACnC0hC,EAAY,EACZ,MAGFA,EAAYjiC,KAAKq+B,WAAWhD,IAAS8F,IAevC,OAZIA,EAAY,GAAK9F,EAAO8F,EAAY,GAAK,GAAM,GAAK9F,EAAO8F,GAAa,GAAM,GAC5EY,EAAOpmB,GAAQwlB,IACnBa,EAAahiC,KAAKm+B,QAAQlB,kBAAkBkE,IACnCA,EAAY,GAAK9F,EAAO8F,EAAY,GAAK,GAAM,GAAK9F,EAAO8F,GAAa,GAAM,EACvFa,EAAa,GAAKD,EAAOpmB,EAAS3b,KAAKm+B,QAAQlB,kBAAkBkE,GAAanhC,KAAKm+B,QAAQlB,kBAAkBkE,EAAY,IAChHnhC,KAAKw+B,UAAY2C,IAAc9F,EAAO96B,OAAS,GAAmB,IAAd0hC,GAAmB5G,EAAO8F,EAAY,GAAK,GAAM,IAAMnhC,KAAKw+B,UAA0B,IAAd2C,GAAmB9F,EAAO8F,GAAa,GAAM,EAClLa,EAAa,EAAIhiC,KAAKm+B,QAAQlB,kBAAkBkE,IAE5CA,EAAY,GAAK9F,EAAO8F,EAAY,GAAK,GAAM,GAAmB,IAAdc,GAAiBd,IACzEa,EAAahiC,KAAKm+B,QAAQlB,kBAAkBkE,IAGvCa,EAAahiC,KAAK0+B,cAE1Bj9B,KAAKy8B,EAAY38B,WACpBoB,EAAQu7B,YAAcA,KAExBl7B,IAAI9C,OAAO,YAAa,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACrF,aAEA,IAII+hC,EAAQ,SAAeC,EAAUC,EAAaC,EAAQC,GACxDtiC,KAAKyG,MAAQ,CACXme,IAAKud,EACLrd,OAAQsd,GAEVpiC,KAAKwjB,IAAM,CACToB,IAAKyd,EACLvd,OAAQwd,KAIZ,WACEtiC,KAAKuiC,QAAU,SAAUthB,GACvB,OAAOjhB,KAAKyG,MAAMme,MAAQ3D,EAAMxa,MAAMme,KAAO5kB,KAAKwjB,IAAIoB,MAAQ3D,EAAMuC,IAAIoB,KAAO5kB,KAAKyG,MAAMqe,SAAW7D,EAAMxa,MAAMqe,QAAU9kB,KAAKwjB,IAAIsB,SAAW7D,EAAMuC,IAAIsB,QAG3J9kB,KAAKwB,SAAW,WACd,MAAO,WAAaxB,KAAKyG,MAAMme,IAAM,IAAM5kB,KAAKyG,MAAMqe,OAAS,SAAW9kB,KAAKwjB,IAAIoB,IAAM,IAAM5kB,KAAKwjB,IAAIsB,OAAS,KAGnH9kB,KAAK4nB,SAAW,SAAUhD,EAAKE,GAC7B,OAAoC,GAA7B9kB,KAAKwiC,QAAQ5d,EAAKE,IAG3B9kB,KAAKyiC,aAAe,SAAUxhB,GAC5B,IAAI4D,EACArB,EAAMvC,EAAMuC,IACZ/c,EAAQwa,EAAMxa,MAGlB,OAAW,IAFXoe,EAAM7kB,KAAKwiC,QAAQhf,EAAIoB,IAAKpB,EAAIsB,SAKnB,IAFXD,EAAM7kB,KAAKwiC,QAAQ/7B,EAAMme,IAAKne,EAAMqe,SAG3B,EACS,GAAPD,EACF,EAEA,GAEQ,GAARA,GACD,GAII,IAFZA,EAAM7kB,KAAKwiC,QAAQ/7B,EAAMme,IAAKne,EAAMqe,UAG1B,EACQ,GAAPD,EACF,GAEA,GAKb7kB,KAAKqmB,aAAe,SAAUqc,GAC5B,OAAO1iC,KAAKwiC,QAAQE,EAAE9d,IAAK8d,EAAE5d,SAG/B9kB,KAAK2iC,cAAgB,SAAU1hB,GAC7B,OAAyC,GAAlCjhB,KAAKqmB,aAAapF,EAAMxa,QAA+C,GAAhCzG,KAAKqmB,aAAapF,EAAMuC,MAGxExjB,KAAK4iC,WAAa,SAAU3hB,GAC1B,IAAI4D,EAAM7kB,KAAKyiC,aAAaxhB,GAC5B,OAAe,GAAR4D,GAAoB,GAAPA,GAAmB,GAAPA,GAGlC7kB,KAAK6iC,MAAQ,SAAUje,EAAKE,GAC1B,OAAO9kB,KAAKwjB,IAAIoB,KAAOA,GAAO5kB,KAAKwjB,IAAIsB,QAAUA,GAGnD9kB,KAAK8iC,QAAU,SAAUle,EAAKE,GAC5B,OAAO9kB,KAAKyG,MAAMme,KAAOA,GAAO5kB,KAAKyG,MAAMqe,QAAUA,GAGvD9kB,KAAK+iC,SAAW,SAAUne,EAAKE,GACX,iBAAPF,GACT5kB,KAAKyG,MAAMqe,OAASF,EAAIE,OACxB9kB,KAAKyG,MAAMme,IAAMA,EAAIA,MAErB5kB,KAAKyG,MAAMme,IAAMA,EACjB5kB,KAAKyG,MAAMqe,OAASA,IAIxB9kB,KAAKgjC,OAAS,SAAUpe,EAAKE,GACT,iBAAPF,GACT5kB,KAAKwjB,IAAIsB,OAASF,EAAIE,OACtB9kB,KAAKwjB,IAAIoB,IAAMA,EAAIA,MAEnB5kB,KAAKwjB,IAAIoB,IAAMA,EACf5kB,KAAKwjB,IAAIsB,OAASA,IAItB9kB,KAAKijC,OAAS,SAAUre,EAAKE,GAC3B,OAAiC,GAA7B9kB,KAAKwiC,QAAQ5d,EAAKE,MAChB9kB,KAAK6iC,MAAMje,EAAKE,KAAW9kB,KAAK8iC,QAAQle,EAAKE,KAUrD9kB,KAAKu3B,YAAc,SAAU3S,EAAKE,GAChC,OAAiC,GAA7B9kB,KAAKwiC,QAAQ5d,EAAKE,KAChB9kB,KAAK6iC,MAAMje,EAAKE,IAUxB9kB,KAAKkjC,UAAY,SAAUte,EAAKE,GAC9B,OAAiC,GAA7B9kB,KAAKwiC,QAAQ5d,EAAKE,KAChB9kB,KAAK8iC,QAAQle,EAAKE,IAU1B9kB,KAAKwiC,QAAU,SAAU5d,EAAKE,GAC5B,OAAK9kB,KAAK2nB,eACJ/C,IAAQ5kB,KAAKyG,MAAMme,IAKrBA,EAAM5kB,KAAKyG,MAAMme,KAAa,EAC9BA,EAAM5kB,KAAKwjB,IAAIoB,IAAY,EAC3B5kB,KAAKyG,MAAMme,MAAQA,EAAYE,GAAU9kB,KAAKyG,MAAMqe,OAAS,GAAK,EAClE9kB,KAAKwjB,IAAIoB,MAAQA,EAAYE,GAAU9kB,KAAKwjB,IAAIsB,OAAS,EAAI,EAC1D,EARIA,EAAS9kB,KAAKyG,MAAMqe,QAAU,EAAIA,EAAS9kB,KAAKwjB,IAAIsB,OAAS,EAAI,GAW9E9kB,KAAKmjC,aAAe,SAAUve,EAAKE,GACjC,OAAI9kB,KAAKyG,MAAMme,KAAOA,GAAO5kB,KAAKyG,MAAMqe,QAAUA,GACxC,EAED9kB,KAAKwiC,QAAQ5d,EAAKE,IAI7B9kB,KAAKojC,WAAa,SAAUxe,EAAKE,GAC/B,OAAI9kB,KAAKwjB,IAAIoB,KAAOA,GAAO5kB,KAAKwjB,IAAIsB,QAAUA,EACrC,EAEA9kB,KAAKwiC,QAAQ5d,EAAKE,IAI7B9kB,KAAKqjC,cAAgB,SAAUze,EAAKE,GAClC,OAAI9kB,KAAKwjB,IAAIoB,KAAOA,GAAO5kB,KAAKwjB,IAAIsB,QAAUA,EACrC,EACE9kB,KAAKyG,MAAMme,KAAOA,GAAO5kB,KAAKyG,MAAMqe,QAAUA,GAC/C,EAED9kB,KAAKwiC,QAAQ5d,EAAKE,IAI7B9kB,KAAKsjC,SAAW,SAAUC,EAAUC,GAClC,GAAIxjC,KAAKwjB,IAAIoB,IAAM4e,EAAS,IAAIhgB,EAAM,CACpCoB,IAAK4e,EAAU,EACf1e,OAAQ,QACH,GAAI9kB,KAAKwjB,IAAIoB,IAAM2e,EAAc/f,EAAM,CAC5CoB,IAAK2e,EACLze,OAAQ,GAEV,GAAI9kB,KAAKyG,MAAMme,IAAM4e,EAAS,IAAI/8B,EAAQ,CACxCme,IAAK4e,EAAU,EACf1e,OAAQ,QACH,GAAI9kB,KAAKyG,MAAMme,IAAM2e,EAAc98B,EAAQ,CAChDme,IAAK2e,EACLze,OAAQ,GAEV,OAAOod,EAAMuB,WAAWh9B,GAASzG,KAAKyG,MAAO+c,GAAOxjB,KAAKwjB,MAG3DxjB,KAAK0jC,OAAS,SAAU9e,EAAKE,GAC3B,IAAID,EAAM7kB,KAAKwiC,QAAQ5d,EAAKE,GAC5B,GAAW,GAAPD,EAAU,OAAO7kB,KAAU,IAAY,GAAR6kB,EAAW,IAAIpe,EAAQ,CACxDme,IAAKA,EACLE,OAAQA,QACH,IAAItB,EAAM,CACfoB,IAAKA,EACLE,OAAQA,GAEV,OAAOod,EAAMuB,WAAWh9B,GAASzG,KAAKyG,MAAO+c,GAAOxjB,KAAKwjB,MAG3DxjB,KAAKqe,QAAU,WACb,OAAOre,KAAKyG,MAAMme,MAAQ5kB,KAAKwjB,IAAIoB,KAAO5kB,KAAKyG,MAAMqe,SAAW9kB,KAAKwjB,IAAIsB,QAG3E9kB,KAAK2nB,YAAc,WACjB,OAAO3nB,KAAKyG,MAAMme,MAAQ5kB,KAAKwjB,IAAIoB,KAGrC5kB,KAAK2jC,MAAQ,WACX,OAAOzB,EAAMuB,WAAWzjC,KAAKyG,MAAOzG,KAAKwjB,MAG3CxjB,KAAK4jC,aAAe,WAClB,OAAuB,GAAnB5jC,KAAKwjB,IAAIsB,OAAoB,IAAIod,EAAMliC,KAAKyG,MAAMme,IAAK,EAAG/d,KAAKC,IAAI9G,KAAKyG,MAAMme,IAAK5kB,KAAKwjB,IAAIoB,IAAM,GAAI,GAAe,IAAIsd,EAAMliC,KAAKyG,MAAMme,IAAK,EAAG5kB,KAAKwjB,IAAIoB,IAAK,IAGtK5kB,KAAK6jC,cAAgB,SAAU9iB,GAC7B,IAAI+iB,EAAiB/iB,EAAQgjB,yBAAyB/jC,KAAKyG,OACvDu9B,EAAejjB,EAAQgjB,yBAAyB/jC,KAAKwjB,KACzD,OAAO,IAAI0e,EAAM4B,EAAelf,IAAKkf,EAAehf,OAAQkf,EAAapf,IAAKof,EAAalf,SAG7F9kB,KAAKikC,OAAS,SAAUrf,EAAKE,GAC3B9kB,KAAKyG,MAAMme,KAAOA,EAClB5kB,KAAKyG,MAAMqe,QAAUA,EACrB9kB,KAAKwjB,IAAIoB,KAAOA,EAChB5kB,KAAKwjB,IAAIsB,QAAUA,KAEpBrjB,KAAKygC,EAAM3gC,WAEd2gC,EAAMuB,WAAa,SAAUh9B,EAAO+c,GAClC,OAAO,IAAI0e,EAAMz7B,EAAMme,IAAKne,EAAMqe,OAAQtB,EAAIoB,IAAKpB,EAAIsB,SAGzDod,EAAMgC,cAhPc,SAAuBC,EAAIC,GAC7C,OAAOD,EAAGvf,IAAMwf,EAAGxf,KAAOuf,EAAGrf,OAASsf,EAAGtf,QAiP3Cod,EAAMgC,cAAgB,SAAUC,EAAIC,GAClC,OAAOD,EAAGvf,IAAMwf,EAAGxf,KAAOuf,EAAGrf,OAASsf,EAAGtf,QAG3CniB,EAAQu/B,MAAQA,KAElBl/B,IAAI9C,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,cAAe,eAAgB,wBAAyB,cAAc,SAAU4B,EAAUa,EAASxC,GAC9J,aAEA,IAAIoR,EAAMzP,EAAS,aACf0a,EAAO1a,EAAS,cAChB4vB,EAAe5vB,EAAS,uBAAuB4vB,aAC/CwQ,EAAQpgC,EAAS,WAAWogC,MAE5BmC,EAAY,SAAmBtjB,GACjC/gB,KAAK+gB,QAAUA,EACf/gB,KAAKsM,IAAMyU,EAAQujB,cACnBtkC,KAAKmhB,iBACLnhB,KAAKukC,KAAOvkC,KAAKwkC,cAAgBxkC,KAAKsM,IAAIm4B,aAAa,EAAG,GAC1DzkC,KAAK+kB,OAAS/kB,KAAK0kC,gBAAkB1kC,KAAKsM,IAAIm4B,aAAa,EAAG,GAC9D,IAAIv8B,EAAOlI,KACXA,KAAKukC,KAAK1iB,GAAG,UAAU,SAAUrM,GAC/BtN,EAAKga,MAAM,gBAENha,EAAKy8B,UAAUz8B,EAAKga,MAAM,mBAC1Bha,EAAK08B,4BAA8BpvB,EAAE6c,IAAIvN,QAAUtP,EAAElN,MAAMwc,SAAQ5c,EAAK28B,eAAiB,SAEhG7kC,KAAK0kC,gBAAgB7iB,GAAG,UAAU,WAC3B3Z,EAAKy8B,UAAUz8B,EAAKga,MAAM,wBAInC,WACE3Q,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAKqe,QAAU,WACb,OAAOre,KAAK2kC,UAAY3kC,KAAK+kB,OAAOH,KAAO5kB,KAAKukC,KAAK3f,KAAO5kB,KAAK+kB,OAAOD,QAAU9kB,KAAKukC,KAAKzf,QAG9F9kB,KAAK2nB,YAAc,WACjB,OAAI3nB,KAAKqe,WAIFre,KAAK8gB,WAAW6G,eAGzB3nB,KAAK8kC,UAAY,WACf,OAAO9kC,KAAKukC,KAAKQ,eAGnB/kC,KAAKumB,mBAAqB,SAAU3B,EAAKE,GACvC9kB,KAAK+kB,OAAOqE,YAAYxE,EAAKE,GAEzB9kB,KAAK2kC,WACP3kC,KAAK2kC,UAAW,EAEhB3kC,KAAKkiB,MAAM,qBAIfliB,KAAKglC,mBAAqB,WACxB,OAAIhlC,KAAK2kC,SAAiB3kC,KAAKilC,mBAA+BjlC,KAAK+kB,OAAOggB,eAG5E/kC,KAAKilC,iBAAmB,WACtB,OAAOjlC,KAAKukC,KAAKQ,eAGnB/kC,KAAKklC,eAAiB,SAAUC,GAC9B,GAAInlC,KAAK2kC,SACP3kC,KAAKolC,aAAaplC,KAAKukC,KAAK3f,IAAK5kB,KAAKukC,KAAKzf,OAASqgB,OADtD,CAKA,IAAIpgB,EAAS/kB,KAAKglC,qBACdT,EAAOvkC,KAAKilC,mBACZI,EAAcrlC,KAAKqlC,cAClBA,GAAiC,IAAlBtgB,EAAOD,QAAc9kB,KAAKumB,mBAAmBxB,EAAOH,IAAKG,EAAOD,OAASqgB,IAEzFE,GAA+B,IAAhBd,EAAKzf,SACtB9kB,KAAKslC,gBAAe,WAClBtlC,KAAKolC,aAAab,EAAK3f,IAAK2f,EAAKzf,OAASqgB,QAKhDnlC,KAAKqlC,YAAc,WACjB,IAAItgB,EAAS/kB,KAAK+kB,OACdwf,EAAOvkC,KAAKukC,KAChB,OAAOxf,EAAOH,IAAM2f,EAAK3f,KAAOG,EAAOH,KAAO2f,EAAK3f,KAAOG,EAAOD,OAASyf,EAAKzf,QAGjF9kB,KAAK8gB,SAAW,WACd,IAAIiE,EAAS/kB,KAAK+kB,OACdwf,EAAOvkC,KAAKukC,KAChB,OAAIvkC,KAAKqe,UAAkB6jB,EAAMuB,WAAWc,EAAMA,GAE9CvkC,KAAKqlC,cACAnD,EAAMuB,WAAWc,EAAMxf,GAEvBmd,EAAMuB,WAAW1e,EAAQwf,IAIpCvkC,KAAKmhB,eAAiB,WACfnhB,KAAK2kC,WACR3kC,KAAK2kC,UAAW,EAEhB3kC,KAAKkiB,MAAM,qBAIfliB,KAAKqgB,UAAY,WACf,IAAImjB,EAAUxjC,KAAKsM,IAAI4e,YAAc,EACrClrB,KAAKumB,mBAAmB,EAAG,GAC3BvmB,KAAKolC,aAAa5B,EAASxjC,KAAKsM,IAAI0sB,QAAQwK,GAASjjC,SAGvDP,KAAKkhB,SAAWlhB,KAAKye,kBAAoB,SAAUwC,EAAOzG,GACpDA,GACFxa,KAAKumB,mBAAmBtF,EAAMuC,IAAIoB,IAAK3D,EAAMuC,IAAIsB,QACjD9kB,KAAK4qB,SAAS3J,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,UAE3C9kB,KAAKumB,mBAAmBtF,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,QACrD9kB,KAAK4qB,SAAS3J,EAAMuC,IAAIoB,IAAK3D,EAAMuC,IAAIsB,SAGrC9kB,KAAK8gB,WAAWzC,YAAWre,KAAK2kC,UAAW,GAC/C3kC,KAAK6kC,eAAiB,MAGxB7kC,KAAKslC,eAAiB,SAAUC,GAC9B,IAAIhB,EAAOvkC,KAAKukC,KACZvkC,KAAK2kC,UAAU3kC,KAAKumB,mBAAmBge,EAAK3f,IAAK2f,EAAKzf,QAC1DygB,EAAM9jC,KAAKzB,OAGbA,KAAK4qB,SAAW,SAAUhG,EAAKE,GAC7B9kB,KAAKslC,gBAAe,WAClBtlC,KAAKolC,aAAaxgB,EAAKE,OAI3B9kB,KAAKkmB,iBAAmB,SAAUvf,GAChC3G,KAAKslC,gBAAe,WAClBtlC,KAAK8sB,qBAAqBnmB,OAI9B3G,KAAKwlC,OAAS,SAAU5gB,EAAKE,GAC3B9kB,KAAKmhB,iBACLnhB,KAAKolC,aAAaxgB,EAAKE,IAGzB9kB,KAAKulB,eAAiB,SAAU5e,GAC9B3G,KAAKmhB,iBACLnhB,KAAK8sB,qBAAqBnmB,IAG5B3G,KAAKylC,SAAW,WACdzlC,KAAKslC,eAAetlC,KAAK0lC,eAG3B1lC,KAAK2lC,WAAa,WAChB3lC,KAAKslC,eAAetlC,KAAK4lC,iBAG3B5lC,KAAK6lC,YAAc,WACjB7lC,KAAKslC,eAAetlC,KAAK8lC,kBAG3B9lC,KAAK+lC,WAAa,WAChB/lC,KAAKslC,eAAetlC,KAAKgmC,iBAG3BhmC,KAAKimC,gBAAkB,WACrBjmC,KAAKslC,eAAetlC,KAAKkmC,sBAG3BlmC,KAAKmmC,cAAgB,WACnBnmC,KAAKslC,eAAetlC,KAAKomC,oBAG3BpmC,KAAKqmC,cAAgB,WACnBrmC,KAAKslC,eAAetlC,KAAKsmC,oBAG3BtmC,KAAKumC,gBAAkB,WACrBvmC,KAAKslC,eAAetlC,KAAKwmC,sBAG3BxmC,KAAKymC,gBAAkB,WACrBzmC,KAAKslC,eAAetlC,KAAK0mC,sBAG3B1mC,KAAK2mC,eAAiB,WACpB3mC,KAAKslC,eAAetlC,KAAK4mC,qBAG3B5mC,KAAK0nB,aAAe,SAAU9C,EAAKE,GACjC,QAAqB,IAAVA,EAAuB,CAChC,IAAIH,EAASC,GAAO5kB,KAAKukC,KACzB3f,EAAMD,EAAOC,IACbE,EAASH,EAAOG,OAGlB,OAAO9kB,KAAK+gB,QAAQ2G,aAAa9C,EAAKE,IAGxC9kB,KAAK6mC,WAAa,WAChB7mC,KAAKye,kBAAkBze,KAAK0nB,iBAG9B1nB,KAAK8mC,YAAc,WACjB,IAAIniB,EAAS3kB,KAAK8kC,YACd7jB,EAAQjhB,KAAK+gB,QAAQgmB,cAAcpiB,EAAOC,IAAKD,EAAOG,QAC1D9kB,KAAKye,kBAAkBwC,IAGzBjhB,KAAK6nB,aAAe,SAAUjD,EAAKoiB,GACjC,IACIC,EADAC,EAAyB,iBAAPtiB,EAAkBA,EAAM5kB,KAAKukC,KAAK3f,IAEpDuiB,EAAWnnC,KAAK+gB,QAAQqmB,YAAYF,GASxC,OAPIC,GACFD,EAAWC,EAAS1gC,MAAMme,IAC1BqiB,EAASE,EAAS3jB,IAAIoB,KAEtBqiB,EAASC,GAGa,IAApBF,EAAiC,IAAI9E,EAAMgF,EAAU,EAAGD,EAAQjnC,KAAK+gB,QAAQiY,QAAQiO,GAAQ1mC,QAAoB,IAAI2hC,EAAMgF,EAAU,EAAGD,EAAS,EAAG,IAG1JjnC,KAAKqnC,WAAa,WAChBrnC,KAAKye,kBAAkBze,KAAK6nB,iBAG9B7nB,KAAK0lC,aAAe,WAClB1lC,KAAKsnC,cAAc,EAAG,IAGxBtnC,KAAK4lC,eAAiB,WACpB5lC,KAAKsnC,aAAa,EAAG,IAGvBtnC,KAAKunC,qBAAuB,SAAU5iB,EAAQ6iB,EAASlf,GACrD,IAAI7hB,EAAQke,EAAOG,OACftB,EAAMmB,EAAOG,OAAS0iB,EAO1B,OALIlf,EAAY,IACd7hB,EAAQke,EAAOG,OAAS0iB,EACxBhkB,EAAMmB,EAAOG,QAGR9kB,KAAK+gB,QAAQ0mB,UAAU9iB,IAAW3kB,KAAKsM,IAAI0sB,QAAQrU,EAAOC,KAAKriB,MAAMkE,EAAO+c,GAAKnhB,MAAM,KAAK9B,OAAS,GAAKinC,GAGnHxnC,KAAKgmC,eAAiB,WACpB,IACIxN,EADA7T,EAAS3kB,KAAKukC,KAAKQ,cAGvB,GAAIvM,EAAOx4B,KAAK+gB,QAAQ0X,UAAU9T,EAAOC,IAAKD,EAAOG,QAAS,GAC5D9kB,KAAKolC,aAAa5M,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,aACxC,GAAsB,IAAlBH,EAAOG,OACZH,EAAOC,IAAM,GACf5kB,KAAKolC,aAAazgB,EAAOC,IAAM,EAAG5kB,KAAKsM,IAAI0sB,QAAQrU,EAAOC,IAAM,GAAGrkB,YAEhE,CACL,IAAIinC,EAAUxnC,KAAK+gB,QAAQ2mB,aAEvB1nC,KAAKunC,qBAAqB5iB,EAAQ6iB,GAAU,KAAOxnC,KAAK+gB,QAAQ4mB,4BAClE3nC,KAAKsnC,aAAa,GAAIE,GAEtBxnC,KAAKsnC,aAAa,GAAI,KAK5BtnC,KAAK8lC,gBAAkB,WACrB,IACItN,EADA7T,EAAS3kB,KAAKukC,KAAKQ,cAGvB,GAAIvM,EAAOx4B,KAAK+gB,QAAQ0X,UAAU9T,EAAOC,IAAKD,EAAOG,OAAQ,GAC3D9kB,KAAKolC,aAAa5M,EAAKhV,IAAIoB,IAAK4T,EAAKhV,IAAIsB,aACpC,GAAI9kB,KAAKukC,KAAKzf,QAAU9kB,KAAKsM,IAAI0sB,QAAQh5B,KAAKukC,KAAK3f,KAAKrkB,OACzDP,KAAKukC,KAAK3f,IAAM5kB,KAAKsM,IAAI4e,YAAc,GACzClrB,KAAKolC,aAAaplC,KAAKukC,KAAK3f,IAAM,EAAG,OAElC,CACL,IAAI4iB,EAAUxnC,KAAK+gB,QAAQ2mB,aACvB/iB,EAAS3kB,KAAKukC,KAEdvkC,KAAKunC,qBAAqB5iB,EAAQ6iB,EAAS,KAAOxnC,KAAK+gB,QAAQ4mB,4BACjE3nC,KAAKsnC,aAAa,EAAGE,GAErBxnC,KAAKsnC,aAAa,EAAG,KAK3BtnC,KAAKkmC,oBAAsB,WACzB,IAAIthB,EAAM5kB,KAAKukC,KAAK3f,IAChBE,EAAS9kB,KAAKukC,KAAKzf,OACnBqG,EAAYnrB,KAAK+gB,QAAQuK,oBAAoB1G,EAAKE,GAClD8iB,EAAsB5nC,KAAK+gB,QAAQ8mB,yBAAyB1c,EAAW,GAEvE2c,EADe9nC,KAAK+gB,QAAQgnB,eAAenjB,EAAK,KAAMgjB,EAAoBhjB,IAAKgjB,EAAoB9iB,QACvExhB,MAAM,QAClCwkC,EAAa,GAAGvnC,QAAUukB,GAAW9kB,KAAK+gB,QAAQinB,0BAAyBJ,EAAoB9iB,QAAUgjB,EAAa,GAAGvnC,QAC7HP,KAAK8sB,qBAAqB8a,IAG5B5nC,KAAKomC,kBAAoB,WACvB,IAAI7B,EAAOvkC,KAAKukC,KACZ0D,EAAUjoC,KAAK+gB,QAAQmnB,iCAAiC3D,EAAK3f,IAAK2f,EAAKzf,QAE3E,GAAI9kB,KAAKukC,KAAKzf,QAAUmjB,EAAQnjB,OAAQ,CACtC,IAAI2Z,EAAOz+B,KAAK+gB,QAAQiY,QAAQiP,EAAQrjB,KAExC,GAAIqjB,EAAQnjB,QAAU2Z,EAAKl+B,OAAQ,CACjC,IAAI4nC,EAAU1J,EAAK2J,OAAO,QACtBD,EAAU,IAAGF,EAAQnjB,OAASqjB,IAItCnoC,KAAKolC,aAAa6C,EAAQrjB,IAAKqjB,EAAQnjB,SAGzC9kB,KAAKsmC,kBAAoB,WACvB,IAAI1hB,EAAM5kB,KAAKsM,IAAI4e,YAAc,EAC7BpG,EAAS9kB,KAAKsM,IAAI0sB,QAAQpU,GAAKrkB,OACnCP,KAAKolC,aAAaxgB,EAAKE,IAGzB9kB,KAAKwmC,oBAAsB,WACzBxmC,KAAKolC,aAAa,EAAG,IAGvBplC,KAAKqoC,wBAA0B,WAC7B,IAAIzjB,EAAM5kB,KAAKukC,KAAK3f,IAChBE,EAAS9kB,KAAKukC,KAAKzf,OACnB2Z,EAAOz+B,KAAKsM,IAAI0sB,QAAQpU,GACxB0jB,EAAgB7J,EAAKrf,UAAU0F,GAEnC9kB,KAAK+gB,QAAQwnB,WAAW7kC,UAAY,EACpC1D,KAAK+gB,QAAQynB,QAAQ9kC,UAAY,EACjC,IAAI80B,EAAOx4B,KAAK+gB,QAAQ0X,UAAU7T,EAAKE,EAAQ,GAE/C,GAAI0T,EACFx4B,KAAKolC,aAAa5M,EAAKhV,IAAIoB,IAAK4T,EAAKhV,IAAIsB,YAD3C,CAWA,GANY9kB,KAAK+gB,QAAQwnB,WAAWplC,KAAKmlC,KACvCxjB,GAAU9kB,KAAK+gB,QAAQwnB,WAAW7kC,UAClC1D,KAAK+gB,QAAQwnB,WAAW7kC,UAAY,EACpC4kC,EAAgB7J,EAAKrf,UAAU0F,IAG7BA,GAAU2Z,EAAKl+B,OAIjB,OAHAP,KAAKolC,aAAaxgB,EAAK6Z,EAAKl+B,QAC5BP,KAAK8lC,uBACDlhB,EAAM5kB,KAAKsM,IAAI4e,YAAc,GAAGlrB,KAAK0mC,uBAI/B1mC,KAAK+gB,QAAQynB,QAAQrlC,KAAKmlC,KACpCxjB,GAAU9kB,KAAK+gB,QAAQynB,QAAQ9kC,UAC/B1D,KAAK+gB,QAAQynB,QAAQ9kC,UAAY,GAGnC1D,KAAKolC,aAAaxgB,EAAKE,KAGzB9kB,KAAKyoC,uBAAyB,WAC5B,IAEIjQ,EAFA5T,EAAM5kB,KAAKukC,KAAK3f,IAChBE,EAAS9kB,KAAKukC,KAAKzf,OAGvB,GAAI0T,EAAOx4B,KAAK+gB,QAAQ0X,UAAU7T,EAAKE,GAAS,GAC9C9kB,KAAKolC,aAAa5M,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,YAD/C,CAKA,IAAIzgB,EAAMrE,KAAK+gB,QAAQ2nB,gBAAgB9jB,EAAKE,GAAS,GAE1C,MAAPzgB,IACFA,EAAMrE,KAAKsM,IAAI0sB,QAAQpU,GAAKxF,UAAU,EAAG0F,IAG3C,IAAI6jB,EAAensB,EAAKlC,cAAcjW,GAWtC,GATArE,KAAK+gB,QAAQwnB,WAAW7kC,UAAY,EACpC1D,KAAK+gB,QAAQynB,QAAQ9kC,UAAY,EAErB1D,KAAK+gB,QAAQwnB,WAAWplC,KAAKwlC,KACvC7jB,GAAU9kB,KAAK+gB,QAAQwnB,WAAW7kC,UAClCilC,EAAeA,EAAapmC,MAAMvC,KAAK+gB,QAAQwnB,WAAW7kC,WAC1D1D,KAAK+gB,QAAQwnB,WAAW7kC,UAAY,GAGlCohB,GAAU,EAIZ,OAHA9kB,KAAKolC,aAAaxgB,EAAK,GACvB5kB,KAAKgmC,sBACDphB,EAAM,GAAG5kB,KAAK4mC,sBAIR5mC,KAAK+gB,QAAQynB,QAAQrlC,KAAKwlC,KACpC7jB,GAAU9kB,KAAK+gB,QAAQynB,QAAQ9kC,UAC/B1D,KAAK+gB,QAAQynB,QAAQ9kC,UAAY,GAGnC1D,KAAKolC,aAAaxgB,EAAKE,KAGzB9kB,KAAK4oC,mBAAqB,SAAUN,GAClC,IAEInM,EADA13B,EAAQ,EAERokC,EAAe,KACfL,EAAUxoC,KAAK+gB,QAAQynB,QAG3B,GAFAA,EAAQ9kC,UAAY,EAER1D,KAAK+gB,QAAQynB,QAAQrlC,KAAKmlC,GACpC7jC,EAAQzE,KAAK+gB,QAAQynB,QAAQ9kC,cACxB,CACL,MAAQy4B,EAAKmM,EAAc7jC,KAAWokC,EAAaxlC,KAAK84B,IACtD13B,IAGF,GAAIA,EAAQ,EAGV,IAFA+jC,EAAQ9kC,UAAY,GAEZy4B,EAAKmM,EAAc7jC,MAAY+jC,EAAQnlC,KAAK84B,IAIlD,GAHAqM,EAAQ9kC,UAAY,EACpBe,IAEIokC,EAAaxlC,KAAK84B,GAAK,CACzB,GAAI13B,EAAQ,EAAG,CACbA,IACA,MAEA,MAAQ03B,EAAKmM,EAAc7jC,KAAWokC,EAAaxlC,KAAK84B,IACtD13B,IAGF,GAAIA,EAAQ,EAAG,OAQzB,OADA+jC,EAAQ9kC,UAAY,EACbe,GAGTzE,KAAK8oC,yBAA2B,WAC9B,IAAIlkB,EAAM5kB,KAAKukC,KAAK3f,IAChBE,EAAS9kB,KAAKukC,KAAKzf,OACnB2Z,EAAOz+B,KAAKsM,IAAI0sB,QAAQpU,GACxB0jB,EAAgB7J,EAAKrf,UAAU0F,GAC/B0T,EAAOx4B,KAAK+gB,QAAQ0X,UAAU7T,EAAKE,EAAQ,GAC/C,GAAI0T,EAAM,OAAOx4B,KAAKolC,aAAa5M,EAAKhV,IAAIoB,IAAK4T,EAAKhV,IAAIsB,QAE1D,GAAIA,GAAU2Z,EAAKl+B,OAAQ,CACzB,IAAIqB,EAAI5B,KAAKsM,IAAI4e,YAEjB,GACEtG,IACA0jB,EAAgBtoC,KAAKsM,IAAI0sB,QAAQpU,SAC1BA,EAAMhjB,GAAK,QAAQyB,KAAKilC,IAE5B,OAAOjlC,KAAKilC,KAAgBA,EAAgB,IACjDxjB,EAAS,EAGX,IAAIrgB,EAAQzE,KAAK4oC,mBAAmBN,GACpCtoC,KAAKolC,aAAaxgB,EAAKE,EAASrgB,IAGlCzE,KAAK+oC,wBAA0B,WAC7B,IAEIvQ,EAFA5T,EAAM5kB,KAAKukC,KAAK3f,IAChBE,EAAS9kB,KAAKukC,KAAKzf,OAEvB,GAAI0T,EAAOx4B,KAAK+gB,QAAQ0X,UAAU7T,EAAKE,GAAS,GAAI,OAAO9kB,KAAKolC,aAAa5M,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,QACxG,IAAI2Z,EAAOz+B,KAAK+gB,QAAQiY,QAAQpU,GAAKxF,UAAU,EAAG0F,GAElD,GAAe,IAAXA,EAAc,CAChB,GACEF,IACA6Z,EAAOz+B,KAAKsM,IAAI0sB,QAAQpU,SACjBA,EAAM,GAAK,QAAQvhB,KAAKo7B,IAEjC3Z,EAAS2Z,EAAKl+B,OACT,OAAO8C,KAAKo7B,KAAOA,EAAO,IAGjC,IAAIkK,EAAensB,EAAKlC,cAAcmkB,GAClCh6B,EAAQzE,KAAK4oC,mBAAmBD,GACpC,OAAO3oC,KAAKolC,aAAaxgB,EAAKE,EAASrgB,IAGzCzE,KAAK0mC,oBAAsB,WACrB1mC,KAAK+gB,QAAQioB,iBAAkBhpC,KAAKqoC,0BAA+BroC,KAAK8oC,4BAG9E9oC,KAAK4mC,mBAAqB,WACpB5mC,KAAK+gB,QAAQioB,iBAAkBhpC,KAAKyoC,yBAA8BzoC,KAAK+oC,2BAG7E/oC,KAAKsnC,aAAe,SAAU2B,EAAMrN,GAClC,IACIsN,EADAC,EAAYnpC,KAAK+gB,QAAQgjB,yBAAyB/jC,KAAKukC,KAAK3f,IAAK5kB,KAAKukC,KAAKzf,QAGjE,IAAV8W,IACW,IAATqN,IACEjpC,KAAK+gB,QAAQqoB,aAAatK,UAAUqK,EAAUvkB,IAAK5kB,KAAKukC,KAAK3f,MAC/DskB,EAAUlpC,KAAK+gB,QAAQqoB,aAAanI,WAAWkI,EAAUrkB,QACzDqkB,EAAUrkB,OAASje,KAAKwiC,MAAMH,EAAUlpC,KAAK+gB,QAAQqoB,aAAa/K,WAAW,KAE7E6K,EAAUC,EAAUrkB,OAAS9kB,KAAK+gB,QAAQqoB,aAAa/K,WAAW,IAIlEr+B,KAAK6kC,eAAgBsE,EAAUrkB,OAAS9kB,KAAK6kC,eAAoB7kC,KAAK6kC,eAAiBsE,EAAUrkB,QAGvG,IAAIwkB,EAAStpC,KAAK+gB,QAAQ8mB,yBAAyBsB,EAAUvkB,IAAMqkB,EAAME,EAAUrkB,OAAQokB,GAE9E,IAATD,GAAwB,IAAVrN,GAAe0N,EAAO1kB,MAAQ5kB,KAAKukC,KAAK3f,KAAO0kB,EAAOxkB,SAAW9kB,KAAKukC,KAAKzf,QACvF9kB,KAAK+gB,QAAQwoB,aAAevpC,KAAK+gB,QAAQwoB,YAAYD,EAAO1kB,OAC1D0kB,EAAO1kB,IAAM,GAAKqkB,EAAO,IAAGK,EAAO1kB,MAI3C5kB,KAAKolC,aAAakE,EAAO1kB,IAAK0kB,EAAOxkB,OAAS8W,EAAiB,IAAVA,IAGvD57B,KAAK8sB,qBAAuB,SAAU5d,GACpClP,KAAKolC,aAAal2B,EAAS0V,IAAK1V,EAAS4V,SAG3C9kB,KAAKolC,aAAe,SAAUxgB,EAAKE,EAAQ0kB,GACzC,IAAIhR,EAAOx4B,KAAK+gB,QAAQ0X,UAAU7T,EAAKE,EAAQ,GAE3C0T,IACF5T,EAAM4T,EAAK/xB,MAAMme,IACjBE,EAAS0T,EAAK/xB,MAAMqe,QAGtB9kB,KAAK4kC,4BAA6B,EAClC,IAAInG,EAAOz+B,KAAK+gB,QAAQiY,QAAQpU,GAE5B,kBAAkBvhB,KAAKo7B,EAAKn8B,OAAOwiB,KAAY2Z,EAAKn8B,OAAOwiB,EAAS,KAClE9kB,KAAKukC,KAAK3f,KAAOA,GAAO5kB,KAAKukC,KAAKzf,QAAUA,EAAS,EAAGA,GAAkB,EAAOA,GAAkB,GAGzG9kB,KAAKukC,KAAKnb,YAAYxE,EAAKE,GAC3B9kB,KAAK4kC,4BAA6B,EAC7B4E,IAAmBxpC,KAAK6kC,eAAiB,OAGhD7kC,KAAKypC,mBAAqB,SAAU7kB,EAAKE,EAAQ0kB,GAC/C,IAAI7iC,EAAM3G,KAAK+gB,QAAQ8mB,yBAAyBjjB,EAAKE,GACrD9kB,KAAKolC,aAAaz+B,EAAIie,IAAKje,EAAIme,OAAQ0kB,IAGzCxpC,KAAKg6B,OAAS,WACZh6B,KAAKukC,KAAKvK,SACVh6B,KAAK+kB,OAAOiV,SACZh6B,KAAK+gB,QAAU/gB,KAAKsM,IAAM,MAG5BtM,KAAKsuB,kBAAoB,SAAUrN,GACjCjhB,KAAKye,kBAAkBwC,EAAOA,EAAM0D,QAAU1D,EAAMxa,OACpDzG,KAAK6kC,eAAiB5jB,EAAMyoB,eAAiB1pC,KAAK6kC,gBAGpD7kC,KAAK4tB,gBAAkB,SAAU3M,GAC/B,IAAIJ,EAAI7gB,KAAK8gB,WAab,OAXIG,GACFA,EAAMxa,MAAMqe,OAASjE,EAAEpa,MAAMqe,OAC7B7D,EAAMxa,MAAMme,IAAM/D,EAAEpa,MAAMme,IAC1B3D,EAAMuC,IAAIsB,OAASjE,EAAE2C,IAAIsB,OACzB7D,EAAMuC,IAAIoB,IAAM/D,EAAE2C,IAAIoB,KAEtB3D,EAAQJ,EAGVI,EAAM0D,OAAS3kB,KAAKqlC,cAAgBpkB,EAAMxa,MAAQwa,EAAMuC,IACxDvC,EAAMyoB,cAAgB1pC,KAAK6kC,eACpB5jB,GAGTjhB,KAAK2pC,oBAAsB,SAAUC,GACnC,IAAInjC,EAAQzG,KAAK8kC,YAEjB,IACE8E,EAAK5pC,MACL,IAAIwjB,EAAMxjB,KAAK8kC,YACf,OAAO5C,EAAMuB,WAAWh9B,EAAO+c,GAC/B,MAAOhO,GACP,OAAO0sB,EAAMuB,WAAWh9B,EAAOA,GAC/B,QACAzG,KAAK8sB,qBAAqBrmB,KAI9BzG,KAAK6pC,OAAS,WACZ,GAAI7pC,KAAK8pC,WACP,IAAIhwB,EAAO9Z,KAAK+pC,OAAO3hC,KAAI,SAAUyY,GACnC,IAAImpB,EAAKnpB,EAAE8iB,QAEX,OADAqG,EAAG3E,YAAcxkB,EAAE8D,QAAU9D,EAAEpa,MACxBujC,UAGLlwB,EAAO9Z,KAAK8gB,YACXukB,YAAcrlC,KAAKqlC,cAG1B,OAAOvrB,GAGT9Z,KAAKiqC,SAAW,SAAUnwB,GACxB,GAAkBzY,MAAdyY,EAAKrT,MAAoB,CAC3B,GAAIzG,KAAKkqC,UAAW,CAClBlqC,KAAKmqC,cAAcrwB,EAAK,IAExB,IAAK,IAAInY,EAAImY,EAAKvZ,OAAQoB,KAAM,CAC9B,IAAIkf,EAAIqhB,EAAMuB,WAAW3pB,EAAKnY,GAAG8E,MAAOqT,EAAKnY,GAAG6hB,KAC5C1J,EAAKnY,GAAG0jC,cAAaxkB,EAAE8D,OAAS9D,EAAEpa,OACtCzG,KAAKoqC,SAASvpB,GAAG,GAGnB,OACK/G,EAAOA,EAAK,GAGjB9Z,KAAKkqC,WAAWlqC,KAAKmqC,cAAcrwB,GACvC9Z,KAAKye,kBAAkB3E,EAAMA,EAAKurB,cAGpCrlC,KAAKuiC,QAAU,SAAUzoB,GACvB,IAAKA,EAAKvZ,QAAUP,KAAK8pC,aAAehwB,EAAKvZ,QAAUP,KAAK8pC,WAAY,OAAO,EAC/E,IAAKhwB,EAAKvZ,SAAWP,KAAK+pC,OAAQ,OAAO/pC,KAAK8gB,WAAWyhB,QAAQzoB,GAEjE,IAAK,IAAInY,EAAI3B,KAAK+pC,OAAOxpC,OAAQoB,KAC/B,IAAK3B,KAAK+pC,OAAOpoC,GAAG4gC,QAAQzoB,EAAKnY,IAAK,OAAO,EAG/C,OAAO,KAERF,KAAK4iC,EAAU9iC,WAClBoB,EAAQ0hC,UAAYA,KAEtBrhC,IAAI9C,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,eAAe,SAAU4B,EAAUa,EAASxC,GACvG,aAEA,IAAIw2B,EAAS70B,EAAS,YAClBuoC,EAAkB,IAElBC,EAAY,SAAmBC,GAKjC,IAAK,IAAI/+B,KAJTxL,KAAKwqC,OAASD,EACdvqC,KAAKyqC,QAAU,GACfzqC,KAAK0qC,cAAgB,GAEL1qC,KAAKwqC,OAAQ,CAU3B,IATA,IAAIla,EAAQtwB,KAAKwqC,OAAOh/B,GACpBm/B,EAAc,GACdC,EAAa,EACbC,EAAU7qC,KAAK0qC,cAAcl/B,GAAO,CACtCs/B,aAAc,QAEZC,EAAO,IACPC,EAAiB,GAEZrpC,EAAI,EAAGA,EAAI2uB,EAAM/vB,OAAQoB,IAAK,CACrC,IAAIspC,EAAO3a,EAAM3uB,GAGjB,GAFIspC,EAAKH,eAAcD,EAAQC,aAAeG,EAAKH,cAC/CG,EAAKC,kBAAiBH,EAAO,MACf,MAAdE,EAAKrnC,MAAT,CACIqnC,EAAKrnC,iBAAiBR,SAAQ6nC,EAAKrnC,MAAQqnC,EAAKrnC,MAAMpC,WAAWe,MAAM,GAAI,IAC/E,IAAI4oC,EAAgBF,EAAKrnC,MACrBwnC,EAAa,IAAIhoC,OAAO,OAAS+nC,EAAgB,UAAUhoC,KAAK,KAAK5C,OAAS,EAE9E6D,MAAMoD,QAAQyjC,EAAKI,OACI,GAArBJ,EAAKI,MAAM9qC,QAA6B,GAAd6qC,EAC5BH,EAAKI,MAAQJ,EAAKI,MAAM,GACfD,EAAa,GAAKH,EAAKI,MAAM9qC,QACtCP,KAAKyzB,YAAY,oDAAqD,CACpEwX,KAAMA,EACNK,WAAYF,EAAa,IAE3BH,EAAKI,MAAQJ,EAAKI,MAAM,KAExBJ,EAAKM,WAAaN,EAAKI,MACvBJ,EAAKI,MAAQ,KACbJ,EAAKO,QAAUxrC,KAAKyrC,cAEQ,mBAAdR,EAAKI,OAAwBJ,EAAKO,UAC9BP,EAAKO,QAArBJ,EAAa,EAAkBprC,KAAK0rC,YAAgCT,EAAKI,OAG3ED,EAAa,IACX,OAAO/nC,KAAK4nC,EAAKrnC,OACnBunC,EAAgBF,EAAKrnC,MAAMlB,QAAQ,eAAe,SAAUY,EAAOqoC,GACjE,MAAO,MAAQr9B,SAASq9B,EAAO,IAAMf,EAAa,OAGpDQ,EAAa,EACbD,EAAgBnrC,KAAK4rC,sBAAsBX,EAAKrnC,QAG7CqnC,EAAKY,YAAmC,iBAAdZ,EAAKI,OAAmBL,EAAejpC,KAAKkpC,IAG7EJ,EAAQD,GAAcjpC,EACtBipC,GAAcQ,EACdT,EAAY5oC,KAAKopC,GACZF,EAAKO,UAASP,EAAKO,QAAU,OAG/Bb,EAAYpqC,SACfsqC,EAAQ,GAAK,EACbF,EAAY5oC,KAAK,MAGnBipC,EAAeljC,SAAQ,SAAUmjC,GAC/BA,EAAKY,WAAa7rC,KAAK8rC,qBAAqBb,EAAKrnC,MAAOmnC,KACvD/qC,MACHA,KAAKyqC,QAAQj/B,GAAO,IAAIpI,OAAO,IAAMunC,EAAYnoC,KAAK,OAAS,QAASuoC,MAI5E,WACE/qC,KAAK+rC,kBAAoB,SAAUtW,GACjC4U,EAAsB,EAAJ5U,GAGpBz1B,KAAK0rC,YAAc,SAAUrnC,GAC3B,IAAI2nC,EAAShsC,KAAK6rC,WAAW1oC,KAAKkB,GAAK9B,MAAM,GACzCqtB,EAAQ5vB,KAAKqrC,MAAM1qC,MAAMX,KAAMgsC,GACnC,GAAqB,iBAAVpc,EAAoB,MAAO,CAAC,CACrC9a,KAAM8a,EACNtnB,MAAOjE,IAIT,IAFA,IAAI4nC,EAAS,GAEJtqC,EAAI,EAAGC,EAAIguB,EAAMrvB,OAAQoB,EAAIC,EAAGD,IACnCqqC,EAAOrqC,KAAIsqC,EAAOA,EAAO1rC,QAAU,CACrCuU,KAAM8a,EAAMjuB,GACZ2G,MAAO0jC,EAAOrqC,KAIlB,OAAOsqC,GAGTjsC,KAAKyrC,aAAe,SAAUpnC,GAC5B,IAAKA,EAAK,MAAO,GACjB,IAAI2nC,EAAShsC,KAAK6rC,WAAW1oC,KAAKkB,GAClC,IAAK2nC,EAAQ,MAAO,OAIpB,IAHA,IAAIC,EAAS,GACTrc,EAAQ5vB,KAAKurC,WAER5pC,EAAI,EAAGC,EAAIguB,EAAMrvB,OAAQoB,EAAIC,EAAGD,IACnCqqC,EAAOrqC,EAAI,KAAIsqC,EAAOA,EAAO1rC,QAAU,CACzCuU,KAAM8a,EAAMjuB,GACZ2G,MAAO0jC,EAAOrqC,EAAI,KAItB,OAAOsqC,GAGTjsC,KAAK4rC,sBAAwB,SAAU7f,GAIrC,OAHQA,EAAIrpB,QAAQ,2CAA2C,SAAUO,EAAG+iB,GAC1E,OAAOA,EAAI,MAAQ/iB,MAKvBjD,KAAK8rC,qBAAuB,SAAU/f,EAAKgf,GACzC,IAA2B,GAAvBhf,EAAI5pB,QAAQ,OAAc,CAC5B,IAAI+pC,EAAQ,EACRC,GAAY,EACZC,EAAc,GAClBrgB,EAAIrpB,QAAQ,wCAAwC,SAAU+yB,EAAGxjB,EAAKo6B,EAAWC,EAAYC,EAAQ9nC,GAqBnG,OApBI0nC,EACFA,EAAsB,KAAVI,EACHA,EACTJ,GAAY,EACHG,GACLJ,GAASE,EAAYF,QACvBE,EAAY5oB,IAAM/e,EAAQ,EAC1B2nC,EAAYF,OAAS,GAGvBA,KACSG,IACTH,IAEwB,GAApBG,EAAU9rC,SACZ6rC,EAAYF,MAAQA,EACpBE,EAAY3lC,MAAQhC,IAIjBgxB,KAEc,MAAnB2W,EAAY5oB,KAAe,QAAQngB,KAAK0oB,EAAI7M,OAAOktB,EAAY5oB,QAAOuI,EAAMA,EAAI3M,UAAU,EAAGgtB,EAAY3lC,OAASslB,EAAI7M,OAAOktB,EAAY5oB,MAK/I,MAFqB,KAAjBuI,EAAIzpB,OAAO,KAAWypB,EAAM,IAAMA,GACJ,KAA9BA,EAAIzpB,OAAOypB,EAAIxrB,OAAS,KAAWwrB,GAAO,KACvC,IAAI3oB,OAAO2oB,GAAMgf,GAAQ,IAAIroC,QAAQ,IAAK,MAGnD1C,KAAKwsC,cAAgB,SAAU/N,EAAMgO,GACnC,GAAIA,GAAmC,iBAAdA,EAAwB,CAC/C,IAAIP,EAAQO,EAAWlqC,MAAM,GAGV,UAFnBkqC,EAAaP,EAAM,MAGjBA,EAAMxoB,QACN+oB,EAAaP,EAAMxoB,cAEZwoB,EAAQ,GAEnB,IAAIQ,EAAeD,GAAc,QAC7Bnc,EAAQtwB,KAAKwqC,OAAOkC,GAEnBpc,IACHoc,EAAe,QACfpc,EAAQtwB,KAAKwqC,OAAOkC,IAGtB,IAAI7B,EAAU7qC,KAAK0qC,cAAcgC,GAC7BxW,EAAKl2B,KAAKyqC,QAAQiC,GACtBxW,EAAGxyB,UAAY,EAUf,IATA,IAAIJ,EACA2oC,EAAS,GACTvoC,EAAY,EACZipC,EAAgB,EAChBtB,EAAQ,CACVv2B,KAAM,KACNxM,MAAO,IAGFhF,EAAQ4yB,EAAG/yB,KAAKs7B,IAAO,CAC5B,IAAI3pB,EAAO+1B,EAAQC,aACfG,EAAO,KACP3iC,EAAQhF,EAAM,GACdmB,EAAQyxB,EAAGxyB,UAEf,GAAIe,EAAQ6D,EAAM/H,OAASmD,EAAW,CACpC,IAAIkpC,EAAUnO,EAAKrf,UAAU1b,EAAWe,EAAQ6D,EAAM/H,QAElD8qC,EAAMv2B,MAAQA,EAChBu2B,EAAM/iC,OAASskC,GAEXvB,EAAMv2B,MAAMm3B,EAAOlqC,KAAKspC,GAC5BA,EAAQ,CACNv2B,KAAMA,EACNxM,MAAOskC,IAKb,IAAK,IAAIjrC,EAAI,EAAGA,EAAI2B,EAAM/C,OAAS,EAAGoB,IACpC,QAAqBN,IAAjBiC,EAAM3B,EAAI,GAAd,CAEkBmT,GADlBm2B,EAAO3a,EAAMua,EAAQlpC,KACZ6pC,QAAgBP,EAAKO,QAAQljC,EAAOokC,EAAcR,EAAOzN,GAAkBwM,EAAKI,MAErFJ,EAAK4B,OAELH,EADsB,iBAAbzB,EAAK4B,KACC5B,EAAK4B,KAEL5B,EAAK4B,KAAKH,EAAcR,IAGzC5b,EAAQtwB,KAAKwqC,OAAOkC,MAGlB1sC,KAAKyzB,YAAY,sBAAuBiZ,GACxCA,EAAe,QACfpc,EAAQtwB,KAAKwqC,OAAOkC,IAGtB7B,EAAU7qC,KAAK0qC,cAAcgC,GAC7BhpC,EAAYe,GACZyxB,EAAKl2B,KAAKyqC,QAAQiC,IACfhpC,UAAYe,GAGbwmC,EAAK6B,iBAAgBppC,EAAYe,GACrC,MAGF,GAAI6D,EACF,GAAoB,iBAATwM,EACHm2B,IAAuB,IAAfA,EAAK8B,OAAoB1B,EAAMv2B,OAASA,GAGhDu2B,EAAMv2B,MAAMm3B,EAAOlqC,KAAKspC,GAC5BA,EAAQ,CACNv2B,KAAMA,EACNxM,MAAOA,IALT+iC,EAAM/iC,OAASA,OAQZ,GAAIwM,EAAM,CACXu2B,EAAMv2B,MAAMm3B,EAAOlqC,KAAKspC,GAC5BA,EAAQ,CACNv2B,KAAM,KACNxM,MAAO,IAGT,IAAS3G,EAAI,EAAGA,EAAImT,EAAKvU,OAAQoB,IAC/BsqC,EAAOlqC,KAAK+S,EAAKnT,IAKvB,GAAI+B,GAAa+6B,EAAKl+B,OAAQ,MAG9B,GAFAmD,EAAYe,EAERkoC,IAAkBtC,EAAiB,CAQrC,IAPIsC,EAAgB,EAAIlO,EAAKl+B,QAC3BP,KAAKyzB,YAAY,sCAAuC,CACtDgZ,WAAYA,EACZhO,KAAMA,IAIH/6B,EAAY+6B,EAAKl+B,QAClB8qC,EAAMv2B,MAAMm3B,EAAOlqC,KAAKspC,GAC5BA,EAAQ,CACN/iC,MAAOm2B,EAAKrf,UAAU1b,EAAWA,GAAa,KAC9CoR,KAAM,YAIV43B,EAAe,QACfR,EAAQ,GACR,OAUJ,OANIb,EAAMv2B,MAAMm3B,EAAOlqC,KAAKspC,GAExBa,EAAM3rC,OAAS,GACb2rC,EAAM,KAAOQ,GAAcR,EAAMc,QAAQ,OAAQN,GAGhD,CACLT,OAAQA,EACR3b,MAAO4b,EAAM3rC,OAAS2rC,EAAQQ,IAIlC1sC,KAAKyzB,YAAckD,EAAOlD,cACzBhyB,KAAK6oC,EAAU/oC,WAClBoB,EAAQ2nC,UAAYA,KAEtBtnC,IAAI9C,OAAO,gCAAiC,CAAC,UAAW,UAAW,SAAU,iBAAiB,SAAU4B,EAAUa,EAASxC,GACzH,aAEA,IAAIqc,EAAO1a,EAAS,eAEhBmrC,EAAqB,WACvBjtC,KAAKktC,OAAS,CACZ,MAAS,CAAC,CACR7B,MAAO,aACPznC,MAAO,MACN,CACDknC,aAAc,YAKpB,WACE9qC,KAAKmtC,SAAW,SAAU5C,EAAO6C,GAC/B,GAAKA,EAQL,IAAK,IAAI5hC,KAAO++B,EAAO,CAGrB,IAFA,IAAIja,EAAQia,EAAM/+B,GAET7J,EAAI,EAAGA,EAAI2uB,EAAM/vB,OAAQoB,IAAK,CACrC,IAAIspC,EAAO3a,EAAM3uB,IAEbspC,EAAK4B,MAAQ5B,EAAKO,WACI,iBAAbP,EAAK4B,MACoB,IAA9B5B,EAAK4B,KAAK1qC,QAAQirC,KAAenC,EAAK4B,KAAOO,EAASnC,EAAK4B,MAG7D5B,EAAKoC,WAAgD,IAAnCpC,EAAKoC,UAAUlrC,QAAQirC,KAAenC,EAAKoC,UAAYD,EAASnC,EAAKoC,YAI/FrtC,KAAKktC,OAAOE,EAAS5hC,GAAO8kB,OAtB5B,IAAK,IAAI9kB,KAAO++B,EACdvqC,KAAKktC,OAAO1hC,GAAO++B,EAAM/+B,IAyB/BxL,KAAKstC,SAAW,WACd,OAAOttC,KAAKktC,QAGdltC,KAAKutC,WAAa,SAAUC,EAAgBJ,EAAQK,EAAajD,EAAQkD,GACvE,IAAIH,EAAsC,mBAAlBC,GAA+B,IAAIA,GAAiBF,WAAaE,EAEzF,GAAIhD,EACF,IAAK,IAAI7oC,EAAI,EAAGA,EAAI6oC,EAAOjqC,OAAQoB,IACjC6oC,EAAO7oC,GAAKyrC,EAAS5C,EAAO7oC,QAK9B,IAAK,IAAI6J,KAFTg/B,EAAS,GAEO+C,EACd/C,EAAOzoC,KAAKqrC,EAAS5hC,GAMzB,GAFAxL,KAAKmtC,SAASI,EAAYH,GAEtBK,EACF,KAAIN,EAAW/oC,MAAM7C,UAAUmsC,EAAS,OAAS,WAEjD,IAAS/rC,EAAI,EAAGA,EAAI6oC,EAAOjqC,OAAQoB,IACjCwrC,EAASxsC,MAAMX,KAAKktC,OAAO1C,EAAO7oC,IAAK6a,EAAKxB,SAASyyB,IAIpDztC,KAAK2tC,UAAS3tC,KAAK2tC,QAAU,IAClC3tC,KAAK2tC,QAAQ5rC,KAAKqrC,IAGpBptC,KAAK4tC,UAAY,WACf,OAAO5tC,KAAK2tC,SAGd,IAAIE,EAAY,SAAmBnB,EAAcR,GAE/C,OADoB,SAAhBQ,GAA2BR,EAAM3rC,SAAQ2rC,EAAMc,QAAQhtC,KAAKqtC,UAAWX,GACpE1sC,KAAKqtC,WAGVS,EAAW,SAAkBpB,EAAcR,GAE7C,OADAA,EAAMxoB,QACCwoB,EAAMxoB,SAAW,SAG1B1jB,KAAK+tC,eAAiB,WACpB,IAAIlrC,EAAK,EACL0nC,EAAQvqC,KAAKktC,OAuFjB5rC,OAAOsI,KAAK2gC,GAAOziC,SArFnB,SAASkmC,EAAaxiC,GACpB,IAAI8kB,EAAQia,EAAM/+B,GAClB8kB,EAAM2d,WAAY,EAElB,IAAK,IAAItsC,EAAI,EAAGA,EAAI2uB,EAAM/vB,OAAQoB,IAAK,CACrC,IAAIspC,EAAO3a,EAAM3uB,GACbusC,EAAW,KAEX9pC,MAAMoD,QAAQyjC,KAChBiD,EAAWjD,EACXA,EAAO,KAGJA,EAAKrnC,OAASqnC,EAAKxkC,QACtBwkC,EAAKrnC,MAAQqnC,EAAKxkC,MACbwkC,EAAK4B,OAAM5B,EAAK4B,KAAO,IAC5B5B,EAAK4B,KAAK9qC,KAAK,CACb+oC,aAAcG,EAAKI,OAClB,CACDA,MAAOJ,EAAKI,MAAQ,OACpBznC,MAAOqnC,EAAKznB,KAAOynB,EAAKxkC,MACxBomC,KAAM,QAER5B,EAAKI,MAAQJ,EAAKI,MAAQ,SAC1BJ,EAAKlpC,MAAO,GAGd,IAAI8qC,EAAO5B,EAAK4B,MAAQ5B,EAAKlpC,KAE7B,GAAI8qC,GAAQzoC,MAAMoD,QAAQqlC,GAAO,CAC/B,IAAIsB,EAAYlD,EAAKkD,UAEhBA,IAEqB,iBADxBA,EAAYlD,EAAKI,SACiB8C,EAAYA,EAAU,IAAM,IAC1D5D,EAAM4D,KAAYA,GAAatrC,MAGrC0nC,EAAM4D,GAAatB,EACnB5B,EAAK4B,KAAOsB,EACZH,EAAaG,OACI,OAARtB,IACT5B,EAAK4B,KAAOiB,GASd,GANI7C,EAAKlpC,OACPkpC,EAAKoC,UAAYpC,EAAK4B,MAAQ5B,EAAKlpC,KACnCkpC,EAAK4B,KAAOgB,SACL5C,EAAKlpC,MAGVkpC,EAAKV,MACP,IAAK,IAAI1pB,KAAKoqB,EAAKV,MACbA,EAAM1pB,GACJ0pB,EAAM1pB,GAAG9e,MAAMwoC,EAAM1pB,GAAG9e,KAAKpB,MAAM4pC,EAAM1pB,GAAIoqB,EAAKV,MAAM1pB,IAE5D0pB,EAAM1pB,GAAKoqB,EAAKV,MAAM1pB,GAK5B,IAAIutB,EAA6B,iBAARnD,EAAmBA,EAAOA,EAAK59B,QAQxD,GANI+gC,IAC8BF,EAA5B9pC,MAAMoD,QAAQ4mC,GAAyBA,EAAYhmC,KAAI,SAAUnF,GACnE,OAAOsnC,EAAMtnC,MACIsnC,EAAM6D,IAGvBF,EAAU,CACZ,IAAIhpC,EAAO,CAACvD,EAAG,GAAG0D,OAAO6oC,GACrBjD,EAAKoD,WAAUnpC,EAAOA,EAAKmD,QAAO,SAAUpF,GAC9C,OAAQA,EAAE4pC,SAEZvc,EAAMlqB,OAAOzF,MAAM2vB,EAAOprB,GAC1BvD,IAGEspC,EAAKqD,aACPrD,EAAKI,MAAQrrC,KAAKuuC,oBAAoBtD,EAAKqD,WAAYrD,EAAKH,cAAgB,OAAQG,EAAKC,wBAClFD,EAAKH,iBAKuB9qC,OAG3CA,KAAKuuC,oBAAsB,SAAUnmC,EAAK0iC,EAAcjnC,EAAY2qC,GAClE,IAAIC,EAAWntC,OAAOuI,OAAO,MAiB7B,OAhBAvI,OAAOsI,KAAKxB,GAAKN,SAAQ,SAAUgF,GACjC,IAAIxG,EAAI8B,EAAI0E,GACRjJ,IAAYyC,EAAIA,EAAEwL,eAGtB,IAFA,IAAI48B,EAAOpoC,EAAEjE,MAAMmsC,GAAa,KAEvB7sC,EAAI+sC,EAAKnuC,OAAQoB,KACxB8sC,EAASC,EAAK/sC,IAAMmL,KAIpBxL,OAAOyH,eAAe0lC,KACxBA,EAASzlC,UAAY,MAGvBhJ,KAAK2uC,aAAertC,OAAOsI,KAAK6kC,GAChCrmC,EAAM,KACCvE,EAAa,SAAUyE,GAC5B,OAAOmmC,EAASnmC,EAAMwJ,gBAAkBg5B,GACtC,SAAUxiC,GACZ,OAAOmmC,EAASnmC,IAAUwiC,IAI9B9qC,KAAK4uC,YAAc,WACjB,OAAO5uC,KAAK6uC,aAEbptC,KAAKwrC,EAAmB1rC,WAC3BoB,EAAQsqC,mBAAqBA,KAE/BjqC,IAAI9C,OAAO,qBAAsB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC9F,aAEA,IAAI2uC,EAAY,WACd9uC,KAAK+uC,YAAc,KAGrB,WACE/uC,KAAKiH,IAAM,SAAU3C,EAAMm5B,EAAQt8B,GACjC,YAAQE,GACN,KAAKrB,KAAK+uC,YACR/uC,KAAK+uC,YAAc,GAErB,KAAK/uC,KAAK+uC,YAAYzqC,GACpBtE,KAAK+uC,YAAYzqC,GAAQ,GAG7BtE,KAAK+uC,YAAYzqC,GAAMm5B,GAAUt8B,GAGnCnB,KAAKgvC,cAAgB,SAAUC,GAC7B,IAAK,IAAIzjC,KAAOyjC,EACd,IAAK,IAAIxR,KAAUwR,EAAWzjC,GAC5BxL,KAAKiH,IAAIuE,EAAKiyB,EAAQwR,EAAWzjC,GAAKiyB,KAK5Cz9B,KAAKkH,OAAS,SAAU5C,GAClBtE,KAAK+uC,aAAe/uC,KAAK+uC,YAAYzqC,WAChCtE,KAAK+uC,YAAYzqC,IAI5BtE,KAAKkvC,QAAU,SAAUC,EAAM9mC,GAC7B,GAAoB,mBAAT8mC,EACT,IAAIF,GAAa,IAAIE,GAAOC,cAAc/mC,QAEtC4mC,EAAaE,EAAKC,cAAc/mC,GAGtCrI,KAAKgvC,cAAcC,IAGrBjvC,KAAKovC,cAAgB,SAAU/mC,GAC7B,GAAKA,EAEE,CAGL,IAFA,IAAIoJ,EAAM,GAED9P,EAAI,EAAGA,EAAI0G,EAAO9H,OAAQoB,IAC7B3B,KAAK+uC,YAAY1mC,EAAO1G,MAC1B8P,EAAIpJ,EAAO1G,IAAM3B,KAAK+uC,YAAY1mC,EAAO1G,KAI7C,OAAO8P,EAVP,OAAOzR,KAAK+uC,eAafttC,KAAKqtC,EAAUvtC,WAClBoB,EAAQmsC,UAAYA,KAEtB9rC,IAAI9C,OAAO,qBAAsB,CAAC,UAAW,UAAW,SAAU,cAAc,SAAU4B,EAAUa,EAASxC,GAC3G,aAEA,IAAI+hC,EAAQpgC,EAAS,WAAWogC,MAE5BmN,EAAgB,SAAuBtuB,EAASuuB,EAAYC,GAC9DvvC,KAAKwvC,SAAWzuB,EAChB/gB,KAAKyvC,KAAOH,EACZtvC,KAAK0vC,WAAa3uB,EAAQ4uB,UAAUL,GACpC,IAAIjE,EAAQtqB,EAAQ6uB,WAAWN,EAAYC,GAC3CvvC,KAAK6vC,YAAcxE,EAAQA,EAAM5mC,OAAS,IAG5C,WACEzE,KAAK8vC,aAAe,WAGlB,IAFA9vC,KAAK6vC,aAAe,EAEb7vC,KAAK6vC,YAAc,GAAG,CAG3B,GAFA7vC,KAAKyvC,MAAQ,EAETzvC,KAAKyvC,KAAO,EAEd,OADAzvC,KAAKyvC,KAAO,EACL,KAGTzvC,KAAK0vC,WAAa1vC,KAAKwvC,SAASG,UAAU3vC,KAAKyvC,MAC/CzvC,KAAK6vC,YAAc7vC,KAAK0vC,WAAWnvC,OAAS,EAG9C,OAAOP,KAAK0vC,WAAW1vC,KAAK6vC,cAG9B7vC,KAAK+vC,YAAc,WAEjB,IAAIC,EAEJ,IAHAhwC,KAAK6vC,aAAe,EAGb7vC,KAAK6vC,aAAe7vC,KAAK0vC,WAAWnvC,QAAQ,CAIjD,GAHAP,KAAKyvC,MAAQ,EACRO,IAAUA,EAAWhwC,KAAKwvC,SAAStkB,aAEpClrB,KAAKyvC,MAAQO,EAEf,OADAhwC,KAAKyvC,KAAOO,EAAW,EAChB,KAGThwC,KAAK0vC,WAAa1vC,KAAKwvC,SAASG,UAAU3vC,KAAKyvC,MAC/CzvC,KAAK6vC,YAAc,EAGrB,OAAO7vC,KAAK0vC,WAAW1vC,KAAK6vC,cAG9B7vC,KAAKiwC,gBAAkB,WACrB,OAAOjwC,KAAK0vC,WAAW1vC,KAAK6vC,cAG9B7vC,KAAKkwC,mBAAqB,WACxB,OAAOlwC,KAAKyvC,MAGdzvC,KAAKmwC,sBAAwB,WAC3B,IAAIC,EAAYpwC,KAAK0vC,WACjBW,EAAarwC,KAAK6vC,YAClB/qB,EAASsrB,EAAUC,GAAY5pC,MACnC,QAAepF,IAAXyjB,EAAsB,OAAOA,EAGjC,IAFAA,EAAS,EAEFurB,EAAa,GAElBvrB,GAAUsrB,EADVC,GAAc,GACkB/nC,MAAM/H,OAGxC,OAAOukB,GAGT9kB,KAAKswC,wBAA0B,WAC7B,MAAO,CACL1rB,IAAK5kB,KAAKyvC,KACV3qB,OAAQ9kB,KAAKmwC,0BAIjBnwC,KAAKuwC,qBAAuB,WAC1B,IAAIlF,EAAQrrC,KAAK0vC,WAAW1vC,KAAK6vC,aAC7B/qB,EAAS9kB,KAAKmwC,wBAClB,OAAO,IAAIjO,EAAMliC,KAAKyvC,KAAM3qB,EAAQ9kB,KAAKyvC,KAAM3qB,EAASumB,EAAM/iC,MAAM/H,WAErEkB,KAAK4tC,EAAc9tC,WACtBoB,EAAQ0sC,cAAgBA,KAE1BrsC,IAAI9C,OAAO,4BAA6B,CAAC,UAAW,UAAW,SAAU,cAAe,qBAAsB,qBAAsB,iBAAiB,SAAU4B,EAAUa,EAASxC,GAChL,aAEA,IAMIqwC,EANAj/B,EAAMzP,EAAS,iBACfgtC,EAAYhtC,EAAS,gBAAgBgtC,UACrCO,EAAgBvtC,EAAS,wBAAwButC,cACjD7yB,EAAO1a,EAAS,kBAChB2uC,EAAwB,CAAC,OAAQ,eAAgB,wBACjDC,EAA4B,CAAC,OAAQ,eAAgB,uBAAwB,WAE7EC,EAAe,GACfC,EAAgB,CAClB,IAAK,IACL,IAAK,KAGHC,EAAc,SAAqB9sB,GACrC,IAAIlhB,GAAM,EASV,GAPIkhB,EAAO+sB,cACTjuC,EAAKkhB,EAAOpF,UAAUla,MAClBksC,EAAa7G,YAAc/lB,EAAO+sB,YAAYhH,aAAY6G,EAAe,CAC3E7G,WAAY/lB,EAAO+sB,YAAYhH,cAI/B6G,EAAa9tC,GAAK,OAAO2tC,EAAUG,EAAa9tC,GACpD2tC,EAAUG,EAAa9tC,GAAM,CAC3BkuC,qBAAsB,EACtBC,iBAAkB,EAClBC,oBAAqB,GACrBC,sBAAuB,EACvBC,kBAAmB,EACnBC,uBAAwB,GACxBC,qBAAsB,KAItBC,EAAa,SAAoB3yB,EAAW4yB,EAAUC,EAASC,GACjE,IAAIC,EAAU/yB,EAAU6E,IAAIoB,IAAMjG,EAAUlY,MAAMme,IAClD,MAAO,CACL7H,KAAMy0B,EAAUD,EAAWE,EAC3B9yB,UAAW,CAAC,EAAGA,EAAUlY,MAAMqe,OAAS,EAAG4sB,EAAS/yB,EAAU6E,IAAIsB,QAAU4sB,EAAU,EAAI,MAI1FC,EAAkB,SAASA,EAAgB5d,GAC7C/zB,KAAKiH,IAAI,SAAU,aAAa,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAAShE,GACxE,IAAI4H,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KAEtC,GAAY,KAAR7H,EAAa,CACf8zB,EAAY9sB,GACZ,IAAIpF,EAAYoF,EAAOsB,oBACnBksB,EAAWxwB,EAAQzU,IAAIyiB,aAAapQ,GAExC,GAAiB,KAAb4yB,GAAgC,MAAbA,GAAoBxtB,EAAO8tB,2BAChD,OAAOP,EAAW3yB,EAAW4yB,EAAU,IAAK,KACvC,GAAII,EAAgBG,gBAAgB/tB,EAAQhD,GACjD,MAAI,WAAW1d,KAAKo7B,EAAK9Z,EAAOG,UAAYf,EAAO2B,mBAAqBqO,GAAWA,EAAQge,QACzFJ,EAAgBK,iBAAiBjuB,EAAQhD,EAAS,KAC3C,CACLhE,KAAM,KACN4B,UAAW,CAAC,EAAG,MAGjBgzB,EAAgBM,kBAAkBluB,EAAQhD,EAAS,KAC5C,CACLhE,KAAM,IACN4B,UAAW,CAAC,EAAG,UAIhB,GAAY,KAAR5B,EAAa,CAItB,GAHA8zB,EAAY9sB,GAGK,KAFD0a,EAAKrf,UAAUuF,EAAOG,OAAQH,EAAOG,OAAS,GAQ5D,GAAiB,OALF/D,EAAQmxB,oBAAoB,IAAK,CAC9CptB,OAAQH,EAAOG,OAAS,EACxBF,IAAKD,EAAOC,OAGW+sB,EAAgBQ,sBAAsBxtB,EAAQ8Z,EAAM1hB,GAE3E,OADA40B,EAAgBS,yBACT,CACLr1B,KAAM,GACN4B,UAAW,CAAC,EAAG,QAIhB,IAAY,MAAR5B,GAAwB,QAARA,EAAgB,CACzC8zB,EAAY9sB,GACZ,IAAI0tB,EAAU,GASd,GAPIE,EAAgBU,uBAAuB1tB,EAAQ8Z,KACjDgT,EAAUj1B,EAAK/B,aAAa,IAAK+1B,EAAQU,uBACzCS,EAAgBW,6BAKA,MAFF7T,EAAKrf,UAAUuF,EAAOG,OAAQH,EAAOG,OAAS,GAEvC,CACrB,IAAIytB,EAAexxB,EAAQyxB,oBAAoB,CAC7C5tB,IAAKD,EAAOC,IACZE,OAAQH,EAAOG,OAAS,GACvB,KACH,IAAKytB,EAAc,OAAO,KAC1B,IAAIE,EAAczyC,KAAK0yC,WAAW3xB,EAAQiY,QAAQuZ,EAAa3tB,UAC1D,KAAI6sB,EAIT,YADAE,EAAgBW,4BAFZG,EAAczyC,KAAK0yC,WAAWjU,GAMpC,IAAIwB,EAASwS,EAAc1xB,EAAQ4xB,eACnC,MAAO,CACL51B,KAAM,KAAOkjB,EAAS,KAAOwS,EAAchB,EAC3C9yB,UAAW,CAAC,EAAGshB,EAAO1/B,OAAQ,EAAG0/B,EAAO1/B,SAG1CoxC,EAAgBW,gCAGpBtyC,KAAKiH,IAAI,SAAU,YAAY,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAASE,GACvE,IAAIswB,EAAWxwB,EAAQzU,IAAIyiB,aAAa9N,GAExC,IAAKA,EAAM0G,eAA6B,KAAZ4pB,EAAiB,CAK3C,GAJAV,EAAY9sB,GAIK,KAHNhD,EAAQzU,IAAI0sB,QAAQ/X,EAAMxa,MAAMme,KACtBxF,UAAU6B,EAAMuC,IAAIsB,OAAQ7D,EAAMuC,IAAIsB,OAAS,GAIlE,OADA7D,EAAMuC,IAAIsB,SACH7D,EAEPuvB,EAAQU,4BAIdlxC,KAAKiH,IAAI,SAAU,aAAa,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAAShE,GACxE,GAAY,KAARA,EAAa,CACf8zB,EAAY9sB,GACZ,IAAIpF,EAAYoF,EAAOsB,oBACnBksB,EAAWxwB,EAAQzU,IAAIyiB,aAAapQ,GAExC,GAAiB,KAAb4yB,GAAmBxtB,EAAO8tB,2BAC5B,OAAOP,EAAW3yB,EAAW4yB,EAAU,IAAK,KACvC,GAAII,EAAgBG,gBAAgB/tB,EAAQhD,GAEjD,OADA4wB,EAAgBK,iBAAiBjuB,EAAQhD,EAAS,KAC3C,CACLhE,KAAM,KACN4B,UAAW,CAAC,EAAG,SAGd,GAAY,KAAR5B,EAAa,CACtB8zB,EAAY9sB,GACZ,IAAIY,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KAGtC,GAAiB,KAFD6Z,EAAKrf,UAAUuF,EAAOG,OAAQH,EAAOG,OAAS,GAQ5D,GAAiB,OALF/D,EAAQmxB,oBAAoB,IAAK,CAC9CptB,OAAQH,EAAOG,OAAS,EACxBF,IAAKD,EAAOC,OAGW+sB,EAAgBQ,sBAAsBxtB,EAAQ8Z,EAAM1hB,GAE3E,OADA40B,EAAgBS,yBACT,CACLr1B,KAAM,GACN4B,UAAW,CAAC,EAAG,QAMzB3e,KAAKiH,IAAI,SAAU,YAAY,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAASE,GACvE,IAAIswB,EAAWxwB,EAAQzU,IAAIyiB,aAAa9N,GAExC,IAAKA,EAAM0G,eAA6B,KAAZ4pB,IAC1BV,EAAY9sB,GAIK,KAHNhD,EAAQzU,IAAI0sB,QAAQ/X,EAAMxa,MAAMme,KACtBxF,UAAU6B,EAAMxa,MAAMqe,OAAS,EAAG7D,EAAMxa,MAAMqe,OAAS,IAI1E,OADA7D,EAAMuC,IAAIsB,SACH7D,KAIbjhB,KAAKiH,IAAI,WAAY,aAAa,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAAShE,GAC1E,GAAY,KAARA,EAAa,CACf8zB,EAAY9sB,GACZ,IAAIpF,EAAYoF,EAAOsB,oBACnBksB,EAAWxwB,EAAQzU,IAAIyiB,aAAapQ,GAExC,GAAiB,KAAb4yB,GAAmBxtB,EAAO8tB,2BAC5B,OAAOP,EAAW3yB,EAAW4yB,EAAU,IAAK,KACvC,GAAII,EAAgBG,gBAAgB/tB,EAAQhD,GAEjD,OADA4wB,EAAgBK,iBAAiBjuB,EAAQhD,EAAS,KAC3C,CACLhE,KAAM,KACN4B,UAAW,CAAC,EAAG,SAGd,GAAY,KAAR5B,EAAa,CACtB8zB,EAAY9sB,GACZ,IAAIY,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KAGtC,GAAiB,KAFD6Z,EAAKrf,UAAUuF,EAAOG,OAAQH,EAAOG,OAAS,GAQ5D,GAAiB,OALF/D,EAAQmxB,oBAAoB,IAAK,CAC9CptB,OAAQH,EAAOG,OAAS,EACxBF,IAAKD,EAAOC,OAGW+sB,EAAgBQ,sBAAsBxtB,EAAQ8Z,EAAM1hB,GAE3E,OADA40B,EAAgBS,yBACT,CACLr1B,KAAM,GACN4B,UAAW,CAAC,EAAG,QAMzB3e,KAAKiH,IAAI,WAAY,YAAY,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAASE,GACzE,IAAIswB,EAAWxwB,EAAQzU,IAAIyiB,aAAa9N,GAExC,IAAKA,EAAM0G,eAA6B,KAAZ4pB,IAC1BV,EAAY9sB,GAIK,KAHNhD,EAAQzU,IAAI0sB,QAAQ/X,EAAMxa,MAAMme,KACtBxF,UAAU6B,EAAMxa,MAAMqe,OAAS,EAAG7D,EAAMxa,MAAMqe,OAAS,IAI1E,OADA7D,EAAMuC,IAAIsB,SACH7D,KAIbjhB,KAAKiH,IAAI,iBAAkB,aAAa,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAAShE,GAChF,IAAI61B,EAAS7xB,EAAQ8xB,MAAMC,SAAWlC,EAEtC,GAAmB,GAAf7zB,EAAKxc,QAAeqyC,EAAO71B,GAAO,CACpC,GAAI/c,KAAK+yC,mBAA4D,GAAxC/yC,KAAK+yC,iBAAiB5wC,QAAQ4a,GAAa,OACxE8zB,EAAY9sB,GACZ,IAAIivB,EAAQj2B,EACR4B,EAAYoF,EAAOsB,oBACnBksB,EAAWxwB,EAAQzU,IAAIyiB,aAAapQ,GAExC,KAAiB,KAAb4yB,GAAuC,GAAnBA,EAAShxC,QAAgBqyC,EAAOrB,KAAcxtB,EAAO8tB,2BAC3E,OAAOP,EAAW3yB,EAAW4yB,EAAUyB,EAAOA,GACzC,IAAKzB,EAAU,CACpB,IAAI5sB,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KAClCquB,EAAWxU,EAAKrf,UAAUuF,EAAOG,OAAS,EAAGH,EAAOG,QACpDouB,EAAYzU,EAAKrf,UAAUuF,EAAOG,OAAQH,EAAOG,OAAS,GAC1DumB,EAAQtqB,EAAQ6uB,WAAWjrB,EAAOC,IAAKD,EAAOG,QAC9CquB,EAAapyB,EAAQ6uB,WAAWjrB,EAAOC,IAAKD,EAAOG,OAAS,GAChE,GAAgB,MAAZmuB,GAAoB5H,GAAS,SAAShoC,KAAKgoC,EAAMv2B,MAAO,OAAO,KACnE,IAEIs+B,EAFAC,EAAehI,GAAS,gBAAgBhoC,KAAKgoC,EAAMv2B,MACnDw+B,GAAeH,GAAc,gBAAgB9vC,KAAK8vC,EAAWr+B,MAGjE,GAAIo+B,GAAaF,GACfI,EAAOC,IAAiBC,IACZ,cAAcjwC,KAAK8vC,EAAWr+B,QAAOs+B,GAAO,OACnD,CACL,GAAIC,IAAiBC,EAAa,OAAO,KAEzC,GAAID,GAAgBC,EAAa,OAAO,KAExC,IAAIC,EAASxyB,EAAQ8xB,MAAMrK,QAC3B+K,EAAO7vC,UAAY,EACnB,IAAI8vC,EAAeD,EAAOlwC,KAAK4vC,GAC/BM,EAAO7vC,UAAY,EACnB,IAAI+vC,EAAcF,EAAOlwC,KAAK4vC,GAC9B,GAAIO,GAAgBC,EAAa,OAAO,KAExC,GAAIP,IAAc,gBAAgB7vC,KAAK6vC,GAAY,OAAO,KAE1DE,GAAO,EAGT,MAAO,CACLr2B,KAAMq2B,EAAOJ,EAAQA,EAAQ,GAC7Br0B,UAAW,CAAC,EAAG,SAKvB3e,KAAKiH,IAAI,iBAAkB,YAAY,SAAUqpB,EAAOmN,EAAQ1Z,EAAQhD,EAASE,GAC/E,IAAIswB,EAAWxwB,EAAQzU,IAAIyiB,aAAa9N,GAExC,IAAKA,EAAM0G,gBAA8B,KAAZ4pB,GAA+B,KAAZA,KAC9CV,EAAY9sB,GACDhD,EAAQzU,IAAI0sB,QAAQ/X,EAAMxa,MAAMme,KACtBxF,UAAU6B,EAAMxa,MAAMqe,OAAS,EAAG7D,EAAMxa,MAAMqe,OAAS,IAE3DysB,GAEf,OADAtwB,EAAMuC,IAAIsB,SACH7D,MAMf0wB,EAAgBG,gBAAkB,SAAU/tB,EAAQhD,GAClD,IAAI4D,EAASZ,EAAO6tB,oBAChB8B,EAAW,IAAIrE,EAActuB,EAAS4D,EAAOC,IAAKD,EAAOG,QAE7D,IAAK9kB,KAAK2zC,gBAAgBD,EAASzD,mBAAqB,OAAQQ,GAAwB,CACtF,IAAImD,EAAY,IAAIvE,EAActuB,EAAS4D,EAAOC,IAAKD,EAAOG,OAAS,GACvE,IAAK9kB,KAAK2zC,gBAAgBC,EAAU3D,mBAAqB,OAAQQ,GAAwB,OAAO,EAIlG,OADAiD,EAAS3D,cACF2D,EAASxD,uBAAyBvrB,EAAOC,KAAO5kB,KAAK2zC,gBAAgBD,EAASzD,mBAAqB,OAAQS,IAGpHiB,EAAgBgC,gBAAkB,SAAUtI,EAAOzb,GACjD,OAAOA,EAAMztB,QAAQkpC,EAAMv2B,MAAQu2B,IAAU,GAG/CsG,EAAgBK,iBAAmB,SAAUjuB,EAAQhD,EAAS8yB,GAC5D,IAAIlvB,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KACjC5kB,KAAKmyC,sBAAsBxtB,EAAQ8Z,EAAM+R,EAAQS,oBAAoB,MAAKT,EAAQO,qBAAuB,GAC9GP,EAAQQ,gBAAkBrsB,EAAOC,IACjC4rB,EAAQS,oBAAsB4C,EAAUpV,EAAKvf,OAAOyF,EAAOG,QAC3D0rB,EAAQO,wBAGVY,EAAgBM,kBAAoB,SAAUluB,EAAQhD,EAAS8yB,GAC7D,IAAIlvB,EAASZ,EAAO6tB,oBAChBnT,EAAO1d,EAAQzU,IAAI0sB,QAAQrU,EAAOC,KACjC5kB,KAAKqyC,uBAAuB1tB,EAAQ8Z,KAAO+R,EAAQU,sBAAwB,GAChFV,EAAQW,iBAAmBxsB,EAAOC,IAClC4rB,EAAQY,uBAAyB3S,EAAKvf,OAAO,EAAGyF,EAAOG,QAAU+uB,EACjErD,EAAQa,qBAAuB5S,EAAKvf,OAAOyF,EAAOG,QAClD0rB,EAAQU,yBAGVS,EAAgBQ,sBAAwB,SAAUxtB,EAAQ8Z,EAAMoV,GAC9D,OAAOrD,EAAQO,qBAAuB,GAAKpsB,EAAOC,MAAQ4rB,EAAQQ,iBAAmB6C,IAAYrD,EAAQS,oBAAoB,IAAMxS,EAAKvf,OAAOyF,EAAOG,UAAY0rB,EAAQS,qBAG5KU,EAAgBU,uBAAyB,SAAU1tB,EAAQ8Z,GACzD,OAAO+R,EAAQU,sBAAwB,GAAKvsB,EAAOC,MAAQ4rB,EAAQW,kBAAoB1S,EAAKvf,OAAOyF,EAAOG,UAAY0rB,EAAQa,sBAAwB5S,EAAKvf,OAAO,EAAGyF,EAAOG,SAAW0rB,EAAQY,wBAGjMO,EAAgBS,uBAAyB,WACvC5B,EAAQS,oBAAsBT,EAAQS,oBAAoB/xB,OAAO,GACjEsxB,EAAQO,wBAGVY,EAAgBW,0BAA4B,WACtC9B,IACFA,EAAQU,sBAAwB,EAChCV,EAAQW,kBAAoB,IAIhC5/B,EAAIR,SAAS4gC,EAAiB7C,GAC9BnsC,EAAQgvC,gBAAkBA,KAE5B3uC,IAAI9C,OAAO,cAAe,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GACvF,aAEAwC,EAAQmxC,SAAW,GAyCnB,SAA2BC,GACzB,IAAIC,EAAY,SAEhB,IAAK,IAAI1vC,KAAQyvC,EACfpxC,EAAQmxC,SAASxvC,GAAQyvC,EAAKzvC,GAAM5B,QAAQsxC,EAAW,SA5C3DC,CAAkB,CAChB3X,EAAG,4sFACH4X,GAAI,uhFACJC,GAAI,o8EACJC,GAAI,0DACJC,GAAI,8QACJC,GAAI,knEACJC,EAAG,izCACHC,GAAI,4tCACJC,GAAI,qsBACJC,GAAI,0CACJC,EAAG,4hBACHC,GAAI,8TACJC,GAAI,6DACJC,GAAI,+MACJC,EAAG,40BACHC,GAAI,wEACJC,GAAI,mSACJC,GAAI,+RACJC,GAAI,mDACJC,GAAI,2CACJC,GAAI,wCACJC,GAAI,+xBACJC,EAAG,0kCACHC,GAAI,mWACJC,GAAI,yFACJC,GAAI,4KACJC,GAAI,43BACJC,EAAG,gDACHC,GAAI,wCACJC,GAAI,OACJC,GAAI,OACJC,EAAG,0mFACHC,GAAI,qBACJC,GAAI,iFACJC,GAAI,YACJC,GAAI,YACJC,GAAI,kkFAWRrzC,IAAI9C,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,gBAAiB,gCAAiC,4BAA6B,cAAe,eAAgB,qBAAsB,cAAc,SAAU4B,EAAUa,EAASxC,GAC1O,aAEA,IAAImqC,EAAYxoC,EAAS,gBAAgBwoC,UACrC2C,EAAqBnrC,EAAS,0BAA0BmrC,mBACxD0E,EAAkB7vC,EAAS,sBAAsB6vC,gBACjD2E,EAAUx0C,EAAS,cACnB0a,EAAO1a,EAAS,eAChButC,EAAgBvtC,EAAS,qBAAqButC,cAC9CnN,EAAQpgC,EAAS,YAAYogC,MAE7BqU,EAAO,WACTv2C,KAAKwtC,eAAiBP,IAGxB,WACEjtC,KAAKw2C,kBAAoB,IAAI7E,EAC7B3xC,KAAKwoC,QAAU,IAAIplC,OAAO,KAAOkzC,EAAQxC,SAASxX,EAAIga,EAAQxC,SAASU,GAAK8B,EAAQxC,SAASW,GAAK6B,EAAQxC,SAASc,GAAK0B,EAAQxC,SAASuB,GAAK,SAAU,KACxJr1C,KAAKuoC,WAAa,IAAInlC,OAAO,SAAWkzC,EAAQxC,SAASxX,EAAIga,EAAQxC,SAASU,GAAK8B,EAAQxC,SAASW,GAAK6B,EAAQxC,SAASc,GAAK0B,EAAQxC,SAASuB,GAAK,eAAgB,KAErKr1C,KAAKy2C,aAAe,WAMlB,OALKz2C,KAAK02C,aACR12C,KAAK22C,gBAAkB32C,KAAK22C,iBAAmB,IAAI32C,KAAKwtC,eAAextC,KAAK42C,sBAC5E52C,KAAK02C,WAAa,IAAIpM,EAAUtqC,KAAK22C,gBAAgBrJ,aAGhDttC,KAAK02C,YAGd12C,KAAK+yC,iBAAmB,GACxB/yC,KAAK62C,aAAe,GAEpB72C,KAAK82C,mBAAqB,SAAUxmB,EAAOvP,EAASohB,EAAUE,GAC5D,IAAI/1B,EAAMyU,EAAQzU,IACdyqC,GAAmB,EACnBC,GAAe,EACfC,EAAYC,EAAAA,EACZ1P,EAAUzmB,EAAQ2mB,aAClByP,GAAkB,EAEtB,GAAKn3C,KAAK+yC,iBAoCH,CACL,GAAI3uC,MAAMoD,QAAQxH,KAAK+yC,kBACjBqE,EAAcp3C,KAAK+yC,iBAAiB3qC,IAAIoU,EAAKlB,cAAc9Y,KAAK,KAChEuwC,EAAmB/yC,KAAK+yC,iBAAiB,QAEzCqE,EAAc56B,EAAKlB,aAAatb,KAAK+yC,kBACrCA,EAAmB/yC,KAAK+yC,iBAG9BqE,EAAc,IAAIh0C,OAAO,aAAeg0C,EAAc,OACtDD,EAAkBp2B,EAAQs2B,iBAEtBC,EAAY,SAAmB7Y,EAAM98B,GACvC,IAAI8zB,EAAIgJ,EAAKn7B,MAAM8zC,GACnB,GAAK3hB,EAAL,CACA,IAAIhvB,EAAQgvB,EAAE,GAAGl1B,OACbijB,EAAMiS,EAAE,GAAGl1B,OACVg3C,EAAkB9Y,EAAMh4B,EAAO+c,IAAyB,KAAjBiS,EAAE,GAAGjS,EAAM,IAAWA,IAClElX,EAAIkrC,aAAa71C,EAAG8E,EAAO+c,KAN7B,IASIi0B,EAAmB1E,EAAmB,IAkBtCwE,GAhBAG,EAAU,SAAiBjZ,EAAM98B,GAC9Bo1C,IAAoB,KAAK1zC,KAAKo7B,KAC7B8Y,EAAkB9Y,EAAMwY,EAAWA,GAAY3qC,EAAIqrC,aAAa,CAClE/yB,IAAKjjB,EACLmjB,OAAQmyB,GACPQ,GAAuBnrC,EAAIqrC,aAAa,CACzC/yB,IAAKjjB,EACLmjB,OAAQmyB,GACPlE,KAIH6E,EAAa,SAAoBnZ,EAAM98B,GACzC,OAAOy1C,EAAY/zC,KAAKo7B,IAGF,SAA2BA,EAAMoZ,EAAQC,GAG/D,IAFA,IAAIC,EAAS,EAENF,KAAmC,KAAvBpZ,EAAKn8B,OAAOu1C,IAC7BE,IAGF,GAAIA,EAASvQ,GAAW,EAAG,OAAO,EAGlC,IAFIuQ,EAAS,EAEkB,KAAxBtZ,EAAKn8B,OAAOw1C,MACjBC,IAGF,OAAIvQ,EAAU,EAAUuQ,EAASvQ,GAAWA,EAAU,EAAcuQ,EAASvQ,GAAW,QAzFhE,CAC1B,IAAKxnC,KAAK62C,aAAc,OAAO,EAC/B,IAAI9D,EAAmB/yC,KAAK62C,aAAapwC,MACrCuxC,EAAiBh4C,KAAK62C,aAAarzB,IACnC4zB,EAAc,IAAIh0C,OAAO,aAAeoZ,EAAKlB,aAAay3B,GAAoB,KAC9EkF,EAAY,IAAI70C,OAAO,MAAQoZ,EAAKlB,aAAa08B,GAAkB,UAEnEN,EAAU,SAAiBjZ,EAAM98B,GAC/Bi2C,EAAWnZ,EAAM98B,IAEhBo1C,IAAoB,KAAK1zC,KAAKo7B,KACjCnyB,EAAIqrC,aAAa,CACf/yB,IAAKjjB,EACLmjB,OAAQ2Z,EAAKl+B,QACZy3C,GACH1rC,EAAIqrC,aAAa,CACf/yB,IAAKjjB,EACLmjB,OAAQmyB,GACPlE,KAIHuE,EAAY,SAAmB7Y,EAAM98B,GACvC,IAAI8zB,GACAA,EAAIgJ,EAAKn7B,MAAM20C,KAAY3rC,EAAIkrC,aAAa71C,EAAG88B,EAAKl+B,OAASk1B,EAAE,GAAGl1B,OAAQk+B,EAAKl+B,SAC/Ek1B,EAAIgJ,EAAKn7B,MAAM8zC,KAAc9qC,EAAIkrC,aAAa71C,EAAG8zB,EAAE,GAAGl1B,OAAQk1B,EAAE,GAAGl1B,SAGrEq3C,EAAa,SAAoBnZ,EAAM7Z,GACzC,GAAIwyB,EAAY/zC,KAAKo7B,GAAO,OAAO,EAGnC,IAFA,IAAIwN,EAASlrB,EAAQ4uB,UAAU/qB,GAEtBjjB,EAAI,EAAGA,EAAIsqC,EAAO1rC,OAAQoB,IACjC,GAAuB,YAAnBsqC,EAAOtqC,GAAGmT,KAAoB,OAAO,GA6D/C,SAASojC,EAAKnwC,GACZ,IAAK,IAAIpG,EAAIwgC,EAAUxgC,GAAK0gC,EAAQ1gC,IAClCoG,EAAIuE,EAAI0sB,QAAQr3B,GAAIA,GAIxB,IAAIw2C,EAAiBjB,EAAAA,EACrBgB,GAAK,SAAUzZ,EAAM98B,GACnB,IAAIs+B,EAASxB,EAAK2J,OAAO,OAET,IAAZnI,GACEA,EAASgX,IAAWA,EAAYhX,GAChC+W,IAAiBY,EAAWnZ,EAAM98B,KAAIq1C,GAAe,IAChDmB,EAAiB1Z,EAAKl+B,SAC/B43C,EAAiB1Z,EAAKl+B,WAItB02C,GAAaC,EAAAA,IACfD,EAAYkB,EACZpB,GAAmB,EACnBC,GAAe,GAGbG,GAAmBF,EAAYzP,GAAW,IAAGyP,EAAYpwC,KAAKsF,MAAM8qC,EAAYzP,GAAWA,GAC/F0Q,EAAKlB,EAAeM,EAAYI,IAGlC13C,KAAKo4C,mBAAqB,SAAU9nB,EAAOvP,EAASE,EAAO0D,GACzD,IAAI+yB,EAAU13C,KAAK62C,aACnB,GAAKa,EAAL,EACKA,EAAQjxC,OAASixC,EAAQ,KAAIA,EAAUA,EAAQ,IACpD,IAIIvV,EAAUkW,EAHVhN,GADAqI,EAAW,IAAIrE,EAActuB,EAAS4D,EAAOC,IAAKD,EAAOG,SACxCmrB,kBAEjBqI,GADMv3B,EAAQpC,UACCoC,EAAQpC,UAAUiP,mBAGrC,GAAIyd,GAAS,UAAUhoC,KAAKgoC,EAAMv2B,MAAO,CAGvC,IAFA,IAAIyjC,EAAYC,EAETnN,GAAS,UAAUhoC,KAAKgoC,EAAMv2B,OAAO,CAG1C,IAAU,IAFNnT,EAAI0pC,EAAM/iC,MAAMnG,QAAQu1C,EAAQjxC,QAEvB,CACX,IAAIme,EAAM8uB,EAASxD,qBACfprB,EAAS4uB,EAASvD,wBAA0BxuC,EAChD42C,EAAa,IAAIrW,EAAMtd,EAAKE,EAAQF,EAAKE,EAAS4yB,EAAQjxC,MAAMlG,QAChE,MAGF8qC,EAAQqI,EAAS5D,eAGnB,IAAI4D,EAGJ,IAFIrI,GADAqI,EAAW,IAAIrE,EAActuB,EAAS4D,EAAOC,IAAKD,EAAOG,SACxCmrB,kBAEd5E,GAAS,UAAUhoC,KAAKgoC,EAAMv2B,OAAO,CAC1C,IAAInT,EAEJ,IAAU,IAFNA,EAAI0pC,EAAM/iC,MAAMnG,QAAQu1C,EAAQl0B,MAEvB,CACPoB,EAAM8uB,EAASxD,qBACfprB,EAAS4uB,EAASvD,wBAA0BxuC,EAChD62C,EAAW,IAAItW,EAAMtd,EAAKE,EAAQF,EAAKE,EAAS4yB,EAAQl0B,IAAIjjB,QAC5D,MAGF8qC,EAAQqI,EAAS3D,cAGfyI,GAAUz3B,EAAQ7Z,OAAOsxC,GAEzBD,IACFx3B,EAAQ7Z,OAAOqxC,GACfpW,EAAWoW,EAAW9xC,MAAMme,IAC5ByzB,GAAWX,EAAQjxC,MAAMlG,aAG3B83C,EAAUX,EAAQjxC,MAAMlG,OACxB4hC,EAAWlhB,EAAMxa,MAAMme,IACvB7D,EAAQ/Z,OAAOia,EAAMuC,IAAKk0B,EAAQl0B,KAClCzC,EAAQ/Z,OAAOia,EAAMxa,MAAOixC,EAAQjxC,OAGlC6xC,EAAa7xC,MAAMme,KAAOud,IAAUmW,EAAa7xC,MAAMqe,QAAUuzB,GACjEC,EAAa90B,IAAIoB,KAAOud,IAAUmW,EAAa90B,IAAIsB,QAAUuzB,GACjEt3B,EAAQpC,UAAU2P,kBAAkBgqB,KAGtCt4C,KAAKy4C,kBAAoB,SAAUnoB,EAAOmO,EAAMia,GAC9C,OAAO14C,KAAK0yC,WAAWjU,IAGzBz+B,KAAK24C,aAAe,SAAUroB,EAAOmO,EAAMma,GACzC,OAAO,GAGT54C,KAAK64C,YAAc,SAAUvoB,EAAOhkB,EAAKsY,KAEzC5kB,KAAK0yC,WAAa,SAAUjU,GAC1B,OAAOA,EAAKn7B,MAAM,QAAQ,IAG5BtD,KAAK84C,aAAe,SAAU/3B,GAC5B,OAAO,MAGT/gB,KAAK+4C,oBAAsB,SAAUlO,GAInC,IAAK,IAAIlpC,KAHT3B,KAAK2tC,QAAU,GACf3tC,KAAKg5C,OAAS,GAEAnO,EACRA,EAAQlpC,KACV3B,KAAK2tC,QAAQ5rC,KAAKJ,GAClB3B,KAAKg5C,OAAOr3C,GAAK,IAAIkpC,EAAQlpC,IAIjC,IAAIs3C,EAAc,CAAC,qBAAsB,qBAAsB,oBAAqB,eAAgB,cAAe,kBAAmB,kBAEtI,IAASt3C,EAAI,EAAGA,EAAIs3C,EAAY14C,OAAQoB,KACtC,SAAWu3C,GACT,IAAIC,EAAeF,EAAYt3C,GAC3BqwB,EAAiBknB,EAAMC,GAE3BD,EAAMD,EAAYt3C,IAAM,WACtB,OAAO3B,KAAKo5C,WAAWD,EAAc74C,UAAW0xB,IALpD,CAOGhyB,OAIPA,KAAKo5C,WAAa,SAAUC,EAAQn0C,EAAM8sB,GACxC,IAAI1B,EAAQprB,EAAK,GACG,iBAATorB,IAAmBA,EAAQA,EAAM,IAE5C,IAAK,IAAI3uB,EAAI,EAAGA,EAAI3B,KAAK2tC,QAAQptC,OAAQoB,IACvC,GAAK3B,KAAKg5C,OAAOh5C,KAAK2tC,QAAQhsC,IAA9B,CACA,IAAIU,EAAQiuB,EAAMjuB,MAAMrC,KAAK2tC,QAAQhsC,IAErC,IAAKU,EAAM,IAAMA,EAAM,GAAI,CACzB6C,EAAK,GAAK7C,EAAM,GAChB,IAAI8sC,EAAOnvC,KAAKg5C,OAAOh5C,KAAK2tC,QAAQhsC,IACpC,OAAOwtC,EAAKkK,GAAQ14C,MAAMwuC,EAAMjqC,IAIpC,IAAIuM,EAAMugB,EAAerxB,MAAMX,KAAMkF,GACrC,OAAO8sB,EAAiBvgB,OAAMpQ,GAGhCrB,KAAKs5C,gBAAkB,SAAUhpB,EAAOmN,EAAQ1Z,EAAQhD,EAASw4B,GAC/D,GAAIv5C,KAAKw5C,WAAY,CACnB,IAAIvK,EAAajvC,KAAKw5C,WAAWpK,gBAEjC,IAAK,IAAI5jC,KAAOyjC,EACd,GAAIA,EAAWzjC,GAAKiyB,GAAS,CAC3B,IAAIhsB,EAAMw9B,EAAWzjC,GAAKiyB,GAAQ98B,MAAMX,KAAMM,WAE9C,GAAImR,EACF,OAAOA,KAOjBzR,KAAK4uC,YAAc,SAAUlB,GAC3B,IAAK1tC,KAAKy5C,mBAAoB,CAC5B,IAAIlP,EAAQvqC,KAAK02C,WAAWnM,MACxBkP,EAAqB,GAEzB,IAAK,IAAIxO,KAAQV,EAGf,IAFA,IAAImP,EAAUnP,EAAMU,GAEXpqB,EAAI,EAAGjf,EAAI83C,EAAQn5C,OAAQsgB,EAAIjf,EAAGif,IACzC,GAAgC,iBAArB64B,EAAQ74B,GAAGwqB,MAChB,0BAA0BhoC,KAAKq2C,EAAQ74B,GAAGwqB,QAAQoO,EAAmB13C,KAAK23C,EAAQ74B,GAAGjd,YACpF,GAAgC,iBAArB81C,EAAQ74B,GAAGwqB,MAC3B,IAAK,IAAI/kC,EAAI,EAAGqzC,EAAUD,EAAQ74B,GAAGwqB,MAAM9qC,OAAQ+F,EAAIqzC,EAASrzC,IAC9D,GAAI,0BAA0BjD,KAAKq2C,EAAQ74B,GAAGwqB,MAAM/kC,IAAK,CACnD2kC,EAAOyO,EAAQ74B,GAAGjd,MAAMN,MAAM,YAAYgD,GAC9CmzC,EAAmB13C,KAAKkpC,EAAK/rB,OAAO,EAAG+rB,EAAK1qC,OAAS,IAO/DP,KAAKy5C,mBAAqBA,EAG5B,OAAK/L,EACE+L,EAAmBp0C,OAAOrF,KAAK2uC,cAAgB,IADlC3uC,KAAK2uC,cAI3B3uC,KAAK45C,mBAAqB,WAExB,OADK55C,KAAK22C,iBAAiB32C,KAAKy2C,eACzBz2C,KAAK2uC,aAAe3uC,KAAK22C,gBAAgBhI,cAAgB,IAGlE3uC,KAAK65C,eAAiB,SAAUvpB,EAAOvP,EAASpa,EAAKymC,GAEnD,OADeptC,KAAK2uC,cAAgB3uC,KAAK45C,sBACzBxxC,KAAI,SAAU0xC,GAC5B,MAAO,CACLx1C,KAAMw1C,EACNxxC,MAAOwxC,EACPC,MAAO,EACPC,KAAM,eAKZh6C,KAAKi6C,IAAM,kBACVx4C,KAAK80C,EAAKh1C,WACboB,EAAQ4zC,KAAOA,KAEjBvzC,IAAI9C,OAAO,kBAAmB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC3F,aAwBAwC,EAAQu3C,WAAa,SAAUC,EAAU/a,EAAOgb,GAC9C,IAAIx1B,EAAMwa,EAAM34B,MAAMme,IAClBwd,EAAchD,EAAM34B,MAAMqe,OAC1B2Z,EAAO0b,EAASv1B,IAAQ,GAE5B,OAAQwa,EAAM3B,QACZ,IAAK,SAGH,GAAqB,IAFT2B,EAAMC,MAER9+B,OACR45C,EAASv1B,GAAO6Z,EAAKrf,UAAU,EAAGgjB,GAAehD,EAAMC,MAAM,GAAKZ,EAAKrf,UAAUgjB,OAC5E,CACL,IAAIl9B,EAAO,CAAC0f,EAAK,GAAGvf,OAAO+5B,EAAMC,OACjC8a,EAAS/zC,OAAOzF,MAAMw5C,EAAUj1C,GAChCi1C,EAASv1B,GAAO6Z,EAAKrf,UAAU,EAAGgjB,GAAe+X,EAASv1B,GAC1Du1B,EAASv1B,EAAMwa,EAAMC,MAAM9+B,OAAS,IAAMk+B,EAAKrf,UAAUgjB,GAG3D,MAEF,IAAK,SACH,IAAIE,EAAYlD,EAAM5b,IAAIsB,OACtBud,EAASjD,EAAM5b,IAAIoB,IAEnBA,IAAQyd,EACV8X,EAASv1B,GAAO6Z,EAAKrf,UAAU,EAAGgjB,GAAe3D,EAAKrf,UAAUkjB,GAEhE6X,EAAS/zC,OAAOwe,EAAKyd,EAASzd,EAAM,EAAG6Z,EAAKrf,UAAU,EAAGgjB,GAAe+X,EAAS9X,GAAQjjB,UAAUkjB,SAO7Gt/B,IAAI9C,OAAO,aAAc,CAAC,UAAW,UAAW,SAAU,cAAe,0BAA0B,SAAU4B,EAAUa,EAASxC,GAC9H,aAEA,IAAIoR,EAAMzP,EAAS,aACf4vB,EAAe5vB,EAAS,uBAAuB4vB,aAE/C2oB,EAAS13C,EAAQ03C,OAAS,SAAU/tC,EAAKsY,EAAKE,GAChD9kB,KAAKs6C,UAAYt6C,KAAKm/B,SAASr6B,KAAK9E,MACpCA,KAAK+5B,OAAOztB,QACS,IAAVwY,EAAuB9kB,KAAKopB,YAAYxE,EAAIA,IAAKA,EAAIE,QAAa9kB,KAAKopB,YAAYxE,EAAKE,KAGrG,WAuBE,SAASy1B,EAAeC,EAAQC,EAAQC,GACtC,IAAIC,EAAcD,EAAqBF,EAAO11B,QAAU21B,EAAO31B,OAAS01B,EAAO11B,OAAS21B,EAAO31B,OAC/F,OAAO01B,EAAO51B,IAAM61B,EAAO71B,KAAO41B,EAAO51B,KAAO61B,EAAO71B,KAAO+1B,EAxBhEppC,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK+kC,YAAc,WACjB,OAAO/kC,KAAK46C,wBAAwB56C,KAAK4kB,IAAK5kB,KAAK8kB,SAGrD9kB,KAAKskC,YAAc,WACjB,OAAOtkC,KAAK2K,UAGd3K,KAAK66C,cAAe,EAEpB76C,KAAKm/B,SAAW,SAAUC,GACxB,KAAIA,EAAM34B,MAAMme,KAAOwa,EAAM5b,IAAIoB,KAAOwa,EAAM34B,MAAMme,KAAO5kB,KAAK4kB,KAC5Dwa,EAAM34B,MAAMme,IAAM5kB,KAAK4kB,KAA3B,CACA,IAAIk2B,EAYN,SAA8B1b,EAAO0b,EAAOC,GAC1C,IAAIC,EAAgC,UAAhB5b,EAAM3B,OACtBwd,GAAiBD,EAAgB,GAAK,IAAM5b,EAAM5b,IAAIoB,IAAMwa,EAAM34B,MAAMme,KACxEs2B,GAAiBF,EAAgB,GAAK,IAAM5b,EAAM5b,IAAIsB,OAASsa,EAAM34B,MAAMqe,QAC3Eq2B,EAAa/b,EAAM34B,MACnB20C,EAAWJ,EAAgBG,EAAa/b,EAAM5b,IAElD,GAAI+2B,EAAeO,EAAOK,EAAYJ,GACpC,MAAO,CACLn2B,IAAKk2B,EAAMl2B,IACXE,OAAQg2B,EAAMh2B,QAIlB,GAAIy1B,EAAea,EAAUN,GAAQC,GACnC,MAAO,CACLn2B,IAAKk2B,EAAMl2B,IAAMq2B,EACjBn2B,OAAQg2B,EAAMh2B,QAAUg2B,EAAMl2B,KAAOw2B,EAASx2B,IAAMs2B,EAAgB,IAIxE,MAAO,CACLt2B,IAAKu2B,EAAWv2B,IAChBE,OAAQq2B,EAAWr2B,QAnCTu2B,CAAqBjc,EAAO,CACtCxa,IAAK5kB,KAAK4kB,IACVE,OAAQ9kB,KAAK8kB,QACZ9kB,KAAK66C,cACR76C,KAAKopB,YAAY0xB,EAAMl2B,IAAKk2B,EAAMh2B,QAAQ,KAmC5C9kB,KAAKopB,YAAc,SAAUxE,EAAKE,EAAQw2B,GACxC,IAAI30C,EAWJ,GAREA,EADE20C,EACI,CACJ12B,IAAKA,EACLE,OAAQA,GAGJ9kB,KAAK46C,wBAAwBh2B,EAAKE,GAGtC9kB,KAAK4kB,KAAOje,EAAIie,KAAO5kB,KAAK8kB,QAAUne,EAAIme,OAA9C,CACA,IAAIuN,EAAM,CACRzN,IAAK5kB,KAAK4kB,IACVE,OAAQ9kB,KAAK8kB,QAEf9kB,KAAK4kB,IAAMje,EAAIie,IACf5kB,KAAK8kB,OAASne,EAAIme,OAElB9kB,KAAKyqB,QAAQ,SAAU,CACrB4H,IAAKA,EACL/pB,MAAO3B,MAIX3G,KAAKg6B,OAAS,WACZh6B,KAAK2K,SAAS0K,oBAAoB,SAAUrV,KAAKs6C,YAGnDt6C,KAAK+5B,OAAS,SAAUztB,GACtBtM,KAAK2K,SAAW2B,GAAOtM,KAAK2K,SAC5B3K,KAAK2K,SAASkX,GAAG,SAAU7hB,KAAKs6C,YAGlCt6C,KAAK46C,wBAA0B,SAAUh2B,EAAKE,GAC5C,IAAIne,EAAM,GAcV,OAZIie,GAAO5kB,KAAK2K,SAASugB,aACvBvkB,EAAIie,IAAM/d,KAAKC,IAAI,EAAG9G,KAAK2K,SAASugB,YAAc,GAClDvkB,EAAIme,OAAS9kB,KAAK2K,SAASquB,QAAQryB,EAAIie,KAAKrkB,QACnCqkB,EAAM,GACfje,EAAIie,IAAM,EACVje,EAAIme,OAAS,IAEbne,EAAIie,IAAMA,EACVje,EAAIme,OAASje,KAAKM,IAAInH,KAAK2K,SAASquB,QAAQryB,EAAIie,KAAKrkB,OAAQsG,KAAKC,IAAI,EAAGge,KAGvEA,EAAS,IAAGne,EAAIme,OAAS,GACtBne,KAERlF,KAAK44C,EAAO94C,cAEjByB,IAAI9C,OAAO,eAAgB,CAAC,UAAW,UAAW,SAAU,cAAe,kBAAmB,wBAAyB,YAAa,eAAe,SAAU4B,EAAUa,EAASxC,GAC9K,aAEA,IAAIoR,EAAMzP,EAAS,aACfo4C,EAAap4C,EAAS,iBAAiBo4C,WACvCxoB,EAAe5vB,EAAS,uBAAuB4vB,aAC/CwQ,EAAQpgC,EAAS,WAAWogC,MAC5BmY,EAASv4C,EAAS,YAAYu4C,OAE9BkB,EAAW,SAAkBC,GAC/Bx7C,KAAKy7C,OAAS,CAAC,IAEY,IAAvBD,EAAYj7C,OACdP,KAAKy7C,OAAS,CAAC,IACNr3C,MAAMoD,QAAQg0C,GACvBx7C,KAAK07C,kBAAkB,CACrB92B,IAAK,EACLE,OAAQ,GACP02B,GAEHx7C,KAAKgH,OAAO,CACV4d,IAAK,EACLE,OAAQ,GACP02B,KAIP,WACEjqC,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK27C,SAAW,SAAU5+B,GACxB,IAAI2e,EAAM17B,KAAKkrB,YAAc,EAC7BlrB,KAAKkH,OAAO,IAAIg7B,EAAM,EAAG,EAAGxG,EAAK17B,KAAKg5B,QAAQ0C,GAAKn7B,SACnDP,KAAKgH,OAAO,CACV4d,IAAK,EACLE,OAAQ,GACP/H,IAGL/c,KAAK47C,SAAW,WACd,OAAO57C,KAAK67C,cAAcr5C,KAAKxC,KAAK87C,wBAGtC97C,KAAKykC,aAAe,SAAU7f,EAAKE,GACjC,OAAO,IAAIu1B,EAAOr6C,KAAM4kB,EAAKE,IAGC,IAA5B,MAAMziB,MAAM,KAAK9B,OACnBP,KAAK+7C,OAAS,SAAUh/B,GACtB,OAAOA,EAAKra,QAAQ,WAAY,MAAML,MAAM,OAG9CrC,KAAK+7C,OAAS,SAAUh/B,GACtB,OAAOA,EAAK1a,MAAM,eAItBrC,KAAKg8C,eAAiB,SAAUj/B,GAC9B,IAAIzZ,EAAQyZ,EAAKzZ,MAAM,qBACvBtD,KAAKi8C,aAAe34C,EAAQA,EAAM,GAAK,KAEvCtD,KAAKyqB,QAAQ,sBAGfzqB,KAAK87C,oBAAsB,WACzB,OAAQ97C,KAAKk8C,cACX,IAAK,UACH,MAAO,OAET,IAAK,OACH,MAAO,KAET,QACE,OAAOl8C,KAAKi8C,cAAgB,OAIlCj8C,KAAKi8C,aAAe,GACpBj8C,KAAKk8C,aAAe,OAEpBl8C,KAAKm8C,eAAiB,SAAUC,GAC1Bp8C,KAAKk8C,eAAiBE,IAC1Bp8C,KAAKk8C,aAAeE,EAEpBp8C,KAAKyqB,QAAQ,uBAGfzqB,KAAKq8C,eAAiB,WACpB,OAAOr8C,KAAKk8C,cAGdl8C,KAAKs8C,UAAY,SAAUv/B,GACzB,MAAe,QAARA,GAA0B,MAARA,GAAwB,MAARA,GAG3C/c,KAAKg5B,QAAU,SAAUpU,GACvB,OAAO5kB,KAAKy7C,OAAO72B,IAAQ,IAG7B5kB,KAAKu8C,SAAW,SAAUhZ,EAAUC,GAClC,OAAOxjC,KAAKy7C,OAAOl5C,MAAMghC,EAAUC,EAAU,IAG/CxjC,KAAK67C,YAAc,WACjB,OAAO77C,KAAKu8C,SAAS,EAAGv8C,KAAKkrB,cAG/BlrB,KAAKkrB,UAAY,WACf,OAAOlrB,KAAKy7C,OAAOl7C,QAGrBP,KAAK+uB,aAAe,SAAU9N,GAC5B,OAAOjhB,KAAKw8C,iBAAiBv7B,GAAOze,KAAKxC,KAAK87C,wBAGhD97C,KAAKw8C,iBAAmB,SAAUv7B,GAChC,IAAIoe,EAEJ,GAAIpe,EAAMxa,MAAMme,MAAQ3D,EAAMuC,IAAIoB,IAChCya,EAAQ,CAACr/B,KAAKg5B,QAAQ/X,EAAMxa,MAAMme,KAAKxF,UAAU6B,EAAMxa,MAAMqe,OAAQ7D,EAAMuC,IAAIsB,aAC1E,EACLua,EAAQr/B,KAAKu8C,SAASt7B,EAAMxa,MAAMme,IAAK3D,EAAMuC,IAAIoB,MAC3C,IAAMya,EAAM,IAAM,IAAIjgB,UAAU6B,EAAMxa,MAAMqe,QAClD,IAAIljB,EAAIy9B,EAAM9+B,OAAS,EACnB0gB,EAAMuC,IAAIoB,IAAM3D,EAAMxa,MAAMme,KAAOhjB,IAAGy9B,EAAMz9B,GAAKy9B,EAAMz9B,GAAGwd,UAAU,EAAG6B,EAAMuC,IAAIsB,SAGvF,OAAOua,GAGTr/B,KAAKy8C,YAAc,SAAU73B,EAAKya,GAEhC,OADAz+B,QAAQyyB,KAAK,sFACNrzB,KAAK08C,gBAAgB93B,EAAKya,IAGnCr/B,KAAK28C,YAAc,SAAUpZ,EAAUC,GAErC,OADA5iC,QAAQyyB,KAAK,sFACNrzB,KAAK48C,gBAAgBrZ,EAAUC,IAGxCxjC,KAAK68C,cAAgB,SAAU3tC,GAE7B,OADAtO,QAAQyyB,KAAK,mGACNrzB,KAAK07C,kBAAkBxsC,EAAU,CAAC,GAAI,MAG/ClP,KAAKgH,OAAS,SAAUkI,EAAU6N,GAEhC,OADI/c,KAAKkrB,aAAe,GAAGlrB,KAAKg8C,eAAej/B,GACxC/c,KAAK07C,kBAAkBxsC,EAAUlP,KAAK+7C,OAAOh/B,KAGtD/c,KAAK23C,aAAe,SAAUzoC,EAAU6N,GACtC,IAAItW,EAAQzG,KAAK88C,WAAW5tC,EAAS0V,IAAK1V,EAAS4V,QAC/CtB,EAAMxjB,KAAK2G,IAAIuI,EAAS0V,IAAK1V,EAAS4V,OAAS/H,EAAKxc,QAOxD,OANAP,KAAKk6C,WAAW,CACdzzC,MAAOA,EACP+c,IAAKA,EACLia,OAAQ,SACR4B,MAAO,CAACtiB,KACP,GACI/c,KAAK+8C,SAASv5B,IAGvBxjB,KAAK88C,WAAa,SAAUl4B,EAAKE,GAC/B,IAAIvkB,EAASP,KAAKkrB,iBAEN7pB,IAARujB,EACFA,EAAMrkB,EACGqkB,EAAM,EACfA,EAAM,EACGA,GAAOrkB,IAChBqkB,EAAMrkB,EAAS,EACfukB,OAASzjB,GAGX,IAAIo9B,EAAOz+B,KAAKg5B,QAAQpU,GAGxB,OAFcvjB,MAAVyjB,IAAqBA,EAAS2Z,EAAKl+B,QAEhC,CACLqkB,IAAKA,EACLE,OAHFA,EAASje,KAAKM,IAAIN,KAAKC,IAAIge,EAAQ,GAAI2Z,EAAKl+B,UAO9CP,KAAK+8C,SAAW,SAAUp2C,GACxB,MAAO,CACLie,IAAKje,EAAIie,IACTE,OAAQne,EAAIme,SAIhB9kB,KAAK2G,IAAM,SAAUie,EAAKE,GACxB,MAAO,CACLF,IAAKA,EACLE,OAAQA,IAIZ9kB,KAAKg9C,cAAgB,SAAU9tC,GAC7B,IAAI3O,EAASP,KAAKkrB,YAUlB,OARIhc,EAAS0V,KAAOrkB,GAClB2O,EAAS0V,IAAM/d,KAAKC,IAAI,EAAGvG,EAAS,GACpC2O,EAAS4V,OAAS9kB,KAAKg5B,QAAQz4B,EAAS,GAAGA,SAE3C2O,EAAS0V,IAAM/d,KAAKC,IAAI,EAAGoI,EAAS0V,KACpC1V,EAAS4V,OAASje,KAAKM,IAAIN,KAAKC,IAAIoI,EAAS4V,OAAQ,GAAI9kB,KAAKg5B,QAAQ9pB,EAAS0V,KAAKrkB,SAG/E2O,GAGTlP,KAAK08C,gBAAkB,SAAU93B,EAAKya,GAEpC,IAAIva,EAAS,GADbF,EAAM/d,KAAKM,IAAIN,KAAKC,IAAI8d,EAAK,GAAI5kB,KAAKkrB,cAG5BlrB,KAAKkrB,aACbmU,EAAQA,EAAMh6B,OAAO,CAAC,KACtByf,EAAS,IAETua,EAAQ,CAAC,IAAIh6B,OAAOg6B,GACpBza,IACAE,EAAS9kB,KAAKy7C,OAAO72B,GAAKrkB,QAG5BP,KAAK07C,kBAAkB,CACrB92B,IAAKA,EACLE,OAAQA,GACPua,IAGLr/B,KAAK07C,kBAAoB,SAAUxsC,EAAUmwB,GAC3C,IAAI54B,EAAQzG,KAAK88C,WAAW5tC,EAAS0V,IAAK1V,EAAS4V,QAC/CtB,EAAM,CACRoB,IAAKne,EAAMme,IAAMya,EAAM9+B,OAAS,EAChCukB,QAAyB,GAAhBua,EAAM9+B,OAAckG,EAAMqe,OAAS,GAAKua,EAAMA,EAAM9+B,OAAS,GAAGA,QAQ3E,OANAP,KAAKk6C,WAAW,CACdzzC,MAAOA,EACP+c,IAAKA,EACLia,OAAQ,SACR4B,MAAOA,IAEFr/B,KAAK+8C,SAASv5B,IAGvBxjB,KAAKkH,OAAS,SAAU+Z,GACtB,IAAIxa,EAAQzG,KAAK88C,WAAW77B,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,QACrDtB,EAAMxjB,KAAK88C,WAAW77B,EAAMuC,IAAIoB,IAAK3D,EAAMuC,IAAIsB,QAUnD,OATA9kB,KAAKk6C,WAAW,CACdzzC,MAAOA,EACP+c,IAAKA,EACLia,OAAQ,SACR4B,MAAOr/B,KAAKw8C,iBAAiB,CAC3B/1C,MAAOA,EACP+c,IAAKA,MAGFxjB,KAAK+8C,SAASt2C,IAGvBzG,KAAKw3C,aAAe,SAAU5yB,EAAKwd,EAAaE,GAC9C,IAAI77B,EAAQzG,KAAK88C,WAAWl4B,EAAKwd,GAC7B5e,EAAMxjB,KAAK88C,WAAWl4B,EAAK0d,GAU/B,OATAtiC,KAAKk6C,WAAW,CACdzzC,MAAOA,EACP+c,IAAKA,EACLia,OAAQ,SACR4B,MAAOr/B,KAAKw8C,iBAAiB,CAC3B/1C,MAAOA,EACP+c,IAAKA,MAEN,GACIxjB,KAAK+8C,SAASt2C,IAGvBzG,KAAK48C,gBAAkB,SAAUrZ,EAAUC,GACzCD,EAAW18B,KAAKM,IAAIN,KAAKC,IAAI,EAAGy8B,GAAWvjC,KAAKkrB,YAAc,GAE9D,IAAI+xB,GADJzZ,EAAU38B,KAAKM,IAAIN,KAAKC,IAAI,EAAG08B,GAAUxjC,KAAKkrB,YAAc,KACxBlrB,KAAKkrB,YAAc,GAAKqY,EAAW,EACnE2Z,EAAoB1Z,EAAUxjC,KAAKkrB,YAAc,EACjDiX,EAAW8a,EAAqB1Z,EAAW,EAAIA,EAC/ClC,EAAW4b,EAAqBj9C,KAAKg5B,QAAQmJ,GAAU5hC,OAAS,EAChE8hC,EAAS6a,EAAoB1Z,EAAU,EAAIA,EAC3ClC,EAAS4b,EAAoB,EAAIl9C,KAAKg5B,QAAQqJ,GAAQ9hC,OACtD0gB,EAAQ,IAAIihB,EAAMC,EAAUd,EAAUgB,EAAQf,GAC9C6b,EAAen9C,KAAKy7C,OAAOl5C,MAAMghC,EAAUC,EAAU,GAOzD,OANAxjC,KAAKk6C,WAAW,CACdzzC,MAAOwa,EAAMxa,MACb+c,IAAKvC,EAAMuC,IACXia,OAAQ,SACR4B,MAAOr/B,KAAKw8C,iBAAiBv7B,KAExBk8B,GAGTn9C,KAAKo9C,cAAgB,SAAUx4B,GACzBA,EAAM5kB,KAAKkrB,YAAc,GAAKtG,GAAO,GACvC5kB,KAAKk6C,WAAW,CACdzzC,MAAOzG,KAAK2G,IAAIie,EAAK5kB,KAAKg5B,QAAQpU,GAAKrkB,QACvCijB,IAAKxjB,KAAK2G,IAAIie,EAAM,EAAG,GACvB6Y,OAAQ,SACR4B,MAAO,CAAC,GAAI,OAKlBr/B,KAAK0C,QAAU,SAAUue,EAAOlE,GAE9B,OADMkE,aAAiBihB,IAAQjhB,EAAQihB,EAAMuB,WAAWxiB,EAAMxa,MAAOwa,EAAMuC,MACvD,IAAhBzG,EAAKxc,QAAgB0gB,EAAM5C,UAAkB4C,EAAMxa,MACnDsW,GAAQ/c,KAAK+uB,aAAa9N,GAAeA,EAAMuC,KACnDxjB,KAAKkH,OAAO+Z,GAGRlE,EACI/c,KAAKgH,OAAOia,EAAMxa,MAAOsW,GAEzBkE,EAAMxa,QAMhBzG,KAAKq9C,YAAc,SAAUC,GAC3B,IAAK,IAAI37C,EAAI,EAAGA,EAAI27C,EAAO/8C,OAAQoB,IACjC3B,KAAKk6C,WAAWoD,EAAO37C,KAI3B3B,KAAKu9C,aAAe,SAAUD,GAC5B,IAAK,IAAI37C,EAAI27C,EAAO/8C,OAAS,EAAGoB,GAAK,EAAGA,IACtC3B,KAAKw9C,YAAYF,EAAO37C,KAI5B3B,KAAKk6C,WAAa,SAAU9a,EAAOgb,GACjC,IAAIqD,EAA2B,UAAhBre,EAAM3B,QAEjBggB,EAAWre,EAAMC,MAAM9+B,QAAU,IAAM6+B,EAAMC,MAAM,IAAM6C,EAAMgC,cAAc9E,EAAM34B,MAAO24B,EAAM5b,QAIhGi6B,GAAYre,EAAMC,MAAM9+B,OAAS,KAAOP,KAAK09C,yBAAyBte,EAAO,KACjF8a,EAAWl6C,KAAKy7C,OAAQrc,EAAOgb,GAE/Bp6C,KAAKyqB,QAAQ,SAAU2U,KAGzBp/B,KAAK09C,yBAA2B,SAAUte,EAAOue,GAQ/C,IAPA,IAAIte,EAAQD,EAAMC,MACdz9B,EAAIy9B,EAAM9+B,OACVqkB,EAAMwa,EAAM34B,MAAMme,IAClBE,EAASsa,EAAM34B,MAAMqe,OACrB3gB,EAAO,EACPy5C,EAAK,IAEN,CACDz5C,EAAOy5C,EACPA,GAAMD,EAAM,EACZ,IAAIE,EAAQxe,EAAM98B,MAAM4B,EAAMy5C,GAE9B,GAAIA,EAAKh8C,EAAG,CACVw9B,EAAMC,MAAQwe,EACdze,EAAM34B,MAAMme,IAAMA,EAAMzgB,EACxBi7B,EAAM34B,MAAMqe,OAASA,EACrB,MAGF+4B,EAAM97C,KAAK,IACX/B,KAAKk6C,WAAW,CACdzzC,MAAOzG,KAAK2G,IAAIie,EAAMzgB,EAAM2gB,GAC5BtB,IAAKxjB,KAAK2G,IAAIie,EAAMg5B,EAAI94B,EAAS,GACjC2Y,OAAQ2B,EAAM3B,OACd4B,MAAOwe,IACN,KAIP79C,KAAKw9C,YAAc,SAAUpe,GAC3Bp/B,KAAKk6C,WAAW,CACdzzC,MAAOzG,KAAK+8C,SAAS3d,EAAM34B,OAC3B+c,IAAKxjB,KAAK+8C,SAAS3d,EAAM5b,KACzBia,OAAwB,UAAhB2B,EAAM3B,OAAqB,SAAW,SAC9C4B,MAAOD,EAAMC,MAAM98B,WAIvBvC,KAAK89C,gBAAkB,SAAUr5C,EAAO09B,GAItC,IAHA,IAAI9C,EAAQr/B,KAAKy7C,QAAUz7C,KAAK67C,cAC5BkC,EAAgB/9C,KAAK87C,sBAAsBv7C,OAEtCoB,EAAIwgC,GAAY,EAAGvgC,EAAIy9B,EAAM9+B,OAAQoB,EAAIC,EAAGD,IAEnD,IADA8C,GAAS46B,EAAM19B,GAAGpB,OAASw9C,GACf,EAAG,MAAO,CACpBn5B,IAAKjjB,EACLmjB,OAAQrgB,EAAQ46B,EAAM19B,GAAGpB,OAASw9C,GAItC,MAAO,CACLn5B,IAAKhjB,EAAI,EACTkjB,OAAQua,EAAMz9B,EAAI,GAAGrB,SAIzBP,KAAKg+C,gBAAkB,SAAUr3C,EAAKw7B,GAMpC,IALA,IAAI9C,EAAQr/B,KAAKy7C,QAAUz7C,KAAK67C,cAC5BkC,EAAgB/9C,KAAK87C,sBAAsBv7C,OAC3CkE,EAAQ,EACRmgB,EAAM/d,KAAKM,IAAIR,EAAIie,IAAKya,EAAM9+B,QAEzBoB,EAAIwgC,GAAY,EAAGxgC,EAAIijB,IAAOjjB,EACrC8C,GAAS46B,EAAM19B,GAAGpB,OAASw9C,EAG7B,OAAOt5C,EAAQkC,EAAIme,UAEpBrjB,KAAK85C,EAASh6C,WACjBoB,EAAQ44C,SAAWA,KAErBv4C,IAAI9C,OAAO,2BAA4B,CAAC,UAAW,UAAW,SAAU,cAAe,0BAA0B,SAAU4B,EAAUa,EAASxC,GAC5I,aAEA,IAAIoR,EAAMzP,EAAS,aACf4vB,EAAe5vB,EAAS,uBAAuB4vB,aAE/CusB,EAAsB,SAA6BC,EAAWn6B,GAChE/jB,KAAKm+C,SAAU,EACfn+C,KAAKq/B,MAAQ,GACbr/B,KAAKwqC,OAAS,GACdxqC,KAAKo+C,YAAc,EACnBp+C,KAAKk+C,UAAYA,EACjB,IAAIh2C,EAAOlI,KAEXA,KAAKq+C,QAAU,WACb,GAAKn2C,EAAKi2C,QAAV,CAUA,IANA,IAAIG,EAAc,IAAI3yC,KAClByyC,EAAcl2C,EAAKk2C,YACnBG,GAAW,EACXjyC,EAAMpE,EAAKoE,IACXkyC,EAAYJ,EAETl2C,EAAKm3B,MAAM+e,IAChBA,IAGF,IAAI1iB,EAAMpvB,EAAI4e,YACVuzB,EAAiB,EAGrB,IAFAv2C,EAAKi2C,SAAU,EAERC,EAAc1iB,GAAK,CACxBxzB,EAAKw2C,aAAaN,GAClBG,EAAUH,EAEV,GACEA,UACOl2C,EAAKm3B,MAAM+e,IAIpB,KAFAK,EAEqB,GAAM,GAAK,IAAI9yC,KAAS2yC,EAAc,GAAI,CAC7Dp2C,EAAKi2C,QAAU5lC,WAAWrQ,EAAKm2C,QAAS,IACxC,OAIJn2C,EAAKk2C,YAAcA,GACH,GAAZG,IAAeA,EAAUH,GACzBI,GAAaD,GAASr2C,EAAKy2C,gBAAgBH,EAAWD,OAI9D,WACEhtC,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK4+C,aAAe,SAAUV,GAC5Bl+C,KAAKk+C,UAAYA,EACjBl+C,KAAKq/B,MAAQ,GACbr/B,KAAKwqC,OAAS,GACdxqC,KAAKyG,MAAM,IAGbzG,KAAK6+C,YAAc,SAAUvyC,GAC3BtM,KAAKsM,IAAMA,EACXtM,KAAKq/B,MAAQ,GACbr/B,KAAKwqC,OAAS,GACdxqC,KAAK2oB,QAGP3oB,KAAK2+C,gBAAkB,SAAUpb,EAAUC,GACzC,IAAI1pB,EAAO,CACTglC,MAAOvb,EACPlpB,KAAMmpB,GAGRxjC,KAAKyqB,QAAQ,SAAU,CACrB3Q,KAAMA,KAIV9Z,KAAKyG,MAAQ,SAAU07B,GACrBniC,KAAKo+C,YAAcv3C,KAAKM,IAAIg7B,GAAY,EAAGniC,KAAKo+C,YAAap+C,KAAKsM,IAAI4e,aACtElrB,KAAKq/B,MAAMj5B,OAAOpG,KAAKo+C,YAAap+C,KAAKq/B,MAAM9+B,QAC/CP,KAAKwqC,OAAOpkC,OAAOpG,KAAKo+C,YAAap+C,KAAKwqC,OAAOjqC,QACjDP,KAAK2oB,OACL3oB,KAAKm+C,QAAU5lC,WAAWvY,KAAKq+C,QAAS,MAG1Cr+C,KAAK++C,cAAgB,WACd/+C,KAAKm+C,UAASn+C,KAAKm+C,QAAU5lC,WAAWvY,KAAKq+C,QAAS,OAG7Dr+C,KAAKg/C,gBAAkB,SAAU5f,GAC/B,IAAI+C,EAAW/C,EAAM34B,MAAMme,IACvB8W,EAAM0D,EAAM5b,IAAIoB,IAAMud,EAE1B,GAAY,IAARzG,EACF17B,KAAKq/B,MAAM8C,GAAY,UAClB,GAAoB,UAAhB/C,EAAM3B,OACfz9B,KAAKq/B,MAAMj5B,OAAO+7B,EAAUzG,EAAM,EAAG,MACrC17B,KAAKwqC,OAAOpkC,OAAO+7B,EAAUzG,EAAM,EAAG,UACjC,CACL,IAAIx2B,EAAOd,MAAMs3B,EAAM,GACvBx2B,EAAK8nC,QAAQ7K,EAAU,GACvBniC,KAAKq/B,MAAMj5B,OAAOzF,MAAMX,KAAKq/B,MAAOn6B,GACpClF,KAAKwqC,OAAOpkC,OAAOzF,MAAMX,KAAKwqC,OAAQtlC,GAGxClF,KAAKo+C,YAAcv3C,KAAKM,IAAIg7B,EAAUniC,KAAKo+C,YAAap+C,KAAKsM,IAAI4e,aACjElrB,KAAK2oB,QAGP3oB,KAAK2oB,KAAO,WACN3oB,KAAKm+C,SAAS7lC,aAAatY,KAAKm+C,SACpCn+C,KAAKm+C,SAAU,GAGjBn+C,KAAK2vC,UAAY,SAAU/qB,GACzB,OAAO5kB,KAAKq/B,MAAMza,IAAQ5kB,KAAK0+C,aAAa95B,IAG9C5kB,KAAKi/C,SAAW,SAAUr6B,GAExB,OADI5kB,KAAKo+C,aAAex5B,GAAK5kB,KAAK0+C,aAAa95B,GACxC5kB,KAAKwqC,OAAO5lB,IAAQ,SAG7B5kB,KAAK0+C,aAAe,SAAU95B,GAC5B,IAAI6Z,EAAOz+B,KAAKsM,IAAI0sB,QAAQpU,GACxB0L,EAAQtwB,KAAKwqC,OAAO5lB,EAAM,GAC1B9K,EAAO9Z,KAAKk+C,UAAU1R,cAAc/N,EAAMnO,EAAO1L,GAUrD,OARI5kB,KAAKwqC,OAAO5lB,GAAO,IAAO9K,EAAKwW,MAAQ,IACzCtwB,KAAKwqC,OAAO5lB,GAAO9K,EAAKwW,MACxBtwB,KAAKq/B,MAAMza,EAAM,GAAK,KAClB5kB,KAAKo+C,YAAcx5B,EAAM,IAAG5kB,KAAKo+C,YAAcx5B,EAAM,IAChD5kB,KAAKo+C,aAAex5B,IAC7B5kB,KAAKo+C,YAAcx5B,EAAM,GAGpB5kB,KAAKq/B,MAAMza,GAAO9K,EAAKmyB,UAE/BxqC,KAAKw8C,EAAoB18C,WAC5BoB,EAAQs7C,oBAAsBA,KAEhCj7C,IAAI9C,OAAO,uBAAwB,CAAC,UAAW,UAAW,SAAU,eAAgB,cAAe,cAAc,SAAU4B,EAAUa,EAASxC,GAC5I,aAEA,IAAIqc,EAAO1a,EAAS,cAEhBogC,GADMpgC,EAAS,aACPA,EAAS,WAAWogC,OAE5Bgd,EAAkB,SAAyBzjC,EAAQ0jC,EAAOrqC,GAC5D9U,KAAKo/C,UAAU3jC,GACfzb,KAAKm/C,MAAQA,EACbn/C,KAAK8U,KAAOA,GAAQ,SAGtB,WACE9U,KAAKq/C,WAAa,IAElBr/C,KAAKo/C,UAAY,SAAU3jC,GACrBzb,KAAKyb,OAAS,IAAMA,EAAS,KACjCzb,KAAKyb,OAASA,EACdzb,KAAKs/C,MAAQ,KAGft/C,KAAKu/C,OAAS,SAAUp2B,EAAMq2B,EAAaz+B,EAAS4V,GAClD,GAAK32B,KAAKyb,OAIV,IAHA,IAAIhV,EAAQkwB,EAAO4M,SACf/f,EAAMmT,EAAO6M,QAER7hC,EAAI8E,EAAO9E,GAAK6hB,EAAK7hB,IAAK,CACjC,IAAIooC,EAAS/pC,KAAKs/C,MAAM39C,GAEV,MAAVooC,KACFA,EAASvtB,EAAKhB,gBAAgBuF,EAAQiY,QAAQr3B,GAAI3B,KAAKyb,SAC5Clb,OAASP,KAAKq/C,aAAYtV,EAASA,EAAOxnC,MAAM,EAAGvC,KAAKq/C,aACnEtV,EAASA,EAAO3hC,KAAI,SAAU9E,GAC5B,OAAO,IAAI4+B,EAAMvgC,EAAG2B,EAAMqY,OAAQha,EAAG2B,EAAMqY,OAASrY,EAAM/C,WAE5DP,KAAKs/C,MAAM39C,GAAKooC,EAAOxpC,OAASwpC,EAAS,IAG3C,IAAK,IAAIxU,EAAIwU,EAAOxpC,OAAQg1B,KAC1BiqB,EAAYC,qBAAqBt2B,EAAM4gB,EAAOxU,GAAGsO,cAAc9iB,GAAU/gB,KAAKm/C,MAAOxoB,OAI1Fl1B,KAAKy9C,EAAgB39C,WACxBoB,EAAQu8C,gBAAkBA,KAE5Bl8C,IAAI9C,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,cAAc,SAAU4B,EAAUa,EAASxC,GACnH,aAEA,IAAI+hC,EAAQpgC,EAAS,YAAYogC,MAEjC,SAASwd,EAASC,EAAUC,GAC1B5/C,KAAK2/C,SAAWA,EAEZv7C,MAAMoD,QAAQo4C,GAChB5/C,KAAK4/C,MAAQA,EAEbA,EAAQ5/C,KAAK4/C,MAAQ,CAACA,GAGxB,IAAIvlC,EAAOulC,EAAMA,EAAMr/C,OAAS,GAChCP,KAAKihB,MAAQ,IAAIihB,EAAM0d,EAAM,GAAGn5C,MAAMme,IAAKg7B,EAAM,GAAGn5C,MAAMqe,OAAQzK,EAAKmJ,IAAIoB,IAAKvK,EAAKmJ,IAAIsB,QACzF9kB,KAAKyG,MAAQzG,KAAKihB,MAAMxa,MACxBzG,KAAKwjB,IAAMxjB,KAAKihB,MAAMuC,IACtBxjB,KAAK4/C,MAAM93C,SAAQ,SAAU0wB,GAC3BA,EAAKqnB,YAAY7/C,QAChBA,OAGL,WACEA,KAAK8/C,SAAW,SAAUp8B,GACxB1jB,KAAKyG,MAAMme,KAAOlB,EAClB1jB,KAAKwjB,IAAIoB,KAAOlB,EAChB1jB,KAAK4/C,MAAM93C,SAAQ,SAAU0wB,GAC3BA,EAAK/xB,MAAMme,KAAOlB,EAClB8U,EAAKhV,IAAIoB,KAAOlB,MAIpB1jB,KAAKi5B,QAAU,SAAUT,GACvB,GAAIA,EAAKunB,QAAS,CAChB,GAAIvnB,EAAK/xB,MAAMme,IAAM5kB,KAAKmiC,UAAY3J,EAAK6J,OAASriC,KAAKqiC,OACvD,MAAM,IAAI1O,MAAM,6DAGlB3zB,KAAK4/C,MAAM79C,KAAKy2B,GAChBx4B,KAAK4/C,MAAMI,MAAK,SAAU15C,EAAG25C,GAC3B,OAAQ35C,EAAE2a,MAAMmiB,WAAW6c,EAAEx5C,MAAMme,IAAKq7B,EAAEx5C,MAAMqe,WAG9C9kB,KAAKihB,MAAMmiB,WAAW5K,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,QAAU,GAC7D9kB,KAAKwjB,IAAIoB,IAAM4T,EAAKhV,IAAIoB,IACxB5kB,KAAKwjB,IAAIsB,OAAS0T,EAAKhV,IAAIsB,QAClB9kB,KAAKihB,MAAMkiB,aAAa3K,EAAKhV,IAAIoB,IAAK4T,EAAKhV,IAAIsB,QAAU,IAClE9kB,KAAKyG,MAAMme,IAAM4T,EAAK/xB,MAAMme,IAC5B5kB,KAAKyG,MAAMqe,OAAS0T,EAAK/xB,MAAMqe,aAE5B,GAAI0T,EAAK/xB,MAAMme,KAAO5kB,KAAKwjB,IAAIoB,IACpC5kB,KAAK4/C,MAAM79C,KAAKy2B,GAChBx4B,KAAKwjB,IAAIoB,IAAM4T,EAAKhV,IAAIoB,IACxB5kB,KAAKwjB,IAAIsB,OAAS0T,EAAKhV,IAAIsB,WACtB,IAAI0T,EAAKhV,IAAIoB,KAAO5kB,KAAKyG,MAAMme,IAKpC,MAAM,IAAI+O,MAAM,kEAJhB3zB,KAAK4/C,MAAM5S,QAAQxU,GACnBx4B,KAAKyG,MAAMme,IAAM4T,EAAK/xB,MAAMme,IAC5B5kB,KAAKyG,MAAMqe,OAAS0T,EAAK/xB,MAAMqe,OAKjC0T,EAAK2O,SAAWnnC,MAGlBA,KAAKkgD,YAAc,SAAUt7B,GAC3B,OAAOA,GAAO5kB,KAAKyG,MAAMme,KAAOA,GAAO5kB,KAAKwjB,IAAIoB,KAGlD5kB,KAAKmgD,KAAO,SAAUh/C,EAAUkhC,EAAQC,GACtC,IAEI9J,EACA3T,EAHAu7B,EAAU,EACVR,EAAQ5/C,KAAK4/C,MAIbS,GAAW,EAED,MAAVhe,IACFA,EAASriC,KAAKwjB,IAAIoB,IAClB0d,EAAYtiC,KAAKwjB,IAAIsB,QAGvB,IAAK,IAAInjB,EAAI,EAAGA,EAAIi+C,EAAMr/C,OAAQoB,IAAK,CAIrC,IAAY,IAFZkjB,GADA2T,EAAOonB,EAAMj+C,IACFsf,MAAMkiB,aAAad,EAAQC,IAIpC,YADAnhC,EAAS,KAAMkhC,EAAQC,EAAW8d,EAASC,GAO7C,IAHOl/C,EAAS,KAAMq3B,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,OAAQs7B,EAASC,IAClDl/C,EAASq3B,EAAK8nB,YAAa9nB,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,OAAQs7B,IAE1D,IAARv7B,EACV,OAGFw7B,GAAY7nB,EAAKunB,QACjBK,EAAU5nB,EAAKhV,IAAIsB,OAGrB3jB,EAAS,KAAMkhC,EAAQC,EAAW8d,EAASC,IAG7CrgD,KAAKugD,cAAgB,SAAU37B,EAAKE,GAGlC,IAFA,IAAI0T,EAAM3T,EAEDljB,EAAI,EAAGA,EAAI3B,KAAK4/C,MAAMr/C,OAAQoB,IAAK,CAI1C,IAAY,IAFZkjB,GADA2T,EAAOx4B,KAAK4/C,MAAMj+C,IACPsf,MAAMmiB,WAAWxe,EAAKE,IAG/B,MAAO,CACL0T,KAAMA,EACNgoB,KAAM,SAEH,GAAY,IAAR37B,EACT,MAAO,CACL2T,KAAMA,EACNgoB,KAAM,UAKZ,OAAO,MAGTxgD,KAAKygD,eAAiB,SAAU77B,EAAKE,EAAQ4W,GAC3C,IACIlD,EACAonB,EAFAnuC,EAAMzR,KAAKugD,cAAc37B,EAAKE,GAIlC,GAAIrT,EAGF,GAFA+mB,EAAO/mB,EAAI+mB,KAEK,UAAZ/mB,EAAI+uC,MAAoBhoB,EAAK/xB,MAAMqe,QAAUA,GAAU0T,EAAK/xB,MAAMme,KAAOA,EAC3E3kB,OAAOW,SAAWX,OAAOW,QAAQ8/C,IAAI97B,EAAKE,EAAQ0T,QAC7C,GAAIA,EAAK/xB,MAAMme,KAAOA,EAAK,CAEhC,IAAIjjB,GADJi+C,EAAQ5/C,KAAK4/C,OACCz9C,QAAQq2B,GAMtB,IAJU,IAAN72B,IACF3B,KAAKyG,MAAMqe,QAAU4W,GAGf/5B,EAAIi+C,EAAMr/C,OAAQoB,IAAK,CAI7B,IAHA62B,EAAOonB,EAAMj+C,IACR8E,MAAMqe,QAAU4W,GAEhBlD,EAAKunB,QACR,OAGFvnB,EAAKhV,IAAIsB,QAAU4W,EAGrB17B,KAAKwjB,IAAIsB,QAAU4W,IAKzB17B,KAAKqC,MAAQ,SAAUuiB,EAAKE,GAC1B,IAAIne,EAAM3G,KAAKugD,cAAc37B,EAAKE,GAClC,IAAKne,GAAmB,UAAZA,EAAI65C,KAAkB,OAAO,KACzC,IAAIhoB,EAAO7xB,EAAI6xB,KACXonB,EAAQ5/C,KAAK4/C,MACbD,EAAW3/C,KAAK2/C,SAChBh+C,EAAIi+C,EAAMz9C,QAAQq2B,GAClBmoB,EAAaf,EAAMj+C,EAAI,GAC3B3B,KAAKwjB,IAAIoB,IAAM+7B,EAAWn9B,IAAIoB,IAC9B5kB,KAAKwjB,IAAIsB,OAAS67B,EAAWn9B,IAAIsB,OAEjC,IAAI87B,EAAc,IAAIlB,EAASC,EAD/BC,EAAQA,EAAMx5C,OAAOzE,EAAGi+C,EAAMr/C,OAASoB,IAGvC,OADAg+C,EAASv5C,OAAOu5C,EAASx9C,QAAQnC,MAAQ,EAAG,EAAG4gD,GACxCA,GAGT5gD,KAAK+sC,MAAQ,SAAU8T,GAGrB,IAFA,IAAIjB,EAAQiB,EAAajB,MAEhBj+C,EAAI,EAAGA,EAAIi+C,EAAMr/C,OAAQoB,IAChC3B,KAAKi5B,QAAQ2mB,EAAMj+C,IAGrB,IAAIg+C,EAAW3/C,KAAK2/C,SACpBA,EAASv5C,OAAOu5C,EAASx9C,QAAQ0+C,GAAe,IAGlD7gD,KAAKwB,SAAW,WACd,IAAIiQ,EAAM,CAACzR,KAAKihB,MAAMzf,WAAa,OAKnC,OAJAxB,KAAK4/C,MAAM93C,SAAQ,SAAU0wB,GAC3B/mB,EAAI1P,KAAK,KAAOy2B,EAAKh3B,eAEvBiQ,EAAI1P,KAAK,KACF0P,EAAIjP,KAAK,OAGlBxC,KAAK8gD,cAAgB,SAAUC,GAG7B,IAFA,IAAIC,EAAoB,EAEfr/C,EAAI,EAAGA,EAAI3B,KAAK4/C,MAAMr/C,OAAQoB,IAAK,CAC1C,IAAI62B,EAAOx4B,KAAK4/C,MAAMj+C,GAGtB,IAFAo/C,GAAOvoB,EAAK/xB,MAAMqe,OAASk8B,GAEjB,EACR,MAAO,CACLp8B,IAAK4T,EAAK/xB,MAAMme,IAChBE,OAAQ0T,EAAK/xB,MAAMqe,OAASi8B,GAMhC,IAFAA,GAAOvoB,EAAK8nB,YAAY//C,QAEd,EACR,OAAOi4B,EAAK/xB,MAGdu6C,EAAoBxoB,EAAKhV,IAAIsB,OAG/B,MAAO,CACLF,IAAK5kB,KAAKwjB,IAAIoB,IACdE,OAAQ9kB,KAAKwjB,IAAIsB,OAASi8B,MAG7Bt/C,KAAKi+C,EAASn+C,WACjBoB,EAAQ+8C,SAAWA,KAErB18C,IAAI9C,OAAO,iBAAkB,CAAC,UAAW,UAAW,SAAU,cAAc,SAAU4B,EAAUa,EAASxC,GACvG,aAEA,IACI+jC,EADQpiC,EAAS,WAAWogC,MACNgC,cAEtB+c,EAAY,WACdjhD,KAAK+pC,OAAS,KAGhB,WACE/pC,KAAKkkC,cAAgBA,EAErBlkC,KAAKkhD,WAAa,SAAUv6C,EAAKw6C,EAAcC,GAG7C,IAFA,IAAI1S,EAAO1uC,KAAK+pC,OAEPpoC,EAAIy/C,GAAc,EAAGz/C,EAAI+sC,EAAKnuC,OAAQoB,IAAK,CAClD,IAAIsf,EAAQytB,EAAK/sC,GACbglB,EAASud,EAAcv9B,EAAKsa,EAAMuC,KACtC,KAAImD,EAAS,GAAb,CACA,IAAID,EAAWwd,EAAcv9B,EAAKsa,EAAMxa,OACxC,OAAe,IAAXkgB,EAAqBw6B,GAA6B,IAAbz6B,GAAkB/kB,EAAI,EAAIA,EAC/D+kB,EAAW,GAAkB,IAAbA,IAAmBy6B,EAAqBx/C,GACpDA,EAAI,GAGd,OAAQA,EAAI,GAGd3B,KAAKiH,IAAM,SAAUga,GACnB,IAAIkgC,GAAgBlgC,EAAM5C,UACtB+iC,EAAaphD,KAAKkhD,WAAWjgC,EAAMxa,MAAO06C,GAC1CC,EAAa,IAAGA,GAAcA,EAAa,GAC/C,IAAIC,EAAWrhD,KAAKkhD,WAAWjgC,EAAMuC,IAAK29B,EAAcC,GAExD,OADIC,EAAW,EAAGA,GAAYA,EAAW,EAAOA,IACzCrhD,KAAK+pC,OAAO3jC,OAAOg7C,EAAYC,EAAWD,EAAYngC,IAG/DjhB,KAAKshD,QAAU,SAAU5S,GAGvB,IAFA,IAAI3nC,EAAU,GAELpF,EAAI+sC,EAAKnuC,OAAQoB,KACxBoF,EAAQhF,KAAKpB,MAAMoG,EAAS/G,KAAKiH,IAAIynC,EAAK/sC,KAG5C,OAAOoF,GAGT/G,KAAKuhD,eAAiB,SAAU56C,GAC9B,IAAIhF,EAAI3B,KAAKkhD,WAAWv6C,GACxB,GAAIhF,GAAK,EAAG,OAAO3B,KAAK+pC,OAAO3jC,OAAOzE,EAAG,IAG3C3B,KAAK+sC,MAAQ,WASX,IARA,IAMI9rB,EANAla,EAAU,GACV2nC,EAAO1uC,KAAK+pC,OAIZ8C,GAHJ6B,EAAOA,EAAKsR,MAAK,SAAU15C,EAAG25C,GAC5B,OAAO/b,EAAc59B,EAAEG,MAAOw5C,EAAEx5C,WAElB,GAGP9E,EAAI,EAAGA,EAAI+sC,EAAKnuC,OAAQoB,IAAK,CACpCsf,EAAQ4rB,EACRA,EAAO6B,EAAK/sC,GACZ,IAAIkjB,EAAMqf,EAAcjjB,EAAMuC,IAAKqpB,EAAKpmC,OACpCoe,EAAM,IACC,GAAPA,GAAa5D,EAAM5C,WAAcwuB,EAAKxuB,aAEtC6lB,EAAcjjB,EAAMuC,IAAKqpB,EAAKrpB,KAAO,IACvCvC,EAAMuC,IAAIoB,IAAMioB,EAAKrpB,IAAIoB,IACzB3D,EAAMuC,IAAIsB,OAAS+nB,EAAKrpB,IAAIsB,QAG9B4pB,EAAKtoC,OAAOzE,EAAG,GACfoF,EAAQhF,KAAK8qC,GACbA,EAAO5rB,EACPtf,KAIF,OADA3B,KAAK+pC,OAAS2E,EACP3nC,GAGT/G,KAAK4nB,SAAW,SAAUhD,EAAKE,GAC7B,OAAO9kB,KAAKkhD,WAAW,CACrBt8B,IAAKA,EACLE,OAAQA,KACJ,GAGR9kB,KAAKwhD,cAAgB,SAAU76C,GAC7B,OAAO3G,KAAKkhD,WAAWv6C,IAAQ,GAGjC3G,KAAKyhD,aAAe,SAAU96C,GAC5B,IAAIhF,EAAI3B,KAAKkhD,WAAWv6C,GACxB,GAAIhF,GAAK,EAAG,OAAO3B,KAAK+pC,OAAOpoC,IAGjC3B,KAAKsjC,SAAW,SAAUnB,EAAUE,GAClC,IAAIqM,EAAO1uC,KAAK+pC,OAChB,GAAI2E,EAAK,GAAGjoC,MAAMme,IAAMyd,GAAUqM,EAAKA,EAAKnuC,OAAS,GAAGkG,MAAMme,IAAMud,EAAU,MAAO,GACrF,IAAIif,EAAaphD,KAAKkhD,WAAW,CAC/Bt8B,IAAKud,EACLrd,OAAQ,IAENs8B,EAAa,IAAGA,GAAcA,EAAa,GAC/C,IAAIC,EAAWrhD,KAAKkhD,WAAW,CAC7Bt8B,IAAKyd,EACLvd,OAAQ,GACPs8B,GACCC,EAAW,IAAGA,GAAYA,EAAW,GAGzC,IAFA,IAAIK,EAAU,GAEL//C,EAAIy/C,EAAYz/C,EAAI0/C,EAAU1/C,IACrC+/C,EAAQ3/C,KAAK2sC,EAAK/sC,IAGpB,OAAO+/C,GAGT1hD,KAAK2hD,UAAY,WACf,OAAO3hD,KAAK+pC,OAAO3jC,OAAO,EAAGpG,KAAK+pC,OAAOxpC,SAG3CP,KAAK+5B,OAAS,SAAUhZ,GAClB/gB,KAAK+gB,SAAS/gB,KAAKg6B,SACvBh6B,KAAK+gB,QAAUA,EACf/gB,KAAKm/B,SAAWn/B,KAAKs6C,UAAUx1C,KAAK9E,MACpCA,KAAK+gB,QAAQc,GAAG,SAAU7hB,KAAKm/B,WAGjCn/B,KAAKg6B,OAAS,WACPh6B,KAAK+gB,UACV/gB,KAAK+gB,QAAQ3L,eAAe,SAAUpV,KAAKm/B,UAC3Cn/B,KAAK+gB,QAAU,OAGjB/gB,KAAKs6C,UAAY,SAAUlb,GACzB,GAAoB,UAAhBA,EAAM3B,OACR,IAAIh3B,EAAQ24B,EAAM34B,MACd+c,EAAM4b,EAAM5b,SAEZA,EAAM4b,EAAM34B,MACZA,EAAQ24B,EAAM5b,IASpB,IANA,IAAI2e,EAAW17B,EAAMme,IAEjBg9B,EADSp+B,EAAIoB,IACMud,EACnBkW,GAAW5xC,EAAMqe,OAAStB,EAAIsB,OAC9BilB,EAAS/pC,KAAK+pC,OAETpoC,EAAI,EAAGuK,EAAI69B,EAAOxpC,OAAQoB,EAAIuK,EAAGvK,IAAK,CAE7C,MADIkf,EAAIkpB,EAAOpoC,IACT6hB,IAAIoB,IAAMud,GAAhB,CACA,GAAIthB,EAAEpa,MAAMme,IAAMud,EAAU,MAS5B,GAPIthB,EAAEpa,MAAMme,KAAOud,GAAYthB,EAAEpa,MAAMqe,QAAUre,EAAMqe,SACjDjE,EAAEpa,MAAMqe,QAAUre,EAAMqe,QAAU9kB,KAAK66C,eACzCh6B,EAAEpa,MAAMqe,QAAUuzB,EAClBx3B,EAAEpa,MAAMme,KAAOg9B,IAIf/gC,EAAE2C,IAAIoB,KAAOud,GAAYthB,EAAE2C,IAAIsB,QAAUre,EAAMqe,OAAQ,CACzD,GAAIjE,EAAE2C,IAAIsB,QAAUre,EAAMqe,QAAU9kB,KAAK66C,aACvC,SAGEh6B,EAAE2C,IAAIsB,QAAUre,EAAMqe,QAAUuzB,EAAU,GAAK12C,EAAIuK,EAAI,GACrD2U,EAAE2C,IAAIsB,OAASjE,EAAEpa,MAAMqe,QAAUjE,EAAE2C,IAAIsB,QAAUilB,EAAOpoC,EAAI,GAAG8E,MAAMqe,SAAQjE,EAAE2C,IAAIsB,QAAUuzB,GAGnGx3B,EAAE2C,IAAIsB,QAAUuzB,EAChBx3B,EAAE2C,IAAIoB,KAAOg9B,IAIjB,GAAe,GAAXA,GAAgBjgD,EAAIuK,EACtB,KAAOvK,EAAIuK,EAAGvK,IAAK,CACjB,IAAIkf,GAAAA,EAAIkpB,EAAOpoC,IACb8E,MAAMme,KAAOg9B,EACf/gC,EAAE2C,IAAIoB,KAAOg9B,MAIlBngD,KAAKw/C,EAAU1/C,WAClBoB,EAAQs+C,UAAYA,KAEtBj+C,IAAI9C,OAAO,wBAAyB,CAAC,UAAW,UAAW,SAAU,YAAa,iBAAkB,gBAAgB,SAAU4B,EAAUa,EAASxC,GAC/I,aAEY2B,EAAS,YAAYogC,MAAjC,IACI+e,EAAYn/C,EAAS,iBAAiBm/C,UACtC1vC,EAAMzP,EAAS,cAEf+/C,EAAOl/C,EAAQk/C,KAAO,SAAU5gC,EAAOq/B,GACzCtgD,KAAKmnC,SAAW,KAChBnnC,KAAKsgD,YAAcA,EACnBtgD,KAAKihB,MAAQA,EACbjhB,KAAKyG,MAAQwa,EAAMxa,MACnBzG,KAAKwjB,IAAMvC,EAAMuC,IACjBxjB,KAAK+/C,QAAU9+B,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,IAC5C5kB,KAAK8hD,SAAW9hD,KAAK+pC,OAAS,IA4DhC,SAASgY,EAAajH,EAAO/1B,GAC3B+1B,EAAMl2B,KAAOG,EAAOH,IACH,GAAbk2B,EAAMl2B,MAAUk2B,EAAMh2B,QAAUC,EAAOD,QAQ7C,SAASk9B,EAAalH,EAAO/1B,GACV,GAAb+1B,EAAMl2B,MAAUk2B,EAAMh2B,QAAUC,EAAOD,QAC3Cg2B,EAAMl2B,KAAOG,EAAOH,IArEtBrT,EAAIR,SAAS8wC,EAAMZ,GACnB,WACEjhD,KAAKwB,SAAW,WACd,MAAO,IAAMxB,KAAKsgD,YAAc,KAAOtgD,KAAKihB,MAAMzf,YAGpDxB,KAAK6/C,YAAc,SAAU1Y,GAC3BnnC,KAAKmnC,SAAWA,EAChBnnC,KAAK8hD,SAASh6C,SAAQ,SAAU0wB,GAC9BA,EAAKqnB,YAAY1Y,OAIrBnnC,KAAK2jC,MAAQ,WACX,IAAI1iB,EAAQjhB,KAAKihB,MAAM0iB,QACnBnL,EAAO,IAAIqpB,EAAK5gC,EAAOjhB,KAAKsgD,aAKhC,OAJAtgD,KAAK8hD,SAASh6C,SAAQ,SAAUm6C,GAC9BzpB,EAAKspB,SAAS//C,KAAKkgD,EAAQte,YAE7BnL,EAAK0pB,iBAAmBliD,KAAKkiD,iBACtB1pB,GAGTx4B,KAAKmiD,WAAa,SAAU3pB,GAC1B,IAAIx4B,KAAKihB,MAAMshB,QAAQ/J,GAAvB,CACA,IAAKx4B,KAAKihB,MAAM0hB,cAAcnK,GAAO,MAAM,IAAI7E,MAAM,+CAAiD6E,EAAKvX,MAAQjhB,KAAKihB,OAqC5H,IAAsBA,EAAO8D,EAAP9D,EApCLuX,EAoCYzT,EApCN/kB,KAAKyG,MAqC1Bs7C,EAAa9gC,EAAMxa,MAAOse,GAC1Bg9B,EAAa9gC,EAAMuC,IAAKuB,GAlCtB,IAHA,IAAIH,EAAM4T,EAAK/xB,MAAMme,IACjBE,EAAS0T,EAAK/xB,MAAMqe,OAEfnjB,EAAI,EAAGkjB,GAAO,EAAGljB,EAAI3B,KAAK8hD,SAASvhD,QAE/B,IADXskB,EAAM7kB,KAAK8hD,SAASngD,GAAGsf,MAAMuhB,QAAQ5d,EAAKE,IADQnjB,KAKpD,IAAIygD,EAAapiD,KAAK8hD,SAASngD,GAC/B,GAAW,GAAPkjB,EAAU,OAAOu9B,EAAWD,WAAW3pB,GACvC5T,EAAM4T,EAAKvX,MAAMuC,IAAIoB,IACrBE,EAAS0T,EAAKvX,MAAMuC,IAAIsB,OAD5B,IAGSyQ,EAAI5zB,EAAb,IAAgBkjB,GAAO,EAAG0Q,EAAIv1B,KAAK8hD,SAASvhD,QAE/B,IADXskB,EAAM7kB,KAAK8hD,SAASvsB,GAAGtU,MAAMuhB,QAAQ5d,EAAKE,IADQyQ,KAKrCv1B,KAAK8hD,SAASvsB,GAC7B,GAAW,GAAP1Q,EAAU,MAAM,IAAI8O,MAAM,+CAAiD6E,EAAKvX,MAAQjhB,KAAKihB,OAC7EjhB,KAAK8hD,SAAS17C,OAAOzE,EAAG4zB,EAAI5zB,EAAG62B,GAEnD,OADAA,EAAKqnB,YAAY7/C,KAAKmnC,UACf3O,IAGTx4B,KAAKqiD,aAAe,SAAUphC,GAC5B,OAmBJ,SAAsBA,EAAO8D,GAC3Bi9B,EAAa/gC,EAAMxa,MAAOse,GAC1Bi9B,EAAa/gC,EAAMuC,IAAKuB,GArBfs9B,CAAaphC,EAAOjhB,KAAKyG,SAEjChF,KAAKogD,EAAKtgD,cAsBfyB,IAAI9C,OAAO,2BAA4B,CAAC,UAAW,UAAW,SAAU,YAAa,6BAA8B,wBAAyB,uBAAuB,SAAU4B,EAAUa,EAASxC,GAC9L,aAEA,IAAI+hC,EAAQpgC,EAAS,YAAYogC,MAC7Bwd,EAAW59C,EAAS,eAAe49C,SACnCmC,EAAO//C,EAAS,UAAU+/C,KAC1BxS,EAAgBvtC,EAAS,qBAAqButC,cAssBlD1sC,EAAQ2/C,QApsBR,WACEtiD,KAAKy4B,UAAY,SAAU7T,EAAKE,EAAQy9B,GACtC,IAAIpb,EAAWnnC,KAAKonC,YAAYxiB,GAChC,IAAKuiB,EAAU,OAAO,KAGtB,IAFA,IAAIyY,EAAQzY,EAASyY,MAEZj+C,EAAI,EAAGA,EAAIi+C,EAAMr/C,OAAQoB,IAAK,CACrC,IAAI62B,EAAOonB,EAAMj+C,GAEjB,GAAI62B,EAAKvX,MAAM2G,SAAShD,EAAKE,GAAS,CACpC,GAAY,GAARy9B,GAAa/pB,EAAKvX,MAAM4hB,MAAMje,EAAKE,GACrC,SACK,IAAa,GAATy9B,GAAc/pB,EAAKvX,MAAM6hB,QAAQle,EAAKE,GAC/C,SAGF,OAAO0T,KAKbx4B,KAAKwiD,gBAAkB,SAAUvhC,GAC/B,IAAIxa,EAAQwa,EAAMxa,MACd+c,EAAMvC,EAAMuC,IACZi/B,EAAYziD,KAAK0iD,UACjBC,EAAa,GACjBl8C,EAAMqe,QAAU,EAChBtB,EAAIsB,QAAU,EAEd,IAAK,IAAInjB,EAAI,EAAGA,EAAI8gD,EAAUliD,OAAQoB,IAAK,CACzC,IAAIkjB,EAAM49B,EAAU9gD,GAAGsf,MAAMwhB,aAAaxhB,GAE1C,GAAW,GAAP4D,EAAJ,CAEO,IAAY,GAARA,EACT,MAKF,IAFA,IAAI+6B,EAAQ6C,EAAU9gD,GAAGi+C,MAEhBrqB,EAAI,EAAGA,EAAIqqB,EAAMr/C,OAAQg1B,IAAK,CACrC,IAAIiD,EAAOonB,EAAMrqB,GAGjB,IAAY,IAFZ1Q,EAAM2T,EAAKvX,MAAMwhB,aAAaxhB,IAG5B,MACK,GAAW,GAAP4D,EAAJ,CAEA,GAAW,IAAPA,EACT,MAGF89B,EAAW5gD,KAAKy2B,MAMpB,OAFA/xB,EAAMqe,QAAU,EAChBtB,EAAIsB,QAAU,EACP69B,GAGT3iD,KAAK4iD,oBAAsB,SAAU7Y,GACnC,GAAI3lC,MAAMoD,QAAQuiC,GAAS,CACzB,IAAI6V,EAAQ,GACZ7V,EAAOjiC,SAAQ,SAAUmZ,GACvB2+B,EAAQA,EAAMv6C,OAAOrF,KAAKwiD,gBAAgBvhC,MACzCjhB,WAEC4/C,EAAQ5/C,KAAKwiD,gBAAgBzY,GAGnC,OAAO6V,GAGT5/C,KAAK6iD,YAAc,WAIjB,IAHA,IAAIjD,EAAQ,GACR6C,EAAYziD,KAAK0iD,UAEZ/gD,EAAI,EAAGA,EAAI8gD,EAAUliD,OAAQoB,IACpC,IAAK,IAAI4zB,EAAI,EAAGA,EAAIktB,EAAU9gD,GAAGi+C,MAAMr/C,OAAQg1B,IAC7CqqB,EAAM79C,KAAK0gD,EAAU9gD,GAAGi+C,MAAMrqB,IAIlC,OAAOqqB,GAGT5/C,KAAK0oC,gBAAkB,SAAU9jB,EAAKE,EAAQ/Y,EAAMo7B,GAElD,KADAA,EAAWA,GAAYnnC,KAAKonC,YAAYxiB,IACzB,OAAO,KAQtB,IAPA,IAKIvgB,EAAKm0B,EALLsqB,EAAW,CACbt/B,IAAK,CACHsB,OAAQ,IAKHnjB,EAAI,EAAGA,EAAIwlC,EAASyY,MAAMr/C,OAAQoB,IAAK,CAE9C,IAAIkjB,GADJ2T,EAAO2O,EAASyY,MAAMj+C,IACPsf,MAAMmiB,WAAWxe,EAAKE,GAErC,IAAY,GAARD,EAAW,CACbxgB,EAAMrE,KAAKg5B,QAAQR,EAAK/xB,MAAMme,KAAKxF,UAAU0jC,EAASt/B,IAAIsB,OAAQ0T,EAAK/xB,MAAMqe,QAC7E,MACK,GAAY,IAARD,EACT,OAAO,KAGTi+B,EAAWtqB,EAIb,OADKn0B,IAAKA,EAAMrE,KAAKg5B,QAAQR,EAAK/xB,MAAMme,KAAKxF,UAAU0jC,EAASt/B,IAAIsB,UACvD,GAAT/Y,EAAmB1H,EAAI+a,UAAU,EAAG0F,EAASg+B,EAASt/B,IAAIsB,QAAyB,GAAR/Y,EAAkB1H,EAAI+a,UAAU0F,EAASg+B,EAASt/B,IAAIsB,QAAoBzgB,GAG3JrE,KAAKonC,YAAc,SAAUrI,EAAQgkB,GACnC,IAAIpD,EAAW3/C,KAAK0iD,UAChB/gD,EAAI,EAIR,IAHIohD,IAAephD,EAAIg+C,EAASx9C,QAAQ4gD,KAC9B,GAANphD,IAASA,EAAI,GAETA,EAAIg+C,EAASp/C,OAAQoB,IAAK,CAChC,IAAIwlC,EAAWwY,EAASh+C,GAExB,GAAIwlC,EAAS1gC,MAAMme,KAAOma,GAAUoI,EAAS3jB,IAAIoB,KAAOma,EACtD,OAAOoI,EACF,GAAIA,EAAS3jB,IAAIoB,IAAMma,EAC5B,OAAO,KAIX,OAAO,MAGT/+B,KAAKgjD,gBAAkB,SAAUjkB,EAAQgkB,GACvC,IAAIpD,EAAW3/C,KAAK0iD,UAChB/gD,EAAI,EAIR,IAHIohD,IAAephD,EAAIg+C,EAASx9C,QAAQ4gD,KAC9B,GAANphD,IAASA,EAAI,GAETA,EAAIg+C,EAASp/C,OAAQoB,IAAK,CAChC,IAAIwlC,EAAWwY,EAASh+C,GAExB,GAAIwlC,EAAS3jB,IAAIoB,KAAOma,EACtB,OAAOoI,EAIX,OAAO,MAGTnnC,KAAKijD,kBAAoB,SAAUnE,EAAOzkC,GAIxC,IAHA,IAAIslC,EAAW3/C,KAAK0iD,UAChB1S,EAAW31B,EAAOykC,EAAQ,EAErBn9C,EAAI,EAAGA,EAAIg+C,EAASp/C,OAAQoB,IAAK,CACxC,IAAIwlC,EAAWwY,EAASh+C,GACpB6hB,EAAM2jB,EAAS3jB,IAAIoB,IACnBne,EAAQ0gC,EAAS1gC,MAAMme,IAE3B,GAAIpB,GAAOnJ,EAAM,CACX5T,EAAQ4T,IACN5T,GAASq4C,EAAO9O,GAAY31B,EAAO5T,EAAWupC,EAAW,GAG/D,MACSxsB,GAAOs7B,IAEd9O,GADEvpC,GAASq4C,EACCt7B,EAAM/c,EAAuB+c,EAAMs7B,EAAQ,GAI7D,OAAO9O,GAGThwC,KAAKkjD,aAAe,SAAU/b,GAK5B,OAJAnnC,KAAK0iD,UAAU3gD,KAAKolC,GACpBnnC,KAAK0iD,UAAU1C,MAAK,SAAU15C,EAAG25C,GAC/B,OAAO35C,EAAEG,MAAMme,IAAMq7B,EAAEx5C,MAAMme,OAExBuiB,GAGTnnC,KAAKi5B,QAAU,SAAUqnB,EAAar/B,GACpC,IAEIuX,EAFAmnB,EAAW3/C,KAAK0iD,UAChBS,GAAQ,EAER7C,aAAuBuB,EAAMrpB,EAAO8nB,GACtC9nB,EAAO,IAAIqpB,EAAK5gC,EAAOq/B,IAClB4B,iBAAmBjhC,EAAMihC,iBAEhCliD,KAAKojD,qBAAqB5qB,EAAKvX,OAC/B,IAAIkhB,EAAW3J,EAAK/xB,MAAMme,IACtBwd,EAAc5J,EAAK/xB,MAAMqe,OACzBud,EAAS7J,EAAKhV,IAAIoB,IAClB0d,EAAY9J,EAAKhV,IAAIsB,OACzB,KAAMqd,EAAWE,GAAUF,GAAYE,GAAUD,GAAeE,EAAY,GAAI,MAAM,IAAI3O,MAAM,mDAChG,IAAI0vB,EAAYrjD,KAAKy4B,UAAU0J,EAAUC,EAAa,GAClDkhB,EAAUtjD,KAAKy4B,UAAU4J,EAAQC,GAAY,GACjD,GAAI+gB,GAAaC,GAAWD,EAAW,OAAOA,EAAUlB,WAAW3pB,GAC/D6qB,IAAcA,EAAUpiC,MAAM6hB,QAAQX,EAAUC,IAAcpiC,KAAK04B,WAAW2qB,GAC9EC,IAAYA,EAAQriC,MAAM4hB,MAAMR,EAAQC,IAAYtiC,KAAK04B,WAAW4qB,GACxE,IAAI1D,EAAQ5/C,KAAKwiD,gBAAgBhqB,EAAKvX,OAElC2+B,EAAMr/C,OAAS,IACjBP,KAAKujD,YAAY3D,GACjBA,EAAM93C,SAAQ,SAAUm6C,GACtBzpB,EAAK2pB,WAAWF,OAIpB,IAAK,IAAItgD,EAAI,EAAGA,EAAIg+C,EAASp/C,OAAQoB,IAAK,CACxC,IAAIwlC,EAAWwY,EAASh+C,GAExB,GAAI0gC,GAAU8E,EAAS1gC,MAAMme,IAAK,CAChCuiB,EAASlO,QAAQT,GACjB2qB,GAAQ,EACR,MACK,GAAIhhB,GAAYgF,EAAS3jB,IAAIoB,IAAK,CAIvC,GAHAuiB,EAASlO,QAAQT,GACjB2qB,GAAQ,GAEH3qB,EAAKunB,QAAS,CACjB,IAAIc,EAAelB,EAASh+C,EAAI,GAEhC,GAAIk/C,GAAgBA,EAAap6C,MAAMme,KAAOyd,EAAQ,CACpD8E,EAAS4F,MAAM8T,GACf,OAIJ,MACK,GAAIxe,GAAU8E,EAAS1gC,MAAMme,IAClC,MAaJ,OATKu+B,IAAOhc,EAAWnnC,KAAKkjD,aAAa,IAAIxD,EAAS1/C,KAAK0iD,UAAWlqB,KAClEx4B,KAAK8/B,aAAc9/B,KAAKwjD,gBAAgBrc,EAAS1gC,MAAMme,IAAKuiB,EAAS1gC,MAAMme,KAAU5kB,KAAKyjD,sBAAsBtc,EAAS1gC,MAAMme,IAAKuiB,EAAS1gC,MAAMme,KACvJ5kB,KAAK0jD,WAAY,EAEjB1jD,KAAKyqB,QAAQ,aAAc,CACzB3Q,KAAM0e,EACNiF,OAAQ,QAGHjF,GAGTx4B,KAAK2jD,SAAW,SAAU/D,GACxBA,EAAM93C,SAAQ,SAAU0wB,GACtBx4B,KAAKi5B,QAAQT,KACZx4B,OAGLA,KAAK04B,WAAa,SAAUF,GAC1B,IAAI2O,EAAW3O,EAAK2O,SAChBhF,EAAWgF,EAAS1gC,MAAMme,IAC1Byd,EAAS8E,EAAS3jB,IAAIoB,IACtB69B,EAAYziD,KAAK0iD,UACjB9C,EAAQzY,EAASyY,MAErB,GAAoB,GAAhBA,EAAMr/C,OACRkiD,EAAUr8C,OAAOq8C,EAAUtgD,QAAQglC,GAAW,QACzC,GAAIA,EAASlmB,MAAM4hB,MAAMrK,EAAKhV,IAAIoB,IAAK4T,EAAKhV,IAAIsB,QACrD86B,EAAMptB,MACN2U,EAAS3jB,IAAIoB,IAAMg7B,EAAMA,EAAMr/C,OAAS,GAAGijB,IAAIoB,IAC/CuiB,EAAS3jB,IAAIsB,OAAS86B,EAAMA,EAAMr/C,OAAS,GAAGijB,IAAIsB,YAC7C,GAAIqiB,EAASlmB,MAAM6hB,QAAQtK,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,QAC3D86B,EAAMl8B,QACNyjB,EAAS1gC,MAAMme,IAAMg7B,EAAM,GAAGn5C,MAAMme,IACpCuiB,EAAS1gC,MAAMqe,OAAS86B,EAAM,GAAGn5C,MAAMqe,YAClC,GAAI0T,EAAKunB,QACdH,EAAMx5C,OAAOw5C,EAAMz9C,QAAQq2B,GAAO,OAC7B,CACL,IAAIooB,EAAczZ,EAAS9kC,MAAMm2B,EAAK/xB,MAAMme,IAAK4T,EAAK/xB,MAAMqe,SAC5D86B,EAAQgB,EAAYhB,OACdl8B,QACNk9B,EAAYn6C,MAAMme,IAAMg7B,EAAM,GAAGn5C,MAAMme,IACvCg8B,EAAYn6C,MAAMqe,OAAS86B,EAAM,GAAGn5C,MAAMqe,OAGvC9kB,KAAK4jD,YACJ5jD,KAAK8/B,aAAc9/B,KAAKwjD,gBAAgBrhB,EAAUE,GAAariC,KAAKyjD,sBAAsBthB,EAAUE,IAG1GriC,KAAK0jD,WAAY,EAEjB1jD,KAAKyqB,QAAQ,aAAc,CACzB3Q,KAAM0e,EACNiF,OAAQ,YAIZz9B,KAAKujD,YAAc,SAAU3D,GAG3B,IAFA,IAAIiE,EAAa,GAERliD,EAAI,EAAGA,EAAIi+C,EAAMr/C,OAAQoB,IAChCkiD,EAAW9hD,KAAK69C,EAAMj+C,IAGxBkiD,EAAW/7C,SAAQ,SAAU0wB,GAC3Bx4B,KAAK04B,WAAWF,KACfx4B,MACHA,KAAK0jD,WAAY,GAGnB1jD,KAAK24B,WAAa,SAAUH,GAC1Bx4B,KAAK04B,WAAWF,GAChBA,EAAKspB,SAASh6C,SAAQ,SAAUm6C,GAC9BzpB,EAAK6pB,aAAaJ,GAClBjiD,KAAKi5B,QAAQgpB,KACZjiD,MAECw4B,EAAK0pB,iBAAmB,GAC1BliD,KAAK8jD,QAAQtrB,EAAK/xB,MAAMme,IAAM,EAAG4T,EAAKhV,IAAIoB,IAAK4T,EAAK0pB,iBAAmB,GAGzE1pB,EAAKspB,SAAW,IAGlB9hD,KAAK+jD,YAAc,SAAUnE,GAC3BA,EAAM93C,SAAQ,SAAU0wB,GACtBx4B,KAAK24B,WAAWH,KACfx4B,OAGLA,KAAKgkD,OAAS,SAAUhrC,EAAUirC,GAChC,IAAIhjC,EAAO2+B,EASX,GAPgB,MAAZ5mC,GACFiI,EAAQ,IAAIihB,EAAM,EAAG,EAAGliC,KAAKkrB,YAAa,GAC1C+4B,GAAc,GACwBhjC,EAAV,iBAAZjI,EAA8B,IAAIkpB,EAAMlpB,EAAU,EAAGA,EAAUhZ,KAAKg5B,QAAQhgB,GAAUzY,QAAiB,QAASyY,EAAkBkpB,EAAMuB,WAAWzqB,EAAUA,GAAuBA,EAEtM4mC,EAAQ5/C,KAAK4iD,oBAAoB3hC,GAE7BgjC,EACFjkD,KAAKujD,YAAY3D,QAIjB,IAFA,IAAIkC,EAAWlC,EAERkC,EAASvhD,QACdP,KAAK+jD,YAAYjC,GACjBA,EAAW9hD,KAAK4iD,oBAAoB3hC,GAIxC,GAAI2+B,EAAMr/C,OAAQ,OAAOq/C,GAG3B5/C,KAAKkkD,YAAc,SAAUnlB,EAAQolB,GACnC,QAASnkD,KAAKonC,YAAYrI,EAAQolB,IAGpCnkD,KAAKokD,cAAgB,SAAUrlB,EAAQolB,GACrC,IAAIhd,EAAWnnC,KAAKonC,YAAYrI,EAAQolB,GACxC,OAAOhd,EAAWA,EAAS3jB,IAAIoB,IAAMma,GAGvC/+B,KAAKqkD,gBAAkB,SAAUtlB,EAAQolB,GACvC,IAAIhd,EAAWnnC,KAAKonC,YAAYrI,EAAQolB,GACxC,OAAOhd,EAAWA,EAAS1gC,MAAMme,IAAMma,GAGzC/+B,KAAKskD,mBAAqB,SAAUnd,EAAU9E,EAAQC,EAAWH,EAAUC,GACzD,MAAZD,IAAkBA,EAAWgF,EAAS1gC,MAAMme,KAC7B,MAAfwd,IAAqBA,EAAc,GACzB,MAAVC,IAAgBA,EAAS8E,EAAS3jB,IAAIoB,KACzB,MAAb0d,IAAmBA,EAAYtiC,KAAKg5B,QAAQqJ,GAAQ9hC,QACxD,IAAI+L,EAAMtM,KAAKsM,IACXi4C,EAAW,GAef,OAdApd,EAASgZ,MAAK,SAAUG,EAAa17B,EAAKE,EAAQ0/B,GAChD,KAAI5/B,EAAMud,GAAV,CAEA,GAAIvd,GAAOud,EAAU,CACnB,GAAIrd,EAASsd,EAAa,OAC1BoiB,EAAa39C,KAAKC,IAAIs7B,EAAaoiB,GAInCD,GADiB,MAAfjE,EACUA,EAEAh0C,EAAI0sB,QAAQpU,GAAKxF,UAAUolC,EAAY1/B,MAEpDud,EAAQC,GACJiiB,GAGTvkD,KAAK+nC,eAAiB,SAAUnjB,EAAK0d,EAAWH,EAAUC,GACxD,IAGM3D,EAHF0I,EAAWnnC,KAAKonC,YAAYxiB,GAEhC,OAAKuiB,EAKInnC,KAAKskD,mBAAmBnd,EAAUviB,EAAK0d,EAAWH,EAAUC,IAHnE3D,EAAOz+B,KAAKsM,IAAI0sB,QAAQpU,IACZxF,UAAUgjB,GAAe,EAAGE,GAAa7D,EAAKl+B,SAM9DP,KAAKykD,eAAiB,WACpB,IAAIC,EAAK,GAOT,OANAA,EAAK1kD,KAAK0iD,UAAUt6C,KAAI,SAAU++B,GAChC,IAAIyY,EAAQzY,EAASyY,MAAMx3C,KAAI,SAAUowB,GACvC,OAAOA,EAAKmL,WAEd,OAAO,IAAI+b,EAASgF,EAAI9E,OAK5B5/C,KAAK2kD,WAAa,SAAUC,GAC1B,IAEIpsB,EACAqsB,EAFA5jC,EADYjhB,KAAK2e,UACCmC,WAItB,GAAIG,EAAM5C,UAAW,CACnB,IAAIsG,EAAS1D,EAAMxa,MAGnB,GAFA+xB,EAAOx4B,KAAKy4B,UAAU9T,EAAOC,IAAKD,EAAOG,QAIvC,YADA9kB,KAAK24B,WAAWH,IAEPqsB,EAAa7kD,KAAKwyC,oBAAoB7tB,IACT,GAAlC1D,EAAMoF,aAAaw+B,GACrB5jC,EAAMuC,IAAMqhC,GAEZ5jC,EAAMxa,MAAQo+C,EACd5jC,EAAMxa,MAAMqe,SACZ7D,EAAMuC,IAAIsB,WAEH+/B,EAAa7kD,KAAKwyC,oBAAoB,CAC/C5tB,IAAKD,EAAOC,IACZE,OAAQH,EAAOG,OAAS,MAEc,GAAlC7D,EAAMoF,aAAaw+B,GAAkB5jC,EAAMuC,IAAMqhC,EAAgB5jC,EAAMxa,MAAQo+C,EACnF5jC,EAAMxa,MAAMqe,UAEZ7D,EAAQjhB,KAAK8kD,oBAAoBngC,EAAOC,IAAKD,EAAOG,SAAW7D,MAE5D,CACL,IAAI2+B,EAAQ5/C,KAAKwiD,gBAAgBvhC,GAEjC,GAAI2jC,GAAehF,EAAMr/C,OAEvB,YADAP,KAAK+jD,YAAYnE,GAEQ,GAAhBA,EAAMr/C,SACfi4B,EAAOonB,EAAM,IAMjB,GAFKpnB,IAAMA,EAAOx4B,KAAKy4B,UAAUxX,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,SAE1D0T,GAAQA,EAAKvX,MAAMzf,YAAcyf,EAAMzf,WACzCxB,KAAK24B,WAAWH,OADlB,CAKA,IAAI8nB,EAAc,MAElB,IAAKr/B,EAAM0G,cAAe,CAExB,IADA24B,EAActgD,KAAK+uB,aAAa9N,IAChB1gB,OAAS,EAAG,OAC5B+/C,EAAcA,EAAYv0C,OAAOqT,UAAU,EAAG,GAAK,KAGrDpf,KAAKi5B,QAAQqnB,EAAar/B,KAG5BjhB,KAAK8kD,oBAAsB,SAAUlgC,EAAKE,EAAQ0V,GAChD,IAAIkZ,EAAW,IAAIrE,EAAcrvC,KAAM4kB,EAAKE,GACxCumB,EAAQqI,EAASzD,kBACjBn7B,EAAOu2B,EAAMv2B,KAEjB,GAAIu2B,GAAS,kBAAkBhoC,KAAKyR,GAAO,CAE7B,YADZA,EAAOA,EAAKxR,MAAM,kBAAkB,MACbwR,GAAQ,cAC/B,IAAIohB,EAAK,IAAI9yB,OAAO0R,GAChBmM,EAAQ,IAAIihB,EAEhB,GAAW,GAAP1H,EAAU,CACZ,GACE6Q,EAAQqI,EAAS5D,qBACVzE,GAASnV,EAAG7yB,KAAKgoC,EAAMv2B,OAEhC4+B,EAAS3D,cAOX,GAJA9uB,EAAMxa,MAAMme,IAAM8uB,EAASxD,qBAC3BjvB,EAAMxa,MAAMqe,OAAS4uB,EAASvD,wBAA0B,EACxDuD,EAAW,IAAIrE,EAAcrvC,KAAM4kB,EAAKE,IAE5B,GAAR0V,EAAW,CACb,IAAIgJ,GAAW,EAEf,GAGE,GAFA6H,EAAQqI,EAAS3D,eAED,GAAZvM,EAAe,CACjB,IAAIlT,EAAQtwB,KAAKi/C,SAASvL,EAASjE,MAC9BvZ,EAAG7yB,KAAKitB,KAAQkT,EAAUkQ,EAASjE,WACnC,GAAIiE,EAASjE,KAAOjM,EACzB,YAEK6H,GAASnV,EAAG7yB,KAAKgoC,EAAMv2B,OAEhCu2B,EAAQqI,EAAS5D,oBACZzE,EAAQqI,EAASzD,kBAIxB,OAFAhvB,EAAMuC,IAAIoB,IAAM8uB,EAASxD,qBACzBjvB,EAAMuC,IAAIsB,OAAS4uB,EAASvD,wBAA0B9E,EAAM/iC,MAAM/H,OAAS,EACpE0gB,IAIXjhB,KAAK8jD,QAAU,SAAU3hB,EAAUE,EAAQ0iB,GAC5B1jD,MAAT0jD,IAAoBA,EAAQ,KAEhC,IAAInsB,EAAc54B,KAAK44B,YACvB,GAAKA,EAAL,CAEAyJ,EAASA,GAAUriC,KAAKkrB,YAGxB,IAAK,IAAItG,EAFTud,EAAWA,GAAY,EAEEvd,EAAMyd,EAAQzd,IAErC,GADwB,MAApBgU,EAAYhU,KAAcgU,EAAYhU,GAAO5kB,KAAKglD,cAAcpgC,IAC5C,SAApBgU,EAAYhU,GAAhB,CACA,IAAI3D,EAAQjhB,KAAKilD,mBAAmBrgC,GAEpC,GAAI3D,GAASA,EAAM0G,eAAiB1G,EAAMuC,IAAIoB,KAAOyd,GAAUphB,EAAMxa,MAAMme,KAAOud,EAAU,CAC1Fvd,EAAM3D,EAAMuC,IAAIoB,IAEhB,IACE,IAAI4T,EAAOx4B,KAAKi5B,QAAQ,MAAOhY,GAC3BuX,IAAMA,EAAK0pB,iBAAmB6C,GAClC,MAAOvvC,SAKfxV,KAAKklD,YAAc,CACjB,OAAU,EACV,UAAa,EACb,aAAgB,GAElBllD,KAAKmlD,WAAa,YAElBnlD,KAAKolD,aAAe,SAAUv3C,GAC5B,IAAK7N,KAAKklD,YAAYr3C,GAAQ,MAAM,IAAI8lB,MAAM,uBAAyB9lB,EAAQ,IAAMvM,OAAOsI,KAAK5J,KAAKklD,aAAa1iD,KAAK,MAAQ,KAChI,GAAIxC,KAAKmlD,YAAct3C,EAAvB,CACA7N,KAAKmlD,WAAat3C,EACL,UAATA,GAAmB7N,KAAKgkD,SAC5B,IAAI7U,EAAOnvC,KAAKqlD,UAChBrlD,KAAKslD,YAAY,MACjBtlD,KAAKslD,YAAYnW,KAGnBnvC,KAAKslD,YAAc,SAAUC,GACvBvlD,KAAKqlD,WAAaE,IACtBvlD,KAAKqlD,UAAYE,EACjBvlD,KAAK0yB,IAAI,SAAU1yB,KAAKwlD,oBACxBxlD,KAAK0yB,IAAI,kBAAmB1yB,KAAKylD,6BAEjCzlD,KAAKyqB,QAAQ,oBAER86B,GAA+B,UAAnBvlD,KAAKmlD,YAKtBnlD,KAAK44B,YAAc,GACnB54B,KAAKglD,cAAgBO,EAASP,cAAclgD,KAAKygD,EAAUvlD,KAAMA,KAAKmlD,YACtEnlD,KAAKilD,mBAAqBM,EAASN,mBAAmBngD,KAAKygD,EAAUvlD,KAAMA,KAAKmlD,YAChFnlD,KAAKwlD,mBAAqBxlD,KAAK0lD,kBAAkB5gD,KAAK9E,MACtDA,KAAKylD,4BAA8BzlD,KAAK2lD,2BAA2B7gD,KAAK9E,MACxEA,KAAK6hB,GAAG,SAAU7hB,KAAKwlD,oBACvBxlD,KAAK6hB,GAAG,kBAAmB7hB,KAAKylD,8BAV9BzlD,KAAK44B,YAAc,OAavB54B,KAAK84B,uBAAyB,SAAUlU,EAAKghC,GAC3C,IAAIC,EAAK7lD,KAAK44B,YACd,IAAKitB,GAAMD,GAAiBC,EAAGjhC,GAAM,MAAO,GAI5C,IAHA,IACImU,EADAp3B,EAAIijB,EAAM,EAGPjjB,GAAK,GAAG,CACb,IAAI0f,EAAIwkC,EAAGlkD,GAGX,GAFS,MAAL0f,IAAWA,EAAIwkC,EAAGlkD,GAAK3B,KAAKglD,cAAcrjD,IAErC,SAAL0f,EAAc,CAChB,IAAIJ,EAAQjhB,KAAKilD,mBAAmBtjD,GAEpC,GADKo3B,IAAYA,EAAa9X,GAC1BA,GAASA,EAAMuC,IAAIoB,KAAOA,EAAK,MAGrCjjB,IAGF,MAAO,CACLsf,OAAc,IAAPtf,GAAYsf,EACnB8X,WAAYA,IAIhB/4B,KAAK64B,kBAAoB,SAAUjU,EAAKpP,GAEtC,IAAIue,EAAU,CACZ+xB,UAFFtwC,EAAIA,EAAE2M,UAEQpM,SACZ8f,IAAKrgB,EAAEK,SAAWL,EAAEmD,QACpBotC,SAAUvwC,EAAEM,QAId,IAFY9V,KAAKgmD,kBAAkBphC,EAAKmP,GAE5B,CACV,IAAIlnB,EAAK2I,EAAExQ,QAAUwQ,EAAEqV,WACnBhe,GAAM,kBAAkBxJ,KAAKwJ,EAAGC,aAAYD,EAAGC,WAAa,kBAIpE9M,KAAKgmD,kBAAoB,SAAUphC,EAAKmP,GACtC,GAAK/zB,KAAKglD,cAAV,CACA,IAAIlwC,EAAO9U,KAAKglD,cAAcpgC,GAC1B6Z,EAAOz+B,KAAKg5B,QAAQpU,GACpB4V,EAAe,QAAT1lB,GAAkB,EAAI,EAC5B0jB,EAAOx4B,KAAKy4B,UAAU7T,GAAc,IAAT4V,EAAa,EAAIiE,EAAKl+B,OAAQi6B,GAE7D,GAAIhC,EAEF,OADIzE,EAAQ+xB,UAAY/xB,EAAQ8B,IAAK71B,KAAK04B,WAAWF,GAAWx4B,KAAK24B,WAAWH,GACzEA,EAGT,IAAIvX,EAAQjhB,KAAKilD,mBAAmBrgC,GAAK,GAEzC,GAAI3D,IAAUA,EAAM0G,gBAClB6Q,EAAOx4B,KAAKy4B,UAAUxX,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,OAAQ,KAE/C7D,EAAMshB,QAAQ/J,EAAKvX,OAE7B,OADAjhB,KAAK04B,WAAWF,GACTA,EAIX,GAAIzE,EAAQgyB,SAAU,CACpB,IAAIjsC,EAAO9Z,KAAK84B,uBAAuBlU,GAEvC,GAAI9K,EAAKmH,MACP,IAAIkhB,EAAWroB,EAAKmH,MAAMxa,MAAMme,IAAM,EAClCyd,EAASvoB,EAAKmH,MAAMuC,IAAIoB,IAG9B5kB,KAAK8jD,QAAQ3hB,EAAUE,EAAQtO,EAAQ8B,IAAM,IAAQ,QAC5C9B,EAAQ+xB,UACjBzjB,EAASphB,EAAQA,EAAMuC,IAAIoB,IAAM5kB,KAAKkrB,YACtClrB,KAAK8jD,QAAQl/B,EAAM,EAAGyd,EAAQtO,EAAQ8B,IAAM,IAAQ,IAC3C5U,IACL8S,EAAQ8B,MAAK5U,EAAMihC,iBAAmB,KAC1CliD,KAAKi5B,QAAQ,MAAOhY,IAGtB,OAAOA,IAGTjhB,KAAKimD,iBAAmB,SAAUC,GAChC,IAAIthC,EAAM5kB,KAAK2e,UAAUmmB,YAAYlgB,IACrCA,EAAM5kB,KAAKqkD,gBAAgBz/B,GAC3B,IAAI3D,EAAQjhB,KAAKgmD,kBAAkBphC,EAAK,IACxC,IAAI3D,EAAJ,CACA,IAAInH,EAAO9Z,KAAK84B,uBAAuBlU,GAAK,GAG5C,GAFA3D,EAAQnH,EAAKmH,OAASnH,EAAKif,WAEhB,CACTnU,EAAM3D,EAAMxa,MAAMme,IAClB,IAAI4T,EAAOx4B,KAAKy4B,UAAU7T,EAAK5kB,KAAKg5B,QAAQpU,GAAKrkB,OAAQ,GAErDi4B,EACFx4B,KAAK04B,WAAWF,GAEhBx4B,KAAKi5B,QAAQ,MAAOhY,MAK1BjhB,KAAK0lD,kBAAoB,SAAUtmB,GACjC,IAAImE,EAAWnE,EAAM34B,MAAMme,IACvB8W,EAAM0D,EAAM5b,IAAIoB,IAAM2e,EAE1B,GAAY,IAAR7H,EACF17B,KAAK44B,YAAY2K,GAAY,UACxB,GAAoB,UAAhBnE,EAAM3B,OACfz9B,KAAK44B,YAAYxyB,OAAOm9B,EAAU7H,EAAM,EAAG,UACtC,CACL,IAAIx2B,EAAOd,MAAMs3B,EAAM,GACvBx2B,EAAK8nC,QAAQzJ,EAAU,GACvBvjC,KAAK44B,YAAYxyB,OAAOzF,MAAMX,KAAK44B,YAAa1zB,KAIpDlF,KAAK2lD,2BAA6B,SAAUnwC,GAC1C,IAAIyzB,EAAOzzB,EAAEsE,KAETmvB,EAAK6V,OAAS7V,EAAK5uB,MACjBra,KAAK44B,YAAYr4B,OAAS0oC,EAAK6V,OAAO9+C,KAAK44B,YAAYxyB,OAAO6iC,EAAK6V,MAAO9+C,KAAK44B,YAAYr4B,aAOvGyC,IAAI9C,OAAO,iCAAkC,CAAC,UAAW,UAAW,SAAU,qBAAsB,cAAc,SAAU4B,EAAUa,EAASxC,GAC7I,aAEA,IAAIkvC,EAAgBvtC,EAAS,qBAAqButC,cAC9CnN,EAAQpgC,EAAS,YAAYogC,MAmKjCv/B,EAAQwjD,aAjKR,WACEnmD,KAAKwyC,oBAAsB,SAAUtjC,EAAUk3C,GAC7C,GAAuB,GAAnBl3C,EAAS4V,OAAa,OAAO,KACjC,IAAIuhC,EAAmBD,GAAOpmD,KAAKg5B,QAAQ9pB,EAAS0V,KAAKtiB,OAAO4M,EAAS4V,OAAS,GAClF,GAAwB,IAApBuhC,EAAwB,OAAO,KACnC,IAAI/iD,EAAQ+iD,EAAiB/iD,MAAM,yBACnC,OAAKA,EACDA,EAAM,GAAWtD,KAAKsmD,oBAAoBhjD,EAAM,GAAI4L,GAAsBlP,KAAKkyC,oBAAoB5uC,EAAM,GAAI4L,GAD9F,MAIrBlP,KAAKynB,gBAAkB,SAAU9gB,GAC/B,IAEIsa,EAFAwd,EAAOz+B,KAAKg5B,QAAQryB,EAAIie,KACxBizB,GAAS,EAETuO,EAAM3nB,EAAKn8B,OAAOqE,EAAIme,OAAS,GAC/BxhB,EAAQ8iD,GAAOA,EAAI9iD,MAAM,yBAY7B,GAVKA,IACH8iD,EAAM3nB,EAAKn8B,OAAOqE,EAAIme,QACtBne,EAAM,CACJie,IAAKje,EAAIie,IACTE,OAAQne,EAAIme,OAAS,GAEvBxhB,EAAQ8iD,GAAOA,EAAI9iD,MAAM,yBACzBu0C,GAAS,IAGNv0C,EAAO,OAAO,KAEnB,GAAIA,EAAM,GAAI,CAEZ,KADIuhD,EAAa7kD,KAAKsmD,oBAAoBhjD,EAAM,GAAIqD,IACnC,OAAO,KACxBsa,EAAQihB,EAAMuB,WAAW98B,EAAKk+C,GAEzBhN,IACH52B,EAAMuC,IAAIsB,SACV7D,EAAMxa,MAAMqe,UAGd7D,EAAM0D,OAAS1D,EAAMuC,QAChB,CACL,IAAIqhC,EACJ,KADIA,EAAa7kD,KAAKkyC,oBAAoB5uC,EAAM,GAAIqD,IACnC,OAAO,KACxBsa,EAAQihB,EAAMuB,WAAWohB,EAAYl+C,GAEhCkxC,IACH52B,EAAMxa,MAAMqe,SACZ7D,EAAMuC,IAAIsB,UAGZ7D,EAAM0D,OAAS1D,EAAMxa,MAGvB,OAAOwa,GAGTjhB,KAAKumD,UAAY,CACf,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGPvmD,KAAKkyC,oBAAsB,SAAU2B,EAAS3kC,EAAUs3C,GACtD,IAAIC,EAAczmD,KAAKumD,UAAU1S,GAC7BkR,EAAQ,EACRrR,EAAW,IAAIrE,EAAcrvC,KAAMkP,EAAS0V,IAAK1V,EAAS4V,QAC1DumB,EAAQqI,EAASzD,kBAErB,GADK5E,IAAOA,EAAQqI,EAAS3D,eACxB1E,EAAL,CAEKmb,IACHA,EAAS,IAAIpjD,OAAO,QAAUioC,EAAMv2B,KAAKpS,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAAUA,QAAQ,cAAe,uBAAyB,OAM3I,IAHA,IAAIgkD,EAAax3C,EAAS4V,OAAS4uB,EAASvD,wBAA0B,EAClE7nC,EAAQ+iC,EAAM/iC,QAEL,CACX,KAAOo+C,GAAc,GAAG,CACtB,IAAIN,EAAM99C,EAAMhG,OAAOokD,GAEvB,GAAIN,GAAOK,GAGT,GAAa,IAFb1B,GAAS,GAGP,MAAO,CACLngC,IAAK8uB,EAASxD,qBACdprB,OAAQ4hC,EAAahT,EAASvD,8BAGzBiW,GAAOvS,IAChBkR,GAAS,GAGX2B,GAAc,EAGhB,GACErb,EAAQqI,EAAS5D,qBACVzE,IAAUmb,EAAOnjD,KAAKgoC,EAAMv2B,OAErC,GAAa,MAATu2B,EAAe,MAEnBqb,GADAp+C,EAAQ+iC,EAAM/iC,OACK/H,OAAS,EAG9B,OAAO,OAGTP,KAAKsmD,oBAAsB,SAAUzS,EAAS3kC,EAAUs3C,GACtD,IAAIG,EAAiB3mD,KAAKumD,UAAU1S,GAChCkR,EAAQ,EACRrR,EAAW,IAAIrE,EAAcrvC,KAAMkP,EAAS0V,IAAK1V,EAAS4V,QAC1DumB,EAAQqI,EAASzD,kBAErB,GADK5E,IAAOA,EAAQqI,EAAS3D,eACxB1E,EAAL,CAEKmb,IACHA,EAAS,IAAIpjD,OAAO,QAAUioC,EAAMv2B,KAAKpS,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAAUA,QAAQ,sBAAuB,uBAAyB,OAKnJ,IAFA,IAAIgkD,EAAax3C,EAAS4V,OAAS4uB,EAASvD,0BAE/B,CAIX,IAHA,IAAI7nC,EAAQ+iC,EAAM/iC,MACds+C,EAAct+C,EAAM/H,OAEjBmmD,EAAaE,GAAa,CAC/B,IAAIR,EAAM99C,EAAMhG,OAAOokD,GAEvB,GAAIN,GAAOO,GAGT,GAAa,IAFb5B,GAAS,GAGP,MAAO,CACLngC,IAAK8uB,EAASxD,qBACdprB,OAAQ4hC,EAAahT,EAASvD,8BAGzBiW,GAAOvS,IAChBkR,GAAS,GAGX2B,GAAc,EAGhB,GACErb,EAAQqI,EAAS3D,oBACV1E,IAAUmb,EAAOnjD,KAAKgoC,EAAMv2B,OAErC,GAAa,MAATu2B,EAAe,MACnBqb,EAAa,EAGf,OAAO,WAMb1jD,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,cAAe,eAAgB,kBAAmB,aAAc,wBAAyB,gBAAiB,gBAAiB,YAAa,eAAgB,2BAA4B,uBAAwB,2BAA4B,mCAAmC,SAAU4B,EAAUa,EAASxC,GACtW,aAEA,IAAIoR,EAAMzP,EAAS,aACf0a,EAAO1a,EAAS,cAChBo8B,EAAcp8B,EAAS,iBAAiBo8B,YACxCvH,EAAS70B,EAAS,YAClB4vB,EAAe5vB,EAAS,uBAAuB4vB,aAC/C2S,EAAYviC,EAAS,eAAeuiC,UACpCwiB,EAAW/kD,EAAS,eAAey0C,KACnCrU,EAAQpgC,EAAS,WAAWogC,MAC5BqZ,EAAWz5C,EAAS,cAAcy5C,SAClC0C,EAAsBn8C,EAAS,0BAA0Bm8C,oBACzDiB,EAAkBp9C,EAAS,sBAAsBo9C,gBAEjD4H,EAAc,SAASA,EAAY/pC,EAAMoyB,GAC3CnvC,KAAK+mD,aAAe,GACpB/mD,KAAKgnD,aAAe,GACpBhnD,KAAKinD,cAAgB,GACrBjnD,KAAKknD,aAAe,GACpBlnD,KAAKmnD,UAAY,EACjBnnD,KAAKonD,aAAc,EACnBpnD,KAAK0iD,UAAY,GACjB1iD,KAAK6C,GAAK,aAAcikD,EAAYO,KAEpCrnD,KAAK0iD,UAAUlhD,SAAW,WACxB,OAAOxB,KAAKwC,KAAK,OAGnBxC,KAAK6hB,GAAG,aAAc7hB,KAAKsnD,aAAaxiD,KAAK9E,OAC7CA,KAAKs6C,UAAYt6C,KAAKm/B,SAASr6B,KAAK9E,MACjB,iBAAR+c,GAAqBA,EAAKic,UAASjc,EAAO,IAAIw+B,EAASx+B,IAClE/c,KAAKopC,aAAe,IAAIlL,EAAYl+B,MACpCA,KAAK6+C,YAAY9hC,GACjB/c,KAAK2e,UAAY,IAAI0lB,EAAUrkC,MAC/B22B,EAAO1C,aAAaj0B,MACpBA,KAAKunD,QAAQpY,GAEbxY,EAAOlM,QAAQ,UAAWzqB,OAG5B8mD,EAAYO,KAAO,EACnB,WACE91C,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK6+C,YAAc,SAAUvyC,GACvBtM,KAAKsM,KAAKtM,KAAKsM,IAAI8I,eAAe,SAAUpV,KAAKs6C,WACrDt6C,KAAKsM,IAAMA,EACXA,EAAIuV,GAAG,SAAU7hB,KAAKs6C,WAClBt6C,KAAKwnD,aAAaxnD,KAAKwnD,YAAY3I,YAAY7+C,KAAKskC,eACxDtkC,KAAKynD,eAGPznD,KAAKskC,YAAc,WACjB,OAAOtkC,KAAKsM,KAGdtM,KAAK0nD,eAAiB,SAAU3oB,GAC9B,IAAKA,EAGH,OAFA/+B,KAAK0/B,aAAe,QACpB1/B,KAAKw/B,gBAAkB,IAIzB,IAAI59B,EAAI5B,KAAK0/B,aAAan/B,OACtBoB,EAAI3B,KAAKy/B,kBAAkBz/B,KAAK0/B,aAAcX,GAAU,EAExDn9B,EAAID,IACN3B,KAAK0/B,aAAat5B,OAAOzE,EAAGC,GAC5B5B,KAAKw/B,gBAAgBp5B,OAAOzE,EAAGC,KAInC5B,KAAKy/B,kBAAoB,SAAUkoB,EAAYlnC,GAI7C,IAHA,IAAImnC,EAAM,EACNpsB,EAAKmsB,EAAWpnD,OAAS,EAEtBqnD,GAAOpsB,GAAI,CAChB,IAAIqsB,EAAMD,EAAMpsB,GAAM,EAClBna,EAAIsmC,EAAWE,GACnB,GAAIpnC,EAAMY,EAAGumC,EAAMC,EAAM,MAAO,MAAIpnC,EAAMY,GAAqB,OAAOwmC,EAAzBrsB,EAAKqsB,EAAM,GAG1D,OAAOD,EAAM,GAGf5nD,KAAKynD,YAAc,WACjBznD,KAAK0jD,WAAY,EACjB1jD,KAAKggC,UAAY,GACjBhgC,KAAK8nD,gBAAkB,GACvB9nD,KAAK0nD,eAAe,GAChB1nD,KAAKwnD,aAAaxnD,KAAKwnD,YAAY/gD,MAAM,IAG/CzG,KAAKsnD,aAAe,SAAU9xC,GAC5B,IAAIgjB,EAAOhjB,EAAEsE,KACb9Z,KAAK0nD,eAAelvB,EAAK/xB,MAAMme,MAGjC5kB,KAAKm/B,SAAW,SAAUC,GACxBp/B,KAAK0jD,WAAY,EACjB1jD,KAAKopC,aAAajK,SAASC,GAC3Bp/B,KAAK0nD,eAAetoB,EAAM34B,MAAMme,KAChC,IAAImjC,EAAe/nD,KAAKgoD,4BAA4B5oB,GAE/Cp/B,KAAKioD,YAAajoD,KAAK4hB,cAAiBwd,EAAM8oB,SACjDloD,KAAKmoD,WAAWpmD,KAAKq9B,GAEjB2oB,GAAuC,GAAvBA,EAAaxnD,QAC/BP,KAAKooD,YAAYrmD,KAAK,CACpB07B,OAAQ,cACRmiB,MAAOmI,IAIX/nD,KAAKqoD,mBAAmBpsC,YAG1Bjc,KAAKwnD,aAAexnD,KAAKwnD,YAAYxI,gBAAgB5f,GAErDp/B,KAAKyqB,QAAQ,SAAU2U,IAGzBp/B,KAAK27C,SAAW,SAAU5+B,GACxB/c,KAAKsM,IAAIqvC,SAAS5+B,GAClB/c,KAAK2e,UAAU6mB,OAAO,EAAG,GACzBxlC,KAAK0nD,eAAe,GACpB1nD,KAAKsoD,QAAU,GACftoD,KAAKmoD,WAAa,GAClBnoD,KAAKooD,YAAc,GACnBpoD,KAAKuoD,eAAevoD,KAAK4hB,cACzB5hB,KAAKwoD,iBAAiBC,SAGxBzoD,KAAK47C,SAAW57C,KAAKwB,SAAW,WAC9B,OAAOxB,KAAKsM,IAAIsvC,YAGlB57C,KAAK0oD,aAAe,WAClB,OAAO1oD,KAAK2e,WAGd3e,KAAKi/C,SAAW,SAAUr6B,GACxB,OAAO5kB,KAAKwnD,YAAYvI,SAASr6B,IAGnC5kB,KAAK2vC,UAAY,SAAU/qB,GACzB,OAAO5kB,KAAKwnD,YAAY7X,UAAU/qB,IAGpC5kB,KAAK4vC,WAAa,SAAUhrB,EAAKE,GAC/B,IACIumB,EADAY,EAASjsC,KAAKwnD,YAAY7X,UAAU/qB,GAEpCvD,EAAI,EAER,GAAc,MAAVyD,EAAgB,CAClB,IAAInjB,EAAIsqC,EAAO1rC,OAAS,EACxB8gB,EAAIrhB,KAAKg5B,QAAQpU,GAAKrkB,YAEtB,IAASoB,EAAI,EAAGA,EAAIsqC,EAAO1rC,WACzB8gB,GAAK4qB,EAAOtqC,GAAG2G,MAAM/H,SACZukB,GAFwBnjB,KAOrC,OADA0pC,EAAQY,EAAOtqC,KAEf0pC,EAAM5mC,MAAQ9C,EACd0pC,EAAM5kC,MAAQ4a,EAAIgqB,EAAM/iC,MAAM/H,OACvB8qC,GAHY,MAMrBrrC,KAAKuoD,eAAiB,SAAUI,GAO9B,GANA3oD,KAAK4hB,aAAe+mC,EACpB3oD,KAAKsoD,QAAU,GACftoD,KAAKmoD,WAAa,GAClBnoD,KAAKooD,YAAc,GACfpoD,KAAKqoD,oBAAoBroD,KAAKqoD,mBAAmBrsC,SAEjD2sC,EAAa,CACf,IAAIzgD,EAAOlI,KAEXA,KAAK4oD,uBAAyB,WAC5B1gD,EAAKmgD,mBAAmBrsC,SAEpB9T,EAAKkgD,YAAY7nD,SACnB2H,EAAKogD,QAAQvmD,KAAK,CAChB8mD,MAAO,OACPvL,OAAQp1C,EAAKkgD,cAEflgD,EAAKkgD,YAAc,IAGjBlgD,EAAKigD,WAAW5nD,SAClB2H,EAAKogD,QAAQvmD,KAAK,CAChB8mD,MAAO,MACPvL,OAAQp1C,EAAKigD,aAEfjgD,EAAKigD,WAAa,IAGhBjgD,EAAKogD,QAAQ/nD,OAAS,GACxBooD,EAAYG,QAAQ,CAClBrrB,OAAQ,YACRv4B,KAAM,CAACgD,EAAKogD,QAASpgD,GACrB6kC,MAAO7kC,EAAK6gD,kBAIhB7gD,EAAK6gD,iBAAkB,EACvB7gD,EAAKogD,QAAU,IAGjBtoD,KAAKqoD,mBAAqB7rC,EAAKL,YAAYnc,KAAK4oD,0BAIpD5oD,KAAKghB,cAAgB,WACfhhB,KAAK4oD,wBAAwB5oD,KAAK4oD,0BAGxC5oD,KAAKgpD,oBAAsB,CACzBroC,KAAM,aACNsoC,KAAM,aACNR,MAAO,cAGTzoD,KAAKwoD,eAAiB,WACpB,OAAOxoD,KAAK4hB,cAAgB5hB,KAAKgpD,qBAGnChpD,KAAK2yC,aAAe,WAClB,OAAI3yC,KAAKq3C,iBACA76B,EAAK/B,aAAa,IAAKza,KAAK0nC,cAE5B,MAIX1nC,KAAKkpD,eAAiB,SAAUzoC,GAC9BzgB,KAAK+yB,UAAU,cAAetS,IAGhCzgB,KAAKq3C,eAAiB,WACpB,OAAOr3C,KAAKmpD,eAAiBnpD,KAAK6yC,MAAMuW,iBAG1CppD,KAAKqpD,WAAa,SAAU7hB,GAC1BxnC,KAAK+yB,UAAU,UAAWyU,IAG5BxnC,KAAK0nC,WAAa,WAChB,OAAO1nC,KAAKspD,UAGdtpD,KAAKynC,UAAY,SAAUv4B,GACzB,OAAOlP,KAAKmpD,cAAgBj6C,EAAS4V,OAAS9kB,KAAKspD,UAAa,GAGlEtpD,KAAKupD,0BAA4B,SAAUC,GACzCxpD,KAAK+yB,UAAU,yBAA0By2B,IAG3CxpD,KAAK2nC,0BAA4B,WAC/B,OAAO3nC,KAAKypD,yBAGdzpD,KAAK0pD,YAAa,EAElB1pD,KAAK2pD,aAAe,SAAUC,GAC5B5pD,KAAK+yB,UAAU,YAAa62B,IAG9B5pD,KAAK6pD,aAAe,WAClB,OAAO7pD,KAAK0pD,YAGd1pD,KAAK8pD,gBAAkB,WACrB9pD,KAAK2pD,cAAc3pD,KAAK0pD,aAG1B1pD,KAAK+pD,oBAAsB,SAAUnlC,EAAK9X,GACnC9M,KAAKgnD,aAAapiC,KAAM5kB,KAAKgnD,aAAapiC,GAAO,IACtD5kB,KAAKgnD,aAAapiC,IAAQ,IAAM9X,EAEhC9M,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKgqD,uBAAyB,SAAUplC,EAAK9X,GAC3C9M,KAAKgnD,aAAapiC,IAAQ5kB,KAAKgnD,aAAapiC,IAAQ,IAAIliB,QAAQ,IAAMoK,EAAW,IAEjF9M,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKiqD,eAAiB,WACpB,OAAOjqD,KAAK+mD,cAGd/mD,KAAKkqD,eAAiB,SAAUjhB,GAC9BjpC,KAAK+mD,aAAe,GAEpB,IAAK,IAAIplD,EAAI,EAAGA,EAAIsnC,EAAK1oC,OAAQoB,IAC/B3B,KAAK+mD,aAAa9d,EAAKtnC,IAAM,iBAG/B3B,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKmqD,iBAAmB,WACtBnqD,KAAK+mD,aAAe,GAEpB/mD,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKoqD,cAAgB,SAAUxlC,EAAK9X,QAChBzL,IAAdyL,IAAyBA,EAAY,kBACrCA,EAAW9M,KAAK+mD,aAAaniC,GAAO9X,SAAsB9M,KAAK+mD,aAAaniC,GAEhF5kB,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKqqD,gBAAkB,SAAUzlC,UACxB5kB,KAAK+mD,aAAaniC,GAEzB5kB,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAK6tB,UAAY,SAAU5M,EAAOk+B,EAAOrqC,EAAMw1C,GAC7C,IAAIznD,EAAK7C,KAAKmnD,YACVoD,EAAS,CACXtpC,MAAOA,EACPnM,KAAMA,GAAQ,OACd0M,SAAyB,mBAAR1M,EAAqBA,EAAO,KAC7CqqC,MAAOA,EACPmL,UAAWA,EACXznD,GAAIA,GAaN,OAVIynD,GACFtqD,KAAKinD,cAAcpkD,GAAM0nD,EAEzBvqD,KAAKyqB,QAAQ,uBAEbzqB,KAAKknD,aAAarkD,GAAM0nD,EAExBvqD,KAAKyqB,QAAQ,qBAGR5nB,GAGT7C,KAAKwqD,iBAAmB,SAAUD,EAAQD,GACxC,GAAKC,EAAOhL,OAAZ,CACA,IAAI18C,EAAK7C,KAAKmnD,YAcd,OAbAoD,EAAO1nD,GAAKA,EACZ0nD,EAAOD,UAAYA,EAEfA,GACFtqD,KAAKinD,cAAcpkD,GAAM0nD,EAEzBvqD,KAAKyqB,QAAQ,uBAEbzqB,KAAKknD,aAAarkD,GAAM0nD,EAExBvqD,KAAKyqB,QAAQ,qBAGR8/B,IAGTvqD,KAAKquB,aAAe,SAAUo8B,GAC5B,IAAIF,EAASvqD,KAAKinD,cAAcwD,IAAazqD,KAAKknD,aAAauD,GAC/D,GAAKF,EAAL,CACA,IAAIG,EAAUH,EAAOD,QAAUtqD,KAAKinD,cAAgBjnD,KAAKknD,aAErDqD,WACKG,EAAQD,GAEfzqD,KAAKyqB,QAAQ8/B,EAAOD,QAAU,oBAAsB,uBAIxDtqD,KAAK2qD,WAAa,SAAUL,GAC1B,OAAOA,EAAUtqD,KAAKinD,cAAgBjnD,KAAKknD,cAG7ClnD,KAAK4qD,UAAY,SAAU10B,GACzB,IAAKl2B,KAAK6qD,iBAAkB,CAC1B,IAAID,EAAY,IAAI1L,EAAgB,KAAM,oBAAqB,QAC/Dl/C,KAAK6qD,iBAAmB7qD,KAAKwqD,iBAAiBI,GAGhD5qD,KAAK6qD,iBAAiBzL,UAAUlpB,IAGlCl2B,KAAK8qD,eAAiB,SAAU3oB,EAAUE,EAAQ8c,EAAOmL,GAClC,iBAAVjoB,IACT8c,EAAQ9c,EACRA,EAASF,GAGNgd,IAAOA,EAAQ,YACpB,IAAIl+B,EAAQ,IAAIihB,EAAMC,EAAU,EAAGE,EAAQ6U,EAAAA,GAE3C,OADAj2B,EAAMpe,GAAK7C,KAAK6tB,UAAU5M,EAAOk+B,EAAO,WAAYmL,GAC7CrpC,GAGTjhB,KAAK+qD,eAAiB,SAAUC,GAC9BhrD,KAAKirB,aAAe+/B,EAEpBhrD,KAAKyqB,QAAQ,mBAAoB,KAGnCzqB,KAAKirD,eAAiB,WACpB,OAAOjrD,KAAKirB,cAAgB,IAG9BjrB,KAAKkrD,iBAAmB,WACtBlrD,KAAK+qD,eAAe,KAGtB/qD,KAAKg8C,eAAiB,SAAUj/B,GAC9B,IAAIzZ,EAAQyZ,EAAKzZ,MAAM,gBAGrBtD,KAAKi8C,aADH34C,EACkBA,EAAM,GAEN,MAIxBtD,KAAK0nB,aAAe,SAAU9C,EAAKE,GACjC,IAAI2Z,EAAOz+B,KAAKg5B,QAAQpU,GACpBumC,GAAU,EAGd,GAFIrmC,EAAS,IAAGqmC,IAAY1sB,EAAKn8B,OAAOwiB,EAAS,GAAGxhB,MAAMtD,KAAKwoC,UAC1D2iB,IAASA,IAAY1sB,EAAKn8B,OAAOwiB,GAAQxhB,MAAMtD,KAAKwoC,UACrD2iB,EAAS,IAAIj1B,EAAKl2B,KAAKwoC,aAAa,GAAI,QAAQnlC,KAAKo7B,EAAKl8B,MAAMuiB,EAAS,EAAGA,EAAS,IAASoR,EAAK,UAAcA,EAAKl2B,KAAKuoC,WAC/H,IAAI9hC,EAAQqe,EAEZ,GAAIre,EAAQ,EAAG,CACb,GACEA,UACOA,GAAS,GAAKg4B,EAAKn8B,OAAOmE,GAAOnD,MAAM4yB,IAEhDzvB,IAKF,IAFA,IAAI+c,EAAMsB,EAEHtB,EAAMib,EAAKl+B,QAAUk+B,EAAKn8B,OAAOkhB,GAAKlgB,MAAM4yB,IACjD1S,IAGF,OAAO,IAAI0e,EAAMtd,EAAKne,EAAOme,EAAKpB,IAGpCxjB,KAAK+mC,cAAgB,SAAUniB,EAAKE,GAIlC,IAHA,IAAIsmC,EAAYprD,KAAK0nB,aAAa9C,EAAKE,GACnC2Z,EAAOz+B,KAAKg5B,QAAQoyB,EAAU5nC,IAAIoB,KAE/B6Z,EAAKn8B,OAAO8oD,EAAU5nC,IAAIsB,QAAQxhB,MAAM,UAC7C8nD,EAAU5nC,IAAIsB,QAAU,EAG1B,OAAOsmC,GAGTprD,KAAKm8C,eAAiB,SAAUC,GAC9Bp8C,KAAKsM,IAAI6vC,eAAeC,IAG1Bp8C,KAAKq8C,eAAiB,WACpB,OAAOr8C,KAAKsM,IAAI+vC,kBAGlBr8C,KAAKqrD,aAAe,SAAUC,GAC5BtrD,KAAK+yB,UAAU,YAAau4B,IAG9BtrD,KAAKurD,aAAe,WAClB,OAAOvrD,KAAKwrD,YAGdxrD,KAAKyrD,kBAAoB,SAAUj2C,GACjC,IAAIyzB,EAAOzzB,EAAEsE,KACb9Z,KAAKwnD,YAAY/gD,MAAMwiC,EAAK6V,OAE5B9+C,KAAKyqB,QAAQ,kBAAmBjV,IAGlCxV,KAAKg5C,OAAS,GACdh5C,KAAK6yC,MAAQ,KACb7yC,KAAK0rD,QAAU,KAEf1rD,KAAKunD,QAAU,SAAUpY,EAAMtwB,GAC7B,GAAIswB,GAAwB,iBAATA,EAAmB,CACpC,GAAIA,EAAKsH,aAAc,OAAOz2C,KAAK2rD,cAAcxc,GACjD,IAAIpb,EAAUob,EACV/d,EAAO2C,EAAQ3C,UAEnBA,EAAO+d,GAAQ,gBAKjB,GAFKnvC,KAAKg5C,OAAO,mBAAkBh5C,KAAKg5C,OAAO,iBAAmB,IAAI6N,GAElE7mD,KAAKg5C,OAAO5nB,KAAU2C,EAGxB,OAFA/zB,KAAK2rD,cAAc3rD,KAAKg5C,OAAO5nB,SAC/BvS,GAAMA,KAIR7e,KAAK0rD,QAAUt6B,EACfuF,EAAOL,WAAW,CAAC,OAAQlF,GAAO,SAAUqE,GAC1C,GAAIz1B,KAAK0rD,UAAYt6B,EAAM,OAAOvS,GAAMA,IAEpC7e,KAAKg5C,OAAO5nB,KAAU2C,EACxB/zB,KAAK2rD,cAAc3rD,KAAKg5C,OAAO5nB,IACtBqE,GAAKA,EAAE8gB,OAChB9gB,EAAI,IAAIA,EAAE8gB,KAAKxiB,GAEVA,IACH/zB,KAAKg5C,OAAO5nB,GAAQqE,EACpBA,EAAEwkB,IAAM7oB,GAGVpxB,KAAK2rD,cAAcl2B,IAGrB5W,GAAMA,KACN/Z,KAAK9E,OACFA,KAAK6yC,OAAO7yC,KAAK2rD,cAAc3rD,KAAKg5C,OAAO,kBAAkB,IAGpEh5C,KAAK2rD,cAAgB,SAAUxc,EAAMyc,GAEnC,GADKA,IAAgB5rD,KAAK0rD,QAAUvc,EAAK8K,KACrCj6C,KAAK6yC,QAAU1D,EAAnB,CACAnvC,KAAK6yC,MAAQ1D,EACbnvC,KAAK6rD,cACD7rD,KAAKwrD,YAAYxrD,KAAK8rD,eAC1B,IAAI5N,EAAY/O,EAAKsH,eAErB,QAAmCp1C,IAA/B68C,EAAUnpC,iBAAgC,CAC5C,IAAI02C,EAAoBzrD,KAAKyrD,kBAAkB3mD,KAAK9E,MACpDk+C,EAAUnpC,iBAAiB,SAAU02C,GAGvC,GAAKzrD,KAAKwnD,YASRxnD,KAAKwnD,YAAY5I,aAAaV,OATT,CACrBl+C,KAAKwnD,YAAc,IAAIvJ,EAAoBC,GAE3C,IAAI7hC,EAAQrc,KAEZA,KAAKwnD,YAAYzyC,iBAAiB,UAAU,SAAUS,GACpD6G,EAAMoO,QAAQ,kBAAmBjV,MAMrCxV,KAAKwnD,YAAY3I,YAAY7+C,KAAKskC,eAClCtkC,KAAKwoC,QAAU2G,EAAK3G,QACpBxoC,KAAKuoC,WAAa4G,EAAK5G,WAElBqjB,IACCzc,EAAK4c,iBAAiB5c,EAAK4c,gBAAgB/rD,MAC/CA,KAAKkzB,SAAS84B,WAAWtiD,IAAIjI,KAAKzB,KAAMA,KAAKisD,aAC7CjsD,KAAKslD,YAAYnW,EAAK+c,cACtBlsD,KAAKwnD,YAAY/gD,MAAM,GAEvBzG,KAAKkiB,MAAM,iBAIfliB,KAAK6rD,YAAc,WACb7rD,KAAKq+C,UACPr+C,KAAKq+C,QAAQ8N,YACbnsD,KAAKq+C,QAAU,OAInBr+C,KAAK8rD,aAAe,WAClB,IACE9rD,KAAKq+C,QAAUr+C,KAAK6yC,MAAMiG,aAAa94C,MACvC,MAAOwV,GACPmhB,EAAOtD,KAAK,wBAAyB7d,GACrCxV,KAAKq+C,QAAU,OAInBr+C,KAAKosD,QAAU,WACb,OAAOpsD,KAAK6yC,OAGd7yC,KAAKqsD,WAAa,EAElBrsD,KAAKssD,aAAe,SAAUx8C,GACxB9P,KAAKqsD,aAAev8C,GAAay8C,MAAMz8C,KAC3C9P,KAAKqsD,WAAav8C,EAElB9P,KAAKyqB,QAAQ,kBAAmB3a,KAGlC9P,KAAKwsD,aAAe,WAClB,OAAOxsD,KAAKqsD,YAGdrsD,KAAKysD,YAAc,EAEnBzsD,KAAK0sD,cAAgB,SAAU38C,GACzB/P,KAAKysD,cAAgB18C,GAAcw8C,MAAMx8C,KAC7C/P,KAAKysD,YAAc18C,EAEnB/P,KAAKyqB,QAAQ,mBAAoB1a,KAGnC/P,KAAK2sD,cAAgB,WACnB,OAAO3sD,KAAKysD,aAGdzsD,KAAK4sD,eAAiB,WAEpB,OADA5sD,KAAK6sD,gBACD7sD,KAAKupC,YAAoB1iC,KAAKC,IAAI9G,KAAK8sD,wBAAyB9sD,KAAK+sD,aAClE/sD,KAAK+sD,aAGd/sD,KAAK8sD,sBAAwB,WAC3B,GAA6B,MAAzB9sD,KAAKgtD,iBAA0B,OAAOhtD,KAAKgtD,iBAC/C,IAAIn+C,EAAQ,EAIZ,OAHA7O,KAAKupC,YAAYzhC,SAAQ,SAAUmlD,GAC7BA,GAAKA,EAAEF,YAAcl+C,IAAOA,EAAQo+C,EAAEF,gBAErC/sD,KAAKktD,gBAAkBr+C,GAGhC7O,KAAK6sD,cAAgB,SAAUM,GAC7B,GAAIntD,KAAK0jD,WAAayJ,EAAO,CAE3B,GADAntD,KAAK0jD,WAAY,EACb1jD,KAAK8/B,aAAc,OAAO9/B,KAAK+sD,YAAc/sD,KAAKotD,WAStD,IARA,IAAI/tB,EAAQr/B,KAAKsM,IAAIuvC,cACjByD,EAAQt/C,KAAK8nD,gBACbuF,EAAoB,EACpBC,EAAY,EACZnmB,EAAWnnC,KAAK0iD,UAAU4K,GAC1BC,EAAYpmB,EAAWA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAC5Cxb,EAAM2D,EAAM9+B,OAEPoB,EAAI,EAAGA,EAAI+5B,EAAK/5B,IAAK,CAC5B,GAAIA,EAAI4rD,EAAW,CAEjB,IADA5rD,EAAIwlC,EAAS3jB,IAAIoB,IAAM,IACd8W,EAAK,MAEd6xB,GADApmB,EAAWnnC,KAAK0iD,UAAU4K,MACHnmB,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAG9B,MAAZoI,EAAM39C,KAAY29C,EAAM39C,GAAK3B,KAAKwtD,sBAAsBnuB,EAAM19B,IAAI,IAClE29C,EAAM39C,GAAK0rD,IAAmBA,EAAoB/N,EAAM39C,IAG9D3B,KAAK+sD,YAAcM,IAIvBrtD,KAAKg5B,QAAU,SAAUpU,GACvB,OAAO5kB,KAAKsM,IAAI0sB,QAAQpU,IAG1B5kB,KAAKu8C,SAAW,SAAUhZ,EAAUC,GAClC,OAAOxjC,KAAKsM,IAAIiwC,SAAShZ,EAAUC,IAGrCxjC,KAAKkrB,UAAY,WACf,OAAOlrB,KAAKsM,IAAI4e,aAGlBlrB,KAAK+uB,aAAe,SAAU9N,GAC5B,OAAOjhB,KAAKsM,IAAIyiB,aAAa9N,GAASjhB,KAAK2e,UAAUmC,aAGvD9gB,KAAKgH,OAAS,SAAUkI,EAAU6N,GAChC,OAAO/c,KAAKsM,IAAItF,OAAOkI,EAAU6N,IAGnC/c,KAAKkH,OAAS,SAAU+Z,GACtB,OAAOjhB,KAAKsM,IAAIpF,OAAO+Z,IAGzBjhB,KAAK48C,gBAAkB,SAAUrZ,EAAUC,GACzC,OAAOxjC,KAAKsM,IAAIswC,gBAAgBrZ,EAAUC,IAG5CxjC,KAAKytD,YAAc,SAAUnQ,EAAQoQ,GACnC,GAAKpQ,EAAO/8C,OAAZ,CACAP,KAAKioD,WAAY,EAGjB,IAFA,IAAI0F,EAAgB,KAEXhsD,EAAI27C,EAAO/8C,OAAS,GAAS,GAANoB,EAASA,IAAK,CAC5C,IAAIy9B,EAAQke,EAAO37C,GAEA,OAAfy9B,EAAMypB,OACR7oD,KAAKsM,IAAIixC,aAAane,EAAMke,QAC5BqQ,EAAgB3tD,KAAK4tD,kBAAkBxuB,EAAMke,QAAQ,EAAMqQ,IAE3DvuB,EAAMke,OAAOx1C,SAAQ,SAAU+lD,GAC7B7tD,KAAK2jD,SAASkK,EAAUjO,SACvB5/C,MAMP,OAFAA,KAAKioD,WAAY,EACjB0F,GAAiB3tD,KAAKonD,cAAgBsG,GAAc1tD,KAAK2e,UAAUF,kBAAkBkvC,GAC9EA,IAGT3tD,KAAK8tD,YAAc,SAAUxQ,EAAQoQ,GACnC,GAAKpQ,EAAO/8C,OAAZ,CACAP,KAAKioD,WAAY,EAGjB,IAFA,IAAI0F,EAAgB,KAEXhsD,EAAI,EAAGA,EAAI27C,EAAO/8C,OAAQoB,IAAK,CACtC,IAAIy9B,EAAQke,EAAO37C,GAEA,OAAfy9B,EAAMypB,QACR7oD,KAAKsM,IAAI+wC,YAAYje,EAAMke,QAC3BqQ,EAAgB3tD,KAAK4tD,kBAAkBxuB,EAAMke,QAAQ,EAAOqQ,IAMhE,OAFA3tD,KAAKioD,WAAY,EACjB0F,GAAiB3tD,KAAKonD,cAAgBsG,GAAc1tD,KAAK2e,UAAUF,kBAAkBkvC,GAC9EA,IAGT3tD,KAAK+tD,cAAgB,SAAUC,GAC7BhuD,KAAKonD,YAAc4G,GAGrBhuD,KAAK4tD,kBAAoB,SAAUtQ,EAAQ2Q,EAAQN,GACjD,SAASlQ,EAASre,GAChB,OAAO6uB,EAA0B,WAAjB7uB,EAAM3B,OAAuC,WAAjB2B,EAAM3B,OAGpD,IACIxc,EAAO65B,EADP1b,EAAQke,EAAO,GAIfG,EAASre,GACXne,EAAQihB,EAAMuB,WAAWrE,EAAM34B,MAAO24B,EAAM5b,KAG5CvC,EAAQihB,EAAMuB,WAAWrE,EAAM34B,MAAO24B,EAAM34B,OAI9C,IAAK,IAAI9E,EAAI,EAAGA,EAAI27C,EAAO/8C,OAAQoB,IAG7B87C,EAFJre,EAAQke,EAAO37C,KAGbm5C,EAAQ1b,EAAM34B,OAEiC,GAA3Cwa,EAAMuhB,QAAQsY,EAAMl2B,IAAKk2B,EAAMh2B,SACjC7D,EAAM8hB,SAAS+X,GAGjBA,EAAQ1b,EAAM5b,IAEgC,GAA1CvC,EAAMuhB,QAAQsY,EAAMl2B,IAAKk2B,EAAMh2B,SACjC7D,EAAM+hB,OAAO8X,IAGK,IAEpBA,EAAQ1b,EAAM34B,OAEiC,GAA3Cwa,EAAMuhB,QAAQsY,EAAMl2B,IAAKk2B,EAAMh2B,UACjC7D,EAAQihB,EAAMuB,WAAWrE,EAAM34B,MAAO24B,EAAM34B,SAG1B,GAIxB,GAAqB,MAAjBknD,EAAuB,CACqC,IAA1DzrB,EAAMgC,cAAcypB,EAAclnD,MAAOwa,EAAMxa,SACjDknD,EAAclnD,MAAMqe,QAAU7D,EAAMuC,IAAIsB,OAAS7D,EAAMxa,MAAMqe,OAC7D6oC,EAAcnqC,IAAIsB,QAAU7D,EAAMuC,IAAIsB,OAAS7D,EAAMxa,MAAMqe,QAG7D,IAAID,EAAM8oC,EAAclrB,aAAaxhB,GAE1B,GAAP4D,EACF5D,EAAM8hB,SAAS4qB,EAAclnD,QACZ,GAARoe,GACT5D,EAAM+hB,OAAO2qB,EAAcnqC,KAI/B,OAAOvC,GAGTjhB,KAAK0C,QAAU,SAAUue,EAAOlE,GAC9B,OAAO/c,KAAKsM,IAAI5J,QAAQue,EAAOlE,IAGjC/c,KAAK0vB,SAAW,SAAUw+B,EAAWC,EAAYrzC,GAC/C,IAAIiC,EAAO/c,KAAK+uB,aAAam/B,GACzBtO,EAAQ5/C,KAAKwiD,gBAAgB0L,GAC7BE,EAAUlsB,EAAMuB,WAAW0qB,EAAYA,GAE3C,IAAKrzC,EAAM,CACT9a,KAAKkH,OAAOgnD,GACZ,IAAIxc,EAAUwc,EAAUznD,MAAMme,IAAMspC,EAAU1qC,IAAIoB,KAC9CypC,EAAW3c,GAAWwc,EAAU1qC,IAAIsB,OAASopC,EAAUznD,MAAMqe,OAASopC,EAAU1qC,IAAIsB,UAGlFspC,EAAQ3nD,MAAMme,KAAOspC,EAAU1qC,IAAIoB,KAAOwpC,EAAQ3nD,MAAMqe,OAASopC,EAAU1qC,IAAIsB,SAAQspC,EAAQ3nD,MAAMqe,QAAUupC,GAC/GD,EAAQ5qC,IAAIoB,KAAOspC,EAAU1qC,IAAIoB,KAAOwpC,EAAQ5qC,IAAIsB,OAASopC,EAAU1qC,IAAIsB,SAAQspC,EAAQ5qC,IAAIsB,QAAUupC,IAG3G3c,GAAW0c,EAAQ3nD,MAAMme,KAAOspC,EAAU1qC,IAAIoB,MAChDwpC,EAAQ3nD,MAAMme,KAAO8sB,EACrB0c,EAAQ5qC,IAAIoB,KAAO8sB,GAMvB,GAFA0c,EAAQ5qC,IAAMxjB,KAAKgH,OAAOonD,EAAQ3nD,MAAOsW,GAErC6iC,EAAMr/C,OAAQ,CAChB,IAAI+tD,EAAWJ,EAAUznD,MACrB8nD,EAAWH,EAAQ3nD,MAEnB4nD,GADA3c,EAAU6c,EAAS3pC,IAAM0pC,EAAS1pC,IACvB2pC,EAASzpC,OAASwpC,EAASxpC,QAC1C9kB,KAAK2jD,SAAS/D,EAAMx3C,KAAI,SAAUnF,GAMhC,OALAA,EAAIA,EAAE0gC,SACAl9B,MAAMme,KAAO0pC,EAAS1pC,MAAK3hB,EAAEwD,MAAMqe,QAAUupC,GAC/CprD,EAAEugB,IAAIoB,KAAO0pC,EAAS1pC,MAAK3hB,EAAEugB,IAAIsB,QAAUupC,GAC/CprD,EAAEwD,MAAMme,KAAO8sB,EACfzuC,EAAEugB,IAAIoB,KAAO8sB,EACNzuC,MAIX,OAAOmrD,GAGTpuD,KAAKwuD,WAAa,SAAUrsB,EAAUE,EAAQosB,GAC5CA,EAAeA,EAAa/rD,QAAQ,MAAO1C,KAAK2yC,gBAEhD,IAAK,IAAI/tB,EAAMud,EAAUvd,GAAOyd,EAAQzd,IACtC5kB,KAAKsM,IAAIqrC,aAAa,CACpB/yB,IAAKA,EACLE,OAAQ,GACP2pC,IAIPzuD,KAAK0uD,YAAc,SAAUztC,GAK3B,IAJA,IAAI0tC,EAAW1tC,EAAM2iB,eACjBgrB,EAAc,IAAI1sB,EAAM,EAAG,EAAG,EAAG,GACjChC,EAAOlgC,KAAK0nC,aAEP/lC,EAAIgtD,EAASloD,MAAMme,IAAKjjB,GAAKgtD,EAASnrC,IAAIoB,MAAOjjB,EAAG,CAC3D,IAAI88B,EAAOz+B,KAAKg5B,QAAQr3B,GACxBitD,EAAYnoD,MAAMme,IAAMjjB,EACxBitD,EAAYprC,IAAIoB,IAAMjjB,EAEtB,IAAK,IAAI4zB,EAAI,EAAGA,EAAI2K,GACI,KAAlBzB,EAAKn8B,OAAOizB,KADUA,GAIxBA,EAAI2K,GAA0B,MAAlBzB,EAAKn8B,OAAOizB,IAC1Bq5B,EAAYnoD,MAAMqe,OAASyQ,EAC3Bq5B,EAAYprC,IAAIsB,OAASyQ,EAAI,IAE7Bq5B,EAAYnoD,MAAMqe,OAAS,EAC3B8pC,EAAYprC,IAAIsB,OAASyQ,GAG3Bv1B,KAAKkH,OAAO0nD,KAIhB5uD,KAAK6uD,WAAa,SAAUtrB,EAAUC,EAAShJ,GAI7C,GAHA+I,EAAWvjC,KAAKqkD,gBAAgB9gB,GAChCC,EAAUxjC,KAAKokD,cAAc5gB,GAEzBhJ,EAAM,EAAG,CAEX,IADI5V,EAAM5kB,KAAKqkD,gBAAgB9gB,EAAW/I,IAChC,EAAG,OAAO,EACpB,IAAIs0B,EAAOlqC,EAAM2e,OACZ,GAAI/I,EAAM,EAAG,CAClB,IAAI5V,EACJ,IADIA,EAAM5kB,KAAKokD,cAAc5gB,EAAUhJ,IAC7Bx6B,KAAKsM,IAAI4e,YAAc,EAAG,OAAO,EACvC4jC,EAAOlqC,EAAM4e,MACZ,CACLD,EAAWvjC,KAAK+uD,mBAAmBxrB,GAE/BurB,GADJtrB,EAAUxjC,KAAK+uD,mBAAmBvrB,IACbD,EAAW,EAGlC,IAAItiB,EAAQ,IAAIihB,EAAMqB,EAAU,EAAGC,EAASwrB,OAAOC,WAC/CrP,EAAQ5/C,KAAKwiD,gBAAgBvhC,GAAO7Y,KAAI,SAAUnF,GAIpD,OAHAA,EAAIA,EAAE0gC,SACJl9B,MAAMme,KAAOkqC,EACf7rD,EAAEugB,IAAIoB,KAAOkqC,EACN7rD,KAELo8B,EAAe,GAAP7E,EAAWx6B,KAAKsM,IAAIiwC,SAAShZ,EAAUC,GAAWxjC,KAAKsM,IAAIswC,gBAAgBrZ,EAAUC,GAGjG,OAFAxjC,KAAKsM,IAAIowC,gBAAgBnZ,EAAWurB,EAAMzvB,GAC1CugB,EAAMr/C,QAAUP,KAAK2jD,SAAS/D,GACvBkP,GAGT9uD,KAAKkvD,YAAc,SAAU3rB,EAAUC,GACrC,OAAOxjC,KAAK6uD,WAAWtrB,EAAUC,GAAU,IAG7CxjC,KAAKmvD,cAAgB,SAAU5rB,EAAUC,GACvC,OAAOxjC,KAAK6uD,WAAWtrB,EAAUC,EAAS,IAG5CxjC,KAAKovD,eAAiB,SAAU7rB,EAAUC,GACxC,OAAOxjC,KAAK6uD,WAAWtrB,EAAUC,EAAS,IAG5CxjC,KAAK+uD,mBAAqB,SAAUnqC,GAClC,OAAO/d,KAAKC,IAAI,EAAGD,KAAKM,IAAIyd,EAAK5kB,KAAKsM,IAAI4e,YAAc,KAG1DlrB,KAAKqvD,iBAAmB,SAAUzqC,EAAKE,GACrC,OAAIA,EAAS,EAAU,EAChBje,KAAKM,IAAInH,KAAKsM,IAAI0sB,QAAQpU,GAAKrkB,OAAQukB,IAGhD9kB,KAAK46C,wBAA0B,SAAUh2B,EAAKE,GAG5C,GAFAA,EAASje,KAAKC,IAAI,EAAGge,GAEjBF,EAAM,EACRA,EAAM,EACNE,EAAS,MACJ,CACL,IAAI4W,EAAM17B,KAAKsM,IAAI4e,YAEftG,GAAO8W,GACT9W,EAAM8W,EAAM,EACZ5W,EAAS9kB,KAAKsM,IAAI0sB,QAAQ0C,EAAM,GAAGn7B,QAEnCukB,EAASje,KAAKM,IAAInH,KAAKsM,IAAI0sB,QAAQpU,GAAKrkB,OAAQukB,GAIpD,MAAO,CACLF,IAAKA,EACLE,OAAQA,IAIZ9kB,KAAKojD,qBAAuB,SAAUniC,GAChCA,EAAMxa,MAAMme,IAAM,GACpB3D,EAAMxa,MAAMme,IAAM,EAClB3D,EAAMxa,MAAMqe,OAAS,GAErB7D,EAAMxa,MAAMqe,OAAS9kB,KAAKqvD,iBAAiBpuC,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,QAG1E,IAAI4W,EAAM17B,KAAKsM,IAAI4e,YAAc,EASjC,OAPIjK,EAAMuC,IAAIoB,IAAM8W,GAClBza,EAAMuC,IAAIoB,IAAM8W,EAChBza,EAAMuC,IAAIsB,OAAS9kB,KAAKsM,IAAI0sB,QAAQ0C,GAAKn7B,QAEzC0gB,EAAMuC,IAAIsB,OAAS9kB,KAAKqvD,iBAAiBpuC,EAAMuC,IAAIoB,IAAK3D,EAAMuC,IAAIsB,QAG7D7D,GAGTjhB,KAAKotD,WAAa,GAClBptD,KAAK8/B,cAAe,EACpB9/B,KAAKsvD,gBAAkB,CACrBnoD,IAAK,KACLL,IAAK,MAGP9G,KAAKuvD,eAAiB,SAAUC,GAC9B,GAAIA,GAAexvD,KAAK8/B,aAAc,CAKpC,GAJA9/B,KAAK8/B,aAAe0vB,EACpBxvD,KAAK0jD,WAAY,EACjB1jD,KAAK0nD,eAAe,GAEhB8H,EAAa,CACf,IAAI9zB,EAAM17B,KAAKkrB,YACflrB,KAAKggC,UAAY57B,MAAMs3B,GACvB17B,KAAKwjD,gBAAgB,EAAG9nB,EAAM,GAGhC17B,KAAKyqB,QAAQ,oBAIjBzqB,KAAKyvD,eAAiB,WACpB,OAAOzvD,KAAK8/B,cAGd9/B,KAAK0vD,kBAAoB,SAAUvoD,EAAKL,GAClC9G,KAAKsvD,gBAAgBnoD,MAAQA,GAAOnH,KAAKsvD,gBAAgBxoD,MAAQA,IACnE9G,KAAKsvD,gBAAkB,CACrBnoD,IAAKA,EACLL,IAAKA,GAEP9G,KAAK0jD,WAAY,EACjB1jD,KAAKopC,aAAa9I,cACdtgC,KAAK8/B,cAAc9/B,KAAKyqB,QAAQ,oBAIxCzqB,KAAK2vD,gBAAkB,SAAUC,EAAcC,GAC7C,IAAIC,EAAS9vD,KAAKsvD,gBACdQ,EAAOhpD,IAAM,IAAGgpD,EAAS,CAC3B3oD,IAAK0oD,EACL/oD,IAAK+oD,IAEP,IAAIE,EAAY/vD,KAAKgwD,oBAAoBJ,EAAcE,EAAO3oD,IAAK2oD,EAAOhpD,KAE1E,OAAIipD,GAAa/vD,KAAKotD,YAAc2C,EAAY,IAC9C/vD,KAAKotD,WAAa2C,EAClB/vD,KAAK0jD,WAAY,EAEb1jD,KAAK8/B,eACP9/B,KAAKwjD,gBAAgB,EAAGxjD,KAAKkrB,YAAc,GAC3ClrB,KAAK0nD,eAAe,GAEpB1nD,KAAKyqB,QAAQ,qBAGR,IAMXzqB,KAAKgwD,oBAAsB,SAAUD,EAAW5oD,EAAKL,GAGnD,OAFIK,IAAK4oD,EAAYlpD,KAAKC,IAAIK,EAAK4oD,IAC/BjpD,IAAKipD,EAAYlpD,KAAKM,IAAIL,EAAKipD,IAC5BA,GAGT/vD,KAAKiwD,aAAe,WAClB,OAAOjwD,KAAKotD,YAGdptD,KAAKkwD,aAAe,SAAUC,GAC5BnwD,KAAK0vD,kBAAkBS,EAAOA,IAGhCnwD,KAAKowD,kBAAoB,WACvB,MAAO,CACLjpD,IAAKnH,KAAKsvD,gBAAgBnoD,IAC1BL,IAAK9G,KAAKsvD,gBAAgBxoD,MAI9B9G,KAAKgoD,4BAA8B,SAAU5oB,GAC3C,IAAIowB,EAAcxvD,KAAK8/B,aACnBrC,EAAS2B,EAAM3B,OACfh3B,EAAQ24B,EAAM34B,MACd+c,EAAM4b,EAAM5b,IACZ+f,EAAW98B,EAAMme,IACjB4e,EAAUhgB,EAAIoB,IACd8W,EAAM8H,EAAUD,EAChBwkB,EAAe,KAGnB,GAFA/nD,KAAK4jD,WAAY,EAEN,GAAPloB,EACF,GAAe,WAAX+B,EAAqB,CACvBz9B,KAAKwvD,EAAc,YAAc,mBAAmBppD,OAAOm9B,EAAU7H,GACrE,IAAI+mB,EAAYziD,KAAK0iD,UACrBqF,EAAe/nD,KAAKwiD,gBAAgBpjB,GACpCp/B,KAAKujD,YAAYwE,GACjB,IACIhH,EAAM,EAEV,GAHI5Z,EAAWnnC,KAAKonC,YAAY5jB,EAAIoB,KAGtB,CACZuiB,EAASsZ,eAAej9B,EAAIoB,IAAKpB,EAAIsB,OAAQre,EAAMqe,OAAStB,EAAIsB,QAChEqiB,EAAS2Y,UAAUpkB,GACnB,IAAI20B,EAAiBrwD,KAAKonC,YAAY7D,GAElC8sB,GAAkBA,IAAmBlpB,IACvCkpB,EAAetjB,MAAM5F,GACrBA,EAAWkpB,GAGbtP,EAAM0B,EAAUtgD,QAAQglC,GAAY,EAGtC,KAAU4Z,EAAM0B,EAAUliD,OAAQwgD,IAAO,EACnC5Z,EAAWsb,EAAU1B,IAEZt6C,MAAMme,KAAOpB,EAAIoB,KAC5BuiB,EAAS2Y,UAAUpkB,GAIvB8H,EAAUD,MACL,CACL,IAAIr+B,EAAOd,MAAMs3B,GACjBx2B,EAAK8nC,QAAQzJ,EAAU,GACvB,IAAIroB,EAAMs0C,EAAcxvD,KAAKggC,UAAYhgC,KAAK8nD,gBAC9C5sC,EAAI9U,OAAOzF,MAAMua,EAAKhW,GAClBu9C,EAAYziD,KAAK0iD,UAEjB3B,EAAM,EAEV,GAHI5Z,EAAWnnC,KAAKonC,YAAY7D,GAGlB,CACZ,IAAI1e,EAAMsiB,EAASlmB,MAAMoiB,cAAc58B,EAAMme,IAAKne,EAAMqe,QAE7C,GAAPD,GACFsiB,EAAWA,EAAS9kC,MAAMoE,EAAMme,IAAKne,EAAMqe,WAGzCqiB,EAAS2Y,SAASpkB,GAClByL,EAASsZ,eAAejd,EAAS,EAAGhgB,EAAIsB,OAASre,EAAMqe,UAExC,GAARD,IACTsiB,EAASsZ,eAAeld,EAAU,EAAG/f,EAAIsB,OAASre,EAAMqe,QACxDqiB,EAAS2Y,SAASpkB,IAGpBqlB,EAAM0B,EAAUtgD,QAAQglC,GAAY,EAGtC,KAAU4Z,EAAM0B,EAAUliD,OAAQwgD,IAAO,CACvC,IAAI5Z,GAAAA,EAAWsb,EAAU1B,IAEZt6C,MAAMme,KAAO2e,GACxB4D,EAAS2Y,SAASpkB,SAKxBA,EAAM70B,KAAKiC,IAAIs2B,EAAM34B,MAAMqe,OAASsa,EAAM5b,IAAIsB,QAE/B,WAAX2Y,IACFsqB,EAAe/nD,KAAKwiD,gBAAgBpjB,GACpCp/B,KAAKujD,YAAYwE,GACjBrsB,GAAOA,IAGLyL,EAAWnnC,KAAKonC,YAAY7D,KAG9B4D,EAASsZ,eAAeld,EAAU98B,EAAMqe,OAAQ4W,GAUpD,OANI8zB,GAAexvD,KAAKggC,UAAUz/B,QAAUP,KAAKsM,IAAI4e,aACnDtqB,QAAQC,MAAM,6DAGhBb,KAAK4jD,WAAY,EACb4L,EAAaxvD,KAAKwjD,gBAAgBjgB,EAAUC,GAAcxjC,KAAKyjD,sBAAsBlgB,EAAUC,GAC5FukB,GAGT/nD,KAAKyjD,sBAAwB,SAAUlgB,EAAUC,EAASyc,GACxDjgD,KAAK8nD,gBAAgBvkB,GAAY,KACjCvjC,KAAK8nD,gBAAgBtkB,GAAW,MAGlCxjC,KAAKwjD,gBAAkB,SAAUjgB,EAAUC,GACzC,IAIIyI,EACA9E,EALA9H,EAAQr/B,KAAKsM,IAAIuvC,cACjBrU,EAAUxnC,KAAK0nC,aACf4oB,EAAWtwD,KAAKggC,UAChB+vB,EAAY/vD,KAAKotD,WAGjBxoC,EAAM2e,EAGV,IAFAC,EAAU38B,KAAKM,IAAIq8B,EAASnE,EAAM9+B,OAAS,GAEpCqkB,GAAO4e,IACZ2D,EAAWnnC,KAAKonC,YAAYxiB,EAAKuiB,KAO/B8E,EAAS,GACT9E,EAASgZ,KAAK,SAAUG,EAAa17B,EAAKE,EAAQ0/B,GAChD,IAAI+L,EAEJ,GAAmB,MAAfjQ,EAAqB,EACvBiQ,EAAavwD,KAAKwwD,kBAAkBlQ,EAAarU,EAAO1rC,SAC7C,GAAKkwD,EAEhB,IAAK,IAAI9uD,EAAI,EAAGA,EAAI4uD,EAAWhwD,OAAQoB,IACrC4uD,EAAW5uD,GAAK+uD,OAGlBH,EAAavwD,KAAKwwD,kBAAkBnxB,EAAMza,GAAKxF,UAAUolC,EAAY1/B,GAASmnB,EAAO1rC,QAGvF0rC,EAASA,EAAO5mC,OAAOkrD,IACvBzrD,KAAK9E,MAAOmnC,EAAS3jB,IAAIoB,IAAKya,EAAM8H,EAAS3jB,IAAIoB,KAAKrkB,OAAS,GACjE+vD,EAASnpB,EAAS1gC,MAAMme,KAAO5kB,KAAK2wD,mBAAmB1kB,EAAQ8jB,EAAWvoB,GAC1E5iB,EAAMuiB,EAAS3jB,IAAIoB,IAAM,IAtBzBqnB,EAASjsC,KAAKwwD,kBAAkBnxB,EAAMza,IACtC0rC,EAAS1rC,GAAO5kB,KAAK2wD,mBAAmB1kB,EAAQ8jB,EAAWvoB,GAC3D5iB,MAyBN,IAEI6rC,EAAoB,EACpBC,EAAmB,EAkfvB,SAASvwB,EAAY9e,GACnB,QAAIA,EAAI,QACDA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OA9e/7BrhB,KAAK2wD,mBAAqB,SAAU1kB,EAAQ8jB,EAAWvoB,GACrD,GAAqB,GAAjByE,EAAO1rC,OACT,MAAO,GAGT,IAAIw/B,EAAS,GACT6wB,EAAgB3kB,EAAO1rC,OACvBswD,EAAY,EACZC,EAAe,EACfC,EAAS/wD,KAAKgxD,YACdC,EAAmBjxD,KAAKkxD,kBACxBC,EAAYpB,GAAalpD,KAAKC,IAAI,EAAI0gC,EAAS,KAA2B,IAArBypB,EAA6B,EAAIpqD,KAAKsF,MAAM4jD,EAAY,GAiBjH,SAASqB,EAASjoB,GAChB,IAAIkoB,EAAYplB,EAAO1pC,MAAMsuD,EAAW1nB,GACpCzN,EAAM21B,EAAU9wD,OACpB8wD,EAAU7uD,KAAK,IAAIE,QAAQ,OAAO,WAChCg5B,GAAO,KACNh5B,QAAQ,MAAM,WACfg5B,GAAO,KAGJqE,EAAOx/B,SACV0/B,EAzBJ,WACE,IAAIqxB,EAAc,EAClB,GAAkB,IAAdH,EAAiB,OAAOG,EAE5B,GAAIL,EACF,IAAK,IAAItvD,EAAI,EAAGA,EAAIsqC,EAAO1rC,OAAQoB,IAAK,CACtC,IAAI0pC,EAAQY,EAAOtqC,GACnB,GAxBI,IAwBA0pC,EAAgBimB,GAAe,MAAO,IAvBxC,IAuB4CjmB,EAA0C,IAtBhF,IAsBoFA,EAAoB,SAAc,MAAlEimB,GAAe9pB,GAK/E,OADIupB,IAA+B,IAArBE,IAA4BK,GAAe9pB,GAClD3gC,KAAKM,IAAImqD,EAAaH,GAalBI,GACTxxB,EAAOE,OAASA,GAGlB6wB,GAAgBp1B,EAChBqE,EAAOh+B,KAAK+uD,GACZD,EAAY1nB,EAKd,IAFA,IAAIlJ,EAAS,EAEN2wB,EAAgBC,EAAYd,EAAY9vB,GAAQ,CACrD,IAAI59B,EAAQwuD,EAAYd,EAAY9vB,EAEpC,GAAIgM,EAAO5pC,EAAQ,IAxDX,IAwD0B4pC,EAAO5pC,IAxDjC,GAyDN+uD,EAAS/uD,QAIX,GAAI4pC,EAAO5pC,IAAUouD,GAAqBxkB,EAAO5pC,IAAUquD,EAA3D,CA8BA,IAFA,IAAIc,EAAW3qD,KAAKC,IAAIzE,GAAS0tD,GAAaA,GAAa,IAAKc,EAAY,GAErExuD,EAAQmvD,GAAYvlB,EAAO5pC,GAASouD,GACzCpuD,IAGF,GAAI0uD,EAAQ,CACV,KAAO1uD,EAAQmvD,GAAYvlB,EAAO5pC,GAASouD,GACzCpuD,IAGF,KAAOA,EAAQmvD,GArGH,GAqGevlB,EAAO5pC,IAChCA,SAGF,KAAOA,EAAQmvD,GAAYvlB,EAAO5pC,GAxG5B,IAyGJA,IAIAA,EAAQmvD,EACVJ,IAAW/uD,IAlHF,GAuHP4pC,EADJ5pC,EAAQwuD,EAAYd,IACW1tD,IAC/B+uD,EAAS/uD,EAAQ49B,QAvDjB,CACE,KAAY59B,GAASwuD,EAAY,GAC3B5kB,EAAO5pC,IAAUouD,EADapuD,KAMpC,GAAIA,EAAQwuD,EAAW,CACrBO,EAAS/uD,GACT,SAKF,IAFAA,EAAQwuD,EAAYd,EAER1tD,EAAQ4pC,EAAO1rC,QACrB0rC,EAAO5pC,IAAUquD,EADYruD,KAMnC,GAAIA,GAAS4pC,EAAO1rC,OAClB,MAGF6wD,EAAS/uD,IAkCb,OAAO09B,GAGT//B,KAAKwwD,kBAAoB,SAAUnsD,EAAKsX,GACtC,IACI6rB,EADAtsB,EAAM,GAEVS,EAASA,GAAU,EAEnB,IAAK,IAAIha,EAAI,EAAGA,EAAI0C,EAAI9D,OAAQoB,IAAK,CACnC,IAAI0f,EAAIhd,EAAIg4B,WAAW16B,GAEvB,GAAS,GAAL0f,EAAQ,CACVmmB,EAAUxnC,KAAKogC,iBAAiBllB,EAAI3a,OAASob,GAC7CT,EAAInZ,KAnIA,IAqIJ,IAAK,IAAImK,EAAI,EAAGA,EAAIs7B,EAASt7B,IAC3BgP,EAAInZ,KArII,SAuII,IAALsf,EACTnG,EAAInZ,KA1IE,IA2IGsf,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAMA,EAAI,GAC3CnG,EAAInZ,KA7IQ,GA8IHsf,GAAK,MAAU8e,EAAY9e,GACpCnG,EAAInZ,KAnJC,EACI,GAoJTmZ,EAAInZ,KArJC,GAyJT,OAAOmZ,GAGTlb,KAAKwtD,sBAAwB,SAAUnpD,EAAKotD,EAAiBC,GAC3D,GAAuB,GAAnBD,EAAsB,MAAO,CAAC,EAAG,GAGrC,IAAIpwC,EAAGyD,EAEP,IAJuB,MAAnB2sC,IAAyBA,EAAkBva,EAAAA,GAC/Cwa,EAAeA,GAAgB,EAG1B5sC,EAAS,EAAGA,EAASzgB,EAAI9D,SAGnB,IAFT8gB,EAAIhd,EAAIg4B,WAAWvX,IAGjB4sC,GAAgB1xD,KAAKogC,iBAAiBsxB,GAC7BrwC,GAAK,MAAU8e,EAAY9e,GACpCqwC,GAAgB,EAEhBA,GAAgB,IAGdA,EAAeD,IAXiB3sC,KAgBtC,MAAO,CAAC4sC,EAAc5sC,IAGxB9kB,KAAKupC,YAAc,KAEnBvpC,KAAK2xD,aAAe,SAAU/sC,GAC5B,GAAI5kB,KAAKupC,YAAa,IAAI1P,EAAI75B,KAAKupC,YAAY3kB,IAAQ5kB,KAAKupC,YAAY3kB,GAAKorB,UAAY,OAAOnW,EAAI,EAEpG,OAAK75B,KAAK8/B,cAAiB9/B,KAAKggC,UAAUpb,GAGjC5kB,KAAKggC,UAAUpb,GAAKrkB,OAAS,EAAIs5B,EAFjC,EAAIA,GAMf75B,KAAK4xD,gBAAkB,SAAUhtC,GAC/B,OAAK5kB,KAAK8/B,cAAiB9/B,KAAKggC,UAAUpb,GAGjC5kB,KAAKggC,UAAUpb,GAAKrkB,OAAS,EAF7B,GAMXP,KAAK6xD,iBAAmB,SAAU1mC,GAChC,GAAInrB,KAAK8/B,aAAc,CACrB,IAAIn5B,EAAM3G,KAAK6nC,yBAAyB1c,EAAW6jC,OAAOC,WACtDlvB,EAAS//B,KAAKggC,UAAUr5B,EAAIie,KAChC,OAAOmb,EAAOx/B,QAAUw/B,EAAO,GAAKp5B,EAAIme,OAASib,EAAOE,OAAS,EAEjE,OAAO,GAIXjgC,KAAK8xD,uBAAyB,SAAU3mC,GACtC,IAAIxkB,EAAM3G,KAAK6nC,yBAAyB1c,EAAW6jC,OAAOC,WAC1D,OAAOjvD,KAAK+xD,uBAAuBprD,EAAIie,IAAKje,EAAIme,SAGlD9kB,KAAKgyD,yBAA2B,SAAUjzB,EAAQkzB,GAChD,IAAI9mC,EAAYnrB,KAAKsrB,oBAAoByT,EAAQkzB,GACjD,OAAOjyD,KAAK8xD,uBAAuB3mC,IAGrCnrB,KAAKkoC,iCAAmC,SAAUnJ,EAAQkzB,GACxD,IAAI9mC,EAAYnrB,KAAKsrB,oBAAoByT,EAAQkzB,GACjD,OAAOjyD,KAAK6nC,yBAAyB1c,EAAW6jC,OAAOC,UAAY,KAGrEjvD,KAAKkyD,gBAAkB,SAAUttC,GAC/B,OAAK5kB,KAAK8/B,aAGD9/B,KAAKggC,UAAUpb,QAFtB,GAMJ5kB,KAAKogC,iBAAmB,SAAUsxB,GAChC,OAAO1xD,KAAKspD,SAAWoI,EAAe1xD,KAAKspD,UAG7CtpD,KAAKmyD,oBAAsB,SAAUhnC,EAAWumC,GAC9C,OAAO1xD,KAAK6nC,yBAAyB1c,EAAWumC,GAAc9sC,KAGhE5kB,KAAKoyD,uBAAyB,SAAUjnC,EAAWumC,GACjD,OAAO1xD,KAAK6nC,yBAAyB1c,EAAWumC,GAAc5sC,QAGhE9kB,KAAK6nC,yBAA2B,SAAU1c,EAAWumC,EAAcxoB,GACjE,GAAI/d,EAAY,EAAG,MAAO,CACxBvG,IAAK,EACLE,OAAQ,GAEV,IAAI2Z,EAGA3Z,EAFAia,EAAS,EACTkzB,EAAY,EAEZrtC,EAAM,EACNytC,EAAY,EACZ9yB,EAAWv/B,KAAKw/B,gBAChB79B,EAAI3B,KAAKy/B,kBAAkBF,EAAUpU,GACrCvpB,EAAI29B,EAASh/B,OAEjB,GAAIqB,GAAKD,GAAK,EACZ,CAAIijB,EAAM2a,EAAS59B,GACfo9B,EAAS/+B,KAAK0/B,aAAa/9B,GAD/B,IAEI2wD,EAAUnnC,EAAYoU,EAAS39B,EAAI,QAEnC0wD,GAAW1wD,EAOjB,IAJA,IAAI2wD,EAASvyD,KAAKkrB,YAAc,EAC5Bic,EAAWnnC,KAAKgjD,gBAAgBjkB,GAChCwuB,EAAYpmB,EAAWA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAEzCtyB,GAAOuG,KAGRvG,GAFJytC,EAAYryD,KAAK2xD,aAAa5yB,IAER5T,GAAa4T,GAAUwzB,IAG3C3tC,GAAOytC,IACPtzB,EAEawuB,IACXxuB,EAASoI,EAAS3jB,IAAIoB,IAAM,EAE5B2oC,GADApmB,EAAWnnC,KAAKgjD,gBAAgBjkB,EAAQoI,IACjBA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,GAI5Cob,IACFtyD,KAAK0/B,aAAa39B,KAAKg9B,GACvB/+B,KAAKw/B,gBAAgBz9B,KAAK6iB,IAI9B,GAAIuiB,GAAYA,EAAS1gC,MAAMme,KAAOma,EACpCN,EAAOz+B,KAAKskD,mBAAmBnd,GAC/BpI,EAASoI,EAAS1gC,MAAMme,QACnB,IAAIA,EAAMytC,GAAalnC,GAAa4T,EAASwzB,EAClD,MAAO,CACL3tC,IAAK2tC,EACLztC,OAAQ9kB,KAAKg5B,QAAQu5B,GAAQhyD,QAG/Bk+B,EAAOz+B,KAAKg5B,QAAQ+F,GACpBoI,EAAW,KAGb,IAAIzI,EAAa,EACbM,EAAan4B,KAAKsF,MAAMgf,EAAYvG,GAExC,GAAI5kB,KAAK8/B,aAAc,CACrB,IAAIC,EAAS//B,KAAKggC,UAAUjB,GAExBgB,IACFjb,EAASib,EAAOf,GAEZA,EAAa,GAAKe,EAAOx/B,SAC3Bm+B,EAAaqB,EAAOE,OACpBgyB,EAAYlyB,EAAOf,EAAa,IAAMe,EAAOA,EAAOx/B,OAAS,GAC7Dk+B,EAAOA,EAAKrf,UAAU6yC,KAQ5B,YAHgB5wD,IAAZ6nC,GAAyBlpC,KAAKopC,aAAatK,UAAUla,EAAMoa,EAAYD,EAAQC,KAAa0yB,EAAe1xD,KAAKopC,aAAatH,YAAYoH,IAC7I+oB,GAAajyD,KAAKwtD,sBAAsB/uB,EAAMizB,EAAehzB,GAAY,GACrE1+B,KAAK8/B,cAAgBmyB,GAAantC,IAAQmtC,EAAYntC,EAAS,GAC/DqiB,EAAiBA,EAAS2Z,cAAcmR,GACrC,CACLrtC,IAAKma,EACLja,OAAQmtC,IAIZjyD,KAAK+jC,yBAA2B,SAAUhF,EAAQkzB,GAChD,QAAyB,IAAdA,EAA2B,IAAItrD,EAAM3G,KAAK46C,wBAAwB7b,EAAOna,IAAKma,EAAOja,aAAane,EAAM3G,KAAK46C,wBAAwB7b,EAAQkzB,GACxJlzB,EAASp4B,EAAIie,IACbqtC,EAAYtrD,EAAIme,OAChB,IAEI0T,EAFArN,EAAY,EACZqnC,EAAe,MAEnBh6B,EAAOx4B,KAAKy4B,UAAUsG,EAAQkzB,EAAW,MAGvClzB,EAASvG,EAAK/xB,MAAMme,IACpBqtC,EAAYz5B,EAAK/xB,MAAMqe,QAGzB,IAAImiB,EACAriB,EAAM,EACN2a,EAAWv/B,KAAK0/B,aAChB/9B,EAAI3B,KAAKy/B,kBAAkBF,EAAUR,GACrCn9B,EAAI29B,EAASh/B,OAEjB,GAAIqB,GAAKD,GAAK,EACZ,CAAIijB,EAAM2a,EAAS59B,GACfwpB,EAAYnrB,KAAKw/B,gBAAgB79B,GADrC,IAEI2wD,EAAUvzB,EAASQ,EAAS39B,EAAI,QAEhC0wD,GAAW1wD,EAMjB,IAHA,IAAIulC,EAAWnnC,KAAKgjD,gBAAgBp+B,GAChC2oC,EAAYpmB,EAAWA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAEzCtyB,EAAMma,GAAQ,CACnB,GAAIna,GAAO2oC,EAAW,CAEpB,IADAtmB,EAASE,EAAS3jB,IAAIoB,IAAM,GACfma,EAAQ,MAErBwuB,GADApmB,EAAWnnC,KAAKgjD,gBAAgB/b,EAAQE,IACjBA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,OAE5CjQ,EAASriB,EAAM,EAGjBuG,GAAanrB,KAAK2xD,aAAa/sC,GAC/BA,EAAMqiB,EAEFqrB,IACFtyD,KAAK0/B,aAAa39B,KAAK6iB,GACvB5kB,KAAKw/B,gBAAgBz9B,KAAKopB,IAI9B,IAAIo5B,EAAW,GAEXpd,GAAYviB,GAAO2oC,GACrBhJ,EAAWvkD,KAAKskD,mBAAmBnd,EAAUpI,EAAQkzB,GACrDO,EAAerrB,EAAS1gC,MAAMme,MAE9B2/B,EAAWvkD,KAAKg5B,QAAQ+F,GAAQ3f,UAAU,EAAG6yC,GAC7CO,EAAezzB,GAGjB,IAAIL,EAAa,EAEjB,GAAI1+B,KAAK8/B,aAAc,CACrB,IAAI2yB,EAAUzyD,KAAKggC,UAAUwyB,GAE7B,GAAIC,EAAS,CAGX,IAFA,IAAIC,EAAkB,EAEfnO,EAAShkD,QAAUkyD,EAAQC,IAChCvnC,IACAunC,IAGFnO,EAAWA,EAASnlC,UAAUqzC,EAAQC,EAAkB,IAAM,EAAGnO,EAAShkD,QAC1Em+B,EAAag0B,EAAkB,EAAID,EAAQxyB,OAAS,GAIxD,MAAO,CACLrb,IAAKuG,EACLrG,OAAQ4Z,EAAa1+B,KAAKwtD,sBAAsBjJ,GAAU,KAI9DvkD,KAAK+xD,uBAAyB,SAAUntC,EAAKqtC,GAC3C,OAAOjyD,KAAK+jC,yBAAyBnf,EAAKqtC,GAAWntC,QAGvD9kB,KAAKsrB,oBAAsB,SAAUyT,EAAQkzB,GAC3C,OAAOjyD,KAAK+jC,yBAAyBhF,EAAQkzB,GAAWrtC,KAG1D5kB,KAAK2yD,gBAAkB,WACrB,IAAIC,EAAa,EACbp6B,EAAO,KAEX,GAAKx4B,KAAK8/B,aAeR,IANA,IAAI0D,EAAUxjC,KAAKggC,UAAUz/B,OACzBqkB,EAAM,EAGN2oC,GAFA5rD,EAAI,GACJ62B,EAAOx4B,KAAK0iD,UAAU/gD,MACH62B,EAAK/xB,MAAMme,IAAMsyB,EAAAA,GAEjCtyB,EAAM4e,GAAS,CACpB,IAAIzD,EAAS//B,KAAKggC,UAAUpb,GAC5BguC,GAAc7yB,EAASA,EAAOx/B,OAAS,EAAI,IAC3CqkB,EAEU2oC,IACR3oC,EAAM4T,EAAKhV,IAAIoB,IAAM,EAErB2oC,GADA/0B,EAAOx4B,KAAK0iD,UAAU/gD,MACH62B,EAAK/xB,MAAMme,IAAMsyB,EAAAA,OAvBlB,CACtB0b,EAAa5yD,KAAKkrB,YAGlB,IAFA,IAAIy0B,EAAW3/C,KAAK0iD,UAEX/gD,EAAI,EAAGA,EAAIg+C,EAASp/C,OAAQoB,IAEnCixD,IADAp6B,EAAOmnB,EAASh+C,IACG6hB,IAAIoB,IAAM4T,EAAK/xB,MAAMme,IAuB5C,OADI5kB,KAAKupC,cAAaqpB,GAAc5yD,KAAK6yD,0BAClCD,GAGT5yD,KAAK8yD,gBAAkB,SAAUC,GAC1B/yD,KAAKgzD,iBAEVhzD,KAAKwtD,sBAAwB,SAAUnpD,EAAKotD,EAAiBC,GAC3D,GAAwB,IAApBD,EAAuB,MAAO,CAAC,EAAG,GAGtC,IAAIpwC,EAAGyD,EAEP,IAJK2sC,IAAiBA,EAAkBva,EAAAA,GACxCwa,EAAeA,GAAgB,EAG1B5sC,EAAS,EAAGA,EAASzgB,EAAI9D,WAI1BmxD,GADQ,QAFVrwC,EAAIhd,EAAI/B,OAAOwiB,IAGG9kB,KAAKogC,iBAAiBsxB,GAEtBqB,EAAGE,kBAAkB5xC,IAGpBowC,GATiB3sC,KActC,MAAO,CAAC4sC,EAAc5sC,MAI1B9kB,KAAK2pB,QAAU,WACT3pB,KAAKwnD,cACPxnD,KAAKwnD,YAAY3I,YAAY,MAC7B7+C,KAAKwnD,YAAc,MAGrBxnD,KAAK6rD,eAGP7rD,KAAKmgC,YAAcA,GAMlB1+B,KAAKqlD,EAAYvlD,WACpBO,EAAS,0BAA0BwgD,QAAQ7gD,KAAKqlD,EAAYvlD,WAC5DO,EAAS,gCAAgCqkD,aAAa1kD,KAAKqlD,EAAYvlD,WACvEo1B,EAAO7C,cAAcgzB,EAAYvlD,UAAW,UAAW,CACrD2xD,KAAM,CACJxpD,IAAK,SAAapB,GAEhB,GADKA,GAAkB,OAATA,EAAgD,QAATA,EAAiBA,GAAQ,EAAuB,eAATA,EAAwBA,GAAS,EAA2B,iBAATA,IAAmBA,EAAQgG,SAAShG,EAAO,MAAO,GAAnKA,GAAQ,EAClCtI,KAAKmzD,OAAS7qD,EAGlB,GAFAtI,KAAKmzD,MAAQ7qD,EAERA,EAEE,CACL,IAAI44B,EAAsB,iBAAT54B,EAAoBA,EAAQ,KAC7CtI,KAAK0vD,kBAAkBxuB,EAAKA,GAC5BlhC,KAAKuvD,gBAAe,QAJpBvvD,KAAKuvD,gBAAe,IAOxB9lD,IAAK,WACH,OAAIzJ,KAAKyvD,kBACY,GAAfzvD,KAAKmzD,MAAoB,cACxBnzD,KAAKowD,oBAAoBjpD,IACvBnH,KAAKmzD,MAD8B,OAIrC,OAET5/B,YAAY,GAEdy4B,WAAY,CACVtiD,IAAK,SAAa+W,IAChBA,EAAa,QAAPA,EAAmC,QAAnBzgB,KAAK6yC,MAAM/9B,KAAwB,QAAP2L,IAEvCzgB,KAAKgxD,cACdhxD,KAAKgxD,YAAcvwC,EAEfzgB,KAAK8/B,eACP9/B,KAAK0jD,WAAY,EACjB1jD,KAAK0nD,eAAe,GACpB1nD,KAAKwjD,gBAAgB,EAAGxjD,KAAKkrB,YAAc,MAIjD8I,aAAc,QAEhBi9B,iBAAkB,CAChBj9B,cAAc,GAEhBo/B,gBAAiB,CACf1pD,IAAK,WACH1J,KAAKyqB,QAAQ,qBAEfuJ,aAAc,GAEhBs3B,UAAW,CACT5hD,IAAK,SAAa4hD,GAChBtrD,KAAKwrD,WAAaF,EAClBtrD,KAAK6rD,cACDP,GAAWtrD,KAAK8rD,gBAEtB93B,cAAc,GAEhBq/B,YAAa,CACXr/B,cAAc,GAEhBwT,QAAS,CACP99B,IAAK,SAAa89B,GACZ+kB,MAAM/kB,IAAYxnC,KAAKspD,WAAa9hB,IACxCxnC,KAAK0jD,WAAY,EACjB1jD,KAAK8nD,gBAAkB,GACvB9nD,KAAKspD,SAAW9hB,EAEhBxnC,KAAKyqB,QAAQ,mBAEfuJ,aAAc,EACdT,YAAY,GAEdi2B,uBAAwB,CACtBx1B,cAAc,GAEhB41B,UAAW,CACTlgD,IAAK,SAAa+W,GAChBzgB,KAAKyqB,QAAQ,oBAEfuJ,cAAc,GAEhBooB,YAAa,CACX1yC,IAAK,SAAa+W,GAChBzgB,KAAKsM,IAAI6vC,eAAe17B,IAE1BhX,IAAK,WACH,OAAOzJ,KAAKsM,IAAI+vC,kBAElB9oB,YAAY,GAEd4b,KAAM,CACJzlC,IAAK,SAAa+W,GAChBzgB,KAAKunD,QAAQ9mC,IAEfhX,IAAK,WACH,OAAOzJ,KAAK0rD,YAIlB/oD,EAAQmkD,YAAcA,KAExB9jD,IAAI9C,OAAO,aAAc,CAAC,UAAW,UAAW,SAAU,eAAgB,cAAe,cAAc,SAAU4B,EAAUa,EAASxC,GAClI,aAEA,IAAIqc,EAAO1a,EAAS,cAChByP,EAAMzP,EAAS,aACfogC,EAAQpgC,EAAS,WAAWogC,MAE5BoxB,EAAS,WACXtzD,KAAKkzB,SAAW,KAGlB,WACElzB,KAAK0J,IAAM,SAAUqqB,GAEnB,OADAxiB,EAAIH,MAAMpR,KAAKkzB,SAAUa,GAClB/zB,MAGTA,KAAKgzB,WAAa,WAChB,OAAOxW,EAAK3B,WAAW7a,KAAKkzB,WAG9BlzB,KAAK6yB,WAAa,SAAUkB,GAC1B/zB,KAAKkzB,SAAWa,GAGlB/zB,KAAKuzD,KAAO,SAAUxyC,GACpB,IAAIgT,EAAU/zB,KAAKkzB,SACfwgB,EAAW1zC,KAAKwzD,eAAezyC,EAASgT,GAC5C,IAAK2f,EAAU,OAAO,EACtB,IAAI3a,EAAa,KAWjB,OAVA2a,EAAS5rC,SAAQ,SAAU2rD,EAAIC,EAAIC,EAAIC,GAGrC,OAFA76B,EAAa,IAAImJ,EAAMuxB,EAAIC,EAAIC,EAAIC,KAE/BF,GAAME,GAAM7/B,EAAQttB,OAASstB,EAAQttB,MAAMA,OAAgC,GAAvBstB,EAAQ8/B,aAAwB96B,EAAWwJ,QAAQxO,EAAQttB,UACjHsyB,EAAa,MACN,MAKJA,GAGT/4B,KAAK8zD,QAAU,SAAU/yC,GACvB,IAAIgT,EAAU/zB,KAAKkzB,SACnB,IAAKa,EAAQggC,OAAQ,MAAO,GAC5B/zD,KAAKg0D,gBAAgBjgC,GACrB,IAAI9S,EAAQ8S,EAAQ9S,MAChBoe,EAAQpe,EAAQF,EAAQw7B,SAASt7B,EAAMxa,MAAMme,IAAK3D,EAAMuC,IAAIoB,KAAO7D,EAAQzU,IAAIuvC,cAC/E9R,EAAS,GACT7T,EAAKnC,EAAQmC,GAEjB,GAAInC,EAAQkgC,aAAc,CACxB,IAEIC,EAFAx4B,EAAMxF,EAAG31B,OACTgyD,EAASlzB,EAAM9+B,OAASm7B,EAG5BzsB,EAAO,IAAK,IAAI2V,EAAMsR,EAAGva,QAAU,EAAGiJ,GAAO2tC,EAAQ3tC,IAAO,CAC1D,IAAK,IAAI2Q,EAAI,EAAGA,EAAImG,EAAKnG,IACvB,IAAqC,GAAjC8J,EAAMza,EAAM2Q,GAAG6S,OAAOlS,EAAGX,IAAW,SAAStmB,EAGnD,IAAIuvC,EAAYnf,EAAMza,GAClB6Z,EAAOY,EAAMza,EAAM8W,EAAM,GACzB0lB,EAAa5C,EAAUj+C,OAASi+C,EAAUl7C,MAAM4yB,EAAG,IAAI,GAAG31B,OAC1D8gD,EAAW5iB,EAAKn7B,MAAM4yB,EAAGwF,EAAM,IAAI,GAAGn7B,OAEtC2zD,GAAaA,EAAU1wC,IAAIoB,MAAQA,GAAOsvC,EAAU1wC,IAAIsB,OAASs8B,IAIrErX,EAAOhoC,KAAKmyD,EAAY,IAAIhyB,EAAMtd,EAAKw8B,EAAYx8B,EAAM8W,EAAM,EAAG2lB,IAC9D3lB,EAAM,IAAG9W,EAAMA,EAAM8W,EAAM,UAGjC,IAAK,IAAI/5B,EAAI,EAAGA,EAAI09B,EAAM9+B,OAAQoB,IAChC,KAAI+Z,EAAUc,EAAKhB,gBAAgB6jB,EAAM19B,GAAIu0B,GAE7C,IAASX,EAAI,EAAGA,EAAI7Z,EAAQnb,OAAQg1B,IAAK,CACvC,IAAIjyB,EAAQoY,EAAQ6Z,GACpBwU,EAAOhoC,KAAK,IAAImgC,EAAMvgC,EAAG2B,EAAMqY,OAAQha,EAAG2B,EAAMqY,OAASrY,EAAM/C,UAKrE,GAAI0gB,EAAO,CACT,IAAImhB,EAAcnhB,EAAMxa,MAAMqe,OAC1Bwd,EAAYrhB,EAAMxa,MAAMqe,OAI5B,IAHInjB,EAAI,EACJ4zB,EAAIwU,EAAOxpC,OAAS,EAEjBoB,EAAI4zB,GAAKwU,EAAOpoC,GAAG8E,MAAMqe,OAASsd,GAAe2H,EAAOpoC,GAAG8E,MAAMme,KAAO3D,EAAMxa,MAAMme,KACzFjjB,IAGF,KAAOA,EAAI4zB,GAAKwU,EAAOxU,GAAG/R,IAAIsB,OAASwd,GAAayH,EAAOxU,GAAG/R,IAAIoB,KAAO3D,EAAMuC,IAAIoB,KACjF2Q,IAKF,IAFAwU,EAASA,EAAOxnC,MAAMZ,EAAG4zB,EAAI,GAExB5zB,EAAI,EAAG4zB,EAAIwU,EAAOxpC,OAAQoB,EAAI4zB,EAAG5zB,IACpCooC,EAAOpoC,GAAG8E,MAAMme,KAAO3D,EAAMxa,MAAMme,IACnCmlB,EAAOpoC,GAAG6hB,IAAIoB,KAAO3D,EAAMxa,MAAMme,IAIrC,OAAOmlB,GAGT/pC,KAAK0C,QAAU,SAAUk2C,EAAOub,GAC9B,IAAIpgC,EAAU/zB,KAAKkzB,SACfgD,EAAKl2B,KAAKg0D,gBAAgBjgC,GAC9B,GAAIA,EAAQkgC,aAAc,OAAOE,EACjC,GAAKj+B,EAAL,CACA,IAAI5yB,EAAQ4yB,EAAG/yB,KAAKy1C,GACpB,IAAKt1C,GAASA,EAAM,GAAG/C,QAAUq4C,EAAMr4C,OAAQ,OAAO,KAGtD,GAFA4zD,EAAcvb,EAAMl2C,QAAQwzB,EAAIi+B,GAE5BpgC,EAAQqgC,aAAc,CACxBD,EAAcA,EAAY9xD,MAAM,IAEhC,IAAK,IAAIV,EAAIkF,KAAKM,IAAIyxC,EAAMr4C,OAAQq4C,EAAMr4C,QAASoB,KAAM,CACvD,IAAIw6B,EAAKyc,EAAMj3C,GACXw6B,GAAMA,EAAGrqB,eAAiBqqB,EAAIg4B,EAAYxyD,GAAKwyD,EAAYxyD,GAAGg0B,cAAmBw+B,EAAYxyD,GAAKwyD,EAAYxyD,GAAGmQ,cAGvHqiD,EAAcA,EAAY3xD,KAAK,IAGjC,OAAO2xD,IAGTn0D,KAAKg0D,gBAAkB,SAAUjgC,EAASsgC,GACxC,GAAItgC,EAAQggC,kBAAkB3wD,OAAQ,OAAO2wB,EAAQmC,GAAKnC,EAAQggC,OAClE,IAAIA,EAAShgC,EAAQggC,OACrB,IAAKhgC,EAAQggC,OAAQ,OAAOhgC,EAAQmC,IAAK,EACpCnC,EAAQtY,SAAQs4C,EAASv3C,EAAKlB,aAAay4C,IAC5ChgC,EAAQugC,YAAWP,EAiJ3B,SAAyBA,EAAQhgC,GAC/B,SAASwgC,EAAalzC,GACpB,MAAI,KAAKhe,KAAKge,IAAM0S,EAAQtY,OAAe,MACpC,GAGT,OAAO84C,EAAaR,EAAO,IAAMA,EAASQ,EAAaR,EAAOA,EAAOxzD,OAAS,IAvJ5Ci0D,CAAgBT,EAAQhgC,IACxD,IAAI0gC,EAAW1gC,EAAQ2gC,cAAgB,KAAO,MAE9C,GADA3gC,EAAQkgC,cAAgBI,GAAyB,SAAShxD,KAAK0wD,GAC3DhgC,EAAQkgC,aAAc,OAAOlgC,EAAQmC,GAAKl2B,KAAK20D,yBAAyBZ,EAAQU,GAEpF,IACE,IAAIv+B,EAAK,IAAI9yB,OAAO2wD,EAAQU,GAC5B,MAAOj/C,GACP0gB,GAAK,EAGP,OAAOnC,EAAQmC,GAAKA,GAGtBl2B,KAAK20D,yBAA2B,SAAUZ,EAAQU,GAIhD,IAHA,IAAIz+B,EAAQ+9B,EAAOrxD,QAAQ,cAAe,QAAQL,MAAM,MACpD6zB,EAAK,GAEAv0B,EAAI,EAAGA,EAAIq0B,EAAMz1B,OAAQoB,IAChC,IACEu0B,EAAGn0B,KAAK,IAAIqB,OAAO4yB,EAAMr0B,GAAI8yD,IAC7B,MAAOj/C,GACP,OAAO,EAIX,OAAO0gB,GAGTl2B,KAAKwzD,eAAiB,SAAUzyC,EAASgT,GACvC,IAAImC,EAAKl2B,KAAKg0D,gBAAgBjgC,GAC9B,IAAKmC,EAAI,OAAO,EAChB,IAAI0+B,EAAiC,GAArB7gC,EAAQ6gC,UACpBf,EAAqC,GAAvB9/B,EAAQ8/B,YACtB5yC,EAAQ8S,EAAQ9S,MAChBxa,EAAQstB,EAAQttB,MACfA,IAAOA,EAAQwa,EAAQA,EAAM2zC,EAAY,MAAQ,SAAW7zC,EAAQpC,UAAUmC,YAC/Era,EAAMA,QAAOA,EAAQA,EAAMotD,GAAee,EAAY,MAAQ,UAClE,IAAIrxB,EAAWtiB,EAAQA,EAAMxa,MAAMme,IAAM,EACrC4e,EAAUviB,EAAQA,EAAMuC,IAAIoB,IAAM7D,EAAQmK,YAAc,EAE5D,GAAI0pC,EACF,IAAI9sD,EAAU,SAAiB3G,GAC7B,IAAIyjB,EAAMne,EAAMme,IAChB,IAAIiwC,EAAcjwC,EAAKne,EAAMqe,OAAQ3jB,GAArC,CAEA,IAAKyjB,IAAOA,GAAO2e,EAAU3e,IAC3B,GAAIiwC,EAAcjwC,EAAKoqC,OAAOC,UAAW9tD,GAAW,OAGtD,GAAoB,GAAhB4yB,EAAQm/B,KAEZ,IAAKtuC,EAAM4e,EAASD,EAAW98B,EAAMme,IAAKA,GAAO2e,EAAU3e,IACzD,GAAIiwC,EAAcjwC,EAAKoqC,OAAOC,UAAW9tD,GAAW,cAIpD2G,EAAU,SAAiB3G,GAC7B,IAAIyjB,EAAMne,EAAMme,IAChB,IAAIiwC,EAAcjwC,EAAKne,EAAMqe,OAAQ3jB,GAArC,CAEA,IAAKyjB,GAAY,EAAGA,GAAO4e,EAAS5e,IAClC,GAAIiwC,EAAcjwC,EAAK,EAAGzjB,GAAW,OAGvC,GAAoB,GAAhB4yB,EAAQm/B,KAEZ,IAAKtuC,EAAM2e,EAAUC,EAAU/8B,EAAMme,IAAKA,GAAO4e,EAAS5e,IACxD,GAAIiwC,EAAcjwC,EAAK,EAAGzjB,GAAW,SAK3C,GAAI4yB,EAAQkgC,aACV,IAAIv4B,EAAMxF,EAAG31B,OAETs0D,EAAgB,SAAuBjwC,EAAKjJ,EAAQxa,GACtD,IAAIghC,EAAWyyB,EAAYhwC,EAAM8W,EAAM,EAAI9W,EAC3C,KAAIud,EAAW,GAAf,CACA,IAAI1D,EAAO1d,EAAQiY,QAAQmJ,GACvBif,EAAa3iB,EAAK2J,OAAOlS,EAAG,IAChC,MAAK0+B,GAAaxT,EAAazlC,IAA0B,IAAhBylC,GAAzC,CAEA,IAAK,IAAIz/C,EAAI,EAAGA,EAAI+5B,EAAK/5B,IAEvB,IAA2B,IAD3B88B,EAAO1d,EAAQiY,QAAQmJ,EAAWxgC,IACzBymC,OAAOlS,EAAGv0B,IAAW,OAGhC,IAAI0/C,EAAW5iB,EAAKn7B,MAAM4yB,EAAGwF,EAAM,IAAI,GAAGn7B,OAC1C,KAAIq0D,GAAavT,EAAW1lC,GAC5B,QAAIxa,EAASghC,EAAUif,EAAYjf,EAAWzG,EAAM,EAAG2lB,SAAvD,UAEG,GAAIuT,EACLC,EAAgB,SAAuBjwC,EAAKy8B,EAAUlgD,GACxD,IAEIs0B,EAFAgJ,EAAO1d,EAAQiY,QAAQpU,GACvBlJ,EAAU,GAEVrB,EAAO,EAGX,IAFA6b,EAAGxyB,UAAY,EAER+xB,EAAIS,EAAG/yB,KAAKs7B,IAAO,CACxB,IAAIl+B,EAASk1B,EAAE,GAAGl1B,OAGlB,GAFA8Z,EAAOob,EAAEhxB,OAEJlE,EAAQ,CACX,GAAI8Z,GAAQokB,EAAKl+B,OAAQ,MACzB21B,EAAGxyB,UAAY2W,GAAQ,EAGzB,GAAIob,EAAEhxB,MAAQlE,EAAS8gD,EAAU,MACjC3lC,EAAQ3Z,KAAK0zB,EAAEhxB,MAAOlE,GAGxB,IAAK,IAAIoB,EAAI+Z,EAAQnb,OAAS,EAAGoB,GAAK,EAAGA,GAAK,EAAG,CAC/C,IAAImjB,EAASpJ,EAAQ/Z,EAAI,GAEzB,GAAIR,EAASyjB,EAAKE,EAAQF,EAAKE,GAD3BvkB,EAASmb,EAAQ/Z,KAC4B,OAAO,SAIxDkzD,EAAgB,SAAuBjwC,EAAKw8B,EAAYjgD,GAC1D,IACIs0B,EADAgJ,EAAO1d,EAAQiY,QAAQpU,GAEvBvK,EAAO+mC,EAGX,IAFAlrB,EAAGxyB,UAAY09C,EAER3rB,EAAIS,EAAG/yB,KAAKs7B,IAAO,CACxB,IAAIl+B,EAASk1B,EAAE,GAAGl1B,OAElB,GAAIY,EAASyjB,EADbvK,EAAOob,EAAEhxB,MACemgB,EAAKvK,EAAO9Z,GAAS,OAAO,EAEpD,IAAKA,IACH21B,EAAGxyB,UAAY2W,GAAQ,EACnBA,GAAQokB,EAAKl+B,QAAQ,OAAO,IAMxC,MAAO,CACLuH,QAASA,MAGZrG,KAAK6xD,EAAO/xD,WAWfoB,EAAQ2wD,OAASA,KAEnBtwD,IAAI9C,OAAO,4BAA6B,CAAC,UAAW,UAAW,SAAU,eAAgB,sBAAsB,SAAU4B,EAAUa,EAASxC,GAC1I,aAEA,IAAI+4B,EAAUp3B,EAAS,eACnB2S,EAAY3S,EAAS,oBACrB6P,EAAWunB,EAAQvnB,SAEvB,SAASmjD,EAAYn+B,EAAQzjB,GAC3BlT,KAAKkT,SAAWA,IAAauB,EAAU3B,MAAQ,MAAQ,OACvD9S,KAAKu5B,SAAW,GAChBv5B,KAAK+0D,kBAAoB,GACzB/0D,KAAKg1D,YAAYr+B,GACjB32B,KAAKi1D,gBAAiB,EAGxB,SAASC,EAAiBv+B,EAAQzjB,GAChC4hD,EAAYrzD,KAAKzB,KAAM22B,EAAQzjB,GAC/BlT,KAAKi1D,gBAAiB,EAGxBC,EAAiB3zD,UAAYuzD,EAAYvzD,UACzC,WAgEE,SAASwjC,EAAYzK,GACnB,MAAyB,iBAAXA,GAAuBA,EAAQ66B,SAAW76B,EAAQ66B,QAAQjmD,WAAaorB,EAAQ86B,WAAa,IAAM,GAhElHp1D,KAAKq1D,WAAa,SAAU/6B,GACtBt6B,KAAKu5B,SAASe,EAAQh2B,OAAOtE,KAAKs1D,cAAch7B,GACpDt6B,KAAKu5B,SAASe,EAAQh2B,MAAQg2B,EAC1BA,EAAQ66B,SAASn1D,KAAKu1D,cAAcj7B,IAG1Ct6B,KAAKs1D,cAAgB,SAAUh7B,EAASk7B,GACtC,IAAIlxD,EAAOg2B,IAA+B,iBAAZA,EAAuBA,EAAUA,EAAQh2B,MACvEg2B,EAAUt6B,KAAKu5B,SAASj1B,GACnBkxD,UAAoBx1D,KAAKu5B,SAASj1B,GACvC,IAAImxD,EAAMz1D,KAAK+0D,kBAEf,IAAK,IAAIW,KAASD,EAAK,CACrB,IAAIE,EAAWF,EAAIC,GAEnB,GAAIC,GAAYr7B,SACPm7B,EAAIC,QACN,GAAItxD,MAAMoD,QAAQmuD,GAAW,CAClC,IAAIh0D,EAAIg0D,EAASxzD,QAAQm4B,IAEf,GAAN34B,IACFg0D,EAASvvD,OAAOzE,EAAG,GACI,GAAnBg0D,EAASp1D,SAAak1D,EAAIC,GAASC,EAAS,QAMxD31D,KAAKm1D,QAAU,SAAU3pD,EAAK8uB,EAASprB,GAMrC,GALkB,iBAAP1D,GAAmBA,IACZnK,MAAZ6N,IAAuBA,EAAW1D,EAAI0D,UAC1C1D,EAAMA,EAAIxL,KAAKkT,WAGZ1H,EACL,MAAsB,mBAAX8uB,EAA8Bt6B,KAAKq1D,WAAW,CACvDlyD,KAAMm3B,EACN66B,QAAS3pD,EACTlH,KAAMg2B,EAAQh2B,MAAQkH,SAExBA,EAAInJ,MAAM,KAAKyF,SAAQ,SAAU8tD,GAC/B,IAAIC,EAAQ,GAEZ,IAA6B,GAAzBD,EAAQzzD,QAAQ,KAAY,CAC9B,IAAI6zB,EAAQ4/B,EAAQvzD,MAAM,OAC1BuzD,EAAU5/B,EAAMxD,MAChBwD,EAAMluB,SAAQ,SAAU8tD,GACtB,IAAIE,EAAU91D,KAAK+1D,UAAUH,GACzB/yD,EAAK8O,EAASmkD,EAAQj9C,QAAUi9C,EAAQtqD,IAC5CqqD,IAAUA,EAAQ,IAAM,IAAMhzD,EAE9B7C,KAAKg2D,qBAAqBH,EAAO,eAChC71D,MACH61D,GAAS,IAGX,IAAIC,EAAU91D,KAAK+1D,UAAUH,GACzB/yD,EAAK8O,EAASmkD,EAAQj9C,QAAUi9C,EAAQtqD,IAE5CxL,KAAKg2D,qBAAqBH,EAAQhzD,EAAIy3B,EAASprB,KAC9ClP,OAOLA,KAAKg2D,qBAAuB,SAAUN,EAAOp7B,EAASprB,GACpD,IACIvN,EADA8zD,EAAMz1D,KAAK+0D,kBAGf,GAAKz6B,EAEE,IAAKm7B,EAAIC,IAAU11D,KAAKi1D,eAC7BQ,EAAIC,GAASp7B,MACR,CACAl2B,MAAMoD,QAAQiuD,EAAIC,KAE0B,IAArC/zD,EAAI8zD,EAAIC,GAAOvzD,QAAQm4B,KACjCm7B,EAAIC,GAAOtvD,OAAOzE,EAAG,GAFrB8zD,EAAIC,GAAS,CAACD,EAAIC,IAKG,iBAAZxmD,IACTA,EAAW61B,EAAYzK,IAGzB,IAAIf,EAAWk8B,EAAIC,GAEnB,IAAK/zD,EAAI,EAAGA,EAAI43B,EAASh5B,OAAQoB,IAAK,CAGpC,GADeojC,EADHxL,EAAS53B,IAENuN,EAAU,MAG3BqqB,EAASnzB,OAAOzE,EAAG,EAAG24B,eAtBfm7B,EAAIC,IA0Bf11D,KAAKg1D,YAAc,SAAUz7B,GAC3BA,GAAYj4B,OAAOsI,KAAK2vB,GAAUzxB,SAAQ,SAAUxD,GAClD,IAAIg2B,EAAUf,EAASj1B,GACvB,GAAKg2B,EAAL,CACA,GAAuB,iBAAZA,EAAsB,OAAOt6B,KAAKm1D,QAAQ76B,EAASh2B,GACvC,mBAAZg2B,IAAwBA,EAAU,CAC3Cn3B,KAAMm3B,IAEe,iBAAZA,IACNA,EAAQh2B,OAAMg2B,EAAQh2B,KAAOA,GAClCtE,KAAKq1D,WAAW/6B,OACft6B,OAGLA,KAAKi2D,eAAiB,SAAU18B,GAC9Bj4B,OAAOsI,KAAK2vB,GAAUzxB,SAAQ,SAAUxD,GACtCtE,KAAKs1D,cAAc/7B,EAASj1B,MAC3BtE,OAGLA,KAAKk2D,SAAW,SAAUC,GACxB70D,OAAOsI,KAAKusD,GAASruD,SAAQ,SAAU0D,GACrCxL,KAAKm1D,QAAQ3pD,EAAK2qD,EAAQ3qD,MACzBxL,OAGLA,KAAKu1D,cAAgB,SAAUj7B,GAC7Bt6B,KAAKm1D,QAAQ76B,EAAQ66B,QAAS76B,IAGhCt6B,KAAK+1D,UAAY,SAAUnsD,GACzB,IAAIosB,EAAQpsB,EAAKkI,cAAczP,MAAM,mBAAmBgG,QAAO,SAAUpF,GACvE,OAAOA,KAELuI,EAAMwqB,EAAMxD,MACZlgB,EAAU4mB,EAAQ1tB,GACtB,GAAI0tB,EAAQtnB,cAAcU,GAAU9G,EAAM0tB,EAAQtnB,cAAcU,GAASR,kBAAmB,KAAKkkB,EAAMz1B,OAAQ,MAAO,CACpHiL,IAAKA,EACLqN,QAAS,GACJ,GAAoB,GAAhBmd,EAAMz1B,QAA2B,SAAZy1B,EAAM,GAAe,MAAO,CAC1DxqB,IAAKA,EAAImqB,cACT9c,QAAS,GAIX,IAFA,IAAIA,EAAS,EAEJlX,EAAIq0B,EAAMz1B,OAAQoB,KAAM,CAC/B,IAAI8yD,EAAWv7B,EAAQvnB,SAASqkB,EAAMr0B,IAEtC,GAAgB,MAAZ8yD,EAEF,MADsB,oBAAX7zD,SAAwBA,QAAQC,MAAM,oBAAsBm1B,EAAMr0B,GAAK,OAASiI,IACpF,EAGTiP,GAAU47C,EAGZ,MAAO,CACLjpD,IAAKA,EACLqN,OAAQA,IAIZ7Y,KAAKo2D,eAAiB,SAAwBv9C,EAAQtG,GACpD,IAAI/G,EAAMmG,EAASkH,GAAUtG,EAC7B,OAAOvS,KAAK+0D,kBAAkBvpD,IAGhCxL,KAAK85B,eAAiB,SAAUhgB,EAAMjB,EAAQtG,EAAWD,GACvD,KAAIA,EAAU,GAAd,CACA,IAAI9G,EAAMmG,EAASkH,GAAUtG,EACzB+nB,EAAUt6B,KAAK+0D,kBAAkBvpD,GAOrC,OALIsO,EAAKu8C,YACPv8C,EAAKu8C,WAAa,IAAM7qD,EACxB8uB,EAAUt6B,KAAK+0D,kBAAkBj7C,EAAKu8C,YAAc/7B,IAGlDA,GACa,aAAXA,GAAyD,aAA/BA,EAAQA,EAAQ/5B,OAAS,IAQrDuZ,EAAKu8C,YACDx9C,GAAoB,GAAVA,GAAoC,GAApBtG,EAAUhS,SACtB,GAAXsY,GAAgBvG,EAAU,KAAGwH,EAAKu8C,UAAY,IADAv8C,EAAKu8C,UAAYv8C,EAAKu8C,UAAU9zD,MAAM,GAAIiJ,EAAIjL,OAAS,IAIzG,CACL+5B,QAASA,KAbPxgB,EAAKu8C,UAAYv8C,EAAKu8C,WAAa7qD,EAC5B,CACL8uB,QAAS,WAejBt6B,KAAKk6B,cAAgB,SAAUnW,EAAQjK,GACrC,OAAOA,EAAKu8C,WAAa,KAE1B50D,KAAKqzD,EAAYvzD,WACpBoB,EAAQmyD,YAAcA,EACtBnyD,EAAQuyD,iBAAmBA,KAE7BlyD,IAAI9C,OAAO,+BAAgC,CAAC,UAAW,UAAW,SAAU,cAAe,4BAA6B,0BAA0B,SAAU4B,EAAUa,EAASxC,GAC7K,aAEA,IAAIoR,EAAMzP,EAAS,cACfozD,EAAmBpzD,EAAS,4BAA4BozD,iBACxDxjC,EAAe5vB,EAAS,wBAAwB4vB,aAEhD4kC,EAAiB,SAAwBpjD,EAAUqmB,GACrD27B,EAAiBzzD,KAAKzB,KAAMu5B,EAAUrmB,GACtClT,KAAKu2D,OAASv2D,KAAKu5B,SACnBv5B,KAAKgkB,kBAAkB,QAAQ,SAAUxO,GACvC,OAAOA,EAAE8kB,QAAQn3B,KAAKqS,EAAEuO,OAAQvO,EAAEtQ,MAAQ,QAI9CqM,EAAIR,SAASulD,EAAgBpB,GAC7B,WACE3jD,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAKmD,KAAO,SAAUm3B,EAASvW,EAAQ7e,GACrC,GAAId,MAAMoD,QAAQ8yB,GAAU,CAC1B,IAAK,IAAI34B,EAAI24B,EAAQ/5B,OAAQoB,KAC3B,GAAI3B,KAAKmD,KAAKm3B,EAAQ34B,GAAIoiB,EAAQ7e,GAAO,OAAO,EAGlD,OAAO,EAIT,GADuB,iBAAZo1B,IAAsBA,EAAUt6B,KAAKu5B,SAASe,KACpDA,EAAS,OAAO,EACrB,GAAIvW,GAAUA,EAAOvD,YAAc8Z,EAAQtY,SAAU,OAAO,EAC5D,GAAIsY,EAAQk8B,cAAgBl8B,EAAQk8B,YAAYzyC,GAAS,OAAO,EAChE,IAAIvO,EAAI,CACNuO,OAAQA,EACRuW,QAASA,EACTp1B,KAAMA,GAMR,OAJAsQ,EAAEpK,YAAcpL,KAAKkiB,MAAM,OAAQ1M,GAEnCxV,KAAKyqB,QAAQ,YAAajV,IAED,IAAlBA,EAAEpK,aAGXpL,KAAKy2D,gBAAkB,SAAU1yC,GAC/B,IAAI/jB,KAAK02D,UAGT,OAFA3yC,GAAUA,EAAO7B,MAAM,gBAEnBliB,KAAK22D,WACP32D,KAAK42D,MAAMpkC,MACXxyB,KAAKqV,oBAAoB,OAAQrV,KAAK62D,oBACjC72D,KAAK42D,MAAMr2D,SAAQP,KAAK42D,MAAQ52D,KAAK82D,UACnC92D,KAAK22D,WAAY,IAGrB32D,KAAK62D,qBACR72D,KAAK62D,mBAAqB,SAAUrhD,GAClCxV,KAAK42D,MAAM70D,KAAK,CAACyT,EAAE8kB,QAAS9kB,EAAEtQ,QAC9BJ,KAAK9E,OAGTA,KAAK82D,SAAW92D,KAAK42D,MACrB52D,KAAK42D,MAAQ,GACb52D,KAAK6hB,GAAG,OAAQ7hB,KAAK62D,oBACd72D,KAAK22D,WAAY,IAG1B32D,KAAK+2D,OAAS,SAAUhzC,GACtB,IAAI/jB,KAAK02D,WAAc12D,KAAK42D,MAA5B,CACA,GAAI52D,KAAK22D,UAAW,OAAO32D,KAAKy2D,gBAAgB1yC,GAEhD,IACE/jB,KAAK02D,WAAY,EACjB12D,KAAK42D,MAAM9uD,SAAQ,SAAU7E,GACX,iBAALA,EAAejD,KAAKmD,KAAKF,EAAG8gB,GAAa/jB,KAAKmD,KAAKF,EAAE,GAAI8gB,EAAQ9gB,EAAE,MAC7EjD,MACH,QACAA,KAAK02D,WAAY,KAIrB12D,KAAKg3D,UAAY,SAAUvhC,GACzB,OAAOA,EAAErtB,KAAI,SAAUnF,GAGrB,MAFmB,iBAARA,EAAE,KAAgBA,EAAE,GAAKA,EAAE,GAAGqB,MACpCrB,EAAE,KAAIA,EAAIA,EAAE,IACVA,OAGVxB,KAAK60D,EAAe/0D,WACvBoB,EAAQ2zD,eAAiBA,KAE3BtzD,IAAI9C,OAAO,gCAAiC,CAAC,UAAW,UAAW,SAAU,eAAgB,aAAc,cAAc,SAAU4B,EAAUa,EAASxC,GACpJ,aAEA,IAAIqc,EAAO1a,EAAS,eAChB60B,EAAS70B,EAAS,aAClBogC,EAAQpgC,EAAS,YAAYogC,MAEjC,SAASizB,EAAQx7C,EAAKs9C,GACpB,MAAO,CACLt9C,IAAKA,EACLs9C,IAAKA,GAITt0D,EAAQ42B,SAAW,CAAC,CAClBj1B,KAAM,mBACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClB4S,EAAOL,WAAW,yBAAyB,SAAUn2B,GACnDA,EAAO00B,KAAK9Q,GACZA,EAAOmzC,uBAGXl1C,UAAU,GACT,CACD1d,KAAM,gBACN6wD,QAASA,EAAQ,QAAS,MAC1BhyD,KAAM,SAAc4gB,GAClB4S,EAAOL,WAAW,wBAAwB,SAAUn2B,GAClDA,EAAOg3D,gBAAgBpzC,EAAQ,OAGnCqzC,eAAgB,UAChBp1C,UAAU,GACT,CACD1d,KAAM,oBACN6wD,QAASA,EAAQ,cAAe,YAChChyD,KAAM,SAAc4gB,GAClB4S,EAAOL,WAAW,wBAAwB,SAAUn2B,GAClDA,EAAOg3D,gBAAgBpzC,GAAS,OAGpCqzC,eAAgB,UAChBp1C,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO1D,aAET2B,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAASA,EAAQ,KAAM,UACvBhyD,KAAM,SAAc4gB,GAClBA,EAAOszC,mBAETr1C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClB,IAAI0a,EAAOnwB,SAASgpD,OAAO,sBAAuB,IAE7C/K,MAAM9tB,IACT1a,EAAOwzC,SAAS94B,IAGpBzc,UAAU,GACT,CACD1d,KAAM,OACN6wD,QAASA,EAAQ,gBAAiB,4BAClChyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQ4jC,YAAW,IAE5B6S,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,SACN6wD,QAASA,EAAQ,4BAA6B,wCAC9ChyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQ4jC,YAAW,IAE5B6S,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACN6wD,QAASA,EAAQ,KAAM,MACvBhyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQklC,oBAEjBuR,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,yBACN6wD,QAASA,EAAQ,SAAU,UAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQklC,kBAAiB,IAElCuR,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,UACN6wD,QAASA,EAAQ,KAAM,yBACvBhyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQ+iC,WAEjBsT,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAASA,EAAQ,QAAS,oBAC1BhyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQ+iC,UACf//B,EAAOhD,QAAQijC,OAAOjgC,EAAOpF,UAAU84C,iBAEzCL,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAASA,EAAQ,cAAe,0BAChChyD,KAAM,SAAc4gB,GAClBA,EAAOhD,QAAQijC,UAEjBoT,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO2zC,YAETF,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,eACN6wD,QAASA,EAAQ,eAAgB,mBACjChyD,KAAM,SAAc4gB,GAClBA,EAAO4zC,gBAETH,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACN6wD,QAASA,EAAQ,QAAS,UAC1BhyD,KAAM,SAAc4gB,GACdA,EAAOpF,UAAUN,UAAW0F,EAAOpF,UAAUkoB,aAAkB9iB,EAAO2zC,YAE5E11C,UAAU,GACT,CACD1d,KAAM,uBACN6wD,QAASA,EAAQ,cAAe,gBAChChyD,KAAM,SAAc4gB,GACdA,EAAOpF,UAAUN,UAAW0F,EAAOpF,UAAUkoB,aAAkB9iB,EAAO4zC,gBAE5E31C,UAAU,GACT,CACD1d,KAAM,OACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClB4S,EAAOL,WAAW,qBAAqB,SAAU9gB,GAC/CA,EAAE89C,OAAOvvC,OAGb/B,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAAS,SACThyD,KAAM,SAAc4gB,GAClBA,EAAO+lC,mBAET9nC,UAAU,GACT,CACD1d,KAAM,gBACN6wD,QAASA,EAAQ,kBAAmB,uCACpChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeniB,mBAExBixB,kBAAmB,UACnBx1C,UAAU,EACVo1C,eAAgB,UAChBQ,gBAAiB,YAChB,CACDtzD,KAAM,YACN6wD,QAASA,EAAQ,YAAa,2BAC9BhyD,KAAM,SAAc4gB,GAClBA,EAAO8zC,qBAETL,kBAAmB,UACnBx1C,UAAU,EACVo1C,eAAgB,UAChBQ,gBAAiB,YAChB,CACDtzD,KAAM,WACN6wD,QAASA,EAAQ,WAAY,yBAC7BhyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAejjB,YAExB+xB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,KAAM,aACvBhyD,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAO+zC,WAAW5yD,EAAK6yD,QAEzBP,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,cACN6wD,QAASA,EAAQ,iBAAkB,wCACnChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeriB,iBAExBmxB,kBAAmB,UACnBx1C,UAAU,EACVo1C,eAAgB,UAChBQ,gBAAiB,YAChB,CACDtzD,KAAM,UACN6wD,QAASA,EAAQ,WAAY,4BAC7BhyD,KAAM,SAAc4gB,GAClBA,EAAOi0C,mBAETR,kBAAmB,UACnBx1C,UAAU,EACVo1C,eAAgB,UAChBQ,gBAAiB,YAChB,CACDtzD,KAAM,aACN6wD,QAASA,EAAQ,aAAc,2BAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAe/iB,cAExB6xB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,aACN6wD,QAASA,EAAQ,OAAQ,eACzBhyD,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAOk0C,aAAa/yD,EAAK6yD,QAE3BP,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,iBACN6wD,QAASA,EAAQ,kBAAmB,qBACpChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAe/hB,kBAExB6wB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,eACN6wD,QAASA,EAAQ,YAAa,eAC9BhyD,KAAM,SAAc4gB,GAClBA,EAAOm0C,oBAETV,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,oBACN6wD,QAASA,EAAQ,iBAAkB,mCACnChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeziB,mBAExBuxB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,gBACN6wD,QAASA,EAAQ,gBAAiB,4BAClChyD,KAAM,SAAc4gB,GAClBA,EAAOo0C,qBAETX,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,aACN6wD,QAASA,EAAQ,aAAc,2BAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAe3iB,cAExByxB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,OAAQ,eACzBhyD,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAOq0C,aAAalzD,EAAK6yD,QAE3BP,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAASA,EAAQ,mBAAoB,sBACrChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAejiB,mBAExB+wB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,gBACN6wD,QAASA,EAAQ,aAAc,gBAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAOs0C,qBAETb,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAASA,EAAQ,kBAAmB,8CACpChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeviB,iBAExBqxB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,cACN6wD,QAASA,EAAQ,gBAAiB,4BAClChyD,KAAM,SAAc4gB,GAClBA,EAAOu0C,mBAETd,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,cACN6wD,QAASA,EAAQ,cAAe,eAChChyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAe7iB,eAExB2xB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAASA,EAAQ,QAAS,gBAC1BhyD,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAOw0C,cAAcrzD,EAAK6yD,QAE5BP,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,iBACN6wD,QAAS,iBACThyD,KAAM,SAAc4gB,GAClBA,EAAOy0C,kBAETx2C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,KAAM,mBACvBhyD,KAAM,SAAc4gB,GAClBA,EAAO00C,kBAETz2C,UAAU,GACT,CACD1d,KAAM,eACN6wD,QAASA,EAAQ,WAAY,mBAC7BhyD,KAAM,SAAc4gB,GAClBA,EAAO20C,gBAET12C,UAAU,GACT,CACD1d,KAAM,eACN6wD,QAAS,eACThyD,KAAM,SAAc4gB,GAClBA,EAAO40C,gBAET32C,UAAU,GACT,CACD1d,KAAM,SACN6wD,QAASA,EAAQ,KAAM,iBACvBhyD,KAAM,SAAc4gB,GAClBA,EAAO60C,gBAET52C,UAAU,GACT,CACD1d,KAAM,aACN6wD,QAAS,SACThyD,KAAM,SAAc4gB,GAClBA,EAAO80C,cAET72C,UAAU,GACT,CACD1d,KAAM,WACN6wD,QAASA,EAAQ,UAAW,MAC5BhyD,KAAM,SAAcqS,GAClBA,EAAEgM,SAASkH,SAAS,GAAI,EAAIlT,EAAEgM,SAASyL,YAAYD,aAErDhL,UAAU,GACT,CACD1d,KAAM,aACN6wD,QAASA,EAAQ,YAAa,MAC9BhyD,KAAM,SAAcqS,GAClBA,EAAEgM,SAASkH,SAAS,EAAG,EAAIlT,EAAEgM,SAASyL,YAAYD,aAEpDhL,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAAS,aACThyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeziB,mBAExBuxB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,gBACN6wD,QAAS,YACThyD,KAAM,SAAc4gB,GAClBA,EAAO2kC,eAAeviB,iBAExBqxB,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAASA,EAAQ,aAAc,oBAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAOwV,SAASk9B,gBAAgB1yC,IAElC/B,UAAU,GACT,CACD1d,KAAM,cACN6wD,QAASA,EAAQ,eAAgB,mBACjChyD,KAAM,SAAc4gB,GAClBA,EAAOwV,SAASw9B,OAAOhzC,IAEzB/B,UAAU,GACT,CACD1d,KAAM,iBACN6wD,QAASA,EAAQ,SAAU,UAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO+0C,kBAETtB,kBAAmB,UACnBJ,eAAgB,UAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACN6wD,QAASA,EAAQ,eAAgB,gBACjChyD,KAAM,SAAc4gB,GAClBA,EAAO+0C,gBAAe,IAExBtB,kBAAmB,UACnBJ,eAAgB,UAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACN6wD,QAASA,EAAQ,eAAgB,gBACjChyD,KAAM,SAAc4gB,GAClBA,EAAO+0C,gBAAe,GAAM,IAE9BtB,kBAAmB,UACnBJ,eAAgB,UAChBp1C,UAAU,GACT,CACD1d,KAAM,oBACN6wD,QAASA,EAAQ,KAAM,MACvBhyD,KAAM,aACNo3B,WAAW,EACXvY,UAAU,GACT,CACD1d,KAAM,OACNnB,KAAM,SAAc4gB,KACpB/B,UAAU,GACT,CACD1d,KAAM,MACNnB,KAAM,SAAc4gB,GAClB,IAAI9C,EAAQ8C,EAAOsB,oBAEnBtB,EAAO7B,MAAM,MAAOjB,GAEf8C,EAAOpF,UAAUN,YACpB0F,EAAOhD,QAAQ7Z,OAAO+Z,GACtB8C,EAAO5C,mBAGXi2C,eAAgB,SAChBI,kBAAmB,WAClB,CACDlzD,KAAM,QACNnB,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAOg1C,aAAa7zD,IAEtBkyD,eAAgB,UACf,CACD9yD,KAAM,aACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO44B,eAETya,eAAgB,SAChBI,kBAAmB,eAClB,CACDlzD,KAAM,qBACN6wD,QAASA,EAAQ,eAAgB,mBACjChyD,KAAM,SAAc4gB,GAClBA,EAAOi1C,sBAET5B,eAAgB,SAChBI,kBAAmB,WAClB,CACDlzD,KAAM,YACN6wD,QAASA,EAAQ,aAAc,iBAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAOk1C,aAET7B,eAAgB,YAChBI,kBAAmB,eAClB,CACDlzD,KAAM,gBACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO+yB,sBAET0gB,kBAAmB,cACnBJ,eAAgB,iBACf,CACD9yD,KAAM,qBACN6wD,QAASA,EAAQ,eAAgB,mBACjChyD,KAAM,SAAc4gB,GAClBA,EAAOq0B,sBAETof,kBAAmB,UACnBJ,eAAgB,iBACf,CACD9yD,KAAM,iBACN6wD,QAASA,EAAQ,gBAAiB,gBAClChyD,KAAM,SAAc4gB,GAClBA,EAAOm1C,aAAa,IAEtB9B,eAAgB,SAChBI,kBAAmB,WAClB,CACDlzD,KAAM,mBACN6wD,QAASA,EAAQ,kBAAmB,kBACpChyD,KAAM,SAAc4gB,GAClBA,EAAOm1C,cAAc,IAEvB9B,eAAgB,SAChBI,kBAAmB,WAClB,CACDlzD,KAAM,UACN6wD,QAASA,EAAQ,SAAU,oBAC3BhyD,KAAM,SAAc4gB,GAClB4S,EAAOL,WAAW,qBAAqB,SAAU9gB,GAC/CA,EAAE89C,OAAOvvC,GAAQ,QAGpB,CACDzf,KAAM,OACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAOpD,SAER,CACDrc,KAAM,OACN6wD,QAASA,EAAQ,sBAAuB,6BACxChyD,KAAM,SAAc4gB,GAClBA,EAAOklC,SAER,CACD3kD,KAAM,cACN6wD,QAASA,EAAQ,eAAgB,qBACjChyD,KAAM,SAAc4gB,GAClBA,EAAOo1C,eAET/B,eAAgB,UACf,CACD9yD,KAAM,cACN6wD,QAASA,EAAQ,SAAU,aAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAOmrC,eAETkI,eAAgB,UACf,CACD9yD,KAAM,gBACN6wD,QAASA,EAAQ,iBAAkB,uBACnChyD,KAAM,SAAc4gB,GAClBA,EAAOq1C,iBAEThC,eAAgB,UACf,CACD9yD,KAAM,gBACN6wD,QAASA,EAAQ,WAAY,eAC7BhyD,KAAM,SAAc4gB,GAClBA,EAAOorC,iBAETiI,eAAgB,UACf,CACD9yD,KAAM,MACN6wD,QAASA,EAAQ,SAAU,8BAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO7c,OAAO,UAEhBswD,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,YACN6wD,QAASA,EAAQ,4BAA6B,mDAC9ChyD,KAAM,SAAc4gB,GAClBA,EAAO7c,OAAO,SAEhBswD,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,gBACN6wD,QAASA,EAAQ,eAAgB,MACjChyD,KAAM,SAAc4gB,GAClB,IAAIA,EAAOpF,UAAUN,UAGnB,OAAO,EAFP0F,EAAO7c,OAAO,SAKlBswD,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,oBACN6wD,QAASA,EAAQ,gBAAiB,qBAClChyD,KAAM,SAAc4gB,GAClBA,EAAOs1C,qBAET7B,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,kBACN6wD,QAASA,EAAQ,aAAc,yBAC/BhyD,KAAM,SAAc4gB,GAClBA,EAAOu1C,mBAET9B,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,wBACN6wD,QAASA,EAAQ,uBAAwB,MACzChyD,KAAM,SAAc4gB,GAClB,IAAI9C,EAAQ8C,EAAOpF,UAAUmC,WAC7BG,EAAMxa,MAAMqe,OAAS,EACrBf,EAAOhD,QAAQ7Z,OAAO+Z,IAExBu2C,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,sBACN6wD,QAASA,EAAQ,oBAAqB,MACtChyD,KAAM,SAAc4gB,GAClB,IAAI9C,EAAQ8C,EAAOpF,UAAUmC,WAC7BG,EAAMuC,IAAIsB,OAASkqC,OAAOC,UAC1BlrC,EAAOhD,QAAQ7Z,OAAO+Z,IAExBu2C,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,iBACN6wD,QAASA,EAAQ,iBAAkB,oCACnChyD,KAAM,SAAc4gB,GAClBA,EAAOw1C,kBAET/B,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,kBACN6wD,QAASA,EAAQ,cAAe,cAChChyD,KAAM,SAAc4gB,GAClBA,EAAOy1C,mBAEThC,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,UACN6wD,QAASA,EAAQ,YAAa,aAC9BhyD,KAAM,SAAc4gB,GAClBA,EAAO01C,gBAETjC,kBAAmB,UACnBJ,eAAgB,iBACf,CACD9yD,KAAM,SACN6wD,QAASA,EAAQ,MAAO,OACxBhyD,KAAM,SAAc4gB,GAClBA,EAAOkc,UAETu3B,kBAAmB,UACnBJ,eAAgB,iBACf,CACD9yD,KAAM,eACN6wD,QAASA,EAAQ,SAAU,UAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO01C,gBAETjC,kBAAmB,cACnBJ,eAAgB,iBACf,CACD9yD,KAAM,cACN6wD,QAASA,EAAQ,SAAU,UAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO21C,eAETlC,kBAAmB,cACnBJ,eAAgB,iBACf,CACD9yD,KAAM,eACNnB,KAAM,SAAc4gB,EAAQ1f,GAC1B0f,EAAO/c,OAAO3C,IAEhBmzD,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,aACNnB,KAAM,SAAc4gB,EAAQ7e,GAC1B6e,EAAO/c,OAAOwV,EAAK/B,aAAavV,EAAK6X,MAAQ,GAAI7X,EAAK6yD,OAAS,KAEjEP,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,YACN6wD,QAASA,EAAQ,KAAM,UACvBhyD,KAAM,SAAc4gB,GAClBA,EAAO41C,aAETnC,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,mBACN6wD,QAASA,EAAQ,cAAe,UAChChyD,KAAM,SAAc4gB,GAClBA,EAAO61C,oBAETpC,kBAAmB,SAA2BzzC,GAC5CA,EAAO81C,oBAAoB,IAE7BzC,eAAgB,UACf,CACD9yD,KAAM,cACN6wD,QAASA,EAAQ,SAAU,UAC3BhyD,KAAM,SAAc4gB,GAClBA,EAAO4R,eAET6hC,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,cACN6wD,QAASA,EAAQ,eAAgB,gBACjChyD,KAAM,SAAc4gB,GAClBA,EAAOjS,eAET0lD,kBAAmB,UACnBJ,eAAgB,UACf,CACD9yD,KAAM,eACN6wD,QAASA,EAAQ,eAAgB,mBACjChyD,KAAM,SAAc4gB,GAClB,IAAI9C,EAAQ8C,EAAOpF,UAAUmC,WAC7BG,EAAMxa,MAAMqe,OAAS7D,EAAMuC,IAAIsB,OAAS,EACxC7D,EAAMuC,IAAIoB,MACVb,EAAOpF,UAAUuC,SAASD,GAAO,IAEnCu2C,kBAAmB,UACnBJ,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,YACN6wD,QAASA,EAAQ,KAAM,MACvBhyD,KAAM,SAAc4gB,GASlB,IARA,IAAIshB,EAActhB,EAAOpF,UAAU0mB,cAC/B9mB,EAAiB8mB,EAActhB,EAAOpF,UAAUsmB,mBAAqBlhB,EAAOpF,UAAUqmB,qBACtFxmB,EAAe6mB,EAActhB,EAAOpF,UAAUqmB,qBAAuBjhB,EAAOpF,UAAUsmB,mBACtF60B,EAAkB/1C,EAAOhD,QAAQzU,IAAI0sB,QAAQza,EAAeqG,KAAKrkB,OAEjEw5D,EADeh2C,EAAOhD,QAAQzU,IAAIyiB,aAAahL,EAAOpF,UAAUmC,YACnCpe,QAAQ,QAAS,KAAKnC,OACnDy5D,EAAaj2C,EAAOhD,QAAQzU,IAAI0sB,QAAQza,EAAeqG,KAElDjjB,EAAI4c,EAAeqG,IAAM,EAAGjjB,GAAK6c,EAAaoG,IAAM,EAAGjjB,IAAK,CACnE,IAAIs4D,EAAUz9C,EAAK7B,eAAe6B,EAAK5B,gBAAgBmJ,EAAOhD,QAAQzU,IAAI0sB,QAAQr3B,KAE3D,IAAnBs4D,EAAQ15D,SACV05D,EAAU,IAAMA,GAGlBD,GAAcC,EAGZz7C,EAAaoG,IAAM,EAAIb,EAAOhD,QAAQzU,IAAI4e,YAAc,IAC1D8uC,GAAcj2C,EAAOhD,QAAQzU,IAAIwvC,uBAGnC/3B,EAAO5C,iBACP4C,EAAOhD,QAAQzU,IAAI5J,QAAQ,IAAIw/B,EAAM3jB,EAAeqG,IAAK,EAAGpG,EAAaoG,IAAM,EAAG,GAAIo1C,GAElFD,EAAgB,GAClBh2C,EAAOpF,UAAUymB,aAAa7mB,EAAeqG,IAAKrG,EAAeuG,QACjEf,EAAOpF,UAAUiM,SAASrM,EAAeqG,IAAKrG,EAAeuG,OAASi1C,KAEtED,EAAkB/1C,EAAOhD,QAAQzU,IAAI0sB,QAAQza,EAAeqG,KAAKrkB,OAASu5D,EAAkBA,EAAkB,EAAIA,EAClH/1C,EAAOpF,UAAUymB,aAAa7mB,EAAeqG,IAAKk1C,KAGtDtC,kBAAmB,UACnBx1C,UAAU,GACT,CACD1d,KAAM,kBACN6wD,QAASA,EAAQ,KAAM,MACvBhyD,KAAM,SAAc4gB,GAClB,IAAIse,EAASte,EAAOhD,QAAQzU,IAAI4e,YAAc,EAC1CoW,EAASvd,EAAOhD,QAAQzU,IAAI0sB,QAAQqJ,GAAQ9hC,OAC5CwpC,EAAShmB,EAAOpF,UAAUurB,UAAUH,OACpCmwB,EAAY,GAEZnwB,EAAOxpC,OAAS,IAClBwpC,EAAS,CAAChmB,EAAOpF,UAAUmC,aAG7B,IAAK,IAAInf,EAAI,EAAGA,EAAIooC,EAAOxpC,OAAQoB,IAC7BA,GAAKooC,EAAOxpC,OAAS,IACjBwpC,EAAOpoC,GAAG6hB,IAAIoB,MAAQyd,GAAU0H,EAAOpoC,GAAG6hB,IAAIsB,SAAWwc,GAC7D44B,EAAUn4D,KAAK,IAAImgC,EAAM6H,EAAOpoC,GAAG6hB,IAAIoB,IAAKmlB,EAAOpoC,GAAG6hB,IAAIsB,OAAQud,EAAQf,KAIpE,IAAN3/B,EAC4B,IAAxBooC,EAAOpoC,GAAG8E,MAAMme,KAAwC,IAA3BmlB,EAAOpoC,GAAG8E,MAAMqe,QACjDo1C,EAAUn4D,KAAK,IAAImgC,EAAM,EAAG,EAAG6H,EAAOpoC,GAAG8E,MAAMme,IAAKmlB,EAAOpoC,GAAG8E,MAAMqe,SAGtEo1C,EAAUn4D,KAAK,IAAImgC,EAAM6H,EAAOpoC,EAAI,GAAG6hB,IAAIoB,IAAKmlB,EAAOpoC,EAAI,GAAG6hB,IAAIsB,OAAQilB,EAAOpoC,GAAG8E,MAAMme,IAAKmlB,EAAOpoC,GAAG8E,MAAMqe,SAInHf,EAAOo2C,sBACPp2C,EAAO5C,iBAEP,IAASxf,EAAI,EAAGA,EAAIu4D,EAAU35D,OAAQoB,IACpCoiB,EAAOpF,UAAUyrB,SAAS8vB,EAAUv4D,IAAI,IAG5CqgB,UAAU,EACVo1C,eAAgB,YAGpBp0D,IAAI9C,OAAO,aAAc,CAAC,UAAW,UAAW,SAAU,yBAA0B,cAAe,cAAe,eAAgB,oBAAqB,yBAA0B,0BAA2B,yBAA0B,0BAA2B,mBAAoB,aAAc,YAAa,wBAAyB,+BAAgC,gCAAiC,aAAc,uBAAuB,SAAU4B,EAAUa,EAASxC,GAC1c,aAEA2B,EAAS,wBACT,IAAIyP,EAAMzP,EAAS,aACfya,EAAMza,EAAS,aACf0a,EAAO1a,EAAS,cAChB2S,EAAY3S,EAAS,mBACrB+a,EAAY/a,EAAS,wBAAwB+a,UAC7C+Z,EAAe90B,EAAS,yBAAyB80B,aACjD2B,EAAcz2B,EAAS,wBAAwBy2B,YAC/CY,EAAar3B,EAAS,yBAAyBq3B,WAC/C2tB,EAAchlD,EAAS,kBAAkBglD,YACzCwM,EAASxxD,EAAS,YAAYwxD,OAC9BpxB,EAAQpgC,EAAS,WAAWogC,MAC5BxQ,EAAe5vB,EAAS,uBAAuB4vB,aAC/C4kC,EAAiBx0D,EAAS,8BAA8Bw0D,eACxD8D,EAAkBt4D,EAAS,+BAA+By3B,SAC1D5C,EAAS70B,EAAS,YAClButC,EAAgBvtC,EAAS,oBAAoButC,cAE7CgrB,EAAS,SAASA,EAAO74C,EAAUT,GACrC,IAAIwB,EAAYf,EAAS84C,sBACzBt6D,KAAKuiB,UAAYA,EACjBviB,KAAKwhB,SAAWA,EAChBxhB,KAAK6C,GAAK,YAAaw3D,EAAOhT,KAC9BrnD,KAAKu5B,SAAW,IAAI+8B,EAAe7hD,EAAU3B,MAAQ,MAAQ,MAAOsnD,GAE7C,iBAAZzvD,WACT3K,KAAK+iB,UAAY,IAAIlG,EAAU2E,EAAS+4C,uBAAwBv6D,MAChEA,KAAKwhB,SAASg5C,SAAWx6D,KAAK+iB,UAAUjB,aACxC9hB,KAAKy6D,cAAgB,IAAI7jC,EAAa52B,MACtC,IAAIu4B,EAAYv4B,OAGlBA,KAAK06D,WAAa,IAAIvhC,EAAWn5B,MACjCA,KAAKslB,gBAAkB,EACvBtlB,KAAK26D,SAAU,IAAIrH,GAAS5pD,IAAI,CAC9BwpD,MAAM,IAERlzD,KAAK46D,gBAAkB56D,KAAK46D,gBAAgB91D,KAAK9E,MACjDA,KAAKu5B,SAAS1X,GAAG,OAAQ7hB,KAAK46D,iBAC9B56D,KAAK66D,0BACL76D,KAAK86D,iBAAmBt+C,EAAKL,YAAY,WACvCnc,KAAKyqB,QAAQ,QAAS,IAElBzqB,KAAK+gB,SAAW/gB,KAAK+gB,QAAQymC,aAAaxnD,KAAK+gB,QAAQymC,YAAYzI,iBACvEj6C,KAAK9E,OACPA,KAAK6hB,GAAG,UAAU,SAAU0P,EAAGlV,GAC7BA,EAAMy+C,iBAAiB7+C,SAAS,OAElCjc,KAAK+6D,WAAWh6C,GAAW,IAAI+lC,EAAY,KAC3CnwB,EAAO1C,aAAaj0B,MAEpB22B,EAAOlM,QAAQ,SAAUzqB,OAG3Bq6D,EAAOhT,KAAO,EACd,WACE91C,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK66D,wBAA0B,WAK7B76D,KAAKwhC,WAAa,GAClBxhC,KAAKu5B,SAAS1X,GAAG,OAAQ7hB,KAAKg7D,eAAel2D,KAAK9E,OAAO,GACzDA,KAAKu5B,SAAS1X,GAAG,YAAa7hB,KAAKi7D,aAAan2D,KAAK9E,OAAO,GAC5DA,KAAKk7D,cAAgB1+C,EAAKL,YAAYnc,KAAKi7D,aAAan2D,KAAK9E,OAC7DA,KAAK6hB,GAAG,SAAU,WAChB7hB,KAAKm7D,OAASn7D,KAAKg7D,iBACnBh7D,KAAKm7D,MAAMC,YAAa,GACxBt2D,KAAK9E,OAAO,GACdA,KAAK6hB,GAAG,kBAAmB,WACzB7hB,KAAKm7D,OAASn7D,KAAKg7D,iBACnBh7D,KAAKm7D,MAAME,kBAAmB,GAC9Bv2D,KAAK9E,OAAO,IAGhBA,KAAKm7D,MAAQ,KACbn7D,KAAKs7D,OAAS,GAEdt7D,KAAKg7D,eAAiB,SAAUO,GAC9B,GAAIv7D,KAAKm7D,MAAO,CACd,IAAKI,GAAev7D,KAAKm7D,MAAM7gC,QAAS,OACxCt6B,KAAKs7D,OAASt7D,KAAKm7D,MAGhBI,IACHv7D,KAAKw7D,gBAAkB,KACvBD,EAAc,IAGhBv7D,KAAKk7D,cAAcj/C,WACnBjc,KAAKm7D,MAAQ,CACX7gC,QAASihC,EAAYjhC,SAAW,GAChCp1B,KAAMq2D,EAAYr2D,KAClB4K,UAAW9P,KAAKwhB,SAAS1R,WAEvB9P,KAAKm7D,MAAM7gC,QAAQh2B,WAA8CjD,IAAtCrB,KAAKm7D,MAAM7gC,QAAQ88B,gBAA8Bp3D,KAAKslB,mBAGvFtlB,KAAKi7D,aAAe,SAAUzlD,GAC5B,GAAIxV,KAAKm7D,MAAO,CACd,GAAI3lD,IAAuB,IAAlBA,EAAEpK,YAAuB,OAAOpL,KAAKm7D,MAAQ,KAEtDn7D,KAAKyqB,QAAQ,sBAEb,IAAI6P,EAAUt6B,KAAKm7D,MAAM7gC,QACrBA,EAAQh2B,MAAQtE,KAAKslB,gBAAkB,GAAGtlB,KAAKslB,kBACnD,IAAI8xC,EAAiB98B,GAAWA,EAAQ88B,eAExC,GAAIA,EAAgB,CAClB,OAAQA,GACN,IAAK,iBACHA,EAAiB,UAEnB,IAAK,SACHp3D,KAAKwhB,SAASgF,qBAAqB,KAAM,IACzC,MAEF,IAAK,UACL,IAAK,SACHxmB,KAAKwhB,SAASgF,uBACd,MAEF,IAAK,gBACH,IAAIvF,EAAQjhB,KAAK2e,UAAUmC,WACvB6V,EAAS32B,KAAKwhB,SAASyL,aAEvBhM,EAAMxa,MAAMme,KAAO+R,EAAO6M,SAAWviB,EAAMuC,IAAIoB,KAAO+R,EAAO4M,WAC/DvjC,KAAKwhB,SAASi6C,wBAAwBz7D,KAAK2e,UAAUoG,OAAQ/kB,KAAK2e,UAAU4lB,MAS5D,WAAlB6yB,GAA6Bp3D,KAAKwhB,SAASk6C,iBAAiB17D,KAAKm7D,MAAMrrD,WAG7E9P,KAAKs7D,OAASt7D,KAAKm7D,MACnBn7D,KAAKm7D,MAAQ,OAIjBn7D,KAAK27D,mBAAqB,CAAC,YAAa,MAAO,gBAE/C37D,KAAK46D,gBAAkB,SAAUplD,GAC/B,GAAKxV,KAAK47D,iBAAV,CACA,IAAIC,EAAO77D,KAAKs7D,OACZQ,EAAoB97D,KAAK27D,mBACzBI,EAAcF,EAAKvhC,SAAW9kB,EAAE8kB,QAAQh2B,MAAQu3D,EAAKvhC,QAAQh2B,KAEjE,GAAsB,gBAAlBkR,EAAE8kB,QAAQh2B,KAAwB,CACpC,IAAIyY,EAAOvH,EAAEtQ,UACiB7D,IAA1BrB,KAAKg8D,mBAAgCh8D,KAAKg8D,kBAAmB,GACjED,EAAcA,GAAe/7D,KAAKg8D,oBAC7B,KAAK34D,KAAK0Z,IAAS,KAAK1Z,KAAKw4D,EAAK32D,OAEvClF,KAAKg8D,kBAAmB,OAExBD,EAAcA,IAA8D,IAA/CD,EAAkB35D,QAAQqT,EAAE8kB,QAAQh2B,MAGtC,UAAzBtE,KAAK47D,kBAAgCjwD,KAAKC,MAAQ5L,KAAKi8D,kBAAoB,MAC7EF,GAAc,GAGZA,EAAa/7D,KAAK+gB,QAAQgoC,iBAAkB,GAA6D,IAA/C+S,EAAkB35D,QAAQqT,EAAE8kB,QAAQh2B,QAActE,KAAKi8D,kBAAoBtwD,KAAKC,SAGhJ5L,KAAK45B,mBAAqB,SAAUsiC,EAAiBr9C,GACnD,GAAIq9C,GAA8C,iBAApBA,EAA8B,CAC1Dl8D,KAAKm8D,cAAgBD,EAErB,IAAI7/C,EAAQrc,KAEZ22B,EAAOL,WAAW,CAAC,aAAc4lC,IAAkB,SAAU/7D,GACvDkc,EAAM8/C,eAAiBD,GAAiB7/C,EAAMq+C,WAAW9gC,mBAAmBz5B,GAAUA,EAAOi8D,SACjGv9C,GAAMA,YAGR7e,KAAKm8D,cAAgB,KACrBn8D,KAAK06D,WAAW9gC,mBAAmBsiC,GACnCr9C,GAAMA,KAIV7e,KAAKi6B,mBAAqB,WACxB,OAAOj6B,KAAK06D,WAAWzgC,sBAGzBj6B,KAAK+6D,WAAa,SAAUh6C,GAC1B,GAAI/gB,KAAK+gB,SAAWA,EAApB,CACI/gB,KAAKm7D,OAAOn7D,KAAKi7D,eACrBj7D,KAAKm7D,MAAQ,GACb,IAAIkB,EAAar8D,KAAK+gB,QAEtB,GAAIs7C,EAAY,CACdr8D,KAAK+gB,QAAQ2R,IAAI,SAAU1yB,KAAKs8D,mBAChCt8D,KAAK+gB,QAAQ2R,IAAI,aAAc1yB,KAAK2rD,eACpC3rD,KAAK+gB,QAAQ2R,IAAI,kBAAmB1yB,KAAKu8D,oBACzCv8D,KAAK+gB,QAAQ2R,IAAI,gBAAiB1yB,KAAKw8D,kBACvCx8D,KAAK+gB,QAAQ2R,IAAI,kBAAmB1yB,KAAKy8D,oBACzCz8D,KAAK+gB,QAAQ2R,IAAI,iBAAkB1yB,KAAK08D,mBACxC18D,KAAK+gB,QAAQ2R,IAAI,aAAc1yB,KAAK28D,eACpC38D,KAAK+gB,QAAQ2R,IAAI,oBAAqB1yB,KAAK48D,sBAC3C58D,KAAK+gB,QAAQ2R,IAAI,mBAAoB1yB,KAAK68D,qBAC1C78D,KAAK+gB,QAAQ2R,IAAI,mBAAoB1yB,KAAK88D,qBAC1C98D,KAAK+gB,QAAQ2R,IAAI,mBAAoB1yB,KAAK+8D,qBAC1C/8D,KAAK+gB,QAAQ2R,IAAI,kBAAmB1yB,KAAKg9D,iBACzCh9D,KAAK+gB,QAAQ2R,IAAI,kBAAmB1yB,KAAKi9D,oBACzCj9D,KAAK+gB,QAAQ2R,IAAI,mBAAoB1yB,KAAKk9D,qBAC1C,IAAIv+C,EAAY3e,KAAK+gB,QAAQ2nC,eAC7B/pC,EAAU+T,IAAI,eAAgB1yB,KAAKg9D,iBACnCr+C,EAAU+T,IAAI,kBAAmB1yB,KAAKm9D,oBAGxCn9D,KAAK+gB,QAAUA,EAEXA,GACF/gB,KAAKs8D,kBAAoBt8D,KAAKo9D,iBAAiBt4D,KAAK9E,MACpD+gB,EAAQc,GAAG,SAAU7hB,KAAKs8D,mBAC1Bt8D,KAAKwhB,SAASu5C,WAAWh6C,GACzB/gB,KAAK2rD,cAAgB3rD,KAAKq9D,aAAav4D,KAAK9E,MAC5C+gB,EAAQc,GAAG,aAAc7hB,KAAK2rD,eAC9B3rD,KAAKu8D,mBAAqBv8D,KAAKs9D,kBAAkBx4D,KAAK9E,MACtD+gB,EAAQc,GAAG,kBAAmB7hB,KAAKu8D,oBACnCv8D,KAAKw8D,iBAAmBx8D,KAAKwhB,SAAS+7C,gBAAgBz4D,KAAK9E,KAAKwhB,UAChET,EAAQc,GAAG,gBAAiB7hB,KAAKw8D,kBACjCx8D,KAAKy8D,mBAAqBz8D,KAAKw9D,kBAAkB14D,KAAK9E,MACtD+gB,EAAQc,GAAG,kBAAmB7hB,KAAKy8D,oBACnCz8D,KAAK08D,kBAAoB18D,KAAKy9D,iBAAiB34D,KAAK9E,MACpD+gB,EAAQc,GAAG,iBAAkB7hB,KAAK08D,mBAClC18D,KAAK28D,cAAgB38D,KAAKsnD,aAAaxiD,KAAK9E,MAC5C+gB,EAAQc,GAAG,aAAc7hB,KAAK28D,eAC9B38D,KAAK48D,qBAAuB58D,KAAK09D,oBAAoB54D,KAAK9E,MAC1DA,KAAK+gB,QAAQc,GAAG,oBAAqB7hB,KAAK48D,sBAC1C58D,KAAK68D,oBAAsB78D,KAAK29D,mBAAmB74D,KAAK9E,MACxDA,KAAK+gB,QAAQc,GAAG,mBAAoB7hB,KAAK68D,qBACzC78D,KAAK88D,oBAAsB98D,KAAK49D,mBAAmB94D,KAAK9E,MACxDA,KAAK+gB,QAAQc,GAAG,mBAAoB7hB,KAAK88D,qBACzC98D,KAAK+8D,oBAAsB/8D,KAAK69D,mBAAmB/4D,KAAK9E,MACxDA,KAAK+gB,QAAQc,GAAG,mBAAoB7hB,KAAK+8D,qBACzC/8D,KAAKg9D,gBAAkBh9D,KAAK89D,eAAeh5D,KAAK9E,MAChDA,KAAK+gB,QAAQc,GAAG,kBAAmB7hB,KAAKg9D,iBACxCh9D,KAAKi9D,mBAAqBj9D,KAAK+9D,kBAAkBj5D,KAAK9E,MACtDA,KAAK+gB,QAAQc,GAAG,kBAAmB7hB,KAAKi9D,oBACxCj9D,KAAKk9D,oBAAsBl9D,KAAKg+D,mBAAmBl5D,KAAK9E,MACxDA,KAAK+gB,QAAQc,GAAG,mBAAoB7hB,KAAKk9D,qBACzCl9D,KAAK2e,UAAYoC,EAAQ2nC,eACzB1oD,KAAK2e,UAAUkD,GAAG,eAAgB7hB,KAAKg9D,iBACvCh9D,KAAKm9D,mBAAqBn9D,KAAKi+D,kBAAkBn5D,KAAK9E,MACtDA,KAAK2e,UAAUkD,GAAG,kBAAmB7hB,KAAKm9D,oBAC1Cn9D,KAAKq9D,eACLr9D,KAAKslB,iBAAmB,EACxBtlB,KAAK89D,iBACL99D,KAAKslB,iBAAmB,EACxBtlB,KAAK+9D,oBACL/9D,KAAKg+D,qBACLh+D,KAAKi+D,oBACLj+D,KAAK09D,sBACL19D,KAAK29D,qBACL39D,KAAK49D,qBACL59D,KAAK69D,qBACL79D,KAAK+gB,QAAQ0uC,kBAAoBzvD,KAAKwhB,SAASmuC,kBAC/C3vD,KAAKwhB,SAAS08C,eAEdl+D,KAAK2e,UAAY,KACjB3e,KAAKwhB,SAASu5C,WAAWh6C,IAG3B/gB,KAAKyqB,QAAQ,gBAAiB,CAC5B1J,QAASA,EACTs7C,WAAYA,IAGdr8D,KAAKm7D,MAAQ,KACbkB,GAAcA,EAAW5xC,QAAQ,eAAgB,CAC/C0zC,UAAWn+D,OAEb+gB,GAAWA,EAAQ0J,QAAQ,eAAgB,CACzC1G,OAAQ/jB,OAEN+gB,GAAWA,EAAQymC,aAAazmC,EAAQymC,YAAYzI,kBAG1D/+C,KAAKo+D,WAAa,WAChB,OAAOp+D,KAAK+gB,SAGd/gB,KAAK27C,SAAW,SAAUl7B,EAAK49C,GAG7B,OAFAr+D,KAAK+gB,QAAQzU,IAAIqvC,SAASl7B,GACrB49C,EAAkD,GAAbA,EAAgBr+D,KAAKg4D,mBAAyC,GAAdqG,GAAiBr+D,KAAK63D,oBAAhG73D,KAAKqgB,YACdI,GAGTzgB,KAAK47C,SAAW,WACd,OAAO57C,KAAK+gB,QAAQ66B,YAGtB57C,KAAK0oD,aAAe,WAClB,OAAO1oD,KAAK2e,WAGd3e,KAAKs+D,OAAS,SAAUnR,GACtBntD,KAAKwhB,SAAS+8C,SAASpR,IAGzBntD,KAAKw+D,SAAW,SAAUC,EAAO5/C,GAC/B7e,KAAKwhB,SAASg9C,SAASC,EAAO5/C,IAGhC7e,KAAK0+D,SAAW,WACd,OAAO1+D,KAAKwhB,SAASk9C,YAGvB1+D,KAAKomB,SAAW,SAAUvY,GACxB7N,KAAKwhB,SAAS4E,SAASvY,IAGzB7N,KAAKgnB,WAAa,SAAUnZ,GAC1B7N,KAAKwhB,SAASwF,WAAWnZ,IAG3B7N,KAAK2+D,YAAc,WACjB,OAAO3+D,KAAKmzB,UAAU,aAAe5W,EAAIhO,cAAcvO,KAAKuiB,UAAW,aAGzEviB,KAAK4+D,YAAc,SAAU1+B,GAC3BlgC,KAAK+yB,UAAU,WAAYmN,IAG7BlgC,KAAK6+D,mBAAqB,WAMxB,GALI7+D,KAAK+gB,QAAQ+9C,oBACf9+D,KAAK+gB,QAAQsN,aAAaruB,KAAK+gB,QAAQ+9C,mBACvC9+D,KAAK+gB,QAAQ+9C,kBAAoB,OAG/B9+D,KAAK++D,kBAAT,CAIA,IAAI72D,EAAOlI,KACXA,KAAK++D,mBAAoB,EACzBxmD,YAAW,WACTrQ,EAAK62D,mBAAoB,EACzB,IAAIh+C,EAAU7Y,EAAK6Y,QACnB,GAAKA,GAAYA,EAAQymC,YAAzB,CACA,IAAI7gD,EAAMoa,EAAQyxB,oBAAoBtqC,EAAK0pC,qBAE3C,GAAIjrC,EACF,IAAIsa,EAAQ,IAAIihB,EAAMv7B,EAAIie,IAAKje,EAAIme,OAAQne,EAAIie,IAAKje,EAAIme,OAAS,QAC5D,GAAI/D,EAAQ8xB,MAAMmsB,YACnB/9C,EAAQF,EAAQ8xB,MAAMmsB,YAAY92D,EAAK6Y,SAGzCE,IAAOF,EAAQ+9C,kBAAoB/9C,EAAQ8M,UAAU5M,EAAO,cAAe,YAC9E,MAGLjhB,KAAKi/D,eAAiB,WACpB,IAAIj/D,KAAKk/D,qBAAT,CACA,IAAIh3D,EAAOlI,KACXA,KAAKk/D,sBAAuB,EAC5B3mD,YAAW,WACTrQ,EAAKg3D,sBAAuB,EAC5B,IAAIn+C,EAAU7Y,EAAK6Y,QACnB,GAAKA,GAAYA,EAAQymC,YAAzB,CACA,IAAI7gD,EAAMuB,EAAK0pC,oBACX8B,EAAW,IAAIrE,EAAcnnC,EAAK6Y,QAASpa,EAAIie,IAAKje,EAAIme,QACxDumB,EAAQqI,EAASzD,kBAErB,IAAK5E,IAAU,0BAA0BhoC,KAAKgoC,EAAMv2B,MAGlD,OAFAiM,EAAQsN,aAAatN,EAAQo+C,oBAC7Bp+C,EAAQo+C,cAAgB,MAI1B,IAAuC,GAAnC9zB,EAAMv2B,KAAK3S,QAAQ,cACrBkpC,EAAQqI,EAAS3D,eADnB,CAKA,IAAIrjC,EAAM2+B,EAAM/iC,MACZy8C,EAAQ,EACRqa,EAAY1rB,EAAS5D,eAEzB,GAAuB,KAAnBsvB,EAAU92D,MACZ,GACE82D,EAAY/zB,GACZA,EAAQqI,EAAS3D,gBAEJ1E,EAAM/iC,QAAUoE,IAA2C,IAApC2+B,EAAMv2B,KAAK3S,QAAQ,cAC7B,MAApBi9D,EAAU92D,MACZy8C,IAC6B,OAApBqa,EAAU92D,OACnBy8C,WAGG1Z,GAAS0Z,GAAS,OACtB,CACL,GACE1Z,EAAQ+zB,EACRA,EAAY1rB,EAAS5D,eAEjBzE,GAASA,EAAM/iC,QAAUoE,IAA2C,IAApC2+B,EAAMv2B,KAAK3S,QAAQ,cAC7B,MAApBi9D,EAAU92D,MACZy8C,IAC6B,OAApBqa,EAAU92D,OACnBy8C,WAGGqa,GAAara,GAAS,GAE/BrR,EAAS3D,cAGX,IAAK1E,EAGH,OAFAtqB,EAAQsN,aAAatN,EAAQo+C,oBAC7Bp+C,EAAQo+C,cAAgB,MAI1B,IAAIv6C,EAAM8uB,EAASxD,qBACfprB,EAAS4uB,EAASvD,wBAClBlvB,EAAQ,IAAIihB,EAAMtd,EAAKE,EAAQF,EAAKE,EAASumB,EAAM/iC,MAAM/H,QACzD8+D,EAAMt+C,EAAQmmC,aAAanmC,EAAQo+C,eAEnCp+C,EAAQo+C,eAAwB99D,MAAPg+D,GAAsD,IAAlCp+C,EAAMwhB,aAAa48B,EAAIp+C,SACtEF,EAAQsN,aAAatN,EAAQo+C,eAC7Bp+C,EAAQo+C,cAAgB,MAGtBl+C,IAAUF,EAAQo+C,gBAAep+C,EAAQo+C,cAAgBp+C,EAAQ8M,UAAU5M,EAAO,cAAe,aACpG,MAGLjhB,KAAKie,MAAQ,WACX,IAAI5B,EAAQrc,KAEZuY,YAAW,WACT8D,EAAM0G,UAAU9E,WAElBje,KAAK+iB,UAAU9E,SAGjBje,KAAK4d,UAAY,WACf,OAAO5d,KAAK+iB,UAAUnF,aAGxB5d,KAAKke,KAAO,WACVle,KAAK+iB,UAAU7E,QAGjBle,KAAK+d,QAAU,SAAUvI,GACnBxV,KAAKs/D,aACTt/D,KAAKs/D,YAAa,EAClBt/D,KAAKwhB,SAAS+9C,aACdv/D,KAAKwhB,SAASg+C,iBAEdx/D,KAAKkiB,MAAM,QAAS1M,KAGtBxV,KAAK8d,OAAS,SAAUtI,GACjBxV,KAAKs/D,aACVt/D,KAAKs/D,YAAa,EAClBt/D,KAAKwhB,SAASi+C,aACdz/D,KAAKwhB,SAASk+C,gBAEd1/D,KAAKkiB,MAAM,OAAQ1M,KAGrBxV,KAAK2/D,cAAgB,WACnB3/D,KAAKwhB,SAASo+C,gBAGhB5/D,KAAKo9D,iBAAmB,SAAUh+B,GAChC,IAAI8zB,EAAOlzD,KAAK+gB,QAAQ+e,aACpB0D,EAAUpE,EAAM34B,MAAMme,KAAOwa,EAAM5b,IAAIoB,IAAMwa,EAAM5b,IAAIoB,IAAMsyB,EAAAA,EACjEl3C,KAAKwhB,SAASq+C,YAAYzgC,EAAM34B,MAAMme,IAAK4e,EAAS0vB,GAEpDlzD,KAAKyqB,QAAQ,SAAU2U,GAEvBp/B,KAAK2/D,gBACL3/D,KAAK8/D,8BAGP9/D,KAAKs9D,kBAAoB,SAAU9nD,GACjC,IAAIyzB,EAAOzzB,EAAEsE,KACb9Z,KAAKwhB,SAASq+C,YAAY52B,EAAK6V,MAAO7V,EAAK5uB,OAG7Cra,KAAK+9D,kBAAoB,WACvB/9D,KAAKwhB,SAASu+C,UAAU//D,KAAK+gB,QAAQyrC,iBAGvCxsD,KAAKg+D,mBAAqB,WACxBh+D,KAAKwhB,SAASw+C,UAAUhgE,KAAK+gB,QAAQ4rC,kBAGvC3sD,KAAK89D,eAAiB,WACpB99D,KAAK2/D,gBAEA3/D,KAAKslB,kBACRqR,EAAOtD,KAAK,kEAAmE,4CAA6C,iEAC5HrzB,KAAKwhB,SAASgF,wBAGhBxmB,KAAK6+D,qBACL7+D,KAAKi/D,iBACLj/D,KAAK8/D,6BAEL9/D,KAAKyqB,QAAQ,oBAGfzqB,KAAK8/D,2BAA6B,WAChC,IACIlV,EADA7pC,EAAU/gB,KAAKo+D,aAQnB,GALIp+D,KAAKigE,uBACqB,QAAxBjgE,KAAKkgE,iBAA8BlgE,KAAK2e,UAAUgJ,gBAAeijC,EAAY5qD,KAAK4xC,sBAClF5xC,KAAKwhB,SAAS2+C,WAA0C,IAA7BngE,KAAK+gB,QAAQmK,aAAuBlrB,KAAKwhB,SAAS4+C,UAAY,IAAIxV,GAAY,IAG3G7pC,EAAQs/C,uBAAyBzV,EACnC7pC,EAAQsN,aAAatN,EAAQs/C,qBAAqBx9D,IAClDke,EAAQs/C,qBAAuB,UAC1B,IAAKt/C,EAAQs/C,sBAAwBzV,EAAW,CACrD,IAAI3pC,EAAQ,IAAIihB,EAAM0oB,EAAUhmC,IAAKgmC,EAAU9lC,OAAQ8lC,EAAUhmC,IAAKsyB,EAAAA,GACtEj2B,EAAMpe,GAAKke,EAAQ8M,UAAU5M,EAAO,kBAAmB,cACvDF,EAAQs/C,qBAAuBp/C,OACtB2pC,IACT7pC,EAAQs/C,qBAAqB55D,MAAMme,IAAMgmC,EAAUhmC,IACnD7D,EAAQs/C,qBAAqB78C,IAAIoB,IAAMgmC,EAAUhmC,IACjD7D,EAAQs/C,qBAAqB55D,MAAMqe,OAAS8lC,EAAU9lC,OAEtD/D,EAAQ0J,QAAQ,sBAIpBzqB,KAAKi+D,kBAAoB,SAAUzoD,GACjC,IAAIuL,EAAU/gB,KAAK+gB,QAQnB,GANIA,EAAQu/C,kBACVv/C,EAAQsN,aAAatN,EAAQu/C,kBAG/Bv/C,EAAQu/C,iBAAmB,KAEtBtgE,KAAK2e,UAAUN,UAKlBre,KAAK8/D,iCALwB,CAC7B,IAAI7+C,EAAQjhB,KAAK2e,UAAUmC,WACvBjT,EAAQ7N,KAAK8tB,oBACjB/M,EAAQu/C,iBAAmBv/C,EAAQ8M,UAAU5M,EAAO,gBAAiBpT,GAKvE,IAAIqoB,EAAKl2B,KAAKugE,wBAA0BvgE,KAAKwgE,+BAC7CxgE,KAAK+gB,QAAQ6pC,UAAU10B,GAEvBl2B,KAAKyqB,QAAQ,oBAGfzqB,KAAKwgE,6BAA+B,WAClC,IAAIz/C,EAAU/gB,KAAK+gB,QACfpC,EAAY3e,KAAKqlB,oBACrB,IAAI1G,EAAUN,YAAaM,EAAUgJ,cAArC,CACA,IAAI84C,EAAa9hD,EAAUlY,MAAMqe,OAAS,EACtC47C,EAAW/hD,EAAU6E,IAAIsB,OAAS,EAClC2Z,EAAO1d,EAAQiY,QAAQra,EAAUlY,MAAMme,KACvC+7C,EAAWliC,EAAKl+B,OAChBwzD,EAASt1B,EAAKrf,UAAUvY,KAAKC,IAAI25D,EAAY,GAAI55D,KAAKM,IAAIu5D,EAAUC,IACxE,KAAIF,GAAc,GAAK,UAAUp9D,KAAK0wD,IAAW2M,GAAYC,GAAY,UAAUt9D,KAAK0wD,IAExF,GADAA,EAASt1B,EAAKrf,UAAUT,EAAUlY,MAAMqe,OAAQnG,EAAU6E,IAAIsB,QACzD,YAAYzhB,KAAK0wD,GAMtB,OALS/zD,KAAK26D,QAAQ3G,gBAAgB,CACpCM,WAAW,EACXI,eAAe,EACfX,OAAQA,MAKZ/zD,KAAK09D,oBAAsB,WACzB19D,KAAKwhB,SAASo/C,sBAGhB5gE,KAAK29D,mBAAqB,WACxB39D,KAAKwhB,SAASq/C,qBAGhB7gE,KAAK49D,mBAAqB,WACxB59D,KAAKwhB,SAASs/C,qBAGhB9gE,KAAK69D,mBAAqB,WACxB79D,KAAKwhB,SAASupC,eAAe/qD,KAAK+gB,QAAQkqC,mBAG5CjrD,KAAKq9D,aAAe,SAAU7nD,GAC5BxV,KAAKwhB,SAASu/C,aAEd/gE,KAAKkiB,MAAM,aAAc1M,IAG3BxV,KAAKw9D,kBAAoB,WACvBx9D,KAAKwhB,SAAS08C,cAGhBl+D,KAAKy9D,iBAAmB,WACtBz9D,KAAKwhB,SAAS+8C,UAAS,IAGzBv+D,KAAKsnD,aAAe,WAClBtnD,KAAK8/D,6BACL9/D,KAAKwhB,SAAS08C,cAGhBl+D,KAAKghE,gBAAkB,WACrB,OAAOhhE,KAAK+gB,QAAQgO,aAAa/uB,KAAKqlB,sBAGxCrlB,KAAK+f,YAAc,WACjB,IAAIhD,EAAO/c,KAAKghE,kBAIhB,OAFAhhE,KAAKyqB,QAAQ,OAAQ1N,GAEdA,GAGT/c,KAAKigB,OAAS,WACZjgB,KAAKu5B,SAASp2B,KAAK,OAAQnD,OAG7BA,KAAKggB,MAAQ,WACXhgB,KAAKu5B,SAASp2B,KAAK,MAAOnD,OAG5BA,KAAKif,QAAU,SAAUlC,EAAM7H,GAC7B,IAAIM,EAAI,CACNuH,KAAMA,EACN7H,MAAOA,GAETlV,KAAKu5B,SAASp2B,KAAK,QAASnD,KAAMwV,IAGpCxV,KAAK+4D,aAAe,SAAUvjD,GACZ,iBAALA,IAAeA,EAAI,CAC5BuH,KAAMvH,IAGRxV,KAAKyqB,QAAQ,QAASjV,GAEtB,IAAIuH,EAAOvH,EAAEuH,KAEb,IAAK/c,KAAK0lB,mBAAqB1lB,KAAKihE,uBAClCjhE,KAAKgH,OAAO+V,OACP,CACL,IAAIsiB,EAAQtiB,EAAK1a,MAAM,cACnB0nC,EAAS/pC,KAAK2e,UAAUurB,UAAUH,OACtC,GAAI1K,EAAM9+B,OAASwpC,EAAOxpC,QAAU8+B,EAAM9+B,OAAS,IAAM8+B,EAAM,GAAI,OAAOr/B,KAAKu5B,SAASp2B,KAAK,eAAgBnD,KAAM+c,GAEnH,IAAK,IAAIpb,EAAIooC,EAAOxpC,OAAQoB,KAAM,CAChC,IAAIsf,EAAQ8oB,EAAOpoC,GACdsf,EAAM5C,WAAWre,KAAK+gB,QAAQ7Z,OAAO+Z,GAC1CjhB,KAAK+gB,QAAQ/Z,OAAOia,EAAMxa,MAAO44B,EAAM19B,OAK7C3B,KAAKmf,YAAc,SAAUmb,EAASp1B,GACpC,OAAOlF,KAAKu5B,SAASp2B,KAAKm3B,EAASt6B,KAAMkF,IAG3ClF,KAAKgH,OAAS,SAAU+V,EAAMS,GAC5B,IAAIuD,EAAU/gB,KAAK+gB,QACfouB,EAAOpuB,EAAQqrC,UACfznC,EAAS3kB,KAAK4xC,oBAElB,GAAI5xC,KAAKkhE,yBAA2B1jD,EAAQ,CAC1C,IAAI2jD,EAAYhyB,EAAKmK,gBAAgBv4B,EAAQk+B,SAASt6B,EAAOC,KAAM,YAAa5kB,KAAM+gB,EAAShE,GAE3FokD,IACEpkD,IAASokD,EAAUpkD,OACrB/c,KAAK+gB,QAAQgoC,iBAAkB,EAC/B/oD,KAAKohE,mBAAoB,GAG3BrkD,EAAOokD,EAAUpkD,MAMrB,GAFY,MAARA,IAAcA,EAAO/c,KAAK+gB,QAAQ4xB,gBAEjC3yC,KAAK2e,UAAUN,WAIb,GAAIre,KAAK+gB,QAAQ8oC,iBAAyC,GAAvB9sC,EAAK5a,QAAQ,MAAa,EAC9D8e,EAAQ,IAAIihB,EAAMuB,WAAW9e,EAAQA,IACnCnB,IAAIsB,QAAU/H,EAAKxc,OACzBP,KAAK+gB,QAAQ7Z,OAAO+Z,QAPS,CAC7B,IAAIA,EAAQjhB,KAAKqlB,oBACjBV,EAAS3kB,KAAK+gB,QAAQ7Z,OAAO+Z,GAC7BjhB,KAAKmhB,iBAOP,GAAY,MAARpE,GAAwB,QAARA,EAAgB,CAClC,IAAI0hB,EAAO1d,EAAQiY,QAAQrU,EAAOC,KAElC,GAAID,EAAOG,OAAS2Z,EAAK2J,OAAO,QAAS,CACvC,IAAIi5B,EAAI5iC,EAAKvf,OAAOyF,EAAOG,QAAQsjB,OAAO,QAC1CrnB,EAAQzU,IAAIkrC,aAAa7yB,EAAOC,IAAKD,EAAOG,OAAQH,EAAOG,OAASu8C,IAIxErhE,KAAKmhB,iBACL,IAAI1a,EAAQke,EAAOG,OACfw8C,EAAYvgD,EAAQk+B,SAASt6B,EAAOC,KAEpC28C,GADA9iC,EAAO1d,EAAQiY,QAAQrU,EAAOC,KACduqB,EAAKwJ,aAAa2oB,EAAW7iC,EAAM1hB,IAC7CgE,EAAQ/Z,OAAO2d,EAAQ5H,GAYjC,GAVIokD,GAAaA,EAAUxiD,YACS,GAA9BwiD,EAAUxiD,UAAUpe,OAEtBP,KAAK2e,UAAUF,kBAAkB,IAAIyjB,EAAMvd,EAAOC,IAAKne,EAAQ06D,EAAUxiD,UAAU,GAAIgG,EAAOC,IAAKne,EAAQ06D,EAAUxiD,UAAU,KAG/H3e,KAAK2e,UAAUF,kBAAkB,IAAIyjB,EAAMvd,EAAOC,IAAMu8C,EAAUxiD,UAAU,GAAIwiD,EAAUxiD,UAAU,GAAIgG,EAAOC,IAAMu8C,EAAUxiD,UAAU,GAAIwiD,EAAUxiD,UAAU,MAIjKoC,EAAQujB,cAAcgY,UAAUv/B,GAAO,CACzC,IAAIykD,EAAaryB,EAAKsJ,kBAAkB6oB,EAAW7iC,EAAKl8B,MAAM,EAAGoiB,EAAOG,QAAS/D,EAAQ4xB,gBACzF5xB,EAAQ/Z,OAAO,CACb4d,IAAKD,EAAOC,IAAM,EAClBE,OAAQ,GACP08C,GAGDD,GAAepyB,EAAK0J,YAAYyoB,EAAWvgD,EAAS4D,EAAOC,MAGjE5kB,KAAKqf,YAAc,SAAUtC,GAC3B/c,KAAK06D,WAAWr7C,YAAYtC,IAG9B/c,KAAKmgB,aAAe,SAAU3K,EAAGqD,EAAQvG,GACvCtS,KAAK06D,WAAWv6C,aAAa3K,EAAGqD,EAAQvG,IAG1CtS,KAAK2pD,aAAe,SAAUC,GAC5B5pD,KAAK+gB,QAAQ4oC,aAAaC,IAG5B5pD,KAAK6pD,aAAe,WAClB,OAAO7pD,KAAK+gB,QAAQ8oC,gBAGtB7pD,KAAK8pD,gBAAkB,WACrB9pD,KAAK+gB,QAAQ+oC,mBAGf9pD,KAAKyhE,eAAiB,SAAUh5C,GAC9BzoB,KAAK+yB,UAAU,cAAetK,IAGhCzoB,KAAK0hE,eAAiB,WACpB,OAAO1hE,KAAKmzB,UAAU,gBAGxBnzB,KAAK2hE,aAAe,SAAUxpC,GAC5Bn4B,KAAK+yB,UAAU,YAAaoF,IAG9Bn4B,KAAKgwB,aAAe,WAClB,OAAOhwB,KAAKmzB,UAAU,cAGxBnzB,KAAK4hE,kBAAoB,SAAUnhD,GACjCzgB,KAAK+yB,UAAU,iBAAkBtS,IAGnCzgB,KAAK8tB,kBAAoB,WACvB,OAAO9tB,KAAKmzB,UAAU,mBAGxBnzB,KAAK6hE,uBAAyB,SAAUC,GACtC9hE,KAAK+yB,UAAU,sBAAuB+uC,IAGxC9hE,KAAK+hE,uBAAyB,WAC5B,OAAO/hE,KAAKmzB,UAAU,wBAGxBnzB,KAAKgiE,uBAAyB,SAAUF,GACtC9hE,KAAK+yB,UAAU,sBAAuB+uC,IAGxC9hE,KAAKiiE,uBAAyB,WAC5B,OAAOjiE,KAAKmzB,UAAU,wBAGxBnzB,KAAKkiE,yBAA2B,SAAUJ,GACxC9hE,KAAK+yB,UAAU,wBAAyB+uC,IAG1C9hE,KAAKmiE,yBAA2B,WAC9B,OAAOniE,KAAKugE,wBAGdvgE,KAAKoiE,kBAAoB,SAAUC,GACjCriE,KAAKwhB,SAAS4gD,kBAAkBC,IAGlCriE,KAAKsiE,kBAAoB,WACvB,OAAOtiE,KAAKwhB,SAAS8gD,qBAGvBtiE,KAAK6gC,kBAAoB,SAAUtC,GACjCv+B,KAAKwhB,SAASqf,kBAAkBtC,IAGlCv+B,KAAK4gC,kBAAoB,WACvB,OAAO5gC,KAAKwhB,SAASof,qBAGvB5gC,KAAKuiE,uBAAyB,SAAUvzD,GACtChP,KAAKwhB,SAAS+gD,uBAAuBvzD,IAGvChP,KAAKwiE,uBAAyB,WAC5B,OAAOxiE,KAAKwhB,SAASghD,0BAGvBxiE,KAAKyiE,mBAAqB,SAAUC,GAClC1iE,KAAKwhB,SAASihD,mBAAmBC,IAGnC1iE,KAAK2iE,mBAAqB,WACxB,OAAO3iE,KAAKwhB,SAASmhD,sBAGvB3iE,KAAK4iE,qBAAuB,SAAUF,GACpC1iE,KAAKwhB,SAASohD,qBAAqBF,IAGrC1iE,KAAK6iE,qBAAuB,WAC1B,OAAO7iE,KAAKwhB,SAASqhD,wBAGvB7iE,KAAK+hB,YAAc,SAAUC,GAC3BhiB,KAAK+yB,UAAU,WAAY/Q,IAG7BhiB,KAAKuuB,YAAc,WACjB,OAAOvuB,KAAKmzB,UAAU,aAGxBnzB,KAAK8iE,qBAAuB,SAAUC,GACpC/iE,KAAK+yB,UAAU,oBAAqBgwC,IAGtC/iE,KAAKkhE,qBAAuB,WAC1B,OAAOlhE,KAAKmzB,UAAU,sBAGxBnzB,KAAKgjE,yBAA2B,SAAUD,GACxC/iE,KAAK+yB,UAAU,wBAAyBgwC,IAG1C/iE,KAAK6xC,yBAA2B,WAC9B,OAAO7xC,KAAKmzB,UAAU,0BAGxBnzB,KAAKijE,mBAAqB,SAAU35C,GAClCtpB,KAAK+yB,UAAU,kBAAmBzJ,IAGpCtpB,KAAKkjE,mBAAqB,WACxB,OAAOljE,KAAKmzB,UAAU,oBAGxBnzB,KAAKmjE,mBAAqB,SAAUC,GAClCpjE,KAAK+yB,UAAU,kBAAmBqwC,IAGpCpjE,KAAKqjE,mBAAqB,WACxB,OAAOrjE,KAAKmzB,UAAU,oBAGxBnzB,KAAKkH,OAAS,SAAUszB,GAClBx6B,KAAK2e,UAAUN,YACN,QAAPmc,EAAex6B,KAAK2e,UAAUonB,aAAkB/lC,KAAK2e,UAAUknB,eAGrE,IAAI5kB,EAAQjhB,KAAKqlB,oBAEjB,GAAIrlB,KAAKkhE,uBAAwB,CAC/B,IAAIngD,EAAU/gB,KAAK+gB,QACfuP,EAAQvP,EAAQk+B,SAASh+B,EAAMxa,MAAMme,KACrC0+C,EAAYviD,EAAQqrC,UAAU9S,gBAAgBhpB,EAAO,WAAYtwB,KAAM+gB,EAASE,GAEpF,GAAyB,IAArBA,EAAMuC,IAAIsB,OAAc,CAC1B,IAAI/H,EAAOgE,EAAQgO,aAAa9N,GAEhC,GAA6B,MAAzBlE,EAAKA,EAAKxc,OAAS,GAAY,CACjC,IAAIk+B,EAAO1d,EAAQiY,QAAQ/X,EAAMuC,IAAIoB,KAEjC,QAAQvhB,KAAKo7B,KACfxd,EAAMuC,IAAIsB,OAAS2Z,EAAKl+B,SAK1B+iE,IAAWriD,EAAQqiD,GAGzBtjE,KAAK+gB,QAAQ7Z,OAAO+Z,GACpBjhB,KAAKmhB,kBAGPnhB,KAAKw5D,gBAAkB,WACjBx5D,KAAK2e,UAAUN,WAAWre,KAAK2e,UAAU8nB,kBAC7CzmC,KAAK+gB,QAAQ7Z,OAAOlH,KAAKqlB,qBACzBrlB,KAAKmhB,kBAGPnhB,KAAKu5D,eAAiB,WAChBv5D,KAAK2e,UAAUN,WAAWre,KAAK2e,UAAUgoB,iBAC7C3mC,KAAK+gB,QAAQ7Z,OAAOlH,KAAKqlB,qBACzBrlB,KAAKmhB,kBAGPnhB,KAAKq5D,kBAAoB,WACnBr5D,KAAK2e,UAAUN,WAAWre,KAAK2e,UAAUsnB,kBAC7CjmC,KAAK+gB,QAAQ7Z,OAAOlH,KAAKqlB,qBACzBrlB,KAAKmhB,kBAGPnhB,KAAKs5D,gBAAkB,WACjBt5D,KAAK2e,UAAUN,WAAWre,KAAK2e,UAAUwnB,gBAC7C,IAAIllB,EAAQjhB,KAAKqlB,oBAEbpE,EAAMxa,MAAMqe,QAAU7D,EAAMuC,IAAIsB,QAAU7D,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,MACzE3D,EAAMuC,IAAIsB,OAAS,EACnB7D,EAAMuC,IAAIoB,OAGZ5kB,KAAK+gB,QAAQ7Z,OAAO+Z,GACpBjhB,KAAKmhB,kBAGPnhB,KAAK25D,UAAY,WACV35D,KAAK2e,UAAUN,YAClBre,KAAK+gB,QAAQ7Z,OAAOlH,KAAKqlB,qBACzBrlB,KAAKmhB,kBAGP,IAAIwD,EAAS3kB,KAAK4xC,oBAClB5xC,KAAKgH,OAAO,MACZhH,KAAK8sB,qBAAqBnI,IAG5B3kB,KAAK45D,iBAAmB,WACtB,GAAK55D,KAAK2e,UAAUN,UAApB,CAIA,IAAIsG,EAAS3kB,KAAK4xC,oBACd9sB,EAASH,EAAOG,OACpB,GAAe,IAAXA,EAAJ,CACA,IACIy+C,EAAMtiD,EADNwd,EAAOz+B,KAAK+gB,QAAQiY,QAAQrU,EAAOC,KAGnCE,EAAS2Z,EAAKl+B,QAChBgjE,EAAO9kC,EAAKn8B,OAAOwiB,GAAU2Z,EAAKn8B,OAAOwiB,EAAS,GAClD7D,EAAQ,IAAIihB,EAAMvd,EAAOC,IAAKE,EAAS,EAAGH,EAAOC,IAAKE,EAAS,KAE/Dy+C,EAAO9kC,EAAKn8B,OAAOwiB,EAAS,GAAK2Z,EAAKn8B,OAAOwiB,EAAS,GACtD7D,EAAQ,IAAIihB,EAAMvd,EAAOC,IAAKE,EAAS,EAAGH,EAAOC,IAAKE,IAGxD9kB,KAAK+gB,QAAQre,QAAQue,EAAOsiD,GAC5BvjE,KAAK+gB,QAAQpC,UAAU4G,eAAetE,EAAMuC,QAG9CxjB,KAAK8R,YAAc,WACjB,IAAI0xD,EAAgBxjE,KAAKqlB,oBAErBrlB,KAAK2e,UAAUN,WACjBre,KAAK2e,UAAUkoB,aAGjB,IAAI5lB,EAAQjhB,KAAKqlB,oBACbtI,EAAO/c,KAAK+gB,QAAQgO,aAAa9N,GACrCjhB,KAAK+gB,QAAQre,QAAQue,EAAOlE,EAAKjL,eACjC9R,KAAK2e,UAAUF,kBAAkB+kD,IAGnCxjE,KAAK21B,YAAc,WACjB,IAAI6tC,EAAgBxjE,KAAKqlB,oBAErBrlB,KAAK2e,UAAUN,WACjBre,KAAK2e,UAAUkoB,aAGjB,IAAI5lB,EAAQjhB,KAAKqlB,oBACbtI,EAAO/c,KAAK+gB,QAAQgO,aAAa9N,GACrCjhB,KAAK+gB,QAAQre,QAAQue,EAAOlE,EAAK4Y,eACjC31B,KAAK2e,UAAUF,kBAAkB+kD,IAGnCxjE,KAAKigC,OAAS,WACZ,IAAIlf,EAAU/gB,KAAK+gB,QACfE,EAAQjhB,KAAKqlB,oBAEjB,KAAIpE,EAAMxa,MAAMme,IAAM3D,EAAMuC,IAAIoB,KAAhC,CAIO,GAAI3D,EAAMxa,MAAMqe,OAAS7D,EAAMuC,IAAIsB,OAAQ,CAChD,IAAI/H,EAAOgE,EAAQgO,aAAa9N,GAEhC,IAAK,QAAQ5d,KAAK0Z,GAAO,CACnBksB,EAAOjpC,KAAKyjE,mBAEhB,YADA1iD,EAAQytC,WAAWvlB,EAAK6V,MAAO7V,EAAK5uB,KAAM,OAK9C,IAAIokB,EAAO1d,EAAQiY,QAAQ/X,EAAMxa,MAAMme,KACnC1V,EAAW+R,EAAMxa,MACjBy5B,EAAOnf,EAAQ2mB,aACf5iB,EAAS/D,EAAQgxC,uBAAuB7iD,EAAS0V,IAAK1V,EAAS4V,QAEnE,GAAI9kB,KAAK+gB,QAAQs2B,iBACf,IAAI38B,EAAQwlB,EAAOpb,EAASob,EACxBuuB,EAAejyC,EAAK/B,aAAa,IAAKC,OACrC,CAGL,IAFIA,EAAQoK,EAASob,EAEkB,KAAhCzB,EAAKxd,EAAMxa,MAAMqe,OAAS,IAAapK,GAC5CuG,EAAMxa,MAAMqe,SACZpK,IAGF1a,KAAK2e,UAAUF,kBAAkBwC,GACjCwtC,EAAe,KAGjB,OAAOzuD,KAAKgH,OAAOynD,GAjCjB,IAAIxlB,EAAOjpC,KAAKyjE,mBAChB1iD,EAAQytC,WAAWvlB,EAAK6V,MAAO7V,EAAK5uB,KAAM,OAmC9Cra,KAAK05D,YAAc,WACjB,IAAIzwB,EAAOjpC,KAAKyjE,mBAChBzjE,KAAK+gB,QAAQytC,WAAWvlB,EAAK6V,MAAO7V,EAAK5uB,KAAM,OAGjDra,KAAKy5D,aAAe,WAClB,IAAI96C,EAAY3e,KAAK+gB,QAAQ2nC,eAC7B1oD,KAAK+gB,QAAQ2tC,YAAY/vC,EAAUmC,aAGrC9gB,KAAKi5D,UAAY,WAKf,IAJA,IAAIhwB,EAAOjpC,KAAKyjE,mBACZ1iD,EAAU/gB,KAAK+gB,QACfse,EAAQ,GAEH19B,EAAIsnC,EAAK6V,MAAOn9C,GAAKsnC,EAAK5uB,KAAM1Y,IACvC09B,EAAMt9B,KAAKgf,EAAQiY,QAAQr3B,IAG7B09B,EAAM2gB,MAAK,SAAU15C,EAAG25C,GACtB,OAAI35C,EAAEwL,cAAgBmuC,EAAEnuC,eAAuB,EAC3CxL,EAAEwL,cAAgBmuC,EAAEnuC,cAAsB,EACvC,KAET,IAAI88C,EAAc,IAAI1sB,EAAM,EAAG,EAAG,EAAG,GAErC,IAASvgC,EAAIsnC,EAAK6V,MAAOn9C,GAAKsnC,EAAK5uB,KAAM1Y,IAAK,CAC5C,IAAI88B,EAAO1d,EAAQiY,QAAQr3B,GAC3BitD,EAAYnoD,MAAMme,IAAMjjB,EACxBitD,EAAYprC,IAAIoB,IAAMjjB,EACtBitD,EAAYprC,IAAIsB,OAAS2Z,EAAKl+B,OAC9BwgB,EAAQre,QAAQksD,EAAavvB,EAAM19B,EAAIsnC,EAAK6V,UAIhD9+C,KAAK82C,mBAAqB,WACxB,IAAIxmB,EAAQtwB,KAAK+gB,QAAQk+B,SAASj/C,KAAK4xC,oBAAoBhtB,KACvDqkB,EAAOjpC,KAAKyjE,mBAChBzjE,KAAK+gB,QAAQqrC,UAAUtV,mBAAmBxmB,EAAOtwB,KAAK+gB,QAASkoB,EAAK6V,MAAO7V,EAAK5uB,OAGlFra,KAAKo4C,mBAAqB,WACxB,IAAIzzB,EAAS3kB,KAAK4xC,oBACdthB,EAAQtwB,KAAK+gB,QAAQk+B,SAASt6B,EAAOC,KACrC3D,EAAQjhB,KAAKqlB,oBACjBrlB,KAAK+gB,QAAQqrC,UAAUhU,mBAAmB9nB,EAAOtwB,KAAK+gB,QAASE,EAAO0D,IAGxE3kB,KAAK0jE,YAAc,SAAU9+C,EAAKE,GAChC,IAAI6+C,EAAY,4BAChBA,EAAUjgE,UAAY,EAGtB,IAFA,IAAI2tB,EAAIrxB,KAAK+gB,QAAQiY,QAAQpU,GAEtB++C,EAAUjgE,UAAYohB,GAAQ,CACnC,IAAI2Q,EAAIkuC,EAAUxgE,KAAKkuB,GAEvB,GAAIoE,EAAEhxB,OAASqgB,GAAU2Q,EAAEhxB,MAAQgxB,EAAE,GAAGl1B,QAAUukB,EAMhD,MALa,CACXxc,MAAOmtB,EAAE,GACThvB,MAAOgvB,EAAEhxB,MACT+e,IAAKiS,EAAEhxB,MAAQgxB,EAAE,GAAGl1B,QAM1B,OAAO,MAGTP,KAAKk5D,aAAe,SAAU0K,GAC5B,IAAIh/C,EAAM5kB,KAAK2e,UAAUmmB,YAAYlgB,IACjCE,EAAS9kB,KAAK2e,UAAUmmB,YAAYhgB,OACpC++C,EAAY,IAAI3hC,EAAMtd,EAAKE,EAAS,EAAGF,EAAKE,GAC5CzD,EAAIrhB,KAAK+gB,QAAQgO,aAAa80C,GAElC,IAAKtX,MAAM/4C,WAAW6N,KAAOyiD,SAASziD,GAAI,CACxC,IAAI0iD,EAAK/jE,KAAK0jE,YAAY9+C,EAAKE,GAE/B,GAAIi/C,EAAI,CACN,IAAIC,EAAKD,EAAGz7D,MAAMnG,QAAQ,MAAQ,EAAI4hE,EAAGt9D,MAAQs9D,EAAGz7D,MAAMnG,QAAQ,KAAO,EAAI4hE,EAAGvgD,IAC5EygD,EAAWF,EAAGt9D,MAAQs9D,EAAGz7D,MAAM/H,OAASyjE,EACxCh8C,EAAIxU,WAAWuwD,EAAGz7D,OACtB0f,GAAKnhB,KAAKuL,IAAI,GAAI6xD,GAEdD,IAAOD,EAAGvgD,KAAOsB,EAASk/C,EAC5BJ,GAAU/8D,KAAKuL,IAAI,GAAI2xD,EAAGvgD,IAAMsB,EAAS,GAEzC8+C,GAAU/8D,KAAKuL,IAAI,GAAI2xD,EAAGvgD,IAAMsB,GAGlCkD,GAAK47C,EAEL,IAAIM,GADJl8C,GAAKnhB,KAAKuL,IAAI,GAAI6xD,IACNE,QAAQF,GAChBG,EAAe,IAAIliC,EAAMtd,EAAKm/C,EAAGt9D,MAAOme,EAAKm/C,EAAGvgD,KACpDxjB,KAAK+gB,QAAQre,QAAQ0hE,EAAcF,GACnClkE,KAAKolC,aAAaxgB,EAAK/d,KAAKC,IAAIi9D,EAAGt9D,MAAQ,EAAGqe,EAASo/C,EAAI3jE,OAASwjE,EAAGz7D,MAAM/H,YAKnFP,KAAK28C,YAAc,WACjB,IAAI1T,EAAOjpC,KAAKyjE,mBAChBzjE,KAAK+gB,QAAQ67B,gBAAgB3T,EAAK6V,MAAO7V,EAAK5uB,MAC9Cra,KAAKmhB,kBAGPnhB,KAAKg5D,mBAAqB,WACxB,IAAIqL,EAAMrkE,KAAK2e,UACXrS,EAAMtM,KAAK+gB,QACXE,EAAQojD,EAAIvjD,WACZtG,EAAU6pD,EAAIh/B,cAElB,GAAIpkB,EAAM5C,UAAW,CACnB,IAAIuG,EAAM3D,EAAMxa,MAAMme,IACtBtY,EAAI8iD,eAAexqC,EAAKA,OACnB,CACL,IAAIk2B,EAAQtgC,EAAUyG,EAAMxa,MAAQwa,EAAMuC,IACtC8gD,EAAWh4D,EAAItF,OAAO8zC,EAAOxuC,EAAIyiB,aAAa9N,IAAQ,GAC1DA,EAAMxa,MAAQq0C,EACd75B,EAAMuC,IAAM8gD,EACZD,EAAI5lD,kBAAkBwC,EAAOzG,KAIjCxa,KAAKmvD,cAAgB,WACnBnvD,KAAK6uD,WAAW,GAAG,IAGrB7uD,KAAKkvD,YAAc,WACjBlvD,KAAK6uD,YAAY,GAAG,IAGtB7uD,KAAK0vB,SAAW,SAAUzO,EAAOktC,EAAYrzC,GAC3C,OAAO9a,KAAK+gB,QAAQ2O,SAASzO,EAAOktC,EAAYrzC,IAGlD9a,KAAKm5D,YAAc,WACjBn5D,KAAK6uD,YAAY,GAAG,IAGtB7uD,KAAKo5D,cAAgB,WACnBp5D,KAAK6uD,WAAW,GAAG,IAGrB7uD,KAAK6uD,WAAa,SAAUr0B,EAAK1f,GAC/B,IAAImuB,EAAMs7B,EACN5lD,EAAY3e,KAAK2e,UAErB,IAAKA,EAAU+G,mBAAqB1lB,KAAKihE,uBAAwB,CAC/D,IAAIhgD,EAAQtC,EAAUiP,kBACtBqb,EAAOjpC,KAAKyjE,iBAAiBxiD,GAC7BsjD,EAAQvkE,KAAK+gB,QAAQ8tC,WAAW5lB,EAAK6V,MAAO7V,EAAK5uB,KAAMS,EAAO,EAAI0f,GAC9D1f,IAAgB,GAAR0f,IAAW+pC,EAAQ,GAC/BtjD,EAAMgjB,OAAOsgC,EAAO,GACpB5lD,EAAU2P,kBAAkBrN,OACvB,CACL,IAAI8oB,EAASprB,EAAUurB,UAAUH,OACjCprB,EAAUurB,UAAUlQ,OAAOh6B,KAAK+gB,SAChC/gB,KAAKihE,wBAAyB,EAK9B,IAJA,IAAInS,EAAO,EACP0V,EAAY,EACZ5iE,EAAImoC,EAAOxpC,OAENoB,EAAI,EAAGA,EAAIC,EAAGD,IAAK,CAC1B,IAAI8iE,EAAa9iE,EACjBooC,EAAOpoC,GAAGsiC,OAAO6qB,EAAM,GAKvB,IAHA,IAAIhQ,GADJ7V,EAAOjpC,KAAKyjE,iBAAiB15B,EAAOpoC,KACnBm9C,MACbzkC,EAAO4uB,EAAK5uB,OAEP1Y,EAAIC,GAAG,CACV4iE,GAAWz6B,EAAOpoC,GAAGsiC,OAAOugC,EAAW,GAC3C,IAAIE,EAAU1kE,KAAKyjE,iBAAiB15B,EAAOpoC,IAC3C,GAAImZ,GAAQ4pD,EAAQ5lB,OAASzkC,EAAM,MAAW,IAAKS,GAAQ4pD,EAAQ5lB,MAAQzkC,EAAO,EAAG,MACrFA,EAAOqqD,EAAQrqD,KAOjB,IAJA1Y,IACAmtD,EAAO9uD,KAAK+gB,QAAQ8tC,WAAW/P,EAAOzkC,EAAMS,EAAO,EAAI0f,GACnD1f,IAAgB,GAAR0f,IAAWiqC,EAAa9iE,EAAI,GAEjC8iE,GAAc9iE,GACnBooC,EAAO06B,GAAYxgC,OAAO6qB,EAAM,GAChC2V,IAGG3pD,IAAMg0C,EAAO,GAClB0V,GAAa1V,EAGfnwC,EAAU2P,kBAAkB3P,EAAUorB,OAAO,IAC7CprB,EAAUurB,UAAUnQ,OAAO/5B,KAAK+gB,SAChC/gB,KAAKihE,wBAAyB,IAIlCjhE,KAAKyjE,iBAAmB,SAAUxiD,GAEhC,OADAA,GAASA,GAASjhB,KAAKqlB,qBAAqBue,eACrC,CACLkb,MAAO9+C,KAAK+gB,QAAQsjC,gBAAgBpjC,EAAMxa,MAAMme,KAChDvK,KAAMra,KAAK+gB,QAAQqjC,cAAcnjC,EAAMuC,IAAIoB,OAI/C5kB,KAAK2hB,mBAAqB,SAAU5E,GAClC/c,KAAKwhB,SAASmjD,gBAAgB3kE,KAAK4xC,sBAGrC5xC,KAAKugB,oBAAsB,SAAUxD,GACnC/c,KAAKwhB,SAASojD,mBAAmB7nD,IAGnC/c,KAAKohB,iBAAmB,WACtBphB,KAAKwhB,SAASqjD,mBAGhB7kE,KAAK8kE,mBAAqB,WACxB,OAAO9kE,KAAKwhB,SAASsjD,sBAGvB9kE,KAAK+kE,kBAAoB,WACvB,OAAO/kE,KAAKwhB,SAASujD,qBAGvB/kE,KAAKglE,aAAe,SAAUpgD,GAC5B,OAAOA,GAAO5kB,KAAK8kE,sBAAwBlgD,GAAO5kB,KAAK+kE,qBAGzD/kE,KAAKilE,kBAAoB,SAAUrgD,GACjC,OAAOA,GAAO5kB,KAAKwhB,SAAS0jD,2BAA6BtgD,GAAO5kB,KAAKwhB,SAAS2jD,0BAGhFnlE,KAAKolE,oBAAsB,WACzB,OAAOplE,KAAKwhB,SAAS6jD,qBAAuBrlE,KAAKwhB,SAAS8jD,kBAAoB,GAGhFtlE,KAAKulE,YAAc,SAAU/qC,EAAKta,GAChC,IAAIsB,EAAWxhB,KAAKwhB,SAChBmV,EAAS32B,KAAKwhB,SAASyL,YACvBgc,EAAOzO,EAAM3zB,KAAKsF,MAAMwqB,EAAO5nB,OAAS4nB,EAAO3J,YACnDhtB,KAAKslB,mBAEU,IAAXpF,EACFlgB,KAAK2e,UAAU2mB,gBAAe,WAC5BtlC,KAAKsnC,aAAa2B,EAAM,OAEN,IAAX/oB,IACTlgB,KAAK2e,UAAU2oB,aAAa2B,EAAM,GAClCjpC,KAAK2e,UAAUwC,kBAGjBnhB,KAAKslB,kBACL,IAAIxV,EAAY0R,EAAS1R,UACzB0R,EAASkH,SAAS,EAAGugB,EAAOtS,EAAO3J,YACrB,MAAV9M,GAAgBsB,EAASgF,qBAAqB,KAAM,IACxDhF,EAASk6C,iBAAiB5rD,IAG5B9P,KAAKw4D,eAAiB,WACpBx4D,KAAKulE,YAAY,GAAG,IAGtBvlE,KAAK24D,aAAe,WAClB34D,KAAKulE,aAAa,GAAG,IAGvBvlE,KAAK04D,aAAe,WAClB14D,KAAKulE,YAAY,GAAG,IAGtBvlE,KAAK64D,WAAa,WAChB74D,KAAKulE,aAAa,GAAG,IAGvBvlE,KAAKy4D,eAAiB,WACpBz4D,KAAKulE,YAAY,IAGnBvlE,KAAK44D,aAAe,WAClB54D,KAAKulE,aAAa,IAGpBvlE,KAAKwlE,YAAc,SAAU5gD,GAC3B5kB,KAAKwhB,SAASgkD,YAAY5gD,IAG5B5kB,KAAKylE,aAAe,SAAUhnC,EAAMinC,EAAQC,EAASxkE,GACnDnB,KAAKwhB,SAASikD,aAAahnC,EAAMinC,EAAQC,EAASxkE,IAGpDnB,KAAKq3D,gBAAkB,WACrB,IAAIp2C,EAAQjhB,KAAKqlB,oBACb1e,EAAM,CACRie,IAAK/d,KAAKsF,MAAM8U,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,IAAM3D,EAAMxa,MAAMme,KAAO,GACtEE,OAAQje,KAAKsF,MAAM8U,EAAMxa,MAAMqe,QAAU7D,EAAMuC,IAAIsB,OAAS7D,EAAMxa,MAAMqe,QAAU,IAEpF9kB,KAAKwhB,SAASokD,YAAYj/D,EAAK,KAGjC3G,KAAK4xC,kBAAoB,WACvB,OAAO5xC,KAAK2e,UAAUmmB,aAGxB9kC,KAAK6lE,wBAA0B,WAC7B,OAAO7lE,KAAK+gB,QAAQgjB,yBAAyB/jC,KAAK4xC,sBAGpD5xC,KAAKqlB,kBAAoB,WACvB,OAAOrlB,KAAK2e,UAAUmC,YAGxB9gB,KAAKqgB,UAAY,WACfrgB,KAAKslB,iBAAmB,EACxBtlB,KAAK2e,UAAU0B,YACfrgB,KAAKslB,iBAAmB,GAG1BtlB,KAAKmhB,eAAiB,WACpBnhB,KAAK2e,UAAUwC,kBAGjBnhB,KAAKolC,aAAe,SAAUxgB,EAAKE,GACjC9kB,KAAK2e,UAAUymB,aAAaxgB,EAAKE,IAGnC9kB,KAAK8sB,qBAAuB,SAAUnmB,GACpC3G,KAAK2e,UAAUmO,qBAAqBnmB,IAGtC3G,KAAK84D,eAAiB,SAAU54C,EAAQ4lD,GACtC,IAAInhD,EAAS3kB,KAAK4xC,oBACd8B,EAAW,IAAIrE,EAAcrvC,KAAK+gB,QAAS4D,EAAOC,IAAKD,EAAOG,QAC9Ds6C,EAAY1rB,EAASzD,kBACrB5E,EAAQ+zB,GAAa1rB,EAAS3D,cAClC,GAAK1E,EAAL,CACA,IAAI06B,EAIAC,EAHAC,GAAQ,EACRlhB,EAAQ,GACRpjD,EAAIgjB,EAAOG,OAASumB,EAAM5kC,MAE1By/D,EAAW,CACb,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGP,EAAG,CACD,GAAI76B,EAAM/iC,MAAMhF,MAAM,gBACpB,KAAO3B,EAAI0pC,EAAM/iC,MAAM/H,SAAW0lE,EAAOtkE,IACvC,GAAKukE,EAAS76B,EAAM/iC,MAAM3G,IAU1B,OANAqkE,EAAcE,EAAS76B,EAAM/iC,MAAM3G,IAAM,IAAM0pC,EAAMv2B,KAAKpS,QAAQ,SAAU,UAExE6pD,MAAMxH,EAAMihB,MACdjhB,EAAMihB,GAAe,GAGf36B,EAAM/iC,MAAM3G,IAClB,IAAK,IACL,IAAK,IACL,IAAK,IACHojD,EAAMihB,KACN,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACHjhB,EAAMihB,MAEsB,IAAxBjhB,EAAMihB,KACRD,EAAY,UACZE,GAAQ,SAMP56B,IAA6C,IAApCA,EAAMv2B,KAAK3S,QAAQ,cACjCoqD,MAAMxH,EAAM1Z,EAAM/iC,UACpBy8C,EAAM1Z,EAAM/iC,OAAS,GAGC,MAApB82D,EAAU92D,MACZy8C,EAAM1Z,EAAM/iC,SACiB,OAApB82D,EAAU92D,OACnBy8C,EAAM1Z,EAAM/iC,UAGc,IAAxBy8C,EAAM1Z,EAAM/iC,SACdy9D,EAAY,MACZE,GAAQ,IAIPA,IACH7G,EAAY/zB,EACZA,EAAQqI,EAAS3D,cACjBpuC,EAAI,SAEC0pC,IAAU46B,GAEnB,GAAKF,EAAL,CACA,IAAI9kD,EAAOta,EAEX,GAAkB,YAAdo/D,GACF9kD,EAAQjhB,KAAK+gB,QAAQ0G,gBAAgB9C,MAInChe,GADAsa,EAAQ,IAAIihB,EAAMwR,EAASxD,qBAAsBwD,EAASvD,wBAA0BxuC,EAAI,EAAG+xC,EAASxD,qBAAsBwD,EAASvD,wBAA0BxuC,EAAI,IACrJ8E,OACRq/D,GAAUn/D,EAAIie,MAAQD,EAAOC,KAAO/d,KAAKiC,IAAInC,EAAIme,OAASH,EAAOG,QAAU,KAAG7D,EAAQjhB,KAAK+gB,QAAQ0G,gBAAgB9gB,UAEpH,GAAkB,QAAdo/D,EAAqB,CAC9B,IAAI16B,IAA6C,IAApCA,EAAMv2B,KAAK3S,QAAQ,YAA+C,OAA3B,IAAIuK,EAAM2+B,EAAM/iC,MAGpE,GAAiD,KAFjD2Y,EAAQ,IAAIihB,EAAMwR,EAASxD,qBAAsBwD,EAASvD,wBAA0B,EAAGuD,EAASxD,qBAAsBwD,EAASvD,wBAA0B,IAE/I3N,QAAQ7d,EAAOC,IAAKD,EAAOG,QAAe,CAClDmhD,GAAQ,EAER,GACE56B,EAAQ+zB,GACRA,EAAY1rB,EAAS5D,mBAG0B,IAAzCsvB,EAAUtqD,KAAK3S,QAAQ,cACzB8e,EAAM+hB,OAAO0Q,EAASxD,qBAAsBwD,EAASvD,wBAA0B,GAG7E9E,EAAM/iC,QAAUoE,IAA2C,IAApC2+B,EAAMv2B,KAAK3S,QAAQ,cACpB,MAApBi9D,EAAU92D,MACZy8C,EAAMr4C,KACuB,OAApB0yD,EAAU92D,OACnBy8C,EAAMr4C,KAGW,IAAfq4C,EAAMr4C,KAAYu5D,GAAQ,WAG3B7G,IAAc6G,GAGrB56B,GAASA,EAAMv2B,KAAK3S,QAAQ,cAC9BwE,EAAMsa,EAAMxa,OACJme,KAAOD,EAAOC,KAAO/d,KAAKiC,IAAInC,EAAIme,OAASH,EAAOG,QAAU,IAAGne,EAAMsa,EAAMuC,MAIvF7c,EAAMsa,GAASA,EAAM0D,QAAUhe,KAGzBuZ,EACEe,GAAS6kD,EACX9lE,KAAK2e,UAAUuC,SAASD,GACfA,GAASA,EAAMshB,QAAQviC,KAAKqlB,qBACrCrlB,KAAKmhB,iBAELnhB,KAAK2e,UAAUiM,SAASjkB,EAAIie,IAAKje,EAAIme,QAGvC9kB,KAAK2e,UAAU6mB,OAAO7+B,EAAIie,IAAKje,EAAIme,YAKzC9kB,KAAKu3D,SAAW,SAAU4O,EAAYrhD,EAAQ6gD,GAC5C3lE,KAAK2e,UAAUwC,iBACfnhB,KAAK+gB,QAAQijC,OAAO,CAClBp/B,IAAKuhD,EAAa,EAClBrhD,OAAQA,GAAU,IAEpB9kB,KAAKslB,iBAAmB,EACxBtlB,KAAKm6D,qBAAuBn6D,KAAKm6D,sBACjCn6D,KAAKolC,aAAa+gC,EAAa,EAAGrhD,GAAU,GAC5C9kB,KAAKslB,iBAAmB,EACnBtlB,KAAKilE,kBAAkBkB,EAAa,IAAInmE,KAAKylE,aAAaU,EAAa,GAAG,EAAMR,IAGvF3lE,KAAKomE,WAAa,SAAUxhD,EAAKE,GAC/B9kB,KAAK2e,UAAU6mB,OAAO5gB,EAAKE,IAG7B9kB,KAAK83D,WAAa,SAAUC,GAC1B,GAAI/3D,KAAK2e,UAAUgJ,gBAAkB3nB,KAAK2e,UAAU0mB,cAAe,CACjE,IAAI9mB,EAAiBve,KAAK2e,UAAUoG,OAAOggB,cAC3C,OAAO/kC,KAAK8sB,qBAAqBvO,GAGnCve,KAAK2e,UAAUwC,iBACfnhB,KAAK2e,UAAU2oB,cAAcywB,IAAU,EAAG,IAG5C/3D,KAAKi4D,aAAe,SAAUF,GAC5B,GAAI/3D,KAAK2e,UAAUgJ,eAAiB3nB,KAAK2e,UAAU0mB,cAAe,CAChE,IAAI7mB,EAAexe,KAAK2e,UAAUoG,OAAOggB,cACzC,OAAO/kC,KAAK8sB,qBAAqBtO,GAGnCxe,KAAK2e,UAAUwC,iBACfnhB,KAAK2e,UAAU2oB,aAAaywB,GAAS,EAAG,IAG1C/3D,KAAKo4D,aAAe,SAAUL,GAC5B,GAAK/3D,KAAK2e,UAAUN,UAMlB,IAFA05C,EAAQA,GAAS,EAEVA,KACL/3D,KAAK2e,UAAUqnB,qBAPY,CAC7B,IAAIznB,EAAiBve,KAAKqlB,oBAAoB5e,MAC9CzG,KAAK8sB,qBAAqBvO,GAS5Bve,KAAKmhB,kBAGPnhB,KAAKu4D,cAAgB,SAAUR,GAC7B,GAAK/3D,KAAK2e,UAAUN,UAMlB,IAFA05C,EAAQA,GAAS,EAEVA,KACL/3D,KAAK2e,UAAUmnB,sBAPY,CAC7B,IAAItnB,EAAexe,KAAKqlB,oBAAoB7B,IAC5CxjB,KAAK8sB,qBAAqBtO,GAS5Bxe,KAAKmhB,kBAGPnhB,KAAKm4D,kBAAoB,WACvBn4D,KAAK2e,UAAUunB,sBACflmC,KAAKmhB,kBAGPnhB,KAAKs4D,gBAAkB,WACrBt4D,KAAK2e,UAAUynB,oBACfpmC,KAAKmhB,kBAGPnhB,KAAKg4D,gBAAkB,WACrBh4D,KAAK2e,UAAU2nB,oBACftmC,KAAKmhB,kBAGPnhB,KAAK63D,kBAAoB,WACvB73D,KAAK2e,UAAU6nB,sBACfxmC,KAAKmhB,kBAGPnhB,KAAKq4D,kBAAoB,WACvBr4D,KAAK2e,UAAU+nB,sBACf1mC,KAAKmhB,kBAGPnhB,KAAKk4D,iBAAmB,WACtBl4D,KAAK2e,UAAUioB,qBACf5mC,KAAKmhB,kBAGPnhB,KAAK0C,QAAU,SAAUyxD,EAAapgC,GAChCA,GAAS/zB,KAAK26D,QAAQjxD,IAAIqqB,GAC9B,IAAI9S,EAAQjhB,KAAK26D,QAAQpH,KAAKvzD,KAAK+gB,SAC/BslD,EAAW,EACf,OAAKplD,GAEDjhB,KAAKsmE,YAAYrlD,EAAOkzC,KAC1BkS,EAAW,GAGC,OAAVplD,IACFjhB,KAAK2e,UAAUF,kBAAkBwC,GACjCjhB,KAAKwhB,SAASi6C,wBAAwBx6C,EAAMxa,MAAOwa,EAAMuC,MAGpD6iD,GAXYA,GAcrBrmE,KAAKumE,WAAa,SAAUpS,EAAapgC,GACnCA,GACF/zB,KAAK26D,QAAQjxD,IAAIqqB,GAGnB,IAAIgW,EAAS/pC,KAAK26D,QAAQ7G,QAAQ9zD,KAAK+gB,SACnCslD,EAAW,EACf,IAAKt8B,EAAOxpC,OAAQ,OAAO8lE,EAC3BrmE,KAAKslB,iBAAmB,EACxB,IAAI3G,EAAY3e,KAAKqlB,oBACrBrlB,KAAK2e,UAAU6mB,OAAO,EAAG,GAEzB,IAAK,IAAI7jC,EAAIooC,EAAOxpC,OAAS,EAAGoB,GAAK,IAAKA,EACpC3B,KAAKsmE,YAAYv8B,EAAOpoC,GAAIwyD,IAC9BkS,IAMJ,OAFArmE,KAAK2e,UAAUF,kBAAkBE,GACjC3e,KAAKslB,iBAAmB,EACjB+gD,GAGTrmE,KAAKsmE,YAAc,SAAUrlD,EAAOkzC,GAClC,IAAIvb,EAAQ54C,KAAK+gB,QAAQgO,aAAa9N,GAGtC,OAAoB,QAFpBkzC,EAAcn0D,KAAK26D,QAAQj4D,QAAQk2C,EAAOub,KAGxClzC,EAAMuC,IAAMxjB,KAAK+gB,QAAQre,QAAQue,EAAOkzC,GACjClzC,GAEA,MAIXjhB,KAAKwmE,qBAAuB,WAC1B,OAAOxmE,KAAK26D,QAAQ3nC,cAGtBhzB,KAAKuzD,KAAO,SAAUQ,EAAQhgC,EAAS4xC,GAChC5xC,IAASA,EAAU,IACH,iBAAVggC,GAAsBA,aAAkB3wD,OAAQ2wB,EAAQggC,OAASA,EAAiC,iBAAVA,GAAoBxiD,EAAIH,MAAM2iB,EAASggC,GAC1I,IAAI9yC,EAAQjhB,KAAK2e,UAAUmC,WAEL,MAAlBiT,EAAQggC,UACVA,EAAS/zD,KAAK+gB,QAAQgO,aAAa9N,IAAUjhB,KAAK26D,QAAQznC,SAAS6gC,UAGjE9yC,EAAQjhB,KAAK+gB,QAAQ2G,aAAazG,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,QAC/DivC,EAAS/zD,KAAK+gB,QAAQgO,aAAa9N,IAGrCjhB,KAAK26D,QAAQjxD,IAAI,CACfqqD,OAAQA,KAIZ/zD,KAAK26D,QAAQjxD,IAAIqqB,GACZA,EAAQttB,OAAOzG,KAAK26D,QAAQjxD,IAAI,CACnCjD,MAAOwa,IAET,IAAIwlD,EAAWzmE,KAAK26D,QAAQpH,KAAKvzD,KAAK+gB,SACtC,OAAIgT,EAAQ2yC,cAAsBD,EAE9BA,GACFzmE,KAAK2mE,YAAYF,EAAUd,GACpBc,IAGL1yC,EAAQ6gC,UAAW3zC,EAAMxa,MAAQwa,EAAMuC,IAASvC,EAAMuC,IAAMvC,EAAMxa,WACtEzG,KAAK2e,UAAUuC,SAASD,KAG1BjhB,KAAK03D,SAAW,SAAU3jC,EAAS4xC,GACjC3lE,KAAKuzD,KAAK,CACRM,aAAa,EACbe,WAAW,GACV7gC,EAAS4xC,IAGd3lE,KAAK23D,aAAe,SAAU5jC,EAAS4xC,GACrC3lE,KAAKuzD,KAAKx/B,EAAS,CACjB8/B,aAAa,EACbe,WAAW,GACV+Q,IAGL3lE,KAAK2mE,YAAc,SAAU1lD,EAAO0kD,GAClC3lE,KAAKslB,iBAAmB,EACxBtlB,KAAK+gB,QAAQijC,OAAO/iC,GACpBjhB,KAAK2e,UAAUF,kBAAkBwC,GACjCjhB,KAAKslB,iBAAmB,EACxB,IAAIxV,EAAY9P,KAAKwhB,SAAS1R,UAC9B9P,KAAKwhB,SAASi6C,wBAAwBx6C,EAAMxa,MAAOwa,EAAMuC,IAAK,KAC9C,IAAZmiD,GAAmB3lE,KAAKwhB,SAASk6C,iBAAiB5rD,IAGxD9P,KAAK2gB,KAAO,WACV3gB,KAAKslB,kBACLtlB,KAAK+gB,QAAQynC,iBAAiB7nC,OAC9B3gB,KAAKslB,kBACLtlB,KAAKwhB,SAASgF,qBAAqB,KAAM,KAG3CxmB,KAAKipD,KAAO,WACVjpD,KAAKslB,kBACLtlB,KAAK+gB,QAAQynC,iBAAiBS,OAC9BjpD,KAAKslB,kBACLtlB,KAAKwhB,SAASgF,qBAAqB,KAAM,KAG3CxmB,KAAK2pB,QAAU,WACb3pB,KAAKwhB,SAASmI,UAEd3pB,KAAKyqB,QAAQ,UAAWzqB,MAEpBA,KAAK+gB,SACP/gB,KAAK+gB,QAAQ4I,WAIjB3pB,KAAK4mE,4BAA8B,SAAU5Y,GAC3C,GAAKA,EAAL,CACA,IAAI1rC,EACApa,EAAOlI,KACP6mE,GAAe,EACd7mE,KAAK8mE,gBAAe9mE,KAAK8mE,cAAgBn8D,SAASC,cAAc,QACrE,IAAIm8D,EAAe/mE,KAAK8mE,cACxBC,EAAal5D,MAAMD,QAAU,oBAC7B5N,KAAKuiB,UAAUpF,aAAa4pD,EAAc/mE,KAAKuiB,UAAUnF,YACzD,IAAI4pD,EAAoBhnE,KAAK6hB,GAAG,mBAAmB,WACjDglD,GAAe,KAEbI,EAAiBjnE,KAAKwhB,SAASK,GAAG,gBAAgB,WAChDglD,IAAcvkD,EAAOpa,EAAKsZ,SAASe,UAAUC,4BAE/C0kD,EAAgBlnE,KAAKwhB,SAASK,GAAG,eAAe,WAClD,GAAIglD,GAAgBvkD,IAASpa,EAAK0V,aAAe1V,EAAKi/D,WAAaj/D,EAAKi/D,UAAUvpD,aAAc,CAC9F,IAAI4D,EAAWtZ,EAAKsZ,SAChB7a,EAAM6a,EAASuM,aAAaq5C,UAC5BzwC,EAASnV,EAASyL,YAClBxK,EAAM9b,EAAI8b,IAAMkU,EAAOhb,OAUP,OAPlBkrD,EADElgE,EAAI8b,KAAO,GAAKA,EAAMH,EAAKG,IAAM,KAE1B9b,EAAI8b,IAAMkU,EAAO5nB,QAAUpI,EAAI8b,IAAMH,EAAKG,IAAMkU,EAAO3J,WAAa/sB,OAAO+pB,cAGrE,QAIf+8C,EAAal5D,MAAM4U,IAAMA,EAAM,KAC/BskD,EAAal5D,MAAMsB,KAAOxI,EAAIwI,KAAO,KACrC43D,EAAal5D,MAAMkB,OAAS4nB,EAAO3J,WAAa,KAChD+5C,EAAa3P,eAAeyP,IAG9BA,EAAevkD,EAAO,SAI1BtiB,KAAK4mE,4BAA8B,SAAU5Y,GACvCA,WACGhuD,KAAK4mE,4BACZ5mE,KAAK0yB,IAAI,kBAAmBs0C,GAC5BhnE,KAAKwhB,SAASkR,IAAI,cAAew0C,GACjClnE,KAAKwhB,SAASkR,IAAI,eAAgBu0C,OAItCjnE,KAAKqnE,kBAAoB,WACvB,IAAIx5D,EAAQ7N,KAAKsnE,cAAgB,MAC7BC,EAAcvnE,KAAKwhB,SAASuM,aAC3Bw5C,IACLA,EAAYC,kBAAkB,SAASnkE,KAAKwK,IAC5C05D,EAAYE,YAAcznE,KAAKwgB,WAAsB,QAAT3S,EAC5C0O,EAAIpP,YAAYo6D,EAAYl5D,QAAS,mBAAoB,OAAOhL,KAAKwK,OAEtEpM,KAAK44D,EAAO94D,WACfo1B,EAAO7C,cAAcumC,EAAO94D,UAAW,SAAU,CAC/CmmE,eAAgB,CACdh+D,IAAK,SAAamE,GAChB7N,KAAKi+D,oBAELj+D,KAAKyqB,QAAQ,uBAAwB,CACnC3Q,KAAMjM,KAGVmmB,aAAc,QAEhB2zC,oBAAqB,CACnBj+D,IAAK,WACH1J,KAAK8/D,8BAEP9rC,cAAc,GAEhB4zC,sBAAuB,CACrBl+D,IAAK,SAAao4D,GAChB9hE,KAAKm9D,sBAEPnpC,cAAc,GAEhBhS,SAAU,CACRtY,IAAK,SAAasY,GAChBhiB,KAAKqnE,qBAEPrzC,cAAc,GAEhB5D,YAAa,CACX1mB,IAAK,SAAa+W,GAChBzgB,KAAKqnE,qBAEPr7B,OAAQ,CAAC,MAAO,OAAQ,SAAU,QAClChY,aAAc,OAEhB+0B,gBAAiB,CACf/c,OAAQ,EAAC,GAAO,EAAM,UACtBhY,cAAc,GAEhB6zC,kBAAmB,CACjB7zC,cAAc,GAEhB8zC,sBAAuB,CACrB9zC,cAAc,GAEhB+zC,yBAA0B,CACxBr+D,IAAK,SAAa+W,GAChBzgB,KAAK4mE,4BAA4BnmD,KAGrCy7C,gBAAiB,CACfxyD,IAAK,SAAa+W,GAChBzgB,KAAK45B,mBAAmBnZ,IAE1BhX,IAAK,WACH,OAAOzJ,KAAKgoE,cAEdz0C,YAAY,GAEd00C,wBAAyB,WACzBC,wBAAyB,WACzBC,oBAAqB,WACrBC,eAAgB,WAChB7pC,eAAgB,WAChBmkC,gBAAiB,WACjB2F,kBAAmB,WACnBC,YAAa,WACbC,gBAAiB,WACjBC,gBAAiB,WACjBC,gBAAiB,WACjBC,WAAY,WACZC,oBAAqB,WACrBC,SAAU,WACVC,WAAY,WACZC,SAAU,WACVC,SAAU,WACVC,cAAe,WACfC,iBAAkB,WAClBxK,MAAO,WACPvmC,YAAa,gBACbC,UAAW,gBACXC,YAAa,gBACbC,YAAa,gBACbC,oBAAqB,gBACrB86B,gBAAiB,UACjBxJ,UAAW,UACXxN,YAAa,UACbkP,UAAW,UACX+H,YAAa,UACb7rB,QAAS,UACT0rB,KAAM,UACNjC,iBAAkB,UAClBiY,UAAW,UACX/5B,KAAM,YAERxsC,EAAQ03D,OAASA,KAEnBr3D,IAAI9C,OAAO,kBAAmB,CAAC,UAAW,UAAW,WAAW,SAAU4B,EAAUa,EAASxC,GAC3F,aAEA,IAAIgpE,EAAc,WAChBnpE,KAAKyoD,UAGP,WA4EE,SAAS2gB,EAAgBhqC,GACvB,MAAO,CACL3B,OAAQ2B,EAAM3B,OACdh3B,MAAO24B,EAAM34B,MACb+c,IAAK4b,EAAM5b,IACX6b,MAA6B,GAAtBD,EAAMC,MAAM9+B,OAAc,KAAO6+B,EAAMC,MAC9CtiB,KAA4B,GAAtBqiB,EAAMC,MAAM9+B,OAAc6+B,EAAMC,MAAM,GAAK,MAIrD,SAASgqC,EAAkBjqC,GACzB,MAAO,CACL3B,OAAQ2B,EAAM3B,OACdh3B,MAAO24B,EAAM34B,MACb+c,IAAK4b,EAAM5b,IACX6b,MAAOD,EAAMC,OAAS,CAACD,EAAMriB,OAIjC,SAASusD,EAAkBC,EAAeC,GAGxC,IAFA,IAAIC,EAAgB,IAAIrlE,MAAMmlE,EAAchpE,QAEnCoB,EAAI,EAAGA,EAAI4nE,EAAchpE,OAAQoB,IAAK,CAO7C,IANA,IAAI+nE,EAAeH,EAAc5nE,GAC7BgoE,EAAe,CACjB9gB,MAAO6gB,EAAa7gB,MACpBvL,OAAQ,IAAIl5C,MAAMslE,EAAanpE,SAGxBg1B,EAAI,EAAGA,EAAIm0C,EAAapsB,OAAO/8C,OAAQg1B,IAAK,CACnD,IAAIq0C,EAAYF,EAAapsB,OAAO/nB,GACpCo0C,EAAarsB,OAAO/nB,GAAKi0C,EAAmBI,GAG9CH,EAAc9nE,GAAKgoE,EAGrB,OAAOF,EAhHTzpE,KAAK8oD,QAAU,SAAU/0B,GACvB,IAAI81C,EAAY91C,EAAQ7uB,KAAK,GAC7BlF,KAAK8pE,KAAO/1C,EAAQ7uB,KAAK,GAErB6uB,EAAQgZ,OAAS/sC,KAAK+pE,YACxB/pE,KAAKgqE,eACLH,EAAY7pE,KAAKiqE,WAAWz3C,MAAMntB,OAAOwkE,IAG3C7pE,KAAKiqE,WAAWloE,KAAK8nE,GACrB7pE,KAAKkqE,WAAa,GAEdlqE,KAAKgqE,aAAe,IACtBhqE,KAAKgqE,aAAeG,KAGtBnqE,KAAKgqE,gBAGPhqE,KAAK2gB,KAAO,SAAU+sC,GACpB,IAAImc,EAAY7pE,KAAKiqE,WAAWz3C,MAC5B43C,EAAqB,KAQzB,OANIP,IACFO,EAAqBpqE,KAAK8pE,KAAKrc,YAAYoc,EAAWnc,GACtD1tD,KAAKkqE,WAAWnoE,KAAK8nE,GACrB7pE,KAAKgqE,gBAGAI,GAGTpqE,KAAKipD,KAAO,SAAUyE,GACpB,IAAImc,EAAY7pE,KAAKkqE,WAAW13C,MAC5B63C,EAAqB,KAQzB,OANIR,IACFQ,EAAqBrqE,KAAK8pE,KAAKhc,YAAY9tD,KAAKsqE,mBAAmBT,GAAYnc,GAC/E1tD,KAAKiqE,WAAWloE,KAAK8nE,GACrB7pE,KAAKgqE,gBAGAK,GAGTrqE,KAAKyoD,MAAQ,WACXzoD,KAAKiqE,WAAa,GAClBjqE,KAAKkqE,WAAa,GAClBlqE,KAAKgqE,aAAe,GAGtBhqE,KAAK+pE,QAAU,WACb,OAAO/pE,KAAKiqE,WAAW1pE,OAAS,GAGlCP,KAAKuqE,QAAU,WACb,OAAOvqE,KAAKkqE,WAAW3pE,OAAS,GAGlCP,KAAKwqE,UAAY,WACfxqE,KAAKgqE,aAAe,GAGtBhqE,KAAKyqE,QAAU,WACb,OAA6B,IAAtBzqE,KAAKgqE,cAGdhqE,KAAK0qE,iBAAmB,SAAUb,GAChC,OAAOP,EAAkBO,EAAWT,IAGtCppE,KAAKsqE,mBAAqB,SAAUT,GAClC,OAAOP,EAAkBO,EAAWR,MA0CrC5nE,KAAK0nE,EAAY5nE,WACpBoB,EAAQwmE,YAAcA,KAExBnmE,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,eAAgB,0BAA0B,SAAU4B,EAAUa,EAASxC,GACnK,aAEA,IAAIoc,EAAMza,EAAS,cACfyP,EAAMzP,EAAS,cACf0a,EAAO1a,EAAS,eAChB4vB,EAAe5vB,EAAS,wBAAwB4vB,aAEhDi5C,EAAS,SAAgBC,GAC3B5qE,KAAKqO,QAAUkO,EAAI3R,cAAc,OACjC5K,KAAKqO,QAAQvB,UAAY,6BACzB89D,EAAS98D,YAAY9N,KAAKqO,SAC1BrO,KAAKijE,mBAAmBjjE,KAAK6qE,kBAC7B7qE,KAAK8qE,YAAc,EACnB9qE,KAAKirB,aAAe,GACpBjrB,KAAK+qE,mBAAqB/qE,KAAK+qE,mBAAmBjmE,KAAK9E,MACvDA,KAAKgrE,OAAS,KAGhB,WACEz5D,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK+6D,WAAa,SAAUh6C,GACtB/gB,KAAK+gB,SAAS/gB,KAAK+gB,QAAQ1L,oBAAoB,SAAUrV,KAAK+qE,oBAClE/qE,KAAK+gB,QAAUA,EACXA,GAASA,EAAQc,GAAG,SAAU7hB,KAAK+qE,qBAGzC/qE,KAAK+pD,oBAAsB,SAAUnlC,EAAK9X,GACpC7M,OAAOW,SAASA,QAAQyyB,MAAQzyB,QAAQyyB,KAAK,8CACjDrzB,KAAK+gB,QAAQgpC,oBAAoBnlC,EAAK9X,IAGxC9M,KAAKgqD,uBAAyB,SAAUplC,EAAK9X,GACvC7M,OAAOW,SAASA,QAAQyyB,MAAQzyB,QAAQyyB,KAAK,iDACjDrzB,KAAK+gB,QAAQipC,uBAAuBplC,EAAK9X,IAG3C9M,KAAK+qD,eAAiB,SAAUC,GAC9BhrD,KAAKirB,aAAe,GAEpB,IAAK,IAAItpB,EAAI,EAAGA,EAAIqpD,EAAYzqD,OAAQoB,IAAK,CAC3C,IAAIqpB,EAAaggC,EAAYrpD,GACzBijB,EAAMoG,EAAWpG,IACjBqmD,EAAUjrE,KAAKirB,aAAarG,GAC3BqmD,IAASA,EAAUjrE,KAAKirB,aAAarG,GAAO,CAC/C7H,KAAM,KAER,IAAImuD,EAAWlgD,EAAWjO,KAC1BmuD,EAAWA,EAAW1uD,EAAKjB,WAAW2vD,GAAYlgD,EAAW7B,MAAQ,IAC7B,IAApC8hD,EAAQluD,KAAK5a,QAAQ+oE,IAAkBD,EAAQluD,KAAKhb,KAAKmpE,GAC7D,IAAIp2D,EAAOkW,EAAWlW,KACV,SAARA,EAAiBm2D,EAAQn+D,UAAY,aAA8B,WAARgI,GAA0C,cAArBm2D,EAAQn+D,UAA2Bm+D,EAAQn+D,UAAY,eAAgC,QAARgI,GAAmBm2D,EAAQn+D,YAAWm+D,EAAQn+D,UAAY,eAIjO9M,KAAK+qE,mBAAqB,SAAU3rC,GAClC,GAAKp/B,KAAKirB,aAAa1qB,OAAvB,CACA,IAAIgjC,EAAWnE,EAAM34B,MAAMme,IACvB8W,EAAM0D,EAAM5b,IAAIoB,IAAM2e,EAE1B,GAAY,IAAR7H,QAAmB,GAAoB,UAAhB0D,EAAM3B,OAC/Bz9B,KAAKirB,aAAa7kB,OAAOm9B,EAAU7H,EAAM,EAAG,UACvC,CACL,IAAIx2B,EAAO,IAAId,MAAMs3B,EAAM,GAC3Bx2B,EAAK8nC,QAAQzJ,EAAU,GACvBvjC,KAAKirB,aAAa7kB,OAAOzF,MAAMX,KAAKirB,aAAc/lB,MAItDlF,KAAKu/C,OAAS,SAAU5oB,GAiBtB,IAhBA,IAAI5V,EAAU/gB,KAAK+gB,QACfwiB,EAAW5M,EAAO4M,SAClBC,EAAU38B,KAAKM,IAAIwvB,EAAO6M,QAAU7M,EAAOw0C,aAC/CpqD,EAAQmK,YAAc,GAClBsN,EAAOzX,EAAQiiC,gBAAgBzf,GAC/BgqB,EAAY/0B,EAAOA,EAAK/xB,MAAMme,IAAMsyB,EAAAA,EACpCte,EAAc54B,KAAK6qE,kBAAoB9pD,EAAQ6X,YAC/CwyC,EAAcrqD,EAAQgmC,aACtBskB,EAActqD,EAAQimC,aACtBoM,EAAkBryC,EAAQuqD,iBAC1BC,EAAiB,EACjBC,EAAiBzqD,EAAQyqD,gBAAkBxrE,KAAKyrE,UAChDC,EAAO,KACPjnE,GAAS,EACTmgB,EAAM2e,IAEG,CAOX,GANI3e,EAAM2oC,IACR3oC,EAAM4T,EAAKhV,IAAIoB,IAAM,EAErB2oC,GADA/0B,EAAOzX,EAAQiiC,gBAAgBp+B,EAAK4T,IACjBA,EAAK/xB,MAAMme,IAAMsyB,EAAAA,GAGlCtyB,EAAM4e,EAAS,CACjB,KAAOxjC,KAAKgrE,OAAOzqE,OAASkE,EAAQ,GAClCinE,EAAO1rE,KAAKgrE,OAAOx4C,MACnBxyB,KAAKqO,QAAQoB,YAAYi8D,EAAKr9D,SAGhC,OAGFq9D,EAAO1rE,KAAKgrE,SAASvmE,OAGnBinE,EAAO,CACLr9D,QAAS,KACTs9D,SAAU,KACVC,WAAY,OAETv9D,QAAUkO,EAAI3R,cAAc,OACjC8gE,EAAKC,SAAWhhE,SAASoD,eAAe,IACxC29D,EAAKr9D,QAAQP,YAAY49D,EAAKC,UAC9B3rE,KAAKqO,QAAQP,YAAY49D,EAAKr9D,SAC9BrO,KAAKgrE,OAAOvmE,GAASinE,GAGvB,IAAI5+D,EAAY,mBAQhB,GAPIs+D,EAAYxmD,KAAM9X,GAAas+D,EAAYxmD,IAC3CymD,EAAYzmD,KAAM9X,GAAau+D,EAAYzmD,IAC3C5kB,KAAKirB,aAAarG,KAAM9X,GAAa9M,KAAKirB,aAAarG,GAAK9X,WAC5D4+D,EAAKr9D,QAAQvB,WAAaA,IAAW4+D,EAAKr9D,QAAQvB,UAAYA,IAC9DiC,EAASgS,EAAQ4wC,aAAa/sC,GAAO+R,EAAO3J,WAAa,OAC/C0+C,EAAKr9D,QAAQR,MAAMkB,SAAQ28D,EAAKr9D,QAAQR,MAAMkB,OAASA,GAEjE6pB,EAAa,CACf,IAAIvX,EAAIuX,EAAYhU,GACX,MAALvD,IAAWA,EAAIuX,EAAYhU,GAAO7D,EAAQikC,cAAcpgC,IAG9D,GAAIvD,EAAG,CACAqqD,EAAKE,aACRF,EAAKE,WAAarvD,EAAI3R,cAAc,QACpC8gE,EAAKr9D,QAAQP,YAAY49D,EAAKE,aAG5B9+D,EAAY,uBAAyBuU,EAChC,SAALA,GAAgBuD,GAAO2oC,GAAa3oC,EAAM4T,EAAKhV,IAAIoB,IAAK9X,GAAa,cAAmBA,GAAa,YACrG4+D,EAAKE,WAAW9+D,WAAaA,IAAW4+D,EAAKE,WAAW9+D,UAAYA,GACxE,IAAIiC,EAAS4nB,EAAO3J,WAAa,KAC7B0+C,EAAKE,WAAW/9D,MAAMkB,QAAUA,IAAQ28D,EAAKE,WAAW/9D,MAAMkB,OAASA,QAEvE28D,EAAKE,aACPF,EAAKr9D,QAAQoB,YAAYi8D,EAAKE,YAC9BF,EAAKE,WAAa,MAItB,IAAI7uD,EAAOwuD,EAAiBC,EAAiBA,EAAeK,QAAQ9qD,EAAS6D,GAAOA,EAAMwuC,EACtFr2C,IAAS2uD,EAAKC,SAAS7xD,OAAM4xD,EAAKC,SAAS7xD,KAAOiD,GACtD6H,IAGF5kB,KAAKqO,QAAQR,MAAMkB,OAAS4nB,EAAOm1C,UAAY,MAC3C9rE,KAAK+rE,aAAehrD,EAAQ+e,gBAAcyrC,EAAiBxqD,EAAQmK,YAAckoC,GACrF,IAAI0X,EAAcU,EAAiBA,EAAe9hD,SAAS3I,EAASwqD,EAAgB50C,GAAU40C,EAAe/pE,WAAWjB,OAASo2B,EAAOzJ,eACpI8+C,EAAUhsE,KAAKisE,UAAYjsE,KAAKksE,mBACpCpB,GAAekB,EAAQ78D,KAAO68D,EAAQzoD,SAElBvjB,KAAK8qE,aAAgBve,MAAMue,KAC7C9qE,KAAK8qE,YAAcA,EACnB9qE,KAAKqO,QAAQR,MAAMgB,MAAQhI,KAAKslE,KAAKnsE,KAAK8qE,aAAe,KAEzD9qE,KAAKkiB,MAAM,oBAAqB4oD,KAIpC9qE,KAAK+rE,aAAc,EACnB/rE,KAAKosE,kBAAmB,EACxBpsE,KAAKyrE,UAAY,GAEjBzrE,KAAKqsE,mBAAqB,SAAU/iD,GAClCtpB,KAAKyrE,WAAaniD,GAAQ,CACxBI,SAAU,WACR,MAAO,IAETmiD,QAAS,WACP,MAAO,MAKb7rE,KAAKssE,mBAAqB,WACxB,OAAOtsE,KAAKosE,kBAGdpsE,KAAK6qE,kBAAmB,EAExB7qE,KAAKijE,mBAAqB,SAAU35C,GAC9BA,EAAM/M,EAAIxP,YAAY/M,KAAKqO,QAAS,uBAA4BkO,EAAIvP,eAAehN,KAAKqO,QAAS,uBACrGrO,KAAK6qE,iBAAmBvhD,EACxBtpB,KAAKisE,SAAW,MAGlBjsE,KAAKkjE,mBAAqB,WACxB,OAAOljE,KAAK6qE,kBAGd7qE,KAAKksE,gBAAkB,WACrB,IAAKlsE,KAAKqO,QAAQ+O,WAAY,MAAO,CACnCjO,KAAM,EACNoU,MAAO,GAET,IAAI1V,EAAQ0O,EAAIhO,cAAcvO,KAAKqO,QAAQ+O,YAI3C,OAHApd,KAAKisE,SAAW,GAChBjsE,KAAKisE,SAAS98D,KAAOb,SAAST,EAAM0+D,aAAe,GAAK,EACxDvsE,KAAKisE,SAAS1oD,MAAQjV,SAAST,EAAM2+D,eAAiB,EAC/CxsE,KAAKisE,UAGdjsE,KAAK2qB,UAAY,SAAUmwB,GACzB,IAAIkxB,EAAUhsE,KAAKisE,UAAYjsE,KAAKksE,kBAChC5pD,EAAOtiB,KAAKqO,QAAQmU,wBACxB,OAAIs4B,EAAM73C,EAAI+oE,EAAQ78D,KAAOmT,EAAKnT,KAAa,UAC3CnP,KAAK6qE,kBAAoB/vB,EAAM73C,EAAIqf,EAAKiB,MAAQyoD,EAAQzoD,MAAc,mBAA1E,KAED9hB,KAAKkpE,EAAOppE,WACfoB,EAAQgoE,OAASA,KAEnB3nE,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,YAAa,gBAAgB,SAAU4B,EAAUa,EAASxC,GACxH,aAEA,IAAI+hC,EAAQpgC,EAAS,YAAYogC,MAC7B3lB,EAAMza,EAAS,cAEf2qE,EAAS,SAAgB7B,GAC3B5qE,KAAKqO,QAAUkO,EAAI3R,cAAc,OACjC5K,KAAKqO,QAAQvB,UAAY,6BACzB89D,EAAS98D,YAAY9N,KAAKqO,WAG5B,WACErO,KAAKisE,SAAW,EAEhBjsE,KAAK0sE,WAAa,SAAUV,GAC1BhsE,KAAKisE,SAAWD,GAGlBhsE,KAAK+6D,WAAa,SAAUh6C,GAC1B/gB,KAAK+gB,QAAUA,GAGjB/gB,KAAK2sE,WAAa,SAAUjiB,GAC1B1qD,KAAK0qD,QAAUA,GAGjB1qD,KAAKu/C,OAAS,SAAU5oB,GACtB,GAAKA,EAAL,CACA32B,KAAK22B,OAASA,EACd,IAAIxN,EAAO,GAEX,IAAK,IAAI3d,KAAOxL,KAAK0qD,QAAS,CAC5B,IAAIH,EAASvqD,KAAK0qD,QAAQl/C,GAE1B,GAAK++C,EAAOtpC,MAAZ,CAKA,IAAIA,EAAQspC,EAAOtpC,MAAMqiB,SAAS3M,EAAO4M,SAAU5M,EAAO6M,SAC1D,IAAIviB,EAAM5C,UAGV,GAFA4C,EAAQA,EAAM4iB,cAAc7jC,KAAK+gB,SAE7BwpC,EAAO/oC,SAAU,CACnB,IAAIiB,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpCxnB,EAAOnP,KAAKisE,UAAYjsE,KAAK+gB,QAAQqoB,aAAatK,UAAU7d,EAAMxa,MAAMme,KAAO5kB,KAAK+gB,QAAQqoB,aAAanI,WAAWhgB,EAAMxa,MAAMqe,QAAU7D,EAAMxa,MAAMqe,OAAS6R,EAAOzJ,gBAC1Kq9B,EAAO/oC,SAAS2H,EAAMlI,EAAO9R,EAAMsT,EAAKkU,OAChB,YAAf4zB,EAAOz1C,KAChB9U,KAAK6sE,mBAAmB1jD,EAAMlI,EAAOspC,EAAOpL,MAAOxoB,GAC3B,cAAf4zB,EAAOz1C,KAChB9U,KAAK8sE,qBAAqB3jD,EAAMlI,EAAOspC,EAAOpL,MAAOxoB,GAC5C1V,EAAM0G,cACI,QAAf4iC,EAAOz1C,KAAgB9U,KAAK+sE,eAAe5jD,EAAMlI,EAAOspC,EAAOpL,MAAOxoB,GAAa32B,KAAKgtE,oBAAoB7jD,EAAMlI,EAAOspC,EAAOpL,MAAOxoB,GAEvI32B,KAAK+gB,QAAQqoB,aAAatK,UAAU7d,EAAMxa,MAAMme,KAClD5kB,KAAKitE,yBAAyB9jD,EAAMlI,EAAOspC,EAAOpL,MAAPoL,sBAA2C5zB,GAEtF32B,KAAKy/C,qBAAqBt2B,EAAMlI,EAAOspC,EAAOpL,MAAPoL,sBAA2C5zB,QAtBpF4zB,EAAOhL,OAAOp2B,EAAMnpB,KAAMA,KAAK+gB,QAAS4V,GA2B5C32B,KAAKqO,QAAQgC,UAAY8Y,EAAK3mB,KAAK,MAGrCxC,KAAK4sE,QAAU,SAAUhoD,EAAKqI,GAC5B,OAAQrI,EAAMqI,EAAYigD,gBAAkBjgD,EAAYD,YAO1DhtB,KAAK+sE,eAAiB,SAAUI,EAAelsD,EAAOk+B,EAAOlyB,EAAamgD,GAWxE,IAVA,IAAIrsD,EAAU/gB,KAAK+gB,QACfta,EAAQwa,EAAMxa,MAAMme,IACpBpB,EAAMvC,EAAMuC,IAAIoB,IAChBA,EAAMne,EACNo1D,EAAO,EACPwR,EAAO,EACPxgC,EAAO9rB,EAAQ+wC,uBAAuBltC,GACtC0oD,EAAgB,KAChBC,EAAY,IAAIrrC,EAAMtd,EAAK3D,EAAMxa,MAAMqe,OAAQF,EAAKyoD,GAEjDzoD,GAAOpB,EAAKoB,IACjB2oD,EAAU9mE,MAAMme,IAAM2oD,EAAU/pD,IAAIoB,IAAMA,EAC1C2oD,EAAU9mE,MAAMqe,OAASF,GAAOne,EAAQwa,EAAMxa,MAAMqe,OAAS/D,EAAQ8wC,iBAAiBjtC,GACtF2oD,EAAU/pD,IAAIsB,OAAS+nB,EACvBgvB,EAAOwR,EACPA,EAAOxgC,EACPA,EAAOjoB,EAAM,EAAIpB,EAAMzC,EAAQ+wC,uBAAuBltC,EAAM,GAAKA,GAAOpB,EAAM,EAAIvC,EAAMuC,IAAIsB,OAC5FwoD,EAAgBnuB,GAASv6B,GAAOne,EAAQ,aAAe,IAAM,YAA2Bme,GAAOne,GAASme,GAAOne,EAAQ,GAAKwa,EAAMxa,MAAMqe,OArB7H,EAAI,IAqBiI+2C,EAAOwR,EArB7H,EAAI,IAqB+HA,EAAOxgC,EArB3H,EAAI,IAqB6HjoB,GAAOpB,EArBzH,EAAI,IAuBxDxjB,KAAK+gB,QAAQqoB,aAAatK,UAAUla,GACtC5kB,KAAKitE,yBAAyBE,EAAeI,EAAWD,EAAergD,EAAarI,GAAOpB,EAAM,EAAI,EAAG4pD,GAExGptE,KAAKy/C,qBAAqB0tB,EAAeI,EAAWD,EAAergD,EAAarI,GAAOpB,EAAM,EAAI,EAAG4pD,IAK1GptE,KAAKgtE,oBAAsB,SAAUG,EAAelsD,EAAOk+B,EAAOxoB,EAAQy2C,GACxE,IACIr+D,EAAQ0T,EAAKtT,EADb68D,EAAUhsE,KAAKisE,UAEnBmB,EAAaA,GAAc,GAEvBptE,KAAK+gB,QAAQqoB,aAAatK,UAAU7d,EAAMxa,MAAMme,QAC9C4oD,EAASvsD,EAAM0iB,SACZngB,IAAIoB,IAAM4oD,EAAO/mE,MAAMme,IAC9B4oD,EAAOhqD,IAAIsB,OAAS9kB,KAAK+gB,QAAQiY,QAAQw0C,EAAO/mE,MAAMme,KAAKrkB,OAC3DP,KAAKitE,yBAAyBE,EAAeK,EAAQruB,EAAQ,qBAAsBxoB,EAAQ,KAAMy2C,KAEjGr+D,EAAS4nB,EAAO3J,WAChBvK,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpCxnB,EAAO68D,EAAU/qD,EAAMxa,MAAMqe,OAAS6R,EAAOzJ,eAC7CigD,EAAcprE,KAAK,eAAgBo9C,EAAO,8BAA+B,UAAWpwC,EAAQ,MAAO,WAAY,OAAQ0T,EAAK,MAAO,QAAStT,EAAM,MAAOi+D,EAAY,aAGvK,GAAIptE,KAAK+gB,QAAQqoB,aAAatK,UAAU7d,EAAMuC,IAAIoB,KAAM,CACtD,IAAI4oD,GAAAA,EAASvsD,EAAM0iB,SACZl9B,MAAMme,IAAM4oD,EAAOhqD,IAAIoB,IAC9B4oD,EAAO/mE,MAAMqe,OAAS,EACtB9kB,KAAKitE,yBAAyBE,EAAeK,EAAQruB,EAAQ,YAAaxoB,EAAQ,KAAMy2C,OACnF,CACL,IAAIv+D,EAAQoS,EAAMuC,IAAIsB,OAAS6R,EAAOzJ,eACtCne,EAAS4nB,EAAO3J,WAChBvK,EAAMziB,KAAK4sE,QAAQ3rD,EAAMuC,IAAIoB,IAAK+R,GAClCw2C,EAAcprE,KAAK,eAAgBo9C,EAAO,qBAAsB,UAAWpwC,EAAQ,MAAO,SAAUF,EAAO,MAAO,OAAQ4T,EAAK,MAAO,QAASupD,EAAS,MAAOoB,EAAY,YAI7K,MADAr+D,GAAUkS,EAAMuC,IAAIoB,IAAM3D,EAAMxa,MAAMme,IAAM,GAAK+R,EAAO3J,aAC1C,GAAd,CACAvK,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAM,EAAG+R,GACxC,IAAI82C,GAAexsD,EAAMxa,MAAMqe,OAAS,EAAI,IAAM7D,EAAMuC,IAAIsB,OAAS,EAAI,GACzEqoD,EAAcprE,KAAK,eAAgBo9C,EAAOsuB,EAAc,UAAYA,EAAc,GAAI,YAAa,UAAW1+D,EAAQ,MAAO,WAAY,OAAQ0T,EAAK,MAAO,QAASupD,EAAS,MAAOoB,EAAY,cAGpMptE,KAAKy/C,qBAAuB,SAAU0tB,EAAelsD,EAAOk+B,EAAOxoB,EAAQ+2C,EAAaN,GACtF,IAAIr+D,EAAS4nB,EAAO3J,WAChBne,GAASoS,EAAMuC,IAAIsB,QAAU4oD,GAAe,GAAKzsD,EAAMxa,MAAMqe,QAAU6R,EAAOzJ,eAC9EzK,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpCxnB,EAAOnP,KAAKisE,SAAWhrD,EAAMxa,MAAMqe,OAAS6R,EAAOzJ,eACvDigD,EAAcprE,KAAK,eAAgBo9C,EAAO,YAAa,UAAWpwC,EAAQ,MAAO,SAAUF,EAAO,MAAO,OAAQ4T,EAAK,MAAO,QAAStT,EAAM,MAAOi+D,GAAc,GAAI,aAGvKptE,KAAKitE,yBAA2B,SAAUE,EAAelsD,EAAOk+B,EAAOxoB,EAAQ+2C,EAAaN,GAC1F,IAAIr+D,EAAS4nB,EAAO3J,WAChBvK,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpCq1C,EAAUhsE,KAAKisE,SACFjsE,KAAK+gB,QAAQqoB,aAAahI,cAAcngB,EAAMxa,MAAMqe,OAAQ7D,EAAMuC,IAAIsB,QAC5Ehd,SAAQ,SAAU6W,GAC3BwuD,EAAcprE,KAAK,eAAgBo9C,EAAO,YAAa,UAAWpwC,EAAQ,MAAO,SAAU4P,EAAU9P,OAAS6+D,GAAe,GAAI,MAAO,OAAQjrD,EAAK,MAAO,QAASupD,EAAUrtD,EAAUxP,KAAM,MAAOi+D,GAAc,GAAI,gBAI5NptE,KAAK6sE,mBAAqB,SAAUM,EAAelsD,EAAOk+B,EAAOxoB,EAAQy2C,GACvE,IAAI3qD,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpC5nB,EAAS4nB,EAAO3J,WAChB/L,EAAMxa,MAAMme,KAAO3D,EAAMuC,IAAIoB,MAAK7V,GAAU/O,KAAK4sE,QAAQ3rD,EAAMuC,IAAIoB,IAAK+R,GAAUlU,GACtF0qD,EAAcprE,KAAK,eAAgBo9C,EAAO,YAAa,UAAWpwC,EAAQ,MAAO,OAAQ0T,EAAK,MAAO,kBAAmB2qD,GAAc,GAAI,aAG5IptE,KAAK8sE,qBAAuB,SAAUK,EAAelsD,EAAOk+B,EAAOxoB,EAAQy2C,GACzE,IAAI3qD,EAAMziB,KAAK4sE,QAAQ3rD,EAAMxa,MAAMme,IAAK+R,GACpC5nB,EAAS4nB,EAAO3J,WACpBmgD,EAAcprE,KAAK,eAAgBo9C,EAAO,YAAa,UAAWpwC,EAAQ,MAAO,OAAQ0T,EAAK,MAAO,kBAAmB2qD,GAAc,GAAI,eAE3I3rE,KAAKgrE,EAAOlrE,WACfoB,EAAQ8pE,OAASA,KAEnBzpE,IAAI9C,OAAO,iBAAkB,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,eAAgB,oBAAqB,0BAA0B,SAAU4B,EAAUa,EAASxC,GACtL,aAEA,IAAIoR,EAAMzP,EAAS,cACfya,EAAMza,EAAS,cACf0a,EAAO1a,EAAS,eAEhB4vB,GADY5vB,EAAS,oBACNA,EAAS,wBAAwB4vB,cAEhDi8C,EAAO,SAAc/C,GACvB5qE,KAAKqO,QAAUkO,EAAI3R,cAAc,OACjC5K,KAAKqO,QAAQvB,UAAY,2BACzB89D,EAAS98D,YAAY9N,KAAKqO,SAC1BrO,KAAK4tE,eAAiB5tE,KAAK4tE,eAAe9oE,KAAK9E,QAGjD,WACEuR,EAAIF,UAAUrR,KAAM0xB,GACpB1xB,KAAK6tE,SAAW,IAChB7tE,KAAK8tE,YAAc,IACnB9tE,KAAK+tE,cAAgB,IACrB/tE,KAAKguE,SAAWhuE,KAAK8tE,YACrB9tE,KAAKiuE,SAAW,IAEhBjuE,KAAKkuE,WAAa,IAClBluE,KAAKisE,SAAW,EAEhBjsE,KAAK4tE,eAAiB,WACpB,IAAII,EAAqD,MAA1ChuE,KAAK+gB,QAAQzU,IAAIwvC,sBAAgC97C,KAAK8tE,YAAc9tE,KAAK+tE,cAExF,GAAI/tE,KAAKguE,UAAYA,EAEnB,OADAhuE,KAAKguE,SAAWA,GACT,GAIXhuE,KAAK0sE,WAAa,SAAUV,GAC1BhsE,KAAKisE,SAAWD,EAChBhsE,KAAKqO,QAAQR,MAAMm+D,QAAU,KAAOA,EAAU,MAGhDhsE,KAAKmuE,cAAgB,WACnB,OAAOnuE,KAAKouE,aAAa3tC,eAAe1xB,QAAU,GAGpD/O,KAAKizD,kBAAoB,WACvB,OAAOjzD,KAAKouE,aAAa3tC,eAAe5xB,OAAS,GAGnD7O,KAAK8yD,gBAAkB,SAAUub,GAC/BruE,KAAKouE,aAAeC,EACpBruE,KAAKouE,aAAavsD,GAAG,sBAAuB,SAAUrM,GACpDxV,KAAKyqB,QAAQ,sBAAuBjV,IACpC1Q,KAAK9E,OACPA,KAAKsuE,oBAGPtuE,KAAKuuE,oBAAsB,WACzBvuE,KAAKouE,aAAaG,uBAGpBvuE,KAAKsuE,iBAAmB,WACtB,OAAOtuE,KAAKwuE,sBAAwBxuE,KAAKouE,aAAaE,oBAGxDtuE,KAAK+6D,WAAa,SAAUh6C,GAC1B/gB,KAAK+gB,QAAUA,EACXA,GAAS/gB,KAAKyuE,qBAGpBzuE,KAAKu+B,gBAAiB,EAEtBv+B,KAAK6gC,kBAAoB,SAAUtC,GACjC,OAAIv+B,KAAKu+B,gBAAkBA,IAC3Bv+B,KAAKu+B,eAAiBA,EACtBv+B,KAAKyuE,qBACE,IAGTzuE,KAAK2oE,qBAAsB,EAE3B3oE,KAAKuiE,uBAAyB,SAAUvzD,GACtC,OAAIhP,KAAK2oE,qBAAuB35D,IAChChP,KAAK2oE,oBAAsB35D,EAC3BhP,KAAKyuE,qBACE,IAGTzuE,KAAK0uE,YAAc,GAEnB1uE,KAAKu9D,gBAAkBv9D,KAAKyuE,kBAAoB,WAC9C,IAAIjnC,EAAUxnC,KAAK+gB,QAAQ2mB,aAC3B1nC,KAAKwnC,QAAUA,EAGf,IAFA,IAAImnC,EAAS3uE,KAAK0uE,YAAc,CAAC,GAExB/sE,EAAI,EAAGA,EAAI6lC,EAAU,EAAG7lC,IAC3B3B,KAAKu+B,eACPowC,EAAO5sE,KAAK,iDAAmDya,EAAK/B,aAAaza,KAAKiuE,SAAUtsE,GAAK,WAErGgtE,EAAO5sE,KAAKya,EAAK/B,aAAa,IAAK9Y,IAIvC,GAAI3B,KAAK2oE,oBAAqB,CAC5B3oE,KAAK4uE,eAAiB,mBACtB,IAAI9hE,EAAY,mBACZ+hE,EAAa,GACbC,EAAW,GAEf,GAAI9uE,KAAKu+B,eAAgB,CACvBzxB,GAAa,iBACb+hE,EAAa,uBACbC,EAAW,qBACX,IAAIC,EAAevyD,EAAK/B,aAAaza,KAAKkuE,WAAYluE,KAAKwnC,SACvDwnC,EAAaxyD,EAAK/B,aAAaza,KAAKiuE,SAAUjuE,KAAKwnC,cAGnDwnC,EADAD,EAAevyD,EAAK/B,aAAa,IAAKza,KAAKwnC,SAIjDxnC,KAAK0uE,YAAY,KAAO,gBAAkB5hE,EAAY+hE,EAAa,KAAOE,EAAe,UACzF/uE,KAAK0uE,YAAY,MAAQ,gBAAkB5hE,EAAYgiE,EAAW,KAAOE,EAAa,YAI1FhvE,KAAK6/D,YAAc,SAAUlpC,EAAQ4M,EAAUC,GACzCxjC,KAAK22B,OAAO6M,SAAW7M,EAAO6M,SAAWxjC,KAAK22B,OAAO4M,UAAY5M,EAAO4M,UAC1EvjC,KAAKivE,YAAYt4C,GAGnB32B,KAAK22B,OAASA,EAMd,IALA,IAAImoB,EAAQj4C,KAAKC,IAAIy8B,EAAU5M,EAAO4M,UAClClpB,EAAOxT,KAAKM,IAAIq8B,EAAS7M,EAAO6M,SAChC0rC,EAAelvE,KAAKqO,QAAQ8gE,WAC5BC,EAAkB,EAEbxqD,EAAM+R,EAAO4M,SAAU3e,EAAMk6B,EAAOl6B,IAAO,CAGlD,GAFIuiB,EAAWnnC,KAAK+gB,QAAQqmB,YAAYxiB,GAE1B,CACZ,GAAIuiB,EAAS+Y,YAAYpB,GAAQ,CAC/BA,EAAQ3X,EAAS1gC,MAAMme,IACvB,MAEAA,EAAMuiB,EAAS3jB,IAAIoB,IAIvBwqD,IAGExqD,EAAMk6B,EAIV,IAJA,IACI3X,EACAomB,GADApmB,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,IACjBuiB,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAG1CtyB,EAAM2oC,IACR3oC,EAAMuiB,EAAS3jB,IAAIoB,IAAM,EAEzB2oC,GADApmB,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,EAAKuiB,IACtBA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,KAG1CtyB,EAAMvK,IAPC,CAQX,IAAIg1D,EAAcH,EAAaE,KAE/B,GAAIC,EAAa,CACf,IAAIlmD,EAAO,GACXnpB,KAAKsvE,YAAYnmD,EAAMvE,GAAM5kB,KAAKuvE,iBAAkB3qD,GAAO2oC,GAAYpmB,GACvEkoC,EAAYxhE,MAAMkB,OAAS4nB,EAAO3J,WAAahtB,KAAK+gB,QAAQ4wC,aAAa/sC,GAAO,KAChFyqD,EAAYh/D,UAAY8Y,EAAK3mB,KAAK,IAGpCoiB,MAIJ5kB,KAAKivE,YAAc,SAAUt4C,GAC3B,IAAI64C,EAAYxvE,KAAK22B,OAErB,GADA32B,KAAK22B,OAASA,GACT64C,GAAaA,EAAUhsC,QAAU7M,EAAO4M,SAAU,OAAOvjC,KAAKu/C,OAAO5oB,GAC1E,GAAIA,EAAO6M,QAAUgsC,EAAUjsC,SAAU,OAAOvjC,KAAKu/C,OAAO5oB,GAC5D,IAAI9pB,EAAK7M,KAAKqO,QACd,GAAImhE,EAAUjsC,SAAW5M,EAAO4M,SAAU,IAAK,IAAI3e,EAAM5kB,KAAK+gB,QAAQkiC,kBAAkBusB,EAAUjsC,SAAU5M,EAAO4M,SAAW,GAAI3e,EAAM,EAAGA,IACzI/X,EAAG4C,YAAY5C,EAAGuQ,YAEpB,GAAIoyD,EAAUhsC,QAAU7M,EAAO6M,QAAS,IAAS5e,EAAM5kB,KAAK+gB,QAAQkiC,kBAAkBtsB,EAAO6M,QAAU,EAAGgsC,EAAUhsC,SAAU5e,EAAM,EAAGA,IACrI/X,EAAG4C,YAAY5C,EAAG4iE,WAGpB,GAAI94C,EAAO4M,SAAWisC,EAAUjsC,SAAU,CACxC,IAAImsC,EAAW1vE,KAAK2vE,qBAAqBh5C,EAAQA,EAAO4M,SAAUisC,EAAUjsC,SAAW,GACnF12B,EAAGuQ,WAAYvQ,EAAGsQ,aAAauyD,EAAU7iE,EAAGuQ,YAAiBvQ,EAAGiB,YAAY4hE,GAGlF,GAAI/4C,EAAO6M,QAAUgsC,EAAUhsC,QAAS,CAClCksC,EAAW1vE,KAAK2vE,qBAAqBh5C,EAAQ64C,EAAUhsC,QAAU,EAAG7M,EAAO6M,SAC/E32B,EAAGiB,YAAY4hE,KAInB1vE,KAAK2vE,qBAAuB,SAAUh5C,EAAQ4M,EAAUC,GAMtD,IALA,IAAIksC,EAAW1vE,KAAKqO,QAAQ8mB,cAAcy6C,yBACtChrD,EAAM2e,EACN4D,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,GACxC2oC,EAAYpmB,EAAWA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAG1CtyB,EAAM2oC,IACR3oC,EAAMuiB,EAAS3jB,IAAIoB,IAAM,EAEzB2oC,GADApmB,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,EAAKuiB,IACtBA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,KAG1CtyB,EAAM4e,IAPC,CAQX,IAAIjhB,EAAYhG,EAAI3R,cAAc,OAC9Bue,EAAO,GAIX,GAHAnpB,KAAKsvE,YAAYnmD,EAAMvE,GAAK,EAAOA,GAAO2oC,GAAYpmB,GACtD5kB,EAAUlS,UAAY8Y,EAAK3mB,KAAK,IAE5BxC,KAAKuvE,iBACPhtD,EAAUzV,UAAY,iBACtB4iE,EAAS5hE,YAAYyU,GACrBA,EAAU1U,MAAMkB,OAAS4nB,EAAO3J,WAAahtB,KAAK+gB,QAAQ4wC,aAAa/sC,GAAO,UAE9E,KAAOrC,EAAUnF,YACfsyD,EAAS5hE,YAAYyU,EAAUnF,YAInCwH,IAGF,OAAO8qD,GAGT1vE,KAAKu/C,OAAS,SAAU5oB,GACtB32B,KAAK22B,OAASA,EAQd,IAPA,IAAIxN,EAAO,GACPoa,EAAW5M,EAAO4M,SAClBC,EAAU7M,EAAO6M,QACjB5e,EAAM2e,EACN4D,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,GACxC2oC,EAAYpmB,EAAWA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,EAG1CtyB,EAAM2oC,IACR3oC,EAAMuiB,EAAS3jB,IAAIoB,IAAM,EAEzB2oC,GADApmB,EAAWnnC,KAAK+gB,QAAQiiC,gBAAgBp+B,EAAKuiB,IACtBA,EAAS1gC,MAAMme,IAAMsyB,EAAAA,KAG1CtyB,EAAM4e,IACNxjC,KAAKuvE,kBAAkBpmD,EAAKpnB,KAAK,6CAA8C40B,EAAO3J,WAAahtB,KAAK+gB,QAAQ4wC,aAAa/sC,GAAM,QACvI5kB,KAAKsvE,YAAYnmD,EAAMvE,GAAK,EAAOA,GAAO2oC,GAAYpmB,GAClDnnC,KAAKuvE,kBAAkBpmD,EAAKpnB,KAAK,UAErC6iB,IAGF5kB,KAAKqO,QAAQgC,UAAY8Y,EAAK3mB,KAAK,KAGrCxC,KAAK6vE,WAAa,CAChB,MAAQ,EACR,QAAU,EACV,QAAU,GAGZ7vE,KAAK8vE,aAAe,SAAU3C,EAAezb,EAAcrmB,EAAO/iC,GAChE,IAAIJ,EAAOlI,KA6BP+vE,EAASznE,EAAM5F,QA5BF,yjBAEC,SAAqB2e,EAAG/a,EAAG25C,EAAG+vB,EAAQC,GACtD,GAAI3pE,EACF,OAAO4B,EAAKq2B,eAAiB,mDAAqD/hB,EAAK/B,aAAavS,EAAKgmE,WAAY7sD,EAAE9gB,QAAU,UAAY8gB,EACxI,GAAS,KAALA,EACT,MAAO,QACF,GAAS,KAALA,EACT,MAAO,QACF,GAAS,KAALA,EACT,MAAO,QACF,GAAS,MAALA,EAAW,CACpB,IAAImmB,EAAUt/B,EAAK6Y,QAAQqf,iBAAiBsxB,EAAese,GAE3D,OADAte,GAAgBlqB,EAAU,EACnBt/B,EAAKwmE,YAAYlnC,GACnB,GAAS,KAALnmB,EAAe,CACxB,IAAI6uD,EAAahoE,EAAKq2B,eAAiB,4CAA8C,UACjF4xC,EAAQjoE,EAAKq2B,eAAiBr2B,EAAKgmE,WAAa,GAEpD,OADAxc,GAAgB,EACT,gBAAkBwe,EAAa,kBAAiD,EAA7BhoE,EAAKyuB,OAAOzJ,eAAqB,OAASijD,EAAQ,UACvG,OAAIlwB,EACF,+DAAiE/3C,EAAKgmE,WAAa,WAE1Fxc,GAAgB,EACT,sCAAqE,EAA7BxpD,EAAKyuB,OAAOzJ,eAAqB,OAAS7L,EAAI,cAMjG,GAAKrhB,KAAK6vE,WAAWxkC,EAAMv2B,MAMzBq4D,EAAcprE,KAAKguE,OANa,CAChC,IAAI9iE,EAAU,OAASo+B,EAAMv2B,KAAKpS,QAAQ,MAAO,SAC7CmL,EAAQ,GACM,QAAdw9B,EAAMv2B,OAAgBjH,EAAQ,iBAAmBw9B,EAAM/iC,MAAM/H,OAASP,KAAK22B,OAAOzJ,eAAiB,SACvGigD,EAAcprE,KAAK,gBAAiBkL,EAAS,IAAKY,EAAO,IAAKkiE,EAAQ,WAKxE,OAAOre,EAAeppD,EAAM/H,QAG9BP,KAAKowE,kBAAoB,SAAUjD,EAAe7kE,EAAOxB,GACvD,IAAIupE,EAAO/nE,EAAM8/B,OAAOpoC,KAAK4uE,gBAC7B,OAAIyB,GAAQ,GAAKA,GAAQvpE,EAAYwB,EAErB,KAAZA,EAAM,IACR+nE,GAAQA,EAAOrwE,KAAKwnC,QACpB2lC,EAAcprE,KAAKya,EAAK/B,aAAaza,KAAK0uE,YAAY,KAAM2B,EAAOrwE,KAAKwnC,UACjEl/B,EAAM4W,OAAOmxD,IACC,MAAZ/nE,EAAM,IACf6kE,EAAcprE,KAAKya,EAAK/B,aAAaza,KAAK0uE,YAAY,MAAO2B,IACtD/nE,EAAM4W,OAAOmxD,IAGf/nE,GAGTtI,KAAKswE,mBAAqB,SAAUnD,EAAelhC,EAAQlM,EAAQwwC,GAMjE,IALA,IAAI30C,EAAQ,EACRv5B,EAAQ,EACRmuE,EAAazwC,EAAO,GACpB2xB,EAAe,EAEV/vD,EAAI,EAAGA,EAAIsqC,EAAO1rC,OAAQoB,IAAK,CACtC,IAAI0pC,EAAQY,EAAOtqC,GACf2G,EAAQ+iC,EAAM/iC,MAElB,GAAS,GAAL3G,GAAU3B,KAAK2oE,oBAAqB,CAGtC,GAFA/sC,EAAQtzB,EAAM/H,SACd+H,EAAQtI,KAAKowE,kBAAkBjD,EAAe7kE,EAAOkoE,IACzC,SACZ50C,GAAStzB,EAAM/H,OAGjB,GAAIq7B,EAAQtzB,EAAM/H,OAASiwE,EACzB9e,EAAe1xD,KAAK8vE,aAAa3C,EAAezb,EAAcrmB,EAAO/iC,GACrEszB,GAAStzB,EAAM/H,WACV,CACL,KAAOq7B,EAAQtzB,EAAM/H,QAAUiwE,GAC7B9e,EAAe1xD,KAAK8vE,aAAa3C,EAAezb,EAAcrmB,EAAO/iC,EAAM8W,UAAU,EAAGoxD,EAAa50C,IACrGtzB,EAAQA,EAAM8W,UAAUoxD,EAAa50C,GACrCA,EAAQ40C,EAEHD,GACHpD,EAAcprE,KAAK,SAAU,uCAAwC/B,KAAK22B,OAAO3J,WAAY,QAG/FmgD,EAAcprE,KAAKya,EAAK/B,aAAa,IAAQslB,EAAOE,SAEpDyxB,EAAe,EACf8e,EAAazwC,IAFb19B,IAE8B2sD,OAAOC,UAGnB,GAAhB3mD,EAAM/H,SACRq7B,GAAStzB,EAAM/H,OACfmxD,EAAe1xD,KAAK8vE,aAAa3C,EAAezb,EAAcrmB,EAAO/iC,OAM7EtI,KAAKywE,kBAAoB,SAAUtD,EAAelhC,GAChD,IAAIylB,EAAe,EACfrmB,EAAQY,EAAO,GACf3jC,EAAQ+iC,EAAM/iC,MACdtI,KAAK2oE,sBAAqBrgE,EAAQtI,KAAKowE,kBAAkBjD,EAAe7kE,IACxEA,IAAOopD,EAAe1xD,KAAK8vE,aAAa3C,EAAezb,EAAcrmB,EAAO/iC,IAEhF,IAAK,IAAI3G,EAAI,EAAGA,EAAIsqC,EAAO1rC,OAAQoB,IAEjC2G,GADA+iC,EAAQY,EAAOtqC,IACD2G,MACdopD,EAAe1xD,KAAK8vE,aAAa3C,EAAezb,EAAcrmB,EAAO/iC,IAIzEtI,KAAKsvE,YAAc,SAAUnC,EAAevoD,EAAK2rD,EAAcppC,GAE7D,GADKA,GAAwB,GAAZA,IAAmBA,EAAWnnC,KAAK+gB,QAAQqmB,YAAYxiB,IACpEuiB,EAAU,IAAI8E,EAASjsC,KAAK0wE,mBAAmB9rD,EAAKuiB,QAAmB8E,EAASjsC,KAAK+gB,QAAQ4uB,UAAU/qB,GAM3G,GAJK2rD,GACHpD,EAAcprE,KAAK,uCAAwC/B,KAAK22B,OAAO3J,YAAchtB,KAAKuvE,iBAAmB,EAAIvvE,KAAK+gB,QAAQ4wC,aAAa/sC,IAAO,QAGhJqnB,EAAO1rC,OAAQ,CACjB,IAAIw/B,EAAS//B,KAAK+gB,QAAQmxC,gBAAgBttC,GACtCmb,GAAUA,EAAOx/B,OAAQP,KAAKswE,mBAAmBnD,EAAelhC,EAAQlM,EAAQwwC,GAAmBvwE,KAAKywE,kBAAkBtD,EAAelhC,GAG3IjsC,KAAKu+B,iBACH4I,IAAUviB,EAAMuiB,EAAS3jB,IAAIoB,KACjCuoD,EAAcprE,KAAK,iDAAkD6iB,GAAO5kB,KAAK+gB,QAAQmK,YAAc,EAAIlrB,KAAK6tE,SAAW7tE,KAAKguE,SAAU,YAGvIuC,GAAcpD,EAAcprE,KAAK,WAGxC/B,KAAK0wE,mBAAqB,SAAU9rD,EAAKuiB,GACvC,IAAIpmB,EAAU/gB,KAAK+gB,QACf4vD,EAAe,GAsCnB,IAAI1kC,EAASlrB,EAAQ4uB,UAAU/qB,GAY/B,OAXAuiB,EAASgZ,MAAK,SAAUG,EAAa17B,EAAKE,EAAQ0/B,EAAYnE,GACzC,MAAfC,EACFqwB,EAAa5uE,KAAK,CAChB+S,KAAM,OACNxM,MAAOg4C,KAGLD,IAAUpU,EAASlrB,EAAQ4uB,UAAU/qB,IACrCqnB,EAAO1rC,QA7Cf,SAAmB0rC,EAAQ9nC,EAAMy5C,GAI/B,IAHA,IAAImD,EAAM,EACN7f,EAAM,EAEHA,EAAM+K,EAAO8U,GAAKz4C,MAAM/H,OAAS4D,GAGtC,GAFA+8B,GAAO+K,EAAO8U,GAAKz4C,MAAM/H,SACzBwgD,GACW9U,EAAO1rC,OAAQ,OAc5B,IAXI2gC,GAAO/8B,KACLmE,EAAQ2jC,EAAO8U,GAAKz4C,MAAM8W,UAAUjb,EAAO+8B,IACrC3gC,OAASq9C,EAAKz5C,IAAMmE,EAAQA,EAAM8W,UAAU,EAAGw+B,EAAKz5C,IAC9DwsE,EAAa5uE,KAAK,CAChB+S,KAAMm3B,EAAO8U,GAAKjsC,KAClBxM,MAAOA,IAET44B,EAAM/8B,EAAOmE,EAAM/H,OACnBwgD,GAAO,GAGF7f,EAAM0c,GAAMmD,EAAM9U,EAAO1rC,QAAQ,CACtC,IAAI+H,GAAAA,EAAQ2jC,EAAO8U,GAAKz4C,OAEd/H,OAAS2gC,EAAM0c,EACvB+yB,EAAa5uE,KAAK,CAChB+S,KAAMm3B,EAAO8U,GAAKjsC,KAClBxM,MAAOA,EAAM8W,UAAU,EAAGw+B,EAAK1c,KAE5ByvC,EAAa5uE,KAAKkqC,EAAO8U,IAEhC7f,GAAO54B,EAAM/H,OACbwgD,GAAO,GAaY6vB,CAAU3kC,EAAQuY,EAAY1/B,MAElDqiB,EAAS3jB,IAAIoB,IAAK5kB,KAAK+gB,QAAQiY,QAAQmO,EAAS3jB,IAAIoB,KAAKrkB,QACrDowE,GAGT3wE,KAAKuvE,eAAiB,WACpB,OAAOvvE,KAAK+gB,QAAQ0uC,kBAGtBzvD,KAAK2pB,QAAU,WACbsE,cAAcjuB,KAAKwuE,uBACfxuE,KAAK6wE,cAAc7wE,KAAK6wE,aAAavgE,WAAWb,YAAYzP,KAAK6wE,qBAC9D7wE,KAAK6wE,gBAEbpvE,KAAKksE,EAAKpsE,WACboB,EAAQgrE,KAAOA,KAEjB3qE,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAU4B,EAAUa,EAASxC,GAC3G,aAEA,IACI2wE,EADAv0D,EAAMza,EAAS,cAGfivE,EAAS,SAAgBnG,GAC3B5qE,KAAKqO,QAAUkO,EAAI3R,cAAc,OACjC5K,KAAKqO,QAAQvB,UAAY,6BACzB89D,EAAS98D,YAAY9N,KAAKqO,cACZhN,IAAVyvE,IAAqBA,IAAU,YAAa9wE,KAAKqO,QAAQR,QAC7D7N,KAAKgxE,WAAY,EACjBhxE,KAAKynE,YAAa,EAClBznE,KAAKixE,cAAgB,IACrBjxE,KAAKkxE,gBAAiB,EACtBlxE,KAAKmxE,QAAU,GACfnxE,KAAK2kB,OAAS3kB,KAAKoxE,YACnB70D,EAAIxP,YAAY/M,KAAKqO,QAAS,sBAC9BrO,KAAKqxE,gBAAkBP,EAAQ9wE,KAAKsxE,kBAAoBtxE,KAAKuxE,gBAAgBzsE,KAAK9E,QAGpF,WACEA,KAAKsxE,kBAAoB,SAAU7wD,GAGjC,IAFA,IAAI0wD,EAAUnxE,KAAKmxE,QAEVxvE,EAAIwvE,EAAQ5wE,OAAQoB,KAC3BwvE,EAAQxvE,GAAGkM,MAAM2jE,WAAa/wD,EAAM,GAAK,UAI7CzgB,KAAKuxE,eAAiB,SAAU9wD,GAG9B,IAFA,IAAI0wD,EAAUnxE,KAAKmxE,QAEVxvE,EAAIwvE,EAAQ5wE,OAAQoB,KAC3BwvE,EAAQxvE,GAAGkM,MAAMqP,QAAUuD,EAAM,GAAK,KAI1CzgB,KAAKisE,SAAW,EAEhBjsE,KAAK0sE,WAAa,SAAUV,GAC1BhsE,KAAKisE,SAAWD,GAGlBhsE,KAAK+6D,WAAa,SAAUh6C,GAC1B/gB,KAAK+gB,QAAUA,GAGjB/gB,KAAKguB,YAAc,SAAUyjD,GACvBA,GAAYzxE,KAAKynE,aACnBznE,KAAKynE,WAAagK,EAClBzxE,KAAK0xE,iBAIT1xE,KAAK2xE,iBAAmB,SAAUV,GAC5BA,GAAiBjxE,KAAKixE,gBACxBjxE,KAAKixE,cAAgBA,EACrBjxE,KAAK0xE,iBAIT1xE,KAAKwnE,kBAAoB,SAAU0J,GAC7BA,GAAkBlxE,KAAKkxE,gBAAmBJ,IAC5C9wE,KAAKkxE,eAAiBA,EACtB30D,EAAIpP,YAAYnN,KAAKqO,QAAS,sBAAuB6iE,GACrDlxE,KAAKqxE,gBAAe,GACpBrxE,KAAKqxE,eAAiBrxE,KAAKuxE,eAAezsE,KAAK9E,MAC/CA,KAAK0xE,iBAIT1xE,KAAKoxE,UAAY,WACf,IAAIvkE,EAAK0P,EAAI3R,cAAc,OAI3B,OAHAiC,EAAGC,UAAY,aACf9M,KAAKqO,QAAQP,YAAYjB,GACzB7M,KAAKmxE,QAAQpvE,KAAK8K,GACXA,GAGT7M,KAAK4xE,aAAe,WAClB,GAAI5xE,KAAKmxE,QAAQ5wE,OAAS,EAAG,CAC3B,IAAIsM,EAAK7M,KAAKmxE,QAAQ3+C,MAEtB,OADA3lB,EAAGyD,WAAWb,YAAY5C,GACnBA,IAIX7M,KAAKy/D,WAAa,WAChBz/D,KAAKgxE,WAAY,EACjBz0D,EAAIxP,YAAY/M,KAAKqO,QAAS,sBAC9BrO,KAAK0xE,gBAGP1xE,KAAKu/D,WAAa,WAChBv/D,KAAKgxE,WAAY,EACjBz0D,EAAIvP,eAAehN,KAAKqO,QAAS,sBACjCrO,KAAK0xE,gBAGP1xE,KAAK0xE,aAAe,WAClB,IAAInyB,EAASv/C,KAAKqxE,eASlB,GARApjD,cAAcjuB,KAAK6xE,YACnBv5D,aAAatY,KAAK8xE,WAEd9xE,KAAKkxE,gBACP30D,EAAIvP,eAAehN,KAAKqO,QAAS,uBAGnCkxC,GAAO,GACFv/C,KAAKynE,YAAeznE,KAAKixE,eAAkBjxE,KAAKgxE,UAArD,CAEIhxE,KAAKkxE,gBACP34D,WAAW,WACTgE,EAAIxP,YAAY/M,KAAKqO,QAAS,wBAC9BvJ,KAAK9E,OAGT,IAAI+xE,EAAQ,WACV/xE,KAAK8xE,UAAYv5D,YAAW,WAC1BgnC,GAAO,KACN,GAAMv/C,KAAKixE,gBACdnsE,KAAK9E,MAEPA,KAAK6xE,WAAa3jD,aAAY,WAC5BqxB,GAAO,GACPwyB,MACC/xE,KAAKixE,eACRc,MAGF/xE,KAAKgyE,iBAAmB,SAAU9iE,EAAU+iE,GAC1C,IAAKjyE,KAAK22B,SAAW32B,KAAK+gB,QAAS,MAAO,CACxC5R,KAAM,EACNsT,IAAK,GAEFvT,IAAUA,EAAWlP,KAAK+gB,QAAQpC,UAAUmmB,aACjD,IAAIn+B,EAAM3G,KAAK+gB,QAAQgjB,yBAAyB70B,GAGhD,MAAO,CACLC,KAHenP,KAAKisE,UAAYjsE,KAAK+gB,QAAQqoB,aAAatK,UAAUn4B,EAAIie,IAAK1V,EAAS0V,KAAO5kB,KAAK+gB,QAAQqoB,aAAanI,WAAWt6B,EAAIme,QAAUne,EAAIme,OAAS9kB,KAAK22B,OAAOzJ,gBAIzKzK,KAHe9b,EAAIie,KAAOqtD,EAAWjyE,KAAK22B,OAAOu2C,eAAiB,IAAMltE,KAAK22B,OAAO3J,aAOxFhtB,KAAKu/C,OAAS,SAAU5oB,GACtB32B,KAAK22B,OAASA,EACd,IAAI6K,EAAaxhC,KAAK+gB,QAAQmxD,kBAC1BvwE,EAAI,EACJwwE,EAAc,OAEC9wE,IAAfmgC,GAAkD,IAAtBA,EAAWjhC,SACzCihC,EAAa,CAAC,CACZ7c,OAAQ,QAIHhjB,EAAI,EAAb,IAAK,IAAWuK,EAAIs1B,EAAWjhC,OAAQoB,EAAIuK,EAAGvK,IAAK,CACjD,IAAIywE,EAAWpyE,KAAKgyE,iBAAiBxwC,EAAW7/B,GAAGgjB,QAAQ,GAE3D,MAAKytD,EAAS3vD,IAAMkU,EAAO5nB,OAAS4nB,EAAOhb,QAAUy2D,EAAS3vD,IAAM,IAAM9gB,EAAI,GAA9E,CAIA,IAAIkM,GAAS7N,KAAKmxE,QAAQgB,MAAkBnyE,KAAKoxE,aAAavjE,MAEzD7N,KAAKqyE,WAMRryE,KAAKqyE,WAAWxkE,EAAOukE,EAAUz7C,EAAQ6K,EAAW7/B,GAAI3B,KAAK+gB,UAL7DlT,EAAMsB,KAAOijE,EAASjjE,KAAO,KAC7BtB,EAAM4U,IAAM2vD,EAAS3vD,IAAM,KAC3B5U,EAAMgB,MAAQ8nB,EAAOzJ,eAAiB,KACtCrf,EAAMkB,OAAS4nB,EAAO3J,WAAa,OAMvC,KAAOhtB,KAAKmxE,QAAQ5wE,OAAS4xE,GAC3BnyE,KAAK4xE,eAGP,IAAIhoB,EAAY5pD,KAAK+gB,QAAQ8oC,eAC7B7pD,KAAKsyE,cAAc1oB,GACnB5pD,KAAKonE,UAAYgL,EACjBpyE,KAAK0xE,gBAGP1xE,KAAKqyE,WAAa,KAElBryE,KAAKsyE,cAAgB,SAAU1oB,GACzBA,GAAa5pD,KAAK4pD,YACpB5pD,KAAK4pD,UAAYA,EACbA,EAAWrtC,EAAIxP,YAAY/M,KAAKqO,QAAS,yBAA8BkO,EAAIvP,eAAehN,KAAKqO,QAAS,2BAIhHrO,KAAK2pB,QAAU,WACbsE,cAAcjuB,KAAK6xE,YACnBv5D,aAAatY,KAAK8xE,cAEnBrwE,KAAKsvE,EAAOxvE,WACfoB,EAAQouE,OAASA,KAEnB/tE,IAAI9C,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,gBAAiB,0BAA0B,SAAU4B,EAAUa,EAASxC,GACjK,aAEA,IAAIoR,EAAMzP,EAAS,aACfya,EAAMza,EAAS,aACfoT,EAAQpT,EAAS,eACjB4vB,EAAe5vB,EAAS,uBAAuB4vB,aAC/C6gD,EAAe,MAEfC,EAAY,SAAmBC,GACjCzyE,KAAKqO,QAAUkO,EAAI3R,cAAc,OACjC5K,KAAKqO,QAAQvB,UAAY,8BAAgC9M,KAAK0yE,YAC9D1yE,KAAK4O,MAAQ2N,EAAI3R,cAAc,OAC/B5K,KAAK4O,MAAM9B,UAAY,sBACvB9M,KAAKqO,QAAQP,YAAY9N,KAAK4O,OAC9B6jE,EAAO3kE,YAAY9N,KAAKqO,SACxBrO,KAAK2yE,YAAW,GAChB3yE,KAAK4yE,WAAY,EACjB19D,EAAMN,YAAY5U,KAAKqO,QAAS,SAAUrO,KAAK6yE,SAAS/tE,KAAK9E,OAC7DkV,EAAMN,YAAY5U,KAAKqO,QAAS,YAAa6G,EAAMQ,kBAGrD,WACEnE,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK2yE,WAAa,SAAU3B,GAC1BhxE,KAAKqO,QAAQR,MAAMmB,QAAUgiE,EAAY,GAAK,OAC9ChxE,KAAKgxE,UAAYA,EACjBhxE,KAAK8yE,MAAQ,KAEdrxE,KAAK+wE,EAAUjxE,WAElB,IAAIwxE,EAAa,SAAoBN,EAAQjxD,GAC3CgxD,EAAU/wE,KAAKzB,KAAMyyE,GACrBzyE,KAAK8P,UAAY,EACjB9P,KAAKgzE,aAAe,EACpBxxD,EAASyxD,gBAAkBjzE,KAAK6O,MAAQ0N,EAAI5N,eAAe8jE,EAAOt9C,eAClEn1B,KAAK4O,MAAMf,MAAMgB,MAAQ7O,KAAKqO,QAAQR,MAAMgB,OAAS7O,KAAK6O,OAAS,IAAM,EAAI,KAC7E7O,KAAKkzE,UAAY,GAGnB3hE,EAAIR,SAASgiE,EAAYP,GACzB,WACExyE,KAAK0yE,YAAc,KAEnB1yE,KAAK6yE,SAAW,WACd,IAAK7yE,KAAK4yE,UAAW,CAGnB,GAFA5yE,KAAK8P,UAAY9P,KAAKqO,QAAQyB,UAEZ,GAAd9P,KAAK8yE,MAAY,CACnB,IAAIj5C,EAAI75B,KAAKqO,QAAQK,aAAe1O,KAAKgzE,aACzChzE,KAAK8P,UAAY9P,KAAK8P,WAAa,EAAI+pB,IAAM75B,KAAK8yE,MAAQj5C,GAG5D75B,KAAKkiB,MAAM,SAAU,CACnBpI,KAAM9Z,KAAK8P,YAIf9P,KAAK4yE,WAAY,GAGnB5yE,KAAK0pB,SAAW,WACd,OAAO7iB,KAAKC,IAAI9G,KAAKgxE,UAAYhxE,KAAK6O,MAAQ,EAAG7O,KAAKkzE,WAAa,IAGrElzE,KAAKmzE,UAAY,SAAUpkE,GACzB/O,KAAKqO,QAAQR,MAAMkB,OAASA,EAAS,MAGvC/O,KAAKozE,eAAiBpzE,KAAKqzE,gBAAkB,SAAUtkE,GACrD/O,KAAKgzE,aAAejkE,EAEhBA,EAASwjE,GACXvyE,KAAK8yE,MAAQP,EAAexjE,EAC5BA,EAASwjE,GACc,GAAdvyE,KAAK8yE,QACd9yE,KAAK8yE,MAAQ,GAGf9yE,KAAK4O,MAAMf,MAAMkB,OAASA,EAAS,MAGrC/O,KAAKssD,aAAe,SAAUx8C,GACxB9P,KAAK8P,WAAaA,IACpB9P,KAAK4yE,WAAY,EACjB5yE,KAAK8P,UAAYA,EACjB9P,KAAKqO,QAAQyB,UAAYA,EAAY9P,KAAK8yE,SAG7CrxE,KAAKsxE,EAAWxxE,WAEnB,IAAI+xE,EAAa,SAAoBb,EAAQjxD,GAC3CgxD,EAAU/wE,KAAKzB,KAAMyyE,GACrBzyE,KAAK+P,WAAa,EAClB/P,KAAK+O,OAASyS,EAASyxD,gBACvBjzE,KAAK4O,MAAMf,MAAMkB,OAAS/O,KAAKqO,QAAQR,MAAMkB,QAAU/O,KAAK+O,QAAU,IAAM,EAAI,MAGlFwC,EAAIR,SAASuiE,EAAYd,GACzB,WACExyE,KAAK0yE,YAAc,KAEnB1yE,KAAK6yE,SAAW,WACT7yE,KAAK4yE,YACR5yE,KAAK+P,WAAa/P,KAAKqO,QAAQ0B,WAE/B/P,KAAKkiB,MAAM,SAAU,CACnBpI,KAAM9Z,KAAK+P,cAIf/P,KAAK4yE,WAAY,GAGnB5yE,KAAKwpB,UAAY,WACf,OAAOxpB,KAAKgxE,UAAYhxE,KAAK+O,OAAS,GAGxC/O,KAAKuzE,SAAW,SAAU1kE,GACxB7O,KAAKqO,QAAQR,MAAMgB,MAAQA,EAAQ,MAGrC7O,KAAKwzE,cAAgB,SAAU3kE,GAC7B7O,KAAK4O,MAAMf,MAAMgB,MAAQA,EAAQ,MAGnC7O,KAAKyzE,eAAiB,SAAU5kE,GAC9B7O,KAAK4O,MAAMf,MAAMgB,MAAQA,EAAQ,MAGnC7O,KAAK0sD,cAAgB,SAAU38C,GACzB/P,KAAK+P,YAAcA,IACrB/P,KAAK4yE,WAAY,EACjB5yE,KAAK+P,WAAa/P,KAAKqO,QAAQ0B,WAAaA,KAG/CtO,KAAK6xE,EAAW/xE,WACnBoB,EAAQ6vE,UAAYO,EAEpBpwE,EAAQ+wE,WAAaX,EAErBpwE,EAAQgxE,WAAaL,EAErB3wE,EAAQowE,WAAaA,EACrBpwE,EAAQ2wE,WAAaA,KAEvBtwE,IAAI9C,OAAO,iBAAkB,CAAC,UAAW,UAAW,SAAU,kBAAkB,SAAU4B,EAAUa,EAASxC,GAC3G,aAEA,IAAI+U,EAAQpT,EAAS,eAEjB8xE,EAAa,SAAoBC,EAAUl6D,GAC7C3Z,KAAK6zE,SAAWA,EAChB7zE,KAAK8zE,SAAU,EACf9zE,KAAK+zE,QAAU,EACf/zE,KAAKC,OAAS0Z,GAAO1Z,SAGvB,WACED,KAAKic,SAAW,SAAU+3D,GAGxB,GAFAh0E,KAAK+zE,QAAU/zE,KAAK+zE,QAAUC,GAEzBh0E,KAAK8zE,SAAW9zE,KAAK+zE,QAAS,CACjC/zE,KAAK8zE,SAAU,EAEf,IAAIz3D,EAAQrc,KAEZkV,EAAM6E,WAAU,WAEd,IAAIg6D,EAEJ,IAHA13D,EAAMy3D,SAAU,EAGTC,EAAU13D,EAAM03D,SACrB13D,EAAM03D,QAAU,EAEhB13D,EAAMw3D,SAASE,KAEhB/zE,KAAKC,YAGXwB,KAAKmyE,EAAWryE,WACnBoB,EAAQixE,WAAaA,KAEvB5wE,IAAI9C,OAAO,yBAA0B,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,eAAgB,oBAAqB,0BAA0B,SAAU4B,EAAUa,EAASxC,GAC9L,IAAIoR,EAAMzP,EAAS,cACfya,EAAMza,EAAS,cACf0a,EAAO1a,EAAS,eAChB2S,EAAY3S,EAAS,oBACrB4vB,EAAe5vB,EAAS,wBAAwB4vB,aAChDuiD,EAAa,EAEbC,EAAcvxE,EAAQuxE,YAAc,SAAUtJ,GAChD5qE,KAAK6M,GAAK0P,EAAI3R,cAAc,OAC5B5K,KAAKm0E,sBAAsBn0E,KAAK6M,GAAGgB,OAAO,GAC1C7N,KAAKo0E,MAAQ73D,EAAI3R,cAAc,OAC/B5K,KAAKm0E,sBAAsBn0E,KAAKo0E,MAAMvmE,OACtC7N,KAAK6wE,aAAet0D,EAAI3R,cAAc,OACtC5K,KAAKm0E,sBAAsBn0E,KAAK6wE,aAAahjE,OAC7C7N,KAAK6M,GAAGiB,YAAY9N,KAAKo0E,OACzBp0E,KAAK6M,GAAGiB,YAAY9N,KAAK6wE,cACzBjG,EAAS98D,YAAY9N,KAAK6M,IACrBonE,GAAYj0E,KAAKq0E,sBACtBr0E,KAAK6wE,aAAaxgE,UAAYmM,EAAK/B,aAAa,IAAKw5D,GACrDj0E,KAAKygC,eAAiB,CACpB5xB,MAAO,EACPE,OAAQ,GAEV/O,KAAKuuE,wBAGP,WACEh9D,EAAIF,UAAUrR,KAAM0xB,GACpB1xB,KAAKygC,eAAiB,CACpB5xB,MAAO,EACPE,OAAQ,GAGV/O,KAAKq0E,oBAAsB,WACzB,IAAIxnE,EAAK0P,EAAI3R,cAAc,OAC3B5K,KAAKm0E,sBAAsBtnE,EAAGgB,OAC9BhB,EAAGgB,MAAMgB,MAAQ,QACjBlE,SAAS8B,gBAAgBqB,YAAYjB,GACrC,IAAIogD,EAAIpgD,EAAG2V,wBAAwB3T,MACfolE,EAAhBhnB,EAAI,GAAKA,EAAI,EAAgB,GAAqB,IACtDpgD,EAAGyD,WAAWb,YAAY5C,IAG5B7M,KAAKm0E,sBAAwB,SAAUtmE,EAAOymE,GAC5CzmE,EAAMgB,MAAQhB,EAAMkB,OAAS,OAC7BlB,EAAMsB,KAAOtB,EAAM4U,IAAM,MACzB5U,EAAM2jE,WAAa,SACnB3jE,EAAMqB,SAAW,WACjBrB,EAAM0mE,WAAa,MAEf9/D,EAAUnB,KAAO,EACnBzF,EAAM,eAAiB,UAEvBA,EAAM2mE,KAAO,UAGf3mE,EAAMuB,SAAWklE,EAAS,SAAW,WAGvCt0E,KAAKuuE,oBAAsB,WACzB,IAAIruC,EAAOlgC,KAAKy0E,gBAEhB,GAAIv0C,IAASlgC,KAAKygC,eAAe5xB,QAAUqxB,EAAKrxB,OAAS7O,KAAKygC,eAAe1xB,SAAWmxB,EAAKnxB,QAAS,CACpG/O,KAAK6wE,aAAahjE,MAAM6mE,WAAa,OACrC,IAAIC,EAAW30E,KAAKy0E,gBACpBz0E,KAAK6wE,aAAahjE,MAAM6mE,WAAa,GACrC10E,KAAKygC,eAAiBP,EACtBlgC,KAAK40E,UAAYtzE,OAAOuI,OAAO,MAC/B7J,KAAK60E,eAAiBF,GAAYA,EAAS9lE,QAAUqxB,EAAKrxB,OAAS8lE,EAAS5lE,SAAWmxB,EAAKnxB,OAE5F/O,KAAKkiB,MAAM,sBAAuB,CAChCpI,KAAMomB,MAKZlgC,KAAKsuE,iBAAmB,WACtB,GAAItuE,KAAKwuE,sBAAuB,OAAOxuE,KAAKwuE,sBAC5C,IAAItmE,EAAOlI,KACX,OAAOA,KAAKwuE,sBAAwBtgD,aAAY,WAC9ChmB,EAAKqmE,wBACJ,MAGLvuE,KAAK80E,WAAa,SAAUr0D,GACtBA,EACFzgB,KAAKsuE,mBACItuE,KAAKwuE,wBACdvgD,cAAcjuB,KAAKwuE,uBACnBxuE,KAAKwuE,sBAAwB,IAIjCxuE,KAAKy0E,cAAgB,WACnB,GAAmB,KAAfR,EAAmB,CACrB,IAAI3xD,EAAO,KAEX,IACEA,EAAOtiB,KAAK6wE,aAAaruD,wBACzB,MAAOhN,GACP8M,EAAO,CACLzT,MAAO,EACPE,OAAQ,GAIZ,IAAImxB,EAAO,CACTnxB,OAAQuT,EAAKvT,OACbF,MAAOyT,EAAKzT,MAAQolE,QAGlB/zC,EAAO,CACTnxB,OAAQ/O,KAAK6wE,aAAaniE,aAC1BG,MAAO7O,KAAK6wE,aAAariE,YAAcylE,GAI3C,OAAmB,IAAf/zC,EAAKrxB,OAA+B,IAAhBqxB,EAAKnxB,OAAqB,KAC3CmxB,GAGTlgC,KAAK2gC,kBAAoB,SAAUxE,GAGjC,OAFAn8B,KAAKo0E,MAAM/jE,UAAYmM,EAAK/B,aAAa0hB,EAAI83C,GAClCj0E,KAAKo0E,MAAM5xD,wBACV3T,MAAQolE,GAGtBj0E,KAAKizD,kBAAoB,SAAU92B,GACjC,IAAI8wB,EAAIjtD,KAAK40E,UAAUz4C,GAMvB,YAJU96B,IAAN4rD,IACFA,EAAIjtD,KAAK40E,UAAUz4C,GAAMn8B,KAAK2gC,kBAAkBxE,GAAMn8B,KAAKygC,eAAe5xB,OAGrEo+C,GAGTjtD,KAAK2pB,QAAU,WACbsE,cAAcjuB,KAAKwuE,uBACfxuE,KAAK6M,IAAM7M,KAAK6M,GAAGyD,YAAYtQ,KAAK6M,GAAGyD,WAAWb,YAAYzP,KAAK6M,OAExEpL,KAAKyyE,EAAY3yE,cAEtByB,IAAI9C,OAAO,uBAAwB,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,aAAc,oBAAqB,mBAAoB,mBAAoB,iBAAkB,mBAAoB,gBAAiB,gBAAiB,iBAAkB,yBAA0B,0BAA0B,SAAU4B,EAAUa,EAASxC,GACtV,aAEA,IAAIoR,EAAMzP,EAAS,aACfya,EAAMza,EAAS,aACf60B,EAAS70B,EAAS,YAClB2S,EAAY3S,EAAS,mBACrBizE,EAAcjzE,EAAS,kBAAkB6oE,OACzCqK,EAAclzE,EAAS,kBAAkB2qE,OACzCwI,EAAYnzE,EAAS,gBAAgB6rE,KACrCuH,EAAcpzE,EAAS,kBAAkBivE,OACzCuC,EAAaxxE,EAAS,eAAewxE,WACrCP,EAAajxE,EAAS,eAAeixE,WACrCa,EAAa9xE,EAAS,gBAAgB8xE,WACtCM,EAAcpyE,EAAS,wBAAwBoyE,YAC/CxiD,EAAe5vB,EAAS,uBAAuB4vB,aA6XnDnV,EAAI5O,gBA5XY,s6XA4Xe,kBAE/B,IAAIwnE,EAAkB,SAAyB5yD,EAAWk8C,GACxD,IAAIpiD,EAAQrc,KAEZA,KAAKuiB,UAAYA,GAAahG,EAAI3R,cAAc,OAChD5K,KAAKyhB,uBAAyBhN,EAAUhB,QACxC8I,EAAIxP,YAAY/M,KAAKuiB,UAAW,cAChCviB,KAAKw+D,SAASC,GACdz+D,KAAKwrB,QAAUjP,EAAI3R,cAAc,OACjC5K,KAAKwrB,QAAQ1e,UAAY,aACzB9M,KAAKuiB,UAAUzU,YAAY9N,KAAKwrB,SAChCxrB,KAAKwrB,QAAQvO,aAAa,eAAe,GACzCjd,KAAKgjB,SAAWzG,EAAI3R,cAAc,OAClC5K,KAAKgjB,SAASlW,UAAY,eAC1B9M,KAAKuiB,UAAUzU,YAAY9N,KAAKgjB,UAChChjB,KAAKo1E,QAAU74D,EAAI3R,cAAc,OACjC5K,KAAKo1E,QAAQtoE,UAAY,cACzB9M,KAAKgjB,SAASlV,YAAY9N,KAAKo1E,SAC/Bp1E,KAAKsqB,aAAe,IAAIyqD,EAAY/0E,KAAKwrB,SACzCxrB,KAAKsqB,aAAazI,GAAG,oBAAqB7hB,KAAKq1E,eAAevwE,KAAK9E,OACnEA,KAAKs1E,YAAc,IAAIN,EAAYh1E,KAAKo1E,SACxC,IAAIG,EAAYv1E,KAAKw1E,WAAa,IAAIP,EAAUj1E,KAAKo1E,SACrDp1E,KAAKy1E,OAASF,EAAUlnE,QACxBrO,KAAK01E,aAAe,IAAIV,EAAYh1E,KAAKo1E,SACzCp1E,KAAK+tB,aAAe,IAAImnD,EAAYl1E,KAAKo1E,SACzCp1E,KAAK21E,cAAe,EACpB31E,KAAK41E,UAAW,EAChB51E,KAAK61E,UAAY71E,KAAKi3B,WAAa,IAAI87C,EAAW/yE,KAAKuiB,UAAWviB,MAClEA,KAAKk3B,WAAa,IAAIo8C,EAAWtzE,KAAKuiB,UAAWviB,MACjDA,KAAKi3B,WAAWliB,iBAAiB,UAAU,SAAUS,GAC9C6G,EAAMy5D,kBAAkBz5D,EAAM0E,QAAQurC,aAAa92C,EAAEsE,KAAOuC,EAAM05D,aAAatzD,QAEtFziB,KAAKk3B,WAAWniB,iBAAiB,UAAU,SAAUS,GAC9C6G,EAAMy5D,kBAAkBz5D,EAAM0E,QAAQ2rC,cAAcl3C,EAAEsE,KAAOuC,EAAM05D,aAAa5mE,SAEvFnP,KAAK8P,UAAY,EACjB9P,KAAK+P,WAAa,EAClB/P,KAAKq+D,UAAY,CACfz5C,IAAK,EACLE,OAAQ,GAEV9kB,KAAKouE,aAAe,IAAI8F,EAAYl0E,KAAKuiB,WACzCviB,KAAKw1E,WAAW1iB,gBAAgB9yD,KAAKouE,cACrCpuE,KAAKw1E,WAAWzgE,iBAAiB,uBAAuB,SAAUS,GAChE6G,EAAM25D,sBAEN35D,EAAMkiD,UAAS,EAAMliD,EAAMyuD,YAAazuD,EAAM45D,MAAMpnE,MAAOwN,EAAM45D,MAAMlnE,QAEvEsN,EAAMoO,QAAQ,sBAAuBjV,MAEvCxV,KAAKi2E,MAAQ,CACXpnE,MAAO,EACPE,OAAQ,EACRmnE,eAAgB,EAChBC,cAAe,EACfC,QAAQ,GAEVp2E,KAAKitB,YAAc,CACjBpe,MAAO,EACPm9D,QAAS,EACTzoC,SAAU,EACV2pC,eAAgB,EAChB1pC,QAAS,EACTxW,WAAY,EACZE,eAAgB,EAChB4+C,UAAW,EACXuK,UAAW,EACX16D,OAAQ,EACR5M,OAAQ,EACRo8D,aAAc,GAEhBnrE,KAAK+1E,aAAe,CAClB5mE,KAAM,EACNoU,MAAO,EACPd,IAAK,EACLI,OAAQ,EACRyzD,EAAG,EACHz8C,EAAG,GAEL75B,KAAKu2E,MAAQ,IAAI3C,EAAW5zE,KAAKw2E,eAAe1xE,KAAK9E,MAAOA,KAAKuiB,UAAU4S,cAActkB,aACzF7Q,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,aACzBz2E,KAAKg2E,sBACLh2E,KAAK0sE,WAAW,GAChB/1C,EAAO1C,aAAaj0B,MAEpB22B,EAAOzU,MAAM,WAAYliB,QAG3B,WACEA,KAAK02E,cAAgB,EACrB12E,KAAK22E,cAAgB,EACrB32E,KAAK42E,cAAgB,EACrB52E,KAAK62E,cAAgB,EACrB72E,KAAK82E,aAAe,GACpB92E,KAAK+2E,YAAc,GACnB/2E,KAAKg3E,YAAc,GACnBh3E,KAAKi3E,mBAAqB,IAC1Bj3E,KAAKk3E,oBAAsB,IAC3Bl3E,KAAKy2E,YAAc,IACnBz2E,KAAKm3E,gBAAkB,KACvB5lE,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAKg2E,oBAAsB,WACrBh2E,KAAKw1E,WAAWX,gBAAkB70E,KAAKo3E,kBACzCp3E,KAAKo3E,gBAAkBp3E,KAAKw1E,WAAWX,eACvC70E,KAAKomB,SAAS,cAAepmB,KAAKo3E,kBAGpCp3E,KAAKitB,YAAYC,eAAiBltB,KAAKktB,eAAiBltB,KAAKw1E,WAAWviB,oBACxEjzD,KAAKitB,YAAYD,WAAahtB,KAAKgtB,WAAahtB,KAAKw1E,WAAWrH,gBAChEnuE,KAAKq3E,sBAGPr3E,KAAK+6D,WAAa,SAAUh6C,GACtB/gB,KAAK+gB,SAAS/gB,KAAK+gB,QAAQzU,IAAIomB,IAAI,oBAAqB1yB,KAAKs3E,qBACjEt3E,KAAK+gB,QAAUA,EACXA,GAAW/gB,KAAK+1E,aAAatzD,KAAO1B,EAAQyrC,gBAAkB,GAAGzrC,EAAQurC,cAActsD,KAAK+1E,aAAatzD,KAC7GziB,KAAK+tB,aAAagtC,WAAWh6C,GAC7B/gB,KAAKs1E,YAAYva,WAAWh6C,GAC5B/gB,KAAK01E,aAAa3a,WAAWh6C,GAC7B/gB,KAAKsqB,aAAaywC,WAAWh6C,GAC7B/gB,KAAKw1E,WAAWza,WAAWh6C,GACtBA,IACL/gB,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,aACzBz2E,KAAK+gB,QAAQ+xC,gBAAgB9yD,KAAKouE,cAClCpuE,KAAKk3B,WAAWnnB,WAAa/P,KAAKi3B,WAAWnnB,UAAY,KACzD9P,KAAKs3E,oBAAsBt3E,KAAKs3E,oBAAoBxyE,KAAK9E,MACzDA,KAAKs3E,sBACLt3E,KAAK+gB,QAAQzU,IAAIuV,GAAG,oBAAqB7hB,KAAKs3E,uBAGhDt3E,KAAK6/D,YAAc,SAAUt8B,EAAUC,EAAS2pB,GAa9C,QAZgB9rD,IAAZmiC,IAAuBA,EAAU0T,EAAAA,GAEhCl3C,KAAKu3E,eAMJv3E,KAAKu3E,cAAch0C,SAAWA,IAAUvjC,KAAKu3E,cAAch0C,SAAWA,GACtEvjC,KAAKu3E,cAAc/zC,QAAUA,IAASxjC,KAAKu3E,cAAc/zC,QAAUA,IANvExjC,KAAKu3E,cAAgB,CACnBh0C,SAAUA,EACVC,QAASA,GAOTxjC,KAAKu3E,cAAc/zC,QAAUxjC,KAAKitB,YAAYsW,SAAU,CAC1D,IAAI4pB,EAAkE,OAA3DntD,KAAKu3E,cAAc/zC,QAAUxjC,KAAKitB,YAAYuW,QAGvDxjC,KAAKu3E,cAAch0C,SAAWvjC,KAAKitB,YAAYuW,SACnDxjC,KAAKu2E,MAAMt6D,SAASjc,KAAK82E,eAG3B92E,KAAKs3E,oBAAsB,WACzBt3E,KAAKu2E,MAAMt6D,SAASjc,KAAK+2E,aACzB/2E,KAAKw1E,WAAW5H,iBAChB5tE,KAAK+gB,QAAQqoB,aAAatI,WAAW9gC,KAAKw1E,WAAWxH,WAGvDhuE,KAAKu9D,gBAAkB,WACrBv9D,KAAKu2E,MAAMt6D,SAASjc,KAAK+2E,YAAc/2E,KAAK22E,eAC5C32E,KAAKw1E,WAAWjY,mBAGlBv9D,KAAK+gE,WAAa,WAChB/gE,KAAKu2E,MAAMt6D,SAASjc,KAAK+2E,cAG3B/2E,KAAKk+D,WAAa,SAAU/Q,GACtBA,EAAOntD,KAAKw2E,eAAex2E,KAAKy2E,aAAa,GAAWz2E,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,cAGvFz2E,KAAKw3E,eAAiB,WACpBx3E,KAAKw1E,WAAWjH,uBAGlBvuE,KAAKy3E,SAAW,EAEhBz3E,KAAK03E,iBAAmB,WAClB13E,KAAKu2E,MAAMzC,QAAS9zE,KAAKi2E,MAAMG,QAAS,EAAUp2E,KAAKu+D,YAG7Dv+D,KAAKu+D,SAAW,SAAUpR,EAAO2d,EAAaj8D,EAAOE,GACnD,KAAI/O,KAAK23E,SAAW,GAApB,CAAuC33E,KAAK23E,SAAW,EAAG33E,KAAK23E,WAAgB33E,KAAK23E,SAAWxqB,EAAQ,EAAI,EAC3G,IAAItgD,EAAK7M,KAAKuiB,UACTxT,IAAQA,EAASlC,EAAG6B,cAAgB7B,EAAGmmE,cACvCnkE,IAAOA,EAAQhC,EAAG2B,aAAe3B,EAAG+qE,aACzC,IAAI7D,EAAU/zE,KAAK63E,kBAAkB1qB,EAAO2d,EAAaj8D,EAAOE,GAChE,IAAK/O,KAAKi2E,MAAMC,iBAAmBrnE,IAAUE,EAAQ,OAAO/O,KAAK23E,SAAW,EACxExqB,IAAOntD,KAAKsqB,aAAa2hD,SAAW,MACpC9e,EAAOntD,KAAKw2E,eAAezC,EAAU/zE,KAAKy3E,UAAU,GAAWz3E,KAAKu2E,MAAMt6D,SAAS83D,EAAU/zE,KAAKy3E,UAClGz3E,KAAK23E,WAAU33E,KAAK23E,SAAW,GACnC33E,KAAKi3B,WAAWlnB,WAAa/P,KAAKi3B,WAAWnnB,UAAY,OAG3D9P,KAAK63E,kBAAoB,SAAU1qB,EAAO2d,EAAaj8D,EAAOE,GAC5DA,GAAU/O,KAAK83E,cAAgB,EAC/B,IAAI/D,EAAU,EACV7zC,EAAOlgC,KAAKi2E,MACZ8B,EAAU,CACZlpE,MAAOqxB,EAAKrxB,MACZE,OAAQmxB,EAAKnxB,OACbmnE,eAAgBh2C,EAAKg2C,eACrBC,cAAej2C,EAAKi2C,eA0BtB,OAvBIpnE,IAAWo+C,GAASjtB,EAAKnxB,QAAUA,KACrCmxB,EAAKnxB,OAASA,EACdglE,GAAW/zE,KAAKg3E,YAChB92C,EAAKg2C,eAAiBh2C,EAAKnxB,OACvB/O,KAAK21E,eAAcz1C,EAAKg2C,gBAAkBl2E,KAAKk3B,WAAW1N,aAC9DxpB,KAAKi3B,WAAW5oB,QAAQR,MAAMgV,OAAS7iB,KAAKk3B,WAAW1N,YAAc,KACrEuqD,GAAoB/zE,KAAK62E,eAGvBhoE,IAAUs+C,GAASjtB,EAAKrxB,OAASA,KACnCklE,GAAW/zE,KAAKg3E,YAChB92C,EAAKrxB,MAAQA,EACM,MAAfi8D,IAAqBA,EAAc9qE,KAAKg4E,YAAch4E,KAAKwrB,QAAQjc,YAAc,GACrFvP,KAAK8qE,YAAcA,EACnB9qE,KAAKk3B,WAAW7oB,QAAQR,MAAMsB,KAAOnP,KAAKgjB,SAASnV,MAAMsB,KAAO27D,EAAc,KAC9E5qC,EAAKi2C,cAAgBtvE,KAAKC,IAAI,EAAG+H,EAAQi8D,EAAc9qE,KAAKi3B,WAAWvN,YACvE1pB,KAAKk3B,WAAW7oB,QAAQR,MAAM0V,MAAQvjB,KAAKgjB,SAASnV,MAAM0V,MAAQvjB,KAAKi3B,WAAWvN,WAAa,KAC/F1pB,KAAKgjB,SAASnV,MAAMgV,OAAS7iB,KAAKk3B,WAAW1N,YAAc,MACvDxpB,KAAK+gB,SAAW/gB,KAAK+gB,QAAQ0uC,kBAAoBzvD,KAAK2vD,mBAAqBxC,KAAO4mB,GAAW/zE,KAAKy2E,cAGxGv2C,EAAKk2C,QAAUvnE,IAAUE,EACrBglE,GAAS/zE,KAAKyqB,QAAQ,SAAUstD,GAC7BhE,GAGT/zE,KAAKq1E,eAAiB,WACpB,IAAIvK,EAAc9qE,KAAKg4E,YAAch4E,KAAKwrB,QAAQjc,YAAc,EAC5Du7D,GAAe9qE,KAAK8qE,cAAa9qE,KAAKy3E,UAAYz3E,KAAK63E,mBAAkB,EAAM/M,EAAa9qE,KAAKi2E,MAAMpnE,MAAO7O,KAAKi2E,MAAMlnE,SAEzH/O,KAAK+gB,QAAQ0uC,kBAAoBzvD,KAAK2vD,mBAE/B3vD,KAAKi2E,MAAMG,OADpBp2E,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,cAIzBz2E,KAAKi4E,sBACLj4E,KAAKu2E,MAAMt6D,SAASjc,KAAK22E,iBAI7B32E,KAAK2vD,gBAAkB,WACrB,IAAIuoB,EAAiBl4E,KAAKi2E,MAAME,cAAgC,EAAhBn2E,KAAKisE,SACjD9b,EAAQtpD,KAAKsF,MAAM+rE,EAAiBl4E,KAAKktB,gBAC7C,OAAOltB,KAAK+gB,QAAQ4uC,gBAAgBQ,EAAOnwD,KAAKm4E,kBAAoBn4E,KAAKo4E,qBAG3Ep4E,KAAKoiE,kBAAoB,SAAUC,GACjCriE,KAAK+yB,UAAU,iBAAkBsvC,IAGnCriE,KAAKsiE,kBAAoB,WACvB,OAAOtiE,KAAKq4E,iBAGdr4E,KAAK6gC,kBAAoB,SAAUtC,GACjCv+B,KAAK+yB,UAAU,iBAAkBwL,GACjCv+B,KAAK+gB,QAAQqoB,aAAavI,kBAAkBtC,IAG9Cv+B,KAAK4gC,kBAAoB,WACvB,OAAO5gC,KAAKmzB,UAAU,mBAGxBnzB,KAAKwiE,uBAAyB,WAC5B,OAAOxiE,KAAKmzB,UAAU,wBAGxBnzB,KAAKuiE,uBAAyB,SAAUvzD,GACtChP,KAAK+yB,UAAU,sBAAuB/jB,IAGxChP,KAAKyiE,mBAAqB,SAAUC,GAClC1iE,KAAK+yB,UAAU,kBAAmB2vC,IAGpC1iE,KAAK2iE,mBAAqB,WACxB,OAAO3iE,KAAKmzB,UAAU,oBAGxBnzB,KAAK4iE,qBAAuB,SAAUF,GACpC1iE,KAAK+yB,UAAU,oBAAqB2vC,IAGtC1iE,KAAK6iE,qBAAuB,WAC1B,OAAO7iE,KAAKmzB,UAAU,sBAGxBnzB,KAAKs4E,cAAgB,WACnB,OAAOt4E,KAAKmzB,UAAU,eAGxBnzB,KAAKu4E,cAAgB,SAAUjvD,GAC7B,OAAOtpB,KAAK+yB,UAAU,aAAczJ,IAGtCtpB,KAAKqjE,mBAAqB,WACxB,OAAOrjE,KAAKmzB,UAAU,oBAGxBnzB,KAAKmjE,mBAAqB,SAAU75C,GAClCtpB,KAAK+yB,UAAU,kBAAmBzJ,IAGpCtpB,KAAKgiE,uBAAyB,SAAUF,GACtC9hE,KAAK+yB,UAAU,sBAAuB+uC,IAGxC9hE,KAAKiiE,uBAAyB,WAC5B,OAAOjiE,KAAKmzB,UAAU,wBAGxBnzB,KAAKw4E,2BAA6B,WAChC,IAAI7xE,EAAM3G,KAAK+tB,aAAaq5C,UACxBr4D,EAAS/O,KAAKitB,YAAYD,WAE9B,GAAIhtB,KAAK+gB,QAAQ0uC,iBAAkB,CACjC,IAAI9qC,EAAS3kB,KAAK+gB,QAAQpC,UAAUmmB,YACpCngB,EAAOG,OAAS,EAChBne,EAAM3G,KAAK+tB,aAAaikD,iBAAiBrtD,GAAQ,GACjD5V,GAAU/O,KAAK+gB,QAAQ4wC,aAAahtC,EAAOC,KAG7C5kB,KAAKy4E,qBAAqB5qE,MAAM4U,IAAM9b,EAAI8b,IAAMziB,KAAKitB,YAAYtR,OAAS,KAC1E3b,KAAKy4E,qBAAqB5qE,MAAMkB,OAASA,EAAS,MAGpD/O,KAAKq3E,mBAAqB,WACxB,GAAKr3E,KAAKm4E,kBAAqBn4E,KAAK04E,eAApC,CAEA,IAAK14E,KAAK04E,eAAgB,CACxB,IAAIC,EAAcp8D,EAAI3R,cAAc,OACpC+tE,EAAY7rE,UAAY,mCACxB9M,KAAK04E,eAAiBn8D,EAAI3R,cAAc,OACxC5K,KAAK04E,eAAe5rE,UAAY,mBAChC6rE,EAAY7qE,YAAY9N,KAAK04E,gBAC7B14E,KAAKo1E,QAAQj4D,aAAaw7D,EAAa34E,KAAKo1E,QAAQh4D,YAGtD,IAAIvP,EAAQ7N,KAAK04E,eAAe7qE,MAChCA,EAAMsB,KAAOnP,KAAKktB,eAAiBltB,KAAKo4E,mBAAqBp4E,KAAKisE,SAAW,KAC7Ep+D,EAAM2jE,WAAaxxE,KAAKm4E,iBAAmB,UAAY,SACnDn4E,KAAK+gB,UAAkC,GAAvB/gB,KAAK+gB,QAAQoyC,OAAanzD,KAAK2vD,oBAGrD3vD,KAAKs6D,oBAAsB,WACzB,OAAOt6D,KAAKuiB,WAGdviB,KAAK+2B,oBAAsB,WACzB,OAAO/2B,KAAKgjB,UAGdhjB,KAAKu6D,qBAAuB,WAC1B,OAAOv6D,KAAKuiB,WAGdviB,KAAK0hB,sBAAwB,WAC3B,GAAK1hB,KAAKyhB,sBAAV,CACA,IAAIkV,EAAS32B,KAAKitB,YACd2rD,EAAS54E,KAAK+tB,aAAaq5C,UAAU3kD,IACrCo2D,EAAU74E,KAAK+tB,aAAaq5C,UAAUj4D,KAC1CypE,GAAUjiD,EAAOhb,OACjB,IAAI9N,EAAQ7N,KAAKw6D,SAAS3sD,MACtBgsB,EAAI75B,KAAKgtB,WAEb,GAAI4rD,EAAS,GAAKA,EAASjiD,EAAO5nB,OAAS8qB,EACzChsB,EAAM4U,IAAM5U,EAAMsB,KAAO,QAD3B,CAKA,IAAI89C,EAAIjtD,KAAKktB,eAEb,GAAIltB,KAAK84E,aAAc,CACrB,IAAIr4D,EAAMzgB,KAAKw6D,SAASlyD,MAAM5F,QAAQ,SAAU,IAChDuqD,GAAKjtD,KAAK+gB,QAAQysC,sBAAsB/sC,GAAK,GAAK,EAClDoZ,GAAK,GAGPg/C,GAAW74E,KAAK+P,YACF/P,KAAKi2E,MAAME,cAAgBlpB,IAAG4rB,EAAU74E,KAAKi2E,MAAME,cAAgBlpB,GACjF4rB,GAAW74E,KAAK8qE,YAChBj9D,EAAMkB,OAAS8qB,EAAI,KACnBhsB,EAAMgB,MAAQo+C,EAAI,KAClBp/C,EAAMsB,KAAOtI,KAAKM,IAAI0xE,EAAS74E,KAAKi2E,MAAME,cAAgBlpB,GAAK,KAC/Dp/C,EAAM4U,IAAM5b,KAAKM,IAAIyxE,EAAQ54E,KAAKi2E,MAAMlnE,OAAS8qB,GAAK,QAGxD75B,KAAK8kE,mBAAqB,WACxB,OAAO9kE,KAAKitB,YAAYsW,UAG1BvjC,KAAKklE,wBAA0B,WAC7B,OAAOllE,KAAKitB,YAAYsW,UAAwC,IAA5BvjC,KAAKitB,YAAYtR,OAAe,EAAI,IAG1E3b,KAAKmlE,uBAAyB,WAC5B,IAAIxuC,EAAS32B,KAAKitB,YACduW,EAAU7M,EAAO6M,QAErB,OADUxjC,KAAK+gB,QAAQuK,oBAAoBkY,EAAS,GAAK7M,EAAO3J,WACtDhtB,KAAK+gB,QAAQyrC,eAAiB71B,EAAO5nB,OAAS4nB,EAAO3J,WAAmBwW,EAAU,EACrFA,GAGTxjC,KAAK+kE,kBAAoB,WACvB,OAAO/kE,KAAKitB,YAAYuW,SAG1BxjC,KAAKisE,SAAW,KAEhBjsE,KAAK0sE,WAAa,SAAUV,GAC1BhsE,KAAKisE,SAAWD,EAChBhsE,KAAKw1E,WAAW9I,WAAWV,GAC3BhsE,KAAK+tB,aAAa2+C,WAAWV,GAC7BhsE,KAAK01E,aAAahJ,WAAWV,GAC7BhsE,KAAKs1E,YAAY5I,WAAWV,GAC5BhsE,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,aACzBz2E,KAAKq3E,sBAGPr3E,KAAK+4E,gBAAkB,SAAUt2D,EAAKI,EAAQ1T,EAAMoU,GAClD,IAAIy1D,EAAKh5E,KAAK+1E,aACdiD,EAAGv2D,IAAY,EAANA,EACTu2D,EAAGn2D,OAAkB,EAATA,EACZm2D,EAAGz1D,MAAgB,EAARA,EACXy1D,EAAG7pE,KAAc,EAAPA,EACV6pE,EAAG1C,EAAI0C,EAAGv2D,IAAMu2D,EAAGn2D,OACnBm2D,EAAGn/C,EAAIm/C,EAAG7pE,KAAO6pE,EAAGz1D,MAChBy1D,EAAGv2D,KAAOziB,KAAK8P,WAAa,GAAK9P,KAAK+gB,SAAS/gB,KAAK+gB,QAAQurC,cAAc0sB,EAAGv2D,KACjFziB,KAAKk+D,cAGPl+D,KAAKi5E,2BAA6B,WAChC,OAAOj5E,KAAKk5E,0BAGdl5E,KAAKm5E,2BAA6B,SAAUC,GAC1Cp5E,KAAK+yB,UAAU,0BAA2BqmD,IAG5Cp5E,KAAKq5E,2BAA6B,WAChC,OAAOr5E,KAAKs5E,0BAGdt5E,KAAKu5E,2BAA6B,SAAUH,GAC1Cp5E,KAAK+yB,UAAU,0BAA2BqmD,IAG5Cp5E,KAAKw5E,kBAAoB,WACvB,IAAIxG,EAAehzE,KAAKitB,YAAYopD,UAChCH,EAAiBl2E,KAAKi2E,MAAMC,gBAE3Bl2E,KAAKmgE,WAAangE,KAAKy5E,iBAC1BzG,IAAiBkD,EAAiBl2E,KAAKgtB,YAAchtB,KAAKy5E,eAEtDz5E,KAAK8P,UAAYkjE,EAAekD,IAClClD,EAAehzE,KAAK8P,UAAYomE,EAChCl2E,KAAKi3B,WAAWnnB,UAAY,OAIhC9P,KAAKi3B,WAAWo8C,gBAAgBL,EAAehzE,KAAK+1E,aAAaO,GACjEt2E,KAAKi3B,WAAWq1B,aAAatsD,KAAK8P,UAAY9P,KAAK+1E,aAAatzD,MAGlEziB,KAAK05E,kBAAoB,WACvB15E,KAAKk3B,WAAWu8C,eAAezzE,KAAKitB,YAAYpe,MAAQ,EAAI7O,KAAKisE,SAAWjsE,KAAK+1E,aAAal8C,GAC9F75B,KAAKk3B,WAAWw1B,cAAc1sD,KAAK+P,WAAa/P,KAAK+1E,aAAa5mE,OAGpEnP,KAAK25E,SAAU,EAEf35E,KAAK+K,OAAS,WACZ/K,KAAK25E,SAAU,GAGjB35E,KAAK45E,SAAW,WACd55E,KAAK25E,SAAU,GAGjB35E,KAAKw2E,eAAiB,SAAUzC,EAAS5mB,GAMvC,GALIntD,KAAKy3E,WACP1D,GAAW/zE,KAAKy3E,SAChBz3E,KAAKy3E,SAAW,GAGbz3E,KAAK+gB,SAAY/gB,KAAKuiB,UAAUhT,cAAevP,KAAK25E,UAAY5F,GAAY5mB,GAAjF,CAKA,GAAIntD,KAAKi2E,MAAMG,OAEb,OADAp2E,KAAKy3E,UAAY1D,EACV/zE,KAAKu+D,UAAS,GAGlBv+D,KAAKgtB,YACRhtB,KAAKw1E,WAAWjH,sBAGlBvuE,KAAKyqB,QAAQ,gBAETzqB,KAAK+gB,SAAW/gB,KAAK+gB,QAAQqoB,cAAcppC,KAAK+gB,QAAQqoB,aAAa7I,sBAAsBvgC,KAAKouE,cACpG,IAAIz3C,EAAS32B,KAAKitB,YAElB,GAAI8mD,EAAU/zE,KAAKy2E,aAAe1C,EAAU/zE,KAAKg3E,aAAejD,EAAU/zE,KAAK+2E,aAAehD,EAAU/zE,KAAK82E,cAAgB/C,EAAU/zE,KAAK62E,eAAiB9C,EAAU/zE,KAAKm3E,gBAAiB,CAG3L,GAFApD,GAAW/zE,KAAKi4E,sBAEZthD,EAAO4M,UAAYvjC,KAAKitB,YAAYsW,UAAY5M,EAAOu2C,gBAAkBltE,KAAKitB,YAAYigD,eAAgB,CAC5G,IAAI2M,EAAK75E,KAAK8P,WAAa6mB,EAAO4M,SAAWvjC,KAAKitB,YAAYsW,UAAYvjC,KAAKgtB,WAE3E6sD,EAAK,IACP75E,KAAK8P,UAAY+pE,EACjB9F,GAAoB/zE,KAAK62E,cACzB9C,GAAW/zE,KAAKi4E,uBAIpBthD,EAAS32B,KAAKitB,YACdjtB,KAAKw5E,oBACDzF,EAAU/zE,KAAKm3E,iBAAiBn3E,KAAK05E,oBACzC15E,KAAKsqB,aAAajc,QAAQR,MAAMisE,WAAanjD,EAAOhb,OAAS,KAC7D3b,KAAKo1E,QAAQvnE,MAAMisE,WAAanjD,EAAOhb,OAAS,KAChD3b,KAAKo1E,QAAQvnE,MAAMgB,MAAQ8nB,EAAO9nB,MAAQ,EAAI7O,KAAKisE,SAAW,KAC9DjsE,KAAKo1E,QAAQvnE,MAAMkB,OAAS4nB,EAAOm1C,UAAY,KAQjD,GALIiI,EAAU/zE,KAAKm3E,kBACjBn3E,KAAKo1E,QAAQvnE,MAAMksE,YAAc/5E,KAAK+P,WAAa,KACnD/P,KAAKgjB,SAASlW,UAAY9M,KAAK+P,YAAc,EAAI,eAAiB,gCAGhEgkE,EAAU/zE,KAAKy2E,YAWjB,OAVAz2E,KAAKw1E,WAAWj2B,OAAO5oB,GACnB32B,KAAKg4E,aAAah4E,KAAKsqB,aAAai1B,OAAO5oB,GAC/C32B,KAAKs1E,YAAY/1B,OAAO5oB,GACxB32B,KAAK01E,aAAan2B,OAAO5oB,GACzB32B,KAAK+tB,aAAawxB,OAAO5oB,GACzB32B,KAAK0hB,wBACL1hB,KAAKg6E,sBAAwBh6E,KAAKw4E,kCAElCx4E,KAAKyqB,QAAQ,eAKf,GAAIspD,EAAU/zE,KAAK62E,cAWjB,OAVI9C,EAAU/zE,KAAK+2E,aAAehD,EAAU/zE,KAAK82E,aAAc92E,KAAKw1E,WAAWj2B,OAAO5oB,GAAa32B,KAAKw1E,WAAWvG,YAAYt4C,GAC3H32B,KAAKg4E,aAAah4E,KAAKsqB,aAAai1B,OAAO5oB,GAC/C32B,KAAKs1E,YAAY/1B,OAAO5oB,GACxB32B,KAAK01E,aAAan2B,OAAO5oB,GACzB32B,KAAK+tB,aAAawxB,OAAO5oB,GACzB32B,KAAKg6E,sBAAwBh6E,KAAKw4E,6BAClCx4E,KAAK0hB,6BAEL1hB,KAAKyqB,QAAQ,eAKXspD,EAAU/zE,KAAK+2E,aACjB/2E,KAAKw1E,WAAWj2B,OAAO5oB,GACnB32B,KAAKg4E,aAAah4E,KAAKsqB,aAAai1B,OAAO5oB,IACtCo9C,EAAU/zE,KAAK82E,cACpB92E,KAAKi6E,gBAAkBlG,EAAU/zE,KAAK42E,eAAiB52E,KAAKg4E,cAAah4E,KAAKsqB,aAAai1B,OAAO5oB,IAC7Fo9C,EAAU/zE,KAAK+2E,aAAehD,EAAU/zE,KAAK42E,gBAClD52E,KAAKg4E,aAAah4E,KAAKsqB,aAAai1B,OAAO5oB,GAG7Co9C,EAAU/zE,KAAK02E,gBACjB12E,KAAK+tB,aAAawxB,OAAO5oB,GACzB32B,KAAK0hB,wBACL1hB,KAAKg6E,sBAAwBh6E,KAAKw4E,8BAGhCzE,GAAW/zE,KAAK22E,cAAgB32E,KAAKk3E,sBACvCl3E,KAAK01E,aAAan2B,OAAO5oB,GAGvBo9C,GAAW/zE,KAAK22E,cAAgB32E,KAAKi3E,qBACvCj3E,KAAKs1E,YAAY/1B,OAAO5oB,GAG1B32B,KAAKyqB,QAAQ,oBAhGXzqB,KAAKy3E,UAAY1D,GAmGrB/zE,KAAKk6E,UAAY,WACf,IAAInrE,EAAS/O,KAAK+gB,QAAQ4xC,kBAAoB3yD,KAAKgtB,WAC/CqpD,EAAYr2E,KAAKmgE,UAAYngE,KAAKgtB,WAClCmtD,EAAgBtzE,KAAKM,IAAIkvE,EAAWxvE,KAAKC,KAAK9G,KAAKogE,WAAa,GAAKpgE,KAAKgtB,WAAYje,IAAW/O,KAAK+1E,aAAaO,GAAKt2E,KAAK83E,cAAgB,GAC7I93E,KAAK21E,eAAcwE,GAAiBn6E,KAAKk3B,WAAW1N,aACpDxpB,KAAKo6E,iBAAmBD,EAAgBn6E,KAAKo6E,kBAAiBD,EAAgBn6E,KAAKo6E,iBACvF,IAAI5sD,EAAUze,EAASsnE,EAEvB,GAAI8D,GAAiBn6E,KAAKm6E,eAAiBn6E,KAAKi2E,MAAMlnE,QAAU/O,KAAKm6E,eAAiB3sD,GAAWxtB,KAAK41E,SAAU,CAC1GpoD,GAAWxtB,KAAK41E,WAClB51E,KAAK41E,SAAWpoD,EAChBxtB,KAAKi3B,WAAW07C,WAAWnlD,IAG7B,IAAIy/B,EAAIjtD,KAAKuiB,UAAU/T,YACvBxO,KAAKuiB,UAAU1U,MAAMkB,OAASorE,EAAgB,KAC9Cn6E,KAAK63E,mBAAkB,EAAM73E,KAAKq6E,aAAcptB,EAAGktB,GACnDn6E,KAAKm6E,cAAgBA,EAErBn6E,KAAKyqB,QAAQ,cAIjBzqB,KAAKi4E,oBAAsB,WACzB,IAAIl3D,EAAU/gB,KAAK+gB,QACfmf,EAAOlgC,KAAKi2E,MACZqE,EAAiBp6C,EAAKnxB,QAAU,EAAI/O,KAAKgtB,WAEzCqpD,EADcr2E,KAAK+gB,QAAQ4xC,kBACD3yD,KAAKgtB,WAC/ButD,EAAcv6E,KAAKw6E,kBACnBC,GAAeH,IAAmBt6E,KAAKk5E,0BAA4Bh5C,EAAKi2C,cAAgBoE,EAAc,EAAIv6E,KAAKisE,SAAW,GAC1HyO,EAAiB16E,KAAK21E,eAAiB8E,EAEvCC,IACF16E,KAAK21E,aAAe8E,EACpBz6E,KAAKk3B,WAAWy7C,WAAW8H,IAG7B,IAAIE,EAAgB36E,KAAK41E,SAErB51E,KAAKmgE,WAAangE,KAAKgtB,WAAa,GAAGhtB,KAAKk6E,YAChD,IAAIv+D,EAAS3b,KAAK8P,UAAY9P,KAAKgtB,WAC/B8+C,EAAY5rC,EAAKg2C,eAAiBl2E,KAAKgtB,WACvCg8C,GAAiBhpE,KAAKmgE,WAAangE,KAAKy5E,gBAAkBv5C,EAAKg2C,eAAiBl2E,KAAKgtB,YAAchtB,KAAKy5E,eAAiB,EAC7HpD,GAAarN,EACb,IAAIgQ,EAAKh5E,KAAK+1E,aACd/1E,KAAK+gB,QAAQurC,aAAazlD,KAAKC,KAAKkyE,EAAGv2D,IAAK5b,KAAKM,IAAInH,KAAK8P,UAAWumE,EAAYn2C,EAAKg2C,eAAiB8C,EAAGn2D,UAC1G7iB,KAAK+gB,QAAQ2rC,cAAc7lD,KAAKC,KAAKkyE,EAAG7pE,KAAMtI,KAAKM,IAAInH,KAAK+P,WAAYwqE,EAAc,EAAIv6E,KAAKisE,SAAW/rC,EAAKi2C,cAAgB6C,EAAGz1D,SAClI,IAAIiK,GAAW8sD,IAAmBt6E,KAAKs5E,0BAA4Bp5C,EAAKg2C,eAAiBG,EAAYrN,EAAgB,GAAKhpE,KAAK8P,UAAYkpE,EAAGv2D,KAC1Im4D,EAAiBD,IAAkBntD,EAEnCotD,IACF56E,KAAK41E,SAAWpoD,EAChBxtB,KAAKi3B,WAAW07C,WAAWnlD,IAG7B,IAGI0/C,EAAgB2N,EAHhBC,EAAYj0E,KAAKslE,KAAKL,EAAY9rE,KAAKgtB,YAAc,EACrDuW,EAAW18B,KAAKC,IAAI,EAAGD,KAAKwiC,OAAOrpC,KAAK8P,UAAY6L,GAAU3b,KAAKgtB,aACnEwW,EAAUD,EAAWu3C,EAErB9tD,EAAahtB,KAAKgtB,WACtBuW,EAAWxiB,EAAQoxC,oBAAoB5uB,EAAU,GACjD,IAAI4D,EAAWpmB,EAAQqmB,YAAY7D,GAE/B4D,IACF5D,EAAW4D,EAAS1gC,MAAMme,KAG5BsoD,EAAiBnsD,EAAQuK,oBAAoBiY,EAAU,GACvDs3C,EAAiB95D,EAAQ4wC,aAAapuB,GAAYvW,EAClDwW,EAAU38B,KAAKM,IAAI4Z,EAAQoxC,oBAAoB3uB,EAAS,GAAIziB,EAAQmK,YAAc,GAClF4gD,EAAY5rC,EAAKg2C,eAAiBn1D,EAAQ4wC,aAAanuB,GAAWxW,EAAa6tD,EAC/El/D,EAAS3b,KAAK8P,UAAYo9D,EAAiBlgD,EAC3C,IAAI+mD,EAAU,EAyBd,OAxBI/zE,KAAKitB,YAAYpe,OAAS0rE,IAAaxG,EAAU/zE,KAAKm3E,kBAEtDuD,GAAkBE,KACpB7G,EAAU/zE,KAAK63E,mBAAkB,EAAM73E,KAAK8qE,YAAa5qC,EAAKrxB,MAAOqxB,EAAKnxB,QAE1E/O,KAAKyqB,QAAQ,8BAETmwD,IAAgBL,EAAcv6E,KAAKw6E,oBAGzCx6E,KAAKitB,YAAc,CACjBpe,MAAO0rE,EACPvO,QAAShsE,KAAKisE,SACd1oC,SAAUA,EACV2pC,eAAgBA,EAChB1pC,QAASA,EACTxW,WAAYA,EACZE,eAAgBltB,KAAKktB,eACrB4+C,UAAWA,EACXuK,UAAWA,EACX16D,OAAQA,EACRwvD,aAAcn+C,EAAanmB,KAAKC,IAAI,EAAGD,KAAKslE,MAAMxwD,EAASukB,EAAKnxB,OAASmxB,EAAKg2C,gBAAkBlpD,IAAe,EAC/Gje,OAAQ/O,KAAKi2E,MAAMC,gBAEdnC,GAGT/zE,KAAKi6E,aAAe,WAClB,GAAKj6E,KAAKu3E,cAAV,CACA,IAAIh0C,EAAWvjC,KAAKu3E,cAAch0C,SAC9BC,EAAUxjC,KAAKu3E,cAAc/zC,QACjCxjC,KAAKu3E,cAAgB,KACrB,IAAItqD,EAAcjtB,KAAKitB,YAEvB,KAAIsW,EAAWtW,EAAYuW,QAAU,GAIjCA,EAAUvW,EAAYsW,UAI1B,OAAIC,IAAY0T,EAAAA,GACVl3C,KAAKg4E,aAAah4E,KAAKsqB,aAAai1B,OAAOtyB,QAC/CjtB,KAAKw1E,WAAWj2B,OAAOtyB,KAIzBjtB,KAAKw1E,WAAW3V,YAAY5yC,EAAasW,EAAUC,IAC5C,KAGTxjC,KAAKw6E,gBAAkB,WACrB,IAAIO,EAAY/6E,KAAK+gB,QAAQ6rC,iBAE7B,OADI5sD,KAAKu+B,iBAAmBv+B,KAAK+gB,QAAQ+e,eAAci7C,GAAa,GAC7Dl0E,KAAKC,IAAI9G,KAAKi2E,MAAME,cAAgB,EAAIn2E,KAAKisE,SAAUplE,KAAKwiC,MAAM0xC,EAAY/6E,KAAKktB,kBAG5FltB,KAAK4gE,mBAAqB,WACxB5gE,KAAK01E,aAAa/I,WAAW3sE,KAAK+gB,QAAQ4pC,YAAW,IACrD3qD,KAAKu2E,MAAMt6D,SAASjc,KAAKk3E,sBAG3Bl3E,KAAK6gE,kBAAoB,WACvB7gE,KAAKs1E,YAAY3I,WAAW3sE,KAAK+gB,QAAQ4pC,cACzC3qD,KAAKu2E,MAAMt6D,SAASjc,KAAKi3E,qBAG3Bj3E,KAAK+pD,oBAAsB,SAAUnlC,EAAK9X,GACxC9M,KAAKsqB,aAAay/B,oBAAoBnlC,EAAK9X,IAG7C9M,KAAKgqD,uBAAyB,SAAUplC,EAAK9X,GAC3C9M,KAAKsqB,aAAa0/B,uBAAuBplC,EAAK9X,IAGhD9M,KAAK8gE,kBAAoB,SAAU73B,GACjCjpC,KAAKu2E,MAAMt6D,SAASjc,KAAK42E,gBAG3B52E,KAAK+qD,eAAiB,SAAUC,GAC9BhrD,KAAKsqB,aAAaygC,eAAeC,GACjChrD,KAAKu2E,MAAMt6D,SAASjc,KAAK42E,gBAG3B52E,KAAK4/D,aAAe,WAClB5/D,KAAKu2E,MAAMt6D,SAASjc,KAAK02E,gBAG3B12E,KAAKy/D,WAAa,WAChBz/D,KAAK+tB,aAAa0xC,cAGpBz/D,KAAKu/D,WAAa,WAChBv/D,KAAK+tB,aAAawxC,cAGpBv/D,KAAKy7D,wBAA0B,SAAU12C,EAAQwf,EAAM5oB,GACrD3b,KAAKwmB,qBAAqBzB,EAAQpJ,GAClC3b,KAAKwmB,qBAAqB+d,EAAM5oB,IAGlC3b,KAAKwmB,qBAAuB,SAAU7B,EAAQhJ,EAAQq/D,GACpD,GAAkC,IAA9Bh7E,KAAKi2E,MAAMC,eAAf,CACA,IAAIvvE,EAAM3G,KAAK+tB,aAAaikD,iBAAiBrtD,GACzCxV,EAAOxI,EAAIwI,KACXsT,EAAM9b,EAAI8b,IACVw4D,EAAYD,GAAeA,EAAYv4D,KAAO,EAC9Cy4D,EAAeF,GAAeA,EAAYn4D,QAAU,EACpD/S,EAAY9P,KAAK81E,iBAAmB91E,KAAK+gB,QAAQyrC,eAAiBxsD,KAAK8P,UAEvEA,EAAYmrE,EAAYx4D,GACtB9G,GAAU7L,EAAYmrE,EAAYx4D,EAAMziB,KAAKgtB,aAAYvK,GAAO9G,EAAS3b,KAAKi2E,MAAMC,gBAC5E,IAARzzD,IAAWA,GAAOziB,KAAK+1E,aAAatzD,KACxCziB,KAAK+gB,QAAQurC,aAAa7pC,IACjB3S,EAAY9P,KAAKi2E,MAAMC,eAAiBgF,EAAez4D,EAAMziB,KAAKgtB,aACvErR,GAAU7L,EAAY9P,KAAKi2E,MAAMC,eAAiBgF,EAAez4D,EAAMziB,KAAKgtB,aAAYvK,GAAO9G,EAAS3b,KAAKi2E,MAAMC,gBACvHl2E,KAAK+gB,QAAQurC,aAAa7pC,EAAMziB,KAAKgtB,WAAahtB,KAAKi2E,MAAMC,iBAG/D,IAAInmE,EAAa/P,KAAK+P,WAElBA,EAAaZ,GACXA,EAAOnP,KAAKisE,SAAW,EAAIjsE,KAAKitB,YAAYC,iBAAgB/d,GAAQnP,KAAK+1E,aAAa5mE,MAC1FnP,KAAK+gB,QAAQ2rC,cAAcv9C,IAClBY,EAAa/P,KAAKi2E,MAAME,cAAgBhnE,EAAOnP,KAAKktB,eAC7DltB,KAAK+gB,QAAQ2rC,cAAc7lD,KAAKwiC,MAAMl6B,EAAOnP,KAAKktB,eAAiBltB,KAAKi2E,MAAME,gBACrEpmE,GAAc/P,KAAKisE,UAAY98D,EAAOY,EAAa/P,KAAKktB,gBACjEltB,KAAK+gB,QAAQ2rC,cAAc,KAI/B1sD,KAAKwsD,aAAe,WAClB,OAAOxsD,KAAK+gB,QAAQyrC,gBAGtBxsD,KAAK2sD,cAAgB,WACnB,OAAO3sD,KAAK+gB,QAAQ4rC,iBAGtB3sD,KAAKslE,gBAAkB,WACrB,OAAOtlE,KAAK8P,UAAY9P,KAAKgtB,YAG/BhtB,KAAKqlE,mBAAqB,WACxB,OAAOx+D,KAAKC,IAAI,EAAGD,KAAKsF,OAAOnM,KAAK8P,UAAY9P,KAAKi2E,MAAMC,gBAAkBl2E,KAAKgtB,YAAc,IAGlGhtB,KAAKwlE,YAAc,SAAU5gD,GAC3B5kB,KAAK+gB,QAAQurC,aAAa1nC,EAAM5kB,KAAKgtB,aAGvChtB,KAAK4lE,YAAc,SAAUjhD,EAAQw2D,GACd,iBAAVx2D,IAAoBA,EAAS,CACtCC,IAAKD,EACLG,OAAQ,IAEV,IAAIne,EAAM3G,KAAK+tB,aAAaikD,iBAAiBrtD,GACzCkV,EAAI75B,KAAKi2E,MAAMC,eAAiBl2E,KAAKgtB,WACrCrR,EAAShV,EAAI8b,IAAMoX,GAAKshD,GAAa,GAEzC,OADAn7E,KAAK+gB,QAAQurC,aAAa3wC,GACnBA,GAGT3b,KAAKo7E,MAAQ,EAEbp7E,KAAKq7E,WAAa,SAAUC,EAAWC,GACrC,IAIyBvzD,EAAGwzD,EAJxB75E,EAAI,EACJC,EAAI5B,KAAKo7E,MACTK,EAAQ,GAMZ,IAAK95E,EAAI,EAAGA,EAAIC,IAAKD,EACnB85E,EAAM15E,MALiBimB,EAKPrmB,EAAI3B,KAAKo7E,MALCI,EAKMF,GAAWC,EAAUD,IAJxCz0E,KAAKuL,IAAI4V,EAAI,EAAG,GAAK,GAAKwzD,IAOzC,OAAOC,GAGTz7E,KAAKylE,aAAe,SAAUhnC,EAAMinC,EAAQC,EAASxkE,GACnD,IAIIwa,EAJM3b,KAAK+tB,aAAaikD,iBAAiB,CAC3CptD,IAAK6Z,EACL3Z,OAAQ,IAEOrC,IACbijD,IAAQ/pD,GAAU3b,KAAKi2E,MAAMC,eAAiB,GAClD,IAAIwF,EAAgB17E,KAAK8P,UACzB9P,KAAK+gB,QAAQurC,aAAa3wC,IACV,IAAZgqD,GAAmB3lE,KAAK07D,iBAAiBggB,EAAev6E,IAG9DnB,KAAK07D,iBAAmB,SAAU4f,EAAWn6E,GAC3C,IAAIo6E,EAAUv7E,KAAK8P,UACnB,GAAK9P,KAAKq4E,gBAAV,CAEA,IAAIh8D,EAAQrc,KAEZ,GAAIs7E,GAAaC,EAAjB,CAEA,GAAIv7E,KAAK81E,iBAAkB,CACzB,IAAI6F,EAAW37E,KAAK81E,iBAAiB2F,MAErC,GAAIE,EAASp7E,SACX+6E,EAAYK,EAAS,KACJJ,EAAS,OAI9B,IAAIE,EAAQp/D,EAAMg/D,WAAWC,EAAWC,GAExCv7E,KAAK81E,iBAAmB,CACtB3xE,KAAMm3E,EACN19B,GAAI29B,EACJE,MAAOA,GAETxtD,cAAcjuB,KAAK47E,QAEnBv/D,EAAM0E,QAAQurC,aAAamvB,EAAM/3D,SAEjCrH,EAAM0E,QAAQsrC,WAAakvB,EAC3Bv7E,KAAK47E,OAAS1tD,aAAY,WACpButD,EAAMl7E,QACR8b,EAAM0E,QAAQurC,aAAamvB,EAAM/3D,SAEjCrH,EAAM0E,QAAQsrC,WAAakvB,GACP,MAAXA,GACTl/D,EAAM0E,QAAQsrC,YAAc,EAE5BhwC,EAAM0E,QAAQurC,aAAaivB,GAE3BA,EAAU,OAEVl/D,EAAMu/D,OAAS3tD,cAAc5R,EAAMu/D,QACnCv/D,EAAMy5D,iBAAmB,KACzB30E,GAAYA,OAEb,OAGLnB,KAAK+/D,UAAY,SAAUjwD,GACrB9P,KAAK8P,YAAcA,IACrB9P,KAAKu2E,MAAMt6D,SAASjc,KAAK62E,eACzB72E,KAAK8P,UAAYA,IAIrB9P,KAAKggE,UAAY,SAAUjwD,GACrB/P,KAAK+P,aAAeA,IAAY/P,KAAK+P,WAAaA,GACtD/P,KAAKu2E,MAAMt6D,SAASjc,KAAKm3E,kBAG3Bn3E,KAAK67E,SAAW,SAAU54E,EAAG+iB,GAC3BhmB,KAAK+gB,QAAQurC,aAAatmC,GAC1BhmB,KAAK+gB,QAAQ2rC,cAAc1mC,IAG7BhmB,KAAK0oB,SAAW,SAAUtR,EAAQC,GAChCA,GAAUrX,KAAK+gB,QAAQurC,aAAatsD,KAAK+gB,QAAQyrC,eAAiBn1C,GAClED,GAAUpX,KAAK+gB,QAAQ2rC,cAAc1sD,KAAK+gB,QAAQ4rC,gBAAkBv1C,IAGtEpX,KAAKwoB,eAAiB,SAAUpR,EAAQC,GACtC,OAAIA,EAAS,GAAKrX,KAAK+gB,QAAQyrC,gBAAkB,EAAIxsD,KAAK+1E,aAAatzD,MACnEpL,EAAS,GAAKrX,KAAK+gB,QAAQyrC,eAAiBxsD,KAAKi2E,MAAMC,eAAiBl2E,KAAKitB,YAAYopD,WAAa,EAAIr2E,KAAK+1E,aAAalzD,SAC5HzL,EAAS,GAAKpX,KAAK+gB,QAAQ4rC,iBAAmB,EAAI3sD,KAAK+1E,aAAa5mE,OACpEiI,EAAS,GAAKpX,KAAK+gB,QAAQ4rC,gBAAkB3sD,KAAKi2E,MAAME,cAAgBn2E,KAAKitB,YAAYpe,OAAS,EAAI7O,KAAK+1E,aAAaxyD,YAA5H,MAGFvjB,KAAKorB,yBAA2B,SAAUnoB,EAAG+iB,GAC3C,IAAI81D,EAAY97E,KAAKgjB,SAASR,wBAC1B0mB,EAAUjmC,EAAIjD,KAAK+P,WAAa+rE,EAAU3sE,KAAOnP,KAAKisE,SACtDtwD,EAASutB,EAAUlpC,KAAKktB,eACxBtI,EAAM/d,KAAKsF,OAAO6Z,EAAIhmB,KAAK8P,UAAYgsE,EAAUr5D,KAAOziB,KAAKgtB,YAC7DkU,EAAMr6B,KAAKwiC,MAAM1tB,GACrB,MAAO,CACLiJ,IAAKA,EACLE,OAAQoc,EACRqhB,KAAM5mC,EAASulB,EAAM,EAAI,GAAK,EAC9BgI,QAASA,IAIblpC,KAAK+lB,wBAA0B,SAAU9iB,EAAG+iB,GAC1C,IAAI81D,EAAY97E,KAAKgjB,SAASR,wBAC1B0mB,EAAUjmC,EAAIjD,KAAK+P,WAAa+rE,EAAU3sE,KAAOnP,KAAKisE,SACtD/qC,EAAMr6B,KAAKwiC,MAAMH,EAAUlpC,KAAKktB,gBAChCtI,GAAOoB,EAAIhmB,KAAK8P,UAAYgsE,EAAUr5D,KAAOziB,KAAKgtB,WACtD,OAAOhtB,KAAK+gB,QAAQ8mB,yBAAyBjjB,EAAK/d,KAAKC,IAAIo6B,EAAK,GAAIgI,IAGtElpC,KAAK+7E,wBAA0B,SAAUn3D,EAAKE,GAC5C,IAAIg3D,EAAY97E,KAAKgjB,SAASR,wBAC1B7b,EAAM3G,KAAK+gB,QAAQgjB,yBAAyBnf,EAAKE,GACjD7hB,EAAIjD,KAAKisE,UAAYjsE,KAAK+gB,QAAQqoB,aAAatK,UAAUn4B,EAAIie,IAAKA,GAAO5kB,KAAK+gB,QAAQqoB,aAAanI,WAAWt6B,EAAIme,QAAUje,KAAKwiC,MAAM1iC,EAAIme,OAAS9kB,KAAKktB,iBACzJlH,EAAIrf,EAAIie,IAAM5kB,KAAKgtB,WACvB,MAAO,CACLgvD,MAAOF,EAAU3sE,KAAOlM,EAAIjD,KAAK+P,WACjCksE,MAAOH,EAAUr5D,IAAMuD,EAAIhmB,KAAK8P,YAIpC9P,KAAKw/D,eAAiB,WACpBjjD,EAAIxP,YAAY/M,KAAKuiB,UAAW,cAGlCviB,KAAK0/D,cAAgB,WACnBnjD,EAAIvP,eAAehN,KAAKuiB,UAAW,cAGrCviB,KAAK2kE,gBAAkB,SAAUz1D,GAC1BlP,KAAK84E,eAAc94E,KAAK84E,aAAe,CAC1CoD,qBAAsBl8E,KAAKyhB,sBAC3B7T,QAAS5N,KAAKw6D,SAAS3sD,MAAMD,UAE/B5N,KAAKyhB,uBAAwB,EAC7BlF,EAAIxP,YAAY/M,KAAKw6D,SAAU,mBAC/Bx6D,KAAKw6D,SAAS3sD,MAAMD,QAAU,GAC9B5N,KAAK0hB,yBAGP1hB,KAAK4kE,mBAAqB,SAAU7nD,GAClC/c,KAAK0hB,yBAGP1hB,KAAK6kE,gBAAkB,WAChB7kE,KAAK84E,eACVv8D,EAAIvP,eAAehN,KAAKw6D,SAAU,mBAClCx6D,KAAKyhB,sBAAwBzhB,KAAK84E,aAAaoD,qBAC/Cl8E,KAAKw6D,SAAS3sD,MAAMD,QAAU5N,KAAK84E,aAAalrE,QAChD5N,KAAK84E,aAAe,OAGtB94E,KAAKw+D,SAAW,SAAUC,EAAO5/C,GAC/B,IAAIxC,EAAQrc,KAQZ,GANAA,KAAKm8E,SAAW1d,EAEhBpiD,EAAMsV,eAAe,cAAe,CAClC8sC,MAAOA,IAGJA,GAAyB,iBAATA,EAInBhoC,EAAUgoC,OAJ4B,CACtC,IAAIv8D,EAAau8D,GAASz+D,KAAKkzB,SAASurC,MAAMzqC,aAC9C2C,EAAOL,WAAW,CAAC,QAASp0B,GAAau0B,GAK3C,SAASA,EAAUt2B,GACjB,GAAIkc,EAAM8/D,UAAY1d,EAAO,OAAO5/C,GAAMA,IAC1C,IAAK1e,IAAWA,EAAOi8E,SAAU,MAAM,IAAIzoD,MAAM,wBAA0B8qC,EAAQ,6BACnFliD,EAAI5O,gBAAgBxN,EAAOyN,QAASzN,EAAOi8E,SAAU//D,EAAMkG,UAAU4S,eACjE9Y,EAAMoiD,OAAOliD,EAAIvP,eAAeqP,EAAMkG,UAAWlG,EAAMoiD,MAAM2d,UACjE,IAAIpQ,EAAU,YAAa7rE,EAASA,EAAO6rE,QAAU,YAAc3vD,EAAMoiD,OAAS,IAAM,EAAIpiD,EAAM4vD,SAC9F5vD,EAAM4vD,UAAYD,GAAW3vD,EAAM4vD,UAAU5vD,EAAMqwD,WAAWV,GAClE3vD,EAAMggE,OAASl8E,EAAOi8E,SACtB//D,EAAMoiD,MAAQt+D,EACdoc,EAAIxP,YAAYsP,EAAMkG,UAAWpiB,EAAOi8E,UACxC7/D,EAAIpP,YAAYkP,EAAMkG,UAAW,WAAYpiB,EAAOm8E,QAEhDjgE,EAAM45D,QACR55D,EAAM45D,MAAMpnE,MAAQ,EAEpBwN,EAAMq7D,oBAGRr7D,EAAMsV,eAAe,cAAe,CAClC8sC,MAAOt+D,IAGT0e,GAAMA,MAIV7e,KAAK0+D,SAAW,WACd,OAAO1+D,KAAKm8E,UAGdn8E,KAAKomB,SAAW,SAAUvY,EAAOR,GAC/BkP,EAAIpP,YAAYnN,KAAKuiB,UAAW1U,GAAmB,IAAZR,IAGzCrN,KAAKgnB,WAAa,SAAUnZ,GAC1B0O,EAAIvP,eAAehN,KAAKuiB,UAAW1U,IAGrC7N,KAAKkvB,eAAiB,SAAUrhB,GAC1B7N,KAAKgjB,SAASnV,MAAM8W,QAAU9W,IAAO7N,KAAKgjB,SAASnV,MAAM8W,OAAS9W,IAGxE7N,KAAKu8E,eAAiB,SAAUnsD,GAC9BpwB,KAAKgjB,SAASnV,MAAM8W,OAASyL,GAG/BpwB,KAAK2pB,QAAU,WACb3pB,KAAKw1E,WAAW7rD,UAChB3pB,KAAK+tB,aAAapE,aAEnBloB,KAAK0zE,EAAgB5zE,WACxBo1B,EAAO7C,cAAcqhD,EAAgB5zE,UAAW,WAAY,CAC1D6mE,eAAgB,CACdp0C,cAAc,GAEhBuK,eAAgB,CACd70B,IAAK,SAAapB,GACZtI,KAAKw1E,WAAW30C,kBAAkBv4B,IAAQtI,KAAKu2E,MAAMt6D,SAASjc,KAAK+2E,cAEzE/iD,cAAc,GAEhB0uC,gBAAiB,CACfh5D,IAAK,WACH1J,KAAKq3E,sBAEPrjD,cAAc,GAEhBq0C,kBAAmB,CACjB3+D,IAAK,WACH1J,KAAKq3E,sBAEPrjD,aAAc,IAEhBs0C,YAAa,CACX5+D,IAAK,SAAa+W,GACE,iBAAPA,IAAiBzgB,KAAKo4E,mBAAqB33D,GACtDzgB,KAAKm4E,mBAAqB13D,EAC1BzgB,KAAKq3E,sBAEP5tE,IAAK,WACH,OAAOzJ,KAAKm4E,kBAAoBn4E,KAAKo4E,qBAGzC1P,WAAY,CACVh/D,IAAK,SAAa4f,GAChBtpB,KAAKwrB,QAAQ3d,MAAMmB,QAAUsa,EAAO,QAAU,OAC9CtpB,KAAKu2E,MAAMt6D,SAASjc,KAAKy2E,aACzBz2E,KAAKq1E,kBAEPrhD,cAAc,GAEhBu0C,gBAAiB,CACf7+D,IAAK,SAAa4f,GAChB/M,EAAIpP,YAAYnN,KAAKwrB,QAAS,wBAAyBlC,IAEzD0K,cAAc,GAEhBw0C,gBAAiB,CACf9+D,IAAK,SAAa4f,GAChBtpB,KAAKsqB,aAAa24C,mBAAmB35C,IAEvC0K,cAAc,GAEhBy0C,gBAAiB,CACf/+D,IAAK,SAAa4f,GAChBtpB,KAAKsqB,aAAa+hD,mBAAmB/iD,GACrCtpB,KAAKu2E,MAAMt6D,SAASjc,KAAK42E,gBAE3B5iD,cAAc,GAEhB20C,oBAAqB,CACnBj/D,IAAK,SAAa4f,GACZtpB,KAAKw1E,WAAWjT,uBAAuBj5C,IAAOtpB,KAAKu2E,MAAMt6D,SAASjc,KAAK+2E,cAE7E/iD,cAAc,GAEhBm0C,oBAAqB,CACnBz+D,IAAK,SAAao4D,GAChB,IAAK9hE,KAAKy4E,qBAIR,OAHAz4E,KAAKy4E,qBAAuBl8D,EAAI3R,cAAc,OAC9C5K,KAAKy4E,qBAAqB3rE,UAAY,8BACtC9M,KAAKwrB,QAAQ1d,YAAY9N,KAAKy4E,sBAIhCz4E,KAAKy4E,qBAAqB5qE,MAAMmB,QAAU8yD,EAAkB,GAAK,OAC7D9hE,KAAK+tB,aAAaq5C,WAAWpnE,KAAKw4E,8BAExCxkD,cAAc,EACd1rB,OAAO,GAET2/D,wBAAyB,CACvBv+D,IAAK,SAAa+W,GACXzgB,KAAKk5E,0BAA6Bl5E,KAAK21E,cAAc31E,KAAKu2E,MAAMt6D,SAASjc,KAAK62E,gBAErF7iD,cAAc,GAEhBk0C,wBAAyB,CACvBx+D,IAAK,SAAa+W,GACXzgB,KAAKs5E,0BAA6Bt5E,KAAK41E,UAAU51E,KAAKu2E,MAAMt6D,SAASjc,KAAK62E,gBAEjF7iD,cAAc,GAEhB40C,SAAU,CACRl/D,IAAK,SAAaw2B,GACG,iBAARA,IAAkBA,GAAc,MAC3ClgC,KAAKuiB,UAAU1U,MAAM+6D,SAAW1oC,EAChClgC,KAAKw3E,kBAEPxjD,aAAc,IAEhB60C,WAAY,CACVn/D,IAAK,SAAapF,GAChBtE,KAAKuiB,UAAU1U,MAAMg7D,WAAavkE,EAClCtE,KAAKw3E,mBAGT1O,SAAU,CACRp/D,IAAK,SAAa+W,GAChBzgB,KAAKk+D,eAGT6K,SAAU,CACRr/D,IAAK,SAAa+W,GAChBzgB,KAAKk+D,eAGTse,eAAgB,CACd9yE,IAAK,SAAa+W,GAChBzgB,KAAKk+D,cAEPlqC,aAAc,GAEhBg1C,cAAe,CACbt/D,IAAK,SAAa+W,GAChBA,GAAOA,GAAO,EACVzgB,KAAKy5E,gBAAkBh5D,IAC3BzgB,KAAKy5E,eAAiBh5D,EACtBzgB,KAAKu2E,MAAMt6D,SAASjc,KAAK62E,iBAE3B7iD,aAAc,EACdT,YAAY,GAEd01C,iBAAkB,CAChBv/D,IAAK,SAAa+W,GAChBzgB,KAAKsqB,aAAayhD,cAAgBtrD,EAClCzgB,KAAKu2E,MAAMt6D,SAASjc,KAAK42E,iBAG7BnY,MAAO,CACL/0D,IAAK,SAAa+W,GAChBzgB,KAAKw+D,SAAS/9C,IAEhBhX,IAAK,WACH,OAAOzJ,KAAKm8E,UAAYn8E,KAAKy+D,OAE/BzqC,aAAc,mBACdT,YAAY,KAGhB5wB,EAAQwyE,gBAAkBA,KAE5BnyE,IAAI9C,OAAO,2BAA4B,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,wBAAyB,eAAe,SAAU4B,EAAUa,EAASxC,GACzK,aAEA,IAAIoR,EAAMzP,EAAS,cACfwyB,EAAMxyB,EAAS,cACf4vB,EAAe5vB,EAAS,wBAAwB4vB,aAChDiF,EAAS70B,EAAS,aAmBtB,SAASg3C,EAAa2jC,EAAW75E,GAC/B,IAAI85E,EAlBN,SAAqBD,EAAW75E,GAC9B,IAAIwyB,EAASxyB,EAAImpB,IACGuI,EAAI7C,WAAWgrD,GAEnC,IACE,OAAO,IAAIE,KAAK,CAACvnD,GAAS,CACxB,KAAQ,2BAEV,MAAO5f,GAEP,IACIonE,EAAc,IADA38E,OAAO48E,aAAe58E,OAAO68E,mBAAqB78E,OAAO88E,gBAG3E,OADAH,EAAYlvC,OAAOtY,GACZwnD,EAAYI,QAAQ,2BAKlBC,CAAYR,EAAW75E,GAE9Bs6E,GADMj9E,OAAOk9E,KAAOl9E,OAAOm9E,WACbC,gBAAgBX,GAClC,OAAO,IAAIY,OAAOJ,GAGpB,IAAIK,EAAe,SAAsBC,EAAoB56E,EAAK66E,EAAWhB,EAAWiB,GAMtF,GALA19E,KAAK29E,gBAAkB39E,KAAK29E,gBAAgB74E,KAAK9E,MACjDA,KAAK49E,eAAiB59E,KAAK49E,eAAe94E,KAAK9E,MAC/CA,KAAK69E,UAAY79E,KAAK69E,UAAU/4E,KAAK9E,MACjC8B,EAASg8E,YAAch8E,EAASi8E,QAAOj8E,EAASi8E,MAAQj8E,EAASg8E,WAEjEnnD,EAAOltB,IAAI,cAAgB3H,EAASi8E,MACtCtB,EAAYA,GAAa9lD,EAAOb,UAAUlzB,EAAIC,GAAI,cAC7C,CACL,IAAIm7E,EAAgBh+E,KAAKi+E,eACzBxB,EAAYA,GAAauB,EAAcl8E,EAASi8E,MAAM,uBAAwB,KAAM,MACpF,IAAIG,EAAO,GACXV,EAAmB11E,SAAQ,SAAU/G,GACnCm9E,EAAKn9E,GAAMi9E,EAAcl8E,EAASi8E,MAAMh9E,EAAI,KAAM,KAAK2B,QAAQ,kBAAmB,QAItF1C,KAAKq+C,QAAUvF,EAAa2jC,EAAW75E,GAEnC86E,GACF19E,KAAKkxB,KAAK,gBAAiBwsD,GAG7B19E,KAAKq+C,QAAQ5kC,YAAY,CACvBob,MAAM,EACNqpD,KAAMA,EACN/9E,OAAQyC,EAAIC,GACZ46E,UAAWA,IAEbz9E,KAAKm+E,WAAa,EAClBn+E,KAAKo+E,UAAY,GACjBp+E,KAAKq+C,QAAQggC,UAAYr+E,KAAK69E,YAGhC,WACEtsE,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK69E,UAAY,SAAUroE,GACzB,IAAIke,EAAMle,EAAEsE,KAEZ,OAAQ4Z,EAAI5e,MACV,IAAK,QACH9U,KAAKyqB,QAAQiJ,EAAIpvB,KAAM,CACrBwV,KAAM4Z,EAAI5Z,OAGZ,MAEF,IAAK,OACH,IAAI3Y,EAAWnB,KAAKo+E,UAAU1qD,EAAI7wB,IAE9B1B,IACFA,EAASuyB,EAAI5Z,aACN9Z,KAAKo+E,UAAU1qD,EAAI7wB,KAG5B,MAEF,IAAK,QACH7C,KAAKyzB,YAAYC,EAAI5Z,MACrB,MAEF,IAAK,MACH7Z,OAAOW,SAAWA,QAAQ8/C,KAAO9/C,QAAQ8/C,IAAI//C,MAAMC,QAAS8yB,EAAI5Z,QAKtE9Z,KAAKyzB,YAAc,SAAU6qD,GAC3Br+E,OAAOW,SAAWA,QAAQC,OAASD,QAAQC,MAAMy9E,IAGnDt+E,KAAKi+E,eAAiB,SAAU7sD,GAC9B,OAAOkD,EAAI7C,WAAWL,IAGxBpxB,KAAKmsD,UAAY,WACfnsD,KAAKyqB,QAAQ,YAAa,IAE1BzqB,KAAKu+E,WAAa,KAClBv+E,KAAKq+C,QAAQ8N,YACbnsD,KAAKq+C,QAAU,KACXr+C,KAAK8pE,MAAM9pE,KAAK8pE,KAAKp3C,IAAI,SAAU1yB,KAAK49E,gBAC5C59E,KAAK8pE,KAAO,MAGd9pE,KAAKkxB,KAAO,SAAUstD,EAAKt5E,GACzBlF,KAAKq+C,QAAQ5kC,YAAY,CACvB6gB,QAASkkD,EACTt5E,KAAMA,KAIVlF,KAAKyB,KAAO,SAAU+8E,EAAKt5E,EAAM/D,GAC/B,GAAIA,EAAU,CACZ,IAAI0B,EAAK7C,KAAKm+E,aACdn+E,KAAKo+E,UAAUv7E,GAAM1B,EACrB+D,EAAKnD,KAAKc,GAGZ7C,KAAKkxB,KAAKstD,EAAKt5E,IAGjBlF,KAAKy+E,KAAO,SAAUvpE,EAAO4E,GAC3B,IACE9Z,KAAKq+C,QAAQ5kC,YAAY,CACvBvE,MAAOA,EACP4E,KAAM,CACJA,KAAMA,EAAKA,QAGf,MAAO4kE,GACP99E,QAAQC,MAAM69E,EAAGxyC,SAIrBlsC,KAAK2+E,iBAAmB,SAAUryE,GAC5BtM,KAAK8pE,MAAM9pE,KAAKmsD,YACpBnsD,KAAK8pE,KAAOx9D,EACZtM,KAAKyB,KAAK,WAAY,CAAC6K,EAAIsvC,aAC3BtvC,EAAIuV,GAAG,SAAU7hB,KAAK49E,iBAGxB59E,KAAK49E,eAAiB,SAAUx+C,GACzBp/B,KAAKu+E,aACRv+E,KAAKu+E,WAAa,GAClBhmE,WAAWvY,KAAK29E,gBAAiB,IAGf,UAAhBv+C,EAAM3B,OAAoBz9B,KAAKu+E,WAAWx8E,KAAKq9B,EAAM34B,MAAO24B,EAAMC,OAAYr/B,KAAKu+E,WAAWx8E,KAAKq9B,EAAM34B,MAAO24B,EAAM5b,MAG5HxjB,KAAK29E,gBAAkB,WACrB,IAAIiB,EAAI5+E,KAAKu+E,WACRK,IACL5+E,KAAKu+E,WAAa,KAEdK,EAAEr+E,OAAS,IAAMq+E,EAAEr+E,OAASP,KAAK8pE,KAAK5+C,aAAe,EACvDlrB,KAAKyB,KAAK,WAAY,CAACzB,KAAK8pE,KAAKluB,aAC5B57C,KAAKy+E,KAAK,SAAU,CACzB3kE,KAAM8kE,QAGTn9E,KAAK87E,EAAah8E,WAErB,IAAIs9E,EAAiB,SAAwBrB,EAAoB56E,EAAK66E,GACpEz9E,KAAK29E,gBAAkB39E,KAAK29E,gBAAgB74E,KAAK9E,MACjDA,KAAK49E,eAAiB59E,KAAK49E,eAAe94E,KAAK9E,MAC/CA,KAAKm+E,WAAa,EAClBn+E,KAAKo+E,UAAY,GACjBp+E,KAAK8+E,cAAgB,GACrB,IAAIC,EAAO,KACPC,GAAW,EACXC,EAAS39E,OAAOuI,OAAO6nB,GAEvBrV,EAAQrc,KAEZA,KAAKq+C,QAAU,GAEfr+C,KAAKq+C,QAAQ8N,UAAY,aAEzBnsD,KAAKq+C,QAAQ5kC,YAAc,SAAUjE,GACnC6G,EAAMyiE,cAAc/8E,KAAKyT,GAErBupE,IACEC,EAAUzmE,WAAW2mE,GAAkBA,MAI/Cl/E,KAAKm/E,YAAc,SAAU1+D,GAC3Bu+D,EAAWv+D,GAGb,IAAIy+D,EAAc,WAChB,IAAIxrD,EAAMrX,EAAMyiE,cAAcp7D,QAE1BgQ,EAAI4G,QAASykD,EAAKrrD,EAAI4G,SAAS35B,MAAMo+E,EAAMrrD,EAAIxuB,MAAewuB,EAAIxe,OAAO+pE,EAAOx0D,QAAQiJ,EAAIxe,MAAOwe,EAAI5Z,OAG7GmlE,EAAOxlE,YAAc,SAAUia,GAC7BrX,EAAMwhE,UAAU,CACd/jE,KAAM4Z,KAIVurD,EAAO99E,SAAW,SAAU2Y,EAAMqkE,GAChCn+E,KAAKyZ,YAAY,CACf3E,KAAM,OACNjS,GAAIs7E,EACJrkE,KAAMA,KAIVmlE,EAAOR,KAAO,SAAUn6E,EAAMwV,GAC5B9Z,KAAKyZ,YAAY,CACf3E,KAAM,QACNxQ,KAAMA,EACNwV,KAAMA,KAIV6c,EAAOL,WAAW,CAAC,SAAU1zB,IAAM,SAAUw8E,GAG3C,IAFAL,EAAO,IAAIK,EAAK3B,GAAWwB,GAEpB5iE,EAAMyiE,cAAcv+E,QACzB2+E,QAKNL,EAAet9E,UAAYg8E,EAAah8E,UACxCoB,EAAQk8E,eAAiBA,EACzBl8E,EAAQ46E,aAAeA,EACvB56E,EAAQm2C,aAAeA,KAEzB91C,IAAI9C,OAAO,kBAAmB,CAAC,UAAW,UAAW,SAAU,YAAa,wBAAyB,gBAAgB,SAAU4B,EAAUa,EAASxC,GAChJ,aAEA,IAAI+hC,EAAQpgC,EAAS,WAAWogC,MAC5BxQ,EAAe5vB,EAAS,uBAAuB4vB,aAC/CngB,EAAMzP,EAAS,aAEfu9E,EAAc,SAAqBt+D,EAASxgB,EAAQoG,EAAK24E,EAAQC,EAAWC,GAC9E,IAAInjE,EAAQrc,KAEZA,KAAKO,OAASA,EACdP,KAAK+gB,QAAUA,EACf/gB,KAAKsM,IAAMyU,EAAQujB,cACnBtkC,KAAKu/E,UAAYA,EACjBv/E,KAAKw/E,YAAcA,EACnBx/E,KAAKy/E,UAAYz/E,KAAK0/E,SAAS56E,KAAK9E,MACpCA,KAAKsM,IAAIuV,GAAG,SAAU7hB,KAAKy/E,WAC3Bz/E,KAAK2/E,QAAUL,EAEft/E,KAAKg9D,gBAAkB,WACrBzkD,YAAW,WACT8D,EAAMyhD,qBAIV99D,KAAKqrB,KAAO1kB,EACZ,IAAIi5E,EAAY7+D,EAAQynC,iBAAiByhB,YAAclpD,EAAQynC,iBAAiBq3B,YAAc,CAC5Ft/E,QAAS,GAEXP,KAAK8/E,gBAAkBF,EAAUr/E,OACjCP,KAAK+/E,QACLh/D,EAAQpC,UAAUkD,GAAG,eAAgB7hB,KAAKg9D,mBAG5C,WACEzrD,EAAIF,UAAUrR,KAAM0xB,GAEpB1xB,KAAK+/E,MAAQ,WACX,IAAI1jE,EAAQrc,KAERsM,EAAMtM,KAAKsM,IACXyU,EAAU/gB,KAAK+gB,QACnB/gB,KAAKggF,gBAAkBj/D,EAAQpC,UAAUkrB,SACrC9oB,EAAQpC,UAAU+G,mBAAmB3E,EAAQpC,UAAUwrB,gBAC3DnqC,KAAK2G,IAAM2F,EAAIm4B,aAAazkC,KAAKqrB,KAAKzG,IAAK5kB,KAAKqrB,KAAKvG,QACrD,IAAIne,EAAM3G,KAAK2G,IACfA,EAAIk0C,cAAe,EACnBl0C,EAAIqzB,SACJrzB,EAAI8jD,SAAW1pC,EAAQ8M,UAAU,IAAIqU,EAAMv7B,EAAIie,IAAKje,EAAIme,OAAQne,EAAIie,IAAKje,EAAIme,OAAS9kB,KAAKO,QAASP,KAAKu/E,UAAW,MAAM,GAC1Hv/E,KAAKs/E,OAAS,GACdt/E,KAAK2/E,QAAQ73E,SAAQ,SAAUm4E,GAC7B,IAAIl7D,EAASzY,EAAIm4B,aAAaw7C,EAAMr7D,IAAKq7D,EAAMn7D,QAC/CC,EAAO81B,cAAe,EACtB91B,EAAOiV,SAEP3d,EAAMijE,OAAOv9E,KAAKgjB,MAEpBhE,EAAQgtC,eAAc,IAGxB/tD,KAAKkgF,iBAAmB,WACtB,IAAIlgF,KAAKmgF,aAAT,CACA,IAAIp/D,EAAU/gB,KAAK+gB,QAEf1E,EAAQrc,KAEZA,KAAKmgF,cAAe,EACpBngF,KAAKs/E,OAAOx3E,SAAQ,SAAUid,GAC5BA,EAAO0lC,SAAW1pC,EAAQ8M,UAAU,IAAIqU,EAAMnd,EAAOH,IAAKG,EAAOD,OAAQC,EAAOH,IAAKG,EAAOD,OAASzI,EAAM9b,QAAS8b,EAAMmjE,YAAa,MAAM,QAIjJx/E,KAAKogF,iBAAmB,WACtB,GAAKpgF,KAAKmgF,aAAV,CACAngF,KAAKmgF,cAAe,EAEpB,IAAK,IAAIx+E,EAAI,EAAGA,EAAI3B,KAAKs/E,OAAO/+E,OAAQoB,IACtC3B,KAAK+gB,QAAQsN,aAAaruB,KAAKs/E,OAAO39E,GAAG8oD,YAI7CzqD,KAAK0/E,SAAW,SAAUtgD,GACxB,GAAIp/B,KAAK4jD,UAAW,OAAO5jD,KAAKqgF,cAAcjhD,GAC9C,IAAIne,EAAQme,EACZ,GAAIne,EAAMxa,MAAMme,MAAQ3D,EAAMuC,IAAIoB,KAC9B3D,EAAMxa,MAAMme,MAAQ5kB,KAAK2G,IAAIie,IAAjC,CACA5kB,KAAK4jD,WAAY,EACjB,IAAI08B,EAA8B,WAAjBlhD,EAAM3B,OAAsBxc,EAAMuC,IAAIsB,OAAS7D,EAAMxa,MAAMqe,OAAS7D,EAAMxa,MAAMqe,OAAS7D,EAAMuC,IAAIsB,OAChHy7D,EAAct/D,EAAMxa,MAAMqe,QAAU9kB,KAAK2G,IAAIme,QAAU7D,EAAMxa,MAAMqe,QAAU9kB,KAAK2G,IAAIme,OAAS9kB,KAAKO,OAAS,EAC7GigF,EAAoBv/D,EAAMxa,MAAMqe,OAAS9kB,KAAK2G,IAAIme,OAItD,GAHA9kB,KAAKqgF,cAAcjhD,GACfmhD,IAAavgF,KAAKO,QAAU+/E,GAE5BC,IAAgBvgF,KAAK+gB,QAAQknC,UAC/B,GAAqB,WAAjB7oB,EAAM3B,OACR,IAAK,IAAI97B,EAAI3B,KAAKs/E,OAAO/+E,OAAS,EAAGoB,GAAK,EAAGA,IAAK,CAChD,IACI8+E,EAAS,CACX77D,KAFE87D,EAAW1gF,KAAKs/E,OAAO39E,IAEXijB,IACdE,OAAQ47D,EAAS57D,OAAS07D,GAE5BxgF,KAAKsM,IAAIovC,kBAAkB+kC,EAAQrhD,EAAMC,YAEtC,GAAqB,WAAjBD,EAAM3B,OACf,IAAS97B,EAAI3B,KAAKs/E,OAAO/+E,OAAS,EAAGoB,GAAK,EAAGA,IAAK,CAChD,IAAI++E,EACAD,EAAS,CACX77D,KAFE87D,EAAW1gF,KAAKs/E,OAAO39E,IAEXijB,IACdE,OAAQ47D,EAAS57D,OAAS07D,GAE5BxgF,KAAKsM,IAAIpF,OAAO,IAAIg7B,EAAMu+C,EAAO77D,IAAK67D,EAAO37D,OAAQ27D,EAAO77D,IAAK67D,EAAO37D,OAASw7D,IAKvFtgF,KAAK4jD,WAAY,EACjB5jD,KAAK2gF,kBAGP3gF,KAAKqgF,cAAgB,SAAUjhD,GAC7Bp/B,KAAK2G,IAAIw4B,SAASC,GAElB,IAAK,IAAIz9B,EAAI3B,KAAKs/E,OAAO/+E,OAAQoB,KAC/B3B,KAAKs/E,OAAO39E,GAAGw9B,SAASC,GAG1Bp/B,KAAK2gF,iBAGP3gF,KAAK2gF,cAAgB,WACnB,IAAI3gF,KAAK4jD,UAAT,CAEA,IAAIvnC,EAAQrc,KAER+gB,EAAU/gB,KAAK+gB,QAEf6/D,EAAe,SAAsBj6E,EAAKmG,GAC5CiU,EAAQsN,aAAa1nB,EAAI8jD,UACzB9jD,EAAI8jD,SAAW1pC,EAAQ8M,UAAU,IAAIqU,EAAMv7B,EAAIie,IAAKje,EAAIme,OAAQne,EAAIie,IAAKje,EAAIme,OAASzI,EAAM9b,QAASuM,EAAW,MAAM,IAGxH8zE,EAAa5gF,KAAK2G,IAAK3G,KAAKu/E,WAE5B,IAAK,IAAI59E,EAAI3B,KAAKs/E,OAAO/+E,OAAQoB,KAC/Bi/E,EAAa5gF,KAAKs/E,OAAO39E,GAAI3B,KAAKw/E,eAItCx/E,KAAK89D,eAAiB,SAAU5oD,GAC9B,IAAIlV,KAAK4jD,WAAc5jD,KAAK+gB,QAA5B,CACA,IAAIpa,EAAM3G,KAAK+gB,QAAQpC,UAAUmmB,YAE7Bn+B,EAAIie,MAAQ5kB,KAAK2G,IAAIie,KAAOje,EAAIme,QAAU9kB,KAAK2G,IAAIme,QAAUne,EAAIme,QAAU9kB,KAAK2G,IAAIme,OAAS9kB,KAAKO,QACpGP,KAAKkgF,mBAELlgF,KAAKkiB,MAAM,cAAehN,KAE1BlV,KAAKogF,mBAELpgF,KAAKkiB,MAAM,cAAehN,MAI9BlV,KAAKg6B,OAAS,WACZh6B,KAAK+gB,QAAQsN,aAAaruB,KAAK2G,KAAO3G,KAAK2G,IAAI8jD,UAC/CzqD,KAAKogF,mBACLpgF,KAAKsM,IAAI+I,oBAAoB,SAAUrV,KAAKy/E,WAC5Cz/E,KAAK+gB,QAAQpC,UAAUtJ,oBAAoB,eAAgBrV,KAAKg9D,iBAChEh9D,KAAK+gB,QAAQgtC,eAAc,GAC3B/tD,KAAK+gB,QAAU,MAGjB/gB,KAAKgc,OAAS,WACZ,IAA8B,IAA1Bhc,KAAK8/E,gBAAT,CAIA,IAHA,IAAIn3B,EAAc3oD,KAAK+gB,QAAQynC,iBAC3Bq4B,GAAiBl4B,EAAYshB,YAActhB,EAAYk3B,YAAYt/E,OAASP,KAAK8/E,gBAE5En+E,EAAI,EAAGA,EAAIk/E,EAAel/E,IACjCgnD,EAAYhoC,MAAK,GAGf3gB,KAAKggF,iBAAiBhgF,KAAK+gB,QAAQpC,UAAUsrB,SAASjqC,KAAKggF,qBAEhEv+E,KAAK49E,EAAY99E,WACpBoB,EAAQ08E,YAAcA,KAExBr8E,IAAI9C,OAAO,iCAAkC,CAAC,UAAW,UAAW,SAAU,gBAAiB,sBAAsB,SAAU4B,EAAUa,EAASxC,GAChJ,IAAI+U,EAAQpT,EAAS,gBACjB2S,EAAY3S,EAAS,oBAEzB,SAASg/E,EAAY38C,EAAIC,GACvB,OAAOD,EAAGvf,KAAOwf,EAAGxf,KAAOuf,EAAGrf,QAAUsf,EAAGtf,OA6J7CniB,EAAQshB,YA1JR,SAAqBzO,GACnB,IAAIwP,EAAKxP,EAAE2M,SACP4+D,EAAM/7D,EAAGlP,OACT4N,EAAQsB,EAAGjP,SACXirE,EAAOh8D,EAAGnP,QACVorE,EAAQzrE,EAAEsS,cACV9R,EAASR,EAAEI,YAGf,GAFIorE,GAAQvsE,EAAU3B,QAAOkD,EAASgP,EAAGhP,QAErCR,EAAEuO,OAAO2B,mBAA+B,GAAV1P,EAChCR,EAAEuO,OAAOhB,UAAUd,cAAczM,EAAE2M,eAIrC,GAAK6+D,GAASD,GAAQE,GAKtB,GAAe,IAAXjrE,EAAJ,CACA,IAiBIkrE,EAjBAn9D,EAASvO,EAAEuO,OACXpF,EAAYoF,EAAOpF,UACnBwiE,EAAgBp9D,EAAO2B,kBACvB/e,EAAM6O,EAAE0P,sBACRP,EAAShG,EAAUmmB,YACnB7f,EAAczP,EAAEyP,eAAiBtG,EAAUN,WAAayiE,EAAYn6E,EAAKge,GACzEy8D,EAAS5rE,EAAEvS,EACXo+E,EAAS7rE,EAAEwQ,EAOXjF,EAAUgD,EAAOhD,QACjBugE,EAAev9D,EAAOvC,SAAS4J,yBAAyBg2D,EAAQC,GAChEE,EAAeD,EAGnB,GAAIv9D,EAAO02C,cAAc+mB,iBACnBR,GAAQD,GAAOE,GAASF,EAAKG,EAAgBx9D,EAAQ,QAAU,MAAeq9D,GAAOh9D,EAAO09D,sBAAqBP,EAAgB,cAErI,GAAID,IAAUF,GAEZ,GADAG,EAAgB,OACXC,GAAiBz9D,EAAO,YACpBq9D,GAAOh9D,EAAO09D,sBACvBP,EAAgB,SAQpB,GAJIA,GAAiBzsE,EAAU3B,OAASkS,EAAGnP,SACzCkO,EAAO02C,cAAcxiC,oBAGF,OAAjBipD,EAAwB,CAC1B,IAAKC,GAAiBl8D,EAAa,OAEnC,IAAKk8D,EAAe,CAClB,IAAIlgE,EAAQtC,EAAUiP,kBACtB7J,EAAO29D,mBAAmBzgE,GAG5B,IAAI0gE,EAAWhjE,EAAUurB,UAAUuX,aAAa96C,GAChDod,EAAOuB,kBACPvB,EAAOk9C,wBAAyB,EAE5Bv9C,IACFi+D,EAAW,KACX1gE,EAAQtC,EAAUorB,OAAO,IAAM9oB,EAC/B8C,EAAO69D,sBAAsB3gE,IAG/B8C,EAAOkO,KAAK,WAAW,WACrB,IAAI4vD,EAASljE,EAAUiP,kBACnB+zD,GAAYE,EAAOxjE,WAAayiE,EAAYa,EAASh9D,OAAQk9D,EAAOl9D,QAAShG,EAAU4iC,eAAesgC,EAAOl9D,SAC3GjB,EACF/E,EAAU4iC,eAAetgC,EAAM0D,QACtB1D,IACT8C,EAAO69D,sBAAsB3gE,GAC7BtC,EAAUyrB,SAASnpB,IAGrBtC,EAAUyrB,SAASy3C,IAErB99D,EAAOuB,kBACPvB,EAAOk9C,wBAAyB,UAE7B,GAAqB,SAAjBigB,EAA0B,CAGnC,IAAI5oC,EAFJ9iC,EAAEmT,OACF5E,EAAOk9C,wBAAyB,EAEhC,IAAI6gB,EAAU,GAkBd/9D,EAAOuB,kBAEH67D,IAAkBF,EACpBtiE,EAAUwrB,iBACAg3C,GAAiBF,IAC3B3oC,EAAe35B,EAAUiP,kBACzB7J,EAAO29D,mBAAmBppC,IAGxB50B,EAAO49D,EAAevgE,EAAQgjB,yBAAyBplB,EAAU4lB,MAAW5lB,EAAU4G,eAAe5e,GACzGod,EAAOuB,kBACPi8D,EAAe,CACb38D,KAAM,EACNE,QAAS,GAGX,IAoBIi9D,EApDc,WAChB,IAAIC,EAAYj+D,EAAOvC,SAAS4J,yBAAyBg2D,EAAQC,GAC7D18D,EAAS5D,EAAQ8mB,yBAAyBm6C,EAAUp9D,IAAKo9D,EAAUl9D,OAAQk9D,EAAU94C,SACrF43C,EAAYS,EAAcS,IAAclB,EAAYn8D,EAAQhG,EAAU4lB,QAC1Eg9C,EAAeS,EACfj+D,EAAOuB,kBACPvB,EAAOpF,UAAU4G,eAAeZ,GAChCZ,EAAOvC,SAASgF,uBAChBzC,EAAOk+D,uBAAuBH,GAC9BA,EAAUnjE,EAAUujE,sBAAsBX,EAAcD,GACpDv9D,EAAO02C,cAAc32C,iBAAqC,GAAlBg+D,EAAQvhF,QAAeuhF,EAAQ,GAAGzjE,YAAWyjE,EAAQ,GAAK/9D,EAAO02C,cAAc32C,gBAAgB6f,SAC3Im+C,EAAQh6E,QAAQic,EAAO29D,mBAAoB39D,GAC3CA,EAAOo+D,yBACPp+D,EAAOuB,oBAwCTpQ,EAAMe,QAAQ8N,EAAOxB,WArHA,SAA0B/M,GAC/C4rE,EAAS5rE,EAAEkB,QACX2qE,EAAS7rE,EAAEmB,WA8Fe,SAA6BnB,GACrDyY,cAAchC,GACdlI,EAAOk+D,uBAAuBH,GACzBA,EAAQvhF,SAAQuhF,EAAU,CAACnjE,EAAUiP,oBAC1C7J,EAAOuB,kBAEHgzB,IACFv0B,EAAO69D,sBAAsBtpC,GAC7B35B,EAAUwrB,cAAcmO,IAG1B,IAAK,IAAI32C,EAAI,EAAGA,EAAImgF,EAAQvhF,OAAQoB,IAClCgd,EAAUyrB,SAAS03C,EAAQngF,IAG7BoiB,EAAOk9C,wBAAyB,EAChCl9C,EAAO02C,cAAc32C,gBAAkB,KACvCC,EAAOuB,qBAKT,IAAI2G,EAAUiC,aAAY,WACxB6zD,MACC,IACH,OAAOvsE,EAAEE,wBAvIM,IAAXM,GAAgBR,EAAEuO,OAAO2B,mBAAmBlQ,EAAEuO,OAAOo2C,0BA6I/Dn3D,IAAI9C,OAAO,qCAAsC,CAAC,UAAW,UAAW,SAAU,8BAA8B,SAAU4B,EAAUa,EAASxC,GAC3IwC,EAAQy3D,gBAAkB,CAAC,CACzB91D,KAAM,iBACNnB,KAAM,SAAc4gB,GAClBA,EAAOq+D,iBAAiB,IAE1BjtB,QAAS,CACPx7C,IAAK,cACLs9C,IAAK,eAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,iBACNnB,KAAM,SAAc4gB,GAClBA,EAAOq+D,gBAAgB,IAEzBjtB,QAAS,CACPx7C,IAAK,gBACLs9C,IAAK,iBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,4BACNnB,KAAM,SAAc4gB,GAClBA,EAAOq+D,iBAAiB,GAAG,IAE7BjtB,QAAS,CACPx7C,IAAK,oBACLs9C,IAAK,qBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,4BACNnB,KAAM,SAAc4gB,GAClBA,EAAOq+D,gBAAgB,GAAG,IAE5BjtB,QAAS,CACPx7C,IAAK,sBACLs9C,IAAK,uBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACNnB,KAAM,SAAc4gB,GAClBA,EAAOs+D,YAAY,IAErBltB,QAAS,CACPx7C,IAAK,gBACLs9C,IAAK,iBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,kBACNnB,KAAM,SAAc4gB,GAClBA,EAAOs+D,WAAW,IAEpBltB,QAAS,CACPx7C,IAAK,iBACLs9C,IAAK,kBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,mBACNnB,KAAM,SAAc4gB,GAClBA,EAAOs+D,YAAY,GAAG,IAExBltB,QAAS,CACPx7C,IAAK,sBACLs9C,IAAK,uBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,kBACNnB,KAAM,SAAc4gB,GAClBA,EAAOs+D,WAAW,GAAG,IAEvBltB,QAAS,CACPx7C,IAAK,uBACLs9C,IAAK,wBAEPG,eAAgB,SAChBp1C,UAAU,GACT,CACD1d,KAAM,iBACNnB,KAAM,SAAc4gB,GAClBA,EAAO+sB,YAAYwxC,kBAErBntB,QAAS,CACPx7C,IAAK,aACLs9C,IAAK,cAEPj1C,UAAU,GACT,CACD1d,KAAM,eACNnB,KAAM,SAAc4gB,GAClBA,EAAOw+D,gBAETptB,QAAS,CACPx7C,IAAK,aACLs9C,IAAK,cAEPG,eAAgB,UACf,CACD9yD,KAAM,UACNnB,KAAM,SAAc4gB,GAClBA,EAAO+vC,WAETqB,QAAS,CACPx7C,IAAK,aACLs9C,IAAK,cAEPG,eAAgB,SAChBp1C,UAAU,IAEZrf,EAAQ6/E,oBAAsB,CAAC,CAC7Bl+E,KAAM,kBACN6wD,QAAS,MACThyD,KAAM,SAAc4gB,GAClBA,EAAOo2C,uBAET/C,eAAgB,SAChBp1C,UAAU,EACVw0C,YAAa,SAAqBzyC,GAChC,OAAOA,GAAUA,EAAO2B,qBAG5B,IAAIovC,EAAchzD,EAAS,4BAA4BgzD,YACvDnyD,EAAQu5D,gBAAkB,IAAIpH,EAAYnyD,EAAQ6/E,wBAEpDx/E,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,iBAAkB,YAAa,gBAAiB,iCAAkC,gBAAiB,eAAgB,qCAAsC,aAAc,mBAAoB,aAAc,eAAe,SAAU4B,EAAUa,EAASxC,GACnT,IAAI8gD,EAAYn/C,EAAS,gBAAgBm/C,UACrC/e,EAAQpgC,EAAS,WAAWogC,MAC5BmC,EAAYviC,EAAS,eAAeuiC,UACpCpgB,EAAcniB,EAAS,gCAAgCmiB,YACvD/O,EAAQpT,EAAS,eACjB0a,EAAO1a,EAAS,cAChBy3B,EAAWz3B,EAAS,oCACxBa,EAAQ42B,SAAWA,EAAS6gC,gBAAgB/0D,OAAOk0B,EAASipD,qBAC5D,IACIp6C,EAAS,IAAIkrB,EADJxxD,EAAS,YAAYwxD,QAUlC,IAAIxM,EAAchlD,EAAS,kBAAkBglD,aAC7C,WACE9mD,KAAKyiF,oBAAsB,WACzB,OAAOziF,KAAKkyE,qBAEbzwE,KAAKqlD,EAAYvlD,WACpB,WACEvB,KAAK+pC,OAAS,KACd/pC,KAAKkqC,UAAY,KAEjBlqC,KAAKoqC,SAAW,SAAUnpB,EAAOyhE,GAC/B,GAAKzhE,EAAL,CAEA,IAAKjhB,KAAK0lB,mBAAyC,IAApB1lB,KAAK8pC,WAAkB,CACpD,IAAI63C,EAAW3hF,KAAK4tB,kBAIpB,GAHA5tB,KAAKkqC,UAAUjjC,IAAI06E,GACnB3hF,KAAKkqC,UAAUjjC,IAAIga,GAEiB,GAAhCjhB,KAAKkqC,UAAUH,OAAOxpC,OAExB,OADAP,KAAKkqC,UAAUyX,YACR+gC,GAAsB1iF,KAAKsuB,kBAAkBrN,GAGtDjhB,KAAKkqC,UAAUyX,YACf3hD,KAAKkqC,UAAUjjC,IAAI06E,GACnB3hF,KAAK2iF,YAAYhB,GAGd1gE,EAAM0D,SAAQ1D,EAAM0D,OAAS1D,EAAMuC,KACxC,IAAIzc,EAAU/G,KAAKkqC,UAAUjjC,IAAIga,GAYjC,OAXAjhB,KAAK2iF,YAAY1hE,GACbla,EAAQxG,QAAQP,KAAK4iF,eAAe77E,GAEpC/G,KAAK8pC,WAAa,IAAM9pC,KAAK0lB,oBAC/B1lB,KAAKyqB,QAAQ,eAEbzqB,KAAK0lB,mBAAoB,EACzB1lB,KAAK+gB,QAAQqmC,aAAc,EAC3BpnD,KAAKkqC,UAAUnQ,OAAO/5B,KAAK+gB,UAGtB2hE,GAAsB1iF,KAAKsuB,kBAAkBrN,KAGtDjhB,KAAKmqC,cAAgB,SAAUlpB,GAC7BA,EAAQA,GAASjhB,KAAK+pC,OAAO,GAC7B,IAAIhjC,EAAU/G,KAAKkqC,UAAUyX,YACzB56C,EAAQxG,QAAQP,KAAK4iF,eAAe77E,GACxCka,GAASjhB,KAAKsuB,kBAAkBrN,IAGlCjhB,KAAKuhD,eAAiB,SAAU56C,GAC9B,IAAII,EAAU/G,KAAKkqC,UAAUqX,eAAe56C,GAE5C,GAAII,EAEF,OADA/G,KAAK4iF,eAAe77E,GACbA,EAAQ,IAInB/G,KAAK6iF,uBAAyB,WAC5B,IAAI97E,EAAU/G,KAAKkqC,UAAU6C,QACzBhmC,EAAQxG,OAAQP,KAAK4iF,eAAe77E,GAAkB/G,KAAK+pC,OAAO,IAAI/pC,KAAKsuB,kBAAkBtuB,KAAK+pC,OAAO,KAG/G/pC,KAAK2iF,YAAc,SAAU1hE,GAC3BjhB,KAAK8pC,WAAa9pC,KAAKkqC,UAAUH,OAAOxpC,OACxCP,KAAK+pC,OAAOiD,QAAQ/rB,GAEpBjhB,KAAKyqB,QAAQ,WAAY,CACvBxJ,MAAOA,KAIXjhB,KAAK4iF,eAAiB,SAAU77E,GAG9B,GAFA/G,KAAK8pC,WAAa9pC,KAAKkqC,UAAUH,OAAOxpC,OAEjB,GAAnBP,KAAK8pC,YAAmB9pC,KAAK0lB,kBAAmB,CAClD,IAAIo9D,EAAY9iF,KAAKkqC,UAAUH,OAAOvX,MACtCzrB,EAAQhF,KAAK+gF,GACb9iF,KAAK8pC,WAAa,EAGpB,IAAK,IAAInoC,EAAIoF,EAAQxG,OAAQoB,KAAM,CACjC,IAAI8C,EAAQzE,KAAK+pC,OAAO5nC,QAAQ4E,EAAQpF,IACxC3B,KAAK+pC,OAAO3jC,OAAO3B,EAAO,GAG5BzE,KAAKyqB,QAAQ,cAAe,CAC1Bsf,OAAQhjC,IAGc,IAApB/G,KAAK8pC,YAAoB9pC,KAAK0lB,oBAChC1lB,KAAK0lB,mBAAoB,EAEzB1lB,KAAKyqB,QAAQ,gBAEbzqB,KAAK+gB,QAAQqmC,aAAc,EAC3BpnD,KAAKkqC,UAAUlQ,OAAOh6B,KAAK+gB,WAG7B+hE,EAAYA,GAAa9iF,KAAK+pC,OAAO,MACnB+4C,EAAUvgD,QAAQviC,KAAK8gB,aAAa9gB,KAAKsuB,kBAAkBw0D,IAG/E9iF,KAAK+iF,eAAiB,WAChB/iF,KAAKkqC,YACTlqC,KAAKkqC,UAAY,IAAI+W,EACrBjhD,KAAK+pC,OAAS,GACd/pC,KAAK8pC,WAAa,IAGpB9pC,KAAKy3D,aAAe,WAClB,OAAOz3D,KAAK8pC,WAAa9pC,KAAKkqC,UAAUH,OAAO1kC,SAAW,CAACrF,KAAK8gB,aAGlE9gB,KAAKsiF,eAAiB,WACpB,GAAItiF,KAAK8pC,WAAa,EAAG,CACvB,IAAIC,EAAS/pC,KAAKkqC,UAAUH,OACxB+4C,EAAY/4C,EAAOA,EAAOxpC,OAAS,GACnC0gB,EAAQihB,EAAMuB,WAAWsG,EAAO,GAAGtjC,MAAOq8E,EAAUt/D,KACxDxjB,KAAKmqC,gBACLnqC,KAAKye,kBAAkBwC,EAAO6hE,EAAUn+D,QAAUm+D,EAAUr8E,WACvD,CACDwa,EAAQjhB,KAAK8gB,WAAjB,IACIukB,EAAcrlC,KAAKqlC,cACnBlD,EAAWlhB,EAAMxa,MAAMme,IACvByd,EAASphB,EAAMuC,IAAIoB,IAEvB,GAAIud,GAAYE,EAAQ,CACtB,GAAIgD,EAAa,IAAI5+B,EAAQwa,EAAMuC,IAC/BA,EAAMvC,EAAMxa,WAAeA,EAAQwa,EAAMxa,MACzC+c,EAAMvC,EAAMuC,IAGhB,OAFAxjB,KAAKoqC,SAASlI,EAAMuB,WAAWjgB,EAAKA,SACpCxjB,KAAKoqC,SAASlI,EAAMuB,WAAWh9B,EAAOA,IAIxC,IAAIq7E,EAAU,GACVjhE,EAAI7gB,KAAK6nB,aAAasa,GAAU,GACpCthB,EAAEpa,MAAMqe,OAAS7D,EAAMxa,MAAMqe,OAC7Bg9D,EAAQ//E,KAAK8e,GAEb,IAAK,IAAIlf,EAAIwgC,EAAW,EAAGxgC,EAAI0gC,EAAQ1gC,IACrCmgF,EAAQ//E,KAAK/B,KAAK6nB,aAAalmB,GAAG,KAGpCkf,EAAI7gB,KAAK6nB,aAAawa,GAAQ,IAC5B7e,IAAIsB,OAAS7D,EAAMuC,IAAIsB,OACzBg9D,EAAQ//E,KAAK8e,GACbihE,EAAQh6E,QAAQ9H,KAAKoqC,SAAUpqC,QAInCA,KAAKgjF,qBAAuB,WAC1B,GAAIhjF,KAAK8pC,WAAa,EAAG,CACvB,IAAIC,EAAS/pC,KAAKkqC,UAAUH,OACxB+4C,EAAY/4C,EAAOA,EAAOxpC,OAAS,GACnC0gB,EAAQihB,EAAMuB,WAAWsG,EAAO,GAAGtjC,MAAOq8E,EAAUt/D,KACxDxjB,KAAKmqC,gBACLnqC,KAAKye,kBAAkBwC,EAAO6hE,EAAUn+D,QAAUm+D,EAAUr8E,WACvD,CACL,IAAIke,EAAS3kB,KAAK+gB,QAAQgjB,yBAAyB/jC,KAAKwkC,eACpDzf,EAAS/kB,KAAK+gB,QAAQgjB,yBAAyB/jC,KAAK0kC,iBAC1C1kC,KAAKkiF,sBAAsBv9D,EAAQI,GACzCjd,QAAQ9H,KAAKoqC,SAAUpqC,QAInCA,KAAKkiF,sBAAwB,SAAUX,EAAcD,EAAc2B,GACjE,IAAInB,EAAU,GACVoB,EAAa3B,EAAaz8D,OAASw8D,EAAax8D,OAEpD,GAAIo+D,EACF,IAAI9gD,EAAcm/C,EAAaz8D,OAC3Bwd,EAAYg/C,EAAax8D,OACzBq+D,EAAe5B,EAAar4C,QAC5Bk6C,EAAa9B,EAAap4C,aAE1B9G,EAAck/C,EAAax8D,OAC3Bwd,EAAYi/C,EAAaz8D,OACzBq+D,EAAe7B,EAAap4C,QAC5Bk6C,EAAa7B,EAAar4C,QAGhC,IA6ciB/E,EAAIC,EA7cjBi/C,EAAa9B,EAAa38D,IAAM08D,EAAa18D,IAEjD,GAAIy+D,EACF,IAAIlhD,EAAWo/C,EAAa38D,IACxByd,EAASi/C,EAAa18D,SAEtBud,EAAWm/C,EAAa18D,IACxByd,EAASk/C,EAAa38D,IAGxBwd,EAAc,IAAGA,EAAc,GAC/BD,EAAW,IAAGA,EAAW,GACzBA,GAAYE,IAAQ4gD,GAAoB,GAE5C,IAAK,IAAIr+D,EAAMud,EAAUvd,GAAOyd,EAAQzd,IAAO,CAC7C,IAAI3D,EAAQihB,EAAMuB,WAAWzjC,KAAK+gB,QAAQ8mB,yBAAyBjjB,EAAKwd,EAAa+gD,GAAenjF,KAAK+gB,QAAQ8mB,yBAAyBjjB,EAAK0d,EAAW8gD,IAE1J,GAAIniE,EAAM5C,UAAW,CACnB,GAAIilE,IA2bSn/C,EA3baljB,EAAMuC,IA2bf4gB,EA3boBk/C,EA4bpCn/C,EAAGvf,KAAOwf,EAAGxf,KAAOuf,EAAGrf,QAAUsf,EAAGtf,QA5bS,MAC9C,IAAIw+D,EAASriE,EAAMuC,IAGrBvC,EAAM0D,OAASu+D,EAAajiE,EAAMxa,MAAQwa,EAAMuC,IAChDs+D,EAAQ//E,KAAKkf,GAKf,GAFIoiE,GAAYvB,EAAQtnE,WAEnByoE,EAAmB,CAGtB,IAFA,IAAIz/D,EAAMs+D,EAAQvhF,OAAS,EAEpBuhF,EAAQt+D,GAAKnF,WAAamF,EAAM,GACrCA,IAGF,GAAIA,EAAM,EAGR,IAFA,IAAI/c,EAAQ,EAELq7E,EAAQr7E,GAAO4X,WACpB5X,IAIJ,IAAK,IAAI9E,EAAI6hB,EAAK7hB,GAAK8E,EAAO9E,IACxBmgF,EAAQngF,GAAG0c,WAAWyjE,EAAQ17E,OAAOzE,EAAG,GAIhD,OAAOmgF,IAERrgF,KAAK4iC,EAAU9iC,WAClB,IAAI84D,EAASv4D,EAAS,YAAYu4D,OAiclC,SAASkpB,EAAYx/D,GACfA,EAAOy/D,8BACXz/D,EAAO4+D,YAAc5+D,EAAO4+D,YAAY79E,KAAKif,GAC7CA,EAAO6+D,eAAiB7+D,EAAO6+D,eAAe99E,KAAKif,GACnDA,EAAO0/D,eAAiB1/D,EAAO0/D,eAAe3+E,KAAKif,GACnDA,EAAO2/D,gBAAkB3/D,EAAO2/D,gBAAgB5+E,KAAKif,GACrDA,EAAOy/D,4BAA8B7gF,EAAQghF,gBAAgB7+E,KAAKif,GAClEA,EAAO6/D,wBAA0B7/D,EAAO6/D,wBAAwB9+E,KAAKif,GACrEA,EAAOy/D,4BAA4Bz/D,GACnCA,EAAOlC,GAAG,gBAAiBkC,EAAOy/D,6BAClCz/D,EAAOlC,GAAG,YAAaoC,GACvBF,EAAOwV,SAASy7B,YAAYz7B,EAAS6gC,iBAIvC,SAA+Br2C,GAC7B,IAAIlX,EAAKkX,EAAOhB,UAAUjB,aACtB+hE,GAAY,EAgBhB,SAASp7B,EAAMjzC,GACTquE,IACF9/D,EAAOvC,SAAS+6D,eAAe,IAC/BsH,GAAY,GAlBhB3uE,EAAMN,YAAY/H,EAAI,WAAW,SAAU2I,GACzC,IAAIsuE,EAAuB,IAAbtuE,EAAElD,WAAmBkD,EAAEK,SAAWL,EAAEO,UAAYP,EAAEmD,SAE5DoL,EAAO09D,qBAAuBqC,EAC3BD,IACH9/D,EAAOvC,SAAS+6D,eAAe,aAC/BsH,GAAY,GAELA,GACTp7B,OAGJvzC,EAAMN,YAAY/H,EAAI,QAAS47C,GAC/BvzC,EAAMN,YAAY/H,EAAI,OAAQ47C,GAnB9Bs7B,CAAsBhgE,KA5cxB,WACE/jB,KAAKmiF,uBAAyB,WAC5BniF,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,qBAGhB7gE,KAAK0hF,mBAAqB,SAAUp7D,GAC7BA,EAAc3B,SAAQ2B,EAAc3B,OAAS2B,EAAc9C,KAChE,IAAI3V,EAAQ7N,KAAK8tB,oBAIjB,OAHAxH,EAAcikC,OAASvqD,KAAK+gB,QAAQ8M,UAAUvH,EAAe,gBAAiBzY,GAC9E7N,KAAK+gB,QAAQmxD,kBAAkBnwE,KAAKukB,GACpCtmB,KAAK+gB,QAAQijE,qBAAuBhkF,KAAK+gB,QAAQmxD,kBAAkB3xE,OAC5D+lB,GAGTtmB,KAAK4hF,sBAAwB,SAAU3gE,GACrC,GAAKA,EAAMspC,OAAX,CACAvqD,KAAK+gB,QAAQsN,aAAapN,EAAMspC,QAChC,IAAI9lD,EAAQzE,KAAK+gB,QAAQmxD,kBAAkB/vE,QAAQ8e,IACrC,GAAVxc,GAAazE,KAAK+gB,QAAQmxD,kBAAkB9rE,OAAO3B,EAAO,GAC9DzE,KAAK+gB,QAAQijE,qBAAuBhkF,KAAK+gB,QAAQmxD,kBAAkB3xE,SAGrEP,KAAKiiF,uBAAyB,SAAUl4C,GAGtC,IAFA,IAAIk6C,EAAajkF,KAAK+gB,QAAQmxD,kBAErBvwE,EAAIooC,EAAOxpC,OAAQoB,KAAM,CAChC,IAAIsf,EAAQ8oB,EAAOpoC,GACnB,GAAKsf,EAAMspC,OAAX,CACAvqD,KAAK+gB,QAAQsN,aAAapN,EAAMspC,QAChC,IAAI9lD,EAAQw/E,EAAW9hF,QAAQ8e,IACjB,GAAVxc,GAAaw/E,EAAW79E,OAAO3B,EAAO,IAG5CzE,KAAK+gB,QAAQijE,qBAAuBC,EAAW1jF,QAGjDP,KAAK2iF,YAAc,SAAUntE,GAC3BxV,KAAK0hF,mBAAmBlsE,EAAEyL,OAC1BjhB,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,qBAGhB7gE,KAAK4iF,eAAiB,SAAUptE,GAC9BxV,KAAKiiF,uBAAuBzsE,EAAEu0B,QAC9B/pC,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,qBAGhB7gE,KAAKyjF,eAAiB,SAAUjuE,GAC1BxV,KAAK0lB,oBACT1lB,KAAK0lB,mBAAoB,EACzB1lB,KAAKomB,SAAS,mBACdpmB,KAAK06D,WAAW/gC,mBAAmBJ,EAAS2iC,iBAC5Cl8D,KAAKu5B,SAASvV,kBAAkB,OAAQhkB,KAAKkkF,oBAC7ClkF,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,sBAGhB7gE,KAAK0jF,gBAAkB,SAAUluE,GAC3BxV,KAAK+gB,QAAQ+vB,YAAYqzC,gBAC7BnkF,KAAK0lB,mBAAoB,EACzB1lB,KAAKgnB,WAAW,mBAChBhnB,KAAK06D,WAAWjhC,sBAAsBF,EAAS2iC,iBAC/Cl8D,KAAKu5B,SAAShH,qBAAqB,OAAQvyB,KAAKkkF,oBAChDlkF,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,oBAEd7gE,KAAKkiB,MAAM,qBAGbliB,KAAKkkF,mBAAqB,SAAU1uE,GAClC,IAAI8kB,EAAU9kB,EAAE8kB,QACZvW,EAASvO,EAAEuO,OACf,GAAKA,EAAO+sB,YAAZ,CAEA,GAAKxW,EAAQk9B,kBAI2B,WAA7Bl9B,EAAQk9B,kBACjBpyD,EAAS2e,EAAOqgE,iBAAiB9pD,EAAS9kB,EAAEtQ,MACN,eAA7Bo1B,EAAQk9B,kBACjBpyD,EAAS2e,EAAOqgE,iBAAiB9pD,EAAS9kB,EAAEtQ,MAAM,GACZ,UAA7Bo1B,EAAQk9B,mBACjBzzC,EAAOo2C,sBACP/0D,EAASk1B,EAAQn3B,KAAK4gB,EAAQvO,EAAEtQ,MAAQ,KAExCE,EAASk1B,EAAQk9B,kBAAkBzzC,EAAQvO,EAAEtQ,MAAQ,QAZvB,CAC9B,IAAIE,EAASk1B,EAAQn3B,KAAK4gB,EAAQvO,EAAEtQ,MAAQ,IAC5C6e,EAAO+sB,YAAY1G,SAASrmB,EAAO+sB,YAAYljB,mBAC/C7J,EAAO+sB,YAAY+xC,yBAYrB,OAAOz9E,IAGTpF,KAAKokF,iBAAmB,SAAU5F,EAAKt5E,EAAM6uB,GAC3C,IAAI/zB,KAAKihE,uBAAT,CACA,IAMI77D,EANAi/E,EAAYtwD,GAAWA,EAAQswD,UAC/BC,EAAsB,GAAXvwD,GAAmBA,GAAWA,EAAQuwD,SACjDvjE,EAAU/gB,KAAK+gB,QACfpC,EAAY3e,KAAK2e,UACjBurB,EAAYvrB,EAAUurB,UACtBH,GAAUs6C,EAAY1lE,EAAYurB,GAAWH,OAEjD,IAAKA,EAAOxpC,OAAQ,OAAOi+E,EAAIr7E,KAAOq7E,EAAIr7E,KAAKnD,KAAMkF,GAAQ,IAAMs5E,EAAIx+E,KAAMkF,GAAQ,IACrF,IAAIq/E,EAAM5lE,EAAUkT,eACpBlT,EAAUkT,eAAiB,GAC3B,IAAIgwD,EAAS,IAAIx9C,EAAUtjB,GAC3B/gB,KAAKihE,wBAAyB,EAE9B,IAAK,IAAIt/D,EAAIooC,EAAOxpC,OAAQoB,KAAM,CAChC,GAAI2iF,EACF,KAAO3iF,EAAI,GAAKooC,EAAOpoC,GAAG8E,MAAMme,KAAOmlB,EAAOpoC,EAAI,GAAG6hB,IAAIoB,KACvDjjB,IAIJkgF,EAAOvzD,kBAAkByb,EAAOpoC,IAChCkgF,EAAOp9E,MAAQ9C,EACf3B,KAAK2e,UAAYoC,EAAQpC,UAAYkjE,EACrC,IAAI2C,EAAYhG,EAAIr7E,KAAOq7E,EAAIr7E,KAAKnD,KAAMkF,GAAQ,IAAMs5E,EAAIx+E,KAAMkF,GAAQ,IACrEE,QAAwB/D,IAAdmjF,IAAyBp/E,EAASo/E,GACjD3C,EAAOj0D,gBAAgBmc,EAAOpoC,IAGhCkgF,EAAO7nD,SACPh6B,KAAK2e,UAAYoC,EAAQpC,UAAYA,EACrC3e,KAAKihE,wBAAyB,EAC9BtiD,EAAUkT,eAAiB0yD,EAC3B5lE,EAAUkkE,yBACV,IAAI4B,EAAOzkF,KAAKwhB,SAASs0D,iBAIzB,OAHA91E,KAAK89D,iBACL99D,KAAKi+D,oBACDwmB,GAAQA,EAAKtgF,MAAQsgF,EAAK7mC,IAAI59C,KAAKwhB,SAASk6C,iBAAiB+oB,EAAKtgF,MAC/DiB,IAGTpF,KAAKm6D,oBAAsB,WACpBn6D,KAAK0lB,oBAAqB1lB,KAAKihE,wBACpCjhE,KAAK8wC,YAAY3G,iBAGnBnqC,KAAKghE,gBAAkB,WACrB,IAAIjkD,EAAO,GAEX,GAAI/c,KAAK0lB,oBAAsB1lB,KAAKihE,uBAAwB,CAI1D,IAHA,IAAIl3B,EAAS/pC,KAAK8wC,YAAY5G,UAAUH,OACpC26C,EAAM,GAED/iF,EAAI,EAAGA,EAAIooC,EAAOxpC,OAAQoB,IACjC+iF,EAAI3iF,KAAK/B,KAAK+gB,QAAQgO,aAAagb,EAAOpoC,KAG5C,IAAIgjF,EAAK3kF,KAAK+gB,QAAQujB,cAAcwX,uBACpC/+B,EAAO2nE,EAAIliF,KAAKmiF,IACPpkF,SAAWmkF,EAAInkF,OAAS,GAAKokF,EAAGpkF,SAAQwc,EAAO,SAC9C/c,KAAK2e,UAAUN,YACzBtB,EAAO/c,KAAK+gB,QAAQgO,aAAa/uB,KAAKqlB,sBAGxC,OAAOtI,GAGT/c,KAAK4jF,wBAA0B,SAAUpuE,EAAGuP,GAC1C,GAAI/kB,KAAK0lB,oBAAsB1lB,KAAKihE,uBAAwB,CAC1D,IAAIhgD,EAAQjhB,KAAK8wC,YAAY/G,OAAO,GACpC,GAAI/pC,KAAK8wC,YAAYzyB,WAAa0G,GAAU/kB,KAAK8wC,YAAY/rB,OAAQ,OACrE,IAAIpe,EAAMoe,GAAU/kB,KAAK8wC,YAAY/rB,OAAS9D,EAAM0D,QAAU1D,EAAMxa,MAAQwa,EAAMuC,IAAMvC,EAAMxa,MAAQwa,EAAM0D,OACxGhe,EAAIie,KAAOG,EAAOH,KAAO5kB,KAAK+gB,QAAQ65B,wBAAwBj0C,EAAIie,IAAKje,EAAIme,QAAQA,QAAUC,EAAOD,QAAQ9kB,KAAK8wC,YAAY3G,cAAcnqC,KAAK8wC,YAAYljB,qBAIpK5tB,KAAK8zD,QAAU,SAAUC,EAAQhgC,EAAS6wD,GAIxC,IAHA7wD,EAAUA,GAAW,IACbggC,OAASA,GAAUhgC,EAAQggC,OAEb1yD,MAAlB0yB,EAAQggC,OAAqB,CAC/B,IAAI9yC,EAAQjhB,KAAK2e,UAAUN,UAAYre,KAAK2e,UAAU+I,eAAiB1nB,KAAK2e,UAAUmC,WACtFiT,EAAQggC,OAAS/zD,KAAK+gB,QAAQgO,aAAa9N,GAG7CjhB,KAAK26D,QAAQjxD,IAAIqqB,GACjB,IAAIgW,EAAS/pC,KAAK26D,QAAQ7G,QAAQ9zD,KAAK+gB,SACvC,IAAKgpB,EAAOxpC,OAAQ,OAAO,EAC3BP,KAAKslB,iBAAmB,EACxB,IAAI3G,EAAY3e,KAAK8wC,YAChB8zC,GAAUjmE,EAAUwrB,cAAcJ,EAAO,IAE9C,IAAK,IAAIpoC,EAAIooC,EAAOxpC,OAAQoB,KAC1Bgd,EAAUyrB,SAASL,EAAOpoC,IAAI,GAKhC,OAFIsf,GAAStC,EAAUurB,UAAUuX,aAAaxgC,EAAMxa,QAAQkY,EAAUyrB,SAASnpB,GAAO,GACtFjhB,KAAKslB,iBAAmB,EACjBykB,EAAOxpC,QAGhBP,KAAKoiF,gBAAkB,SAAU5nD,EAAKqqD,GACpC,IAAI5jE,EAAQjhB,KAAK2e,UAAUiP,kBACvByX,EAAcpkB,EAAM0D,QAAU1D,EAAMuC,IACpCshE,EAAa9kF,KAAK+gB,QAAQgjB,yBAAyB9iB,EAAM0D,QACzD3kB,KAAK2e,UAAUkmB,iBAAgBigD,EAAWhgE,OAAS9kB,KAAK2e,UAAUkmB,gBACtE,IAaM4hC,EAbFliC,EAAOvkC,KAAK+gB,QAAQ8mB,yBAAyBi9C,EAAWlgE,IAAM4V,EAAKsqD,EAAWhgE,QAElF,GAAK7D,EAAM5C,UAIL0G,EAASwf,OAHb,IAAI+8C,EAAethF,KAAK+gB,QAAQgjB,yBAAyBsB,EAAcpkB,EAAMuC,IAAMvC,EAAMxa,OACrFse,EAAS/kB,KAAK+gB,QAAQ8mB,yBAAyBy5C,EAAa18D,IAAM4V,EAAK8mD,EAAax8D,QAKtFugB,GACEohC,EAAWvkC,EAAMuB,WAAWc,EAAMxf,IAC7BJ,OAAS8hD,EAAShgE,OAEvBggE,EAAWvkC,EAAMuB,WAAW1e,EAAQwf,IAC/B5f,OAAS8hD,EAASjjD,IAK7B,GAFAijD,EAAS/8B,cAAgBo7C,EAAWhgE,OAE/B9kB,KAAK2e,UAAU+G,mBAGlB,GAAIm/D,EAAM,IAAIE,EAAW9jE,EAAM0D,YAF/B3kB,KAAK2e,UAAUyrB,SAASnpB,GAK1BjhB,KAAK2e,UAAUyrB,SAASq8B,GACpBse,GAAU/kF,KAAK2e,UAAU4iC,eAAewjC,IAG9C/kF,KAAK65D,oBAAsB,SAAUr/B,GAKnC,IAJA,IAAIzZ,EAAU/gB,KAAK+gB,QACfsjD,EAAMtjD,EAAQ+vB,YACdjb,EAAMwuC,EAAIt6B,OAELpoC,EAAIk0B,EAAIt1B,OAAQoB,KAAM,CAG7B,IAFIsf,EAAQ4U,EAAIl0B,IAEN0c,UAAW,CACnB,IAAIod,EAAM1a,EAAQ2G,aAAazG,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,QAC5D7D,EAAMxa,MAAMme,IAAM6W,EAAIh1B,MAAMme,IAC5B3D,EAAMxa,MAAMqe,OAAS2W,EAAIh1B,MAAMqe,OAC/B7D,EAAMuC,IAAIoB,IAAM6W,EAAIjY,IAAIoB,IACxB3D,EAAMuC,IAAIsB,OAAS2W,EAAIjY,IAAIsB,QAI/Bu/C,EAAIwe,yBACJ,IAAImC,EAAQ,GAEZ,IAASrjF,EAAIk0B,EAAIt1B,OAAQoB,KAAM,CAC7B,IAAIsf,EAAQ4U,EAAIl0B,GAChBqjF,EAAMh4C,QAAQjsB,EAAQgO,aAAa9N,IAGjCuZ,EAAM,EAAGwqD,EAAMh4C,QAAQg4C,EAAMxyD,OAAYwyD,EAAMjjF,KAAKijF,EAAMthE,SAE9D,IAAS/hB,EAAIk0B,EAAIt1B,OAAQoB,KAAM,CAEzB85B,GADAxa,EAAQ4U,EAAIl0B,IACAgiC,QAChB5iB,EAAQre,QAAQue,EAAO+jE,EAAMrjF,IAC7Bsf,EAAMxa,MAAMme,IAAM6W,EAAIh1B,MAAMme,IAC5B3D,EAAMxa,MAAMqe,OAAS2W,EAAIh1B,MAAMqe,SAInC9kB,KAAKqiF,WAAa,SAAU7nD,EAAKqqD,EAAMI,GACrC,IAAIlkE,EAAU/gB,KAAK+gB,QAEfE,EADMF,EAAQ+vB,YACFljB,kBAEhB,IAAI3M,EAAM5C,aACR4C,EAAQF,EAAQ2G,aAAazG,EAAMxa,MAAMme,IAAK3D,EAAMxa,MAAMqe,SACpDH,QAAiB,GAAR6V,EAAYvZ,EAAMxa,MAAQwa,EAAMuC,IAC/CxjB,KAAK8wC,YAAY1G,SAASnpB,IACtBgkE,GAJN,CAOA,IAAIlxB,EAAShzC,EAAQgO,aAAa9N,GAC9BwlD,EA3gBR,SAAc1lD,EAASgzC,EAAQv5B,GAI7B,OAHA4N,EAAOlV,SAASggC,MAAO,EACvB9qB,EAAOlV,SAAS6gC,OAASA,EACzB3rB,EAAOlV,SAAS0hC,WAAoB,GAARp6B,EACrB4N,EAAOmrB,KAAKxyC,GAugBFwyC,CAAKxyC,EAASgzC,EAAQv5B,GAEjCisC,IACFA,EAAS9hD,QAAiB,GAAR6V,EAAYisC,EAAShgE,MAAQggE,EAASjjD,IACxDxjB,KAAKslB,iBAAmB,EACxBtlB,KAAK+gB,QAAQijC,OAAOyiB,GACpBzmE,KAAK8wC,YAAY1G,SAASq8B,GAC1BzmE,KAAKslB,iBAAmB,EACxBtlB,KAAKwhB,SAASgF,qBAAqB,KAAM,KAGvCq+D,GAAM7kF,KAAK8wC,YAAYyQ,eAAetgC,EAAM0D,UAGlD3kB,KAAKuiF,aAAe,WAClB,IAAIxhE,EAAU/gB,KAAK+gB,QACfsjD,EAAMtjD,EAAQ+vB,YACd/G,EAASs6B,EAAIt6B,OACbnlB,GAAO,EACPsgE,EAAgBn7C,EAAO1hC,QAAO,SAAUwY,GAC1C,GAAIA,EAAE8D,OAAOC,KAAOA,EAAK,OAAO,EAChCA,EAAM/D,EAAE8D,OAAOC,OAGjB,GAAKmlB,EAAOxpC,QAAU2kF,EAAc3kF,QAAUwpC,EAAOxpC,OAAS,EAmCvD,CACL2kF,EAAcp9E,SAAQ,SAAU+Y,GAC9BwjD,EAAI9iB,eAAe1gC,EAAE8D,WAEvB,IAAIwgE,EAAS,EACTC,EAAWluC,EAAAA,EACXmuC,EAAet7C,EAAO3hC,KAAI,SAAUyY,GACtC,IAAI6hB,EAAI7hB,EAAE8D,OAEN2gE,EADOvkE,EAAQiY,QAAQ0J,EAAE9d,KACN1F,OAAOwjB,EAAE5d,QAAQsjB,OAAO,OAI/C,OAHoB,GAAhBk9C,IAAmBA,EAAc,GACjC5iD,EAAE5d,OAASqgE,IAAQA,EAASziD,EAAE5d,QAC9BwgE,EAAcF,IAAUA,EAAWE,GAChCA,KAETv7C,EAAOjiC,SAAQ,SAAU+Y,EAAGlf,GAC1B,IAAI+gC,EAAI7hB,EAAE8D,OACN/iB,EAAIujF,EAASziD,EAAE5d,OACfu8C,EAAIgkB,EAAa1jF,GAAKyjF,EACtBxjF,EAAIy/D,EAAGtgD,EAAQ/Z,OAAO07B,EAAGlmB,EAAK/B,aAAa,IAAK7Y,EAAIy/D,IAAStgD,EAAQ7Z,OAAO,IAAIg7B,EAAMQ,EAAE9d,IAAK8d,EAAE5d,OAAQ4d,EAAE9d,IAAK8d,EAAE5d,OAASljB,EAAIy/D,IACjIxgD,EAAEpa,MAAMqe,OAASjE,EAAE2C,IAAIsB,OAASqgE,EAChCtkE,EAAEpa,MAAMme,IAAM/D,EAAE2C,IAAIoB,IAAM8d,EAAE9d,IAC5B/D,EAAE8D,OAAS9D,EAAE2C,OAEf6gD,EAAI/1C,kBAAkByb,EAAO,IAC7B/pC,KAAKwhB,SAASo+C,eACd5/D,KAAKwhB,SAASq/C,wBA7DiD,CAC/D,IAAI5/C,EAAQjhB,KAAK2e,UAAUmC,WACvBykE,EAAKtkE,EAAMxa,MAAMme,IACjB4gE,EAAKvkE,EAAMuC,IAAIoB,IACf6gE,EAAaF,GAAMC,EAEvB,GAAIC,EAAY,CACd,IACIhnD,EADA33B,EAAM9G,KAAK+gB,QAAQmK,YAGvB,GACEuT,EAAOz+B,KAAK+gB,QAAQiY,QAAQwsD,SACrB,OAAOniF,KAAKo7B,MAAW+mD,EAAK1+E,GAErC,GACE23B,EAAOz+B,KAAK+gB,QAAQiY,QAAQusD,SACrB,OAAOliF,KAAKo7B,MAAW8mD,EAAK,GAEjCA,EAAK,IAAGA,EAAK,GACbC,GAAM1+E,IAAK0+E,EAAK1+E,EAAM,GAG5B,IAAIu4B,EAAQr/B,KAAK+gB,QAAQ67B,gBAAgB2oC,EAAIC,GAC7CnmD,EAAQr/B,KAAK0lF,aAAarmD,EAAOomD,GACjCzlF,KAAK+gB,QAAQ/Z,OAAO,CAClB4d,IAAK2gE,EACLzgE,OAAQ,GACPua,EAAM78B,KAAK,MAAQ,MAEjBijF,IACHxkE,EAAMxa,MAAMqe,OAAS,EACrB7D,EAAMuC,IAAIsB,OAASua,EAAMA,EAAM9+B,OAAS,GAAGA,QAG7CP,KAAK2e,UAAUuC,SAASD,KA+B5BjhB,KAAK0lF,aAAe,SAAUrmD,EAAOsmD,GACnC,IAEIC,EAAQC,EAAOC,EAFfC,GAAgB,EAChBC,GAAiB,EAErB,OAAO3mD,EAAMj3B,KAAI,SAAUq2B,GACzB,IAAIhJ,EAAIgJ,EAAKn7B,MAAM,2BACnB,OAAKmyB,EAES,MAAVmwD,GACFA,EAASnwD,EAAE,GAAGl1B,OACdslF,EAAQpwD,EAAE,GAAGl1B,OACbulF,EAAOrwD,EAAE,GAAGl1B,OACLk1B,IAGLmwD,EAASC,EAAQC,GAAQrwD,EAAE,GAAGl1B,OAASk1B,EAAE,GAAGl1B,OAASk1B,EAAE,GAAGl1B,SAAQylF,GAAiB,GACnFJ,GAAUnwD,EAAE,GAAGl1B,SAAQwlF,GAAgB,GACvCH,EAASnwD,EAAE,GAAGl1B,SAAQqlF,EAASnwD,EAAE,GAAGl1B,QACpCslF,EAAQpwD,EAAE,GAAGl1B,SAAQslF,EAAQpwD,EAAE,GAAGl1B,QAClCulF,EAAOrwD,EAAE,GAAGl1B,SAAQulF,EAAOrwD,EAAE,GAAGl1B,QAC7Bk1B,GAdQ,CAACgJ,MAefr2B,IAAIu9E,EAAYM,EAAYF,EAAgBC,EAU/C,SAAoBvwD,GAClB,OAAQA,EAAE,GAAYsiB,EAAO6tC,EAASC,EAAQpwD,EAAE,GAAGl1B,QAAUk1B,EAAE,GAAKsiB,EAAO+tC,GAAarwD,EAAE,GAAG/yB,QAAQ,aAAc,OAApG+yB,EAAE,IAX0DwwD,EAc7E,SAAiBxwD,GACf,OAAQA,EAAE,GAAYsiB,EAAO6tC,GAAUnwD,EAAE,GAAKsiB,EAAO+tC,GAAQrwD,EAAE,GAAG/yB,QAAQ,aAAc,OAAzE+yB,EAAE,KAbnB,SAASsiB,EAAO7rC,GACd,OAAOsQ,EAAK/B,aAAa,IAAKvO,GAGhC,SAAS+5E,EAAUxwD,GACjB,OAAQA,EAAE,GAAYsiB,EAAO6tC,GAAUnwD,EAAE,GAAKsiB,EAAO8tC,EAAQpwD,EAAE,GAAGl1B,OAASulF,GAAQrwD,EAAE,GAAG/yB,QAAQ,aAAc,OAA/F+yB,EAAE,OAWpBh0B,KAAK44D,EAAO94D,WAMfoB,EAAQghF,gBAAkB,SAAUnuE,GAClC,IAAIuL,EAAUvL,EAAEuL,QAEZA,IAAYA,EAAQ+vB,cACtB/vB,EAAQmxD,kBAAoB,GAC5BnxD,EAAQpC,UAAUokE,iBAClBhiE,EAAQ+vB,YAAc/vB,EAAQpC,WAGhC3e,KAAK8wC,YAAc/vB,GAAWA,EAAQ+vB,YACtC,IAAIurB,EAAa7mD,EAAE6mD,WAEfA,IACFA,EAAWvrB,YAAYpe,IAAI,WAAY1yB,KAAK2iF,aAC5CtmB,EAAWvrB,YAAYpe,IAAI,cAAe1yB,KAAK4iF,gBAC/CvmB,EAAWvrB,YAAYpe,IAAI,cAAe1yB,KAAKyjF,gBAC/CpnB,EAAWvrB,YAAYpe,IAAI,eAAgB1yB,KAAK0jF,iBAChDrnB,EAAWvrB,YAAYvM,KAAK7R,IAAI,SAAU1yB,KAAK4jF,yBAC/CvnB,EAAWvrB,YAAY/rB,OAAO2N,IAAI,SAAU1yB,KAAK4jF,0BAG/C7iE,IACFA,EAAQ+vB,YAAYjvB,GAAG,WAAY7hB,KAAK2iF,aACxC5hE,EAAQ+vB,YAAYjvB,GAAG,cAAe7hB,KAAK4iF,gBAC3C7hE,EAAQ+vB,YAAYjvB,GAAG,cAAe7hB,KAAKyjF,gBAC3C1iE,EAAQ+vB,YAAYjvB,GAAG,eAAgB7hB,KAAK0jF,iBAC5C3iE,EAAQ+vB,YAAYvM,KAAK1iB,GAAG,SAAU7hB,KAAK4jF,yBAC3C7iE,EAAQ+vB,YAAY/rB,OAAOlD,GAAG,SAAU7hB,KAAK4jF,0BAG3C7iE,GAAW/gB,KAAK0lB,mBAAqB3E,EAAQpC,UAAU+G,oBACrD3E,EAAQpC,UAAU+G,kBAAmB1lB,KAAKyjF,iBAAsBzjF,KAAK0jF,oBA6C7E/gF,EAAQ4gF,YAAcA,EACtBzhF,EAAS,YAAYgyB,cAAcumC,EAAO94D,UAAW,SAAU,CAC7D2kF,kBAAmB,CACjBx8E,IAAK,SAAa+W,GAChB8iE,EAAYvjF,MAERygB,GACFzgB,KAAK6hB,GAAG,gBAAiB7hB,KAAKwjF,6BAC9BxjF,KAAK6hB,GAAG,YAAaoC,KAErBjkB,KAAK0yB,IAAI,gBAAiB1yB,KAAKwjF,6BAC/BxjF,KAAK0yB,IAAI,YAAazO,KAG1B3b,OAAO,GAET69E,kBAAmB,CACjBz8E,IAAK,SAAa+W,GAChBzgB,KAAKyhF,oBAAsBhhE,GAE7BnY,OAAO,QAIbtF,IAAI9C,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,cAAc,SAAU4B,EAAUa,EAASxC,GACnH,aAEA,IAAI+hC,EAAQpgC,EAAS,eAAeogC,MAEhCkkD,EAAWzjF,EAAQyjF,SAAW,cAElC,WACEpmF,KAAKqmF,mBAAqB,KAC1BrmF,KAAKsmF,kBAAoB,KAEzBtmF,KAAKglD,cAAgB,SAAUjkC,EAASmoD,EAAWtkD,GACjD,IAAI6Z,EAAO1d,EAAQiY,QAAQpU,GAC3B,OAAI5kB,KAAKqmF,mBAAmBhjF,KAAKo7B,GAAc,QAC9B,gBAAbyqC,GAA+BlpE,KAAKsmF,mBAAqBtmF,KAAKsmF,kBAAkBjjF,KAAKo7B,GAAc,MAChG,IAGTz+B,KAAKilD,mBAAqB,SAAUlkC,EAASmoD,EAAWtkD,GACtD,OAAO,MAGT5kB,KAAKumF,iBAAmB,SAAUxlE,EAAS6D,EAAKE,GAC9C,IAAIoR,EAAK,KACLuI,EAAO1d,EAAQiY,QAAQpU,GACvB4hE,EAAa/nD,EAAK2J,OAAOlS,GAC7B,IAAmB,GAAfswD,EAAJ,CAMA,IALA,IAAIpkD,EAActd,GAAU2Z,EAAKl+B,OAC7BgyD,EAASxxC,EAAQmK,YACjBiX,EAAWvd,EACXyd,EAASzd,IAEJA,EAAM2tC,GAAQ,CACrB,IAAIhxB,EAAQxgB,EAAQiY,QAAQpU,GAAKwjB,OAAOlS,GACxC,IAAc,GAAVqL,EAAJ,CACA,GAAIA,GAASilD,EAAY,MACzBnkD,EAASzd,GAGX,GAAIyd,EAASF,EAAU,CACrB,IAAIG,EAAYvhB,EAAQiY,QAAQqJ,GAAQ9hC,OACxC,OAAO,IAAI2hC,EAAMC,EAAUC,EAAaC,EAAQC,MAIpDtiC,KAAKymF,oBAAsB,SAAU1lE,EAAS8yB,EAASjvB,EAAKE,EAAQ0hC,GAClE,IAAI//C,EAAQ,CACVme,IAAKA,EACLE,OAAQA,EAAS,GAEftB,EAAMzC,EAAQulC,oBAAoBzS,EAASptC,EAAO+/C,GACtD,GAAKhjC,EAAL,CACA,IAAIqiC,EAAK9kC,EAAQ6X,YAAYpV,EAAIoB,KAQjC,OAPU,MAANihC,IAAYA,EAAK9kC,EAAQikC,cAAcxhC,EAAIoB,MAErC,SAANihC,GAAiBriC,EAAIoB,IAAMne,EAAMme,MACnCpB,EAAIoB,MACJpB,EAAIsB,OAAS/D,EAAQiY,QAAQxV,EAAIoB,KAAKrkB,QAGjC2hC,EAAMuB,WAAWh9B,EAAO+c,KAGjCxjB,KAAK0mF,oBAAsB,SAAU3lE,EAAS8yB,EAASjvB,EAAKE,EAAQ0hC,GAClE,IAAIhjC,EAAM,CACRoB,IAAKA,EACLE,OAAQA,GAENre,EAAQsa,EAAQmxB,oBAAoB2B,EAASrwB,GACjD,GAAK/c,EAGL,OAFAA,EAAMqe,SACNtB,EAAIsB,SACGod,EAAMuB,WAAWh9B,EAAO+c,MAEhC/hB,KAAK2kF,EAAS7kF,cAEnByB,IAAI9C,OAAO,qBAAsB,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAU4B,EAAUa,EAASxC,GAC7G,aAEAwC,EAAQ25E,QAAS,EACjB35E,EAAQy5E,SAAW,SACnBz5E,EAAQiL,QAAU,s0EAwHR9L,EAAS,cACf6L,gBAAgBhL,EAAQiL,QAASjL,EAAQy5E,aAE/Cp5E,IAAI9C,OAAO,mBAAoB,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,cAAc,SAAU4B,EAAUa,EAASxC,GACvI,aAEU2B,EAAS,aAAnB,IACIya,EAAMza,EAAS,aACPA,EAAS,WAAWogC,MAEhC,SAASykD,EAAY5lE,GACnB/gB,KAAK+gB,QAAUA,EACf/gB,KAAK+gB,QAAQ6lE,cAAgB5mF,KAC7BA,KAAK+gB,QAAQ4wC,aAAe3xD,KAAK2xD,aACjC3xD,KAAK+gB,QAAQ8xC,uBAAyB7yD,KAAK6yD,uBAC3C7yD,KAAK6mF,eAAiB7mF,KAAK6mF,eAAe/hF,KAAK9E,MAC/CA,KAAK8mF,cAAgB9mF,KAAK8mF,cAAchiF,KAAK9E,MAC7CA,KAAK+mF,eAAiB/mF,KAAK+mF,eAAejiF,KAAK9E,MAC/CA,KAAK+gB,QAAQimE,gBAAkB,GAC/BhnF,KAAKinF,gBAAkBjnF,KAAKinF,gBAAgBniF,KAAK9E,MACjDA,KAAK+gB,QAAQc,GAAG,SAAU7hB,KAAK6mF,gBAC/B7mF,KAAK+gB,QAAQc,GAAG,aAAc7hB,KAAKknF,cACnClnF,KAAK+gB,QAAQc,GAAG,eAAgB7hB,KAAKinF,kBAGvC,WACEjnF,KAAK2xD,aAAe,SAAU/sC,GAC5B,IAAIiV,EAGJ,OAFsBA,EAAlB75B,KAAKupC,aAAiBvpC,KAAKupC,YAAY3kB,IAAQ5kB,KAAKupC,YAAY3kB,GAAKorB,UAAuB,EAE3FhwC,KAAK8/B,cAAiB9/B,KAAKggC,UAAUpb,GAGjC5kB,KAAKggC,UAAUpb,GAAKrkB,OAAS,EAAIs5B,EAFjC,EAAIA,GAMf75B,KAAK6yD,uBAAyB,WAC5B,IAAID,EAAa,EAIjB,OAHA5yD,KAAKupC,YAAYzhC,SAAQ,SAAUmlD,GAC7BA,GAAKA,EAAEjd,WAAaid,EAAEk6B,SAAQv0B,GAAc3F,EAAEjd,aAE7C4iB,GAGT5yD,KAAKinF,gBAAkB,SAAUzxE,GAC/BxV,KAAK+5B,OAAOvkB,EAAEuO,SAGhB/jB,KAAK+5B,OAAS,SAAUhW,GAClBA,GAAUA,EAAO6iE,eAAiB7iE,EAAO6iE,eAAiB5mF,MAAM+jB,EAAO6iE,cAAc5sD,SACrFh6B,KAAK+jB,QAAUA,IACnB/jB,KAAKg6B,SACLh6B,KAAK+jB,OAASA,EAEVA,IACFA,EAAO6iE,cAAgB5mF,KACvB+jB,EAAOvC,SAASK,GAAG,eAAgB7hB,KAAK+mF,gBACxChjE,EAAOvC,SAASK,GAAG,cAAe7hB,KAAK8mF,kBAI3C9mF,KAAKg6B,OAAS,SAAUxkB,GACtB,IAAIuO,EAAS/jB,KAAK+jB,OAClB,GAAKA,EAAL,CACA/jB,KAAK+jB,OAAS,KACdA,EAAO6iE,cAAgB,KACvB7iE,EAAOvC,SAASkR,IAAI,eAAgB1yB,KAAK+mF,gBACzChjE,EAAOvC,SAASkR,IAAI,cAAe1yB,KAAK8mF,eACxC,IAAIv9C,EAAcvpC,KAAK+gB,QAAQwoB,YAC/BA,GAAeA,EAAYzhC,SAAQ,SAAUmlD,GACvCA,GAAKA,EAAEpgD,IAAMogD,EAAEpgD,GAAGyD,aACpB28C,EAAEm6B,aAAc,EAChBn6B,EAAEpgD,GAAGyD,WAAWb,YAAYw9C,EAAEpgD,UAKpC7M,KAAKknF,aAAe,SAAU1xE,EAAGuL,GAC/B,IAAIwoB,EAAcxoB,EAAQwoB,YAC1B,GAAKA,GAAgB/zB,EAAEioB,OAAvB,CAMA,IALA,IAAIjF,EAAOhjB,EAAEsE,KACTrT,EAAQ+xB,EAAK/xB,MAAMme,IACnBpB,EAAMgV,EAAKhV,IAAIoB,IACf2E,EAAmB,OAAZ/T,EAAEioB,OAEJ97B,EAAI8E,EAAQ,EAAG9E,EAAI6hB,EAAK7hB,IAC3B4nC,EAAY5nC,KAAI4nC,EAAY5nC,GAAGwlF,OAAS59D,GAG1CggB,EAAY/lB,KACV+F,EACGggB,EAAY9iC,GAAmD8iC,EAAY/lB,GAAK2jE,OAAS59D,EAArEggB,EAAY9iC,GAAS8iC,EAAY/lB,IAEtD+lB,EAAY9iC,IAAU8iC,EAAY/lB,KAAM+lB,EAAY9iC,QAASpF,GACjEkoC,EAAY/lB,GAAK2jE,OAAS59D,MAKhCvpB,KAAK6mF,eAAiB,SAAUznD,GAC9B,IAAImK,EAAcvpC,KAAK+gB,QAAQwoB,YAC/B,GAAKA,EAAL,CACA,IAAIpH,EAAW/C,EAAM34B,MAAMme,IACvB8W,EAAM0D,EAAM5b,IAAIoB,IAAMud,EAE1B,GAAY,IAARzG,QAAmB,GAAoB,UAAhB0D,EAAM3B,OAAoB,CACrC8L,EAAYnjC,OAAO+7B,EAAW,EAAGzG,GACvC5zB,SAAQ,SAAUmlD,GACxBA,GAAKjtD,KAAKqnF,iBAAiBp6B,KAC1BjtD,MACHA,KAAKsnF,kBACA,CACL,IAAIpiF,EAAO,IAAId,MAAMs3B,GACrBx2B,EAAK8nC,QAAQ7K,EAAU,GACvBoH,EAAYnjC,OAAOzF,MAAM4oC,EAAarkC,GACtClF,KAAKsnF,iBAITtnF,KAAKsnF,YAAc,WACjB,IAAI/9C,EAAcvpC,KAAK+gB,QAAQwoB,YAC/B,GAAKA,EAAL,CACA,IAAIg+C,GAAY,EAChBh+C,EAAYzhC,SAAQ,SAAUmlD,EAAGtrD,GAC/B,GAAIsrD,EAIF,IAHAs6B,GAAY,EACZt6B,EAAEroC,IAAMjjB,EAEDsrD,EAAEu6B,YACPv6B,EAAEu6B,WAAW5iE,IAAMjjB,EACnBsrD,EAAIA,EAAEu6B,cAIRD,IAAWvnF,KAAK+gB,QAAQwoB,YAAc,QAG5CvpC,KAAKynF,cAAgB,SAAUx6B,GACxBjtD,KAAK+gB,QAAQwoB,cAAavpC,KAAK+gB,QAAQwoB,YAAc,IAAInlC,MAAMpE,KAAK+gB,QAAQmK,cACjF,IAAImH,EAAMryB,KAAK+gB,QAAQwoB,YAAY0jB,EAAEroC,KAEjCyN,IACF46B,EAAEu6B,WAAan1D,EAEXA,EAAIxlB,IAAMwlB,EAAIxlB,GAAGyD,aACnB+hB,EAAIxlB,GAAGyD,WAAWb,YAAY4iB,EAAIxlB,IAClCwlB,EAAI+0D,aAAc,IAItBpnF,KAAK+gB,QAAQwoB,YAAY0jB,EAAEroC,KAAOqoC,EAClCA,EAAElsC,QAAU/gB,KAAK+gB,QACjB,IAAIS,EAAWxhB,KAAK+jB,OAAOvC,SAEvByrC,EAAE9jC,OAAS8jC,EAAEpgD,KACfogD,EAAEpgD,GAAK0P,EAAI3R,cAAc,OACzBqiD,EAAEpgD,GAAGwD,UAAY48C,EAAE9jC,MAGjB8jC,EAAEpgD,KACJ0P,EAAIxP,YAAYkgD,EAAEpgD,GAAI,2BACtBogD,EAAEpgD,GAAGgB,MAAMqB,SAAW,WACtB+9C,EAAEpgD,GAAGgB,MAAM65E,OAAS,EACpBlmE,EAASe,UAAUzU,YAAYm/C,EAAEpgD,IACjCogD,EAAEm6B,aAAc,GAGbn6B,EAAE06B,cACL16B,EAAEpgD,GAAGgB,MAAM65E,OAAS,GAGD,MAAjBz6B,EAAE26B,cACJ36B,EAAE26B,YAAc36B,EAAEpgD,GAAG4c,cAGL,MAAdwjC,EAAEjd,WACJid,EAAEjd,SAAWid,EAAE26B,YAAcpmE,EAASyL,YAAYD,YAGpD,IAAIwL,EAAOx4B,KAAK+gB,QAAQ0X,UAAUw0B,EAAEroC,IAAK,GAGzC,GAFAqoC,EAAE46B,MAAQrvD,EAENA,EAAM,CACR,IAAI+Q,EAAcvpC,KAAK+gB,QAAQwoB,YAC3B0jB,EAAEroC,KAAO4T,EAAKhV,IAAIoB,KAAQ2kB,EAAY/Q,EAAK/xB,MAAMme,KAA2CqoC,EAAEk6B,QAAS,EAAhD59C,EAAY/Q,EAAK/xB,MAAMme,KAAOqoC,EAc3F,OAXAjtD,KAAK+gB,QAAQmB,MAAM,aAAc,CAC/BpI,KAAM,CACJrT,MAAO,CACLme,IAAKqoC,EAAEroC,QAKb5kB,KAAKsnF,cACLtnF,KAAK8mF,cAAc,KAAMtlE,GACzBxhB,KAAK8nF,gBAAgB76B,GACdA,GAGTjtD,KAAKqnF,iBAAmB,SAAUp6B,GAIhC,GAHAA,EAAEm6B,aAAc,EAChBn6B,EAAElsC,QAAU,KACRksC,EAAEpgD,IAAMogD,EAAEpgD,GAAGyD,YAAY28C,EAAEpgD,GAAGyD,WAAWb,YAAYw9C,EAAEpgD,IACvDogD,EAAElpC,QAAUkpC,EAAElpC,OAAO4F,QAAS,IAChCsjC,EAAElpC,OAAO4F,UACT,MAAOnU,IAET,GAAIxV,KAAK+gB,QAAQwoB,YAAa,CAC5B,IAAIw+C,EAAK/nF,KAAK+gB,QAAQwoB,YAAY0jB,EAAEroC,KAEpC,GAAImjE,GAAM96B,EACRjtD,KAAK+gB,QAAQwoB,YAAY0jB,EAAEroC,KAAOqoC,EAAEu6B,WAChCv6B,EAAEu6B,YAAYxnF,KAAK8nF,gBAAgB76B,EAAEu6B,iBAEzC,KAAOO,GAAI,CACT,GAAIA,EAAGP,YAAcv6B,EAAG,CACtB86B,EAAGP,WAAav6B,EAAEu6B,WAClB,MAGFO,EAAKA,EAAGP,YAKdxnF,KAAK+gB,QAAQmB,MAAM,aAAc,CAC/BpI,KAAM,CACJrT,MAAO,CACLme,IAAKqoC,EAAEroC,QAKb5kB,KAAKsnF,eAGPtnF,KAAKgoF,gBAAkB,SAAUpjE,GAK/B,IAJA,IAAI2kB,EAAcvpC,KAAK+gB,QAAQwoB,YAC3B0jB,EAAI1jB,GAAeA,EAAY3kB,GAC/B8pB,EAAO,GAEJue,GACLve,EAAK3sC,KAAKkrD,GACVA,EAAIA,EAAEu6B,WAGR,OAAO94C,GAGT1uC,KAAK8nF,gBAAkB,SAAU76B,GAC/BjtD,KAAK+gB,QAAQimE,gBAAgBjlF,KAAKkrD,GAElCjtD,KAAK+jB,QAAU/jB,KAAK+jB,OAAOvC,SAAS08C,cAGtCl+D,KAAK+mF,eAAiB,SAAUvxE,EAAGgM,GACjC,IAAIymE,EAAiBjoF,KAAK+gB,QAAQimE,gBAC9BrwD,EAASnV,EAASyL,YACtB,GAAKg7D,GAAmBA,EAAe1nF,OAAvC,CAGA,IAFA,IAAI4G,EAAM+vC,EAAAA,EAEDv1C,EAAI,EAAGA,EAAIsmF,EAAe1nF,OAAQoB,IAAK,CAC9C,IAAIsrD,EAAIg7B,EAAetmF,GACvB,GAAKsrD,GAAMA,EAAEpgD,IACTogD,EAAElsC,SAAW/gB,KAAK+gB,QAAtB,CAEA,IAAKksC,EAAEm6B,YAAa,CAClB,GAAIpnF,KAAK+gB,QAAQwoB,YAAY0jB,EAAEroC,MAAQqoC,EAAG,SAC1CA,EAAEm6B,aAAc,EAChB5lE,EAASe,UAAUzU,YAAYm/C,EAAEpgD,IAGnCogD,EAAEpzB,EAAIozB,EAAEpgD,GAAG4c,aAENwjC,EAAEi7B,aACLj7B,EAAEA,EAAIA,EAAEpgD,GAAG0C,YACX09C,EAAEF,YAAclmD,KAAKslE,KAAKlf,EAAEA,EAAIt2B,EAAOzJ,iBAGzC,IAAI8iB,EAAWid,EAAEpzB,EAAIlD,EAAO3J,WAExBigC,EAAEk7B,YACJn4C,GAAYhwC,KAAK+gB,QAAQ6wC,gBAAgB3E,EAAEroC,MAC5B,IAAGorB,EAAW,GAG3Bid,EAAEjd,UAAYA,IAChBid,EAAEjd,SAAWA,EACTid,EAAEroC,IAAMzd,IAAKA,EAAM8lD,EAAEroC,OAIzBzd,GAAO+vC,EAAAA,IACTl3C,KAAK+gB,QAAQmB,MAAM,aAAc,CAC/BpI,KAAM,CACJrT,MAAO,CACLme,IAAKzd,MAKXnH,KAAK+gB,QAAQmsC,gBAAkB,MAGjCltD,KAAK+gB,QAAQimE,gBAAkB,KAGjChnF,KAAK8mF,cAAgB,SAAUtxE,EAAGgM,GAChC,IAAImV,EAASnV,EAASyL,YAClBsc,EAAcvpC,KAAK+gB,QAAQwoB,YAC/B,GAAKA,EAAL,CAIA,IAHA,IAAIuV,EAAQj4C,KAAKM,IAAInH,KAAKujC,SAAU5M,EAAO4M,UACvClpB,EAAOxT,KAAKC,IAAI9G,KAAKwjC,QAAS7M,EAAO6M,QAAS+F,EAAYhpC,QAEvDu+C,EAAQ,IAAMvV,EAAYuV,IAC/BA,IAGF9+C,KAAKujC,SAAW5M,EAAO4M,SACvBvjC,KAAKwjC,QAAU7M,EAAO6M,QACtBhiB,EAASuM,aAAa4I,OAASA,EAE/B,IAAK,IAAIh1B,EAAIm9C,EAAOn9C,GAAK0Y,EAAM1Y,IAAK,CAClC,IAAIsrD,EAAI1jB,EAAY5nC,GACpB,GAAKsrD,GAAMA,EAAEpgD,GAEb,GAAIogD,EAAEk6B,OACJl6B,EAAEpgD,GAAGgB,MAAM4U,KAAO,KAAOwqC,EAAE26B,aAAe,GAAK,SADjD,CAKK36B,EAAEm6B,cACLn6B,EAAEm6B,aAAc,EAChB5lE,EAASe,UAAUzU,YAAYm/C,EAAEpgD,KAGnC,IAAI4V,EAAMjB,EAASuM,aAAaikD,iBAAiB,CAC/CptD,IAAKjjB,EACLmjB,OAAQ,IACP,GAAMrC,IACJwqC,EAAEk7B,YAAW1lE,GAAOkU,EAAO3J,WAAahtB,KAAK+gB,QAAQ6wC,gBAAgB3E,EAAEroC,MAC5EqoC,EAAEpgD,GAAGgB,MAAM4U,IAAMA,EAAMkU,EAAOhb,OAAS,KACvC,IAAIxM,EAAO89C,EAAE06B,YAAc,EAAInmE,EAASspD,YACnC7d,EAAEi7B,aAAY/4E,GAAQqS,EAASzR,YACpCk9C,EAAEpgD,GAAGgB,MAAMsB,KAAOA,EAAO,KAErB89C,EAAEm7B,WAAan7B,EAAEF,cACnBE,EAAEpgD,GAAGgB,MAAMiB,SAAW6nB,EAAO9nB,MAAQ,EAAI8nB,EAAOq1C,QAAU,MAGxD/e,EAAEi7B,WACJj7B,EAAEpgD,GAAGgB,MAAM0V,MAAQ/B,EAASq0D,UAAUnsD,WAAa,KAEnDujC,EAAEpgD,GAAGgB,MAAM0V,MAAQ,SAIxB9hB,KAAKklF,EAAYplF,WACpBoB,EAAQgkF,YAAcA,KAExB3jF,IAAI9C,OAAO,uBAAwB,CAAC,UAAW,UAAW,SAAU,mBAAoB,cAAe,cAAc,SAAU4B,EAAUa,EAASxC,GAChJ,aAEA,IAAIwmF,EAAc7kF,EAAS,mBAAmB6kF,YAC1CpqE,EAAMza,EAAS,cACfogC,EAAQpgC,EAAS,YAAYogC,MA8CjCv/B,EAAQw0D,gBAAkB,SAAUpzC,EAAQyW,GAC1C,IAAIzZ,EAAUgD,EAAOhD,QAEhBA,EAAQ6lE,gBACX7lE,EAAQ6lE,cAAgB,IAAID,EAAY5lE,GACxCA,EAAQ6lE,cAAc7sD,OAAOhW,IAG/B,IAAIpd,EAAMod,EAAO6tB,oBACbhtB,EAAMje,EAAIie,IACVyjE,EAAYtnE,EAAQ6lE,cAAcoB,gBAAgBpjE,GAAKvc,QAAO,SAAU4kD,GAC1E,MAAiB,eAAVA,EAAEn4C,QACR,GAECuzE,EACFA,EAAU1+D,UAEV/E,GAAO4V,EAGT,IACI8tD,EADAt9B,EAnDN,SAAyBjqC,EAAS6D,EAAK4V,GACrC,IAAIwwB,EAAcjqC,EAAQkqC,iBAAiBjL,KAAK9d,EAAMgC,eACtD,GAAK8mB,EAAYzqD,OAAjB,CACA,IAAIoB,EAhBN,SAAsBsC,EAAO8vD,EAAQw0B,GAInC,IAHA,IAAIzpC,EAAQ,EACRzkC,EAAOpW,EAAM1D,OAAS,EAEnBu+C,GAASzkC,GAAM,CACpB,IAAIwtC,EAAM/I,EAAQzkC,GAAQ,EACtBgH,EAAIknE,EAAWx0B,EAAQ9vD,EAAM4jD,IACjC,GAAIxmC,EAAI,EAAGy9B,EAAQ+I,EAAM,MAAO,MAAIxmC,EAAI,GAAuB,OAAOwmC,EAA3BxtC,EAAOwtC,EAAM,GAG1D,QAAS/I,EAAQ,GAMT0pC,CAAax9B,EAAa,CAChCpmC,IAAKA,EACLE,QAAS,GACRod,EAAMgC,eACLviC,EAAI,IAAGA,GAAKA,EAAI,GAChBA,GAAKqpD,EAAYzqD,OAAQoB,EAAI64B,EAAM,EAAI,EAAIwwB,EAAYzqD,OAAS,EAAiB,IAANoB,GAAW64B,EAAM,IAAG74B,EAAIqpD,EAAYzqD,OAAS,GAC5H,IAAIyqB,EAAaggC,EAAYrpD,GAC7B,GAAKqpB,GAAewP,EAApB,CAEA,GAAIxP,EAAWpG,MAAQA,EAAK,CAC1B,GACEoG,EAAaggC,EAAYrpD,GAAK64B,SACvBxP,GAAcA,EAAWpG,MAAQA,GAE1C,IAAKoG,EAAY,OAAOggC,EAAYzoD,QAGtC,IAAIkmF,EAAU,GACd7jE,EAAMoG,EAAWpG,IAEjB,GACE6jE,EAAQjuD,EAAM,EAAI,UAAY,QAAQxP,GACtCA,EAAaggC,EAAYrpD,GAAK64B,SACvBxP,GAAcA,EAAWpG,KAAOA,GAEzC,OAAO6jE,EAAQloF,QAAUkoF,IAuBPC,CAAgB3nE,EAAS6D,EAAK4V,GAGhD,GAAIwwB,EAAa,CACf,IAAIhgC,EAAaggC,EAAY,GAC7BrkD,EAAIme,QAAUkG,EAAWrkB,KAAmC,iBAArBqkB,EAAWlG,OAAqBkG,EAAWrkB,IAAI+sD,GAAK1oC,EAAWlG,SAAW,EACjHne,EAAIie,IAAMoG,EAAWpG,IACrB0jE,EAAavkE,EAAOvC,SAAS8I,aAAaW,aAAatkB,EAAIie,SACtD,IAAIyjE,EACT,OAEAC,EAAa,CACXvrE,KAAM,CAAC,eACPjQ,UAAW,UAIfiX,EAAOhD,QAAQijC,OAAOr9C,EAAIie,KAC1Bb,EAAOpF,UAAU4G,eAAe5e,GAChC,IAAIsmD,EAAI,CACNroC,IAAKje,EAAIie,IACTsjE,YAAY,EACZP,aAAa,EACb96E,GAAI0P,EAAI3R,cAAc,OACtBkK,KAAM,eAEJjI,EAAKogD,EAAEpgD,GAAGiB,YAAYyO,EAAI3R,cAAc,QACxC+9E,EAAQ17B,EAAEpgD,GAAGiB,YAAYyO,EAAI3R,cAAc,QAC/C+9E,EAAM77E,UAAY,sBAAwBw7E,EAAWx7E,UACrD,IAAIqC,EAAO4U,EAAOvC,SAASuM,aAAaikD,iBAAiBrrE,GAAKwI,KAC9Dw5E,EAAM96E,MAAMsB,KAAOA,EAAO4U,EAAOvC,SAASspD,YAAc,EAAI,KAC5D7d,EAAEpgD,GAAGC,UAAY,uBACjBD,EAAGC,UAAY,gBAAkBw7E,EAAWx7E,UAC5CD,EAAGwD,UAAYi4E,EAAWvrE,KAAKva,KAAK,QACpCqK,EAAGiB,YAAYyO,EAAI3R,cAAc,QAEjC,IAAI4uB,EAAK,SAAYjI,EAAG1Y,EAAQtG,GAC9B,GAAe,IAAXsG,IAA+B,QAAdtG,GAAqC,WAAdA,GAE1C,OADA06C,EAAEtjC,UACK,CACL2Q,QAAS,SAKf2yB,EAAEtjC,QAAU,WACN5F,EAAO02C,cAAc1vC,iBACzBhH,EAAO22C,WAAWjhC,sBAAsBD,GACxCzY,EAAQ6lE,cAAcS,iBAAiBp6B,GACvClpC,EAAO2O,IAAI,kBAAmBu6B,EAAEtjC,SAChC5F,EAAO2O,IAAI,gBAAiBu6B,EAAEtjC,SAC9B5F,EAAO2O,IAAI,UAAWu6B,EAAEtjC,SACxB5F,EAAO2O,IAAI,SAAUu6B,EAAEtjC,WAGzB5F,EAAO22C,WAAW/gC,mBAAmBH,GACrCzV,EAAOlC,GAAG,kBAAmBorC,EAAEtjC,SAC/B5F,EAAOlC,GAAG,gBAAiBorC,EAAEtjC,SAC7B5F,EAAOlC,GAAG,UAAWorC,EAAEtjC,SACvB5F,EAAOlC,GAAG,SAAUorC,EAAEtjC,SACtB5F,EAAOhD,QAAQ6lE,cAAca,cAAcx6B,GAC3CA,EAAEpgD,GAAG+7E,YAAc7kE,EAAO9F,MAAMnZ,KAAKif,GACrCA,EAAOvC,SAASgF,qBAAqB,KAAM,GAAK,CAC9C3D,OAAQoqC,EAAEpgD,GAAG4c,gBAIjBlN,EAAI5O,gBAAgB,u3BAiCnB,OAEH3K,IAAI9C,OAAO,UAAW,CAAC,UAAW,UAAW,SAAU,yBAA0B,cAAe,gBAAiB,aAAc,mBAAoB,kBAAmB,uBAAwB,2BAA4B,4BAA6B,kBAAmB,mBAAoB,6BAA8B,qBAAsB,uBAAwB,eAAe,SAAU4B,EAAUa,EAASxC,GACpZ,aAEA2B,EAAS,wBACT,IAAIya,EAAMza,EAAS,aACfoT,EAAQpT,EAAS,eACjBu4D,EAASv4D,EAAS,YAAYu4D,OAC9BvT,EAAchlD,EAAS,kBAAkBglD,YACzCqiB,EAAcrnE,EAAS,iBAAiBqnE,YACxC0f,EAAW/mF,EAAS,sBAAsBqzE,gBAC9CrzE,EAAS,0BACTA,EAAS,2BACTA,EAAS,iBACTA,EAAS,kBACTA,EAAS,4BACTA,EAAS,oBACTA,EAAS,sBACTa,EAAQg0B,OAAS70B,EAAS,YAC1Ba,EAAQb,SAAWA,EACea,EAAQzC,OAAS,OAEnDyC,EAAQmmF,KAAO,SAAUj8E,GACvB,GAAiB,iBAANA,EAAgB,CACzB,IAAIk8E,EAAMl8E,EAEV,KADAA,EAAKlC,SAASq+E,eAAeD,IACpB,MAAM,IAAIp1D,MAAM,4BAA8Bo1D,GAGzD,GAAIl8E,GAAMA,EAAGo8E,KAAOp8E,EAAGo8E,IAAIllE,kBAAkBs2C,EAAQ,OAAOxtD,EAAGo8E,IAAIllE,OACnE,IAAIzb,EAAQ,GAEZ,GAAIuE,GAAM,kBAAkBxJ,KAAKwJ,EAAGq8E,SAAU,CAC5C,IAAIC,EAAUt8E,EACdvE,EAAQ6gF,EAAQ7gF,MAChBuE,EAAK0P,EAAI3R,cAAc,OACvBu+E,EAAQ74E,WAAWC,aAAa1D,EAAIs8E,QAC3Bt8E,IACTvE,EAAQiU,EAAI5L,aAAa9D,GACzBA,EAAGwD,UAAY,IAGjB,IAAI/D,EAAM3J,EAAQymF,kBAAkB9gF,GAChCyb,EAAS,IAAIs2C,EAAO,IAAIwuB,EAASh8E,IACrCkX,EAAOg3C,WAAWzuD,GAClB,IAAI28E,EAAM,CACRt+E,SAAU2B,EACVyX,OAAQA,EACRw6C,SAAUx6C,EAAOu6C,OAAOx5D,KAAKif,EAAQ,OASvC,OAPIolE,IAASF,EAAIzuB,SAAW2uB,GAC5Bj0E,EAAMN,YAAY3U,OAAQ,SAAUgpF,EAAI1qB,UACxCx6C,EAAOlC,GAAG,WAAW,WACnB3M,EAAME,eAAenV,OAAQ,SAAUgpF,EAAI1qB,UAC3C0qB,EAAIllE,OAAOxB,UAAU0mE,IAAM,QAE7BllE,EAAOxB,UAAU0mE,IAAMllE,EAAOklE,IAAMA,EAC7BllE,GAGTphB,EAAQymF,kBAAoB,SAAUrsE,EAAMoyB,GAC1C,IAAI7iC,EAAM,IAAIw6C,EAAY/pC,EAAMoyB,GAEhC,OADA7iC,EAAIi8C,eAAe,IAAI4gB,GAChB78D,GAGT3J,EAAQmkD,YAAcA,EACtBnkD,EAAQwmE,YAAcA,EACtBxmE,EAAQ0mF,QAAU,WAIlBrmF,IAAIlB,SAAS,CAAC,YAAY,SAAUwE,GAQlC,IAAK,IAAIkF,KAPLlF,IACFA,EAAEqwB,OAAO9B,MAAK,GACdvuB,EAAEpG,OAAS8C,IAAI9C,QAGZD,OAAO+C,MAAK/C,OAAO+C,IAAMsD,GAEdA,EACVA,EAAEP,eAAeyF,KAAMvL,OAAO+C,IAAIwI,GAAOlF,EAAEkF,OAKrDrL,EAAOwC,QAAU1C,OAAO+C,IAAIlB,SAAS","sources":["webpack://gravitywell-website-2019/./node_modules/brace/index.js"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\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 * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * 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 * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (acequire, exports, module) params\n */\n(function () {\n var ACE_NAMESPACE = \"ace\";\n\n var global = function () {\n return this;\n }();\n\n if (!global && typeof window != \"undefined\") global = window; // strict mode\n\n if (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\") return;\n\n var define = function define(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original) define.original.apply(this, arguments);else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n\n if (arguments.length == 2) payload = deps;\n\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n };\n\n define.modules = {};\n define.payloads = {};\n /**\n * Get at functionality define()ed using the function above\n */\n\n var _acequire = function _acequire(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original) return;\n params.push(dep);\n }\n\n return callback && callback.apply(null, params) || true;\n }\n };\n\n var acequire = function acequire(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n\n if (packagedModule == undefined && acequire.original) return acequire.original.apply(this, arguments);\n return packagedModule;\n };\n\n var normalizeModule = function normalizeModule(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n } // normalize relative acequires\n\n\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n\n return moduleName;\n };\n /**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\n\n\n var lookup = function lookup(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n var module = define.modules[moduleName];\n\n if (!module) {\n module = define.payloads[moduleName];\n\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function req(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n\n module = define.modules[moduleName] = exports || module;\n }\n\n return module;\n };\n\n function exportAce(ns) {\n var root = global;\n\n if (ns) {\n if (!global[ns]) global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n }\n\n exportAce(ACE_NAMESPACE);\n})();\n\nace.define(\"ace/lib/regexp\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined,\n // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg) return;\n\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name,\n r2;\n\n if (typeof str == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name) match[name] = match[i];\n }\n }\n\n if (!compliantLastIndexIncrement && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n }\n\n return match;\n };\n\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags(regex) {\n return (regex.global ? \"g\" : \"\") + (regex.ignoreCase ? \"i\" : \"\") + (regex.multiline ? \"m\" : \"\") + (regex.extended ? \"x\" : \"\") + (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf(array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item) return i;\n }\n\n return -1;\n }\n});\nace.define(\"ace/lib/es5-shim\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n function Empty() {}\n\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n // .length is 1\n var target = this;\n\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n\n var args = slice.call(arguments, 1); // for normal call\n\n var bound = function bound() {\n if (this instanceof bound) {\n var result = target.apply(this, args.concat(slice.call(arguments)));\n\n if (Object(result) === result) {\n return result;\n }\n\n return this;\n } else {\n return target.apply(that, args.concat(slice.call(arguments)));\n }\n };\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n };\n }\n\n var call = Function.prototype.call;\n var prototypeOfArray = Array.prototype;\n var prototypeOfObject = Object.prototype;\n var slice = prototypeOfArray.slice;\n\n var _toString = call.bind(prototypeOfObject.toString);\n\n var owns = call.bind(prototypeOfObject.hasOwnProperty);\n var defineGetter;\n var defineSetter;\n var lookupGetter;\n var lookupSetter;\n var supportsAccessors;\n\n if (supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\")) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n }\n\n if ([1, 2].splice(0).length != 2) {\n if (function () {\n // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l + 2);\n a[0] = a[1] = 0;\n return a;\n }\n\n var array = [],\n lengthBefore;\n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n lengthBefore = array.length; //46\n\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length;\n\n if (lengthBefore + 1 == array.length) {\n return true; // has right splice implementation without bugs\n }\n }()) {\n //IE 6/7\n var array_splice = Array.prototype.splice;\n\n Array.prototype.splice = function (start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [start === void 0 ? 0 : start, deleteCount === void 0 ? this.length - start : deleteCount].concat(slice.call(arguments, 2)));\n }\n };\n } else {\n //IE8\n Array.prototype.splice = function (pos, removeCount) {\n var length = this.length;\n\n if (pos > 0) {\n if (pos > length) pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos + removeCount < length)) removeCount = length - pos;\n var removed = this.slice(pos, pos + removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length;\n\n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) {\n // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } else if (tailNewPos > tailOldPos) {\n // case B\n for (i = tailCount; i--;) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } // else, add == remove (nothing to do)\n\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n\n for (i = 0; i < add; ++i) {\n this[pos + i] = insert[i];\n }\n }\n }\n\n return removed;\n };\n }\n }\n\n if (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n }\n\n var boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n }\n\n if (!Array.prototype.map) {\n Array.prototype.map = function map(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) result[i] = fun.call(thisp, self[i], i, object);\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.every) {\n Array.prototype.every = function every(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n\n return true;\n };\n }\n\n if (!Array.prototype.some) {\n Array.prototype.some = function some(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n if (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result,\n i = length - 1;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n }\n\n if (!Array.prototype.indexOf || [0, 1].indexOf(1, 2) != -1) {\n Array.prototype.indexOf = function indexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n\n i = i >= 0 ? i : Math.max(0, length + i);\n\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Array.prototype.lastIndexOf || [0, 1].lastIndexOf(0, -3) != -1) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = length - 1;\n\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n\n i = i >= 0 ? i : length - Math.abs(i);\n\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (object.constructor ? object.constructor.prototype : prototypeOfObject);\n };\n }\n\n if (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" + \"non-object: \";\n\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property)) return;\n var descriptor, getter, setter;\n descriptor = {\n enumerable: true,\n configurable: true\n };\n\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n\n descriptor.value = object[property];\n return descriptor;\n };\n }\n\n if (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n }\n\n if (!Object.create) {\n var createEmpty;\n\n if (Object.prototype.__proto__ === null) {\n createEmpty = function createEmpty() {\n return {\n \"__proto__\": null\n };\n };\n } else {\n createEmpty = function createEmpty() {\n var empty = {};\n\n for (var i in empty) {\n empty[i] = null;\n }\n\n empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null;\n return empty;\n };\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\") throw new TypeError(\"typeof prototype[\" + typeof prototype + \"] != 'object'\");\n\n var Type = function Type() {};\n\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n\n if (properties !== void 0) Object.defineProperties(object, properties);\n return object;\n };\n }\n\n function doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {}\n }\n\n if (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" || doesDefinePropertyWork(document.createElement(\"div\"));\n\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n }\n\n if (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \";\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" + \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if (typeof descriptor != \"object\" && typeof descriptor != \"function\" || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {}\n }\n\n if (owns(descriptor, \"value\")) {\n if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\")) defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\")) defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n }\n\n if (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property)) Object.defineProperty(object, property, properties[property]);\n }\n\n return object;\n };\n }\n\n if (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n }\n\n if (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n }\n\n try {\n Object.freeze(function () {});\n } catch (exception) {\n Object.freeze = function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n }(Object.freeze);\n }\n\n if (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n }\n\n if (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n }\n\n if (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n }\n\n if (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n\n var name = '';\n\n while (owns(object, name)) {\n name += '?';\n }\n\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n }\n\n if (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\"],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\n \"toString\": null\n }) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n\n return keys;\n };\n }\n\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n var ws = \"\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" + \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" + \"\\u2029\\uFEFF\";\n\n if (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n }\n\n function toInteger(n) {\n n = +n;\n\n if (n !== n) {\n // isNaN\n n = 0;\n } else if (n !== 0 && n !== 1 / 0 && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n\n return n;\n }\n\n function isPrimitive(input) {\n var type = typeof input;\n return input === null || type === \"undefined\" || type === \"boolean\" || type === \"number\" || type === \"string\";\n }\n\n function toPrimitive(input) {\n var val, valueOf, toString;\n\n if (isPrimitive(input)) {\n return input;\n }\n\n valueOf = input.valueOf;\n\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n toString = input.toString;\n\n if (typeof toString === \"function\") {\n val = toString.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n throw new TypeError();\n }\n\n var toObject = function toObject(o) {\n if (o == null) {\n // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + \" to object\");\n }\n\n return Object(o);\n };\n});\nace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\", \"ace/lib/regexp\", \"ace/lib/es5-shim\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./regexp\");\n acequire(\"./es5-shim\");\n});\nace.define(\"ace/lib/dom\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\n exports.getDocumentHead = function (doc) {\n if (!doc) doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n };\n\n exports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n };\n\n exports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n };\n\n exports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n };\n\n exports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n classes.splice(index, 1);\n }\n\n el.className = classes.join(\" \");\n };\n\n exports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g),\n add = true;\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n add = false;\n classes.splice(index, 1);\n }\n\n if (add) classes.push(name);\n el.className = classes.join(\" \");\n return add;\n };\n\n exports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n };\n\n exports.hasCssString = function (id, doc) {\n var index = 0,\n sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length) {\n if (sheets[index++].owningElement.id === id) return true;\n }\n } else if (sheets = doc.getElementsByTagName(\"style\")) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) return true;\n }\n }\n\n return false;\n };\n\n exports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc)) return null;\n var style;\n if (id) cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n\n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id) style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id) style.id = id;\n exports.getDocumentHead(doc).appendChild(style);\n }\n };\n\n exports.importCssStylsheet = function (uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n exports.getDocumentHead(doc).appendChild(link);\n }\n };\n\n exports.getInnerWidth = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) + parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + element.clientWidth;\n };\n\n exports.getInnerHeight = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingTop\"), 10) + parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) + element.clientHeight;\n };\n\n exports.scrollbarWidth = function (document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = document.documentElement;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n };\n\n if (typeof document == \"undefined\") {\n exports.importCssString = function () {};\n\n return;\n }\n\n if (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function () {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function () {\n return window.pageXOffset;\n };\n } else {\n exports.getPageScrollTop = function () {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function () {\n return document.body.scrollLeft;\n };\n }\n\n if (window.getComputedStyle) exports.computedStyle = function (element, style) {\n if (style) return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };else exports.computedStyle = function (element, style) {\n if (style) return element.currentStyle[style];\n return element.currentStyle;\n };\n\n exports.setInnerHtml = function (el, innerHtml) {\n var element = el.cloneNode(false); //document.createElement(\"div\");\n\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n };\n\n if (\"textContent\" in document.documentElement) {\n exports.setInnerText = function (el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function (el) {\n return el.textContent;\n };\n } else {\n exports.setInnerText = function (el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function (el) {\n return el.innerText;\n };\n }\n\n exports.getParentWindow = function (document) {\n return document.defaultView || document.parentWindow;\n };\n});\nace.define(\"ace/lib/oop\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n\n exports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n\n return obj;\n };\n\n exports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n };\n});\nace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./fixoldbrowsers\");\n var oop = acequire(\"./oop\");\n\n var Keys = function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 224: 'Meta'\n },\n KEY_MODS: {\n \"ctrl\": 1,\n \"alt\": 2,\n \"option\": 2,\n \"shift\": 4,\n \"super\": 8,\n \"meta\": 8,\n \"command\": 8,\n \"cmd\": 8\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 107: '+',\n 109: '-',\n 110: '.',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 111: '/',\n 106: '*'\n }\n };\n var name, i;\n\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n }();\n\n oop.mixin(exports, Keys);\n\n exports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\") keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n };\n});\nace.define(\"ace/lib/useragent\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n };\n\n exports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n };\n\n if (typeof navigator != \"object\") return;\n var os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\n var ua = navigator.userAgent;\n exports.isWin = os == \"win\";\n exports.isMac = os == \"mac\";\n exports.isLinux = os == \"linux\";\n exports.isIE = navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0 ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]) : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\n\n exports.isOldIE = exports.isIE && exports.isIE < 9;\n exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\n exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/) || [])[1], 10) < 4;\n exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n exports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n exports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n exports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n exports.isIPad = ua.indexOf(\"iPad\") >= 0;\n exports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n if (exports.isIOS) exports.isMac = true;\n});\nace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keys = acequire(\"./keys\");\n var useragent = acequire(\"./useragent\");\n var pressedKeys = null;\n var ts = 0;\n\n exports.addListener = function (elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n\n if (elem.attachEvent) {\n var wrapper = function wrapper() {\n callback.call(elem, window.event);\n };\n\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n };\n\n exports.removeListener = function (elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n };\n\n exports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n };\n\n exports.stopPropagation = function (e) {\n if (e.stopPropagation) e.stopPropagation();else e.cancelBubble = true;\n };\n\n exports.preventDefault = function (e) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n };\n\n exports.getButton = function (e) {\n if (e.type == \"dblclick\") return 0;\n if (e.type == \"contextmenu\" || useragent.isMac && e.ctrlKey && !e.altKey && !e.shiftKey) return 2;\n\n if (e.preventDefault) {\n return e.button;\n } else {\n return {\n 1: 0,\n 2: 2,\n 4: 1\n }[e.button];\n }\n };\n\n exports.capture = function (el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n return onMouseUp;\n };\n\n exports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n var touchObj = touches[0];\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n callback(e);\n });\n };\n\n exports.addMouseWheelListener = function (el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function (e) {\n var factor = 8;\n\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function (e) {\n var factor = 0.35;\n\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n\n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function (e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n\n callback(e);\n });\n }\n };\n\n exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4) clicks = 1;\n } else {\n clicks = 1;\n }\n\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick) clicks = 1;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4) clicks = 0;else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e);\n }\n\n function onDblclick(e) {\n clicks = 2;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n\n if (!Array.isArray(elements)) elements = [elements];\n elements.forEach(function (el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE) exports.addListener(el, \"dblclick\", onDblclick);\n });\n };\n\n var getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window) ? function (e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n } : function (e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\n exports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n };\n\n function normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\"))) hashId |= 8;\n\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3) pressedKeys.altGr = 0;else return;\n }\n\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1) ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50) pressedKeys.altGr = true;\n }\n }\n }\n\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n\n if (hashId & 8 && keyCode >= 91 && keyCode <= 93) {\n keyCode = -1;\n }\n\n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented) return;\n }\n }\n\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented) return;else hashId &= ~8;\n }\n\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n\n return callback(e, hashId, keyCode);\n }\n\n exports.addCommandKeyListener = function (el, callback) {\n var addListener = exports.addListener;\n\n if (useragent.isOldGecko || useragent.isOpera && !(\"KeyboardEvent\" in window)) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n };\n\n function resetPressedKeys() {\n pressedKeys = Object.create(null);\n }\n\n if (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n }\n\n exports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame);\n if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window);else exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n});\nace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.last = function (a) {\n return a[a.length - 1];\n };\n\n exports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n };\n\n exports.stringRepeat = function (string, count) {\n var result = '';\n\n while (count > 0) {\n if (count & 1) result += string;\n if (count >>= 1) string += string;\n }\n\n return result;\n };\n\n var trimBeginRegexp = /^\\s\\s*/;\n var trimEndRegexp = /\\s\\s*$/;\n\n exports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n };\n\n exports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n };\n\n exports.copyObject = function (obj) {\n var copy = {};\n\n for (var key in obj) {\n copy[key] = obj[key];\n }\n\n return copy;\n };\n\n exports.copyArray = function (array) {\n var copy = [];\n\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\") copy[i] = this.copyObject(array[i]);else copy[i] = array[i];\n }\n\n return copy;\n };\n\n exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj) return obj;\n var copy;\n\n if (Array.isArray(obj)) {\n copy = [];\n\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n }\n\n if (Object.prototype.toString.call(obj) !== \"[object Object]\") return obj;\n copy = {};\n\n for (var key in obj) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n };\n\n exports.arrayToMap = function (arr) {\n var map = {};\n\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n\n return map;\n };\n\n exports.createMap = function (props) {\n var map = Object.create(null);\n\n for (var i in props) {\n map[i] = props[i];\n }\n\n return map;\n };\n\n exports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n };\n\n exports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n };\n\n exports.escapeHTML = function (str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ PLACEHOLDER.length) data = data.substr(9);else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4)) data = data.substr(4, data.length - PLACEHOLDER.length + 1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n\n if (data == PLACEHOLDER.charAt(0)) {} else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n\n if (data) host.onTextInput(data);\n }\n\n if (copied) {\n copied = false;\n }\n\n if (afterContextMenu) afterContextMenu = false;\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch (e) {\n if (!forceIEMime) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function () {\n return text;\n };\n\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n\n var move = function move(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n\n var detectArrowKeys = function detectArrowKeys(e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, 0, KEYS.up);\n break;\n\n case 1:\n host.onCommandKey(null, 0, KEYS.home);\n break;\n\n case 2:\n host.onCommandKey(null, MODS.option, KEYS.left);\n break;\n\n case 4:\n host.onCommandKey(null, 0, KEYS.left);\n break;\n\n case 5:\n host.onCommandKey(null, 0, KEYS.right);\n break;\n\n case 7:\n host.onCommandKey(null, MODS.option, KEYS.right);\n break;\n\n case 8:\n host.onCommandKey(null, 0, KEYS.end);\n break;\n\n case 9:\n host.onCommandKey(null, 0, KEYS.down);\n break;\n }\n } else {\n switch (selectionEnd) {\n case 6:\n host.onCommandKey(null, MODS.shift, KEYS.right);\n break;\n\n case 7:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right);\n break;\n\n case 8:\n host.onCommandKey(null, MODS.shift, KEYS.end);\n break;\n\n case 9:\n host.onCommandKey(null, MODS.shift, KEYS.down);\n break;\n }\n\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, MODS.shift, KEYS.up);\n break;\n\n case 1:\n host.onCommandKey(null, MODS.shift, KEYS.home);\n break;\n\n case 2:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left);\n break;\n\n case 3:\n host.onCommandKey(null, MODS.shift, KEYS.left);\n break;\n }\n }\n };\n\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n };\n\n exports.TextInput = TextInput;\n});\nace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/keyboard/textinput_ios\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var dom = acequire(\"../lib/dom\");\n var lang = acequire(\"../lib/lang\");\n var BROKEN_SETDATA = useragent.isChrome < 18;\n var USE_IE_MIME_TYPE = useragent.isIE;\n var TextInputIOS = acequire(\"./textinput_ios\").TextInput;\n\n var TextInput = function TextInput(parentNode, host) {\n if (useragent.isIOS) return TextInputIOS.call(this, parentNode, host);\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var PLACEHOLDER = \"\\u2028\\u2028\";\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n\n try {\n var isFocused = document.activeElement === text;\n } catch (e) {}\n\n event.addListener(text, \"blur\", function (e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function (e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n\n this.focus = function () {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\") text.style.top = top;\n }, 0);\n };\n\n this.blur = function () {\n text.blur();\n };\n\n this.isFocused = function () {\n return isFocused;\n };\n\n var syncSelection = lang.delayedCall(function () {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function () {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition) return;\n inComposition = true;\n\n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch (e) {}\n\n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition) return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit) syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function () {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n resetValue();\n if (isFocused) host.onFocus();\n\n var isAllSelected = function isAllSelected(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function onSelect(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n\n this.setInputHandler = function (cb) {\n inputHandler = cb;\n };\n\n this.getInputHandler = function () {\n return inputHandler;\n };\n\n var afterContextMenu = false;\n\n var sendText = function sendText(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n\n if (pasted) {\n resetSelection();\n if (data) host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu) host.execCommand(\"del\", {\n source: \"ace\"\n });else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {\n source: \"ace\"\n });\n } else {\n if (data.substring(0, 2) == PLACEHOLDER) data = data.substr(2);else if (data.charAt(0) == PLACEHOLDER.charAt(0)) data = data.substr(1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data) host.onTextInput(data);\n }\n\n if (afterContextMenu) afterContextMenu = false;\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch (e) {\n if (!forceIEMime) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if (useragent.isMac && !e.metaKey || !e.ctrlKey) return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n\n case 86:\n onPaste(e);\n break;\n\n case 88:\n onCut(e);\n break;\n }\n });\n }\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function () {\n return text;\n };\n\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n\n var move = function move(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n };\n\n exports.TextInput = TextInput;\n});\nace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var DRAG_OFFSET = 0; // pixels\n\n var SCROLL_COOLDOWN_T = 250; // milliseconds\n\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n\n (function () {\n this.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla) ev.preventDefault();\n }\n\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos);else if (!waitForClickSelection) editor.selection.moveToPosition(pos);\n if (!waitForClickSelection) this.select();\n\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function () {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function (unitName) {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n\n this.select();\n };\n\n this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function (ev) {\n if (ev.getAccelKey()) return;\n\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n\n var editor = this.editor;\n if (!this.$lastScroll) this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx) && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n } else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n this.onTouchMove = function (ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n }).call(DefaultHandlers.prototype);\n exports.DefaultHandlers = DefaultHandlers;\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n function calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column;else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4;else var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0) return {\n cursor: range.start,\n anchor: range.end\n };else return {\n cursor: range.end,\n anchor: range.start\n };\n }\n});\nace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var dom = acequire(\"./lib/dom\");\n\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n\n (function () {\n this.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n\n this.getElement = function () {\n return this.$element || this.$init();\n };\n\n this.setText = function (text) {\n dom.setInnerText(this.getElement(), text);\n };\n\n this.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n\n this.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n\n this.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n\n this.show = function (text, x, y) {\n if (text != null) this.setText(text);\n if (x != null && y != null) this.setPosition(x, y);\n\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function () {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n\n this.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n\n this.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function () {\n this.isOpen = false;\n\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n }).call(Tooltip.prototype);\n exports.Tooltip = Tooltip;\n});\nace.define(\"ace/mouse/default_gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event\", \"ace/tooltip\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var oop = acequire(\"../lib/oop\");\n var event = acequire(\"../lib/event\");\n var Tooltip = acequire(\"../tooltip\").Tooltip;\n\n function GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0) return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\") return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey()) selection.selectTo(row, 0);else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation) return hideTooltip();\n var maxRow = editor.session.getLength();\n\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation) return;\n tooltipAnnotation = annotation.text.join(\"
\");\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n\n editor._signal(\"showGutterTooltip\", tooltip);\n\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout);\n\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n\n editor._signal(\"hideGutterTooltip\", tooltip);\n\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\")) return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed) showTooltip();else hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n editor.on(\"changeSession\", hideTooltip);\n }\n\n function GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n }\n\n oop.inherits(GutterTooltip, Tooltip);\n (function () {\n this.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n\n if (x + width > windowWidth) {\n x -= x + width - windowWidth;\n }\n\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n }).call(GutterTooltip.prototype);\n exports.GutterHandler = GutterHandler;\n});\nace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n\n var MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n };\n\n (function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n\n this.getDocumentPosition = function () {\n if (this.$pos) return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n\n this.inSelection = function () {\n if (this.$inSelection !== null) return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty()) this.$inSelection = false;else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n\n this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n\n this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\n }).call(MouseEvent.prototype);\n});\nace.define(\"ace/mouse/dragdrop_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var AUTOSCROLL_DELAY = 200;\n var SCROLL_CURSOR_DELAY = 200;\n var SCROLL_CURSOR_HYSTERESIS = 5;\n\n function DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera) blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor,\n counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\") editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n\n if (onMouseMoveTimer !== null) onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function (e) {\n counter--;\n\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function (e) {\n if (!dragCursor) return;\n var dataTransfer = e.dataTransfer;\n\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n\n break;\n\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {\n x: x,\n y: y\n };\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {\n row: cursor.row,\n column: cursor.column\n };\n\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += offsets.x.left < offsets.x.right ? -3 : +2;\n }\n\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += offsets.y.top < offsets.y.bottom ? -1 : +1;\n }\n\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n\n if (vScroll || hScroll && !vMovement) {\n if (!autoScrollStartTime) autoScrollStartTime = now;else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n\n var onMouseMoveTimer = null;\n\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"move\";else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";\n return dropEffect;\n }\n }\n\n (function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay()) this.startDrag();\n };\n\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function (e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3) target.dragDrop();\n }\n\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled) return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget) eventTarget.unselectable = \"on\";\n\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n }).call(DragdropHandler.prototype);\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n exports.DragdropHandler = DragdropHandler;\n});\nace.define(\"ace/lib/net\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"./dom\");\n\n exports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send(null);\n };\n\n exports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort) callback();\n }\n };\n };\n\n exports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n };\n});\nace.define(\"ace/lib/event_emitter\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var EventEmitter = {};\n\n var stopPropagation = function stopPropagation() {\n this.propagationStopped = true;\n };\n\n var preventDefault = function preventDefault() {\n this.defaultPrevented = true;\n };\n\n EventEmitter._emit = EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler) return;\n if (typeof e != \"object\" || !e) e = {};\n if (!e.type) e.type = eventName;\n if (!e.stopPropagation) e.stopPropagation = stopPropagation;\n if (!e.preventDefault) e.preventDefault = preventDefault;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped) break;\n }\n\n if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this);\n };\n\n EventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners) return;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n }\n };\n\n EventEmitter.once = function (eventName, callback) {\n var _self = this;\n\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n\n callback.apply(null, arguments);\n });\n };\n\n EventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) handlers = this._defaultHandlers = {\n _disabled_: {}\n };\n\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled) handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n\n handlers[eventName] = callback;\n };\n\n EventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) return;\n var disabled = handlers._disabled_[eventName];\n\n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled) this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n };\n\n EventEmitter.on = EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1) listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\n\n EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) return;\n var index = listeners.indexOf(callback);\n if (index !== -1) listeners.splice(index, 1);\n };\n\n EventEmitter.removeAllListeners = function (eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n };\n\n exports.EventEmitter = EventEmitter;\n});\nace.define(\"ace/lib/app_config\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"no use strict\";\n\n var oop = acequire(\"./oop\");\n var EventEmitter = acequire(\"./event_emitter\").EventEmitter;\n var optionsProvider = {\n setOptions: function setOptions(optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function getOptions(optionNames) {\n var result = {};\n\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function setOption(name, value) {\n if (this[\"$\" + name] === value) return;\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet) this[\"$\" + name] = value;\n if (opt && opt.set) opt.set.call(this, value);\n },\n getOption: function getOption(name) {\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n };\n\n function warn(message) {\n if (typeof console != \"undefined\" && console.warn) console.warn.apply(console, arguments);\n }\n\n function reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error) console.error(e);\n setTimeout(function () {\n throw e;\n });\n }\n\n var AppConfig = function AppConfig() {\n this.$defaultOptions = {};\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.defineOptions = function (obj, path, options) {\n if (!obj.$options) this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\") opt = {\n forwardTo: opt\n };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt) obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n\n this.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt) obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function (path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n\n if (opts[name]) {\n if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value);else opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n\n this.warn = warn;\n this.reportError = reportError;\n }).call(AppConfig.prototype);\n exports.AppConfig = AppConfig;\n});\nace.define(\"ace/config\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/app_config\"], function (acequire, exports, module) {\n \"no use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var net = acequire(\"./lib/net\");\n var AppConfig = acequire(\"./lib/app_config\").AppConfig;\n module.exports = exports = new AppConfig();\n\n var global = function () {\n return this || typeof window != \"undefined\" && window;\n }();\n\n var options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n };\n\n exports.get = function (key) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n return options[key];\n };\n\n exports.set = function (key, value) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n options[key] = value;\n };\n\n exports.all = function () {\n return lang.copyObject(options);\n };\n\n exports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name]) return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n\n if (path && path.slice(-1) != \"/\") path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n };\n\n exports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n };\n\n exports.$loading = {};\n\n exports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n\n if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module);\n if (!exports.$loading[moduleName]) exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1) return;\n\n var afterLoad = function afterLoad() {\n acequire([moduleName], function (module) {\n exports._emit(\"load.module\", {\n name: moduleName,\n module: module\n });\n\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\")) return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n };\n\n init(true);\n\n function init(packaged) {\n if (!global || !global.document) return;\n options.packaged = packaged || acequire.packaged || module.packaged || global.define && define.packaged;\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = document.currentScript || document._currentScript; // native or polyfill\n\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n var scripts = currentDocument.getElementsByTagName(\"script\");\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n var src = script.src || script.getAttribute(\"src\");\n if (!src) continue;\n var attributes = script.attributes;\n\n for (var j = 0, l = attributes.length; j < l; j++) {\n var attr = attributes[j];\n\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m) scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions) {\n if (typeof scriptOptions[key] !== \"undefined\") exports.set(key, scriptOptions[key]);\n }\n }\n\n exports.init = init;\n\n function deHyphenate(str) {\n return str.replace(/-(.)/g, function (m, m1) {\n return m1.toUpperCase();\n });\n }\n});\nace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/config\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\n var DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\n var MouseEvent = acequire(\"./mouse_event\").MouseEvent;\n var DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\n var config = acequire(\"../config\");\n\n var MouseHandler = function MouseHandler(editor) {\n var _self = this;\n\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function focusEditor(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred) window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([mouseTarget, editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, editor.textInput && editor.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n };\n\n (function () {\n this.onMouseEvent = function (name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length) return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1; //this.$scrollSpeed * 2;\n\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function (state) {\n this.state = state;\n };\n\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor) renderer.$keepTextAreaAtCursor = null;\n var self = this;\n\n var onMouseMove = function onMouseMove(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function onCaptureEnd(e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n\n var onCaptureInterval = function onCaptureInterval() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () {\n onCaptureEnd(ev);\n });\n }\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n\n this.releaseMouse = null;\n\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\") return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent) event.stopEvent(e.domEvent);\n }.bind(this);\n\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n }).call(MouseHandler.prototype);\n config.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: useragent.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: true\n },\n focusTimout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: true\n }\n });\n exports.MouseHandler = MouseHandler;\n});\nace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n\n if (fold) {\n if (e.getAccelKey()) session.removeFold(fold);else session.expandFold(fold);\n e.stop();\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused()) editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({\n row: range.start.row,\n column: 0\n });\n }\n }\n\n e.stop();\n }\n });\n }\n\n exports.FoldHandler = FoldHandler;\n});\nace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keyUtil = acequire(\"../lib/keys\");\n var event = acequire(\"../lib/event\");\n\n var KeyBinding = function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = {\n editor: editor\n };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n };\n\n (function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb) return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) {\n this.removeKeyboardHandler(h[h.length - 1]);\n }\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb) return;\n if (typeof kb == \"function\" && !kb.handleKeyboard) kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1) this.$handlers.splice(i, 1);\n if (pos == undefined) this.$handlers.push(kb);else this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach) kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1) return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command) continue;\n\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n\n if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n\n if (success) break;\n }\n\n if (!success && hashId == -1) {\n toExecute = {\n command: \"insertstring\"\n };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n\n if (success && this.$editor._signal) this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function (text) {\n this.$callKeyboardHandlers(-1, text);\n };\n }).call(KeyBinding.prototype);\n exports.KeyBinding = KeyBinding;\n});\nace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var ArabicAlefBetIntervalsBegine = [\"\\u0621\", \"\\u0641\"];\n var ArabicAlefBetIntervalsEnd = [\"\\u063A\", \"\\u064A\"];\n var dir = 0,\n hiLevel = 0;\n var lastArabic = false,\n hasUBAT_AL = false,\n hasUBAT_B = false,\n hasUBAT_S = false,\n hasBlockSep = false,\n hasSegSep = false;\n var impTab_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]];\n var impTab_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]];\n var LTR = 0,\n RTL = 1;\n var L = 0;\n var R = 1;\n var EN = 2;\n var AN = 3;\n var ON = 4;\n var B = 5;\n var S = 6;\n var AL = 7;\n var WS = 8;\n var CS = 9;\n var ES = 10;\n var ET = 11;\n var NSM = 12;\n var LRE = 13;\n var RLE = 14;\n var PDF = 15;\n var LRO = 16;\n var RLO = 17;\n var BN = 18;\n var UnicodeTBL00 = [BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON];\n var UnicodeTBL20 = [WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS];\n\n function _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR,\n prevState = null,\n newClass = null,\n newLevel = null,\n newState = 0,\n action = null,\n cond = null,\n condPos = -1,\n i = null,\n ix = null,\n classes = [];\n\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n\n cond = impTab[newState][6];\n\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n\n condPos = -1;\n }\n }\n\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n\n hiLevel |= newLevel;\n }\n\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n } else {\n break;\n }\n }\n }\n }\n }\n }\n\n function _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n\n return;\n }\n\n var len = _array.length,\n start = 0,\n end,\n lo,\n hi,\n tmp;\n\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n\n while (end < len && levels[end] >= lev) {\n end++;\n }\n\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n\n start = end;\n }\n\n start++;\n }\n }\n\n function _getCharClass(chars, types, classes, ix) {\n var cType = types[ix],\n wType,\n nType,\n len,\n i;\n\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n\n case ON:\n case AN:\n return cType;\n\n case EN:\n return lastArabic ? AN : EN;\n\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n\n case WS:\n return ON;\n\n case CS:\n if (ix < 1 || ix + 1 >= types.length || (wType = classes[ix - 1]) != EN && wType != AN || (nType = types[ix + 1]) != EN && nType != AN) {\n return ON;\n }\n\n if (lastArabic) {\n nType = AN;\n }\n\n return nType == wType ? nType : ON;\n\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n\n if (wType == EN && ix + 1 < types.length && types[ix + 1] == EN) {\n return EN;\n }\n\n return ON;\n\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n\n if (lastArabic) {\n return ON;\n }\n\n i = ix + 1;\n len = types.length;\n\n while (i < len && types[i] == ET) {\n i++;\n }\n\n if (i < len && types[i] == EN) {\n return EN;\n }\n\n return ON;\n\n case NSM:\n len = types.length;\n i = ix + 1;\n\n while (i < len && types[i] == NSM) {\n i++;\n }\n\n if (i < len) {\n var c = chars[ix],\n rtlCandidate = c >= 0x0591 && c <= 0x08FF || c == 0xFB1E;\n wType = types[i];\n\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n\n return classes[ix - 1];\n\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n\n case S:\n hasUBAT_S = true;\n return ON;\n\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n\n case BN:\n return ON;\n }\n }\n\n function _getCharacterType(ch) {\n var uc = ch.charCodeAt(0),\n hi = uc >> 8;\n\n if (hi == 0) {\n return uc > 0x00BF ? L : UnicodeTBL00[uc];\n } else if (hi == 5) {\n return /[\\u0591-\\u05f4]/.test(ch) ? R : L;\n } else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch)) return NSM;else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch)) return AN;else if (uc == 0x066A) return ET;else if (/[\\u06f0-\\u06f9]/.test(ch)) return EN;else return AL;\n } else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n } else if (hi == 0xFE) {\n return uc >= 0xFE70 ? AL : ON;\n }\n\n return ON;\n }\n\n function _isArabicDiacritics(ch) {\n return ch >= \"\\u064B\" && ch <= \"\\u0655\";\n }\n\n exports.L = L;\n exports.R = R;\n exports.EN = EN;\n exports.ON_R = 3;\n exports.AN = 4;\n exports.R_H = 5;\n exports.B = 6;\n exports.DOT = \"\\xB7\";\n\n exports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2) return {};\n var chars = text.split(\"\"),\n logicalFromVisual = new Array(chars.length),\n bidiLevels = new Array(chars.length),\n levels = [];\n dir = isRtl ? RTL : LTR;\n\n _computeLevels(chars, levels, chars.length, textCharTypes);\n\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) {\n ;\n }\n\n _invertLevel(2, levels, logicalFromVisual);\n\n _invertLevel(1, levels, logicalFromVisual);\n\n for (var i = 0; i < logicalFromVisual.length - 1; i++) {\n //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n } else if (levels[i] === R && (textCharTypes[i] > AL && textCharTypes[i] < LRE || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n } else if (i > 0 && chars[i - 1] === \"\\u0644\" && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n\n if (chars[chars.length - 1] === exports.DOT) levels[chars.length - 1] = exports.B;\n\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n\n return {\n 'logicalFromVisual': logicalFromVisual,\n 'bidiLevels': bidiLevels\n };\n };\n\n exports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL)) ret = true;\n }\n\n return ret;\n };\n\n exports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx) return i;\n }\n\n return 0;\n };\n});\nace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var bidiUtil = acequire(\"./lib/bidiutil\");\n var lang = acequire(\"./lib/lang\");\n var useragent = acequire(\"./lib/useragent\");\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n\n var BidiHandler = function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n };\n\n (function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi) return false;\n\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0) docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var currentIndex,\n prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex) break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined) docRow = this.getDocumentRow();\n this.wrapIndent = 0;\n this.isLastRow = docRow === this.session.getLength() - 1;\n this.line = this.session.getLine(docRow);\n\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n\n if (splits) {\n if (splitIndex === undefined) splitIndex = this.getSplitIndex();\n\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = splitIndex < splits.length ? this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) : this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n\n var session = this.session,\n shift = 0,\n size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = ch === '\\t' ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n\n return ch;\n });\n };\n\n this.updateBidiMap = function () {\n var textCharTypes = [],\n endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n\n this.markAsDirty = function () {\n this.currentRow = null;\n };\n\n this.updateCharacterWidths = function (fontMetrics) {\n if (!this.seenBidi) return;\n if (this.characterWidth === fontMetrics.$characterSize.width) return;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05D4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function () {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n\n this.setTextDir = function (isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels,\n left = 0;\n if (col === 0 && levels[visualIdx] % 2 !== 0) visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0) left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) left += this.wrapIndent * this.charWidths[bidiUtil.L];\n return left;\n };\n\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap,\n levels = map.bidiLevels,\n level,\n offset = this.wrapIndent * this.charWidths[bidiUtil.L],\n selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent,\n selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false,\n isSelectedPrev = false,\n selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = logIdx >= selColMin && logIdx < selColMax;\n\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && visIdx === levels.length) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n return selections;\n };\n\n this.offsetToCol = function (posX) {\n var logicalIdx = 0,\n posX = Math.max(posX, 0),\n offset = 0,\n visualIdx = 0,\n levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && levels[visualIdx] % 2 === 0) {\n if (posX < offset) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n } else if (visualIdx > 0 && levels[visualIdx - 1] % 2 === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + (posX > offset ? this.bidiMap.logicalFromVisual[visualIdx] : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n } else if (this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && levels[visualIdx - 1] % 2 === 0 || !this.isRtlDir && visualIdx === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && charWidth !== 0) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return logicalIdx + this.wrapIndent;\n };\n }).call(BidiHandler.prototype);\n exports.BidiHandler = BidiHandler;\n});\nace.define(\"ace/range\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var comparePoints = function comparePoints(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n var Range = function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n };\n\n (function () {\n this.isEqual = function (range) {\n return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column;\n };\n\n this.toString = function () {\n return \"Range: [\" + this.start.row + \"/\" + this.start.column + \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\";\n };\n\n this.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n\n this.compareRange = function (range) {\n var cmp,\n end = range.end,\n start = range.start;\n cmp = this.compare(end.row, end.column);\n\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n\n this.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n\n this.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n\n this.intersects = function (range) {\n var cmp = this.compareRange(range);\n return cmp == -1 || cmp == 0 || cmp == 1;\n };\n\n this.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n\n this.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n\n this.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n\n this.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n\n this.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : column > this.end.column ? 1 : 0;\n }\n }\n\n if (row < this.start.row) return -1;\n if (row > this.end.row) return 1;\n if (this.start.row === row) return column >= this.start.column ? 0 : -1;\n if (this.end.row === row) return column <= this.end.column ? 0 : 1;\n return 0;\n };\n\n this.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow) var end = {\n row: lastRow + 1,\n column: 0\n };else if (this.end.row < firstRow) var end = {\n row: firstRow,\n column: 0\n };\n if (this.start.row > lastRow) var start = {\n row: lastRow + 1,\n column: 0\n };else if (this.start.row < firstRow) var start = {\n row: firstRow,\n column: 0\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0) return this;else if (cmp == -1) var start = {\n row: row,\n column: column\n };else var end = {\n row: row,\n column: column\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function () {\n return this.start.row === this.end.row && this.start.column === this.end.column;\n };\n\n this.isMultiLine = function () {\n return this.start.row !== this.end.row;\n };\n\n this.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n\n this.collapseRows = function () {\n if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);else return new Range(this.start.row, 0, this.end.row, 0);\n };\n\n this.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n\n this.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n }).call(Range.prototype);\n\n Range.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n };\n\n Range.comparePoints = comparePoints;\n\n Range.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n exports.Range = Range;\n});\nace.define(\"ace/selection\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var lang = acequire(\"./lib/lang\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Range = acequire(\"./range\").Range;\n\n var Selection = function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n var self = this;\n this.lead.on(\"change\", function (e) {\n self._emit(\"changeCursor\");\n\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null;\n });\n this.selectionAnchor.on(\"change\", function () {\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n });\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n };\n\n this.isMultiLine = function () {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n\n this.setSelectionAnchor = function (row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.getSelectionAnchor = function () {\n if (this.$isEmpty) return this.getSelectionLead();else return this.anchor.getPosition();\n };\n\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n\n this.shiftSelection = function (columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n var isBackwards = this.isBackwards();\n if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function () {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n\n this.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return anchor.row > lead.row || anchor.row == lead.row && anchor.column > lead.column;\n };\n\n this.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.isEmpty()) return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n } else {\n return Range.fromPoints(anchor, lead);\n }\n };\n\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.selectAll = function () {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n\n this.setRange = this.setSelectionRange = function (range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n\n if (this.getRange().isEmpty()) this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n\n this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n\n this.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n\n return this.session.getWordRange(row, column);\n };\n\n this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n\n if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);else return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n\n this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n\n this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n\n this.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n } else {\n var tabSize = this.session.getTabSize();\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n\n this.moveCursorRight = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n } else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n } else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n\n this.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n\n this.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0) lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n\n this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n\n this.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1) this.moveCursorWordRight();\n return;\n }\n\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0) this.moveCursorWordLeft();\n return;\n }\n\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function (rightOfCursor) {\n var match,\n index = 0,\n ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index > 2) break;\n }\n }\n }\n }\n }\n\n tokenRe.lastIndex = 0;\n return index;\n };\n\n this.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor)) rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line)) line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordRight();else this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();\n };\n\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn) screenPos.column = this.$desiredColumn;else this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0) docPos.row++;\n }\n }\n\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n\n this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n\n this.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1) column = column - 1;else column = column + 1;\n }\n\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn) this.$desiredColumn = null;\n };\n\n this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function (range) {\n var r = this.getRange();\n\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n\n this.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch (e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n\n return data;\n };\n\n this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards) r.cursor = r.start;\n this.addRange(r, true);\n }\n\n return;\n } else data = data[0];\n }\n\n if (this.rangeList) this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false;\n if (!data.length || !this.ranges) return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i])) return false;\n }\n\n return true;\n };\n }).call(Selection.prototype);\n exports.Selection = Selection;\n});\nace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/config\"], function (acequire, exports, module) {\n \"use strict\";\n\n var config = acequire(\"./config\");\n var MAX_TOKEN_COUNT = 2000;\n\n var Tokenizer = function Tokenizer(rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {\n defaultToken: \"text\"\n };\n var flag = \"g\";\n var splitterRurles = [];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken) mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive) flag = \"gi\";\n if (rule.regex == null) continue;\n if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1) rule.onMatch = this.$applyToken;else rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n\n if (!rule.splitRegex && typeof rule.token != \"string\") splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch) rule.onMatch = null;\n }\n\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n };\n\n (function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n\n this.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\") return [{\n type: types,\n value: str\n }];\n var tokens = [];\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i]) tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n\n return tokens;\n };\n\n this.$arrayTokens = function (str) {\n if (!str) return [];\n var values = this.splitRegex.exec(str);\n if (!values) return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1]) tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n\n return tokens;\n };\n\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g, function (x, y) {\n return y ? \"(?:\" : x;\n });\n return r;\n };\n\n this.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n\n stack--;\n } else if (parenOpen) {\n stack++;\n\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n\n this.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match,\n tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = {\n type: null,\n value: \"\"\n };\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: skipped\n };\n }\n }\n\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined) continue;\n rule = state[mapping[i]];\n if (rule.onMatch) type = rule.onMatch(value, currentState, stack, line);else type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n\n state = this.states[currentState];\n\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n\n if (rule.consumeLineEnd) lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: value\n };\n }\n } else if (type) {\n if (token.type) tokens.push(token);\n token = {\n type: null,\n value: \"\"\n };\n\n for (var i = 0; i < type.length; i++) {\n tokens.push(type[i]);\n }\n }\n }\n\n if (lastIndex == line.length) break;\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n\n while (lastIndex < line.length) {\n if (token.type) tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type) tokens.push(token);\n\n if (stack.length > 1) {\n if (stack[0] !== currentState) stack.unshift(\"#tmp\", currentState);\n }\n\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n\n this.reportError = config.reportError;\n }).call(Tokenizer.prototype);\n exports.Tokenizer = Tokenizer;\n});\nace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"../lib/lang\");\n\n var TextHighlightRules = function TextHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n };\n\n (function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules) {\n this.$rules[key] = rules[key];\n }\n\n return;\n }\n\n for (var key in rules) {\n var state = rules[key];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next;\n }\n\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState;\n }\n }\n\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function () {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\" ? new HighlightRules().getRules() : HighlightRules;\n\n if (states) {\n for (var i = 0; i < states.length; i++) {\n states[i] = prefix + states[i];\n }\n } else {\n states = [];\n\n for (var key in embedRules) {\n states.push(prefix + key);\n }\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n\n for (var i = 0; i < states.length; i++) {\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n }\n\n if (!this.$embeds) this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function () {\n return this.$embeds;\n };\n\n var pushState = function pushState(currentState, stack) {\n if (currentState != \"start\" || stack.length) stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n\n var popState = function popState(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next) rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n\n var next = rule.next || rule.push;\n\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\") stateName = stateName[0] || \"\";\n if (rules[stateName]) stateName += id++;\n }\n\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n\n if (includeName) {\n if (Array.isArray(includeName)) toInsert = includeName.map(function (x) {\n return rules[x];\n });else toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape) args = args.filter(function (x) {\n return !x.next;\n });\n state.splice.apply(state, args);\n i--;\n }\n\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n if (ignoreCase) a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n\n for (var i = list.length; i--;) {\n keywords[list[i]] = className;\n }\n });\n\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase ? function (value) {\n return keywords[value.toLowerCase()] || defaultToken;\n } : function (value) {\n return keywords[value] || defaultToken;\n };\n };\n\n this.getKeywords = function () {\n return this.$keywords;\n };\n }).call(TextHighlightRules.prototype);\n exports.TextHighlightRules = TextHighlightRules;\n});\nace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Behaviour = function Behaviour() {\n this.$behaviours = {};\n };\n\n (function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n\n this.$behaviours[name][action] = callback;\n };\n\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n\n this.addBehaviours(behaviours);\n };\n\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n\n return ret;\n }\n };\n }).call(Behaviour.prototype);\n exports.Behaviour = Behaviour;\n});\nace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"./range\").Range;\n\n var TokenIterator = function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n };\n\n (function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount) rowCount = this.$session.getLength();\n\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n\n this.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined) return column;\n column = 0;\n\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n\n return column;\n };\n\n this.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\n };\n\n this.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n }).call(TokenIterator.prototype);\n exports.TokenIterator = TokenIterator;\n});\nace.define(\"ace/mode/behaviour/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"../../lib/oop\");\n var Behaviour = acequire(\"../behaviour\").Behaviour;\n var TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\n var lang = acequire(\"../../lib/lang\");\n var SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\"];\n var SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n var context;\n var contextCache = {};\n var defaultQuotes = {\n '\"': '\"',\n \"'\": \"'\"\n };\n\n var initContext = function initContext(editor) {\n var id = -1;\n\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {\n rangeCount: editor.multiSelect.rangeCount\n };\n }\n\n if (contextCache[id]) return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n };\n\n var getWrapped = function getWrapped(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1)]\n };\n };\n\n var CstyleBehaviour = function CstyleBehaviour(options) {\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n }, '}');\n if (!openBracePos) return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type)) return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type)) pair = false;\n } else {\n if (stringBefore && !stringAfter) return null; // wrap string with different quote\n\n if (stringBefore && stringAfter) return null; // do not pair quotes inside strings\n\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter) return null; // before or after alphanumeric\n\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing\n\n pair = true;\n }\n\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n };\n\n CstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) return false;\n }\n\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n };\n\n CstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n };\n\n CstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n };\n\n CstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n };\n\n CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd;\n };\n\n CstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n };\n\n CstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n };\n\n CstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n };\n\n oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n});\nace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.packages = {};\n addUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n });\n\n function addUnicodePackage(pack) {\n var codePoint = /\\w{4}/g;\n\n for (var name in pack) {\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n }\n }\n});\nace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"ace/tokenizer\", \"ace/mode/text_highlight_rules\", \"ace/mode/behaviour/cstyle\", \"ace/unicode\", \"ace/lib/lang\", \"ace/token_iterator\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Tokenizer = acequire(\"../tokenizer\").Tokenizer;\n var TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n var CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\n var unicode = acequire(\"../unicode\");\n var lang = acequire(\"../lib/lang\");\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n var Range = acequire(\"../range\").Range;\n\n var Mode = function Mode() {\n this.HighlightRules = TextHighlightRules;\n };\n\n (function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment) return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function comment(line, i) {\n if (testRemove(line, i)) return;\n\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({\n row: i,\n column: line.length\n }, lineCommentEnd);\n doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var uncomment = function uncomment(line, i) {\n var m;\n if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function testRemove(line, row) {\n if (regexpStart.test(line)) return true;\n var tokens = session.getTokens(row);\n\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\") return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function uncomment(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length,\n end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \") end--;\n doc.removeInLine(i, start, end);\n };\n\n var commentWithSpace = lineCommentStart + \" \";\n\n var comment = function comment(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({\n row: i,\n column: minIndent\n }, commentWithSpace);else doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var testRemove = function testRemove(line, i) {\n return regexpStart.test(line);\n };\n\n var shouldInsertSpace = function shouldInsertSpace(line, before, after) {\n var spaces = 0;\n\n while (before-- && line.charAt(before) == \" \") {\n spaces++;\n }\n\n if (spaces % tabSize != 0) return false;\n var spaces = 0;\n\n while (line.charAt(after++) == \" \") {\n spaces++;\n }\n\n if (tabSize > 2) return spaces % tabSize != tabSize - 1;else return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++) {\n fun(doc.getLine(i), i);\n }\n }\n\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n\n if (indent !== -1) {\n if (indent < minIndent) minIndent = indent;\n if (shouldRemove && !testRemove(line, i)) shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment) return;\n if (!comment.start && comment[0]) comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n\n token = iterator.stepForward();\n }\n\n if (endRange) session.remove(endRange);\n\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n\n if (initialRange.start.row == startRow) initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow) initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n\n this.autoOutdent = function (state, doc, row) {};\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function (session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n })(this);\n }\n };\n\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\") state = state[0];\n\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n var split = state.split(this.$embeds[i]);\n\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n\n for (var rule in rules) {\n var ruleItr = rules[rule];\n\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex);\n } else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n\n this.completionKeywords = completionKeywords;\n }\n\n if (!append) return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n\n this.$createKeywordList = function () {\n if (!this.$highlightRules) this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n function throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n }\n\n function positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length;\n }\n\n function validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\") throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array)) throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end) throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end)) throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = end.column - (numRangeRows == 0 ? start.column : 0);\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, \"delta.range must match delta lines\");\n }\n\n exports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n\n break;\n\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n\n break;\n }\n };\n});\nace.define(\"ace/anchor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\n var Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\") this.setPosition(row.row, row.column);else this.setPosition(row, column);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n\n this.getDocument = function () {\n return this.document;\n };\n\n this.$insertRight = false;\n\n this.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row) return;\n if (delta.start.row > this.row) return;\n var point = $getTransformedPoint(delta, {\n row: this.row,\n column: this.column\n }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n\n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return point1.row < point2.row || point1.row == point2.row && bColIsAfter;\n }\n\n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n\n this.setPosition = function (row, column, noClip) {\n var pos;\n\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column) return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n\n this.detach = function () {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n } else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n } else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0) pos.column = 0;\n return pos;\n };\n }).call(Anchor.prototype);\n});\nace.define(\"ace/document\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/apply_delta\", \"ace/lib/event_emitter\", \"ace/range\", \"ace/anchor\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var applyDelta = acequire(\"./apply_delta\").applyDelta;\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Range = acequire(\"./range\").Range;\n var Anchor = acequire(\"./anchor\").Anchor;\n\n var Document = function Document(textOrLines) {\n this.$lines = [\"\"];\n\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({\n row: 0,\n column: 0\n }, textOrLines);\n } else {\n this.insert({\n row: 0,\n column: 0\n }, textOrLines);\n }\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({\n row: 0,\n column: 0\n }, text);\n };\n\n this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n\n case \"unix\":\n return \"\\n\";\n\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode) return;\n this.$newLineMode = newLineMode;\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n\n this.isNewLine = function (text) {\n return text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\";\n };\n\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n\n this.getLength = function () {\n return this.$lines.length;\n };\n\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n\n this.getLinesForRange = function (range) {\n var lines;\n\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column);\n }\n\n return lines;\n };\n\n this.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n\n this.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n\n this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n\n this.insert = function (position, text) {\n if (this.getLength() <= 1) this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n\n this.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n\n this.clippedPos = function (row, column) {\n var length = this.getLength();\n\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n\n var line = this.getLine(row);\n if (column == undefined) column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {\n row: row,\n column: column\n };\n };\n\n this.clonePos = function (pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n };\n\n this.pos = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipPosition = function (position) {\n var length = this.getLength();\n\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n\n return position;\n };\n\n this.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n\n this.insertMergedLines({\n row: row,\n column: column\n }, lines);\n };\n\n this.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n\n this.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n });\n return this.clonePos(start);\n };\n\n this.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n }, true);\n return this.clonePos(start);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = deleteFirstNewLine ? firstRow - 1 : firstRow;\n var startCol = deleteFirstNewLine ? this.getLine(startRow).length : 0;\n var endRow = deleteLastNewLine ? lastRow + 1 : lastRow;\n var endCol = deleteLastNewLine ? 0 : this.getLine(endRow).length;\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n\n this.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n\n this.replace = function (range, text) {\n if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty()) return range.start;\n if (text == this.getTextRange(range)) return range.end;\n this.remove(range);\n var end;\n\n if (text) {\n end = this.insert(range.start, text);\n } else {\n end = range.start;\n }\n\n return end;\n };\n\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n\n this.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n\n if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n\n this._signal(\"change\", delta);\n };\n\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row;\n var column = delta.start.column;\n var from = 0,\n to = 0;\n\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while (true);\n };\n\n this.revertDelta = function (delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: delta.action == \"insert\" ? \"remove\" : \"insert\",\n lines: delta.lines.slice()\n });\n };\n\n this.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0) return {\n row: i,\n column: index + lines[i].length + newlineLength\n };\n }\n\n return {\n row: l - 1,\n column: lines[l - 1].length\n };\n };\n\n this.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n\n for (var i = startRow || 0; i < row; ++i) {\n index += lines[i].length + newlineLength;\n }\n\n return index + pos.column;\n };\n }).call(Document.prototype);\n exports.Document = Document;\n});\nace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\n var BackgroundTokenizer = function BackgroundTokenizer(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n\n while (self.lines[currentLine]) {\n currentLine++;\n }\n\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n\n processedLines++;\n\n if (processedLines % 5 === 0 && new Date() - workerStart > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n\n self.currentLine = currentLine;\n if (endLine == -1) endLine = currentLine;\n if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine);\n };\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n\n this._signal(\"update\", {\n data: data\n });\n };\n\n this.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.scheduleStart = function () {\n if (!this.running) this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n\n this.stop = function () {\n if (this.running) clearTimeout(this.running);\n this.running = false;\n };\n\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n\n this.getState = function (row) {\n if (this.currentLine == row) this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1) this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n }).call(BackgroundTokenizer.prototype);\n exports.BackgroundTokenizer = BackgroundTokenizer;\n});\nace.define(\"ace/search_highlight\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var Range = acequire(\"./range\").Range;\n\n var SearchHighlight = function SearchHighlight(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n };\n\n (function () {\n this.MAX_RANGES = 500;\n\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\") return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp) return;\n var start = config.firstRow,\n end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j--;) {\n markerLayer.drawSingleLineMarker(html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n }).call(SearchHighlight.prototype);\n exports.SearchHighlight = SearchHighlight;\n});\nace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [folds];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n\n (function () {\n this.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n\n fold.foldLine = this;\n };\n\n this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp,\n stop,\n isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n\n if (stop || cmp === 0) {\n return;\n }\n\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function (row, column) {\n var fold, cmp;\n\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n\n return null;\n };\n\n this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold,\n folds;\n\n if (ret) {\n fold = ret.fold;\n\n if (ret.kind == \"inside\" && fold.start.column != column && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n\n if (i === 0) {\n this.start.column += len;\n }\n\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n\n if (!fold.sameRow) {\n return;\n }\n\n fold.end.column += len;\n }\n\n this.end.column += len;\n }\n }\n };\n\n this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\") return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n }).call(FoldLine.prototype);\n exports.FoldLine = FoldLine;\n});\nace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"./range\").Range;\n var comparePoints = Range.comparePoints;\n\n var RangeList = function RangeList() {\n this.ranges = [];\n };\n\n (function () {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0) continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || cmpStart === 0 && !excludeEdges) return i;\n return -i - 1;\n }\n\n return -i - 1;\n };\n\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;else endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function (list) {\n var removed = [];\n\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n\n return removed;\n };\n\n this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges.splice(i, 1);\n };\n\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0],\n range;\n\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0) continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n\n this.ranges = list;\n return removed;\n };\n\n this.contains = function (row, column) {\n return this.pointIndex({\n row: row,\n column: column\n }) >= 0;\n };\n\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges[i];\n };\n\n this.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return [];\n var startIndex = this.pointIndex({\n row: startRow,\n column: 0\n });\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({\n row: endRow,\n column: 0\n }, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;\n var clipped = [];\n\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n\n return clipped;\n };\n\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function (session) {\n if (this.session) this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n\n this.detach = function () {\n if (!this.session) return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function (delta) {\n if (delta.action == \"insert\") {\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow) continue;\n if (r.start.row > startRow) break;\n\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$insertRight) {} else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) r.end.column -= colDiff;\n }\n\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n }).call(RangeList.prototype);\n exports.RangeList = RangeList;\n});\nace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/range_list\", \"ace/lib/oop\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var RangeList = acequire(\"../range_list\").RangeList;\n var oop = acequire(\"../lib/oop\");\n\n var Fold = exports.Fold = function (range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n };\n\n oop.inherits(Fold, RangeList);\n (function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function (fold) {\n if (this.range.isEqual(fold)) return;\n if (!this.range.containsRange(fold)) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n var row = fold.start.row,\n column = fold.start.column;\n\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterStart = this.subFolds[i];\n if (cmp == 0) return afterStart.addSubFold(fold);\n var row = fold.range.end.row,\n column = fold.range.end.column;\n\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterEnd = this.subFolds[j];\n if (cmp == 0) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n }).call(Fold.prototype);\n\n function consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0) point.column -= anchor.column;\n }\n\n function consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n }\n\n function restorePoint(point, anchor) {\n if (point.row == 0) point.column += anchor.column;\n point.row += anchor.row;\n }\n\n function restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n }\n});\nace.define(\"ace/edit_session/folding\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/edit_session/fold_line\", \"ace/edit_session/fold\", \"ace/token_iterator\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var FoldLine = acequire(\"./fold_line\").FoldLine;\n var Fold = acequire(\"./fold\").Fold;\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\n function Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) return null;\n var folds = foldLine.folds;\n\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n\n return fold;\n }\n }\n };\n\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n\n if (cmp == 2) {\n continue;\n } else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else if (cmp == 42) {\n break;\n }\n\n foundFolds.push(fold);\n }\n }\n\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n\n return folds;\n };\n\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n\n for (var i = 0; i < foldLines.length; i++) {\n for (var j = 0; j < foldLines[i].folds.length; j++) {\n folds.push(foldLines[i].folds[j]);\n }\n }\n\n return folds;\n };\n\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine) return null;\n var lastFold = {\n end: {\n column: 0\n }\n };\n var str, fold;\n\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n str = this.getLine(fold.start.row).substring(lastFold.end.column, fold.start.column);\n break;\n } else if (cmp === 0) {\n return null;\n }\n\n lastFold = fold;\n }\n\n if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1) return str.substring(0, column - lastFold.end.column);else if (trim == 1) return str.substring(column - lastFold.end.column);else return str;\n };\n\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n\n return null;\n };\n\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n\n return null;\n };\n\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData,\n rowCount = last - first + 1;\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n\n if (end >= last) {\n if (start < last) {\n if (start >= first) rowCount -= last - start;else rowCount = 0; // in one fold\n }\n\n break;\n } else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;else rowCount -= end - first + 1;\n }\n }\n\n return rowCount;\n };\n\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold) fold = placeholder;else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error(\"The range has to be at least 2 characters width\");\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold) return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"add\"\n });\n\n return fold;\n };\n\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode) this.$updateWrapData(startRow, endRow);else this.$updateRowLengthCache(startRow, endRow);\n }\n\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"remove\"\n });\n };\n\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n\n fold.subFolds = [];\n };\n\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function (location, expandInner) {\n var range, folds;\n\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\") range = new Range(location, 0, location, this.getLine(location).length);else if (\"row\" in location) range = Range.fromPoints(location, location);else range = location;\n\n folds = this.getFoldsInRangeList(range);\n\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n\n if (folds.length) return folds;\n };\n\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null) startRow = foldLine.start.row;\n if (startColumn == null) startColumn = 0;\n if (endRow == null) endRow = foldLine.end.row;\n if (endColumn == null) endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow) return;\n\n if (row == startRow) {\n if (column < startColumn) return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n })) {\n if (range.comparePoint(bracketPos) == 1) range.end = bracketPos;else range.start = bracketPos;\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n\n if (!fold) fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4) return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\") type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n\n iterator.stepForward();\n }\n\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n iterator = new TokenIterator(this, row, column);\n\n if (dir != -1) {\n var lastRow = -1;\n\n do {\n token = iterator.stepForward();\n\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state)) lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n\n token = iterator.stepBackward();\n } else token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function (startRow, endRow, depth) {\n if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity\n\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets) return; // mode doesn't support folding\n\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\") continue;\n var range = this.getFoldWidgetRange(row);\n\n if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow) {\n row = range.end.row;\n\n try {\n var fold = this.addFold(\"...\", range);\n if (fold) fold.collapseChildren = depth;\n } catch (e) {}\n }\n }\n };\n\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style]) throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style) return;\n this.$foldStyle = style;\n if (style == \"manual\") this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode) return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n\n this._signal(\"changeAnnotation\");\n\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || ignoreCurrent && fw[row]) return {};\n var i = row - 1,\n firstRange;\n\n while (i >= 0) {\n var c = fw[i];\n if (c == null) c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange) firstRange = range;\n if (range && range.end.row >= row) break;\n }\n\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function (row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n\n if (!range) {\n var el = e.target || e.srcElement;\n if (el && /ace_fold-widget/.test(el.className)) el.className += \" ace_invalid\";\n }\n };\n\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget) return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all) this.removeFold(fold);else this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n\n return range;\n };\n\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range) return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n }\n\n exports.Folding = Folding;\n});\nace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n var Range = acequire(\"../range\").Range;\n\n function BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0) return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\") return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) return null;\n if (match[1]) return this.$findClosingBracket(match[1], position);else return this.$findOpeningBracket(match[2], position);\n };\n\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true,\n range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n\n if (!match) return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(pos, bracketPos);\n\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(bracketPos, pos);\n\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n\n range.cursor = range.start;\n }\n\n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n\n if (chr == openBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex -= 1;\n }\n\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n\n return null;\n };\n\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n\n if (chr == closingBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex += 1;\n }\n\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n valueIndex = 0;\n }\n\n return null;\n };\n }\n\n exports.BracketMatch = BracketMatch;\n});\nace.define(\"ace/edit_session\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/bidihandler\", \"ace/config\", \"ace/lib/event_emitter\", \"ace/selection\", \"ace/mode/text\", \"ace/range\", \"ace/document\", \"ace/background_tokenizer\", \"ace/search_highlight\", \"ace/edit_session/folding\", \"ace/edit_session/bracket_match\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var lang = acequire(\"./lib/lang\");\n var BidiHandler = acequire(\"./bidihandler\").BidiHandler;\n var config = acequire(\"./config\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Selection = acequire(\"./selection\").Selection;\n var TextMode = acequire(\"./mode/text\").Mode;\n var Range = acequire(\"./range\").Range;\n var Document = acequire(\"./document\").Document;\n var BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\n var SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\n var EditSession = function EditSession(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + ++EditSession.$uid;\n\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine) text = new Document(text);\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n config.resetOptions(this);\n this.setMode(mode);\n\n config._signal(\"session\", this);\n };\n\n EditSession.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setDocument = function (doc) {\n if (this.doc) this.doc.removeListener(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n\n this.getDocument = function () {\n return this.doc;\n };\n\n this.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = low + hi >> 1;\n var c = cacheArray[mid];\n if (val > c) low = mid + 1;else if (val < c) hi = mid - 1;else return mid;\n }\n\n return low - 1;\n };\n\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer) this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n\n this._signal(\"change\", delta);\n };\n\n this.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n\n this.getValue = this.toString = function () {\n return this.doc.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n\n this.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token,\n c = 0;\n\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column) break;\n }\n }\n\n token = tokens[i];\n if (!token) return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n\n this.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n if (this.$informUndoManager) this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager) this.$syncInformUndoManager();\n };\n\n this.$defaultUndoManager = {\n undo: function undo() {},\n redo: function redo() {},\n reset: function reset() {}\n };\n\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n\n this.getTabSize = function () {\n return this.$tabSize;\n };\n\n this.isTabStop = function (position) {\n return this.$useSoftTabs && position.column % this.$tabSize === 0;\n };\n\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row]) this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n\n this.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.setBreakpoint = function (row, className) {\n if (className === undefined) className = \"ace_breakpoint\";\n if (className) this.$breakpoints[row] = className;else delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update) return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker) return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n\n if (marker) {\n delete markers[markerId];\n\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n\n this.$searchHighlight.setRegexp(re);\n };\n\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n\n if (!clazz) clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n\n this._signal(\"changeAnnotation\", {});\n };\n\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken) var re = this.tokenRe;else if (/^\\s+$/.test(line.slice(column - 1, column + 1))) var re = /\\s/;else var re = this.nonTokenRe;\n var start = column;\n\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n\n start++;\n }\n\n var end = column;\n\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n\n this.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n\n return wordRange;\n };\n\n this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n\n this.setUseWorker = function (useWorker) {\n this.setOption(\"useWorker\", useWorker);\n };\n\n this.getUseWorker = function () {\n return this.$useWorker;\n };\n\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n\n this.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer) return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n\n if (!this.$modes[\"ace/mode/text\"]) this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path) return cb && cb();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n\n this.$onChangeMode(m);\n }\n\n cb && cb();\n }.bind(this));\n if (!this.$mode) this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder) this.$modeId = mode.$id;\n if (this.$mode === mode) return;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker) this.$startWorker();\n var tokenizer = mode.getTokenizer();\n\n if (tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n\n var _self = this;\n\n this.bgTokenizer.addEventListener(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n if (!$isPlaceholder) {\n if (mode.attachToSession) mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n\n this.getMode = function () {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return;\n this.$scrollTop = scrollTop;\n\n this._signal(\"changeScrollTop\", scrollTop);\n };\n\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return;\n this.$scrollLeft = scrollLeft;\n\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n\n this.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width) width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len) break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine) longestScreenLine = cache[i];\n }\n\n this.screenWidth = longestScreenLine;\n }\n };\n\n this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n\n this.getLength = function () {\n return this.doc.getLength();\n };\n\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n\n this.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function (foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function (deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n\n if (isInsert(delta)) {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n\n point = delta.end;\n\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n\n lastDeltaIsInsert = false;\n }\n }\n\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n\n this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n\n this.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff;\n }\n\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row) x.start.column += collDiff;\n if (x.end.row == oldStart.row) x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n\n this.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n\n for (var row = startRow; row <= endRow; row++) {\n this.doc.insertInLine({\n row: row,\n column: 0\n }, indentString);\n }\n };\n\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n\n for (var j = 0; j < size; ++j) {\n if (line.charAt(j) != ' ') break;\n }\n\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row - firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1) return 0;\n var diff = row - lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n\n this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n\n this.$clipColumnToRow = function (row, column) {\n if (column < 0) return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n\n var len = this.doc.getLength() - 1;\n\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n\n return range;\n };\n\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n\n this.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n\n this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n\n this.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = {\n min: min,\n max: max\n };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode) this._signal(\"changeWrapMode\");\n }\n };\n\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0) limits = {\n min: $printMargin,\n max: $printMargin\n };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n\n this._signal(\"changeWrapLimit\");\n }\n\n return true;\n }\n\n return false;\n };\n\n this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min) wrapLimit = Math.max(min, wrapLimit);\n if (max) wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n\n this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n\n var foldLine = this.getFoldLine(firstRow);\n\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n\n this.$updating = false;\n if (useWrapMode) this.$updateWrapData(firstRow, lastRow);else this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n } else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0,\n lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0) return indentation;\n\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE) indentation += 1;else if (token == TAB) indentation += tabSize;else if (token == TAB_SPACE) continue;else break;\n }\n }\n\n if (isCode && indentedSoftWrap !== false) indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\").replace(/12/g, function () {\n len -= 1;\n }).replace(/2/g, function () {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n\n var indent = 0;\n\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n\n addSplit(split);\n continue;\n }\n\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT) split--;\n addSplit(split - indent);\n }\n\n return splits;\n };\n\n this.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n } else if (c == 32) {\n arr.push(SPACE);\n } else if (c > 39 && c < 48 || c > 57 && c < 64) {\n arr.push(PUNCTUATION);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n\n return arr;\n };\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0) return [0, 0];\n if (maxScreenColumn == null) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n\n this.getRowLength = function (row) {\n if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else h = 0;\n\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n\n this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n\n this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0) return {\n row: 0,\n column: 0\n };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n\n var wrapIndent = 0,\n splitIndex = Math.floor(screenRow - row);\n\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n\n if (splits) {\n column = splits[splitIndex];\n\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column) docColumn = column - 1;\n if (foldLine) return foldLine.idxToPosition(docColumn);\n return {\n row: docRow,\n column: docColumn\n };\n };\n\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\") var pos = this.$clipPositionToDocument(docRow.row, docRow.column);else pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd,\n row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow) break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n } else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n\n var textLine = \"\";\n\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n\n var wrapIndent = 0;\n\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n\n if (wrapRow) {\n var screenRowOffset = 0;\n\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n\n this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n\n this.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0,\n i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n\n if (this.lineWidgets) screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n\n this.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar) return;\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0) return [0, 0];\n if (!maxScreenColumn) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n };\n\n this.destroy = function () {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n\n function isFullWidth(c) {\n if (c < 0x1100) return false;\n return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6;\n }\n }).call(EditSession.prototype);\n acequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\n acequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n config.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function set(value) {\n if (!value || value == \"off\") value = false;else if (value == \"free\") value = true;else if (value == \"printMargin\") value = -1;else if (typeof value == \"string\") value = parseInt(value, 10) || false;\n if (this.$wrap == value) return;\n this.$wrap = value;\n\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function get() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1) return \"printMargin\";\n if (!this.getWrapLimitRange().min) return \"free\";\n return this.$wrap;\n }\n\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function set(val) {\n val = val == \"auto\" ? this.$mode.type != \"text\" : val != \"text\";\n\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n initialValue: true\n },\n firstLineNumber: {\n set: function set() {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function set(useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker) this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {\n initialValue: true\n },\n tabSize: {\n set: function set(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {\n initialValue: false\n },\n overwrite: {\n set: function set(val) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: false\n },\n newLineMode: {\n set: function set(val) {\n this.doc.setNewLineMode(val);\n },\n get: function get() {\n return this.doc.getNewLineMode();\n },\n handlesSet: true\n },\n mode: {\n set: function set(val) {\n this.setMode(val);\n },\n get: function get() {\n return this.$modeId;\n }\n }\n });\n exports.EditSession = EditSession;\n});\nace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var Range = acequire(\"./range\").Range;\n\n var Search = function Search() {\n this.$options = {};\n };\n\n (function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n\n this.setOptions = function (options) {\n this.$options = options;\n };\n\n this.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator) return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n\n if (sc == ec && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n return firstRange;\n };\n\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle) return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++) {\n if (lines[row + j].search(re[j]) == -1) continue outer;\n }\n\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n\n if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex) {\n continue;\n }\n\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2) row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0,\n j = ranges.length - 1;\n\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) {\n i++;\n }\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) {\n j--;\n }\n\n ranges = ranges.slice(i, j + 1);\n\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine) return replacement;\n if (!re) return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length) return null;\n replacement = input.replace(re, replacement);\n\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase();else replacement[i] = replacement[i].toLowerCase();\n }\n\n replacement = replacement.join(\"\");\n }\n\n return replacement;\n };\n\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp) return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle) return options.re = false;\n if (!options.regExp) needle = lang.escapeRegExp(needle);\n if (options.wholeWord) needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch (e) {\n re = false;\n }\n\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n\n for (var i = 0; i < parts.length; i++) {\n try {\n re.push(new RegExp(parts[i], modifier));\n } catch (e) {\n return false;\n }\n }\n\n return re;\n };\n\n this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re) return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start) start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start) start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row--; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n };\n } else {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row = row + 1; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n };\n }\n\n if (options.$isMultiLine) {\n var len = re.length;\n\n var forEachInLine = function forEachInLine(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1) return;\n }\n\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex)) return true;\n };\n } else if (backwards) {\n var forEachInLine = function forEachInLine(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m,\n last = 0;\n re.lastIndex = 0;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n\n if (m.index + length > endIndex) break;\n matches.push(m.index, length);\n }\n\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length)) return true;\n }\n };\n } else {\n var forEachInLine = function forEachInLine(row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\n re.lastIndex = startIndex;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length)) return true;\n\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n\n return {\n forEach: forEach\n };\n };\n }).call(Search.prototype);\n\n function addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n\n return wordBoundary(needle[0]) + needle + wordBoundary(needle[needle.length - 1]);\n }\n\n exports.Search = Search;\n});\nace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keyUtil = acequire(\"../lib/keys\");\n var useragent = acequire(\"../lib/useragent\");\n var KEY_MODS = keyUtil.KEY_MODS;\n\n function HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n }\n\n function MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n }\n\n MultiHashHandler.prototype = HashHandler.prototype;\n (function () {\n this.addCommand = function (command) {\n if (this.commands[command.name]) this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey) this._buildKeyHash(command);\n };\n\n this.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand) delete this.commands[name];\n var ckb = this.commandKeyBinding;\n\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined) position = key.position;\n key = key[this.platform];\n }\n\n if (!key) return;\n if (typeof command == \"function\") return this.addCommand({\n exec: command,\n bindKey: key,\n name: command.name || key\n });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n\n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey && command.bindKey.position || (command.isDefault ? -100 : 0);\n }\n\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding,\n i;\n\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position) break;\n }\n\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command) return;\n if (typeof command === \"string\") return this.bindKey(command, name);\n if (typeof command === \"function\") command = {\n exec: command\n };\n if (typeof command !== \"object\") return;\n if (!command.name) command.name = name;\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n\n this.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) {\n return x;\n });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if (!parts.length) return {\n key: key,\n hashId: -1\n };else if (parts.length == 1 && parts[0] == \"shift\") return {\n key: key.toUpperCase(),\n hashId: -1\n };\n var hashId = 0;\n\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n\n if (modifier == null) {\n if (typeof console != \"undefined\") console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n\n hashId |= modifier;\n }\n\n return {\n key: key,\n hashId: hashId\n };\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {\n command: \"null\"\n };\n }\n }\n\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0) data.$keyChain = \"\"; // reset keyChain\n }\n\n return {\n command: command\n };\n };\n\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n }).call(HashHandler.prototype);\n exports.HashHandler = HashHandler;\n exports.MultiHashHandler = MultiHashHandler;\n});\nace.define(\"ace/commands/command_manager\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/keyboard/hash_handler\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"../lib/oop\");\n var MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\n var EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\n var CommandManager = function CommandManager(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function (e) {\n return e.command.exec(e.editor, e.args || {});\n });\n };\n\n oop.inherits(CommandManager, MultiHashHandler);\n (function () {\n oop.implement(this, EventEmitter);\n\n this.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args)) return true;\n }\n\n return false;\n }\n\n if (typeof command === \"string\") command = this.commands[command];\n if (!command) return false;\n if (editor && editor.$readOnly && !command.readOnly) return false;\n if (command.isAvailable && !command.isAvailable(editor)) return false;\n var e = {\n editor: editor,\n command: command,\n args: args\n };\n e.returnValue = this._emit(\"exec\", e);\n\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function (editor) {\n if (this.$inReplay) return;\n editor && editor._emit(\"changeStatus\");\n\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length) this.macro = this.oldMacro;\n return this.recording = false;\n }\n\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro) return;\n if (this.recording) return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\") this.exec(x, editor);else this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\") x[0] = x[0].name;\n if (!x[1]) x = x[0];\n return x;\n });\n };\n }).call(CommandManager.prototype);\n exports.CommandManager = CommandManager;\n});\nace.define(\"ace/commands/default_commands\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/config\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"../lib/lang\");\n var config = acequire(\"../config\");\n var Range = acequire(\"../range\").Range;\n\n function bindKey(win, mac) {\n return {\n win: win,\n mac: mac\n };\n }\n\n exports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function exec(editor) {\n editor.selectAll();\n },\n readOnly: true\n }, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function exec(editor) {\n editor.centerSelection();\n },\n readOnly: true\n }, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function exec(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function exec(editor) {\n editor.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function exec(editor) {\n editor.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function exec(editor) {\n editor.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor);\n });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function exec(editor) {\n editor.toggleOverwrite();\n },\n readOnly: true\n }, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function exec(editor) {\n editor.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function exec(editor, args) {\n editor.navigateUp(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function exec(editor) {\n editor.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function exec(editor) {\n editor.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function exec(editor, args) {\n editor.navigateDown(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function exec(editor) {\n editor.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function exec(editor) {\n editor.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function exec(editor) {\n editor.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function exec(editor, args) {\n editor.navigateLeft(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function exec(editor) {\n editor.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function exec(editor) {\n editor.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function exec(editor, args) {\n editor.navigateRight(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function exec(editor) {\n editor.selectPageDown();\n },\n readOnly: true\n }, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function exec(editor) {\n editor.scrollPageDown();\n },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function exec(editor) {\n editor.gotoPageDown();\n },\n readOnly: true\n }, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function exec(editor) {\n editor.selectPageUp();\n },\n readOnly: true\n }, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function exec(editor) {\n editor.scrollPageUp();\n },\n readOnly: true\n }, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function exec(editor) {\n editor.gotoPageUp();\n },\n readOnly: true\n }, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function exec(editor) {\n editor.commands.toggleRecording(editor);\n },\n readOnly: true\n }, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function exec(editor) {\n editor.commands.replay(editor);\n },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function exec(editor) {\n editor.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true, true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function exec() {},\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n exec: function exec(editor) {},\n readOnly: true\n }, {\n name: \"cut\",\n exec: function exec(editor) {\n var range = editor.getSelectionRange();\n\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n exec: function exec(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function exec(editor) {\n editor.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function exec(editor) {\n editor.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function exec(editor) {\n editor.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function exec(editor) {\n editor.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function exec(editor) {\n editor.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function exec(editor) {\n editor.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function exec(editor) {\n editor.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor, true);\n });\n }\n }, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function exec(editor) {\n editor.undo();\n }\n }, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function exec(editor) {\n editor.redo();\n }\n }, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function exec(editor) {\n editor.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function exec(editor) {\n editor.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function exec(editor) {\n editor.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function exec(editor) {\n editor.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function exec(editor) {\n editor.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function exec(editor) {\n editor.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function exec(editor) {\n editor.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function exec(editor) {\n editor.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function exec(editor) {\n editor.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function exec(editor) {\n editor.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function exec(editor) {\n editor.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function exec(editor) {\n editor.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n exec: function exec(editor, str) {\n editor.insert(str);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n exec: function exec(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function exec(editor) {\n editor.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function exec(editor) {\n editor.transposeLetters();\n },\n multiSelectAction: function multiSelectAction(editor) {\n editor.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function exec(editor) {\n editor.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function exec(editor) {\n editor.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < editor.session.doc.getLength() - 1) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? firstLineEndCol + 1 : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == ranges.length - 1) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }];\n});\nace.define(\"ace/editor\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/keyboard/textinput\", \"ace/mouse/mouse_handler\", \"ace/mouse/fold_handler\", \"ace/keyboard/keybinding\", \"ace/edit_session\", \"ace/search\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/commands/command_manager\", \"ace/commands/default_commands\", \"ace/config\", \"ace/token_iterator\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./lib/fixoldbrowsers\");\n var oop = acequire(\"./lib/oop\");\n var dom = acequire(\"./lib/dom\");\n var lang = acequire(\"./lib/lang\");\n var useragent = acequire(\"./lib/useragent\");\n var TextInput = acequire(\"./keyboard/textinput\").TextInput;\n var MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\n var FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\n var KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\n var EditSession = acequire(\"./edit_session\").EditSession;\n var Search = acequire(\"./search\").Search;\n var Range = acequire(\"./range\").Range;\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var CommandManager = acequire(\"./commands/command_manager\").CommandManager;\n var defaultCommands = acequire(\"./commands/default_commands\").commands;\n var config = acequire(\"./config\");\n var TokenIterator = acequire(\"./token_iterator\").TokenIterator;\n\n var Editor = function Editor(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + ++Editor.$uid;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n\n if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n\n config._signal(\"editor\", this);\n };\n\n Editor.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function () {\n function last(a) {\n return a[a.length - 1];\n }\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n this.on(\"change\", function () {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n\n this.startOperation = function (commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) this.$blockScrolling++;\n };\n\n this.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) return this.curOp = null;\n\n this._signal(\"beforeEndOperation\");\n\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0) this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n\n break;\n\n default:\n break;\n }\n\n if (scrollIntoView == \"animate\") this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n\n this.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas) return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && e.command.name == prev.command.name;\n\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined) this.mergeNextCommand = true;\n shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (this.$mergeUndoDeltas != \"always\" && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge) this.session.mergeUndoDeltas = true;else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now();\n };\n\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n\n var _self = this;\n\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n\n this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n\n this.setSession = function (session) {\n if (this.session == session) return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", {\n oldEditor: this\n });\n session && session._signal(\"changeEditor\", {\n editor: this\n });\n if (session && session.bgTokenizer) session.bgTokenizer.scheduleStart();\n };\n\n this.getSession = function () {\n return this.session;\n };\n\n this.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos) this.selectAll();else if (cursorPos == 1) this.navigateFileEnd();else if (cursorPos == -1) this.navigateFileStart();\n return val;\n };\n\n this.getValue = function () {\n return this.session.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") || dom.computedStyle(this.container, \"fontSize\");\n };\n\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function () {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n\n if (range) session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.$highlightTags = function () {\n if (this.$highlightTagPending) return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function () {\n self.$highlightTagPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token) return;\n }\n\n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n\n if (prevToken.value == '<') {\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n depth--;\n }\n }\n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n\n iterator.stepForward();\n }\n\n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column + token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n\n if (range && !session.$tagHighlight) session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.focus = function () {\n var _self = this;\n\n setTimeout(function () {\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n\n this.blur = function () {\n this.textInput.blur();\n };\n\n this.onFocus = function (e) {\n if (this.$isFocused) return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n\n this._emit(\"focus\", e);\n };\n\n this.onBlur = function (e) {\n if (!this.$isFocused) return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function () {\n this.renderer.updateCursor();\n };\n\n this.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = delta.start.row == delta.end.row ? delta.end.row : Infinity;\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n\n this.onCursorChange = function () {\n this.$cursorChange();\n\n if (!this.$blockScrolling) {\n config.warn(\"Automatically scrolling cursor into view after selection change\", \"this will be disabled in the next version\", \"set editor.$blockScrolling = Infinity to disable this message\");\n this.renderer.scrollCursorIntoView();\n }\n\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine()) highlight = this.getCursorPosition();\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function (e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine()) return;\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols));\n if (startOuter >= 0 && /^[\\w\\d]/.test(needle) || endOuter <= lineCols && /[\\w\\d]$/.test(needle)) return;\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle)) return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n return re;\n };\n\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n\n this._emit(\"changeMode\", e);\n };\n\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n\n this.getCopyText = function () {\n var text = this.getSelectedText();\n\n this._signal(\"copy\", text);\n\n return text;\n };\n\n this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n\n this.onPaste = function (text, event) {\n var e = {\n text: text,\n event: event\n };\n this.commands.exec(\"paste\", this, e);\n };\n\n this.$handlePaste = function (e) {\n if (typeof e == \"string\") e = {\n text: e\n };\n\n this._signal(\"paste\", e);\n\n var text = e.text;\n\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec(\"insertstring\", this, text);\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty()) this.session.remove(range);\n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n\n this.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n\n text = transform.text;\n }\n }\n\n if (text == \"\\t\") text = this.session.getTabString();\n\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n } else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) {\n // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n } else {\n // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({\n row: cursor.row + 1,\n column: 0\n }, lineIndent);\n }\n\n if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function (text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\") this.selection.selectLeft();else this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n\n if (new_range) range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.removeWordRight = function () {\n if (this.selection.isEmpty()) this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeWordLeft = function () {\n if (this.selection.isEmpty()) this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineStart = function () {\n if (this.selection.isEmpty()) this.selection.selectLineStart();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty()) this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n\n this.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0) return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n } else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n\n this.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = size - column % size;\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n\n return this.insert(indentString);\n };\n\n this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n\n this.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n\n for (var i = rows.first; i <= rows.last; i++) {\n lines.push(session.getLine(i));\n }\n\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n\n this.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n\n this.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n\n return null;\n };\n\n this.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n };\n\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n\n this.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last) break;else if (!copy && subRows.first > last + 1) break;\n last = subRows.last;\n }\n\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n\n this.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function (text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n\n this.isRowVisible = function (row) {\n return row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow();\n };\n\n this.isRowFullyVisible = function (row) {\n return row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow();\n };\n\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n this.$blockScrolling++;\n\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n this.$blockScrolling--;\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null) renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n\n this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n\n this.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n\n this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n\n this.selectAll = function () {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n\n break;\n }\n }\n } else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n\n if (prevToken.value === '<') {\n depth[token.value]++;\n } else if (prevToken.value === '') {\n depth[token.value]--;\n }\n\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n\n if (!matchType) return;\n var range, pos;\n\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2) range = this.session.getBracketRange(pos);\n }\n } else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) var tag = token.value;else return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n } else if (prevToken.value === '') {\n depth[tag]--;\n }\n\n if (depth[tag] === 0) found = true;\n }\n }\n } while (prevToken && !found);\n }\n\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n\n this.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({\n row: lineNumber - 1,\n column: column || 0\n });\n this.$blockScrolling += 1;\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n this.$blockScrolling -= 1;\n if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate);\n };\n\n this.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n\n this.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n\n this.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n\n this.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n\n this.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n\n this.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n\n this.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n\n this.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n\n this.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n\n this.replace = function (replacement, options) {\n if (options) this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range) return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n\n if (range !== null) {\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n }\n\n return replaced;\n };\n\n this.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length) return replaced;\n this.$blockScrolling += 1;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n return replaced;\n };\n\n this.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n\n this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n\n this.find = function (needle, options, animate) {\n if (!options) options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp) options.needle = needle;else if (typeof needle == \"object\") oop.mixin(options, needle);\n var range = this.selection.getRange();\n\n if (options.needle == null) {\n needle = this.session.getTextRange(range) || this.$search.$options.needle;\n\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n\n this.$search.set({\n needle: needle\n });\n }\n\n this.$search.set(options);\n if (!options.start) this.$search.set({\n start: range\n });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll) return newRange;\n\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n\n if (options.backwards) range.start = range.end;else range.end = range.start;\n this.selection.setRange(range);\n };\n\n this.findNext = function (options, animate) {\n this.find({\n skipCurrent: true,\n backwards: false\n }, options, animate);\n };\n\n this.findPrevious = function (options, animate) {\n this.find(options, {\n skipCurrent: true,\n backwards: true\n }, animate);\n };\n\n this.revealRange = function (range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false) this.renderer.animateScrolling(scrollTop);\n };\n\n this.undo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.redo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.destroy = function () {\n this.renderer.destroy();\n\n this._signal(\"destroy\", this);\n\n if (this.session) {\n this.session.destroy();\n }\n };\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable) return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll) rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n\n shouldScroll = rect = null;\n }\n });\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable) return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer) return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n }).call(Editor.prototype);\n config.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function set(style) {\n this.onSelectionChange();\n\n this._signal(\"changeSelectionStyle\", {\n data: style\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function set() {\n this.$updateHighlightActiveLine();\n },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function set(shouldHighlight) {\n this.$onSelectionChange();\n },\n initialValue: true\n },\n readOnly: {\n set: function set(readOnly) {\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n cursorStyle: {\n set: function set(val) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {\n initialValue: true\n },\n wrapBehavioursEnabled: {\n initialValue: true\n },\n autoScrollEditorIntoView: {\n set: function set(val) {\n this.setAutoScrollEditorIntoView(val);\n }\n },\n keyboardHandler: {\n set: function set(val) {\n this.setKeyboardHandler(val);\n },\n get: function get() {\n return this.keybindingId;\n },\n handlesSet: true\n },\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n exports.Editor = Editor;\n});\nace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var UndoManager = function UndoManager() {\n this.reset();\n };\n\n (function () {\n this.execute = function (options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n\n if (options.merge && this.hasUndo()) {\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n\n this.dirtyCounter++;\n };\n\n this.undo = function (dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n\n this.redo = function (dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n\n if (deltaSets) {\n redoSelectionRange = this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n\n return redoSelectionRange;\n };\n\n this.reset = function () {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n\n this.hasUndo = function () {\n return this.$undoStack.length > 0;\n };\n\n this.hasRedo = function () {\n return this.$redoStack.length > 0;\n };\n\n this.markClean = function () {\n this.dirtyCounter = 0;\n };\n\n this.isClean = function () {\n return this.dirtyCounter === 0;\n };\n\n this.$serializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n\n this.$deserializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n\n function $serializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n\n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n\n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = {\n group: deltaSet_old.group,\n deltas: new Array(deltaSet_old.length)\n };\n\n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n\n deltaSets_new[i] = deltaSet_new;\n }\n\n return deltaSets_new;\n }\n }).call(UndoManager.prototype);\n exports.UndoManager = UndoManager;\n});\nace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var oop = acequire(\"../lib/oop\");\n var lang = acequire(\"../lib/lang\");\n var EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\n var Gutter = function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$cells = [];\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setSession = function (session) {\n if (this.session) this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session) session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo) rowInfo = this.$annotations[row] = {\n text: []\n };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText);\n var type = annotation.type;\n if (type == \"error\") rowInfo.className = \" ace_error\";else if (type == \"warning\" && rowInfo.className != \" ace_error\") rowInfo.className = \" ace_warning\";else if (type == \"info\" && !rowInfo.className) rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length) return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {} else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function (config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var cell = null;\n var index = -1;\n var row = firstRow;\n\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n\n break;\n }\n\n cell = this.$cells[++index];\n\n if (!cell) {\n cell = {\n element: null,\n textNode: null,\n foldWidget: null\n };\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row]) className += breakpoints[row];\n if (decorations[row]) className += decorations[row];\n if (this.$annotations[row]) className += this.$annotations[row].className;\n if (cell.element.className != className) cell.element.className = className;\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height) cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null) c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row) className += \" ace_closed\";else className += \" ace_open\";\n if (cell.foldWidget.className != className) cell.foldWidget.className = className;\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n\n var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber;\n if (text !== cell.textNode.data) cell.textNode.data = text;\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber;\n var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function getWidth() {\n return \"\";\n },\n getText: function getText() {\n return \"\";\n }\n };\n };\n\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n\n this.$showFoldWidgets = true;\n\n this.setShowFoldWidgets = function (show) {\n if (show) dom.addCssClass(this.element, \"ace_folding-enabled\");else dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function () {\n if (!this.element.firstChild) return {\n left: 0,\n right: 0\n };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left) return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right) return \"foldWidgets\";\n };\n }).call(Gutter.prototype);\n exports.Gutter = Gutter;\n});\nace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var dom = acequire(\"../lib/dom\");\n\n var Marker = function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n };\n\n (function () {\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n\n this.update = function (config) {\n if (!config) return;\n this.config = config;\n var html = [];\n\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n range = range.toScreenRange(this.session);\n\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row) ? this.session.$bidiHandler.getPosLeft(range.start.column) : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\") this.drawTextMarker(html, range, marker.clazz, config);else this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n\n this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var clazzModified = null;\n var lineRange = new Range(row, range.start.column, row, curr);\n\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\"