{"version":3,"file":"9820.14ce2e0ce4f2f1015c13.js","mappings":";wHAAA,UAqBE,EAAO,CACN,SACA,UACE,EAUI,SAAUA,GASnB,IA0BIC,EAAgB,SAAUC,EAASC,GAQtC,OALUD,EAAQE,QAAS,uBAAuB,SAAUC,GAE3D,OADAA,EAAOA,EAAKD,QAAS,cAAe,MA7BV,iBADHE,EA+BNH,EAAME,IA9BcC,EAAiC,iBAAbA,EAAwB,GACjFA,EAAWC,KAAKC,UAAWF,GAFd,IAAUA,CAgCxB,GAGD,EAKIG,EAAe,WAClB,IAAIC,EAAcC,UAAW,GAU7B,MATW,GAAGC,MAAMC,KAAMF,UAAW,GAE7BG,SAAQ,SAAUC,GACzB,IAAIC,EACJ,IAAMA,KAAQD,EACbL,EAAaM,GAASD,EAAQC,EAEhC,IAEON,CACR,EAKIO,EAAc,SAAUC,EAAMhB,EAASiB,GAC1C,IAAIC,EAQJ,OANAlB,EAAUgB,GAAShB,EAAU,KAAOD,EAAeC,EAASiB,GAAe,KAC3EC,EAAQ,IAAIC,MAAOnB,IACbgB,KAAOA,EAEbT,EAAcW,EAAOD,GAEdC,CACR,EAQIE,EAAY,SAAUC,EAAOC,EAAMC,GAGhCF,EAAMG,QAAUH,EAAOA,EAAMG,OAAS,GAAIF,OAASA,EACvDD,EAAOA,EAAMG,OAAS,GAAID,OAASA,EAIpCF,EAAMI,KAAM,CAAEH,KAAMA,EAAMC,MAAOA,GACnC,EA2DIG,EAAmB,SAAUC,GAChC,OAAOtB,KAAKC,UAAWqB,GAAM,SAAUC,EAAML,GAC5C,OAAKA,GAASA,EAAMM,WACZN,EAAMM,WAEPN,CACR,GACD,EAqEIO,EAAW,SAAUd,EAAMhB,EAAS+B,EAAOd,GAC9C,IAAMc,EACL,MAAMhB,EAAaC,EAAMhB,EAASiB,EAEpC,EAKIe,EAAc,SAAUC,GAC3B,OAAOC,MAAMC,QAASF,GAAkBA,EAAgBA,EAAgB,CAAEA,GAAkB,EAC7F,EAKIG,EAAe,SAAUC,EAAMd,EAAOe,GACzC,IAAIC,EAGJA,EAAcP,GAFdM,EAAUA,GAAW,CAAC,GAEaE,MAAOC,MAAK,SAAUC,GACxD,OAAOA,EAAOC,KAAMN,EACrB,IAEAP,EAAU,iBAAkB,0CAA2CP,GAASgB,EAAa,CAC5FF,KAAMA,GAER,EAaIO,EAA4B,SAAUrB,EAAOpB,GAChD2B,EAAU,sBAAuB,4CACtBe,IAAVtB,EAAqB,CAAEpB,KAAMA,GAC/B,EAiCI2C,EAAwB,SAAUvB,EAAOpB,EAAM4B,EAAOgB,GACzDjB,EACC,qBACA,6DACAC,EACA,CACCgB,SAAUA,EACV5C,KAAMA,EACNoB,MAAOA,GAGV,EAKIyB,EAA8B,SAAUzB,EAAOpB,GAClD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAwC,iBAAVA,GAAsBA,aAAiBzB,EACrE,0BAEF,EAQImD,EAAgB,SAAUC,GAC7B,OAAe,OAARA,GAAgB,GAAKA,GAAQ,iBACrC,EAiBIC,EAAa,SAAUC,GAC1B,OAAOA,aAAwBtD,EAAOsD,EAAe,IAAItD,EAAMsD,EAChE,EA2BA,SAASC,EAAuBC,GAC/BA,EAAKC,KAAM,MAAOnB,GAClBkB,EAAKE,IAAK,6BACX,CAWA,SAASC,EAAWC,GACnB,KAAQC,gBAAgBF,GACvB,OAAO,IAAIA,EAAWC,GAGvBd,EAA2Bc,EAAQ,UACnCV,EAA6BU,EAAQ,UAErCC,KAAKL,KAAOH,EAAYO,GAExBL,EAAuBM,KAAKL,KAC7B,CA2DA,OAjDAG,EAAUG,KAAO,WAGhB9D,EAAK8D,KAAKC,MAAO/D,EAAMW,UACxB,EAaAgD,EAAUC,OAAS,SAAUA,GAO5B,OANAV,EAA6BU,EAAQ,UAEhCjD,UAAUe,SACdmC,KAAKL,KAAOH,EAAYO,GACxBL,EAAuBM,KAAKL,OAEtBK,KAAKL,IACb,EAKAG,EAAUK,aAAe9B,EACzByB,EAAUM,aAAehD,EACzB0C,EAAUO,eAAiBjE,EAC3B0D,EAAUQ,sBA9UiB,SAAUjE,EAASC,GAE7C,IAAIiE,EAAa,EAChB7C,EAAQ,GAYT,OATArB,EAAQE,QAAS,uBAAuB,SAAUiE,EAAuBC,GACxE,IAAIjE,EAAOgE,EAAsBzD,MAAO,GAAI,GAC5CU,EAAWC,EAAO,UAAWrB,EAAQU,MAAOwD,EAAYE,IACxDhD,EAAWC,EAAO,WAAYpB,EAAME,IACpCkB,EAAOA,EAAMG,OAAS,GAAIrB,KAAOA,EACjC+D,GAAcE,EAASD,EAAsB3C,MAC9C,IAGOH,EAAMgD,QAAO,SAAUC,GAC7B,MAAsB,KAAfA,EAAK/C,KACb,GACD,EA6TAkC,EAAUc,eAAiBtB,EAC3BQ,EAAUe,cAAgBjE,EAC1BkD,EAAUgB,WAvTM,SAAUpD,GACzB,OAAOA,EAAMqD,KAAK,SAAUJ,GAC3B,OAAOA,EAAK/C,KACb,IAAGoD,KAAM,GACV,EAoTAlB,EAAUmB,WAAaxD,EACvBqC,EAAUoB,cA9FS,SAAUC,GAC5B,OAAOA,EAAO5E,QAAS,8BAA+B,OACvD,EA6FAuD,EAAUsB,aA/PQ,SAAUpD,EAAM2B,EAAM0B,EAAIC,GAE3C,IAAIC,EAAUxD,EAAkBC,GAC/BwD,EAnBiB,SAAUH,GAC5B,QAAiBnC,IAAZmC,EAAG7E,KACP,OAAO6E,EAAG7E,KAIX,IAAIiF,EAAU,6BAA6BC,KAAML,EAAGM,YAEpD,OAAKF,GAAWA,EAAQ5D,OAAS,EACzB4D,EAAS,QADjB,CAGD,CAQWG,CAAcP,GACvBtB,EAASJ,EAAKI,OAIf,OAAMyB,GAINH,EAAGnD,WAtCa,SAAUsD,EAAQzB,EAAQ/B,EAAMuD,GAChD,IAAIM,EAZsBC,EAe1B,OAFAP,EAAUA,GAAWxD,EAAkBC,GAbb8D,EAcPN,EAASzB,EAASwB,GAArCM,EAbO,GAAGE,OAAO/E,KAAM8E,GAAK,SAAUD,EAAMG,GAG3C,OAAc,GADHH,GAAQ,GAAMA,EADfG,EAAEC,WAAY,EAGzB,GAAG,IAUW,EAAI,IAAMJ,EAAO,IAAMK,KAAKC,IAAKN,EAChD,CAiCiB3D,CAAYsD,EAAQzB,EAAQ,KAAMwB,GAElDF,EAAGe,gBAAkB,WACpB,MAAO,cAAiBrC,EAAS,MAASyB,EAAS,IAAMD,EAAQxE,MAAO,GAAI,GAAM,GACnF,EAEAsE,EAAGC,YAAcA,EAEVD,GAXCA,CAYT,EA2OAvB,EAAUuC,WAzFM,SAAUP,EAAKQ,EAAOC,GACrC,IAAI1E,EAIJ,IAHoB,iBAARiE,IACXA,EAAMU,OAAQV,IAETjE,EAASiE,EAAIjE,OAAQA,EAASyE,EAAOzE,GAAU,EACpDiE,EAAQS,EAAUT,EAAM,IAAU,IAAMA,EAEzC,OAAOA,CACR,EAiFAhC,EAAU2C,UAAYtE,EACtB2B,EAAU4C,cAAgBjE,EAC1BqB,EAAU6C,uBAzMkB,SAAU/E,GACrCO,EAAU,+BAAgC,4CAC/Be,IAAVtB,EAAqB,CAAC,EACxB,EAuMAkC,EAAU8C,2BAA6B3D,EACvCa,EAAU+C,wBAhLmB,SAAUjF,EAAOpB,EAAMsG,EAASC,GAC5D5E,EACC,qBACA,mFACUe,IAAVtB,GAAuBA,GAASkF,GAAWlF,GAASmF,EACpD,CACCA,QAASA,EACTD,QAASA,EACTtG,KAAMA,EACNoB,MAAOA,GAGV,EAqKAkC,EAAUkD,kCA1H6B,SAAUpF,EAAOpB,GACvD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAuB0B,EAAe1B,GACtC,eAEF,EAoHAkC,EAAUmD,uBAAyB9D,EAE5BW,CAKP,OAleY,2DCxBZ,UAiBE,EAAO,CACN,SACA,SACA,SACA,SACA,eACS,0BAAP,EAUG,SAAU3D,EAAM2D,GAExB,IAAIzB,EAAcyB,EAAUK,aAC3B/C,EAAc0C,EAAUM,aACxB8C,EAAuBpD,EAAUQ,sBACjC6C,EAAwBrD,EAAUsD,uBAClCC,EAAgBvD,EAAUwD,eAC1BC,EAAYzD,EAAUgB,WACtBrD,EAAYqC,EAAUmB,WACtBuC,EAAc1D,EAAUsB,aACxBqC,EAAY3D,EAAUuC,WACtB5D,EAAeqB,EAAU4C,cACzBgB,EAAwB5D,EAAU6C,uBAClC1D,EAA4Ba,EAAU8C,2BACtCzD,EAAwBW,EAAUmD,uBAClCU,EAA8B7D,EAAU8D,6BACxCC,EAAmC/D,EAAUkD,kCAG1Cc,EAAkC,WACrC,OAAO1G,EAAa,0BAA2B,4BAChD,EAKI2G,EAAgC,SAAUnG,EAAOpB,GACpD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAwC,iBAAVA,GAAsB,gBAAoBoB,KAAMpB,GAC9E,uDAEF,EAmBIoG,EAA+B,SAAUC,EAAUC,EAASvE,GAC/D,IAAIwE,EACHC,EAAW,GACXC,EAAe1E,EAAK2E,aAAa,CAAE,yBAA0BL,KAC5DtE,EAAK2E,aAAc,kCAQrB,OANAH,GAAUE,EAAaE,WAGtBH,EAAW,IAAMX,EAAW,IAAKU,GAASpH,MAAO,GAAI,GAAMsH,EAAaG,WAGlEN,EAAQ3H,QAAS,2BAA4B6H,EACrD,EAKIK,EAAe,SAAUC,EAAQC,GACpC,IAAIC,EACHC,EAAO,CAAC,EAET,IAAMD,KAAOF,EACPC,EAAO3F,KAAM4F,KACjBC,EAAMD,GAAQF,EAAQE,IAIxB,OAAOC,CACR,EAKIC,EAAuB,SAAUnF,GACpC,OAAO8E,EAAc9E,EAAKoF,KAAK,CAC9B,UACA,gCAAkC5B,EAAuBxD,KACtD,eACL,EAUIqF,EAAyB,SAAUf,EAAUtE,GAChD,IAAIuE,EAAUb,EAAe,UAAW1D,GAMxC,OAFAuE,EAAUF,EAA8BC,EAAUC,EAASvE,GAEpD,CACNsF,aAAcR,EAAc9E,EAAKoF,KAAK,CACrC,qBACAd,IACG,gBACJC,QAASA,EACTgB,aAAcJ,EAAsBnF,GAEtC,EAqBIwF,EAAa,iiGAwBbC,EAAiB,knGAUjBC,EAA2B,SAAUpB,EAAUtE,EAAMhB,GACxD,IAAI2G,EAAiBpB,EAASqB,EAAQC,EACrCC,EAAS,CACR,YAAa,KACb,SAAUN,EACV,kBAAmBC,GAmErB,MAhEuB,SAAlBzG,EAAQ+G,MACZH,EAAStB,GAETuB,EAAgB,CAAE,UAGU,WAAvB7G,EAAQgH,YACZH,EAAcI,QAAS,qBAGxBJ,EAAc1G,MAAK,SAAU+G,GAC5B,OAAON,EAAS5F,EAAKoF,KAAK,CACzB,qBACAd,EACA4B,GAEF,KAGDP,EAAkB,CAAE,iBAAkB,iBAAkBvE,KAAI,SAAU+E,GACrE,OAAOnG,EAAKoF,KAAK,CAChB,UACA,gCAAkC5B,EAAuBxD,GACzD,kBACAmG,GAEF,IAEA5B,EAAUvE,EAAKoF,KAAK,CACnB,UACA,gCAAkC5B,EAAuBxD,GACvC,eAAlBhB,EAAQ+G,MAAyB,aAAe,aAiC1C,CACNxB,QA/BDA,EAICF,EAA8BC,EAAUC,EAASvE,GAGhDoG,MAAO,KAAMhF,KAAI,SAAUmD,GAE3B,OAAOA,EAAQ6B,MAAO,KAAWhF,KAAI,SAAUJ,EAAMqB,GACpD,IAAIgE,EAAgBP,EAAQH,EAAiBtD,GAAIgE,eAChDC,EAAmBR,EAAQH,EAAiBtD,GAAIiE,kBAChDC,EAAgB,GAcjB,OATAF,EAAgBA,EAAchH,KAAMuG,EAAOY,OAAQnE,EAAIuD,EAAO1H,OAAS,EAAI,IAC3EoI,EAAmBA,EAAiBjH,KACnC2B,EAAKwF,OAAQnE,EAAI,EAAIrB,EAAK9C,OAAS,GAAItB,QAAS,UAAW,MAGvDyJ,GAAiBrF,GAAQsF,IAC7BC,EAAgBZ,EAAiBtD,GAAIkE,gBAG7BlE,EAAIkE,EAAgB,IAAOvF,GAASqB,EAAI,GAAKkE,EACvD,IAAGlF,KAAM,IACV,IAAGA,KAAM,KAITuE,OAAQA,EAEV,EA0DIa,EAA6B,SAAUC,EAAwBC,EAAiBC,GAwBnF,OApBKD,GAAmBC,EAClB,SAAmC3I,GAGvC,OAFAqB,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAvDd,SAAU4I,EAAiBC,EAAYF,GAC/D,IAAIG,EAAaC,EAChBjJ,EAAQ,GACRuH,EAAesB,EAAWtB,cAAgB,CAAC,EAC3CC,EAAeqB,EAAWrB,aAqB3B,OAnBAwB,EAAczB,EAAc,qBAAuBwB,IAClDxB,EAAc,4BACdA,EAAayB,aACbH,EAAWtC,SACZ0C,EAAczB,EAAc,qBAAuBuB,IAClDvB,EAAc,2BAEfhC,EAAsByD,EAAa,CAAEH,EAAiBE,IAAezJ,SAAQ,SAAU0D,GACnE,aAAdA,EAAKhD,MAAqC,MAAdgD,EAAKnE,KACrCmE,EAAK/C,MAAMX,SAAQ,SAAU0D,GAC5BlD,EAAWC,EAAOiD,EAAKhD,KAAMgD,EAAK/C,MACnC,IACyB,aAAd+C,EAAKhD,MAAqC,MAAdgD,EAAKnE,KAC5CiB,EAAWC,EAAO,WAAYiD,EAAK/C,OAEnCH,EAAWC,EAAO,UAAWiD,EAAK/C,MAEpC,IAEOF,CACR,CA8BUkJ,CACNP,EAAwBzI,GACxB0I,EAAiB1I,GACjB2I,EAEF,EAIK,SAAmC3I,GAGvC,OAhCkCF,EAgCL2I,EAAwBzI,GAhCZ2H,EAgCqBe,EA/BhE5I,EAAMT,SAAQ,SAAU0D,GACJ,aAAdA,EAAKhD,OACTgD,EAAK/C,MAAQ2H,EAEf,IACO7H,EANmB,IAAUA,EAAO6H,CAiC1C,CAIF,EA4BA,SAASsB,EAAsBnI,EAAMd,GACpCa,EAAcC,EAAMd,EAAO,CAC1BiB,KAAM,CACL,0CACA,wDAGH,CA0LA,OA5KAiB,EAAUgH,kBACVhH,EAAUiH,UAAUD,kBAAoB,SAAU7C,EAAUtF,GAC3D,IAAIX,EAAMgJ,EAA0BC,EAcpC,OAZAhI,EAA2BgF,EAAU,YACrCF,EAA+BE,EAAU,YAEzCJ,EAAkClF,EAAS,WAG3CX,EAAO,CAAEiG,EADTtF,EAAUA,GAAW,CAAC,GAItBsI,EAlWyB,SAAUD,GACnC,OAAO,SAA4BpJ,GAClC,OAAO2F,EAAWyD,EAA0BpJ,GAC7C,CACD,CA8VYsJ,CADXF,EAA2BhH,KAAKgH,yBAA0B/C,EAAUtF,IAEpE6E,EAAaxF,EAAMgC,KAAKL,KAAMsH,EAAU,CAAED,IAEnCC,CACR,EAqBAnH,EAAUkH,yBACVlH,EAAUiH,UAAUC,yBAA2B,SAAU/C,EAAUtF,GAClE,IAAIX,EAAM2B,EAAM0G,EAAwBC,EAAiBC,EAAYU,EAAUvB,EAE/EzG,EAA2BgF,EAAU,YACrCF,EAA+BE,EAAU,YAEzCJ,EAAkClF,EAAS,WAE3CgB,EAAOK,KAAKL,KAGZ3B,EAAO,CAAEiG,EAFTtF,EAAUA,GAAW,CAAC,GAGtB+G,EAAQ/G,EAAQ+G,OAAS,SAEzBhC,EAAuB/D,GAGvBA,EAAKwH,GAAI,MAAON,GAChB,IACCN,EAAc,CACba,WAAY/B,EACZhI,KAAMgI,EACN7I,KAAMwI,EACNO,OAAQF,GACNK,GAAWzB,EAAUtE,EAAMhB,EAG/B,CAFE,QACDgB,EAAK0H,IAAK,MAAOR,EAClB,CAoCA,OAjCAlI,EA5GgB,SAAU+F,EAAQ4C,GAClC,IAAI1C,EACHC,EAAO,CAAC,EAIT,IAAMD,KAFN0C,EAAOjJ,EAAaiJ,GAEP5C,GACkB,IAAzB4C,EAAKC,QAAS3C,KAClBC,EAAMD,GAAQF,EAAQE,IAIxB,OAAOC,CACR,CA+FW2C,CAAY7I,EAAS,UACvB8I,IAAMlB,EAAWrC,QAGV,WAAVwB,GAAgC,eAAVA,GAAoC,SAAVA,GACpDW,EAAyBrG,KAAKqG,uBAAwB1H,GAEtDsI,EAAWb,EAA4BC,EAAwBE,EAAWhB,QAE1E/B,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAEZ,EAAwBE,EAAWhB,WAIxEc,EAAyBrG,KAAKqG,uBAAwB1H,GAGtD2H,OAAkCpH,IAAhBc,KAAK0H,OACtB1H,KAAKsG,kBACLxC,EAEDmD,EAAWb,EACVC,EACAC,EACAC,GAGD/C,EAAaxF,EAAM2B,EAAMsH,EAAU,CAClCZ,EACAC,EACAC,KAIKU,CACR,EAWAnH,EAAU6H,eACV7H,EAAUiH,UAAUY,eAAiB,WAIrC,EAaA7H,EAAU8H,eACV9H,EAAUiH,UAAUa,eAAiB,SAAUhK,EAAOqG,EAAUtF,GAG/D,OAFAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAC7BoC,KAAK8G,kBAAmB7C,EAAUtF,EAAlCqB,CAA6CpC,EACrD,EAaAkC,EAAU+H,sBACV/H,EAAUiH,UAAUc,sBAAwB,SAAUjK,EAAOqG,EAAUtF,GAGtE,OAFAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAC7BoC,KAAKgH,yBAA0B/C,EAAUtF,EAAzCqB,CAAoDpC,EAC5D,EAaAkC,EAAUgI,cACVhI,EAAUiH,UAAUe,cAAgB,WACpC,EAEOhI,CAKP,GAtjBY,sDCvBZ,UAqBE,EAAO,CACN,SACA,SACA,SACA,SACA,eACS,0BAAP,EAUG,SAAU3D,EAAM2D,GAExB,IAAI1C,EAAc0C,EAAUM,aAC3B2H,EAAgCjI,EAAUkI,+BAC1C5L,EAAgB0D,EAAUO,eAC1Bf,EAAgBQ,EAAUc,eAC1BqH,EAAgBnI,EAAUoI,eAC1BC,EAAiCrI,EAAUsI,gCAC3CC,EAAevI,EAAUwI,cACzB/E,EAAYzD,EAAUgB,WACtBrD,EAAYqC,EAAUmB,WACtBsH,EAAezI,EAAUoB,cACzBsH,EAAsB1I,EAAU2I,qBAChCjF,EAAc1D,EAAUsB,aACxBqC,EAAY3D,EAAUuC,WACtBlE,EAAW2B,EAAU2C,UACrBhE,EAAeqB,EAAU4C,cACzBgB,EAAwB5D,EAAU6C,uBAClC1D,EAA4Ba,EAAU8C,2BACtCzD,EAAwBW,EAAUmD,uBAClCY,EAAmC/D,EAAUkD,kCAC7C0F,EAA8B5I,EAAU6I,6BAGrCC,EAA4B,SAAUhL,EAAOpB,GAChD2C,EAAuBvB,EAAOpB,OAAgB0C,IAAVtB,GAAuBA,aAAiBiL,KAAM,OACnF,EAuBIC,EAA+B,sCAAsC/C,MAAO,IAAKhE,QAAO,SAAUgH,EAAMC,EAAMhH,GAEjH,OADA+G,EAAMC,GAAShH,EACR+G,CACR,GAAG,CAAC,GAuDAE,EAAe,SAAUvE,EAAQrD,GAKpC,OAJAA,EAAKA,GAAM,SAAUqD,EAAQE,EAAKhH,GAEjC,OADA8G,EAAQ9G,GAAUgH,EACXF,CACR,EACOwE,OAAO5B,KAAM5C,GAAS3C,QAAO,SAAUoH,EAAWvE,GACxD,OAAOvD,EAAI8H,EAAWvE,EAAKF,EAAQE,GACpC,GAAG,CAAC,EACL,EAMIwE,EAAoCH,EAAa,CACpD,EAAK,MACL,EAAK,OACH,SAAUvE,EAAQE,EAAKhH,GAIzB,OAHAA,EAAMmI,MAAO,IAAK9I,SAAQ,SAAUoM,GACnC3E,EAAQ2E,GAAUzE,CACnB,IACOF,CACR,IAKI4E,EAAwC,SAAUC,GACrD,OAAOH,EAAmCG,IAAeA,CAC1D,EAKIC,EAAgB,iCAKhBC,EAAe,SAAU3H,EAAKQ,GACjC,IAAIN,EAAG0H,EAAS,GAChB,IAAM1H,EAAI,EAAGA,EAAIM,EAAON,IACvB0H,GAAkB5H,EAEnB,OAAO4H,CACR,EAiCA,IAAIC,EAAiC,SAAUC,EAAmBC,EAAiBC,GAClF,IAAIC,EAA0BC,EAAuBC,EAiBrD,OAbAF,GADAC,EAAwBJ,EAAkBM,MAAO,OACEF,EAAsBnM,OAAS,GAM1D,KADxBoM,GAFAJ,EApCD,SAAgCM,EAAkCN,GACjE,IAAI7H,EAAGoI,EAAGC,EAAsBC,EAAaC,EAAeC,EAC3DC,EAAiBC,EAGjBC,EAAuBrB,EAKxB,IAHAoB,EAAyBP,EAAiCD,MAAOV,GACjEa,EAAuBR,EAAgBK,MAAOV,GAExCxH,EAAI,EAAGA,EAAIqI,EAAqBxM,OAAQmE,IAG7C,IAFAsI,EAAcD,EAAsBrI,GAAImE,OAAQ,GAChDoE,EAAgBF,EAAsBrI,GAAInE,OACpCuM,EAAI,EAAGA,EAAIM,EAAuB7M,OAAQuM,IAC/CI,EAAgBE,EAAwBN,GAAIjE,OAAQ,GACpDsE,EAAkBC,EAAwBN,GAAIvM,OACzC8M,EAAsBL,KAAkBK,EAAsBH,IAClED,EAAgBE,IAEhBJ,EAAsBrI,GAAMyH,EAAca,EAAaG,IAK1D,OAAOJ,EAAqBrJ,KAAM,GACnC,CAWmB4J,CAFiBhB,EAAkBrN,QAAS,KAAM,IAEOsN,IAE3CgB,YAAa,OACa,IAA7Bd,IAC5BF,EACCA,EAAgB9M,MAAO,EAAGkN,EAAgB,GAC1CH,EACAL,EAAc,IAAKM,GACnBF,EAAgB9M,MAAOkN,EAAgB,IAElCJ,CACR,EAKIiB,EAAkC,SAAUC,EAASC,GACxD,IAAIC,EAAGC,EAAGC,EAAUC,EAAMC,EAAMC,EAAOC,EAAOvJ,EAAGoI,EAGhDO,EAAuBrB,EAExB,GAAKyB,IAAYC,EAChB,OAAO,EAMR,GAHAD,EAAUA,EAAQb,MAAOV,GACzBwB,EAAUA,EAAQd,MAAOV,GAEpBuB,EAAQlN,SAAWmN,EAAQnN,OAC/B,OAAQ,EAIT,IADAsN,EAAW,EACLnJ,EAAI,EAAGA,EAAI+I,EAAQlN,OAAQmE,IAAM,CAItC,IAFAsJ,EAAQX,EADRM,EAAIF,EAAS/I,GAAImE,OAAQ,IAEzBoF,EAAQ,KACFnB,EAAI,EAAGA,EAAIY,EAAQnN,QAGnByN,KADLC,EAAQZ,EADRO,EAAIF,EAASZ,GAAIjE,OAAQ,KADOiE,IAM/BmB,EAAQ,KAGV,GAAe,OAAVA,EACJ,OAAQ,EAETH,EAAOL,EAAS/I,GAAInE,OACpBwN,EAAOL,EAASZ,GAAIvM,OACpBsN,GAAsBjJ,KAAKC,IAAKiJ,EAAOC,GAIlCJ,IAAMC,IACVC,GAAY,IAINC,EAAO,GAAKC,GAAQ,GAASD,GAAQ,GAAKC,EAAO,KACvDF,GAAY,GAEd,CACA,OAAOA,CACR,EAKIK,EAAuC,SAAU7L,EAAM8L,GAC1D,IAAIC,EAAkB5B,EAAkB5F,EAASyH,EAAcC,EAC9DlN,EAAO,6DAGPmN,EAAgBlC,EAChBmC,EAAiBhB,EAIlB,GAFA5G,EAAUvE,EAAKoF,KAAK,CAAErG,EAAM+M,IAEvBA,IAAkBvH,EAAU,CAIhC,IAAM0H,KAFND,EAAe,GADfD,EAAmB/L,EAAKoF,KAAK,CAAErG,IAI9BiN,EAAa7N,KAAK,CACjB8N,SAAUA,EACV1H,QAASwH,EAAkBE,GAC3BG,KAAMD,EAAgBL,EAAeG,MAIvCD,EAAeA,EACbjL,QAAQ,SAAUsL,GAClB,OAAOA,EAAOD,MAAQ,CACvB,IACCE,MAAM,SAAUlB,EAASC,GACzB,OAAOD,EAAQgB,KAAOf,EAAQe,IAC/B,KAEiBlO,SACjBiM,EAAmBzB,EAAc,UAAW1I,GAC5CuE,EAAU2H,EAAeJ,EAAeE,EAAc,GAAIzH,QAAS4F,GAErE,CAEA,OAAO5F,CACR,EA0BIgI,EAAoB,SAAUvN,EAASgB,GAC1C,IAAIwM,EAAczC,EAAQkC,EAAUQ,EAAczO,EAzSIC,EA4SrDyO,EAAsBb,EAEvB,SAASc,EAAiB3O,EAAM4O,EAAaC,GAC5C,OAAOpQ,EACNuD,EAAKoF,KAAK,CACT,4CACApH,IAED,CAAE6O,EAAaD,GAEjB,CAEA,QAAS,GACR,IAAK,aAAc5N,EAgBlB,GA1SoB,SAA2BiN,GACjD,IAAIa,EAGHC,EAAe5D,EAKhB8C,EAASrP,QAAS,0CAA0C,SAAU8M,GACrE,MAAMjM,EACL,oBAAqB,uDACrB,CACCuP,aAActD,EACd1L,KAAM,WACNC,MAAOgO,GAGV,IAKAA,EAAS7F,MAAO,IAAK6G,OAAM,SAAUvD,GACpC,GAAKqD,EAAcrD,GAAUoD,EAC5B,MAAMrP,EACL,oBAAqB,uDACrB,CACCuP,aAActD,EACd1L,KAAM,WACNC,MAAOgO,IAKV,OADAa,EAAOC,EAAcrD,IACd,CACR,GACD,CA6PGwD,CAJAjB,GAHAA,EAAWjN,EAAQiN,UAGCrP,QAAS,MAAM,WAClC,OAAOoD,EAAK2E,aAAawI,SAASC,WACnC,KAMArD,EAAS2C,EACR1M,EACAiM,GAGA,MAIDQ,EAAeR,EAAS7F,MAAO,sBAAuBhJ,OAAQ,GAAK,GACnEoP,EAAeP,EAAS7F,MAAO,2BAA6B,GAC5DoG,EAAeE,EACd1M,EACAwM,GAEDC,EAAeC,EACd1M,EACAyM,GAIAzO,EADI,oBAAoBqB,KAAMmN,GACvB,OACI,YAAYnN,KAAMmN,GACtB,OACI,UAAUnN,KAAMmN,GACpB,SAEA,QAIPzC,EADIyC,GAAgBC,EACXE,EAAiB3O,EAAMwO,EAAcC,GAErCD,GAAgBC,EAG1B,MAED,IAAK,SAAUzN,EACf,IAAK,SAAUA,EACd+K,EAAS/J,EAAKoF,KAAK,CAClB,4BACA,SAAUpG,EAAU,cAAgB,cAClCA,EAAQqO,MAAQrO,EAAQsO,OAE3B,MAED,IAAK,aAActO,EAClB+K,EAAS4C,EAAiB3N,EAAQuO,SACjCvN,EAAKoF,KAAK,CAAE,wCAAyCpG,EAAQuO,WAC7DvN,EAAKoF,KAAK,CAAE,wCAAyCpG,EAAQuO,YAE9D,MAED,IAAK,QAASvO,EACb+K,EAAS/K,EAAQ8I,IACjB,MAED,QACC,MA/XKrK,EAAa,sBAAuB,oCAAqC,CAC/EZ,KA8XwC,CACtCA,KAAM,UACNoB,MAAOe,GA/XTf,MAAOA,IAmYR,OAAO8L,CACR,EAKIyD,EAAe,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAQ3DC,EAAqB,SAAUzN,GAClC,OAAOwN,EAAa5F,QAAS5H,EAAK2E,aAAa+I,SAASC,WACzD,EAQIC,EAAsB,SAAU1P,EAAQF,EAAM6P,EAAU7N,GAC3D,IAAI8N,EAAU/D,EAEd,GAAM8D,EAWN,OAPA9D,EAAS/J,EAAKoF,KAAK,CAClB,2BACAyI,EACA3P,EAAS,EAAI,QAAU,OACvBF,KAIO+L,GAKR+D,EAAW9N,EAAK2E,aAAa,CAC5B,kCAAmCkJ,EAAU,EAC7C,wBAGM7N,EAAKoF,KAAK,CAChB,+BACA0I,EACA5P,EAAS,EAAI,QAAU,OACvBF,IAEF,EAmBI+P,EAA0B,SAAUC,GACvC,OAAOA,EACL5H,MAAO,KACPhF,KAAI,SAAUiL,GACd,OAAOA,EAAOjP,MAAO,EAAGiP,EAAOzE,QAAS,KAAQ,EACjD,IACCvG,KAAM,IACT,EA0BI4M,EAA2B,SAAUD,EAAYE,GACpD,OAAOF,EACL5H,MAAO,KACPhF,KAAI,SAAUiL,GACd,IAAItO,EAAQsO,EAAOjG,MAAO,MAE1B,OADArI,EAAMoQ,OAAQ,EAAG,EAAGD,GACbnQ,EAAMsD,KAAM,GACpB,IACCA,KAAM,IACT,EAKI+M,EAAuB,SAAUnJ,EAAKtI,GACzC,IAAI+E,EAAK,WACR,OAAO/E,CACR,EAEA,OADA+E,EAAG2M,aAAepJ,EACXvD,CACR,EA8XI4M,EAAiB,WACrB,SAASC,EAAsBxJ,EAAQyJ,EAAUvQ,GAC/CsL,OAAOkF,eAAe1J,EAAQyJ,EAAU,CACtCvQ,MAAOA,GAEX,CAEA,SAASyQ,EAAeC,EAAUC,GAKhC,IAJA,IAAIC,EAAQ,EACRC,EAAeH,EAASI,UAGrBF,EAAQD,EAAO1Q,OAAS,GAAK4Q,GAAgBF,EAAOC,IACzDA,IAEF,OAAOA,CACT,CAEA,SAASG,EAAQtN,GACf,IAAIuN,EAAU5O,KAAK6O,oBACfC,EAAMzN,IACVrB,KAAKsO,SAASS,QAAQ,IAAIlG,KAAK7I,KAAK0O,YACpC,IAAIM,EAAUhP,KAAK6O,oBAInB,OAHIG,EAAUJ,GACZ5O,KAAKsO,SAASW,WAAWjP,KAAKsO,SAASY,aAAeF,EAAUJ,GAE3DE,CACT,CAEA,IAAIb,EAAgB,SAASjB,EAAMmC,GAKjC,GAJAjB,EAAsBlO,KAAM,WAAY,IAAI6I,KAAKmE,EAAK0B,YACtDR,EAAsBlO,KAAM,QAAS,IAAI6I,KAAKmE,EAAK0B,YACnDR,EAAsBlO,KAAM,eAAgBmP,GAC5CjB,EAAsBlO,KAAM,UAAW2O,KACjCQ,EAAaZ,QAAUY,EAAaC,SAAWD,EAAaE,QAChE,MAAM,IAAI7R,MAAM,qBAElBwC,KAAK+O,QAAQ/O,KAAKsP,MAAMZ,UAAuC,GAA3B1O,KAAK6O,oBAA2B,IACtE,EAqEA,OAnEAZ,EAAclH,UAAUwI,MAAQ,WAC9B,OAAO,IAAItB,EAAcjO,KAAKsO,SAAUtO,KAAKmP,aAC/C,EAGA,CAAC,cAAe,WAAY,UAAW,SAAU,WAAY,aAC7D,aAAc,mBAAmBlS,SAAQ,SAASuS,GAEhD,IAAIC,EAAY,SAAWD,EAAOE,OAAO,GACzCzB,EAAclH,UAAUyI,GAAU,WAChC,OAAOxP,KAAKsP,MAAMG,IACpB,CACF,IAGAxB,EAAclH,UAAU4I,QACxB1B,EAAclH,UAAU2H,QAAU,WAChC,OAAO1O,KAAKsP,MAAMZ,UAAuC,GAA3B1O,KAAK6O,oBAA2B,GAChE,EAEAZ,EAAclH,UAAU8H,kBAAoB,WAC1C,IAAIL,EAAQH,EAAerO,KAAKsO,SAAUtO,KAAKmP,aAAaZ,QAC5D,OAAOvO,KAAKmP,aAAaC,QAAQZ,EACnC,EAGA,CAAC,cAAe,WAAY,UAAW,WAAY,aAAc,aAAc,mBAAmBvR,SAAQ,SAASuS,GAEjH,IAAIC,EAAY,SAAWD,EAAOE,OAAO,GACzCzB,EAAclH,UAAUyI,GAAU,SAAS5R,GACzC,IAAI0R,EAAQtP,KAAKsP,MAGjB,OAAOtP,KAAK2O,SAAQ,WAClB,OAAOW,EAAMG,GAAW7R,EAC1B,GACF,CACF,IAEAqQ,EAAclH,UAAUgI,QAAU,SAAS9B,GACzC,OAAOjN,KAAKsP,MAAMP,QAAQ9B,EAC5B,EAEAgB,EAAclH,UAAU6I,MAAQ,WAC9B,IAAIpB,EAAQH,EAAerO,KAAKsO,SAAUtO,KAAKmP,aAAaZ,QAC5D,OAAOsB,QAAQ7P,KAAKmP,aAAaE,OAAOb,GAC1C,EAEAP,EAAclH,UAAU+I,QAAU,WAChC,IAAItB,EAAQH,EAAerO,KAAKsO,SAAUtO,KAAKmP,aAAaZ,QACxDwB,EAAQ/P,KAAKmP,aAAaY,MAC9B,OAAO/P,KAAKsP,MAAMU,cAAczT,QAAQ,KAAM,IAAM,KACjDwT,GAASA,EAAMvB,GAAS,MAAoC,EAA5BxO,KAAK6O,oBAA4B,MACjE7O,KAAK4P,QAAU,qBAAuB,GAC3C,EAEA3B,EAAclH,UAAUkJ,OAAS,WAC/B,OAAO,IAAIpH,KAAK7I,KAAK0O,UACvB,EAGA,CAAC,cAAe,SAAU,eAAezR,SAAQ,SAASuS,GACxDvB,EAAclH,UAAUyI,GAAU,WAChC,OAAOxP,KAAKiQ,SAAST,IACvB,CACF,IAEOvB,CACP,CA5GoB,GAoJhBiC,EAAc,SAAUlD,EAAMmD,GAEjC,OADAnD,EAAOA,aAAgBiB,EAAgBjB,EAAKuC,QAAU,IAAI1G,KAAMmE,EAAK0B,WAC5DyB,GACR,IAAK,OACJnD,EAAKoD,SAAU,GAEhB,IAAK,QACJpD,EAAKqD,QAAS,GAEf,IAAK,MACJrD,EAAKsD,SAAU,GAEhB,IAAK,OACJtD,EAAKiC,WAAY,GAElB,IAAK,SACJjC,EAAKuD,WAAY,GAElB,IAAK,SACJvD,EAAKwD,gBAAiB,GAExB,OAAOxD,CACR,EA4BIyD,EAAe,SAAUzD,EAAM0D,GAClC,IAAIC,EAAe3D,EAAK4D,UAExB5D,EAAKqD,QAAS,GACdrD,EAAKoD,SAAUM,GApBE,SAAU1D,EAAM6D,GACjC,IAAIC,EAAU,IAAIjI,KAAMmE,EAAK+D,cAAe/D,EAAKgE,WAAa,EAAG,GAAIJ,UAErE5D,EAAKqD,QAASQ,EAAM,EAAI,EAAIA,EAAMC,EAAUD,EAAMC,EACnD,CAiBCG,CAAajE,EAAM2D,EACpB,EAKIO,EAAa,SAAUtT,EAAOuT,EAAKC,GACtC,OAAOxT,EAAQuT,GAAOvT,EAAQwT,CAC/B,EAgBIC,EAAY,SAAUC,EAAQC,EAAQhL,GACzC,IAAIiL,EAAMX,EAAKY,EAAYf,EAAOgB,EAAKC,EAAMC,EAAQC,EA9GvBC,EAsH7B9E,EAAO,IAAInE,KACXkJ,EAAa,GAQd,GAJKxL,EAAW4I,eACfnC,EAAO,IAAIiB,EAAejB,EAAMzG,EAAW4I,kBAGtCoC,EAAO1T,OACZ,OAAO,KA4MR,IAzMQ0T,EAAO3E,OAAM,SAAUoF,GAC9B,IAAaC,EAAKrU,EAAOC,EAEzB,GAAoB,YAAfmU,EAAMrU,KAGV,OAAO,EAaR,OAVAsU,EAAMD,EAAMrU,KAAKwI,OAAQ,GACzBtI,EAASmU,EAAMrU,KAAKE,OAEP,MAARoU,IAIJA,EAAM1L,EAAW2L,mBAGTD,GAGR,IAAK,IACJF,EAAWjU,KA3CN,GA4CL4T,GAAOM,EAAMpU,MACb,MAGD,IAAK,IAEJ,GADAA,EAAQoU,EAAMpU,MACE,IAAXC,EAAe,CACnB,GAAKqT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,GAMRA,GADmD,IAAzCsE,KAAKiQ,MAAOnF,EAAK+D,cAAgB,MAE9B/D,EAAK+D,cAAgB,KACjCnT,GAAS,IAEX,CACAoP,EAAKoF,YAAaxU,GAClBmU,EAAWjU,KAhEN,GAiEL,MAED,IAAK,IACJ,MAAMiK,EAA8B,CACnCsK,QAAS,iBAAmBJ,EAAM,MAIpC,IAAK,IACL,IAAK,IACJ,MAGD,IAAK,IACL,IAAK,IAMJ,GAJCrU,EADIC,GAAU,EACNmU,EAAMpU,OAELoU,EAAMpU,MAEXsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAKR8S,EAAQ9S,EACRmU,EAAWjU,KA3FL,GA4FN,MAGD,IAAK,IACL,IAAK,IACJ,MAGD,IAAK,IACJ+S,EAAMmB,EAAMpU,MACZmU,EAAWjU,KArGP,GAsGJ,MAED,IAAK,IACJ2T,EAAaO,EAAMpU,MACnBmU,EAAWjU,KA1GP,GA2GJ,MAED,IAAK,IAOL,IAAK,IACL,IAAK,IACL,IAAK,IAIJ,MAGD,IAAK,IACJ0T,EAAOQ,EAAMpU,MACb,MAGD,IAAK,IAEJ,GADAA,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAER+T,EAAOC,GAAS,EAChB5E,EAAKsD,SAAoB,KAAV1S,EAAe,EAAIA,GAClCmU,EAAWjU,KAxIN,GAyIL,MAED,IAAK,IAEJ,GADAF,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAER+T,EAAOC,GAAS,EAChB5E,EAAKsD,SAAU1S,GACfmU,EAAWjU,KAlJN,GAmJL,MAED,IAAK,IAEJ,GADAF,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAER+T,GAAO,EACP3E,EAAKsD,SAAoB,KAAV1S,EAAe,EAAIA,GAClCmU,EAAWjU,KA5JN,GA6JL,MAED,IAAK,IAEJ,GADAF,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAER+T,GAAO,EACP3E,EAAKsD,SAAU1S,GACfmU,EAAWjU,KAtKN,GAuKL,MAGD,IAAK,IAEJ,GADAF,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAERoP,EAAKiC,WAAYrR,GACjBmU,EAAWjU,KA/KJ,GAgLP,MAGD,IAAK,IAEJ,GADAF,EAAQoU,EAAMpU,MACTsT,EAAYtT,EAAO,EAAG,IAC1B,OAAO,EAERoP,EAAKuD,WAAY3S,GACjBmU,EAAWjU,KAxLJ,GAyLP,MAED,IAAK,IACJkP,EAAKsD,SAAU,GACftD,EAAKiC,WAAY,GACjBjC,EAAKuD,WAAY,GAGlB,IAAK,IACJ3S,EAAQsE,KAAKoQ,MAAON,EAAMpU,MAAQsE,KAAKqQ,IAAK,GAAI,EAAI1U,IACpDmP,EAAKwD,gBAAiB5S,GACtBmU,EAAWjU,KAnME,GAoMb,MAGD,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACwB,iBAAhBkU,EAAMpU,QACjBiU,EAAiBG,EAAMpU,OAK1B,OAAO,CACR,IAGC,OAAO,KAKR,GAAK+T,MAAYH,EAAOI,GACvB,OAAO,KAaR,GAVa,IAARF,GAGJ1E,EAAKoF,aAAmC,EAAtBpF,EAAK+D,cAAqB,QAG9B7R,IAAVwR,GACJD,EAAczD,EAAM0D,EAAQ,QAGhBxR,IAAR2R,EAAoB,CACxB,GAAKK,EAAYL,EAAK,EAnVC,SAAU7D,GAClC,OAAO,IAAInE,KAAMmE,EAAK+D,cAAe/D,EAAKgE,WAAa,EAAG,GAAIJ,SAC/D,CAiV2B4B,CAAoBxF,IAC5C,OAAO,KAERA,EAAKqD,QAASQ,EACf,MAAO,QAAoB3R,IAAfuS,EAA2B,CACtC,GAAKP,EAAYO,EAAY,GAtWAK,EAsWmB9E,EAAK+D,cArWR,IAAvC,IAAIlI,KAAMiJ,EAAM,EAAG,IAAKd,WAqWyC,IAAM,MAC5E,OAAO,KAERhE,EAAKoD,SAAU,GACfpD,EAAKqD,QAASoB,EACf,CAqBA,OAnBKG,GAAmB,OAATJ,GACdxE,EAAKsD,SAAUtD,EAAKyF,WAAa,SAGVvT,IAAnB2S,GACJ7E,EAAKiC,WAAYjC,EAAKkC,aAAe2C,EAAiB7E,EAAK6B,qBAM5DkD,EAAa7P,KAAKwQ,IAAIxS,MAAO,KAAM6R,IACnC/E,EAAOkD,EAAalD,EAjQX,CAAE,OAAQ,QAAS,MAAO,OAAQ,SAAU,SAAU,gBAiQ9B+E,eAGZ9D,IACpBjB,EAAOA,EAAKiD,UAGNjD,CACR,EA+dI2F,EAAe,SAAUC,EAAcC,EAAiBC,GAC3D,OAAO,SAAqBlV,GAC3B,IAAI2T,EAMJ,OAJAtS,EAA2BrB,EAAO,SAClC8K,EAA6B9K,EAAO,SAEpC2T,EA9bkB,SAAU3T,EAAOgV,EAAcrM,GAClD,IAAIwM,EAAUC,EACbzB,EAAS,GACT0B,EAAS,CAAE,cAAe,OAAQ,UA8anC,OA5aAF,EAAWxM,EAAWwM,SACtBnV,EAAQqK,EAAerK,GAEvBoV,EAAQzM,EAAWrC,QAAQgG,MAAOV,GAAgBoD,OAAM,SAAUsG,GACjE,IAASjB,EAAKpU,EAAQsV,EAASC,EAC9BpB,EAAQ,CAAC,EAEV,SAASqB,EAAiBD,EAASR,GAClC,IAAIU,EAAKC,EACRrJ,EAAQtM,EAAMsM,MAAOkJ,GAKtB,OAJAR,EAAeA,GAAgB,SAAUhV,GACxC,OAAQA,CACT,IAEMsM,IAINqJ,EAAarJ,EAAO,GAGfA,EAAMrM,OAAS,GACnByV,EAAMC,EAAa,EAAI,EACvBvB,EAAMpU,MAAuC,GAA/BgV,EAAc1I,EAAOoJ,KAGxBpJ,EAAMrM,OAAS,IAC1ByV,EAAMC,EAAa,CAAE,EAAG,GAAM,CAAE,EAAG,GACnCvB,EAAMpU,MAA4C,GAApCgV,EAAc1I,EAAOoJ,EAAK,KACvCV,EAAc1I,EAAOoJ,EAAK,OAI3BA,EAAMC,EAAa,CAAE,EAAG,EAAG,GAAM,CAAE,EAAG,EAAG,IACzCvB,EAAMpU,MAA4C,GAApCgV,EAAc1I,EAAOoJ,EAAK,KACvCV,EAAc1I,EAAOoJ,EAAK,KAC1BV,EAAc1I,EAAOoJ,EAAK,KAAU,IAGjCC,IACJvB,EAAMpU,QAAU,IAGV,EACR,CAEA,SAAS4V,IACR,GAAgB,IAAX3V,EAIJ,OADAsV,GAAU,EACHC,EAAUL,CAEnB,CAWA,SAASU,IACR,GAAgB,IAAX5V,GAA2B,IAAXA,EAIpB,OADAsV,GAAU,EACHC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,SAExD,CAEA,SAASyW,IACR,GAAgB,IAAX9V,EAIJ,OADAsV,GAAU,EACHC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,OAExD,CAIA,SAAS0W,EAAQlV,GAChB,IAAImV,EAAQtN,EAAY7H,EAAKsC,KAAM,MAEnC,OAAM6S,GAKNA,EAAM/U,MAAK,SAAUkK,GAEpB,GADcA,EAAM,GACPhK,KAAMpB,GAGlB,OAFAoU,EAAMpU,MAAQoL,EAAM,GACpBoK,EAAUpK,EAAM,IACT,CAET,IACO,MAZC,IAaT,CAqDA,OAnDAgJ,EAAMrU,KAAOuV,EACbjB,EAAMiB,EAAQ/M,OAAQ,GACtBtI,EAASqV,EAAQrV,OAEJ,MAARoU,IAGCpU,EAAS,GACboU,EAAM,IACNpU,EAAS,GAGEA,EAAS,GACpBoU,EAAM,IACNpU,EAAS,IAIToU,EAAM,IACNpU,EAAS,IAIE,MAARoU,GACC1L,EAAWuN,2BACf9B,EAAMpU,MAAQ,KACdwV,EAAU7M,EAAWuN,0BAQV,MAAR7B,IACC1L,EAAWwN,eACf/B,EAAMpU,MAAQ,KACdwV,EAAU7M,EAAWwN,gBAIrB9B,EAAM,IACNpU,EAAS,IAIE,MAARoU,GAAe1L,EAAWyN,eAC9BhC,EAAMpU,MAAmB,IAAXC,EAAe0I,EAAWyN,aAAe,KACvDZ,EAAU7M,EAAW0N,gBAGbhC,GAGR,IAAK,IACJ2B,EAAO,CACN,iBACA/V,GAAU,EAAI,UAAyB,IAAXA,EAAe,WAAa,cAEzD,MAGD,IAAK,IACL,IAAK,IACJsV,GAAU,EAMTC,EAHe,IAAXvV,EAGM,IAAI6V,OAAQ,KAAOX,EAAS7V,OAAS,MACzB,IAAXW,EAMD,IAAI6V,OAAQ,KAAOX,EAAS7V,OAAS,UAIrC,IAAIwW,OAAQ,KAAOX,EAAS7V,OAAS,KAAOW,EAAS,MAEhE,MAGD,IAAK,IACL,IAAK,IAIJ2V,KAAyBG,KACxBC,EAAO,CACN,qBACQ,MAAR3B,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,KAEnB,MAGD,IAAK,IACL,IAAK,IAQJ4V,KAAoCG,EAAO,CAC1C,mBACQ,MAAR3B,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,KAElB,MAGD,IAAK,IAGCA,GAAU,IAGdsV,GAAU,EACVC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,KAAOW,EAAS,QAEhE,MAED,IAAK,IACL,IAAK,IAGJ2V,IACA,MAGD,IAAK,IACL,IAAK,IAIJ,GAAK3V,GAAU,EAAI,CAClB2V,KAAyBG,IACzB,KACD,CAGD,IAAK,IACY,IAAX9V,EAIJ+V,EAAO,CACN,iBACA,CAAU,MAAR3B,EAAc,cAAgB,UAChC,WACK2B,EAAO,CACZ,iBACA,CAAU,MAAR3B,EAAc,cAAgB,UAChC,gBAGD2B,EAAO,CACN,iBACA,CAAU,MAAR3B,EAAc,cAAgB,UAChCgB,EAAQpV,EAAS,EAAI,EAAIA,EAAS,KAGpC,MAGD,IAAK,IACJ+V,EAAO,CACN,qCAED,MAGD,IAAK,KAlON,WACC,GAAgB,IAAX/V,EAIJ,OADAsV,GAAU,EACHC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,SAExD,EA8NEgX,IAA+BP,IAC/B,MAGD,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAaJF,IACA,MAED,IAAK,IAKJN,GAAU,EACVC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,KAAOW,EAAS,KAC/D,MAED,IAAK,IAKJsV,GAAU,EACVC,EAAU,IAAIM,OAAQ,KAAOX,EAAS7V,OAAS,MAASW,EAAS,GAAM,KACvE,MAGD,IAAK,IACL,IAAK,IACL,IAAK,IACJ,GAAKuV,GAAWA,EAAQpU,KAAMpB,GAC7B,MAED,GAAa,MAARqU,GAA0B,IAAXpU,EACnB,MAIF,IAAK,IAIJ,GAAKD,IAAU2I,EAAY,+BAC1ByL,EAAMpU,MAAQ,EACdwV,EAAU7M,EAAY,sCAQtB,IANMA,EAAY,4BAA6BzH,MAAK,SAAUqV,GAC7D,GAAKd,EAAiBc,EAAcvB,GAEnC,OADAQ,EAAUe,GACH,CAET,IAEC,OAAO,KAGT,MAED,IAAK,IAGJ,GAAe,MAAVvW,EAAgB,CACpBoU,EAAMpU,MAAQ,EACdwV,EAAU,KACV,KACD,CAGD,IAAK,IAaJ,IANM7M,EAAW6N,EAAEtV,MAAK,SAAUqV,GACjC,GAAKd,EAAiBc,GAErB,OADAf,EAAUe,GACH,CAET,IAEC,OAAO,KAER,MAED,IAAK,IACJnC,EAAMrU,KAAO,UACbyV,EAAU,IAAIM,OAAQ,IAAMnL,EAAcC,EAAqB0K,KAC/D,MAED,QACClB,EAAMrU,KAAO,UACbyV,EAAU,IAAIM,OAAQ,IAAMnL,EAAc2K,IAG5C,SAAME,IAKNxV,EAAQA,EAAMrB,QAAS6W,GAAS,SAAUiB,GAKzC,OAJArC,EAAMqC,OAASA,EACVlB,IACJnB,EAAMpU,MAAQgV,EAAcyB,IAEtB,EACR,KAEMrC,EAAMqC,QAIPlB,GAAWmB,MAAOtC,EAAMpU,SAI7B2T,EAAOzT,KAAMkU,GACN,IACR,IAEe,KAAVpU,IACJoV,GAAQ,GAGFA,EAAQzB,EAAS,EACzB,CAYWgD,CAAe3W,EAAOgV,EAAcE,GACtCzB,EAAWzT,EAAO2T,EAAQsB,IAAqB,IACvD,CACD,EAoZI2B,EAAgB,SAAUxH,EAAMM,GACnC,OAASN,EAAKyH,SAAWnH,EAAW,GAAM,CAC3C,EAuBIoH,EAAgB,SAAU1H,GAC7B,OAAO9K,KAAKiQ,OAdsBwC,EAcKzE,EAAalD,EAAM,SAAUA,EAZxD0B,UAAYiG,EAAKjG,WADhB,QADW,IAAUiG,CAenC,EAMIC,EAAgB3L,EAAa,CAChC,IAAO,IACP,KAAQ,KACR,QAAW,KACX,MAAS,KACT,KAAQ,KACR,IAAO,MACP,QAAW,MACX,UAAa,IACb,KAAQ,OACR,OAAU,IACV,OAAU,MACV,KAAQ,WACN,SAAUvE,EAAQE,EAAKhH,GAIzB,OAHAA,EAAMmI,MAAO,IAAK9I,SAAQ,SAAUsI,GACnCb,EAAQa,GAAWX,CACpB,IACOF,CACR,IA2BImQ,EAAyB,SAAU7H,EAAMhB,EAAQ8I,EAAeC,GACnE,IAAIC,EACHvU,EAASuM,EAAK6B,oBAYf,OAVAmG,EAAY9S,KAAKC,IAAK1B,GACtBsU,EAAeA,GAAgB,CAC9B,EAAG,SAAUnX,GACZ,OAAO6F,EAAW7F,EAAO,EAC1B,EACA,EAAG,SAAUA,GACZ,OAAO6F,EAAW7F,EAAO,EAC1B,GAGMoO,EAGLjG,MAAO,KAAOtF,EAAS,EAAI,EAAI,GAG/BlE,QAAS,IAAKuY,GAGdvY,QAAS,OAAO,SAAU2N,GAC1B,OAAO6K,EAAc7K,EAAMrM,QAAUqE,KAAKiQ,MAAO6C,EAAY,IAC9D,IAGCzY,QAAS,MAAM,WACf,OAAOwY,EAAc,GAAK7S,KAAKiQ,MAAO6C,EAAY,IACnD,IAGCzY,QAAS,MAAM,WACf,OAAOwY,EAAc,GAAK7S,KAAKiQ,MAAO6C,EAAY,EAAI,IACvD,GACF,EAgBIC,EAAa,SAAUjI,EAAMkI,EAAkB3O,GAClD,IAAI7I,EAAQ,GAERoX,EAAgBvO,EAAWuO,cAqU/B,OAlUKvO,EAAW4I,eACfnC,EAAO,IAAIiB,EAAejB,EAAMzG,EAAW4I,iBAG5C5I,EAAWrC,QAAQ3H,QAASiN,GAAe,SAAU0J,GACpD,IAAII,EAAK6B,EAAiBvX,EACzBqU,EAAMiB,EAAQ/M,OAAQ,GACtBtI,EAASqV,EAAQrV,OA6ClB,OA3Ca,MAARoU,IAIJA,EAAM1L,EAAW6O,eAGL,MAARnD,IAGCpU,EAAS,GACboU,EAAM,IACNpU,EAAS,GAGEA,EAAS,GACpBoU,EAAM,IACNpU,EAAS,IAIToU,EAAM,IACNpU,EAAS,IAOE,MAARoU,IACCjF,EAAK4C,QACThS,EAAQoP,EAAK4C,QAAUrJ,EAAW8O,eAAiB9O,EAAW+O,gBAIzD1X,IACLqU,EAAM,IACDpU,EAAS,IACbA,EAAS,KAKHoU,GAGR,IAAK,IACJrU,EAAQ2I,EAAWgP,KAAMvI,EAAK+D,cAAgB,EAAI,EAAI,GACtD,MAGD,IAAK,IAKJnT,EAAQoP,EAAK+D,cACG,IAAXlT,IAEJD,IADAA,EAAQ4E,OAAQ5E,IACD8R,OAAQ9R,EAAMC,OAAS,IAEvC,MAED,IAAK,KAMJD,EAAQ,IAAIiL,KAAMmE,EAAK0B,YACjB2B,QACLzS,EAAMgT,UAAY,EAClB4D,EAAexH,EAAMzG,EAAW+G,UAChC/G,EAAW+G,SACX/G,EAAWiP,SAEZ5X,EAAQA,EAAMmT,cACE,IAAXlT,IAEJD,IADAA,EAAQ4E,OAAQ5E,IACD8R,OAAQ9R,EAAMC,OAAS,IAEvC,MAGD,IAAK,IACL,IAAK,IACJD,EAAQsE,KAAKuT,MAAQzI,EAAKgE,WAAa,GAAM,GACxCnT,EAAS,IACbD,EAAQ2I,EAAWmP,SAAUzD,GAAOpU,GAAUD,IAE/C,MAGD,IAAK,IACL,IAAK,IACJA,EAAQoP,EAAKgE,WAAa,EACrBnT,EAAS,IACbD,EAAQ2I,EAAWoP,OAAQ1D,GAAOpU,GAAUD,IAE7C,MAGD,IAAK,IAKJA,EAAQ4W,EAAetE,EAAalD,EAAM,QAAUzG,EAAW+G,UAC/D1P,EAAQsE,KAAKuT,MAAQf,EAAe1H,GAASpP,GAAU,IACpD,EAAIA,GAAS2I,EAAWiP,QAAU,EAAI,GACzC,MAED,IAAK,IAIJ5X,EAAQ4W,EAAetE,EAAalD,EAAM,SAAWzG,EAAW+G,UAChE1P,EAAQsE,KAAKuT,MAAQzI,EAAK4D,UAAYhT,GAAU,IAC7C,EAAIA,GAAS2I,EAAWiP,QAAU,EAAI,GACzC,MAGD,IAAK,IACJ5X,EAAQoP,EAAK4D,UACb,MAED,IAAK,IACJhT,EAAQ8W,EAAe1H,GAAS,EAChC,MAED,IAAK,IAGJpP,EAAQsE,KAAKiQ,MAAOnF,EAAK4D,UAAY,GAAM,EAC3C,MAGD,IAAK,IACL,IAAK,IACJ,GAAK/S,GAAU,EAAI,CAIlBD,EAAQ4W,EAAexH,EAAMzG,EAAW+G,UAAa,EACrD,KACD,CAGD,IAAK,IACJ1P,EAAQuP,EAAcH,EAAKyH,UAC3B7W,EAAQ2I,EAAWqP,KAAM3D,GAAOpU,GAAUD,GAC1C,MAGD,IAAK,IACJA,EAAQ2I,EAAWsP,WAAY7I,EAAKyF,WAAa,GAAK,KAAO,MAC7D,MAGD,IAAK,IACJ7U,EAAUoP,EAAKyF,WAAa,IAAQ,GACpC,MAED,IAAK,IACJ7U,EAAQoP,EAAKyF,WACb,MAED,IAAK,IACJ7U,EAAQoP,EAAKyF,WAAa,GAC1B,MAED,IAAK,IACJ7U,EAAQoP,EAAKyF,YAAc,GAC3B,MAGD,IAAK,IACJ7U,EAAQoP,EAAKkC,aACb,MAGD,IAAK,IACJtR,EAAQoP,EAAK8I,aACb,MAED,IAAK,IACJlY,EAAQsE,KAAKoQ,MAAOtF,EAAK+I,kBAAoB7T,KAAKqQ,IAAK,GAAI1U,EAAS,IACpE,MAED,IAAK,IACJD,EAAQsE,KAAKoQ,MApRW,SAAUtF,GAGrC,OAAOA,EAAOkD,EAAalD,EAAM,MAClC,CAgRwBgJ,CAAuBhJ,GAAS9K,KAAKqQ,IAAK,GAAI1U,EAAS,IAC3E,MAGD,IAAK,IACJ,MAED,IAAK,IAKJ,GAAK0I,EAAWwN,cAAgB,CAC/BnW,EAAQ2I,EAAWwN,cACnB,KACD,CAGD,IAAK,IAGJ,GAAKxN,EAAWyN,aAAe,CAC9BpW,EAAQ2I,EAAWyN,aACnB,KACD,CAEiB,MAAZd,IACJrV,EAAS,GAIX,IAAK,IAI8B,IAA7BmP,EAAK6B,oBACTjR,EAAQ2I,EAAW0P,eAIdpY,EAAS,GACbyV,EAAMtG,EAAK6B,oBACXyE,EAAM/M,EAAWoH,WAAY2F,EAAM,GAAKA,EAAM,GAAM,EAAI,EAAI,IAE5DA,EAAM/M,EAAWoH,WAGlB/P,EAAQiX,EACP7H,EACAsG,EACAwB,EACAI,GAEDtX,EAAQ2I,EAAW2P,UAAU3Z,QAAS,QAASqB,IAEhD,MAED,IAAK,IAGJ,GAAkC,IAA7BoP,EAAK6B,oBAA4B,CACrCjR,EAAQ,IACR,KACD,CAGD,IAAK,IAOJ0V,EAAMtG,EAAK6B,oBAGK,IAAXhR,GAAgByV,EAAM,GAAKA,EAAM,GAAM,IAC3CzV,GAAU,GAKO,IAAXA,GAA2B,IAAXA,GAAkByV,EAAM,GAAM,IACpDzV,GAAU,GAWXD,EAAQiX,EAAwB7H,EARhCpP,EAAQ,CACP,UACA,cACA,gBACA,kBACA,uBACEC,EAAS,GAEiC,KAC7C,MAGD,IAAK,IACJD,EAAQkX,EACR,MAGD,IAAK,IACJlX,EAAQ4K,EAAqB0K,GAC7B,MAID,QACCtV,EAAQsV,EAGY,iBAAVtV,IACXA,EAAQsX,EAAkBrX,GAAUD,IAGrCuX,EAAYP,EAAe3C,GAG3BxU,EAAWC,EAFJyX,GAAwB,UAEPvX,EACzB,IAEOF,CAER,EAkBA,SAASyY,EAAiBxX,GACzB,YAA4BO,IAArBP,EAAQiN,eACG1M,IAAjBP,EAAQqO,WACS9N,IAAjBP,EAAQsO,WACa/N,IAArBP,EAAQuO,eACQhO,IAAhBP,EAAQ8I,GACV,CAEA,SAASZ,EAAsBnI,EAAMd,GACpCa,EAAcC,EAAMd,EAAO,CAC1BiB,KAAM,CACL,iEACA,+CACA,6BACA,iCACA,iBACA,0BACA,kCACA,oCAGH,CAEA,SAASuX,EAAuBzX,GAC/B0X,EAA2B,OAAQ1X,GACnC0X,EAA2B,OAAQ1X,GACnC0X,EAA2B,WAAY1X,EACxC,CAEA,SAAS0X,EAA2B1Y,EAAMgB,GACzC,IAAIf,EAAQe,EAAShB,GACrBQ,EACC,oBACA,sCACUe,IAAVtB,IAAmF,IAA5D,CAAE,QAAS,SAAU,OAAQ,QAAS2J,QAAS3J,GACtE,CAAED,KAAMA,EAAMC,MAAOA,GAEvB,CAEA,SAAS0Y,GAAyBpS,EAAS0H,GAC1CzN,EACC,oBACA,+DACae,IAAb0M,GAA+C,iBAAZ1H,GAAwBA,EAC3D,CAAEvG,KAAM,WAAYC,MAAOgO,GAE7B,CAEA,SAAS2K,GAAsB/I,GAC9B,OAAO,SAAU9O,EAAMd,GAEhB,iBAAiBoB,KAAMN,IAI7BP,EACC,oBACA,qEACAP,EACA,CACCc,KAAMA,EAAKnC,QAAS,mBAAoB,IACxCiR,SAAUA,GAGb,CACD,CAmOA,OA1NA1N,EAAU0W,aAAe,SAAUC,GAClC,IAAIC,EAAa,CACf,iBAAkBD,GAGpBxX,EAA2BwX,EAAM,QACjC5S,EAAkC4S,EAAM,QAExCta,EAAK8D,KAAMyW,EACZ,EAiBA5W,EAAU6W,cACV7W,EAAUiH,UAAU4P,cAAgB,SAAUhY,GAC7C,IAAIX,EAAM4Y,EAAsB3P,EAchC,OAZApD,EAAkClF,EAAS,WAGrCwX,EADNxX,EAAUA,GAAW,CAAC,KAErBA,EAAQiN,SAAW,OAEpB5N,EAAO,CAAEW,GAGTsI,EAt+DqB,SAAU2P,GAC/B,OAAO,SAAwBhZ,GAC9B,OAAO2F,EAAWqT,EAAsBhZ,GACzC,CACD,CAk+DYiZ,CADXD,EAAuB5W,KAAK4W,qBAAsBjY,IAElD6E,EAAaxF,EAAMgC,KAAKL,KAAMsH,EAAU,CAAE2P,IAEnC3P,CACR,EAkBAnH,EAAU8W,qBACV9W,EAAUiH,UAAU6P,qBAAuB,SAAUjY,GACpD,IAAIX,EAAM2B,EAAMuV,EAAkB4B,EAAK5S,EAASqC,EAAYU,EAC3DuG,EAAUuJ,EAEXlT,EAAkClF,EAAS,WAE3CgB,EAAOK,KAAKL,KAENwW,EADNxX,EAAUA,GAAW,CAAC,KAErBA,EAAQiN,SAAW,OAGpBwK,EAAuBzX,GACvB+E,EAAuB/D,GAEvB6N,EAAW7O,EAAQ6O,SACnB9E,EAA6B8E,EAAU,oBAEvCxP,EAAO,CAAEW,GAETgB,EAAKwH,GAAI,MAAON,GACX2G,IACJuJ,EAAeR,GAAsB/I,GACrC7N,EAAKwH,GAAI,MAAO4P,IAEjB,IAECT,GADApS,EAAUgI,EAAmBvN,EAASgB,GACJhB,EAAQiN,UAC1CrF,EAn2EyB,SAAUrC,EAASvE,EAAM6N,GACnD,IAAIjH,EAAa,CACf2O,iBAAkB,CAAC,EACnBhR,QAASA,EACT4Q,cAAezM,EAAc,gBAAiB1I,IAE/CsT,EAAS,CAAE,cAAe,OAAQ,UAEnC,SAAS+D,EAA2BF,GACnCvQ,EAAW2O,iBAAkB4B,GAAQrT,EAAW,GAAIqT,EACrD,CA0TA,OAxTKtJ,IACJjH,EAAW4I,aAAepB,EAAsB,QAAUP,EAAU,CACnE4B,QAASzP,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,YACzDe,OAAQ5O,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,WACxD6B,OAAQ1P,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,cAI1DtJ,EAAQ3H,QAASiN,GAAe,SAAU0J,GACzC,IAAII,EAAKrB,EAAKoD,EAAgBN,EAAchB,EAAelW,EAAQyX,EAuDnE,OArDArD,EAAMiB,EAAQ/M,OAAQ,GACtBtI,EAASqV,EAAQrV,OAEJ,MAARoU,IAIJ1L,EAAW6O,cAAgBnD,EAAMtS,EAAK2E,aAAawI,SAASC,aAIhD,MAARkF,GAA0B,IAAXpU,IACnBoU,EAAM,IACNpU,EAAS,GAOG,MAARoU,IACJqD,EAAiB/H,EAAqB1P,EAAQ,WAAY2P,EAAU7N,GACpE0V,EAAiB9H,EAAqB1P,EAAQ,WAAY2P,EAAU7N,GAC/D2V,IACJ/O,EAAW+O,eAAiBA,GAExBD,IACJ9O,EAAW8O,eAAiBA,GAIvBC,GAAmBD,IACxBpD,EAAM,IACDpU,EAAS,IACbA,EAAS,KASC,MAARoU,KACJ8B,EAAgBxG,EAAqB1P,EAAQ,UAAW2P,EAAU7N,MAIjEsS,EAAM,IACNpU,EAAS,IAIFoU,GAGR,IAAK,IACJ1L,EAAWgP,KAAO5V,EAAKoF,KAAK,CAC3B,iCACAlH,GAAU,EAAI,UAAyB,IAAXA,EAAe,WAAa,cAEzD,MAGD,IAAK,IAGJkX,GAAe,EACf,MAED,IAAK,IAGJxO,EAAW+G,SAAWF,EAAoBzN,GAC1C4G,EAAWiP,QAAU7V,EAAK2E,aAAa+I,SAASmI,UAChDT,GAAe,EACf,MAED,IAAK,IACL,IAAK,IACJ,MAAMhN,EAA8B,CACnCsK,QAAS,iBAAmBJ,EAAM,MAIpC,IAAK,IACL,IAAK,IACCpU,EAAS,GACP0I,EAAWmP,WAChBnP,EAAWmP,SAAW,CAAC,GAElBnP,EAAWmP,SAAUzD,KAC1B1L,EAAWmP,SAAUzD,GAAQ,CAAC,GAE/B1L,EAAWmP,SAAUzD,GAAOpU,GAAW8B,EAAKoF,KAAK,CAChD,qCACQ,MAARkN,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,MAGlBkX,GAAe,EAEhB,MAGD,IAAK,IACL,IAAK,IACClX,EAAS,GACP0I,EAAWoP,SAChBpP,EAAWoP,OAAS,CAAC,GAEhBpP,EAAWoP,OAAQ1D,KACxB1L,EAAWoP,OAAQ1D,GAAQ,CAAC,GAE7B1L,EAAWoP,OAAQ1D,GAAOpU,GAAW8B,EAAKoF,KAAK,CAC9C,mCACQ,MAARkN,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,MAGlBkX,GAAe,EAEhB,MAGD,IAAK,IACL,IAAK,IACJxO,EAAW+G,SAAWF,EAAoBzN,GAC1C4G,EAAWiP,QAAU7V,EAAK2E,aAAa+I,SAASmI,UAChDT,GAAe,EACf,MAGD,IAAK,IACL,IAAK,IACL,IAAK,IACJA,GAAe,EACf,MAED,IAAK,IAGJ,MAAMhN,EAA8B,CACnCsK,QAAS,2BAIX,IAAK,IACL,IAAK,IACJ,GAAKxU,GAAU,EAAI,CAClB0I,EAAW+G,SAAWF,EAAoBzN,GAC1CoV,GAAe,EACf,KACD,CAGD,IAAK,IACExO,EAAWqP,OAChBrP,EAAWqP,KAAO,CAAC,GAEdrP,EAAWqP,KAAM3D,KACtB1L,EAAWqP,KAAM3D,GAAQ,CAAC,GAQ1B1L,EAAWqP,KAAM3D,GAAOpU,GANT,IAAXA,EAM+B8B,EAAKoF,KAAK,CAC3C,iCACQ,MAARkN,EAAc,cAAgB,SAC9B,WACKtS,EAAKoF,KAAK,CACf,iCACQ,MAARkN,EAAc,cAAgB,SAC9B,gBAGiCtS,EAAKoF,KAAK,CAC5C,iCACQ,MAARkN,EAAc,cAAgB,SAC9BgB,EAAQpV,EAAS,EAAI,EAAIA,EAAS,KAGpC,MAGD,IAAK,IACJ0I,EAAWsP,WAAa,CACvBoB,GAAItX,EAAKoF,KACR,uDAEDmS,GAAIvX,EAAKoF,KACR,wDAGF,MAGD,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAGL,IAAK,IAGL,IAAK,IACL,IAAK,IACL,IAAK,IACJgQ,GAAe,EACf,MAGD,IAAK,IACJ,GAAgB,IAAXlX,GAA2B,IAAXA,EACpB,MAAMkK,EAA8B,CACnCsK,QAAS,qBAAuBnO,EAAU,MAG5CqC,EAAWwN,cAAgBA,EAC3B,MAED,IAAK,IAEJ,GAAgB,IAAXlW,EACJ,MAAMkK,EAA8B,CACnCsK,QAAS,qBAAuBnO,EAAU,MAI5C,GAAKsJ,EAAW,CACf,GAAgB,IAAX3P,EAAe,CACnB0I,EAAWyN,aAAexG,EAC1B,KACD,CAEA,IAAIwG,EACHmD,EAAexX,EAAKoF,KAAK,CACxB,2BAA4ByI,EAAU,iBAqBxC,GAlBgB,IAAX3P,IACEsZ,IACLA,EAAexX,EAAKoF,KAAK,CACxB,uDAGFiP,EAAemD,GAGXA,GAA2B,IAAXtZ,IACpBmW,EAAe5X,EACduD,EAAKoF,KACJ,oCAED,CAAEoS,KAICnD,EAAe,CACnBzN,EAAWyN,aAAeA,EAC1B,KACD,CACD,CAEiB,MAAZd,IACJrV,EAAS,GAIX,IAAK,IAIJ0I,EAAW2P,UAAYvW,EAAKoF,KAAM,iCAClCwB,EAAW0P,cAAgBtW,EAAKoF,KAAM,qCAItCuO,EAAM3T,EAAKoF,KAAM,kCACjBwB,EAAWoH,WAAa9P,EAAS,EAChC,CAAE6P,EAAyB4F,GAAO1F,EAA0B0F,EAAK,MACjE1F,EAA0B0F,EAAK,MAGjC,IAAK,IACL,IAAK,IACL,IAAK,IACJ0D,EAA2B,GAC3BA,EAA2B,GAIxBjC,GACJiC,EAA2BnZ,EAE7B,IAEO0I,CACR,CA8hEe6Q,CAAsBlT,EAASvE,EAAM6N,EAMnD,CALE,QACD7N,EAAK0H,IAAK,MAAOR,GACZkQ,GACJpX,EAAK0H,IAAK,MAAO0P,EAEnB,CAKA,IAAMD,KAFN5B,EAAmB3O,EAAW2O,wBACvB3O,EAAW2O,iBACLA,EACZA,EAAkB4B,GAAQ9W,KAAKqX,gBAAgB,CAC9C5P,IAAKyN,EAAkB4B,KAQzB,OAJA7P,EAlM4B,SAAUiO,EAAkB3O,GACxD,OAAO,SAA+B3I,GAIrC,OAHAqB,EAA2BrB,EAAO,SAClCgL,EAA2BhL,EAAO,SAE3BqX,EAAYrX,EAAOsX,EAAkB3O,EAC7C,CAED,CA0LY+Q,CAAwBpC,EAAkB3O,GAErD/C,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAEiO,EAAkB3O,IAEhDU,CACR,EAUAnH,EAAUyX,WACVzX,EAAUiH,UAAUwQ,WAAa,SAAU5Y,GAC1C,IAAIX,EAAM2B,EAAMiT,EAAcC,EAAiB3O,EAAS+C,EAAUuG,EACjEsF,EAEDjP,EAAkClF,EAAS,WAE3CgB,EAAOK,KAAKL,KAENwW,EADNxX,EAAUA,GAAW,CAAC,KAErBA,EAAQiN,SAAW,OAGpBwK,EAAuBzX,GACvB+E,EAAuB/D,GAEvB6N,EAAW7O,EAAQ6O,SACnB9E,EAA6B8E,EAAU,oBAEvCxP,EAAO,CAAEW,GAET,IACCgB,EAAKwH,GAAI,MAAON,GACX2G,GACJ7N,EAAKwH,GAAI,MAAOoP,GAAsB/I,IAGvC8I,GADApS,EAAUgI,EAAmBvN,EAASgB,GACJhB,EAAQiN,UAC1CkH,EApjC4B,SAAU5O,EAASvE,EAAM6N,GACtD,IAAIgK,EACHjR,EAAa,CACZrC,QAAS+D,EAAe/D,IAEzB4Q,EAAgBzM,EAAc,gBAAiB1I,GAC/CsT,EAAS,CAAE,cAAe,OAAQ,UAcnC,SAASkB,EAAcxG,EAAYuI,EAAWsB,EAAgB1C,GAC7D,IAAI2C,EA0BJ,OAxBMD,IACLA,EAAiB,OAEZtB,IACLA,EAAY,OAGbuB,EAAK9J,EACHpR,QAAS,IAAK,OAGdA,QAAS,YAAa,KAAOib,EAAiB,SAG9Cjb,QAAS,OAAQ,KAAOib,EAAiB,WAEtC1C,IACJ2C,EAAKA,EAAGlb,QAAS,KAAMuY,IAGxB2C,EAAKA,EAAG1R,MAAO,KAAMhF,KAAI,SAAUJ,GAClC,OAAOuV,EAAU3Z,QAAS,MAAOoE,EAClC,IAAGK,KAAM,KAEF,IAAI0S,OAAQ,IAAM+D,EAC1B,CAEA,SAASC,EAAoBhZ,EAAMd,GAGrB,6HACDoB,KAAMN,IAIZd,IAQQ,sCAHdc,EAAOA,EAAKnC,QAAS,eAAgB,IAAKA,QAAS,cAAe,OAIjEqB,EA5FgB,SAAU8G,EAAQC,GACpC,IAAIC,EACHC,EAAO,CAAC,EAET,IAAMD,KAAOF,EACPC,EAAO3F,KAAM4F,KACjBC,EAAMD,GAAQF,EAAQE,IAIxB,OAAOC,CACR,CAiFWJ,CAAc7G,EAAO,YAK7BA,EADI0B,EAAe1B,GACXsL,OAAO5B,KAAM1J,GAAQmD,KAAI,SAAU6D,GAC1C,MAAO,CAAEA,EAAK,IAAI8O,OAAQ,IAAMnL,EAAcN,EAAerK,EAAOgH,MACrE,IAAGqH,MAAK,SAAUhB,EAAGC,GACpB,OAAOA,EAAG,GAAIhO,OAAOW,OAASoN,EAAG,GAAI/N,OAAOW,MAC7C,IAIQoK,EAAerK,GAExB2I,EAAY7H,GAASd,EACtB,CAgRA,OA1VA4Z,GADAA,EAAiBrP,EAAgCxI,IACf,IAAM6X,EAAiB,IAAM,MAC/DjR,EAAWwM,SAAW,IAAIW,OAAQ8D,GAmFlC7X,EAAKwH,GAAI,MAAOuQ,GAEhBxT,EAAQgG,MAAOV,GAAgBvM,SAAQ,SAAUiW,GAChD,IAAII,EAAKrB,EAAKoD,EAAgBa,EAAWrY,EAAQyX,EA+CjD,GA7CArD,EAAMiB,EAAQ/M,OAAQ,GACtBtI,EAASqV,EAAQrV,OAEJ,MAARoU,IACCpU,EAAS,GACboU,EAAM,IACNpU,EAAS,IAEToU,EAAM,IACNpU,EAAS,IAQE,MAARoU,IACJqD,EAAiB/H,EAAqB1P,EAAQ,WAAY2P,EAAU7N,GACpE0V,EAAiB9H,EAAqB1P,EAAQ,WAAY2P,EAAU7N,GAC/D2V,IACJA,EAAiB/M,EAAcN,EAAeqN,KAE1CD,IACJA,EAAiB9M,EAAcN,EAAeoN,MAE1CC,GAAkBD,KACtB9O,EAAWuN,yBAA2B,IAAIJ,OACzC,KAA2B,CAAE4B,EAAgBD,GAxC7B3U,QAAO,SAAUsI,GACnC,OAAOA,CACR,IAAGjH,QAAO,SAAUgH,EAAMC,GACzB,OAAOD,EAAO,IAAMC,CACrB,IAAK,MAyCEsM,GAAmBD,IACxBpD,EAAM,IACDpU,EAAS,IACbA,EAAS,KASC,MAARoU,EAAc,CAClB,GAAgB,IAAXpU,GAA2B,IAAXA,EACpB,MAAMkK,EAA8B,CACnCsK,QAAS,qBAAuBnO,EAAU,MAG5C,IAAI6P,EAAgBxG,EAAqB1P,EAAQ,UAAW2P,EAAU7N,GACjEoU,GACJxN,EAAWwN,cAAgB,IAAIL,OAC9B,IAAMnL,EAAcN,EAAe8L,KAEpC9B,EAAM,MAINA,EAAM,IACNpU,EAAS,EAEX,CAEA,OAASoU,GAGR,IAAK,IACJtS,EAAKoF,KAAK,CACT,iCACAlH,GAAU,EAAI,UAAyB,IAAXA,EAAe,WAAa,cAEzD,MAGD,IAAK,IACL,IAAK,IACJ,MAAMkK,EAA8B,CACnCsK,QAAS,iBAAmBJ,EAAM,MAIpC,IAAK,IACL,IAAK,IACCpU,EAAS,GACb8B,EAAKoF,KAAK,CACT,qCACQ,MAARkN,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,KAGnB,MAGD,IAAK,IACL,IAAK,IAICA,EAAS,GACb8B,EAAKoF,KAAK,CACT,mCACQ,MAARkN,EAAc,SAAW,cACzBgB,EAAQpV,EAAS,KAGnB,MAGD,IAAK,IAGJ,MAAMkK,EAA8B,CACnCsK,QAAS,2BAIX,IAAK,IACL,IAAK,IAGJ,GAAKxU,GAAU,EACd,MAIF,IAAK,IACY,IAAXA,EAKJ8B,EAAKoF,KAAK,CACT,iCACA,CAAU,MAARkN,EAAc,cAAgB,UAChC,WACKtS,EAAKoF,KAAK,CACf,iCACA,CAAU,MAARkN,EAAc,cAAgB,UAChC,gBAGDtS,EAAKoF,KAAK,CACT,iCACA,CAAU,MAARkN,EAAc,cAAgB,UAChCgB,EAAQpV,EAAS,EAAI,EAAIA,EAAS,KAGpC,MAGD,IAAK,IACJ8B,EAAKoF,KACJ,oDAED,MAGD,IAAK,IAEJ,GAAgB,IAAXlH,EACJ,MAAMkK,EAA8B,CACnCsK,QAAS,qBAAuBnO,EAAU,MAI5C,GAAKsJ,EAAW,CACf,GAAgB,IAAX3P,EAAe,CAGnB0I,EAAWyN,aAAexG,EAC1BjH,EAAW0N,eAAiB,IAAIP,OAAQ,IAAMnL,EAAciF,IAC5D,KACD,CAEA,IAAIwG,EACHmD,EAAexX,EAAKoF,KAAK,CACxB,2BAA4ByI,EAAU,iBAGxB,IAAX3P,IACEsZ,IACLA,EAAexX,EAAKoF,KAAK,CACxB,uDAGFiP,EAAemD,GAGXA,GAA2B,IAAXtZ,IACpBmW,EAAe5X,EACduD,EAAKoF,KACJ,oCAED,CAAEoS,KAICnD,IACJA,EAAe/L,EAAe+L,GAC9BzN,EAAWyN,aAAeA,EAC1BzN,EAAW0N,eAAiB,IAAIP,OAC/B,IAAMnL,EAAcyL,IAGvB,CAEiB,MAAZd,IACJrV,EAAS,GAIX,IAAK,IACL,IAAK,IACJqY,EAAYvW,EAAKoF,KAAM,iCACvBpF,EAAKoF,KAAM,qCACXpF,EAAKoF,KAAM,kCACXwB,EAAY,iCACX,IAAImN,OAAQ,IAAMnL,EAAchC,EAAY,iCAC7C+M,EAAM/M,EAAY,4BAClBA,EAAY,6BACX1I,EAAS,EACR,CAAE+P,EAA0B0F,EAAK,KAAO5F,EAAyB4F,IACjE,CAAE1F,EAA0B0F,EAAK,QACjCvS,KAAI,SAAU4M,GACf,OAAOwG,EACNxG,EACAuI,EACAsB,EACA1C,EAEF,IAGD,IAAK,IACL,IAAK,IAOJvO,EAAW6N,EAAI,CACd,CAAE,cAAe,WACjB,CAAE,eACF,CAAE,iBACF,CAAE,kBAAmB,eACrB,CAAE,sBAAuB,kBACvBvW,EAAS,GAAIkD,KAAI,SAAU4M,GAC7B,OAAOwG,EAAcxG,EACtB,IAEH,IAEAhO,EAAK0H,IAAK,MAAOqQ,GAEVnR,CACR,CAgtBwBoR,CAAyBzT,EAASvE,EAAM6N,GAC9DqF,EApkEwB,SAAUlT,EAAM6N,GACzC,IAAIjH,EAAa,CAChB2L,kBAAmBvS,EAAK2E,aAAawI,SAASC,aAW/C,OARKS,IACJjH,EAAW4I,aAAepB,EAAsB,QAAUP,EAAU,CACnE4B,QAASzP,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,YACzDe,OAAQ5O,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,WACxD6B,OAAQ1P,EAAKE,IAAI,CAAE,0BAA2B2N,EAAU,cAInDjH,CACR,CAsjEoBqR,CAAqBjY,EAAM6N,EAM9C,CALE,QACD7N,EAAK0H,IAAK,MAAOR,GACZ2G,GACJ7N,EAAK0H,IAAK,MAAOkP,GAAsB/I,GAEzC,CAOA,OANAoF,EAAe5S,KAAK4S,aAAa,CAAEnL,IAAK,MAExCR,EAAW0L,EAAcC,EAAcC,EAAiBC,GAExDtP,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAE2L,EAAcC,EAAiBC,IAE7D7L,CACR,EAWAnH,EAAU+X,WACV/X,EAAUiH,UAAU8Q,WAAa,SAAUja,EAAOe,GAIjD,OAHAM,EAA2BrB,EAAO,SAClCgL,EAA2BhL,EAAO,SAE3BoC,KAAK2W,cAAehY,EAApBqB,CAA+BpC,EACvC,EAWAkC,EAAUgY,kBACVhY,EAAUiH,UAAU+Q,kBAAoB,SAAUla,EAAOe,GAIxD,OAHAM,EAA2BrB,EAAO,SAClCgL,EAA2BhL,EAAO,SAE3BoC,KAAK4W,qBAAsBjY,EAA3BqB,CAAsCpC,EAC9C,EAWAkC,EAAUiY,UACVjY,EAAUiH,UAAUgR,UAAY,SAAUna,EAAOe,GAIhD,OAHAM,EAA2BrB,EAAO,SAClC8K,EAA6B9K,EAAO,SAE7BoC,KAAKuX,WAAY5Y,EAAjBqB,CAA4BpC,EACpC,EAEOkC,CAKP,GAviGY,sDC3BZ,UAqBE,EAAO,CACN,SACA,SACA,UACE,EAUG,SAAU3D,EAAM2D,GAExB,IASIkY,EATA3Z,EAAcyB,EAAUK,aAC3B/C,EAAc0C,EAAUM,aACxBd,EAAgBQ,EAAUc,eAC1B4C,EAAc1D,EAAUsB,aACxBsC,EAAwB5D,EAAU6C,uBAClCxE,EAAW2B,EAAU2C,UACrBxD,EAA4Ba,EAAU8C,2BACtCzD,EAAwBW,EAAUmD,uBAClCY,EAAmC/D,EAAUkD,kCAG9CgV,EAAiB,WA41CjB,SAASC,EAASrT,EAAKrF,GACrB,GAAI,wBAAwBP,KAAK4F,GAC/B,OAAOrF,EAAMA,EAAM,IAAMqF,EAAMA,EAE/B,IAAIsT,EAAOxb,KAAKC,UAAUiI,GAC1B,OAAOrF,EAAMA,EAAM,IAAM2Y,EAAO,IAAMA,CAE1C,CAUA,SAASF,EAAcjY,EAAQoY,EAAYC,GAKzC,GAJApY,KAAKqY,GAAK,CAACtY,GACXC,KAAKsY,QAAQC,YAAc,CAAC,EAC5BvY,KAAKsY,QAAQC,YAAYvY,KAAKqY,GAAG,IAAMF,EACvCnY,KAAKsY,QAAQE,IAAM,CAAC,EAChBJ,EAAY,IAAK,IAAIK,KAAKL,EAC5BpY,KAAKsY,QAAQE,IAAIC,GAAKL,EAAWK,EAErC,CA8ZA,OAlxDAT,EAAcU,OAAU,WActB,SAASC,EAAYtc,EAAS+C,EAAUwZ,EAAOnY,EAAQoY,EAAMC,GAC3D9Y,KAAK3D,QAAWA,EAChB2D,KAAKZ,SAAWA,EAChBY,KAAK4Y,MAAWA,EAChB5Y,KAAKS,OAAWA,EAChBT,KAAK6Y,KAAWA,EAChB7Y,KAAK8Y,OAAWA,EAEhB9Y,KAAKxD,KAAW,aAClB,CAozCA,OAn0CA,SAAsBuc,EAAOC,GAC3B,SAASC,IAASjZ,KAAKkZ,YAAcH,CAAO,CAC5CE,EAAKlS,UAAYiS,EAAOjS,UACxBgS,EAAMhS,UAAY,IAAIkS,CACxB,CAaAE,CAAaR,EAAanb,OAkzCnB,CACLmb,YAAaA,EACbS,MAlzCF,SAAeC,GACb,IAgHIC,EAhHA3a,EAAU7B,UAAUe,OAAS,EAAIf,UAAU,GAAK,CAAC,EAEjDyc,EAAa,CAAC,EAEdC,EAAyB,CAAEC,MAAOC,IAClCC,EAAyBD,GAGzBE,EAAS,SAASC,GACZ,MAAO,CAAElc,KAAM,uBAAwBmc,WAAYD,EACrD,EACJE,EAASR,EACTS,EAAS,IACTC,EAAS,CAAEtc,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACrDC,EAAS,KACTC,EAAS,IACTC,EAAS,CAAE1c,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACrDI,EAAS,IACTC,EAAS,CAAE5c,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACrDM,EAAU,SAASC,EAAQC,GACrB,IAAIC,EAAM,CACRhd,KAAM,uBACNid,cAAeH,GAOjB,OALIC,GAAQA,EAAK7c,OACf8c,EAAIE,cAAgBH,EAAK,GAEzBC,EAAIG,QAAS,EAERH,CACT,EACJI,EAAU,SACVC,EAAU,CAAErd,KAAM,UAAWC,MAAO,SAAUsc,YAAa,YAC3De,EAAU,SAASC,EAAGC,GAChB,MAAO,CAAExd,KAAM,gBAAiBiH,IAAKsW,EAAGE,IAAKD,EAC/C,EACJE,EAAU,gBACVC,EAAU,CAAE3d,KAAM,UAAWC,MAAO,gBAAiBsc,YAAa,mBAClEqB,EAAU,SACVC,EAAU,CAAE7d,KAAM,UAAWC,MAAO,SAAUsc,YAAa,YAC3DuB,EAAU,SAASP,EAAGQ,GAChB,MAAO,CAAE/d,KAAM,gBAAiBiH,IAAKsW,EAAGE,IAAKM,EAC/C,EACJC,EAAU,SAASC,EAAIC,GACjB,MAAO,CAAEle,KAAM,sBAAuBme,YAAaD,EAAIpb,OAAQmb,GAAM,EACvE,EACJG,EAAU,SACVC,EAAU,CAAEre,KAAM,UAAWC,MAAO,SAAUsc,YAAa,YAC3D+B,EAAU,IACVC,EAAU,CAAEve,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACtDiC,EAAU,SAASC,GAAK,OAAOA,CAAG,EAClCC,EAAU,SAASC,EAAGC,GAChB,MAAO,CAAE3X,IAAK0X,EAAGlB,IAAKmB,EACxB,EACJC,EAAU,SAASxa,GAAK,OAAOA,CAAG,EAClCya,EAAU,IACVC,EAAU,CAAE/e,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACtDyC,EAAU,SAASd,GAAM,MAAO,CAAEle,KAAM,sBAAuBme,YAAaD,EAAM,EAClFe,EAAU,SAASlB,GAAK,OAAOA,CAAG,EAClCmB,EAAU,IACVC,EAAU,CAAEnf,KAAM,UAAWC,MAAO,IAAKsc,YAAa,OACtD6C,EAAU,WAAa,MAAO,CAACpf,KAAM,aAAe,EACpDqf,EAAU,SAAS7B,GAAK,MAAO,CAAExd,KAAM,SAAUyd,IAAKD,EAAEna,KAAK,IAAO,EACpEic,EAAU,CAAEtf,KAAM,QAASuc,YAAa,cACxCgD,EAAU,iBACVC,EAAU,CAAExf,KAAM,QAASC,MAAO,gBAAiBsc,YAAa,iBAChEkD,EAAU,oBACVC,EAAU,CAAE1f,KAAM,QAASC,MAAO,sBAAuBsc,YAAa,uBACtEoD,EAAU,SAASnC,GAAK,OAAOA,CAAG,EAClCoC,EAAU,SAASC,GAAS,OAAOA,EAAMxc,KAAK,GAAK,EACnDyc,EAAU,2BACVC,EAAU,CAAE/f,KAAM,QAASC,MAAO,iCAAkCsc,YAAa,kCACjFyD,EAAU,SAASvJ,GAAK,OAAOA,CAAG,EAClCwJ,EAAU,OACVC,EAAU,CAAElgB,KAAM,UAAWC,MAAO,OAAQsc,YAAa,cACzD4D,EAAU,WAAa,MAAO,IAAM,EACpCC,GAAU,MACVC,GAAU,CAAErgB,KAAM,UAAWC,MAAO,MAAOsc,YAAa,WACxD+D,GAAU,WAAa,MAAO,GAAK,EACnCC,GAAU,MACVC,GAAU,CAAExgB,KAAM,UAAWC,MAAO,MAAOsc,YAAa,WACxDkE,GAAU,WAAa,MAAO,GAAU,EACxCC,GAAU,MACVC,GAAU,CAAE3gB,KAAM,UAAWC,MAAO,MAAOsc,YAAa,WACxDqE,GAAU,WAAa,MAAO,GAAU,EACxCC,GAAU,MACVC,GAAU,CAAE9gB,KAAM,UAAWC,MAAO,MAAOsc,YAAa,WACxDwE,GAAU,SAASC,EAAIC,EAAIC,EAAIC,GACzB,OAAOtc,OAAOuc,aAAaC,SAAS,KAAOL,EAAKC,EAAKC,EAAKC,GAC5D,EACJG,GAAU,SACVC,GAAU,CAAEvhB,KAAM,QAASC,MAAO,QAASsc,YAAa,SACxDiF,GAAU,SAASC,GAGf,OAAOJ,SAAUI,EAAGpe,KAAK,IAAM,GACjC,EACFqe,GAAU,eACVC,GAAU,CAAE3hB,KAAM,QAASC,MAAO,cAAesc,YAAa,eAC9DqF,GAAU,CAAE5hB,KAAM,QAASuc,YAAa,cACxCsF,GAAU,SAASC,GAAK,OAAOA,EAAEze,KAAK,GAAK,EAC3C0e,GAAU,aACVC,GAAU,CAAEhiB,KAAM,QAASC,MAAO,eAAgBsc,YAAa,gBAE/D0F,GAAuB,EAEvBC,GAAuB,EACvBC,GAAuB,CAAEjH,KAAM,EAAGC,OAAQ,EAAGiH,QAAQ,GACrDC,GAAuB,EACvBC,GAAuB,GACvBC,GAAuB,EAI3B,GAAI,cAAevhB,EAAS,CAC1B,KAAMA,EAAQwhB,aAAa3G,GACzB,MAAM,IAAIhc,MAAM,mCAAqCmB,EAAQwhB,UAAY,MAG3ExG,EAAwBH,EAAuB7a,EAAQwhB,UACzD,CA8BA,SAASC,GAAsBC,GA8B7B,OATIR,KAAkBQ,IAChBR,GAAgBQ,IAClBR,GAAgB,EAChBC,GAAuB,CAAEjH,KAAM,EAAGC,OAAQ,EAAGiH,QAAQ,IAvBzD,SAAiBO,EAASC,EAAUC,GAClC,IAAI9E,EAAG+E,EAEP,IAAK/E,EAAI6E,EAAU7E,EAAI8E,EAAQ9E,IAElB,QADX+E,EAAKpH,EAAMlT,OAAOuV,KAEX4E,EAAQP,QAAUO,EAAQzH,OAC/ByH,EAAQxH,OAAS,EACjBwH,EAAQP,QAAS,GACD,OAAPU,GAAsB,WAAPA,GAA0B,WAAPA,GAC3CH,EAAQzH,OACRyH,EAAQxH,OAAS,EACjBwH,EAAQP,QAAS,IAEjBO,EAAQxH,SACRwH,EAAQP,QAAS,EAGvB,CAOEW,CAAQZ,GAAsBD,GAAeQ,GAC7CR,GAAgBQ,GAGXP,EACT,CAEA,SAASa,GAASvhB,GACZwgB,GAAcI,KAEdJ,GAAcI,KAChBA,GAAiBJ,GACjBK,GAAsB,IAGxBA,GAAoBniB,KAAKsB,GAC3B,CAEA,SAASwhB,GAAmBvkB,EAAS+C,EAAUihB,GA2D7C,IAAIQ,EAAaT,GAAsBC,GACnCzH,EAAayH,EAAMhH,EAAMxb,OAASwb,EAAMlT,OAAOka,GAAO,KAM1D,OAJiB,OAAbjhB,GA7DJ,SAAyBA,GACvB,IAAI4C,EAAI,EAYR,IAVA5C,EAAS6M,MAAK,SAAShB,EAAGC,GACxB,OAAID,EAAEiP,YAAchP,EAAEgP,aACZ,EACCjP,EAAEiP,YAAchP,EAAEgP,YACpB,EAEA,CAEX,IAEOlY,EAAI5C,EAASvB,QACduB,EAAS4C,EAAI,KAAO5C,EAAS4C,GAC/B5C,EAAS0O,OAAO9L,EAAG,GAEnBA,GAGN,CA0CE8e,CAAgB1hB,GAGX,IAAIuZ,EACG,OAAZtc,EAAmBA,EA5CrB,SAAsB+C,EAAUwZ,GAkB9B,IAC6B5W,EADzB+e,EAAgB,IAAIxiB,MAAMa,EAASvB,QAGvC,IAAKmE,EAAI,EAAGA,EAAI5C,EAASvB,OAAQmE,IAC/B+e,EAAc/e,GAAK5C,EAAS4C,GAAGkY,YAWjC,MAAO,aARQ9a,EAASvB,OAAS,EAC7BkjB,EAAchkB,MAAM,GAAI,GAAGiE,KAAK,MAC5B,OACA+f,EAAc3hB,EAASvB,OAAS,GACpCkjB,EAAc,IAIkB,SAFxBnI,EAAQ,IA9BpB,SAAsBuC,GACpB,SAAS6F,EAAIP,GAAM,OAAOA,EAAGxe,WAAW,GAAGN,SAAS,IAAIsf,aAAe,CAEvE,OAAO9F,EACJ5e,QAAQ,MAAS,QACjBA,QAAQ,KAAS,OACjBA,QAAQ,QAAS,OACjBA,QAAQ,MAAS,OACjBA,QAAQ,MAAS,OACjBA,QAAQ,MAAS,OACjBA,QAAQ,MAAS,OACjBA,QAAQ,4BAA4B,SAASkkB,GAAM,MAAO,OAASO,EAAIP,EAAK,IAC5ElkB,QAAQ,yBAA4B,SAASkkB,GAAM,MAAO,MAASO,EAAIP,EAAK,IAC5ElkB,QAAQ,oBAA4B,SAASkkB,GAAM,MAAO,OAASO,EAAIP,EAAK,IAC5ElkB,QAAQ,oBAA4B,SAASkkB,GAAM,MAAO,MAASO,EAAIP,EAAK,GACjF,CAe2BS,CAAatI,GAAS,IAAO,gBAEE,SAC5D,CAU+BuI,CAAa/hB,EAAUwZ,GACpDxZ,EACAwZ,EACAyH,EACAQ,EAAWhI,KACXgI,EAAW/H,OAEf,CAEA,SAASY,KAKP,OAFK0H,IAGP,CAEA,SAASA,KACP,IAAQC,EAAIC,EAWZ,IARAD,EAAK,IACLC,EAAKC,QACMhI,IACT+H,EAAKE,QACMjI,IACT+H,EAAKG,MAGFH,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,IACRA,EAAKC,QACMhI,IACT+H,EAAKE,QACMjI,IACT+H,EAAKG,MAUX,OANIJ,IAAO9H,IAET8H,EAAKzH,EAAOyH,IAETA,CAGP,CAEA,SAASE,KACP,IAAIG,EAAIL,EAAQM,EAAIC,EAAIC,EAAIC,EA8E5B,OA5EAJ,EAAK9B,GACiC,MAAlCvG,EAAMpX,WAAW2d,KACnByB,EAAKrH,EACL4F,OAEAyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAAS1G,IAEpCoH,IAAO9H,GACJwI,OACMxI,IACToI,EAAKK,QACMzI,GACTqI,EAAKhC,GACiC,KAAlCvG,EAAMpX,WAAW2d,KACnBiC,EAAKzH,EACLwF,OAEAiC,EAAKtI,EACmB,IAApB2G,IAAyBS,GAAStG,IAEpCwH,IAAOtI,IACTuI,EAAKG,QACM1I,EAETqI,EADAC,EAAK,CAACA,EAAIC,IAOZlC,GAAcgC,EACdA,EAAK7H,GAEH6H,IAAOrI,IACTqI,EAAKzH,GAEHyH,IAAOrI,IACTsI,EAAKE,QACMxI,GAC6B,MAAlCF,EAAMpX,WAAW2d,KACnBkC,EAAKxH,EACLsF,OAEAkC,EAAKvI,EACmB,IAApB2G,IAAyBS,GAASpG,IAEpCuH,IAAOvI,EAGTmI,EADAL,EAAK7G,EAAQmH,EAAIC,IAGjBhC,GAAc8B,EACdA,EAAK3H,KAOT6F,GAAc8B,EACdA,EAAK3H,KAWX6F,GAAc8B,EACdA,EAAK3H,GAGA2H,CACT,CAEA,SAASO,KACP,IAAIP,EAAQJ,EAAIK,EAAIC,EAAQE,EA4D5B,GA1DAJ,EAAK9B,GACAmC,OACMxI,GACLF,EAAM3J,OAAOkQ,GAAa,KAAO7E,GACnCuG,EAAKvG,EACL6E,IAAe,IAEf0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAAS3F,IAEpCsG,IAAO/H,IACToI,EAAKI,QACMxI,GAC6B,KAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAKxH,EACLwF,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAAStG,IAEpCuH,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKI,QACM3I,GACJwI,OACMxI,EAGTmI,EADKzG,EAAQqG,EAAIQ,IAevBlC,GAAc8B,EACdA,EAAK3H,KAOT6F,GAAc8B,EACdA,EAAK3H,KAGP6F,GAAc8B,EACdA,EAAK3H,GAEH2H,IAAOnI,IACTmI,EAAK9B,GACAmC,OACMxI,GACLF,EAAM3J,OAAOkQ,GAAa,MAAQvE,GACpCiG,EAAKjG,EACLuE,IAAe,KAEf0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAASrF,IAEpCgG,IAAO/H,IACToI,EAAKI,QACMxI,GAC6B,KAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAKxH,EACLwF,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAAStG,IAEpCuH,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKI,QACM3I,GACJwI,OACMxI,EAGTmI,EADKzG,EAAQqG,EAAIQ,IAevBlC,GAAc8B,EACdA,EAAK3H,KAOT6F,GAAc8B,EACdA,EAAK3H,KAGP6F,GAAc8B,EACdA,EAAK3H,GAEH2H,IAAOnI,IACTmI,EAAK9B,GACAmC,OACMxI,GACLF,EAAM3J,OAAOkQ,GAAa,KAAOrE,GACnC+F,EAAK/F,EACLqE,IAAe,IAEf0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAASnF,IAEpC8F,IAAO/H,IACToI,EAAKI,QACMxI,GAC6B,KAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAKxH,EACLwF,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAAStG,IAEpCuH,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKK,QACM5I,GACJwI,OACMxI,EAGTmI,EADKzG,EAAQqG,EAAIQ,IAevBlC,GAAc8B,EACdA,EAAK3H,KAOT6F,GAAc8B,EACdA,EAAK3H,KAGP6F,GAAc8B,EACdA,EAAK3H,GAEH2H,IAAOnI,IAGT,GAFAmI,EAAK9B,GACAmC,OACMxI,EAET,IADA+H,EAAKU,QACMzI,EAAY,CAGrB,IAFAoI,EAAK,GACLC,EAAKQ,KACER,IAAOrI,GACZoI,EAAG7jB,KAAK8jB,GACRA,EAAKQ,KAEHT,IAAOpI,EAGTmI,EADKjG,EAAQ6F,EAAIK,IAGjB/B,GAAc8B,EACdA,EAAK3H,EAET,MACE6F,GAAc8B,EACdA,EAAK3H,OAGP6F,GAAc8B,EACdA,EAAK3H,EAMb,OAAO2H,CACT,CAEA,SAASQ,KACP,IAAIR,EAAIL,EAAIC,EAAIK,EAOhB,GALAD,EAAK9B,IACLyB,EAAKgB,QACM9I,IACT8H,EAAKlH,GAEHkH,IAAO9H,EAAY,CAGrB,GAFA+H,EAAK,IACLK,EAAKW,QACM/I,EACT,KAAOoI,IAAOpI,GACZ+H,EAAGxjB,KAAK6jB,GACRA,EAAKW,UAGPhB,EAAKvH,EAEHuH,IAAO/H,EAGTmI,EADAL,EAAK1F,EAAQ0F,EAAIC,IAGjB1B,GAAc8B,EACdA,EAAK3H,EAET,MACE6F,GAAc8B,EACdA,EAAK3H,EAGP,OAAO2H,CACT,CAEA,SAASW,KACP,IAAIX,EAAQJ,EAAQM,EAAQE,EA6D5B,OA3DAJ,EAAK9B,GACAmC,OACMxI,GACLF,EAAM3J,OAAOkQ,GAAa,KAAO7D,GACnCuF,EAAKvF,EACL6D,IAAe,IAEf0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAAS3E,IAEpCsF,IAAO/H,GACJwI,OACMxI,GAC6B,KAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAK3F,EACL2D,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAASzE,IAEpC0F,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKS,QACMhJ,GACJwI,OACMxI,EAGTmI,EADKvF,EAAQ2F,IAenBlC,GAAc8B,EACdA,EAAK3H,KAOT6F,GAAc8B,EACdA,EAAK3H,KAGP6F,GAAc8B,EACdA,EAAK3H,GAGA2H,CACT,CAEA,SAASY,KACP,IAAIZ,EAAQJ,EAAQM,EAAQE,EAAQU,EAmEpC,OAjEAd,EAAK9B,GACAmC,OACMxI,IACT+H,EAAKmB,QACMlJ,GACJwI,OACMxI,GAC6B,MAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAK5H,EACL4F,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAAS1G,IAEpC2H,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKV,QACM7H,GACJwI,OACMxI,GAC6B,MAAlCF,EAAMpX,WAAW2d,KACnB4C,EAAKlI,EACLsF,OAEA4C,EAAKjJ,EACmB,IAApB2G,IAAyBS,GAASpG,IAEpCiI,IAAOjJ,EAGTmI,EADKrF,EAAQiF,EAAIQ,IAGjBlC,GAAc8B,EACdA,EAAK3H,KAeb6F,GAAc8B,EACdA,EAAK3H,KAWX6F,GAAc8B,EACdA,EAAK3H,GAGA2H,CACT,CAEA,SAASe,KACP,IAAIf,EAAIL,EAAIC,EAkCZ,OAhCAI,EAAK9B,IACLyB,EAAKW,QACMzI,IAET8H,EAAK7E,EAAQ6E,KAEfK,EAAKL,KACM9H,IACTmI,EAAK9B,GACiC,KAAlCvG,EAAMpX,WAAW2d,KACnByB,EAAK5E,EACLmD,OAEAyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASjE,IAEpC2E,IAAO9H,IACT+H,EAAKiB,QACMhJ,EAGTmI,EADAL,EAAKlF,EAAQmF,IAOf1B,GAAc8B,EACdA,EAAK3H,IAIF2H,CACT,CAEA,SAASS,KACP,IAAQd,EAAIC,EAKZ,GAFAD,EAAK,IACLC,EAAKoB,QACMnJ,EACT,KAAO+H,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,GACRA,EAAKoB,UAGPrB,EAAKtH,EAQP,OANIsH,IAAO9H,IAET8H,EAAK1E,EAAQ0E,IAEVA,CAGP,CAEA,SAASqB,KACP,IAAIhB,EAAQJ,EAAQM,EAAQE,EAAQU,EAmEpC,OAjEAd,EAAK9B,GACAmC,OACMxI,IACT+H,EAAKU,QACMzI,GACJwI,OACMxI,GAC6B,MAAlCF,EAAMpX,WAAW2d,KACnBgC,EAAK5H,EACL4F,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAAS1G,IAEpC2H,IAAOrI,GACJwI,OACMxI,IACTuI,EAAKV,QACM7H,GACJwI,OACMxI,GAC6B,MAAlCF,EAAMpX,WAAW2d,KACnB4C,EAAKlI,EACLsF,OAEA4C,EAAKjJ,EACmB,IAApB2G,IAAyBS,GAASpG,IAEpCiI,IAAOjJ,EAGTmI,EADKrF,EAAQiF,EAAIQ,IAGjBlC,GAAc8B,EACdA,EAAK3H,KAeb6F,GAAc8B,EACdA,EAAK3H,KAWX6F,GAAc8B,EACdA,EAAK3H,GAGA2H,CACT,CAEA,SAASU,KACP,IAAIV,EAAQJ,EAAQM,EA2CpB,OAzCAF,EAAK9B,GACAmC,OACMxI,GAC6B,KAAlCF,EAAMpX,WAAW2d,KACnB0B,EAAKlH,EACLwF,OAEA0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAAStG,IAEpCiH,IAAO/H,GACJwI,OACMxI,IACTqI,EAAKI,QACMzI,GACJwI,OACMxI,EAGTmI,EADK9E,EAAQgF,IAenBhC,GAAc8B,EACdA,EAAK3H,KAGP6F,GAAc8B,EACdA,EAAK3H,GAGA2H,CACT,CAEA,SAASD,KACP,IAAQJ,EAgBR,OAbsC,KAAlChI,EAAMpX,WAAW2d,KACnByB,EAAKxE,EACL+C,OAEAyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAAS7D,IAEpCuE,IAAO9H,IAET8H,EAAKtE,KAEFsE,CAGP,CAEA,SAASG,KACP,IAAQH,EAAIC,EAQZ,GALAD,EAAK,IACLC,EAAKqB,QACMpJ,IACT+H,EAAKsB,MAEHtB,IAAO/H,EACT,KAAO+H,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,IACRA,EAAKqB,QACMpJ,IACT+H,EAAKsB,WAITvB,EAAKtH,EAQP,OANIsH,IAAO9H,IAET8H,EAAKrE,EAAQqE,IAEVA,CAGP,CAEA,SAASW,KACP,IAAIN,EAAQJ,EAAIK,EAAIC,EAAIC,EAAIC,EAK5B,GAHA5B,KACAwB,EAAK9B,GACAmC,OACMxI,EAAY,CAUrB,GATA+H,EAAK1B,GACL+B,EAAK/B,GACD1C,EAAQle,KAAKqa,EAAMlT,OAAOyZ,MAC5BgC,EAAKvI,EAAMlT,OAAOyZ,IAClBA,OAEAgC,EAAKrI,EACmB,IAApB2G,IAAyBS,GAASxD,IAEpCyE,IAAOrI,EAAY,CASrB,IARAsI,EAAK,GACDzE,EAAQpe,KAAKqa,EAAMlT,OAAOyZ,MAC5BkC,EAAKzI,EAAMlT,OAAOyZ,IAClBA,OAEAkC,EAAKvI,EACmB,IAApB2G,IAAyBS,GAAStD,IAEjCyE,IAAOvI,GACZsI,EAAG/jB,KAAKgkB,GACJ1E,EAAQpe,KAAKqa,EAAMlT,OAAOyZ,MAC5BkC,EAAKzI,EAAMlT,OAAOyZ,IAClBA,OAEAkC,EAAKvI,EACmB,IAApB2G,IAAyBS,GAAStD,IAGtCwE,IAAOtI,EAEToI,EADAC,EAAK,CAACA,EAAIC,IAGVjC,GAAc+B,EACdA,EAAK5H,EAET,MACE6F,GAAc+B,EACdA,EAAK5H,EAEH4H,IAAOpI,IACToI,EAAKtI,EAAMwJ,UAAUvB,EAAI1B,MAE3B0B,EAAKK,KACMpI,IACToI,EAAKI,QACMxI,EAGTmI,EADKpE,EAAQgE,IAOf1B,GAAc8B,EACdA,EAAK3H,EAET,MACE6F,GAAc8B,EACdA,EAAK3H,EAQP,OANAmG,KACIwB,IAAOnI,GAEe,IAApB2G,IAAyBS,GAAS1D,GAGjCyE,CACT,CAEA,SAASiB,KACP,IAAQtB,EAAIC,EAKZ,GAFAD,EAAK,IACLC,EAAKwB,QACMvJ,EACT,KAAO+H,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,GACRA,EAAKwB,UAGPzB,EAAKtH,EAQP,OANIsH,IAAO9H,IAET8H,EAAK9D,EAAQ8D,IAEVA,CAGP,CAEA,SAASyB,KACP,IAAIpB,EAAIL,EAAIC,EAAIK,EAAIC,EAAIC,EAsHxB,OApHAH,EAAK9B,GACDnC,EAAQze,KAAKqa,EAAMlT,OAAOyZ,MAC5ByB,EAAKhI,EAAMlT,OAAOyZ,IAClBA,OAEAyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASjD,IAEpC2D,IAAO9H,IAET8H,EAAK1D,EAAQ0D,KAEfK,EAAKL,KACM9H,IACTmI,EAAK9B,GACDvG,EAAM3J,OAAOkQ,GAAa,KAAOhC,GACnCyD,EAAKzD,EACLgC,IAAe,IAEfyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAAS9C,IAEpCwD,IAAO9H,IAET8H,EAAKvD,MAEP4D,EAAKL,KACM9H,IACTmI,EAAK9B,GACDvG,EAAM3J,OAAOkQ,GAAa,KAAO7B,IACnCsD,EAAKtD,GACL6B,IAAe,IAEfyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAAS3C,KAEpCqD,IAAO9H,IAET8H,EAAKpD,OAEPyD,EAAKL,KACM9H,IACTmI,EAAK9B,GACDvG,EAAM3J,OAAOkQ,GAAa,KAAO1B,IACnCmD,EAAKnD,GACL0B,IAAe,IAEfyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASxC,KAEpCkD,IAAO9H,IAET8H,EAAKjD,OAEPsD,EAAKL,KACM9H,IACTmI,EAAK9B,GACDvG,EAAM3J,OAAOkQ,GAAa,KAAOvB,IACnCgD,EAAKhD,GACLuB,IAAe,IAEfyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASrC,KAEpC+C,IAAO9H,IAET8H,EAAK9C,OAEPmD,EAAKL,KACM9H,IACTmI,EAAK9B,GACDvG,EAAM3J,OAAOkQ,GAAa,KAAOpB,IACnC6C,EAAK7C,GACLoB,IAAe,IAEfyB,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASlC,KAEpC4C,IAAO9H,IACT+H,EAAKyB,QACMxJ,IACToI,EAAKoB,QACMxJ,IACTqI,EAAKmB,QACMxJ,IACTsI,EAAKkB,QACMxJ,EAGTmI,EADAL,EAAK3C,GAAQ4C,EAAIK,EAAIC,EAAIC,IAmBjCjC,GAAc8B,EACdA,EAAK3H,QAQV2H,CACT,CAEA,SAASa,KACP,IAAQlB,EAAIC,EAWZ,GARAD,EAAK,GACDpC,GAAQjgB,KAAKqa,EAAMlT,OAAOyZ,MAC5B0B,EAAKjI,EAAMlT,OAAOyZ,IAClBA,OAEA0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAASzB,KAEpCoC,IAAO/H,EACT,KAAO+H,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,GACJrC,GAAQjgB,KAAKqa,EAAMlT,OAAOyZ,MAC5B0B,EAAKjI,EAAMlT,OAAOyZ,IAClBA,OAEA0B,EAAK/H,EACmB,IAApB2G,IAAyBS,GAASzB,UAI1CmC,EAAKtH,EAQP,OANIsH,IAAO9H,IAET8H,EAAKlC,GAAQkC,IAEVA,CAGP,CAEA,SAAS0B,KACP,IAAIrB,EAUJ,OARIrC,GAAQrgB,KAAKqa,EAAMlT,OAAOyZ,MAC5B8B,EAAKrI,EAAMlT,OAAOyZ,IAClBA,OAEA8B,EAAKnI,EACmB,IAApB2G,IAAyBS,GAASrB,KAGjCoC,CACT,CAEA,SAASK,KACP,IAAIL,EAAIL,EAAIC,EAMZ,IAJApB,KACKN,GACLyB,EAAK,GACLC,EAAKsB,KACEtB,IAAO/H,GACZ8H,EAAGvjB,KAAKwjB,GACRA,EAAKsB,KAaP,OAXIvB,IAAO9H,IAET8H,EAAK7B,GAAQ6B,IAGfnB,MADAwB,EAAKL,KAEM9H,IACT8H,EAAK9H,EACmB,IAApB2G,IAAyBS,GAASpB,KAGjCmC,CACT,CAEA,SAASkB,KACP,IAAIlB,EAUJ,OARIhC,GAAQ1gB,KAAKqa,EAAMlT,OAAOyZ,MAC5B8B,EAAKrI,EAAMlT,OAAOyZ,IAClBA,OAEA8B,EAAKnI,EACmB,IAApB2G,IAAyBS,GAAShB,KAGjC+B,CACT,CAIA,IAFApI,EAAaK,OAEMJ,GAAcqG,KAAgBvG,EAAMxb,OACrD,OAAOyb,EAMP,MAJIA,IAAeC,GAAcqG,GAAcvG,EAAMxb,QACnD8iB,GAAS,CAAEhjB,KAAM,MAAOuc,YAAa,iBAGjC0G,GAAmB,KAAMX,GAAqBD,GAExD,EAMF,CA/0CuB,GA+0ClB5G,MAyDLpB,EAAcgL,QAAU,CAAC,EAqCzBhL,EAAcI,WAAa,CAAC,EA4B5BJ,EAAcjR,UAAUuR,QAAU,CAMhC2K,OAAQ,SAASrlB,EAAO6C,GACtB,GAAI6T,MAAM1W,GAAQ,MAAM,IAAIJ,MAAM,IAAMI,EAAQ,qBAChD,OAAOA,GAAS6C,GAAU,EAC5B,EAUAiH,OAAQ,SAAS9J,EAAO6C,EAAQyiB,EAAQ5mB,EAAM6mB,GAC5C,GAAI,CAAC,EAAEC,eAAepmB,KAAKV,EAAMsB,GAAQ,OAAOtB,EAAKsB,KACjD6C,IAAQ7C,GAAS6C,GACrB,IAAImE,EAAMse,EAAOtlB,EAAOulB,GACxB,OAAIve,KAAOtI,EAAaA,EAAKsI,KACtBtI,EAAK+mB,OACd,EAOAC,OAAQ,SAAS1lB,EAAOtB,GACtB,MAAI,CAAC,EAAE8mB,eAAepmB,KAAKV,EAAMsB,GAAetB,EAAKsB,KAC9CtB,EAAK+mB,OACd,EAKA9K,YAAa,CAAC,EASdC,IAAK,CAAC,EAIN7W,SAAU,WACR,IAAI4hB,EAAa,SAASC,EAAGC,GAC3B,GAAgB,iBAALD,EAAe,CACxB,IAAIE,EAAUF,EAAE7hB,WAAWpF,QAAQ,kBAAmB,MAEtD,OADIonB,EAAS,gBAAgBjiB,KAAKgiB,IAClBA,EAAQnnB,QAAQ,IAAImX,OAAO,IAAMiQ,EAAO,GAAI,MAAO,IAAMD,CAC3E,CACA,IAAIvI,EAAI,GACR,IAAK,IAAInZ,KAAKwhB,EAAY,YAALxhB,IACN,GAATyhB,EAAYtI,EAAErd,KAAK,OAASkE,EAAI,MAAQuhB,EAAWC,EAAExhB,GAAIyhB,EAAQ,GAAK,OACrEtI,EAAErd,KAAKma,EAASjW,GAAK,KAAOuhB,EAAWC,EAAExhB,GAAIyhB,EAAQ,KAE5D,GAAa,GAATA,EAAY,OAAOtI,EAAEna,KAAK,IAC9B,GAAgB,GAAZma,EAAEtd,OAAa,MAAO,KACP,IAAnB,IAAI8lB,EAAS,OAAeF,GAAOE,GAAU,KAC7C,MAAO,MAAQxI,EAAEna,KAAK,OAAOzE,QAAQ,MAAOonB,GAAU,KACxD,EACA,OAAOJ,EAAWvjB,KAAM,EAC1B,GAWFgY,EAAcjR,UAAU6c,YAAc,SAASC,EAAKvnB,GAClDA,EAAOA,GAAQ,CAAEgL,KAAM,CAAC,EAAG7G,OAAQ,CAAC,GACpC,IAAYuB,EAAG8hB,EAAXC,EAAI,GAAY/lB,EAAO,GAE3B,OAAS6lB,EAAIlmB,MACX,IAAK,uBACH,IAAMqE,EAAI,EAAGA,EAAI6hB,EAAI/J,WAAWjc,SAAUmE,EACxC+hB,EAAEjmB,KAAKkC,KAAK4jB,YAAaC,EAAI/J,WAAW9X,GAAI1F,IAG9C,OADAwnB,EAAMC,EAAE/iB,KAAK,QAAU,KAChB1E,EAAK0nB,SAAWF,EAAM,wBAA0BA,EAAM,MAE/D,IAAK,uBAEH,OADAxnB,EAAK0nB,SAAW1nB,EAAK0nB,UAAY,EAC5BH,EAAI/I,OACA7C,EAAS4L,EAAIjJ,cAAe,MAGnCte,EAAKgL,KAAKhL,EAAK0nB,UAAYH,EAAIjJ,cACxB5a,KAAK4jB,YAAaC,EAAIhJ,cAAeve,IAIhD,IAAK,gBAEH,OADA0B,EAAO,CAAEia,EAAS3b,EAAKgL,KAAKhL,EAAK0nB,UAAW,MACpCH,EAAIjf,KACV,IAAK,SAEH,OADA5G,EAAKF,KAAKkC,KAAK4jB,YAAYC,EAAIzI,IAAK9e,IAC7B,UAAY0B,EAAKgD,KAAK,MAAQ,IACvC,IAAK,gBAEH,MAAO,WADPhD,EAAOA,EAAKimB,OAAO,CAAE,EAAGhM,EAASjY,KAAKqY,GAAG,GAAI,eAAgBrY,KAAK4jB,YAAYC,EAAIzI,IAAK9e,GAAO,KACtE0E,KAAK,MAAQ,IACvC,IAAK,SAGH,OAFA1E,EAAKmE,OAAOnE,EAAK0nB,UAAY,GAAKH,EAAIzI,IAAI3a,QAAU,EAE7C,WADPzC,EAAOA,EAAKimB,OAAO,CAAE3nB,EAAKmE,OAAOnE,EAAK0nB,WAAa,EAAG/L,EAASjY,KAAKqY,GAAG,GAAI,eAAgBrY,KAAK4jB,YAAYC,EAAIzI,IAAK9e,MAC7F0E,KAAK,MAAQ,IACvC,QAOE,OANIhB,KAAKkkB,mBAAqBL,EAAIjf,OAAO5E,KAAKsY,QAAQE,MAASqL,EAAIjf,OAAOoT,EAAcI,aACtF0L,EAAM9L,EAAcI,WAAWyL,EAAIjf,KACnC5E,KAAKsY,QAAQE,IAAIqL,EAAIjf,KAA4B,mBAAbkf,EAAI9jB,MAAuB8jB,EAAI9jB,MAAQ8jB,GAE7E9lB,EAAKF,KAAKpB,KAAKC,UAAUqD,KAAKqY,KAC1BwL,EAAIzI,KAAOyI,EAAIzI,IAAIvd,QAAQG,EAAKF,KAAKpB,KAAKC,UAA4B,GAAlBknB,EAAIzI,IAAIvd,OAAcgmB,EAAIzI,IAAI,GAAKyI,EAAIzI,MACxF,OAASyI,EAAIjf,IAAM,IAAM5G,EAAKgD,KAAK,MAAQ,IAGxD,IAAK,sBACL,IAAK,sBACH1E,EAAK0nB,SAAW1nB,EAAK0nB,UAAY,EACjB,uBAAZH,EAAIlmB,OAA+BrB,EAAKmE,OAAOnE,EAAK0nB,UAAY,GACpE,IAAIG,GAAY,EAChB,IAAKniB,EAAI,EAAGA,EAAI6hB,EAAI/H,YAAYje,SAAUmE,EAAG,CAC3C,IAAI4C,EAAMif,EAAI/H,YAAY9Z,GAAG4C,IACjB,UAARA,IAAiBuf,GAAY,GACjC,IAAIC,EAAY1nB,KAAK0c,MAAM1c,KAAKC,UAAUL,IAC1C8nB,EAAUJ,WACVD,EAAEjmB,KAAKma,EAASrT,GAAO,yBAA2B5E,KAAK4jB,YAAYC,EAAI/H,YAAY9Z,GAAGoZ,IAAKgJ,GAAa,KAC1G,CACA,GAAID,EAAW,MAAM,IAAI3mB,MAAM,4BAA8BqmB,EAAIlmB,KAAO,IAAMrB,EAAK0nB,UACnF,MAAO,KAAOD,EAAE/iB,KAAK,MAAQ,KAE/B,IAAK,SACH,OAAOtE,KAAKC,UAAUknB,EAAIzI,KAAO,IAEnC,IAAK,aACH,OAAK9e,EAAK0nB,UACVhmB,EAAO,CAAEia,EAAS3b,EAAKgL,KAAKhL,EAAK0nB,SAAS,GAAI,MAC1C1nB,EAAKmE,OAAOnE,EAAK0nB,SAAS,IAAIhmB,EAAKF,KAAKxB,EAAKmE,OAAOnE,EAAK0nB,SAAS,IAC/D,UAAYhmB,EAAKgD,KAAK,MAAQ,KAHV,MAK7B,QACE,MAAM,IAAIxD,MAAO,iBAAmBqmB,EAAIlmB,MAE9C,EAkHAqa,EAAcjR,UAAUsd,QAAU,SAAWC,EAAUC,GACrD,IAAIR,EAAI,CAAC,EAAGS,EAAMxkB,KAAKqY,GACnBoM,EAAa,SAASC,EAAMC,GAC1B,IACE,IAAId,EAAM7L,EAAcU,OAAOiM,GAC/B,OAAOD,EAAKd,YAAYC,EAG1B,CAFE,MAAOe,GACP,MAAM,IAAIpnB,OAAOqmB,EAAM,cAAgB,UAAY,WAAae,EAAEjjB,WACpE,CACF,EACAhF,EAAY,SAASonB,EAAGN,GAEtB,GADKA,IAAOA,EAAQ,GACJ,iBAALM,EAAe,OAAOA,EAEjC,IADA,IAAIP,EAAI,GAAIG,EAAS,GACZ3hB,EAAI,EAAGA,EAAIyhB,IAASzhB,EAAG2hB,GAAU,KAC1C,IAAK,IAAIrH,KAAKyH,EAAGP,EAAE1lB,KAAK,KAAO6lB,EAAS,KAAO1L,EAASqE,GAAK,KAAO3f,EAAUonB,EAAEzH,GAAImH,EAAQ,IAC5F,MAAO,IAAMD,EAAExiB,KAAK,KAAO,KAAO2iB,EAAS,GAC7C,EAEJ,GAAuB,iBAAZW,EAIT,OAHQ,IAAIO,SACR,2CACA,UAAYJ,EAAWzkB,KAAMskB,GAC1B7L,CAAEzY,KAAKsY,QAAQ2K,OAAQjjB,KAAKsY,QAAQ5Q,OAAQ1H,KAAKsY,QAAQgL,OAC5DtjB,KAAKsY,QAAQC,YAAavY,KAAKsY,QAAQE,KAK7C,IAAK,IAAIsM,KAFTP,EAAMA,GAAO,CAAC,EAECD,EAEb,GADIC,EAAIxkB,SAAQC,KAAKqY,GAAKkM,EAAIxkB,OAAO+kB,IAAO,GAAGb,OAAOM,EAAIxkB,OAAO+kB,KAAQN,GAC9C,iBAAhBF,EAASQ,GAClB,IAAMf,EAAEe,GAAML,EAAWzkB,KAAMskB,EAASQ,GACwC,CAAhF,MAAOF,GAAgE,MAA3DA,EAAEvoB,QAAUuoB,EAAEvoB,QAAQE,QAAQ,IAAK,UAAYuoB,EAAK,MAAaF,CAAG,MAGhF,IAAK,IAAIhgB,KADTmf,EAAEe,GAAM,CAAC,EACOR,EAASQ,GACvB,IAAMf,EAAEe,GAAIlgB,GAAO6f,EAAWzkB,KAAMskB,EAASQ,GAAIlgB,GACgD,CAAjG,MAAOggB,GAAiF,MAA5EA,EAAEvoB,QAAUuoB,EAAEvoB,QAAQE,QAAQ,IAAK,UAAYqI,EAAM,SAAWkgB,EAAK,MAAaF,CAAG,CAKvG5kB,KAAKqY,GAAKmM,EACV,IAAIrJ,EAAInb,KAAKsY,QAAQ3W,WAAa,KAClC,OAAQ4iB,EAAIQ,QAAU,IACpB,IAAK,UACH,IAAIvB,EAAI,GACR,IAAK,IAAIlH,KAAKyH,EAAGP,EAAE1lB,KAAKma,EAASqE,EAAG,WAAa,MAAQ3f,EAAUonB,EAAEzH,KACrE,OAAO,IAAIuI,SAAS1J,EAAIqI,EAAExiB,KAAK,QACjC,IAAK,iBACH,OAAO,IAAI6jB,SAAS1J,EAAI,oBAAsBxe,EAAUonB,IAC1D,IAAK,GACH,OAAO,IAAIc,SAAS1J,EAAI,UAAYxe,EAAUonB,IAChD,QACE,OAAO,IAAIc,SAAS,IAAK1J,EAAIlD,EAASsM,EAAIQ,OAAQ,KAAO,MAAQpoB,EAAUonB,IAEjF,EAGO/L,CACP,CApxDgB,GAwxDhB,IAAIlU,EAAkC,WACrC,OAAO1G,EAAa,0BAA2B,4BAChD,EAKI4nB,EAAwB,SAAUrlB,GACrCxB,EACC,2BACA,gDACAwB,EAAKrC,WAAW2nB,aAAwD/lB,IAA9CS,EAAKE,IAAK,+BACpC,CACCE,OAAQJ,EAAKI,QAGhB,EAKImlB,EAA0B,SAAUxmB,EAAMd,GAC7Cc,EAAOA,EAAKsC,KAAM,KAClB7C,EAAU,oBAAqB,kDACpBe,IAAVtB,EAAqB,CAAEc,KAAMA,GAC/B,EAKIymB,EAAsB,SAAUzmB,EAAMd,GACzCc,EAAOA,EAAKsC,KAAM,KAClB7C,EACC,oBACA,yDACiB,iBAAVP,EACP,CACCwB,SAAU,WACVV,KAAMA,GAGT,EAKI0mB,EAAwC,SAAUxnB,EAAOpB,GAC5D2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAuB0B,EAAe1B,IAAWW,MAAMC,QAASZ,GAChE,wBAEF,EAKIynB,EAAqB,SAAUC,GAClC,OAAO,SAA2BC,GAKjC,MAJ0B,iBAAdA,GAA+C,iBAAdA,IAC5CA,EAAY,GAAGxoB,MAAMC,KAAMF,UAAW,IAEvCsoB,EAAuCG,EAAW,aAC3CD,EAAWC,EACnB,CACD,EAKIC,EAA8B,SAAU7lB,EAAM8lB,GACjD,IAAI1lB,EAASJ,EAAKI,OACjB2lB,EAAeD,EAAiB9jB,SAsCjC,OApCA8jB,EAAiB9jB,SAAW,WAC3B,IAAyBmZ,EACxB9c,EAAO,CAAC,EA6BT,OA1BA8c,EAAS4K,EAAa1oB,KAAMyoB,GAEvB,WAAWzmB,KAAM8b,KACrB9c,EAAKilB,OAAS,wBAGV,WAAWjkB,KAAM8b,KACrB9c,EAAK0J,OAAS,wBAGV,WAAW1I,KAAM8b,KACrB9c,EAAKslB,OAAS,wBAGfxI,EAAOve,QAAS,2CAA2C,SAAU2N,GAIpE,OAHAlM,EAAKua,YAAc,KACXxY,EAAS,iBAAqBA,EADnB,wBAGZmK,CACR,IAOO,cALIhB,OAAO5B,KAAMtJ,GAAOgD,KAAM,MAK9B,kBACQ8Z,EADR,QAJK5R,OAAO5B,KAAMtJ,GAAO+C,KAAI,SAAU6D,GAC7C,OAAO5G,EAAM4G,EACd,IAAG5D,KAAM,MAIY,GACtB,EAEOykB,CACR,EAKI1oB,EAAQ,GAAGA,MAyFf,OAhFA+C,EAAU6lB,aAAe,SAAUlP,GAClC,IAAI1W,EACH2W,EAAa,CACZ,qBAAsBD,EACtB,KAAQ,CAAC,GAOX,IAAM1W,KAJNd,EAA2BwX,EAAM,QACjC5S,EAAkC4S,EAAM,QAGxBA,EACVA,EAAK2M,eAAgBrjB,KACzB2W,EAAW3R,KAAMhF,GAAW,CAAC,GAI/B5D,EAAK8D,KAAMyW,EACZ,EASA5W,EAAU8lB,iBACV9lB,EAAUiH,UAAU6e,iBAAmB,SAAUlnB,GAChD,IAAIiB,EAAM2lB,EAAWjpB,EAASiK,EAAiBW,EAC9CjJ,EAAOjB,EAAMC,KAAMF,UAAW,GAiC/B,OA/BAmC,EAA2BP,EAAM,QACjCS,EAAuBT,EAAM,OAAwB,iBAATA,GAAqBH,MAAMC,QAASE,GAC/E,yBAEDA,EAAOL,EAAaK,GACpBiB,EAAOK,KAAKL,KAEZ+D,EAAuB/D,GACvBqlB,EAAuBrlB,GAEvBtD,EAAUsD,EAAKE,IAAK,CAAE,+BAAgCokB,OAAQvlB,IAC9DwmB,EAAyBxmB,EAAMrC,GAG1BkC,MAAMC,QAASnC,KACnBA,EAAUA,EAAQ2E,KAAM,MAEzBmkB,EAAqBzmB,EAAMrC,GAG3BiK,OAAkCpH,IAAhBc,KAAK0H,OACtB1H,KAAKsG,kBACLxC,EAEDwhB,EAAY,IAAItN,EAAerY,EAAKI,OAAQuG,GAAkB+d,QAAShoB,GAEvE4K,EAAWoe,EAAoBC,GAE/B9hB,EAAaxF,EAAM2B,EAAMsH,EACxB,CAAEue,EAA6B7lB,EAAM2lB,GAAahf,IAE5CW,CACR,EAWAnH,EAAU1D,cACV0D,EAAUiH,UAAU3K,cAAgB,SAAUsC,GAC7C,OAAOsB,KAAK4lB,iBAAkBlnB,GAAOwB,MAAO,CAAC,EAAGnD,EAAMC,KAAMF,UAAW,GACxE,EAEOgD,CAKP,OAlgEY,2DCzBZ,UAqBE,EAAO,CACN,SACA,SACA,SACA,eACS,0BAAP,EAUG,SAAU3D,EAAM2D,GAExB,IAAI1C,EAAc0C,EAAUM,aAC3BmD,EAAYzD,EAAUgB,WACtBrD,EAAYqC,EAAUmB,WACtBsH,EAAezI,EAAUoB,cACzBsC,EAAc1D,EAAUsB,aACxBqC,EAAY3D,EAAUuC,WACtB5D,EAAeqB,EAAU4C,cACzBgB,EAAwB5D,EAAU6C,uBAClC1D,EAA4Ba,EAAU8C,2BACtCijB,EAAyB/lB,EAAU+C,wBACnC1D,EAAwBW,EAAUmD,uBAClCY,EAAmC/D,EAAUkD,kCAG1C+E,EAAgC,SAAUsK,GAC7C,OAAOjV,EAAa,gBAAiB,yBAA0B,CAC9DiV,QAASA,GAEX,EAKI1O,EAA8B,SAAU/F,EAAOpB,GAClD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAwC,iBAAVA,EAC9B,SAEF,EAKI8K,EAA8B,SAAU9K,EAAOpB,GAClD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAwC,iBAAVA,EAC9B,WAEF,EAqBIuF,EAAwB,SAAUxD,GACrC,IAAImmB,EAAKnmB,EAAKrC,WAAY,QAE1B,OAAKwoB,GACQ,aAAPA,IACJA,EAAK,gBAEyD,IAA1D,CAAE,SAAU,cAAe,WAAYve,QAASue,GAI7CnmB,EAAKoF,KAAK,CAAE,gCAAiC+gB,IAI9CA,GAIDnmB,EAAKoF,KAAM,iCACnB,EA+CIoD,EAAiC,SAAUxI,GAC9C,IAAI2T,EACHwS,EAAK3iB,EAAuBxD,GAE7B,GAAY,SAAPmmB,EAAL,CAMA,GAAmB,aAFnBxS,EAAM3T,EAAK2E,aAAa,CAAE,mBAAoBwhB,KAErCC,MACR,MAAMhe,EAA+B,IAAMuL,EAAIyS,MAAQ,sBAGxD,OAAOzS,EAAI/O,OARX,CASD,EAkDIyhB,EAAkB,uHAelBC,EAA0B,SAAU/hB,GACvC,IAAIgiB,EAAMC,EAAMC,EAAiBC,EAAqCC,EACrEC,EAAuBC,EAA0BC,EACjDC,EAAsBC,EAA0BC,EAASC,EAAQC,EACjEC,EAAgBC,EAAoBC,EAAuBC,EAAoBC,EAGhF,KADAjjB,EAAUA,EAAQgG,MAAO8b,IAExB,MAAM,IAAIxoB,MAAO,oBAAsB0G,GAmDxC,GAhDA2iB,EAAS3iB,EAAS,GAClB0iB,EAAU1iB,EAAS,GACnBmiB,EAAsCniB,EAAS,GAC/CgjB,EAAqBhjB,EAAS,GAC9B8iB,EAAqB9iB,EAAS,IAC9BijB,EAASjjB,EAAS,IAGbgjB,EACJA,EAAmB3qB,QAAS,YAAY,SAAU6qB,EAAQC,EAA+BC,GACxFX,EAA2BU,EAA8BxpB,OACzD2oB,EAA2BG,EAC1BW,EAA8BzpB,MAChC,KAIAuoB,EAAkBliB,EAAS,GAC3BoiB,EAAiBpiB,EAAS,GAErBkiB,GAGJA,EAAgB7pB,QAAS,UAAU,SAAU2N,GAC5Cuc,EAAwBvc,CACzB,IACKuc,GACJM,IAAoB,KAAON,GAC3BA,EAAwBA,EAAsB5oB,QAE9C4oB,EAAwB,EAKzBF,EAAwBH,EAAgBvoB,OAAS,IAEjD4oB,EAAwB,EACxBF,EAAwB,GAIzBD,EAAe/pB,QAAS,OAAO,SAAU2N,GACxCwc,EAAuBxc,EAAMrM,MAC9B,KAIImpB,EACJ,MAAMjf,EAA8B,CACnCsK,QAAS,0CAKX,GAAKuU,EACJ,MAAM7e,EAA8B,CACnCsK,QAAS,8BAqCX,OAhC4E,KAArE6T,EAAOG,EAAoCxb,YAAa,QAK9Dic,EADOT,EAAoCtgB,MAAO,KAAO,GAC9BlI,OAASqoB,EAAO,GAG2C,KAA/EC,EAAOE,EAAoCxb,YAAa,IAAKqb,EAAO,MAC1Ee,EAAwBf,EAAO,EAAIC,IAuB9B,CACNU,EACAD,EACAF,EACAD,EACAF,EACAI,EACAH,EACAO,EACAD,EACAG,EACAE,EAEF,EAcI9e,EAAe,SAAU7L,EAAMmD,GAClC,OAAOA,EAAKoF,KAAK,CAChB,gCAAkC5B,EAAuBxD,GACzDnD,GAEF,EAKI+qB,EAAmB,CACtB,IAAK,UACL,IAAK,QACL,IAAK,cACL,IAAK,WACL,IAAK,YACL,EAAK,cACL,IAAU,YAkBPC,EAAkB,SAAU7nB,GAC/B,IAAI4F,EACHkiB,EAAY,CAAC,EAEd,IAAMliB,KAAUgiB,EACfE,EAAWliB,GAAW8C,EAAckf,EAAkBhiB,GAAU5F,GAGjE,OAAO8nB,CACR,EAKIC,EAAiB,SAAU9pB,GAC9B,OAAK0W,MAAO1W,GACJ+pB,IAEDzlB,KAAMtE,EAAQ,EAAI,OAAS,SAAWA,EAC9C,EA4GIgqB,EAAyB,SAAU1jB,EAASvE,EAAMhB,GACrD,IAAIkpB,EAAiBC,EAAgBC,EAAoBC,EAAgBC,EACxEC,EAAS3hB,EAlFiBiJ,EAoF3B,SAAS2Y,EAAYC,EAAWC,GAC1BD,KAAazpB,IACjB4H,EAAY8hB,GAAkB1pB,EAASypB,GAEzC,CAkFA,OAhFAzpB,EAAUA,GAAW,CAAC,EAGtBspB,GAFA/jB,EAAUA,EAAQ6B,MAAO,MAEE,GAE3B8hB,EAAkB3jB,EAAS,IAAO,IAAM+jB,EAExCH,GADAC,EAAqB9B,EAAyB4B,IACT,GACrCG,EAAiBD,EAAoB,KAlGVvY,EAqGJ7Q,EAAQ2T,MAnG/B9C,EAAoB,cADpBA,EAASA,GAAU,SACckY,EAAiBxlB,KAAMsN,GAmGxD0Y,EAjGO,SAAUtqB,EAAO0qB,GACvB,IAAIC,EAAKC,EAKT,GAHA5qB,GAASA,EAGJ0W,MAAO1W,GACX,OAAO+pB,IAIR,GAA+B,iBAAnBW,GAA+BA,EAAeG,SAAW,CAIpE,GAFAD,EAAY,EAEC,IAHbD,GAAOD,EAAeG,UAIrB,OAAOjZ,EAAQ5R,GAIhB,GAAuB,iBAAR2qB,GAAoBA,EAAM,GAAM,EAC9C,OAAOZ,GAIT,KAAO,CAGN,GAAmB,KAFnBa,GAAaF,GAAkB,GAG9B,OAAO9Y,EAAQ5R,GAIhB,GAAK0W,MAAOkU,GACX,OAAOb,IAIRY,IADAC,EAAYA,EAAUE,gBAAgB3iB,MAAO,MAC3B,GAClByiB,GAAaA,EAAW,EACzB,CAYA,OATA5qB,EAAQA,EAAM+D,WAAWoE,MAAO,MACzB,IAAOnI,EAAO,GAAM4qB,EAC3B5qB,EAAO,GAAMA,EAAO,IAASA,EAAO,GAAM2qB,GAASA,GAInD3qB,GAHAA,EAAQ4R,IAAW5R,EAAO,GAAM,IAAMA,EAAO,MAG/B+D,WAAWoE,MAAO,MACzB,IAAOnI,EAAO,GAAM4qB,EAC3B5qB,EAAO,GAAMA,EAAO,IAASA,EAAO,GAAM2qB,EAAQA,IACxC3qB,EAAO,GAAM,IAAMA,EAAO,GACrC,GA6CQwE,gBAAkB,WACzB,MAAO,gBAAmBzD,EAAQ2T,MAAQ,IAAO3T,EAAQ2T,MAAQ,IAAO,IAAO,GAChF,EAEA/L,EAAa0f,EAAyBgC,GAAkBhE,OAAO,CAC9DgE,EACAH,EAAiBG,EAAkBD,EACnCF,EACAE,EACAE,EACA7f,EAAc,WAAY1I,GAC1B0I,EAAc,MAAO1I,GACrB6nB,EAAiB7nB,GACjBwI,EAAgCxI,KAG5BhB,EAAQgqB,UAOZpiB,EAAY,GAAM,EAClBA,EAAY,GAAM,EAClBA,EAAY,GAAM,EAClBA,EAAY,GACXA,EAAY,QAAMrH,EAEnBqH,EAAY,IA1cM,SAAUqiB,EAAajpB,GAC1C,IAAIkpB,EAAc,EAEdnkB,EAAS/E,EAAKoF,KAAK,CACtB,uCAAyC5B,EAAuBxD,GAChEipB,EACA,kBAcD,OAXAlkB,EAASwE,OAAO5B,KAAM5C,GAAS3C,QAAO,SAAUoH,EAAW2f,GAC1D,IAAIC,EAAiBD,EAAW/iB,MAAO,KAAMlI,OAAS,EAClD4I,EAAaqiB,EAAW/iB,MAAO,KAAO,GAI1C,OAHAoD,EAAW4f,GAAmB5f,EAAW4f,IAAoB,CAAC,EAC9D5f,EAAW4f,GAAkBtiB,GAAe/B,EAAQokB,GACpDD,EAAc3mB,KAAKwQ,IAAKqW,EAAgBF,GACjC1f,CACR,GAAG,CAAC,IAEG0f,YAAcA,EAEdnkB,CACR,CAqbqBskB,CAAerqB,EAAQgqB,QAAShpB,IAGpDwoB,EAAY,uBAAwB,GACpCA,EAAY,wBAAyB,GACrCA,EAAY,wBAAyB,GACrCA,EAAY,2BAA4B,GACxCA,EAAY,2BAA4B,IAGX,IAAxBxpB,EAAQsqB,cACZ1iB,EAAY,GAAM,MAKd,0BAA2B5H,KAAc,0BAA2BA,GAGxE4H,EAAY,GAAMrE,KAAKwQ,IAAKnM,EAAY,GAAKA,EAAY,MAC3C,0BAA2B5H,IACxC,0BAA2BA,IAG5B4H,EAAY,GAAMrE,KAAKgnB,IAAK3iB,EAAY,GAAKA,EAAY,KAenDA,CACR,EAeI4iB,EAAY,+OAiBZC,EAAc,gJAedC,EAAY,gDAYZphB,EAAgB,SAAUrK,GAC7B,OAAOA,EACLrB,QAAS4sB,EAAW,IACpB5sB,QAAS6sB,EAAa,KACtB7sB,QAAS8sB,EAAW,IACvB,EAgBIC,EAAc,SAAU1rB,EAAO2I,GAClC,IAAIgjB,EAASC,EAAqBC,EAAmBC,EAAUzG,EAAQ4D,EAAQ8C,EAC9ExC,EAAQyC,EA2FT,OApFAL,EAAU,CACT,CAAE,OACF,CAAE,SAAU,WAAY,UACxB,CAAE,SAAU,SAAU,UACtB,CAAE,iBAAkB,WAAY,kBAChC,CAAE,iBAAkB,SAAU,mBAG/BE,EAAoBljB,EAAY,GAChCijB,EAAsBjjB,EAAY,IAAO,CAAC,EAC1CqjB,EAAYrjB,EAAY,IAqDxB,SAAyB+K,EAAQiY,GAChC,OAAOA,EAAQzqB,MAAK,SAAU+qB,GAC7B,IAAIjsB,EAAQ0T,EAIZ,OAAOuY,EAAUjd,OAAM,SAAUjP,GAChC,OAA0C,OAArCC,EAAMsM,MAAO0f,EAAWjsB,MAK7BC,EAAQA,EAAMrB,QAASqtB,EAAWjsB,GA7DrC,SAAgBA,GACf,OAAO,SAAU0W,GAShB,OANAA,EAASA,EAAOtO,MAAO,IAAKhF,KAAI,SAAUwI,GACzC,OAAOkgB,EAAmBlgB,IACzBigB,EAAqBjgB,IACrBA,CACF,IAAGvI,KAAM,IAEArD,GACR,IAAK,WACJslB,EAAS6G,IACT,MAED,IAAK,MACJ7G,EAAS0E,IACT,MAED,IAAK,SAGJtT,EAASA,EAAO9X,QAAS,KAAM,IAE/B0mB,GAAU5O,EACV,MAED,IAAK,SACL,IAAK,iBACJwS,EAASxS,EACT,MAED,IAAK,SACJ8S,EAAS9S,EACT,MAED,IAAK,iBACJ8S,EAAS9S,EACTqV,GAAW,EACX,MAGD,QACC,MAAM,IAAIlsB,MAAO,kBAEnB,MAAO,EACR,CACD,CAc6C4b,CAAOzb,KAC1C,EACR,MAAOC,EAAMC,MACd,GACD,CAEQksB,CArERnsB,EAAQqK,EAAerK,GAqEQ2rB,IAGhBjV,MAAO2O,GACd0E,MAM+B,KAHvCgC,EAAgB,GAAK9C,EAASM,GAGX5f,QAAS,KAC3B0b,GAAU,KAGwC,IAAvC0G,EAAcpiB,QAAS,OAClC0b,GAAU,KAINyG,IACJzG,IAAW,GAGLA,EACR,EAmDI+G,EAAY,SAAUtlB,EAAQrD,GACjC,OAAO6H,OAAO5B,KAAM5C,GAAS3D,KAAI,SAAU6D,GAC1C,OAAOvD,EAAG,CAAEuD,EAAKF,EAAQE,IAC1B,IAAG7C,QAAO,SAAU2C,EAAQulB,GAE3B,OADAvlB,EAAQulB,EAAM,IAAQA,EAAM,GACrBvlB,CACR,GAAG,CAAC,EACL,EAcI8D,EAAsB,SAAUrH,GACnC,OAAKA,EAAQ,GAAMA,EAAQA,EAAOtD,OAAS,KAAQ,KAC3CsD,EAEQ,OAAXA,EACG,IAEDA,EAAO5E,QAAS,MAAO,KAAMQ,MAAO,GAAI,EAChD,EAkBImtB,EAAwB,SAAUhmB,EAASvE,EAAMhB,GACpD,IAAI2U,EAAK6W,EAAiBpX,EAAUqX,EAAqBC,EAAgBb,EACxEC,EAAmBlD,EAAuBC,EAC1CG,EAA0B2D,EAAWxC,EAAgBE,EAAgBuC,EACrEC,EAAiB3D,EAAQC,EAAqBG,EAAuBE,EAAQM,EAC7EgD,EAAmB7C,EAAwB1jB,EAASvE,EAAMhB,GA6G3D,OA3GAkoB,EAAS5e,EAAewiB,EAAkB,IAC1ClE,EAAwBkE,EAAkB,GAC1C9D,EAA2B8D,EAAkB,GAC7CjE,EAA2BiE,EAAkB,GAC7C3D,EAAsB2D,EAAkB,GACxCxD,EAAwBwD,EAAkB,GAC1CtD,EAASlf,EAAewiB,EAAkB,KAC1C3C,EAAiB7f,EAAewiB,EAAkB,KAClDzC,EAAiB/f,EAAewiB,EAAkB,KAClDJ,EAAiBpiB,EAAewiB,EAAkB,KAClDH,EAAYriB,EAAewiB,EAAkB,KAC7ChD,EAAYuC,EAAWS,EAAkB,KAAM,SAAUR,GACxD,MAAO,CAAEA,EAAM,GAAKhiB,EAAegiB,EAAM,IAC1C,IACAM,EAAcE,EAAkB,IAEhChB,EAAoBO,EA3FS,SAAUrqB,GACvC,IAAI4F,EACHkiB,EAAY,CAAC,EAEd,IAAMliB,KAAUgiB,EACfE,EAAWpf,EAAckf,EAAkBhiB,GAAU5F,IAAW4F,EAGjE,OAAOkiB,CACR,CAkFgCiD,CAAyB/qB,IAAQ,SAAUsqB,GACzE,MAAO,CAAEhiB,EAAegiB,EAAM,IAAOA,EAAM,GAC5C,IAEAlX,EAAWwX,EAAc,IAAMA,EAAc,IAAM,MACnDH,EAAsB7hB,EAAckf,EAAW,MAC/C0C,EAAkB5hB,EAAckf,EAAW,MAEtC8C,IACJf,EAAsBe,EAAYxkB,MAAO,IAAKhE,QAAO,SAAU2C,EAAQimB,EAAgB3oB,GAEtF,OADA0C,EAAQimB,GAAmBnoB,OAAQR,GAC5B0C,CACR,GAAG,CAAC,IAGL4O,EAAM,CAAEuT,EAAQM,EAAQW,EAAgBE,GAAiBjnB,KAAI,SAAUnD,GACtE,OAAOA,EAAMrB,QAAS,wBAAwB,SAAUgN,EAAWqhB,GAGlE,OAAKA,EACGpiB,EAAqBoiB,GAI7BrhB,EAAYA,EAAUhN,QAAS,iBAAiB,SAAUgJ,GACzD,OAAOkiB,EAAWliB,EACnB,GAGD,GACD,IAEAshB,EAASvT,EAAK,GACd6T,EAAS7T,EAAK,GACdwU,EAAiBxU,EAAK,GACtB0U,EAAiB1U,EAAK,GAoBtBkX,EAAkBzX,EAAW,IAGxB+T,IASJ0D,EAAkB,KAPjBlX,EADI2T,EACElU,EAAW,MAAQkU,EAAwB,MAAQmD,EACxDrX,EAAW,IAAMkU,EAAwB,OAASmD,EAClDrX,EAAW,IAAM+T,EAAsB,MAElC/T,EAAW,MAAQ+T,EAAsB,KAAOsD,EACrDrX,EAAW,IAAM+T,EAAsB,OAEX,IAAM0D,EAAkB,KAMjDlW,MAAOqS,EAA2BH,KACrCD,IAUFiE,EAAkB,KANlBA,EAAkBA,EAAkB,KADpClX,EAAM6W,EAAkBpX,EAAW,KACa,IAAMoX,EAApCK,OAIVA,EAAkB,KAAOlX,GAES,KAOpC,CACNmW,EACAD,EACA,CACCqB,SAAU,IAAInX,OAAQ,IAAMnL,EAAc8hB,IAC1CS,IAAK,IAAIpX,OAAQ,IAAMnL,EAAc+hB,IACrCxC,eAAgB,IAAIpU,OAAQ,IAAMnL,EAAcuf,IAChDE,eAAgB,IAAItU,OAAQ,IAAMnL,EAAcyf,IAChD/E,OAAQ,IAAIvP,OAAQ,IAAM8W,GAC1B3D,OAAQ,IAAInT,OAAQ,IAAMnL,EAAcse,IACxCM,OAAQ,IAAIzT,OAAQ,IAAMnL,EAAc4e,KAI3C,EAYI9jB,EAAgB,SAAUqC,EAAO/F,GACpC,GAAe,YAAV+F,GAAiC,YAAVA,EAC3B,MAAM,IAAIlI,MAAO,iBAGlB,OAAOmC,EAAKoF,KAAK,CAChB,UACAW,EAAQ,wBAA0BvC,EAAuBxD,GACzD,YAEF,EAqBIorB,EAAyB,uBAgIzBC,EAAoB,SAAU/H,EAAQgI,EAAW3Y,GACpD,IAAI4Y,EAEJ,OAAgB,IAAXjI,EACGA,GAGRiI,EAAahpB,KAAKuT,KAAMvT,KAAKipB,IAAKjpB,KAAKC,IAAK8gB,IAAa/gB,KAAKipB,IAAK,KAG5D7Y,EAAO2Q,EAAQ,CAAEwF,SAFxByC,GAAcD,IAGf,EAgEIG,EAAe,SAAUnI,EAAQ1c,EAAYD,GAChD,IAAIgN,EAAK+X,EAAYhB,EAAgB9D,EAAuBC,EAC3DC,EAAuBC,EAAsBC,EAA0B2D,EACvEC,EAAa1D,EAAQC,EAAqB5iB,EAASoO,EAAOyU,EAC1DE,EAAuBqE,EAAenE,EAAQM,EAyG3C8D,EAA+BC,EAAmBC,EAAS1C,EAAgBtiB,EAvF/E,OAhBAigB,EAAuBngB,EAAY,GACnCkgB,EAAwBlgB,EAAY,GACpCggB,EAAwBhgB,EAAY,GACpCogB,EAA2BpgB,EAAY,GACvCigB,EAA2BjgB,EAAY,GACvCwgB,EAAiBxgB,EAAY,GAC7BugB,EAAsBvgB,EAAY,GAClC0gB,EAAwB1gB,EAAY,GACpC+L,EAAQ/L,EAAY,IACpB8jB,EAAiB9jB,EAAY,IAC7B+jB,EAAY/jB,EAAY,IACxBkhB,EAAYlhB,EAAY,IACxBgkB,EAAchkB,EAAY,IAC1B8kB,EAAa9kB,EAAY,IAGpB+N,MAAO2O,GACJ,CAAE,CAAEtlB,KAAM,MAAOC,MAAO0sB,KAG3BrH,EAAS,GACb/e,EAAUqC,EAAY,IACtBsgB,EAAStgB,EAAY,IACrB4gB,EAAS5gB,EAAY,MAErBrC,EAAUqC,EAAY,IACtBsgB,EAAStgB,EAAY,GACrB4gB,EAAS5gB,EAAY,KAwDtBsgB,GApDAyE,EAAgB,SAAUnqB,GACzB,IAAIuqB,EAAa,UAChBhuB,EAAQ,GA+CT,OA3CAyD,EAAO5E,QAAS,wBAAwB,SAAUgN,EAAWqhB,GAGvDA,EACJntB,EAAWC,EAAO,UAAW8K,EAAqBoiB,IAKhC,MAAdrhB,GAiBLA,GAXAA,EAAYA,EAAUhN,QAAS,mBAAmB,SAAUgJ,GAO3D,MANgB,MAAXA,IACJmmB,EAAa,YAEdjuB,EAAWC,EAAO6pB,EAAkBhiB,GAAUkiB,EAAWliB,IAGlD,EACR,KAGsBhJ,QAAS,SAAS,SAAUovB,GASjD,OANKpB,IACJoB,EAAQpB,GAAcoB,IAEvBluB,EAAWC,EAAOguB,EAAYC,GAGvB,EACR,KAGUpvB,QAAS,KAAK,SAAUqvB,GACjCnuB,EAAWC,EAAO,UAAWkuB,EAC9B,IA/BCnuB,EAAWC,EAAO,WAAY6L,EAgChC,IACO7L,CACR,GAEwBmpB,GACxBM,EAASmE,EAAenE,GAGlB0E,SAAU5I,KAQiB,IAA5B/e,EAAQqD,QAAS,KACrB0b,GAAU,KAGkC,IAAjC/e,EAAQqD,QAAS,OAC5B0b,GAAU,KAMNoI,IACJtC,EAAiB7mB,KAAKC,IAAKD,KAAKiQ,MAAO8Q,IAAWthB,WAAW9D,OAAS,GACtEkrB,EAAiB7mB,KAAKgnB,IAAKH,EAAgBsC,EAAWxC,eAG/B,IACtB0C,EAAiBF,EAAYtC,IAAoBsC,EAAYtC,GAAiB1F,OAGvD,MAAnBkI,EACJA,EAAiB,KACNA,IAEXE,EAAU1C,GADMwC,EAAexlB,MAAO,KAAMlI,OAAS,EACR,GAC7ColB,GAAkB/gB,KAAKqQ,IAAK,GAAIkZ,KAWjCxI,EANK3O,MAAOqS,EAA2BH,GAjRD,SAAUvD,EAAQyD,EAAsBD,EAAuBF,EAAuBjU,EAC7HyU,GAiDA,OA1CE9D,EAJGsD,EAIMjU,EAAO2Q,EADZ8D,GAKoB,CAAE0B,UAAWlC,IAI7BjU,EAAO2Q,GAGjBA,EAASzgB,OAAQygB,GAGZsD,GAAyB,KAAKvnB,KAAMikB,KASxCA,IAAYA,GAAS6I,QAASvF,GAC5BhqB,QAAS,MAAO,IAChBA,QAAS,MAAO,KAIdkqB,KACJxD,EAASA,EAAOld,MAAO,MACf,GAAMtC,EAAWwf,EAAQ,IAAO,GAAIwD,GAAuB,GACnExD,EAASA,EAAOjiB,KAAM,MAIlB0lB,KACJzD,EAASA,EAAOld,MAAO,MACf,GAAMtC,EAAWwf,EAAQ,GAAKyD,GACtCzD,EAASA,EAAOjiB,KAAM,MAGhBiiB,CACR,CAoOW8I,CAAmC9I,EAAQyD,EACnDD,EAAuBF,EAAuBjU,EAAOyU,GAxLpB,SAAU9D,EAAQ0D,EAA0BH,EAA0BlU,GACzG,IAAI0Z,EAAWC,EAgBf,GAbKtF,EAA2BH,IAC/BA,EAA2BG,GAU5B1D,KAHAA,IAJA+I,EAAYhB,EAAmB/H,EAAQ0D,EAA0BrU,OACjE2Z,EAAYjB,EAAmB/H,EAAQuD,EAA0BlU,IAG5B0Z,EAAYC,IAG5BtqB,SAAU,IAE1B,IAAQ3C,KAAMikB,GAClB,MAAMlb,EAA8B,CACnCsK,QAAS,iCAWX,OANKsU,EAA2B1D,EAAO1mB,QAAS,UAAW,IAAKsB,OAAS,KACxEolB,EAASA,EAAOld,MAAO,MACf,GAAMtC,EAAWwf,EAAQ,IAAO,GAAI0D,EAA2B1D,EAAQ,GAAI1mB,QAAS,MAAO,IAAKsB,QAAQ,GAChHolB,EAASA,EAAOjiB,KAAM,MAGhBiiB,CACR,CAmJWiJ,CAA+BjJ,EAAQ0D,EAC/CH,EAA0BlU,GASvB+Y,GAAcE,IAGlB9kB,EAAaH,EAAkBA,GAAkB2c,GAAW,QAG5DuI,GADAD,EAAiBF,EAAYtC,GAAkBtiB,IAAgB8kB,GAC5BrhB,MAAO6gB,GAI1CzX,EAAM,SAAUnS,GACf,IAAIzD,EAAQ,GAeZ,OAdAyD,EAAO5E,QAAS,oBAAoB,SAAU4vB,EAAUC,EAAOzD,GAGzDyD,EACJ3uB,EAAWC,EAAO,UAAW0uB,GAKzBzD,GACJlrB,EAAWC,EAAO,UAAWirB,EAG/B,IACOjrB,CACR,EAGAmpB,EAASA,EAAO5C,OAAQ3Q,EAAKkY,EAAmB,KAChDrE,EAAS7T,EAAKkY,EAAmB,IAAMvH,OAAQkD,IAIhDlE,EAASA,EAAO1mB,QAAS,KAAM,IAG1BuqB,IACJ7D,EAhXkC,SAAUA,EAAQ6D,EAAqBG,GAC1E,IAAIzY,EACH6d,EAAsBvF,EACtBhY,EAAM,GAENwd,IAAoBrF,EAKrB,IAFAzY,GADAyU,EAASzgB,OAAQygB,GAASld,MAAO,MACjB,GAAIlI,OAEZ2Q,EAAQ6d,GACfvd,EAAMmU,EAAQ,GAAIlmB,MAAOyR,EAAQ6d,EAAqB7d,IACnDM,EAAIjR,OARD,IAQgB,IAAOiR,EAC7BN,GAAS6d,EACJC,IACJD,EAAsBpF,EACtBqF,GAAoB,GAKtB,OADArJ,EAAQ,GAAMA,EAAQ,GAAIlmB,MAAO,EAAGyR,IAAYM,EAAIjR,OAhB7C,IAgB4D,IAAOiR,EACnEmU,EAAOjiB,KAAM,IACrB,CA0VWurB,CAA+BtJ,EAAQ6D,EAC/CG,IASKJ,EAAO5C,OACbqH,EAAerI,GACfkE,IAnGON,EAAO5C,OACb,CAAEtmB,KAAM,WAAYC,MAAOysB,GAC3BlD,GAmGH,EAKIqF,EAA2B,SAAUjmB,EAAYD,GACpD,OAAO,SAAiC1I,GAIvC,OAHAqB,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7BwtB,EAAcxtB,EAAO2I,EAAYD,EACzC,CACD,EAuNA,OA9KAxG,EAAUuX,gBACVvX,EAAUiH,UAAUsQ,gBAAkB,SAAU1Y,GAC/C,IAAIX,EAAMqI,EAAwBY,EAWlC,OATApD,EAAkClF,EAAS,WAG3CX,EAAO,CADPW,EAAUA,GAAW,CAAC,GAItBsI,EAh8CuB,SAAUZ,GACjC,OAAO,SAA0BzI,GAChC,OAAO2F,EAAW8C,EAAwBzI,GAC3C,CACD,CA47CY6uB,CADXpmB,EAAyBrG,KAAKqG,uBAAwB1H,IAEtD6E,EAAaxF,EAAMgC,KAAKL,KAAMsH,EAAU,CAAEZ,IAEnCY,CACR,EAYAnH,EAAUuG,uBACVvG,EAAUiH,UAAUV,uBAAyB,SAAU1H,GACtD,IAAIX,EAAM2B,EAAM+sB,EAAQxoB,EAASqC,EAAYU,EAE7CpD,EAAkClF,EAAS,WAE3CA,EAAUA,GAAW,CAAC,EACtBgB,EAAOK,KAAKL,KAEZ3B,EAAO,CAAEW,GAET+E,EAAuB/D,GAEvBA,EAAKwH,GAAI,MAAO1I,GAChB,IAEEyF,EADIvF,EAAQ8I,IACF9I,EAAQ8I,IAERpE,EAAe1E,EAAQ+G,OAAS,UAAW/F,GAItD+sB,EAAS,CADTnmB,EAAaqhB,EAAwB1jB,EAASvE,EAAMhB,GAIrD,CAFE,QACDgB,EAAK0H,IAAK,MAAO5I,EAClB,CAUA,OAjGD,SAAyB8H,GACxB,IAAImgB,EAAuBngB,EAAY,GACtCkgB,EAAwBlgB,EAAY,GACpCggB,EAAwBhgB,EAAY,GACpCogB,EAA2BpgB,EAAY,GACvCigB,EAA2BjgB,EAAY,GAGxC,GAAM+N,MAAOqS,EAA2BH,GAKjC,KAAMlS,MAAOqS,KAA+BrS,MAAOkS,GACzD,MAAM,IAAIhpB,MAAO,8EAKjBqoB,EAAwBa,EAAsB,uBAAwB,EAAG,IACzEb,EAAwBY,EAAuB,wBAAyB,EAAG,IAC3EZ,EAAwBU,EAAuB,wBAC9CE,EAAuB,GACzB,MAdCZ,EAAwBc,EAA0B,2BAA4B,EAAG,IACjFd,EAAwBW,EAA0B,2BACjDG,EAA0B,GAa7B,CAiECgG,CAAgBpmB,GAEX5H,EAAQgqB,SACZ+D,EAAO5uB,KAAMkC,KAAKsG,mBAEnBW,EAAWulB,EAAyBtsB,MAAO,KAAMwsB,GACjDlpB,EAAaxF,EAAM2B,EAAMsH,EAAUylB,GAE5BzlB,CACR,EAUAnH,EAAU8S,aACV9S,EAAUiH,UAAU6L,aAAe,SAAUjU,GAC5C,IAAIX,EAAM2B,EAAMuE,EAASqC,EAAYU,EAUrC,GARApD,EAAkClF,EAAS,WAE3CA,EAAUA,GAAW,CAAC,EACtBgB,EAAOK,KAAKL,KAEZ3B,EAAO,CAAEW,GAET+E,EAAuB/D,GAClBhB,EAAQgqB,QACZ,MAAM5gB,EAA8B,CACnCsK,QAAS,6CAoBX,OAhBA1S,EAAKwH,GAAI,MAAO1I,GAGfyF,EADIvF,EAAQ8I,IACF9I,EAAQ8I,IAERpE,EAAe1E,EAAQ+G,OAAS,UAAW/F,GAGtD4G,EAAa2jB,EAAuBhmB,EAASvE,EAAMhB,GAEnDgB,EAAK0H,IAAK,MAAO5I,GAEjBwI,EAjzBoB,SAAUV,GAC9B,OAAO,SAAuB3I,GAI7B,OAHAqB,EAA2BrB,EAAO,SAClC8K,EAA6B9K,EAAO,SAE7B0rB,EAAa1rB,EAAO2I,EAC5B,CAED,CAyyBYqmB,CAAgBrmB,GAE3B/C,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAEV,IAE9BU,CACR,EAWAnH,EAAUiV,aACVjV,EAAUiH,UAAUgO,aAAe,SAAUnX,EAAOe,GAInD,OAHAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7BoC,KAAKqX,gBAAiB1Y,EAAtBqB,CAAiCpC,EACzC,EAWAkC,EAAU+sB,oBACV/sB,EAAUiH,UAAU8lB,oBAAsB,SAAUjvB,EAAOe,GAI1D,OAHAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7BoC,KAAKqG,uBAAwB1H,EAA7BqB,CAAwCpC,EAChD,EAWAkC,EAAUgtB,YACVhtB,EAAUiH,UAAU+lB,YAAc,SAAUlvB,EAAOe,GAIlD,OAHAM,EAA2BrB,EAAO,SAClC8K,EAA6B9K,EAAO,SAE7BoC,KAAK4S,aAAcjU,EAAnBqB,CAA8BpC,EACtC,EAKAkC,EAAUkI,+BAAiCD,EAC3CjI,EAAUsD,uBAAyBD,EACnCrD,EAAUsI,gCAAkCD,EAC5CrI,EAAUwD,eAAiBD,EAC3BvD,EAAUwI,cAAgBD,EAC1BvI,EAAUoI,eAAiBD,EAC3BnI,EAAU2I,qBAAuBD,EACjC1I,EAAUuC,WAAaoB,EACvB3D,EAAU8D,6BAA+BD,EACzC7D,EAAU6I,6BAA+BD,EAElC5I,CAKP,GApqDY,sDC1BZ,UAqBE,EAAO,CACN,SACA,SACA,SACA,UACE,EAUG,SAAU3D,EAAM2D,GAExB,IAMIitB,EANAvpB,EAAc1D,EAAUsB,aAC3B3C,EAAeqB,EAAU4C,cACzBgB,EAAwB5D,EAAU6C,uBAClC1D,EAA4Ba,EAAU8C,2BACtCzD,EAAwBW,EAAUmD,uBAClCY,EAAmC/D,EAAUkD,kCAG9C+pB,EAAc,WACd,aAEA,IAEIC,EAAqB,SAAUC,GAAO,GAAI1uB,MAAMC,QAAQyuB,GAAM,CAAE,IAAK,IAAIjrB,EAAI,EAAGkrB,EAAO3uB,MAAM0uB,EAAIpvB,QAASmE,EAAIirB,EAAIpvB,OAAQmE,IAAKkrB,EAAKlrB,GAAKirB,EAAIjrB,GAAI,OAAOkrB,CAAM,CAAS,OAAO3uB,MAAMoW,KAAKsY,EAAQ,EAEjME,EAAkB,SAAUC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,oCAAwC,EAE3JC,EAAe,WAAe,SAASC,EAAiBC,EAAQC,GAAS,IAAK,IAAI1rB,EAAI,EAAGA,EAAI0rB,EAAM7vB,OAAQmE,IAAK,CAAE,IAAI2rB,EAAaD,EAAM1rB,GAAI2rB,EAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,UAAWF,IAAYA,EAAWG,UAAW,GAAM5kB,OAAOkF,eAAeqf,EAAQE,EAAW/oB,IAAK+oB,EAAa,CAAE,CAAE,OAAO,SAAUN,EAAaU,EAAYC,GAAiJ,OAA9HD,GAAYP,EAAiBH,EAAYtmB,UAAWgnB,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,CAAa,CAAI,CAA/hB,GAoBfY,EAAS,WACT,SAASA,IACLd,EAAgBntB,KAAMiuB,EAC1B,CAwEA,OAtEAV,EAAaU,EAAQ,CAAC,CAClBrpB,IAAK,QACLhH,MAAO,SAAeswB,GAClB,IAAIC,EAAQnuB,KAEZ,MAAa,mBAATkuB,EACO,mBACG,YAATA,EACM,kBACG,oBAATA,GACDluB,KAAKouB,GAAK,EACH,gBAEJF,EAAK3xB,QAAQ,mBAAmB,SAAU8xB,EAAGC,EAAKC,GACrD,IAAIC,EAAKF,EAAM,IAEf,OADAH,EAAMK,GAAM,EACLD,EAAQ,IAAMC,EAAKA,CAC9B,IAAGjyB,QAAQ,gBAAgB,SAAU8xB,GAEjC,OADAF,EAAME,GAAK,EACJA,CACX,IAAG9xB,QAAQ,oBAAoB,SAAU8xB,EAAGC,EAAKG,GAC7C,IAAID,EAAKF,EAAMG,EAEf,OADAN,EAAMK,GAAM,EACLA,CACX,IAAGjyB,QAAQ,YAAa,YAAYA,QAAQ,mCAAmC,SAAU8xB,EAAGK,EAAIH,EAAOna,GACnG,MAAU,YAANia,EAAwB,qBACxBE,EAAcG,EAAKta,EAAErO,MAAM,KAAK/E,KAAK,OAAS0tB,GAC3C,IAAMA,EAAKta,EAAErO,MAAM,KAAK/E,KAAK,OAAS0tB,GAAM,GACvD,IAAGnyB,QAAQ,qCAAqC,SAAU8xB,EAAGC,EAAKC,EAAOI,EAAIC,GACzE,OAAIC,OAAOF,GAAM,IAAME,OAAOD,GACtBL,EAAmBD,EAAM,OAASK,EAAK,OAASL,EAAM,OAASM,EAC5D,IAAMN,EAAM,OAASK,EAAK,OAASL,EAAM,OAASM,EAAK,IAE9DL,EAAc,IAAMD,EAAM,MAAQK,EAAK,OAASL,EAAM,MAAQM,EAAK,IAC3D,MAARN,GACAH,EAAMW,GAAK,EAAS,eAAiBH,EAAK,YAAcC,EAAK,KAE1D,IAAMN,EAAM,OAASK,EAAK,OAASL,EAAM,OAASM,EAAK,GAClE,IAAGryB,QAAQ,SAAU,QAAQA,QAAQ,QAAS,QAAQA,QAAQ,OAAQ,OAC1E,GACD,CACCqI,IAAK,OACLhH,MAAO,SAAWmxB,GACd,SAASC,IACL,OAAOD,EAAM7uB,MAAMF,KAAMlD,UAC7B,CAMA,OAJAkyB,EAAKrtB,SAAW,WACZ,OAAOotB,EAAMptB,UACjB,EAEOqtB,CACV,CAVM,EAUJ,WACC,IAAIA,EAAO,GAOX,IAAK,IAAI1S,KANLtc,KAAKgC,GAAGgtB,EAAKlxB,KAAK,aAClBkC,KAAKyY,GAAKzY,KAAKivB,IAAGD,EAAKlxB,KAAK,kBAC5BkC,KAAKkb,GAAG8T,EAAKlxB,KAAK,uCAClBkC,KAAKivB,GAAGD,EAAKlxB,KAAK,gBAClBkC,KAAKouB,IAAIY,EAAKlxB,KAAK,eACnBkC,KAAK8uB,IAAM9uB,KAAKkvB,KAAOlvB,KAAKmvB,OAAMH,EAAKlxB,KAAK,0BAClCkC,KACV,GAAI,SAAShB,KAAKsd,GAAI,CAClB,IAAI8S,EAAc,MAAT9S,EAAE,GAAa,aAAeA,EAAE,GACzC0S,EAAKlxB,KAAUwe,EAAI,MAAQ8S,EAAK,WAAa9S,EAAE5M,OAAO,GAAG7R,OAAS,IACtE,CACH,OAAKmxB,EAAKnxB,OACJ,OAAS,CAAC,4BAA8BomB,OAAO+K,GAAMhuB,KAAK,MADvC,EAE9B,OAGGitB,CACV,CA5EY,GAgFTlB,EAAa,WACb,SAASA,EAAW1U,GAChB,IAAIgX,OAAwBnwB,IAAjBpC,UAAU,GAAmBiwB,EAAajwB,UAAU,GAE3DwyB,EAAYD,EAAKC,UACjBC,EAAWF,EAAKE,SAIpB,GAFApC,EAAgBntB,KAAM+sB,IAEjBuC,IAAcC,EAAU,MAAM,IAAI/xB,MAAM,2CAU7C,OATAwC,KAAKqY,GAAKA,EACVrY,KAAKwvB,WAAa,CAAEC,SAAU,GAAIC,QAAS,IAC3C1vB,KAAK2vB,OAAS,IAAI1B,EAElBjuB,KAAKqB,GAAKrB,KAAK4vB,cAAcN,EAAWC,GACxCvvB,KAAKqB,GAAGwuB,KAAO7vB,KACfA,KAAKqB,GAAGmuB,WAAaxvB,KAAKwvB,WAE1BxvB,KAAKqB,GAAGM,SAAW3B,KAAK8vB,WAAWC,KAAK/vB,MACjCA,KAAKqB,EAChB,CA6EA,OA3EAksB,EAAaR,EAAY,CAAC,CACtBnoB,IAAK,UACLhH,MAAO,SAAiBD,EAAMqyB,GAC1B,IAnIa/C,EAmITgD,EAAQ,GACRC,EAAQnD,EAAWmD,MAAMvyB,GAAMqC,KAAKqY,IACxC,IAAK6X,EAAO,CACR,GAAIF,EAAK,MAAM,IAAIxyB,MAAM,WAAawC,KAAKqY,GAAK,KAAO1a,EAAO,oBAE9D,OADAqC,KAAKwvB,WAAW7xB,GAAQ,CAAC,SAClB,SACX,CACA,IAAK,IAAIomB,KAAKmM,EAAO,CACjB,IAAIC,EAAsBD,EAAMnM,GAAGqM,OAAOrqB,MAAM,WAE5CsqB,GA7IKpD,EA6I2BkD,EA7Ib5xB,MAAMC,QAAQyuB,GAAOA,EAAM1uB,MAAMoW,KAAKsY,IA+IzDiB,EAAOmC,EAAqB,GAE5BC,GADWD,EAAqBtzB,MAAM,GAChCgnB,EAAExnB,QAAQ,oBAAqB,KACrC2xB,GAAM+B,EAAMnyB,KAAK,CAACkC,KAAK2vB,OAAOvW,MAAM8U,GAAOoC,GAEnD,CAIA,OAHAtwB,KAAKwvB,WAAW7xB,GAAQsyB,EAAMlvB,KAAI,SAAUwvB,GACxC,OAAOA,EAAE,EACb,IAAGtM,OAAO,SACW,IAAjBgM,EAAMpyB,OACC,IAAMoyB,EAAM,GAAG,GAAK,QAAWA,EAAM,GAAG,GAAK,cAE7C,GAAGhM,OAAO+I,EAAmBiD,EAAMlvB,KAAI,SAAUwvB,GACpD,MAAO,IAAMA,EAAE,GAAK,QAAWA,EAAE,GAAK,GAC1C,KAAK,CAAC,YAAcvvB,KAAK,aAEjC,GACD,CACC4D,IAAK,gBACLhH,MAAO,SAAuB0xB,EAAWC,GACrC,IAAIiB,EAASxwB,KAKTywB,EAAe,SAAc3uB,GACzB,OAAQ,KAAOA,EAAM,KAAKvF,QAAQ,oBAAqB,eAC3D,EAFAk0B,EAGM,SAAc3uB,GAChB,OAAQ,KAAOA,EAAM,KAAKvF,QAAQ,0BAA2B,mBACjE,EACA2xB,EAAO,CAACqB,GAAY,CAAC,WAAYD,GAAYA,GAAa,CAAC,YAAY,IAAOvuB,KATpE,SAAiBwvB,GAC3B,OAAOA,GAAKA,EAAE,GAAK,UAAY,oBAAsBC,EAAOnM,QAAQnkB,MAAMswB,EAAQxD,EAAmBuD,IAAM,EAC/G,IAO+FxvB,IAAI0vB,GAC/FC,EAAO,CAACD,EAAUzwB,KAAK2vB,OAAOX,SAAS/K,OAAO+I,EAAmBkB,IAAOltB,KAAK,MAAMzE,QAAQ,SAAU,IAAIA,QAAQ,mBAAoB,IAEzI,OAAO,IAAIsoB,SADA0K,GAAYD,EAAY,SAAW,IACpBoB,EAC9B,GACD,CACC9rB,IAAK,aACLhH,MAAO,SAAoBpB,GACvB,OAAOqoB,SAAS9d,UAAUpF,SAAS3E,KAAKgD,KAAKqB,IAAI9E,QAAQ,mBAAoBC,EAAO,YAAcA,EAAO,YAAYD,QAAQ,SAAU,GAC3I,IACA,CAAC,CACDqI,IAAK,OACLhH,MAAO,WACH,IAAK,IAAI+yB,EAAO7zB,UAAUe,OAAQG,EAAOO,MAAMoyB,GAAO1yB,EAAO,EAAGA,EAAO0yB,EAAM1yB,IACzED,EAAKC,GAAQnB,UAAUmB,GAW3B,OARAD,EAAKf,SAAQ,SAAU0C,GACnB,IAAIrD,EAAOqD,GAAQA,EAAK2E,cAAgB,KACxC,IAAKhI,EAAM,MAAM,IAAIkB,MAAM,wCAC3BuvB,EAAWmD,MAAQ,CACfT,SAAUnzB,EAAK,0BAA4BywB,EAAWmD,MAAMT,SAC5DC,QAASpzB,EAAK,yBAA2BywB,EAAWmD,MAAMR,QAElE,IACO3C,CACX,KAGGA,CACV,CAlGgB,GA2GjB,OALAA,EAAWuC,WAAY,EACvBvC,EAAWwC,UAAW,EACtBxC,EAAWmD,MAAQ,CAAET,SAAU,CAAC,EAAGC,QAAS,CAAC,GAGtC3C,CACP,CAzNa,GA6Nb,IAAIppB,EAA8B,SAAU/F,EAAOpB,GAClD2C,EACCvB,EACApB,OACU0C,IAAVtB,GAAwC,iBAAVA,EAC9B,SAEF,EAgGA,OA3DAkC,EAAU4H,OACV5H,EAAUiH,UAAUW,OAAS,SAAU9J,EAAOe,GAG7C,OAFAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAC7BoC,KAAKsG,gBAAiB3H,EAAtBqB,CAAiCpC,EACzC,EAcAkC,EAAUwG,gBACVxG,EAAUiH,UAAUT,gBAAkB,SAAU3H,GAC/C,IAAIX,EAAM2B,EAAMwjB,EAAWzb,EAAQT,EAAUtJ,EArDEC,EAuD/CiG,EAAkClF,EAAS,WAE3CA,EAAUA,GAAW,CAAC,EACtBgB,EAAOK,KAAKL,KAEZ3B,EAAO,CAAEW,GACThB,EAAOgB,EAAQhB,MAAQ,WA7DwBC,EA+Dde,EAAQhB,KA9DzCwB,EACCvB,EA6D8C,oBA3DpCsB,IAAVtB,GAAiC,aAAVA,GAAkC,YAAVA,EAC/C,kCA4DD8F,EAAuB/D,GAEvBwjB,EAAqB,YAATxlB,EAEZgC,EAAKwH,GAAI,MAAO1I,GAChB,IACCkB,EAAK2E,aAAa,CAAE,gBAAkB3G,EAAM,cAG7C,CAFE,QACDgC,EAAK0H,IAAK,MAAO5I,EAClB,CAcA,OAZAsuB,EAAWmD,MAAQ,CAAC,EACpBnD,EAAWmD,MAAOvyB,GAASgC,EAAK2E,aAAc,gBAAkB3G,GAOhEsJ,EAxEuB,SAAUS,GACjC,OAAO,SAA0B9J,GAIhC,OAHAqB,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7B8J,EAAQ9J,EAChB,CACD,CAiEYgzB,CALXlpB,EAAS,IAAIqlB,EAAYptB,EAAKrC,WAAWuzB,SAAU,CAClD,SAAY1N,EACZ,WAAcA,KAKf3f,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAES,IAE9BT,CACR,EAEOnH,CAKP,OA7VY,2DC1BZ,UAqBE,EAAO,CACN,SACA,SACA,SACA,SACA,SACA,eACS,0BAAP,EAUG,SAAU3D,EAAM2D,GAExB,IAAI1D,EAAgB0D,EAAUO,eAC7BmD,EAAc1D,EAAUsB,aACxB3C,EAAeqB,EAAU4C,cACzBgB,EAAwB5D,EAAU6C,uBAClC1D,EAA4Ba,EAAU8C,2BACtC8F,EAA8B5I,EAAU6I,6BACxChF,EAA8B7D,EAAU8D,6BAqCrCktB,EAA0B,SAAUzZ,EAAiB/Q,EAAiBC,GACzE,OAAO,SAAgC3I,GAItC,OAHAqB,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAxBb,SAAUA,EAAOyZ,EAAiB/Q,EAAiBC,GAE3E,IACClK,EAAUkK,EAAY,iBAAmB3I,GAE1C,OAAKvB,IASLA,GALeuB,GAAS,EAAI2I,EAAY,0BACvCA,EAAY,6BAIW,6BAA+BD,EAFvD1I,EAAQsE,KAAKC,IAAKvE,KAGXxB,EAAeC,EAAS,CAAEgb,EAAiBzZ,KACnD,CAUSmzB,CAAoBnzB,EAAOyZ,EAAiB/Q,EAAiBC,EACrE,CAED,EA0GA,OAjDAzG,EAAUkxB,mBACVlxB,EAAUiH,UAAUiqB,mBAAqB,SAAUpzB,EAAOuS,EAAMxR,GAI/D,OAHAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7BoC,KAAKixB,sBAAuB9gB,EAAMxR,EAAlCqB,CAA6CpC,EACrD,EAaAkC,EAAUmxB,sBACVnxB,EAAUiH,UAAUkqB,sBAAwB,SAAU9gB,EAAMxR,GAC3D,IAAIX,EAAM2B,EAAM0X,EAAiB/Q,EAAiBC,EAAYU,EAE9DhI,EAA2BkR,EAAM,QACjCzH,EAA6ByH,EAAM,QAEnCxQ,EAAOK,KAAKL,KAGZ3B,EAAO,CAAEmS,EAFTxR,EAAUA,GAAW,CAAC,GAItB+E,EAAuB/D,GAEvBA,EAAKwH,GAAI,MAAO1I,GAChB,IACC8H,EA3E2B,SAAU4J,EAAMxQ,EAAMhB,GAElD,IACC8I,EAAKlB,EAAY3B,EADdssB,EAAOvyB,EAAQuyB,KAYnB,IAAMtsB,KATDssB,IACJ/gB,EAAOA,EAAO,IAAM+gB,GAIrB3qB,EAAa,CACZ,4BAFDkB,EAAM9H,EAAKoF,KAAM,CAAE,QAAS,SAAUoL,KAEJ,4BACjC,yBAA0B1I,EAAK,2BAEnBA,EACPA,EAAI2b,eAAgBxe,IAChB,2BAA2BlD,KAAMkD,KAExC2B,EAAY3B,GAAQ6C,EAAK7C,IAK5B,OAAO2B,CACR,CAmDe4qB,CAAwBhhB,EAAMxQ,EAAMhB,EAGlD,CAFE,QACDgB,EAAK0H,IAAK,MAAO5I,EAClB,CAQA,OAPA4Y,EAAkBrX,KAAKqX,gBAAiB1Y,GACxC2H,EAAkBtG,KAAKsG,kBAEvBW,EAAW6pB,EAAyBzZ,EAAiB/Q,EAAiBC,GAEtE/C,EAAaxF,EAAM2B,EAAMsH,EAAU,CAAEoQ,EAAiB/Q,EAAiBC,IAEhEU,CACR,EAEOnH,CAKP,GA9KY,sDC5BZ,UAqBE,EAAO,CACN,SACA,SACA,SACA,eACS,0BAAP,EAUG,SAAU3D,EAAM2D,GAExB,IAAI1D,EAAgB0D,EAAUO,eAC7BmD,EAAc1D,EAAUsB,aACxBnC,EAA4Ba,EAAU8C,2BACtCiB,EAAmC/D,EAAUkD,kCAC7CW,EAA8B7D,EAAU8D,6BACxC8E,EAA8B5I,EAAU6I,6BAoDrCyoB,EAAkB,SAAU/Z,EAAiB/Q,EAAiB+qB,GACjE,OAAO,SAAwBzzB,GAI9B,OAHAqB,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SA/BrB,SAAUA,EAAOyZ,EAAiB/Q,EAAiB+qB,GACnE,IAA8DC,EAAUC,EACvEC,EAAgB/F,EAASgG,EAAmBp1B,EAASq1B,EAAaC,EAD/DC,EAAsBP,EAAeO,oBAQzC,OALAP,EAAiBA,EAAeA,eAChCG,EAAiBna,EAAiBzZ,GAClC8zB,EAAcprB,EAAiB1I,GAG1ByzB,aAA0B9yB,OAC9BgzB,EAAqBF,EAAgB,GAErCM,GADAF,EAAoBJ,EAAgB,IACJjO,eAAgB,OAAU,MAAQ,QAElEkO,EAAWl1B,EAAem1B,EAAoBG,GAAe,CAAEF,IAC/D/F,EAAUrvB,EAAeq1B,EAAmBE,GAAe,CAAE,KAAOvB,OAE7Dh0B,EAAew1B,EAAqB,CAAEN,EAAU7F,MAGxDpvB,EAAUg1B,EAAgBK,GAEnBt1B,EAAeC,EAAS,CAAEm1B,IAClC,CAUSK,CAAYj0B,EAAOyZ,EAAiB/Q,EAAiB+qB,EAC7D,CAED,EAUIS,EAAiB,CAAE,eAAgB,QAAS,OAAQ,UAAW,WAAY,SAAU,OAAQ,QACjG,WAAY,QAAS,cAAe,UAyDpC,IAAIjyB,EAAM,SAAUsQ,EAAM+gB,EAAMvxB,GAC/B,IAAImP,EAkBJ,GAfAqB,EAAOA,EAAK5T,QAAS,KAAM,SAG3B,CAAE,IAAK0nB,OAAQ6N,GAAiBhzB,MAAK,SAAUizB,GAC9C,OAAOjjB,EAAMnP,EAAKoF,KAAK,CACtB,QACAmsB,EACAa,EAASl0B,OAASk0B,EAAW,IAAM5hB,EAAOA,GAE5C,KAGArB,EApED,SAA6BxS,GAC5B,IAAIgX,EAAK0e,EAET,GAAK11B,EAEJ,IAAM01B,KADN1e,EAAM,CAAC,EACchX,EACpBgX,EAAK0e,EAAYz1B,QAAS,qBAAsB,KAASD,EAAM01B,GAIjE,OAAO1e,CACR,CAyDO2e,CAAoBnjB,MAGb,QAAY9P,KAAMmR,KAO9BA,EAAOA,EAAKpK,MAAO,UACnB+I,EAAMqB,EAAKpP,KAAI,SAAUoP,GACxB,OAAOtQ,EAAKsQ,EAAM+gB,EAAMvxB,EACzB,KACW,IAAQmP,EAAK,IAKzB,OAAOA,CACR,EAEIojB,EAAUryB,EAsFd,OA3CAC,EAAUqyB,WACVryB,EAAUiH,UAAUorB,WAAa,SAAUv0B,EAAOuS,EAAMxR,GAIvD,OAHAM,EAA2BrB,EAAO,SAClC+F,EAA6B/F,EAAO,SAE7BoC,KAAKoyB,cAAejiB,EAAMxR,EAA1BqB,CAAqCpC,EAC7C,EAaAkC,EAAUsyB,cACVtyB,EAAUiH,UAAUqrB,cAAgB,SAAUjiB,EAAMxR,GACnD,IAAIX,EAAYqZ,EAAiB/Q,EAAiBW,EAAUV,EAmB5D,OAjBAtH,EAA2BkR,EAAM,QACjCzH,EAA6ByH,EAAM,QAEnCtM,EAAkClF,EAAS,WAI3CX,EAAO,CAAEmS,EAFTxR,EAAUA,GAAW,CAAC,GAItB4H,EA3DoB,SAAU4J,EAAM+gB,EAAMvxB,GAM1C,MAAO,CACNiyB,oBAJqBjyB,EAAKoF,KAAM,CAAE,QAASmsB,EAAM,4BAKjDG,eAJgBa,EAAS/hB,EAAM+gB,EAAMvxB,GAMvC,CAiDc0xB,CAAgBlhB,EADtBxR,EAAQuyB,MAAQ,OACkBlxB,KAAKL,MAE9C0X,EAAkB1Y,EAAQ0Y,iBAAmBrX,KAAKqX,kBAClD/Q,EAAkBtG,KAAKsG,kBACvBW,EAAWmqB,EAAiB/Z,EAAiB/Q,EAAiBC,GAE9D/C,EAAaxF,EAAMgC,KAAKL,KAAMsH,EAAU,CAAEoQ,EAAiB/Q,EAAiBC,IAErEU,CACR,EAEOnH,CAKP,GAlRY,gDCbZuyB,EAAOC,QAAU,EAAjB,OAGA,EAAS,OACT,EAAS,OACT,EAAS,OAGT,EAAS,OACT,EAAS,OAGT,EAAS,OACT,EAAS","sources":["webpack://servicemanagement.app/./node_modules/globalize/dist/globalize.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/currency.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/date.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/message.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/number.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/plural.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/relative-time.js","webpack://servicemanagement.app/./node_modules/globalize/dist/globalize/unit.js","webpack://servicemanagement.app/./node_modules/globalize/dist/node-main.js"],"sourcesContent":["/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"cldr/event\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ) );\n\t} else {\n\n\t\t// Global\n\t\troot.Globalize = factory( root.Cldr );\n\t}\n}( this, function( Cldr ) {\n\n\n/**\n * A toString method that outputs meaningful values for objects or arrays and\n * still performs as fast as a plain string in case variable is string, or as\n * fast as `\"\" + number` in case variable is a number.\n * Ref: http://jsperf.com/my-stringify\n */\nvar toString = function( variable ) {\n\treturn typeof variable === \"string\" ? variable : ( typeof variable === \"number\" ? \"\" +\n\t\tvariable : JSON.stringify( variable ) );\n};\n\n\n\n\n/**\n * formatMessage( message, data )\n *\n * @message [String] A message with optional {vars} to be replaced.\n *\n * @data [Array or JSON] Object with replacing-variables content.\n *\n * Return the formatted message. For example:\n *\n * - formatMessage( \"{0} second\", [ 1 ] ); // 1 second\n *\n * - formatMessage( \"{0}/{1}\", [\"m\", \"s\"] ); // m/s\n *\n * - formatMessage( \"{name} <{email}>\", {\n * name: \"Foo\",\n * email: \"bar@baz.qux\"\n * }); // Foo \n */\nvar formatMessage = function( message, data ) {\n\n\t// Replace {attribute}'s\n\tmessage = message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( name ) {\n\t\tname = name.replace( /^{([^}]*)}$/, \"$1\" );\n\t\treturn toString( data[ name ] );\n\t});\n\n\treturn message;\n};\n\n\n\n\nvar objectExtend = function() {\n\tvar destination = arguments[ 0 ],\n\t\tsources = [].slice.call( arguments, 1 );\n\n\tsources.forEach(function( source ) {\n\t\tvar prop;\n\t\tfor ( prop in source ) {\n\t\t\tdestination[ prop ] = source[ prop ];\n\t\t}\n\t});\n\n\treturn destination;\n};\n\n\n\n\nvar createError = function( code, message, attributes ) {\n\tvar error;\n\n\tmessage = code + ( message ? \": \" + formatMessage( message, attributes ) : \"\" );\n\terror = new Error( message );\n\terror.code = code;\n\n\tobjectExtend( error, attributes );\n\n\treturn error;\n};\n\n\n\n\n/**\n * Pushes part to parts array, concat two consecutive parts of the same type.\n */\nvar partsPush = function( parts, type, value ) {\n\n\t\t// Concat two consecutive parts of same type\n\t\tif ( parts.length && parts[ parts.length - 1 ].type === type ) {\n\t\t\tparts[ parts.length - 1 ].value += value;\n\t\t\treturn;\n\t\t}\n\n\t\tparts.push( { type: type, value: value } );\n};\n\n\n\n\n/**\n * formatMessage( message, data )\n *\n * @message [String] A message with optional {vars} to be replaced.\n *\n * @data [Array or JSON] Object with replacing-variables content.\n *\n * Return the formatted message. For example:\n *\n * - formatMessage( \"{0} second\", [ 1 ] );\n * > [{type: \"variable\", value: \"1\", name: \"0\"}, {type: \"literal\", value: \" second\"}]\n *\n * - formatMessage( \"{0}/{1}\", [\"m\", \"s\"] );\n * > [\n * { type: \"variable\", value: \"m\", name: \"0\" },\n * { type: \"literal\", value: \" /\" },\n * { type: \"variable\", value: \"s\", name: \"1\" }\n * ]\n */\nvar formatMessageToParts = function( message, data ) {\n\n\tvar lastOffset = 0,\n\t\tparts = [];\n\n\t// Create parts.\n\tmessage.replace( /{[0-9a-zA-Z-_. ]+}/g, function( nameIncludingBrackets, offset ) {\n\t\tvar name = nameIncludingBrackets.slice( 1, -1 );\n\t\tpartsPush( parts, \"literal\", message.slice( lastOffset, offset ));\n\t\tpartsPush( parts, \"variable\", data[ name ] );\n\t\tparts[ parts.length - 1 ].name = name;\n\t\tlastOffset += offset + nameIncludingBrackets.length;\n\t});\n\n\t// Skip empty ones such as `{ type: 'literal', value: '' }`.\n\treturn parts.filter(function( part ) {\n\t\treturn part.value !== \"\";\n\t});\n};\n\n\n\n\n/**\n * Returns joined parts values.\n */\nvar partsJoin = function( parts ) {\n\treturn parts.map( function( part ) {\n\t\treturn part.value;\n\t}).join( \"\" );\n};\n\n\n\n\nvar runtimeStringify = function( args ) {\n\treturn JSON.stringify( args, function( _key, value ) {\n\t\tif ( value && value.runtimeKey ) {\n\t\t\treturn value.runtimeKey;\n\t\t}\n\t\treturn value;\n\t} );\n};\n\n\n\n\n// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\nvar stringHash = function( str ) {\n\treturn [].reduce.call( str, function( hash, i ) {\n\t\tvar chr = i.charCodeAt( 0 );\n\t\thash = ( ( hash << 5 ) - hash ) + chr;\n\t\treturn hash | 0;\n\t}, 0 );\n};\n\n\n\n\nvar runtimeKey = function( fnName, locale, args, argsStr ) {\n\tvar hash;\n\targsStr = argsStr || runtimeStringify( args );\n\thash = stringHash( fnName + locale + argsStr );\n\treturn hash > 0 ? \"a\" + hash : \"b\" + Math.abs( hash );\n};\n\n\n\n\nvar functionName = function( fn ) {\n\tif ( fn.name !== undefined ) {\n\t\treturn fn.name;\n\t}\n\n\t// fn.name is not supported by IE.\n\tvar matches = /^function\\s+([\\w\\$]+)\\s*\\(/.exec( fn.toString() );\n\n\tif ( matches && matches.length > 0 ) {\n\t\treturn matches[ 1 ];\n\t}\n};\n\n\n\n\nvar runtimeBind = function( args, cldr, fn, runtimeArgs ) {\n\n\tvar argsStr = runtimeStringify( args ),\n\t\tfnName = functionName( fn ),\n\t\tlocale = cldr.locale;\n\n\t// If name of the function is not available, this is most likely due to uglification,\n\t// which most likely means we are in production, and runtimeBind here is not necessary.\n\tif ( !fnName ) {\n\t\treturn fn;\n\t}\n\n\tfn.runtimeKey = runtimeKey( fnName, locale, null, argsStr );\n\n\tfn.generatorString = function() {\n\t\treturn \"Globalize(\\\"\" + locale + \"\\\").\" + fnName + \"(\" + argsStr.slice( 1, -1 ) + \")\";\n\t};\n\n\tfn.runtimeArgs = runtimeArgs;\n\n\treturn fn;\n};\n\n\n\n\nvar validate = function( code, message, check, attributes ) {\n\tif ( !check ) {\n\t\tthrow createError( code, message, attributes );\n\t}\n};\n\n\n\n\nvar alwaysArray = function( stringOrArray ) {\n\treturn Array.isArray( stringOrArray ) ? stringOrArray : stringOrArray ? [ stringOrArray ] : [];\n};\n\n\n\n\nvar validateCldr = function( path, value, options ) {\n\tvar skipBoolean;\n\toptions = options || {};\n\n\tskipBoolean = alwaysArray( options.skip ).some(function( pathRe ) {\n\t\treturn pathRe.test( path );\n\t});\n\n\tvalidate( \"E_MISSING_CLDR\", \"Missing required CLDR content `{path}`.\", value || skipBoolean, {\n\t\tpath: path\n\t});\n};\n\n\n\n\nvar validateDefaultLocale = function( value ) {\n\tvalidate( \"E_DEFAULT_LOCALE_NOT_DEFINED\", \"Default locale has not been defined.\",\n\t\tvalue !== undefined, {} );\n};\n\n\n\n\nvar validateParameterPresence = function( value, name ) {\n\tvalidate( \"E_MISSING_PARAMETER\", \"Missing required parameter `{name}`.\",\n\t\tvalue !== undefined, { name: name });\n};\n\n\n\n\n/**\n * range( value, name, minimum, maximum )\n *\n * @value [Number].\n *\n * @name [String] name of variable.\n *\n * @minimum [Number]. The lowest valid value, inclusive.\n *\n * @maximum [Number]. The greatest valid value, inclusive.\n */\nvar validateParameterRange = function( value, name, minimum, maximum ) {\n\tvalidate(\n\t\t\"E_PAR_OUT_OF_RANGE\",\n\t\t\"Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].\",\n\t\tvalue === undefined || value >= minimum && value <= maximum,\n\t\t{\n\t\t\tmaximum: maximum,\n\t\t\tminimum: minimum,\n\t\t\tname: name,\n\t\t\tvalue: value\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterType = function( value, name, check, expected ) {\n\tvalidate(\n\t\t\"E_INVALID_PAR_TYPE\",\n\t\t\"Invalid `{name}` parameter ({value}). {expected} expected.\",\n\t\tcheck,\n\t\t{\n\t\t\texpected: expected,\n\t\t\tname: name,\n\t\t\tvalue: value\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterTypeLocale = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\" || value instanceof Cldr,\n\t\t\"String or Cldr instance\"\n\t);\n};\n\n\n\n\n/**\n * Function inspired by jQuery Core, but reduced to our use case.\n */\nvar isPlainObject = function( obj ) {\n\treturn obj !== null && \"\" + obj === \"[object Object]\";\n};\n\n\n\n\nvar validateParameterTypePlainObject = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || isPlainObject( value ),\n\t\t\"Plain Object\"\n\t);\n};\n\n\n\n\nvar alwaysCldr = function( localeOrCldr ) {\n\treturn localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr( localeOrCldr );\n};\n\n\n\n\n// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions\nvar regexpEscape = function( string ) {\n\treturn string.replace( /([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\" );\n};\n\n\n\n\nvar stringPad = function( str, count, right ) {\n\tvar length;\n\tif ( typeof str !== \"string\" ) {\n\t\tstr = String( str );\n\t}\n\tfor ( length = str.length; length < count; length += 1 ) {\n\t\tstr = ( right ? ( str + \"0\" ) : ( \"0\" + str ) );\n\t}\n\treturn str;\n};\n\n\n\n\nfunction validateLikelySubtags( cldr ) {\n\tcldr.once( \"get\", validateCldr );\n\tcldr.get( \"supplemental/likelySubtags\" );\n}\n\n/**\n * [new] Globalize( locale|cldr )\n *\n * @locale [String]\n *\n * @cldr [Cldr instance]\n *\n * Create a Globalize instance.\n */\nfunction Globalize( locale ) {\n\tif ( !( this instanceof Globalize ) ) {\n\t\treturn new Globalize( locale );\n\t}\n\n\tvalidateParameterPresence( locale, \"locale\" );\n\tvalidateParameterTypeLocale( locale, \"locale\" );\n\n\tthis.cldr = alwaysCldr( locale );\n\n\tvalidateLikelySubtags( this.cldr );\n}\n\n/**\n * Globalize.load( json, ... )\n *\n * @json [JSON]\n *\n * Load resolved or unresolved cldr data.\n * Somewhat equivalent to previous Globalize.addCultureInfo(...).\n */\nGlobalize.load = function() {\n\n\t// validations are delegated to Cldr.load().\n\tCldr.load.apply( Cldr, arguments );\n};\n\n/**\n * Globalize.locale( [locale|cldr] )\n *\n * @locale [String]\n *\n * @cldr [Cldr instance]\n *\n * Set default Cldr instance if locale or cldr argument is passed.\n *\n * Return the default Cldr instance.\n */\nGlobalize.locale = function( locale ) {\n\tvalidateParameterTypeLocale( locale, \"locale\" );\n\n\tif ( arguments.length ) {\n\t\tthis.cldr = alwaysCldr( locale );\n\t\tvalidateLikelySubtags( this.cldr );\n\t}\n\treturn this.cldr;\n};\n\n/**\n * Optimization to avoid duplicating some internal functions across modules.\n */\nGlobalize._alwaysArray = alwaysArray;\nGlobalize._createError = createError;\nGlobalize._formatMessage = formatMessage;\nGlobalize._formatMessageToParts = formatMessageToParts;\nGlobalize._isPlainObject = isPlainObject;\nGlobalize._objectExtend = objectExtend;\nGlobalize._partsJoin = partsJoin;\nGlobalize._partsPush = partsPush;\nGlobalize._regexpEscape = regexpEscape;\nGlobalize._runtimeBind = runtimeBind;\nGlobalize._stringPad = stringPad;\nGlobalize._validate = validate;\nGlobalize._validateCldr = validateCldr;\nGlobalize._validateDefaultLocale = validateDefaultLocale;\nGlobalize._validateParameterPresence = validateParameterPresence;\nGlobalize._validateParameterRange = validateParameterRange;\nGlobalize._validateParameterTypePlainObject = validateParameterTypePlainObject;\nGlobalize._validateParameterType = validateParameterType;\n\nreturn Globalize;\n\n\n\n\n}));\n","/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tformatMessageToParts = Globalize._formatMessageToParts,\n\tnumberNumberingSystem = Globalize._numberNumberingSystem,\n\tnumberPattern = Globalize._numberPattern,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateParameterTypeCurrency = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\" && ( /^[A-Za-z]{3}$/ ).test( value ),\n\t\t\"3-letter currency code string as defined by ISO 4217\"\n\t);\n};\n\n\n\n\nvar currencyFormatterFn = function( currencyToPartsFormatter ) {\n\treturn function currencyFormatter( value ) {\n\t\treturn partsJoin( currencyToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * supplementalOverride( currency, pattern, cldr )\n *\n * Return pattern with fraction digits overriden by supplemental currency data.\n */\nvar currencySupplementalOverride = function( currency, pattern, cldr ) {\n\tvar digits,\n\t\tfraction = \"\",\n\t\tfractionData = cldr.supplemental([ \"currencyData/fractions\", currency ]) ||\n\t\t\tcldr.supplemental( \"currencyData/fractions/DEFAULT\" );\n\n\tdigits = +fractionData._digits;\n\n\tif ( digits ) {\n\t\tfraction = \".\" + stringPad( \"0\", digits ).slice( 0, -1 ) + fractionData._rounding;\n\t}\n\n\treturn pattern.replace( /\\.(#+|0*[0-9]|0+[0-9]?)/g, fraction );\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nvar currencyUnitPatterns = function( cldr ) {\n\treturn objectFilter( cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr )\n\t]), /^unitPattern/ );\n};\n\n\n\n\n/**\n * nameProperties( currency, cldr )\n *\n * Return number pattern with the appropriate currency code in as literal.\n */\nvar currencyNameProperties = function( currency, cldr ) {\n\tvar pattern = numberPattern( \"decimal\", cldr );\n\n\t// The number of decimal places and the rounding for each currency is not locale-specific. Those\n\t// values overridden by Supplemental Currency Data.\n\tpattern = currencySupplementalOverride( currency, pattern, cldr );\n\n\treturn {\n\t\tdisplayNames: objectFilter( cldr.main([\n\t\t\t\"numbers/currencies\",\n\t\t\tcurrency\n\t\t]), /^displayName/ ),\n\t\tpattern: pattern,\n\t\tunitPatterns: currencyUnitPatterns( cldr )\n\t};\n};\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from the category S\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotS = /[\\0-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF-\\u2043\\u2045-\\u2051\\u2053-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from categories S and Z\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Line_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Paragraph_Separator/symbols\" ) );\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotSAndZ = /[\\0-\\x1F!-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\x9F\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u167F\\u1681-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u2060-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3001-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * symbolProperties( currency, cldr )\n *\n * Return pattern replacing `¤` with the appropriate currency symbol literal.\n */\nvar currencySymbolProperties = function( currency, cldr, options ) {\n\tvar currencySpacing, pattern, symbol, symbolEntries,\n\t\tregexp = {\n\t\t\t\"[:digit:]\": /\\d/,\n\t\t\t\"[:^S:]\": regexpNotS,\n\t\t\t\"[[:^S:]&[:^Z:]]\": regexpNotSAndZ\n\t\t};\n\n\tif ( options.style === \"code\" ) {\n\t\tsymbol = currency;\n\t} else {\n\t\tsymbolEntries = [ \"symbol\" ];\n\n\t\t// If options.symbolForm === \"narrow\" was passed, prepend it.\n\t\tif ( options.symbolForm === \"narrow\" ) {\n\t\t\tsymbolEntries.unshift( \"symbol-alt-narrow\" );\n\t\t}\n\n\t\tsymbolEntries.some(function( symbolEntry ) {\n\t\t\treturn symbol = cldr.main([\n\t\t\t\t\"numbers/currencies\",\n\t\t\t\tcurrency,\n\t\t\t\tsymbolEntry\n\t\t\t]);\n\t\t});\n\t}\n\n\tcurrencySpacing = [ \"beforeCurrency\", \"afterCurrency\" ].map(function( position ) {\n\t\treturn cldr.main([\n\t\t\t\"numbers\",\n\t\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\t\t\"currencySpacing\",\n\t\t\tposition\n\t\t]);\n\t});\n\n\tpattern = cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\toptions.style === \"accounting\" ? \"accounting\" : \"standard\"\n\t]);\n\n\tpattern =\n\n\t\t// The number of decimal places and the rounding for each currency is not locale-specific.\n\t\t// Those values are overridden by Supplemental Currency Data.\n\t\tcurrencySupplementalOverride( currency, pattern, cldr )\n\n\t\t// Replace \"¤\" (\\u00A4) with the appropriate symbol literal.\n\t\t.split( \";\" ).map(function( pattern ) {\n\n\t\t\treturn pattern.split( \"\\u00A4\" ).map(function( part, i ) {\n\t\t\t\tvar currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ],\n\t\t\t\t\tsurroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ],\n\t\t\t\t\tinsertBetween = \"\";\n\n\t\t\t\t// For currencyMatch and surroundingMatch definitions, read [1].\n\t\t\t\t// When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency.\n\t\t\t\t// 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies\n\t\t\t\tcurrencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) );\n\t\t\t\tsurroundingMatch = surroundingMatch.test(\n\t\t\t\t\tpart.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, \"0\" )\n\t\t\t\t);\n\n\t\t\t\tif ( currencyMatch && part && surroundingMatch ) {\n\t\t\t\t\tinsertBetween = currencySpacing[ i ].insertBetween;\n\t\t\t\t}\n\n\t\t\t\treturn ( i ? insertBetween : \"\" ) + part + ( i ? \"\" : insertBetween );\n\t\t\t}).join( \"\\u00A4\" );\n\t\t}).join( \";\" );\n\n\treturn {\n\t\tpattern: pattern,\n\t\tsymbol: symbol\n\t};\n};\n\n\n\n\n/**\n * nameFormat( formattedNumber, pluralForm, properties )\n *\n * Return the appropriate name form currency format.\n */\nvar currencyNameFormat = function( formattedNumber, pluralForm, properties ) {\n\tvar displayName, unitPattern,\n\t\tparts = [],\n\t\tdisplayNames = properties.displayNames || {},\n\t\tunitPatterns = properties.unitPatterns;\n\n\tdisplayName = displayNames[ \"displayName-count-\" + pluralForm ] ||\n\t\tdisplayNames[ \"displayName-count-other\" ] ||\n\t\tdisplayNames.displayName ||\n\t\tproperties.currency;\n\tunitPattern = unitPatterns[ \"unitPattern-count-\" + pluralForm ] ||\n\t\tunitPatterns[ \"unitPattern-count-other\" ];\n\n\tformatMessageToParts( unitPattern, [ formattedNumber, displayName ]).forEach(function( part ) {\n\t\tif ( part.type === \"variable\" && part.name === \"0\" ) {\n\t\t\tpart.value.forEach(function( part ) {\n\t\t\t\tpartsPush( parts, part.type, part.value );\n\t\t\t});\n\t\t} else if ( part.type === \"variable\" && part.name === \"1\" ) {\n\t\t\tpartsPush( parts, \"currency\", part.value );\n\t\t} else {\n\t\t\tpartsPush( parts, \"literal\", part.value );\n\t\t}\n\t});\n\n\treturn parts;\n};\n\n\n\n\n/**\n * symbolFormat( parts, symbol )\n *\n * Return the appropriate symbol/account form format.\n */\nvar currencySymbolFormat = function( parts, symbol ) {\n\tparts.forEach(function( part ) {\n\t\tif ( part.type === \"currency\" ) {\n\t\t\tpart.value = symbol;\n\t\t}\n\t});\n\treturn parts;\n};\n\n\n\n\nvar currencyToPartsFormatterFn = function( numberToPartsFormatter, pluralGenerator, properties ) {\n\tvar fn;\n\n\t// Return formatter when style is \"name\".\n\tif ( pluralGenerator && properties ) {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\t\t\tvalidateParameterPresence( value, \"value\" );\n\t\t\tvalidateParameterTypeNumber( value, \"value\" );\n\t\t\treturn currencyNameFormat(\n\t\t\t\tnumberToPartsFormatter( value ),\n\t\t\t\tpluralGenerator( value ),\n\t\t\t\tproperties\n\t\t\t);\n\t\t};\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\t} else {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\n\t\t\t// 1: Reusing pluralGenerator argument, but in this case it is actually `symbol`\n\t\t\treturn currencySymbolFormat( numberToPartsFormatter( value ), pluralGenerator /* 1 */ );\n\t\t};\n\t}\n\n\treturn fn;\n};\n\n\n\n\n/**\n * objectOmit( object, keys )\n *\n * Return a copy of the object, filtered to omit the blacklisted key or array of keys.\n */\nvar objectOmit = function( object, keys ) {\n\tvar key,\n\t\tcopy = {};\n\n\tkeys = alwaysArray( keys );\n\n\tfor ( key in object ) {\n\t\tif ( keys.indexOf( key ) === -1 ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/numbers\\/currencies\\/[^/]+\\/symbol-alt-/,\n\t\t\t/supplemental\\/currencyData\\/fractions\\/[A-Za-z]{3}$/\n\t\t]\n\t});\n}\n\n/**\n * .currencyFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a function that formats a currency according to the given options and default/instance\n * locale.\n */\nGlobalize.currencyFormatter =\nGlobalize.prototype.currencyFormatter = function( currency, options ) {\n\tvar args, currencyToPartsFormatter, returnFn;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\targs = [ currency, options ];\n\n\tcurrencyToPartsFormatter = this.currencyToPartsFormatter( currency, options );\n\treturnFn = currencyFormatterFn( currencyToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ currencyToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .currencyToPartsFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a currency formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return a function that formats a currency to parts according to the given options\n * and the default/instance locale.\n */\nGlobalize.currencyToPartsFormatter =\nGlobalize.prototype.currencyToPartsFormatter = function( currency, options ) {\n\tvar args, cldr, numberToPartsFormatter, pluralGenerator, properties, returnFn, style;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ currency, options ];\n\tstyle = options.style || \"symbol\";\n\n\tvalidateDefaultLocale( cldr );\n\n\t// Get properties given style (\"symbol\" default, \"code\" or \"name\").\n\tcldr.on( \"get\", validateRequiredCldr );\n\ttry {\n\t\tproperties = ({\n\t\t\taccounting: currencySymbolProperties,\n\t\t\tcode: currencySymbolProperties,\n\t\t\tname: currencyNameProperties,\n\t\t\tsymbol: currencySymbolProperties\n\t\t}[ style ] )( currency, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t}\n\n\t// options = options minus style, plus raw pattern.\n\toptions = objectOmit( options, \"style\" );\n\toptions.raw = properties.pattern;\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\tif ( style === \"symbol\" || style === \"accounting\" || style === \"code\" ) {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\treturnFn = currencyToPartsFormatterFn( numberToPartsFormatter, properties.symbol );\n\n\t\truntimeBind( args, cldr, returnFn, [ numberToPartsFormatter, properties.symbol ] );\n\n\t// Return formatter when style is \"name\".\n\t} else {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\t\tpluralGenerator = this.plural !== undefined ?\n\t\t\tthis.pluralGenerator() :\n\t\t\tcreateErrorPluralModulePresence;\n\n\t\treturnFn = currencyToPartsFormatterFn(\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t);\n\n\t\truntimeBind( args, cldr, returnFn, [\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t]);\n\t}\n\n\treturn returnFn;\n};\n\n/**\n * .currencyParser( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Return the currency parser according to the given options and the default/instance locale.\n */\nGlobalize.currencyParser =\nGlobalize.prototype.currencyParser = function( /* currency, options */ ) {\n\n\t// TODO implement parser.\n\n};\n\n/**\n * .formatCurrency( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrency =\nGlobalize.prototype.formatCurrency = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyFormatter( currency, options )( value );\n};\n\n/**\n * .formatCurrencyToParts( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrencyToParts =\nGlobalize.prototype.formatCurrencyToParts = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyToPartsFormatter( currency, options )( value );\n};\n\n/**\n * .parseCurrency( value, currency [, options] )\n *\n * @value [String]\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]: See currencyFormatter.\n *\n * Return the parsed currency or NaN when value is invalid.\n */\nGlobalize.parseCurrency =\nGlobalize.prototype.parseCurrency = function( /* value, currency, options */ ) {\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar createError = Globalize._createError,\n\tcreateErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature,\n\tformatMessage = Globalize._formatMessage,\n\tisPlainObject = Globalize._isPlainObject,\n\tlooseMatching = Globalize._looseMatching,\n\tnumberNumberingSystemDigitsMap = Globalize._numberNumberingSystemDigitsMap,\n\tnumberSymbol = Globalize._numberSymbol,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\tregexpEscape = Globalize._regexpEscape,\n\tremoveLiteralQuotes = Globalize._removeLiteralQuotes,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidate = Globalize._validate,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\nvar validateParameterTypeDate = function( value, name ) {\n\tvalidateParameterType( value, name, value === undefined || value instanceof Date, \"Date\" );\n};\n\n\n\n\nvar createErrorInvalidParameterValue = function( name, value ) {\n\treturn createError( \"E_INVALID_PAR_VALUE\", \"Invalid `{name}` value ({value}).\", {\n\t\tname: name,\n\t\tvalue: value\n\t});\n};\n\n\n\n\n/**\n * Create a map between the skeleton fields and their positions, e.g.,\n * {\n * G: 0\n * y: 1\n * ...\n * }\n */\nvar validateSkeletonFieldsPosMap = \"GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx\".split( \"\" ).reduce(function( memo, item, i ) {\n\tmemo[ item ] = i;\n\treturn memo;\n}, {});\n\n\n\n\n/**\n * validateSkeleton( skeleton )\n *\n * skeleton: Assume `j` has already been converted into a localized hour field.\n */\nvar validateSkeleton = function validateSkeleton( skeleton ) {\n\tvar last,\n\n\t\t// Using easier to read variable.\n\t\tfieldsPosMap = validateSkeletonFieldsPosMap;\n\n\t// \"The fields are from the Date Field Symbol Table in Date Format Patterns\"\n\t// Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid characters.\n\tskeleton.replace( /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/, function( field ) {\n\t\tthrow createError(\n\t\t\t\"E_INVALID_OPTIONS\", \"Invalid field `{invalidField}` of skeleton `{value}`\",\n\t\t\t{\n\t\t\t\tinvalidField: field,\n\t\t\t\ttype: \"skeleton\",\n\t\t\t\tvalue: skeleton\n\t\t\t}\n\t\t);\n\t});\n\n\t// \"The canonical order is from top to bottom in that table; that is, yM not My\".\n\t// http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid order.\n\tskeleton.split( \"\" ).every(function( field ) {\n\t\tif ( fieldsPosMap[ field ] < last ) {\n\t\t\tthrow createError(\n\t\t\t\t\"E_INVALID_OPTIONS\", \"Invalid order `{invalidField}` of skeleton `{value}`\",\n\t\t\t\t{\n\t\t\t\t\tinvalidField: field,\n\t\t\t\t\ttype: \"skeleton\",\n\t\t\t\t\tvalue: skeleton\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tlast = fieldsPosMap[ field ];\n\t\treturn true;\n\t});\n};\n\n\n\n\n/**\n * Returns a new object created by using `object`'s values as keys, and the keys as values.\n */\nvar objectInvert = function( object, fn ) {\n\tfn = fn || function( object, key, value ) {\n\t\tobject[ value ] = key;\n\t\treturn object;\n\t};\n\treturn Object.keys( object ).reduce(function( newObject, key ) {\n\t\treturn fn( newObject, key, object[ key ] );\n\t}, {});\n};\n\n\n\n\n// Invert key and values, e.g., {\"e\": \"eEc\"} ==> {\"e\": \"e\", \"E\": \"e\", \"c\": \"e\"}.\nvar dateExpandPatternSimilarFieldsMap = objectInvert({\n\t\"e\": \"eEc\",\n\t\"L\": \"ML\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( field ) {\n\t\tobject[ field ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\nvar dateExpandPatternNormalizePatternType = function( character ) {\n\treturn dateExpandPatternSimilarFieldsMap[ character ] || character;\n};\n\n\n\n\nvar datePatternRe = ( /([a-z])\\1*|'([^']|'')+'|''|./ig );\n\n\n\n\nvar stringRepeat = function( str, count ) {\n\tvar i, result = \"\";\n\tfor ( i = 0; i < count; i++ ) {\n\t\tresult = result + str;\n\t}\n\treturn result;\n};\n\n\n\n\nfunction expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ) {\n\tvar i, j, bestMatchFormatParts, matchedType, matchedLength, requestedType,\n\t\trequestedLength, requestedSkeletonParts,\n\n\t\t// Using an easier to read variable.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\trequestedSkeletonParts = skeletonWithoutFractionalSeconds.match( datePatternRe );\n\tbestMatchFormatParts = bestMatchFormat.match( datePatternRe );\n\n\tfor ( i = 0; i < bestMatchFormatParts.length; i++ ) {\n\t\tmatchedType = bestMatchFormatParts[ i ].charAt( 0 );\n\t\tmatchedLength = bestMatchFormatParts[ i ].length;\n\t\tfor ( j = 0; j < requestedSkeletonParts.length; j++ ) {\n\t\t\trequestedType = requestedSkeletonParts[ j ].charAt( 0 );\n\t\t\trequestedLength = requestedSkeletonParts[ j ].length;\n\t\t\tif ( normalizePatternType( matchedType ) === normalizePatternType( requestedType ) &&\n\t\t\t\tmatchedLength < requestedLength\n\t\t\t) {\n\t\t\t\tbestMatchFormatParts[ i ] = stringRepeat( matchedType, requestedLength );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestMatchFormatParts.join( \"\" );\n}\n\n// See: http://www.unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\nvar dateExpandPatternAugmentFormat = function( requestedSkeleton, bestMatchFormat, decimalSeparator ) {\n\tvar countOfFractionalSeconds, fractionalSecondMatch, lastSecondIdx,\n\t\tskeletonWithoutFractionalSeconds;\n\n\tfractionalSecondMatch = requestedSkeleton.match( /S/g );\n\tcountOfFractionalSeconds = fractionalSecondMatch ? fractionalSecondMatch.length : 0;\n\tskeletonWithoutFractionalSeconds = requestedSkeleton.replace( /S/g, \"\" );\n\n\tbestMatchFormat = expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat );\n\n\tlastSecondIdx = bestMatchFormat.lastIndexOf( \"s\" );\n\tif ( lastSecondIdx !== -1 && countOfFractionalSeconds !== 0 ) {\n\t\tbestMatchFormat =\n\t\t\tbestMatchFormat.slice( 0, lastSecondIdx + 1 ) +\n\t\t\tdecimalSeparator +\n\t\t\tstringRepeat( \"S\", countOfFractionalSeconds ) +\n\t\t\tbestMatchFormat.slice( lastSecondIdx + 1 );\n\t}\n\treturn bestMatchFormat;\n};\n\n\n\n\nvar dateExpandPatternCompareFormats = function( formatA, formatB ) {\n\tvar a, b, distance, lenA, lenB, typeA, typeB, i, j,\n\n\t\t// Using easier to read variables.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\tif ( formatA === formatB ) {\n\t\treturn 0;\n\t}\n\n\tformatA = formatA.match( datePatternRe );\n\tformatB = formatB.match( datePatternRe );\n\n\tif ( formatA.length !== formatB.length ) {\n\t\treturn -1;\n\t}\n\n\tdistance = 1;\n\tfor ( i = 0; i < formatA.length; i++ ) {\n\t\ta = formatA[ i ].charAt( 0 );\n\t\ttypeA = normalizePatternType( a );\n\t\ttypeB = null;\n\t\tfor ( j = 0; j < formatB.length; j++ ) {\n\t\t\tb = formatB[ j ].charAt( 0 );\n\t\t\ttypeB = normalizePatternType( b );\n\t\t\tif ( typeA === typeB ) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ttypeB = null;\n\t\t\t}\n\t\t}\n\t\tif ( typeB === null ) {\n\t\t\treturn -1;\n\t\t}\n\t\tlenA = formatA[ i ].length;\n\t\tlenB = formatB[ j ].length;\n\t\tdistance = distance + Math.abs( lenA - lenB );\n\n\t\t// Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B;\n\t\t// H ≅ k ≅ h ≅ K; ...\n\t\tif ( a !== b ) {\n\t\t\tdistance += 1;\n\t\t}\n\n\t\t// Numeric (l<3) and text fields (l>=3) are given a larger distance from each other.\n\t\tif ( ( lenA < 3 && lenB >= 3 ) || ( lenA >= 3 && lenB < 3 ) ) {\n\t\t\tdistance += 20;\n\t\t}\n\t}\n\treturn distance;\n};\n\n\n\n\nvar dateExpandPatternGetBestMatchPattern = function( cldr, askedSkeleton ) {\n\tvar availableFormats, decimalSeparator, pattern, ratedFormats, skeleton,\n\t\tpath = \"dates/calendars/gregorian/dateTimeFormats/availableFormats\",\n\n\t\t// Using easier to read variables.\n\t\taugmentFormat = dateExpandPatternAugmentFormat,\n\t\tcompareFormats = dateExpandPatternCompareFormats;\n\n\tpattern = cldr.main([ path, askedSkeleton ]);\n\n\tif ( askedSkeleton && !pattern ) {\n\t\tavailableFormats = cldr.main([ path ]);\n\t\tratedFormats = [];\n\n\t\tfor ( skeleton in availableFormats ) {\n\t\t\tratedFormats.push({\n\t\t\t\tskeleton: skeleton,\n\t\t\t\tpattern: availableFormats[ skeleton ],\n\t\t\t\trate: compareFormats( askedSkeleton, skeleton )\n\t\t\t});\n\t\t}\n\n\t\tratedFormats = ratedFormats\n\t\t\t.filter( function( format ) {\n\t\t\t\treturn format.rate > -1;\n\t\t\t} )\n\t\t\t.sort( function( formatA, formatB ) {\n\t\t\t\treturn formatA.rate - formatB.rate;\n\t\t\t});\n\n\t\tif ( ratedFormats.length ) {\n\t\t\tdecimalSeparator = numberSymbol( \"decimal\", cldr );\n\t\t\tpattern = augmentFormat( askedSkeleton, ratedFormats[ 0 ].pattern, decimalSeparator );\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\n\n\n\n/**\n * expandPattern( options, cldr )\n *\n * @options [Object] if String, it's considered a skeleton. Object accepts:\n * - skeleton: [String] lookup availableFormat;\n * - date: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - time: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - datetime: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - raw: [String] For more info see datetime/format.js.\n *\n * @cldr [Cldr instance].\n *\n * Return the corresponding pattern.\n * Eg for \"en\":\n * - \"GyMMMd\" returns \"MMM d, y G\";\n * - { skeleton: \"GyMMMd\" } returns \"MMM d, y G\";\n * - { date: \"full\" } returns \"EEEE, MMMM d, y\";\n * - { time: \"full\" } returns \"h:mm:ss a zzzz\";\n * - { datetime: \"full\" } returns \"EEEE, MMMM d, y 'at' h:mm:ss a zzzz\";\n * - { raw: \"dd/mm\" } returns \"dd/mm\";\n */\nvar dateExpandPattern = function( options, cldr ) {\n\tvar dateSkeleton, result, skeleton, timeSkeleton, type,\n\n\t\t// Using easier to read variables.\n\t\tgetBestMatchPattern = dateExpandPatternGetBestMatchPattern;\n\n\tfunction combineDateTime( type, datePattern, timePattern ) {\n\t\treturn formatMessage(\n\t\t\tcldr.main([\n\t\t\t\t\"dates/calendars/gregorian/dateTimeFormats\",\n\t\t\t\ttype\n\t\t\t]),\n\t\t\t[ timePattern, datePattern ]\n\t\t);\n\t}\n\n\tswitch ( true ) {\n\t\tcase \"skeleton\" in options:\n\t\t\tskeleton = options.skeleton;\n\n\t\t\t// Preferred hour (j).\n\t\t\tskeleton = skeleton.replace( /j/g, function() {\n\t\t\t\treturn cldr.supplemental.timeData.preferred();\n\t\t\t});\n\n\t\t\tvalidateSkeleton( skeleton );\n\n\t\t\t// Try direct map (note that getBestMatchPattern handles it).\n\t\t\t// ... or, try to \"best match\" the whole skeleton.\n\t\t\tresult = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tskeleton\n\t\t\t);\n\t\t\tif ( result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// ... or, try to \"best match\" the date and time parts individually.\n\t\t\ttimeSkeleton = skeleton.split( /[^hHKkmsSAzZOvVXx]/ ).slice( -1 )[ 0 ];\n\t\t\tdateSkeleton = skeleton.split( /[^GyYuUrQqMLlwWdDFgEec]/ )[ 0 ];\n\t\t\tdateSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tdateSkeleton\n\t\t\t);\n\t\t\ttimeSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\ttimeSkeleton\n\t\t\t);\n\n\t\t\tif ( /(MMMM|LLLL).*[Ec]/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"full\";\n\t\t\t} else if ( /MMMM|LLLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"long\";\n\t\t\t} else if ( /MMM|LLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"medium\";\n\t\t\t} else {\n\t\t\t\ttype = \"short\";\n\t\t\t}\n\n\t\t\tif ( dateSkeleton && timeSkeleton ) {\n\t\t\t\tresult = combineDateTime( type, dateSkeleton, timeSkeleton );\n\t\t\t} else {\n\t\t\t\tresult = dateSkeleton || timeSkeleton;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase \"date\" in options:\n\t\tcase \"time\" in options:\n\t\t\tresult = cldr.main([\n\t\t\t\t\"dates/calendars/gregorian\",\n\t\t\t\t\"date\" in options ? \"dateFormats\" : \"timeFormats\",\n\t\t\t\t( options.date || options.time )\n\t\t\t]);\n\t\t\tbreak;\n\n\t\tcase \"datetime\" in options:\n\t\t\tresult = combineDateTime( options.datetime,\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/dateFormats\", options.datetime ]),\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/timeFormats\", options.datetime ])\n\t\t\t);\n\t\t\tbreak;\n\n\t\tcase \"raw\" in options:\n\t\t\tresult = options.raw;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow createErrorInvalidParameterValue({\n\t\t\t\tname: \"options\",\n\t\t\t\tvalue: options\n\t\t\t});\n\t}\n\n\treturn result;\n};\n\n\n\n\nvar dateWeekDays = [ \"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\" ];\n\n\n\n\n/**\n * firstDayOfWeek\n */\nvar dateFirstDayOfWeek = function( cldr ) {\n\treturn dateWeekDays.indexOf( cldr.supplemental.weekData.firstDay() );\n};\n\n\n\n\n/**\n * getTimeZoneName( length, type )\n */\nvar dateGetTimeZoneName = function( length, type, timeZone, cldr ) {\n\tvar metaZone, result;\n\n\tif ( !timeZone ) {\n\t\treturn;\n\t}\n\n\tresult = cldr.main([\n\t\t\"dates/timeZoneNames/zone\",\n\t\ttimeZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n\n\tif ( result ) {\n\t\treturn result;\n\t}\n\n\t// The latest metazone data of the metazone array.\n\t// TODO expand to support the historic metazones based on the given date.\n\tmetaZone = cldr.supplemental([\n\t\t\"metaZones/metazoneInfo/timezone\", timeZone, 0,\n\t\t\"usesMetazone/_mzone\"\n\t]);\n\n\treturn cldr.main([\n\t\t\"dates/timeZoneNames/metazone\",\n\t\tmetaZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n};\n\n\n\n\n/**\n * timezoneHourFormatShortH( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example:\n * - \"+HH.mm;-HH.mm\" => \"+H;-H\"\n * - \"+HH:mm;-HH:mm\" => \"+H;-H\"\n * - \"+HH:mm;−HH:mm\" => \"+H;−H\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+H:-H\"\n */\nvar dateTimezoneHourFormatH = function( hourFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\treturn format.slice( 0, format.indexOf( \"H\" ) + 1 );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\n/**\n * timezoneHourFormatLongHm( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example (hFormat === \"H\"): (used for short Hm)\n * - \"+HH.mm;-HH.mm\" => \"+H.mm;-H.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+H:mm;-H:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+H:mm;−H:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+Hmm:-Hmm\"\n *\n * Example (hFormat === \"HH\": (used for long Hm)\n * - \"+HH.mm;-HH.mm\" => \"+HH.mm;-HH.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+H:mm;-H:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+HH:mm;−HH:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+HHmm:-HHmm\"\n */\nvar dateTimezoneHourFormatHm = function( hourFormat, hFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\tvar parts = format.split( /H+/ );\n\t\t\tparts.splice( 1, 0, hFormat );\n\t\t\treturn parts.join( \"\" );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\nvar runtimeCacheDataBind = function( key, data ) {\n\tvar fn = function() {\n\t\treturn data;\n\t};\n\tfn.dataCacheKey = key;\n\treturn fn;\n};\n\n\n\n\n/**\n * properties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n *\n * @cldr [Cldr instance].\n *\n * Return the properties given the pattern and cldr.\n *\n * TODO Support other calendar types.\n */\nvar dateFormatProperties = function( pattern, cldr, timeZone ) {\n\tvar properties = {\n\t\t\tnumberFormatters: {},\n\t\t\tpattern: pattern,\n\t\t\ttimeSeparator: numberSymbol( \"timeSeparator\", cldr )\n\t\t},\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tfunction setNumberFormatterPattern( pad ) {\n\t\tproperties.numberFormatters[ pad ] = stringPad( \"\", pad );\n\t}\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\tpattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, chr, daylightTzName, formatNumber, genericTzName, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tproperties.preferredTime = chr = cldr.supplemental.timeData.preferred();\n\t\t}\n\n\t\t// ZZZZ: same as \"OOOO\".\n\t\tif ( chr === \"Z\" && length === 4 ) {\n\t\t\tchr = \"O\";\n\t\t\tlength = 4;\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tproperties.standardTzName = standardTzName;\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tproperties.daylightTzName = daylightTzName;\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tgenericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\tif ( !genericTzName ) {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tproperties.eras = cldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.quarters ) {\n\t\t\t\t\t\tproperties.quarters = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.quarters[ chr ] ) {\n\t\t\t\t\t\tproperties.quarters[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.quarters[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.months ) {\n\t\t\t\t\t\tproperties.months = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.months[ chr ] ) {\n\t\t\t\t\t\tproperties.months[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.months[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week - Week of Year (w) or Week of Month (W).\n\t\t\tcase \"w\":\n\t\t\tcase \"W\":\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( !properties.days ) {\n\t\t\t\t\tproperties.days = {};\n\t\t\t\t}\n\t\t\t\tif ( !properties.days[ chr ] ) {\n\t\t\t\t\tproperties.days[ chr ] = {};\n\t\t\t\t}\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// If short day names are not explicitly specified, abbreviated day names are\n\t\t\t\t\t// used instead.\n\t\t\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// http://unicode.org/cldr/trac/ticket/6790\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"short\"\n\t\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tproperties.dayPeriods = {\n\t\t\t\t\tam: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/am\"\n\t\t\t\t\t),\n\t\t\t\t\tpm: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/pm\"\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\tcase \"H\": // 0-23\n\t\t\tcase \"K\": // 0-11\n\t\t\tcase \"k\": // 1-24\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\tcase \"S\":\n\t\t\tcase \"A\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tproperties.genericTzName = genericTzName;\n\t\t\t\tbreak;\n\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tproperties.gmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tproperties.gmtZeroFormat = cldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\n\t\t\t\t// Unofficial deduction of the hourFormat variations.\n\t\t\t\t// Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n\t\t\t\taux = cldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties.hourFormat = length < 4 ?\n\t\t\t\t\t[ dateTimezoneHourFormatH( aux ), dateTimezoneHourFormatHm( aux, \"H\" ) ] :\n\t\t\t\t\tdateTimezoneHourFormatHm( aux, \"HH\" );\n\n\t\t\t/* falls through */\n\t\t\tcase \"Z\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tsetNumberFormatterPattern( 1 );\n\t\t\t\tsetNumberFormatterPattern( 2 );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( formatNumber ) {\n\t\t\tsetNumberFormatterPattern( length );\n\t\t}\n\t});\n\n\treturn properties;\n};\n\n\n\n\nvar dateFormatterFn = function( dateToPartsFormatter ) {\n\treturn function dateFormatter( value ) {\n\t\treturn partsJoin( dateToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * parseProperties( cldr )\n *\n * @cldr [Cldr instance].\n *\n * @timeZone [String] FIXME.\n *\n * Return parser properties.\n */\nvar dateParseProperties = function( cldr, timeZone ) {\n\tvar properties = {\n\t\tpreferredTimeData: cldr.supplemental.timeData.preferred()\n\t};\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\treturn properties;\n};\n\n\nvar ZonedDateTime = (function() {\nfunction definePrivateProperty(object, property, value) {\n Object.defineProperty(object, property, {\n value: value\n });\n}\n\nfunction getUntilsIndex(original, untils) {\n var index = 0;\n var originalTime = original.getTime();\n\n // TODO Should we do binary search for improved performance?\n while (index < untils.length - 1 && originalTime >= untils[index]) {\n index++;\n }\n return index;\n}\n\nfunction setWrap(fn) {\n var offset1 = this.getTimezoneOffset();\n var ret = fn();\n this.original.setTime(new Date(this.getTime()));\n var offset2 = this.getTimezoneOffset();\n if (offset2 - offset1) {\n this.original.setMinutes(this.original.getMinutes() + offset2 - offset1);\n }\n return ret;\n}\n\nvar ZonedDateTime = function(date, timeZoneData) {\n definePrivateProperty(this, \"original\", new Date(date.getTime()));\n definePrivateProperty(this, \"local\", new Date(date.getTime()));\n definePrivateProperty(this, \"timeZoneData\", timeZoneData);\n definePrivateProperty(this, \"setWrap\", setWrap);\n if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) {\n throw new Error(\"Invalid IANA data\");\n }\n this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000);\n};\n\nZonedDateTime.prototype.clone = function() {\n return new ZonedDateTime(this.original, this.timeZoneData);\n};\n\n// Date field getters.\n[\"getFullYear\", \"getMonth\", \"getDate\", \"getDay\", \"getHours\", \"getMinutes\",\n\"getSeconds\", \"getMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"getUTCFullYear\" if method === \"getFullYear\".\n var utcMethod = \"getUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function() {\n return this.local[utcMethod]();\n };\n});\n\n// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2.\nZonedDateTime.prototype.valueOf =\nZonedDateTime.prototype.getTime = function() {\n return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000;\n};\n\nZonedDateTime.prototype.getTimezoneOffset = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return this.timeZoneData.offsets[index];\n};\n\n// Date field setters.\n[\"setFullYear\", \"setMonth\", \"setDate\", \"setHours\", \"setMinutes\", \"setSeconds\", \"setMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"setUTCFullYear\" if method === \"setFullYear\".\n var utcMethod = \"setUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function(value) {\n var local = this.local;\n // Note setWrap is needed for seconds and milliseconds just because\n // abs(value) could be >= a minute.\n return this.setWrap(function() {\n return local[utcMethod](value);\n });\n };\n});\n\nZonedDateTime.prototype.setTime = function(time) {\n return this.local.setTime(time);\n};\n\nZonedDateTime.prototype.isDST = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return Boolean(this.timeZoneData.isdsts[index]);\n};\n\nZonedDateTime.prototype.inspect = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n var abbrs = this.timeZoneData.abbrs;\n return this.local.toISOString().replace(/Z$/, \"\") + \" \" +\n (abbrs && abbrs[index] + \" \" || (this.getTimezoneOffset() * -1) + \" \") +\n (this.isDST() ? \"(daylight savings)\" : \"\");\n};\n\nZonedDateTime.prototype.toDate = function() {\n return new Date(this.getTime());\n};\n\n// Type cast getters.\n[\"toISOString\", \"toJSON\", \"toUTCString\"].forEach(function(method) {\n ZonedDateTime.prototype[method] = function() {\n return this.toDate()[method]();\n };\n});\n\nreturn ZonedDateTime;\n}());\n\n\n/**\n * isLeapYear( year )\n *\n * @year [Number]\n *\n * Returns an indication whether the specified year is a leap year.\n */\nvar dateIsLeapYear = function( year ) {\n\treturn new Date( year, 1, 29 ).getMonth() === 1;\n};\n\n\n\n\n/**\n * lastDayOfMonth( date )\n *\n * @date [Date]\n *\n * Return the last day of the given date's month\n */\nvar dateLastDayOfMonth = function( date ) {\n\treturn new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n};\n\n\n\n\n/**\n * startOf changes the input to the beginning of the given unit.\n *\n * For example, starting at the start of a day, resets hours, minutes\n * seconds and milliseconds to 0. Starting at the month does the same, but\n * also sets the date to 1.\n *\n * Returns the modified date\n */\nvar dateStartOf = function( date, unit ) {\n\tdate = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() );\n\tswitch ( unit ) {\n\t\tcase \"year\":\n\t\t\tdate.setMonth( 0 );\n\t\t/* falls through */\n\t\tcase \"month\":\n\t\t\tdate.setDate( 1 );\n\t\t/* falls through */\n\t\tcase \"day\":\n\t\t\tdate.setHours( 0 );\n\t\t/* falls through */\n\t\tcase \"hour\":\n\t\t\tdate.setMinutes( 0 );\n\t\t/* falls through */\n\t\tcase \"minute\":\n\t\t\tdate.setSeconds( 0 );\n\t\t/* falls through */\n\t\tcase \"second\":\n\t\t\tdate.setMilliseconds( 0 );\n\t}\n\treturn date;\n};\n\n\n\n\n/**\n * Differently from native date.setDate(), this function returns a date whose\n * day remains inside the month boundaries. For example:\n *\n * setDate( FebDate, 31 ): a \"Feb 28\" date.\n * setDate( SepDate, 31 ): a \"Sep 30\" date.\n */\nvar dateSetDate = function( date, day ) {\n\tvar lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n\n\tdate.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay );\n};\n\n\n\n\n/**\n * Differently from native date.setMonth(), this function adjusts date if\n * needed, so final month is always the one set.\n *\n * setMonth( Jan31Date, 1 ): a \"Feb 28\" date.\n * setDate( Jan31Date, 8 ): a \"Sep 30\" date.\n */\nvar dateSetMonth = function( date, month ) {\n\tvar originalDate = date.getDate();\n\n\tdate.setDate( 1 );\n\tdate.setMonth( month );\n\tdateSetDate( date, originalDate );\n};\n\n\n\n\nvar outOfRange = function( value, low, high ) {\n\treturn value < low || value > high;\n};\n\n\n\n\n/**\n * parse( value, tokens, properties )\n *\n * @value [String] string date.\n *\n * @tokens [Object] tokens returned by date/tokenizer.\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n */\nvar dateParse = function( _value, tokens, properties ) {\n\tvar amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid,\n\t\tYEAR = 0,\n\t\tMONTH = 1,\n\t\tDAY = 2,\n\t\tHOUR = 3,\n\t\tMINUTE = 4,\n\t\tSECOND = 5,\n\t\tMILLISECONDS = 6,\n\t\tdate = new Date(),\n\t\ttruncateAt = [],\n\t\tunits = [ \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"milliseconds\" ];\n\n\t// Create globalize date with given timezone data.\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tvalid = tokens.every(function( token ) {\n\t\tvar century, chr, value, length;\n\n\t\tif ( token.type === \"literal\" ) {\n\n\t\t\t// continue\n\t\t\treturn true;\n\t\t}\n\n\t\tchr = token.type.charAt( 0 );\n\t\tlength = token.type.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTimeData;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tera = +token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tif ( outOfRange( value, 0, 99 ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// mimic dojo/date/locale: choose century to apply, according to a sliding\n\t\t\t\t\t// window of 80 years before and 20 years after present year.\n\t\t\t\t\tcentury = Math.floor( date.getFullYear() / 100 ) * 100;\n\t\t\t\t\tvalue += century;\n\t\t\t\t\tif ( value > date.getFullYear() + 20 ) {\n\t\t\t\t\t\tvalue -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdate.setFullYear( value );\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\": // Year in \"Week of Year\"\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter (skip)\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tvalue = token.value;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = +token.value;\n\t\t\t\t}\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Setting the month later so that we have the correct year and can determine\n\t\t\t\t// the correct last day of February in case of leap year.\n\t\t\t\tmonth = value;\n\t\t\t\ttruncateAt.push( MONTH );\n\t\t\t\tbreak;\n\n\t\t\t// Week (skip)\n\t\t\tcase \"w\": // Week of Year.\n\t\t\tcase \"W\": // Week of Month.\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tday = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tdaysOfYear = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\t// Skip\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\tcase \"E\":\n\n\t\t\t\t// Skip.\n\t\t\t\t// value = arrayIndexOf( dateWeekDays, token.value );\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tamPm = token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value === 12 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 11 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 24 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value === 24 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 23 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setMinutes( value );\n\t\t\t\ttruncateAt.push( MINUTE );\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setSeconds( value );\n\t\t\t\ttruncateAt.push( SECOND );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tdate.setHours( 0 );\n\t\t\t\tdate.setMinutes( 0 );\n\t\t\t\tdate.setSeconds( 0 );\n\n\t\t\t/* falls through */\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( token.value * Math.pow( 10, 3 - length ) );\n\t\t\t\tdate.setMilliseconds( value );\n\t\t\t\ttruncateAt.push( MILLISECONDS );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tif ( typeof token.value === \"number\" ) {\n\t\t\t\t\ttimezoneOffset = token.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tif ( !valid ) {\n\t\treturn null;\n\t}\n\n\t// 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null\n\t// if amPm && !hour12 || !amPm && hour12.\n\tif ( hour && !( !amPm ^ hour12 ) ) {\n\t\treturn null;\n\t}\n\n\tif ( era === 0 ) {\n\n\t\t// 1 BC = year 0\n\t\tdate.setFullYear( date.getFullYear() * -1 + 1 );\n\t}\n\n\tif ( month !== undefined ) {\n\t\tdateSetMonth( date, month - 1 );\n\t}\n\n\tif ( day !== undefined ) {\n\t\tif ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setDate( day );\n\t} else if ( daysOfYear !== undefined ) {\n\t\tif ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setMonth( 0 );\n\t\tdate.setDate( daysOfYear );\n\t}\n\n\tif ( hour12 && amPm === \"pm\" ) {\n\t\tdate.setHours( date.getHours() + 12 );\n\t}\n\n\tif ( timezoneOffset !== undefined ) {\n\t\tdate.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() );\n\t}\n\n\t// Truncate date at the most precise unit defined. Eg.\n\t// If value is \"12/31\", and pattern is \"MM/dd\":\n\t// => new Date( , 12, 31, 0, 0, 0, 0 );\n\ttruncateAt = Math.max.apply( null, truncateAt );\n\tdate = dateStartOf( date, units[ truncateAt ] );\n\n\t// Get date back from globalize date.\n\tif ( date instanceof ZonedDateTime ) {\n\t\tdate = date.toDate();\n\t}\n\n\treturn date;\n};\n\n\n/* eslint-disable no-unused-expressions */\n\n\n\n/**\n * tokenizer( value, numberParser, properties )\n *\n * @value [String] string date.\n *\n * @numberParser [Function]\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * Returns an Array of tokens, eg. value \"5 o'clock PM\", pattern \"h 'o''clock' a\":\n * [{\n * type: \"h\",\n * lexeme: \"5\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"literal\",\n * lexeme: \"o'clock\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"a\",\n * lexeme: \"PM\",\n * value: \"pm\"\n * }]\n *\n * OBS: lexeme's are always String and may return invalid ranges depending of the token type.\n * Eg. \"99\" for month number.\n *\n * Return an empty Array when not successfully parsed.\n */\nvar dateTokenizer = function( value, numberParser, properties ) {\n\tvar digitsRe, valid,\n\t\ttokens = [],\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsRe = properties.digitsRe;\n\tvalue = looseMatching( value );\n\n\tvalid = properties.pattern.match( datePatternRe ).every(function( current ) {\n\t\tvar aux, chr, length, numeric, tokenRe,\n\t\t\ttoken = {};\n\n\t\tfunction hourFormatParse( tokenRe, numberParser ) {\n\t\t\tvar aux, isPositive,\n\t\t\t\tmatch = value.match( tokenRe );\n\t\t\tnumberParser = numberParser || function( value ) {\n\t\t\t\treturn +value;\n\t\t\t};\n\n\t\t\tif ( !match ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tisPositive = match[ 1 ];\n\n\t\t\t// hourFormat containing H only, e.g., `+H;-H`\n\t\t\tif ( match.length < 6 ) {\n\t\t\t\taux = isPositive ? 1 : 3;\n\t\t\t\ttoken.value = numberParser( match[ aux ] ) * 60;\n\n\t\t\t// hourFormat containing H and m, e.g., `+HHmm;-HHmm`\n\t\t\t} else if ( match.length < 10 ) {\n\t\t\t\taux = isPositive ? [ 1, 3 ] : [ 5, 7 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] );\n\n\t\t\t// hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss`\n\t\t\t} else {\n\t\t\t\taux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] ) +\n\t\t\t\t\tnumberParser( match[ aux[ 2 ] ] ) / 60;\n\t\t\t}\n\n\t\t\tif ( isPositive ) {\n\t\t\t\ttoken.value *= -1;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction oneDigitIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = digitsRe;\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOneOrTwo() {\n\t\t\tif ( length === 1 || length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction twoDigitsIfLengthTwo() {\n\t\t\tif ( length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){2}\" );\n\t\t\t}\n\t\t}\n\n\t\t// Brute-force test every locale entry in an attempt to match the given value.\n\t\t// Return the first found one (and set token accordingly), or null.\n\t\tfunction lookup( path ) {\n\t\t\tvar array = properties[ path.join( \"/\" ) ];\n\n\t\t\tif ( !array ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// array of pairs [key, value] sorted by desc value length.\n\t\t\tarray.some(function( item ) {\n\t\t\t\tvar valueRe = item[ 1 ];\n\t\t\t\tif ( valueRe.test( value ) ) {\n\t\t\t\t\ttoken.value = item[ 0 ];\n\t\t\t\t\ttokenRe = item[ 1 ];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\ttoken.type = current;\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( properties.standardOrDaylightTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.standardOrDaylightTzName;\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( properties.genericTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.genericTzName;\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"V\" && properties.timeZoneName ) {\n\t\t\ttoken.value = length === 2 ? properties.timeZoneName : null;\n\t\t\ttokenRe = properties.timeZoneNameRe;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\tcase \"Y\":\n\t\t\t\tnumeric = true;\n\n\t\t\t\t// number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ...\n\t\t\t\tif ( length === 1 ) {\n\n\t\t\t\t\t// Unicode equivalent to /\\d+/.\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \")+\" );\n\t\t\t\t} else if ( length === 2 ) {\n\n\t\t\t\t\t// Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits\n\t\t\t\t\t// year, so parser accepts both zero-padded and non-zero-padded for `yy`.\n\t\t\t\t\t//\n\t\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t\t} else {\n\n\t\t\t\t\t// Unicode equivalent to /\\d{length,}/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo() ||\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\t//\n\t\t\t\t// Lenient parsing: skeleton \"yMd\" (i.e., one M) may include MM for the pattern,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for M and MM.\n\t\t\t\t// Similar for L.\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo() || lookup([\n\t\t\t\t\t\"gregorian/months\",\n\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"D\":\n\n\t\t\t\t// number {l,3}.\n\t\t\t\tif ( length <= 3 ) {\n\n\t\t\t\t\t// Equivalent to /\\d{length,3}/\n\t\t\t\t\tnumeric = true;\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",3}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\t\t\tcase \"F\":\n\n\t\t\t\t// number l=1:{1}.\n\t\t\t\toneDigitIfLengthOne();\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || lookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/dayPeriods/format/wide\"\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\toneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\tbreak;\n\n\t\t\t// Day, Hour, Minute, or Second\n\t\t\tcase \"d\":\n\t\t\tcase \"h\":\n\t\t\tcase \"H\":\n\t\t\tcase \"K\":\n\t\t\tcase \"k\":\n\t\t\tcase \"j\":\n\t\t\tcase \"m\":\n\t\t\tcase \"s\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\t//\n\t\t\t\t// Lenient parsing:\n\t\t\t\t// - skeleton \"hms\" (i.e., one m) always includes mm for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parse non-zero-padded minutes,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for m. Similar\n\t\t\t\t// for seconds s.\n\t\t\t\t// - skeleton \"hms\" (i.e., one h) may include h or hh for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parser non-zero-padded hours for some\n\t\t\t\t// locales, therefore parser accepts both zero-padded and non-zero-padded for h.\n\t\t\t\t// Similar for d (in skeleton yMd).\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\n\t\t\t\t// number {l}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\n\t\t\t\t// number {l+5}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length+5}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + ( length + 5 ) + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"z\":\n\t\t\t\tif ( tokenRe && tokenRe.test( value ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( chr === \"V\" && length === 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( value === properties[ \"timeZoneNames/gmtZeroFormat\" ] ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = properties[ \"timeZoneNames/gmtZeroFormatRe\" ];\n\t\t\t\t} else {\n\t\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ].some(function( hourFormatRe ) {\n\t\t\t\t\t\tif ( hourFormatParse( hourFormatRe, numberParser ) ) {\n\t\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif ( !aux ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( value === \"Z\" ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = /^Z/;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = properties.x.some(function( hourFormatRe ) {\n\t\t\t\t\tif ( hourFormatParse( hourFormatRe ) ) {\n\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif ( !aux ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"'\":\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( removeLiteralQuotes( current ) ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( current ) );\n\t\t}\n\n\t\tif ( !tokenRe ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get lexeme and consume it.\n\t\tvalue = value.replace( tokenRe, function( lexeme ) {\n\t\t\ttoken.lexeme = lexeme;\n\t\t\tif ( numeric ) {\n\t\t\t\ttoken.value = numberParser( lexeme );\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\n\t\tif ( !token.lexeme ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( numeric && isNaN( token.value ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttokens.push( token );\n\t\treturn true;\n\t});\n\n\tif ( value !== \"\" ) {\n\t\tvalid = false;\n\t}\n\n\treturn valid ? tokens : [];\n};\n\n\n\n\nvar dateParserFn = function( numberParser, parseProperties, tokenizerProperties ) {\n\treturn function dateParser( value ) {\n\t\tvar tokens;\n\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeString( value, \"value\" );\n\n\t\ttokens = dateTokenizer( value, numberParser, tokenizerProperties );\n\t\treturn dateParse( value, tokens, parseProperties ) || null;\n\t};\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\n/**\n * tokenizerProperties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n *\n * @cldr [Cldr instance].\n *\n * Return Object with data that will be used by tokenizer.\n */\nvar dateTokenizerProperties = function( pattern, cldr, timeZone ) {\n\tvar digitsReSource,\n\t\tproperties = {\n\t\t\tpattern: looseMatching( pattern )\n\t\t},\n\t\ttimeSeparator = numberSymbol( \"timeSeparator\", cldr ),\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsReSource = numberNumberingSystemDigitsMap( cldr );\n\tdigitsReSource = digitsReSource ? \"[\" + digitsReSource + \"]\" : \"\\\\d\";\n\tproperties.digitsRe = new RegExp( digitsReSource );\n\n\t// Transform:\n\t// - \"+H;-H\" -> /\\+(\\d\\d?)|-(\\d\\d?)/\n\t// - \"+HH;-HH\" -> /\\+(\\d\\d)|-(\\d\\d)/\n\t// - \"+HHmm;-HHmm\" -> /\\+(\\d\\d)(\\d\\d)|-(\\d\\d)(\\d\\d)/\n\t// - \"+HH:mm;-HH:mm\" -> /\\+(\\d\\d):(\\d\\d)|-(\\d\\d):(\\d\\d)/\n\t//\n\t// If gmtFormat is GMT{0}, the regexp must fill {0} in each side, e.g.:\n\t// - \"+H;-H\" -> /GMT\\+(\\d\\d?)|GMT-(\\d\\d?)/\n\tfunction hourFormatRe( hourFormat, gmtFormat, digitsReSource, timeSeparator ) {\n\t\tvar re;\n\n\t\tif ( !digitsReSource ) {\n\t\t\tdigitsReSource = \"\\\\d\";\n\t\t}\n\t\tif ( !gmtFormat ) {\n\t\t\tgmtFormat = \"{0}\";\n\t\t}\n\n\t\tre = hourFormat\n\t\t\t.replace( \"+\", \"\\\\+\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d)\n\t\t\t.replace( /HH|mm|ss/g, \"((\" + digitsReSource + \"){2})\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d?)\n\t\t\t.replace( /H|m/g, \"((\" + digitsReSource + \"){1,2})\" );\n\n\t\tif ( timeSeparator ) {\n\t\t\tre = re.replace( /:/g, timeSeparator );\n\t\t}\n\n\t\tre = re.split( \";\" ).map(function( part ) {\n\t\t\treturn gmtFormat.replace( \"{0}\", part );\n\t\t}).join( \"|\" );\n\n\t\treturn new RegExp( \"^\" + re );\n\t}\n\n\tfunction populateProperties( path, value ) {\n\n\t\t// Skip\n\t\tvar skipRe = /(timeZoneNames\\/zone|supplemental\\/metaZones|timeZoneNames\\/metazone|timeZoneNames\\/regionFormat|timeZoneNames\\/gmtFormat)/;\n\t\tif ( skipRe.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The `dates` and `calendars` trim's purpose is to reduce properties' key size only.\n\t\tpath = path.replace( /^.*\\/dates\\//, \"\" ).replace( /calendars\\//, \"\" );\n\n\t\t// Specific filter for \"gregorian/dayPeriods/format/wide\".\n\t\tif ( path === \"gregorian/dayPeriods/format/wide\" ) {\n\t\t\tvalue = objectFilter( value, /^am|^pm/ );\n\t\t}\n\n\t\t// Transform object into array of pairs [key, /value/], sort by desc value length.\n\t\tif ( isPlainObject( value ) ) {\n\t\t\tvalue = Object.keys( value ).map(function( key ) {\n\t\t\t\treturn [ key, new RegExp( \"^\" + regexpEscape( looseMatching( value[ key ] ) ) ) ];\n\t\t\t}).sort(function( a, b ) {\n\t\t\t\treturn b[ 1 ].source.length - a[ 1 ].source.length;\n\t\t\t});\n\n\t\t// If typeof value === \"string\".\n\t\t} else {\n\t\t\tvalue = looseMatching( value );\n\t\t}\n\t\tproperties[ path ] = value;\n\t}\n\n\tfunction regexpSourceSomeTerm( terms ) {\n\t\treturn \"(\" + terms.filter(function( item ) {\n\t\t\treturn item;\n\t\t}).reduce(function( memo, item ) {\n\t\t\treturn memo + \"|\" + item;\n\t\t}) + \")\";\n\t}\n\n\tcldr.on( \"get\", populateProperties );\n\n\tpattern.match( datePatternRe ).forEach(function( current ) {\n\t\tvar aux, chr, daylightTzName, gmtFormat, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\t\t\tif ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tstandardTzName = regexpEscape( looseMatching( standardTzName ) );\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tdaylightTzName = regexpEscape( looseMatching( daylightTzName ) );\n\t\t\t}\n\t\t\tif ( standardTzName || daylightTzName ) {\n\t\t\t\tproperties.standardOrDaylightTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpSourceSomeTerm([ standardTzName, daylightTzName ])\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar genericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\t\t\tif ( genericTzName ) {\n\t\t\t\tproperties.genericTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpEscape( looseMatching( genericTzName ) )\n\t\t\t\t);\n\t\t\t\tchr = \"O\";\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tcldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tcldr.main(\n\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide\"\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\n\t\t\t\t\t\t// Skip looseMatching processing since timeZone is a canonical posix value.\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp( \"^\" + regexpEscape( timeZone ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\ttimeZoneName = looseMatching( timeZoneName );\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp(\n\t\t\t\t\t\t\t\"^\" + regexpEscape( timeZoneName )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"z\":\n\t\t\tcase \"O\":\n\t\t\t\tgmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties[ \"timeZoneNames/gmtZeroFormatRe\" ] =\n\t\t\t\t\tnew RegExp( \"^\" + regexpEscape( properties[ \"timeZoneNames/gmtZeroFormat\" ] ) );\n\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ];\n\t\t\t\tproperties[ \"timeZoneNames/hourFormat\" ] = (\n\t\t\t\t\tlength < 4 ?\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"H\" ), dateTimezoneHourFormatH( aux ) ] :\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"HH\" ) ]\n\t\t\t\t).map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe(\n\t\t\t\t\t\thourFormat,\n\t\t\t\t\t\tgmtFormat,\n\t\t\t\t\t\tdigitsReSource,\n\t\t\t\t\t\ttimeSeparator\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t/* falls through */\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\tproperties.x = [\n\t\t\t\t\t[ \"+HHmm;-HHmm\", \"+HH;-HH\" ],\n\t\t\t\t\t[ \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm;-HH:mm\" ],\n\t\t\t\t\t[ \"+HHmmss;-HHmmss\", \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm:ss;-HH:mm:ss\", \"+HH:mm;-HH:mm\" ]\n\t\t\t\t][ length - 1 ].map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe( hourFormat );\n\t\t\t\t});\n\t\t}\n\t});\n\n\tcldr.off( \"get\", populateProperties );\n\n\treturn properties;\n};\n\n\n\n\n/**\n * dayOfWeek( date, firstDay )\n *\n * @date\n *\n * @firstDay the result of `dateFirstDayOfWeek( cldr )`\n *\n * Return the day of the week normalized by the territory's firstDay [0-6].\n * Eg for \"mon\":\n * - return 0 if territory is GB, or BR, or DE, or FR (week starts on \"mon\");\n * - return 1 if territory is US (week starts on \"sun\");\n * - return 2 if territory is EG (week starts on \"sat\");\n */\nvar dateDayOfWeek = function( date, firstDay ) {\n\treturn ( date.getDay() - firstDay + 7 ) % 7;\n};\n\n\n\n\n/**\n * distanceInDays( from, to )\n *\n * Return the distance in days between from and to Dates.\n */\nvar dateDistanceInDays = function( from, to ) {\n\tvar inDays = 864e5;\n\treturn ( to.getTime() - from.getTime() ) / inDays;\n};\n\n\n\n\n/**\n * dayOfYear\n *\n * Return the distance in days of the date to the begin of the year [0-d].\n */\nvar dateDayOfYear = function( date ) {\n\treturn Math.floor( dateDistanceInDays( dateStartOf( date, \"year\" ), date ) );\n};\n\n\n\n\n// Invert key and values, e.g., {\"year\": \"yY\"} ==> {\"y\": \"year\", \"Y\": \"year\"}\nvar dateFieldsMap = objectInvert({\n\t\"era\": \"G\",\n\t\"year\": \"yY\",\n\t\"quarter\": \"qQ\",\n\t\"month\": \"ML\",\n\t\"week\": \"wW\",\n\t\"day\": \"dDF\",\n\t\"weekday\": \"ecE\",\n\t\"dayperiod\": \"a\",\n\t\"hour\": \"hHkK\",\n\t\"minute\": \"m\",\n\t\"second\": \"sSA\",\n\t\"zone\": \"zvVOxX\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( symbol ) {\n\t\tobject[ symbol ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\n/**\n * millisecondsInDay\n */\nvar dateMillisecondsInDay = function( date ) {\n\n\t// TODO Handle daylight savings discontinuities\n\treturn date - dateStartOf( date, \"day\" );\n};\n\n\n\n\n/**\n * hourFormat( date, format, timeSeparator, formatNumber )\n *\n * Return date's timezone offset according to the format passed.\n * Eg for format when timezone offset is 180:\n * - \"+H;-H\": -3\n * - \"+HHmm;-HHmm\": -0300\n * - \"+HH:mm;-HH:mm\": -03:00\n * - \"+HH:mm:ss;-HH:mm:ss\": -03:00:00\n */\nvar dateTimezoneHourFormat = function( date, format, timeSeparator, formatNumber ) {\n\tvar absOffset,\n\t\toffset = date.getTimezoneOffset();\n\n\tabsOffset = Math.abs( offset );\n\tformatNumber = formatNumber || {\n\t\t1: function( value ) {\n\t\t\treturn stringPad( value, 1 );\n\t\t},\n\t\t2: function( value ) {\n\t\t\treturn stringPad( value, 2 );\n\t\t}\n\t};\n\n\treturn format\n\n\t\t// Pick the correct sign side (+ or -).\n\t\t.split( \";\" )[ offset > 0 ? 1 : 0 ]\n\n\t\t// Localize time separator\n\t\t.replace( \":\", timeSeparator )\n\n\t\t// Update hours offset.\n\t\t.replace( /HH?/, function( match ) {\n\t\t\treturn formatNumber[ match.length ]( Math.floor( absOffset / 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /mm/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /ss/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) );\n\t\t});\n};\n\n\n\n\n/**\n * format( date, properties )\n *\n * @date [Date instance].\n *\n * @properties\n *\n * TODO Support other calendar types.\n *\n * Disclosure: this function borrows excerpts of dojo/date/locale.\n */\nvar dateFormat = function( date, numberFormatters, properties ) {\n\tvar parts = [];\n\n\tvar timeSeparator = properties.timeSeparator;\n\n\t// create globalize date with given timezone data\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tproperties.pattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, dateField, type, value,\n\t\t\tchr = current.charAt( 0 ),\n\t\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTime;\n\t\t}\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", e.g., \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( date.isDST ) {\n\t\t\t\tvalue = date.isDST() ? properties.daylightTzName : properties.standardTzName;\n\t\t\t}\n\n\t\t\t// Fall back to \"O\" format.\n\t\t\tif ( !value ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tvalue = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ];\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\tvalue = date.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\t// yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays\n\t\t\t\tvalue = new Date( date.getTime() );\n\t\t\t\tvalue.setDate(\n\t\t\t\t\tvalue.getDate() + 7 -\n\t\t\t\t\tdateDayOfWeek( date, properties.firstDay ) -\n\t\t\t\t\tproperties.firstDay -\n\t\t\t\t\tproperties.minDays\n\t\t\t\t);\n\t\t\t\tvalue = value.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tvalue = Math.ceil( ( date.getMonth() + 1 ) / 3 );\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.quarters[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tvalue = date.getMonth() + 1;\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.months[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// Week of Year.\n\t\t\t\t// woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\t// TODO should pad on ww? Not documented, but I guess so.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"year\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\n\t\t\t\t// Week of Month.\n\t\t\t\t// wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"month\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( date.getDate() + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tvalue = date.getDate();\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tvalue = dateDayOfYear( date ) + 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\tvalue = Math.floor( date.getDate() / 7 ) + 1;\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\n\t\t\t\t\t// Range is [1-7] (deduced by example provided on documentation)\n\t\t\t\t\t// TODO Should pad with zeros (not specified in the docs)?\n\t\t\t\t\tvalue = dateDayOfWeek( date, properties.firstDay ) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tvalue = dateWeekDays[ date.getDay() ];\n\t\t\t\tvalue = properties.days[ chr ][ length ][ value ];\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tvalue = properties.dayPeriods[ date.getHours() < 12 ? \"am\" : \"pm\" ];\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = ( date.getHours() % 12 ) || 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = date.getHours();\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = date.getHours() % 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = date.getHours() || 24;\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = date.getMinutes();\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = date.getSeconds();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tvalue = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"v\":\n\n\t\t\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t\t\t// vvvv: \"{regionName} {Time}\",\n\t\t\t\t// e.g., \"Pacific Time\".\n\t\t\t\tif ( properties.genericTzName ) {\n\t\t\t\t\tvalue = properties.genericTzName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"V\":\n\n\t\t\t\t//VVVV: \"{explarCity} {Time}\", e.g., \"Los Angeles Time\"\n\t\t\t\tif ( properties.timeZoneName ) {\n\t\t\t\t\tvalue = properties.timeZoneName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = properties.gmtZeroFormat;\n\t\t\t\t} else {\n\n\t\t\t\t\t// If O..OOO and timezone offset has non-zero minutes, show minutes.\n\t\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\t\taux = date.getTimezoneOffset();\n\t\t\t\t\t\taux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\taux = properties.hourFormat;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = dateTimezoneHourFormat(\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\taux,\n\t\t\t\t\t\ttimeSeparator,\n\t\t\t\t\t\tnumberFormatters\n\t\t\t\t\t);\n\t\t\t\t\tvalue = properties.gmtFormat.replace( /\\{0\\}/, value );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = \"Z\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = date.getTimezoneOffset();\n\n\t\t\t\t// If x and timezone offset has non-zero minutes, use xx (i.e., show minutes).\n\t\t\t\tif ( length === 1 && aux % 60 - aux % 1 !== 0 ) {\n\t\t\t\t\tlength += 1;\n\t\t\t\t}\n\n\t\t\t\t// If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx\n\t\t\t\t// respectively (i.e., don't show optional seconds).\n\t\t\t\tif ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) {\n\t\t\t\t\tlength -= 2;\n\t\t\t\t}\n\n\t\t\t\tvalue = [\n\t\t\t\t\t\"+HH;-HH\",\n\t\t\t\t\t\"+HHmm;-HHmm\",\n\t\t\t\t\t\"+HH:mm;-HH:mm\",\n\t\t\t\t\t\"+HHmmss;-HHmmss\",\n\t\t\t\t\t\"+HH:mm:ss;-HH:mm:ss\"\n\t\t\t\t][ length - 1 ];\n\n\t\t\t\tvalue = dateTimezoneHourFormat( date, value, \":\" );\n\t\t\t\tbreak;\n\n\t\t\t// timeSeparator\n\t\t\tcase \":\":\n\t\t\t\tvalue = timeSeparator;\n\t\t\t\tbreak;\n\n\t\t\t// ' literals.\n\t\t\tcase \"'\":\n\t\t\t\tvalue = removeLiteralQuotes( current );\n\t\t\t\tbreak;\n\n\t\t\t// Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and\n\t\t\t// arabic characters.\n\t\t\tdefault:\n\t\t\t\tvalue = current;\n\n\t\t}\n\t\tif ( typeof value === \"number\" ) {\n\t\t\tvalue = numberFormatters[ length ]( value );\n\t\t}\n\n\t\tdateField = dateFieldsMap[ chr ];\n\t\ttype = dateField ? dateField : \"literal\";\n\n\t\tpartsPush( parts, type, value );\n\t});\n\n\treturn parts;\n\n};\n\n\n\n\nvar dateToPartsFormatterFn = function( numberFormatters, properties ) {\n\treturn function dateToPartsFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeDate( value, \"value\" );\n\n\t\treturn dateFormat( value, numberFormatters, properties );\n\t};\n\n};\n\n\n\n\nfunction optionsHasStyle( options ) {\n\treturn options.skeleton !== undefined ||\n\t\toptions.date !== undefined ||\n\t\toptions.time !== undefined ||\n\t\toptions.datetime !== undefined ||\n\t\toptions.raw !== undefined;\n}\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/dates\\/calendars\\/gregorian\\/dateTimeFormats\\/availableFormats/,\n\t\t\t/dates\\/calendars\\/gregorian\\/days\\/.*\\/short/,\n\t\t\t/dates\\/timeZoneNames\\/zone/,\n\t\t\t/dates\\/timeZoneNames\\/metazone/,\n\t\t\t/globalize-iana/,\n\t\t\t/supplemental\\/metaZones/,\n\t\t\t/supplemental\\/timeData\\/(?!001)/,\n\t\t\t/supplemental\\/weekData\\/(?!001)/\n\t\t]\n\t});\n}\n\nfunction validateOptionsPreset( options ) {\n\tvalidateOptionsPresetEach( \"date\", options );\n\tvalidateOptionsPresetEach( \"time\", options );\n\tvalidateOptionsPresetEach( \"datetime\", options );\n}\n\nfunction validateOptionsPresetEach( type, options ) {\n\tvar value = options[ type ];\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{{type}: \\\"{value}\\\"}`.\",\n\t\tvalue === undefined || [ \"short\", \"medium\", \"long\", \"full\" ].indexOf( value ) !== -1,\n\t\t{ type: type, value: value }\n\t);\n}\n\nfunction validateOptionsSkeleton( pattern, skeleton ) {\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{skeleton: \\\"{value}\\\"}` based on provided CLDR.\",\n\t\tskeleton === undefined || ( typeof pattern === \"string\" && pattern ),\n\t\t{ type: \"skeleton\", value: skeleton }\n\t);\n}\n\nfunction validateRequiredIana( timeZone ) {\n\treturn function( path, value ) {\n\n\t\tif ( !/globalize-iana/.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalidate(\n\t\t\t\"E_MISSING_IANA_TZ\",\n\t\t\t\"Missing required IANA timezone content for `{timeZone}`: `{path}`.\",\n\t\t\tvalue,\n\t\t\t{\n\t\t\t\tpath: path.replace( /globalize-iana\\//, \"\" ),\n\t\t\t\ttimeZone: timeZone\n\t\t\t}\n\t\t);\n\t};\n}\n\n/**\n * .loadTimeZone( json )\n *\n * @json [JSON]\n *\n * Load IANA timezone data.\n */\nGlobalize.loadTimeZone = function( json ) {\n\tvar customData = {\n\t\t\t\"globalize-iana\": json\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\tCldr.load( customData );\n};\n\n/**\n * .dateFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date according to the given `format` and the default/instance\n * locale.\n */\nGlobalize.dateFormatter =\nGlobalize.prototype.dateFormatter = function( options ) {\n\tvar args, dateToPartsFormatter, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\targs = [ options ];\n\n\tdateToPartsFormatter = this.dateToPartsFormatter( options );\n\treturnFn = dateFormatterFn( dateToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ dateToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateToPartsFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date to parts according to the given `format`\n * and the default/instance\n * locale.\n */\nGlobalize.dateToPartsFormatter =\nGlobalize.prototype.dateToPartsFormatter = function( options ) {\n\tvar args, cldr, numberFormatters, pad, pattern, properties, returnFn,\n\t\ttimeZone, ianaListener;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\tcldr.on( \"get\", validateRequiredCldr );\n\tif ( timeZone ) {\n\t\tianaListener = validateRequiredIana( timeZone );\n\t\tcldr.on( \"get\", ianaListener );\n\t}\n\ttry {\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\tproperties = dateFormatProperties( pattern, cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( ianaListener ) {\n\t\t\tcldr.off( \"get\", ianaListener );\n\t\t}\n\t}\n\n\t// Create needed number formatters.\n\tnumberFormatters = properties.numberFormatters;\n\tdelete properties.numberFormatters;\n\tfor ( pad in numberFormatters ) {\n\t\tnumberFormatters[ pad ] = this.numberFormatter({\n\t\t\traw: numberFormatters[ pad ]\n\t\t});\n\t}\n\n\treturnFn = dateToPartsFormatterFn( numberFormatters, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatters, properties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateParser( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a function that parses a string date according to the given `formats` and the\n * default/instance locale.\n */\nGlobalize.dateParser =\nGlobalize.prototype.dateParser = function( options ) {\n\tvar args, cldr, numberParser, parseProperties, pattern, returnFn, timeZone,\n\t\ttokenizerProperties;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\ttry {\n\t\tcldr.on( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.on( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\ttokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone );\n\t\tparseProperties = dateParseProperties( cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.off( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t}\n\tnumberParser = this.numberParser({ raw: \"0\" });\n\n\treturnFn = dateParserFn( numberParser, parseProperties, tokenizerProperties );\n\n\truntimeBind( args, cldr, returnFn, [ numberParser, parseProperties, tokenizerProperties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatDate( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number according to the given options string and the default/instance locale.\n */\nGlobalize.formatDate =\nGlobalize.prototype.formatDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateFormatter( options )( value );\n};\n\n/**\n * .formatDateToParts( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatDateToParts =\nGlobalize.prototype.formatDateToParts = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateToPartsFormatter( options )( value );\n};\n\n/**\n * .parseDate( value, options )\n *\n * @value [String]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a Date instance or null.\n */\nGlobalize.parseDate =\nGlobalize.prototype.parseDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeString( value, \"value\" );\n\n\treturn this.dateParser( options )( value );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tisPlainObject = Globalize._isPlainObject,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidate = Globalize._validate,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MessageFormat;\n/* eslint-disable */\nMessageFormat = (function() {\nMessageFormat._parse = (function() {\n\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function(st) {\n return { type: 'messageFormatPattern', statements: st };\n },\n peg$c2 = peg$FAILED,\n peg$c3 = \"{\",\n peg$c4 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c5 = null,\n peg$c6 = \",\",\n peg$c7 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c8 = \"}\",\n peg$c9 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c10 = function(argIdx, efmt) {\n var res = {\n type: \"messageFormatElement\",\n argumentIndex: argIdx\n };\n if (efmt && efmt.length) {\n res.elementFormat = efmt[1];\n } else {\n res.output = true;\n }\n return res;\n },\n peg$c11 = \"plural\",\n peg$c12 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n peg$c13 = function(t, s) {\n return { type: \"elementFormat\", key: t, val: s };\n },\n peg$c14 = \"selectordinal\",\n peg$c15 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n peg$c16 = \"select\",\n peg$c17 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n peg$c18 = function(t, p) {\n return { type: \"elementFormat\", key: t, val: p };\n },\n peg$c19 = function(op, pf) {\n return { type: \"pluralFormatPattern\", pluralForms: pf, offset: op || 0 };\n },\n peg$c20 = \"offset\",\n peg$c21 = { type: \"literal\", value: \"offset\", description: \"\\\"offset\\\"\" },\n peg$c22 = \":\",\n peg$c23 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c24 = function(d) { return d; },\n peg$c25 = function(k, mfp) {\n return { key: k, val: mfp };\n },\n peg$c26 = function(i) { return i; },\n peg$c27 = \"=\",\n peg$c28 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c29 = function(pf) { return { type: \"selectFormatPattern\", pluralForms: pf }; },\n peg$c30 = function(p) { return p; },\n peg$c31 = \"#\",\n peg$c32 = { type: \"literal\", value: \"#\", description: \"\\\"#\\\"\" },\n peg$c33 = function() { return {type: 'octothorpe'}; },\n peg$c34 = function(s) { return { type: \"string\", val: s.join('') }; },\n peg$c35 = { type: \"other\", description: \"identifier\" },\n peg$c36 = /^[0-9a-zA-Z$_]/,\n peg$c37 = { type: \"class\", value: \"[0-9a-zA-Z$_]\", description: \"[0-9a-zA-Z$_]\" },\n peg$c38 = /^[^ \\t\\n\\r,.+={}]/,\n peg$c39 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}]\" },\n peg$c40 = function(s) { return s; },\n peg$c41 = function(chars) { return chars.join(''); },\n peg$c42 = /^[^{}#\\\\\\0-\\x1F \\t\\n\\r]/,\n peg$c43 = { type: \"class\", value: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n peg$c44 = function(x) { return x; },\n peg$c45 = \"\\\\\\\\\",\n peg$c46 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c47 = function() { return \"\\\\\"; },\n peg$c48 = \"\\\\#\",\n peg$c49 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n peg$c50 = function() { return \"#\"; },\n peg$c51 = \"\\\\{\",\n peg$c52 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n peg$c53 = function() { return \"\\u007B\"; },\n peg$c54 = \"\\\\}\",\n peg$c55 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n peg$c56 = function() { return \"\\u007D\"; },\n peg$c57 = \"\\\\u\",\n peg$c58 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n peg$c59 = function(h1, h2, h3, h4) {\n return String.fromCharCode(parseInt(\"0x\" + h1 + h2 + h3 + h4));\n },\n peg$c60 = /^[0-9]/,\n peg$c61 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c62 = function(ds) {\n //the number might start with 0 but must not be interpreted as an octal number\n //Hence, the base is passed to parseInt explicitely\n return parseInt((ds.join('')), 10);\n },\n peg$c63 = /^[0-9a-fA-F]/,\n peg$c64 = { type: \"class\", value: \"[0-9a-fA-F]\", description: \"[0-9a-fA-F]\" },\n peg$c65 = { type: \"other\", description: \"whitespace\" },\n peg$c66 = function(w) { return w.join(''); },\n peg$c67 = /^[ \\t\\n\\r]/,\n peg$c68 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0;\n\n s0 = peg$parsemessageFormatPattern();\n\n return s0;\n }\n\n function peg$parsemessageFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemessageFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseelementFormat();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$c5;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c8;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseelementFormat() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c11) {\n s2 = peg$c11;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c14) {\n s2 = peg$c14;\n peg$currPos += 13;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c16) {\n s2 = peg$c16;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseselectFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseargStylePattern();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseargStylePattern();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsepluralFormatPattern() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseoffsetPattern();\n if (s1 === peg$FAILED) {\n s1 = peg$c5;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsepluralForm();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsepluralForm();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c19(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoffsetPattern() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c22;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsedigits();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralKey();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralKey() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseid();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedigits();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n return s0;\n }\n\n function peg$parseselectFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseselectForm();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseselectForm();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c29(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseselectForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseargStylePattern() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseid();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoctothorpe() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsestring() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseid() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c40(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n\n return s0;\n }\n\n function peg$parsechars() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c45) {\n s1 = peg$c45;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c48) {\n s1 = peg$c48;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c51) {\n s1 = peg$c51;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c54) {\n s1 = peg$c54;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehexDigit();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsehexDigit();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59(s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsedigits() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c62(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c66(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0;\n\n if (peg$c67.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c68); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n}()).parse;\n\n\n/** @file messageformat.js - ICU PluralFormat + SelectFormat for JavaScript\n * @author Alex Sexton - @SlexAxton\n * @version 0.3.0-1\n * @copyright 2012-2015 Alex Sexton, Eemeli Aro, and Contributors\n * @license To use or fork, MIT. To contribute back, Dojo CLA */\n\n\n/** Utility function for quoting an Object's key value iff required\n * @private */\nfunction propname(key, obj) {\n if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key)) {\n return obj ? obj + '.' + key : key;\n } else {\n var jkey = JSON.stringify(key);\n return obj ? obj + '[' + jkey + ']' : jkey;\n }\n};\n\n\n/** Create a new message formatter\n *\n * @class\n * @global\n * @param {string|string[]} [locale=\"en\"] - The locale to use, with fallbacks\n * @param {function} [pluralFunc] - Optional custom pluralization function\n * @param {function[]} [formatters] - Optional custom formatting functions */\nfunction MessageFormat(locale, pluralFunc, formatters) {\n this.lc = [locale]; \n this.runtime.pluralFuncs = {};\n this.runtime.pluralFuncs[this.lc[0]] = pluralFunc;\n this.runtime.fmt = {};\n if (formatters) for (var f in formatters) {\n this.runtime.fmt[f] = formatters[f];\n }\n}\n\n\n\n\n/** Parse an input string to its AST\n *\n * Precompiled from `lib/messageformat-parser.pegjs` by\n * {@link http://pegjs.org/ PEG.js}. Included in MessageFormat object\n * to enable testing.\n *\n * @private */\n\n\n\n/** Pluralization functions from\n * {@link http://github.com/eemeli/make-plural.js make-plural}\n *\n * @memberof MessageFormat\n * @type Object. */\nMessageFormat.plurals = {};\n\n\n/** Default number formatting functions in the style of ICU's\n * {@link http://icu-project.org/apiref/icu4j/com/ibm/icu/text/MessageFormat.html simpleArg syntax}\n * implemented using the\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl Intl}\n * object defined by ECMA-402.\n *\n * **Note**: Intl is not defined in default Node until 0.11.15 / 0.12.0, so\n * earlier versions require a {@link https://www.npmjs.com/package/intl polyfill}.\n * Therefore {@link MessageFormat.withIntlSupport} needs to be true for these\n * functions to be available for inclusion in the output.\n *\n * @see MessageFormat#setIntlSupport\n *\n * @namespace\n * @memberof MessageFormat\n * @property {function} number - Represent a number as an integer, percent or currency value\n * @property {function} date - Represent a date as a full/long/default/short string\n * @property {function} time - Represent a time as a full/long/default/short string\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\"\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = new MessageFormat('en', null, {number: MessageFormat.number});\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\" */\nMessageFormat.formatters = {};\n\n/** Enable or disable support for the default formatters, which require the\n * `Intl` object. Note that this can't be autodetected, as the environment\n * in which the formatted text is compiled into Javascript functions is not\n * necessarily the same environment in which they will get executed.\n *\n * @see MessageFormat.formatters\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {Object} The MessageFormat instance, to allow for chaining\n * @example\n * > var Intl = require('intl');\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > mf.compile(\"The total is {V,number,currency}.\")({V:5.5});\n * \"The total is €5.50.\" */\n\n\n\n/** A set of utility functions that are called by the compiled Javascript\n * functions, these are included locally in the output of {@link\n * MessageFormat#compile compile()}.\n *\n * @namespace\n * @memberof MessageFormat */\nMessageFormat.prototype.runtime = {\n\n /** Utility function for `#` in plural rules\n *\n * @param {number} value - The value to operate on\n * @param {number} [offset=0] - An optional offset, set by the surrounding context */\n number: function(value, offset) {\n if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n return value - (offset || 0);\n },\n\n /** Utility function for `{N, plural|selectordinal, ...}`\n *\n * @param {number} value - The key to use to find a pluralization rule\n * @param {number} offset - An offset to apply to `value`\n * @param {function} lcfunc - A locale function from `pluralFuncs`\n * @param {Object.} data - The object from which results are looked up\n * @param {?boolean} isOrdinal - If true, use ordinal rather than cardinal rules\n * @returns {string} The result of the pluralization */\n plural: function(value, offset, lcfunc, data, isOrdinal) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n if (offset) value -= offset;\n var key = lcfunc(value, isOrdinal);\n if (key in data) return data[key]();\n return data.other();\n },\n\n /** Utility function for `{N, select, ...}`\n *\n * @param {number} value - The key to use to find a selection\n * @param {Object.} data - The object from which results are looked up\n * @returns {string} The result of the select statement */\n select: function(value, data) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n return data.other()\n },\n\n /** Pluralization functions included in compiled output\n * @instance\n * @type Object. */\n pluralFuncs: {},\n\n /** Custom formatting functions called by `{var, fn[, args]*}` syntax\n *\n * For examples, see {@link MessageFormat.formatters}\n *\n * @instance\n * @see MessageFormat.formatters\n * @type Object. */\n fmt: {},\n\n /** Custom stringifier to clean up browser inconsistencies\n * @instance */\n toString: function () {\n var _stringify = function(o, level) {\n if (typeof o != 'object') {\n var funcStr = o.toString().replace(/^(function )\\w*/, '$1');\n var indent = /([ \\t]*)\\S.*$/.exec(funcStr);\n return indent ? funcStr.replace(new RegExp('^' + indent[1], 'mg'), '') : funcStr;\n }\n var s = [];\n for (var i in o) if (i != 'toString') {\n if (level == 0) s.push('var ' + i + ' = ' + _stringify(o[i], level + 1) + ';\\n');\n else s.push(propname(i) + ': ' + _stringify(o[i], level + 1));\n }\n if (level == 0) return s.join('');\n if (s.length == 0) return '{}';\n var indent = ' '; while (--level) indent += ' ';\n return '{\\n' + s.join(',\\n').replace(/^/gm, indent) + '\\n}';\n };\n return _stringify(this, 0);\n }\n};\n\n\n/** Recursively map an AST to its resulting string\n *\n * @memberof MessageFormat\n *\n * @param ast - the Ast node for which the JS code should be generated\n *\n * @private */\nMessageFormat.prototype._precompile = function(ast, data) {\n data = data || { keys: {}, offset: {} };\n var r = [], i, tmp, args = [];\n\n switch ( ast.type ) {\n case 'messageFormatPattern':\n for ( i = 0; i < ast.statements.length; ++i ) {\n r.push(this._precompile( ast.statements[i], data ));\n }\n tmp = r.join(' + ') || '\"\"';\n return data.pf_count ? tmp : 'function(d) { return ' + tmp + '; }';\n\n case 'messageFormatElement':\n data.pf_count = data.pf_count || 0;\n if ( ast.output ) {\n return propname(ast.argumentIndex, 'd');\n }\n else {\n data.keys[data.pf_count] = ast.argumentIndex;\n return this._precompile( ast.elementFormat, data );\n }\n return '';\n\n case 'elementFormat':\n args = [ propname(data.keys[data.pf_count], 'd') ];\n switch (ast.key) {\n case 'select':\n args.push(this._precompile(ast.val, data));\n return 'select(' + args.join(', ') + ')';\n case 'selectordinal':\n args = args.concat([ 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data), 1 ]);\n return 'plural(' + args.join(', ') + ')';\n case 'plural':\n data.offset[data.pf_count || 0] = ast.val.offset || 0;\n args = args.concat([ data.offset[data.pf_count] || 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data) ]);\n return 'plural(' + args.join(', ') + ')';\n default:\n if (this.withIntlSupport && !(ast.key in this.runtime.fmt) && (ast.key in MessageFormat.formatters)) {\n tmp = MessageFormat.formatters[ast.key];\n this.runtime.fmt[ast.key] = (typeof tmp(this) == 'function') ? tmp(this) : tmp;\n }\n args.push(JSON.stringify(this.lc));\n if (ast.val && ast.val.length) args.push(JSON.stringify(ast.val.length == 1 ? ast.val[0] : ast.val));\n return 'fmt.' + ast.key + '(' + args.join(', ') + ')';\n }\n\n case 'pluralFormatPattern':\n case 'selectFormatPattern':\n data.pf_count = data.pf_count || 0;\n if (ast.type == 'selectFormatPattern') data.offset[data.pf_count] = 0;\n var needOther = true;\n for (i = 0; i < ast.pluralForms.length; ++i) {\n var key = ast.pluralForms[i].key;\n if (key === 'other') needOther = false;\n var data_copy = JSON.parse(JSON.stringify(data));\n data_copy.pf_count++;\n r.push(propname(key) + ': function() { return ' + this._precompile(ast.pluralForms[i].val, data_copy) + ';}');\n }\n if (needOther) throw new Error(\"No 'other' form found in \" + ast.type + \" \" + data.pf_count);\n return '{ ' + r.join(', ') + ' }';\n\n case 'string':\n return JSON.stringify(ast.val || \"\");\n\n case 'octothorpe':\n if (!data.pf_count) return '\"#\"';\n args = [ propname(data.keys[data.pf_count-1], 'd') ];\n if (data.offset[data.pf_count-1]) args.push(data.offset[data.pf_count-1]);\n return 'number(' + args.join(', ') + ')';\n\n default:\n throw new Error( 'Bad AST type: ' + ast.type );\n }\n};\n\n/** Compile messages into an executable function with clean string\n * representation.\n *\n * If `messages` is a single string including ICU MessageFormat declarations,\n * `opt` is ignored and the returned function takes a single Object parameter\n * `d` representing each of the input's defined variables. The returned\n * function will be defined in a local scope that includes all the required\n * runtime variables.\n *\n * If `messages` is a map of keys to strings, or a map of namespace keys to\n * such key/string maps, the returned function will fill the specified global\n * with javascript functions matching the structure of the input. In such use,\n * the output of `compile()` is expected to be serialized using `.toString()`,\n * and will include definitions of the runtime functions. If `opt.global` is\n * null, calling the output function will return the object itself.\n *\n * Together, the input parameters should match the following patterns:\n * ```js\n * messages = \"string\" || { key0: \"string0\", key1: \"string1\", ... } || {\n * ns0: { key0: \"string0\", key1: \"string1\", ... },\n * ns1: { key0: \"string0\", key1: \"string1\", ... },\n * ...\n * }\n *\n * opt = null || {\n * locale: null || {\n * ns0: \"lc0\" || [ \"lc0\", ... ],\n * ns1: \"lc1\" || [ \"lc1\", ... ],\n * ...\n * },\n * global: null || \"module.exports\" || \"exports\" || \"i18n\" || ...\n * }\n * ```\n *\n * @memberof MessageFormat\n * @param {string|Object}\n * messages - The input message(s) to be compiled, in ICU MessageFormat\n * @param {Object} [opt={}] - Options controlling output for non-simple intput\n * @param {Object} [opt.locale] - The locales to use for the messages, with a\n * structure matching that of `messages`\n * @param {string} [opt.global=\"\"] - The global variable that the output\n * function should use, or a null string for none. \"exports\" and\n * \"module.exports\" are recognised as special cases.\n * @returns {function} The first match found for the given locale(s)\n *\n * @example\n * > var MessageFormat = require('messageformat'),\n * ... mf = new MessageFormat('en'),\n * ... mfunc0 = mf.compile('A {TYPE} example.');\n * > mfunc0({TYPE:'simple'})\n * 'A simple example.'\n * > mfunc0.toString()\n * 'function (d) { return \"A \" + d.TYPE + \" example.\"; }'\n *\n * @example\n * > var msgSet = { a: 'A {TYPE} example.',\n * ... b: 'This has {COUNT, plural, one{one member} other{# members}}.' },\n * ... mfuncSet = mf.compile(msgSet);\n * > mfuncSet().a({TYPE:'more complex'})\n * 'A more complex example.'\n * > mfuncSet().b({COUNT:2})\n * 'This has 2 members.'\n *\n * > console.log(mfuncSet.toString())\n * function anonymous() {\n * var number = function (value, offset) {\n * if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n * return value - (offset || 0);\n * };\n * var plural = function (value, offset, lcfunc, data, isOrdinal) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * if (offset) value -= offset;\n * var key = lcfunc(value, isOrdinal);\n * if (key in data) return data[key]();\n * return data.other();\n * };\n * var select = function (value, data) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * return data.other()\n * };\n * var pluralFuncs = {\n * en: function (n, ord) {\n * var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n * n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n * if (ord) return (n10 == 1 && n100 != 11) ? 'one'\n * : (n10 == 2 && n100 != 12) ? 'two'\n * : (n10 == 3 && n100 != 13) ? 'few'\n * : 'other';\n * return (n == 1 && v0) ? 'one' : 'other';\n * }\n * };\n * var fmt = {};\n *\n * return {\n * a: function(d) { return \"A \" + d.TYPE + \" example.\"; },\n * b: function(d) { return \"This has \" + plural(d.COUNT, 0, pluralFuncs.en, { one: function() { return \"one member\";}, other: function() { return number(d.COUNT)+\" members\";} }) + \".\"; }\n * }\n * }\n *\n * @example\n * > mf.runtime.pluralFuncs.fi = MessageFormat.plurals.fi;\n * > var multiSet = { en: { a: 'A {TYPE} example.',\n * ... b: 'This is the {COUNT, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} example.' },\n * ... fi: { a: '{TYPE} esimerkki.',\n * ... b: 'Tämä on {COUNT, selectordinal, other{#.}} esimerkki.' } },\n * ... multiSetLocales = { en: 'en', fi: 'fi' },\n * ... mfuncSet = mf.compile(multiSet, { locale: multiSetLocales, global: 'i18n' });\n * > mfuncSet(this);\n * > i18n.en.b({COUNT:3})\n * 'This is the 3rd example.'\n * > i18n.fi.b({COUNT:3})\n * 'Tämä on 3. esimerkki.' */\nMessageFormat.prototype.compile = function ( messages, opt ) {\n var r = {}, lc0 = this.lc,\n compileMsg = function(self, msg) {\n try {\n var ast = MessageFormat._parse(msg);\n return self._precompile(ast);\n } catch (e) {\n throw new Error((ast ? 'Precompiler' : 'Parser') + ' error: ' + e.toString());\n }\n },\n stringify = function(r, level) {\n if (!level) level = 0;\n if (typeof r != 'object') return r;\n var o = [], indent = '';\n for (var i = 0; i < level; ++i) indent += ' ';\n for (var k in r) o.push('\\n' + indent + ' ' + propname(k) + ': ' + stringify(r[k], level + 1));\n return '{' + o.join(',') + '\\n' + indent + '}';\n };\n\n if (typeof messages == 'string') {\n var f = new Function(\n 'number, plural, select, pluralFuncs, fmt',\n 'return ' + compileMsg(this, messages));\n return f(this.runtime.number, this.runtime.plural, this.runtime.select,\n this.runtime.pluralFuncs, this.runtime.fmt);\n }\n\n opt = opt || {};\n\n for (var ns in messages) {\n if (opt.locale) this.lc = opt.locale[ns] && [].concat(opt.locale[ns]) || lc0;\n if (typeof messages[ns] == 'string') {\n try { r[ns] = compileMsg(this, messages[ns]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + ns + '`:'); throw e; }\n } else {\n r[ns] = {};\n for (var key in messages[ns]) {\n try { r[ns][key] = compileMsg(this, messages[ns][key]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + key + '` in `' + ns + '`:'); throw e; }\n }\n }\n }\n\n this.lc = lc0;\n var s = this.runtime.toString() + '\\n';\n switch (opt.global || '') {\n case 'exports':\n var o = [];\n for (var k in r) o.push(propname(k, 'exports') + ' = ' + stringify(r[k]));\n return new Function(s + o.join(';\\n'));\n case 'module.exports':\n return new Function(s + 'module.exports = ' + stringify(r));\n case '':\n return new Function(s + 'return ' + stringify(r));\n default:\n return new Function('G', s + propname(opt.global, 'G') + ' = ' + stringify(r));\n }\n};\n\n\nreturn MessageFormat;\n}());\n/* eslint-enable */\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateMessageBundle = function( cldr ) {\n\tvalidate(\n\t\t\"E_MISSING_MESSAGE_BUNDLE\",\n\t\t\"Missing message bundle for locale `{locale}`.\",\n\t\tcldr.attributes.bundle && cldr.get( \"globalize-messages/{bundle}\" ) !== undefined,\n\t\t{\n\t\t\tlocale: cldr.locale\n\t\t}\n\t);\n};\n\n\n\n\nvar validateMessagePresence = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate( \"E_MISSING_MESSAGE\", \"Missing required message content `{path}`.\",\n\t\tvalue !== undefined, { path: path } );\n};\n\n\n\n\nvar validateMessageType = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate(\n\t\t\"E_INVALID_MESSAGE\",\n\t\t\"Invalid message content `{path}`. {expected} expected.\",\n\t\ttypeof value === \"string\",\n\t\t{\n\t\t\texpected: \"a string\",\n\t\t\tpath: path\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterTypeMessageVariables = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || isPlainObject( value ) || Array.isArray( value ),\n\t\t\"Array or Plain Object\"\n\t);\n};\n\n\n\n\nvar messageFormatterFn = function( formatter ) {\n\treturn function messageFormatter( variables ) {\n\t\tif ( typeof variables === \"number\" || typeof variables === \"string\" ) {\n\t\t\tvariables = [].slice.call( arguments, 0 );\n\t\t}\n\t\tvalidateParameterTypeMessageVariables( variables, \"variables\" );\n\t\treturn formatter( variables );\n\t};\n};\n\n\n\n\nvar messageFormatterRuntimeBind = function( cldr, messageformatter ) {\n\tvar locale = cldr.locale,\n\t\torigToString = messageformatter.toString;\n\n\tmessageformatter.toString = function() {\n\t\tvar argNames, argValues, output,\n\t\t\targs = {};\n\n\t\t// Properly adjust SlexAxton/messageformat.js compiled variables with Globalize variables:\n\t\toutput = origToString.call( messageformatter );\n\n\t\tif ( /number\\(/.test( output ) ) {\n\t\t\targs.number = \"messageFormat.number\";\n\t\t}\n\n\t\tif ( /plural\\(/.test( output ) ) {\n\t\t\targs.plural = \"messageFormat.plural\";\n\t\t}\n\n\t\tif ( /select\\(/.test( output ) ) {\n\t\t\targs.select = \"messageFormat.select\";\n\t\t}\n\n\t\toutput.replace( /pluralFuncs(\\[([^\\]]+)\\]|\\.([a-zA-Z]+))/, function( match ) {\n\t\t\targs.pluralFuncs = \"{\" +\n\t\t\t\t\"\\\"\" + locale + \"\\\": Globalize(\\\"\" + locale + \"\\\").pluralGenerator()\" +\n\t\t\t\t\"}\";\n\t\t\treturn match;\n\t\t});\n\n\t\targNames = Object.keys( args ).join( \", \" );\n\t\targValues = Object.keys( args ).map(function( key ) {\n\t\t\treturn args[ key ];\n\t\t}).join( \", \" );\n\n\t\treturn \"(function( \" + argNames + \" ) {\\n\" +\n\t\t\t\" return \" + output + \"\\n\" +\n\t\t\t\"})(\" + argValues + \")\";\n\t};\n\n\treturn messageformatter;\n};\n\n\n\n\nvar slice = [].slice;\n\n/**\n * .loadMessages( json )\n *\n * @json [JSON]\n *\n * Load translation data.\n */\nGlobalize.loadMessages = function( json ) {\n\tvar locale,\n\t\tcustomData = {\n\t\t\t\"globalize-messages\": json,\n\t\t\t\"main\": {}\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\t// Set available bundles by populating customData main dataset.\n\tfor ( locale in json ) {\n\t\tif ( json.hasOwnProperty( locale ) ) {\n\t\t\tcustomData.main[ locale ] = {};\n\t\t}\n\t}\n\n\tCldr.load( customData );\n};\n\n/**\n * .messageFormatter( path )\n *\n * @path [String or Array]\n *\n * Format a message given its path.\n */\nGlobalize.messageFormatter =\nGlobalize.prototype.messageFormatter = function( path ) {\n\tvar cldr, formatter, message, pluralGenerator, returnFn,\n\t\targs = slice.call( arguments, 0 );\n\n\tvalidateParameterPresence( path, \"path\" );\n\tvalidateParameterType( path, \"path\", typeof path === \"string\" || Array.isArray( path ),\n\t\t\"a String nor an Array\" );\n\n\tpath = alwaysArray( path );\n\tcldr = this.cldr;\n\n\tvalidateDefaultLocale( cldr );\n\tvalidateMessageBundle( cldr );\n\n\tmessage = cldr.get( [ \"globalize-messages/{bundle}\" ].concat( path ) );\n\tvalidateMessagePresence( path, message );\n\n\t// If message is an Array, concatenate it.\n\tif ( Array.isArray( message ) ) {\n\t\tmessage = message.join( \" \" );\n\t}\n\tvalidateMessageType( path, message );\n\n\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\tpluralGenerator = this.plural !== undefined ?\n\t\tthis.pluralGenerator() :\n\t\tcreateErrorPluralModulePresence;\n\n\tformatter = new MessageFormat( cldr.locale, pluralGenerator ).compile( message );\n\n\treturnFn = messageFormatterFn( formatter );\n\n\truntimeBind( args, cldr, returnFn,\n\t\t[ messageFormatterRuntimeBind( cldr, formatter ), pluralGenerator ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatMessage( path [, variables] )\n *\n * @path [String or Array]\n *\n * @variables [Number, String, Array or Object]\n *\n * Format a message given its path.\n */\nGlobalize.formatMessage =\nGlobalize.prototype.formatMessage = function( path /* , variables */ ) {\n\treturn this.messageFormatter( path ).apply( {}, slice.call( arguments, 1 ) );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar createError = Globalize._createError,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\tregexpEscape = Globalize._regexpEscape,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterRange = Globalize._validateParameterRange,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\n\n\nvar createErrorUnsupportedFeature = function( feature ) {\n\treturn createError( \"E_UNSUPPORTED\", \"Unsupported {feature}.\", {\n\t\tfeature: feature\n\t});\n};\n\n\n\n\nvar validateParameterTypeNumber = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"number\",\n\t\t\"Number\"\n\t);\n};\n\n\n\n\nvar validateParameterTypeString = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\",\n\t\t\"a string\"\n\t);\n};\n\n\n\n\nvar numberFormatterFn = function( numberToPartsFormatter ) {\n\treturn function numberFormatter( value ) {\n\t\treturn partsJoin( numberToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * NumberingSystem( cldr )\n *\n * - http://www.unicode.org/reports/tr35/tr35-numbers.html#otherNumberingSystems\n * - http://cldr.unicode.org/index/bcp47-extension\n * - http://www.unicode.org/reports/tr35/#u_Extension\n */\nvar numberNumberingSystem = function( cldr ) {\n\tvar nu = cldr.attributes[ \"u-nu\" ];\n\n\tif ( nu ) {\n\t\tif ( nu === \"traditio\" ) {\n\t\t\tnu = \"traditional\";\n\t\t}\n\t\tif ( [ \"native\", \"traditional\", \"finance\" ].indexOf( nu ) !== -1 ) {\n\n\t\t\t// Unicode locale extension `u-nu` is set using either (native, traditional or\n\t\t\t// finance). So, lookup the respective locale's numberingSystem and return it.\n\t\t\treturn cldr.main([ \"numbers/otherNumberingSystems\", nu ]);\n\t\t}\n\n\t\t// Unicode locale extension `u-nu` is set with an explicit numberingSystem. Return it.\n\t\treturn nu;\n\t}\n\n\t// Return the default numberingSystem.\n\treturn cldr.main( \"numbers/defaultNumberingSystem\" );\n};\n\n\n\n\n/**\n * Compact( name, cldr )\n *\n * @compactType [String] Compact mode, `short` or `long`.\n *\n * @cldr [Cldr instance].\n *\n * Return the localized compact map for the given compact mode.\n */\nvar numberCompact = function( compactType, cldr ) {\n\tvar maxExponent = 0;\n\n\tvar object = cldr.main([\n\t\t\"numbers/decimalFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\tcompactType,\n\t\t\"decimalFormat\"\n\t]);\n\n\tobject = Object.keys( object ).reduce(function( newObject, compactKey ) {\n\t\tvar numberExponent = compactKey.split( \"0\" ).length - 1;\n\t\tvar pluralForm = compactKey.split( \"-\" )[ 2 ];\n\t\tnewObject[ numberExponent ] = newObject[ numberExponent ] || {};\n\t\tnewObject[ numberExponent ][ pluralForm ] = object[ compactKey ];\n\t\tmaxExponent = Math.max( numberExponent, maxExponent );\n\t\treturn newObject;\n\t}, {});\n\n\tobject.maxExponent = maxExponent;\n\n\treturn object;\n};\n\n\n\n\n/**\n * nuMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return digits map if numbering system is different than `latn`.\n */\nvar numberNumberingSystemDigitsMap = function( cldr ) {\n\tvar aux,\n\t\tnu = numberNumberingSystem( cldr );\n\n\tif ( nu === \"latn\" ) {\n\t\treturn;\n\t}\n\n\taux = cldr.supplemental([ \"numberingSystems\", nu ]);\n\n\tif ( aux._type !== \"numeric\" ) {\n\t\tthrow createErrorUnsupportedFeature( \"`\" + aux._type + \"` numbering system\" );\n\t}\n\n\treturn aux._digits;\n};\n\n\n\n\n/**\n * EBNF representation:\n *\n * number_pattern_re = prefix?\n * padding?\n * (integer_fraction_pattern | significant_pattern)\n * scientific_notation?\n * suffix?\n *\n * prefix = non_number_stuff\n *\n * padding = \"*\" regexp(.)\n *\n * integer_fraction_pattern = integer_pattern\n * fraction_pattern?\n *\n * integer_pattern = regexp([#,]*[0,]*0+)\n *\n * fraction_pattern = \".\" regexp(0*[0-9]*#*)\n *\n * significant_pattern = regexp([#,]*@+#*)\n *\n * scientific_notation = regexp(E\\+?0+)\n *\n * suffix = non_number_stuff\n *\n * non_number_stuff = regexp(('[^']+'|''|[^*#@0,.E])*)\n *\n *\n * Regexp groups:\n *\n * 0: number_pattern_re\n * 1: prefix\n * 2: -\n * 3: -\n * 4: padding\n * 5: (integer_fraction_pattern | significant_pattern)\n * 6: integer_fraction_pattern\n * 7: integer_pattern\n * 8: fraction_pattern\n * 9: significant_pattern\n * 10: scientific_notation\n * 11: suffix\n * 12: -\n */\nvar numberPatternRe = ( /^(('([^']|'')*'|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/ );\n\n\n\n\n/**\n * format( number, pattern )\n *\n * @number [Number].\n *\n * @pattern [String] raw pattern for numbers.\n *\n * Return the formatted number.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberPatternProperties = function( pattern ) {\n\tvar aux1, aux2, fractionPattern, integerFractionOrSignificantPattern, integerPattern,\n\t\tmaximumFractionDigits, maximumSignificantDigits, minimumFractionDigits,\n\t\tminimumIntegerDigits, minimumSignificantDigits, padding, prefix, primaryGroupingSize,\n\t\troundIncrement, scientificNotation, secondaryGroupingSize, significantPattern, suffix;\n\n\tpattern = pattern.match( numberPatternRe );\n\tif ( !pattern ) {\n\t\tthrow new Error( \"Invalid pattern: \" + pattern );\n\t}\n\n\tprefix = pattern[ 1 ];\n\tpadding = pattern[ 4 ];\n\tintegerFractionOrSignificantPattern = pattern[ 5 ];\n\tsignificantPattern = pattern[ 9 ];\n\tscientificNotation = pattern[ 10 ];\n\tsuffix = pattern[ 11 ];\n\n\t// Significant digit format\n\tif ( significantPattern ) {\n\t\tsignificantPattern.replace( /(@+)(#*)/, function( _match, minimumSignificantDigitsMatch, maximumSignificantDigitsMatch ) {\n\t\t\tminimumSignificantDigits = minimumSignificantDigitsMatch.length;\n\t\t\tmaximumSignificantDigits = minimumSignificantDigits +\n\t\t\t\tmaximumSignificantDigitsMatch.length;\n\t\t});\n\n\t// Integer and fractional format\n\t} else {\n\t\tfractionPattern = pattern[ 8 ];\n\t\tintegerPattern = pattern[ 7 ];\n\n\t\tif ( fractionPattern ) {\n\n\t\t\t// Minimum fraction digits, and rounding.\n\t\t\tfractionPattern.replace( /[0-9]+/, function( match ) {\n\t\t\t\tminimumFractionDigits = match;\n\t\t\t});\n\t\t\tif ( minimumFractionDigits ) {\n\t\t\t\troundIncrement = +( \"0.\" + minimumFractionDigits );\n\t\t\t\tminimumFractionDigits = minimumFractionDigits.length;\n\t\t\t} else {\n\t\t\t\tminimumFractionDigits = 0;\n\t\t\t}\n\n\t\t\t// Maximum fraction digits\n\t\t\t// 1: ignore decimal character\n\t\t\tmaximumFractionDigits = fractionPattern.length - 1; /* 1 */\n\t\t} else {\n\t\t\tminimumFractionDigits = 0;\n\t\t\tmaximumFractionDigits = 0;\n\t\t}\n\n\t\t// Minimum integer digits\n\t\tintegerPattern.replace( /0+$/, function( match ) {\n\t\t\tminimumIntegerDigits = match.length;\n\t\t});\n\t}\n\n\t// Scientific notation\n\tif ( scientificNotation ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"scientific notation (not implemented)\"\n\t\t});\n\t}\n\n\t// Padding\n\tif ( padding ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"padding (not implemented)\"\n\t\t});\n\t}\n\n\t// Grouping\n\tif ( ( aux1 = integerFractionOrSignificantPattern.lastIndexOf( \",\" ) ) !== -1 ) {\n\n\t\t// Primary grouping size is the interval between the last group separator and the end of\n\t\t// the integer (or the end of the significant pattern).\n\t\taux2 = integerFractionOrSignificantPattern.split( \".\" )[ 0 ];\n\t\tprimaryGroupingSize = aux2.length - aux1 - 1;\n\n\t\t// Secondary grouping size is the interval between the last two group separators.\n\t\tif ( ( aux2 = integerFractionOrSignificantPattern.lastIndexOf( \",\", aux1 - 1 ) ) !== -1 ) {\n\t\t\tsecondaryGroupingSize = aux1 - 1 - aux2;\n\t\t}\n\t}\n\n\t// Return:\n\t// 0: @prefix String\n\t// 1: @padding Array [ , ] TODO\n\t// 2: @minimumIntegerDigits non-negative integer Number value indicating the minimum integer\n\t// digits to be used. Numbers will be padded with leading zeroes if necessary.\n\t// 3: @minimumFractionDigits and\n\t// 4: @maximumFractionDigits are non-negative integer Number values indicating the minimum and\n\t// maximum fraction digits to be used. Numbers will be rounded or padded with trailing\n\t// zeroes if necessary.\n\t// 5: @minimumSignificantDigits and\n\t// 6: @maximumSignificantDigits are positive integer Number values indicating the minimum and\n\t// maximum fraction digits to be shown. Either none or both of these properties are\n\t// present; if they are, they override minimum and maximum integer and fraction digits\n\t// – the formatter uses however many integer and fraction digits are required to display\n\t// the specified number of significant digits.\n\t// 7: @roundIncrement Decimal round increment or null\n\t// 8: @primaryGroupingSize\n\t// 9: @secondaryGroupingSize\n\t// 10: @suffix String\n\treturn [\n\t\tprefix,\n\t\tpadding,\n\t\tminimumIntegerDigits,\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t\tminimumSignificantDigits,\n\t\tmaximumSignificantDigits,\n\t\troundIncrement,\n\t\tprimaryGroupingSize,\n\t\tsecondaryGroupingSize,\n\t\tsuffix\n\t];\n};\n\n\n\n\n/**\n * Symbol( name, cldr )\n *\n * @name [String] Symbol name.\n *\n * @cldr [Cldr instance].\n *\n * Return the localized symbol given its name.\n */\nvar numberSymbol = function( name, cldr ) {\n\treturn cldr.main([\n\t\t\"numbers/symbols-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\tname\n\t]);\n};\n\n\n\n\nvar numberSymbolName = {\n\t\".\": \"decimal\",\n\t\",\": \"group\",\n\t\"%\": \"percentSign\",\n\t\"+\": \"plusSign\",\n\t\"-\": \"minusSign\",\n\t\"E\": \"exponential\",\n\t\"\\u2030\": \"perMille\"\n};\n\n\n\n\n/**\n * symbolMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return the (localized symbol, pattern symbol) key value pair, eg. {\n * \".\": \"٫\",\n * \",\": \"٬\",\n * \"%\": \"٪\",\n * ...\n * };\n */\nvar numberSymbolMap = function( cldr ) {\n\tvar symbol,\n\t\tsymbolMap = {};\n\n\tfor ( symbol in numberSymbolName ) {\n\t\tsymbolMap[ symbol ] = numberSymbol( numberSymbolName[ symbol ], cldr );\n\t}\n\n\treturn symbolMap;\n};\n\n\n\n\nvar numberTruncate = function( value ) {\n\tif ( isNaN( value ) ) {\n\t\treturn NaN;\n\t}\n\treturn Math[ value < 0 ? \"ceil\" : \"floor\" ]( value );\n};\n\n\n\n\n/**\n * round( method )\n *\n * @method [String] with either \"round\", \"ceil\", \"floor\", or \"truncate\".\n *\n * Return function( value, incrementOrExp ):\n *\n * @value [Number] eg. 123.45.\n *\n * @incrementOrExp [Number] optional, eg. 0.1; or\n * [Object] Either { increment: } or { exponent: }\n *\n * Return the rounded number, eg:\n * - round( \"round\" )( 123.45 ): 123;\n * - round( \"ceil\" )( 123.45 ): 124;\n * - round( \"floor\" )( 123.45 ): 123;\n * - round( \"truncate\" )( 123.45 ): 123;\n * - round( \"round\" )( 123.45, 0.1 ): 123.5;\n * - round( \"round\" )( 123.45, 10 ): 120;\n *\n * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n * Ref: #376\n */\nvar numberRound = function( method ) {\n\tmethod = method || \"round\";\n\tmethod = method === \"truncate\" ? numberTruncate : Math[ method ];\n\n\treturn function( value, incrementOrExp ) {\n\t\tvar exp, increment;\n\n\t\tvalue = +value;\n\n\t\t// If the value is not a number, return NaN.\n\t\tif ( isNaN( value ) ) {\n\t\t\treturn NaN;\n\t\t}\n\n\t\t// Exponent given.\n\t\tif ( typeof incrementOrExp === \"object\" && incrementOrExp.exponent ) {\n\t\t\texp = +incrementOrExp.exponent;\n\t\t\tincrement = 1;\n\n\t\t\tif ( exp === 0 ) {\n\t\t\t\treturn method( value );\n\t\t\t}\n\n\t\t\t// If the exp is not an integer, return NaN.\n\t\t\tif ( !( typeof exp === \"number\" && exp % 1 === 0 ) ) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\n\t\t// Increment given.\n\t\t} else {\n\t\t\tincrement = +incrementOrExp || 1;\n\n\t\t\tif ( increment === 1 ) {\n\t\t\t\treturn method( value );\n\t\t\t}\n\n\t\t\t// If the increment is not a number, return NaN.\n\t\t\tif ( isNaN( increment ) ) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\n\t\t\tincrement = increment.toExponential().split( \"e\" );\n\t\t\texp = +increment[ 1 ];\n\t\t\tincrement = +increment[ 0 ];\n\t\t}\n\n\t\t// Shift & Round\n\t\tvalue = value.toString().split( \"e\" );\n\t\tvalue[ 0 ] = +value[ 0 ] / increment;\n\t\tvalue[ 1 ] = value[ 1 ] ? ( +value[ 1 ] - exp ) : -exp;\n\t\tvalue = method( +( value[ 0 ] + \"e\" + value[ 1 ] ) );\n\n\t\t// Shift back\n\t\tvalue = value.toString().split( \"e\" );\n\t\tvalue[ 0 ] = +value[ 0 ] * increment;\n\t\tvalue[ 1 ] = value[ 1 ] ? ( +value[ 1 ] + exp ) : exp;\n\t\treturn +( value[ 0 ] + \"e\" + value[ 1 ] );\n\t};\n};\n\n\n\n\n/**\n * formatProperties( pattern, cldr [, options] )\n *\n * @pattern [String] raw pattern for numbers.\n *\n * @cldr [Cldr instance].\n *\n * @options [Object]:\n * - minimumIntegerDigits [Number]\n * - minimumFractionDigits, maximumFractionDigits [Number]\n * - minimumSignificantDigits, maximumSignificantDigits [Number]\n * - round [String] \"ceil\", \"floor\", \"round\" (default), or \"truncate\".\n * - useGrouping [Boolean] default true.\n *\n * Return the processed properties that will be used in number/format.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberFormatProperties = function( pattern, cldr, options ) {\n\tvar negativePattern, negativePrefix, negativeProperties, negativeSuffix, positivePattern,\n\t\troundFn, properties;\n\n\tfunction getOptions( attribute, propertyIndex ) {\n\t\tif ( attribute in options ) {\n\t\t\tproperties[ propertyIndex ] = options[ attribute ];\n\t\t}\n\t}\n\n\toptions = options || {};\n\tpattern = pattern.split( \";\" );\n\n\tpositivePattern = pattern[ 0 ];\n\n\tnegativePattern = pattern[ 1 ] || \"-\" + positivePattern;\n\tnegativeProperties = numberPatternProperties( negativePattern );\n\tnegativePrefix = negativeProperties[ 0 ];\n\tnegativeSuffix = negativeProperties[ 10 ];\n\n\t// Have runtime code to refer to numberRound() instead of including it explicitly.\n\troundFn = numberRound( options.round );\n\troundFn.generatorString = function() {\n\t\treturn \"numberRound(\" + ( options.round ? \"\\\"\" + options.round + \"\\\"\" : \"\" ) + \")\";\n\t};\n\n\tproperties = numberPatternProperties( positivePattern ).concat([\n\t\tpositivePattern,\n\t\tnegativePrefix + positivePattern + negativeSuffix,\n\t\tnegativePrefix,\n\t\tnegativeSuffix,\n\t\troundFn,\n\t\tnumberSymbol( \"infinity\", cldr ),\n\t\tnumberSymbol( \"nan\", cldr ),\n\t\tnumberSymbolMap( cldr ),\n\t\tnumberNumberingSystemDigitsMap( cldr )\n\t]);\n\n\tif ( options.compact ) {\n\n\t\t// The compact digits number pattern is always `0+`, so override the following properties.\n\t\t// Note: minimumIntegerDigits would actually range from `0` to `000` based on the scale of\n\t\t// the value to be formatted, though we're always using 1 as a simplification, because the\n\t\t// number won't be zero-padded since we chose the right format based on the scale, i.e.,\n\t\t// we'd never see something like `003M` anyway.\n\t\tproperties[ 2 ] = 1; // minimumIntegerDigits\n\t\tproperties[ 3 ] = 0; // minimumFractionDigits\n\t\tproperties[ 4 ] = 0; // maximumFractionDigits\n\t\tproperties[ 5 ] = // minimumSignificantDigits &\n\t\t\tproperties[ 6 ] = undefined; // maximumSignificantDigits\n\n\t\tproperties[ 20 ] = numberCompact( options.compact, cldr );\n\t}\n\n\tgetOptions( \"minimumIntegerDigits\", 2 );\n\tgetOptions( \"minimumFractionDigits\", 3 );\n\tgetOptions( \"maximumFractionDigits\", 4 );\n\tgetOptions( \"minimumSignificantDigits\", 5 );\n\tgetOptions( \"maximumSignificantDigits\", 6 );\n\n\t// Grouping separators\n\tif ( options.useGrouping === false ) {\n\t\tproperties[ 8 ] = null;\n\t}\n\n\t// Normalize number of digits if only one of either minimumFractionDigits or\n\t// maximumFractionDigits is passed in as an option\n\tif ( \"minimumFractionDigits\" in options && !( \"maximumFractionDigits\" in options ) ) {\n\n\t\t// maximumFractionDigits = Math.max( minimumFractionDigits, maximumFractionDigits );\n\t\tproperties[ 4 ] = Math.max( properties[ 3 ], properties[ 4 ] );\n\t} else if ( !( \"minimumFractionDigits\" in options ) &&\n\t\t\t\"maximumFractionDigits\" in options ) {\n\n\t\t// minimumFractionDigits = Math.min( minimumFractionDigits, maximumFractionDigits );\n\t\tproperties[ 3 ] = Math.min( properties[ 3 ], properties[ 4 ] );\n\t}\n\n\t// Return:\n\t// 0-10: see number/pattern-properties.\n\t// 11: @positivePattern [String] Positive pattern.\n\t// 12: @negativePattern [String] Negative pattern.\n\t// 13: @negativePrefix [String] Negative prefix.\n\t// 14: @negativeSuffix [String] Negative suffix.\n\t// 15: @round [Function] Round function.\n\t// 16: @infinitySymbol [String] Infinity symbol.\n\t// 17: @nanSymbol [String] NaN symbol.\n\t// 18: @symbolMap [Object] A bunch of other symbols.\n\t// 19: @nuDigitsMap [Array] Digits map if numbering system is different than `latn`.\n\t// 20: @compactMap [Object] Map of per-digit-count format patterns for specified compact mode.\n\treturn properties;\n};\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var formatSymbols = require( \"@unicode/unicode-13.0.0/General_Category/Format/symbols\" );\n * regenerate().add( formatSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n */\nvar regexpCfG = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC38]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/g;\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var dashSymbols = require( \"https://github.com/node-unicode/unicode-13.0.0/General_Category/Dash_Punctuation/symbols\" );\n * regenerate().add( dashSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n *\n * NOTE: In addition to [:dash:], the below includes MINUS SIGN U+2212.\n */\nvar regexpDashG = /[\\x2D\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2E17\\u2E1A\\u2E3A\\u2E3B\\u2E40\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D\\u2212]|\\uD803\\uDEAD/g;\n\n\n\n\n/**\n * Generated by:\n *\n * var regenerate = require( \"regenerate\" );\n * var spaceSeparatorSymbols = require( \"@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols\" );\n * regenerate().add( spaceSeparatorSymbols ).toString();\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n */\nvar regexpZsG = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\n\n\n\n\n/**\n * Loose Matching:\n * - Ignore all format characters, which includes RLM, LRM or ALM used to control BIDI\n * formatting.\n * - Map all characters in [:Zs:] to U+0020 SPACE;\n * - Map all characters in [:Dash:] to U+002D HYPHEN-MINUS;\n */\nvar looseMatching = function( value ) {\n\treturn value\n\t\t.replace( regexpCfG, \"\" )\n\t\t.replace( regexpDashG, \"-\" )\n\t\t.replace( regexpZsG, \" \" );\n};\n\n\n\n\n/**\n * parse( value, properties )\n *\n * @value [String].\n *\n * @properties [Object] Parser properties is a reduced pre-processed cldr\n * data set returned by numberParserProperties().\n *\n * Return the parsed Number (including Infinity) or NaN when value is invalid.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberParse = function( value, properties ) {\n\tvar grammar, invertedNuDigitsMap, invertedSymbolMap, negative, number, prefix, prefixNSuffix,\n\t\tsuffix, tokenizer, valid;\n\n\t// Grammar:\n\t// - Value <= NaN | PositiveNumber | NegativeNumber\n\t// - PositiveNumber <= PositivePrefix NumberOrInf PositiveSufix\n\t// - NegativeNumber <= NegativePrefix NumberOrInf\n\t// - NumberOrInf <= Number | Inf\n\tgrammar = [\n\t\t[ \"nan\" ],\n\t\t[ \"prefix\", \"infinity\", \"suffix\" ],\n\t\t[ \"prefix\", \"number\", \"suffix\" ],\n\t\t[ \"negativePrefix\", \"infinity\", \"negativeSuffix\" ],\n\t\t[ \"negativePrefix\", \"number\", \"negativeSuffix\" ]\n\t];\n\n\tinvertedSymbolMap = properties[ 0 ];\n\tinvertedNuDigitsMap = properties[ 1 ] || {};\n\ttokenizer = properties[ 2 ];\n\n\tvalue = looseMatching( value );\n\n\tfunction parse( type ) {\n\t\treturn function( lexeme ) {\n\n\t\t\t// Reverse localized symbols and numbering system.\n\t\t\tlexeme = lexeme.split( \"\" ).map(function( character ) {\n\t\t\t\treturn invertedSymbolMap[ character ] ||\n\t\t\t\t\tinvertedNuDigitsMap[ character ] ||\n\t\t\t\t\tcharacter;\n\t\t\t}).join( \"\" );\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase \"infinity\":\n\t\t\t\t\tnumber = Infinity;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"nan\":\n\t\t\t\t\tnumber = NaN;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"number\":\n\n\t\t\t\t\t// Remove grouping separators.\n\t\t\t\t\tlexeme = lexeme.replace( /,/g, \"\" );\n\n\t\t\t\t\tnumber = +lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"prefix\":\n\t\t\t\tcase \"negativePrefix\":\n\t\t\t\t\tprefix = lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"suffix\":\n\t\t\t\t\tsuffix = lexeme;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"negativeSuffix\":\n\t\t\t\t\tsuffix = lexeme;\n\t\t\t\t\tnegative = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// This should never be reached.\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( \"Internal error\" );\n\t\t\t}\n\t\t\treturn \"\";\n\t\t};\n\t}\n\n\tfunction tokenizeNParse( _value, grammar ) {\n\t\treturn grammar.some(function( statement ) {\n\t\t\tvar value = _value;\n\n\t\t\t// The whole grammar statement should be used (i.e., .every() return true) and value be\n\t\t\t// entirely consumed (i.e., !value.length).\n\t\t\treturn statement.every(function( type ) {\n\t\t\t\tif ( value.match( tokenizer[ type ] ) === null ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Consume and parse it.\n\t\t\t\tvalue = value.replace( tokenizer[ type ], parse( type ) );\n\t\t\t\treturn true;\n\t\t\t}) && !value.length;\n\t\t});\n\t}\n\n\tvalid = tokenizeNParse( value, grammar );\n\n\t// NaN\n\tif ( !valid || isNaN( number ) ) {\n\t\treturn NaN;\n\t}\n\n\tprefixNSuffix = \"\" + prefix + suffix;\n\n\t// Percent\n\tif ( prefixNSuffix.indexOf( \"%\" ) !== -1 ) {\n\t\tnumber /= 100;\n\n\t// Per mille\n\t} else if ( prefixNSuffix.indexOf( \"\\u2030\" ) !== -1 ) {\n\t\tnumber /= 1000;\n\t}\n\n\t// Negative number\n\tif ( negative ) {\n\t\tnumber *= -1;\n\t}\n\n\treturn number;\n};\n\n\n\n\nvar numberParserFn = function( properties ) {\n\treturn function numberParser( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeString( value, \"value\" );\n\n\t\treturn numberParse( value, properties );\n\t};\n\n};\n\n\n\n\n/**\n * symbolMap( cldr )\n *\n * @cldr [Cldr instance].\n *\n * Return the (localized symbol, pattern symbol) key value pair, eg. {\n * \"٫\": \".\",\n * \"٬\": \",\",\n * \"٪\": \"%\",\n * ...\n * };\n */\nvar numberSymbolInvertedMap = function( cldr ) {\n\tvar symbol,\n\t\tsymbolMap = {};\n\n\tfor ( symbol in numberSymbolName ) {\n\t\tsymbolMap[ numberSymbol( numberSymbolName[ symbol ], cldr ) ] = symbol;\n\t}\n\n\treturn symbolMap;\n};\n\n\n\n\n/**\n * objectMap( object, fn)\n *\n * - object\n *\n * - fn( pair ) => pair\n */\nvar objectMap = function( object, fn ) {\n\treturn Object.keys( object ).map(function( key ) {\n\t\treturn fn([ key, object[ key ] ]);\n\t}).reduce(function( object, pair ) {\n\t\tobject[ pair[ 0 ] ] = pair[ 1 ];\n\t\treturn object;\n\t}, {});\n};\n\n\n\n\n/**\n * removeLiteralQuotes( string )\n *\n * Return:\n * - `'` if input string is `''`.\n * - `o'clock` if input string is `'o''clock'`.\n * - `foo` if input string is `foo`, i.e., return the same value in case it isn't a single-quoted\n * string.\n */\nvar removeLiteralQuotes = function( string ) {\n\tif ( string[ 0 ] + string[ string.length - 1 ] !== \"''\" ) {\n\t\treturn string;\n\t}\n\tif ( string === \"''\" ) {\n\t\treturn \"'\";\n\t}\n\treturn string.replace( /''/g, \"'\" ).slice( 1, -1 );\n};\n\n\n\n\n/**\n * parseProperties( pattern, cldr )\n *\n * @pattern [String] raw pattern for numbers.\n *\n * @cldr [Cldr instance].\n *\n * Return parser properties, used to feed parser function.\n *\n * TODO:\n * - Scientific_notation;\n * - Padding;\n */\nvar numberParseProperties = function( pattern, cldr, options ) {\n\tvar aux, decimalSymbolRe, digitsRe, groupingSeparatorRe, infinitySymbol, invertedNuDigitsMap,\n\t\tinvertedSymbolMap, maximumFractionDigits, maximumSignificantDigits,\n\t\tminimumSignificantDigits, nanSymbol, negativePrefix, negativeSuffix, nuDigitsMap,\n\t\tnumberTokenizer, prefix, primaryGroupingSize, secondaryGroupingSize, suffix, symbolMap,\n\t\tformatProperties = numberFormatProperties( pattern, cldr, options );\n\n\tprefix = looseMatching( formatProperties[ 0 ] );\n\tmaximumFractionDigits = formatProperties[ 4 ];\n\tminimumSignificantDigits = formatProperties[ 5 ];\n\tmaximumSignificantDigits = formatProperties[ 6 ];\n\tprimaryGroupingSize = formatProperties[ 8 ];\n\tsecondaryGroupingSize = formatProperties[ 9 ];\n\tsuffix = looseMatching( formatProperties[ 10 ] );\n\tnegativePrefix = looseMatching( formatProperties[ 13 ] );\n\tnegativeSuffix = looseMatching( formatProperties[ 14 ] );\n\tinfinitySymbol = looseMatching( formatProperties[ 16 ] );\n\tnanSymbol = looseMatching( formatProperties[ 17 ] );\n\tsymbolMap = objectMap( formatProperties[ 18 ], function( pair ) {\n\t\treturn [ pair[ 0 ], looseMatching( pair[ 1 ] ) ];\n\t});\n\tnuDigitsMap = formatProperties[ 19 ];\n\n\tinvertedSymbolMap = objectMap( numberSymbolInvertedMap( cldr ), function( pair ) {\n\t\treturn [ looseMatching( pair[ 0 ] ), pair[ 1 ] ];\n\t});\n\n\tdigitsRe = nuDigitsMap ? \"[\" + nuDigitsMap + \"]\" : \"\\\\d\";\n\tgroupingSeparatorRe = regexpEscape( symbolMap[ \",\" ] );\n\tdecimalSymbolRe = regexpEscape( symbolMap[ \".\" ] );\n\n\tif ( nuDigitsMap ) {\n\t\tinvertedNuDigitsMap = nuDigitsMap.split( \"\" ).reduce(function( object, localizedDigit, i ) {\n\t\t\tobject[ localizedDigit ] = String( i );\n\t\t\treturn object;\n\t\t}, {} );\n\t}\n\n\taux = [ prefix, suffix, negativePrefix, negativeSuffix ].map(function( value ) {\n\t\treturn value.replace( /('([^']|'')+'|'')|./g, function( character, literal ) {\n\n\t\t\t// Literals\n\t\t\tif ( literal ) {\n\t\t\t\treturn removeLiteralQuotes( literal );\n\t\t\t}\n\n\t\t\t// Symbols\n\t\t\tcharacter = character.replace( /[\\-+E%\\u2030]/, function( symbol ) {\n\t\t\t\treturn symbolMap[ symbol ];\n\t\t\t});\n\n\t\t\treturn character;\n\t\t});\n\t});\n\n\tprefix = aux[ 0 ];\n\tsuffix = aux[ 1 ];\n\tnegativePrefix = aux[ 2 ];\n\tnegativeSuffix = aux[ 3 ];\n\n\t// Number\n\t//\n\t// number_re = integer fraction?\n\t//\n\t// integer = digits | digits_using_grouping_separators\n\t//\n\t// fraction = regexp((.\\d+)?)\n\t//\n\t// digits = regexp(\\d+)\n\t//\n\t// digits_w_grouping_separators = digits_w_1_grouping_separators |\n\t// digits_w_2_grouping_separators\n\t//\n\t// digits_w_1_grouping_separators = regexp(\\d{1,3}(,\\d{3})+)\n\t//\n\t// digits_w_2_grouping_separators = regexp(\\d{1,2}((,\\d{2})*(,\\d{3})))\n\n\t// Integer part\n\tnumberTokenizer = digitsRe + \"+\";\n\n\t// Grouping separators\n\tif ( primaryGroupingSize ) {\n\t\tif ( secondaryGroupingSize ) {\n\t\t\taux = digitsRe + \"{1,\" + secondaryGroupingSize + \"}((\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + secondaryGroupingSize + \"})*(\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + primaryGroupingSize + \"}))\";\n\t\t} else {\n\t\t\taux = digitsRe + \"{1,\" + primaryGroupingSize + \"}(\" + groupingSeparatorRe +\n\t\t\t\tdigitsRe + \"{\" + primaryGroupingSize + \"})+\";\n\t\t}\n\t\tnumberTokenizer = \"(\" + aux + \"|\" + numberTokenizer + \")\";\n\t}\n\n\t// Fraction part? Only included if 1 or 2.\n\t// 1: Using significant digit format.\n\t// 2: Using integer and fractional format && it has a maximumFractionDigits.\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) || /* 1 */\n\t\t\t\tmaximumFractionDigits /* 2 */ ) {\n\n\t\t// 1: Handle trailing decimal separator, e.g., `\"1.\" => `1``.\n\t\taux = decimalSymbolRe + digitsRe + \"+\";\n\t\tnumberTokenizer = numberTokenizer + \"(\" + aux + \"|\" + decimalSymbolRe /* 1 */ + \")?\" +\n\n\t\t\t// Handle non-padded decimals, e.g., `\".12\"` => `0.12` by making the integer part\n\t\t\t// optional.\n\t\t\t\"|(\" + numberTokenizer + \")?\" + aux;\n\n\t\tnumberTokenizer = \"(\" + numberTokenizer + \")\";\n\t}\n\n\t// 0: @invertedSymbolMap [Object] Inverted symbol map.\n\t// 1: @invertedNuDigitsMap [Object] Inverted digits map if numbering system is different than\n\t// `latn`.\n\t// 2: @tokenizer [Object] Tokenizer map, used by parser to consume input.\n\treturn [\n\t\tinvertedSymbolMap,\n\t\tinvertedNuDigitsMap,\n\t\t{\n\t\t\tinfinity: new RegExp( \"^\" + regexpEscape( infinitySymbol ) ),\n\t\t\tnan: new RegExp( \"^\" + regexpEscape( nanSymbol ) ),\n\t\t\tnegativePrefix: new RegExp( \"^\" + regexpEscape( negativePrefix ) ),\n\t\t\tnegativeSuffix: new RegExp( \"^\" + regexpEscape( negativeSuffix ) ),\n\t\t\tnumber: new RegExp( \"^\" + numberTokenizer ),\n\t\t\tprefix: new RegExp( \"^\" + regexpEscape( prefix ) ),\n\t\t\tsuffix: new RegExp( \"^\" + regexpEscape( suffix ) )\n\t\t}\n\t];\n\n};\n\n\n\n\n/**\n * Pattern( style )\n *\n * @style [String] \"decimal\" (default) or \"percent\".\n *\n * @cldr [Cldr instance].\n */\nvar numberPattern = function( style, cldr ) {\n\tif ( style !== \"decimal\" && style !== \"percent\" ) {\n\t\tthrow new Error( \"Invalid style\" );\n\t}\n\n\treturn cldr.main([\n\t\t\"numbers\",\n\t\tstyle + \"Formats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\t\"standard\"\n\t]);\n};\n\n\n\n\n/**\n * EBNF representation:\n *\n * compact_pattern_re = prefix?\n * number_pattern_re\n * suffix?\n *\n * number_pattern_re = 0+\n *\n * Regexp groups:\n *\n * 0: compact_pattern_re\n * 1: prefix\n * 2: number_pattern_re (the number pattern to use in compact mode)\n * 3: suffix\n */\nvar numberCompactPatternRe = ( /^([^0]*)(0+)([^0]*)$/ );\n\n\n\n\n/**\n * goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize )\n *\n * @number [Number].\n *\n * @primaryGroupingSize [Number]\n *\n * @secondaryGroupingSize [Number]\n *\n * Return the formatted number with group separator.\n */\nvar numberFormatGroupingSeparator = function( number, primaryGroupingSize, secondaryGroupingSize ) {\n\tvar index,\n\t\tcurrentGroupingSize = primaryGroupingSize,\n\t\tret = \"\",\n\t\tsep = \",\",\n\t\tswitchToSecondary = secondaryGroupingSize ? true : false;\n\n\tnumber = String( number ).split( \".\" );\n\tindex = number[ 0 ].length;\n\n\twhile ( index > currentGroupingSize ) {\n\t\tret = number[ 0 ].slice( index - currentGroupingSize, index ) +\n\t\t\t( ret.length ? sep : \"\" ) + ret;\n\t\tindex -= currentGroupingSize;\n\t\tif ( switchToSecondary ) {\n\t\t\tcurrentGroupingSize = secondaryGroupingSize;\n\t\t\tswitchToSecondary = false;\n\t\t}\n\t}\n\n\tnumber[ 0 ] = number[ 0 ].slice( 0, index ) + ( ret.length ? sep : \"\" ) + ret;\n\treturn number.join( \".\" );\n};\n\n\n\n\n/**\n * integerFractionDigits( number, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, round, roundIncrement )\n *\n * @number [Number]\n *\n * @minimumIntegerDigits [Number]\n *\n * @minimumFractionDigits [Number]\n *\n * @maximumFractionDigits [Number]\n *\n * @round [Function]\n *\n * @roundIncrement [Function]\n *\n * Return the formatted integer and fraction digits.\n */\nvar numberFormatIntegerFractionDigits = function( number, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, round,\n\troundIncrement ) {\n\n\t// Fraction\n\tif ( maximumFractionDigits ) {\n\n\t\t// Rounding\n\t\tif ( roundIncrement ) {\n\t\t\tnumber = round( number, roundIncrement );\n\n\t\t// Maximum fraction digits\n\t\t} else {\n\t\t\tnumber = round( number, { exponent: -maximumFractionDigits } );\n\t\t}\n\n\t} else {\n\t\tnumber = round( number );\n\t}\n\n\tnumber = String( number );\n\n\t// Maximum integer digits (post string phase)\n\tif ( maximumFractionDigits && /e-/.test( number ) ) {\n\n\t\t// Use toFixed( maximumFractionDigits ) to make sure small numbers like 1e-7 are\n\t\t// displayed using plain digits instead of scientific notation.\n\t\t// 1: Remove leading decimal zeros.\n\t\t// 2: Remove leading decimal separator.\n\t\t// Note: String() is still preferred so it doesn't mess up with a number precision\n\t\t// unnecessarily, e.g., (123456789.123).toFixed(10) === \"123456789.1229999959\",\n\t\t// String(123456789.123) === \"123456789.123\".\n\t\tnumber = ( +number ).toFixed( maximumFractionDigits )\n\t\t\t.replace( /0+$/, \"\" ) /* 1 */\n\t\t\t.replace( /\\.$/, \"\" ); /* 2 */\n\t}\n\n\t// Minimum fraction digits (post string phase)\n\tif ( minimumFractionDigits ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 1 ] = stringPad( number[ 1 ] || \"\", minimumFractionDigits, true );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\t// Minimum integer digits\n\tif ( minimumIntegerDigits ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 0 ] = stringPad( number[ 0 ], minimumIntegerDigits );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\treturn number;\n};\n\n\n\n\n/**\n * toPrecision( number, precision, round )\n *\n * @number (Number)\n *\n * @precision (Number) significant figures precision (not decimal precision).\n *\n * @round (Function)\n *\n * Return number.toPrecision( precision ) using the given round function.\n */\nvar numberToPrecision = function( number, precision, round ) {\n\tvar roundOrder;\n\n\tif ( number === 0 ) { // Fix #706\n\t\treturn number;\n\t}\n\n\troundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) );\n\troundOrder -= precision;\n\n\treturn round( number, { exponent: roundOrder } );\n};\n\n\n\n\n/**\n * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round )\n *\n * @number [Number]\n *\n * @minimumSignificantDigits [Number]\n *\n * @maximumSignificantDigits [Number]\n *\n * @round [Function]\n *\n * Return the formatted significant digits number.\n */\nvar numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) {\n\tvar atMinimum, atMaximum;\n\n\t// Sanity check.\n\tif ( minimumSignificantDigits > maximumSignificantDigits ) {\n\t\tmaximumSignificantDigits = minimumSignificantDigits;\n\t}\n\n\tatMinimum = numberToPrecision( number, minimumSignificantDigits, round );\n\tatMaximum = numberToPrecision( number, maximumSignificantDigits, round );\n\n\t// Use atMaximum only if it has more significant digits than atMinimum.\n\tnumber = +atMinimum === +atMaximum ? atMinimum : atMaximum;\n\n\t// Expand integer numbers, eg. 123e5 to 12300.\n\tnumber = ( +number ).toString( 10 );\n\n\tif ( ( /e/ ).test( number ) ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"integers out of (1e21, 1e-7)\"\n\t\t});\n\t}\n\n\t// Add trailing zeros if necessary.\n\tif ( minimumSignificantDigits - number.replace( /^0+|\\./g, \"\" ).length > 0 ) {\n\t\tnumber = number.split( \".\" );\n\t\tnumber[ 1 ] = stringPad( number[ 1 ] || \"\", minimumSignificantDigits - number[ 0 ].replace( /^0+/, \"\" ).length, true );\n\t\tnumber = number.join( \".\" );\n\t}\n\n\treturn number;\n};\n\n\n\n\n/**\n * format( number, properties )\n *\n * @number [Number].\n *\n * @properties [Object] Output of number/format-properties.\n *\n * Return the formatted number.\n * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html\n */\nvar numberFormat = function( number, properties, pluralGenerator ) {\n\tvar aux, compactMap, infinitySymbol, maximumFractionDigits, maximumSignificantDigits,\n\t\tminimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, nanSymbol,\n\t\tnuDigitsMap, prefix, primaryGroupingSize, pattern, round, roundIncrement,\n\t\tsecondaryGroupingSize, stringToParts, suffix, symbolMap;\n\n\tminimumIntegerDigits = properties[ 2 ];\n\tminimumFractionDigits = properties[ 3 ];\n\tmaximumFractionDigits = properties[ 4 ];\n\tminimumSignificantDigits = properties[ 5 ];\n\tmaximumSignificantDigits = properties[ 6 ];\n\troundIncrement = properties[ 7 ];\n\tprimaryGroupingSize = properties[ 8 ];\n\tsecondaryGroupingSize = properties[ 9 ];\n\tround = properties[ 15 ];\n\tinfinitySymbol = properties[ 16 ];\n\tnanSymbol = properties[ 17 ];\n\tsymbolMap = properties[ 18 ];\n\tnuDigitsMap = properties[ 19 ];\n\tcompactMap = properties[ 20 ];\n\n\t// NaN\n\tif ( isNaN( number ) ) {\n\t\treturn [ { type: \"nan\", value: nanSymbol } ];\n\t}\n\n\tif ( number < 0 ) {\n\t\tpattern = properties[ 12 ];\n\t\tprefix = properties[ 13 ];\n\t\tsuffix = properties[ 14 ];\n\t} else {\n\t\tpattern = properties[ 11 ];\n\t\tprefix = properties[ 0 ];\n\t\tsuffix = properties[ 10 ];\n\t}\n\n\t// For prefix, suffix, and number parts.\n\tstringToParts = function( string ) {\n\t\tvar numberType = \"integer\",\n\t\t\tparts = [];\n\n\t\t// TODO Move the tokenization of all parts that don't depend on number into\n\t\t// format-properties.\n\t\tstring.replace( /('([^']|'')+'|'')|./g, function( character, literal ) {\n\n\t\t\t// Literals\n\t\t\tif ( literal ) {\n\t\t\t\tpartsPush( parts, \"literal\", removeLiteralQuotes( literal ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Currency symbol\n\t\t\tif ( character === \"\\u00A4\" ) {\n\t\t\t\tpartsPush( parts, \"currency\", character );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Symbols\n\t\t\tcharacter = character.replace( /[.,\\-+E%\\u2030]/, function( symbol ) {\n\t\t\t\tif ( symbol === \".\" ) {\n\t\t\t\t\tnumberType = \"fraction\";\n\t\t\t\t}\n\t\t\t\tpartsPush( parts, numberSymbolName[ symbol ], symbolMap[ symbol ] );\n\n\t\t\t\t// \"Erase\" handled character.\n\t\t\t\treturn \"\";\n\t\t\t});\n\n\t\t\t// Number\n\t\t\tcharacter = character.replace( /[0-9]/, function( digit ) {\n\n\t\t\t\t// Numbering system\n\t\t\t\tif ( nuDigitsMap ) {\n\t\t\t\t\tdigit = nuDigitsMap[ +digit ];\n\t\t\t\t}\n\t\t\t\tpartsPush( parts, numberType, digit );\n\n\t\t\t\t// \"Erase\" handled character.\n\t\t\t\treturn \"\";\n\t\t\t});\n\n\t\t\t// Etc\n\t\t\tcharacter.replace( /./, function( etc ) {\n\t\t\t\tpartsPush( parts, \"literal\", etc );\n\t\t\t});\n\t\t});\n\t\treturn parts;\n\t};\n\n\tprefix = stringToParts( prefix );\n\tsuffix = stringToParts( suffix );\n\n\t// Infinity\n\tif ( !isFinite( number ) ) {\n\t\treturn prefix.concat(\n\t\t\t{ type: \"infinity\", value: infinitySymbol },\n\t\t\tsuffix\n\t\t);\n\t}\n\n\t// Percent\n\tif ( pattern.indexOf( \"%\" ) !== -1 ) {\n\t\tnumber *= 100;\n\n\t// Per mille\n\t} else if ( pattern.indexOf( \"\\u2030\" ) !== -1 ) {\n\t\tnumber *= 1000;\n\t}\n\n\tvar compactPattern, compactDigits, compactProperties, divisor, numberExponent, pluralForm;\n\n\t// Compact mode: initial number digit processing\n\tif ( compactMap ) {\n\t\tnumberExponent = Math.abs( Math.floor( number ) ).toString().length - 1;\n\t\tnumberExponent = Math.min( numberExponent, compactMap.maxExponent );\n\n\t\t// Use default plural form to perform initial decimal shift\n\t\tif ( numberExponent >= 3 ) {\n\t\t\tcompactPattern = compactMap[ numberExponent ] && compactMap[ numberExponent ].other;\n\t\t}\n\n\t\tif ( compactPattern === \"0\" ) {\n\t\t\tcompactPattern = null;\n\t\t} else if ( compactPattern ) {\n\t\t\tcompactDigits = compactPattern.split( \"0\" ).length - 1;\n\t\t\tdivisor = numberExponent - ( compactDigits - 1 );\n\t\t\tnumber = number / Math.pow( 10, divisor );\n\t\t}\n\t}\n\n\t// Significant digit format\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) {\n\t\tnumber = numberFormatSignificantDigits( number, minimumSignificantDigits,\n\t\t\tmaximumSignificantDigits, round );\n\n\t// Integer and fractional format\n\t} else {\n\t\tnumber = numberFormatIntegerFractionDigits( number, minimumIntegerDigits,\n\t\t\tminimumFractionDigits, maximumFractionDigits, round, roundIncrement );\n\t}\n\n\t// Compact mode: apply formatting\n\tif ( compactMap && compactPattern ) {\n\n\t\t// Get plural form after possible roundings\n\t\tpluralForm = pluralGenerator ? pluralGenerator( +number ) : \"other\";\n\n\t\tcompactPattern = compactMap[ numberExponent ][ pluralForm ] || compactPattern;\n\t\tcompactProperties = compactPattern.match( numberCompactPatternRe );\n\n\t\t// TODO Move the tokenization of all parts that don't depend on number into\n\t\t// format-properties.\n\t\taux = function( string ) {\n\t\t\tvar parts = [];\n\t\t\tstring.replace( /(\\s+)|([^\\s0]+)/g, function( _garbage, space, compact ) {\n\n\t\t\t\t// Literals\n\t\t\t\tif ( space ) {\n\t\t\t\t\tpartsPush( parts, \"literal\", space );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Compact value\n\t\t\t\tif ( compact ) {\n\t\t\t\t\tpartsPush( parts, \"compact\", compact );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn parts;\n\t\t};\n\n\t\t// update prefix/suffix with compact prefix/suffix\n\t\tprefix = prefix.concat( aux( compactProperties[ 1 ] ) );\n\t\tsuffix = aux( compactProperties[ 3 ] ).concat( suffix );\n\t}\n\n\t// Remove the possible number minus sign\n\tnumber = number.replace( /^-/, \"\" );\n\n\t// Grouping separators\n\tif ( primaryGroupingSize ) {\n\t\tnumber = numberFormatGroupingSeparator( number, primaryGroupingSize,\n\t\t\tsecondaryGroupingSize );\n\t}\n\n\t// Scientific notation\n\t// TODO implement here\n\n\t// Padding/'([^']|'')+'|''|[.,\\-+E%\\u2030]/g\n\t// TODO implement here\n\n\treturn prefix.concat(\n\t\tstringToParts( number ),\n\t\tsuffix\n\t);\n};\n\n\n\n\nvar numberToPartsFormatterFn = function( properties, pluralGenerator ) {\n\treturn function numberToPartsFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn numberFormat( value, properties, pluralGenerator );\n\t};\n};\n\n\n\n\nfunction validateDigits( properties ) {\n\tvar minimumIntegerDigits = properties[ 2 ],\n\t\tminimumFractionDigits = properties[ 3 ],\n\t\tmaximumFractionDigits = properties[ 4 ],\n\t\tminimumSignificantDigits = properties[ 5 ],\n\t\tmaximumSignificantDigits = properties[ 6 ];\n\n\t// Validate significant digit format properties\n\tif ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) {\n\t\tvalidateParameterRange( minimumSignificantDigits, \"minimumSignificantDigits\", 1, 21 );\n\t\tvalidateParameterRange( maximumSignificantDigits, \"maximumSignificantDigits\",\n\t\t\tminimumSignificantDigits, 21 );\n\n\t} else if ( !isNaN( minimumSignificantDigits ) || !isNaN( maximumSignificantDigits ) ) {\n\t\tthrow new Error( \"Neither or both the minimum and maximum significant digits must be \" +\n\t\t\t\"present\" );\n\n\t// Validate integer and fractional format\n\t} else {\n\t\tvalidateParameterRange( minimumIntegerDigits, \"minimumIntegerDigits\", 1, 21 );\n\t\tvalidateParameterRange( minimumFractionDigits, \"minimumFractionDigits\", 0, 20 );\n\t\tvalidateParameterRange( maximumFractionDigits, \"maximumFractionDigits\",\n\t\t\tminimumFractionDigits, 20 );\n\t}\n}\n\n/**\n * .numberFormatter( [options] )\n *\n * @options [Object]:\n * - style: [String] \"decimal\" (default) or \"percent\".\n * - see also number/format options.\n *\n * Return a function that formats a number according to the given options and default/instance\n * locale.\n */\nGlobalize.numberFormatter =\nGlobalize.prototype.numberFormatter = function( options ) {\n\tvar args, numberToPartsFormatter, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\targs = [ options ];\n\n\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\treturnFn = numberFormatterFn( numberToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ numberToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .numberToPartsFormatter( [options] )\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a function that formats a number to parts according to the given options and\n * default/instance locale.\n */\nGlobalize.numberToPartsFormatter =\nGlobalize.prototype.numberToPartsFormatter = function( options ) {\n\tvar args, cldr, fnArgs, pattern, properties, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\n\tvalidateDefaultLocale( cldr );\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tif ( options.raw ) {\n\t\t\tpattern = options.raw;\n\t\t} else {\n\t\t\tpattern = numberPattern( options.style || \"decimal\", cldr );\n\t\t}\n\n\t\tproperties = numberFormatProperties( pattern, cldr, options );\n\t\tfnArgs = [ properties ];\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\n\tvalidateDigits( properties );\n\n\tif ( options.compact ) {\n\t\tfnArgs.push( this.pluralGenerator() );\n\t}\n\treturnFn = numberToPartsFormatterFn.apply( null, fnArgs );\n\truntimeBind( args, cldr, returnFn, fnArgs );\n\n\treturn returnFn;\n};\n\n/**\n * .numberParser( [options] )\n *\n * @options [Object]:\n * - style: [String] \"decimal\" (default) or \"percent\".\n *\n * Return the number parser according to the default/instance locale.\n */\nGlobalize.numberParser =\nGlobalize.prototype.numberParser = function( options ) {\n\tvar args, cldr, pattern, properties, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\n\tvalidateDefaultLocale( cldr );\n\tif ( options.compact ) {\n\t\tthrow createErrorUnsupportedFeature({\n\t\t\tfeature: \"compact number parsing (not implemented)\"\n\t\t});\n\t}\n\n\tcldr.on( \"get\", validateCldr );\n\n\tif ( options.raw ) {\n\t\tpattern = options.raw;\n\t} else {\n\t\tpattern = numberPattern( options.style || \"decimal\", cldr );\n\t}\n\n\tproperties = numberParseProperties( pattern, cldr, options );\n\n\tcldr.off( \"get\", validateCldr );\n\n\treturnFn = numberParserFn( properties );\n\n\truntimeBind( args, cldr, returnFn, [ properties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatNumber( value [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @options [Object]: see number/format-properties.\n *\n * Format a number according to the given options and default/instance locale.\n */\nGlobalize.formatNumber =\nGlobalize.prototype.formatNumber = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.numberFormatter( options )( value );\n};\n\n/**\n * .formatNumberToParts( value [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @options [Object]: see number/format-properties.\n *\n * Format a number to pars according to the given options and default/instance locale.\n */\nGlobalize.formatNumberToParts =\nGlobalize.prototype.formatNumberToParts = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.numberToPartsFormatter( options )( value );\n};\n\n/**\n * .parseNumber( value [, options] )\n *\n * @value [String]\n *\n * @options [Object]: See numberParser().\n *\n * Return the parsed Number (including Infinity) or NaN when value is invalid.\n */\nGlobalize.parseNumber =\nGlobalize.prototype.parseNumber = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeString( value, \"value\" );\n\n\treturn this.numberParser( options )( value );\n};\n\n/**\n * Optimization to avoid duplicating some internal functions across modules.\n */\nGlobalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature;\nGlobalize._numberNumberingSystem = numberNumberingSystem;\nGlobalize._numberNumberingSystemDigitsMap = numberNumberingSystemDigitsMap;\nGlobalize._numberPattern = numberPattern;\nGlobalize._numberSymbol = numberSymbol;\nGlobalize._looseMatching = looseMatching;\nGlobalize._removeLiteralQuotes = removeLiteralQuotes;\nGlobalize._stringPad = stringPad;\nGlobalize._validateParameterTypeNumber = validateParameterTypeNumber;\nGlobalize._validateParameterTypeString = validateParameterTypeString;\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar runtimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MakePlural;\n/* eslint-disable */\nMakePlural = (function() {\n'use strict';\n\nvar _toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); };\n\nvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\nvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n\n/**\n * make-plural.js -- https://github.com/eemeli/make-plural.js/\n * Copyright (c) 2014-2015 by Eemeli Aro \n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * The software is provided \"as is\" and the author disclaims all warranties\n * with regard to this software including all implied warranties of\n * merchantability and fitness. In no event shall the author be liable for\n * any special, direct, indirect, or consequential damages or any damages\n * whatsoever resulting from loss of use, data or profits, whether in an\n * action of contract, negligence or other tortious action, arising out of\n * or in connection with the use or performance of this software.\n */\n\nvar Parser = (function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: 'parse',\n value: function parse(cond) {\n var _this = this;\n\n if (cond === 'i = 0 or n = 1') {\n return 'n >= 0 && n <= 1';\n }if (cond === 'i = 0,1') {\n return 'n >= 0 && n < 2';\n }if (cond === 'i = 1 and v = 0') {\n this.v0 = 1;\n return 'n == 1 && v0';\n }\n return cond.replace(/([tv]) (!?)= 0/g, function (m, sym, noteq) {\n var sn = sym + '0';\n _this[sn] = 1;\n return noteq ? '!' + sn : sn;\n }).replace(/\\b[fintv]\\b/g, function (m) {\n _this[m] = 1;\n return m;\n }).replace(/([fin]) % (10+)/g, function (m, sym, num) {\n var sn = sym + num;\n _this[sn] = 1;\n return sn;\n }).replace(/n10+ = 0/g, 't0 && $&').replace(/(\\w+ (!?)= )([0-9.]+,[0-9.,]+)/g, function (m, se, noteq, x) {\n if (m === 'n = 0,1') return '(n == 0 || n == 1)';\n if (noteq) return se + x.split(',').join(' && ' + se);\n return '(' + se + x.split(',').join(' || ' + se) + ')';\n }).replace(/(\\w+) (!?)= ([0-9]+)\\.\\.([0-9]+)/g, function (m, sym, noteq, x0, x1) {\n if (Number(x0) + 1 === Number(x1)) {\n if (noteq) return '' + sym + ' != ' + x0 + ' && ' + sym + ' != ' + x1;\n return '(' + sym + ' == ' + x0 + ' || ' + sym + ' == ' + x1 + ')';\n }\n if (noteq) return '(' + sym + ' < ' + x0 + ' || ' + sym + ' > ' + x1 + ')';\n if (sym === 'n') {\n _this.t0 = 1;return '(t0 && n >= ' + x0 + ' && n <= ' + x1 + ')';\n }\n return '(' + sym + ' >= ' + x0 + ' && ' + sym + ' <= ' + x1 + ')';\n }).replace(/ and /g, ' && ').replace(/ or /g, ' || ').replace(/ = /g, ' == ');\n }\n }, {\n key: 'vars',\n value: (function (_vars) {\n function vars() {\n return _vars.apply(this, arguments);\n }\n\n vars.toString = function () {\n return _vars.toString();\n };\n\n return vars;\n })(function () {\n var vars = [];\n if (this.i) vars.push('i = s[0]');\n if (this.f || this.v) vars.push('f = s[1] || \\'\\'');\n if (this.t) vars.push('t = (s[1] || \\'\\').replace(/0+$/, \\'\\')');\n if (this.v) vars.push('v = f.length');\n if (this.v0) vars.push('v0 = !s[1]');\n if (this.t0 || this.n10 || this.n100) vars.push('t0 = Number(s[0]) == n');\n for (var k in this) {\n if (/^.10+$/.test(k)) {\n var k0 = k[0] === 'n' ? 't0 && s[0]' : k[0];\n vars.push('' + k + ' = ' + k0 + '.slice(-' + k.substr(2).length + ')');\n }\n }if (!vars.length) return '';\n return 'var ' + ['s = String(n).split(\\'.\\')'].concat(vars).join(', ');\n })\n }]);\n\n return Parser;\n})();\n\n\n\nvar MakePlural = (function () {\n function MakePlural(lc) {\n var _ref = arguments[1] === undefined ? MakePlural : arguments[1];\n\n var cardinals = _ref.cardinals;\n var ordinals = _ref.ordinals;\n\n _classCallCheck(this, MakePlural);\n\n if (!cardinals && !ordinals) throw new Error('At least one type of plural is required');\n this.lc = lc;\n this.categories = { cardinal: [], ordinal: [] };\n this.parser = new Parser();\n \n this.fn = this.buildFunction(cardinals, ordinals);\n this.fn._obj = this;\n this.fn.categories = this.categories;\n \n this.fn.toString = this.fnToString.bind(this);\n return this.fn;\n }\n\n _createClass(MakePlural, [{\n key: 'compile',\n value: function compile(type, req) {\n var cases = [];\n var rules = MakePlural.rules[type][this.lc];\n if (!rules) {\n if (req) throw new Error('Locale \"' + this.lc + '\" ' + type + ' rules not found');\n this.categories[type] = ['other'];\n return '\\'other\\'';\n }\n for (var r in rules) {\n var _rules$r$trim$split = rules[r].trim().split(/\\s*@\\w*/);\n\n var _rules$r$trim$split2 = _toArray(_rules$r$trim$split);\n\n var cond = _rules$r$trim$split2[0];\n var examples = _rules$r$trim$split2.slice(1);\n var cat = r.replace('pluralRule-count-', '');\n if (cond) cases.push([this.parser.parse(cond), cat]);\n \n }\n this.categories[type] = cases.map(function (c) {\n return c[1];\n }).concat('other');\n if (cases.length === 1) {\n return '(' + cases[0][0] + ') ? \\'' + cases[0][1] + '\\' : \\'other\\'';\n } else {\n return [].concat(_toConsumableArray(cases.map(function (c) {\n return '(' + c[0] + ') ? \\'' + c[1] + '\\'';\n })), ['\\'other\\'']).join('\\n : ');\n }\n }\n }, {\n key: 'buildFunction',\n value: function buildFunction(cardinals, ordinals) {\n var _this3 = this;\n\n var compile = function compile(c) {\n return c ? (c[1] ? 'return ' : 'if (ord) return ') + _this3.compile.apply(_this3, _toConsumableArray(c)) : '';\n },\n fold = { vars: function vars(str) {\n return (' ' + str + ';').replace(/(.{1,78})(,|$) ?/g, '$1$2\\n ');\n },\n cond: function cond(str) {\n return (' ' + str + ';').replace(/(.{1,78}) (\\|\\| |$) ?/gm, '$1\\n $2');\n } },\n cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond),\n body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).join('\\n').replace(/\\s+$/gm, '').replace(/^[\\s;]*[\\r\\n]+/gm, ''),\n args = ordinals && cardinals ? 'n, ord' : 'n';\n return new Function(args, body);\n }\n }, {\n key: 'fnToString',\n value: function fnToString(name) {\n return Function.prototype.toString.call(this.fn).replace(/^function( \\w+)?/, name ? 'function ' + name : 'function').replace('\\n/**/', '');\n }\n }], [{\n key: 'load',\n value: function load() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n args.forEach(function (cldr) {\n var data = cldr && cldr.supplemental || null;\n if (!data) throw new Error('Data does not appear to be CLDR data');\n MakePlural.rules = {\n cardinal: data['plurals-type-cardinal'] || MakePlural.rules.cardinal,\n ordinal: data['plurals-type-ordinal'] || MakePlural.rules.ordinal\n };\n });\n return MakePlural;\n }\n }]);\n\n return MakePlural;\n})();\n\n\n\nMakePlural.cardinals = true;\nMakePlural.ordinals = false;\nMakePlural.rules = { cardinal: {}, ordinal: {} };\n\n\nreturn MakePlural;\n}());\n/* eslint-enable */\n\n\nvar validateParameterTypeNumber = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"number\",\n\t\t\"Number\"\n\t);\n};\n\n\n\n\nvar validateParameterTypePluralType = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || value === \"cardinal\" || value === \"ordinal\",\n\t\t\"String \\\"cardinal\\\" or \\\"ordinal\\\"\"\n\t);\n};\n\n\n\n\nvar pluralGeneratorFn = function( plural ) {\n\treturn function pluralGenerator( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn plural( value );\n\t};\n};\n\n\n\n\n/**\n * .plural( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a\n * value given locale.\n */\nGlobalize.plural =\nGlobalize.prototype.plural = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.pluralGenerator( options )( value );\n};\n\n/**\n * .pluralGenerator( [options] )\n *\n * Return a plural function (of the form below).\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a value given the\n * default/instance locale.\n */\nGlobalize.pluralGenerator =\nGlobalize.prototype.pluralGenerator = function( options ) {\n\tvar args, cldr, isOrdinal, plural, returnFn, type;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\ttype = options.type || \"cardinal\";\n\n\tvalidateParameterTypePluralType( options.type, \"options.type\" );\n\n\tvalidateDefaultLocale( cldr );\n\n\tisOrdinal = type === \"ordinal\";\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tcldr.supplemental([ \"plurals-type-\" + type, \"{language}\" ]);\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\n\tMakePlural.rules = {};\n\tMakePlural.rules[ type ] = cldr.supplemental( \"plurals-type-\" + type );\n\n\tplural = new MakePlural( cldr.attributes.language, {\n\t\t\"ordinals\": isOrdinal,\n\t\t\"cardinals\": !isOrdinal\n\t});\n\n\treturnFn = pluralGeneratorFn( plural );\n\n\truntimeBind( args, cldr, returnFn, [ plural ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, properties )\n *\n * @value [Number] The number to format\n *\n * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter\n *\n * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator\n *\n * @properties [Object] containing relative time plural message.\n *\n * Format relative time.\n */\nvar relativeTimeFormat = function( value, numberFormatter, pluralGenerator, properties ) {\n\n\tvar relativeTime,\n\t\tmessage = properties[ \"relative-type-\" + value ];\n\n\tif ( message ) {\n\t\treturn message;\n\t}\n\n\trelativeTime = value <= 0 ? properties[ \"relativeTime-type-past\" ] :\n\t\tproperties[ \"relativeTime-type-future\" ];\n\n\tvalue = Math.abs( value );\n\n\tmessage = relativeTime[ \"relativeTimePattern-count-\" + pluralGenerator( value ) ];\n\treturn formatMessage( message, [ numberFormatter( value ) ] );\n};\n\n\n\n\nvar relativeTimeFormatterFn = function( numberFormatter, pluralGenerator, properties ) {\n\treturn function relativeTimeFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn relativeTimeFormat( value, numberFormatter, pluralGenerator, properties );\n\t};\n\n};\n\n\n\n\n/**\n * properties( unit, cldr, options )\n *\n * @unit [String] eg. \"day\", \"week\", \"month\", etc.\n *\n * @cldr [Cldr instance].\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Return relative time properties.\n */\nvar relativeTimeProperties = function( unit, cldr, options ) {\n\n\tvar form = options.form,\n\t\traw, properties, key, match;\n\n\tif ( form ) {\n\t\tunit = unit + \"-\" + form;\n\t}\n\n\traw = cldr.main( [ \"dates\", \"fields\", unit ] );\n\tproperties = {\n\t\t\"relativeTime-type-future\": raw[ \"relativeTime-type-future\" ],\n\t\t\"relativeTime-type-past\": raw[ \"relativeTime-type-past\" ]\n\t};\n\tfor ( key in raw ) {\n\t\tif ( raw.hasOwnProperty( key ) ) {\n\t\t\tmatch = /relative-type-(-?[0-9]+)/.exec( key );\n\t\t\tif ( match ) {\n\t\t\t\tproperties[ key ] = raw[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn properties;\n};\n\n\n\n\n/**\n * .formatRelativeTime( value, unit [, options] )\n *\n * @value [Number] The number of unit to format.\n *\n * @unit [String] see .relativeTimeFormatter() for details.\n *\n * @options [Object] see .relativeTimeFormatter() for details.\n *\n * Formats a relative time according to the given unit, options, and the default/instance locale.\n */\nGlobalize.formatRelativeTime =\nGlobalize.prototype.formatRelativeTime = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.relativeTimeFormatter( unit, options )( value );\n};\n\n/**\n * .relativeTimeFormatter( unit [, options ])\n *\n * @unit [String] String value indicating the unit to be formatted. eg. \"day\", \"week\", \"month\", etc.\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Returns a function that formats a relative time according to the given unit, options, and the\n * default/instance locale.\n */\nGlobalize.relativeTimeFormatter =\nGlobalize.prototype.relativeTimeFormatter = function( unit, options ) {\n\tvar args, cldr, numberFormatter, pluralGenerator, properties, returnFn;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\n\tvalidateDefaultLocale( cldr );\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tproperties = relativeTimeProperties( unit, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\tnumberFormatter = this.numberFormatter( options );\n\tpluralGenerator = this.pluralGenerator();\n\n\treturnFn = relativeTimeFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, unitProperies )\n *\n * @value [Number]\n *\n * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter.\n *\n * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator.\n *\n * @unitProperies [Object]: localized unit data from cldr.\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n *\n * OBS:\n *\n * Unit Sequences are not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences\n *\n * Duration Unit (for composed time unit durations) is not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit\n */\nvar unitFormat = function( value, numberFormatter, pluralGenerator, unitProperties ) {\n\tvar compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties,\n\t\tformattedValue, divisor, divisorProperties, message, pluralValue, oneProperty;\n\n\tunitProperties = unitProperties.unitProperties;\n\tformattedValue = numberFormatter( value );\n\tpluralValue = pluralGenerator( value );\n\n\t// computed compound unit, eg. \"megabyte-per-second\".\n\tif ( unitProperties instanceof Array ) {\n\t\tdividendProperties = unitProperties[ 0 ];\n\t\tdivisorProperties = unitProperties[ 1 ];\n\t\toneProperty = divisorProperties.hasOwnProperty( \"one\" ) ? \"one\" : \"other\";\n\n\t\tdividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] );\n\t\tdivisor = formatMessage( divisorProperties[ oneProperty ], [ \"\" ] ).trim();\n\n\t\treturn formatMessage( compoundUnitPattern, [ dividend, divisor ] );\n\t}\n\n\tmessage = unitProperties[ pluralValue ];\n\n\treturn formatMessage( message, [ formattedValue ] );\n};\n\n\n\n\nvar unitFormatterFn = function( numberFormatter, pluralGenerator, unitProperties ) {\n\treturn function unitFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn unitFormat( value, numberFormatter, pluralGenerator, unitProperties );\n\t};\n\n};\n\n\n\n\n/**\n * categories()\n *\n * Return all unit categories.\n */\nvar unitCategories = [ \"acceleration\", \"angle\", \"area\", \"digital\", \"duration\", \"length\", \"mass\", \"power\",\n\"pressure\", \"speed\", \"temperature\", \"volume\" ];\n\n\n\n\nfunction stripPluralGarbage( data ) {\n\tvar aux, pluralCount;\n\n\tif ( data ) {\n\t\taux = {};\n\t\tfor ( pluralCount in data ) {\n\t\t\taux[ pluralCount.replace( /unitPattern-count-/, \"\" ) ] = data[ pluralCount ];\n\t\t}\n\t}\n\n\treturn aux;\n}\n\n/**\n * get( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n *\n * Return the plural map of a unit, eg: \"second\"\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" }\n * }\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Uses the precomputed form of a compound-unit if available, eg: \"mile-per-hour\"\n * { \"displayName\": \"miles per hour\",\n * \"unitPattern-count-one\": \"{0} mile per hour\",\n * \"unitPattern-count-other\": \"{0} miles per hour\"\n * },\n *\n * Also supports \"/\" instead of \"-per-\", eg. \"foot/second\", using the precomputed form if\n * available.\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Or undefined in case the unit (or a unit of the compound-unit) doesn't exist.\n */\nvar get = function( unit, form, cldr ) {\n\tvar ret;\n\n\t// Ensure that we get the 'precomputed' form, if present.\n\tunit = unit.replace( /\\//, \"-per-\" );\n\n\t// Get unit or -unit (eg. \"duration-second\").\n\t[ \"\" ].concat( unitCategories ).some(function( category ) {\n\t\treturn ret = cldr.main([\n\t\t\t\"units\",\n\t\t\tform,\n\t\t\tcategory.length ? category + \"-\" + unit : unit\n\t\t]);\n\t});\n\n\t// Rename keys s/unitPattern-count-//g.\n\tret = stripPluralGarbage( ret );\n\n\t// Compound Unit, eg. \"foot-per-second\" or \"foot/second\".\n\tif ( !ret && ( /-per-/ ).test( unit ) ) {\n\n\t\t// \"Some units already have 'precomputed' forms, such as kilometer-per-hour;\n\t\t// where such units exist, they should be used in preference\" UTS#35.\n\t\t// Note that precomputed form has already been handled above (!ret).\n\n\t\t// Get both recursively.\n\t\tunit = unit.split( \"-per-\" );\n\t\tret = unit.map(function( unit ) {\n\t\t\treturn get( unit, form, cldr );\n\t\t});\n\t\tif ( !ret[ 0 ] || !ret[ 1 ] ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn ret;\n};\n\nvar unitGet = get;\n\n\n\n\n/**\n * properties( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n */\nvar unitProperties = function( unit, form, cldr ) {\n\tvar compoundUnitPattern, unitProperties;\n\n\tcompoundUnitPattern = cldr.main( [ \"units\", form, \"per/compoundUnitPattern\" ] );\n\tunitProperties = unitGet( unit, form, cldr );\n\n\treturn {\n\t\tcompoundUnitPattern: compoundUnitPattern,\n\t\tunitProperties: unitProperties\n\t};\n};\n\n\n\n\n/**\n * Globalize.formatUnit( value, unit, options )\n *\n * @value [Number]\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n */\nGlobalize.formatUnit =\nGlobalize.prototype.formatUnit = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.unitFormatter( unit, options )( value );\n};\n\n/**\n * Globalize.unitFormatter( unit, options )\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * - numberFormatter: [Function] a number formatter function. Defaults to Globalize\n * `.numberFormatter()` for the current locale using the default options.\n */\nGlobalize.unitFormatter =\nGlobalize.prototype.unitFormatter = function( unit, options ) {\n\tvar args, form, numberFormatter, pluralGenerator, returnFn, properties;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\tform = options.form || \"long\";\n\tproperties = unitProperties( unit, form, this.cldr );\n\n\tnumberFormatter = options.numberFormatter || this.numberFormatter();\n\tpluralGenerator = this.pluralGenerator();\n\treturnFn = unitFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, this.cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n","/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n\n// Core\nmodule.exports = require( \"./globalize\" );\n\n// Extent core with the following modules\nrequire( \"./globalize/message\" );\nrequire( \"./globalize/number\" );\nrequire( \"./globalize/plural\" );\n\n// Load after globalize/number\nrequire( \"./globalize/currency\" );\nrequire( \"./globalize/date\" );\n\n// Load after globalize/number and globalize/plural\nrequire( \"./globalize/relative-time\" );\nrequire( \"./globalize/unit\" );\n"],"names":["Cldr","formatMessage","message","data","replace","name","variable","JSON","stringify","objectExtend","destination","arguments","slice","call","forEach","source","prop","createError","code","attributes","error","Error","partsPush","parts","type","value","length","push","runtimeStringify","args","_key","runtimeKey","validate","check","alwaysArray","stringOrArray","Array","isArray","validateCldr","path","options","skipBoolean","skip","some","pathRe","test","validateParameterPresence","undefined","validateParameterType","expected","validateParameterTypeLocale","isPlainObject","obj","alwaysCldr","localeOrCldr","validateLikelySubtags","cldr","once","get","Globalize","locale","this","load","apply","_alwaysArray","_createError","_formatMessage","_formatMessageToParts","lastOffset","nameIncludingBrackets","offset","filter","part","_isPlainObject","_objectExtend","_partsJoin","map","join","_partsPush","_regexpEscape","string","_runtimeBind","fn","runtimeArgs","argsStr","fnName","matches","exec","toString","functionName","hash","str","reduce","i","charCodeAt","Math","abs","generatorString","_stringPad","count","right","String","_validate","_validateCldr","_validateDefaultLocale","_validateParameterPresence","_validateParameterRange","minimum","maximum","_validateParameterTypePlainObject","_validateParameterType","formatMessageToParts","numberNumberingSystem","_numberNumberingSystem","numberPattern","_numberPattern","partsJoin","runtimeBind","stringPad","validateDefaultLocale","validateParameterTypeNumber","_validateParameterTypeNumber","validateParameterTypePlainObject","createErrorPluralModulePresence","validateParameterTypeCurrency","currencySupplementalOverride","currency","pattern","digits","fraction","fractionData","supplemental","_digits","_rounding","objectFilter","object","testRe","key","copy","currencyUnitPatterns","main","currencyNameProperties","displayNames","unitPatterns","regexpNotS","regexpNotSAndZ","currencySymbolProperties","currencySpacing","symbol","symbolEntries","regexp","style","symbolForm","unshift","symbolEntry","position","split","currencyMatch","surroundingMatch","insertBetween","charAt","currencyToPartsFormatterFn","numberToPartsFormatter","pluralGenerator","properties","formattedNumber","pluralForm","displayName","unitPattern","currencyNameFormat","validateRequiredCldr","currencyFormatter","prototype","currencyToPartsFormatter","returnFn","currencyFormatterFn","on","accounting","off","keys","indexOf","objectOmit","raw","plural","currencyParser","formatCurrency","formatCurrencyToParts","parseCurrency","createErrorUnsupportedFeature","_createErrorUnsupportedFeature","looseMatching","_looseMatching","numberNumberingSystemDigitsMap","_numberNumberingSystemDigitsMap","numberSymbol","_numberSymbol","regexpEscape","removeLiteralQuotes","_removeLiteralQuotes","validateParameterTypeString","_validateParameterTypeString","validateParameterTypeDate","Date","validateSkeletonFieldsPosMap","memo","item","objectInvert","Object","newObject","dateExpandPatternSimilarFieldsMap","field","dateExpandPatternNormalizePatternType","character","datePatternRe","stringRepeat","result","dateExpandPatternAugmentFormat","requestedSkeleton","bestMatchFormat","decimalSeparator","countOfFractionalSeconds","fractionalSecondMatch","lastSecondIdx","match","skeletonWithoutFractionalSeconds","j","bestMatchFormatParts","matchedType","matchedLength","requestedType","requestedLength","requestedSkeletonParts","normalizePatternType","expandBestMatchFormat","lastIndexOf","dateExpandPatternCompareFormats","formatA","formatB","a","b","distance","lenA","lenB","typeA","typeB","dateExpandPatternGetBestMatchPattern","askedSkeleton","availableFormats","ratedFormats","skeleton","augmentFormat","compareFormats","rate","format","sort","dateExpandPattern","dateSkeleton","timeSkeleton","getBestMatchPattern","combineDateTime","datePattern","timePattern","last","fieldsPosMap","invalidField","every","validateSkeleton","timeData","preferred","date","time","datetime","dateWeekDays","dateFirstDayOfWeek","weekData","firstDay","dateGetTimeZoneName","timeZone","metaZone","dateTimezoneHourFormatH","hourFormat","dateTimezoneHourFormatHm","hFormat","splice","runtimeCacheDataBind","dataCacheKey","ZonedDateTime","definePrivateProperty","property","defineProperty","getUntilsIndex","original","untils","index","originalTime","getTime","setWrap","offset1","getTimezoneOffset","ret","setTime","offset2","setMinutes","getMinutes","timeZoneData","offsets","isdsts","local","clone","method","utcMethod","substr","valueOf","isDST","Boolean","inspect","abbrs","toISOString","toDate","dateStartOf","unit","setMonth","setDate","setHours","setSeconds","setMilliseconds","dateSetMonth","month","originalDate","getDate","day","lastDay","getFullYear","getMonth","dateSetDate","outOfRange","low","high","dateParse","_value","tokens","amPm","daysOfYear","era","hour","hour12","timezoneOffset","year","truncateAt","token","chr","preferredTimeData","floor","setFullYear","feature","round","pow","dateLastDayOfMonth","getHours","max","dateParserFn","numberParser","parseProperties","tokenizerProperties","digitsRe","valid","widths","current","numeric","tokenRe","hourFormatParse","aux","isPositive","oneDigitIfLengthOne","oneOrTwoDigitsIfLengthOneOrTwo","RegExp","twoDigitsIfLengthTwo","lookup","array","standardOrDaylightTzName","genericTzName","timeZoneName","timeZoneNameRe","oneOrTwoDigitsIfLengthOne","hourFormatRe","x","lexeme","isNaN","dateTokenizer","dateDayOfWeek","getDay","dateDayOfYear","from","dateFieldsMap","dateTimezoneHourFormat","timeSeparator","formatNumber","absOffset","dateFormat","numberFormatters","dateField","preferredTime","daylightTzName","standardTzName","eras","minDays","ceil","quarters","months","days","dayPeriods","getSeconds","getMilliseconds","dateMillisecondsInDay","gmtZeroFormat","gmtFormat","optionsHasStyle","validateOptionsPreset","validateOptionsPresetEach","validateOptionsSkeleton","validateRequiredIana","loadTimeZone","json","customData","dateFormatter","dateToPartsFormatter","dateFormatterFn","pad","ianaListener","setNumberFormatterPattern","am","pm","exemplarCity","dateFormatProperties","numberFormatter","dateToPartsFormatterFn","dateParser","digitsReSource","re","populateProperties","dateTokenizerProperties","dateParseProperties","formatDate","formatDateToParts","parseDate","MessageFormat","propname","jkey","pluralFunc","formatters","lc","runtime","pluralFuncs","fmt","f","_parse","SyntaxError","found","line","column","child","parent","ctor","constructor","peg$subclass","parse","input","peg$result","peg$FAILED","peg$startRuleFunctions","start","peg$parsestart","peg$startRuleFunction","peg$c1","st","statements","peg$c2","peg$c3","peg$c4","description","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","argIdx","efmt","res","argumentIndex","elementFormat","output","peg$c11","peg$c12","peg$c13","t","s","val","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","p","peg$c19","op","pf","pluralForms","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","d","peg$c25","k","mfp","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","chars","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","h1","h2","h3","h4","fromCharCode","parseInt","peg$c60","peg$c61","peg$c62","ds","peg$c63","peg$c64","peg$c65","peg$c66","w","peg$c67","peg$c68","peg$currPos","peg$cachedPos","peg$cachedPosDetails","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computePosDetails","pos","details","startPos","endPos","ch","advance","peg$fail","peg$buildException","posDetails","cleanupExpected","expectedDescs","hex","toUpperCase","stringEscape","buildMessage","peg$parsemessageFormatPattern","s1","s2","peg$parsemessageFormatElement","peg$parsestring","peg$parseoctothorpe","s0","s3","s4","s5","s6","peg$parse_","peg$parseid","peg$parseelementFormat","peg$parsepluralFormatPattern","peg$parseselectFormatPattern","peg$parseargStylePattern","peg$parseoffsetPattern","peg$parsepluralForm","peg$parsedigits","s8","peg$parsepluralKey","peg$parseselectForm","peg$parsechars","peg$parsewhitespace","substring","peg$parsechar","peg$parsehexDigit","plurals","number","lcfunc","isOrdinal","hasOwnProperty","other","select","_stringify","o","level","funcStr","indent","_precompile","ast","tmp","r","pf_count","concat","withIntlSupport","needOther","data_copy","compile","messages","opt","lc0","compileMsg","self","msg","e","Function","ns","global","validateMessageBundle","bundle","validateMessagePresence","validateMessageType","validateParameterTypeMessageVariables","messageFormatterFn","formatter","variables","messageFormatterRuntimeBind","messageformatter","origToString","loadMessages","messageFormatter","validateParameterRange","nu","_type","numberPatternRe","numberPatternProperties","aux1","aux2","fractionPattern","integerFractionOrSignificantPattern","integerPattern","maximumFractionDigits","maximumSignificantDigits","minimumFractionDigits","minimumIntegerDigits","minimumSignificantDigits","padding","prefix","primaryGroupingSize","roundIncrement","scientificNotation","secondaryGroupingSize","significantPattern","suffix","_match","minimumSignificantDigitsMatch","maximumSignificantDigitsMatch","numberSymbolName","numberSymbolMap","symbolMap","numberTruncate","NaN","numberFormatProperties","negativePattern","negativePrefix","negativeProperties","negativeSuffix","positivePattern","roundFn","getOptions","attribute","propertyIndex","incrementOrExp","exp","increment","exponent","toExponential","compact","compactType","maxExponent","compactKey","numberExponent","numberCompact","useGrouping","min","regexpCfG","regexpDashG","regexpZsG","numberParse","grammar","invertedNuDigitsMap","invertedSymbolMap","negative","prefixNSuffix","tokenizer","statement","Infinity","tokenizeNParse","objectMap","pair","numberParseProperties","decimalSymbolRe","groupingSeparatorRe","infinitySymbol","nanSymbol","nuDigitsMap","numberTokenizer","formatProperties","numberSymbolInvertedMap","localizedDigit","literal","infinity","nan","numberCompactPatternRe","numberToPrecision","precision","roundOrder","log","numberFormat","compactMap","stringToParts","compactPattern","compactProperties","divisor","numberType","digit","etc","isFinite","toFixed","numberFormatIntegerFractionDigits","atMinimum","atMaximum","numberFormatSignificantDigits","_garbage","space","currentGroupingSize","switchToSecondary","numberFormatGroupingSeparator","numberToPartsFormatterFn","numberFormatterFn","fnArgs","validateDigits","numberParserFn","formatNumberToParts","parseNumber","MakePlural","_toConsumableArray","arr","arr2","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","Parser","cond","_this","v0","m","sym","noteq","sn","num","se","x0","x1","Number","t0","_vars","vars","v","n10","n100","k0","_ref","cardinals","ordinals","categories","cardinal","ordinal","parser","buildFunction","_obj","fnToString","bind","req","cases","rules","_rules$r$trim$split","trim","_rules$r$trim$split2","cat","c","_this3","fold","body","_len","pluralGeneratorFn","language","relativeTimeFormatterFn","relativeTimeFormat","formatRelativeTime","relativeTimeFormatter","form","relativeTimeProperties","unitFormatterFn","unitProperties","dividend","dividendProperties","formattedValue","divisorProperties","pluralValue","oneProperty","compoundUnitPattern","unitFormat","unitCategories","category","pluralCount","stripPluralGarbage","unitGet","formatUnit","unitFormatter","module","exports"],"sourceRoot":""}